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