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