Lines Matching refs:tr

45   TAO_NTR           *tr = (TAO_NTR *)tao->data;  in TaoSolve_NTR()  local
72 tao->trust = PetscMax(tao->trust, tr->min_radius); in TaoSolve_NTR()
73 tao->trust = PetscMin(tao->trust, tr->max_radius); in TaoSolve_NTR()
80 tr->bfgs_pre = pc; in TaoSolve_NTR()
81 PetscCall(PCLMVMGetMatLMVM(tr->bfgs_pre, &tr->M)); in TaoSolve_NTR()
84 PetscCall(MatSetSizes(tr->M, n, n, N, N)); in TaoSolve_NTR()
85 PetscCall(MatLMVMAllocate(tr->M, tao->solution, tao->gradient)); in TaoSolve_NTR()
86 PetscCall(MatIsSymmetricKnown(tr->M, &sym_set, &is_symmetric)); in TaoSolve_NTR()
103 switch (tr->init_type) { in TaoSolve_NTR()
122 PetscCall(VecCopy(tao->solution, tr->W)); in TaoSolve_NTR()
123 PetscCall(VecAXPY(tr->W, -tao->trust / gnorm, tao->gradient)); in TaoSolve_NTR()
124 PetscCall(TaoComputeObjective(tao, tr->W, &ftrial)); in TaoSolve_NTR()
127 tau = tr->gamma1_i; in TaoSolve_NTR()
139 if ((PetscAbsScalar(actred) <= tr->epsilon) && (PetscAbsScalar(prered) <= tr->epsilon)) { in TaoSolve_NTR()
145 …tau_1 = tr->theta_i * gnorm * tao->trust / (tr->theta_i * gnorm * tao->trust + (1.0 - tr->theta_… in TaoSolve_NTR()
146 …tau_2 = tr->theta_i * gnorm * tao->trust / (tr->theta_i * gnorm * tao->trust - (1.0 + tr->theta_… in TaoSolve_NTR()
150 if (PetscAbsScalar(kappa - (PetscReal)1.0) <= tr->mu1_i) { in TaoSolve_NTR()
155 tau = tr->gamma3_i; in TaoSolve_NTR()
156 } else if (tau_max > tr->gamma4_i) { in TaoSolve_NTR()
157 tau = tr->gamma4_i; in TaoSolve_NTR()
161 } else if (PetscAbsScalar(kappa - (PetscReal)1.0) <= tr->mu2_i) { in TaoSolve_NTR()
165 if (tau_max < tr->gamma2_i) { in TaoSolve_NTR()
166 tau = tr->gamma2_i; in TaoSolve_NTR()
167 } else if (tau_max > tr->gamma3_i) { in TaoSolve_NTR()
168 tau = tr->gamma3_i; in TaoSolve_NTR()
175 tau = tr->gamma2_i; in TaoSolve_NTR()
176 } else if (tau_max < tr->gamma1_i) { in TaoSolve_NTR()
177 tau = tr->gamma1_i; in TaoSolve_NTR()
178 } else if ((tau_min < tr->gamma1_i) && (tau_max >= 1.0)) { in TaoSolve_NTR()
179 tau = tr->gamma1_i; in TaoSolve_NTR()
180 …} else if ((tau_1 >= tr->gamma1_i) && (tau_1 < 1.0) && ((tau_2 < tr->gamma1_i) || (tau_2 >= 1.0)))… in TaoSolve_NTR()
182 …} else if ((tau_2 >= tr->gamma1_i) && (tau_2 < 1.0) && ((tau_1 < tr->gamma1_i) || (tau_2 >= 1.0)))… in TaoSolve_NTR()
210 tao->trust = PetscMax(tao->trust, tr->min_radius); in TaoSolve_NTR()
211 tao->trust = PetscMin(tao->trust, tr->max_radius); in TaoSolve_NTR()
235 if (tr->bfgs_pre) { in TaoSolve_NTR()
237 PetscCall(MatLMVMUpdate(tr->M, tao->solution, tao->gradient)); in TaoSolve_NTR()
257 tao->trust = PetscMax(tao->trust, tr->min_radius); in TaoSolve_NTR()
258 tao->trust = PetscMin(tao->trust, tr->max_radius); in TaoSolve_NTR()
265 tao->trust = PetscMax(tao->trust, tr->min_radius); in TaoSolve_NTR()
266 tao->trust = PetscMin(tao->trust, tr->max_radius); in TaoSolve_NTR()
280 if ((KSP_DIVERGED_INDEFINITE_PC == ksp_reason) && (tr->bfgs_pre)) { in TaoSolve_NTR()
283 PetscCall(MatLMVMReset(tr->M, PETSC_FALSE)); in TaoSolve_NTR()
284 PetscCall(MatLMVMUpdate(tr->M, tao->solution, tao->gradient)); in TaoSolve_NTR()
287 if (NTR_UPDATE_REDUCTION == tr->update_type) { in TaoSolve_NTR()
294 tao->trust = tr->alpha1 * PetscMin(tao->trust, norm_d); in TaoSolve_NTR()
297 PetscCall(VecCopy(tao->solution, tr->W)); in TaoSolve_NTR()
298 PetscCall(VecAXPY(tr->W, 1.0, tao->stepdirection)); in TaoSolve_NTR()
299 PetscCall(TaoComputeObjective(tao, tr->W, &ftrial)); in TaoSolve_NTR()
302 tao->trust = tr->alpha1 * PetscMin(tao->trust, norm_d); in TaoSolve_NTR()
307 … if ((PetscAbsScalar(actred) <= tr->epsilon) && (PetscAbsScalar(prered) <= tr->epsilon)) { in TaoSolve_NTR()
314 if (kappa < tr->eta1) { in TaoSolve_NTR()
316 tao->trust = tr->alpha1 * PetscMin(tao->trust, norm_d); in TaoSolve_NTR()
319 if (kappa < tr->eta2) { in TaoSolve_NTR()
321 tao->trust = tr->alpha2 * PetscMin(tao->trust, norm_d); in TaoSolve_NTR()
322 } else if (kappa < tr->eta3) { in TaoSolve_NTR()
324 tao->trust = tr->alpha3 * tao->trust; in TaoSolve_NTR()
325 } else if (kappa < tr->eta4) { in TaoSolve_NTR()
327 tao->trust = PetscMax(tr->alpha4 * norm_d, tao->trust); in TaoSolve_NTR()
330 tao->trust = PetscMax(tr->alpha5 * norm_d, tao->trust); in TaoSolve_NTR()
343 tao->trust = tr->gamma1 * PetscMin(tao->trust, norm_d); in TaoSolve_NTR()
345 PetscCall(VecCopy(tao->solution, tr->W)); in TaoSolve_NTR()
346 PetscCall(VecAXPY(tr->W, 1.0, tao->stepdirection)); in TaoSolve_NTR()
347 PetscCall(TaoComputeObjective(tao, tr->W, &ftrial)); in TaoSolve_NTR()
349 tao->trust = tr->gamma1 * PetscMin(tao->trust, norm_d); in TaoSolve_NTR()
354 … if ((PetscAbsScalar(actred) <= tr->epsilon) && (PetscAbsScalar(prered) <= tr->epsilon)) { in TaoSolve_NTR()
360 tau_1 = tr->theta * beta / (tr->theta * beta - (1.0 - tr->theta) * prered + actred); in TaoSolve_NTR()
361 tau_2 = tr->theta * beta / (tr->theta * beta + (1.0 + tr->theta) * prered - actred); in TaoSolve_NTR()
365 if (kappa >= 1.0 - tr->mu1) { in TaoSolve_NTR()
368 tao->trust = PetscMax(tao->trust, tr->gamma3 * norm_d); in TaoSolve_NTR()
369 } else if (tau_max > tr->gamma4) { in TaoSolve_NTR()
370 tao->trust = PetscMax(tao->trust, tr->gamma4 * norm_d); in TaoSolve_NTR()
375 } else if (kappa >= 1.0 - tr->mu2) { in TaoSolve_NTR()
378 if (tau_max < tr->gamma2) { in TaoSolve_NTR()
379 tao->trust = tr->gamma2 * PetscMin(tao->trust, norm_d); in TaoSolve_NTR()
380 } else if (tau_max > tr->gamma3) { in TaoSolve_NTR()
381 tao->trust = PetscMax(tao->trust, tr->gamma3 * norm_d); in TaoSolve_NTR()
391 tao->trust = tr->gamma2 * PetscMin(tao->trust, norm_d); in TaoSolve_NTR()
392 } else if (tau_max < tr->gamma1) { in TaoSolve_NTR()
393 tao->trust = tr->gamma1 * PetscMin(tao->trust, norm_d); in TaoSolve_NTR()
394 } else if ((tau_min < tr->gamma1) && (tau_max >= 1.0)) { in TaoSolve_NTR()
395 tao->trust = tr->gamma1 * PetscMin(tao->trust, norm_d); in TaoSolve_NTR()
396 … } else if ((tau_1 >= tr->gamma1) && (tau_1 < 1.0) && ((tau_2 < tr->gamma1) || (tau_2 >= 1.0))) { in TaoSolve_NTR()
398 … } else if ((tau_2 >= tr->gamma1) && (tau_2 < 1.0) && ((tau_1 < tr->gamma1) || (tau_2 >= 1.0))) { in TaoSolve_NTR()
416 tao->trust = PetscMin(tao->trust, tr->max_radius); in TaoSolve_NTR()
419 PetscCall(VecCopy(tr->W, tao->solution)); in TaoSolve_NTR()
435 TAO_NTR *tr = (TAO_NTR *)tao->data; in TaoSetUp_NTR() local
440 if (!tr->W) PetscCall(VecDuplicate(tao->solution, &tr->W)); in TaoSetUp_NTR()
442 tr->bfgs_pre = NULL; in TaoSetUp_NTR()
443 tr->M = NULL; in TaoSetUp_NTR()
449 TAO_NTR *tr = (TAO_NTR *)tao->data; in TaoDestroy_NTR() local
452 if (tao->setupcalled) PetscCall(VecDestroy(&tr->W)); in TaoDestroy_NTR()
460 TAO_NTR *tr = (TAO_NTR *)tao->data; in TaoSetFromOptions_NTR() local
464 …trust initialization type", "", NTR_INIT, NTR_INIT_TYPES, NTR_INIT[tr->init_type], &tr->init_type,… in TaoSetFromOptions_NTR()
465 …radius update type", "", NTR_UPDATE, NTR_UPDATE_TYPES, NTR_UPDATE[tr->update_type], &tr->update_ty… in TaoSetFromOptions_NTR()
466 …is unsuccessful if actual reduction < eta1 * predicted reduction", "", tr->eta1, &tr->eta1, NULL)); in TaoSetFromOptions_NTR()
467 PetscCall(PetscOptionsReal("-tao_ntr_eta2", "", "", tr->eta2, &tr->eta2, NULL)); in TaoSetFromOptions_NTR()
468 PetscCall(PetscOptionsReal("-tao_ntr_eta3", "", "", tr->eta3, &tr->eta3, NULL)); in TaoSetFromOptions_NTR()
469 PetscCall(PetscOptionsReal("-tao_ntr_eta4", "", "", tr->eta4, &tr->eta4, NULL)); in TaoSetFromOptions_NTR()
470 PetscCall(PetscOptionsReal("-tao_ntr_alpha1", "", "", tr->alpha1, &tr->alpha1, NULL)); in TaoSetFromOptions_NTR()
471 PetscCall(PetscOptionsReal("-tao_ntr_alpha2", "", "", tr->alpha2, &tr->alpha2, NULL)); in TaoSetFromOptions_NTR()
472 PetscCall(PetscOptionsReal("-tao_ntr_alpha3", "", "", tr->alpha3, &tr->alpha3, NULL)); in TaoSetFromOptions_NTR()
473 PetscCall(PetscOptionsReal("-tao_ntr_alpha4", "", "", tr->alpha4, &tr->alpha4, NULL)); in TaoSetFromOptions_NTR()
474 PetscCall(PetscOptionsReal("-tao_ntr_alpha5", "", "", tr->alpha5, &tr->alpha5, NULL)); in TaoSetFromOptions_NTR()
475 PetscCall(PetscOptionsReal("-tao_ntr_mu1", "", "", tr->mu1, &tr->mu1, NULL)); in TaoSetFromOptions_NTR()
476 PetscCall(PetscOptionsReal("-tao_ntr_mu2", "", "", tr->mu2, &tr->mu2, NULL)); in TaoSetFromOptions_NTR()
477 PetscCall(PetscOptionsReal("-tao_ntr_gamma1", "", "", tr->gamma1, &tr->gamma1, NULL)); in TaoSetFromOptions_NTR()
478 PetscCall(PetscOptionsReal("-tao_ntr_gamma2", "", "", tr->gamma2, &tr->gamma2, NULL)); in TaoSetFromOptions_NTR()
479 PetscCall(PetscOptionsReal("-tao_ntr_gamma3", "", "", tr->gamma3, &tr->gamma3, NULL)); in TaoSetFromOptions_NTR()
480 PetscCall(PetscOptionsReal("-tao_ntr_gamma4", "", "", tr->gamma4, &tr->gamma4, NULL)); in TaoSetFromOptions_NTR()
481 PetscCall(PetscOptionsReal("-tao_ntr_theta", "", "", tr->theta, &tr->theta, NULL)); in TaoSetFromOptions_NTR()
482 PetscCall(PetscOptionsReal("-tao_ntr_mu1_i", "", "", tr->mu1_i, &tr->mu1_i, NULL)); in TaoSetFromOptions_NTR()
483 PetscCall(PetscOptionsReal("-tao_ntr_mu2_i", "", "", tr->mu2_i, &tr->mu2_i, NULL)); in TaoSetFromOptions_NTR()
484 PetscCall(PetscOptionsReal("-tao_ntr_gamma1_i", "", "", tr->gamma1_i, &tr->gamma1_i, NULL)); in TaoSetFromOptions_NTR()
485 PetscCall(PetscOptionsReal("-tao_ntr_gamma2_i", "", "", tr->gamma2_i, &tr->gamma2_i, NULL)); in TaoSetFromOptions_NTR()
486 PetscCall(PetscOptionsReal("-tao_ntr_gamma3_i", "", "", tr->gamma3_i, &tr->gamma3_i, NULL)); in TaoSetFromOptions_NTR()
487 PetscCall(PetscOptionsReal("-tao_ntr_gamma4_i", "", "", tr->gamma4_i, &tr->gamma4_i, NULL)); in TaoSetFromOptions_NTR()
488 PetscCall(PetscOptionsReal("-tao_ntr_theta_i", "", "", tr->theta_i, &tr->theta_i, NULL)); in TaoSetFromOptions_NTR()
489 …ntr_min_radius", "lower bound on initial trust-region radius", "", tr->min_radius, &tr->min_radius… in TaoSetFromOptions_NTR()
490 …l("-tao_ntr_max_radius", "upper bound on trust-region radius", "", tr->max_radius, &tr->max_radius… in TaoSetFromOptions_NTR()
491 …"tolerance used when computing actual and predicted reduction", "", tr->epsilon, &tr->epsilon, NUL… in TaoSetFromOptions_NTR()
538 TAO_NTR *tr; in TaoCreate_NTR() local
541 PetscCall(PetscNew(&tr)); in TaoCreate_NTR()
552 tao->data = (void *)tr; in TaoCreate_NTR()
555 tr->eta1 = 1.0e-4; in TaoCreate_NTR()
556 tr->eta2 = 0.25; in TaoCreate_NTR()
557 tr->eta3 = 0.50; in TaoCreate_NTR()
558 tr->eta4 = 0.90; in TaoCreate_NTR()
560 tr->alpha1 = 0.25; in TaoCreate_NTR()
561 tr->alpha2 = 0.50; in TaoCreate_NTR()
562 tr->alpha3 = 1.00; in TaoCreate_NTR()
563 tr->alpha4 = 2.00; in TaoCreate_NTR()
564 tr->alpha5 = 4.00; in TaoCreate_NTR()
567 tr->mu1 = 0.10; in TaoCreate_NTR()
568 tr->mu2 = 0.50; in TaoCreate_NTR()
570 tr->gamma1 = 0.25; in TaoCreate_NTR()
571 tr->gamma2 = 0.50; in TaoCreate_NTR()
572 tr->gamma3 = 2.00; in TaoCreate_NTR()
573 tr->gamma4 = 4.00; in TaoCreate_NTR()
575 tr->theta = 0.05; in TaoCreate_NTR()
578 tr->mu1_i = 0.35; in TaoCreate_NTR()
579 tr->mu2_i = 0.50; in TaoCreate_NTR()
581 tr->gamma1_i = 0.0625; in TaoCreate_NTR()
582 tr->gamma2_i = 0.50; in TaoCreate_NTR()
583 tr->gamma3_i = 2.00; in TaoCreate_NTR()
584 tr->gamma4_i = 5.00; in TaoCreate_NTR()
586 tr->theta_i = 0.25; in TaoCreate_NTR()
588 tr->min_radius = 1.0e-10; in TaoCreate_NTR()
589 tr->max_radius = 1.0e10; in TaoCreate_NTR()
590 tr->epsilon = 1.0e-6; in TaoCreate_NTR()
592 tr->init_type = NTR_INIT_INTERPOLATION; in TaoCreate_NTR()
593 tr->update_type = NTR_UPDATE_REDUCTION; in TaoCreate_NTR()