getfem-commits
[Top][All Lists]
Advanced

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

[Getfem-commits] r4885 - in /trunk/getfem/src: dal_static_stored_objects


From: Yves . Renard
Subject: [Getfem-commits] r4885 - in /trunk/getfem/src: dal_static_stored_objects.cc getfem/bgeot_tensor.h
Date: Mon, 16 Mar 2015 14:36:13 -0000

Author: renard
Date: Mon Mar 16 15:36:12 2015
New Revision: 4885

URL: http://svn.gna.org/viewcvs/getfem?rev=4885&view=rev
Log:
correction for _GLIBCXX_DEBUG mode

Modified:
    trunk/getfem/src/dal_static_stored_objects.cc
    trunk/getfem/src/getfem/bgeot_tensor.h

Modified: trunk/getfem/src/dal_static_stored_objects.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/dal_static_stored_objects.cc?rev=4885&r1=4884&r2=4885&view=diff
==============================================================================
--- trunk/getfem/src/dal_static_stored_objects.cc       (original)
+++ trunk/getfem/src/dal_static_stored_objects.cc       Mon Mar 16 15:36:12 2015
@@ -193,6 +193,7 @@
         delete ito->first.p;
         erase(ito);
         it = to_delete.erase(it);
+        if (it ==  to_delete.end()) break;
         --it;
       }
     }

Modified: trunk/getfem/src/getfem/bgeot_tensor.h
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem/bgeot_tensor.h?rev=4885&r1=4884&r2=4885&view=diff
==============================================================================
--- trunk/getfem/src/getfem/bgeot_tensor.h      (original)
+++ trunk/getfem/src/getfem/bgeot_tensor.h      Mon Mar 16 15:36:12 2015
@@ -280,34 +280,42 @@
     *mi = t.sizes();
     size_type dimt = (*mi)[ni], dim = m.nrows();
 
+    GMM_ASSERT2(dimt, "Inconsistent dimension.");
     GMM_ASSERT2(dimt == m.ncols(), "Dimensions mismatch.");
     GMM_ASSERT2(&t != this, "Does not work when t and *this are the same.");
+
 
     (*mi)[ni] = dim;
     if (tmp->size() < dimt) tmp->resize(dimt);
     adjust_sizes(*mi);
+
     const_iterator pft = t.begin();
     iterator pf = this->begin();
     size_type dd  =   coeff[ni]*(  sizes()[ni]-1)-1, co  =   coeff[ni];
     size_type ddt = t.coeff[ni]*(t.sizes()[ni]-1)-1, cot = t.coeff[ni];
     std::fill(mi->begin(), mi->end(), 0);
-    for (;!mi->finished(sizes()); mi->incrementation(sizes()), ++pf, ++pft)
+    for (;!mi->finished(sizes()); mi->incrementation(sizes()), ++pf, ++pft) {
       if ((*mi)[ni] != 0) {
         for (size_type k = 0; k <= size_type(ni); ++k)
           (*mi)[k] = size_type(sizes()[k] - 1);
         pf += dd; pft += ddt;
-      }
-      else {
+      } else {
         const_iterator pl = pft; iterator pt = tmp->begin();
-        for(size_type k = 0; k < dimt; ++k, pl += cot, ++pt) *pt = *pl;
+        *pt = *pl;
+        for(size_type k = 1; k < dimt; ++k, ++pt) { pl += cot; *pt = *pl;}
 
         iterator pff = pf;
-        for (size_type k = 0; k < dim; ++k, pff += co) {
+        for (size_type k = 0; k < dim; ++k) {
+          if (k) pff += co;
           *pff = T(0); pt = tmp->begin(); pl = m.begin() + k;
-          for (size_type l = 0; l < dimt; ++l, ++pt, pl += dim)
+          *pff += (*pl) * (*pt);
+          for (size_type l = 1; l < dimt; ++l, ++pt) {
+            pl += dim;
             *pff += (*pl) * (*pt);
+          }
         }
       }
+    }
   }
 
   template<class T> void tensor<T>::mat_mult(const gmm::dense_matrix<T> &m,
@@ -342,6 +350,7 @@
     }
     *mi = t.sizes();
     size_type dimt = (*mi)[ni], dim = m.ncols();
+    GMM_ASSERT2(dimt, "Inconsistent dimension.");
     GMM_ASSERT2(dimt == m.nrows(), "Dimensions mismatch.");
     GMM_ASSERT2(&t != this, "Does not work when t and *this are the same.");
 
@@ -353,7 +362,7 @@
     size_type dd  =   coeff[ni]*(  sizes()[ni]-1)-1, co  =   coeff[ni];
     size_type ddt = t.coeff[ni]*(t.sizes()[ni]-1)-1, cot = t.coeff[ni];
     std::fill(mi->begin(), mi->end(), 0);
-    for (;!mi->finished(sizes()); mi->incrementation(sizes()), ++pf, ++pft)
+    for (;!mi->finished(sizes()); mi->incrementation(sizes()), ++pf, ++pft) {
       if ((*mi)[ni] != 0) {
         for (size_type k = 0; k <= size_type(ni); ++k)
           (*mi)[k] = size_type(sizes()[k] - 1);
@@ -361,15 +370,18 @@
       }
       else {
         const_iterator pl = pft; iterator pt = tmp->begin();
-        for(size_type k = 0; k < dimt; ++k, pl += cot, ++pt) *pt = *pl;
+        *pt = *pl;
+        for(size_type k = 1; k < dimt; ++k, ++pt) { pl += cot; *pt = *pl; }
 
         iterator pff = pf; pl = m.begin();
-        for (size_type k = 0; k < dim; ++k, pff += co) {
+        for (size_type k = 0; k < dim; ++k) {
+          if (k) pff += co;
           *pff = T(0); pt = tmp->begin();
           for (size_type l = 0; l < dimt; ++l, ++pt, ++pl)
             *pff += (*pl) * (*pt);
         }
       }
+    }
   }
 
 




reply via email to

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