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