1*af0996ceSBarry Smith #include <petsc/private/fortranimpl.h> 2*af0996ceSBarry Smith #include <petsc/private/taolinesearchimpl.h> 3a7e14dcfSSatish Balay 4a7e14dcfSSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS) 5a7e14dcfSSatish Balay #define taolinesearchsetobjectiveroutine_ TAOLINESEARCHSETOBJECTIVEROUTINE 6a7e14dcfSSatish Balay #define taolinesearchsetgradientroutine_ TAOLINESEARCHSETGRADIENTROUTINE 7a7e14dcfSSatish Balay #define taolinesearchsetobjectiveandgradientroutine_ TAOLINESEARCHSETOBJECTIVEANDGRADIENTROUTINE 8a7e14dcfSSatish Balay #define taolinesearchsetobjectiveandgtsroutine_ TAOLINESEARCHSETOBJECTIVEANDGTSROUTINE 9a7e14dcfSSatish Balay #define taolinesearchview_ TAOLINESEARCHVIEW 10a7e14dcfSSatish Balay #define taolinesearchsettype_ TAOLINESEARCHSETTYPE 11a7e14dcfSSatish Balay 12a7e14dcfSSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 13a7e14dcfSSatish Balay 14a7e14dcfSSatish Balay #define taolinesearchsetobjectiveroutine_ taolinesearchsetobjectiveroutine 15a7e14dcfSSatish Balay #define taolinesearchsetgradientroutine_ taolinesearchsetgradientroutine 16a7e14dcfSSatish Balay #define taolinesearchsetobjectiveandgradientroutine_ taolinesearchsetobjectiveandgradientroutine 17a7e14dcfSSatish Balay #define taolinesearchsetobjectiveandgtsroutine_ taolinesearchsetobjectiveandgtsroutine 18a7e14dcfSSatish Balay #define taolinesearchview_ taolinesearchview 19a7e14dcfSSatish Balay #define taolinesearchsettype_ taolinesearchsettype 20a7e14dcfSSatish Balay 21a7e14dcfSSatish Balay #endif 22a7e14dcfSSatish Balay 23a7e14dcfSSatish Balay static int OBJ=0; 24a7e14dcfSSatish Balay static int GRAD=1; 25a7e14dcfSSatish Balay static int OBJGRAD=2; 26a7e14dcfSSatish Balay static int OBJGTS=3; 27a7e14dcfSSatish Balay static int NFUNCS=4; 28a7e14dcfSSatish Balay 29a7e14dcfSSatish Balay static PetscErrorCode ourtaolinesearchobjectiveroutine(TaoLineSearch ls, Vec x, PetscReal *f, void *ctx) 30a7e14dcfSSatish Balay { 31a7e14dcfSSatish Balay PetscErrorCode ierr = 0; 32a7e14dcfSSatish Balay (*(void (PETSC_STDCALL *)(TaoLineSearch*,Vec*,PetscReal*,void*,PetscErrorCode*)) 33a7e14dcfSSatish Balay (((PetscObject)ls)->fortran_func_pointers[OBJ]))(&ls,&x,f,ctx,&ierr); 34a7e14dcfSSatish Balay CHKERRQ(ierr); 35a7e14dcfSSatish Balay return 0; 36a7e14dcfSSatish Balay } 37a7e14dcfSSatish Balay 38a7e14dcfSSatish Balay static PetscErrorCode ourtaolinesearchgradientroutine(TaoLineSearch ls, Vec x, Vec g, void *ctx) 39a7e14dcfSSatish Balay { 40a7e14dcfSSatish Balay PetscErrorCode ierr = 0; 41a7e14dcfSSatish Balay (*(void (PETSC_STDCALL *)(TaoLineSearch*,Vec*,Vec*,void*,PetscErrorCode*)) 42a7e14dcfSSatish Balay (((PetscObject)ls)->fortran_func_pointers[GRAD]))(&ls,&x,&g,ctx,&ierr); 43a7e14dcfSSatish Balay CHKERRQ(ierr); 44a7e14dcfSSatish Balay return 0; 45a7e14dcfSSatish Balay 46a7e14dcfSSatish Balay } 47a7e14dcfSSatish Balay 48a7e14dcfSSatish Balay static PetscErrorCode ourtaolinesearchobjectiveandgradientroutine(TaoLineSearch ls, Vec x, PetscReal *f, Vec g, void* ctx) 49a7e14dcfSSatish Balay { 50a7e14dcfSSatish Balay PetscErrorCode ierr = 0; 51a7e14dcfSSatish Balay (*(void (PETSC_STDCALL *)(TaoLineSearch*,Vec*,PetscReal*,Vec*,void*,PetscErrorCode*)) 52a7e14dcfSSatish Balay (((PetscObject)ls)->fortran_func_pointers[OBJGRAD]))(&ls,&x,f,&g,ctx,&ierr); 53a7e14dcfSSatish Balay CHKERRQ(ierr); 54a7e14dcfSSatish Balay return 0; 55a7e14dcfSSatish Balay } 56a7e14dcfSSatish Balay 57a7e14dcfSSatish Balay static PetscErrorCode ourtaolinesearchobjectiveandgtsroutine(TaoLineSearch ls, Vec x, Vec s, PetscReal *f, PetscReal *gts, void* ctx) 58a7e14dcfSSatish Balay { 59a7e14dcfSSatish Balay PetscErrorCode ierr = 0; 60a7e14dcfSSatish Balay (*(void (PETSC_STDCALL *)(TaoLineSearch*,Vec*,Vec*,PetscReal*,PetscReal*,void*,PetscErrorCode*)) 61a7e14dcfSSatish Balay (((PetscObject)ls)->fortran_func_pointers[OBJGTS]))(&ls,&x,&s,f,gts,ctx,&ierr); 62a7e14dcfSSatish Balay CHKERRQ(ierr); 63a7e14dcfSSatish Balay return 0; 64a7e14dcfSSatish Balay } 65a7e14dcfSSatish Balay 66a7e14dcfSSatish Balay EXTERN_C_BEGIN 67a7e14dcfSSatish Balay 68a7e14dcfSSatish Balay 69a7e14dcfSSatish Balay 70a7e14dcfSSatish Balay void PETSC_STDCALL taolinesearchsetobjectiveroutine_(TaoLineSearch *ls, void (PETSC_STDCALL *func)(TaoLineSearch*, Vec *, PetscReal *, void *, PetscErrorCode *), void *ctx, PetscErrorCode *ierr) 71a7e14dcfSSatish Balay { 72a7e14dcfSSatish Balay CHKFORTRANNULLOBJECT(ctx); 73a7e14dcfSSatish Balay PetscObjectAllocateFortranPointers(*ls,NFUNCS); 74a7e14dcfSSatish Balay if (!func) { 75a7e14dcfSSatish Balay *ierr = TaoLineSearchSetObjectiveRoutine(*ls,0,ctx); 76a7e14dcfSSatish Balay } else { 77a7e14dcfSSatish Balay ((PetscObject)*ls)->fortran_func_pointers[OBJ] = (PetscVoidFunction)func; 78a7e14dcfSSatish Balay *ierr = TaoLineSearchSetObjectiveRoutine(*ls, ourtaolinesearchobjectiveroutine,ctx); 79a7e14dcfSSatish Balay } 80a7e14dcfSSatish Balay } 81a7e14dcfSSatish Balay 82a7e14dcfSSatish Balay void PETSC_STDCALL taolinesearchsetgradientroutine_(TaoLineSearch *ls, void (PETSC_STDCALL *func)(TaoLineSearch*, Vec *, Vec *, void *, PetscErrorCode *), void *ctx, PetscErrorCode *ierr) 83a7e14dcfSSatish Balay { 84a7e14dcfSSatish Balay CHKFORTRANNULLOBJECT(ctx); 85a7e14dcfSSatish Balay PetscObjectAllocateFortranPointers(*ls,NFUNCS); 86a7e14dcfSSatish Balay if (!func) { 87a7e14dcfSSatish Balay *ierr = TaoLineSearchSetGradientRoutine(*ls,0,ctx); 88a7e14dcfSSatish Balay } else { 89a7e14dcfSSatish Balay ((PetscObject)*ls)->fortran_func_pointers[GRAD] = (PetscVoidFunction)func; 90a7e14dcfSSatish Balay *ierr = TaoLineSearchSetGradientRoutine(*ls, ourtaolinesearchgradientroutine,ctx); 91a7e14dcfSSatish Balay } 92a7e14dcfSSatish Balay } 93a7e14dcfSSatish Balay 94a7e14dcfSSatish Balay void PETSC_STDCALL taolinesearchsetobjectiveandgradientroutine_(TaoLineSearch *ls, void (PETSC_STDCALL *func)(TaoLineSearch*, Vec *, PetscReal *, Vec *, void *, PetscErrorCode *), void *ctx, PetscErrorCode *ierr) 95a7e14dcfSSatish Balay { 96a7e14dcfSSatish Balay CHKFORTRANNULLOBJECT(ctx); 97a7e14dcfSSatish Balay PetscObjectAllocateFortranPointers(*ls,NFUNCS); 98a7e14dcfSSatish Balay if (!func) { 99a7e14dcfSSatish Balay *ierr = TaoLineSearchSetObjectiveAndGradientRoutine(*ls,0,ctx); 100a7e14dcfSSatish Balay } else { 101a7e14dcfSSatish Balay ((PetscObject)*ls)->fortran_func_pointers[OBJGRAD] = (PetscVoidFunction)func; 102a7e14dcfSSatish Balay *ierr = TaoLineSearchSetObjectiveAndGradientRoutine(*ls, ourtaolinesearchobjectiveandgradientroutine,ctx); 103a7e14dcfSSatish Balay } 104a7e14dcfSSatish Balay } 105a7e14dcfSSatish Balay 106a7e14dcfSSatish Balay 107a7e14dcfSSatish Balay 108a7e14dcfSSatish Balay 109a7e14dcfSSatish Balay void PETSC_STDCALL taolinesearchsetobjectiveandgtsroutine_(TaoLineSearch *ls, void (PETSC_STDCALL *func)(TaoLineSearch*, Vec *, Vec *, PetscReal*, PetscReal*,void*, PetscErrorCode *), void *ctx, PetscErrorCode *ierr) 110a7e14dcfSSatish Balay { 111a7e14dcfSSatish Balay CHKFORTRANNULLOBJECT(ctx); 112a7e14dcfSSatish Balay PetscObjectAllocateFortranPointers(*ls,NFUNCS); 113a7e14dcfSSatish Balay if (!func) { 114a7e14dcfSSatish Balay *ierr = TaoLineSearchSetObjectiveAndGTSRoutine(*ls,0,ctx); 115a7e14dcfSSatish Balay } else { 116a7e14dcfSSatish Balay ((PetscObject)*ls)->fortran_func_pointers[OBJGTS] = (PetscVoidFunction)func; 117a7e14dcfSSatish Balay *ierr = TaoLineSearchSetObjectiveAndGTSRoutine(*ls, ourtaolinesearchobjectiveandgtsroutine,ctx); 118a7e14dcfSSatish Balay } 119a7e14dcfSSatish Balay } 120a7e14dcfSSatish Balay 121a7e14dcfSSatish Balay 122a7e14dcfSSatish Balay 123a7e14dcfSSatish Balay void PETSC_STDCALL taolinesearchsettype_(TaoLineSearch *ls, CHAR type_name PETSC_MIXED_LEN(len), PetscErrorCode *ierr PETSC_END_LEN(len)) 124a7e14dcfSSatish Balay 125a7e14dcfSSatish Balay { 126a7e14dcfSSatish Balay char *t; 127a7e14dcfSSatish Balay 128a7e14dcfSSatish Balay FIXCHAR(type_name,len,t); 129a7e14dcfSSatish Balay *ierr = TaoLineSearchSetType(*ls,t); 130a7e14dcfSSatish Balay FREECHAR(type_name,t); 131a7e14dcfSSatish Balay 132a7e14dcfSSatish Balay } 133a7e14dcfSSatish Balay 134a7e14dcfSSatish Balay void PETSC_STDCALL taolinesearchview_(TaoLineSearch *ls, PetscViewer *viewer, PetscErrorCode *ierr) 135a7e14dcfSSatish Balay { 136a7e14dcfSSatish Balay PetscViewer v; 137a7e14dcfSSatish Balay PetscPatchDefaultViewers_Fortran(viewer,v); 138a7e14dcfSSatish Balay *ierr = TaoLineSearchView(*ls,v); 139a7e14dcfSSatish Balay } 140a7e14dcfSSatish Balay 141a7e14dcfSSatish Balay void PETSC_STDCALL taolinesearchgetoptionsprefix_(TaoLineSearch *ls, CHAR prefix PETSC_MIXED_LEN(len), PetscErrorCode *ierr PETSC_END_LEN(len)) 142a7e14dcfSSatish Balay { 143a7e14dcfSSatish Balay const char *name; 144a7e14dcfSSatish Balay *ierr = TaoLineSearchGetOptionsPrefix(*ls,&name); 145a7e14dcfSSatish Balay *ierr = PetscStrncpy(prefix,name,len); if (*ierr) return; 146a7e14dcfSSatish Balay FIXRETURNCHAR(PETSC_TRUE,prefix,len); 147a7e14dcfSSatish Balay 148a7e14dcfSSatish Balay } 149a7e14dcfSSatish Balay 150a7e14dcfSSatish Balay void PETSC_STDCALL taolinesearchappendoptionsprefix_(TaoLineSearch *ls, CHAR prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 151a7e14dcfSSatish Balay { 152a7e14dcfSSatish Balay char *name; 153a7e14dcfSSatish Balay FIXCHAR(prefix,len,name); 154a7e14dcfSSatish Balay *ierr = TaoLineSearchAppendOptionsPrefix(*ls,name); 155a7e14dcfSSatish Balay FREECHAR(prefix,name); 156a7e14dcfSSatish Balay } 157a7e14dcfSSatish Balay 158a7e14dcfSSatish Balay void PETSC_STDCALL taolinesearchsetoptionsprefix_(TaoLineSearch *ls, CHAR prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 159a7e14dcfSSatish Balay { 160a7e14dcfSSatish Balay char *t; 161a7e14dcfSSatish Balay FIXCHAR(prefix,len,t); 162a7e14dcfSSatish Balay *ierr = TaoLineSearchSetOptionsPrefix(*ls,t); 163a7e14dcfSSatish Balay FREECHAR(prefix,t); 164a7e14dcfSSatish Balay } 165a7e14dcfSSatish Balay 166a7e14dcfSSatish Balay void PETSC_STDCALL taolinesearchgettype_(TaoLineSearch *ls, CHAR name PETSC_MIXED_LEN(len), PetscErrorCode *ierr PETSC_END_LEN(len)) 167a7e14dcfSSatish Balay { 168a7e14dcfSSatish Balay const char *tname; 169a7e14dcfSSatish Balay *ierr = TaoLineSearchGetType(*ls,&tname); 170a7e14dcfSSatish Balay *ierr = PetscStrncpy(name,tname,len); if (*ierr) return; 171a7e14dcfSSatish Balay FIXRETURNCHAR(PETSC_TRUE,name,len); 172a7e14dcfSSatish Balay 173a7e14dcfSSatish Balay } 174a7e14dcfSSatish Balay EXTERN_C_END 175