1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h> 2e7abf250SBlaise Bourdin #include <petscmat.h> 3665c2dedSJed Brown #include <petscviewer.h> 4e7abf250SBlaise Bourdin 5e7abf250SBlaise Bourdin #if defined(PETSC_HAVE_FORTRAN_CAPS) 6*c3c607ccSBarry Smith #define matnullspacecreate0_ MATNULLSPACECREATE0 7*c3c607ccSBarry Smith #define matnullspacecreate1_ MATNULLSPACECREATE1 84187c491SVincent Le Chenadec #define matnullspacegetvecs_ MATNULLSPACEGETVECS 9e7abf250SBlaise Bourdin #define matnullspaceview_ MATNULLSPACEVIEW 10e7abf250SBlaise Bourdin #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 11*c3c607ccSBarry Smith #define matnullspacecreate0_ matnullspacecreate0 12*c3c607ccSBarry Smith #define matnullspacecreate1_ matnullspacecreate1 134187c491SVincent Le Chenadec #define matnullspacegetvecs_ matnullspacegetvecs 14e7abf250SBlaise Bourdin #define matnullspaceview_ matnullspaceview 15e7abf250SBlaise Bourdin #endif 16e7abf250SBlaise Bourdin 17*c3c607ccSBarry Smith PETSC_EXTERN void PETSC_STDCALL matnullspacecreate0_(MPI_Fint * comm,PetscBool *has_cnst,PetscInt *n, Vec vecs[],MatNullSpace *SP, PetscErrorCode *ierr ) 18*c3c607ccSBarry Smith { 19*c3c607ccSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(vecs); 20*c3c607ccSBarry Smith *ierr = MatNullSpaceCreate(MPI_Comm_f2c(*(comm)),*has_cnst,*n,vecs,SP); 21*c3c607ccSBarry Smith } 22*c3c607ccSBarry Smith 23*c3c607ccSBarry Smith PETSC_EXTERN void PETSC_STDCALL matnullspacecreate1_(MPI_Fint * comm,PetscBool *has_cnst,PetscInt *n, Vec vecs[],MatNullSpace *SP, PetscErrorCode *ierr ) 24*c3c607ccSBarry Smith { 25*c3c607ccSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(vecs); 26*c3c607ccSBarry Smith *ierr = MatNullSpaceCreate(MPI_Comm_f2c(*(comm)),*has_cnst,*n,vecs,SP); 27*c3c607ccSBarry Smith } 28*c3c607ccSBarry Smith 294187c491SVincent Le Chenadec PETSC_EXTERN void PETSC_STDCALL matnullspacegetvecs_(MatNullSpace *sp,PetscBool *HAS_CNST,PetscInt *N, Vec *VECS,PetscErrorCode *ierr) 304187c491SVincent Le Chenadec { 314187c491SVincent Le Chenadec PetscBool has_cnst; 324187c491SVincent Le Chenadec PetscInt i,n; 334187c491SVincent Le Chenadec const Vec *vecs; 344187c491SVincent Le Chenadec 354187c491SVincent Le Chenadec CHKFORTRANNULLBOOL(HAS_CNST); 364187c491SVincent Le Chenadec CHKFORTRANNULLINTEGER(N); 374187c491SVincent Le Chenadec CHKFORTRANNULLOBJECT(VECS); 384187c491SVincent Le Chenadec 394187c491SVincent Le Chenadec *ierr = MatNullSpaceGetVecs(*sp, &has_cnst, &n, &vecs); 404187c491SVincent Le Chenadec 414187c491SVincent Le Chenadec if (HAS_CNST) { 424187c491SVincent Le Chenadec *HAS_CNST = has_cnst; 434187c491SVincent Le Chenadec } 444187c491SVincent Le Chenadec if (N) { 454187c491SVincent Le Chenadec *N = n; 464187c491SVincent Le Chenadec } 474187c491SVincent Le Chenadec if (VECS) { 484187c491SVincent Le Chenadec for (i=0; i<n; i++) { 494187c491SVincent Le Chenadec VECS[i] = vecs[i]; 504187c491SVincent Le Chenadec } 514187c491SVincent Le Chenadec } 524187c491SVincent Le Chenadec } 534187c491SVincent Le Chenadec 548cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspaceview_(MatNullSpace *sp,PetscViewer *vin,PetscErrorCode *ierr) 55e7abf250SBlaise Bourdin { 56e7abf250SBlaise Bourdin PetscViewer v; 57e7abf250SBlaise Bourdin PetscPatchDefaultViewers_Fortran(vin,v); 58e7abf250SBlaise Bourdin *ierr = MatNullSpaceView(*sp,v); 59e7abf250SBlaise Bourdin } 609f7953f8SBarry Smith 61