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