1*aaa7dc30SBarry Smith #include <petscvec.h> 2*aaa7dc30SBarry Smith #include <taosolver.h> 3*aaa7dc30SBarry Smith #include <petsc-private/taolinesearchimpl.h> 4a7e14dcfSSatish Balay 5a7e14dcfSSatish Balay #undef __FUNCT__ 6a7e14dcfSSatish Balay #define __FUNCT__ "TaoLineSearchDestroy_Unit" 7a7e14dcfSSatish Balay static PetscErrorCode TaoLineSearchDestroy_Unit(TaoLineSearch ls) 8a7e14dcfSSatish Balay { 9a7e14dcfSSatish Balay PetscErrorCode ierr; 10a7e14dcfSSatish Balay PetscFunctionBegin; 11a7e14dcfSSatish Balay ierr = PetscFree(ls->data);CHKERRQ(ierr); 12a7e14dcfSSatish Balay PetscFunctionReturn(0); 13a7e14dcfSSatish Balay } 14a7e14dcfSSatish Balay 15a7e14dcfSSatish Balay #undef __FUNCT__ 16a7e14dcfSSatish Balay #define __FUNCT__ "TaoLineSearchSetFromOptions_Unit" 17a7e14dcfSSatish Balay static PetscErrorCode TaoLineSearchSetFromOptions_Unit(TaoLineSearch ls) 18a7e14dcfSSatish Balay { 19a7e14dcfSSatish Balay PetscErrorCode ierr; 20a7e14dcfSSatish Balay PetscFunctionBegin; 21a7e14dcfSSatish Balay ierr = PetscOptionsHead("No Unit line search options");CHKERRQ(ierr); 22a7e14dcfSSatish Balay ierr = PetscOptionsTail();CHKERRQ(ierr); 23a7e14dcfSSatish Balay PetscFunctionReturn(0); 24a7e14dcfSSatish Balay } 25a7e14dcfSSatish Balay 26a7e14dcfSSatish Balay #undef __FUNCT__ 27a7e14dcfSSatish Balay #define __FUNCT__ "TaoLineSearchView_Unit" 28a7e14dcfSSatish Balay static PetscErrorCode TaoLineSearchView_Unit(TaoLineSearch ls,PetscViewer viewer) 29a7e14dcfSSatish Balay { 30a7e14dcfSSatish Balay 31a7e14dcfSSatish Balay PetscErrorCode ierr; 32a7e14dcfSSatish Balay PetscBool isascii; 33a7e14dcfSSatish Balay PetscFunctionBegin; 34a7e14dcfSSatish Balay 35a7e14dcfSSatish Balay ierr = PetscObjectTypeCompare((PetscObject)viewer, PETSCVIEWERASCII, &isascii);CHKERRQ(ierr); 36a7e14dcfSSatish Balay if (isascii) { 37a7e14dcfSSatish Balay ierr=PetscViewerASCIIPrintf(viewer," Line Search: Unit Step.\n");CHKERRQ(ierr); 38a7e14dcfSSatish Balay } 39a7e14dcfSSatish Balay PetscFunctionReturn(0); 40a7e14dcfSSatish Balay } 41a7e14dcfSSatish Balay 42a7e14dcfSSatish Balay #undef __FUNCT__ 43a7e14dcfSSatish Balay #define __FUNCT__ "TaoLineSearchApply_Unit" 44a7e14dcfSSatish Balay static PetscErrorCode TaoLineSearchApply_Unit(TaoLineSearch ls,Vec x,PetscReal *f,Vec g,Vec step_direction) 45a7e14dcfSSatish Balay { 46a7e14dcfSSatish Balay PetscErrorCode ierr; 47a7e14dcfSSatish Balay PetscReal ftry; 48a7e14dcfSSatish Balay PetscReal startf = *f; 49a7e14dcfSSatish Balay 50a7e14dcfSSatish Balay PetscFunctionBegin; 51a7e14dcfSSatish Balay 52a7e14dcfSSatish Balay /* Take unit step (newx = startx + 1.0*step_direction) */ 53a7e14dcfSSatish Balay ierr = VecAXPY(x,1.0,step_direction);CHKERRQ(ierr); 54a7e14dcfSSatish Balay 55a7e14dcfSSatish Balay ierr = TaoLineSearchComputeObjectiveAndGradient(ls,x,&ftry,g);CHKERRQ(ierr); 5653506e15SBarry Smith ierr = PetscInfo1(ls,"Tao Apply Unit Step: %4.4e\n",1.0);CHKERRQ(ierr); 57a7e14dcfSSatish Balay if (startf < ftry){ 58a7e14dcfSSatish Balay ierr = PetscInfo2(ls,"Tao Apply Unit Step, FINCREASE: F old:= %12.10e, F new: %12.10e\n",startf,ftry);CHKERRQ(ierr); 59a7e14dcfSSatish Balay } 60a7e14dcfSSatish Balay *f = ftry; 61a7e14dcfSSatish Balay ls->step = 1.0; 62a7e14dcfSSatish Balay ls->reason=TAOLINESEARCH_SUCCESS; 63a7e14dcfSSatish Balay PetscFunctionReturn(0); 64a7e14dcfSSatish Balay } 65a7e14dcfSSatish Balay 66a7e14dcfSSatish Balay EXTERN_C_BEGIN 67a7e14dcfSSatish Balay #undef __FUNCT__ 68a7e14dcfSSatish Balay #define __FUNCT__ "TaoLineSearchCreate_Unit" 69a7e14dcfSSatish Balay /*@C 70a7e14dcfSSatish Balay TaoCreateUnitLineSearch - Always use step length of 1.0 71a7e14dcfSSatish Balay 72a7e14dcfSSatish Balay Input Parameters: 73a7e14dcfSSatish Balay . tao - TaoSolver context 74a7e14dcfSSatish Balay 75a7e14dcfSSatish Balay 76a7e14dcfSSatish Balay Level: advanced 77a7e14dcfSSatish Balay 78a7e14dcfSSatish Balay .keywords: TaoSolver, linesearch 79a7e14dcfSSatish Balay @*/ 80a7e14dcfSSatish Balay PetscErrorCode TaoLineSearchCreate_Unit(TaoLineSearch ls) 81a7e14dcfSSatish Balay { 82a7e14dcfSSatish Balay 83a7e14dcfSSatish Balay PetscFunctionBegin; 84a7e14dcfSSatish Balay ls->ops->setup = 0; 85a7e14dcfSSatish Balay ls->ops->apply = TaoLineSearchApply_Unit; 86a7e14dcfSSatish Balay ls->ops->view = TaoLineSearchView_Unit; 87a7e14dcfSSatish Balay ls->ops->destroy = TaoLineSearchDestroy_Unit; 88a7e14dcfSSatish Balay ls->ops->setfromoptions = TaoLineSearchSetFromOptions_Unit; 89a7e14dcfSSatish Balay 90a7e14dcfSSatish Balay PetscFunctionReturn(0); 91a7e14dcfSSatish Balay } 92a7e14dcfSSatish Balay EXTERN_C_END 93a7e14dcfSSatish Balay 94