1 #include <petsc/private/ftnimpl.h> 2 #include <petscmat.h> 3 #include <petscviewer.h> 4 5 #if defined(PETSC_HAVE_FORTRAN_CAPS) 6 #define matnullspacegetvecs_ MATNULLSPACEGETVECS 7 #define matnullspacerestorevecs_ MATNULLSPACERESTOREVECS 8 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 9 #define matnullspacegetvecs_ matnullspacegetvecs 10 #define matnullspacerestorevecs_ matnullspacerestorevecs 11 #endif 12 13 PETSC_EXTERN void matnullspacegetvecs_(MatNullSpace *sp, PetscBool *HAS_CNST, PetscInt *N, F90Array1d *vecs, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrd)) 14 { 15 PetscBool has_cnst; 16 PetscInt n; 17 Vec *tvecs; 18 19 CHKFORTRANNULLBOOL(HAS_CNST); 20 CHKFORTRANNULLINTEGER(N); 21 *ierr = MatNullSpaceGetVecs(*sp, &has_cnst, &n, (const Vec **)&tvecs); 22 if (HAS_CNST) *HAS_CNST = has_cnst; 23 if (N) *N = n; 24 *ierr = F90Array1dCreate(tvecs, MPIU_FORTRANADDR, 1, n, vecs PETSC_F90_2PTR_PARAM(ptrd)); 25 } 26 27 PETSC_EXTERN void matnullspacerestorevecs_(MatNullSpace *sp, PetscBool *HAS_CNST, PetscInt *N, F90Array1d *vecs, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrd)) 28 { 29 *ierr = F90Array1dDestroy(vecs, MPIU_FORTRANADDR PETSC_F90_2PTR_PARAM(ptrd)); 30 } 31