getfem-commits
[Top][All Lists]
Advanced

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

[Getfem-commits] r4730 - in /trunk/getfem/interface/src: gf_asm.cc gf_me


From: logari81
Subject: [Getfem-commits] r4730 - in /trunk/getfem/interface/src: gf_asm.cc gf_mesh_im_data_get.cc gf_mesh_im_data_set.cc
Date: Mon, 21 Jul 2014 21:56:04 -0000

Author: logari81
Date: Mon Jul 21 23:56:03 2014
New Revision: 4730

URL: http://svn.gna.org/viewcvs/getfem?rev=4730&view=rev
Log:
minor improvements in the im_data interface for python/matlab

Modified:
    trunk/getfem/interface/src/gf_asm.cc
    trunk/getfem/interface/src/gf_mesh_im_data_get.cc
    trunk/getfem/interface/src/gf_mesh_im_data_set.cc

Modified: trunk/getfem/interface/src/gf_asm.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/interface/src/gf_asm.cc?rev=4730&r1=4729&r2=4730&view=diff
==============================================================================
--- trunk/getfem/interface/src/gf_asm.cc        (original)
+++ trunk/getfem/interface/src/gf_asm.cc        Mon Jul 21 23:56:03 2014
@@ -423,8 +423,11 @@
     std::string varname = in.pop().to_string();
     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()) {
       mf = in.pop().to_const_mesh_fem();
+    } else if (in.front().is_mesh_im_data()) {
+      mimd = in.pop().to_const_mesh_im_data();
     }
     darray U = in.pop().to_darray();
     GMM_ASSERT1(vectors.find(varname) == vectors.end(),
@@ -432,19 +435,23 @@
     gmm::resize(vectors[varname], U.size());
     gmm::copy(U, vectors[varname]);
     if (is_cte) {
-      if (!mf)
+      if (mf)
+        workspace.add_fem_constant(varname, *mf, vectors[varname]);
+      else if (mimd)
+        workspace.add_im_data(varname, *mimd, vectors[varname]);
+      else
         workspace.add_fixed_size_constant(varname, vectors[varname]);
-      else
-        workspace.add_fem_constant(varname, *mf, vectors[varname]);
     } else {
-      if (!mf) {
+      if (mf) {
+        gmm::sub_interval I(nbdof, mf->nb_dof());
+        nbdof += mf->nb_dof();
+        workspace.add_fem_variable(varname, *mf, I, vectors[varname]);
+      }  else if (mimd) {
+        THROW_BADARG("Data defined on integration points can not be a 
variable");
+      }  else {
         gmm::sub_interval I(nbdof, U.size());
         nbdof += U.size();
         workspace.add_fixed_size_variable(varname, I, vectors[varname]);
-      }  else {
-        gmm::sub_interval I(nbdof, mf->nb_dof());
-        nbdof += mf->nb_dof();
-        workspace.add_fem_variable(varname, *mf, I, vectors[varname]);
       }
     }
   }
@@ -1044,14 +1051,14 @@
        );
 
 
-    /address@hidden @CELL{...} = ('generic', @tmim mim, @int order, @str 
expression, @int region, address@hidden varname, @int is_variable[, @tmf 
mesh_fem], value], ...)
+    /address@hidden @CELL{...} = ('generic', @tmim mim, @int order, @str 
expression, @int region, address@hidden varname, @int is_variable[, 
address@hidden mf, @tmimd mimd}], value], ...)
       High-level generic assembly procedure for volumic assembly.
 
       Performs the generic assembly of `expression` with the integration
       method `mim` on the mesh region of index `region` (-1 means all 
-      the element of the mesh). The smae mesh should be shared by
-      the integration method and all the finite element methods
-      corresponding to the variables.
+      the element of the mesh). The same mesh should be shared by
+      the integration method and all the finite element methods or
+      mesh_im_data corresponding to the variables.
 
       `order` indicates either that the (scalar) potential
       (order = 0) or the (vector) residual (order = 1) or the
@@ -1061,7 +1068,8 @@
       region number. For each variable/constant, first the variable/constant
       name should be given (as it is referred in the assembly string), then
       1 if it is a variable or 0 for a constant, then the finite element
-      method if it is a fem variable/constant, and the vector representing
+      method if it is a fem variable/constant or the mesh_im_data if it is
+      data defined on integration points, and the vector representing
       the value of the variable/constant. It is possible to give an arbitrary
       number of variable/constant. The difference between a variable and a
       constant is that automatic differentiation is done with respect to

Modified: trunk/getfem/interface/src/gf_mesh_im_data_get.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/interface/src/gf_mesh_im_data_get.cc?rev=4730&r1=4729&r2=4730&view=diff
==============================================================================
--- trunk/getfem/interface/src/gf_mesh_im_data_get.cc   (original)
+++ trunk/getfem/interface/src/gf_mesh_im_data_get.cc   Mon Jul 21 23:56:03 2014
@@ -90,11 +90,21 @@
        out.pop().from_integer(int(mimd->nb_filtered_index()));
        );
 
-    /address@hidden ('tensor_size')
+    /address@hidden ('nb tensor elements')
       Output the size of the stored data (per integration point).
     @*/
     sub_command
-      ("tensor_size", 0, 0, 0, 1,
+      ("nb tensor elements", 0, 0, 0, 1,
+       if (mimd->tensor_size().size()) {
+         out.pop().from_integer(int(mimd->nb_tensor_elem()));
+       }
+       );
+
+    /address@hidden ('tensor size')
+      Output the size of the stored data (per integration point).
+    @*/
+    sub_command
+      ("tensor size", 0, 0, 0, 1,
        if (mimd->tensor_size().size()) {
          iarray oidx = 
out.pop().create_iarray_h(unsigned(mimd->tensor_size().size()));
          std::copy(mimd->tensor_size().begin(),

Modified: trunk/getfem/interface/src/gf_mesh_im_data_set.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/interface/src/gf_mesh_im_data_set.cc?rev=4730&r1=4729&r2=4730&view=diff
==============================================================================
--- trunk/getfem/interface/src/gf_mesh_im_data_set.cc   (original)
+++ trunk/getfem/interface/src/gf_mesh_im_data_set.cc   Mon Jul 21 23:56:03 2014
@@ -42,8 +42,8 @@
     @*/
     size_type rnum = size_type(in.pop().to_integer());
     mimd->set_region(rnum);
-  } else if (check_cmd(cmd, "tensor_size", in, out, 1, 1, 0, 0)) {
-    /address@hidden ('tensor_size', )
+  } else if (check_cmd(cmd, "tensor size", in, out, 1, 1, 0, 0)) {
+    /address@hidden ('tensor size', )
     Set the size of the data per integration point.
     @*/
     iarray v = in.pop().to_iarray(-1);




reply via email to

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