getfem-commits
[Top][All Lists]
Advanced

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

[Getfem-commits] r4601 - in /trunk/getfem/src: getfem/getfem_omp.h getfe


From: andriy . andreykiv
Subject: [Getfem-commits] r4601 - in /trunk/getfem/src: getfem/getfem_omp.h getfem_fem.cc
Date: Fri, 11 Apr 2014 10:51:38 -0000

Author: andrico
Date: Fri Apr 11 12:51:38 2014
New Revision: 4601

URL: http://svn.gna.org/viewcvs/getfem?rev=4601&view=rev
Log:
- another fix of the marco
- thread safeing some static local variables in getfem_fem.cc

Modified:
    trunk/getfem/src/getfem/getfem_omp.h
    trunk/getfem/src/getfem_fem.cc

Modified: trunk/getfem/src/getfem/getfem_omp.h
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem/getfem_omp.h?rev=4601&r1=4600&r2=4601&view=diff
==============================================================================
--- trunk/getfem/src/getfem/getfem_omp.h        (original)
+++ trunk/getfem/src/getfem/getfem_omp.h        Fri Apr 11 12:51:38 2014
@@ -228,7 +228,7 @@
 
 #define DEFINE_STATIC_THREAD_LOCAL_CONSTRUCTED(Type, Var, ...) \
   static boost::thread_specific_ptr<Type> ptr_##Var; \
-  if(!ptr_##Var.get()) {ptr_##Var.reset(new Type##(__VA_ARGS__));} \
+  if(!ptr_##Var.get()) {ptr_##Var.reset(new Type(__VA_ARGS__));} \
   Type& Var=*ptr_##Var;
 
 #else
@@ -239,7 +239,7 @@
   static Type Var;
 
 #define DEFINE_STATIC_THREAD_LOCAL_CONSTRUCTED(Type, Var, ...) \
-  static Type Var##(__VA_ARGS__);
+  static Type Var(__VA_ARGS__);
 
 #endif
 

Modified: trunk/getfem/src/getfem_fem.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_fem.cc?rev=4601&r1=4600&r2=4601&view=diff
==============================================================================
--- trunk/getfem/src/getfem_fem.cc      (original)
+++ trunk/getfem/src/getfem_fem.cc      Fri Apr 11 12:51:38 2014
@@ -272,8 +272,8 @@
   typedef dal::dynamic_tree_sorted<dof_description, dof_description_comp__> 
dof_d_tab;
 
   pdof_description lagrange_dof(dim_type n) {
-    static dim_type n_old = dim_type(-2);
-    static pdof_description p_old = 0;
+    DEFINE_STATIC_THREAD_LOCAL_INITIALIZED(dim_type, n_old, dim_type(-2));
+    DEFINE_STATIC_THREAD_LOCAL_INITIALIZED(pdof_description, p_old, 0);
     if (n != n_old) {
       dof_d_tab& tab = dal::singleton<dof_d_tab>::instance();
       dof_description l;
@@ -286,8 +286,8 @@
   } 
 
   pdof_description lagrange_0_dof(dim_type n) {
-    static dim_type n_old = dim_type(-2);
-    static pdof_description p_old = 0;
+    DEFINE_STATIC_THREAD_LOCAL_INITIALIZED(dim_type, n_old, dim_type(-2));
+    DEFINE_STATIC_THREAD_LOCAL_INITIALIZED(pdof_description, p_old, 0);
     if (n != n_old) {
       dof_d_tab& tab = dal::singleton<dof_d_tab>::instance();
       dof_description l;
@@ -1511,10 +1511,10 @@
   void hermite_segment__::mat_trans(base_matrix &M,
                                    const base_matrix &G,
                                    bgeot::pgeometric_trans pgt) const {
-    static bgeot::pgeotrans_precomp pgp;
-    static bgeot::pgeometric_trans pgt_stored = 0;
-    static base_matrix K(1, 1);
-    static base_vector r(1);
+    DEFINE_STATIC_THREAD_LOCAL(bgeot::pgeotrans_precomp, pgp);
+    DEFINE_STATIC_THREAD_LOCAL_INITIALIZED(bgeot::pgeometric_trans, 
pgt_stored, 0);
+    DEFINE_STATIC_THREAD_LOCAL_CONSTRUCTED(base_matrix, K, 1, 1);
+    DEFINE_STATIC_THREAD_LOCAL_CONSTRUCTED(base_vector,r, 1);
     dim_type N = dim_type(G.nrows());
 
     if (pgt != pgt_stored) {
@@ -1576,9 +1576,10 @@
   void hermite_triangle__::mat_trans(base_matrix &M,
                                    const base_matrix &G,
                                    bgeot::pgeometric_trans pgt) const {
-    static bgeot::pgeotrans_precomp pgp;
-    static bgeot::pgeometric_trans pgt_stored = 0;
-    static base_matrix K(2, 2);
+
+    DEFINE_STATIC_THREAD_LOCAL(bgeot::pgeotrans_precomp, pgp);
+    DEFINE_STATIC_THREAD_LOCAL_INITIALIZED(bgeot::pgeometric_trans, 
pgt_stored, 0);
+    DEFINE_STATIC_THREAD_LOCAL_CONSTRUCTED(base_matrix, K, 2, 2);
     dim_type N = dim_type(G.nrows());
 
     GMM_ASSERT1(N == 2, "Sorry, this version of hermite "
@@ -1648,9 +1649,9 @@
   void hermite_tetrahedron__::mat_trans(base_matrix &M,
                                    const base_matrix &G,
                                    bgeot::pgeometric_trans pgt) const {
-    static bgeot::pgeotrans_precomp pgp;
-    static bgeot::pgeometric_trans pgt_stored = 0;
-    static base_matrix K(3, 3);
+    DEFINE_STATIC_THREAD_LOCAL(bgeot::pgeotrans_precomp, pgp);
+    DEFINE_STATIC_THREAD_LOCAL_INITIALIZED(bgeot::pgeometric_trans, 
pgt_stored, 0);
+    DEFINE_STATIC_THREAD_LOCAL_CONSTRUCTED(base_matrix, K, 3, 3);
     dim_type N = dim_type(G.nrows());
     GMM_ASSERT1(N == 3, "Sorry, this version of hermite "
                "element works only on dimension three.")
@@ -1922,10 +1923,11 @@
   void morley_triangle__::mat_trans(base_matrix &M,
                                    const base_matrix &G,
                                    bgeot::pgeometric_trans pgt) const {
-    static bgeot::pgeotrans_precomp pgp;
-    static pfem_precomp pfp;
-    static bgeot::pgeometric_trans pgt_stored = 0;
-    static base_matrix K(2, 2);
+
+    DEFINE_STATIC_THREAD_LOCAL(bgeot::pgeotrans_precomp, pgp);
+    DEFINE_STATIC_THREAD_LOCAL(pfem_precomp, pfp);
+    DEFINE_STATIC_THREAD_LOCAL_INITIALIZED(bgeot::pgeometric_trans, 
pgt_stored, 0);
+    DEFINE_STATIC_THREAD_LOCAL_CONSTRUCTED(base_matrix, K, 2, 2);
     dim_type N = dim_type(G.nrows());
     GMM_ASSERT1(N == 2, "Sorry, this version of morley "
                "element works only on dimension two.")
@@ -1936,8 +1938,7 @@
       pfp = fem_precomp(this, node_tab(0), 0);
     }
     gmm::copy(gmm::identity_matrix(), M);
-    
-    static base_matrix W(3, 6);
+    DEFINE_STATIC_THREAD_LOCAL_CONSTRUCTED(base_matrix, W, 3, 6);
     base_small_vector norient(M_PI, M_PI * M_PI);
     if (pgt->is_linear())
       { gmm::mult(G, pgp->grad(0), K); gmm::lu_inverse(K); }
@@ -1959,9 +1960,11 @@
     }
     //    cout << "W = " << W << endl; getchar();
     
-    static base_matrix A(3, 3);
-    static bgeot::base_vector w(3), coeff(3);
-    static gmm::sub_interval SUBI(3, 3), SUBJ(0, 3);
+    DEFINE_STATIC_THREAD_LOCAL_CONSTRUCTED(base_matrix, A, 3, 3);
+    DEFINE_STATIC_THREAD_LOCAL_CONSTRUCTED(base_vector, w, 3);
+    DEFINE_STATIC_THREAD_LOCAL_CONSTRUCTED(base_vector, coeff, 3);
+    DEFINE_STATIC_THREAD_LOCAL_CONSTRUCTED(gmm::sub_interval, SUBI, 3, 3);
+    DEFINE_STATIC_THREAD_LOCAL_CONSTRUCTED(gmm::sub_interval, SUBJ, 0, 3);
     gmm::copy(gmm::sub_matrix(W, SUBJ, SUBI), A);
     gmm::lu_inverse(A);
     gmm::copy(gmm::transposed(A), gmm::sub_matrix(M, SUBI));
@@ -2110,10 +2113,10 @@
   static pfem classical_fem_(const char *suffix, const char *arg, 
                             bgeot::pgeometric_trans pgt,
                             short_type k) {
-    static bgeot::pgeometric_trans pgt_last = 0;
-    static short_type k_last = short_type(-1);
-    static pfem fm_last = 0;
-    static char isuffix_last = 0;
+    DEFINE_STATIC_THREAD_LOCAL_INITIALIZED(bgeot::pgeometric_trans, pgt_last, 
0);
+    DEFINE_STATIC_THREAD_LOCAL_INITIALIZED(short_type, k_last, short_type(-1));
+    DEFINE_STATIC_THREAD_LOCAL_INITIALIZED(pfem, fm_last, 0);
+    DEFINE_STATIC_THREAD_LOCAL_INITIALIZED(char, isuffix_last, 0);
     bool found = false, isuffix = suffix[0];
 
     if (pgt_last == pgt && k_last == k && isuffix == isuffix_last)
@@ -2248,9 +2251,9 @@
   /* ******************************************************************** */
 
   pfem PK_fem(size_type n, short_type k) {
-    static pfem pf = 0;
-    static size_type d = size_type(-2);
-    static short_type r = short_type(-2);
+    DEFINE_STATIC_THREAD_LOCAL_INITIALIZED(pfem, pf, 0);
+    DEFINE_STATIC_THREAD_LOCAL_INITIALIZED(size_type, d, size_type(-2));
+    DEFINE_STATIC_THREAD_LOCAL_INITIALIZED(short_type, r, short_type(-2));
     if (d != n || r != k) {
       std::stringstream name;
       name << "FEM_PK(" << n << "," << k << ")";
@@ -2261,9 +2264,9 @@
   }
 
   pfem QK_fem(size_type n, short_type k) {
-    static pfem pf = 0;
-    static size_type d = size_type(-2);
-    static short_type r = short_type(-2);
+    DEFINE_STATIC_THREAD_LOCAL_INITIALIZED(pfem, pf, 0);
+    DEFINE_STATIC_THREAD_LOCAL_INITIALIZED(size_type, d, size_type(-2));
+    DEFINE_STATIC_THREAD_LOCAL_INITIALIZED(short_type, r, short_type(-2));
     if (d != n || r != k) {
       std::stringstream name;
       name << "FEM_QK(" << n << "," << k << ")";
@@ -2274,9 +2277,9 @@
   }
 
   pfem PK_prism_fem(size_type n, short_type k) {
-    static pfem pf = 0;
-    static size_type d = size_type(-2);
-    static short_type r = short_type(-2);
+    DEFINE_STATIC_THREAD_LOCAL_INITIALIZED(pfem, pf, 0);
+    DEFINE_STATIC_THREAD_LOCAL_INITIALIZED(size_type, d, size_type(-2));
+    DEFINE_STATIC_THREAD_LOCAL_INITIALIZED(short_type, r, short_type(-2));
     if (d != n || r != k) {
       std::stringstream name;
       name << "FEM_PK_PRISM(" << n << "," << k << ")";




reply via email to

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