1 #include <petsc/private/fortranimpl.h> 2 #include <petscksp.h> 3 4 #if defined(PETSC_HAVE_FORTRAN_CAPS) 5 #define pcfieldsplitgetsubksp_ PCFIELDSPLITGETSUBKSP 6 #define pcfieldsplitsetis_ PCFIELDSPLITSETIS 7 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 8 #define pcfieldsplitgetsubksp_ pcfieldsplitgetsubksp 9 #define pcfieldsplitsetis_ pcfieldsplitsetis 10 #endif 11 12 PETSC_EXTERN void PETSC_STDCALL pcfieldsplitgetsubksp_(PC *pc,PetscInt *n_local,KSP *ksp,PetscErrorCode *ierr) 13 { 14 KSP *tksp; 15 PetscInt i,nloc; 16 CHKFORTRANNULLINTEGER(n_local); 17 *ierr = PCFieldSplitGetSubKSP(*pc,&nloc,&tksp); if (*ierr) return; 18 if (n_local) *n_local = nloc; 19 CHKFORTRANNULLOBJECT(ksp); 20 if (ksp) { 21 for (i=0; i<nloc; i++) ksp[i] = tksp[i]; 22 } 23 *ierr = PetscFree(tksp); 24 } 25 26 PETSC_EXTERN void PETSC_STDCALL pcfieldsplitsetis_(PC *pc, char* splitname PETSC_MIXED_LEN(len),IS *is, PetscErrorCode *ierr PETSC_END_LEN(len)) 27 { 28 char *t; 29 FIXCHAR(splitname,len,t); 30 *ierr = PCFieldSplitSetIS(*pc,t,*is); 31 FREECHAR(splitname,t); 32 } 33 34 35