xref: /petsc/src/ksp/pc/impls/fieldsplit/ftn-custom/zfieldsplitf.c (revision 285fb4e2b69b3de46a0633bd0adc6a7f684caa1e)
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