xref: /petsc/src/tao/linesearch/impls/unit/unit.c (revision d71ae5a4db6382e7f06317b8d368875286fe9008)
1f273b952SBarry Smith 
2af0996ceSBarry Smith #include <petsc/private/taolinesearchimpl.h>
3a7e14dcfSSatish Balay 
4*d71ae5a4SJacob Faibussowitsch static PetscErrorCode TaoLineSearchDestroy_Unit(TaoLineSearch ls)
5*d71ae5a4SJacob Faibussowitsch {
6a7e14dcfSSatish Balay   PetscFunctionBegin;
7a7e14dcfSSatish Balay   PetscFunctionReturn(0);
8a7e14dcfSSatish Balay }
9a7e14dcfSSatish Balay 
10*d71ae5a4SJacob Faibussowitsch static PetscErrorCode TaoLineSearchSetFromOptions_Unit(TaoLineSearch ls, PetscOptionItems *PetscOptionsObject)
11*d71ae5a4SJacob Faibussowitsch {
12a7e14dcfSSatish Balay   PetscFunctionBegin;
13a7e14dcfSSatish Balay   PetscFunctionReturn(0);
14a7e14dcfSSatish Balay }
15a7e14dcfSSatish Balay 
16*d71ae5a4SJacob Faibussowitsch static PetscErrorCode TaoLineSearchView_Unit(TaoLineSearch ls, PetscViewer viewer)
17*d71ae5a4SJacob 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));
23a7e14dcfSSatish Balay   PetscFunctionReturn(0);
24a7e14dcfSSatish Balay }
25a7e14dcfSSatish Balay 
26a39c8e28SStefano Zampini /* Take unit step (newx = startx + initstep*step_direction) */
27*d71ae5a4SJacob Faibussowitsch static PetscErrorCode TaoLineSearchApply_Unit(TaoLineSearch ls, Vec x, PetscReal *f, Vec g, Vec step_direction)
28*d71ae5a4SJacob 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;
36a7e14dcfSSatish Balay   PetscFunctionReturn(0);
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*/
51*d71ae5a4SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_Unit(TaoLineSearch ls)
52*d71ae5a4SJacob 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;
61a7e14dcfSSatish Balay   PetscFunctionReturn(0);
62a7e14dcfSSatish Balay }
63