xref: /petsc/src/tao/linesearch/impls/unit/unit.c (revision 3ba1676111f5c958fe6c2729b46ca4d523958bb3)
1f273b952SBarry Smith 
2af0996ceSBarry Smith #include <petsc/private/taolinesearchimpl.h>
3a7e14dcfSSatish Balay 
4d71ae5a4SJacob Faibussowitsch static PetscErrorCode TaoLineSearchDestroy_Unit(TaoLineSearch ls)
5d71ae5a4SJacob Faibussowitsch {
6a7e14dcfSSatish Balay   PetscFunctionBegin;
7*3ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
8a7e14dcfSSatish Balay }
9a7e14dcfSSatish Balay 
10d71ae5a4SJacob Faibussowitsch static PetscErrorCode TaoLineSearchSetFromOptions_Unit(TaoLineSearch ls, PetscOptionItems *PetscOptionsObject)
11d71ae5a4SJacob Faibussowitsch {
12a7e14dcfSSatish Balay   PetscFunctionBegin;
13*3ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
14a7e14dcfSSatish Balay }
15a7e14dcfSSatish Balay 
16d71ae5a4SJacob Faibussowitsch static PetscErrorCode TaoLineSearchView_Unit(TaoLineSearch ls, PetscViewer viewer)
17d71ae5a4SJacob Faibussowitsch {
18a7e14dcfSSatish Balay   PetscBool isascii;
19a7e14dcfSSatish Balay 
20050fc7a3SBarry Smith   PetscFunctionBegin;
219566063dSJacob Faibussowitsch   PetscCall(PetscObjectTypeCompare((PetscObject)viewer, PETSCVIEWERASCII, &isascii));
2263a3b9bcSJacob Faibussowitsch   if (isascii) PetscCall(PetscViewerASCIIPrintf(viewer, "  Line Search: Unit Step %g.\n", (double)ls->initstep));
23*3ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
24a7e14dcfSSatish Balay }
25a7e14dcfSSatish Balay 
26a39c8e28SStefano Zampini /* Take unit step (newx = startx + initstep*step_direction) */
27d71ae5a4SJacob Faibussowitsch static PetscErrorCode TaoLineSearchApply_Unit(TaoLineSearch ls, Vec x, PetscReal *f, Vec g, Vec step_direction)
28d71ae5a4SJacob Faibussowitsch {
29a7e14dcfSSatish Balay   PetscFunctionBegin;
309566063dSJacob Faibussowitsch   PetscCall(TaoLineSearchMonitor(ls, 0, *f, 0.0));
31a39c8e28SStefano Zampini   ls->step = ls->initstep;
32a39c8e28SStefano Zampini   PetscCall(VecAXPY(x, ls->step, step_direction));
33a39c8e28SStefano Zampini   PetscCall(TaoLineSearchComputeObjectiveAndGradient(ls, x, f, g));
34a39c8e28SStefano Zampini   PetscCall(TaoLineSearchMonitor(ls, 1, *f, ls->step));
35a7e14dcfSSatish Balay   ls->reason = TAOLINESEARCH_SUCCESS;
36*3ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
37a7e14dcfSSatish Balay }
38a7e14dcfSSatish Balay 
3990b6438dSAlp Dener /*MC
4090b6438dSAlp Dener    TAOLINESEARCHUNIT - Line-search type that disables line search and accepts the unit step length every time
41a7e14dcfSSatish Balay 
42a39c8e28SStefano Zampini   Options Database Keys:
43a39c8e28SStefano Zampini . -tao_ls_stepinit <step> - steplength
44a39c8e28SStefano Zampini 
4590b6438dSAlp Dener    Level: developer
46a7e14dcfSSatish Balay 
47db781477SPatrick Sanan .seealso: `TaoLineSearchCreate()`, `TaoLineSearchSetType()`, `TaoLineSearchApply()`
48a7e14dcfSSatish Balay 
49441846f8SBarry Smith .keywords: Tao, linesearch
5090b6438dSAlp Dener M*/
51d71ae5a4SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_Unit(TaoLineSearch ls)
52d71ae5a4SJacob Faibussowitsch {
53a7e14dcfSSatish Balay   PetscFunctionBegin;
5483c8fe1dSLisandro Dalcin   ls->ops->setup          = NULL;
5583c8fe1dSLisandro Dalcin   ls->ops->reset          = NULL;
564664e3ffSStefano Zampini   ls->ops->monitor        = NULL;
57a7e14dcfSSatish Balay   ls->ops->apply          = TaoLineSearchApply_Unit;
58a7e14dcfSSatish Balay   ls->ops->view           = TaoLineSearchView_Unit;
59a7e14dcfSSatish Balay   ls->ops->destroy        = TaoLineSearchDestroy_Unit;
60a7e14dcfSSatish Balay   ls->ops->setfromoptions = TaoLineSearchSetFromOptions_Unit;
61*3ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
62a7e14dcfSSatish Balay }
63