[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 << ")";
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Getfem-commits] r4601 - in /trunk/getfem/src: getfem/getfem_omp.h getfem_fem.cc,
andriy . andreykiv <=