xref: /petsc/src/ksp/pc/impls/fieldsplit/ftn-custom/zfieldsplitf.c (revision 65f8aed5f7eaa1e2ef2ddeffe666264e0669c876)
1 #include <petsc/private/fortranimpl.h>
2 #include <petscksp.h>
3 
4 #if defined(PETSC_HAVE_FORTRAN_CAPS)
5 #define pcfieldsplitgetsubksp_        PCFIELDSPLITGETSUBKSP
6 #define pcfieldsplitschurgetsubksp_   PCFIELDSPLITSCHURGETSUBKSP
7 #define pcfieldsplitsetis_            PCFIELDSPLITSETIS
8 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
9 #define pcfieldsplitgetsubksp_        pcfieldsplitgetsubksp
10 #define pcfieldsplitschurgetsubksp_   pcfieldsplitschurgetsubksp
11 #define pcfieldsplitsetis_            pcfieldsplitsetis
12 #endif
13 
14 PETSC_EXTERN void PETSC_STDCALL pcfieldsplitschurgetsubksp_(PC *pc,PetscInt *n_local,KSP *ksp,PetscErrorCode *ierr)
15 {
16   KSP      *tksp;
17   PetscInt i,nloc;
18   CHKFORTRANNULLINTEGER(n_local);
19   *ierr = PCFieldSplitSchurGetSubKSP(*pc,&nloc,&tksp); if (*ierr) return;
20   if (n_local) *n_local = nloc;
21   CHKFORTRANNULLOBJECT(ksp);
22   if (ksp) {
23     for (i=0; i<nloc; i++) ksp[i] = tksp[i];
24   }
25   *ierr = PetscFree(tksp);
26 }
27 
28 PETSC_EXTERN void PETSC_STDCALL pcfieldsplitgetsubksp_(PC *pc,PetscInt *n_local,KSP *ksp,PetscErrorCode *ierr)
29 {
30   KSP      *tksp;
31   PetscInt i,nloc;
32   CHKFORTRANNULLINTEGER(n_local);
33   *ierr = PCFieldSplitGetSubKSP(*pc,&nloc,&tksp); if (*ierr) return;
34   if (n_local) *n_local = nloc;
35   CHKFORTRANNULLOBJECT(ksp);
36   if (ksp) {
37     for (i=0; i<nloc; i++) ksp[i] = tksp[i];
38   }
39   *ierr = PetscFree(tksp);
40 }
41 
42 PETSC_EXTERN void PETSC_STDCALL  pcfieldsplitsetis_(PC *pc, char* splitname PETSC_MIXED_LEN(len),IS *is, PetscErrorCode *ierr PETSC_END_LEN(len))
43 {
44   char *t;
45   FIXCHAR(splitname,len,t);
46   *ierr = PCFieldSplitSetIS(*pc,t,*is);
47   FREECHAR(splitname,t);
48 }
49 
50 
51