xref: /petsc/src/mat/interface/ftn-custom/zmatnullf.c (revision 4187c4910aed66b29ed19505cf7b615c6f88dba2)
1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h>
2e7abf250SBlaise Bourdin #include <petscmat.h>
3665c2dedSJed Brown #include <petscviewer.h>
4e7abf250SBlaise Bourdin 
5e7abf250SBlaise Bourdin #if defined(PETSC_HAVE_FORTRAN_CAPS)
6*4187c491SVincent Le Chenadec #define matnullspacegetvecs_             MATNULLSPACEGETVECS
7e7abf250SBlaise Bourdin #define matnullspaceview_                MATNULLSPACEVIEW
8e7abf250SBlaise Bourdin #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
9*4187c491SVincent Le Chenadec #define matnullspacegetvecs_             matnullspacegetvecs
10e7abf250SBlaise Bourdin #define matnullspaceview_                matnullspaceview
11e7abf250SBlaise Bourdin #endif
12e7abf250SBlaise Bourdin 
13*4187c491SVincent Le Chenadec PETSC_EXTERN void PETSC_STDCALL matnullspacegetvecs_(MatNullSpace *sp,PetscBool *HAS_CNST,PetscInt *N, Vec *VECS,PetscErrorCode *ierr)
14*4187c491SVincent Le Chenadec {
15*4187c491SVincent Le Chenadec   PetscBool has_cnst;
16*4187c491SVincent Le Chenadec   PetscInt i,n;
17*4187c491SVincent Le Chenadec   const Vec *vecs;
18*4187c491SVincent Le Chenadec 
19*4187c491SVincent Le Chenadec   CHKFORTRANNULLBOOL(HAS_CNST);
20*4187c491SVincent Le Chenadec   CHKFORTRANNULLINTEGER(N);
21*4187c491SVincent Le Chenadec   CHKFORTRANNULLOBJECT(VECS);
22*4187c491SVincent Le Chenadec 
23*4187c491SVincent Le Chenadec   *ierr = MatNullSpaceGetVecs(*sp, &has_cnst, &n, &vecs);
24*4187c491SVincent Le Chenadec 
25*4187c491SVincent Le Chenadec   if (HAS_CNST) {
26*4187c491SVincent Le Chenadec     *HAS_CNST = has_cnst;
27*4187c491SVincent Le Chenadec   }
28*4187c491SVincent Le Chenadec   if (N) {
29*4187c491SVincent Le Chenadec     *N = n;
30*4187c491SVincent Le Chenadec   }
31*4187c491SVincent Le Chenadec   if (VECS) {
32*4187c491SVincent Le Chenadec     for (i=0; i<n; i++) {
33*4187c491SVincent Le Chenadec       VECS[i] = vecs[i];
34*4187c491SVincent Le Chenadec     }
35*4187c491SVincent Le Chenadec   }
36*4187c491SVincent Le Chenadec }
37*4187c491SVincent Le Chenadec 
388cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspaceview_(MatNullSpace *sp,PetscViewer *vin,PetscErrorCode *ierr)
39e7abf250SBlaise Bourdin {
40e7abf250SBlaise Bourdin   PetscViewer v;
41e7abf250SBlaise Bourdin   PetscPatchDefaultViewers_Fortran(vin,v);
42e7abf250SBlaise Bourdin   *ierr = MatNullSpaceView(*sp,v);
43e7abf250SBlaise Bourdin }
449f7953f8SBarry Smith 
45