getfem-commits
[Top][All Lists]
Advanced

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

[Getfem-commits] r5375 - in /trunk/getfem: contrib/opt_assembly/ src/get


From: Yves . Renard
Subject: [Getfem-commits] r5375 - in /trunk/getfem: contrib/opt_assembly/ src/getfem/ src/gmm/
Date: Tue, 27 Sep 2016 10:48:57 -0000

Author: renard
Date: Tue Sep 27 12:48:56 2016
New Revision: 5375

URL: http://svn.gna.org/viewcvs/getfem?rev=5375&view=rev
Log:
small fixes

Modified:
    trunk/getfem/contrib/opt_assembly/opt_assembly.cc
    trunk/getfem/src/getfem/dal_tree_sorted.h
    trunk/getfem/src/gmm/gmm_blas.h
    trunk/getfem/src/gmm/gmm_vector.h

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=5375&r1=5374&r2=5375&view=diff
==============================================================================
--- trunk/getfem/contrib/opt_assembly/opt_assembly.cc   (original)
+++ trunk/getfem/contrib/opt_assembly/opt_assembly.cc   Tue Sep 27 12:48:56 2016
@@ -134,9 +134,7 @@
   cout << "Elapsed time for new assembly " << ch.elapsed() << endl;     \
   getfem::model_real_sparse_matrix K(ndof1, ndof2), K2(ndof1, ndof2);   \
   ch.init(); ch.tic(); old_asm; ch.toc();                              \
-  cout << "begin copy" << endl;                                                
\
   gmm::copy(K, K2);                                                     \
-  cout << "end copy" << endl;                                          \
   cout << "Elapsed time for old assembly " << ch.elapsed() << endl;     \
   gmm::add(gmm::scaled(gmm::sub_matrix(workspace.assembled_matrix(),    \
                                        I1_, I2_), scalar_type(-1)), K); \
@@ -423,24 +421,6 @@
 
   GMM_SET_EXCEPTION_DEBUG; // Exceptions make a memory fault, to debug.
   FE_ENABLE_EXCEPT;        // Enable floating point exception for Nan.
-
-  gmm::row_matrix<gmm::dsvector<double>> MM(15, 200000);
-  MM(1, 1) = 5.; MM(1, 1) += 5.;
-  MM(1, 3) = 2.;
-  MM(2, 2) += 5.; MM(2, 2) -= 4.999;
-  MM(2, 150000) = 6.;
-
-  cout << "MM(1, 1) = " << MM(1, 1) << endl;
-  cout << "MM(2, 2) = " << MM(2, 2) << endl;
-  cout << "nnz(MM) = " << gmm::nnz(MM) << endl;
-
-  cout << "MM = " << MM << endl;
-
-  gmm::row_matrix<gmm::dsvector<double>> MM2(15, 200000);
-  gmm::copy(MM, MM2);
-
-  cout << "MM2 = " << MM2 << endl;
-  
   
   // Mesured times for new assembly, old one, alterantive new assembly,
   // storage estimate part for the new assembly, global assembly part,
@@ -471,7 +451,7 @@
   // Mass                 : 6.90 | 1.60 | 0.65 | 1.77 | 0.01 | .005 | 0.21 |
   // Laplacian            : 0.90 | 0.89 | 0.32 | 0.43 | 0.01 | .005 | 0.07 |
   // Homogeneous elas     : 11.1 | 6.65 | 0.90 | 1.69 | 0.01 | .005 | 2.50 |
-  // Non-homogeneous elast: 11.0 | 49.1 | 0.55 | 1.48 | 0.01 | .005 | 2.45 |
+  // Non-homogeneous elast: 11.0 | 49.1 | 0.95 | 1.48 | 0.01 | .005 | 2.45 |
 
   // Conclusions :
   // Desactivation of debug test has no sensible effect.

Modified: trunk/getfem/src/getfem/dal_tree_sorted.h
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem/dal_tree_sorted.h?rev=5375&r1=5374&r2=5375&view=diff
==============================================================================
--- trunk/getfem/src/getfem/dal_tree_sorted.h   (original)
+++ trunk/getfem/src/getfem/dal_tree_sorted.h   Tue Sep 27 12:48:56 2016
@@ -50,7 +50,7 @@
   /* d'insertion ou de suppression.                                        */
   /* ********************************************************************* */
 
-  static const size_t DEPTHMAX__ = size_t(CHAR_BIT*sizeof(size_t)*3) / 2;
+  static const size_t DEPTHMAX__ = 64;
   static const size_t ST_NIL = size_t(-1);
 
   template<typename T, typename COMP = gmm::less<T>, int pks = 5>
@@ -83,7 +83,7 @@
     inline size_type father(void) const
     { return (depth<=1) ? ST_NIL : path[depth-2];}
     inline size_type index_(void) const
-    { return path[size_t(depth-1)]; }
+    { return path[(depth-1) & 63]; }
     inline short_type direction(void) const
     { return (depth==0) ? 0 : dir[depth-1];}
     inline void up(void) { if (depth > 0) depth--; }

Modified: trunk/getfem/src/gmm/gmm_blas.h
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/gmm/gmm_blas.h?rev=5375&r1=5374&r2=5375&view=diff
==============================================================================
--- trunk/getfem/src/gmm/gmm_blas.h     (original)
+++ trunk/getfem/src/gmm/gmm_blas.h     Tue Sep 27 12:48:56 2016
@@ -950,18 +950,14 @@
   void copy_mat_by_row(const L1& l1, L2& l2) {
     size_type nbr = mat_nrows(l1);
     for (size_type i = 0; i < nbr; ++i)
-      copy_vect(mat_const_row(l1, i), mat_row(l2, i),
-               typename linalg_traits<L1>::storage_type(),
-               typename linalg_traits<L2>::storage_type());
+      copy(mat_const_row(l1, i), mat_row(l2, i));
   }
 
   template <typename L1, typename L2>
   void copy_mat_by_col(const L1 &l1, L2 &l2) {
     size_type nbc = mat_ncols(l1);
     for (size_type i = 0; i < nbc; ++i) {
-      copy_vect(mat_const_col(l1, i), mat_col(l2, i),
-               typename linalg_traits<L1>::storage_type(),
-               typename linalg_traits<L2>::storage_type());
+      copy(mat_const_col(l1, i), mat_col(l2, i));
     }
   }
 

Modified: trunk/getfem/src/gmm/gmm_vector.h
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/gmm/gmm_vector.h?rev=5375&r1=5374&r2=5375&view=diff
==============================================================================
--- trunk/getfem/src/gmm/gmm_vector.h   (original)
+++ trunk/getfem/src/gmm/gmm_vector.h   Tue Sep 27 12:48:56 2016
@@ -415,10 +415,11 @@
     void rec_clean_i(void_pointer p, size_type my_depth, size_type my_mask,
                     size_type i, size_type base) {
       if (my_depth) {
+       my_mask = (my_mask >> 4);
        for (size_type k = 0; k < 16; ++k)
          if (((void_pointer *)(p))[k] && (base + (k+1)*(mask+1)) >= i)
-           rec_clean_i(((void_pointer *)(p))[k], my_depth-1, (my_mask >> 4),
-                       i, base + k*(mask+1));
+           rec_clean_i(((void_pointer *)(p))[k], my_depth-1, my_mask,
+                       i, base + k*(my_mask+1));
       } else {
        for (size_type k = 0; k < 16; ++k)
          if (base+k > i) ((T *)(p))[k] = T(0);
@@ -440,7 +441,7 @@
     }
 
     void copy_rec(void_pointer &p, const_void_pointer q, size_type my_depth) {
-      if (depth) {
+      if (my_depth) {
        p = new void_pointer[16];
        std::memset(p, 0, 16*sizeof(void_pointer));
        for (size_type l = 0; l < 16; ++l)
@@ -461,8 +462,6 @@
 
     void next_pos_rec(void_pointer p, size_type my_depth, size_type my_mask,
                      const_pointer &pp, size_type &i, size_type base) const {
-      // cout << "base = " << base << endl;
-      // cout << "mask+1 = " << my_mask+1 << " (mask >> 4) = " << (my_mask >> 
4) << endl;
       size_type ii = i;
       if (my_depth) {
        my_mask = (my_mask >> 4);
@@ -506,23 +505,25 @@
   public:
     void clean(double eps) { if (root_ptr) rec_clean(root_ptr, depth); }
     void resize(size_type n_) {
-      n = n_;
-      if (n_ < n) { // Depth unchanged (a choice)
-       if (root_ptr) rec_clean_i(root_ptr, depth, mask, n_, 0);
-      } else {
-       // may change the depth (add some levels)
-       size_type my_depth = 0, my_shift = 0, my_mask = 1; if (n_) --n_;
-       while (n_) { n_ /= 16; ++my_depth; my_shift += 4; my_mask *= 16; }
-       my_mask--; if (my_shift) my_shift -= 4; if (my_depth) --my_depth;
-       if (my_depth > depth) {
-         if (root_ptr) {
-           for (size_type k = depth; k < my_depth; ++k) {
-             void_pointer *q = new void_pointer [16];
-             std::memset(q, 0, 16*sizeof(void_pointer));
-             q[0] = root_ptr; root_ptr = q;
+      if (n_ != n) {
+       n = n_;
+       if (n_ < n) { // Depth unchanged (a choice)
+         if (root_ptr) rec_clean_i(root_ptr, depth, mask, n_, 0);
+       } else {
+         // may change the depth (add some levels)
+         size_type my_depth = 0, my_shift = 0, my_mask = 1; if (n_) --n_;
+         while (n_) { n_ /= 16; ++my_depth; my_shift += 4; my_mask *= 16; }
+         my_mask--; if (my_shift) my_shift -= 4; if (my_depth) --my_depth;
+         if (my_depth > depth || depth == 0) {
+           if (root_ptr) {
+             for (size_type k = depth; k < my_depth; ++k) {
+               void_pointer *q = new void_pointer [16];
+               std::memset(q, 0, 16*sizeof(void_pointer));
+               q[0] = root_ptr; root_ptr = q;
+             }
            }
+           mask = my_mask; depth = my_depth; shift = my_shift;
          }
-         mask = my_mask; depth = my_depth; shift = my_shift;
        }
       }
     }
@@ -541,17 +542,23 @@
     }
 
     iterator begin(void) {
-      iterator it(*this); it.i = 0; it.p = const_cast<T *>(read_access(0));
-      if (!(it.p) || *(it.p) == T(0))
-       next_pos(*(const_cast<const_pointer *>(&(it.p))), it.i);
+      iterator it(*this); 
+      if (n && root_ptr) {
+       it.i = 0; it.p = const_cast<T *>(read_access(0));
+       if (!(it.p) || *(it.p) == T(0))
+         next_pos(*(const_cast<const_pointer *>(&(it.p))), it.i);
+      }
       return it;
     }
 
     iterator end(void) { return iterator(*this); }
 
     const_iterator begin(void) const {
-      const_iterator it(*this); it.i = 0; it.p = read_access(0);
-      if (!(it.p) || *(it.p) == T(0)) next_pos(it.p, it.i);
+      const_iterator it(*this);
+      if (n && root_ptr) {
+       it.i = 0; it.p = read_access(0);
+       if (!(it.p) || *(it.p) == T(0)) next_pos(it.p, it.i);
+      }
       return it;
     }
 
@@ -581,7 +588,7 @@
     }
     
     /* Constructors */
-    dsvector(const dsvector<T> &v) { root_ptr = 0; copy(v); }
+    dsvector(const dsvector<T> &v) { init(0); copy(v); }
     dsvector<T> &operator =(const dsvector<T> &v) { copy(v); return *this; }
     explicit dsvector(size_type l){ init(l); }
     dsvector(void) { init(0); }




reply via email to

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