1b45d2f2cSJed Brown #include <petsc-private/fortranimpl.h> 2ea5d4fccSPeter Brune #include <petscsnes.h> 3ea5d4fccSPeter Brune 4ea5d4fccSPeter Brune #if defined(PETSC_HAVE_FORTRAN_CAPS) 5f1c6b773SPeter Brune #define sneslinesearchsettype_ SNESLINESEARCHSETTYPE 6f1c6b773SPeter Brune #define sneslinesearchsetprecheck_ SNESLINESEARCHSETPRECHECK 7f1c6b773SPeter Brune #define sneslinesearchgetprecheck_ SNESLINESEARCHGETPRECHECK 8f1c6b773SPeter Brune #define sneslinesearchsetpostcheck_ SNESLINESEARCHSETPOSTCHECK 9f1c6b773SPeter Brune #define sneslinesearchgetpostcheck_ SNESLINESEARCHGETPOSTCHECK 10ea5d4fccSPeter Brune #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 11f1c6b773SPeter Brune #define sneslinesearchsettype_ sneslinesearchsettype 12f1c6b773SPeter Brune #define sneslinesearchsetprecheck_ sneslinesearchsetprecheck 13f1c6b773SPeter Brune #define sneslinesearchgetprecheck_ sneslinesearchgetprecheck 14f1c6b773SPeter Brune #define sneslinesearchsetpostcheck_ sneslinesearchsetpostcheck 15f1c6b773SPeter Brune #define sneslinesearchgetpostcheck_ sneslinesearchgetpostcheck 16c87759e9SPeter Brune 17ea5d4fccSPeter Brune #endif 18ea5d4fccSPeter Brune 19c87759e9SPeter Brune /* fortranpointers go: shell, precheck, postcheck */ 20c87759e9SPeter Brune 21f1c6b773SPeter Brune static PetscErrorCode oursneslinesearchprecheck(SNESLineSearch linesearch, Vec X, Vec Y, PetscBool * changed, void * ctx) 22c87759e9SPeter Brune { 23c87759e9SPeter Brune PetscErrorCode ierr = 0; 24f1c6b773SPeter Brune (*(void (PETSC_STDCALL*)(SNESLineSearch*,Vec*, Vec*, PetscBool*,void*,PetscErrorCode*))(((PetscObject)linesearch)->fortran_func_pointers[1]))(&linesearch,&X,&Y,changed,ctx,&ierr);CHKERRQ(ierr); 25c87759e9SPeter Brune return 0; 26c87759e9SPeter Brune } 27c87759e9SPeter Brune 28f1c6b773SPeter Brune static PetscErrorCode oursneslinesearchpostcheck(SNESLineSearch linesearch, Vec X, Vec Y, Vec W, PetscBool * changed_Y, PetscBool * changed_W, void * ctx) 29c87759e9SPeter Brune { 30c87759e9SPeter Brune PetscErrorCode ierr = 0; 31f1c6b773SPeter Brune (*(void (PETSC_STDCALL*)(SNESLineSearch*,Vec*,Vec*,Vec*,PetscBool*,PetscBool*,void*,PetscErrorCode*)) 32c87759e9SPeter Brune (((PetscObject)linesearch)->fortran_func_pointers[2]))(&linesearch,&X,&Y,&W,changed_Y,changed_W,ctx,&ierr);CHKERRQ(ierr); 33c87759e9SPeter Brune return 0; 34c87759e9SPeter Brune } 35c87759e9SPeter Brune 36ea5d4fccSPeter Brune EXTERN_C_BEGIN 37ea5d4fccSPeter Brune 38f1c6b773SPeter Brune void PETSC_STDCALL sneslinesearchsettype_(SNESLineSearch *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); 43f1c6b773SPeter Brune *ierr = SNESLineSearchSetType(*linesearch,t); 44ea5d4fccSPeter Brune FREECHAR(type,t); 45ea5d4fccSPeter Brune } 46c87759e9SPeter Brune 47c87759e9SPeter Brune 48*f5af7f23SKarl Rupp void PETSC_STDCALL sneslinesearchsetprecheck_(SNESLineSearch *linesearch,void (PETSC_STDCALL*func)(SNESLineSearch*,Vec*,Vec*,PetscBool*,PetscErrorCode*),void *ctx,PetscErrorCode *ierr) 49c87759e9SPeter Brune { 50c87759e9SPeter Brune PetscObjectAllocateFortranPointers(*linesearch,3); 51c87759e9SPeter Brune ((PetscObject)*linesearch)->fortran_func_pointers[1] = (PetscVoidFunction)func; 52*f5af7f23SKarl Rupp 53f1c6b773SPeter Brune *ierr = SNESLineSearchSetPreCheck(*linesearch,oursneslinesearchprecheck,ctx); 54c87759e9SPeter Brune } 55c87759e9SPeter Brune 56*f5af7f23SKarl Rupp void PETSC_STDCALL sneslinesearchsetpostcheck_(SNESLineSearch *linesearch,void (PETSC_STDCALL*func)(SNESLineSearch*,Vec*,Vec*,Vec*,PetscBool*,PetscBool*,PetscErrorCode*,void*),void *ctx,PetscErrorCode *ierr) 57c87759e9SPeter Brune { 58c87759e9SPeter Brune PetscObjectAllocateFortranPointers(*linesearch,3); 59c87759e9SPeter Brune ((PetscObject)*linesearch)->fortran_func_pointers[2] = (PetscVoidFunction)func; 60*f5af7f23SKarl Rupp 61f1c6b773SPeter Brune *ierr = SNESLineSearchSetPostCheck(*linesearch,oursneslinesearchpostcheck,ctx); 62c87759e9SPeter Brune } 63c87759e9SPeter Brune 64c87759e9SPeter Brune 65ea5d4fccSPeter Brune EXTERN_C_END 66