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