]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Added a templated call to PETSc matrix initialization with SparsityPattern to allow...
authorkronbichler <kronbichler@0785d39b-7218-0410-832d-ea1e28bc413d>
Thu, 6 Nov 2008 12:41:33 +0000 (12:41 +0000)
committerkronbichler <kronbichler@0785d39b-7218-0410-832d-ea1e28bc413d>
Thu, 6 Nov 2008 12:41:33 +0000 (12:41 +0000)
git-svn-id: https://svn.dealii.org/trunk@17486 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/lac/include/lac/petsc_parallel_sparse_matrix.h
deal.II/lac/include/lac/petsc_sparse_matrix.h
deal.II/lac/source/petsc_parallel_sparse_matrix.cc
deal.II/lac/source/petsc_sparse_matrix.cc

index 01f40197ea4ae3d311ab88b73c5ad6637b0614a5..6d81587c7f1887748543f85eba6e241b67237ac6 100644 (file)
@@ -18,7 +18,6 @@
 #include <lac/exceptions.h>
 
 #include <lac/petsc_matrix_base.h>
-#include <lac/block_sparsity_pattern.h>
 
 #include <vector>
 
@@ -265,8 +264,9 @@ namespace PETScWrappers
                                           * get memory allocation right from
                                           * the start.
                                           */
+       template <typename SparsityType>
         SparseMatrix (const MPI_Comm                  &communicator,
-                      const CompressedSparsityPattern &sparsity_pattern,
+                      const SparsityType              &sparsity_pattern,
                       const std::vector<unsigned int> &local_rows_per_process,
                       const std::vector<unsigned int> &local_columns_per_process,
                       const unsigned int               this_process,
@@ -356,8 +356,9 @@ namespace PETScWrappers
                                           * get memory allocation right from
                                           * the start.
                                           */
-        void reinit (const MPI_Comm                  &communicator,
-                     const CompressedSparsityPattern &sparsity_pattern,
+        template <typename SparsityType>
+       void reinit (const MPI_Comm                  &communicator,
+                     const SparsityType              &sparsity_pattern,
                      const std::vector<unsigned int> &local_rows_per_process,
                      const std::vector<unsigned int> &local_columns_per_process,
                      const unsigned int               this_process,
@@ -416,7 +417,8 @@ namespace PETScWrappers
                                          /**
                                           * Same as previous functions.
                                           */
-        void do_reinit (const CompressedSparsityPattern &sparsity_pattern,
+       template <typename SparsityType>
+        void do_reinit (const SparsityType              &sparsity_pattern,
                         const std::vector<unsigned int> &local_rows_per_process,
                         const std::vector<unsigned int> &local_columns_per_process,
                         const unsigned int               this_process,
index 7a7de77feb0898624dae9c9d96f2d3f89f8c3494..54a397800196b907de9230704c1be51dee217a59 100644 (file)
@@ -17,7 +17,6 @@
 #include <base/config.h>
 #include <lac/exceptions.h>
 #include <lac/petsc_matrix_base.h>
-#include <lac/compressed_sparsity_pattern.h>
 
 #include <vector>
 
@@ -182,8 +181,9 @@ namespace PETScWrappers
                                         * flag has a default value equal to
                                         * @p false.
                                         */
-      SparseMatrix (const CompressedSparsityPattern &sparsity_pattern,
-                    const bool                       preset_nonzero_locations = false);
+      template <typename SparsityType>
+      SparseMatrix (const SparsityType &sparsity_pattern,
+                    const bool          preset_nonzero_locations = false);
 
                                        /**
                                         * This operator assigns a scalar to
@@ -277,8 +277,9 @@ namespace PETScWrappers
                                         * flag has a default value equal to
                                         * @p false.
                                         */
-      void reinit (const CompressedSparsityPattern &sparsity_pattern,
-                   const bool                       preset_nonzero_locations = false);
+      template <typename SparsityType>
+      void reinit (const SparsityType &sparsity_pattern,
+                   const bool          preset_nonzero_locations = false);
 
                                        /**
                                         * Return a reference to the MPI
@@ -314,8 +315,9 @@ namespace PETScWrappers
                                        /**
                                         * Same as previous function.
                                         */
-      void do_reinit (const CompressedSparsityPattern &sparsity_pattern,
-                      const bool                       preset_nonzero_locations);
+      template <typename SparsityType>
+      void do_reinit (const SparsityType &sparsity_pattern,
+                      const bool          preset_nonzero_locations);
   };
 }
 
index 9ab68aec80f247234161ab1feacd64c34b3dccde..44c65a3d01ed85187e9bcbb6925b65db0ef35414 100644 (file)
 #include <lac/petsc_parallel_sparse_matrix.h>
 #include <lac/petsc_vector.h>
 
+#include <lac/sparsity_pattern.h>
+#include <lac/compressed_sparsity_pattern.h>
+#include <lac/compressed_simple_sparsity_pattern.h>
+
 #ifdef DEAL_II_USE_PETSC
 
 DEAL_II_NAMESPACE_OPEN
@@ -70,9 +74,10 @@ namespace PETScWrappers
 
 
 
+    template <typename SparsityType>
     SparseMatrix::
     SparseMatrix (const MPI_Comm                  &communicator,
-                  const CompressedSparsityPattern &sparsity_pattern,
+                  const SparsityType              &sparsity_pattern,
                   const std::vector<unsigned int> &local_rows_per_process,
                   const std::vector<unsigned int> &local_columns_per_process,
                   const unsigned int               this_process,
@@ -139,10 +144,11 @@ namespace PETScWrappers
 
 
 
+    template <typename SparsityType>
     void
     SparseMatrix::
     reinit (const MPI_Comm                  &communicator,
-            const CompressedSparsityPattern &sparsity_pattern,
+            const SparsityType              &sparsity_pattern,
             const std::vector<unsigned int> &local_rows_per_process,
             const std::vector<unsigned int> &local_columns_per_process,
             const unsigned int               this_process,
@@ -248,9 +254,10 @@ namespace PETScWrappers
 
 
 
+    template <typename SparsityType>
     void
     SparseMatrix::
-    do_reinit (const CompressedSparsityPattern &sparsity_pattern,
+    do_reinit (const SparsityType              &sparsity_pattern,
                const std::vector<unsigned int> &local_rows_per_process,
                const std::vector<unsigned int> &local_columns_per_process,
                const unsigned int               this_process,
@@ -445,6 +452,73 @@ namespace PETScWrappers
 //TODO: We should use the appropriate option with MatSetOption here indicating that we do not intend to add any further matrix entries. Maybe this would accelerate some things as well
         }
     }
+
+
+
+    // explicit instantiations
+    //
+    template
+    SparseMatrix::SparseMatrix (const MPI_Comm &,
+                               const SparsityPattern &,
+                               const std::vector<unsigned int> &,
+                               const std::vector<unsigned int> &,
+                               const unsigned int,
+                               const bool);
+    template
+    SparseMatrix::SparseMatrix (const MPI_Comm &,
+                               const CompressedSparsityPattern &,
+                               const std::vector<unsigned int> &,
+                               const std::vector<unsigned int> &,
+                               const unsigned int,
+                               const bool);
+    template
+    SparseMatrix::SparseMatrix (const MPI_Comm &,
+                               const CompressedSimpleSparsityPattern &,
+                               const std::vector<unsigned int> &,
+                               const std::vector<unsigned int> &,
+                               const unsigned int,
+                               const bool);
+
+    template void
+    SparseMatrix::reinit (const MPI_Comm &,
+                         const SparsityPattern &,
+                         const std::vector<unsigned int> &,
+                         const std::vector<unsigned int> &,
+                         const unsigned int,
+                         const bool);
+    template void
+    SparseMatrix::reinit (const MPI_Comm &,
+                         const CompressedSparsityPattern &,
+                         const std::vector<unsigned int> &,
+                         const std::vector<unsigned int> &,
+                         const unsigned int,
+                         const bool);
+    template void
+    SparseMatrix::reinit (const MPI_Comm &,
+                         const CompressedSimpleSparsityPattern &,
+                         const std::vector<unsigned int> &,
+                         const std::vector<unsigned int> &,
+                         const unsigned int,
+                         const bool);
+
+    template void
+    SparseMatrix::do_reinit (const SparsityPattern &,
+                            const std::vector<unsigned int> &,
+                            const std::vector<unsigned int> &,
+                            const unsigned int ,
+                            const bool);
+    template void
+    SparseMatrix::do_reinit (const CompressedSparsityPattern &,
+                            const std::vector<unsigned int> &,
+                            const std::vector<unsigned int> &,
+                            const unsigned int ,
+                            const bool);
+    template void
+    SparseMatrix::do_reinit (const CompressedSimpleSparsityPattern &,
+                            const std::vector<unsigned int> &,
+                            const std::vector<unsigned int> &,
+                            const unsigned int ,
+                            const bool);
   }
 }
 
index ec84471f025dfc47d6e07fb24fc11e35bc28cf2a..95ca455d4d5c07524cda683a61695527dd3f30da 100644 (file)
 #include <lac/petsc_sparse_matrix.h>
 #include <lac/petsc_vector.h>
 
+#include <lac/sparsity_pattern.h>
+#include <lac/compressed_sparsity_pattern.h>
+#include <lac/compressed_simple_sparsity_pattern.h>
+
 #ifdef DEAL_II_USE_PETSC
 
 DEAL_II_NAMESPACE_OPEN
@@ -52,9 +56,10 @@ namespace PETScWrappers
 
 
 
+  template <typename SparsityType>
   SparseMatrix::
-  SparseMatrix (const CompressedSparsityPattern &sparsity_pattern,
-                const bool                       preset_nonzero_locations)
+  SparseMatrix (const SparsityType &sparsity_pattern,
+                const bool          preset_nonzero_locations)
   {
     do_reinit (sparsity_pattern, preset_nonzero_locations);
   }
@@ -101,10 +106,12 @@ namespace PETScWrappers
   }  
 
 
+
+  template <typename SparsityType>
   void
   SparseMatrix::
-  reinit (const CompressedSparsityPattern &sparsity_pattern,
-          const bool                       preset_nonzero_locations)
+  reinit (const SparsityType &sparsity_pattern,
+          const bool          preset_nonzero_locations)
   {
                                      // get rid of old matrix and generate a
                                      // new one
@@ -185,9 +192,10 @@ namespace PETScWrappers
 
 
 
+  template <typename SparsityType>
   void
-  SparseMatrix::do_reinit (const CompressedSparsityPattern &sparsity_pattern,
-                           const bool preset_nonzero_locations)
+  SparseMatrix::do_reinit (const SparsityType &sparsity_pattern,
+                           const bool          preset_nonzero_locations)
   {
     std::vector<unsigned int> row_lengths (sparsity_pattern.n_rows());
     for (unsigned int i=0; i<sparsity_pattern.n_rows(); ++i)
@@ -229,6 +237,39 @@ namespace PETScWrappers
         compress ();
       }
   }
+
+
+  // Explicit instantiations
+  //
+  template
+  SparseMatrix::SparseMatrix (const SparsityPattern &,
+                             const bool);
+  template
+  SparseMatrix::SparseMatrix (const CompressedSparsityPattern &,
+                             const bool);
+  template
+  SparseMatrix::SparseMatrix (const CompressedSimpleSparsityPattern &,
+                             const bool);
+
+  template void
+  SparseMatrix::reinit (const SparsityPattern &,
+                       const bool);
+  template void
+  SparseMatrix::reinit (const CompressedSparsityPattern &,
+                       const bool);
+  template void
+  SparseMatrix::reinit (const CompressedSimpleSparsityPattern &,
+                       const bool);
+
+  template void
+  SparseMatrix::do_reinit (const SparsityPattern &,
+                           const bool);
+  template void
+  SparseMatrix::do_reinit (const CompressedSparsityPattern &,
+                           const bool);
+  template void
+  SparseMatrix::do_reinit (const CompressedSimpleSparsityPattern &,
+                           const bool);
 }
 
 

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.