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