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