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