]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Also make MatrixOut work for PETSc matrices. 923/head
authorWolfgang Bangerth <bangerth@math.tamu.edu>
Mon, 11 May 2015 13:40:26 +0000 (08:40 -0500)
committerWolfgang Bangerth <bangerth@math.tamu.edu>
Mon, 11 May 2015 13:40:26 +0000 (08:40 -0500)
doc/news/changes.h
include/deal.II/lac/matrix_out.h
tests/lac/matrix_out_03.cc [new file with mode: 0644]
tests/lac/matrix_out_03.with_petsc=true.output [new file with mode: 0644]

index ec481a65f89c9c661b4fe26bf0dd279116cec8e4..8b2e37c95febcc1177954671ca8e2e6742fa3040 100644 (file)
@@ -493,7 +493,7 @@ inconvenience this causes.
 <h3>Specific improvements</h3>
 
 <ol>
-  <li> Fixed: MatrixOut now also works with Trilinos matrices.
+  <li> Fixed: MatrixOut now also works with Trilinos and PETSc matrices.
   <br>
   (Wolfgang Bangerth, 2015/05/11)
   </li>
index 7be4cbbbab5607b10d575acc28472c88a6e9f755..261e9c294fd7b5d5ab0f820bfba5f88b3e580c47 100644 (file)
 #  include <deal.II/lac/trilinos_block_sparse_matrix.h>
 #endif
 
-#ifdef DEAL_II_WITH_PETSC
-#  include <deal.II/lac/petsc_sparse_matrix.h>
-#  include <deal.II/lac/petsc_block_sparse_matrix.h>
-#endif
 
 DEAL_II_NAMESPACE_OPEN
 
@@ -223,9 +219,10 @@ namespace internal
         return matrix.el(i,j);
       }
 
+
 #ifdef DEAL_II_WITH_TRILINOS
       /**
-       * Return the element with given indices of a sparse matrix.
+       * Return the element with given indices of a Trilinos sparse matrix.
        */
       double get_element (const TrilinosWrappers::SparseMatrix &matrix,
                           const types::global_dof_index             i,
@@ -249,6 +246,13 @@ namespace internal
 #endif
 
 
+#ifdef DEAL_II_WITH_PETSC
+      // no need to do anything: PETSc matrix objects do not distinguish
+      // between operator() and el(i,j), so we can safely access elements
+      // through the generic function below
+#endif
+
+
       /**
        * Return the element with given indices from any matrix type for which no
        * specialization of this function was declared above. This will call
diff --git a/tests/lac/matrix_out_03.cc b/tests/lac/matrix_out_03.cc
new file mode 100644 (file)
index 0000000..b728538
--- /dev/null
@@ -0,0 +1,61 @@
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 2001 - 2015 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// The deal.II library is free software; you can use it, redistribute
+// it, and/or modify it under the terms of the GNU Lesser General
+// Public License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// The full text of the license can be found in the file LICENSE at
+// the top level of the deal.II distribution.
+//
+// ---------------------------------------------------------------------
+
+
+// like matrix_out_02.cc, but test for PETSc matrices
+
+
+#include "../tests.h"
+#include <deal.II/base/logstream.h>
+#include <deal.II/lac/matrix_out.h>
+#include <deal.II/lac/petsc_sparse_matrix.h>
+#include <fstream>
+#include <iomanip>
+
+int main (int argc, char **argv)
+{
+  Utilities::MPI::MPI_InitFinalize mpi_initialization (argc, argv, numbers::invalid_unsigned_int);
+
+  std::ofstream logfile("output");
+  deallog << std::fixed;
+  deallog << std::setprecision(2);
+  deallog.attach(logfile);
+  deallog.depth_console(0);
+  deallog.threshold_double(1.e-10);
+
+  // test for a rectangular sparse
+  // matrix
+  if (true)
+    {
+      DynamicSparsityPattern sparsity (4,8);
+      for (unsigned int i=0; i<4; ++i)
+        for (unsigned int j=0; j<8; ++j)
+          if (i==j+1)
+            sparsity.add (i,j);
+      sparsity.compress ();
+
+      PETScWrappers::SparseMatrix sparse_matrix(sparsity);
+      for (unsigned int i=0; i<4; ++i)
+        for (unsigned int j=0; j<8; ++j)
+          if (i==j+1)
+           sparse_matrix.set(i,j, i+3*j);
+      sparse_matrix.compress(VectorOperation::insert);
+
+      MatrixOut matrix_out;
+      matrix_out.build_patches (sparse_matrix, "sparse_matrix",
+                                MatrixOut::Options (true, 1, true));
+      matrix_out.write_gnuplot (logfile);
+    }
+}
diff --git a/tests/lac/matrix_out_03.with_petsc=true.output b/tests/lac/matrix_out_03.with_petsc=true.output
new file mode 100644 (file)
index 0000000..c0fa8d8
--- /dev/null
@@ -0,0 +1,232 @@
+
+# This file was generated by the deal.II library.
+
+
+#
+# For a description of the GNUPLOT format see the GNUPLOT manual.
+#
+# <x> <y> <sparse_matrix> 
+0.00000 0.00000 0.00000 
+0.00000 -1.00000 0.00000 
+
+1.00000 0.00000 0.00000 
+1.00000 -1.00000 0.00000 
+
+
+1.00000 0.00000 0.00000 
+1.00000 -1.00000 0.00000 
+
+2.00000 0.00000 0.00000 
+2.00000 -1.00000 0.00000 
+
+
+2.00000 0.00000 0.00000 
+2.00000 -1.00000 0.00000 
+
+3.00000 0.00000 0.00000 
+3.00000 -1.00000 0.00000 
+
+
+3.00000 0.00000 0.00000 
+3.00000 -1.00000 0.00000 
+
+4.00000 0.00000 0.00000 
+4.00000 -1.00000 0.00000 
+
+
+4.00000 0.00000 0.00000 
+4.00000 -1.00000 0.00000 
+
+5.00000 0.00000 0.00000 
+5.00000 -1.00000 0.00000 
+
+
+5.00000 0.00000 0.00000 
+5.00000 -1.00000 0.00000 
+
+6.00000 0.00000 0.00000 
+6.00000 -1.00000 0.00000 
+
+
+6.00000 0.00000 0.00000 
+6.00000 -1.00000 0.00000 
+
+7.00000 0.00000 0.00000 
+7.00000 -1.00000 0.00000 
+
+
+7.00000 0.00000 0.00000 
+7.00000 -1.00000 0.00000 
+
+8.00000 0.00000 0.00000 
+8.00000 -1.00000 0.00000 
+
+
+0.00000 -1.00000 1.00000 
+0.00000 -2.00000 1.00000 
+
+1.00000 -1.00000 1.00000 
+1.00000 -2.00000 1.00000 
+
+
+1.00000 -1.00000 0.00000 
+1.00000 -2.00000 0.00000 
+
+2.00000 -1.00000 0.00000 
+2.00000 -2.00000 0.00000 
+
+
+2.00000 -1.00000 0.00000 
+2.00000 -2.00000 0.00000 
+
+3.00000 -1.00000 0.00000 
+3.00000 -2.00000 0.00000 
+
+
+3.00000 -1.00000 0.00000 
+3.00000 -2.00000 0.00000 
+
+4.00000 -1.00000 0.00000 
+4.00000 -2.00000 0.00000 
+
+
+4.00000 -1.00000 0.00000 
+4.00000 -2.00000 0.00000 
+
+5.00000 -1.00000 0.00000 
+5.00000 -2.00000 0.00000 
+
+
+5.00000 -1.00000 0.00000 
+5.00000 -2.00000 0.00000 
+
+6.00000 -1.00000 0.00000 
+6.00000 -2.00000 0.00000 
+
+
+6.00000 -1.00000 0.00000 
+6.00000 -2.00000 0.00000 
+
+7.00000 -1.00000 0.00000 
+7.00000 -2.00000 0.00000 
+
+
+7.00000 -1.00000 0.00000 
+7.00000 -2.00000 0.00000 
+
+8.00000 -1.00000 0.00000 
+8.00000 -2.00000 0.00000 
+
+
+0.00000 -2.00000 0.00000 
+0.00000 -3.00000 0.00000 
+
+1.00000 -2.00000 0.00000 
+1.00000 -3.00000 0.00000 
+
+
+1.00000 -2.00000 5.00000 
+1.00000 -3.00000 5.00000 
+
+2.00000 -2.00000 5.00000 
+2.00000 -3.00000 5.00000 
+
+
+2.00000 -2.00000 0.00000 
+2.00000 -3.00000 0.00000 
+
+3.00000 -2.00000 0.00000 
+3.00000 -3.00000 0.00000 
+
+
+3.00000 -2.00000 0.00000 
+3.00000 -3.00000 0.00000 
+
+4.00000 -2.00000 0.00000 
+4.00000 -3.00000 0.00000 
+
+
+4.00000 -2.00000 0.00000 
+4.00000 -3.00000 0.00000 
+
+5.00000 -2.00000 0.00000 
+5.00000 -3.00000 0.00000 
+
+
+5.00000 -2.00000 0.00000 
+5.00000 -3.00000 0.00000 
+
+6.00000 -2.00000 0.00000 
+6.00000 -3.00000 0.00000 
+
+
+6.00000 -2.00000 0.00000 
+6.00000 -3.00000 0.00000 
+
+7.00000 -2.00000 0.00000 
+7.00000 -3.00000 0.00000 
+
+
+7.00000 -2.00000 0.00000 
+7.00000 -3.00000 0.00000 
+
+8.00000 -2.00000 0.00000 
+8.00000 -3.00000 0.00000 
+
+
+0.00000 -3.00000 0.00000 
+0.00000 -4.00000 0.00000 
+
+1.00000 -3.00000 0.00000 
+1.00000 -4.00000 0.00000 
+
+
+1.00000 -3.00000 0.00000 
+1.00000 -4.00000 0.00000 
+
+2.00000 -3.00000 0.00000 
+2.00000 -4.00000 0.00000 
+
+
+2.00000 -3.00000 9.00000 
+2.00000 -4.00000 9.00000 
+
+3.00000 -3.00000 9.00000 
+3.00000 -4.00000 9.00000 
+
+
+3.00000 -3.00000 0.00000 
+3.00000 -4.00000 0.00000 
+
+4.00000 -3.00000 0.00000 
+4.00000 -4.00000 0.00000 
+
+
+4.00000 -3.00000 0.00000 
+4.00000 -4.00000 0.00000 
+
+5.00000 -3.00000 0.00000 
+5.00000 -4.00000 0.00000 
+
+
+5.00000 -3.00000 0.00000 
+5.00000 -4.00000 0.00000 
+
+6.00000 -3.00000 0.00000 
+6.00000 -4.00000 0.00000 
+
+
+6.00000 -3.00000 0.00000 
+6.00000 -4.00000 0.00000 
+
+7.00000 -3.00000 0.00000 
+7.00000 -4.00000 0.00000 
+
+
+7.00000 -3.00000 0.00000 
+7.00000 -4.00000 0.00000 
+
+8.00000 -3.00000 0.00000 
+8.00000 -4.00000 0.00000 
+
+

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.