xref: /petsc/src/snes/linesearch/impls/shell/ftn-custom/zlinesearchshellf.c (revision 5f80ce2ab25dff0f4601e710601cbbcecf323266)
1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h>
2ea5d4fccSPeter Brune #include <petscsnes.h>
3ea5d4fccSPeter Brune 
4ea5d4fccSPeter Brune #if defined(PETSC_HAVE_FORTRAN_CAPS)
5f1c6b773SPeter Brune #define sneslinesearchshellsetuserfunc_          SNESLINESEARCHSHELLSETUSERFUNC
6f1c6b773SPeter Brune #define sneslinesearchshellgetuserfunc_          SNESLINESEARCHSHELLGETUSERFUNC
7ea5d4fccSPeter Brune #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
8f1c6b773SPeter Brune #define sneslinesearchshellsetuserfunc_          sneslinesearchshellsetuserfunc
9f1c6b773SPeter Brune #define sneslinesearchshellgetuserfunc_          sneslinesearchshellgetuserfunc
10ea5d4fccSPeter Brune #endif
11ea5d4fccSPeter Brune 
12f1c6b773SPeter Brune static PetscErrorCode oursneslinesearchshellfunction(SNESLineSearch linesearch, void *ctx)
13ea5d4fccSPeter Brune {
14*5f80ce2aSJacob Faibussowitsch   PetscFunctionBegin;
15*5f80ce2aSJacob Faibussowitsch   CHKERR_FORTRAN_VOID_FUNCTION((*(void (*)(SNESLineSearch*,void*,PetscErrorCode*))(((PetscObject)linesearch)->fortran_func_pointers[0]))(&linesearch,ctx,&ierr));
16*5f80ce2aSJacob Faibussowitsch   PetscFunctionReturn(0);
17ea5d4fccSPeter Brune }
18ea5d4fccSPeter Brune 
1919caf8f3SSatish Balay PETSC_EXTERN void sneslinesearchshellsetuserfunc_(SNESLineSearch *linesearch,void (*func)(SNESLineSearch*,void*,PetscErrorCode*),void *ctx,PetscErrorCode *ierr)
20ea5d4fccSPeter Brune {
21c87759e9SPeter Brune   PetscObjectAllocateFortranPointers(*linesearch,3);
22ea5d4fccSPeter Brune   ((PetscObject)*linesearch)->fortran_func_pointers[0] = (PetscVoidFunction)func;
23f5af7f23SKarl Rupp 
24f1c6b773SPeter Brune   *ierr = SNESLineSearchShellSetUserFunc(*linesearch,oursneslinesearchshellfunction,ctx);
25ea5d4fccSPeter Brune }
26ea5d4fccSPeter Brune 
2719caf8f3SSatish Balay PETSC_EXTERN void sneslinesearchshellgetuserfunc_(SNESLineSearch *linesearch, void * func, void **ctx,PetscErrorCode *ierr)
28ea5d4fccSPeter Brune {
29ea5d4fccSPeter Brune 
30ea5d4fccSPeter Brune   CHKFORTRANNULLINTEGER(ctx);
310298fd71SBarry Smith   *ierr = SNESLineSearchShellGetUserFunc(*linesearch,NULL,ctx);
32ea5d4fccSPeter Brune }
33