Lines Matching refs:tao

2 #include <../src/tao/unconstrained/impls/owlqn/owlqn.h>
52 static PetscErrorCode TaoSolve_OWLQN(Tao tao)
54 TAO_OWLQN *lmP = (TAO_OWLQN *)tao->data;
62 if (tao->XL || tao->XU || tao->ops->computebounds) PetscCall(PetscInfo(tao, "WARNING: Variable bounds have been set but will be ignored by owlqn algorithm\n"));
65 PetscCall(TaoComputeObjectiveAndGradient(tao, tao->solution, &f, tao->gradient));
66 PetscCall(VecCopy(tao->gradient, lmP->GV));
67 PetscCall(ComputePseudoGrad_OWLQN(tao->solution, lmP->GV, lmP->lambda));
69 PetscCheck(!PetscIsInfOrNanReal(f) && !PetscIsInfOrNanReal(gnorm), PetscObjectComm((PetscObject)tao), PETSC_ERR_USER, "User provided compute function generated infinity or NaN");
71 tao->reason = TAO_CONTINUE_ITERATING;
72 PetscCall(TaoLogConvergenceHistory(tao, f, gnorm, 0.0, tao->ksp_its));
73 PetscCall(TaoMonitor(tao, tao->niter, f, gnorm, 0.0, step));
74 PetscUseTypeMethod(tao, convergencetest, tao->cnvP);
75 if (tao->reason != TAO_CONTINUE_ITERATING) PetscFunctionReturn(PETSC_SUCCESS);
87 while (tao->reason == TAO_CONTINUE_ITERATING) {
89 PetscTryTypeMethod(tao, update, tao->niter, tao->user_update);
92 PetscCall(MatLMVMUpdate(lmP->M, tao->solution, tao->gradient));
113 PetscCall(MatLMVMUpdate(lmP->M, tao->solution, tao->gradient));
136 PetscCall(VecCopy(tao->solution, lmP->Xold));
137 PetscCall(VecCopy(tao->gradient, lmP->Gold));
139 PetscCall(TaoLineSearchApply(tao->linesearch, tao->solution, &f, lmP->GV, lmP->D, &step, &ls_status));
140 PetscCall(TaoAddLineSearchCounts(tao));
145 PetscCall(VecCopy(lmP->Xold, tao->solution));
146 PetscCall(VecCopy(lmP->Gold, tao->gradient));
147 PetscCall(VecCopy(tao->gradient, lmP->GV));
149 PetscCall(ComputePseudoGrad_OWLQN(tao->solution, lmP->GV, lmP->lambda));
159 PetscCall(MatLMVMUpdate(lmP->M, tao->solution, tao->gradient));
175 PetscCall(MatLMVMUpdate(lmP->M, tao->solution, tao->gradient));
188 PetscCall(TaoLineSearchApply(tao->linesearch, tao->solution, &f, lmP->GV, lmP->D, &step, &ls_status));
189 PetscCall(TaoAddLineSearchCounts(tao));
195 PetscCall(VecCopy(lmP->Xold, tao->solution));
196 PetscCall(VecCopy(lmP->Gold, tao->gradient));
197 PetscCall(VecCopy(tao->gradient, lmP->GV));
201 PetscCall(VecCopy(lmP->GV, tao->gradient));
204 PetscCall(ComputePseudoGrad_OWLQN(tao->solution, lmP->GV, lmP->lambda));
210 ++tao->niter;
211 PetscCall(TaoLogConvergenceHistory(tao, f, gnorm, 0.0, tao->ksp_its));
212 PetscCall(TaoMonitor(tao, tao->niter, f, gnorm, 0.0, step));
213 PetscUseTypeMethod(tao, convergencetest, tao->cnvP);
220 static PetscErrorCode TaoSetUp_OWLQN(Tao tao)
222 TAO_OWLQN *lmP = (TAO_OWLQN *)tao->data;
226 /* Existence of tao->solution checked in TaoSetUp() */
227 if (!tao->gradient) PetscCall(VecDuplicate(tao->solution, &tao->gradient));
228 if (!tao->stepdirection) PetscCall(VecDuplicate(tao->solution, &tao->stepdirection));
229 if (!lmP->D) PetscCall(VecDuplicate(tao->solution, &lmP->D));
230 if (!lmP->GV) PetscCall(VecDuplicate(tao->solution, &lmP->GV));
231 if (!lmP->Xold) PetscCall(VecDuplicate(tao->solution, &lmP->Xold));
232 if (!lmP->Gold) PetscCall(VecDuplicate(tao->solution, &lmP->Gold));
235 PetscCall(VecGetLocalSize(tao->solution, &n));
236 PetscCall(VecGetSize(tao->solution, &N));
237 PetscCall(MatCreateLMVMBFGS(((PetscObject)tao)->comm, n, N, &lmP->M));
238 PetscCall(MatLMVMAllocate(lmP->M, tao->solution, tao->gradient));
242 static PetscErrorCode TaoDestroy_OWLQN(Tao tao)
244 TAO_OWLQN *lmP = (TAO_OWLQN *)tao->data;
247 if (tao->setupcalled) {
254 PetscCall(PetscFree(tao->data));
258 static PetscErrorCode TaoSetFromOptions_OWLQN(Tao tao, PetscOptionItems PetscOptionsObject)
260 TAO_OWLQN *lmP = (TAO_OWLQN *)tao->data;
266 PetscCall(TaoLineSearchSetFromOptions(tao->linesearch));
270 static PetscErrorCode TaoView_OWLQN(Tao tao, PetscViewer viewer)
272 TAO_OWLQN *lm = (TAO_OWLQN *)tao->data;
295 PETSC_EXTERN PetscErrorCode TaoCreate_OWLQN(Tao tao)
301 tao->ops->setup = TaoSetUp_OWLQN;
302 tao->ops->solve = TaoSolve_OWLQN;
303 tao->ops->view = TaoView_OWLQN;
304 tao->ops->setfromoptions = TaoSetFromOptions_OWLQN;
305 tao->ops->destroy = TaoDestroy_OWLQN;
315 tao->data = (void *)lmP;
317 PetscCall(TaoParametersInitialize(tao));
318 PetscObjectParameterSetDefault(tao, max_it, 2000);
319 PetscObjectParameterSetDefault(tao, max_funcs, 4000);
321 PetscCall(TaoLineSearchCreate(((PetscObject)tao)->comm, &tao->linesearch));
322 PetscCall(PetscObjectIncrementTabLevel((PetscObject)tao->linesearch, (PetscObject)tao, 1));
323 PetscCall(TaoLineSearchSetType(tao->linesearch, owarmijo_type));
324 PetscCall(TaoLineSearchUseTaoRoutines(tao->linesearch, tao));
325 PetscCall(TaoLineSearchSetOptionsPrefix(tao->linesearch, tao->hdr.prefix));