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,cpar 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 ;
let mut s = new; // air
s.set_absorbing_boundary;
s.set_medium_rect; // mur dense
s.add_source;
let mic = s.add_receiver;
let dt = s.stable_dt;
for _ in 0..1000
let signal: & = s.receiver;
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 tiennent1/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).