diff --git a/experiments/KRYLOV_WINDOW_HYPOTHESIS_2026-09-16.md b/experiments/KRYLOV_WINDOW_HYPOTHESIS_2026-09-16.md new file mode 100644 index 0000000..e82bcdb --- /dev/null +++ b/experiments/KRYLOV_WINDOW_HYPOTHESIS_2026-09-16.md @@ -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. diff --git a/sandbox.cpp b/sandbox.cpp index 437ec51..7844273 100644 --- a/sandbox.cpp +++ b/sandbox.cpp @@ -122,7 +122,7 @@ int main( ); 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(); // This density initializes the seed; the n=1 equilibrium is free to change it. auto context = solver::makeContext(