Actual source code: zmatnullf.c

  1: #include <petsc/private/fortranimpl.h>
  2: #include <petscmat.h>
  3: #include <petscviewer.h>

  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

 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: }

 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: }

 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;

 33:   CHKFORTRANNULLBOOL(HAS_CNST);
 34:   CHKFORTRANNULLINTEGER(N);
 35:   CHKFORTRANNULLOBJECT(VECS);

 37:   *ierr = MatNullSpaceGetVecs(*sp, &has_cnst, &n, &vecs);

 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: }

 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: }