xref: /petsc/src/ksp/pc/impls/fieldsplit/ftn-custom/zfieldsplitf.c (revision 4e278199b78715991f5c71ebbd945c1489263e6c)
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 #define pcfieldsplitgetis_            PCFIELDSPLITGETIS
9 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
10 #define pcfieldsplitgetsubksp_        pcfieldsplitgetsubksp
11 #define pcfieldsplitschurgetsubksp_   pcfieldsplitschurgetsubksp
12 #define pcfieldsplitsetis_            pcfieldsplitsetis
13 #define pcfieldsplitgetis_            pcfieldsplitgetis
14 #endif
15 
16 PETSC_EXTERN void pcfieldsplitschurgetsubksp_(PC *pc,PetscInt *n_local,KSP *ksp,PetscErrorCode *ierr)
17 {
18   KSP      *tksp;
19   PetscInt i,nloc;
20   CHKFORTRANNULLINTEGER(n_local);
21   *ierr = PCFieldSplitSchurGetSubKSP(*pc,&nloc,&tksp); if (*ierr) return;
22   if (n_local) *n_local = nloc;
23   CHKFORTRANNULLOBJECT(ksp);
24   if (ksp) {
25     for (i=0; i<nloc; i++) ksp[i] = tksp[i];
26   }
27   *ierr = PetscFree(tksp);
28 }
29 
30 PETSC_EXTERN void pcfieldsplitgetsubksp_(PC *pc,PetscInt *n_local,KSP *ksp,PetscErrorCode *ierr)
31 {
32   KSP      *tksp;
33   PetscInt i,nloc;
34   CHKFORTRANNULLINTEGER(n_local);
35   *ierr = PCFieldSplitGetSubKSP(*pc,&nloc,&tksp); if (*ierr) return;
36   if (n_local) *n_local = nloc;
37   CHKFORTRANNULLOBJECT(ksp);
38   if (ksp) {
39     for (i=0; i<nloc; i++) ksp[i] = tksp[i];
40   }
41   *ierr = PetscFree(tksp);
42 }
43 
44 PETSC_EXTERN void  pcfieldsplitsetis_(PC *pc, char* splitname,IS *is, PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
45 {
46   char *t;
47   FIXCHAR(splitname,len,t);
48   *ierr = PCFieldSplitSetIS(*pc,t,*is);if (*ierr) return;
49   FREECHAR(splitname,t);
50 }
51 
52 PETSC_EXTERN void  pcfieldsplitgetis_(PC *pc, char* splitname,IS *is, PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
53 {
54   char *t;
55   FIXCHAR(splitname,len,t);
56   *ierr = PCFieldSplitGetIS(*pc,t,is);if (*ierr) return;
57   FREECHAR(splitname,t);
58 }
59 
60