Use the validated wider Krylov window in the stellar example

This commit is contained in:
2026-09-16 15:04:21 -04:00
parent 4ec1db230f
commit 5f83bcba74
2 changed files with 40 additions and 1 deletions

View 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.

View File

@@ -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(