Actual source code: zfieldsplitf.c
1: #include <petsc/private/ftnimpl.h>
2: #include <petscksp.h>
4: #if defined(PETSC_HAVE_FORTRAN_CAPS)
5: #define pcfieldsplitgetsubksp_ PCFIELDSPLITGETSUBKSP
6: #define pcfieldsplitschurgetsubksp_ PCFIELDSPLITSCHURGETSUBKSP
7: #define pcfieldsplitrestoresubksp_ PCFIELDSPLITRESTORESUBKSP
8: #define pcfieldsplitschurrestoresubksp_ PCFIELDSPLITSCHURRESTORESUBKSP
9: #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
10: #define pcfieldsplitgetsubksp_ pcfieldsplitgetsubksp
11: #define pcfieldsplitschurgetsubksp_ pcfieldsplitschurgetsubksp
12: #define pcfieldsplitrestoresubksp_ pcfieldsplitrestoresubksp
13: #define pcfieldsplitschurrestoresubksp_ pcfieldsplitschurrestoresubksp
14: #endif
16: PETSC_EXTERN void pcfieldsplitschurgetsubksp_(PC *pc, PetscInt *n_local, F90Array1d *ksp, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrd))
17: {
18: KSP *tksp;
19: PetscInt nloc;
20: CHKFORTRANNULLINTEGER(n_local);
21: *ierr = PCFieldSplitSchurGetSubKSP(*pc, &nloc, &tksp);
22: if (*ierr) return;
23: if (n_local) *n_local = nloc;
24: *ierr = F90Array1dCreate(tksp, MPIU_FORTRANADDR, 1, nloc, ksp PETSC_F90_2PTR_PARAM(ptrd));
25: }
27: PETSC_EXTERN void pcfieldsplitgetsubksp_(PC *pc, PetscInt *n_local, F90Array1d *ksp, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrd))
28: {
29: KSP *tksp;
30: PetscInt nloc;
31: CHKFORTRANNULLINTEGER(n_local);
32: *ierr = PCFieldSplitGetSubKSP(*pc, &nloc, &tksp);
33: if (*ierr) return;
34: if (n_local) *n_local = nloc;
35: *ierr = F90Array1dCreate(tksp, MPIU_FORTRANADDR, 1, nloc, ksp PETSC_F90_2PTR_PARAM(ptrd));
36: }
38: PETSC_EXTERN void pcfieldsplitrestoresubksp_(PC *pc, PetscInt *n_local, F90Array1d *ksp, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrd))
39: {
40: void *array;
41: *ierr = F90Array1dAccess(ksp, MPIU_FORTRANADDR, (void **)&array PETSC_F90_2PTR_PARAM(ptrd));
42: if (*ierr) return;
43: *ierr = F90Array1dDestroy(ksp, MPIU_FORTRANADDR PETSC_F90_2PTR_PARAM(ptrd));
44: if (*ierr) return;
45: *ierr = PetscFree(array);
46: }
48: PETSC_EXTERN void pcfieldsplitschurerestoresubksp_(PC *pc, PetscInt *n_local, F90Array1d *ksp, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrd))
49: {
50: void *array;
51: *ierr = F90Array1dAccess(ksp, MPIU_FORTRANADDR, (void **)&array PETSC_F90_2PTR_PARAM(ptrd));
52: if (*ierr) return;
53: *ierr = F90Array1dDestroy(ksp, MPIU_FORTRANADDR PETSC_F90_2PTR_PARAM(ptrd));
54: if (*ierr) return;
55: *ierr = PetscFree(array);
56: }