Skip to content

materials.dynamic_stiffness

Dynamic stiffness of resilient materials under floating floors (EN 29052-1:1992).

A floating floor is a heavy floating slab resting on a resilient layer; the combination is a mass-spring system whose natural frequency governs the impact and airborne improvement of the floor. EN 29052-1 (identical to ISO 9052-1:1989) measures the dynamic stiffness per unit area s' of the resilient layer from the resonance of a standard load plate on a 200 mm x 200 mm specimen.

The dynamic stiffness per unit area is the ratio of a dynamic force per area to the resulting change in thickness (Formula 1):

s' = (F / S) / dd [N/m3]

The resiliently supported floor is a mass-spring resonator; its natural frequency (Formula 2) and, in the laboratory arrangement, the measured resonant frequency (Formula 3) are:

f0 = (1 / 2pi) * sqrt(s' / m' ) (installed floor)
fr = (1 / 2pi) * sqrt(s't / m't) (test arrangement)

so the apparent dynamic stiffness follows from the resonance (Formula 4):

s't = 4 * pi**2 * m't * fr**2

With an air-permeable resilient material the enclosed gas adds a parallel stiffness (Formula 7), from the isothermal compression of the pore air:

s'a = p0 / (d * epsilon)

(s'a = 111 / d MN/m3 for p0 = 0,1 MPa, epsilon = 0,9 and d in mm, the standard’s worked NOTE). The dynamic stiffness of the installed material is then obtained by airflow resistivity r (clause 8.2):

r >= 100 kPa.s/m2 s' = s't (Formula 5)
10 <= r < 100 kPa.s/m2 s' = s't + s'a (Formula 6)
r < 10 kPa.s/m2 s'a from Formula 7; the method only applies when
s't >> s'a, otherwise s' cannot be resolved.

This module is the resilient-layer characterisation feeding the floating-floor term of the EN 12354-2 impact model (phonometry.building.building_prediction). It does not feed ISO 16251-1 (phonometry.building.floor_covering_improvement), whose scope is limited to soft, locally-reacting floor coverings; floating floors are explicitly excluded there.

Auto-generated from the source docstrings by scripts/generate_api_docs.py (make api-docs). Do not edit by hand.

apparent_dynamic_stiffness(
resonant_frequency: ArrayLike,
total_mass_per_area: float,
) -> np.ndarray | float

Apparent dynamic stiffness per unit area s't (Formula 4).

Inverts the test resonance fr = (1/2pi) sqrt(s't/m't) to s't = 4 pi**2 m't fr**2.

Parameters

NameDescription
resonant_frequencyExtrapolated resonant frequency fr, in hertz (scalar or array).
total_mass_per_areaTotal mass per unit area used during the test m't, in kg/m2 (the load plate plus fittings over the 0,04 m2 specimen; the standard’s plate gives m't = 8 kg / 0,04 m2 = 200 kg/m2).

Returns: The apparent dynamic stiffness per unit area s't, in N/m3 (numerically MN/m3 when divided by 1e6).

DynamicStiffnessResult(
apparent_stiffness: float,
gas_stiffness: float,
dynamic_stiffness: float,
resonant_frequency: float,
floor_mass_per_area: float,
natural_frequency: float,
)

Dynamic stiffness of a resilient layer and the floating-floor resonance.

Attributes

NameDescription
apparent_stiffnessApparent dynamic stiffness s't, in N/m3.
gas_stiffnessEnclosed-gas dynamic stiffness s'a, in N/m3.
dynamic_stiffnessInstalled dynamic stiffness s', in N/m3.
resonant_frequencyMeasured test resonant frequency fr, in hertz.
floor_mass_per_areaSupported-floor mass per unit area m', kg/m2.
natural_frequencyInstalled-floor natural frequency f0, in hertz.
DynamicStiffnessResult.plot(
ax: Axes | None = None,
*,
language: str = 'en',
**kwargs: Any,
) -> Axes

Plot f0(s') with this design point marked.

Requires matplotlib (pip install phonometry[plot]); returns the Axes.

DynamicStiffnessResult.report(
path: str,
*,
metadata: ReportMetadata | None = None,
engine: str = 'reportlab',
verbose: bool = False,
language: str = 'en',
) -> str

Render an EN 29052-1 dynamic-stiffness test-report fiche to a PDF.

Writes a one-page accredited dynamic-stiffness report (EN 29052-1:1992, identical to ISO 9052-1:1989): the standard-basis line, an optional metadata header block (client, specimen, the total mass per unit area m't used during the test, the loaded specimen thickness d, test facility, date, climate …), a two-panel body with a compact metrics table (the resonant frequency fr, the apparent dynamic stiffness s't of Formula 4, the enclosed-gas term s'a of Formula 7 when it applies, the installed dynamic stiffness s' of Clause 8.2 and the supported-floor natural frequency f0 of Formula 2) beside the f0(s') design curve, a boxed apparent dynamic stiffness s't with the installed s' and the resonance fr alongside, and a footer with the fixed disclaimer. EN 29052-1 is a characterisation, so there is no pass/fail verdict.

Clause 9 requires every dynamic stiffness per unit area to be stated in meganewtons per cubic metre to the nearest meganewton per cubic metre, so the stiffness values are rounded to the nearest MN/m3; the frequencies are shown to 0,1 Hz.

Parameters

NameDescription
pathDestination path of the PDF file.
metadataOptional ReportMetadata; None produces a body-and-disclaimer fiche. The applicable descriptive fields are client, manufacturer, specimen, mass_per_area (the total mass per unit area m't), thickness (the loaded 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 (EN 29052-1 has no verdict).
engineRendering back end; only "reportlab" is supported.
verboseAccepted for a uniform .report() signature; the dynamic-stiffness fiche has a single body layout, so it has no effect.
languageFiche language: "en" (default, English, decimal point) or "es" (Spanish, decimal comma).

Returns: The written path as a str.

Raises

ExceptionWhen
ValueErrorIf engine is not "reportlab".
ImportErrorIf reportlab or matplotlib is not installed. The fiche always embeds the f0(s') design curve, so both are required (pip install "phonometry[report,plot]").

Advisory when the enclosed-gas term makes s' unresolvable (clause 8.2).

enclosed_gas_stiffness(
thickness: ArrayLike,
porosity: float,
*,
atmospheric_pressure: float = 100000.0,
) -> np.ndarray | float

Enclosed-gas dynamic stiffness per unit area s'a (Formula 7).

The isothermal compression of the pore air adds a stiffness in parallel with the material’s structure: s'a = p0 / (d * epsilon).

Parameters

NameDescription
thicknessThickness d of the specimen under the static load, in metres (scalar or array).
porosityPorosity epsilon of the specimen (0-1).
atmospheric_pressureAtmospheric pressure p0, in pascals (default STANDARD_ATMOSPHERIC_PRESSURE, the standard’s 0,1 MPa).

Returns: The enclosed-gas dynamic stiffness per unit area s'a, in N/m3.

floating_floor_resonance(
resonant_frequency: float,
total_mass_per_area: float,
floor_mass_per_area: float,
*,
airflow_resistivity: float = inf,
thickness: float | None = None,
porosity: float | None = None,
atmospheric_pressure: float = 100000.0,
) -> DynamicStiffnessResult

Full EN 29052-1 chain: measured resonance -> installed s' and f0.

Chains the apparent dynamic stiffness (Formula 4), the enclosed-gas term (Formula 7, when thickness and porosity are given), the airflow resistivity combination (clause 8.2) and the installed-floor natural frequency (Formula 2).

Parameters

NameDescription
resonant_frequencyMeasured resonant frequency fr, in hertz.
total_mass_per_areaTest total mass per unit area m't, kg/m2.
floor_mass_per_areaSupported-floor mass per unit area m', kg/m2.
airflow_resistivityLateral airflow resistivity r, in kPa.s/m2 (default inf -> the high-resistivity case s' = s't).
thicknessSpecimen thickness d under load, in metres (required for the enclosed-gas term when r < 100 kPa.s/m2).
porositySpecimen porosity epsilon (required with thickness).
atmospheric_pressureAtmospheric pressure p0, in pascals.

Returns: The DynamicStiffnessResult.

installed_dynamic_stiffness(
apparent_stiffness: float,
airflow_resistivity: float,
*,
gas_stiffness: float = 0.0,
) -> float

Dynamic stiffness per unit area s' of the installed material (clause 8.2).

Combines the apparent stiffness with the enclosed-gas term according to the lateral airflow resistivity r:

  • r >= 100 kPa.s/m2 -> s' = s't (Formula 5);
  • 10 <= r < 100 kPa.s/m2 -> s' = s't + s'a (Formula 6);
  • r < 10 kPa.s/m2 -> the standard only requires the qualitative criterion s't >> s'a (clause 8.2). This implementation applies its own engineering threshold: s'a below 10 % of s't is treated as negligible and s' = s't (a DynamicStiffnessWarning is emitted; clause 8.2 requires the error caused by disregarding s'a to be stated in the test report); above it the result is nan, as the method cannot resolve s'.

Parameters

NameDescription
apparent_stiffnessApparent dynamic stiffness s't, in N/m3.
airflow_resistivityLateral airflow resistivity r, in kPa.s/m2 (ISO 9053).
gas_stiffnessEnclosed-gas dynamic stiffness s'a, in N/m3 (see enclosed_gas_stiffness); needed for r < 100 kPa.s/m2.

Returns: The installed dynamic stiffness per unit area s', in N/m3 (nan when the method cannot resolve it).

natural_frequency(
dynamic_stiffness: ArrayLike,
mass_per_area: float,
) -> np.ndarray | float

Natural frequency f0 of the resiliently supported floor (Formula 2).

f0 = (1 / 2pi) sqrt(s' / m').

Parameters

NameDescription
dynamic_stiffnessDynamic stiffness per unit area s', in N/m3 (scalar or array).
mass_per_areaMass per unit area of the supported floor m', in kg/m2.

Returns: The natural frequency f0, in hertz.

Created and maintained by· GitHub· PyPI· All projects