1ea5d4fccSPeter Brune #include <private/fortranimpl.h> 2ea5d4fccSPeter Brune #include <petscsnes.h> 3ea5d4fccSPeter Brune 4ea5d4fccSPeter Brune #if defined(PETSC_HAVE_FORTRAN_CAPS) 5ea5d4fccSPeter Brune #define petsclinesearchsettype_ PETSCLINESEARCHSETTYPE 6*c87759e9SPeter Brune #define petsclinesearchsetprecheck_ PETSCLINESEARCHSETPRECHECK 7*c87759e9SPeter Brune #define petsclinesearchgetprecheck_ PETSCLINESEARCHGETPRECHECK 8*c87759e9SPeter Brune #define petsclinesearchsetpostcheck_ PETSCLINESEARCHSETPOSTCHECK 9*c87759e9SPeter Brune #define petsclinesearchgetpostcheck_ PETSCLINESEARCHGETPOSTCHECK 10ea5d4fccSPeter Brune #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 11ea5d4fccSPeter Brune #define petsclinesearchsettype_ petsclinesearchsettype 12*c87759e9SPeter Brune #define petsclinesearchsetprecheck_ petsclinesearchsetprecheck 13*c87759e9SPeter Brune #define petsclinesearchgetprecheck_ petsclinesearchgetprecheck 14*c87759e9SPeter Brune #define petsclinesearchsetpostcheck_ petsclinesearchsetpostcheck 15*c87759e9SPeter Brune #define petsclinesearchgetpostcheck_ petsclinesearchgetpostcheck 16*c87759e9SPeter Brune 17ea5d4fccSPeter Brune #endif 18ea5d4fccSPeter Brune 19*c87759e9SPeter Brune /* fortranpointers go: shell, precheck, postcheck */ 20*c87759e9SPeter Brune 21*c87759e9SPeter Brune static PetscErrorCode ourpetsclinesearchprecheck(PetscLineSearch linesearch, Vec X, Vec Y, PetscBool * changed, void * ctx) 22*c87759e9SPeter Brune { 23*c87759e9SPeter Brune PetscErrorCode ierr = 0; 24*c87759e9SPeter Brune (*(void (PETSC_STDCALL *)(PetscLineSearch*,Vec*, Vec*, PetscBool*,void*,PetscErrorCode*))(((PetscObject)linesearch)->fortran_func_pointers[1]))(&linesearch,&X,&Y,changed,ctx,&ierr);CHKERRQ(ierr); 25*c87759e9SPeter Brune return 0; 26*c87759e9SPeter Brune } 27*c87759e9SPeter Brune 28*c87759e9SPeter Brune static PetscErrorCode ourpetsclinesearchpostcheck(PetscLineSearch linesearch, Vec X, Vec Y, Vec W, PetscBool * changed_Y, PetscBool * changed_W, void * ctx) 29*c87759e9SPeter Brune { 30*c87759e9SPeter Brune PetscErrorCode ierr = 0; 31*c87759e9SPeter Brune (*(void (PETSC_STDCALL *)(PetscLineSearch*,Vec*,Vec*,Vec*,PetscBool*,PetscBool*,void*,PetscErrorCode*)) 32*c87759e9SPeter Brune (((PetscObject)linesearch)->fortran_func_pointers[2]))(&linesearch,&X,&Y,&W,changed_Y,changed_W,ctx,&ierr);CHKERRQ(ierr); 33*c87759e9SPeter Brune return 0; 34*c87759e9SPeter Brune } 35*c87759e9SPeter Brune 36ea5d4fccSPeter Brune EXTERN_C_BEGIN 37ea5d4fccSPeter Brune 38ea5d4fccSPeter Brune void PETSC_STDCALL petsclinesearchsettype_(PetscLineSearch *linesearch,CHAR type PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 39ea5d4fccSPeter Brune { 40ea5d4fccSPeter Brune char *t; 41ea5d4fccSPeter Brune 42ea5d4fccSPeter Brune FIXCHAR(type,len,t); 43ea5d4fccSPeter Brune *ierr = PetscLineSearchSetType(*linesearch,t); 44ea5d4fccSPeter Brune FREECHAR(type,t); 45ea5d4fccSPeter Brune } 46*c87759e9SPeter Brune 47*c87759e9SPeter Brune 48*c87759e9SPeter Brune void PETSC_STDCALL petsclinesearchsetprecheck_(PetscLineSearch *linesearch, 49*c87759e9SPeter Brune void (PETSC_STDCALL *func)(PetscLineSearch*,Vec*,Vec*,PetscBool*,PetscErrorCode*), 50*c87759e9SPeter Brune void *ctx, 51*c87759e9SPeter Brune PetscErrorCode *ierr) 52*c87759e9SPeter Brune { 53*c87759e9SPeter Brune PetscObjectAllocateFortranPointers(*linesearch,3); 54*c87759e9SPeter Brune ((PetscObject)*linesearch)->fortran_func_pointers[1] = (PetscVoidFunction)func; 55*c87759e9SPeter Brune *ierr = PetscLineSearchSetPreCheck(*linesearch,ourpetsclinesearchprecheck,ctx); 56*c87759e9SPeter Brune } 57*c87759e9SPeter Brune 58*c87759e9SPeter Brune void PETSC_STDCALL petsclinesearchsetpostcheck_(PetscLineSearch *linesearch, 59*c87759e9SPeter Brune void (PETSC_STDCALL *func)(PetscLineSearch*,Vec*,Vec*,Vec*,PetscBool*,PetscBool*,PetscErrorCode*,void*), 60*c87759e9SPeter Brune void *ctx, 61*c87759e9SPeter Brune PetscErrorCode *ierr) 62*c87759e9SPeter Brune { 63*c87759e9SPeter Brune PetscObjectAllocateFortranPointers(*linesearch,3); 64*c87759e9SPeter Brune ((PetscObject)*linesearch)->fortran_func_pointers[2] = (PetscVoidFunction)func; 65*c87759e9SPeter Brune *ierr = PetscLineSearchSetPostCheck(*linesearch,ourpetsclinesearchpostcheck,ctx); 66*c87759e9SPeter Brune } 67*c87759e9SPeter Brune 68*c87759e9SPeter Brune 69ea5d4fccSPeter Brune EXTERN_C_END 70