xref: /petsc/src/tao/linesearch/impls/unit/unit.c (revision 83c8fe1d2fbb84e46683ab9274628fec4a31c480)
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