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 PETSC_EXTERN void PETSC_STDCALL sneslinesearchshellsetuserfunc_(SNESLineSearch *linesearch,void (PETSC_STDCALL*func)(SNESLineSearch*,void*,PetscErrorCode*),void *ctx,PetscErrorCode *ierr) 20 { 21 PetscObjectAllocateFortranPointers(*linesearch,3); 22 ((PetscObject)*linesearch)->fortran_func_pointers[0] = (PetscVoidFunction)func; 23 24 *ierr = SNESLineSearchShellSetUserFunc(*linesearch,oursneslinesearchshellfunction,ctx); 25 } 26 27 PETSC_EXTERN void PETSC_STDCALL sneslinesearchshellgetuserfunc_(SNESLineSearch *linesearch, void * func, void **ctx,PetscErrorCode *ierr) 28 { 29 30 CHKFORTRANNULLINTEGER(ctx); 31 *ierr = SNESLineSearchShellGetUserFunc(*linesearch,NULL,ctx); 32 } 33