xref: /petsc/src/tao/linesearch/impls/unit/unit.c (revision 63a3b9bc7a1f24f247904ccba9383635fe6abade)
1f273b952SBarry Smith 
2af0996ceSBarry Smith #include <petsc/private/taolinesearchimpl.h>
3a7e14dcfSSatish Balay 
4a7e14dcfSSatish Balay static PetscErrorCode TaoLineSearchDestroy_Unit(TaoLineSearch ls)
5a7e14dcfSSatish Balay {
6a7e14dcfSSatish Balay   PetscFunctionBegin;
7a7e14dcfSSatish Balay   PetscFunctionReturn(0);
8a7e14dcfSSatish Balay }
9a7e14dcfSSatish Balay 
104416b707SBarry Smith static PetscErrorCode TaoLineSearchSetFromOptions_Unit(PetscOptionItems *PetscOptionsObject,TaoLineSearch ls)
11a7e14dcfSSatish Balay {
12a7e14dcfSSatish Balay   PetscFunctionBegin;
13a7e14dcfSSatish Balay   PetscFunctionReturn(0);
14a7e14dcfSSatish Balay }
15a7e14dcfSSatish Balay 
16a7e14dcfSSatish Balay static PetscErrorCode TaoLineSearchView_Unit(TaoLineSearch ls,PetscViewer viewer)
17a7e14dcfSSatish Balay {
18a7e14dcfSSatish Balay   PetscBool isascii;
19a7e14dcfSSatish Balay 
20050fc7a3SBarry Smith   PetscFunctionBegin;
219566063dSJacob Faibussowitsch   PetscCall(PetscObjectTypeCompare((PetscObject)viewer, PETSCVIEWERASCII, &isascii));
22*63a3b9bcSJacob 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) */
27a7e14dcfSSatish Balay static PetscErrorCode TaoLineSearchApply_Unit(TaoLineSearch ls,Vec x,PetscReal *f,Vec g,Vec step_direction)
28a7e14dcfSSatish Balay {
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 
4790b6438dSAlp Dener .seealso: TaoLineSearchCreate(), TaoLineSearchSetType(), TaoLineSearchApply()
48a7e14dcfSSatish Balay 
49441846f8SBarry Smith .keywords: Tao, linesearch
5090b6438dSAlp Dener M*/
51728e0ed0SBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_Unit(TaoLineSearch ls)
52a7e14dcfSSatish Balay {
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