xref: /petsc/src/tao/linesearch/impls/unit/unit.c (revision a39c8e28b241dda8f0e6bb85a4618536506796e5)
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));
22a7e14dcfSSatish Balay   if (isascii) {
23*a39c8e28SStefano Zampini     PetscCall(PetscViewerASCIIPrintf(viewer,"  Line Search: Unit Step %g.\n",ls->initstep));
24a7e14dcfSSatish Balay   }
25a7e14dcfSSatish Balay   PetscFunctionReturn(0);
26a7e14dcfSSatish Balay }
27a7e14dcfSSatish Balay 
28*a39c8e28SStefano Zampini /* Take unit step (newx = startx + initstep*step_direction) */
29a7e14dcfSSatish Balay static PetscErrorCode TaoLineSearchApply_Unit(TaoLineSearch ls,Vec x,PetscReal *f,Vec g,Vec step_direction)
30a7e14dcfSSatish Balay {
31a7e14dcfSSatish Balay   PetscFunctionBegin;
329566063dSJacob Faibussowitsch   PetscCall(TaoLineSearchMonitor(ls,0,*f,0.0));
33*a39c8e28SStefano Zampini   ls->step = ls->initstep;
34*a39c8e28SStefano Zampini   PetscCall(VecAXPY(x,ls->step,step_direction));
35*a39c8e28SStefano Zampini   PetscCall(TaoLineSearchComputeObjectiveAndGradient(ls,x,f,g));
36*a39c8e28SStefano Zampini   PetscCall(TaoLineSearchMonitor(ls,1,*f,ls->step));
37a7e14dcfSSatish Balay   ls->reason = TAOLINESEARCH_SUCCESS;
38a7e14dcfSSatish Balay   PetscFunctionReturn(0);
39a7e14dcfSSatish Balay }
40a7e14dcfSSatish Balay 
4190b6438dSAlp Dener /*MC
4290b6438dSAlp Dener    TAOLINESEARCHUNIT - Line-search type that disables line search and accepts the unit step length every time
43a7e14dcfSSatish Balay 
44*a39c8e28SStefano Zampini   Options Database Keys:
45*a39c8e28SStefano Zampini . -tao_ls_stepinit <step> - steplength
46*a39c8e28SStefano Zampini 
4790b6438dSAlp Dener    Level: developer
48a7e14dcfSSatish Balay 
4990b6438dSAlp Dener .seealso: TaoLineSearchCreate(), TaoLineSearchSetType(), TaoLineSearchApply()
50a7e14dcfSSatish Balay 
51441846f8SBarry Smith .keywords: Tao, linesearch
5290b6438dSAlp Dener M*/
53728e0ed0SBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_Unit(TaoLineSearch ls)
54a7e14dcfSSatish Balay {
55a7e14dcfSSatish Balay   PetscFunctionBegin;
5683c8fe1dSLisandro Dalcin   ls->ops->setup = NULL;
5783c8fe1dSLisandro Dalcin   ls->ops->reset = NULL;
584664e3ffSStefano Zampini   ls->ops->monitor = NULL;
59a7e14dcfSSatish Balay   ls->ops->apply = TaoLineSearchApply_Unit;
60a7e14dcfSSatish Balay   ls->ops->view = TaoLineSearchView_Unit;
61a7e14dcfSSatish Balay   ls->ops->destroy = TaoLineSearchDestroy_Unit;
62a7e14dcfSSatish Balay   ls->ops->setfromoptions = TaoLineSearchSetFromOptions_Unit;
63a7e14dcfSSatish Balay   PetscFunctionReturn(0);
64a7e14dcfSSatish Balay }
65