You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ForceFreeStates has grown organically: Riccati.jl is a ~2000-line monolith mixing four distinct concerns, the singular-surface machinery is scattered across files, and ForceFreeStatesStructs.jl is an everything-bucket of types owned by different subsystems. Galerkin already shows the target pattern (its own subdirectory); the rest of the module should follow.
Proposed layout
Riccati/ — split the monolith along its natural seams:
Propagators.jl — FM propagator integration (chunk integration, bidirectional crossing chunks)
Surfaces/ — singular-surface finding/filtering and GGJ coefficients in one place: sing_lim!, sing_find!, sing_min!, resist_eval_all!, SingType
Matching/ — new home for inner-layer matching work (delta_mn, ResistiveMatch models; see REFACTOR_PLAN.md D13/D14) rather than bolting it onto Riccati or Galerkin
Structs colocated with owners — dissolve ForceFreeStatesStructs.jl so each type lives next to the code that produces it
Exact file boundaries to be finalized when the PR is cut; the list above is the agreed shape.
Process constraints (agreed, non-negotiable)
Pure-move PR: zero logic changes, so the whole diff is verifiable with git diff --color-moved=dimmed-zebra --color-moved-ws=allow-indentation-change --histogram plus a byte-identity HDF5 check.
The PR that does this should also go through and completely overhaul the docstrings and comments to make them far more terse and useful, and make sure they are all correct in the first place.
Activity
matt-pharr commentedon Aug 15, 2026
The PR that does this should also go through and completely overhaul the docstrings and comments to make them far more terse and useful, and make sure they are all correct in the first place.