Lines Matching refs:kctx

385   SNESKSPEW     *kctx;  in SNESView()  local
433 kctx = (SNESKSPEW *)snes->kspconvctx; in SNESView()
434 if (kctx) { in SNESView()
435 …nstat-Walker computation of KSP relative tolerance (version %" PetscInt_FMT ")\n", kctx->version)); in SNESView()
436 … rtol_0=%g, rtol_max=%g, threshold=%g\n", (double)kctx->rtol_0, (double)kctx->rtol_max, (double)k… in SNESView()
437 …ewer, " gamma=%g, alpha=%g, alpha2=%g\n", (double)kctx->gamma, (double)kctx->alpha, (double)kct… in SNESView()
874 PetscErrorCode SNESEWSetFromOptions_Private(SNESKSPEW *kctx, PetscBool print_api, MPI_Comm comm, co… in SNESEWSetFromOptions_Private() argument
880 …PetscCall(PetscOptionsInt("-ksp_ew_version", "Version 1, 2 or 3", api, kctx->version, &kctx->versi… in SNESEWSetFromOptions_Private()
881 …PetscCall(PetscOptionsReal("-ksp_ew_rtol0", "0 <= rtol0 < 1", api, kctx->rtol_0, &kctx->rtol_0, NU… in SNESEWSetFromOptions_Private()
882 kctx->rtol_max = PetscMax(kctx->rtol_0, kctx->rtol_max); in SNESEWSetFromOptions_Private()
883 …PetscCall(PetscOptionsReal("-ksp_ew_rtolmax", "0 <= rtolmax < 1", api, kctx->rtol_max, &kctx->rtol… in SNESEWSetFromOptions_Private()
884 …PetscCall(PetscOptionsReal("-ksp_ew_gamma", "0 <= gamma <= 1", api, kctx->gamma, &kctx->gamma, NUL… in SNESEWSetFromOptions_Private()
885 …PetscCall(PetscOptionsReal("-ksp_ew_alpha", "1 < alpha <= 2", api, kctx->alpha, &kctx->alpha, NULL… in SNESEWSetFromOptions_Private()
886 PetscCall(PetscOptionsReal("-ksp_ew_alpha2", "alpha2", NULL, kctx->alpha2, &kctx->alpha2, NULL)); in SNESEWSetFromOptions_Private()
887 …PetscCall(PetscOptionsReal("-ksp_ew_threshold", "0 < threshold < 1", api, kctx->threshold, &kctx->… in SNESEWSetFromOptions_Private()
888 PetscCall(PetscOptionsReal("-ksp_ew_v4_p1", "p1", NULL, kctx->v4_p1, &kctx->v4_p1, NULL)); in SNESEWSetFromOptions_Private()
889 PetscCall(PetscOptionsReal("-ksp_ew_v4_p2", "p2", NULL, kctx->v4_p2, &kctx->v4_p2, NULL)); in SNESEWSetFromOptions_Private()
890 PetscCall(PetscOptionsReal("-ksp_ew_v4_p3", "p3", NULL, kctx->v4_p3, &kctx->v4_p3, NULL)); in SNESEWSetFromOptions_Private()
891 …OptionsReal("-ksp_ew_v4_m1", "Scaling when rk-1 in [p2,p3)", NULL, kctx->v4_m1, &kctx->v4_m1, NULL… in SNESEWSetFromOptions_Private()
892 …onsReal("-ksp_ew_v4_m2", "Scaling when rk-1 in [p3,+infty)", NULL, kctx->v4_m2, &kctx->v4_m2, NULL… in SNESEWSetFromOptions_Private()
893 …sp_ew_v4_m3", "Threshold for successive rtol (0.1 in Eq.7)", NULL, kctx->v4_m3, &kctx->v4_m3, NULL… in SNESEWSetFromOptions_Private()
894 …onsReal("-ksp_ew_v4_m4", "Adaptation scaling (0.5 in Eq.7)", NULL, kctx->v4_m4, &kctx->v4_m4, NULL… in SNESEWSetFromOptions_Private()
965 SNESKSPEW *kctx = NULL; in SNESSetFromOptions() local
1047 kctx = (SNESKSPEW *)snes->kspconvctx; in SNESSetFromOptions()
1053 …PetscCall(SNESEWSetFromOptions_Private(kctx, PETSC_TRUE, PetscObjectComm((PetscObject)snes), ewpre… in SNESSetFromOptions()
1836 SNESKSPEW *kctx; in SNESCreate() local
1897 PetscCall(PetscNew(&kctx)); in SNESCreate()
1899 snes->kspconvctx = kctx; in SNESCreate()
1900 kctx->version = 2; in SNESCreate()
1901 kctx->rtol_0 = 0.3; /* Eisenstat and Walker suggest rtol_0=.5, but in SNESCreate()
1903 kctx->rtol_last = 0.0; in SNESCreate()
1904 kctx->rtol_max = 0.9; in SNESCreate()
1905 kctx->gamma = 1.0; in SNESCreate()
1906 kctx->alpha = 0.5 * (1.0 + PetscSqrtReal(5.0)); in SNESCreate()
1907 kctx->alpha2 = kctx->alpha; in SNESCreate()
1908 kctx->threshold = 0.1; in SNESCreate()
1909 kctx->lresid_last = 0.0; in SNESCreate()
1910 kctx->norm_last = 0.0; in SNESCreate()
1912 kctx->rk_last = 0.0; in SNESCreate()
1913 kctx->rk_last_2 = 0.0; in SNESCreate()
1914 kctx->rtol_last_2 = 0.0; in SNESCreate()
1915 kctx->v4_p1 = 0.1; in SNESCreate()
1916 kctx->v4_p2 = 0.4; in SNESCreate()
1917 kctx->v4_p3 = 0.7; in SNESCreate()
1918 kctx->v4_m1 = 0.8; in SNESCreate()
1919 kctx->v4_m2 = 0.5; in SNESCreate()
1920 kctx->v4_m3 = 0.1; in SNESCreate()
1921 kctx->v4_m4 = 0.5; in SNESCreate()
5493 SNESKSPEW *kctx; in SNESKSPSetParametersEW() local
5497 kctx = (SNESKSPEW *)snes->kspconvctx; in SNESKSPSetParametersEW()
5498 …PetscCheck(kctx, PETSC_COMM_SELF, PETSC_ERR_ARG_WRONGSTATE, "No Eisenstat-Walker context existing"… in SNESKSPSetParametersEW()
5507 if (version != PETSC_CURRENT) kctx->version = version; in SNESKSPSetParametersEW()
5508 if (rtol_0 != (PetscReal)PETSC_CURRENT) kctx->rtol_0 = rtol_0; in SNESKSPSetParametersEW()
5509 if (rtol_max != (PetscReal)PETSC_CURRENT) kctx->rtol_max = rtol_max; in SNESKSPSetParametersEW()
5510 if (gamma != (PetscReal)PETSC_CURRENT) kctx->gamma = gamma; in SNESKSPSetParametersEW()
5511 if (alpha != (PetscReal)PETSC_CURRENT) kctx->alpha = alpha; in SNESKSPSetParametersEW()
5512 if (alpha2 != (PetscReal)PETSC_CURRENT) kctx->alpha2 = alpha2; in SNESKSPSetParametersEW()
5513 if (threshold != (PetscReal)PETSC_CURRENT) kctx->threshold = threshold; in SNESKSPSetParametersEW()
5515 …heck(kctx->version >= 1 && kctx->version <= 4, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Only ve… in SNESKSPSetParametersEW()
5516 …PetscCheck(kctx->rtol_0 >= 0.0 && kctx->rtol_0 < 1.0, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "… in SNESKSPSetParametersEW()
5517 …etscCheck(kctx->rtol_max >= 0.0 && kctx->rtol_max < 1.0, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE… in SNESKSPSetParametersEW()
5518 …PetscCheck(kctx->gamma >= 0.0 && kctx->gamma <= 1.0, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "0… in SNESKSPSetParametersEW()
5519 …PetscCheck(kctx->alpha > 1.0 && kctx->alpha <= 2.0, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "1.… in SNESKSPSetParametersEW()
5520 …etscCheck(kctx->threshold > 0.0 && kctx->threshold < 1.0, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANG… in SNESKSPSetParametersEW()
5549 SNESKSPEW *kctx; in SNESKSPGetParametersEW() local
5553 kctx = (SNESKSPEW *)snes->kspconvctx; in SNESKSPGetParametersEW()
5554 …PetscCheck(kctx, PETSC_COMM_SELF, PETSC_ERR_ARG_WRONGSTATE, "No Eisenstat-Walker context existing"… in SNESKSPGetParametersEW()
5555 if (version) *version = kctx->version; in SNESKSPGetParametersEW()
5556 if (rtol_0) *rtol_0 = kctx->rtol_0; in SNESKSPGetParametersEW()
5557 if (rtol_max) *rtol_max = kctx->rtol_max; in SNESKSPGetParametersEW()
5558 if (gamma) *gamma = kctx->gamma; in SNESKSPGetParametersEW()
5559 if (alpha) *alpha = kctx->alpha; in SNESKSPGetParametersEW()
5560 if (alpha2) *alpha2 = kctx->alpha2; in SNESKSPGetParametersEW()
5561 if (threshold) *threshold = kctx->threshold; in SNESKSPGetParametersEW()
5568 SNESKSPEW *kctx = (SNESKSPEW *)snes->kspconvctx; in KSPPreSolve_SNESEW() local
5574 rtol = kctx->rtol_0; /* first time in, so use the original user rtol */ in KSPPreSolve_SNESEW()
5575 PetscCall(VecNorm(snes->vec_func, NORM_2, &kctx->norm_first)); in KSPPreSolve_SNESEW()
5577 …Check(kctx->version >= 1 && kctx->version <= 4, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Only v… in KSPPreSolve_SNESEW()
5578 if (kctx->version == 1) { in KSPPreSolve_SNESEW()
5579 rtol = PetscAbsReal(snes->norm - kctx->lresid_last) / kctx->norm_last; in KSPPreSolve_SNESEW()
5580 stol = PetscPowReal(kctx->rtol_last, kctx->alpha2); in KSPPreSolve_SNESEW()
5581 if (stol > kctx->threshold) rtol = PetscMax(rtol, stol); in KSPPreSolve_SNESEW()
5582 } else if (kctx->version == 2) { in KSPPreSolve_SNESEW()
5583 rtol = kctx->gamma * PetscPowReal(snes->norm / kctx->norm_last, kctx->alpha); in KSPPreSolve_SNESEW()
5584 stol = kctx->gamma * PetscPowReal(kctx->rtol_last, kctx->alpha); in KSPPreSolve_SNESEW()
5585 if (stol > kctx->threshold) rtol = PetscMax(rtol, stol); in KSPPreSolve_SNESEW()
5586 } else if (kctx->version == 3) { /* contributed by Luis Chacon, June 2006. */ in KSPPreSolve_SNESEW()
5587 rtol = kctx->gamma * PetscPowReal(snes->norm / kctx->norm_last, kctx->alpha); in KSPPreSolve_SNESEW()
5589 stol = kctx->gamma * PetscPowReal(kctx->rtol_last, kctx->alpha); in KSPPreSolve_SNESEW()
5591 rtol = PetscMin(kctx->rtol_0, stol); in KSPPreSolve_SNESEW()
5593 stol = kctx->gamma * (kctx->norm_first * snes->rtol) / snes->norm; in KSPPreSolve_SNESEW()
5595 rtol = PetscMin(kctx->rtol_0, stol); in KSPPreSolve_SNESEW()
5598 PetscReal ared = PetscAbsReal(kctx->norm_last - snes->norm); in KSPPreSolve_SNESEW()
5599 PetscReal pred = PetscAbsReal(kctx->norm_last - kctx->lresid_last); in KSPPreSolve_SNESEW()
5601 if (rk < kctx->v4_p1) rtol = 1. - 2. * kctx->v4_p1; in KSPPreSolve_SNESEW()
5602 else if (rk < kctx->v4_p2) rtol = kctx->rtol_last; in KSPPreSolve_SNESEW()
5603 else if (rk < kctx->v4_p3) rtol = kctx->v4_m1 * kctx->rtol_last; in KSPPreSolve_SNESEW()
5604 else rtol = kctx->v4_m2 * kctx->rtol_last; in KSPPreSolve_SNESEW()
5606kctx->rtol_last_2 > kctx->v4_m3 && kctx->rtol_last > kctx->v4_m3 && kctx->rk_last_2 < kctx->v4_p1 … in KSPPreSolve_SNESEW()
5607 kctx->rtol_last_2 = kctx->rtol_last; in KSPPreSolve_SNESEW()
5608 kctx->rk_last_2 = kctx->rk_last; in KSPPreSolve_SNESEW()
5609 kctx->rk_last = rk; in KSPPreSolve_SNESEW()
5613 rtol = PetscMin(rtol, kctx->rtol_max); in KSPPreSolve_SNESEW()
5615 … Eisenstat-Walker (version %" PetscInt_FMT ") KSP rtol=%g\n", snes->iter, kctx->version, (double)r… in KSPPreSolve_SNESEW()
5622 SNESKSPEW *kctx = (SNESKSPEW *)snes->kspconvctx; in KSPPostSolve_SNESEW() local
5628 PetscCall(KSPGetTolerances(ksp, &kctx->rtol_last, NULL, NULL, NULL)); in KSPPostSolve_SNESEW()
5629 kctx->norm_last = snes->norm; in KSPPostSolve_SNESEW()
5630 if (kctx->version == 1 || kctx->version == 4) { in KSPPostSolve_SNESEW()
5644 PetscCall(KSPGetResidualNorm(ksp, &kctx->lresid_last)); in KSPPostSolve_SNESEW()
5653 PetscCall(VecNorm(lres, NORM_2, &kctx->lresid_last)); in KSPPostSolve_SNESEW()