1 #include <petsc/private/taolinesearchimpl.h> 2 3 static PetscErrorCode TaoLineSearchView_Unit(TaoLineSearch ls, PetscViewer viewer) 4 { 5 PetscBool isascii; 6 7 PetscFunctionBegin; 8 PetscCall(PetscObjectTypeCompare((PetscObject)viewer, PETSCVIEWERASCII, &isascii)); 9 if (isascii) PetscCall(PetscViewerASCIIPrintf(viewer, " Line Search: Unit Step %g.\n", (double)ls->initstep)); 10 PetscFunctionReturn(PETSC_SUCCESS); 11 } 12 13 /* Take unit step (newx = startx + initstep*step_direction) */ 14 static PetscErrorCode TaoLineSearchApply_Unit(TaoLineSearch ls, Vec x, PetscReal *f, Vec g, Vec step_direction) 15 { 16 PetscFunctionBegin; 17 PetscCall(TaoLineSearchMonitor(ls, 0, *f, 0.0)); 18 ls->step = ls->initstep; 19 PetscCall(VecAXPY(x, ls->step, step_direction)); 20 PetscCall(TaoLineSearchComputeObjectiveAndGradient(ls, x, f, g)); 21 PetscCall(TaoLineSearchMonitor(ls, 1, *f, ls->step)); 22 ls->reason = TAOLINESEARCH_SUCCESS; 23 PetscFunctionReturn(PETSC_SUCCESS); 24 } 25 26 /*MC 27 TAOLINESEARCHUNIT - Line-search type that disables line search and accepts the unit step length every time 28 29 Options Database Keys: 30 . -tao_ls_stepinit <step> - steplength 31 32 Level: developer 33 34 .seealso: `Tao`, `TaoLineSearch`, `TaoLineSearchCreate()`, `TaoLineSearchSetType()`, `TaoLineSearchApply()` 35 M*/ 36 PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_Unit(TaoLineSearch ls) 37 { 38 PetscFunctionBegin; 39 ls->ops->setup = NULL; 40 ls->ops->reset = NULL; 41 ls->ops->monitor = NULL; 42 ls->ops->apply = TaoLineSearchApply_Unit; 43 ls->ops->view = TaoLineSearchView_Unit; 44 PetscFunctionReturn(PETSC_SUCCESS); 45 } 46