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: }