xref: /petsc/src/snes/linesearch/impls/shell/ftn-custom/zlinesearchshellf.c (revision 1fbfccc64754fe06f18ca1a892bc44eff051222f)
1 #include <private/fortranimpl.h>
2 #include <petscsnes.h>
3 
4 #if defined(PETSC_HAVE_FORTRAN_CAPS)
5 #define petsclinesearchshellsetuserfunc_          PETSCLINESEARCHSHELLSETUSERFUNC
6 #define petsclinesearchshellgetuserfunc_          PETSCLINESEARCHSHELLGETUSERFUNC
7 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
8 #define petsclinesearchshellsetuserfunc_          petsclinesearchshellsetuserfunc
9 #define petsclinesearchshellgetuserfunc_          petsclinesearchshellgetuserfunc
10 #endif
11 
12 static PetscErrorCode ourpetsclinesearchshellfunction(PetscLineSearch linesearch, void *ctx)
13 {
14   PetscErrorCode ierr = 0;
15   (*(void (PETSC_STDCALL *)(PetscLineSearch*,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 petsclinesearchshellsetuserfunc_(PetscLineSearch *linesearch,
22                                                     void (PETSC_STDCALL *func)(PetscLineSearch*,void*,PetscErrorCode*),
23                                                     void *ctx,
24                                                     PetscErrorCode *ierr)
25 {
26   PetscObjectAllocateFortranPointers(*linesearch,3);
27   ((PetscObject)*linesearch)->fortran_func_pointers[0] = (PetscVoidFunction)func;
28   *ierr = PetscLineSearchShellSetUserFunc(*linesearch,ourpetsclinesearchshellfunction,ctx);
29 }
30 
31 void PETSC_STDCALL petsclinesearchshellgetuserfunc_(PetscLineSearch *linesearch, void * func, void **ctx,PetscErrorCode *ierr)
32 {
33 
34   CHKFORTRANNULLINTEGER(ctx);
35   *ierr = PetscLineSearchShellGetUserFunc(*linesearch,PETSC_NULL,ctx);
36 }
37 EXTERN_C_END
38