xref: /petsc/src/mat/interface/ftn-custom/zmatnullf.c (revision efd4aadf157bf1ba2d80c2be092fcf4247860003) !
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 PETSC_STDCALL  matnullspacecreate0_(MPI_Fint * comm,PetscBool *has_cnst,PetscInt *n, Vec vecs[],MatNullSpace *SP, PetscErrorCode *ierr )
18 {
19   CHKFORTRANNULLOBJECTDEREFERENCE(vecs);
20   *ierr = MatNullSpaceCreate(MPI_Comm_f2c(*(comm)),*has_cnst,*n,vecs,SP);
21 }
22 
23 PETSC_EXTERN void PETSC_STDCALL  matnullspacecreate1_(MPI_Fint * comm,PetscBool *has_cnst,PetscInt *n, Vec vecs[],MatNullSpace *SP, PetscErrorCode *ierr )
24 {
25   CHKFORTRANNULLOBJECTDEREFERENCE(vecs);
26   *ierr = MatNullSpaceCreate(MPI_Comm_f2c(*(comm)),*has_cnst,*n,vecs,SP);
27 }
28 
29 PETSC_EXTERN void PETSC_STDCALL matnullspacegetvecs_(MatNullSpace *sp,PetscBool *HAS_CNST,PetscInt *N, Vec *VECS,PetscErrorCode *ierr)
30 {
31   PetscBool has_cnst;
32   PetscInt i,n;
33   const Vec *vecs;
34 
35   CHKFORTRANNULLBOOL(HAS_CNST);
36   CHKFORTRANNULLINTEGER(N);
37   CHKFORTRANNULLOBJECT(VECS);
38 
39   *ierr = MatNullSpaceGetVecs(*sp, &has_cnst, &n, &vecs);
40 
41   if (HAS_CNST) {
42     *HAS_CNST = has_cnst;
43   }
44   if (N) {
45     *N = n;
46   }
47   if (VECS) {
48     for (i=0; i<n; i++) {
49       VECS[i] = vecs[i];
50     }
51   }
52 }
53 
54 PETSC_EXTERN void PETSC_STDCALL matnullspaceview_(MatNullSpace *sp,PetscViewer *vin,PetscErrorCode *ierr)
55 {
56   PetscViewer v;
57   PetscPatchDefaultViewers_Fortran(vin,v);
58   *ierr = MatNullSpaceView(*sp,v);
59 }
60 
61