Uh oh!
There was an error while loading. Please reload this page.
ForceFreeStates - REFACTOR - Reorganize ForceFreeStates into subdirectories (pure move) - #400
Merged
Merged
Conversation
… move) Split the module into ownership-based subdirectories with zero logic changes: - Riccati/: Riccati.jl split into Types (IntegrationChunk, ChunkPropagator), Propagators (chunk FM integration, renormalization, propagator application), Crossings (singular-surface crossing algorithms), DeltaPrimeBVP (STRIDE BVP assembly/solve + PEST-3 decomposition), and Driver (chunk orchestration). - Surfaces/: singular-surface machinery in one place — Types (SingType, SingAsymptotics), Finding + Asymptotics (split of Sing.jl), Resist (GGJ coefficients only), ResistEval. - Matching/: outer<->inner matching seed — DeltaPrimeData (shared Delta-prime payload) and resonant_match_rpec/ResonantMatchResult (from Resist.jl). - ForceFreeStatesStructs.jl dissolved: FourFitVars -> Fourfit.jl, FreeBoundaryResult -> Free.jl, OdeState/EdgeScanState -> EulerLagrange.jl, module-wide types (ModeSpace, DebugSettings, Internal, Control) -> CoreTypes.jl. - Sing.jl's EL derivative kernel (sing_der!, el_derivatives!, compute_node_xi_s!) moved to EulerLagrange.jl where it belongs. - Include order in ForceFreeStates.jl rearranged so types load before the code that dispatches on them; updated the stability.md autodocs Pages list and stale file-path references in docs/comments. Verified: full test suite passes; gpec.h5 bit-identical vs the pre-move commit on the forward and riccati decks (h5diff; only the date_created attribute and HDF5 object-header timestamps differ); regression harness diiid_n1 47/47 unchanged with zero diff; local Documenter build clean. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Collaborator
@matt-pharr (and @logan-nc ) if it would help, I can take over reviewing/getting this merged? I have two PRs stacked on top of this so once this is merged I can get those moving along |
jhalpern30
self-requested a review
August 24, 2026 21:32
jhalpern30
approved these changes
Aug 25, 2026
jhalpern30
left a comment
Collaborator
There was a problem hiding this comment.
I think this looks great - I like the reorganization and think it cleans up some files that were getting particularly bloated. Trusting the description that this is a pure move - I am reviewing the file structure alone and assuming all code was unchanged
Resolve the two modify/delete conflicts by porting develop's edits into the new file locations: - OdeState.ca_populated (+ zeros-initialized ca_l/ca_r) from ForceFreeStatesStructs.jl into EulerLagrange.jl. - ca_populated flag in _capture_right_crossing_data! from Riccati.jl into Riccati/Crossings.jl. - Per-column abstol in integrate_fm_with_ua_ic from Riccati.jl into Riccati/Propagators.jl. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VAMWNadfK6utwJz1AJrmKz
Uh oh!
There was an error while loading. Please reload this page.
This was referenced Aug 27, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Split the module into ownership-based subdirectories with zero logic changes:
Verified: full test suite passes; gpec.h5 bit-identical vs the pre-move commit on the forward and riccati decks (h5diff; only the date_created attribute and HDF5 object-header timestamps differ); regression harness diiid_n1 47/47 unchanged with zero diff; local Documenter build clean.
Closes#394
Release note
Pure file reorganization of ForceFreeStates into ownership-based subdirectories. No physics, algorithms, or numerical results change; only the on-disk layout and include order differ.
Regression report
Ran at
3d30557f(merge ofdevelopinto this branch), 7 cases,origin/develop(dacdeae) vs working tree:Every other tracked quantity across all six remaining cases is exactly
0.0e+00, includingthe full
diiid_n1deck (47/47) and the Riccati Delta-prime deck (17/17).The
diiid_slayer_n1gamma_Hz flag is pre-existing nondeterminism, not a change from this PR.Running the unmodified SLAYER deck twice on identical code gives:
i.e. the 3/1 surface scatters by ~0.128 Hz run-to-run - the same magnitude as the 1.377e-01
diff the harness flags. That quantity's
noise_thresholdis1e-1, marginally below its ownrun-to-run scatter, which is why it trips. The case TOML already notes that root extraction
"is sensitive to the AMR cell topology and ODE solver". Worth re-pinning the threshold
separately; it is not caused by this reorganization.
gal_resistive_pereports all 8 quantities N/A on both refs, so it is likewise pre-existingand not introduced here.
Notes for reviewers
This branch now contains a merge of
develop(3d30557f).develophad modified two filesthat this PR deletes, so the two modify/delete conflicts were resolved by porting develop's
edits into their new homes:
OdeState.ca_populated+ zeros-initializedca_l/ca_r(ForceFreeStatesStructs.jl->EulerLagrange.jl)ca_populated = truein_capture_right_crossing_data!(Riccati.jl->Riccati/Crossings.jl)abstolinintegrate_fm_with_ua_ic(Riccati.jl->Riccati/Propagators.jl)The
diiid_n1_riccaticase coming back 17/17 with zero diff is the direct check that theabstolport is faithful, and the h5-schema tests cover theca_populatedport.