xref: /petsc/src/snes/linesearch/interface/ftn-custom/zlinesearchf.c (revision 4e8208cbcbc709572b8abe32f33c78b69c819375)
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