getfem-commits
[Top][All Lists]
Advanced

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

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


From: logari81
Subject: [Getfem-commits] r5054 - in /trunk/getfem: interface/src/gf_asm.cc src/getfem_generic_assembly.cc
Date: Mon, 27 Jul 2015 08:01:45 -0000

Author: logari81
Date: Mon Jul 27 10:01:44 2015
New Revision: 5054

URL: http://svn.gna.org/viewcvs/getfem?rev=5054&view=rev
Log:
make the mesh argument optional in the analysis of generic assembly expressions

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=5054&r1=5053&r2=5054&view=diff
==============================================================================
--- trunk/getfem/interface/src/gf_asm.cc        (original)
+++ trunk/getfem/interface/src/gf_asm.cc        Mon Jul 27 10:01:44 2015
@@ -510,9 +510,18 @@
 
 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);
+
+  bool with_mesh = in.remaining() && in.front().is_mesh();
+  bool with_mim = !with_mesh && in.remaining() && in.front().is_mesh_im();
+
+  getfem::mesh dummy_mesh;
+  const getfem::mesh_im dummy_mim(with_mesh ? *(in.pop().to_mesh()) : 
dummy_mesh);
+  const getfem::mesh_im &mim = with_mim ? *(in.pop().to_const_mesh_im())
+                                        : dummy_mim;
+
+  size_type der_order = in.remaining() && in.front().is_integer()
+                      ? in.pop().to_integer(0, 2) : 0;
   getfem::ga_workspace workspace1;
   getfem::model dummy_md;
   bool with_model = in.remaining() && in.front().is_model();
@@ -528,12 +537,14 @@
 
   while (in.remaining()) {
     std::string varname = in.pop().to_string();
+    GMM_ASSERT1(in.remaining() && in.front().is_integer(),
+                "Expected variable or data flag after variable " << varname)
     bool is_cte(in.pop().to_integer() == 0);
     const getfem::mesh_fem *mf(0);
     const getfem::im_data *mimd(0);
-    if (in.front().is_mesh_fem())
+    if (in.remaining() && in.front().is_mesh_fem())
       mf = in.pop().to_const_mesh_fem();
-    else if (in.front().is_mesh_im_data())
+    else if (in.remaining() && in.front().is_mesh_im_data())
       mimd = in.pop().to_const_mesh_im_data();
     GMM_ASSERT1(varnames.count(varname) == 0,
                 "The same variable/constant name is repeated twice: "
@@ -558,11 +569,8 @@
     }
   }
 
-  getfem::mesh_im dummy_mim(*mesh);
-
-  workspace.add_expression(expr, dummy_mim,
-                                 getfem::ga_workspace::dummy_region,
-                                 der_order);
+  workspace.add_expression(expr, mim, getfem::ga_workspace::dummy_region,
+                           der_order);
   workspace.print(cout);
 }
 
@@ -1179,11 +1187,11 @@
        );
 
 
-    /address@hidden ('expression analysis', @tm mesh, @str expression [, 
der_order] [, @tmodel model] [, @str varname, @int is_variable[, address@hidden 
mf, @tmimd mimd}], ...])
+    /address@hidden ('expression analysis', @str expression [, address@hidden 
mesh | @tmim mim}] [, 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", 3, -1, 0, 0,
+      ("expression analysis", 1, -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=5054&r1=5053&r2=5054&view=diff
==============================================================================
--- trunk/getfem/src/getfem_generic_assembly.cc (original)
+++ trunk/getfem/src/getfem_generic_assembly.cc Mon Jul 27 10:01:44 2015
@@ -4629,8 +4629,10 @@
   }
 
   static size_type ref_elt_dim_of_mesh(const mesh &m) {
-    GMM_ASSERT1(m.convex_index().card(), "Mesh with no elements");
-    return m.trans_of_convex(m.convex_index().first())->dim();
+    if (m.convex_index().card())
+      return m.trans_of_convex(m.convex_index().first())->dim();
+    else
+      return size_type(0);
   }
 
   void ga_workspace::add_tree(ga_tree &tree, const mesh &m,




reply via email to

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