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