Thermal Buckling (structures/thermal-structures/thermal-buckling)
Use when the task is the thermal buckling of a restrained aerospace
structure: a skin panel or column whose free expansion is blocked, so a
temperature rise builds an in-plane compressive load that can buckle
the member at a critical temperature. This leaf computes the elastic
buckling stress of a flat plate under uniform compression, the
compressive stress developed by a constrained temperature change under
uniaxial or biaxial restraint, the critical temperature rise that
drives a plate or an Euler column to buckling, and the resulting
margin. The logic module is pure Python standard library (no numpy, no
FEA software) and deterministic. Units are SI: E in Pa, alpha in 1/K,
thickness, width and lengths in m, stresses in Pa, temperature rise in
K. It pairs with structures/thermal-structures/thermal-stress-analysis
for fully constrained and bimetallic members and with
structures/fem/plate-buckling for mechanically loaded plates.
Domain quick reference
Plate flexural rigidity:
D = E * t**3 / (12 * (1 - nu**2))
Elastic buckling stress of a flat plate under uniform compression
(long simply supported plate):
sigma_cr = k * pi**2 * D / (b**2 * t)
with b the loaded-width direction dimension and the edge condition
coefficient k = 4.0 for a long plate simply supported on all edges.
The plate buckles when the compressive stress reaches sigma_cr.
Compressive stress from a restrained temperature rise. Free thermal
strain alpha * dT is blocked, so the restraint converts it into
stress. Uniaxial restraint:
sigma = E * alpha * dT
Biaxial restraint (restraint in both in-plane directions):
sigma = E * alpha * dT / (1 - nu)
Critical temperature rise of a restrained plate: set the thermal
stress equal to sigma_cr and solve for dT. Uniaxial:
dT_cr = sigma_cr / (E * alpha)
Biaxial:
dT_cr = sigma_cr * (1 - nu) / (E * alpha)
Euler column between rigid supports: the axial thermal load is
P = alpha * E * A * dT and buckling occurs at P_cr = pi2 * E * I /
L_eff2. With I = A * r**2 the area and modulus cancel:
dT_cr = pi**2 * r**2 / (alpha * L_eff**2)
Margin of a hot panel: margin = sigma_cr / sigma_thermal - 1.
Positive means the panel is safe at that temperature rise; the sign
flips when the rise exceeds the critical value.
FAR 25 frames the airframe strength context; the relations above are
standard engineering methodology, summary-only.
Workflow
- Fix the material and geometry: elastic_modulus E, poisson nu,
coefficient alpha, plate thickness t and width b, or column
effective_length L_eff and radius_of_gyration r.
- Compute the plate elastic buckling stress with
plate_buckling_stress (k_coefficient defaults to 4.0).
- Compute the compressive stress developed at the operating
temperature rise: thermal_stress_uniaxial for restraint in one
direction or thermal_stress_biaxial when both in-plane directions
are blocked.
- Find the temperature rise that buckles the panel with
critical_temp_plate, passing restraint = "uniaxial" or "biaxial";
for a column between rigid supports use column_critical_temp.
- Run the full check with thermal_buckling_assessment, which returns
buckling_stress_Pa, thermal_stress_Pa, critical_temp_rise_K and the
margin in one dict.
- Read the margin: positive margin means the rise is below the
critical value, negative means the panel buckles.
- Confirm the deterministic checks with the contract test
scripts/test_thermal_buckling.py.
Worked example
Aluminum skin panel: E = 72 GPa, nu = 0.33, alpha = 23e-6 /K,
t = 1.6 mm, b = 150 mm, k = 4.0, uniaxial restraint.
- Plate buckling stress: sigma_cr = 30.24 MPa (30.244 MPa, inside the
25 to 40 MPa band of the hand estimate).
- Compressive stress at dT = 10 K: E * alpha * dT = 72e9 * 23e-6 * 10
= 1.656e7 Pa exactly (16.56 MPa).
- Critical temperature rise: uniaxial 18.26 K; biaxial
18.26 * (1 - 0.33) = 12.24 K, ratio exactly 0.67. Both inside the
15 to 25 K band for the uniaxial case.
- Margin at dT = 10 K: 30.24 / 16.56 - 1 = +0.83, panel safe. At
dT = 30 K: 30.24 / 49.68 - 1 = -0.39, panel buckles.
- Euler column (steel, alpha = 12e-6 /K, r = 25 mm, L_eff = 2.0 m):
dT_cr = pi2 * 0.0252 / (12e-6 * 2.0**2) = 128.5 K (110 to 150 K
band).
Pitfalls
- Forgetting the restraint: thermal strain only becomes stress when
the free expansion is blocked; an unrestrained panel heats without
building load, so the uniaxial versus biaxial restraint choice is
the physics, not a detail.
- Confusing the biaxial factor: biaxial restraint raises the stress
by 1/(1 - nu) over the uniaxial case, so the biaxial critical rise
is LOWER (12.24 K vs 18.26 K, ratio 0.67 exactly in the worked
example) - blocking both directions makes the panel buckle sooner.
- Applying the k = 4.0 plate factor to other edge conditions: the
buckling stress uses k = 4.0 for a long plate simply supported on
all edges; other edge conditions carry other k coefficients and
belong with the mechanical plate-buckling leaf.
- Checking the stress but not the margin sign: the thermal margin is
sigma_cr / sigma_thermal - 1, positive below the critical rise and
negative above (dT = 10 K gives +0.83, dT = 30 K gives -0.39 in
the worked example); a positive stress is not the same as a safe
panel.
- Reading the Euler column as plate-dependent: the column critical
rise dT_cr = pi^2 r^2 / (alpha L_eff^2) is independent of the
modulus because the area cancels - passing a stiffer material does
not raise the column's critical temperature.
- Feeding non-physical inputs: non-positive modulus, thickness,
width, length or k, poisson outside (-1, 0.5), alpha of zero in
the critical-rise functions, a negative rise and invalid restraint
strings all raise ValueError.
Verification
- Confirm plate_buckling_stress(72e9, 0.33, 1.6e-3, 0.150) returns
3.024e7 Pa, inside 25 to 40 MPa.
- Confirm thermal_stress_uniaxial(72e9, 23e-6, 10.0) returns exactly
1.656e7 Pa.
- Confirm critical_temp_plate returns 18.26 K uniaxial and that the
biaxial value divided by the uniaxial value equals 0.67 within 1e-9
relative.
- Confirm column_critical_temp(200e9, 12e-6, 2.0, 0.025) returns
128.5 K and is independent of the modulus.
- Confirm the round trip: the thermal stress evaluated at the critical
temperature rise equals the plate buckling stress.
- Confirm every non-positive modulus, thickness, width, length,
k_coefficient, every poisson outside (-1, 0.5), alpha of zero in the
critical rise functions, a negative temperature rise, an invalid
restraint string, and a zero rise in the assessment raise ValueError.
- Run the contract test offline: python3
scripts/test_thermal_buckling.py (35 tests, deterministic).
Related leaves
- structures/thermal-structures/thermal-stress-analysis: constrained
thermal stress of fully restrained members, bimetallic strips and
their curvature; the companion leaf for members that do not buckle.
- structures/fem/plate-buckling: plate buckling under applied
mechanical compression or shear with edge condition k coefficients.
- structures/materials/creep-rupture: material response limits for hot
structure beyond elastic behavior.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_thermal_buckling.py
The test covers the worked-example anchors (plate buckling stress
30.24 MPa in the 25 to 40 MPa band, exact 1.656e7 Pa thermal stress at
dT = 10 K, critical temperature rise 18.26 K in the 15 to 25 K band,
uniaxial-to-biaxial ratio 0.67, column 128.5 K in the 110 to 150 K
band), the scaling identities of each closed-form relation, the
round-trip identity between thermal stress at the critical rise and the
buckling stress, positive and negative margin sign cases, determinism,
and ValueError rejection of every non-physical input listed above.
Compliance
- Standards referenced, not reproduced: FAR 25 (airframe strength) is
referenced by name only; the thermal buckling relations above are
standard engineering methodology, summary-only per standards-map.yaml.
- compliance: STANDARDS-REF, gated: false.
1---2name: thermal-buckling3description: Use when you must compute the thermal buckling of restrained aerospace structure from a temperature rise: the elastic buckling stress of a uniformly compressed flat plate, the compressive stress built by a constrained temperature change under uniaxial or biaxial restraint, the critical-temperature-rise that drives a skin panel to its buckling stress, and the critical-temperature-rise of an Euler column between rigid supports. Produces the buckling stress, the compressive stress at a given rise, and the critical temperature rise, plus the thermal-buckling-margin that gates a thermal-stability check. Trigger: thermal-buckling, critical-temperature-rise, restrained-temperature, thermal-buckling-margin, skin panel, hot structure, Euler column.4license: Apache-2.05---67# Thermal Buckling (structures/thermal-structures/thermal-buckling)89Use when the task is the thermal buckling of a restrained aerospace10structure: a skin panel or column whose free expansion is blocked, so a11temperature rise builds an in-plane compressive load that can buckle12the member at a critical temperature. This leaf computes the elastic13buckling stress of a flat plate under uniform compression, the14compressive stress developed by a constrained temperature change under15uniaxial or biaxial restraint, the critical temperature rise that16drives a plate or an Euler column to buckling, and the resulting17margin. The logic module is pure Python standard library (no numpy, no18FEA software) and deterministic. Units are SI: E in Pa, alpha in 1/K,19thickness, width and lengths in m, stresses in Pa, temperature rise in20K. It pairs with structures/thermal-structures/thermal-stress-analysis21for fully constrained and bimetallic members and with22structures/fem/plate-buckling for mechanically loaded plates.2324## Domain quick reference2526- Plate flexural rigidity:2728 D = E * t**3 / (12 * (1 - nu**2))2930- Elastic buckling stress of a flat plate under uniform compression31 (long simply supported plate):3233 sigma_cr = k * pi**2 * D / (b**2 * t)3435 with b the loaded-width direction dimension and the edge condition36 coefficient k = 4.0 for a long plate simply supported on all edges.37 The plate buckles when the compressive stress reaches sigma_cr.3839- Compressive stress from a restrained temperature rise. Free thermal40 strain alpha * dT is blocked, so the restraint converts it into41 stress. Uniaxial restraint:4243 sigma = E * alpha * dT4445 Biaxial restraint (restraint in both in-plane directions):4647 sigma = E * alpha * dT / (1 - nu)4849- Critical temperature rise of a restrained plate: set the thermal50 stress equal to sigma_cr and solve for dT. Uniaxial:5152 dT_cr = sigma_cr / (E * alpha)5354 Biaxial:5556 dT_cr = sigma_cr * (1 - nu) / (E * alpha)5758- Euler column between rigid supports: the axial thermal load is59 P = alpha * E * A * dT and buckling occurs at P_cr = pi**2 * E * I /60 L_eff**2. With I = A * r**2 the area and modulus cancel:6162 dT_cr = pi**2 * r**2 / (alpha * L_eff**2)6364- Margin of a hot panel: margin = sigma_cr / sigma_thermal - 1.65 Positive means the panel is safe at that temperature rise; the sign66 flips when the rise exceeds the critical value.6768- FAR 25 frames the airframe strength context; the relations above are69 standard engineering methodology, summary-only.7071## Workflow72731. Fix the material and geometry: elastic_modulus E, poisson nu,74 coefficient alpha, plate thickness t and width b, or column75 effective_length L_eff and radius_of_gyration r.762. Compute the plate elastic buckling stress with77 plate_buckling_stress (k_coefficient defaults to 4.0).783. Compute the compressive stress developed at the operating79 temperature rise: thermal_stress_uniaxial for restraint in one80 direction or thermal_stress_biaxial when both in-plane directions81 are blocked.824. Find the temperature rise that buckles the panel with83 critical_temp_plate, passing restraint = "uniaxial" or "biaxial";84 for a column between rigid supports use column_critical_temp.855. Run the full check with thermal_buckling_assessment, which returns86 buckling_stress_Pa, thermal_stress_Pa, critical_temp_rise_K and the87 margin in one dict.886. Read the margin: positive margin means the rise is below the89 critical value, negative means the panel buckles.907. Confirm the deterministic checks with the contract test91 scripts/test_thermal_buckling.py.9293## Worked example9495Aluminum skin panel: E = 72 GPa, nu = 0.33, alpha = 23e-6 /K,96t = 1.6 mm, b = 150 mm, k = 4.0, uniaxial restraint.9798- Plate buckling stress: sigma_cr = 30.24 MPa (30.244 MPa, inside the99 25 to 40 MPa band of the hand estimate).100- Compressive stress at dT = 10 K: E * alpha * dT = 72e9 * 23e-6 * 10101 = 1.656e7 Pa exactly (16.56 MPa).102- Critical temperature rise: uniaxial 18.26 K; biaxial103 18.26 * (1 - 0.33) = 12.24 K, ratio exactly 0.67. Both inside the104 15 to 25 K band for the uniaxial case.105- Margin at dT = 10 K: 30.24 / 16.56 - 1 = +0.83, panel safe. At106 dT = 30 K: 30.24 / 49.68 - 1 = -0.39, panel buckles.107- Euler column (steel, alpha = 12e-6 /K, r = 25 mm, L_eff = 2.0 m):108 dT_cr = pi**2 * 0.025**2 / (12e-6 * 2.0**2) = 128.5 K (110 to 150 K109 band).110111112## Pitfalls113114- Forgetting the restraint: thermal strain only becomes stress when115 the free expansion is blocked; an unrestrained panel heats without116 building load, so the uniaxial versus biaxial restraint choice is117 the physics, not a detail.118- Confusing the biaxial factor: biaxial restraint raises the stress119 by 1/(1 - nu) over the uniaxial case, so the biaxial critical rise120 is LOWER (12.24 K vs 18.26 K, ratio 0.67 exactly in the worked121 example) - blocking both directions makes the panel buckle sooner.122- Applying the k = 4.0 plate factor to other edge conditions: the123 buckling stress uses k = 4.0 for a long plate simply supported on124 all edges; other edge conditions carry other k coefficients and125 belong with the mechanical plate-buckling leaf.126- Checking the stress but not the margin sign: the thermal margin is127 sigma_cr / sigma_thermal - 1, positive below the critical rise and128 negative above (dT = 10 K gives +0.83, dT = 30 K gives -0.39 in129 the worked example); a positive stress is not the same as a safe130 panel.131- Reading the Euler column as plate-dependent: the column critical132 rise dT_cr = pi^2 r^2 / (alpha L_eff^2) is independent of the133 modulus because the area cancels - passing a stiffer material does134 not raise the column's critical temperature.135- Feeding non-physical inputs: non-positive modulus, thickness,136 width, length or k, poisson outside (-1, 0.5), alpha of zero in137 the critical-rise functions, a negative rise and invalid restraint138 strings all raise ValueError.139## Verification140141- Confirm plate_buckling_stress(72e9, 0.33, 1.6e-3, 0.150) returns142 3.024e7 Pa, inside 25 to 40 MPa.143- Confirm thermal_stress_uniaxial(72e9, 23e-6, 10.0) returns exactly144 1.656e7 Pa.145- Confirm critical_temp_plate returns 18.26 K uniaxial and that the146 biaxial value divided by the uniaxial value equals 0.67 within 1e-9147 relative.148- Confirm column_critical_temp(200e9, 12e-6, 2.0, 0.025) returns149 128.5 K and is independent of the modulus.150- Confirm the round trip: the thermal stress evaluated at the critical151 temperature rise equals the plate buckling stress.152- Confirm every non-positive modulus, thickness, width, length,153 k_coefficient, every poisson outside (-1, 0.5), alpha of zero in the154 critical rise functions, a negative temperature rise, an invalid155 restraint string, and a zero rise in the assessment raise ValueError.156- Run the contract test offline: python3157 scripts/test_thermal_buckling.py (35 tests, deterministic).158159## Related leaves160161- structures/thermal-structures/thermal-stress-analysis: constrained162 thermal stress of fully restrained members, bimetallic strips and163 their curvature; the companion leaf for members that do not buckle.164- structures/fem/plate-buckling: plate buckling under applied165 mechanical compression or shear with edge condition k coefficients.166- structures/materials/creep-rupture: material response limits for hot167 structure beyond elastic behavior.168169## Behavior contract (gate 3)170171Run the deterministic contract test (stdlib unittest, offline):172173 python3 scripts/test_thermal_buckling.py174175The test covers the worked-example anchors (plate buckling stress17630.24 MPa in the 25 to 40 MPa band, exact 1.656e7 Pa thermal stress at177dT = 10 K, critical temperature rise 18.26 K in the 15 to 25 K band,178uniaxial-to-biaxial ratio 0.67, column 128.5 K in the 110 to 150 K179band), the scaling identities of each closed-form relation, the180round-trip identity between thermal stress at the critical rise and the181buckling stress, positive and negative margin sign cases, determinism,182and ValueError rejection of every non-physical input listed above.183184## Compliance185186- Standards referenced, not reproduced: FAR 25 (airframe strength) is187 referenced by name only; the thermal buckling relations above are188 standard engineering methodology, summary-only per standards-map.yaml.189- compliance: STANDARDS-REF, gated: false.