30 #define __FeelPETSc_H 1
32 #include <feel/feelcore/feel.hpp>
34 #if defined( FEELPP_HAS_PETSC_H )
36 #include <petscerror.h>
37 #if defined( FEELPP_HAS_SLEPC )
43 #if (PETSC_VERSION_MAJOR == 3) && (PETSC_VERSION_MINOR >= 2)
44 typedef PetscBool PetscTruth;
46 typedef PetscTruth PetscBool;
49 #define PETSC_VERSION_LESS_THAN(major,minor,subminor) \
50 ((PETSC_VERSION_MAJOR < (major) || \
51 (PETSC_VERSION_MAJOR == (major) && (PETSC_VERSION_MINOR < (minor) || \
52 (PETSC_VERSION_MINOR == (minor) && \
53 PETSC_VERSION_SUBMINOR < (subminor))))) ? 1 : 0)
55 #define PETSC_VERSION_GREATER_THAN(major,minor,subminor) \
56 ((PETSC_VERSION_MAJOR > (major) || \
57 (PETSC_VERSION_MAJOR == (major) && (PETSC_VERSION_MINOR > (minor) || \
58 (PETSC_VERSION_MINOR == (minor) && \
59 PETSC_VERSION_SUBMINOR > (subminor))))) ? 1 : 0)
61 #define PETSC_VERSION_GREATER_OR_EQUAL_THAN(major,minor,subminor) \
62 ((PETSC_VERSION_MAJOR > (major) || \
63 (PETSC_VERSION_MAJOR == (major) && (PETSC_VERSION_MINOR >= (minor) || \
64 (PETSC_VERSION_MINOR == (minor) && \
65 PETSC_VERSION_SUBMINOR >= (subminor))))) ? 1 : 0)
71 FEELPP_STRONG_INLINE
int VecDestroy( Vec& vec )
73 #if (PETSC_VERSION_MAJOR == 3) && (PETSC_VERSION_MINOR >= 2)
74 return ::VecDestroy( &vec );
76 return ::VecDestroy( vec );
79 FEELPP_STRONG_INLINE
int VecScatterDestroy( VecScatter& scatter )
81 #if (PETSC_VERSION_MAJOR == 3) && (PETSC_VERSION_MINOR >= 2)
82 return ::VecScatterDestroy( &scatter );
84 return ::VecScatterDestroy( scatter );
89 FEELPP_STRONG_INLINE
int MatDestroy( Mat& mat )
91 #if (PETSC_VERSION_MAJOR == 3) && (PETSC_VERSION_MINOR >= 2)
92 return ::MatDestroy( &mat );
94 return ::MatDestroy( mat );
98 FEELPP_STRONG_INLINE
int ISDestroy( IS& is )
100 #if (PETSC_VERSION_MAJOR == 3) && (PETSC_VERSION_MINOR >= 2)
101 return ::ISDestroy( &is );
103 return ::ISDestroy( is );
106 FEELPP_STRONG_INLINE
int KSPDestroy ( KSP& ksp )
108 #if (PETSC_VERSION_MAJOR == 3) && (PETSC_VERSION_MINOR >= 2)
109 return ::KSPDestroy( &ksp );
111 return ::KSPDestroy( ksp );
114 FEELPP_STRONG_INLINE
int PCDestroy ( PC& pc )
116 #if (PETSC_VERSION_MAJOR == 3) && (PETSC_VERSION_MINOR >= 2)
117 return ::PCDestroy( &pc );
119 return ::PCDestroy( pc );
123 FEELPP_STRONG_INLINE
int MatNullSpaceDestroy( MatNullSpace& nullsp )
125 #if (PETSC_VERSION_MAJOR == 3) && (PETSC_VERSION_MINOR >= 2)
126 return ::MatNullSpaceDestroy( &nullsp );
128 return ::MatNullSpaceDestroy( nullsp );
131 FEELPP_STRONG_INLINE
int SNESDestroy ( SNES& snes )
133 #if (PETSC_VERSION_MAJOR == 3) && (PETSC_VERSION_MINOR >= 2)
134 return ::SNESDestroy( &snes );
136 return ::SNESDestroy( snes );
140 FEELPP_STRONG_INLINE
int PetscViewerDestroy ( PetscViewer& petsc_viewer )
142 #if (PETSC_VERSION_MAJOR == 3) && (PETSC_VERSION_MINOR >= 2)
143 return ::PetscViewerDestroy( &petsc_viewer );
145 return ::PetscViewerDestroy( petsc_viewer );