Lines Matching refs:tao

13 static PetscErrorCode TaoSolve_CG(Tao tao)  in TaoSolve_CG()  argument
15 TAO_CG *cgP = (TAO_CG *)tao->data; in TaoSolve_CG()
21 …if (tao->XL || tao->XU || tao->ops->computebounds) PetscCall(PetscInfo(tao, "WARNING: Variable bou… in TaoSolve_CG()
24 PetscCall(TaoComputeObjectiveAndGradient(tao, tao->solution, &f, tao->gradient)); in TaoSolve_CG()
25 PetscCall(VecNorm(tao->gradient, NORM_2, &gnorm)); in TaoSolve_CG()
26 …fOrNanReal(f) && !PetscIsInfOrNanReal(gnorm), PetscObjectComm((PetscObject)tao), PETSC_ERR_USER, "… in TaoSolve_CG()
28 tao->reason = TAO_CONTINUE_ITERATING; in TaoSolve_CG()
29 PetscCall(TaoLogConvergenceHistory(tao, f, gnorm, 0.0, tao->ksp_its)); in TaoSolve_CG()
30 PetscCall(TaoMonitor(tao, tao->niter, f, gnorm, 0.0, step)); in TaoSolve_CG()
31 PetscUseTypeMethod(tao, convergencetest, tao->cnvP); in TaoSolve_CG()
32 if (tao->reason != TAO_CONTINUE_ITERATING) PetscFunctionReturn(PETSC_SUCCESS); in TaoSolve_CG()
35 PetscCall(VecCopy(tao->gradient, tao->stepdirection)); in TaoSolve_CG()
36 PetscCall(VecScale(tao->stepdirection, -1.0)); in TaoSolve_CG()
55 if (tao->ops->update) { in TaoSolve_CG()
56 PetscUseTypeMethod(tao, update, tao->niter, tao->user_update); in TaoSolve_CG()
57 PetscCall(TaoComputeObjective(tao, tao->solution, &f)); in TaoSolve_CG()
62 PetscCall(VecCopy(tao->solution, cgP->X_old)); in TaoSolve_CG()
63 PetscCall(VecCopy(tao->gradient, cgP->G_old)); in TaoSolve_CG()
64 PetscCall(VecDot(tao->gradient, tao->stepdirection, &gd)); in TaoSolve_CG()
77 PetscCall(VecCopy(tao->gradient, tao->stepdirection)); in TaoSolve_CG()
78 PetscCall(VecScale(tao->stepdirection, -1.0)); in TaoSolve_CG()
82 PetscCall(TaoLineSearchSetInitialStepLength(tao->linesearch, delta)); in TaoSolve_CG()
83 …PetscCall(TaoLineSearchApply(tao->linesearch, tao->solution, &f, tao->gradient, tao->stepdirection… in TaoSolve_CG()
84 PetscCall(TaoAddLineSearchCounts(tao)); in TaoSolve_CG()
91 PetscCall(VecCopy(cgP->X_old, tao->solution)); in TaoSolve_CG()
92 PetscCall(VecCopy(cgP->G_old, tao->gradient)); in TaoSolve_CG()
104 PetscCall(VecCopy(tao->gradient, tao->stepdirection)); in TaoSolve_CG()
105 PetscCall(VecScale(tao->stepdirection, -1.0)); in TaoSolve_CG()
107 PetscCall(TaoLineSearchSetInitialStepLength(tao->linesearch, delta)); in TaoSolve_CG()
108 …PetscCall(TaoLineSearchApply(tao->linesearch, tao->solution, &f, tao->gradient, tao->stepdirection… in TaoSolve_CG()
109 PetscCall(TaoAddLineSearchCounts(tao)); in TaoSolve_CG()
115 PetscCall(VecCopy(cgP->X_old, tao->solution)); in TaoSolve_CG()
116 PetscCall(VecCopy(cgP->G_old, tao->gradient)); in TaoSolve_CG()
118 PetscCall(VecCopy(tao->gradient, tao->stepdirection)); in TaoSolve_CG()
119 PetscCall(VecScale(tao->stepdirection, -1.0)); in TaoSolve_CG()
121 PetscCall(TaoLineSearchSetInitialStepLength(tao->linesearch, delta)); in TaoSolve_CG()
122 …PetscCall(TaoLineSearchApply(tao->linesearch, tao->solution, &f, tao->gradient, tao->stepdirection… in TaoSolve_CG()
123 PetscCall(TaoAddLineSearchCounts(tao)); in TaoSolve_CG()
127 PetscCall(VecCopy(cgP->X_old, tao->solution)); in TaoSolve_CG()
128 PetscCall(VecCopy(cgP->G_old, tao->gradient)); in TaoSolve_CG()
130 tao->reason = TAO_DIVERGED_LS_FAILURE; in TaoSolve_CG()
136 PetscCall(VecNorm(tao->gradient, NORM_2, &gnorm)); in TaoSolve_CG()
137 …fOrNanReal(f) && !PetscIsInfOrNanReal(gnorm), PetscObjectComm((PetscObject)tao), PETSC_ERR_USER, "… in TaoSolve_CG()
141 tao->niter++; in TaoSolve_CG()
142 PetscCall(TaoLogConvergenceHistory(tao, f, gnorm, 0.0, tao->ksp_its)); in TaoSolve_CG()
143 PetscCall(TaoMonitor(tao, tao->niter, f, gnorm, 0.0, step)); in TaoSolve_CG()
144 PetscUseTypeMethod(tao, convergencetest, tao->cnvP); in TaoSolve_CG()
145 if (tao->reason != TAO_CONTINUE_ITERATING) break; in TaoSolve_CG()
148 PetscCall(VecDot(tao->gradient, cgP->G_old, &ginner)); in TaoSolve_CG()
168 PetscCall(VecDot(tao->gradient, tao->stepdirection, &gd)); in TaoSolve_CG()
169 PetscCall(VecDot(cgP->G_old, tao->stepdirection, &gd_old)); in TaoSolve_CG()
174 PetscCall(VecDot(tao->gradient, tao->stepdirection, &gd)); in TaoSolve_CG()
175 PetscCall(VecDot(cgP->G_old, tao->stepdirection, &gd_old)); in TaoSolve_CG()
186 PetscCall(VecAXPBY(tao->stepdirection, -1.0, beta, tao->gradient)); in TaoSolve_CG()
196 static PetscErrorCode TaoSetUp_CG(Tao tao) in TaoSetUp_CG() argument
198 TAO_CG *cgP = (TAO_CG *)tao->data; in TaoSetUp_CG()
201 if (!tao->gradient) PetscCall(VecDuplicate(tao->solution, &tao->gradient)); in TaoSetUp_CG()
202 if (!tao->stepdirection) PetscCall(VecDuplicate(tao->solution, &tao->stepdirection)); in TaoSetUp_CG()
203 if (!cgP->X_old) PetscCall(VecDuplicate(tao->solution, &cgP->X_old)); in TaoSetUp_CG()
204 if (!cgP->G_old) PetscCall(VecDuplicate(tao->gradient, &cgP->G_old)); in TaoSetUp_CG()
208 static PetscErrorCode TaoDestroy_CG(Tao tao) in TaoDestroy_CG() argument
210 TAO_CG *cgP = (TAO_CG *)tao->data; in TaoDestroy_CG()
213 if (tao->setupcalled) { in TaoDestroy_CG()
217 PetscCall(TaoLineSearchDestroy(&tao->linesearch)); in TaoDestroy_CG()
218 PetscCall(PetscFree(tao->data)); in TaoDestroy_CG()
222 static PetscErrorCode TaoSetFromOptions_CG(Tao tao, PetscOptionItems PetscOptionsObject) in TaoSetFromOptions_CG() argument
224 TAO_CG *cgP = (TAO_CG *)tao->data; in TaoSetFromOptions_CG()
227 PetscCall(TaoLineSearchSetFromOptions(tao->linesearch)); in TaoSetFromOptions_CG()
237 static PetscErrorCode TaoView_CG(Tao tao, PetscViewer viewer) in TaoView_CG() argument
240 TAO_CG *cgP = (TAO_CG *)tao->data; in TaoView_CG()
274 PETSC_EXTERN PetscErrorCode TaoCreate_CG(Tao tao) in TaoCreate_CG() argument
280 tao->ops->setup = TaoSetUp_CG; in TaoCreate_CG()
281 tao->ops->solve = TaoSolve_CG; in TaoCreate_CG()
282 tao->ops->view = TaoView_CG; in TaoCreate_CG()
283 tao->ops->setfromoptions = TaoSetFromOptions_CG; in TaoCreate_CG()
284 tao->ops->destroy = TaoDestroy_CG; in TaoCreate_CG()
287 PetscCall(TaoParametersInitialize(tao)); in TaoCreate_CG()
288 PetscObjectParameterSetDefault(tao, max_it, 2000); in TaoCreate_CG()
289 PetscObjectParameterSetDefault(tao, max_funcs, 4000); in TaoCreate_CG()
295 PetscCall(TaoLineSearchCreate(((PetscObject)tao)->comm, &tao->linesearch)); in TaoCreate_CG()
296 PetscCall(PetscObjectIncrementTabLevel((PetscObject)tao->linesearch, (PetscObject)tao, 1)); in TaoCreate_CG()
297 PetscCall(TaoLineSearchSetType(tao->linesearch, morethuente_type)); in TaoCreate_CG()
298 PetscCall(TaoLineSearchUseTaoRoutines(tao->linesearch, tao)); in TaoCreate_CG()
299 PetscCall(TaoLineSearchSetOptionsPrefix(tao->linesearch, tao->hdr.prefix)); in TaoCreate_CG()
302 tao->data = (void *)cgP; in TaoCreate_CG()