getfem-commits
[Top][All Lists]
Advanced

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

[Getfem-commits] r4975 - /trunk/getfem/src/getfem_models.cc


From: Yves . Renard
Subject: [Getfem-commits] r4975 - /trunk/getfem/src/getfem_models.cc
Date: Tue, 28 Apr 2015 10:49:30 -0000

Author: renard
Date: Tue Apr 28 12:49:28 2015
New Revision: 4975

URL: http://svn.gna.org/viewcvs/getfem?rev=4975&view=rev
Log:
small fix

Modified:
    trunk/getfem/src/getfem_models.cc

Modified: trunk/getfem/src/getfem_models.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_models.cc?rev=4975&r1=4974&r2=4975&view=diff
==============================================================================
--- trunk/getfem/src/getfem_models.cc   (original)
+++ trunk/getfem/src/getfem_models.cc   Tue Apr 28 12:49:28 2015
@@ -3618,12 +3618,38 @@
       std::string test_varname
         = "Test_" + sup_previous_and_dot_to_varname(varname);
       const mesh_fem &mf_u = md.mesh_fem_of_variable(varname);
-      size_type qdim = mf_u.get_qdim();
+      size_type dim = mf_u.linked_mesh().dim(), qdim = mf_u.get_qdim(), 
qdim_data = 1;
       std::string expr;
-      if (qdim == 1)
-        expr = "(("+dataname+")*Grad_"+varname+").Grad_"+test_varname;
-      else
-        expr = "(("+dataname+")*Grad_"+varname+"):Grad_"+test_varname;
+
+      if (md.variable_exists(dataname)) {
+        const mesh_fem *mf = md.pmesh_fem_of_variable(dataname);
+        size_type n = gmm::vect_size(md.real_variable(dataname));
+        if (mf) qdim_data = mf->get_qdim() * (n / mf->nb_dof());
+        else  qdim_data = n;
+      }
+      
+      if (qdim == 1) {
+        if (qdim_data != 1) {
+          GMM_ASSERT1(qdim_data == gmm::sqr(dim),
+                      "Wrong data size for generic elliptic brick");
+          expr = 
"((Reshape("+dataname+",meshdim,meshdim))*Grad_"+varname+").Grad_"
+            + test_varname;
+        } else {
+          expr = "(("+dataname+")*Grad_"+varname+").Grad_"+test_varname;
+        }
+      } else {
+        if (qdim_data != 1) {
+          if (qdim_data == gmm::sqr(dim))
+            expr = 
"((Reshape("+dataname+",meshdim,meshdim))*Grad_"+varname+"):Grad_"
+              +test_varname;
+          else if (qdim_data == gmm::sqr(gmm::sqr(dim))) 
+            expr = 
"((Reshape("+dataname+",meshdim,meshdim,meshdim,meshdim))*Grad_"
+              +varname+"):Grad_"+test_varname;
+          else GMM_ASSERT1(false, "Wrong data size for generic elliptic 
brick");
+        } else {
+          expr = "(("+dataname+")*Grad_"+varname+"):Grad_"+test_varname;
+        }
+      }
       size_type ib = add_linear_generic_assembly_brick
         (md, mim, expr, region, true, true, "Generic elliptic", true);
       if (ib == size_type(-1))




reply via email to

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