1 #include <petsc/private/fortranimpl.h> 2 #include <petscmat.h> 3 #include <petscviewer.h> 4 5 #if defined(PETSC_HAVE_FORTRAN_CAPS) 6 #define matnullspacecreate0_ MATNULLSPACECREATE0 7 #define matnullspacecreate1_ MATNULLSPACECREATE1 8 #define matnullspacegetvecs_ MATNULLSPACEGETVECS 9 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 10 #define matnullspacecreate0_ matnullspacecreate0 11 #define matnullspacecreate1_ matnullspacecreate1 12 #define matnullspacegetvecs_ matnullspacegetvecs 13 #endif 14 15 PETSC_EXTERN void matnullspacecreate0_(MPI_Fint *comm, PetscBool *has_cnst, PetscInt *n, Vec vecs[], MatNullSpace *SP, PetscErrorCode *ierr) 16 { 17 *ierr = MatNullSpaceCreate(MPI_Comm_f2c(*(comm)), *has_cnst, *n, vecs, SP); 18 } 19 20 PETSC_EXTERN void matnullspacecreate1_(MPI_Fint *comm, PetscBool *has_cnst, PetscInt *n, Vec vecs[], MatNullSpace *SP, PetscErrorCode *ierr) 21 { 22 *ierr = MatNullSpaceCreate(MPI_Comm_f2c(*(comm)), *has_cnst, *n, vecs, SP); 23 } 24 25 PETSC_EXTERN void matnullspacegetvecs_(MatNullSpace *sp, PetscBool *HAS_CNST, PetscInt *N, Vec *VECS, PetscErrorCode *ierr) 26 { 27 PetscBool has_cnst; 28 PetscInt i, n; 29 const Vec *vecs; 30 31 CHKFORTRANNULLBOOL(HAS_CNST); 32 CHKFORTRANNULLINTEGER(N); 33 CHKFORTRANNULLOBJECT(VECS); 34 35 *ierr = MatNullSpaceGetVecs(*sp, &has_cnst, &n, &vecs); 36 37 if (HAS_CNST) { *HAS_CNST = has_cnst; } 38 if (N) { *N = n; } 39 if (VECS) { 40 for (i = 0; i < n; i++) { VECS[i] = vecs[i]; } 41 } 42 } 43