Add slow-sound slit and Helmholtz-resonator perfect absorbers (#346)
* Add slow-sound slit and Helmholtz-resonator perfect absorbers
Introduce materials.slow_sound_absorber, a transfer-matrix model of a
rigid panel of thin closed slits loaded by an array of Helmholtz
resonators. The resonators slow the sound inside the slit and pull its
resonance into the deep-subwavelength regime, and the visco-thermal
losses of the sub-millimetre slit and of the square resonator necks and
cavities make perfect absorption possible.
slit_helmholtz_absorber predicts the oblique-incidence absorption of the
panel, returning a SlitResonatorAbsorberResult with the surface
impedance, reflection factor, absorption, retrieved effective parameters
and the full chain matrix, plus a .plot() of alpha(f) with |R| overlaid.
critical_coupling_design solves the inverse problem: it tunes the cavity
length and the slit height so the reflection zero sits on the real
frequency axis, giving perfect absorption at a chosen frequency and
angle. The building blocks slit_effective_properties,
rectangular_duct_properties and helmholtz_resonator_impedance and the
HelmholtzResonator geometry are exported alongside.
The model is pinned to its exact analytic anchors: perfect absorption at
the design frequency, the Poiseuille resistivity limits 12 eta / h^2
(slit) and 28.454 eta / w^2 (square duct), and the loss-free
effective-parameter limits (rho -> rho0, kappa -> kappa0). Adds a
conformance section, an example figure, tests, an API-reference row set,
and EN/ES guide sections.
* Keep the Sonar gate clean for the slow-sound absorber
Exempt materials.slow_sound_absorber from S107 the same way the other
scientific APIs are: its functions carry the slit and resonator geometry
alongside the shared keyword-only air state, matching the porous-absorber
and JCA signatures, so the parameter count reflects the physics rather
than incidental complexity.
Extract a shared alpha(f) + |R| overlay renderer for the layered-absorber
and slit-resonator plots so the two oblique-incidence absorber renderers
no longer duplicate their body. Output is byte-identical.
* Make the slow-sound absorber files Ruff 0.16 clean
Use dict literals for the shared air-state mappings and drop the
redundant quoted type annotations (the module already imports
annotations from __future__). Keeps the new feature files clean under
the widened Ruff 0.16 default rule set without touching unrelated files.
* Modernize the slow-sound absorber additions for ruff 0.16 and regenerate references
* Silence the unused figure handle in the slow-sound graph helper
* Clarify slow-sound docstrings and cover the optional-correction branches
Fix the trailing space in a docstring code span, state the design warning is
emitted rather than raised, correct the deep-subwavelength depth ratio in the
figure docstring, and add a test exercising the end_correction and
slit_radiation False branches.
* Regenerate API reference and llms for the slow-sound docstring fixes
* Regenerate conformance and references after rebase
* Translate the slow-sound figure strings and require convergence in the check
Add the Spanish figure-string translations for the slow-sound absorber plot
(legend, design annotation, title and the panel-depth pattern) so the ES
variant is not left in English, and make the critical-coupling conformance
check fail unless the design solver converged.
* Regenerate conformance and references after rebase