Skip to content

FEAT: Add DeepONet surrogate method (proof of concept) - #25

Open
nikolasborrel wants to merge 7 commits into
developfrom
feat/deeponet_integration
Open

FEAT: Add DeepONet surrogate method (proof of concept)#25
nikolasborrel wants to merge 7 commits into
developfrom
feat/deeponet_integration

Conversation

@nikolasborrel

Copy link
Copy Markdown

Why

  • Adds DeepONet as a fourth method — a neural-operator surrogate predicting impulse responses instead of solving the wave equation.
  • develop has an unregistered deeponet_method/ prototype; this replaces it with a packaged module and wires it into methods-config.json.
  • Unlike the other solvers, it is a two-stage pipeline: DG runs first and writes its field data, that data trains DeepONet, then inference produces the IRs. One run = generate → train → infer.

Changes

Area Change
deeponet_interface/ (new package) Replaces DeepONetInterface.py. _config.py derives the DG/training/inference configs from one user JSON; deeponet_interface.py orchestrates the pipeline
dg_method/.../DGinterface.py Explicit write_to_npz + progress_callback args, replacing the implicit resultType == "DON" caller sniffing
Data handoff DG results → per-source HDF5 training sets, simulation parameters, and a validation split
Registration methods-config.json + example_settings/deeponet_setting.json (frontend schema)
Packaging requirements.txtpyproject.toml + uv.lock; Dockerfile reworked for arm64 (gmsh via apt)

Progress is one 0–100% figure spanning DG and training. The DG half wraps TSI_TI.step_dt at runtime — TODO, as the clean fix belongs in edg-acoustics upstream.

Tests

  • 30 tests, uv run pytest from deeponet_method/: 17 config builders, 6 user-facing JSON contract, 4 SimulationMethod base, 3 CLI end-to-end against a mocked stack.
  • Needs gmsh for collection — run inside the container on arm64 hosts.

Current limitations

  • Single source per run — CHORAS exposes one source position and DG solves one per run, so training data covers a single source.
  • Therefore no speedup yet — a one-source surrogate generalizes only across receivers, which DG already gives directly. This is a proof of concept that the pipeline works end to end, not a usable surrogate.
  • Multi-source input in CHORAS is the prerequisite for training to be worthwhile; the loop already iterates source_positions, so it is forward-compatible.
  • No model reuse — every run retrains from scratch; no checkpoint caching or train-once/infer-many path.
  • Training is inline in the simulation request, so cost is DG + full training, not inference alone.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant