xref: /petsc/src/mat/interface/ftn-custom/zmatnullf.c (revision bcee047adeeb73090d7e36cc71e39fc287cdbb97)
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) { *HAS_CNST = has_cnst; }
40   if (N) { *N = n; }
41   if (VECS) {
42     for (i = 0; i < n; i++) { VECS[i] = vecs[i]; }
43   }
44 }
45 
46 PETSC_EXTERN void matnullspaceview_(MatNullSpace *sp, PetscViewer *vin, PetscErrorCode *ierr)
47 {
48   PetscViewer v;
49   PetscPatchDefaultViewers_Fortran(vin, v);
50   *ierr = MatNullSpaceView(*sp, v);
51 }
52