Repository navigation
InnerLayer.GGJ - BUGFIX - Accept profile-only options in the :ray solve, warn on very large ray grids, and use a relative ggj_reference floor - #595
Conversation
… solve and warn on very large ray grids
A GGJModel{:ray} built with npc or certify_rtol threw a MethodError in solve_inner, which
forwarded them to solve_ray. They are now accepted and ignored there, as real_profiles already
was. solve_ray warns when the Hermite grid exceeds warn_cells (default 6000), and its docstring
states that the grid is fixed rather than refined against a residual, with the expected accuracy
and how to get an error bar.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…es and use it for ggj_reference A quantity may set relative_threshold, a fraction of the first ref's magnitude below which a change is noise, alongside the absolute noise_threshold. It is stored with each run (an older database gains the column on open). ggj_reference's Δ values are up to ~2e4, where the absolute 1e-10 floor was ~5e-15 relative, below cross-machine rounding; they now use 1e-10 relative. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@d-burg what problems are you getting large grids on? The inward march was designed to solve needing huge galerkin grids to get representative frobenius series at the edge cells, IME I have only had huge BVP grids needed when Q > ~100, which should be pretty huge for something like DIII-D no? Just curious what region of parameter space this is in |
|
@matt-pharr Nothing in practice — this is the "warn on a large cell count" item from your #536 reply. I measured it on the Glasser–Wang and q4 benchmark surfaces: 1,024–2,700 cells for |Q| from 0.01 to 5000i, and only Glasser–Wang at Q = 5000i reaches 7,418. So it agrees with your experience, and the 6000 threshold only fires deep in that regime. |
… a large ray grid and leave profile-only options untyped Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@d-burg — completed the requested full SDCC fanout against develop Result: no changes in comparable quantities; harness exit code 0, with no run failures.
Environment: Julia 1.12.6, x86_64 Linux, CI manifest ./regress_fanout.sh --refs 7817f0e7a,2dc99e1c8 --harness-ref 2dc99e1c8 --name pr595_2dc99e1c8_vs_7817f0e7a_20261028SDCC report: Full regression report (21 cases)Third-party human review and approval are required before merge. |
|
@matt-pharr on the relative floor for |
Release note
Follow-ups to #536. A
GGJModel(; solver=:ray)built with the profile optionsnpcorcertify_rtolthrew aMethodErrorwhen solved, becausesolve_innerforwarded them tosolve_ray. They are now ignored there, asreal_profilesalready was.solve_raynow warns once when its Hermite grid exceedswarn_cells(default 6000), and its docstring states that the grid is fixed rather than refined against a residual, with the expected accuracy and how to get an error bar.Changes
solve_inner(::GGJModel{:ray})accepts and ignoresreal_profiles,npcandcertify_rtol, the profile-only options ofsolve_inner_profile, as untyped keywords so they do not look like they act. Test: a model built with all three gives the bare model's Δ exactly.solve_raytakeswarn_cells(default 6000) and warns once perwarn_cellsvalue when the grid is larger, namingcfl,min_cellsand the local rates that set it; the solve itself is unchanged. Test:warn_cells = 100warns, and Δ is unchanged.solve_raydocstring: the mesh is fixed by the local rates (cfl,min_cells), no run-time error estimate is returned, and Δ is accurate to about 1e-8–2e-7 relative at small |Q|. It points todelta_convergencefor an error bar. I didn't add a residual field toRaySolveResult, becausedelta_convergencealready gives that error bar.Regression report
Latest SDCC fanout rerun: develop
7817f0e7avs2dc99e1c8— 21 cases; no changed comparable quantities; harness exit 0. Full report and limitations.gal_resistive_pehas all eight quantities missing on both refs and provides no numerical validation. Earlier reports are retained below.runtests_innerlayer.jlpasses on feynman (GGJ 10, :ray backend 10, :ray internals 15, profile interface 24). The report below is the earlier run at98e9167b9.regress --cases ggj_reference,ggj_ray_q500i,gal_resistive_diiid_galinner,diiid_slayer_n1 --refs bca7ce751,98e9167b9 --forceon feynman (SLURM, 8 threads, manifest pinned): every case is unchanged. The tests inruntests_innerlayer.jlandruntests_slayer_runner.jlpass (GGJ 10, :ray backend 10, :ray internals 15, profile interface 24, runner 88).ggj_referenceggj_ray_q500igal_resistive_diiid_galinnerdiiid_slayer_n1Notes for reviewers
No relative noise floor. InnerLayer.GGJ - REFACTOR! - Solve the :ray BVP with the Galerkin assembly and use one parity convention #536 asked for
ggj_reference's floor to be relative. Measured first: feynman reproduces all four Δ values to the last bit across runs, and the harness always compares its two refs on the same machine, so develop's absolute 1e-10 floor raises no false alarms and stays as it is. Across machines the values do differ (Mac arm64 / Julia 1.11.6 vs feynman x86 / 1.11.9, same pinned manifest):The noise follows |Δ₊| ≈ 2.07e4 (4.8e-9 relative) rather than each part, so a relative floor of 1e-10 on each part would still flag Re Δ₊. The measurement is recorded in Regression - Read noise floors from the case file at compare time #607 for when cross-machine comparison is wanted.
Develop merged (
526141d4a), no conflicts.🤖 Generated with Claude Code