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