getfem-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Getfem-commits] r5042 - in /trunk/getfem: interface/src/gf_asm.cc src/g


From: Yves . Renard
Subject: [Getfem-commits] r5042 - in /trunk/getfem: interface/src/gf_asm.cc src/getfem_generic_assembly.cc
Date: Tue, 14 Jul 2015 08:13:34 -0000

Author: renard
Date: Tue Jul 14 10:13:32 2015
New Revision: 5042

URL: http://svn.gna.org/viewcvs/getfem?rev=5042&view=rev
Log:
Fix a bug in simplification of the derivative of quadratic functions and 
modifying asm_expression_analysis

Modified:
    trunk/getfem/interface/src/gf_asm.cc
    trunk/getfem/src/getfem_generic_assembly.cc

Modified: trunk/getfem/interface/src/gf_asm.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/interface/src/gf_asm.cc?rev=5042&r1=5041&r2=5042&view=diff
==============================================================================
--- trunk/getfem/interface/src/gf_asm.cc        (original)
+++ trunk/getfem/interface/src/gf_asm.cc        Tue Jul 14 10:13:32 2015
@@ -510,7 +510,9 @@
 
 static void do_expression_analysis(mexargs_in& in) {
 
+  getfem::mesh *mesh = in.pop().to_mesh();
   std::string expr = in.pop().to_string();
+  size_type der_order = in.pop().to_integer(0, 2);
   getfem::ga_workspace workspace1;
   getfem::model dummy_md;
   bool with_model = in.remaining() && in.front().is_model();
@@ -556,8 +558,11 @@
     }
   }
 
-  workspace.add_expression(expr, getfem::ga_workspace::dummy_mim,
-                                 getfem::ga_workspace::dummy_region, 0);
+  getfem::mesh_im dummy_mim(*mesh);
+
+  workspace.add_expression(expr, dummy_mim,
+                                 getfem::ga_workspace::dummy_region,
+                                 der_order);
   workspace.print(cout);
 }
 
@@ -1174,11 +1179,11 @@
        );
 
 
-    /address@hidden ('expression analysis', @str expression, address@hidden 
model,] address@hidden varname, @int is_variable[, address@hidden mf, @tmimd 
mimd}]], ...)
+    /address@hidden ('expression analysis', @tm mesh, @str expression [, 
der_order] [, @tmodel model] [, @str varname, @int is_variable[, address@hidden 
mf, @tmimd mimd}], ...])
       Analyse a high-level generic assembly expression and print
       information about the provided address@hidden/
     sub_command
-      ("expression analysis", 2, -1, 0, 0,
+      ("expression analysis", 3, -1, 0, 0,
        do_expression_analysis(in);
        );
 

Modified: trunk/getfem/src/getfem_generic_assembly.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_generic_assembly.cc?rev=5042&r1=5041&r2=5042&view=diff
==============================================================================
--- trunk/getfem/src/getfem_generic_assembly.cc (original)
+++ trunk/getfem/src/getfem_generic_assembly.cc Tue Jul 14 10:13:32 2015
@@ -5596,10 +5596,14 @@
           for (size_type i = c_size; i < size1.size(); ++i)
             if (size1[i] != 1) compatible = false;
 
-          if (!compatible)
+          if (!compatible) {
+            // cout << "child0 = "; ga_print_node(child0, cout); cout << endl;
+            // cout << "child1 = "; ga_print_node(child1, cout); cout << endl;
             ga_throw_error(expr, pnode->pos, "Addition or subtraction of "
                            "expressions of different sizes: "
                            << size0 << " != " << size1);
+            
+          }
 
           if (child0->test_function_type || child1->test_function_type) {
             if (child0->test_function_type != child1->test_function_type ||
@@ -7319,7 +7323,7 @@
       } else ok = false;
     }
 
-    //  cout << "analyzing factor : " <<  ga_tree_to_string(factor) << endl;
+    // cout << "analyzing factor : " <<  ga_tree_to_string(factor) << endl;
     // cout << "ok = " << int(ok) << endl;
     // cout << "colon_pnode = " << colon_pnode << endl;
 
@@ -7853,10 +7857,8 @@
         std::string name = child0->name;
         ga_predef_function_tab::iterator it = PREDEF_FUNCTIONS.find(name);
         const ga_predef_function &F = it->second;
-      
+
         if (F.nbargs == 1) {
-          // TODO: if the function is affine, extend it in the tree
-          //       (especially for sqr ...)
           switch (F.dtype) {
           case 0:
             GMM_ASSERT1(false, "Cannot derive function " << child0->name
@@ -7898,6 +7900,7 @@
                   pnode_cte->node_type = GA_NODE_CONSTANT;
                   pnode_cte->t = pnode->t;
                   std::fill(pnode_cte->t.begin(), pnode_cte->t.end(), b);
+                  pnode = pnode->parent;
                 }
               }
             }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]