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