121ec2d5cSBarry Smith #ifndef __TAOLINESEARCH_H 221ec2d5cSBarry Smith #define __TAOLINESEARCH_H 321ec2d5cSBarry Smith #include <petscvec.h> 421ec2d5cSBarry Smith 521ec2d5cSBarry Smith typedef struct _p_TaoLineSearch* TaoLineSearch; 621ec2d5cSBarry Smith typedef enum { 721ec2d5cSBarry Smith TAOLINESEARCH_FAILED_INFORNAN = -1, 821ec2d5cSBarry Smith TAOLINESEARCH_FAILED_BADPARAMETER = -2, 921ec2d5cSBarry Smith TAOLINESEARCH_FAILED_ASCENT = -3, 1021ec2d5cSBarry Smith TAOLINESEARCH_CONTINUE_ITERATING = 0, 1121ec2d5cSBarry Smith TAOLINESEARCH_SUCCESS = 1, 1221ec2d5cSBarry Smith TAOLINESEARCH_SUCCESS_USER = 2, 1321ec2d5cSBarry Smith TAOLINESEARCH_HALTED_OTHER = 3, 1421ec2d5cSBarry Smith TAOLINESEARCH_HALTED_MAXFCN = 4, 1521ec2d5cSBarry Smith TAOLINESEARCH_HALTED_UPPERBOUND = 5, 1621ec2d5cSBarry Smith TAOLINESEARCH_HALTED_LOWERBOUND = 6, 1721ec2d5cSBarry Smith TAOLINESEARCH_HALTED_RTOL = 7, 1821ec2d5cSBarry Smith TAOLINESEARCH_HALTED_USER = 8 19*e4cb33bbSBarry Smith } TaoLineSearchConvergedReason; 2021ec2d5cSBarry Smith 2121ec2d5cSBarry Smith #define TaoLineSearchType char* 2221ec2d5cSBarry Smith #define TAOLINESEARCH_UNIT "unit" 2321ec2d5cSBarry Smith #define TAOLINESEARCH_MT "more-thuente" 2421ec2d5cSBarry Smith #define TAOLINESEARCH_GPCG "gpcg" 2521ec2d5cSBarry Smith #define TAOLINESEARCH_ARMIJO "armijo" 2621ec2d5cSBarry Smith #define TAOLINESEARCH_OWARMIJO "owarmijo" 2721ec2d5cSBarry Smith #define TAOLINESEARCH_IPM "ipm" 2821ec2d5cSBarry Smith 2921ec2d5cSBarry Smith PETSC_EXTERN PetscClassId TAOLINESEARCH_CLASSID; 3021ec2d5cSBarry Smith PETSC_EXTERN PetscFunctionList TaoLineSearchList; 3121ec2d5cSBarry Smith 3221ec2d5cSBarry Smith #include <petsctao.h> 3321ec2d5cSBarry Smith 3421ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchCreate(MPI_Comm,TaoLineSearch*); 3521ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetFromOptions(TaoLineSearch); 3621ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetUp(TaoLineSearch); 3721ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchDestroy(TaoLineSearch*); 3821ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchView(TaoLineSearch,PetscViewer); 3921ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetOptionsPrefix(TaoLineSearch,const char prefix[]); 4021ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchReset(TaoLineSearch); 4121ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchAppendOptionsPrefix(TaoLineSearch,const char prefix[]); 4221ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchGetOptionsPrefix(TaoLineSearch,const char *prefix[]); 43*e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchApply(TaoLineSearch,Vec,PetscReal *,Vec,Vec, PetscReal *, TaoLineSearchConvergedReason *); 4421ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchGetStepLength(TaoLineSearch, PetscReal*); 4521ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchGetStartingVector(TaoLineSearch,Vec*); 4621ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchGetStepDirection(TaoLineSearch,Vec*); 4721ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetInitialStepLength(TaoLineSearch, PetscReal); 48*e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchGetSolution(TaoLineSearch, Vec, PetscReal*, Vec, PetscReal*, TaoLineSearchConvergedReason*); 4921ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchGetFullStepObjective(TaoLineSearch, PetscReal*); 5021ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchGetNumberFunctionEvaluations(TaoLineSearch, PetscInt*, PetscInt*, PetscInt*); 5121ec2d5cSBarry Smith 5221ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchGetType(TaoLineSearch, const TaoLineSearchType *); 5321ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetType(TaoLineSearch, const TaoLineSearchType); 5421ec2d5cSBarry Smith 55441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchUseTaoRoutines(TaoLineSearch, Tao); 56441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchIsUsingTaoRoutines(TaoLineSearch, PetscBool *); 5721ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetObjectiveAndGTSRoutine(TaoLineSearch, PetscErrorCode(*)(TaoLineSearch, Vec, Vec, PetscReal*, PetscReal*, void*), void*); 5821ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetObjectiveRoutine(TaoLineSearch, PetscErrorCode(*)(TaoLineSearch, Vec, PetscReal*,void*), void*); 5921ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetGradientRoutine(TaoLineSearch, PetscErrorCode(*)(TaoLineSearch, Vec, Vec, void*), void*); 6021ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetObjectiveAndGradientRoutine(TaoLineSearch, PetscErrorCode(*)(TaoLineSearch, Vec, PetscReal*, Vec, void*), void*); 6121ec2d5cSBarry Smith 6221ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchComputeObjective(TaoLineSearch, Vec, PetscReal*); 6321ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchComputeGradient(TaoLineSearch, Vec, Vec); 6421ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchComputeObjectiveAndGradient(TaoLineSearch, Vec, PetscReal*, Vec); 6521ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchComputeObjectiveAndGTS(TaoLineSearch, Vec, PetscReal*, PetscReal*); 6621ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetVariableBounds(TaoLineSearch, Vec, Vec); 6721ec2d5cSBarry Smith 6821ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchInitializePackage(void); 6921ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchFinalizePackage(void); 7021ec2d5cSBarry Smith 7121ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchRegister(const char[], PetscErrorCode (*)(TaoLineSearch)); 7221ec2d5cSBarry Smith 7321ec2d5cSBarry Smith #endif 74