1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h> 21193e19dSBarry Smith #include <petscksp.h> 31193e19dSBarry Smith 41193e19dSBarry Smith #if defined(PETSC_HAVE_FORTRAN_CAPS) 51193e19dSBarry Smith #define pcfieldsplitgetsubksp_ PCFIELDSPLITGETSUBKSP 6*285fb4e2SStefano Zampini #define pcfieldsplitschurgetsubksp_ PCFIELDSPLITSCHURGETSUBKSP 7218d4943SBarry Smith #define pcfieldsplitsetis_ PCFIELDSPLITSETIS 81193e19dSBarry Smith #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 91193e19dSBarry Smith #define pcfieldsplitgetsubksp_ pcfieldsplitgetsubksp 10*285fb4e2SStefano Zampini #define pcfieldsplitschurgetsubksp_ pcfieldsplitschurgetsubksp 11218d4943SBarry Smith #define pcfieldsplitsetis_ pcfieldsplitsetis 121193e19dSBarry Smith #endif 131193e19dSBarry Smith 14*285fb4e2SStefano Zampini PETSC_EXTERN void PETSC_STDCALL pcfieldsplitschurgetsubksp_(PC *pc,PetscInt *n_local,KSP *ksp,PetscErrorCode *ierr) 15*285fb4e2SStefano Zampini { 16*285fb4e2SStefano Zampini KSP *tksp; 17*285fb4e2SStefano Zampini PetscInt i,nloc; 18*285fb4e2SStefano Zampini CHKFORTRANNULLINTEGER(n_local); 19*285fb4e2SStefano Zampini *ierr = PCFieldSplitSchurGetSubKSP(*pc,&nloc,&tksp); if (*ierr) return; 20*285fb4e2SStefano Zampini if (n_local) *n_local = nloc; 21*285fb4e2SStefano Zampini CHKFORTRANNULLOBJECT(ksp); 22*285fb4e2SStefano Zampini if (ksp) { 23*285fb4e2SStefano Zampini for (i=0; i<nloc; i++) ksp[i] = tksp[i]; 24*285fb4e2SStefano Zampini } 25*285fb4e2SStefano Zampini *ierr = PetscFree(tksp); 26*285fb4e2SStefano Zampini } 27*285fb4e2SStefano Zampini 288cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL pcfieldsplitgetsubksp_(PC *pc,PetscInt *n_local,KSP *ksp,PetscErrorCode *ierr) 291193e19dSBarry Smith { 301193e19dSBarry Smith KSP *tksp; 311193e19dSBarry Smith PetscInt i,nloc; 321193e19dSBarry Smith CHKFORTRANNULLINTEGER(n_local); 331193e19dSBarry Smith *ierr = PCFieldSplitGetSubKSP(*pc,&nloc,&tksp); if (*ierr) return; 341193e19dSBarry Smith if (n_local) *n_local = nloc; 351193e19dSBarry Smith CHKFORTRANNULLOBJECT(ksp); 361193e19dSBarry Smith if (ksp) { 372fa5cd67SKarl Rupp for (i=0; i<nloc; i++) ksp[i] = tksp[i]; 381193e19dSBarry Smith } 39e06cc25fSBarry Smith *ierr = PetscFree(tksp); 401193e19dSBarry Smith } 411193e19dSBarry Smith 42390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL pcfieldsplitsetis_(PC *pc, char* splitname PETSC_MIXED_LEN(len),IS *is, PetscErrorCode *ierr PETSC_END_LEN(len)) 43218d4943SBarry Smith { 44218d4943SBarry Smith char *t; 45218d4943SBarry Smith FIXCHAR(splitname,len,t); 46218d4943SBarry Smith *ierr = PCFieldSplitSetIS(*pc,t,*is); 47218d4943SBarry Smith FREECHAR(splitname,t); 48218d4943SBarry Smith } 49218d4943SBarry Smith 50218d4943SBarry Smith 51