xref: /petsc/src/mat/interface/ftn-custom/zmatnullf.c (revision c3c607cc91279636665fbf935e3f85aadf0f476e)
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