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