]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Fix a bug in the swap_row/swap_col functions of FullMatrix.
authorbangerth <bangerth@0785d39b-7218-0410-832d-ea1e28bc413d>
Fri, 6 Mar 2009 22:35:50 +0000 (22:35 +0000)
committerbangerth <bangerth@0785d39b-7218-0410-832d-ea1e28bc413d>
Fri, 6 Mar 2009 22:35:50 +0000 (22:35 +0000)
git-svn-id: https://svn.dealii.org/trunk@18463 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/doc/news/changes.h
deal.II/lac/include/lac/full_matrix.templates.h
tests/bits/full_matrix_55.cc [new file with mode: 0644]
tests/bits/full_matrix_55/cmp/generic [new file with mode: 0644]

index 68d1a323f2817b921826f67c7eea8bc60b9cb568..575266f5b5ef3bc2c450d5f5379fb8d0feb2e1f2 100644 (file)
@@ -552,6 +552,15 @@ inconvenience this causes.
 <h3>lac</h3>
 
 <ol>
+  <li>
+  <p>
+  Fixed: The FullMatrix::swap_row and FullMatrix::swap_col functions
+  had bugs that made them only work in case the matrix was square.
+  This is now fixed.
+  <br>
+  (WB 2009/03/05)
+  </p>
+
   <li>
   <p>
   New: Added a few simple helper functions (to VectorBase) that allow 
index f76231908626978b7882be864f60d9ee0d2277f8..9598f0fbafb7f593f998e4e1a8b02dd59a9c8100 100644 (file)
@@ -2,7 +2,7 @@
 //    $Id$
 //    Version: $Name$
 //
-//    Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by the deal.II authors
+//    Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by the deal.II authors
 //
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
@@ -446,28 +446,26 @@ void FullMatrix<number>::add_col (const unsigned int i, const number s,
 
 
 template <typename number>
-void FullMatrix<number>::swap_row (const unsigned int i, const unsigned int j)
+void FullMatrix<number>::swap_row (const unsigned int i,
+                                  const unsigned int j)
 {
   Assert (!this->empty(), ExcEmptyMatrix());
   
-  number s;
-  for (unsigned int k=0; k<m(); ++k)
-  {
-    s = (*this)(i,k); (*this)(i,k) = (*this)(j,k); (*this)(j,k) = s;
-  }
+  for (unsigned int k=0; k<n(); ++k)
+    std::swap ((*this)(i,k),
+              (*this)(j,k));
 }
 
 
 template <typename number>
-void FullMatrix<number>::swap_col (const unsigned int i, const unsigned int j)
+void FullMatrix<number>::swap_col (const unsigned int i,
+                                  const unsigned int j)
 {
   Assert (!this->empty(), ExcEmptyMatrix());
   
-  number s;
-  for (unsigned int k=0; k<n(); ++k)
-  {
-    s = (*this)(k,i); (*this)(k,i) = (*this)(k,j); (*this)(k,j) = s;
-  }
+  for (unsigned int k=0; k<m(); ++k)
+    std::swap ((*this)(k,i),
+              (*this)(k,j));
 }
 
 
diff --git a/tests/bits/full_matrix_55.cc b/tests/bits/full_matrix_55.cc
new file mode 100644 (file)
index 0000000..f8c1895
--- /dev/null
@@ -0,0 +1,40 @@
+//----------------------------------------------------------------------
+//    $Id$
+//    Version: $Name$ 
+//
+//    Copyright (C) 2007, 2009 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------------------------------------------------
+
+
+// check FullMatrix::swap_col and FullMatrix::swap_row for nonsymmetric
+// matrices; there used to be a bug in the implementation
+
+
+#include "../tests.h"
+#include "full_matrix_common.h"
+
+
+std::string output_file_name = "full_matrix_55/output";
+
+
+template <typename number>
+void
+check ()
+{
+  FullMatrix<number> m (5, 7);
+  fill_matrix (m);
+  print_matrix (m);
+  
+  m.swap_col (2, 4);
+  print_matrix (m);
+
+  m.swap_row (2, 4);
+  print_matrix (m);
+}
+
diff --git a/tests/bits/full_matrix_55/cmp/generic b/tests/bits/full_matrix_55/cmp/generic
new file mode 100644 (file)
index 0000000..0253c8d
--- /dev/null
@@ -0,0 +1,51 @@
+
+DEAL::0 0 2.0
+DEAL::0 1 3.0
+DEAL::0 2 6.0
+DEAL::0 3 5.0
+DEAL::0 4 4.0
+DEAL::1 0 4.0
+DEAL::1 1 6.0
+DEAL::1 2 12.
+DEAL::1 3 10.
+DEAL::1 4 8.0
+DEAL::2 0 6.0
+DEAL::2 1 9.0
+DEAL::2 2 18.
+DEAL::2 3 15.
+DEAL::2 4 12.
+DEAL::3 0 8.0
+DEAL::3 1 12.
+DEAL::3 2 24.
+DEAL::3 3 20.
+DEAL::3 4 16.
+DEAL::4 0 10.
+DEAL::4 1 15.
+DEAL::4 2 30.
+DEAL::4 3 25.
+DEAL::4 4 20.
+DEAL::0 0 2.0
+DEAL::0 1 3.0
+DEAL::0 2 6.0
+DEAL::0 3 5.0
+DEAL::0 4 4.0
+DEAL::1 0 4.0
+DEAL::1 1 6.0
+DEAL::1 2 12.
+DEAL::1 3 10.
+DEAL::1 4 8.0
+DEAL::2 0 6.0
+DEAL::2 1 9.0
+DEAL::2 2 18.
+DEAL::2 3 15.
+DEAL::2 4 12.
+DEAL::3 0 8.0
+DEAL::3 1 12.
+DEAL::3 2 24.
+DEAL::3 3 20.
+DEAL::3 4 16.
+DEAL::4 0 10.
+DEAL::4 1 15.
+DEAL::4 2 30.
+DEAL::4 3 25.
+DEAL::4 4 20.

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.