]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Follow the documented advice of not looping over all elements of a matrix but do...
authorbangerth <bangerth@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 12 Feb 2013 16:09:54 +0000 (16:09 +0000)
committerbangerth <bangerth@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 12 Feb 2013 16:09:54 +0000 (16:09 +0000)
git-svn-id: https://svn.dealii.org/trunk@28330 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/include/deal.II/lac/full_matrix.h

index 6a2854ef911965bde2c9004e26bcc116c7d2d188..6fab9285d20f8e55ddd8aeaea672caa0fda24da5 100644 (file)
@@ -1520,10 +1520,17 @@ void
 FullMatrix<number>::copy_from (const MATRIX &M)
 {
   this->reinit (M.m(), M.n());
-  const typename MATRIX::const_iterator end = M.end();
-  for (typename MATRIX::const_iterator entry = M.begin();
-       entry != end; ++entry)
-    this->el(entry->row(), entry->column()) = entry->value();
+
+  // loop over the elements of the argument matrix row by row, as suggested
+  // in the documentation of the sparse matrix iterator class, and
+  // copy them into the current object
+  for (unsigned int row = 0; row < M.n(); ++row)
+    {
+      const typename MATRIX::const_iterator end_row = M.end(row);
+      for (typename MATRIX::const_iterator entry = M.begin(row);
+          entry != end_row; ++entry)
+        this->el(row, entry->column()) = entry->value();
+    }
 }
 
 
@@ -1534,10 +1541,17 @@ void
 FullMatrix<number>::copy_transposed (const MATRIX &M)
 {
   this->reinit (M.n(), M.m());
-  const typename MATRIX::const_iterator end = M.end();
-  for (typename MATRIX::const_iterator entry = M.begin();
-       entry != end; ++entry)
-    this->el(entry->column(), entry->row()) = entry->value();
+
+  // loop over the elements of the argument matrix row by row, as suggested
+  // in the documentation of the sparse matrix iterator class, and
+  // copy them into the current object
+  for (unsigned int row = 0; row < M.n(); ++row)
+    {
+      const typename MATRIX::const_iterator end_row = M.end(row);
+      for (typename MATRIX::const_iterator entry = M.begin(row);
+          entry != end_row; ++entry)
+        this->el(entry->column(), row) = entry->value();
+    }
 }
 
 

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.