xref: /petsc/src/ksp/pc/impls/fieldsplit/ftn-custom/zfieldsplitf.c (revision d6f11fddcbc5503a4d8fb26ab62e20dc044b7e4b)
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 PETSC_STDCALL 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 PETSC_STDCALL 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 PETSC_STDCALL  pcfieldsplitsetis_(PC *pc, char* splitname PETSC_MIXED_LEN(len),IS *is, PetscErrorCode *ierr PETSC_END_LEN(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 
53 PETSC_EXTERN void PETSC_STDCALL  pcfieldsplitgetis_(PC *pc, char* splitname PETSC_MIXED_LEN(len),IS *is, PetscErrorCode *ierr PETSC_END_LEN(len))
54 {
55   char *t;
56   FIXCHAR(splitname,len,t);
57   *ierr = PCFieldSplitGetIS(*pc,t,is);if (*ierr) return;
58   FREECHAR(splitname,t);
59 }
60 
61 
62 
63