Use the validated wider Krylov window in the stellar example
This commit is contained in:
39
experiments/KRYLOV_WINDOW_HYPOTHESIS_2026-09-16.md
Normal file
39
experiments/KRYLOV_WINDOW_HYPOTHESIS_2026-09-16.md
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
# Larger Krylov window
|
||||||
|
|
||||||
|
This branch changes only the sandbox example's existing FGMRES restart setting
|
||||||
|
from 40 to 160. It adds no public API and does not change the general backend
|
||||||
|
default. The warm-start safeguard is a separate hypothesis and branch.
|
||||||
|
|
||||||
|
## Matched evidence
|
||||||
|
|
||||||
|
The common diagnostic executable at commit `9bd4af6` ran n=1, K=2/pi, M=1,
|
||||||
|
J=0.05, with no central-density constraint, on the unchanged `sandbox.smesh`.
|
||||||
|
Both runs used nonlinear rtol=1e-8, atol=0, linear tolerance=0.03, and at most
|
||||||
|
200 linear iterations. Only the restart window differed.
|
||||||
|
|
||||||
|
| Result | Restart 40 | Restart 160 |
|
||||||
|
| --- | ---: | ---: |
|
||||||
|
| Accepted full Newton steps | 5 | 7 |
|
||||||
|
| Final normalized residual | 6.03609e-9 | 3.38036e-11 |
|
||||||
|
| Strict convergence | No: sixth linear solve fails | Yes |
|
||||||
|
| Total linear iterations, including failed attempt | 370 | 292 |
|
||||||
|
| Largest final virial error among four definitions, q=14/18 | 3.73183e-7 | 3.73466e-7 |
|
||||||
|
|
||||||
|
The first four steps coincide exactly. The larger window first changes the
|
||||||
|
fifth linear solve. This is live nonlinear evidence, supplemented by the earlier
|
||||||
|
frozen-system comparisons. Single wall-time samples (291 versus 272 seconds,
|
||||||
|
including physical diagnostics) do not establish a general speedup.
|
||||||
|
|
||||||
|
## Limits and validation
|
||||||
|
|
||||||
|
The larger window requires more Krylov storage. It is a useful example setting,
|
||||||
|
not a universal default: n=1.5 without the central constraint still stalls with
|
||||||
|
this window, and eventually fails a linear gate. The n=3 frozen control also
|
||||||
|
needs a stronger numerical treatment. This change does not establish a fraction
|
||||||
|
of critical rotation and does not alter the convergence or virial tolerances.
|
||||||
|
|
||||||
|
Removing the n=1 example's central-density constraint is independently supported
|
||||||
|
on `research/central-constraint-20260916`; combine the two changes for the intended
|
||||||
|
example. Compilation and a nonrotating run of the combined example are pending.
|
||||||
|
Raw results and exact build/mesh/executable provenance are retained in the
|
||||||
|
workspace's `diagnostics/numerical_campaign_2026-09-16/controls` directory.
|
||||||
@@ -122,7 +122,7 @@ int main(
|
|||||||
);
|
);
|
||||||
|
|
||||||
auto preconditioner = preconditioning::makePreconditioner();
|
auto preconditioner = preconditioning::makePreconditioner();
|
||||||
auto linearSolver = solver::linear::FGMRES({.restartLength = 40, .printLevel = 1});
|
auto linearSolver = solver::linear::FGMRES({.restartLength = 160, .printLevel = 1});
|
||||||
const auto contextStart = std::chrono::steady_clock::now();
|
const auto contextStart = std::chrono::steady_clock::now();
|
||||||
// This density initializes the seed; the n=1 equilibrium is free to change it.
|
// This density initializes the seed; the n=1 equilibrium is free to change it.
|
||||||
auto context = solver::makeContext(
|
auto context = solver::makeContext(
|
||||||
|
|||||||
Reference in New Issue
Block a user