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