16dd63270SBarry Smith #include <petsc/private/ftnimpl.h>
2ea5d4fccSPeter Brune #include <petscsnes.h>
3ea5d4fccSPeter Brune
4ea5d4fccSPeter Brune #if defined(PETSC_HAVE_FORTRAN_CAPS)
5f1c6b773SPeter Brune #define sneslinesearchsetprecheck_ SNESLINESEARCHSETPRECHECK
6f1c6b773SPeter Brune #define sneslinesearchgetprecheck_ SNESLINESEARCHGETPRECHECK
7f1c6b773SPeter Brune #define sneslinesearchsetpostcheck_ SNESLINESEARCHSETPOSTCHECK
8f1c6b773SPeter Brune #define sneslinesearchgetpostcheck_ SNESLINESEARCHGETPOSTCHECK
9ea5d4fccSPeter Brune #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
10f1c6b773SPeter Brune #define sneslinesearchsetprecheck_ sneslinesearchsetprecheck
11f1c6b773SPeter Brune #define sneslinesearchgetprecheck_ sneslinesearchgetprecheck
12f1c6b773SPeter Brune #define sneslinesearchsetpostcheck_ sneslinesearchsetpostcheck
13f1c6b773SPeter Brune #define sneslinesearchgetpostcheck_ sneslinesearchgetpostcheck
14ea5d4fccSPeter Brune #endif
15ea5d4fccSPeter Brune
16c87759e9SPeter Brune /* fortranpointers go: shell, precheck, postcheck */
17c87759e9SPeter Brune
oursneslinesearchprecheck(SNESLineSearch linesearch,Vec X,Vec Y,PetscBool * changed,PetscCtx ctx)18*2a8381b2SBarry Smith static PetscErrorCode oursneslinesearchprecheck(SNESLineSearch linesearch, Vec X, Vec Y, PetscBool *changed, PetscCtx ctx)
19c87759e9SPeter Brune {
205f80ce2aSJacob Faibussowitsch PetscFunctionBegin;
219566063dSJacob Faibussowitsch PetscCallFortranVoidFunction((*(void (*)(SNESLineSearch *, Vec *, Vec *, PetscBool *, void *, PetscErrorCode *))(((PetscObject)linesearch)->fortran_func_pointers[1]))(&linesearch, &X, &Y, changed, ctx, &ierr));
223ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
23c87759e9SPeter Brune }
24c87759e9SPeter Brune
oursneslinesearchpostcheck(SNESLineSearch linesearch,Vec X,Vec Y,Vec W,PetscBool * changed_Y,PetscBool * changed_W,PetscCtx ctx)25*2a8381b2SBarry Smith static PetscErrorCode oursneslinesearchpostcheck(SNESLineSearch linesearch, Vec X, Vec Y, Vec W, PetscBool *changed_Y, PetscBool *changed_W, PetscCtx ctx)
26c87759e9SPeter Brune {
275f80ce2aSJacob Faibussowitsch PetscFunctionBegin;
289566063dSJacob Faibussowitsch 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));
293ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
30c87759e9SPeter Brune }
31c87759e9SPeter Brune
sneslinesearchsetprecheck_(SNESLineSearch * linesearch,void (* func)(SNESLineSearch *,Vec *,Vec *,PetscBool *,PetscErrorCode *),PetscCtx ctx,PetscErrorCode * ierr)32*2a8381b2SBarry Smith PETSC_EXTERN void sneslinesearchsetprecheck_(SNESLineSearch *linesearch, void (*func)(SNESLineSearch *, Vec *, Vec *, PetscBool *, PetscErrorCode *), PetscCtx ctx, PetscErrorCode *ierr)
33c87759e9SPeter Brune {
34c87759e9SPeter Brune PetscObjectAllocateFortranPointers(*linesearch, 3);
355ebfa9e9SBarry Smith ((PetscObject)*linesearch)->fortran_func_pointers[1] = (PetscFortranCallbackFn *)func;
36f5af7f23SKarl Rupp
37f1c6b773SPeter Brune *ierr = SNESLineSearchSetPreCheck(*linesearch, oursneslinesearchprecheck, ctx);
38c87759e9SPeter Brune }
39c87759e9SPeter Brune
sneslinesearchsetpostcheck_(SNESLineSearch * linesearch,void (* func)(SNESLineSearch *,Vec *,Vec *,Vec *,PetscBool *,PetscBool *,PetscErrorCode *,void *),PetscCtx ctx,PetscErrorCode * ierr)40*2a8381b2SBarry Smith PETSC_EXTERN void sneslinesearchsetpostcheck_(SNESLineSearch *linesearch, void (*func)(SNESLineSearch *, Vec *, Vec *, Vec *, PetscBool *, PetscBool *, PetscErrorCode *, void *), PetscCtx ctx, PetscErrorCode *ierr)
41c87759e9SPeter Brune {
42c87759e9SPeter Brune PetscObjectAllocateFortranPointers(*linesearch, 3);
435ebfa9e9SBarry Smith ((PetscObject)*linesearch)->fortran_func_pointers[2] = (PetscFortranCallbackFn *)func;
44f5af7f23SKarl Rupp
45f1c6b773SPeter Brune *ierr = SNESLineSearchSetPostCheck(*linesearch, oursneslinesearchpostcheck, ctx);
46c87759e9SPeter Brune }
47