-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Project Roadmap
This issue tracks the overall plan for getting the horn simulation pipeline from its current state (scaffolding works, physics don't) to a working tool that produces meaningful acoustic simulation results.
Current State
The pipeline has good scaffolding — containerised packages, Nextflow orchestration, CI/CD, parallel frequency bands — but the physics are non-functional:
- BEM coupling (
bempp.x.dolfinx) has never existed in any pip release - SPL metric is an L2 norm over the full volume (physically meaningless)
- Only conical horn geometry is implemented (spec calls for 4 profiles)
- Analysis is limited to a single SPL-vs-frequency plot
mesh_sizeis never forwarded to the solver- Groovy integer division silently drops frequency samples
Phase 1: Correctness — FEM-only pipeline producing real results
Goal: Fix the bugs that make the current pipeline output meaningless. After this phase, running the pipeline with a conical horn should produce physically plausible SPL data.
- bug: SPL metric is physically meaningless (L2 norm over full volume) #10 — Replace L2-norm SPL with outlet-surface pressure integration
- bug: params.mesh_size is never forwarded to the solver in main.nf #11 — Forward
params.mesh_sizefrommain.nfto the solver CLI - bug: max_freq_mesh parameter accepted but never used for adaptive meshing #12 — Implement frequency-adaptive meshing (
max_freq_mesh→ element size < λ/6) - bug: Groovy integer division drops frequency samples in main.nf #14 — Fix Groovy integer division dropping frequency samples
- bug: geometry tests use wrong kwarg (output_dir instead of output_file) #4 — Fix geometry test kwarg (
output_dirvsoutput_file) - milestone: FEM-only pipeline producing physically meaningful results #40 — Milestone: FEM-only pipeline producing physically meaningful results
Phase 2: BEM Research — determine if hybrid FEM-BEM is viable
Goal: Answer the question: can we get exterior radiation modelling working? This runs in parallel with Phase 3.
- spike: investigate BEM coupling approaches — is bempp.x.dolfinx viable? #39 — Spike: investigate BEM coupling approaches
- Option A: Build bempp with dolfinx coupling from source
- Option B: Use bempp standalone (manual data transfer at boundary)
- Option C: PML absorbing layers in pure FEM (no bempp needed)
- Option D: Analytical radiation impedance BC at the mouth
- bug: BEM coupling in solver.py is a non-functional placeholder #9 — Replace the non-functional BEM placeholder based on spike outcome
- bug: run_simulation nf-test passes dummy STEP file — test will always fail #16 — Fix
run_simulationnf-test (needs real STEP fixture from geometry stage)
Phase 3: Features — horn profiles, analysis, driver DB
Goal: Expand the pipeline from "one conical horn with one plot" to the feature set described in the spec. Can start once Phase 1 is done.
- feat: implement exponential and hyperbolic horn geometry generators #33 — Implement exponential and hyperbolic horn geometry generators
- feat: implement analysis features (impedance plots, polar plots, scoring, driver DB) #35 — Implement analysis features (impedance plots, polar plots, scoring)
- bug: horn-analysis Docker build fails due to unused psycopg2-binary/pdfplumber deps #3 — Clean up horn-analysis deps (psycopg2/pdfplumber are for future driver DB)
- bug: get_driver_params.py references non-existent data/drivers.json #5 — Fix or remove
get_driver_params.py(references non-existentdrivers.json) - test: horn-analysis test_analysis.py is a placeholder (assert True) #21 — Write real tests for horn-analysis (currently
assert True)
Phase 4: Cleanup and polish
Goal: Pay down tech debt. Can be done opportunistically alongside other phases.
- cleanup: remove dead solver_runner.py #15 — Remove dead
solver_runner.py - infra: CI test_packages pushes to DockerHub on every PR — decouple build from publish #19 — Decouple CI build from DockerHub publish
- arch: horn-core data structures are unused — integrate shared data model #22 — Integrate
horn-coreshared data model (currently unused) - cleanup: horn-core __init__.py exports nothing #23 — Make
horn-core__init__.pyexport its data structures - bug: dolfinx and gmsh missing from horn-solver pyproject.toml dependencies #24 — Add
dolfinxandgmshtohorn-solverpyproject.toml - infra: Dockerfiles hardcode python3.10 in COPY paths #25 — Remove hardcoded
python3.10paths in Dockerfiles - cleanup: remove committed *.egg-info directories from git #27 — Remove committed
*.egg-infodirectories - cleanup: remove archived horn-bem-solver package #28 — Remove archived
horn-bem-solverpackage - cleanup: remove dead params.test_outdir from main.nf #29 — Remove dead
params.test_outdirfrommain.nf - bug: plotter.py never calls plt.close() — memory leak in batch use #30 — Fix
plt.close()memory leak in plotter - cleanup: add compare_horns as a pyproject.toml script entry point #31 — Add
compare_hornsas a pyproject.toml script entry point
Phase 5: Full FEM-BEM coupling
Goal: Implement the "gold standard" hybrid FEM-BEM simulation from the design spec. Depends entirely on the outcome of #39.
- feat: implement real FEM-BEM coupling for acoustic simulation #34 — Implement real FEM-BEM coupling for acoustic simulation
Recommended execution order
Phase 1 (correctness)
|
+---> Phase 2 (BEM spike) -----> Phase 5 (if viable)
| |
+---> Phase 3 (features) <------ inform from spike
|
+---> Phase 4 (cleanup, anytime)
Phase 1 is the critical path. Phase 2 and 3 can run in parallel once Phase 1 is done. Phase 4 is background work.