getfem-commits
[Top][All Lists]
Advanced

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

[Getfem-commits] r5028 - in /trunk/getfem/src: getfem_generic_assembly.c


From: andriy . andreykiv
Subject: [Getfem-commits] r5028 - in /trunk/getfem/src: getfem_generic_assembly.cc getfem_models.cc
Date: Wed, 03 Jun 2015 18:03:17 -0000

Author: andrico
Date: Wed Jun  3 20:03:17 2015
New Revision: 5028

URL: http://svn.gna.org/viewcvs/getfem?rev=5028&view=rev
Log:
 - add_external_load is called in a serial post-assembly as it's not thread safe
 - extraction of operators through singletons in generic assembly should be 
from the
   first (zero) thread, as they where added on the first thread. This access is 
thread
   safe in parallel, as it's only reading

Modified:
    trunk/getfem/src/getfem_generic_assembly.cc
    trunk/getfem/src/getfem_models.cc

Modified: trunk/getfem/src/getfem_generic_assembly.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_generic_assembly.cc?rev=5028&r1=5027&r2=5028&view=diff
==============================================================================
--- trunk/getfem/src/getfem_generic_assembly.cc (original)
+++ trunk/getfem/src/getfem_generic_assembly.cc Wed Jun  3 20:03:17 2015
@@ -5238,7 +5238,7 @@
       return 2;
 
     ga_predef_operator_tab &PREDEF_OPERATORS
-      = dal::singleton<ga_predef_operator_tab>::instance();
+      = dal::singleton<ga_predef_operator_tab>::instance(0);
     ga_predef_function_tab::const_iterator it=PREDEF_FUNCTIONS.find(name);
     if (it != PREDEF_FUNCTIONS.end())
       return 1;
@@ -6316,7 +6316,7 @@
         }
 
         ga_predef_operator_tab &PREDEF_OPERATORS
-          = dal::singleton<ga_predef_operator_tab>::instance();
+          = dal::singleton<ga_predef_operator_tab>::instance(0);
         ga_predef_function_tab::const_iterator it=PREDEF_FUNCTIONS.find(name);
         if (it != PREDEF_FUNCTIONS.end()) {
           // Predefined function found
@@ -6725,7 +6725,7 @@
                         "operators should only be scalar, vector or matrices");
         }
         ga_predef_operator_tab &PREDEF_OPERATORS
-          = dal::singleton<ga_predef_operator_tab>::instance();
+          = dal::singleton<ga_predef_operator_tab>::instance(0);
         ga_predef_operator_tab::T::iterator it
           = PREDEF_OPERATORS.tab.find(child0->name);
         const ga_nonlinear_operator &OP = *(it->second);
@@ -9223,7 +9223,7 @@
       } else if (child0->node_type == GA_NODE_OPERATOR) {
 
         ga_predef_operator_tab &PREDEF_OPERATORS
-          = dal::singleton<ga_predef_operator_tab>::instance();
+          = dal::singleton<ga_predef_operator_tab>::instance(0);
         ga_predef_operator_tab::T::iterator it
           = PREDEF_OPERATORS.tab.find(child0->name);
         const ga_nonlinear_operator &OP = *(it->second);

Modified: trunk/getfem/src/getfem_models.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_models.cc?rev=5028&r1=5027&r2=5028&view=diff
==============================================================================
--- trunk/getfem/src/getfem_models.cc   (original)
+++ trunk/getfem/src/getfem_models.cc   Wed Jun  3 20:03:17 2015
@@ -4003,9 +4003,21 @@
         asm_homogeneous_source_term(vecl[0], mim, mf_u, A, rg);
 
       if (dl.size() > 1) gmm::add(md.real_variable(dl[1]), vecl[0]);
-
+    }
+
+    void real_post_assembly_in_serial(const model &md, size_type ib,
+                                      const model::varnamelist &vl,
+                                      const model::varnamelist &dl,
+                                      const model::mimlist &/* mims */,
+                                      model::real_matlist &/*matl*/,
+                                      model::real_veclist &vecl,
+                                      model::real_veclist &,
+                                      size_type /*region*/,
+                                      build_version) const override
+    {
       md.add_external_load(ib, gmm::vect_norm1(vecl[0]));
     }
+
 
     virtual void asm_complex_tangent_terms(const model &md, size_type ib,
                                            const model::varnamelist &vl,
@@ -4042,9 +4054,21 @@
         asm_homogeneous_source_term(vecl[0], mim, mf_u, A, rg);
 
       if (dl.size() > 1) gmm::add(md.complex_variable(dl[1]), vecl[0]);
-
+    }
+
+    void complex_post_assembly_in_serial(const model &md,
+                                         size_type ib,
+                                         const model::varnamelist &,
+                                         const model::varnamelist &,
+                                         const model::mimlist &,
+                                         model::complex_matlist &,
+                                         model::complex_veclist &vecl,
+                                         model::complex_veclist &,
+                                         size_type, build_version) const 
override
+    {
       md.add_external_load(ib, gmm::vect_norm1(vecl[0]));
     }
+
 
 
     source_term_brick(void) {




reply via email to

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