getfem-commits
[Top][All Lists]
Advanced

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

[Getfem-commits] r5437 - in /trunk/getfem: ./ contrib/opt_assembly/ src/


From: Yves . Renard
Subject: [Getfem-commits] r5437 - in /trunk/getfem: ./ contrib/opt_assembly/ src/ src/gmm/
Date: Sun, 23 Oct 2016 20:07:54 -0000

Author: renard
Date: Sun Oct 23 22:07:52 2016
New Revision: 5437

URL: http://svn.gna.org/viewcvs/getfem?rev=5437&view=rev
Log:
minor changes

Modified:
    trunk/getfem/configure.ac
    trunk/getfem/contrib/opt_assembly/opt_assembly.cc
    trunk/getfem/src/getfem_generic_assembly.cc
    trunk/getfem/src/gmm/gmm_blas_interface.h

Modified: trunk/getfem/configure.ac
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/configure.ac?rev=5437&r1=5436&r2=5437&view=diff
==============================================================================
--- trunk/getfem/configure.ac   (original)
+++ trunk/getfem/configure.ac   Sun Oct 23 22:07:52 2016
@@ -126,6 +126,7 @@
        AC_CHECK_CXX_FLAG([$with_optimization],CXXFLAGS)
        AC_CHECK_CXX_FLAG([-Wall -W],CXXFLAGS)
        AC_CHECK_CXX_FLAG([-fmessage-length=0],CXXFLAGS)
+       AC_CHECK_CXX_FLAG([-fvisibility-inlines-hidden],CXXFLAGS)
        AC_CHECK_CXX_FLAG([-ftemplate-depth-100],CXXFLAGS)
        AC_CHECK_CXX_FLAG([-std=c++11], 
CXXFLAGS,[AC_CHECK_CXX_FLAG([-std=c++0x],CXXFLAGS,[AC_MSG_ERROR([g++ do not 
support option -std=c++11. Update g++ to at least release 4.8.1.])] )])
        AC_CHECK_CXX_FLAG([-fPIC],CXXFLAGS)

Modified: trunk/getfem/contrib/opt_assembly/opt_assembly.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/contrib/opt_assembly/opt_assembly.cc?rev=5437&r1=5436&r2=5437&view=diff
==============================================================================
--- trunk/getfem/contrib/opt_assembly/opt_assembly.cc   (original)
+++ trunk/getfem/contrib/opt_assembly/opt_assembly.cc   Sun Oct 23 22:07:52 2016
@@ -125,6 +125,12 @@
   scalar_type norm_error = gmm::vect_norminf(V);                        \
   cout << "Error : " << norm_error << endl;
 
+#define VEC_TEST_3(title, ndof, expr, mim_, region)                    \
+  cout << "\n" << title << endl;                                        \
+  ch.init(); ch.tic(); workspace.clear_expressions();                  \
+  workspace.add_expression(expr, mim_, region);                         \
+  workspace.assembly(1); ch.toc();                                     \
+  cout << "Elapsed time for new assembly " << ch.elapsed() << endl;
 
 #define MAT_TEST_1(title, ndof1, ndof2, expr, mim_, I1_, I2_, old_asm)  \
   cout << "\n" << title << endl;                                       \
@@ -257,8 +263,13 @@
               Iu, getfem::asm_source_term(V, mim, mf_u, mf_u, U));
     
   }
-
+  
   if (all || only_one == 2) {
+    VEC_TEST_3("Test for nonlinear residual", ndofu, "Det(Grad_u)", mim,
+              size_type(-1));
+  }
+
+  if (all || only_one == 3) {
     
     {VEC_TEST_1("Test for Neumann term", ndofu, "u.Test_u",
                mim, NEUMANN_BOUNDARY_NUM,
@@ -284,7 +295,7 @@
                                                     A, NEUMANN_BOUNDARY_NUM));}
   }
   
-  if (all || only_one == 3) {
+  if (all || only_one == 4) {
     {VEC_TEST_1("Test for Neumann term with reduced fem", ndofchi,
                "p*Test_chi", mim, DIRICHLET_BOUNDARY_NUM,
                Ichi, getfem::asm_source_term(V, mim, mf_chi, mf_p,
@@ -297,17 +308,17 @@
   
  
   
-  if (all || select || only_one == 4) {
+  if (all || select || only_one == 5) {
     MAT_TEST_1("Test for scalar Mass matrix", ndofp, ndofp, "Test_p.Test2_p",
               mim, Ip, Ip,  getfem::asm_mass_matrix(K, mim, mf_p));
   }
  
-  if (all || select || only_one == 5) {
+  if (all || select || only_one == 6) {
     MAT_TEST_1("Test for vector Mass matrix", ndofu, ndofu, "Test_u.Test2_u",
               mim, Iu, Iu,  getfem::asm_mass_matrix(K, mim, mf_u));
   }
 
-  if (all || select || only_one == 6) {
+  if (all || select || only_one == 7) {
     MAT_TEST_1("Test for Laplacian stiffness matrix", ndofp, ndofp,
               "Grad_Test_p:Grad_Test2_p", mim2, Ip, Ip,
               getfem::asm_stiffness_matrix_for_homogeneous_laplacian
@@ -341,7 +352,7 @@
     }
   }
   
-  if (all || select || only_one == 7) {
+  if (all || select || only_one == 8) {
     base_vector lambda(1); lambda[0] = 3.0;
     workspace.add_fixed_size_constant("lambda", lambda);
     base_vector mu(1); mu[0] = 2.0;
@@ -372,7 +383,7 @@
     //           "+ mu*(Grad_Test_u'+Grad_Test_u):Grad_Test2_u",
     //           mim2, Iu, Iu);
     
-    if (N == 2 && (all || only_one == 8)) {
+    if (N == 2 && (all || only_one == 9)) {
       MAT_TEST_2(ndofu,ndofu,"lambda*Trace(Grad_Test_u)*Trace(Grad_Test2_u) "
                 "+mu*(Grad_Test_u'(:,1)"
                 "+Grad_Test_u(:,1)):Grad_Test2_u(:,1)"
@@ -385,7 +396,7 @@
                 "+mu*(Grad_Test_u'(2,:)"
                 "+Grad_Test_u(2,:)):Grad_Test2_u(2,:) ", mim2, Iu, Iu);
     }
-    if (N == 3 && (all || only_one == 9)) {
+    if (N == 3 && (all || only_one == 10)) {
       MAT_TEST_2(ndofu,ndofu,"lambda*Trace(Grad_Test_u)*Trace(Grad_Test2_u) "
                 "+mu*(Grad_Test_u'(:,1)"
                 "+Grad_Test_u(:,1)):Grad_Test2_u(:,1)"
@@ -405,7 +416,7 @@
     
   }
   
-  if (all || select || only_one == 10) {
+  if (all || select || only_one == 11) {
     base_vector lambda2(ndofp, 3.0);
     workspace.add_fem_constant("lambda2", mf_p, lambda2);
     base_vector mu2(ndofp, 2.0);
@@ -499,25 +510,25 @@
   // Laplacian            : 0.55 | 0.88 | 0.10 | 0.16 | 0.25 | 0.08 | 0.03 |
   // Homogeneous elas     : 0.91 | 2.06 | 0.23 | 0.30 | 0.24 | 0.07 | 0.08 |
   // Non-homogeneous elast: 1.10 | 2.43 | 0.26 | 0.32 | 0.24 | 0.08 | 0.08 |
-  // test_new_assembly(3, 36, 1);
+  test_new_assembly(3, 36, 1);
   // Mass (scalar)        : 0.83 | 0.97 |
   // Mass (vector)        : 1.78 | 1.85 | 0.34 | 0.54 | 0.31 | 0.15 | 0.12 |
   // Laplacian            : 1.01 | 1.54 | 0.10 | 0.17 | 0.24 | 0.14 | 0.06 |
   // Homogeneous elas     : 2.31 | 5.09 | 0.88 | 0.95 | 0.24 | 0.14 | 0.11 |
   // Non-homogeneous elast: 2.42 | 7.16 | 0.74 | 0.86 | 0.24 | 0.14 | 0.11 |
-  // test_new_assembly(2, 200, 2);
+  test_new_assembly(2, 200, 2);
   // Mass (scalar)        : 0.29 | 0.25 |
   // Mass (vector)        : 0.58 | 0.55 | 0.14 | 0.22 | 0.09 | 0.04 | 0.01 |
   // Laplacian            : 0.28 | 0.42 | 0.06 | 0.10 | 0.07 | 0.03 | 0.03 |
   // Homogeneous elas     : 0.74 | 1.50 | 0.22 | 0.25 | 0.07 | 0.02 | 0.11 |
   // Non-homogeneous elast: 0.86 | 2.63 | 0.23 | 0.28 | 0.07 | 0.02 | 0.11 |
-  // test_new_assembly(3, 18, 2);
+  test_new_assembly(3, 18, 2);
   // Mass (scalar)        : 0.42 | 0.30 |
   // Mass (vector)        : 2.12 | 1.14 | 0.27 | 0.63 | 0.06 | 0.02 | 0.27 |
   // Laplacian            : 0.38 | 0.66 | 0.16 | 0.17 | 0.05 | 0.02 | 0.02 |
   // Homogeneous elas     : 3.09 | 4.14 | 1.53 | 1.72 | 0.05 | 0.02 | 0.35 |
   // Non-homogeneous elast: 3.11 | 9.92 | 1.48 | 1.68 | 0.05 | 0.02 | 0.37 |
-  // test_new_assembly(3, 9, 4);
+  test_new_assembly(3, 9, 4);
   // Mass (scalar)        : 0.79 | 0.38 |
   // Mass (vector)        : 6.91 | 1.60 | 0.65 | 1.77 | 0.02 | .005 | 0.21 |
   // Laplacian            : 0.91 | 0.89 | 0.32 | 0.43 | 0.02 | .005 | 0.07 |

Modified: trunk/getfem/src/getfem_generic_assembly.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_generic_assembly.cc?rev=5437&r1=5436&r2=5437&view=diff
==============================================================================
--- trunk/getfem/src/getfem_generic_assembly.cc (original)
+++ trunk/getfem/src/getfem_generic_assembly.cc Sun Oct 23 22:07:52 2016
@@ -19,7 +19,7 @@
 
 ===========================================================================*/
 
-#include <array>
+
 #include "getfem/getfem_generic_assembly.h"
 #include "gmm/gmm_blas.h"
 #include <iomanip>
@@ -1050,7 +1050,7 @@
 
   static void ga_print_node(const pga_tree_node pnode,
                             std::ostream &str) {
-    auto prec = str.precision(16);
+    long prec = str.precision(16);
 
     bool is_interpolate(false), is_elementary(false);
     bool is_xfem_plus(false), is_xfem_minus(false);
@@ -3289,14 +3289,8 @@
       size_type target_dim = Z.sizes()[1];
       size_type Qmult = qdim / target_dim;
       if (Qmult == 1) {
-       auto itt = Z.begin(); auto it = t.begin(), ite = t.end();
-       size_type nd = ((t.size()) >> 2);
-       for (size_type i = 0; i < nd; ++i) {
-         *it++ = (*itt++); *it++ = (*itt++);
-         *it++ = (*itt++); *it++ = (*itt++);
-       }
-       for (; it != ite;) *it++ = (*itt++);
-        // gmm::copy(Z.as_vector(), t.as_vector());
+       std::copy(Z.begin(), Z.end(), t.begin());
+       // gmm::copy(Z.as_vector(), t.as_vector());
       } else {
         size_type ndof = Z.sizes()[0];
         GA_DEBUG_ASSERT(t.size() == Z.size() * Qmult * Qmult,
@@ -3330,13 +3324,7 @@
       size_type target_dim = Z.sizes()[1];
       size_type Qmult = qdim / target_dim;
       if (Qmult == 1) {
-       auto itt = Z.begin(); auto it = t.begin(), ite = t.end();
-       size_type nd = ((t.size()) >> 2);
-       for (size_type i = 0; i < nd; ++i) {
-         *it++ = (*itt++); *it++ = (*itt++);
-         *it++ = (*itt++); *it++ = (*itt++);
-       }
-       for (; it != ite;) *it++ = (*itt++);
+       std::copy(Z.begin(), Z.end(), t.begin());
         // gmm::copy(Z.as_vector(), t.as_vector());
       } else {
         size_type ndof = Z.sizes()[0];
@@ -4059,14 +4047,7 @@
     const base_tensor &tc1;
     virtual int exec() {
       GA_DEBUG_INFO("Instruction: tensor copy");
-      
-      auto itt = tc1.begin(); auto it = t.begin(), ite = t.end();
-      size_type nd = ((t.size()) >> 2);
-      for (size_type i = 0; i < nd; ++i) {
-       *it++ = (*itt++); *it++ = (*itt++);
-       *it++ = (*itt++); *it++ = (*itt++);
-      }
-      for (; it != ite;) *it++ = (*itt++);
+      std::copy(tc1.begin(), tc1.end(), t.begin());
       // gmm::copy(tc1.as_vector(), t.as_vector());
       return 0;
     }
@@ -11758,8 +11739,6 @@
              pga_instruction pgai = std::make_shared<ga_instruction_assignment>
                (root->tensor(), V, gis.ctx, imd);
              rmi.instructions.push_back(std::move(pgai));
-             // add the assignment instruction or delay it to the end
-             
            } else { // assembly
              
              // Addition of an assembly instruction

Modified: trunk/getfem/src/gmm/gmm_blas_interface.h
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/gmm/gmm_blas_interface.h?rev=5437&r1=5436&r2=5437&view=diff
==============================================================================
--- trunk/getfem/src/gmm/gmm_blas_interface.h   (original)
+++ trunk/getfem/src/gmm/gmm_blas_interface.h   Sun Oct 23 22:07:52 2016
@@ -172,18 +172,18 @@
     void  sger_(...); void  dger_(...); void  cgerc_(...); void  zgerc_(...); 
   }
 
-#if defined(GMM_USES_BLAS_INTERFACE)
+#if 1
 
   /* ********************************************************************* */
   /* vect_norm2(x).                                                        */
   /* ********************************************************************* */
 
-  # define nrm2_interface(param1, trans1, blas_name, base_type)            \
-  inline number_traits<base_type >::magnitude_type                         \
-    vect_norm2(param1(base_type)) {                                        \
-    GMMLAPACK_TRACE("nrm2_interface");                                     \
-    int inc(1), n(int(vect_size(x))); trans1(base_type);                  \
-    return blas_name(&n, &x[0], &inc);                                     \
+# define nrm2_interface(param1, trans1, blas_name, base_type)             \
+  inline number_traits<base_type >::magnitude_type                        \
+  vect_norm2(param1(base_type)) {                                         \
+    GMMLAPACK_TRACE("nrm2_interface");                                    \
+    int inc(1), n(int(vect_size(x))); trans1(base_type);                  \
+    return blas_name(&n, &x[0], &inc);                                    \
   }
 
 # define nrm2_p1(base_type) const std::vector<base_type > &x
@@ -198,7 +198,7 @@
   /* vect_sp(x, y).                                                        */
   /* ********************************************************************* */
 
-  # define dot_interface(param1, trans1, mult1, param2, trans2, mult2,     \
+# define dot_interface(param1, trans1, mult1, param2, trans2, mult2,      \
                          blas_name, base_type)                             \
   inline base_type vect_sp(param1(base_type), param2(base_type)) {         \
     GMMLAPACK_TRACE("dot_interface");                                      \
@@ -265,8 +265,8 @@
   /* vect_hp(x, y).                                                        */
   /* ********************************************************************* */
 
-  # define dotc_interface(param1, trans1, mult1, param2, trans2, mult2,    \
-                         blas_name, base_type)                             \
+# define dotc_interface(param1, trans1, mult1, param2, trans2, mult2,     \
+                       blas_name, base_type)                              \
   inline base_type vect_hp(param1(base_type), param2(base_type)) {         \
     GMMLAPACK_TRACE("dotc_interface");                                     \
     trans1(base_type); trans2(base_type); int inc(1), n(int(vect_size(y)));\
@@ -697,7 +697,7 @@
 
 # define gemm_interface_nt(blas_name, base_type, is_const)                 \
   inline void mult_spec(const dense_matrix<base_type > &A,                 \
-         const transposed_col_ref<is_const<base_type > *> &B_,\
+                    const transposed_col_ref<is_const<base_type > *> &B_, \
          dense_matrix<base_type > &C, r_mult) {                            \
     GMMLAPACK_TRACE("gemm_interface_nt");                                  \
     dense_matrix<base_type > &B                                            \
@@ -728,9 +728,9 @@
 
 # define gemm_interface_tt(blas_name, base_type, isA_const, isB_const)     \
   inline void mult_spec(                                                   \
-        const transposed_col_ref<isA_const <base_type > *> &A_,\
-        const transposed_col_ref<isB_const <base_type > *> &B_,\
-        dense_matrix<base_type > &C, r_mult) {                             \
+              const transposed_col_ref<isA_const <base_type > *> &A_,     \
+               const transposed_col_ref<isB_const <base_type > *> &B_,    \
+              dense_matrix<base_type > &C, r_mult) {                      \
     GMMLAPACK_TRACE("gemm_interface_tt");                                  \
     dense_matrix<base_type > &A                                            \
         = const_cast<dense_matrix<base_type > &>(*(linalg_origin(A_)));    \




reply via email to

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