Actual source code: zlinesearchf.c
1: #include <petsc/private/fortranimpl.h>
2: #include <petscsnes.h>
4: #if defined(PETSC_HAVE_FORTRAN_CAPS)
5: #define sneslinesearchgettype_ SNESLINESEARCHGETTYPE
6: #define sneslinesearchsettype_ SNESLINESEARCHSETTYPE
7: #define sneslinesearchsetprecheck_ SNESLINESEARCHSETPRECHECK
8: #define sneslinesearchgetprecheck_ SNESLINESEARCHGETPRECHECK
9: #define sneslinesearchsetpostcheck_ SNESLINESEARCHSETPOSTCHECK
10: #define sneslinesearchgetpostcheck_ SNESLINESEARCHGETPOSTCHECK
11: #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
12: #define sneslinesearchgettype_ sneslinesearchgettype
13: #define sneslinesearchsettype_ sneslinesearchsettype
14: #define sneslinesearchsetprecheck_ sneslinesearchsetprecheck
15: #define sneslinesearchgetprecheck_ sneslinesearchgetprecheck
16: #define sneslinesearchsetpostcheck_ sneslinesearchsetpostcheck
17: #define sneslinesearchgetpostcheck_ sneslinesearchgetpostcheck
19: #endif
21: /* fortranpointers go: shell, precheck, postcheck */
23: static PetscErrorCode oursneslinesearchprecheck(SNESLineSearch linesearch, Vec X, Vec Y, PetscBool *changed, void *ctx)
24: {
25: PetscFunctionBegin;
26: PetscCallFortranVoidFunction((*(void (*)(SNESLineSearch *, Vec *, Vec *, PetscBool *, void *, PetscErrorCode *))(((PetscObject)linesearch)->fortran_func_pointers[1]))(&linesearch, &X, &Y, changed, ctx, &ierr));
27: PetscFunctionReturn(PETSC_SUCCESS);
28: }
30: static PetscErrorCode oursneslinesearchpostcheck(SNESLineSearch linesearch, Vec X, Vec Y, Vec W, PetscBool *changed_Y, PetscBool *changed_W, void *ctx)
31: {
32: PetscFunctionBegin;
33: 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));
34: PetscFunctionReturn(PETSC_SUCCESS);
35: }
37: PETSC_EXTERN void sneslinesearchgettype_(SNESLineSearch *linesearch, char *name, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
38: {
39: const char *tname;
41: *ierr = SNESLineSearchGetType(*linesearch, &tname);
42: *ierr = PetscStrncpy(name, tname, len);
43: if (*ierr) return;
44: FIXRETURNCHAR(PETSC_TRUE, name, len);
45: }
47: PETSC_EXTERN void sneslinesearchsettype_(SNESLineSearch *linesearch, char *type, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
48: {
49: char *t;
51: FIXCHAR(type, len, t);
52: *ierr = SNESLineSearchSetType(*linesearch, t);
53: if (*ierr) return;
54: FREECHAR(type, t);
55: }
57: PETSC_EXTERN void sneslinesearchsetprecheck_(SNESLineSearch *linesearch, void (*func)(SNESLineSearch *, Vec *, Vec *, PetscBool *, PetscErrorCode *), void *ctx, PetscErrorCode *ierr)
58: {
59: PetscObjectAllocateFortranPointers(*linesearch, 3);
60: ((PetscObject)*linesearch)->fortran_func_pointers[1] = (PetscVoidFn *)func;
62: *ierr = SNESLineSearchSetPreCheck(*linesearch, oursneslinesearchprecheck, ctx);
63: }
65: PETSC_EXTERN void sneslinesearchsetpostcheck_(SNESLineSearch *linesearch, void (*func)(SNESLineSearch *, Vec *, Vec *, Vec *, PetscBool *, PetscBool *, PetscErrorCode *, void *), void *ctx, PetscErrorCode *ierr)
66: {
67: PetscObjectAllocateFortranPointers(*linesearch, 3);
68: ((PetscObject)*linesearch)->fortran_func_pointers[2] = (PetscVoidFn *)func;
70: *ierr = SNESLineSearchSetPostCheck(*linesearch, oursneslinesearchpostcheck, ctx);
71: }