Geometry drawings: to-scale device cross-sections for materials (#381)
* Geometry drawings: to-scale device cross-sections for materials
New rendering module with drafting primitives (dimension lines with
extension leaders, material fills, microphone/loudspeaker symbols,
cross-section emblems) and six to-scale drawings:
- Layered absorber stack (porous/air/perforated/MPP/membrane), with
each layer dimensioned and the hole pattern of perforated plates
drawn at its real pitch.
- Square-section Helmholtz resonator.
- One period of the slit metamaterial absorber (slow-sound panel).
- QRD well profile from qrd_well_depths.
- ISO 10534-2 impedance tube and ASTM E2611 transmission tube: side
views at true scale with microphone positions, sample, termination,
cross-section emblem and the plane-wave working range.
API: layer dataclasses and HelmholtzResonator gain .plot();
LayeredAbsorberResult, SlitResonatorAbsorberResult,
DiffuserPolarResponse, ImpedanceTubeResult and TransferMatrix gain
.plot_geometry() with the defining geometry retained on the result
(trailing optional fields, backward compatible); six public
plot_*_geometry functions cover design-time drawing before any
computation. All drawings are bilingual and validate inputs before
touching matplotlib.
24 generated SVG variants, guide embeds (EN/ES and the GitHub
mirrors) with runnable snippets, curated API table rows and generated
API pages, and 16 new tests (smoke, retention round-trips, to-scale
checks, refusal paths for hand-built results).
* Address review: QRD pitch, sequence contract, language and bounds validation
- The drawn N = 7 QRD keeps the published 3.6 m total width: an 85.7 mm
pitch split into an 80.7 mm well plus a 5 mm fin (figure, snippets and
alt texts updated).
- plot_absorber_stack and plot_slit_absorber_geometry normalise any
Sequence, matching their advertised contracts.
- The six module-level renderers validate language and reject
non-positive diameter/sample_thickness before creating any figure;
layer-type dispatch moved ahead of axes creation.
- DiffuserPolarResponse docstring: well_width/periods are always
retained by the predictor; only depths distinguishes the
explicit-reflection path.
* Address static analysis: float comparisons, literal hoist, flat conditionals
- _dim: tolerance-based checks instead of float equality for the span
and the offset.
- Incident-sound label computed once per arrow.
- Tube emblem shape extracted from the nested conditional.
- Exception tests build their fixtures outside pytest.raises.
- Regenerated API page for the DiffuserPolarResponse docstring.
Correct the slit-radiation sign in the slow-sound absorber and generalize the diffuser obliquity factor (#349)
* Fix slit-radiation sign, generalize Kirchhoff obliquity, record paper errata
The slit-to-free-air radiation correction of the slow-sound absorber was
transcribed with the papers' printed -iw sign, which in the e^{+jwt}
convention of the library acts as a negative mass and raises the slit-panel
resonance (378.6 to 386.8 Hz for the documented base geometry) where an
added radiation mass must lower it (370.8 Hz). The term is now conjugated
like the Stinson duct series of the same model, with the direction and the
shifted peak pinned by a regression test, and both source misprints (the
sign and the 4-vs-64 duct-series constant) are recorded in the errata
registry. The committed slow-sound figures are regenerated; the
critical-coupling design they show self-compensates to alpha = 1, but the
solved cavity length moves from 48.3 mm to 44.7 mm.
The diffuser far-field predictor now uses the symmetric Kirchhoff obliquity
factor (cos theta + cos psi)/2 for oblique sources, which reduces exactly
to the Cox and D'Antonio Eq. (9.32) normal-incidence form at psi = 0, so
all normal-incidence anchors are unchanged.
Also: the EN 29052-1 low-resistivity warning now echoes the clause 8.2
requirement to state the estimated error in the test report, and the
ISO 9053-2 volume-flow helper documents the normative 6.2 form against the
Annex A.2 rms variant.
* Update the porous-absorbers misprint count for the new errata entries
The page's sources now have five recorded misprints (Maa Eq. (5b), two in
Attenborough & Van Renterghem 2e, and the two Jimenez et al. entries); the
English and Spanish guides are kept in step.
Geometry drawings: to-scale device cross-sections for materials (#381)
* Geometry drawings: to-scale device cross-sections for materials
New rendering module with drafting primitives (dimension lines with
extension leaders, material fills, microphone/loudspeaker symbols,
cross-section emblems) and six to-scale drawings:
- Layered absorber stack (porous/air/perforated/MPP/membrane), with
each layer dimensioned and the hole pattern of perforated plates
drawn at its real pitch.
- Square-section Helmholtz resonator.
- One period of the slit metamaterial absorber (slow-sound panel).
- QRD well profile from qrd_well_depths.
- ISO 10534-2 impedance tube and ASTM E2611 transmission tube: side
views at true scale with microphone positions, sample, termination,
cross-section emblem and the plane-wave working range.
API: layer dataclasses and HelmholtzResonator gain .plot();
LayeredAbsorberResult, SlitResonatorAbsorberResult,
DiffuserPolarResponse, ImpedanceTubeResult and TransferMatrix gain
.plot_geometry() with the defining geometry retained on the result
(trailing optional fields, backward compatible); six public
plot_*_geometry functions cover design-time drawing before any
computation. All drawings are bilingual and validate inputs before
touching matplotlib.
24 generated SVG variants, guide embeds (EN/ES and the GitHub
mirrors) with runnable snippets, curated API table rows and generated
API pages, and 16 new tests (smoke, retention round-trips, to-scale
checks, refusal paths for hand-built results).
* Address review: QRD pitch, sequence contract, language and bounds validation
- The drawn N = 7 QRD keeps the published 3.6 m total width: an 85.7 mm
pitch split into an 80.7 mm well plus a 5 mm fin (figure, snippets and
alt texts updated).
- plot_absorber_stack and plot_slit_absorber_geometry normalise any
Sequence, matching their advertised contracts.
- The six module-level renderers validate language and reject
non-positive diameter/sample_thickness before creating any figure;
layer-type dispatch moved ahead of axes creation.
- DiffuserPolarResponse docstring: well_width/periods are always
retained by the predictor; only depths distinguishes the
explicit-reflection path.
* Address static analysis: float comparisons, literal hoist, flat conditionals
- _dim: tolerance-based checks instead of float equality for the span
and the offset.
- Incident-sound label computed once per arrow.
- Tube emblem shape extracted from the nested conditional.
- Exception tests build their fixtures outside pytest.raises.
- Regenerated API page for the DiffuserPolarResponse docstring.
Correct the slit-radiation sign in the slow-sound absorber and generalize the diffuser obliquity factor (#349)
* Fix slit-radiation sign, generalize Kirchhoff obliquity, record paper errata
The slit-to-free-air radiation correction of the slow-sound absorber was
transcribed with the papers' printed -iw sign, which in the e^{+jwt}
convention of the library acts as a negative mass and raises the slit-panel
resonance (378.6 to 386.8 Hz for the documented base geometry) where an
added radiation mass must lower it (370.8 Hz). The term is now conjugated
like the Stinson duct series of the same model, with the direction and the
shifted peak pinned by a regression test, and both source misprints (the
sign and the 4-vs-64 duct-series constant) are recorded in the errata
registry. The committed slow-sound figures are regenerated; the
critical-coupling design they show self-compensates to alpha = 1, but the
solved cavity length moves from 48.3 mm to 44.7 mm.
The diffuser far-field predictor now uses the symmetric Kirchhoff obliquity
factor (cos theta + cos psi)/2 for oblique sources, which reduces exactly
to the Cox and D'Antonio Eq. (9.32) normal-incidence form at psi = 0, so
all normal-incidence anchors are unchanged.
Also: the EN 29052-1 low-resistivity warning now echoes the clause 8.2
requirement to state the estimated error in the test report, and the
ISO 9053-2 volume-flow helper documents the normative 6.2 form against the
Annex A.2 rms variant.
* Update the porous-absorbers misprint count for the new errata entries
The page's sources now have five recorded misprints (Maa Eq. (5b), two in
Attenborough & Van Renterghem 2e, and the two Jimenez et al. entries); the
English and Spanish guides are kept in step.
Geometry drawings: to-scale device cross-sections for materials (#381)
* Geometry drawings: to-scale device cross-sections for materials
New rendering module with drafting primitives (dimension lines with
extension leaders, material fills, microphone/loudspeaker symbols,
cross-section emblems) and six to-scale drawings:
- Layered absorber stack (porous/air/perforated/MPP/membrane), with
each layer dimensioned and the hole pattern of perforated plates
drawn at its real pitch.
- Square-section Helmholtz resonator.
- One period of the slit metamaterial absorber (slow-sound panel).
- QRD well profile from qrd_well_depths.
- ISO 10534-2 impedance tube and ASTM E2611 transmission tube: side
views at true scale with microphone positions, sample, termination,
cross-section emblem and the plane-wave working range.
API: layer dataclasses and HelmholtzResonator gain .plot();
LayeredAbsorberResult, SlitResonatorAbsorberResult,
DiffuserPolarResponse, ImpedanceTubeResult and TransferMatrix gain
.plot_geometry() with the defining geometry retained on the result
(trailing optional fields, backward compatible); six public
plot_*_geometry functions cover design-time drawing before any
computation. All drawings are bilingual and validate inputs before
touching matplotlib.
24 generated SVG variants, guide embeds (EN/ES and the GitHub
mirrors) with runnable snippets, curated API table rows and generated
API pages, and 16 new tests (smoke, retention round-trips, to-scale
checks, refusal paths for hand-built results).
* Address review: QRD pitch, sequence contract, language and bounds validation
- The drawn N = 7 QRD keeps the published 3.6 m total width: an 85.7 mm
pitch split into an 80.7 mm well plus a 5 mm fin (figure, snippets and
alt texts updated).
- plot_absorber_stack and plot_slit_absorber_geometry normalise any
Sequence, matching their advertised contracts.
- The six module-level renderers validate language and reject
non-positive diameter/sample_thickness before creating any figure;
layer-type dispatch moved ahead of axes creation.
- DiffuserPolarResponse docstring: well_width/periods are always
retained by the predictor; only depths distinguishes the
explicit-reflection path.
* Address static analysis: float comparisons, literal hoist, flat conditionals
- _dim: tolerance-based checks instead of float equality for the span
and the offset.
- Incident-sound label computed once per arrow.
- Tube emblem shape extracted from the nested conditional.
- Exception tests build their fixtures outside pytest.raises.
- Regenerated API page for the DiffuserPolarResponse docstring.
Geometry drawings: to-scale device cross-sections for materials (#381)
* Geometry drawings: to-scale device cross-sections for materials
New rendering module with drafting primitives (dimension lines with
extension leaders, material fills, microphone/loudspeaker symbols,
cross-section emblems) and six to-scale drawings:
- Layered absorber stack (porous/air/perforated/MPP/membrane), with
each layer dimensioned and the hole pattern of perforated plates
drawn at its real pitch.
- Square-section Helmholtz resonator.
- One period of the slit metamaterial absorber (slow-sound panel).
- QRD well profile from qrd_well_depths.
- ISO 10534-2 impedance tube and ASTM E2611 transmission tube: side
views at true scale with microphone positions, sample, termination,
cross-section emblem and the plane-wave working range.
API: layer dataclasses and HelmholtzResonator gain .plot();
LayeredAbsorberResult, SlitResonatorAbsorberResult,
DiffuserPolarResponse, ImpedanceTubeResult and TransferMatrix gain
.plot_geometry() with the defining geometry retained on the result
(trailing optional fields, backward compatible); six public
plot_*_geometry functions cover design-time drawing before any
computation. All drawings are bilingual and validate inputs before
touching matplotlib.
24 generated SVG variants, guide embeds (EN/ES and the GitHub
mirrors) with runnable snippets, curated API table rows and generated
API pages, and 16 new tests (smoke, retention round-trips, to-scale
checks, refusal paths for hand-built results).
* Address review: QRD pitch, sequence contract, language and bounds validation
- The drawn N = 7 QRD keeps the published 3.6 m total width: an 85.7 mm
pitch split into an 80.7 mm well plus a 5 mm fin (figure, snippets and
alt texts updated).
- plot_absorber_stack and plot_slit_absorber_geometry normalise any
Sequence, matching their advertised contracts.
- The six module-level renderers validate language and reject
non-positive diameter/sample_thickness before creating any figure;
layer-type dispatch moved ahead of axes creation.
- DiffuserPolarResponse docstring: well_width/periods are always
retained by the predictor; only depths distinguishes the
explicit-reflection path.
* Address static analysis: float comparisons, literal hoist, flat conditionals
- _dim: tolerance-based checks instead of float equality for the span
and the offset.
- Incident-sound label computed once per arrow.
- Tube emblem shape extracted from the nested conditional.
- Exception tests build their fixtures outside pytest.raises.
- Regenerated API page for the DiffuserPolarResponse docstring.
docs: cite Jiménez metamaterial-acoustics work on the materials reference (#341)
The Materials and Surfaces theory page derives surface diffusion and porous
absorber prediction, yet its references frontmatter listed only Cox & D'Antonio
and Allard & Atalla. Add three open-access works by Jiménez and co-workers that
the page already speaks to: the metadiffuser paper (Jiménez, Cox, Romero-García
and Groby, 2017, Scientific Reports) on the surface-diffusion section, and the
two critical-coupling perfect-absorption papers (Jiménez, Groby, Pagneux and
Romero-García, 2017, Applied Sciences; Jiménez, Romero-García and Groby, 2018,
Acta Acustica) on the material-characterisation section.
Reference the same works from the scattering_diffusion and porous_absorber
module docstrings, and regenerate the committed API reference.
Add the edited volume Acoustic Waves in Periodic Structures, Metamaterials, and
Porous Media (Jiménez, Umnova and Groby, Eds., 2021, Springer) to the
bibliography page as a metamaterials companion to Cox & D'Antonio.
Mirror the frontmatter and bibliography changes in the Spanish pages with
translated notes, keeping authors, titles and DOIs identical.
Geometry drawings: to-scale device cross-sections for materials (#381)
* Geometry drawings: to-scale device cross-sections for materials
New rendering module with drafting primitives (dimension lines with
extension leaders, material fills, microphone/loudspeaker symbols,
cross-section emblems) and six to-scale drawings:
- Layered absorber stack (porous/air/perforated/MPP/membrane), with
each layer dimensioned and the hole pattern of perforated plates
drawn at its real pitch.
- Square-section Helmholtz resonator.
- One period of the slit metamaterial absorber (slow-sound panel).
- QRD well profile from qrd_well_depths.
- ISO 10534-2 impedance tube and ASTM E2611 transmission tube: side
views at true scale with microphone positions, sample, termination,
cross-section emblem and the plane-wave working range.
API: layer dataclasses and HelmholtzResonator gain .plot();
LayeredAbsorberResult, SlitResonatorAbsorberResult,
DiffuserPolarResponse, ImpedanceTubeResult and TransferMatrix gain
.plot_geometry() with the defining geometry retained on the result
(trailing optional fields, backward compatible); six public
plot_*_geometry functions cover design-time drawing before any
computation. All drawings are bilingual and validate inputs before
touching matplotlib.
24 generated SVG variants, guide embeds (EN/ES and the GitHub
mirrors) with runnable snippets, curated API table rows and generated
API pages, and 16 new tests (smoke, retention round-trips, to-scale
checks, refusal paths for hand-built results).
* Address review: QRD pitch, sequence contract, language and bounds validation
- The drawn N = 7 QRD keeps the published 3.6 m total width: an 85.7 mm
pitch split into an 80.7 mm well plus a 5 mm fin (figure, snippets and
alt texts updated).
- plot_absorber_stack and plot_slit_absorber_geometry normalise any
Sequence, matching their advertised contracts.
- The six module-level renderers validate language and reject
non-positive diameter/sample_thickness before creating any figure;
layer-type dispatch moved ahead of axes creation.
- DiffuserPolarResponse docstring: well_width/periods are always
retained by the predictor; only depths distinguishes the
explicit-reflection path.
* Address static analysis: float comparisons, literal hoist, flat conditionals
- _dim: tolerance-based checks instead of float equality for the span
and the offset.
- Incident-sound label computed once per arrow.
- Tube emblem shape extracted from the nested conditional.
- Exception tests build their fixtures outside pytest.raises.
- Regenerated API page for the DiffuserPolarResponse docstring.