xref: /petsc/include/petsctaolinesearch.h (revision e4cb33bb7dbdbae9285fba102465ca0f1dcb3977)
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