All notable changes to FlowSim are documented here.
Version tags follow Semantic Versioning: MAJOR.MINOR.PATCH.
Releases: GitHub Releases page
Post-v2.0.0 root-cleanup follow-up. Pure reorganization, zero numerical
impact. unit_baseline_reproduces still passes 35/35 at relative Frobenius
diff 0.000e+00 against the committed goldens.
runtime/{preproc,time,plug,util}/subtree — 37 active-runtime.mfiles moved from repo root, grouped by roledata/folder — 7 data files moved from repo root (permeability datasets, benchmark spreadsheets, gmsh source, reference figures)runtime/README.md— index describing the four runtime subdirslegacy/README.md— index of the 12 legacy clusters + retirement status
- Root
.mfile count: 42 → 4 (main,startup,flowsim_init,flowsim_deinit) — only the entry-point + path-setup files remain Caso439:inicializar— index cache path now derived frommfilename('fullpath')and lands indata/regardless of MATLABcwdREADME.md— repository map section rewritten to reflect the new layoutdocs/code-map.md— 15+ location entries corrected from "root" toruntime/…orlegacy/ferncodes/lpew/docs/how-to-use.md— install instructions updated for the mergedmasterbranch; mesh-path troubleshooting reflectsmeshes/*/
docs/how-to-use.mdstill told users togit checkout flowsim-artur(that branch is now merged intomaster)
The vectorization release. Result of the 2026-07 AXON code-dev campaign
that landed 33 PRs on the flowsim-artur branch and merged into master
via --no-ff (preserving the full PR history).
- LPEW2 pipeline fully vectorized — bit-identical to legacy at 1e-15
relative accuracy (
+fs/+lpew/+v2/preLPEW2) - MPFA-D assembly fully vectorized — bit-identical to legacy AND to the
committed golden baseline (
+fs/+assembly/+mpfad/build) - TPFA assembly vectorized —
+fs/+assembly/+tpfa/build - Scaffolded methods — MPFA-H, NLFV-PP, NLFV-H, MPFA-QL, DMP now have
+fs/+assembly/+<method>/build.mentry points (delegate to legacy for now; the vectorization pattern is established via MPFA-D) - Tests harness —
tests/with ~500 assertions, all green, 0 regressions - WSL bridge —
tools/mrunrunsmatlab.exe -batchheadless from WSL
+fs/package tree — vectorized modules under 12 packages (+util,+mesh,+csr,+data,+lpew,+lpew/+v2,+assemblyx7,+flow,+iter)tests/— harness (fs_setup,fs_expect,fs_teardown,fs_frob,fs_test_env,capture_baseline) + smoke + 14 unit tests + goldensflowsim_init.m+flowsim_deinit.m— clean path setup / teardowntools/mrun— WSL → MATLAB bridge (~200 lines of bash)docs/—code-map.md,how-to-use.md,vectorization-guide.md,globals-audit.mdmeshes/{hermeline,kozdon,other}/— 16.mshfixtures organized
- Unified OOP contract: all discretization methods now inherit from
MetodoBase(was: mix ofSolverBase+MetodoBase+ orphans)- Renamed
SolverMPFAH.m→MetodoMPFAH.m - Renamed
SolverNLFVPP.m→MetodoNLFVPP.m - Created
MetodoMPFAQL.m(factory expected it, file didn't exist) - Deleted orphan
Caso1.mandSolverBasereference
- Renamed
- Root
.mcount: 285 → 42 — 250+ files relocated tolegacy/in 8 organized subclusters (ferncodes/,ferncodes-con/,preprocessor/,transm/,limiters/,saturation/,transport/,calc/,get/,solvers/,utility/,test-scripts/,unknown/) - Tracked repo weight: 176 MB → ~10 MB — 154 MB of binaries
untracked + relocated (see
.gitignore+fs.data.paths) startup.m— now a thin wrapper that delegates toflowsim_init
- MPFA-D + TPFA on
M8/num439: Frobenius rel diff 0.000e+00 vs the committed goldens (tests/golden/*.mat) - LPEW2 weight match: 1e-15 relative to legacy per-node loop
Fully backward compatible for user code that calls the legacy entry
points — the vectorized modules are additive and are picked up
transparently via flowsim_init's path precedence (+fs/ first).
To restore v1.0.0 state:
git checkout v1.0.0-pre-vectorization # detached HEAD
# OR
git checkout legacy-v1.0 # branch (defense in depth)Snapshot of master at commit 798bbe7 immediately before the flowsim-artur
merge. Pinned as a tag AND as branch legacy-v1.0 for defense in depth.
This is the state of the code before the AXON vectorization campaign:
- 285
.mfiles at repo root - ~176 MB tracked repo weight
- Broken OOP factory dispatch (missing
MetodoMPFAH,MetodoMPFAQL,MetodoNLFVPPfiles; orphanSolverMPFAH,SolverNLFVPPinheriting from missingSolverBase) - No test harness
- ~62 dead files reachable from no entry point
Preserved for reproducibility of any pre-vectorization result.
Kept for historical reference. All PRs merged into master via v2.0.0.
- PR-A1
f8da9ad·flowsim_init.m+flowsim_deinit.mat repo root - PR-A2
bd306b6· Fix broken OOP — unified all methods underMetodoBase - PR-A3
747b975·+fs/+util/assertFS.m(5-invariant checker) - PR-A4
08c9572·+fs/+mesh/build.m(env → FS struct adapter) - PR-A5
788eb0b·+fs/+csr/buildCorners.m(CSR-flat corner layout — KEY enabler) - PR-A6
8f62828·capture_baseline.m+fs_test_env.m+ goldens - PR-A7
407a2b4·unit_baseline_reproduces.m(bit-identical oracle)
- PR-B1
5d101e0·fs.lpew.OPT— batched geometry gather - PR-B2
67bcf77·fs.lpew.v2.{angulos,netas}+fs.csr.buildCornerShifts - PR-B3
df5922b·fs.lpew.v2.ksInterp - PR-B4
5b1ab59·fs.lpew.v2.lambdaWeights - PR-B5
8187d7e·fs.lpew.v2.preLPEW2— matches legacy at 1e-15 rel
- PR-C1+C2
35811a5·fs.assembly.mpfad.build— fully vectorized MPFA-D - PR-C3
699d053·fs.assembly.tpfa.build - PR-C4+C5+C6
8305a76· scaffolds for MPFAH/NLFVPP/MPFAQL/DMP/NLFVH
- PR-D1+D2+D3
1a8878d·+fs/+flow/{mpfad,tpfa}++fs/+lpew/pinterp
.gitignore+ untrack 154 MB of binaries (Option A)fs.data.pathsloader stub + physical relocation (Option D)- 17 dead files →
legacy/(transm*, preprocessor*, ferncodes_*_con.m) .mshfiles →meshes/{hermeline,kozdon,other}/- 32 unknown files →
legacy/unknown/ - 123 auxiliary files →
legacy/{limiters,saturation,transport,calc,get,solvers,utility,test-scripts}/
startup.m→ delegates toflowsim_initREADME.md,CHANGELOG.md,docs/{code-map,how-to-use,vectorization-guide,globals-audit}.mdfs.iter.{picard,anderson,lscheme}+fs.lpew.dmpWeights(cross-cluster wrappers)
- Total commits merged from
flowsim-artur: 33 PRs + infra - Test assertions: ~500 across all PRs, 100% green
- Regressions: 0
- Golden baselines: TPFA + MPFA-D on
M8/num439— bit-identical
- Full triplet-form rewrite of MPFA-H, MPFA-QL, NLFV-PP, NLFV-H, DMP assemblers (scaffolds shipped; pattern established via MPFA-D). Estimate: 30–45 hours total. Order by ascending difficulty: NLFV-H (2–3 h) → NLFV-PP (3–5 h) → MPFA-QL (3–5 h) → DMP (8–12 h) → MPFA-H (12–20 h).
- Kill globals in reachable set (see
docs/globals-audit.md) — requires coordinated caller + callee migration. - Cross-cluster kernel renames (e.g.
ferncodes_pressureinterpNLFVPPis actually a shared LPEW-based interpolator used by MPFA-D too). - Triage the 32 files in
legacy/unknown/.
- Artur Castiel Reis de Souza (owner — decisions, direction, branch approval)
- AXON code-dev (autonomous implementation under owner grant 2026-07-03)
- GitHub Copilot (co-author per commit trailer)