Lines Matching refs:tao
11 static PetscErrorCode TaoBNKComputeSubHessian(Tao tao) in TaoBNKComputeSubHessian() argument
13 TAO_BNK *bnk = (TAO_BNK *)tao->data; in TaoBNKComputeSubHessian()
19 …PetscCall(MatCreateSubMatrix(tao->hessian, bnk->inactive_idx, bnk->inactive_idx, MAT_INITIAL_MATRI… in TaoBNKComputeSubHessian()
20 if (tao->hessian == tao->hessian_pre) { in TaoBNKComputeSubHessian()
24 …PetscCall(MatCreateSubMatrix(tao->hessian_pre, bnk->inactive_idx, bnk->inactive_idx, MAT_INITIAL_M… in TaoBNKComputeSubHessian()
28 PetscCall(PetscObjectReference((PetscObject)tao->hessian)); in TaoBNKComputeSubHessian()
29 bnk->H_inactive = tao->hessian; in TaoBNKComputeSubHessian()
30 PetscCall(PetscObjectReference((PetscObject)tao->hessian_pre)); in TaoBNKComputeSubHessian()
31 bnk->Hpre_inactive = tao->hessian_pre; in TaoBNKComputeSubHessian()
39 PetscErrorCode TaoBNKInitialize(Tao tao, PetscInt initType, PetscBool *needH) in TaoBNKInitialize() argument
41 TAO_BNK *bnk = (TAO_BNK *)tao->data; in TaoBNKInitialize()
54 PetscCall(TaoComputeVariableBounds(tao)); in TaoBNKInitialize()
55 PetscCall(TaoSetVariableBounds(bnk->bncg, tao->XL, tao->XU)); in TaoBNKInitialize()
56 if (tao->bounded) PetscCall(TaoLineSearchSetVariableBounds(tao->linesearch, tao->XL, tao->XU)); in TaoBNKInitialize()
59 PetscCall(TaoBoundSolution(tao->solution, tao->XL, tao->XU, 0.0, &nDiff, tao->solution)); in TaoBNKInitialize()
62 PetscCall(TaoComputeObjectiveAndGradient(tao, tao->solution, &bnk->f, bnk->unprojected_gradient)); in TaoBNKInitialize()
63 PetscCall(TaoBNKEstimateActiveSet(tao, bnk->as_type)); in TaoBNKInitialize()
64 PetscCall(VecCopy(bnk->unprojected_gradient, tao->gradient)); in TaoBNKInitialize()
65 if (bnk->active_idx) PetscCall(VecISSet(tao->gradient, bnk->active_idx, 0.0)); in TaoBNKInitialize()
66 PetscCall(TaoGradientNorm(tao, tao->gradient, NORM_2, &bnk->gnorm)); in TaoBNKInitialize()
69 PetscCall(VecFischer(tao->solution, bnk->unprojected_gradient, tao->XL, tao->XU, bnk->W)); in TaoBNKInitialize()
71 …eal(bnk->f) && !PetscIsInfOrNanReal(resnorm), PetscObjectComm((PetscObject)tao), PETSC_ERR_USER, "… in TaoBNKInitialize()
72 PetscCall(TaoLogConvergenceHistory(tao, bnk->f, resnorm, 0.0, tao->ksp_its)); in TaoBNKInitialize()
73 PetscCall(TaoMonitor(tao, tao->niter, bnk->f, resnorm, 0.0, 1.0)); in TaoBNKInitialize()
74 PetscUseTypeMethod(tao, convergencetest, tao->cnvP); in TaoBNKInitialize()
75 if (tao->reason != TAO_CONTINUE_ITERATING) PetscFunctionReturn(PETSC_SUCCESS); in TaoBNKInitialize()
97 PetscCall(VecSet(tao->stepdirection, 0.0)); in TaoBNKInitialize()
100 PetscCall(KSPGetPC(tao->ksp, &pc)); in TaoBNKInitialize()
106 PetscCall(VecGetLocalSize(tao->solution, &n)); in TaoBNKInitialize()
107 PetscCall(VecGetSize(tao->solution, &N)); in TaoBNKInitialize()
109 PetscCall(MatLMVMAllocate(bnk->M, tao->solution, bnk->unprojected_gradient)); in TaoBNKInitialize()
111 …PetscCheck(sym_set && is_symmetric, PetscObjectComm((PetscObject)tao), PETSC_ERR_ARG_INCOMP, "LMVM… in TaoBNKInitialize()
121 PetscCall(PetscObjectHasFunction((PetscObject)tao->ksp, "KSPCGSetRadius_C", &kspTR)); in TaoBNKInitialize()
126 tao->trust = tao->trust0; in TaoBNKInitialize()
132 tao->trust = tao->trust0; in TaoBNKInitialize()
139 PetscCall((*bnk->computehessian)(tao)); in TaoBNKInitialize()
140 PetscCall(TaoBNKEstimateActiveSet(tao, BNK_AS_NONE)); in TaoBNKInitialize()
141 PetscCall(TaoBNKComputeSubHessian(tao)); in TaoBNKInitialize()
147 PetscCall(VecCopy(tao->solution, bnk->Xold)); in TaoBNKInitialize()
148 PetscCall(VecAXPY(tao->solution, -tao->trust / bnk->gnorm, tao->gradient)); in TaoBNKInitialize()
149 PetscCall(TaoBoundSolution(tao->solution, tao->XL, tao->XU, 0.0, &nDiff, tao->solution)); in TaoBNKInitialize()
151 PetscCall(VecCopy(tao->solution, bnk->W)); in TaoBNKInitialize()
154 PetscCall(TaoComputeObjective(tao, tao->solution, &ftrial)); in TaoBNKInitialize()
155 …PetscCheck(!PetscIsInfOrNanReal(bnk->f), PetscObjectComm((PetscObject)tao), PETSC_ERR_USER, "User … in TaoBNKInitialize()
156 PetscCall(VecCopy(bnk->Xold, tao->solution)); in TaoBNKInitialize()
162 sigma = -tao->trust / bnk->gnorm; in TaoBNKInitialize()
179 … prered = tao->trust * (bnk->gnorm - 0.5 * tao->trust * prered / (bnk->gnorm * bnk->gnorm)); in TaoBNKInitialize()
187 …tau_1 = bnk->theta_i * bnk->gnorm * tao->trust / (bnk->theta_i * bnk->gnorm * tao->trust + (1.0 … in TaoBNKInitialize()
188 …tau_2 = bnk->theta_i * bnk->gnorm * tao->trust / (bnk->theta_i * bnk->gnorm * tao->trust - (1.0 … in TaoBNKInitialize()
194 max_radius = PetscMax(max_radius, tao->trust); in TaoBNKInitialize()
205 max_radius = PetscMax(max_radius, tao->trust); in TaoBNKInitialize()
231 tao->trust = tau * tao->trust; in TaoBNKInitialize()
237 PetscCall(VecCopy(tao->solution, bnk->Xold)); in TaoBNKInitialize()
238 PetscCall(VecAXPY(tao->solution, sigma, tao->gradient)); in TaoBNKInitialize()
239 PetscCall(TaoBoundSolution(tao->solution, tao->XL, tao->XU, 0.0, &nDiff, tao->solution)); in TaoBNKInitialize()
240 PetscCall(VecCopy(tao->solution, tao->stepdirection)); in TaoBNKInitialize()
241 PetscCall(VecAXPY(tao->stepdirection, -1.0, bnk->Xold)); in TaoBNKInitialize()
242 PetscCall(TaoComputeGradient(tao, tao->solution, bnk->unprojected_gradient)); in TaoBNKInitialize()
243 PetscCall(TaoBNKEstimateActiveSet(tao, bnk->as_type)); in TaoBNKInitialize()
244 PetscCall(VecCopy(bnk->unprojected_gradient, tao->gradient)); in TaoBNKInitialize()
245 if (bnk->active_idx) PetscCall(VecISSet(tao->gradient, bnk->active_idx, 0.0)); in TaoBNKInitialize()
247 PetscCall(TaoGradientNorm(tao, tao->gradient, NORM_2, &bnk->gnorm)); in TaoBNKInitialize()
250 PetscCall(VecFischer(tao->solution, bnk->unprojected_gradient, tao->XL, tao->XU, bnk->W)); in TaoBNKInitialize()
252 …PetscCheck(!PetscIsInfOrNanReal(resnorm), PetscObjectComm((PetscObject)tao), PETSC_ERR_USER, "User… in TaoBNKInitialize()
253 PetscCall(TaoLogConvergenceHistory(tao, bnk->f, resnorm, 0.0, tao->ksp_its)); in TaoBNKInitialize()
254 PetscCall(TaoMonitor(tao, tao->niter, bnk->f, resnorm, 0.0, 1.0)); in TaoBNKInitialize()
255 PetscUseTypeMethod(tao, convergencetest, tao->cnvP); in TaoBNKInitialize()
256 if (tao->reason != TAO_CONTINUE_ITERATING) PetscFunctionReturn(PETSC_SUCCESS); in TaoBNKInitialize()
261 tao->trust = PetscMax(tao->trust, max_radius); in TaoBNKInitialize()
264 tao->trust = PetscMax(tao->trust, bnk->min_radius); in TaoBNKInitialize()
265 tao->trust = PetscMin(tao->trust, bnk->max_radius); in TaoBNKInitialize()
270 tao->trust = 0.0; in TaoBNKInitialize()
279 PetscErrorCode TaoBNKComputeHessian(Tao tao) in TaoBNKComputeHessian() argument
281 TAO_BNK *bnk = (TAO_BNK *)tao->data; in TaoBNKComputeHessian()
285 PetscCall(TaoComputeHessian(tao, tao->solution, tao->hessian, tao->hessian_pre)); in TaoBNKComputeHessian()
287 if (bnk->M) PetscCall(MatLMVMUpdate(bnk->M, tao->solution, bnk->unprojected_gradient)); in TaoBNKComputeHessian()
289 PetscCall(TaoBNKComputeSubHessian(tao)); in TaoBNKComputeHessian()
295 PetscErrorCode TaoBNKEstimateActiveSet(Tao tao, PetscInt asType) in TaoBNKEstimateActiveSet() argument
297 TAO_BNK *bnk = (TAO_BNK *)tao->data; in TaoBNKEstimateActiveSet()
305 …PetscCall(VecWhichInactive(tao->XL, tao->solution, bnk->unprojected_gradient, tao->XU, PETSC_TRUE,… in TaoBNKEstimateActiveSet()
307 PetscCall(ISComplementVec(bnk->inactive_idx, tao->solution, &bnk->active_idx)); in TaoBNKEstimateActiveSet()
317 if (tao->hessian) PetscCall(MatAssembled(tao->hessian, &hessComputed)); in TaoBNKEstimateActiveSet()
318 if (hessComputed) PetscCall(MatHasOperation(tao->hessian, MATOP_GET_DIAGONAL, &diagExists)); in TaoBNKEstimateActiveSet()
321 PetscCall(MatGetDiagonal(tao->hessian, bnk->Xwork)); in TaoBNKEstimateActiveSet()
332 …PetscCall(TaoEstimateActiveBounds(tao->solution, tao->XL, tao->XU, bnk->unprojected_gradient, bnk-… in TaoBNKEstimateActiveSet()
344 PetscErrorCode TaoBNKBoundStep(Tao tao, PetscInt asType, Vec step) in TaoBNKBoundStep() argument
346 TAO_BNK *bnk = (TAO_BNK *)tao->data; in TaoBNKBoundStep()
354 …PetscCall(TaoBoundStep(tao->solution, tao->XL, tao->XU, bnk->active_lower, bnk->active_upper, bnk-… in TaoBNKBoundStep()
369 PetscErrorCode TaoBNKTakeCGSteps(Tao tao, PetscBool *terminate) in TaoBNKTakeCGSteps() argument
371 TAO_BNK *bnk = (TAO_BNK *)tao->data; in TaoBNKTakeCGSteps()
381 tao->nfuncs += bnk->bncg->nfuncs; in TaoBNKTakeCGSteps()
382 tao->nfuncgrads += bnk->bncg->nfuncgrads; in TaoBNKTakeCGSteps()
383 tao->ngrads += bnk->bncg->ngrads; in TaoBNKTakeCGSteps()
384 tao->nhess += bnk->bncg->nhess; in TaoBNKTakeCGSteps()
391 PetscCall(TaoBNKEstimateActiveSet(tao, bnk->as_type)); in TaoBNKTakeCGSteps()
399 PetscErrorCode TaoBNKComputeStep(Tao tao, PetscBool shift, KSPConvergedReason *ksp_reason, PetscInt… in TaoBNKComputeStep() argument
401 TAO_BNK *bnk = (TAO_BNK *)tao->data; in TaoBNKComputeStep()
411 PetscCall(VecSet(tao->stepdirection, 0.0)); in TaoBNKComputeStep()
412 PetscCall(TaoBNKBoundStep(tao, bnk->as_type, tao->stepdirection)); in TaoBNKComputeStep()
418 PetscCall(PetscObjectTypeCompare((PetscObject)tao->hessian, MATLMVM, &is_lmvm)); in TaoBNKComputeStep()
420 PetscCall(MatShift(tao->hessian, bnk->pert)); in TaoBNKComputeStep()
428 tao->ksp_its = 0; in TaoBNKComputeStep()
429 PetscCall(VecSet(tao->stepdirection, 0.0)); in TaoBNKComputeStep()
431 PetscCall(KSPReset(tao->ksp)); in TaoBNKComputeStep()
432 PetscCall(KSPResetFromOptions(tao->ksp)); in TaoBNKComputeStep()
435 PetscCall(KSPSetOperators(tao->ksp, bnk->H_inactive, bnk->Hpre_inactive)); in TaoBNKComputeStep()
439 PetscCall(VecGetSubVector(tao->stepdirection, bnk->inactive_idx, &bnk->X_inactive)); in TaoBNKComputeStep()
442 bnk->X_inactive = tao->stepdirection; in TaoBNKComputeStep()
444 PetscCall(KSPCGSetRadius(tao->ksp, tao->trust)); in TaoBNKComputeStep()
445 PetscCall(KSPSolve(tao->ksp, bnk->G_inactive, bnk->X_inactive)); in TaoBNKComputeStep()
446 PetscCall(KSPGetIterationNumber(tao->ksp, &kspits)); in TaoBNKComputeStep()
447 tao->ksp_its += kspits; in TaoBNKComputeStep()
448 tao->ksp_tot_its += kspits; in TaoBNKComputeStep()
449 PetscCall(PetscObjectHasFunction((PetscObject)tao->ksp, "KSPCGGetNormD_C", &kspTR)); in TaoBNKComputeStep()
451 PetscCall(KSPCGGetNormD(tao->ksp, &bnk->dnorm)); in TaoBNKComputeStep()
453 if (0.0 == tao->trust) { in TaoBNKComputeStep()
456 tao->trust = bnk->dnorm; in TaoBNKComputeStep()
459 tao->trust = PetscMax(tao->trust, bnk->min_radius); in TaoBNKComputeStep()
460 tao->trust = PetscMin(tao->trust, bnk->max_radius); in TaoBNKComputeStep()
464 tao->trust = tao->trust0; in TaoBNKComputeStep()
467 tao->trust = PetscMax(tao->trust, bnk->min_radius); in TaoBNKComputeStep()
468 tao->trust = PetscMin(tao->trust, bnk->max_radius); in TaoBNKComputeStep()
470 PetscCall(KSPCGSetRadius(tao->ksp, tao->trust)); in TaoBNKComputeStep()
471 PetscCall(KSPSolve(tao->ksp, bnk->G_inactive, bnk->X_inactive)); in TaoBNKComputeStep()
472 PetscCall(KSPGetIterationNumber(tao->ksp, &kspits)); in TaoBNKComputeStep()
473 tao->ksp_its += kspits; in TaoBNKComputeStep()
474 tao->ksp_tot_its += kspits; in TaoBNKComputeStep()
475 PetscCall(KSPCGGetNormD(tao->ksp, &bnk->dnorm)); in TaoBNKComputeStep()
477 …PetscCheck(bnk->dnorm != 0.0, PetscObjectComm((PetscObject)tao), PETSC_ERR_PLIB, "Initial directio… in TaoBNKComputeStep()
484 PetscCall(VecRestoreSubVector(tao->stepdirection, bnk->inactive_idx, &bnk->X_inactive)); in TaoBNKComputeStep()
487 PetscCall(VecScale(tao->stepdirection, -1.0)); in TaoBNKComputeStep()
488 PetscCall(TaoBNKBoundStep(tao, bnk->as_type, tao->stepdirection)); in TaoBNKComputeStep()
491 PetscCall(KSPGetConvergedReason(tao->ksp, ksp_reason)); in TaoBNKComputeStep()
514 PetscCall(MatLMVMUpdate(bnk->M, tao->solution, bnk->unprojected_gradient)); in TaoBNKComputeStep()
523 PetscErrorCode TaoBNKRecomputePred(Tao tao, Vec S, PetscReal *prered) in TaoBNKRecomputePred() argument
525 TAO_BNK *bnk = (TAO_BNK *)tao->data; in TaoBNKRecomputePred()
530 PetscCall(VecGetSubVector(tao->stepdirection, bnk->inactive_idx, &bnk->X_inactive)); in TaoBNKRecomputePred()
534 bnk->X_inactive = tao->stepdirection; in TaoBNKRecomputePred()
544 PetscCall(VecRestoreSubVector(tao->stepdirection, bnk->inactive_idx, &bnk->X_inactive)); in TaoBNKRecomputePred()
557 PetscErrorCode TaoBNKSafeguardStep(Tao tao, KSPConvergedReason ksp_reason, PetscInt *stepType) in TaoBNKSafeguardStep() argument
559 TAO_BNK *bnk = (TAO_BNK *)tao->data; in TaoBNKSafeguardStep()
566 PetscCall(VecDot(tao->stepdirection, tao->gradient, &gdx)); in TaoBNKSafeguardStep()
575 PetscCall(PetscObjectTypeCompare((PetscObject)tao->ksp, KSPGLTR, &is_gltr)); in TaoBNKSafeguardStep()
577 PetscCall(KSPGLTRGetMinEig(tao->ksp, &e_min)); in TaoBNKSafeguardStep()
588 PetscCall(VecCopy(tao->gradient, tao->stepdirection)); in TaoBNKSafeguardStep()
592 PetscCall(MatSolve(bnk->M, bnk->unprojected_gradient, tao->stepdirection)); in TaoBNKSafeguardStep()
597 PetscCall(VecDot(tao->gradient, tao->stepdirection, &gdx)); in TaoBNKSafeguardStep()
606 PetscCall(MatLMVMUpdate(bnk->M, tao->solution, bnk->unprojected_gradient)); in TaoBNKSafeguardStep()
607 PetscCall(MatSolve(bnk->M, bnk->unprojected_gradient, tao->stepdirection)); in TaoBNKSafeguardStep()
621 PetscCall(VecScale(tao->stepdirection, -1.0)); in TaoBNKSafeguardStep()
622 PetscCall(TaoBNKBoundStep(tao, bnk->as_type, tao->stepdirection)); in TaoBNKSafeguardStep()
637 PetscCall(PetscObjectTypeCompare((PetscObject)tao->ksp, KSPGLTR, &is_gltr)); in TaoBNKSafeguardStep()
639 PetscCall(KSPGLTRGetMinEig(tao->ksp, &e_min)); in TaoBNKSafeguardStep()
660 PetscCall(VecDot(tao->stepdirection, tao->gradient, &gdx)); in TaoBNKSafeguardStep()
665 PetscCall(MatLMVMUpdate(bnk->M, tao->solution, bnk->unprojected_gradient)); in TaoBNKSafeguardStep()
666 PetscCall(MatSolve(bnk->M, tao->gradient, tao->stepdirection)); in TaoBNKSafeguardStep()
667 PetscCall(VecScale(tao->stepdirection, -1.0)); in TaoBNKSafeguardStep()
668 PetscCall(TaoBNKBoundStep(tao, bnk->as_type, tao->stepdirection)); in TaoBNKSafeguardStep()
690 PetscErrorCode TaoBNKPerformLineSearch(Tao tao, PetscInt *stepType, PetscReal *steplen, TaoLineSear… in TaoBNKPerformLineSearch() argument
692 TAO_BNK *bnk = (TAO_BNK *)tao->data; in TaoBNKPerformLineSearch()
699 …PetscCall(TaoLineSearchApply(tao->linesearch, tao->solution, &bnk->f, bnk->unprojected_gradient, t… in TaoBNKPerformLineSearch()
700 PetscCall(TaoAddLineSearchCounts(tao)); in TaoBNKPerformLineSearch()
705 PetscCall(VecCopy(bnk->Xold, tao->solution)); in TaoBNKPerformLineSearch()
717 PetscCall(PetscObjectTypeCompare((PetscObject)tao->ksp, KSPGLTR, &is_gltr)); in TaoBNKPerformLineSearch()
719 PetscCall(KSPGLTRGetMinEig(tao->ksp, &e_min)); in TaoBNKPerformLineSearch()
730 PetscCall(VecCopy(bnk->unprojected_gradient, tao->stepdirection)); in TaoBNKPerformLineSearch()
734 PetscCall(MatSolve(bnk->M, bnk->unprojected_gradient, tao->stepdirection)); in TaoBNKPerformLineSearch()
737 PetscCall(VecDot(tao->gradient, tao->stepdirection, &gdx)); in TaoBNKPerformLineSearch()
743 PetscCall(MatLMVMUpdate(bnk->M, tao->solution, bnk->unprojected_gradient)); in TaoBNKPerformLineSearch()
744 PetscCall(MatSolve(bnk->M, bnk->unprojected_gradient, tao->stepdirection)); in TaoBNKPerformLineSearch()
765 PetscCall(MatLMVMUpdate(bnk->M, tao->solution, bnk->unprojected_gradient)); in TaoBNKPerformLineSearch()
766 PetscCall(MatSolve(bnk->M, bnk->unprojected_gradient, tao->stepdirection)); in TaoBNKPerformLineSearch()
773 PetscCall(VecScale(tao->stepdirection, -1.0)); in TaoBNKPerformLineSearch()
774 PetscCall(TaoBNKBoundStep(tao, bnk->as_type, tao->stepdirection)); in TaoBNKPerformLineSearch()
777 …PetscCall(TaoLineSearchApply(tao->linesearch, tao->solution, &bnk->f, bnk->unprojected_gradient, t… in TaoBNKPerformLineSearch()
778 PetscCall(TaoAddLineSearchCounts(tao)); in TaoBNKPerformLineSearch()
792 PetscErrorCode TaoBNKUpdateTrustRadius(Tao tao, PetscReal prered, PetscReal actred, PetscInt update… in TaoBNKUpdateTrustRadius() argument
794 TAO_BNK *bnk = (TAO_BNK *)tao->data; in TaoBNKUpdateTrustRadius()
806 PetscCall(TaoLineSearchGetStepLength(tao->linesearch, &step)); in TaoBNKUpdateTrustRadius()
809 tao->trust = bnk->omega1 * PetscMin(bnk->dnorm, tao->trust); in TaoBNKUpdateTrustRadius()
812 tao->trust = bnk->omega2 * PetscMin(bnk->dnorm, tao->trust); in TaoBNKUpdateTrustRadius()
816 tao->trust = bnk->omega3 * PetscMin(bnk->dnorm, tao->trust); in TaoBNKUpdateTrustRadius()
818 tao->trust = PetscMax(bnk->omega3 * bnk->dnorm, tao->trust); in TaoBNKUpdateTrustRadius()
822 tao->trust = PetscMax(bnk->omega4 * bnk->dnorm, tao->trust); in TaoBNKUpdateTrustRadius()
825 tao->trust = PetscMax(bnk->omega5 * bnk->dnorm, tao->trust); in TaoBNKUpdateTrustRadius()
829 tao->trust = bnk->omega1 * PetscMin(bnk->dnorm, tao->trust); in TaoBNKUpdateTrustRadius()
839 tao->trust = bnk->alpha1 * PetscMin(tao->trust, bnk->dnorm); in TaoBNKUpdateTrustRadius()
842 tao->trust = bnk->alpha1 * PetscMin(tao->trust, bnk->dnorm); in TaoBNKUpdateTrustRadius()
852 tao->trust = bnk->alpha1 * PetscMin(tao->trust, bnk->dnorm); in TaoBNKUpdateTrustRadius()
857 if (bnk->dnorm == tao->trust) { in TaoBNKUpdateTrustRadius()
860 tao->trust = bnk->alpha2 * tao->trust; in TaoBNKUpdateTrustRadius()
863 tao->trust = bnk->alpha3 * tao->trust; in TaoBNKUpdateTrustRadius()
866 tao->trust = bnk->alpha4 * tao->trust; in TaoBNKUpdateTrustRadius()
869 tao->trust = bnk->alpha5 * tao->trust; in TaoBNKUpdateTrustRadius()
877 tao->trust = bnk->alpha1 * PetscMin(bnk->dnorm, tao->trust); in TaoBNKUpdateTrustRadius()
887 tao->trust = bnk->gamma1 * PetscMin(tao->trust, bnk->dnorm); in TaoBNKUpdateTrustRadius()
890 tao->trust = bnk->gamma1 * PetscMin(tao->trust, bnk->dnorm); in TaoBNKUpdateTrustRadius()
898 PetscCall(VecDot(tao->gradient, tao->stepdirection, &gdx)); in TaoBNKUpdateTrustRadius()
908 tao->trust = PetscMax(tao->trust, bnk->gamma3 * bnk->dnorm); in TaoBNKUpdateTrustRadius()
910 tao->trust = PetscMax(tao->trust, bnk->gamma4 * bnk->dnorm); in TaoBNKUpdateTrustRadius()
912 tao->trust = PetscMax(tao->trust, tau_max * bnk->dnorm); in TaoBNKUpdateTrustRadius()
918 tao->trust = bnk->gamma2 * PetscMin(tao->trust, bnk->dnorm); in TaoBNKUpdateTrustRadius()
920 tao->trust = PetscMax(tao->trust, bnk->gamma3 * bnk->dnorm); in TaoBNKUpdateTrustRadius()
922 tao->trust = tau_max * PetscMin(tao->trust, bnk->dnorm); in TaoBNKUpdateTrustRadius()
924 tao->trust = PetscMax(tao->trust, tau_max * bnk->dnorm); in TaoBNKUpdateTrustRadius()
929 tao->trust = bnk->gamma2 * PetscMin(tao->trust, bnk->dnorm); in TaoBNKUpdateTrustRadius()
931 tao->trust = bnk->gamma1 * PetscMin(tao->trust, bnk->dnorm); in TaoBNKUpdateTrustRadius()
933 tao->trust = bnk->gamma1 * PetscMin(tao->trust, bnk->dnorm); in TaoBNKUpdateTrustRadius()
935 tao->trust = tau_1 * PetscMin(tao->trust, bnk->dnorm); in TaoBNKUpdateTrustRadius()
937 tao->trust = tau_2 * PetscMin(tao->trust, bnk->dnorm); in TaoBNKUpdateTrustRadius()
939 tao->trust = tau_max * PetscMin(tao->trust, bnk->dnorm); in TaoBNKUpdateTrustRadius()
946 tao->trust = bnk->gamma1 * PetscMin(bnk->dnorm, tao->trust); in TaoBNKUpdateTrustRadius()
951 tao->trust = PetscMin(tao->trust, bnk->max_radius); in TaoBNKUpdateTrustRadius()
952 tao->trust = PetscMax(tao->trust, bnk->min_radius); in TaoBNKUpdateTrustRadius()
956 PetscErrorCode TaoBNKAddStepCounts(Tao tao, PetscInt stepType) in TaoBNKAddStepCounts() argument
958 TAO_BNK *bnk = (TAO_BNK *)tao->data; in TaoBNKAddStepCounts()
980 PetscErrorCode TaoSetUp_BNK(Tao tao) in TaoSetUp_BNK() argument
982 TAO_BNK *bnk = (TAO_BNK *)tao->data; in TaoSetUp_BNK()
985 if (!tao->gradient) PetscCall(VecDuplicate(tao->solution, &tao->gradient)); in TaoSetUp_BNK()
986 if (!tao->stepdirection) PetscCall(VecDuplicate(tao->solution, &tao->stepdirection)); in TaoSetUp_BNK()
987 if (!bnk->W) PetscCall(VecDuplicate(tao->solution, &bnk->W)); in TaoSetUp_BNK()
988 if (!bnk->Xold) PetscCall(VecDuplicate(tao->solution, &bnk->Xold)); in TaoSetUp_BNK()
989 if (!bnk->Gold) PetscCall(VecDuplicate(tao->solution, &bnk->Gold)); in TaoSetUp_BNK()
990 if (!bnk->Xwork) PetscCall(VecDuplicate(tao->solution, &bnk->Xwork)); in TaoSetUp_BNK()
991 if (!bnk->Gwork) PetscCall(VecDuplicate(tao->solution, &bnk->Gwork)); in TaoSetUp_BNK()
992 …if (!bnk->unprojected_gradient) PetscCall(VecDuplicate(tao->solution, &bnk->unprojected_gradient)); in TaoSetUp_BNK()
993 …if (!bnk->unprojected_gradient_old) PetscCall(VecDuplicate(tao->solution, &bnk->unprojected_gradie… in TaoSetUp_BNK()
994 if (!bnk->Diag_min) PetscCall(VecDuplicate(tao->solution, &bnk->Diag_min)); in TaoSetUp_BNK()
995 if (!bnk->Diag_max) PetscCall(VecDuplicate(tao->solution, &bnk->Diag_max)); in TaoSetUp_BNK()
1008 PetscCall(PetscObjectReference((PetscObject)tao->gradient)); in TaoSetUp_BNK()
1010 bnk->bncg->gradient = tao->gradient; in TaoSetUp_BNK()
1011 PetscCall(PetscObjectReference((PetscObject)tao->stepdirection)); in TaoSetUp_BNK()
1013 bnk->bncg->stepdirection = tao->stepdirection; in TaoSetUp_BNK()
1014 PetscCall(TaoSetSolution(bnk->bncg, tao->solution)); in TaoSetUp_BNK()
1017 PetscCall(TaoSetTolerances(bnk->bncg, tao->gatol, tao->grtol, tao->gttol)); in TaoSetUp_BNK()
1018 PetscCall(TaoSetFunctionLowerBound(bnk->bncg, tao->fmin)); in TaoSetUp_BNK()
1019 PetscCall(TaoSetConvergenceTest(bnk->bncg, tao->ops->convergencetest, tao->cnvP)); in TaoSetUp_BNK()
1020 PetscCall(TaoSetObjective(bnk->bncg, tao->ops->computeobjective, tao->user_objP)); in TaoSetUp_BNK()
1021 PetscCall(TaoSetGradient(bnk->bncg, NULL, tao->ops->computegradient, tao->user_gradP)); in TaoSetUp_BNK()
1022 …PetscCall(TaoSetObjectiveAndGradient(bnk->bncg, NULL, tao->ops->computeobjectiveandgradient, tao->… in TaoSetUp_BNK()
1023 PetscCall(PetscObjectCopyFortranFunctionPointers((PetscObject)tao, (PetscObject)bnk->bncg)); in TaoSetUp_BNK()
1040 PetscErrorCode TaoDestroy_BNK(Tao tao) in TaoDestroy_BNK() argument
1042 TAO_BNK *bnk = (TAO_BNK *)tao->data; in TaoDestroy_BNK()
1062 PetscCall(KSPDestroy(&tao->ksp)); in TaoDestroy_BNK()
1063 PetscCall(PetscFree(tao->data)); in TaoDestroy_BNK()
1067 PetscErrorCode TaoSetFromOptions_BNK(Tao tao, PetscOptionItems PetscOptionsObject) in TaoSetFromOptions_BNK() argument
1069 TAO_BNK *bnk = (TAO_BNK *)tao->data; in TaoSetFromOptions_BNK()
1126 PetscCall(TaoSetOptionsPrefix(bnk->bncg, ((PetscObject)tao)->prefix)); in TaoSetFromOptions_BNK()
1130 PetscCall(KSPSetOptionsPrefix(tao->ksp, ((PetscObject)tao)->prefix)); in TaoSetFromOptions_BNK()
1131 PetscCall(KSPAppendOptionsPrefix(tao->ksp, "tao_bnk_")); in TaoSetFromOptions_BNK()
1132 PetscCall(KSPSetFromOptions(tao->ksp)); in TaoSetFromOptions_BNK()
1136 PetscErrorCode TaoView_BNK(Tao tao, PetscViewer viewer) in TaoView_BNK() argument
1138 TAO_BNK *bnk = (TAO_BNK *)tao->data; in TaoView_BNK()
1231 PetscErrorCode TaoCreate_BNK(Tao tao) in TaoCreate_BNK() argument
1239 tao->ops->setup = TaoSetUp_BNK; in TaoCreate_BNK()
1240 tao->ops->view = TaoView_BNK; in TaoCreate_BNK()
1241 tao->ops->setfromoptions = TaoSetFromOptions_BNK; in TaoCreate_BNK()
1242 tao->ops->destroy = TaoDestroy_BNK; in TaoCreate_BNK()
1245 PetscCall(TaoParametersInitialize(tao)); in TaoCreate_BNK()
1246 PetscObjectParameterSetDefault(tao, max_it, 50); in TaoCreate_BNK()
1247 PetscObjectParameterSetDefault(tao, trust0, 100.0); in TaoCreate_BNK()
1249 tao->data = (void *)bnk; in TaoCreate_BNK()
1330 PetscCall(TaoCreate(PetscObjectComm((PetscObject)tao), &bnk->bncg)); in TaoCreate_BNK()
1331 PetscCall(PetscObjectIncrementTabLevel((PetscObject)bnk->bncg, (PetscObject)tao, 1)); in TaoCreate_BNK()
1335 PetscCall(TaoLineSearchCreate(((PetscObject)tao)->comm, &tao->linesearch)); in TaoCreate_BNK()
1336 PetscCall(PetscObjectIncrementTabLevel((PetscObject)tao->linesearch, (PetscObject)tao, 1)); in TaoCreate_BNK()
1337 PetscCall(TaoLineSearchSetType(tao->linesearch, TAOLINESEARCHMT)); in TaoCreate_BNK()
1338 PetscCall(TaoLineSearchUseTaoRoutines(tao->linesearch, tao)); in TaoCreate_BNK()
1341 PetscCall(KSPCreate(((PetscObject)tao)->comm, &tao->ksp)); in TaoCreate_BNK()
1342 PetscCall(PetscObjectIncrementTabLevel((PetscObject)tao->ksp, (PetscObject)tao, 1)); in TaoCreate_BNK()
1343 PetscCall(KSPSetType(tao->ksp, KSPSTCG)); in TaoCreate_BNK()
1344 PetscCall(KSPGetPC(tao->ksp, &pc)); in TaoCreate_BNK()