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