getfem-commits
[Top][All Lists]
Advanced

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

[Getfem-commits] r4721 - in /trunk/getfem: interface/tests/matlab/ src/


From: Yves . Renard
Subject: [Getfem-commits] r4721 - in /trunk/getfem: interface/tests/matlab/ src/ src/getfem/
Date: Thu, 17 Jul 2014 15:44:09 -0000

Author: renard
Date: Thu Jul 17 17:44:08 2014
New Revision: 4721

URL: http://svn.gna.org/viewcvs/getfem?rev=4721&view=rev
Log:
fix a bug in extract_variables

Modified:
    trunk/getfem/interface/tests/matlab/demo_large_sliding_contact.m
    trunk/getfem/src/getfem/getfem_generic_assembly.h
    trunk/getfem/src/getfem_contact_and_friction_common.cc
    trunk/getfem/src/getfem_generic_assembly.cc
    trunk/getfem/src/getfem_models.cc

Modified: trunk/getfem/interface/tests/matlab/demo_large_sliding_contact.m
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/interface/tests/matlab/demo_large_sliding_contact.m?rev=4721&r1=4720&r2=4721&view=diff
==============================================================================
--- trunk/getfem/interface/tests/matlab/demo_large_sliding_contact.m    
(original)
+++ trunk/getfem/interface/tests/matlab/demo_large_sliding_contact.m    Thu Jul 
17 17:44:08 2014
@@ -19,7 +19,7 @@
 clear all;
 gf_workspace('clear all');
 
-test_case = 0; % 0 = 2D punch on a rigid obstacle
+test_case = 1; % 0 = 2D punch on a rigid obstacle
                % 1 = 2D punch on a deformable obstacle (one slave, one master)
                % 2 = 2D with two different meshes
                % 3 = 2D with multi-body and only one mesh

Modified: trunk/getfem/src/getfem/getfem_generic_assembly.h
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem/getfem_generic_assembly.h?rev=4721&r1=4720&r2=4721&view=diff
==============================================================================
--- trunk/getfem/src/getfem/getfem_generic_assembly.h   (original)
+++ trunk/getfem/src/getfem/getfem_generic_assembly.h   Thu Jul 17 17:44:08 2014
@@ -373,8 +373,9 @@
 
     bool is_constant(const std::string &name) const {
       VAR_SET::const_iterator it = variables.find(name);
-        if (it != variables.end()) return !(it->second.is_variable);
-      if (variable_group_exists(name)) return false;
+      if (it != variables.end()) return !(it->second.is_variable);
+      if (variable_group_exists(name))
+        return is_constant(first_variable_of_group(name));
       if (md && md->variable_exists(name)) return md->is_data(name);
       if (parent_workspace && parent_workspace->variable_exists(name))
         return parent_workspace->is_constant(name);

Modified: trunk/getfem/src/getfem_contact_and_friction_common.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_contact_and_friction_common.cc?rev=4721&r1=4720&r2=4721&view=diff
==============================================================================
--- trunk/getfem/src/getfem_contact_and_friction_common.cc      (original)
+++ trunk/getfem/src/getfem_contact_and_friction_common.cc      Thu Jul 17 
17:44:08 2014
@@ -1502,24 +1502,23 @@
         const contact_boundary &cb =  contact_boundaries[boundaries_ind[i]];
         const std::string &dispname_x
           =  workspace.variable_in_group(cb.dispname, m_x);
-        vars.insert(var_trans_pair(dispname_x, ""));
-
-        // if (expand_groups && workspace.variable_group_exists(cb.dispname)) {
-//           const std::vector<std::string> 
&t=workspace.variable_group(cb.dispname);
-//           for (size_type j = 0; j < t.size(); ++j)
-//             vars.insert(var_trans_pair(t[j], ""));
-//         } else vars.insert(var_trans_pair(cb.dispname, ""));
+        if (!ignore_data || !(workspace.is_constant(dispname_x)))
+          vars.insert(var_trans_pair(dispname_x, ""));
       }
 
       for (size_type i = 0; i < contact_boundaries.size(); ++i) {
         const contact_boundary &cb =  contact_boundaries[i];
         if (!(cb.slave)) {
-          if (expand_groups && workspace.variable_group_exists(cb.dispname)) {
+          if (expand_groups && workspace.variable_group_exists(cb.dispname)
+              && (!ignore_data || !(workspace.is_constant(cb.dispname)))) {
             const std::vector<std::string> &t
               = workspace.variable_group(cb.dispname);
           for (size_type j = 0; j < t.size(); ++j)
             vars.insert(var_trans_pair(t[j], interpolate_name));
-          } else vars.insert(var_trans_pair(cb.dispname, interpolate_name));
+          } else {
+            if (!ignore_data || !(workspace.is_constant(cb.dispname)))
+              vars.insert(var_trans_pair(cb.dispname, interpolate_name));
+          }
         }
       }
     }

Modified: trunk/getfem/src/getfem_generic_assembly.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_generic_assembly.cc?rev=4721&r1=4720&r2=4721&view=diff
==============================================================================
--- trunk/getfem/src/getfem_generic_assembly.cc (original)
+++ trunk/getfem/src/getfem_generic_assembly.cc Thu Jul 17 17:44:08 2014
@@ -4238,7 +4238,14 @@
                 "variables cannot be the same as a variable name");
     
     std::set<const mesh *> ms;
+    bool is_data_ = false;
     for (size_type i = 0; i < nl.size(); ++i) {
+      if (i == 0)
+        is_data_ = is_constant(nl[i]);
+      else {
+        GMM_ASSERT1(is_data_ == is_constant(nl[i]),
+                    "It is not possible to mix variables and data in a group");
+      }
       GMM_ASSERT1(variable_exists(nl[i]),
                   "All variables in a group have to exist in the model");
       const mesh_fem *mf = associated_mf(nl[i]);
@@ -6908,7 +6915,6 @@
   (ga_workspace &workspace, ga_instruction_set &gis,
    ga_instruction_set::region_mim_instructions &rmi,
    const std::string &transname, const std::string &gname) {
-    
     if (rmi.interpolate_infos[transname].groups_info.find(gname)
         == rmi.interpolate_infos[transname].groups_info.end()) {
       pga_instruction pgai = new ga_instruction_update_group_info
@@ -6960,7 +6966,8 @@
         pctx1 = &(gis.ctx);
         const std::string &intn1 = pnode->interpolate_name_test1;
         if (intn1.size()) pctx1 = &(rmi.interpolate_infos[intn1].ctx);
-        if (intn1.size() && 
workspace.variable_group_exists(pnode->name_test1)) {
+        if (intn1.size()
+            && workspace.variable_group_exists(pnode->name_test1)) {
           ensure_update_group_info_instruction(workspace, gis, rmi,
                                                intn1, pnode->name_test1);
           ga_instruction_set::variable_group_info &vgi = 
@@ -6974,7 +6981,8 @@
         pctx2 = &(gis.ctx);
         const std::string &intn2 = pnode->interpolate_name_test2;
         if (intn2.size()) pctx2 = &(rmi.interpolate_infos[intn2].ctx);
-        if (intn2.size() && 
workspace.variable_group_exists(pnode->name_test2)) {
+        if (intn2.size()
+            && workspace.variable_group_exists(pnode->name_test2)) {
           ensure_update_group_info_instruction(workspace, gis, rmi,
                                                intn2, pnode->name_test2);
           ga_instruction_set::variable_group_info &vgi = 
@@ -7864,6 +7872,7 @@
 
     std::set<std::string> interpolates_der;
     std::set<std::string> transformations;
+    // std::map<std::string, std::set<std::string> > transformations;
     ga_node_used_interpolates(pnode, transformations, interpolates_der);
     
     for (std::set<std::string>::iterator it = transformations.begin();

Modified: trunk/getfem/src/getfem_models.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_models.cc?rev=4721&r1=4720&r2=4721&view=diff
==============================================================================
--- trunk/getfem/src/getfem_models.cc   (original)
+++ trunk/getfem/src/getfem_models.cc   Thu Jul 17 17:44:08 2014
@@ -1058,7 +1058,14 @@
                 "variables cannot be the same as a variable name");
 
     std::set<const mesh *> ms;
+    bool is_data_ = false;
     for (size_type i = 0; i < nl.size(); ++i) {
+      if (i == 0)
+        is_data_ = is_data(nl[i]);
+      else {
+        GMM_ASSERT1(is_data_ == is_data(nl[i]),
+                    "It is not possible to mix variables and data in a group");
+      }
       GMM_ASSERT1(variable_exists(nl[i]),
                   "All variables in a group have to exist in the model");
       const mesh_fem *mf = pmesh_fem_of_variable(nl[i]);




reply via email to

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