Actual source code: zlinesearchf.c
1: #include <petsc/private/fortranimpl.h>
2: #include <petscsnes.h>
4: #if defined(PETSC_HAVE_FORTRAN_CAPS)
5: #define sneslinesearchsetprecheck_ SNESLINESEARCHSETPRECHECK
6: #define sneslinesearchgetprecheck_ SNESLINESEARCHGETPRECHECK
7: #define sneslinesearchsetpostcheck_ SNESLINESEARCHSETPOSTCHECK
8: #define sneslinesearchgetpostcheck_ SNESLINESEARCHGETPOSTCHECK
9: #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
10: #define sneslinesearchsetprecheck_ sneslinesearchsetprecheck
11: #define sneslinesearchgetprecheck_ sneslinesearchgetprecheck
12: #define sneslinesearchsetpostcheck_ sneslinesearchsetpostcheck
13: #define sneslinesearchgetpostcheck_ sneslinesearchgetpostcheck
15: #endif
17: /* fortranpointers go: shell, precheck, postcheck */
19: static PetscErrorCode oursneslinesearchprecheck(SNESLineSearch linesearch, Vec X, Vec Y, PetscBool *changed, void *ctx)
20: {
21: PetscFunctionBegin;
22: PetscCallFortranVoidFunction((*(void (*)(SNESLineSearch *, Vec *, Vec *, PetscBool *, void *, PetscErrorCode *))(((PetscObject)linesearch)->fortran_func_pointers[1]))(&linesearch, &X, &Y, changed, ctx, &ierr));
23: PetscFunctionReturn(PETSC_SUCCESS);
24: }
26: static PetscErrorCode oursneslinesearchpostcheck(SNESLineSearch linesearch, Vec X, Vec Y, Vec W, PetscBool *changed_Y, PetscBool *changed_W, void *ctx)
27: {
28: PetscFunctionBegin;
29: PetscCallFortranVoidFunction((*(void (*)(SNESLineSearch *, Vec *, Vec *, Vec *, PetscBool *, PetscBool *, void *, PetscErrorCode *))(((PetscObject)linesearch)->fortran_func_pointers[2]))(&linesearch, &X, &Y, &W, changed_Y, changed_W, ctx, &ierr));
30: PetscFunctionReturn(PETSC_SUCCESS);
31: }
33: PETSC_EXTERN void sneslinesearchsetprecheck_(SNESLineSearch *linesearch, void (*func)(SNESLineSearch *, Vec *, Vec *, PetscBool *, PetscErrorCode *), void *ctx, PetscErrorCode *ierr)
34: {
35: PetscObjectAllocateFortranPointers(*linesearch, 3);
36: ((PetscObject)*linesearch)->fortran_func_pointers[1] = (PetscVoidFn *)func;
38: *ierr = SNESLineSearchSetPreCheck(*linesearch, oursneslinesearchprecheck, ctx);
39: }
41: PETSC_EXTERN void sneslinesearchsetpostcheck_(SNESLineSearch *linesearch, void (*func)(SNESLineSearch *, Vec *, Vec *, Vec *, PetscBool *, PetscBool *, PetscErrorCode *, void *), void *ctx, PetscErrorCode *ierr)
42: {
43: PetscObjectAllocateFortranPointers(*linesearch, 3);
44: ((PetscObject)*linesearch)->fortran_func_pointers[2] = (PetscVoidFn *)func;
46: *ierr = SNESLineSearchSetPostCheck(*linesearch, oursneslinesearchpostcheck, ctx);
47: }