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