Actual source code: ztaolinesearchf.c
1: #include <petsc/private/ftnimpl.h>
2: #include <petsc/private/taolinesearchimpl.h>
4: #if defined(PETSC_HAVE_FORTRAN_CAPS)
5: #define taolinesearchsetobjectiveroutine_ TAOLINESEARCHSETOBJECTIVEROUTINE
6: #define taolinesearchsetgradientroutine_ TAOLINESEARCHSETGRADIENTROUTINE
7: #define taolinesearchsetobjectiveandgradientroutine_ TAOLINESEARCHSETOBJECTIVEANDGRADIENTROUTINE
8: #define taolinesearchsetobjectiveandgtsroutine_ TAOLINESEARCHSETOBJECTIVEANDGTSROUTINE
9: #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
10: #define taolinesearchsetobjectiveroutine_ taolinesearchsetobjectiveroutine
11: #define taolinesearchsetgradientroutine_ taolinesearchsetgradientroutine
12: #define taolinesearchsetobjectiveandgradientroutine_ taolinesearchsetobjectiveandgradientroutine
13: #define taolinesearchsetobjectiveandgtsroutine_ taolinesearchsetobjectiveandgtsroutine
14: #endif
16: static int OBJ = 0;
17: static int GRAD = 1;
18: static int OBJGRAD = 2;
19: static int OBJGTS = 3;
20: static size_t NFUNCS = 4;
22: static PetscErrorCode ourtaolinesearchobjectiveroutine(TaoLineSearch ls, Vec x, PetscReal *f, void *ctx)
23: {
24: PetscCallFortranVoidFunction((*(void (*)(TaoLineSearch *, Vec *, PetscReal *, void *, PetscErrorCode *))(((PetscObject)ls)->fortran_func_pointers[OBJ]))(&ls, &x, f, ctx, &ierr));
25: return PETSC_SUCCESS;
26: }
28: static PetscErrorCode ourtaolinesearchgradientroutine(TaoLineSearch ls, Vec x, Vec g, void *ctx)
29: {
30: PetscCallFortranVoidFunction((*(void (*)(TaoLineSearch *, Vec *, Vec *, void *, PetscErrorCode *))(((PetscObject)ls)->fortran_func_pointers[GRAD]))(&ls, &x, &g, ctx, &ierr));
31: return PETSC_SUCCESS;
32: }
34: static PetscErrorCode ourtaolinesearchobjectiveandgradientroutine(TaoLineSearch ls, Vec x, PetscReal *f, Vec g, void *ctx)
35: {
36: PetscCallFortranVoidFunction((*(void (*)(TaoLineSearch *, Vec *, PetscReal *, Vec *, void *, PetscErrorCode *))(((PetscObject)ls)->fortran_func_pointers[OBJGRAD]))(&ls, &x, f, &g, ctx, &ierr));
37: return PETSC_SUCCESS;
38: }
40: static PetscErrorCode ourtaolinesearchobjectiveandgtsroutine(TaoLineSearch ls, Vec x, Vec s, PetscReal *f, PetscReal *gts, void *ctx)
41: {
42: PetscCallFortranVoidFunction((*(void (*)(TaoLineSearch *, Vec *, Vec *, PetscReal *, PetscReal *, void *, PetscErrorCode *))(((PetscObject)ls)->fortran_func_pointers[OBJGTS]))(&ls, &x, &s, f, gts, ctx, &ierr));
43: return PETSC_SUCCESS;
44: }
46: PETSC_EXTERN void taolinesearchsetobjectiveroutine_(TaoLineSearch *ls, void (*func)(TaoLineSearch *, Vec *, PetscReal *, void *, PetscErrorCode *), void *ctx, PetscErrorCode *ierr)
47: {
48: PetscObjectAllocateFortranPointers(*ls, NFUNCS);
49: if (!func) {
50: *ierr = TaoLineSearchSetObjectiveRoutine(*ls, NULL, ctx);
51: } else {
52: ((PetscObject)*ls)->fortran_func_pointers[OBJ] = (PetscVoidFn *)func;
53: *ierr = TaoLineSearchSetObjectiveRoutine(*ls, ourtaolinesearchobjectiveroutine, ctx);
54: }
55: }
57: PETSC_EXTERN void taolinesearchsetgradientroutine_(TaoLineSearch *ls, void (*func)(TaoLineSearch *, Vec *, Vec *, void *, PetscErrorCode *), void *ctx, PetscErrorCode *ierr)
58: {
59: PetscObjectAllocateFortranPointers(*ls, NFUNCS);
60: if (!func) {
61: *ierr = TaoLineSearchSetGradientRoutine(*ls, NULL, ctx);
62: } else {
63: ((PetscObject)*ls)->fortran_func_pointers[GRAD] = (PetscVoidFn *)func;
64: *ierr = TaoLineSearchSetGradientRoutine(*ls, ourtaolinesearchgradientroutine, ctx);
65: }
66: }
68: PETSC_EXTERN void taolinesearchsetobjectiveandgradientroutine_(TaoLineSearch *ls, void (*func)(TaoLineSearch *, Vec *, PetscReal *, Vec *, void *, PetscErrorCode *), void *ctx, PetscErrorCode *ierr)
69: {
70: PetscObjectAllocateFortranPointers(*ls, NFUNCS);
71: if (!func) {
72: *ierr = TaoLineSearchSetObjectiveAndGradientRoutine(*ls, NULL, ctx);
73: } else {
74: ((PetscObject)*ls)->fortran_func_pointers[OBJGRAD] = (PetscVoidFn *)func;
75: *ierr = TaoLineSearchSetObjectiveAndGradientRoutine(*ls, ourtaolinesearchobjectiveandgradientroutine, ctx);
76: }
77: }
79: PETSC_EXTERN void taolinesearchsetobjectiveandgtsroutine_(TaoLineSearch *ls, void (*func)(TaoLineSearch *, Vec *, Vec *, PetscReal *, PetscReal *, void *, PetscErrorCode *), void *ctx, PetscErrorCode *ierr)
80: {
81: PetscObjectAllocateFortranPointers(*ls, NFUNCS);
82: if (!func) {
83: *ierr = TaoLineSearchSetObjectiveAndGTSRoutine(*ls, NULL, ctx);
84: } else {
85: ((PetscObject)*ls)->fortran_func_pointers[OBJGTS] = (PetscVoidFn *)func;
86: *ierr = TaoLineSearchSetObjectiveAndGTSRoutine(*ls, ourtaolinesearchobjectiveandgtsroutine, ctx);
87: }
88: }