xref: /petsc/src/snes/linesearch/impls/shell/ftn-custom/zlinesearchshellf.c (revision 2205254efee3a00a594e5e2a3a70f74dcb40bc03)
1 #include <petsc-private/fortranimpl.h>
2 #include <petscsnes.h>
3 
4 #if defined(PETSC_HAVE_FORTRAN_CAPS)
5 #define sneslinesearchshellsetuserfunc_          SNESLINESEARCHSHELLSETUSERFUNC
6 #define sneslinesearchshellgetuserfunc_          SNESLINESEARCHSHELLGETUSERFUNC
7 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
8 #define sneslinesearchshellsetuserfunc_          sneslinesearchshellsetuserfunc
9 #define sneslinesearchshellgetuserfunc_          sneslinesearchshellgetuserfunc
10 #endif
11 
12 static PetscErrorCode oursneslinesearchshellfunction(SNESLineSearch linesearch, void *ctx)
13 {
14   PetscErrorCode ierr = 0;
15   (*(void (PETSC_STDCALL*)(SNESLineSearch*,void*,PetscErrorCode*))(((PetscObject)linesearch)->fortran_func_pointers[0]))(&linesearch,ctx,&ierr);CHKERRQ(ierr);
16   return 0;
17 }
18 
19 EXTERN_C_BEGIN
20 
21 void PETSC_STDCALL sneslinesearchshellsetuserfunc_(SNESLineSearch *linesearch,void (PETSC_STDCALL*func)(SNESLineSearch*,void*,PetscErrorCode*),void *ctx,PetscErrorCode *ierr)
22 {
23   PetscObjectAllocateFortranPointers(*linesearch,3);
24   ((PetscObject)*linesearch)->fortran_func_pointers[0] = (PetscVoidFunction)func;
25 
26   *ierr = SNESLineSearchShellSetUserFunc(*linesearch,oursneslinesearchshellfunction,ctx);
27 }
28 
29 void PETSC_STDCALL sneslinesearchshellgetuserfunc_(SNESLineSearch *linesearch, void * func, void **ctx,PetscErrorCode *ierr)
30 {
31 
32   CHKFORTRANNULLINTEGER(ctx);
33   *ierr = SNESLineSearchShellGetUserFunc(*linesearch,PETSC_NULL,ctx);
34 }
35 EXTERN_C_END
36