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 8d6f11fddSBarry Smith #define pcfieldsplitgetis_ PCFIELDSPLITGETIS 91193e19dSBarry Smith #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 101193e19dSBarry Smith #define pcfieldsplitgetsubksp_ pcfieldsplitgetsubksp 11285fb4e2SStefano Zampini #define pcfieldsplitschurgetsubksp_ pcfieldsplitschurgetsubksp 12218d4943SBarry Smith #define pcfieldsplitsetis_ pcfieldsplitsetis 13d6f11fddSBarry Smith #define pcfieldsplitgetis_ pcfieldsplitgetis 141193e19dSBarry Smith #endif 151193e19dSBarry Smith 16*19caf8f3SSatish Balay PETSC_EXTERN void pcfieldsplitschurgetsubksp_(PC *pc,PetscInt *n_local,KSP *ksp,PetscErrorCode *ierr) 17285fb4e2SStefano Zampini { 18285fb4e2SStefano Zampini KSP *tksp; 19285fb4e2SStefano Zampini PetscInt i,nloc; 20285fb4e2SStefano Zampini CHKFORTRANNULLINTEGER(n_local); 21285fb4e2SStefano Zampini *ierr = PCFieldSplitSchurGetSubKSP(*pc,&nloc,&tksp); if (*ierr) return; 22285fb4e2SStefano Zampini if (n_local) *n_local = nloc; 23285fb4e2SStefano Zampini CHKFORTRANNULLOBJECT(ksp); 24285fb4e2SStefano Zampini if (ksp) { 25285fb4e2SStefano Zampini for (i=0; i<nloc; i++) ksp[i] = tksp[i]; 26285fb4e2SStefano Zampini } 27285fb4e2SStefano Zampini *ierr = PetscFree(tksp); 28285fb4e2SStefano Zampini } 29285fb4e2SStefano Zampini 30*19caf8f3SSatish Balay PETSC_EXTERN void pcfieldsplitgetsubksp_(PC *pc,PetscInt *n_local,KSP *ksp,PetscErrorCode *ierr) 311193e19dSBarry Smith { 321193e19dSBarry Smith KSP *tksp; 331193e19dSBarry Smith PetscInt i,nloc; 341193e19dSBarry Smith CHKFORTRANNULLINTEGER(n_local); 351193e19dSBarry Smith *ierr = PCFieldSplitGetSubKSP(*pc,&nloc,&tksp); if (*ierr) return; 361193e19dSBarry Smith if (n_local) *n_local = nloc; 371193e19dSBarry Smith CHKFORTRANNULLOBJECT(ksp); 381193e19dSBarry Smith if (ksp) { 392fa5cd67SKarl Rupp for (i=0; i<nloc; i++) ksp[i] = tksp[i]; 401193e19dSBarry Smith } 41e06cc25fSBarry Smith *ierr = PetscFree(tksp); 421193e19dSBarry Smith } 431193e19dSBarry Smith 44*19caf8f3SSatish Balay PETSC_EXTERN void pcfieldsplitsetis_(PC *pc, char* splitname,IS *is, PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len) 45218d4943SBarry Smith { 46218d4943SBarry Smith char *t; 47218d4943SBarry Smith FIXCHAR(splitname,len,t); 48d49bb8f9SBarry Smith *ierr = PCFieldSplitSetIS(*pc,t,*is);if (*ierr) return; 49218d4943SBarry Smith FREECHAR(splitname,t); 50218d4943SBarry Smith } 51218d4943SBarry Smith 52218d4943SBarry Smith 53*19caf8f3SSatish Balay PETSC_EXTERN void pcfieldsplitgetis_(PC *pc, char* splitname,IS *is, PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len) 54d6f11fddSBarry Smith { 55d6f11fddSBarry Smith char *t; 56d6f11fddSBarry Smith FIXCHAR(splitname,len,t); 57d6f11fddSBarry Smith *ierr = PCFieldSplitGetIS(*pc,t,is);if (*ierr) return; 58d6f11fddSBarry Smith FREECHAR(splitname,t); 59d6f11fddSBarry Smith } 60d6f11fddSBarry Smith 61d6f11fddSBarry Smith 62d6f11fddSBarry Smith 63