1*21ec2d5cSBarry Smith #ifndef __TAOLINESEARCH_H 2*21ec2d5cSBarry Smith #define __TAOLINESEARCH_H 3*21ec2d5cSBarry Smith #include <petscvec.h> 4*21ec2d5cSBarry Smith 5*21ec2d5cSBarry Smith typedef struct _p_TaoLineSearch* TaoLineSearch; 6*21ec2d5cSBarry Smith typedef enum { 7*21ec2d5cSBarry Smith TAOLINESEARCH_FAILED_INFORNAN = -1, 8*21ec2d5cSBarry Smith TAOLINESEARCH_FAILED_BADPARAMETER = -2, 9*21ec2d5cSBarry Smith TAOLINESEARCH_FAILED_ASCENT = -3, 10*21ec2d5cSBarry Smith TAOLINESEARCH_CONTINUE_ITERATING = 0, 11*21ec2d5cSBarry Smith TAOLINESEARCH_SUCCESS = 1, 12*21ec2d5cSBarry Smith TAOLINESEARCH_SUCCESS_USER = 2, 13*21ec2d5cSBarry Smith TAOLINESEARCH_HALTED_OTHER = 3, 14*21ec2d5cSBarry Smith TAOLINESEARCH_HALTED_MAXFCN = 4, 15*21ec2d5cSBarry Smith TAOLINESEARCH_HALTED_UPPERBOUND = 5, 16*21ec2d5cSBarry Smith TAOLINESEARCH_HALTED_LOWERBOUND = 6, 17*21ec2d5cSBarry Smith TAOLINESEARCH_HALTED_RTOL = 7, 18*21ec2d5cSBarry Smith TAOLINESEARCH_HALTED_USER = 8 19*21ec2d5cSBarry Smith } TaoLineSearchTerminationReason; 20*21ec2d5cSBarry Smith 21*21ec2d5cSBarry Smith #define TaoLineSearchType char* 22*21ec2d5cSBarry Smith #define TAOLINESEARCH_UNIT "unit" 23*21ec2d5cSBarry Smith #define TAOLINESEARCH_MT "more-thuente" 24*21ec2d5cSBarry Smith #define TAOLINESEARCH_GPCG "gpcg" 25*21ec2d5cSBarry Smith #define TAOLINESEARCH_ARMIJO "armijo" 26*21ec2d5cSBarry Smith #define TAOLINESEARCH_OWARMIJO "owarmijo" 27*21ec2d5cSBarry Smith #define TAOLINESEARCH_IPM "ipm" 28*21ec2d5cSBarry Smith 29*21ec2d5cSBarry Smith PETSC_EXTERN PetscClassId TAOLINESEARCH_CLASSID; 30*21ec2d5cSBarry Smith PETSC_EXTERN PetscFunctionList TaoLineSearchList; 31*21ec2d5cSBarry Smith 32*21ec2d5cSBarry Smith #include <petsctao.h> 33*21ec2d5cSBarry Smith 34*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchCreate(MPI_Comm,TaoLineSearch*); 35*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetFromOptions(TaoLineSearch); 36*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetUp(TaoLineSearch); 37*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchDestroy(TaoLineSearch*); 38*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchView(TaoLineSearch,PetscViewer); 39*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetOptionsPrefix(TaoLineSearch,const char prefix[]); 40*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchReset(TaoLineSearch); 41*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchAppendOptionsPrefix(TaoLineSearch,const char prefix[]); 42*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchGetOptionsPrefix(TaoLineSearch,const char *prefix[]); 43*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchApply(TaoLineSearch,Vec,PetscReal *,Vec,Vec, PetscReal *, TaoLineSearchTerminationReason *); 44*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchGetStepLength(TaoLineSearch, PetscReal*); 45*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchGetStartingVector(TaoLineSearch,Vec*); 46*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchGetStepDirection(TaoLineSearch,Vec*); 47*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetInitialStepLength(TaoLineSearch, PetscReal); 48*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchGetSolution(TaoLineSearch, Vec, PetscReal*, Vec, PetscReal*, TaoLineSearchTerminationReason*); 49*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchGetFullStepObjective(TaoLineSearch, PetscReal*); 50*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchGetNumberFunctionEvaluations(TaoLineSearch, PetscInt*, PetscInt*, PetscInt*); 51*21ec2d5cSBarry Smith 52*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchGetType(TaoLineSearch, const TaoLineSearchType *); 53*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetType(TaoLineSearch, const TaoLineSearchType); 54*21ec2d5cSBarry Smith 55*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchUseTaoSolverRoutines(TaoLineSearch, TaoSolver); 56*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchIsUsingTaoSolverRoutines(TaoLineSearch, PetscBool *); 57*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetObjectiveAndGTSRoutine(TaoLineSearch, PetscErrorCode(*)(TaoLineSearch, Vec, Vec, PetscReal*, PetscReal*, void*), void*); 58*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetObjectiveRoutine(TaoLineSearch, PetscErrorCode(*)(TaoLineSearch, Vec, PetscReal*,void*), void*); 59*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetGradientRoutine(TaoLineSearch, PetscErrorCode(*)(TaoLineSearch, Vec, Vec, void*), void*); 60*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetObjectiveAndGradientRoutine(TaoLineSearch, PetscErrorCode(*)(TaoLineSearch, Vec, PetscReal*, Vec, void*), void*); 61*21ec2d5cSBarry Smith 62*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchComputeObjective(TaoLineSearch, Vec, PetscReal*); 63*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchComputeGradient(TaoLineSearch, Vec, Vec); 64*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchComputeObjectiveAndGradient(TaoLineSearch, Vec, PetscReal*, Vec); 65*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchComputeObjectiveAndGTS(TaoLineSearch, Vec, PetscReal*, PetscReal*); 66*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetVariableBounds(TaoLineSearch, Vec, Vec); 67*21ec2d5cSBarry Smith 68*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchInitializePackage(void); 69*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchFinalizePackage(void); 70*21ec2d5cSBarry Smith 71*21ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchRegister(const char[], PetscErrorCode (*)(TaoLineSearch)); 72*21ec2d5cSBarry Smith 73*21ec2d5cSBarry Smith #endif 74