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 #define matnullspaceview_ MATNULLSPACEVIEW 10 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 11 #define matnullspacecreate0_ matnullspacecreate0 12 #define matnullspacecreate1_ matnullspacecreate1 13 #define matnullspacegetvecs_ matnullspacegetvecs 14 #define matnullspaceview_ matnullspaceview 15 #endif 16 17 PETSC_EXTERN void matnullspacecreate0_(MPI_Fint * comm,PetscBool *has_cnst,PetscInt *n, Vec vecs[],MatNullSpace *SP, PetscErrorCode *ierr) 18 { 19 *ierr = MatNullSpaceCreate(MPI_Comm_f2c(*(comm)),*has_cnst,*n,vecs,SP); 20 } 21 22 PETSC_EXTERN void matnullspacecreate1_(MPI_Fint * comm,PetscBool *has_cnst,PetscInt *n, Vec vecs[],MatNullSpace *SP, PetscErrorCode *ierr) 23 { 24 *ierr = MatNullSpaceCreate(MPI_Comm_f2c(*(comm)),*has_cnst,*n,vecs,SP); 25 } 26 27 PETSC_EXTERN void matnullspacegetvecs_(MatNullSpace *sp,PetscBool *HAS_CNST,PetscInt *N, Vec *VECS,PetscErrorCode *ierr) 28 { 29 PetscBool has_cnst; 30 PetscInt i,n; 31 const Vec *vecs; 32 33 CHKFORTRANNULLBOOL(HAS_CNST); 34 CHKFORTRANNULLINTEGER(N); 35 CHKFORTRANNULLOBJECT(VECS); 36 37 *ierr = MatNullSpaceGetVecs(*sp, &has_cnst, &n, &vecs); 38 39 if (HAS_CNST) { 40 *HAS_CNST = has_cnst; 41 } 42 if (N) { 43 *N = n; 44 } 45 if (VECS) { 46 for (i=0; i<n; i++) { 47 VECS[i] = vecs[i]; 48 } 49 } 50 } 51 52 PETSC_EXTERN void matnullspaceview_(MatNullSpace *sp,PetscViewer *vin,PetscErrorCode *ierr) 53 { 54 PetscViewer v; 55 PetscPatchDefaultViewers_Fortran(vin,v); 56 *ierr = MatNullSpaceView(*sp,v); 57 } 58 59