Lines Matching refs:tao
89 PetscErrorCode TaoSolve_BNTR(Tao tao) in TaoSolve_BNTR() argument
91 TAO_BNK *bnk = (TAO_BNK *)tao->data; in TaoSolve_BNTR()
100 tao->reason = TAO_CONTINUE_ITERATING; in TaoSolve_BNTR()
101 PetscCall(TaoBNKInitialize(tao, bnk->init_type, &needH)); in TaoSolve_BNTR()
102 if (tao->reason != TAO_CONTINUE_ITERATING) PetscFunctionReturn(PETSC_SUCCESS); in TaoSolve_BNTR()
105 while (tao->reason == TAO_CONTINUE_ITERATING) { in TaoSolve_BNTR()
107 if (tao->ops->update) { in TaoSolve_BNTR()
108 PetscUseTypeMethod(tao, update, tao->niter, tao->user_update); in TaoSolve_BNTR()
109 PetscCall(TaoComputeObjective(tao, tao->solution, &bnk->f)); in TaoSolve_BNTR()
114 PetscCall(TaoBNKTakeCGSteps(tao, &cgTerminate)); in TaoSolve_BNTR()
116 tao->reason = bnk->bncg->reason; in TaoSolve_BNTR()
120 PetscCall((*bnk->computehessian)(tao)); in TaoSolve_BNTR()
126 PetscCall(VecCopy(tao->solution, bnk->Xold)); in TaoSolve_BNTR()
127 PetscCall(VecCopy(tao->gradient, bnk->Gold)); in TaoSolve_BNTR()
132 while (!stepAccepted && tao->reason == TAO_CONTINUE_ITERATING) { in TaoSolve_BNTR()
133 tao->ksp_its = 0; in TaoSolve_BNTR()
136 PetscCall((*bnk->computestep)(tao, shift, &ksp_reason, &stepType)); in TaoSolve_BNTR()
139 PetscCall(VecAXPY(tao->solution, 1.0, tao->stepdirection)); in TaoSolve_BNTR()
140 PetscCall(TaoBoundSolution(tao->solution, tao->XL, tao->XU, 0.0, &nDiff, tao->solution)); in TaoSolve_BNTR()
146 PetscCall(VecCopy(tao->solution, tao->stepdirection)); in TaoSolve_BNTR()
147 PetscCall(VecAXPY(tao->stepdirection, -1.0, bnk->Xold)); in TaoSolve_BNTR()
148 PetscCall(TaoBNKRecomputePred(tao, tao->stepdirection, &prered)); in TaoSolve_BNTR()
151 PetscCall(KSPCGGetObjFcn(tao->ksp, &prered)); in TaoSolve_BNTR()
156 PetscCall(TaoComputeObjective(tao, tao->solution, &bnk->f)); in TaoSolve_BNTR()
157 …PetscCheck(!PetscIsInfOrNanReal(bnk->f), PetscObjectComm((PetscObject)tao), PETSC_ERR_USER, "User … in TaoSolve_BNTR()
159 oldTrust = tao->trust; in TaoSolve_BNTR()
160 …PetscCall(TaoBNKUpdateTrustRadius(tao, prered, actred, bnk->update_type, stepType, &stepAccepted)); in TaoSolve_BNTR()
167 PetscCall(TaoComputeGradient(tao, tao->solution, bnk->unprojected_gradient)); in TaoSolve_BNTR()
168 PetscCall(TaoBNKEstimateActiveSet(tao, bnk->as_type)); in TaoSolve_BNTR()
169 PetscCall(VecCopy(bnk->unprojected_gradient, tao->gradient)); in TaoSolve_BNTR()
170 if (bnk->active_idx) PetscCall(VecISSet(tao->gradient, bnk->active_idx, 0.0)); in TaoSolve_BNTR()
171 PetscCall(TaoGradientNorm(tao, tao->gradient, NORM_2, &bnk->gnorm)); in TaoSolve_BNTR()
177 PetscCall(VecCopy(bnk->Xold, tao->solution)); in TaoSolve_BNTR()
178 PetscCall(VecCopy(bnk->Gold, tao->gradient)); in TaoSolve_BNTR()
180 if (oldTrust == tao->trust) { in TaoSolve_BNTR()
182 tao->reason = TAO_DIVERGED_TR_REDUCTION; in TaoSolve_BNTR()
187 PetscCall(VecFischer(tao->solution, bnk->unprojected_gradient, tao->XL, tao->XU, bnk->W)); in TaoSolve_BNTR()
189 …PetscCheck(!PetscIsInfOrNanReal(resnorm), PetscObjectComm((PetscObject)tao), PETSC_ERR_USER, "User… in TaoSolve_BNTR()
190 ++tao->niter; in TaoSolve_BNTR()
191 PetscCall(TaoLogConvergenceHistory(tao, bnk->f, resnorm, 0.0, tao->ksp_its)); in TaoSolve_BNTR()
192 PetscCall(TaoMonitor(tao, tao->niter, bnk->f, resnorm, 0.0, steplen)); in TaoSolve_BNTR()
193 PetscUseTypeMethod(tao, convergencetest, tao->cnvP); in TaoSolve_BNTR()
198 static PetscErrorCode TaoSetUp_BNTR(Tao tao) in TaoSetUp_BNTR() argument
204 PetscCall(TaoSetUp_BNK(tao)); in TaoSetUp_BNTR()
205 PetscCall(TaoGetKSP(tao, &ksp)); in TaoSetUp_BNTR()
207 …PetscCheck(valid, PetscObjectComm((PetscObject)tao), PETSC_ERR_SUP, "Not for KSP type %s. Must use… in TaoSetUp_BNTR()
211 static PetscErrorCode TaoSetFromOptions_BNTR(Tao tao, PetscOptionItems PetscOptionsObject) in TaoSetFromOptions_BNTR() argument
213 TAO_BNK *bnk = (TAO_BNK *)tao->data; in TaoSetFromOptions_BNTR()
216 PetscCall(TaoSetFromOptions_BNK(tao, PetscOptionsObject)); in TaoSetFromOptions_BNTR()
232 PETSC_EXTERN PetscErrorCode TaoCreate_BNTR(Tao tao) in TaoCreate_BNTR() argument
237 PetscCall(TaoCreate_BNK(tao)); in TaoCreate_BNTR()
238 tao->ops->solve = TaoSolve_BNTR; in TaoCreate_BNTR()
239 tao->ops->setup = TaoSetUp_BNTR; in TaoCreate_BNTR()
240 tao->ops->setfromoptions = TaoSetFromOptions_BNTR; in TaoCreate_BNTR()
242 bnk = (TAO_BNK *)tao->data; in TaoCreate_BNTR()