1 #include <petsc-private/fortranimpl.h> 2 #include <petscsnes.h> 3 4 #if defined(PETSC_HAVE_FORTRAN_CAPS) 5 #define snesshellsetsolve_ SNESSHELLSETSOLVE 6 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 7 #define snesshellsetsolve_ snesshellsetsolve 8 #endif 9 10 static PetscErrorCode oursnesshellsolve(SNES snes,Vec x) 11 { 12 PetscErrorCode ierr = 0; 13 (*(void (PETSC_STDCALL *)(SNES*,Vec*,PetscErrorCode*))(((PetscObject)snes)->fortran_func_pointers[12]))(&snes,&x,&ierr);CHKERRQ(ierr); 14 return 0; 15 } 16 void PETSC_STDCALL snesshellsetsolve_(SNES *snes,void (PETSC_STDCALL *func)(SNES*,Vec*,PetscErrorCode*),PetscErrorCode *ierr) 17 { 18 PetscObjectAllocateFortranPointers(*snes,14); 19 ((PetscObject)*snes)->fortran_func_pointers[12] = (PetscVoidFunction)func; 20 *ierr = SNESShellSetSolve(*snes,oursnesshellsolve); 21 } 22 23 24