xref: /petsc/src/ksp/pc/impls/fieldsplit/ftn-custom/zfieldsplitf.c (revision 6dd63270497ad23dcf16ae500a87ff2b2a0b7474)
1*6dd63270SBarry Smith #include <petsc/private/ftnimpl.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
71193e19dSBarry Smith #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
81193e19dSBarry Smith   #define pcfieldsplitgetsubksp_      pcfieldsplitgetsubksp
9285fb4e2SStefano Zampini   #define pcfieldsplitschurgetsubksp_ pcfieldsplitschurgetsubksp
101193e19dSBarry Smith #endif
111193e19dSBarry Smith 
1219caf8f3SSatish Balay PETSC_EXTERN void pcfieldsplitschurgetsubksp_(PC *pc, PetscInt *n_local, KSP *ksp, PetscErrorCode *ierr)
13285fb4e2SStefano Zampini {
14285fb4e2SStefano Zampini   KSP     *tksp;
15285fb4e2SStefano Zampini   PetscInt i, nloc;
16285fb4e2SStefano Zampini   CHKFORTRANNULLINTEGER(n_local);
175975b3b6SBarry Smith   *ierr = PCFieldSplitSchurGetSubKSP(*pc, &nloc, &tksp);
185975b3b6SBarry Smith   if (*ierr) return;
19285fb4e2SStefano Zampini   if (n_local) *n_local = nloc;
20285fb4e2SStefano Zampini   CHKFORTRANNULLOBJECT(ksp);
21285fb4e2SStefano Zampini   if (ksp) {
22285fb4e2SStefano Zampini     for (i = 0; i < nloc; i++) ksp[i] = tksp[i];
23285fb4e2SStefano Zampini   }
24285fb4e2SStefano Zampini   *ierr = PetscFree(tksp);
25285fb4e2SStefano Zampini }
26285fb4e2SStefano Zampini 
2719caf8f3SSatish Balay PETSC_EXTERN void pcfieldsplitgetsubksp_(PC *pc, PetscInt *n_local, KSP *ksp, PetscErrorCode *ierr)
281193e19dSBarry Smith {
291193e19dSBarry Smith   KSP     *tksp;
301193e19dSBarry Smith   PetscInt i, nloc;
311193e19dSBarry Smith   CHKFORTRANNULLINTEGER(n_local);
325975b3b6SBarry Smith   *ierr = PCFieldSplitGetSubKSP(*pc, &nloc, &tksp);
335975b3b6SBarry Smith   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 }
41