xref: /petsc/src/ksp/pc/impls/fieldsplit/ftn-custom/zfieldsplitf.c (revision d6f11fddcbc5503a4d8fb26ab62e20dc044b7e4b)
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
8*d6f11fddSBarry 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
13*d6f11fddSBarry Smith #define pcfieldsplitgetis_            pcfieldsplitgetis
141193e19dSBarry Smith #endif
151193e19dSBarry Smith 
16285fb4e2SStefano Zampini PETSC_EXTERN void PETSC_STDCALL 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 
308cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL 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 
44390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL  pcfieldsplitsetis_(PC *pc, char* splitname PETSC_MIXED_LEN(len),IS *is, PetscErrorCode *ierr PETSC_END_LEN(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*d6f11fddSBarry Smith PETSC_EXTERN void PETSC_STDCALL  pcfieldsplitgetis_(PC *pc, char* splitname PETSC_MIXED_LEN(len),IS *is, PetscErrorCode *ierr PETSC_END_LEN(len))
54*d6f11fddSBarry Smith {
55*d6f11fddSBarry Smith   char *t;
56*d6f11fddSBarry Smith   FIXCHAR(splitname,len,t);
57*d6f11fddSBarry Smith   *ierr = PCFieldSplitGetIS(*pc,t,is);if (*ierr) return;
58*d6f11fddSBarry Smith   FREECHAR(splitname,t);
59*d6f11fddSBarry Smith }
60*d6f11fddSBarry Smith 
61*d6f11fddSBarry Smith 
62*d6f11fddSBarry Smith 
63