1f273b952SBarry Smith 2af0996ceSBarry Smith #include <petsc/private/taolinesearchimpl.h> 3a7e14dcfSSatish Balay 4a7e14dcfSSatish Balay static PetscErrorCode TaoLineSearchDestroy_Unit(TaoLineSearch ls) 5a7e14dcfSSatish Balay { 6a7e14dcfSSatish Balay PetscErrorCode ierr; 7a7e14dcfSSatish Balay PetscFunctionBegin; 8a7e14dcfSSatish Balay ierr = PetscFree(ls->data);CHKERRQ(ierr); 9a7e14dcfSSatish Balay PetscFunctionReturn(0); 10a7e14dcfSSatish Balay } 11a7e14dcfSSatish Balay 124416b707SBarry Smith static PetscErrorCode TaoLineSearchSetFromOptions_Unit(PetscOptionItems *PetscOptionsObject,TaoLineSearch ls) 13a7e14dcfSSatish Balay { 14a7e14dcfSSatish Balay PetscErrorCode ierr; 15a7e14dcfSSatish Balay PetscFunctionBegin; 161a1499c8SBarry Smith ierr = PetscOptionsHead(PetscOptionsObject,"No Unit line search options");CHKERRQ(ierr); 17a7e14dcfSSatish Balay ierr = PetscOptionsTail();CHKERRQ(ierr); 18a7e14dcfSSatish Balay PetscFunctionReturn(0); 19a7e14dcfSSatish Balay } 20a7e14dcfSSatish Balay 21a7e14dcfSSatish Balay static PetscErrorCode TaoLineSearchView_Unit(TaoLineSearch ls,PetscViewer viewer) 22a7e14dcfSSatish Balay { 23a7e14dcfSSatish Balay PetscErrorCode ierr; 24a7e14dcfSSatish Balay PetscBool isascii; 25a7e14dcfSSatish Balay 26050fc7a3SBarry Smith PetscFunctionBegin; 27a7e14dcfSSatish Balay ierr = PetscObjectTypeCompare((PetscObject)viewer, PETSCVIEWERASCII, &isascii);CHKERRQ(ierr); 28a7e14dcfSSatish Balay if (isascii) { 29a7e14dcfSSatish Balay ierr=PetscViewerASCIIPrintf(viewer," Line Search: Unit Step.\n");CHKERRQ(ierr); 30a7e14dcfSSatish Balay } 31a7e14dcfSSatish Balay PetscFunctionReturn(0); 32a7e14dcfSSatish Balay } 33a7e14dcfSSatish Balay 34a7e14dcfSSatish Balay static PetscErrorCode TaoLineSearchApply_Unit(TaoLineSearch ls,Vec x,PetscReal *f,Vec g,Vec step_direction) 35a7e14dcfSSatish Balay { 36a7e14dcfSSatish Balay PetscErrorCode ierr; 37a7e14dcfSSatish Balay PetscReal ftry; 38a7e14dcfSSatish Balay PetscReal startf = *f; 39a7e14dcfSSatish Balay 40a7e14dcfSSatish Balay PetscFunctionBegin; 41a7e14dcfSSatish Balay /* Take unit step (newx = startx + 1.0*step_direction) */ 422a0dac07SAlp Dener ierr = TaoLineSearchMonitor(ls, 0, *f, 0.0);CHKERRQ(ierr); 43a7e14dcfSSatish Balay ierr = VecAXPY(x,1.0,step_direction);CHKERRQ(ierr); 44a7e14dcfSSatish Balay ierr = TaoLineSearchComputeObjectiveAndGradient(ls,x,&ftry,g);CHKERRQ(ierr); 452a0dac07SAlp Dener ierr = TaoLineSearchMonitor(ls, 1, *f, 1.0);CHKERRQ(ierr); 4653506e15SBarry Smith ierr = PetscInfo1(ls,"Tao Apply Unit Step: %4.4e\n",1.0);CHKERRQ(ierr); 47a7e14dcfSSatish Balay if (startf < ftry){ 48335036cbSBarry Smith ierr = PetscInfo2(ls,"Tao Apply Unit Step, FINCREASE: F old:= %12.10e, F new: %12.10e\n",(double)startf,(double)ftry);CHKERRQ(ierr); 49a7e14dcfSSatish Balay } 50a7e14dcfSSatish Balay *f = ftry; 51a7e14dcfSSatish Balay ls->step = 1.0; 52a7e14dcfSSatish Balay ls->reason=TAOLINESEARCH_SUCCESS; 53a7e14dcfSSatish Balay PetscFunctionReturn(0); 54a7e14dcfSSatish Balay } 55a7e14dcfSSatish Balay 5690b6438dSAlp Dener /*MC 5790b6438dSAlp Dener TAOLINESEARCHUNIT - Line-search type that disables line search and accepts the unit step length every time 58a7e14dcfSSatish Balay 5990b6438dSAlp Dener Level: developer 60a7e14dcfSSatish Balay 6190b6438dSAlp Dener .seealso: TaoLineSearchCreate(), TaoLineSearchSetType(), TaoLineSearchApply() 62a7e14dcfSSatish Balay 63441846f8SBarry Smith .keywords: Tao, linesearch 6490b6438dSAlp Dener M*/ 65728e0ed0SBarry Smith PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_Unit(TaoLineSearch ls) 66a7e14dcfSSatish Balay { 67a7e14dcfSSatish Balay PetscFunctionBegin; 68*83c8fe1dSLisandro Dalcin ls->ops->setup = NULL; 69*83c8fe1dSLisandro Dalcin ls->ops->reset = NULL; 70a7e14dcfSSatish Balay ls->ops->apply = TaoLineSearchApply_Unit; 71a7e14dcfSSatish Balay ls->ops->view = TaoLineSearchView_Unit; 72a7e14dcfSSatish Balay ls->ops->destroy = TaoLineSearchDestroy_Unit; 73a7e14dcfSSatish Balay ls->ops->setfromoptions = TaoLineSearchSetFromOptions_Unit; 74a7e14dcfSSatish Balay PetscFunctionReturn(0); 75a7e14dcfSSatish Balay } 76728e0ed0SBarry Smith 77a7e14dcfSSatish Balay 78