16524c165SJacob Faibussowitsch #ifndef PETSCTAOLINESEARCH_H 23028902dSLisandro Dalcin #define PETSCTAOLINESEARCH_H 321ec2d5cSBarry Smith 4*20f4b53cSBarry Smith /* SUBMANSEC = Tao */ 5*20f4b53cSBarry Smith 6*20f4b53cSBarry Smith /*S 7*20f4b53cSBarry Smith TaoLineSearch - PETSc object that manages line searches for the `Tao` optimization solves 8*20f4b53cSBarry Smith 9*20f4b53cSBarry Smith Level: intermediate 10*20f4b53cSBarry Smith 11*20f4b53cSBarry Smith .seealso: [](chapter_tao), `TaoLineSearchType`, `Tao`, `TaoCreate()`, `TaoDestroy()`, `TaoSetType()`, `TaoType` 12*20f4b53cSBarry Smith S*/ 1321ec2d5cSBarry Smith typedef struct _p_TaoLineSearch *TaoLineSearch; 14b54963c9SStefano Zampini 15b54963c9SStefano Zampini #include <petsctao.h> 16b54963c9SStefano Zampini 17*20f4b53cSBarry Smith /*E 18*20f4b53cSBarry Smith TaoLineSearchConvergedReason - reason a `TaoLineSearch` completed 19*20f4b53cSBarry Smith 20*20f4b53cSBarry Smith Values: 21*20f4b53cSBarry Smith + `TAOLINESEARCH_FAILED_ASCENT` - initial line search step * g is not descent direction 22*20f4b53cSBarry Smith . `TAOLINESEARCH_FAILED_INFORNAN` - function evaluation gives `Inf` or `Nan` value 23*20f4b53cSBarry Smith . `TAOLINESEARCH_FAILED_BADPARAMETER` - negative value set as parameter 24*20f4b53cSBarry Smith . `TAOLINESEARCH_HALTED_MAXFCN` - maximum number of function evaluation reached 25*20f4b53cSBarry Smith . `TAOLINESEARCH_HALTED_UPPERBOUND` - step is at upper bound 26*20f4b53cSBarry Smith . `TAOLINESEARCH_HALTED_LOWERBOUND` - step is at lower bound 27*20f4b53cSBarry Smith . `TAOLINESEARCH_HALTED_RTOL` - range of uncertainty is smaller than given tolerance 28*20f4b53cSBarry Smith . `TAOLINESEARCH_HALTED_USER` - user can set this reason to stop line search 29*20f4b53cSBarry Smith . `TAOLINESEARCH_HALTED_OTHER` - any other reason 30*20f4b53cSBarry Smith - `TAOLINESEARCH_SUCCESS` - successful line search 31*20f4b53cSBarry Smith 32*20f4b53cSBarry Smith Level: beginner 33*20f4b53cSBarry Smith 34*20f4b53cSBarry Smith .seealso: [](chapter_tao), `Tao`, `TaoLineSearch`, `TaoSolve()`, `TaoGetConvergedReason()`, `KSPConvergedReason`, `SNESConvergedReason` 35*20f4b53cSBarry Smith E*/ 3621ec2d5cSBarry Smith typedef enum { 3721ec2d5cSBarry Smith TAOLINESEARCH_FAILED_INFORNAN = -1, 3821ec2d5cSBarry Smith TAOLINESEARCH_FAILED_BADPARAMETER = -2, 3921ec2d5cSBarry Smith TAOLINESEARCH_FAILED_ASCENT = -3, 4021ec2d5cSBarry Smith TAOLINESEARCH_CONTINUE_ITERATING = 0, 4121ec2d5cSBarry Smith TAOLINESEARCH_SUCCESS = 1, 4221ec2d5cSBarry Smith TAOLINESEARCH_SUCCESS_USER = 2, 4321ec2d5cSBarry Smith TAOLINESEARCH_HALTED_OTHER = 3, 4421ec2d5cSBarry Smith TAOLINESEARCH_HALTED_MAXFCN = 4, 4521ec2d5cSBarry Smith TAOLINESEARCH_HALTED_UPPERBOUND = 5, 4621ec2d5cSBarry Smith TAOLINESEARCH_HALTED_LOWERBOUND = 6, 4721ec2d5cSBarry Smith TAOLINESEARCH_HALTED_RTOL = 7, 4821ec2d5cSBarry Smith TAOLINESEARCH_HALTED_USER = 8 49e4cb33bbSBarry Smith } TaoLineSearchConvergedReason; 5021ec2d5cSBarry Smith 51*20f4b53cSBarry Smith /*J 52*20f4b53cSBarry Smith TaoLineSearchType - String with the name of a `TaoLineSearch` method 53*20f4b53cSBarry Smith 54*20f4b53cSBarry Smith Values: 55*20f4b53cSBarry Smith + `TAOLINESEARCHUNIT` - "unit" do not perform a line search and always accept unit step length 56*20f4b53cSBarry Smith . `TAOLINESEARCHMT` - "more-thuente" line search with a cubic model enforcing the strong Wolfe/curvature condition 57*20f4b53cSBarry Smith . `TAOLINESEARCHGPCG` - "gpcg" 58*20f4b53cSBarry Smith . `TAOLINESEARCHARMIJO` - "armijo" simple backtracking line search enforcing only the sufficient decrease condition 59*20f4b53cSBarry Smith . `TAOLINESEARCHOWARMIJO` - "owarmijo" 60*20f4b53cSBarry Smith - `TAOLINESEARCHIPM` - "ipm" 61*20f4b53cSBarry Smith 62*20f4b53cSBarry Smith Options Database Key: 63*20f4b53cSBarry Smith . -tao_ls_type <type> - select which method Tao should use at runtime 64*20f4b53cSBarry Smith Values: 65*20f4b53cSBarry Smith 66*20f4b53cSBarry Smith Level: beginner 67*20f4b53cSBarry Smith 68*20f4b53cSBarry Smith .seealso: [](chapter_tao), `Tao`, `TaoLineSearch`, `TaoLineSearchSetType()`, `TaoCreate()`, `TaoSetType()` 69*20f4b53cSBarry Smith J*/ 70dedfbcbeSJed Brown typedef const char *TaoLineSearchType; 718caf6e8cSBarry Smith #define TAOLINESEARCHUNIT "unit" 728caf6e8cSBarry Smith #define TAOLINESEARCHMT "more-thuente" 738caf6e8cSBarry Smith #define TAOLINESEARCHGPCG "gpcg" 748caf6e8cSBarry Smith #define TAOLINESEARCHARMIJO "armijo" 758caf6e8cSBarry Smith #define TAOLINESEARCHOWARMIJO "owarmijo" 768caf6e8cSBarry Smith #define TAOLINESEARCHIPM "ipm" 7721ec2d5cSBarry Smith 7821ec2d5cSBarry Smith PETSC_EXTERN PetscClassId TAOLINESEARCH_CLASSID; 7921ec2d5cSBarry Smith PETSC_EXTERN PetscFunctionList TaoLineSearchList; 8021ec2d5cSBarry Smith 8121ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchCreate(MPI_Comm, TaoLineSearch *); 8221ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetFromOptions(TaoLineSearch); 8321ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetUp(TaoLineSearch); 8421ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchDestroy(TaoLineSearch *); 852a0dac07SAlp Dener PETSC_EXTERN PetscErrorCode TaoLineSearchMonitor(TaoLineSearch, PetscInt, PetscReal, PetscReal); 8621ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchView(TaoLineSearch, PetscViewer); 87fe2efc57SMark PETSC_EXTERN PetscErrorCode TaoLineSearchViewFromOptions(TaoLineSearch, PetscObject, const char[]); 88fbe0838dSJason Sarich 8921ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetOptionsPrefix(TaoLineSearch, const char prefix[]); 9021ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchReset(TaoLineSearch); 91b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode TaoLineSearchAppendOptionsPrefix(TaoLineSearch, const char[]); 92b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode TaoLineSearchGetOptionsPrefix(TaoLineSearch, const char *[]); 93e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchApply(TaoLineSearch, Vec, PetscReal *, Vec, Vec, PetscReal *, TaoLineSearchConvergedReason *); 9421ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchGetStepLength(TaoLineSearch, PetscReal *); 9521ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchGetStartingVector(TaoLineSearch, Vec *); 9621ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchGetStepDirection(TaoLineSearch, Vec *); 9721ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetInitialStepLength(TaoLineSearch, PetscReal); 98e4cb33bbSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchGetSolution(TaoLineSearch, Vec, PetscReal *, Vec, PetscReal *, TaoLineSearchConvergedReason *); 9921ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchGetFullStepObjective(TaoLineSearch, PetscReal *); 10021ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchGetNumberFunctionEvaluations(TaoLineSearch, PetscInt *, PetscInt *, PetscInt *); 10121ec2d5cSBarry Smith 102dedfbcbeSJed Brown PETSC_EXTERN PetscErrorCode TaoLineSearchGetType(TaoLineSearch, TaoLineSearchType *); 103dedfbcbeSJed Brown PETSC_EXTERN PetscErrorCode TaoLineSearchSetType(TaoLineSearch, TaoLineSearchType); 10421ec2d5cSBarry Smith 105441846f8SBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchIsUsingTaoRoutines(TaoLineSearch, PetscBool *); 10621ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetObjectiveAndGTSRoutine(TaoLineSearch, PetscErrorCode (*)(TaoLineSearch, Vec, Vec, PetscReal *, PetscReal *, void *), void *); 10721ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetObjectiveRoutine(TaoLineSearch, PetscErrorCode (*)(TaoLineSearch, Vec, PetscReal *, void *), void *); 10821ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetGradientRoutine(TaoLineSearch, PetscErrorCode (*)(TaoLineSearch, Vec, Vec, void *), void *); 10921ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetObjectiveAndGradientRoutine(TaoLineSearch, PetscErrorCode (*)(TaoLineSearch, Vec, PetscReal *, Vec, void *), void *); 11021ec2d5cSBarry Smith 11121ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchComputeObjective(TaoLineSearch, Vec, PetscReal *); 11221ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchComputeGradient(TaoLineSearch, Vec, Vec); 11321ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchComputeObjectiveAndGradient(TaoLineSearch, Vec, PetscReal *, Vec); 11421ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchComputeObjectiveAndGTS(TaoLineSearch, Vec, PetscReal *, PetscReal *); 11521ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchSetVariableBounds(TaoLineSearch, Vec, Vec); 11621ec2d5cSBarry Smith 11721ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchInitializePackage(void); 11821ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchFinalizePackage(void); 11921ec2d5cSBarry Smith 12021ec2d5cSBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchRegister(const char[], PetscErrorCode (*)(TaoLineSearch)); 121b54963c9SStefano Zampini PETSC_EXTERN PetscErrorCode TaoLineSearchUseTaoRoutines(TaoLineSearch, Tao); 12221ec2d5cSBarry Smith 12321ec2d5cSBarry Smith #endif 124