Actual source code: zsnesshellf.c
1: #include <petsc/private/fortranimpl.h>
2: #include <petscsnes.h>
4: #if defined(PETSC_HAVE_FORTRAN_CAPS)
5: #define snesshellsetsolve_ SNESSHELLSETSOLVE
6: #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
7: #define snesshellsetsolve_ snesshellsetsolve
8: #endif
10: static PetscErrorCode oursnesshellsolve(SNES snes, Vec x)
11: {
12: void (*func)(SNES *, Vec *, PetscErrorCode *);
13: PetscCall(PetscObjectQueryFunction((PetscObject)snes, "SNESShellSolve_C", &func));
14: PetscCheck(func, PetscObjectComm((PetscObject)snes), PETSC_ERR_USER, "SNESShellSetSolve() must be called before SNESSolve()");
15: PetscCallFortranVoidFunction(func(&snes, &x, &ierr));
16: return PETSC_SUCCESS;
17: }
19: PETSC_EXTERN void snesshellsetsolve_(SNES *snes, void (*func)(SNES *, Vec *, PetscErrorCode *), PetscErrorCode *ierr)
20: {
21: *ierr = PetscObjectComposeFunction((PetscObject)*snes, "SNESShellSolve_C", (PetscVoidFn *)func);
22: if (*ierr) return;
23: *ierr = SNESShellSetSolve(*snes, oursnesshellsolve);
24: }