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