---
 include/numerics/petsc_macro.h       |   10 +++++
 include/numerics/petsc_vector.h      |    2 +-
 src/numerics/petsc_matrix.C          |    8 ++--
 src/numerics/petsc_vector.C          |   20 +++++-----
 src/solvers/petsc_diff_solver.C      |    2 +-
 src/solvers/petsc_linear_solver.C    |   72 +++++++++++++++++-----------------
 src/solvers/petsc_nonlinear_solver.C |    2 +-
 7 files changed, 63 insertions(+), 53 deletions(-)

diff --git a/include/numerics/petsc_macro.h b/include/numerics/petsc_macro.h
index df1bc16..bd3ad63 100644
--- a/include/numerics/petsc_macro.h
+++ b/include/numerics/petsc_macro.h
@@ -87,6 +87,16 @@ EXTERN_C_FOR_PETSC_END
 typedef PetscTruth PetscBool;
 #endif
 
+#if PETSC_VERSION_RELEASE && PETSC_VERSION_LESS_THAN(3,1,1)
+#  define VecDestroy(x)         VecDestroy(*(x))
+#  define VecScatterDestroy(x)  VecScatterDestroy(*(x))
+#  define MatDestroy(x)         MatDestroy(*(x))
+#  define ISDestroy(x)          ISDestroy(*(x))
+#  define KSPDestroy(x)         KSPDestroy(*(x))
+#  define SNESDestroy(x)        SNESDestroy(*(x))
+#  define PetscViewerDestroy(x) PetscViewerDestroy(*(x))
+#endif
+
 #if PETSC_VERSION_LESS_THAN(2,2,1)
 // This version of PETSc always makes a copy. Current occurrences of PETSC_USE_POINTER are safe with the definition below.
 typedef enum { PETSC_COPY_VALUES, PETSC_OWN_POINTER, PETSC_USE_POINTER} PetscCopyMode;
diff --git a/include/numerics/petsc_vector.h b/include/numerics/petsc_vector.h
index 3d77dbb..b36039f 100644
--- a/include/numerics/petsc_vector.h
+++ b/include/numerics/petsc_vector.h
@@ -931,7 +931,7 @@ void PetscVector<T>::clear ()
     {
       int ierr=0;
 
-      ierr = VecDestroy(_vec);
+      ierr = VecDestroy(&_vec);
              CHKERRABORT(libMesh::COMM_WORLD,ierr);
     }
 
diff --git a/src/numerics/petsc_matrix.C b/src/numerics/petsc_matrix.C
index 12f9ad2..2e2a65f 100644
--- a/src/numerics/petsc_matrix.C
+++ b/src/numerics/petsc_matrix.C
@@ -226,7 +226,7 @@ void PetscMatrix<T>::clear ()
     {
       semiparallel_only();
   
-      ierr = MatDestroy (_mat);
+      ierr = MatDestroy (&_mat);
              CHKERRABORT(libMesh::COMM_WORLD,ierr);
       
       this->_is_initialized = false;
@@ -335,7 +335,7 @@ void PetscMatrix<T>::print_matlab (const std::string name) const
   /**
    * Destroy the viewer.
    */
-  ierr = PetscViewerDestroy (petsc_viewer);
+  ierr = PetscViewerDestroy (&petsc_viewer);
          CHKERRABORT(libMesh::COMM_WORLD,ierr);
 }
 
@@ -526,8 +526,8 @@ void PetscMatrix<T>::_get_submatrix(SparseMatrix<T>& submatrix,
   petsc_submatrix->close();
 
   // Clean up PETSc data structures
-  ierr = ISDestroy(isrow); CHKERRABORT(libMesh::COMM_WORLD,ierr);
-  ierr = ISDestroy(iscol); CHKERRABORT(libMesh::COMM_WORLD,ierr);
+  ierr = ISDestroy(&isrow); CHKERRABORT(libMesh::COMM_WORLD,ierr);
+  ierr = ISDestroy(&iscol); CHKERRABORT(libMesh::COMM_WORLD,ierr);
 }
 
 
diff --git a/src/numerics/petsc_vector.C b/src/numerics/petsc_vector.C
index 8a53252..30444fd 100644
--- a/src/numerics/petsc_vector.C
+++ b/src/numerics/petsc_vector.C
@@ -760,10 +760,10 @@ void PetscVector<T>::localize (NumericVector<T>& v_local_in) const
 #endif
 
   // Clean up
-  ierr = ISDestroy (is);
+  ierr = ISDestroy (&is);
          CHKERRABORT(libMesh::COMM_WORLD,ierr);
   
-  ierr = VecScatterDestroy(scatter);
+  ierr = VecScatterDestroy(&scatter);
          CHKERRABORT(libMesh::COMM_WORLD,ierr);
 
   // Make sure ghost dofs are up to date
@@ -852,10 +852,10 @@ void PetscVector<T>::localize (NumericVector<T>& v_local_in,
 	 
 
   // Clean up
-  ierr = ISDestroy (is);
+  ierr = ISDestroy (&is);
          CHKERRABORT(libMesh::COMM_WORLD,ierr);
   
-  ierr = VecScatterDestroy(scatter);
+  ierr = VecScatterDestroy(&scatter);
          CHKERRABORT(libMesh::COMM_WORLD,ierr);
 
   // Make sure ghost dofs are up to date
@@ -937,10 +937,10 @@ void PetscVector<T>::localize (const unsigned int first_local_idx,
 #endif
 
     // Clean up
-    ierr = ISDestroy (is);
+    ierr = ISDestroy (&is);
            CHKERRABORT(libMesh::COMM_WORLD,ierr);
   
-    ierr = VecScatterDestroy(scatter);
+    ierr = VecScatterDestroy(&scatter);
            CHKERRABORT(libMesh::COMM_WORLD,ierr);
   }
 
@@ -1238,7 +1238,7 @@ void PetscVector<T>::print_matlab (const std::string name) const
   /**
    * Destroy the viewer.
    */
-  ierr = PetscViewerDestroy (petsc_viewer);
+  ierr = PetscViewerDestroy (&petsc_viewer);
          CHKERRABORT(libMesh::COMM_WORLD,ierr);
 }
 
@@ -1339,9 +1339,9 @@ void PetscVector<T>::create_subvector(NumericVector<T>& subvector,
 #endif
   
   // Clean up 
-  ierr = ISDestroy(parent_is);       CHKERRABORT(libMesh::COMM_WORLD,ierr);
-  ierr = ISDestroy(subvector_is);    CHKERRABORT(libMesh::COMM_WORLD,ierr);
-  ierr = VecScatterDestroy(scatter); CHKERRABORT(libMesh::COMM_WORLD,ierr); 
+  ierr = ISDestroy(&parent_is);       CHKERRABORT(libMesh::COMM_WORLD,ierr);
+  ierr = ISDestroy(&subvector_is);    CHKERRABORT(libMesh::COMM_WORLD,ierr);
+  ierr = VecScatterDestroy(&scatter); CHKERRABORT(libMesh::COMM_WORLD,ierr); 
 
 }
 
diff --git a/src/solvers/petsc_diff_solver.C b/src/solvers/petsc_diff_solver.C
index 98f3cf2..6627cd6 100644
--- a/src/solvers/petsc_diff_solver.C
+++ b/src/solvers/petsc_diff_solver.C
@@ -220,7 +220,7 @@ void PetscDiffSolver::clear()
 
   int ierr=0;
 
-  ierr = SNESDestroy(_snes);
+  ierr = SNESDestroy(&_snes);
   CHKERRABORT(libMesh::COMM_WORLD,ierr);
 
   STOP_LOG("clear()", "PetscDiffSolver");
diff --git a/src/solvers/petsc_linear_solver.C b/src/solvers/petsc_linear_solver.C
index dc2bada..1fdc8e6 100644
--- a/src/solvers/petsc_linear_solver.C
+++ b/src/solvers/petsc_linear_solver.C
@@ -102,14 +102,14 @@ void PetscLinearSolver<T>::clear ()
 	 be removed and the subset index set destroyed.  */
       if(_restrict_solve_to_is!=NULL)
 	{
-	  int ierr = ISDestroy(_restrict_solve_to_is);
+	  int ierr = ISDestroy(&_restrict_solve_to_is);
 	  CHKERRABORT(libMesh::COMM_WORLD,ierr);
 	  _restrict_solve_to_is = NULL;
 	}
       
       if(_restrict_solve_to_is_complement!=NULL)
 	{
-	  int ierr = ISDestroy(_restrict_solve_to_is_complement);
+	  int ierr = ISDestroy(&_restrict_solve_to_is_complement);
 	  CHKERRABORT(libMesh::COMM_WORLD,ierr);
 	  _restrict_solve_to_is_complement = NULL;
 	}
@@ -127,7 +127,7 @@ void PetscLinearSolver<T>::clear ()
 #else
 
   // 2.2.0 & newer style
-  ierr = KSPDestroy(_ksp);
+  ierr = KSPDestroy(&_ksp);
          CHKERRABORT(libMesh::COMM_WORLD,ierr);
 
 #endif
@@ -633,11 +633,11 @@ PetscLinearSolver<T>::solve (SparseMatrix<T>&  matrix_in,
 	  ierr = MatMultAdd(submat1,subvec1,subrhs,subrhs);
 	  CHKERRABORT(libMesh::COMM_WORLD,ierr);
 
-	  ierr = VecScatterDestroy(scatter1);
+	  ierr = VecScatterDestroy(&scatter1);
 	  CHKERRABORT(libMesh::COMM_WORLD,ierr);
-	  ierr = VecDestroy(subvec1);
+	  ierr = VecDestroy(&subvec1);
 	  CHKERRABORT(libMesh::COMM_WORLD,ierr);
-	  ierr = MatDestroy(submat1);
+	  ierr = MatDestroy(&submat1);
 	  CHKERRABORT(libMesh::COMM_WORLD,ierr);
 	}
 
@@ -711,7 +711,7 @@ PetscLinearSolver<T>::solve (SparseMatrix<T>&  matrix_in,
       ierr = VecScatterEnd(scatter,subsolution,solution->vec(),INSERT_VALUES,SCATTER_REVERSE);
       CHKERRABORT(libMesh::COMM_WORLD,ierr);
 
-      ierr = VecScatterDestroy(scatter);
+      ierr = VecScatterDestroy(&scatter);
       CHKERRABORT(libMesh::COMM_WORLD,ierr);
 
       if(this->_preconditioner)
@@ -723,13 +723,13 @@ PetscLinearSolver<T>::solve (SparseMatrix<T>&  matrix_in,
 	  subprecond_matrix = NULL;
 	}
 
-      ierr = VecDestroy(subsolution);
+      ierr = VecDestroy(&subsolution);
       CHKERRABORT(libMesh::COMM_WORLD,ierr);
-      ierr = VecDestroy(subrhs);
+      ierr = VecDestroy(&subrhs);
       CHKERRABORT(libMesh::COMM_WORLD,ierr);
-      ierr = MatDestroy(submat);
+      ierr = MatDestroy(&submat);
       CHKERRABORT(libMesh::COMM_WORLD,ierr);
-      ierr = MatDestroy(subprecond);
+      ierr = MatDestroy(&subprecond);
       CHKERRABORT(libMesh::COMM_WORLD,ierr);
     }
 
@@ -965,11 +965,11 @@ PetscLinearSolver<T>::adjoint_solve (SparseMatrix<T>&  matrix_in,
 	  ierr = MatMultAdd(submat1,subvec1,subrhs,subrhs);
 	  CHKERRABORT(libMesh::COMM_WORLD,ierr);
 
-	  ierr = VecScatterDestroy(scatter1);
+	  ierr = VecScatterDestroy(&scatter1);
 	  CHKERRABORT(libMesh::COMM_WORLD,ierr);
-	  ierr = VecDestroy(subvec1);
+	  ierr = VecDestroy(&subvec1);
 	  CHKERRABORT(libMesh::COMM_WORLD,ierr);
-	  ierr = MatDestroy(submat1);
+	  ierr = MatDestroy(&submat1);
 	  CHKERRABORT(libMesh::COMM_WORLD,ierr);
 	}
 
@@ -1043,7 +1043,7 @@ PetscLinearSolver<T>::adjoint_solve (SparseMatrix<T>&  matrix_in,
       ierr = VecScatterEnd(scatter,subsolution,solution->vec(),INSERT_VALUES,SCATTER_REVERSE);
       CHKERRABORT(libMesh::COMM_WORLD,ierr);
 
-      ierr = VecScatterDestroy(scatter);
+      ierr = VecScatterDestroy(&scatter);
       CHKERRABORT(libMesh::COMM_WORLD,ierr);
 
       if(this->_preconditioner)
@@ -1055,13 +1055,13 @@ PetscLinearSolver<T>::adjoint_solve (SparseMatrix<T>&  matrix_in,
 	  subprecond_matrix = NULL;
 	}
 
-      ierr = VecDestroy(subsolution);
+      ierr = VecDestroy(&subsolution);
       CHKERRABORT(libMesh::COMM_WORLD,ierr);
-      ierr = VecDestroy(subrhs);
+      ierr = VecDestroy(&subrhs);
       CHKERRABORT(libMesh::COMM_WORLD,ierr);
-      ierr = MatDestroy(submat);
+      ierr = MatDestroy(&submat);
       CHKERRABORT(libMesh::COMM_WORLD,ierr);
-      ierr = MatDestroy(subprecond);
+      ierr = MatDestroy(&subprecond);
       CHKERRABORT(libMesh::COMM_WORLD,ierr);
     }
 
@@ -1254,11 +1254,11 @@ PetscLinearSolver<T>::solve (const ShellMatrix<T>& shell_matrix,
 	  CHKERRABORT(libMesh::COMM_WORLD,ierr);
 	  ierr = VecAXPY(subrhs,1.0,subvec2);
 
-	  ierr = VecScatterDestroy(scatter1);
+	  ierr = VecScatterDestroy(&scatter1);
 	  CHKERRABORT(libMesh::COMM_WORLD,ierr);
-	  ierr = VecDestroy(subvec1);
+	  ierr = VecDestroy(&subvec1);
 	  CHKERRABORT(libMesh::COMM_WORLD,ierr);
-	  ierr = MatDestroy(submat1);
+	  ierr = MatDestroy(&submat1);
 	  CHKERRABORT(libMesh::COMM_WORLD,ierr);
 	}
 
@@ -1323,19 +1323,19 @@ PetscLinearSolver<T>::solve (const ShellMatrix<T>& shell_matrix,
       ierr = VecScatterEnd(scatter,subsolution,solution->vec(),INSERT_VALUES,SCATTER_REVERSE);
       CHKERRABORT(libMesh::COMM_WORLD,ierr);
 
-      ierr = VecScatterDestroy(scatter);
+      ierr = VecScatterDestroy(&scatter);
       CHKERRABORT(libMesh::COMM_WORLD,ierr);
 
-      ierr = VecDestroy(subsolution);
+      ierr = VecDestroy(&subsolution);
       CHKERRABORT(libMesh::COMM_WORLD,ierr);
-      ierr = VecDestroy(subrhs);
+      ierr = VecDestroy(&subrhs);
       CHKERRABORT(libMesh::COMM_WORLD,ierr);
-      ierr = MatDestroy(submat);
+      ierr = MatDestroy(&submat);
       CHKERRABORT(libMesh::COMM_WORLD,ierr);
     }
 
   // Destroy the matrix.
-  ierr = MatDestroy(mat);
+  ierr = MatDestroy(&mat);
   CHKERRABORT(libMesh::COMM_WORLD,ierr);
 	 
   STOP_LOG("solve()", "PetscLinearSolver");
@@ -1537,11 +1537,11 @@ PetscLinearSolver<T>::solve (const ShellMatrix<T>& shell_matrix,
 	  CHKERRABORT(libMesh::COMM_WORLD,ierr);
 	  ierr = VecAXPY(subrhs,1.0,subvec2);
 	  
-	  ierr = VecScatterDestroy(scatter1);
+	  ierr = VecScatterDestroy(&scatter1);
 	  CHKERRABORT(libMesh::COMM_WORLD,ierr);
-	  ierr = VecDestroy(subvec1);
+	  ierr = VecDestroy(&subvec1);
 	  CHKERRABORT(libMesh::COMM_WORLD,ierr);
-	  ierr = MatDestroy(submat1);
+	  ierr = MatDestroy(&submat1);
 	  CHKERRABORT(libMesh::COMM_WORLD,ierr);
 	}
 
@@ -1615,7 +1615,7 @@ PetscLinearSolver<T>::solve (const ShellMatrix<T>& shell_matrix,
       ierr = VecScatterEnd(scatter,subsolution,solution->vec(),INSERT_VALUES,SCATTER_REVERSE);
       CHKERRABORT(libMesh::COMM_WORLD,ierr);
 
-      ierr = VecScatterDestroy(scatter);
+      ierr = VecScatterDestroy(&scatter);
       CHKERRABORT(libMesh::COMM_WORLD,ierr);
 
       if(this->_preconditioner)
@@ -1627,18 +1627,18 @@ PetscLinearSolver<T>::solve (const ShellMatrix<T>& shell_matrix,
 	  subprecond_matrix = NULL;
 	}
 
-      ierr = VecDestroy(subsolution);
+      ierr = VecDestroy(&subsolution);
       CHKERRABORT(libMesh::COMM_WORLD,ierr);
-      ierr = VecDestroy(subrhs);
+      ierr = VecDestroy(&subrhs);
       CHKERRABORT(libMesh::COMM_WORLD,ierr);
-      ierr = MatDestroy(submat);
+      ierr = MatDestroy(&submat);
       CHKERRABORT(libMesh::COMM_WORLD,ierr);
-      ierr = MatDestroy(subprecond);
+      ierr = MatDestroy(&subprecond);
       CHKERRABORT(libMesh::COMM_WORLD,ierr);
     }
 
   // Destroy the matrix.
-  ierr = MatDestroy(mat);
+  ierr = MatDestroy(&mat);
   CHKERRABORT(libMesh::COMM_WORLD,ierr);
 	 
   STOP_LOG("solve()", "PetscLinearSolver");
diff --git a/src/solvers/petsc_nonlinear_solver.C b/src/solvers/petsc_nonlinear_solver.C
index d1fcfe7..b5c4d7a 100644
--- a/src/solvers/petsc_nonlinear_solver.C
+++ b/src/solvers/petsc_nonlinear_solver.C
@@ -229,7 +229,7 @@ void PetscNonlinearSolver<T>::clear ()
 
       int ierr=0;
 
-      ierr = SNESDestroy(_snes);
+      ierr = SNESDestroy(&_snes);
              CHKERRABORT(libMesh::COMM_WORLD,ierr);
     }
 }
------------------------------------------------------------------------------
Got Input?   Slashdot Needs You.
Take our quick survey online.  Come on, we don't ask for help often.
Plus, you'll get a chance to win $100 to spend on ThinkGeek.
http://p.sf.net/sfu/slashdot-survey
_______________________________________________
Libmesh-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libmesh-devel

Reply via email to