materials.airflow_resistance
Airflow resistance of porous materials: ISO 9053-1 and ISO 9053-2.
Two standardised measurement methods share the same three quantities and units (ISO 9053-1:2018, Clause 3; ISO 9053-2:2020, Clause 3):
- Airflow resistance
R = dp / q_vin Pa*s/m3, withdpthe air pressure difference across the specimen (Pa) andq_vthe volumetric airflow rate through it (m3/s) (ISO 9053-1:2018, 3.1). - Specific airflow resistance
R_s = R * Ain Pa*s/m (not Pa*s/m2), withAthe cross-sectional area of the specimen perpendicular to the flow (m2) (ISO 9053-1:2018, 3.2). EquivalentlyR_s = dp / uwithuthe linear airflow velocity, sinceu = q_v / A. - Airflow resistivity
sigma = R_s / din Pa*s/m2, withdthe specimen thickness in the flow direction (m), for homogeneous materials (ISO 9053-1:2018, 3.3). Equivalentlysigma = R * A / d.
The linear airflow velocity is u = q_v / A (ISO 9053-1:2018, 3.4).
Static (DC) method, ISO 9053-1:2018. A steady unidirectional flow in the
laminar regime is used. The recommended reference linear airflow velocity is
u = 0.5e-3 m/s (0.5 mm/s, clause 7.5); if measured stepwise the highest
velocity shall not exceed 15e-3 m/s (15 mm/s), beyond which the flow may be
non-linear. When measured stepwise the pressure difference is plotted against
u and fitted with a regression of at least second order constrained through
the origin, dp = a*u + b*u**2; dp and R_s are then evaluated at
u = 0.5e-3 m/s (clause 7.5). Because R_s = dp / u = a + b*u, the linear
coefficient a is the zero-velocity specific airflow resistance.
Alternating (AC) method, ISO 9053-2:2020. A sinusoidally moving piston (frequency 1 Hz to 4 Hz, typically 2 Hz; clause 6.2) drives an alternating volume flow into an air cavity terminated either by the specimen or by an airtight termination. The airflow resistance follows from the sound-pressure-level difference between the two terminations (ISO 9053-2:2020, Formula (2), 8.7):
R = kappa' * P_S / (2*pi*f*V) * (h_t/h_s) * 10**((L_ps - L_pt)/20)with kappa' the effective ratio of specific heats for air (Annex A),
P_S the static (atmospheric) pressure (Pa), f the piston frequency (Hz),
V the cavity volume with the airtight termination (m3), h_t/h_s the
piston stroke amplitudes with the airtight termination / specimen cell, and
L_ps/L_pt the cavity sound pressure levels with the specimen /
airtight termination (dB). Only the level difference enters, so the sound level
device needs no absolute calibration (clause 8.7). The RMS piston volume flow is
q_v = 2*pi*f*h*A_P (ISO 9053-2:2020, 6.2), with h the stroke amplitude
and A_P the piston cross-sectional area.
The effective ratio of specific heats kappa' accounts for heat conduction
between the oscillating air and the cavity walls, which makes the compression not
fully adiabatic. ISO 9053-2:2020 Annex A (normative) gives its evaluation from the
cavity geometry and air properties (effective_kappa, Formula (A.7)); the
Annex A.3 worked example yields kappa' = 1.370 (about 2 % below the adiabatic
kappa = 1.4008). When no cavity/air data are supplied,
alternating_airflow_resistance falls back to the uncorrected adiabatic
value kappa = 1.4 (Formula (A.1)); for a conforming result compute kappa'
per Annex A and pass it explicitly.
Neither part defines a temperature/atmospheric normalisation of the result.
Auto-generated from the source docstrings by
scripts/generate_api_docs.py(make api-docs). Do not edit by hand.
airflow_resistance
Section titled “airflow_resistance”airflow_resistance(pressure_drop: float, volume_flow_rate: float) -> floatAirflow resistance R = dp / q_v (ISO 9053-1:2018, 3.1).
pressure_drop is the pressure difference dp across the specimen (Pa)
and volume_flow_rate is the volumetric airflow rate q_v (m3/s).
Returns R in Pa*s/m3.
airflow_resistivity
Section titled “airflow_resistivity”airflow_resistivity(specific_resistance: float, thickness: float) -> floatAirflow resistivity sigma = R_s / d in Pa*s/m2 (ISO 9053-1:2018, 3.3).
specific_resistance is R_s (Pa*s/m) and thickness is d (m),
the specimen thickness in the flow direction. Returns sigma in Pa*s/m2.
AirflowResistanceWarning
Section titled “AirflowResistanceWarning”Advisory for out-of-range or non-conforming ISO 9053 airflow inputs.
alternating_airflow_resistance
Section titled “alternating_airflow_resistance”alternating_airflow_resistance( level_specimen: float, level_termination: float, *, piston_stroke_specimen: float, piston_stroke_termination: float, frequency: float, cavity_volume: float, static_pressure: float = 101325.0, kappa_prime: float = 1.4, background_level: float | None = None,) -> floatAlternating-method airflow resistance (ISO 9053-2:2020, Formula (2), 8.7).
Implements:
R = kappa' * P_S / (2*pi*f*V) * (h_t/h_s) * 10**((L_ps - L_pt)/20)level_specimen (L_ps) and level_termination (L_pt) are the
cavity sound pressure levels (dB) with the specimen cell and the airtight
termination; piston_stroke_specimen (h_s) and
piston_stroke_termination (h_t) the corresponding stroke amplitudes
(m); frequency the piston frequency f (Hz, 1-4 Hz); cavity_volume
the airtight-termination cavity volume V (m3); static_pressure the
atmospheric pressure P_S (Pa, default 101325); kappa_prime the
effective ratio of specific heats kappa'; background_level the optional
cavity background level L_pb (dB) for the Formula (4) check. Returns R in
Pa*s/m3.
kappa_prime defaults to the uncorrected adiabatic kappa = 1.4
(Formula (A.1)). For a result conforming to the normative Annex A, compute the
heat-conduction-corrected kappa' with effective_kappa from the cavity
geometry and pass it here (the Annex A.3 example gives kappa' = 1.370).
Emits AirflowResistanceWarning when the piston frequency is outside
1-4 Hz or when the Formula (3)/(4) validity criteria are not met.
effective_kappa
Section titled “effective_kappa”effective_kappa( cavity_surface: float, cavity_volume: float, frequency: float, *, speed_of_sound: float = 345.9, air_density: float = 1.186, specific_heat_ratio: float = 1.4008, specific_heat_cp: float = 938.7, thermal_conductivity: float = 0.02355,) -> floatEffective ratio of specific heats kappa' (ISO 9053-2:2020, Annex A, Formula (A.7)).
Heat conduction between the oscillating air and the cavity walls makes the
compression not fully adiabatic, lowering kappa to:
kappa' = kappa / sqrt(1 + (kappa-1)*(S/V)*b + 0.5*((kappa-1)*(S/V)*b)**2) (A.7)with b the thermal boundary-layer thickness (Formulae (A.4)/(A.5),
thermal_boundary_layer_thickness), S the total internal surface area
of the air cavity (m2) and V its volume (m3).
cavity_surface is S (m2), cavity_volume V (m3) and frequency
the piston frequency f (Hz); specific_heat_ratio kappa (adiabatic) and
the remaining air properties default to the ISO 9053-2:2020 Annex A.3 values.
Returns the dimensionless kappa' for use in
alternating_airflow_resistance; the Annex A.3 worked example
(S = 0.0471 m2, V = 7.854e-4 m3, f = 2 Hz) yields kappa' = 1.370.
linear_airflow_velocity
Section titled “linear_airflow_velocity”linear_airflow_velocity(volume_flow_rate: float, area: float) -> floatLinear airflow velocity u = q_v / A (ISO 9053-1:2018, 3.4).
volume_flow_rate is q_v (m3/s) and area is A (m2); returns
u in m/s.
piston_volume_flow_rate
Section titled “piston_volume_flow_rate”piston_volume_flow_rate( frequency: float, stroke_amplitude: float, piston_area: float,) -> floatRMS piston volume flow q_v = 2*pi*f*h*A_P (ISO 9053-2:2020, 6.2).
frequency is the piston frequency f (Hz), stroke_amplitude the
stroke amplitude h (m) and piston_area the piston cross-section
A_P (m2). Returns q_v in m3/s.
specific_airflow_resistance
Section titled “specific_airflow_resistance”specific_airflow_resistance( resistance: float | None = None, area: float | None = None, *, pressure_drop: float | None = None, velocity: float | None = None,) -> floatSpecific airflow resistance R_s in Pa*s/m (ISO 9053-1:2018, 3.2).
Two equivalent routes are accepted; supply exactly one:
resistance(R, Pa*s/m3) andarea(A, m2):R_s = R * A.pressure_drop(dp, Pa) andvelocity(u, m/s):R_s = dp/u(fromR_s = R*Awithu = q_v/A).
The unit is pascal second per metre (Pa*s/m), not Pa*s/m2.
static_airflow_resistance
Section titled “static_airflow_resistance”static_airflow_resistance( velocities: ArrayLike, pressure_drops: ArrayLike, area: float, thickness: float | None = None, *, evaluation_velocity: float = 0.0005,) -> StaticAirflowResultStepwise static-method airflow resistance (ISO 9053-1:2018, clause 7.5).
Fits the measured pressure difference against the linear airflow velocity with
a second-order regression constrained through the origin,
dp = a*u + b*u**2, and evaluates the resistances at
evaluation_velocity (the clause 7.5 reference 0.5e-3 m/s by default).
velocities are the linear airflow velocities u (m/s) and
pressure_drops the matching pressure differences dp (Pa) of at least
two measurement steps; area is the cross-section A (m2) and
thickness the specimen thickness d (m, optional, enabling sigma).
Because R_s = dp/u = a + b*u, the returned linear_coefficient a is
the zero-velocity specific airflow resistance. A velocity above the clause 7.5
upper limit (15 mm/s) raises AirflowResistanceWarning.
StaticAirflowResult
Section titled “StaticAirflowResult”StaticAirflowResult( resistance: float, specific_resistance: float, resistivity: float | None, evaluation_velocity: float, pressure_drop: float, linear_coefficient: float, quadratic_coefficient: float,)Result of an ISO 9053-1:2018 stepwise (static-method) determination.
resistance (R, Pa*s/m3), specific_resistance (R_s, Pa*s/m) and
resistivity (sigma, Pa*s/m2; None when no thickness is supplied)
are evaluated at evaluation_velocity (m/s, the ISO 9053-1 clause 7.5
reference 0.5 mm/s by default). linear_coefficient (a) and
quadratic_coefficient (b) are the through-origin fit
dp = a*u + b*u**2 (clause 7.5); a is the zero-velocity specific
airflow resistance (Pa*s/m). pressure_drop is the fitted dp at
evaluation_velocity (Pa).
StaticAirflowResult.plot()
Section titled “StaticAirflowResult.plot()”StaticAirflowResult.plot( ax: Axes | None = None, *, language: str = 'en', **kwargs: Any,) -> AxesPlot the fitted dp(u) curve with the evaluation point.
Requires matplotlib (pip install phonometry[plot]); returns the
Axes.
StaticAirflowResult.report()
Section titled “StaticAirflowResult.report()”StaticAirflowResult.report( path: str, *, metadata: ReportMetadata | None = None, engine: str = 'reportlab', verbose: bool = False, language: str = 'en',) -> strRender an ISO 9053-1 static airflow-resistance test-report fiche to a PDF.
Writes a one-page accredited airflow-resistance report
(ISO 9053-1:2018, static/direct airflow method): the standard-basis
line, an optional metadata header block (client, manufacturer,
specimen, the specimen thickness d, test facility, date, climate
…), a two-panel body with a compact metrics table (the evaluation
velocity, the fitted pressure difference dp, the airflow resistance
R, the specific airflow resistance R_s, the airflow resistivity
sigma when a thickness is available, and the through-origin fit
coefficients a and b) beside the fitted dp(u) curve, a boxed
specific airflow resistance R_s with the airflow resistance R
and the resistivity sigma alongside, and a footer with the fixed
disclaimer. ISO 9053-1 is a material characterisation, so there is no
pass/fail verdict.
The clause 7.5 stepwise procedure fits dp = a*u + b*u**2 through the
origin and evaluates the resistances at the reference velocity
u = 0.5 mm/s; the linear coefficient a is the zero-velocity
specific airflow resistance. Resistance quantities are printed to the
nearest whole Pa*s unit and the evaluation velocity to one decimal
place (mm/s).
Parameters
| Name | Description |
|---|---|
path | Destination path of the PDF file. |
metadata | Optional ReportMetadata; None produces a body-and-disclaimer fiche. The applicable descriptive fields are client, manufacturer, specimen, thickness (the specimen thickness d, in metres, shown in millimetres), test_room, test_date, temperature, relative_humidity, measurement_standard, laboratory, operator, report_id and notes. The requirement field is ignored (ISO 9053-1 has no verdict). |
engine | Rendering back end; only "reportlab" is supported. |
verbose | Accepted for a uniform .report() signature; the airflow-resistance fiche has a single body layout, so it has no effect. |
language | Fiche language: "en" (default, English, decimal point) or "es" (Spanish, decimal comma). |
Returns: The written path as a str.
Raises
| Exception | When |
|---|---|
| ValueError | If engine is not "reportlab". |
| ImportError | If reportlab or matplotlib is not installed. The fiche always embeds the fitted dp(u) curve, so both are required (pip install "phonometry[report,plot]"). |
thermal_boundary_layer_thickness
Section titled “thermal_boundary_layer_thickness”thermal_boundary_layer_thickness( frequency: float, *, speed_of_sound: float = 345.9, air_density: float = 1.186, specific_heat_cp: float = 938.7, thermal_conductivity: float = 0.02355,) -> floatThermal boundary-layer thickness b (ISO 9053-2:2020, Formulae (A.4)/(A.5)).
l_h = k_a / (rho0 * c0 * C_P) (A.5)b = sqrt(2 * c0 * l_h / omega) (A.4), omega = 2*pi*ffrequency is the piston frequency f (Hz); speed_of_sound c0 (m/s),
air_density rho0 (kg/m3), specific_heat_cp C_P (J/(kg*K)) and
thermal_conductivity k_a (J/(s*m*K)) are air properties, defaulting to the
IEC 61094-2:2009 values used in ISO 9053-2:2020 Annex A.3. Returns b in metres;
with the Annex A.3 example (f = 2 Hz) this is 1.83e-3 m.