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