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 6285fb4e2SStefano Zampini #define pcfieldsplitschurgetsubksp_ PCFIELDSPLITSCHURGETSUBKSP 7218d4943SBarry Smith #define pcfieldsplitsetis_ PCFIELDSPLITSETIS 81193e19dSBarry Smith #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 91193e19dSBarry Smith #define pcfieldsplitgetsubksp_ pcfieldsplitgetsubksp 10285fb4e2SStefano Zampini #define pcfieldsplitschurgetsubksp_ pcfieldsplitschurgetsubksp 11218d4943SBarry Smith #define pcfieldsplitsetis_ pcfieldsplitsetis 121193e19dSBarry Smith #endif 131193e19dSBarry Smith 14285fb4e2SStefano Zampini PETSC_EXTERN void PETSC_STDCALL pcfieldsplitschurgetsubksp_(PC *pc,PetscInt *n_local,KSP *ksp,PetscErrorCode *ierr) 15285fb4e2SStefano Zampini { 16285fb4e2SStefano Zampini KSP *tksp; 17285fb4e2SStefano Zampini PetscInt i,nloc; 18285fb4e2SStefano Zampini CHKFORTRANNULLINTEGER(n_local); 19285fb4e2SStefano Zampini *ierr = PCFieldSplitSchurGetSubKSP(*pc,&nloc,&tksp); if (*ierr) return; 20285fb4e2SStefano Zampini if (n_local) *n_local = nloc; 21285fb4e2SStefano Zampini CHKFORTRANNULLOBJECT(ksp); 22285fb4e2SStefano Zampini if (ksp) { 23285fb4e2SStefano Zampini for (i=0; i<nloc; i++) ksp[i] = tksp[i]; 24285fb4e2SStefano Zampini } 25285fb4e2SStefano Zampini *ierr = PetscFree(tksp); 26285fb4e2SStefano Zampini } 27285fb4e2SStefano 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); 46*d49bb8f9SBarry Smith *ierr = PCFieldSplitSetIS(*pc,t,*is);if (*ierr) return; 47218d4943SBarry Smith FREECHAR(splitname,t); 48218d4943SBarry Smith } 49218d4943SBarry Smith 50218d4943SBarry Smith 51