20 KiB
Targeted numerical campaign — September 16, 2026
This campaign tests separate explanations for the Newton plateau while keeping
the public model API unchanged. The original optimized source is preserved in
research/baseline-20260916 at 80cc3d8; main is unchanged. Hypothesis branches
and complete numerical artifacts are retained, including unsuccessful changes.
Decisions
| Hypothesis | Current decision | Evidence |
|---|---|---|
| The extra central constraint distorts n=1's local equilibrium | Retain the example correction | Removing it reduces peak EOS error about 22-fold while preserving virial balance |
| Restart 40 loses useful Krylov information | Retain restart 160 in the example | The matched n=1 rotating model reaches strict convergence; restart 40 fails its late linear gate |
| One-way material-to-gravity completion is enough | Do not promote | Both windows still fail at n=3; correction grows and admissibility worsens |
| Rejecting a harmful reused initial guess helps | Retain as limited linear-solver robustness | All eight n=1.5 linear gates pass; the nonlinear plateau remains |
Normalization, the nonlinear stopping tolerances, and the default production preconditioner have not been changed. The general FGMRES default remains intact; the example selects its existing restart option. No new physics-facing options or automatic n-dependent central constraint are introduced.
Physical model and comparable controls
All runs use the same 1216-element sandbox.smesh and the release build's
unchanged FEM spaces. Mesh SHA-256 is
ce11ae99e21e6c3bbfbee402acd2e191c1da0d8261d2227b4203f73f2f337a74.
The diagnostic chooses a Lane–Emden reference with M=R=G=1 and derives K and
the seed density for each index. Its n=1 model has K=2/pi and seed density pi/4.
At n=1 and n=1.5 the new controls omit the central constraint; n=3 retains it.
That is an experiment choice, not an automatically imposed library policy.
Controls use nonlinear relative tolerance 1e-8, zero absolute tolerance, linear relative tolerance 0.03, and a 200-iteration linear cap. A small virial error and successful algebraic stopping are recorded separately. J=0.05 or the resulting angular velocity is not a measured fraction of critical rotation.
The common diagnostic revision is 9bd4af6. The later shared-tools revision
0470e3b adds a result checker, source-relative input hashing, and hashes for
saved output states/metadata. It does not alter the stellar solve.
Removing the n=1 central constraint
The matched J=0.05, restart-40 controls isolate this model change. The initial physical measurements agree exactly, and their first five accepted step lengths and linear iteration counts are identical. Both then fail the sixth linear gate at essentially the same true relative defect, about 0.505.
| Final measurement, quadrature 18 | Central constraint | No central constraint |
|---|---|---|
| Peak absolute EOS density mismatch | 7.30451e-3 | 3.32568e-4 |
| Peak EOS mismatch / sampled density scale | 9.33951e-3 | 4.30594e-4 |
| Bernoulli sampled range | 1.45751e-2 | 1.30398e-3 |
| Residual with artificial border source removed | 4.54227e-6 | 6.03609e-9 |
| P(h) energy virial error | 3.01617e-7 | 3.06913e-7 |
Mass, J, and angular velocity are essentially unchanged. The formerly fixed central enthalpy coefficient falls from 1 to 0.983383508. The peak and range improvements are localized: volume RMS errors barely change. Quadrature 14 independently shows the same trend. These sampled extrema are not certified pointwise bounds.
The example now supplies density through the existing Lane–Emden seed policy instead of constraining the final n=1 model. The added context regression checks that explicit seeding works without a central constraint. For n=3 the constraint remains optional; omission is not promised to overcome homology.
Larger Krylov window: live n=1 success
At J=0.05, changing only restart 40 to 160 gives:
| Quantity | Restart 40 | Restart 160 |
|---|---|---|
| Accepted Newton steps | 5, all full | 7, all full |
| Final normalized residual | 6.03609e-9 | 3.38036e-11 |
| Strict configured convergence | No | Yes |
| Total linear iterations, including failed attempts | 370 | 292 |
| End-to-end seconds, including diagnostics | 290.80 | 271.95 |
The first four accepted steps coincide exactly. The fifth solve first crosses the smaller restart boundary. The final strict threshold is about 2.15e-10. These are single timing observations, not a general speedup benchmark. A larger Krylov window also requires more storage.
All four final virial definitions, at both quadrature orders, are below 3.735e-7. The P(h) energy result at q18 is 3.07200e-7. Mass and J errors are 1.75e-13 and 1.54e-14. No sampled density or enthalpy is negative. Local EOS and Bernoulli errors remain essentially those of the improved unphased model.
The center-of-mass offset falls from 7.66e-6 to 2.69e-8 during the final corrections, after virial and local EOS metrics have mostly stabilized. This motivates examining weak position-related directions; it does not identify a specific null mode or establish a need for an additional gauge.
Higher index: the larger window is not sufficient
For n=1.5, J=0, no central constraint, restart 160, seven linear solves meet their true-residual tolerance. Nonetheless, Newton step lengths shrink to 1/2048 and F remains 1.75135e-4. The eighth linear solve fails at relative defect 0.07910. The first severe damping occurs with a zero initial guess, before a reused correction can explain the difficulty. Later reused guesses start with defects about 1.5–2.0 times the RHS norm.
Recorded rejected trials fail the merit test; their geometry remains valid. Smaller reported starting-step caps include line-search history and must not be mistaken for geometric admissibility limits. Gravity-gradient and Poisson rows hold about 99.69% of the squared normalized endpoint residual. Those rows include both interior and exterior contributions, so this does not locate the physically important interior error.
P(h) energy/force virials pass at approximately 2.23e-6/2.33e-6, but Bernoulli and hydrostatic consistency worsen. P(rho) is undefined at some samples because of small negative DG density values; negative mass fraction is about 2.89e-5. The corresponding pressure sensitivity budget is about 3.76e-7 in virial units. This endpoint is not classified as a validated equilibrium.
Rejected one-way gravity completion
The tested candidate 8c1f823 changes only the structure factorization to
material-then-gravity triangular completion. It retains exactly the default
material component, Chebyshev order 5 gravity mass inverse and three-cycle
AMG potential inverse. It includes density and shape couplings and rebuilds
the scalar border. Its baseline is 9bd4af6.
Both runs reconstruct the identical n=3 constrained seed. Snapshot, layout, initial physical measurements, and frozen RHS block norms agree exactly. Both cold Krylov windows are measured; each policy's restart-160 correction is then tested without committing any nonlinear step.
| Frozen result | Baseline | Candidate |
|---|---|---|
| Restart-40 true residual / RHS, 200 iterations | 0.0563080 | 0.0715826 |
| Restart-160 true residual / RHS, 200 iterations | 0.0402590 | 0.0381781 |
| Restart-160 solve seconds | 98.92 | 117.71 |
| Selected normalized correction norm | 0.75764 | 1.54083 |
| Sampled thermodynamic step bound | 0.15244 | 0.09135 |
Neither clears the 0.03 linear gate. The candidate's alpha=0.1 trial is inadmissible; the baseline's is admissible and lowers F by 3.40%. The candidate's best sampled admissible trial, alpha=0.01, lowers F by about 1.01%. The unchanged seed virial is not evidence about the uncommitted trial states.
Completion contracts the central-border column's Poisson defect about 4.8-fold but worsens the Bernoulli column's Poisson defect. Those columns have zero shape component, so this mixed response already occurs for density-source completion. The experiment does not rule out better gravity subsolves or two-way material/gravity feedback.
There is also direct evidence of a weak normalized direction. Baseline restart-40 and restart-160 corrections have cosine -0.985 despite the same state and Jacobian. If e_i=Jp_i+F, then J(p_2-p_1)=e_2-e_1, giving a response bound ||J(p_2-p_1)||/||p_2-p_1|| <= 2.77e-4. The candidate adds still more amplitude in essentially the restart-160 direction. This is not a measured singular value or an identification of homology, translation, or surface error.
Warm-start safeguard
The tested source is 1911a26. The guard checks
the current true defect of a nonzero supplied correction and falls back to
zero only if that defect norm is nonfinite or exceeds ||b||. The unchanged
input contract still rejects nonfinite coefficients in the supplied guess.
It retains finite supplied guesses whose current defect is no larger than that
of a zero guess and leaves the damped-Newton history policy in place. A smaller
initial defect does not guarantee faster subsequent Krylov convergence.
It adds no public options. A nonzero guess costs one extra measured operator
action; zero guesses do not.
Five focused tests pass on one rank (356284 assertions). The two pure-backend tests also pass on two MPI ranks (41 assertions on each rank), including a bad guess or overflow confined to one rank. These results establish behavior of the safeguard. The matched n=1 run then reproduces the control byte-for-byte: accepted state, physical CSVs, trial records and all non-timing Newton columns. Its eight virial checks pass, and it reaches the identical strict convergence.
At the first shared n=1.5 damped state, the guard changes the effective initial defect/RHS from 1.5097 to 1 and reduces linear iterations from 71 to 65. The same alpha=1/64 is accepted, with a slightly smaller nonlinear residual. Later comparisons follow different trajectories and are not same-matrix comparisons.
| n=1.5 capped-run result | Control | Guard |
|---|---|---|
| Successful linear solves | 7, then an eighth failure | All 8 |
| Total linear iterations | 672 | 561 |
| Iterations in first seven attempts | 472 | 467 |
| Final normalized residual | 1.75135e-4 | 1.74946e-4 |
| Final accepted step | 1/2048 | 1/8192 |
| End-to-end seconds | 550.36 | 508.16 |
Most of the total iteration reduction comes from avoiding the final 200-step failure. The guard reaches the nonlinear iteration cap instead. Its residual is only 0.108% lower, so this is not a nonlinear-plateau cure or a claim of mesh-independent solver performance. The timings are single observations.
P(h) energy/force virials remain near 2.24e-6/2.35e-6, changing only about 9.0e-9/2.0e-8. EOS and Bernoulli errors improve slightly and the negative-density budget barely changes. The conservative solver-plus-eight-check screen remains unsatisfied: strict convergence is absent and P(rho) cannot be evaluated. P(h) meets the primary virial milestone; this does not validate the local solution. The center-of-mass offset increases from 1.67e-6 to 4.57e-6, so it would be incorrect to claim that all physical metrics are unchanged. Both endpoints remain unconverged. These limits motivate retaining the guard as a modest improvement to the inner solver while pursuing the operator/weak-direction work.
Validation and reproducibility
experiments/run_plateau_campaign.py builds a committed source revision and
retains exact case commands, build settings, mesh and binary hashes, an
immutable executable, snapshots, CSV diagnostics, and observed exit codes.
Cases run serially. A campaign exit of zero means observations completed;
a model exit of three remains recorded as nonconvergence. Timing samples are
not repeated benchmarks, and dynamically loaded dependencies are not frozen.
experiments/check_plateau_physics.py RESULT_FOLDER gates strict recorded
convergence and all eight defined, finite virial errors at 1e-5: energy/force,
P(h)/P(rho), and quadrature 14/18. This conservative joint screen is stricter
than the primary physical milestone. In particular, the undefined P(rho) at
n=1.5 does not by itself prove physical virial failure; the defined P(h)
virials pass. The checker separately reports sign, conservation,
EOS, and Bernoulli measurements. It does not certify pointwise correctness or
assign arbitrary local-error tolerances. The checker distinguishes the
converged n=1 case, the n=1 algebraic failure despite good virials, undefined
P(rho) at n=1.5, and the failing n=3 seed virial.
The combined source at b3a752b builds the sandbox, tests and diagnostic.
Three context/root tests pass (61 assertions): explicit seeding without a
central constraint, the generated angular-velocity/composable border, and
propagation of that angular velocity into physical rows. Together with the
five safeguard/Newton tests this is eight distinct focused C++ tests, with
two backend tests additionally repeated on two MPI ranks. It is not a rerun
of the entire historical suite. Later combined commits change documentation
and case manifests only; the final live campaign records c88baa1.
Final combined physical checks
The combined executable has the same SHA-256 as the guarded executable. The nonrotating n=1 case is the physical counterpart of the sandbox model, using the diagnostic stopping controls. It converges in six full Newton steps, with F=1.65157e-13 and 307 total linear iterations. Its worst virial error among all eight checks is 3.73092e-7; the largest q14/q18 change is 1.29e-13. At q18 the absolute mass error is 8.88e-15, J error is zero, and no negative density or enthalpy is sampled.
Local consistency errors remain: peak/RMS EOS mismatch divided by sampled density scale is 4.23549e-4/8.56537e-5, Bernoulli RMS is 1.13917e-4, and hydrostatic gradient RMS is 5.48097e-3. These are measurements, not newly invented acceptance tolerances. The literal sandbox executable was compiled; its physical counterpart was run through the diagnostic for these measurements.
The J=0.1 transfer case doubles the previous target angular momentum and allows 12 Newton attempts, while retaining the numerical implementation and tolerances. It is a physical transfer test, not a one-variable solver-policy comparison. It does not converge: all 12 linear solves pass (507 total iterations), but F plateaus at 6.25389278e-3 and the last accepted step is 4.76837e-7. The process stops at its nonlinear iteration cap. Its 527.62 seconds include diagnostics; summed Newton-attempt time is 462.33 seconds.
This endpoint also fails the primary virial milestone. At q18, the P(h) energy and force virial errors are 4.75186e-4 and 8.18118e-4; q14 agrees to within 4.54e-14. Absolute mass and J errors are 6.42266e-4 and 2.13748e-4. Actual angular velocity is 0.3431369602 in reference units, not a critical-rotation fraction. P(rho) is undefined at negative-density samples; the negative mass fraction is 1.07284e-5. Peak/RMS scaled EOS mismatch is 1.02932e-2/5.75843e-4, and raw Bernoulli RMS is 9.92365e-4. This is an unresolved failed model.
All 30 rejected trials fail pressure-force preparation before residual measurement, unlike the merit-only n=1.5 plateau. The final sampled minimum enthalpy is 1.82998e-10, with no sampled negative enthalpy; the minimum sampled mapping determinant is 0.870965. Finite negative enthalpy is the leading inference for rejected trials: pressure preparation explicitly rejects h<0, and geometry preflight includes the pressure quadrature rules. However, the recorded rejection also permits a nonpositive determinant/mapped-weight cause, and the CSV omits the exact rejection code. An accepted state's sampled minima do not certify its rejected trials. The present evidence supports locating an admissibility obstruction, not declaring its exact sample or cause established. Later supplied guesses are retained with defect/RHS near 0.03, so discarding bad warm starts does not address this final obstruction.
Retained Git history
The original checkout is left on research/combined-20260916, with the adopted
changes committed. The starting optimized source is committed on the baseline
branch; historical untracked caches and data are preserved. Separate hypothesis
branches remain available for inspection or reruns.
| Branch | Recorded revision / purpose |
|---|---|
research/baseline-20260916 |
80cc3d8: preserved incoming source |
research/experiment-harness-20260916 |
9bd4af6: common driver; 0470e3b: checker; 899cb18: screening clarification |
research/central-constraint-20260916 |
5167744: hypothesis evidence; 2e19c2c: combined validation notes |
research/krylov-window-20260916 |
937d2f2: example restart 160; 1f9184b: combined validation notes |
research/gravity-coupling-20260916 |
tested 8c1f823, outcome db0ddd3: rejected completion retained here |
research/krylov-20260916 |
tested 1911a26, outcome 7127383: guarded warm guesses |
research/combined-20260916 |
C++ build/context tests b3a752b, final live cases c88baa1 |
Next discriminating work
- At a frozen stalled state, split a correction into shape-only and remaining field components. Measure full, pure-shape, pure-field and mixed Taylor remainders at common admissible step lengths. Fixed-shape gravity is affine in the fields, so its field-only remainder should be at roundoff.
- Characterize the weak correction differences with physical moments and controlled symmetry/shape tangents before adding a gauge or regularization.
- Separate interior, exterior, and interface gravity error. Exterior accuracy matters through its effect on the interior; current aggregate block norms cannot establish where the plateau lives.
- For the stronger-rotation pressure-preparation failures, record the specific rejection reason and offending enthalpy/mapping sample. Geometry preflight already includes pressure quadrature; negative h is the leading inference, but the existing CSV cannot exclude a mapping/preflight discrepancy. Locate the obstruction before selecting a positivity or surface treatment.
- If residual normalization is changed, first rescore identical physical trial states. This separates a changed merit from a changed Newton correction.
High-rotation continuation and a measured critical-rotation fraction remain future validation work. These results do not establish the 50% or 99% targets.
Artifact index
The complete campaign is retained at
/Users/tboudreaux/.codex/.chatgpt-projects/g-p-6a6b3f2194ec8191bebcd59075897f1d/diagnostics/numerical_campaign_2026-09-16.
Each of controls, baseline_n3, gravity, guard, and combined contains its copied
case manifest, source/build provenance, executable, run records and diagnostics.
Use its retained cases.json with run_plateau_campaign.py at the recorded
source revision and a new output directory to repeat the observation. The
runner invocation and build requirements are in plateau_diagnostic_README.md.