16dd63270SBarry Smith #include <petsc/private/ftnimpl.h>
2ea5d4fccSPeter Brune #include <petscsnes.h>
3ea5d4fccSPeter Brune
4ea5d4fccSPeter Brune #if defined(PETSC_HAVE_FORTRAN_CAPS)
59bcc50f1SBarry Smith #define sneslinesearchshellsetapply_ SNESLINESEARCHSHELLSETAPPLY
69bcc50f1SBarry Smith #define sneslinesearchshellgetapply_ SNESLINESEARCHSHELLGETAPPLY
7ea5d4fccSPeter Brune #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
89bcc50f1SBarry Smith #define sneslinesearchshellsetapply_ sneslinesearchshellsetapply
99bcc50f1SBarry Smith #define sneslinesearchshellgetapply_ sneslinesearchshellgetapply
10ea5d4fccSPeter Brune #endif
11ea5d4fccSPeter Brune
oursneslinesearchshellfunction(SNESLineSearch linesearch,PetscCtx ctx)12*2a8381b2SBarry Smith static PetscErrorCode oursneslinesearchshellfunction(SNESLineSearch linesearch, PetscCtx ctx)
13ea5d4fccSPeter Brune {
145f80ce2aSJacob Faibussowitsch PetscFunctionBegin;
159566063dSJacob Faibussowitsch PetscCallFortranVoidFunction((*(void (*)(SNESLineSearch *, void *, PetscErrorCode *))(((PetscObject)linesearch)->fortran_func_pointers[0]))(&linesearch, ctx, &ierr));
163ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
17ea5d4fccSPeter Brune }
18ea5d4fccSPeter Brune
sneslinesearchshellsetapply_(SNESLineSearch * linesearch,void (* func)(SNESLineSearch *,void *,PetscErrorCode *),PetscCtx ctx,PetscErrorCode * ierr)19*2a8381b2SBarry Smith PETSC_EXTERN void sneslinesearchshellsetapply_(SNESLineSearch *linesearch, void (*func)(SNESLineSearch *, void *, PetscErrorCode *), PetscCtx ctx, PetscErrorCode *ierr)
20ea5d4fccSPeter Brune {
21c87759e9SPeter Brune PetscObjectAllocateFortranPointers(*linesearch, 3);
225ebfa9e9SBarry Smith ((PetscObject)*linesearch)->fortran_func_pointers[0] = (PetscFortranCallbackFn *)func;
23f5af7f23SKarl Rupp
249bcc50f1SBarry Smith *ierr = SNESLineSearchShellSetApply(*linesearch, oursneslinesearchshellfunction, ctx);
25ea5d4fccSPeter Brune }
26ea5d4fccSPeter Brune
sneslinesearchshellgetapply_(SNESLineSearch * linesearch,void * func,void ** ctx,PetscErrorCode * ierr)279bcc50f1SBarry Smith PETSC_EXTERN void sneslinesearchshellgetapply_(SNESLineSearch *linesearch, void *func, void **ctx, PetscErrorCode *ierr)
28ea5d4fccSPeter Brune {
29ea5d4fccSPeter Brune CHKFORTRANNULLINTEGER(ctx);
309bcc50f1SBarry Smith *ierr = SNESLineSearchShellGetApply(*linesearch, NULL, ctx);
31ea5d4fccSPeter Brune }
32