1*b45d2f2cSJed 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 48f1c6b773SPeter Brune void PETSC_STDCALL sneslinesearchsetprecheck_(SNESLineSearch *linesearch, 49f1c6b773SPeter Brune void (PETSC_STDCALL *func)(SNESLineSearch*,Vec*,Vec*,PetscBool*,PetscErrorCode*), 50c87759e9SPeter Brune void *ctx, 51c87759e9SPeter Brune PetscErrorCode *ierr) 52c87759e9SPeter Brune { 53c87759e9SPeter Brune PetscObjectAllocateFortranPointers(*linesearch,3); 54c87759e9SPeter Brune ((PetscObject)*linesearch)->fortran_func_pointers[1] = (PetscVoidFunction)func; 55f1c6b773SPeter Brune *ierr = SNESLineSearchSetPreCheck(*linesearch,oursneslinesearchprecheck,ctx); 56c87759e9SPeter Brune } 57c87759e9SPeter Brune 58f1c6b773SPeter Brune void PETSC_STDCALL sneslinesearchsetpostcheck_(SNESLineSearch *linesearch, 59f1c6b773SPeter Brune void (PETSC_STDCALL *func)(SNESLineSearch*,Vec*,Vec*,Vec*,PetscBool*,PetscBool*,PetscErrorCode*,void*), 60c87759e9SPeter Brune void *ctx, 61c87759e9SPeter Brune PetscErrorCode *ierr) 62c87759e9SPeter Brune { 63c87759e9SPeter Brune PetscObjectAllocateFortranPointers(*linesearch,3); 64c87759e9SPeter Brune ((PetscObject)*linesearch)->fortran_func_pointers[2] = (PetscVoidFunction)func; 65f1c6b773SPeter Brune *ierr = SNESLineSearchSetPostCheck(*linesearch,oursneslinesearchpostcheck,ctx); 66c87759e9SPeter Brune } 67c87759e9SPeter Brune 68c87759e9SPeter Brune 69ea5d4fccSPeter Brune EXTERN_C_END 70