]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Get rid of old destroy_matrix function 15119/head
authorStefano Zampini <stefano.zampini@gmail.com>
Thu, 20 Apr 2023 15:56:33 +0000 (18:56 +0300)
committerStefano Zampini <stefano.zampini@gmail.com>
Thu, 20 Apr 2023 21:45:40 +0000 (00:45 +0300)
include/deal.II/lac/petsc_compatibility.h
source/lac/petsc_full_matrix.cc
source/lac/petsc_matrix_base.cc
source/lac/petsc_matrix_free.cc
source/lac/petsc_parallel_block_sparse_matrix.cc
source/lac/petsc_parallel_sparse_matrix.cc
source/lac/petsc_sparse_matrix.cc

index 12e04b00e8fbbd2711afc7708a5595e14770a825..96bd2306294baf257445057fac1539bd52b4bb4d 100644 (file)
@@ -53,24 +53,6 @@ namespace PETScWrappers
 
 
 
-  /**
-   * Destroy a PETSc matrix. This function wraps MatDestroy with a version
-   * check (the signature of this function changed in PETSc 3.2.0).
-   *
-   * @warning Since the primary intent of this function is to enable RAII
-   * semantics in the PETSc wrappers, this function will not throw an
-   * exception if an error occurs, but instead just returns the error code
-   * given by MatDestroy.
-   */
-  inline PetscErrorCode
-  destroy_matrix(Mat &matrix)
-  {
-    // PETSc will check whether or not matrix is nullptr.
-    return MatDestroy(&matrix);
-  }
-
-
-
   /**
    * Destroy a Krylov Subspace (KSP) PETSc solver. This function wraps
    * KSPDestroy with a version check (the signature of this function changed
index f090aaa150c49dbfd7cfd50ea54c8ff3bdb30b32..9997c6758b79d583720c583fb3e43cc19bff2db6 100644 (file)
@@ -40,7 +40,7 @@ namespace PETScWrappers
   {
     // get rid of old matrix and generate a
     // new one
-    const PetscErrorCode ierr = destroy_matrix(matrix);
+    const PetscErrorCode ierr = MatDestroy(&matrix);
     AssertThrow(ierr == 0, ExcPETScError(ierr));
 
     do_reinit(m, n);
index 5e1555468bb20c1d3f7782e8262fcb5358f57533..2b1202f909aaa9ff85bb05315f32ada133398a76 100644 (file)
@@ -97,13 +97,16 @@ namespace PETScWrappers
     PetscErrorCode ierr =
       PetscObjectReference(reinterpret_cast<PetscObject>(A));
     AssertThrow(ierr == 0, ExcPETScError(ierr));
-    destroy_matrix(matrix);
+    ierr = MatDestroy(&matrix);
+    AssertThrow(ierr == 0, ExcPETScError(ierr));
     matrix = A;
   }
 
   MatrixBase::~MatrixBase()
   {
-    destroy_matrix(matrix);
+    PetscErrorCode ierr = MatDestroy(&matrix);
+    (void)ierr;
+    AssertNothrow(ierr == 0, ExcPETScError(ierr));
   }
 
   void
@@ -111,7 +114,7 @@ namespace PETScWrappers
   {
     // destroy the matrix...
     {
-      const PetscErrorCode ierr = destroy_matrix(matrix);
+      const PetscErrorCode ierr = MatDestroy(&matrix);
       AssertThrow(ierr == 0, ExcPETScError(ierr));
     }
 
@@ -625,7 +628,7 @@ namespace PETScWrappers
                             PETSC_DEFAULT,
                             &result.petsc_matrix());
           AssertThrow(ierr == 0, ExcPETScError(ierr));
-          ierr = PETScWrappers::destroy_matrix(tmp);
+          ierr = MatDestroy(&tmp);
           AssertThrow(ierr == 0, ExcPETScError(ierr));
         }
     }
@@ -764,7 +767,7 @@ namespace PETScWrappers
       }
     if (vmatrix != matrix)
       {
-        ierr = PETScWrappers::destroy_matrix(vmatrix);
+        ierr = MatDestroy(&vmatrix);
         AssertThrow(ierr == 0, ExcPETScError(ierr));
       }
     AssertThrow(out.fail() == false, ExcIO());
index 83e3a614328ae8b974086a1a40bd49fdf32b6073..bcbde6697d4236452ad87b3165a39b771ee9aaf1 100644 (file)
@@ -105,7 +105,7 @@ namespace PETScWrappers
                      const unsigned int local_columns)
   {
     // destroy the matrix and generate a new one
-    const PetscErrorCode ierr = destroy_matrix(matrix);
+    const PetscErrorCode ierr = MatDestroy(&matrix);
     AssertThrow(ierr == 0, ExcPETScError(ierr));
 
     do_reinit(communicator, m, n, local_rows, local_columns);
@@ -126,7 +126,7 @@ namespace PETScWrappers
                                 local_columns_per_process.size()));
     Assert(this_process < local_rows_per_process.size(), ExcInternalError());
 
-    const PetscErrorCode ierr = destroy_matrix(matrix);
+    const PetscErrorCode ierr = MatDestroy(&matrix);
     AssertThrow(ierr != 0, ExcPETScError(ierr));
 
     do_reinit(communicator,
@@ -169,7 +169,7 @@ namespace PETScWrappers
   void
   MatrixFree::clear()
   {
-    const PetscErrorCode ierr = destroy_matrix(matrix);
+    const PetscErrorCode ierr = MatDestroy(&matrix);
     AssertThrow(ierr == 0, ExcPETScError(ierr));
 
     const int m = 0;
index 85e740188d3af8719ecd4905bf3a6eb61d9d908f..b91d4cfb7e9bd78e072d841fee5de66afd6df81e 100644 (file)
@@ -72,7 +72,7 @@ namespace PETScWrappers
 
     BlockSparseMatrix::~BlockSparseMatrix()
     {
-      PetscErrorCode ierr = destroy_matrix(petsc_nest_matrix);
+      PetscErrorCode ierr = MatDestroy(&petsc_nest_matrix);
       (void)ierr;
       AssertNothrow(ierr == 0, ExcPETScError(ierr));
     }
@@ -245,7 +245,7 @@ namespace PETScWrappers
 
       MPI_Comm comm = PETSC_COMM_SELF;
 
-      ierr = destroy_matrix(petsc_nest_matrix);
+      ierr = MatDestroy(&petsc_nest_matrix);
       AssertThrow(ierr == 0, ExcPETScError(ierr));
       std::vector<Mat> psub_objects(m * n);
       for (unsigned int r = 0; r < m; r++)
index 7f32a3910f3e5192a8a20ad953b6a9180e29244e..8d1469c866633417916ed8242282a98f59e3aff1 100644 (file)
@@ -48,7 +48,9 @@ namespace PETScWrappers
 
     SparseMatrix::~SparseMatrix()
     {
-      destroy_matrix(matrix);
+      PetscErrorCode ierr = MatDestroy(&matrix);
+      (void)ierr;
+      AssertNothrow(ierr == 0, ExcPETScError(ierr));
     }
 
 
@@ -78,7 +80,7 @@ namespace PETScWrappers
       if (&other == this)
         return;
 
-      PetscErrorCode ierr = destroy_matrix(matrix);
+      PetscErrorCode ierr = MatDestroy(&matrix);
       AssertThrow(ierr == 0, ExcPETScError(ierr));
 
       ierr = MatDuplicate(other.matrix, MAT_DO_NOT_COPY_VALUES, &matrix);
@@ -95,7 +97,7 @@ namespace PETScWrappers
                          const MPI_Comm &           communicator)
     {
       // get rid of old matrix and generate a new one
-      const PetscErrorCode ierr = destroy_matrix(matrix);
+      const PetscErrorCode ierr = MatDestroy(&matrix);
       AssertThrow(ierr == 0, ExcPETScError(ierr));
 
       do_reinit(communicator,
@@ -138,7 +140,7 @@ namespace PETScWrappers
       const bool                    preset_nonzero_locations)
     {
       // get rid of old matrix and generate a new one
-      const PetscErrorCode ierr = destroy_matrix(matrix);
+      const PetscErrorCode ierr = MatDestroy(&matrix);
       AssertThrow(ierr == 0, ExcPETScError(ierr));
 
 
@@ -169,7 +171,7 @@ namespace PETScWrappers
                          const MPI_Comm &           communicator)
     {
       // get rid of old matrix and generate a new one
-      const PetscErrorCode ierr = destroy_matrix(matrix);
+      const PetscErrorCode ierr = MatDestroy(&matrix);
       AssertThrow(ierr == 0, ExcPETScError(ierr));
 
       do_reinit(communicator, local_rows, local_columns, sparsity_pattern);
index 51bd14a44265fd5f3a6119f83b1c68701df108bf..99f66f1113b2cfa5cb78d3679ed884e378268304 100644 (file)
@@ -85,7 +85,7 @@ namespace PETScWrappers
   {
     // get rid of old matrix and generate a
     // new one
-    const PetscErrorCode ierr = destroy_matrix(matrix);
+    const PetscErrorCode ierr = MatDestroy(&matrix);
     AssertThrow(ierr == 0, ExcPETScError(ierr));
 
     do_reinit(m, n, n_nonzero_per_row, is_symmetric);
@@ -116,7 +116,7 @@ namespace PETScWrappers
   {
     // get rid of old matrix and generate a
     // new one
-    const PetscErrorCode ierr = destroy_matrix(matrix);
+    const PetscErrorCode ierr = MatDestroy(&matrix);
     AssertThrow(ierr == 0, ExcPETScError(ierr));
 
     do_reinit(sparsity_pattern, preset_nonzero_locations);

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.