From b3a752b16b781d735c24ee57d37dab615e06e639 Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Wed, 16 Sep 2026 15:43:38 -0400 Subject: [PATCH] Record controlled numerical outcomes and remaining operator questions --- experiments/NUMERICAL_CAMPAIGN_2026-09-16.md | 251 +++++++++++++++++++ 1 file changed, 251 insertions(+) create mode 100644 experiments/NUMERICAL_CAMPAIGN_2026-09-16.md diff --git a/experiments/NUMERICAL_CAMPAIGN_2026-09-16.md b/experiments/NUMERICAL_CAMPAIGN_2026-09-16.md new file mode 100644 index 0000000..33352fa --- /dev/null +++ b/experiments/NUMERICAL_CAMPAIGN_2026-09-16.md @@ -0,0 +1,251 @@ +# 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 exceeds ||b|| or the operator action is nonfinite. +It preserves useful guesses and the existing damped-Newton history policy. +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. P(rho) remains undefined and the validation gate correctly +fails. 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. It 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. + +Combined-example compilation, context tests, and its nonrotating physical +control are pending. This campaign uses focused tests, not a rerun of the +entire historical suite. + +## Next discriminating work + +1. 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. +2. Characterize the weak correction differences with physical moments and + controlled symmetry/shape tangents before adding a gauge or regularization. +3. 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. +4. 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`, and `guard` 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`. + +- [Detailed controls]() +- [Gravity-coupling comparison]() +- [Gravity-coupling interpretation]() +- [Warm-start comparison]() +- [Focused safeguard test manifest]()