Lines Matching refs:tao

7 static PetscErrorCode TaoSolve_LMVM(Tao tao)  in TaoSolve_LMVM()  argument
9 TAO_LMVM *lmP = (TAO_LMVM *)tao->data; in TaoSolve_LMVM()
16 …if (tao->XL || tao->XU || tao->ops->computebounds) PetscCall(PetscInfo(tao, "WARNING: Variable bou… in TaoSolve_LMVM()
19 PetscCall(TaoComputeObjectiveAndGradient(tao, tao->solution, &f, tao->gradient)); in TaoSolve_LMVM()
20 PetscCall(TaoGradientNorm(tao, tao->gradient, NORM_2, &gnorm)); in TaoSolve_LMVM()
22 …fOrNanReal(f) && !PetscIsInfOrNanReal(gnorm), PetscObjectComm((PetscObject)tao), PETSC_ERR_USER, "… in TaoSolve_LMVM()
24 tao->reason = TAO_CONTINUE_ITERATING; in TaoSolve_LMVM()
25 PetscCall(TaoLogConvergenceHistory(tao, f, gnorm, 0.0, tao->ksp_its)); in TaoSolve_LMVM()
26 PetscCall(TaoMonitor(tao, tao->niter, f, gnorm, 0.0, step)); in TaoSolve_LMVM()
27 PetscUseTypeMethod(tao, convergencetest, tao->cnvP); in TaoSolve_LMVM()
28 if (tao->reason != TAO_CONTINUE_ITERATING) PetscFunctionReturn(PETSC_SUCCESS); in TaoSolve_LMVM()
38 while (tao->reason == TAO_CONTINUE_ITERATING) { in TaoSolve_LMVM()
40 if (tao->ops->update) { in TaoSolve_LMVM()
41 PetscUseTypeMethod(tao, update, tao->niter, tao->user_update); in TaoSolve_LMVM()
42 PetscCall(TaoComputeObjective(tao, tao->solution, &f)); in TaoSolve_LMVM()
50 PetscCall(MatLMVMUpdate(lmP->M, tao->solution, tao->gradient)); in TaoSolve_LMVM()
51 PetscCall(MatSolve(lmP->M, tao->gradient, lmP->D)); in TaoSolve_LMVM()
56 PetscCall(VecDotRealPart(lmP->D, tao->gradient, &gdx)); in TaoSolve_LMVM()
68 PetscCall(MatLMVMUpdate(lmP->M, tao->solution, tao->gradient)); in TaoSolve_LMVM()
69 PetscCall(MatSolve(lmP->M, tao->gradient, lmP->D)); in TaoSolve_LMVM()
79 PetscCall(VecCopy(tao->solution, lmP->Xold)); in TaoSolve_LMVM()
80 PetscCall(VecCopy(tao->gradient, lmP->Gold)); in TaoSolve_LMVM()
82 …PetscCall(TaoLineSearchApply(tao->linesearch, tao->solution, &f, tao->gradient, lmP->D, &step, &ls… in TaoSolve_LMVM()
83 PetscCall(TaoAddLineSearchCounts(tao)); in TaoSolve_LMVM()
88 PetscCall(VecCopy(lmP->Xold, tao->solution)); in TaoSolve_LMVM()
89 PetscCall(VecCopy(lmP->Gold, tao->gradient)); in TaoSolve_LMVM()
96 PetscCall(MatLMVMUpdate(lmP->M, tao->solution, tao->gradient)); in TaoSolve_LMVM()
97 PetscCall(MatSolve(lmP->M, tao->solution, tao->gradient)); in TaoSolve_LMVM()
105 …PetscCall(TaoLineSearchApply(tao->linesearch, tao->solution, &f, tao->gradient, lmP->D, &step, &ls… in TaoSolve_LMVM()
106 PetscCall(TaoAddLineSearchCounts(tao)); in TaoSolve_LMVM()
112 PetscCall(VecCopy(lmP->Xold, tao->solution)); in TaoSolve_LMVM()
113 PetscCall(VecCopy(lmP->Gold, tao->gradient)); in TaoSolve_LMVM()
115 tao->reason = TAO_DIVERGED_LS_FAILURE; in TaoSolve_LMVM()
129 PetscCall(TaoGradientNorm(tao, tao->gradient, NORM_2, &gnorm)); in TaoSolve_LMVM()
133 tao->niter++; in TaoSolve_LMVM()
134 PetscCall(TaoLogConvergenceHistory(tao, f, gnorm, 0.0, tao->ksp_its)); in TaoSolve_LMVM()
135 PetscCall(TaoMonitor(tao, tao->niter, f, gnorm, 0.0, step)); in TaoSolve_LMVM()
136 PetscUseTypeMethod(tao, convergencetest, tao->cnvP); in TaoSolve_LMVM()
141 static PetscErrorCode TaoSetUp_LMVM(Tao tao) in TaoSetUp_LMVM() argument
143 TAO_LMVM *lmP = (TAO_LMVM *)tao->data; in TaoSetUp_LMVM()
149 if (!tao->gradient) PetscCall(VecDuplicate(tao->solution, &tao->gradient)); in TaoSetUp_LMVM()
150 if (!tao->stepdirection) PetscCall(VecDuplicate(tao->solution, &tao->stepdirection)); in TaoSetUp_LMVM()
151 if (!lmP->D) PetscCall(VecDuplicate(tao->solution, &lmP->D)); in TaoSetUp_LMVM()
152 if (!lmP->Xold) PetscCall(VecDuplicate(tao->solution, &lmP->Xold)); in TaoSetUp_LMVM()
153 if (!lmP->Gold) PetscCall(VecDuplicate(tao->solution, &lmP->Gold)); in TaoSetUp_LMVM()
156 PetscCall(VecGetLocalSize(tao->solution, &n)); in TaoSetUp_LMVM()
157 PetscCall(VecGetSize(tao->solution, &N)); in TaoSetUp_LMVM()
159 PetscCall(MatLMVMAllocate(lmP->M, tao->solution, tao->gradient)); in TaoSetUp_LMVM()
161 …PetscCheck(is_set && is_spd, PetscObjectComm((PetscObject)tao), PETSC_ERR_ARG_INCOMP, "LMVM matrix… in TaoSetUp_LMVM()
168 static PetscErrorCode TaoDestroy_LMVM(Tao tao) in TaoDestroy_LMVM() argument
170 TAO_LMVM *lmP = (TAO_LMVM *)tao->data; in TaoDestroy_LMVM()
173 if (tao->setupcalled) { in TaoDestroy_LMVM()
180 PetscCall(PetscFree(tao->data)); in TaoDestroy_LMVM()
184 static PetscErrorCode TaoSetFromOptions_LMVM(Tao tao, PetscOptionItems PetscOptionsObject) in TaoSetFromOptions_LMVM() argument
186 TAO_LMVM *lm = (TAO_LMVM *)tao->data; in TaoSetFromOptions_LMVM()
191 PetscCall(TaoLineSearchSetFromOptions(tao->linesearch)); in TaoSetFromOptions_LMVM()
197 static PetscErrorCode TaoView_LMVM(Tao tao, PetscViewer viewer) in TaoView_LMVM() argument
199 TAO_LMVM *lm = (TAO_LMVM *)tao->data; in TaoView_LMVM()
239 PETSC_EXTERN PetscErrorCode TaoCreate_LMVM(Tao tao) in TaoCreate_LMVM() argument
245 tao->ops->setup = TaoSetUp_LMVM; in TaoCreate_LMVM()
246 tao->ops->solve = TaoSolve_LMVM; in TaoCreate_LMVM()
247 tao->ops->view = TaoView_LMVM; in TaoCreate_LMVM()
248 tao->ops->setfromoptions = TaoSetFromOptions_LMVM; in TaoCreate_LMVM()
249 tao->ops->destroy = TaoDestroy_LMVM; in TaoCreate_LMVM()
259 tao->data = (void *)lmP; in TaoCreate_LMVM()
261 PetscCall(TaoParametersInitialize(tao)); in TaoCreate_LMVM()
262 PetscObjectParameterSetDefault(tao, max_it, 2000); in TaoCreate_LMVM()
263 PetscObjectParameterSetDefault(tao, max_funcs, 4000); in TaoCreate_LMVM()
265 PetscCall(TaoLineSearchCreate(((PetscObject)tao)->comm, &tao->linesearch)); in TaoCreate_LMVM()
266 PetscCall(PetscObjectIncrementTabLevel((PetscObject)tao->linesearch, (PetscObject)tao, 1)); in TaoCreate_LMVM()
267 PetscCall(TaoLineSearchSetType(tao->linesearch, morethuente_type)); in TaoCreate_LMVM()
268 PetscCall(TaoLineSearchUseTaoRoutines(tao->linesearch, tao)); in TaoCreate_LMVM()
269 PetscCall(TaoLineSearchSetOptionsPrefix(tao->linesearch, tao->hdr.prefix)); in TaoCreate_LMVM()
272 PetscCall(MatCreate(((PetscObject)tao)->comm, &lmP->M)); in TaoCreate_LMVM()
273 PetscCall(PetscObjectIncrementTabLevel((PetscObject)lmP->M, (PetscObject)tao, 1)); in TaoCreate_LMVM()