Actual source code: zlinesearchf.c

  1: #include <petsc/private/fortranimpl.h>
  2: #include <petscsnes.h>

  4: #if defined(PETSC_HAVE_FORTRAN_CAPS)
  5:   #define sneslinesearchsetprecheck_  SNESLINESEARCHSETPRECHECK
  6:   #define sneslinesearchgetprecheck_  SNESLINESEARCHGETPRECHECK
  7:   #define sneslinesearchsetpostcheck_ SNESLINESEARCHSETPOSTCHECK
  8:   #define sneslinesearchgetpostcheck_ SNESLINESEARCHGETPOSTCHECK
  9: #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
 10:   #define sneslinesearchsetprecheck_  sneslinesearchsetprecheck
 11:   #define sneslinesearchgetprecheck_  sneslinesearchgetprecheck
 12:   #define sneslinesearchsetpostcheck_ sneslinesearchsetpostcheck
 13:   #define sneslinesearchgetpostcheck_ sneslinesearchgetpostcheck

 15: #endif

 17: /* fortranpointers go: shell, precheck, postcheck */

 19: static PetscErrorCode oursneslinesearchprecheck(SNESLineSearch linesearch, Vec X, Vec Y, PetscBool *changed, void *ctx)
 20: {
 21:   PetscFunctionBegin;
 22:   PetscCallFortranVoidFunction((*(void (*)(SNESLineSearch *, Vec *, Vec *, PetscBool *, void *, PetscErrorCode *))(((PetscObject)linesearch)->fortran_func_pointers[1]))(&linesearch, &X, &Y, changed, ctx, &ierr));
 23:   PetscFunctionReturn(PETSC_SUCCESS);
 24: }

 26: static PetscErrorCode oursneslinesearchpostcheck(SNESLineSearch linesearch, Vec X, Vec Y, Vec W, PetscBool *changed_Y, PetscBool *changed_W, void *ctx)
 27: {
 28:   PetscFunctionBegin;
 29:   PetscCallFortranVoidFunction((*(void (*)(SNESLineSearch *, Vec *, Vec *, Vec *, PetscBool *, PetscBool *, void *, PetscErrorCode *))(((PetscObject)linesearch)->fortran_func_pointers[2]))(&linesearch, &X, &Y, &W, changed_Y, changed_W, ctx, &ierr));
 30:   PetscFunctionReturn(PETSC_SUCCESS);
 31: }

 33: PETSC_EXTERN void sneslinesearchsetprecheck_(SNESLineSearch *linesearch, void (*func)(SNESLineSearch *, Vec *, Vec *, PetscBool *, PetscErrorCode *), void *ctx, PetscErrorCode *ierr)
 34: {
 35:   PetscObjectAllocateFortranPointers(*linesearch, 3);
 36:   ((PetscObject)*linesearch)->fortran_func_pointers[1] = (PetscVoidFn *)func;

 38:   *ierr = SNESLineSearchSetPreCheck(*linesearch, oursneslinesearchprecheck, ctx);
 39: }

 41: PETSC_EXTERN void sneslinesearchsetpostcheck_(SNESLineSearch *linesearch, void (*func)(SNESLineSearch *, Vec *, Vec *, Vec *, PetscBool *, PetscBool *, PetscErrorCode *, void *), void *ctx, PetscErrorCode *ierr)
 42: {
 43:   PetscObjectAllocateFortranPointers(*linesearch, 3);
 44:   ((PetscObject)*linesearch)->fortran_func_pointers[2] = (PetscVoidFn *)func;

 46:   *ierr = SNESLineSearchSetPostCheck(*linesearch, oursneslinesearchpostcheck, ctx);
 47: }