Actual source code: unit.c
1: #include <petsc/private/taolinesearchimpl.h>
3: static PetscErrorCode TaoLineSearchView_Unit(TaoLineSearch ls, PetscViewer viewer)
4: {
5: PetscBool isascii;
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: }
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: }
26: /*MC
27: TAOLINESEARCHUNIT - Line-search type that disables line search and accepts the unit step length every time
29: Options Database Keys:
30: . -tao_ls_stepinit <step> - steplength
32: Level: developer
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: }