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