]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Slightly extend full matrix interface.
authoryoung <young@0785d39b-7218-0410-832d-ea1e28bc413d>
Mon, 20 Jan 2014 12:05:00 +0000 (12:05 +0000)
committeryoung <young@0785d39b-7218-0410-832d-ea1e28bc413d>
Mon, 20 Jan 2014 12:05:00 +0000 (12:05 +0000)
git-svn-id: https://svn.dealii.org/trunk@32265 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/include/deal.II/lac/petsc_full_matrix.h
deal.II/source/lac/petsc_full_matrix.cc

index 176e9d5fc34673dd79b28e38e65737e04c899a1c..c800efccd23c07744d9748f589bb15ed244fa81f 100644 (file)
@@ -50,26 +50,52 @@ namespace PETScWrappers
   class FullMatrix : public MatrixBase
   {
   public:
+    
     /**
      * Declare type for container size.
      */
     typedef types::global_dof_index size_type;
 
+
+    /**
+     * Default constructor. Create an empty matrix.
+     */
+    FullMatrix ();
+
+
     /**
-     * Create a full matrix of dimensions
-     * @p m times @p n.
+     * Create a full matrix of dimensions @p m times @p n.
      */
     FullMatrix (const size_type m,
                 const size_type n);
 
+
     /**
-     * Return a reference to the MPI
-     * communicator object in use with this
-     * matrix. Since this is a sequential
-     * matrix, it returns the MPI_COMM_SELF
-     * communicator.
+     * Throw away the present matrix and generate one that has the
+     * same properties as if it were created by the constructor of
+     * this class with the same argument list as the present function.
+     */
+    void reinit (const size_type m,
+                 const size_type n);
+
+
+    /**
+     * Return a reference to the MPI communicator object in use with
+     * this matrix. Since this is a sequential matrix, it returns the
+     * MPI_COMM_SELF communicator.
      */
     virtual const MPI_Comm &get_mpi_communicator () const;
+
+  private:
+
+    /**
+     * Do the actual work for the respective reinit() function and the
+     * matching constructor, i.e. create a matrix. Getting rid of the
+     * previous matrix is left to the caller.
+     */
+    void do_reinit (const size_type m,
+                    const size_type n);
+
   };
 
   /*@}*/
index 20903076e895f8618d229625ce26b31938c742f7..8a35af920a89b0ba449064d5b7a3760ce1a91350 100644 (file)
@@ -24,17 +24,54 @@ DEAL_II_NAMESPACE_OPEN
 
 namespace PETScWrappers
 {
+
+  FullMatrix::FullMatrix ()
+  {
+    const int m=0, n=0;
+    const int ierr
+      = MatCreateSeqDense (PETSC_COMM_SELF, m, n, PETSC_NULL,
+                          &matrix);
+
+    AssertThrow (ierr == 0, ExcPETScError(ierr));
+  }
+
   FullMatrix::FullMatrix (const size_type m,
                           const size_type n)
   {
+    do_reinit (m, n);
+  }
+
+  void
+  FullMatrix::reinit (const size_type m,
+                     const size_type n)
+  {
+    // get rid of old matrix and generate a
+    // new one
+#if DEAL_II_PETSC_VERSION_LT(3,2,0)
+    const int ierr = MatDestroy (matrix);
+#else
+    const int ierr = MatDestroy (&matrix);
+#endif
+    AssertThrow (ierr == 0, ExcPETScError(ierr));
+
+    do_reinit (m, n);
+  }
+
+  void
+  FullMatrix::do_reinit (const size_type m,
+                        const size_type n)
+  {
+    // use the call sequence indicating only a maximal number of
+    // elements per row for all rows globally
     const int ierr
-      = MatCreateSeqDense(PETSC_COMM_SELF, m, n, PETSC_NULL,
-                          &matrix);
+      = MatCreateSeqDense (PETSC_COMM_SELF, m, n, PETSC_NULL,
+                          &matrix);
 
     AssertThrow (ierr == 0, ExcPETScError(ierr));
   }
 
 
+
   const MPI_Comm &
   FullMatrix::get_mpi_communicator () const
   {

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.