acoustic-engine 0.1.0

Solveur acoustique 2D (FDTD, grille décalée) en f32 : bords absorbants, sources, récepteurs, rayon optionnel
Documentation

acoustic-engine

Solveur acoustique 2D par différences finies (FDTD, grille décalée) en f32. Licence : GPL-2.0-or-later.

Fonctionnalités

  • Propagation d'ondes dans un milieu hétérogène (rho, c par cellule)
  • Bords absorbants (couche éponge) ou murs rigides
  • Sources temporelles : ondelette de Ricker, sinus, impulsion
  • Récepteurs : enregistrement de p(t) en un point
  • Pas de temps stable calculé (condition CFL)
  • Parallélisation optionnelle avec la feature rayon
  • Aucune dépendance par défaut

Exemple

use acoustic_engine::{AcousticSolver2D, Waveform};

let mut s = AcousticSolver2D::new(300, 300, 0.5, 0.5, 1.2, 340.0); // air
s.set_absorbing_boundary(25, 0.1);
s.set_medium_rect(200, 100, 210, 200, 1200.0, 340.0); // mur dense
s.add_source(100, 150, Waveform::Ricker { freq: 100.0 }, 1.0);
let mic = s.add_receiver(250, 150);

let dt = s.stable_dt(0.9);
for _ in 0..1000 { s.step(dt); }
let signal: &[f32] = s.receiver(mic);

Exemples fournis

cargo run --release --example impulse
cargo run --release --example receiver                 # écrit receiver.csv
cargo run --release --example bench --features rayon
cargo run --release --example viewer --features rayon  # fenêtre temps réel

Règles de précision

  • Garder au moins ~10 cellules par longueur d'onde minimale (dx <= c / (10·f_max)), sinon la dispersion numérique déforme l'onde.
  • Toujours utiliser dt <= max_stable_dt() (stable_dt(0.9) recommandé).
  • Pour modifier le milieu, utiliser set_medium / set_medium_rect (ils tiennent 1/rho à jour).

Tests

cargo test
cargo test --features rayon

Les tests vérifient la formule CFL, la symétrie de l'onde, la causalité, la stabilité sous/sur la limite CFL, l'efficacité des bords absorbants et l'effet d'un milieu hétérogène.

Licence

GPL-2.0-or-later. Placer le texte officiel dans LICENSE (https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt).