Plate Buckling (structures/fem/plate-buckling)
Use when the task is the elastic stability of a flat plate or skin
panel: resolving the plate buckling coefficient k from the edge
conditions and the panel aspect ratio, computing the critical
compression buckling stress sigma_cr = k * pi^2 * E / (12 * (1 -
nu^2)) * (t / b)^2 and the shear buckling stress tau_cr of a web or
panel, running the combined compression-shear interaction check, and
sizing the effective width of stiffened skin in the post-buckling
range. The logic module is pure Python standard library (no numpy, no
FEA software) and deterministic. Units are SI: E in Pa, t and b in m,
stresses in Pa, a and b in m.
Domain quick reference
A flat rectangular plate of thickness t and width b (measured
across the load direction) buckles elastically when the applied
edge stress reaches the critical value:
sigma_cr = k * pi^2 * E / (12 * (1 - nu^2)) * (t / b)^2
tau_cr = k_s * pi^2 * E / (12 * (1 - nu^2)) * (t / b)^2
where E is the Young's modulus, nu the Poisson ratio, and k (or
k_s) the plate buckling coefficient. The stress scales with the
square of the thickness-to-width ratio: doubling t / b quadruples
the critical stress, which is why skin thickness and stringer pitch
trade directly against each other.
Compression coefficient, simply supported on all edges (exact,
minimized over the half-wave count m):
k = min_m (m / a_r + a_r / m)^2, a_r = a / b
The long plate gives k = 4.0. The clamped long plate approximation
is k = 6.97; short clamped plates have a higher coefficient and
need tabulated data. Shear coefficient (Timoshenko):
simply supported: k_s = 5.34 + 4 / a_r^2 (a_r >= 1)
k_s = 5.34 * a_r^2 + 4 (a_r < 1)
clamped: k_s = 8.98 + 5.6 / a_r^2 (a_r >= 1)
k_s = 8.98 * a_r^2 + 5.6 (a_r < 1)
Combined compression and shear interacts approximately as
sigma / sigma_cr + (tau / tau_cr)^2 <= 1
linear in compression and quadratic in shear: a modest shear
stress consumes a large share of the buckling capacity.
Post-buckling: stiffened skin carries load through the von Karman
effective width b_e = 1.9 * t * sqrt(E / sigma_edge), capped at the
panel width, valid once the edge stress exceeds the panel buckling
stress.
Worked anchors (verified by running scripts/plate_buckling_logic.py):
an aluminum skin with E = 70 GPa, nu = 0.33, t = 2 mm, stringer
pitch b = 150 mm and a/b = 2, simply supported, has k = 4.0 (the
m = 2 half-wave gives (1 + 1)^2) and sigma_cr = 45.9 MPa; against an
applied compression of 30 MPa the margin of safety is 0.531. An
aluminum spar web with t = 1.5 mm, depth b = 250 mm and a/b = 2 has
k_s = 5.34 + 4/4 = 6.34 and tau_cr = 14.7 MPa; against 8 MPa of
applied shear the margin is 0.844. With 30 MPa compression and 8 MPa
shear the interaction index is 0.947, stable with margin 0.056. At an
edge stress of 200 MPa the 2 mm skin has an effective width of
71.1 mm. Second anchor: the same skin at a/b = 1.5 gives k = 4.340
and at a/b = 0.5 gives k = 6.25, while the clamped long plate gives
k = 6.97, 74 percent above the simply supported value.
Workflow
- Identify the panel geometry: the loaded length a, the width b
across the load (for a skin panel between stiffeners this is the
stiffener pitch, for a spar web the web depth), and the thickness
t. Compute the aspect ratio a_r = a / b.
- Select the edge condition: 'ssss' for a simply supported panel
(skin between stringers with flexible attachments) or 'cccc' for a
clamped panel (heavily restrained edges). Aliases accepted:
simply-supported, pinned, clamped, fixed.
- Resolve the coefficient with compression_coefficient(a_r,
edge_condition) for compression or shear_coefficient(a_r,
edge_condition) for shear.
- Compute the critical stress with
compression_buckling_stress(E, nu, t, b, k) or
shear_buckling_stress(E, nu, t, b, k_s). Both share the same
denominator 12 * (1 - nu^2).
- Run the complete margin check in one call with
compression_panel_check(E, nu, t, a, b, edge_condition,
applied_stress) or shear_panel_check(E, nu, t, a, b,
edge_condition, applied_shear), which return the coefficient, the
critical stress, the margin of safety and the stable verdict.
Apply the required factor of safety from the certification basis
(1.5 ultimate-to-limit per FAR-25.303 / CS-25.303) before
comparing the applied stress against the critical stress.
- For combined compression and shear (a shear web carrying bending
compression plus shear, or a skin panel under shear plus
compression), run interaction_index(compression_stress,
compression_critical, shear_stress, shear_critical): stable when
the index is below 1, margin = 1 / index - 1.
- For stiffened skin loaded beyond its buckling stress, size the
effective width with effective_width(E, sigma_edge, t) and cap it
at the panel width b before re-computing the stiffener load.
Pitfalls
- Routing column buckling here: buckling-analysis handles 1D columns
and struts with the Euler load, effective length factor K and
slenderness ratio; plate-buckling handles 2D flat plates and skin
panels with the k-coefficient formulas and never uses a slenderness
ratio or an effective length factor.
- Routing FEA buckling here: a full-model eigenvalue buckling run in
CalculiX belongs to calculix-linear or calculix-nonlinear;
plate-buckling is a hand-scale closed-form panel check with no
stiffness matrix and no software.
- Routing panel sizing here: fuselage-skin-stringer and wing-box-sizing
(vehicle-design family) close the overall stiffened shell or wing
box (skin thickness from hoop stress, stringer area, spar cap
area); plate-buckling only checks the elastic stability of one flat
panel with known dimensions.
- Routing sandwich panels here: sandwich-panels checks face stress,
core shear and face wrinkling of a sandwich construction;
plate-buckling checks monolithic flat skins and webs for elastic
instability, not a sandwich cross-section.
- Using the column coefficient for a plate: k = 4.0 (simply
supported) or 6.97 (clamped) applies to flat plates; the Euler
column result is a different geometry and a different formula.
- Mixing the aspect ratio convention: a is the loaded length and b
the width across the load; swapping them changes k (a/b = 0.5 gives
k = 6.25, a/b = 2 gives k = 4.0) and the critical stress.
- Forgetting that clamped short plates are special: the 6.97 value is
the long-plate clamped approximation; compression_coefficient
raises ValueError below aspect_ratio 1 where tabulated data is
required, so do not silently extrapolate.
- Applying the interaction equation wrongly: the compression term is
linear and the shear term is squared; using (tau / tau_cr) to the
first power overstates the margin.
- Using effective width below the buckling stress: the von Karman
width is a post-buckling concept and must be capped at the panel
width; below the critical stress the full width carries load.
- Mixing units: E in GPa with t and b in mm silently corrupts the
stress by factors of 1e9 or 1e6; keep everything SI (Pa, m).
- Ignoring imperfections: the ideal flat plate formulas assume a
perfect plate; initial waviness and eccentric load reduce the real
buckling stress below sigma_cr, and in-service corrosion or dent
damage lowers the effective thickness.
Behavior contract (gate 3)
The plate buckling logic is exercised by the gate 3 contract test:
scripts/test_plate_buckling.py against
scripts/plate_buckling_logic.py (stdlib unittest, offline). It
asserts the worked anchors above, the coefficient boundaries at
aspect ratios 1 and 2, the (t/b)^2 and E scalings, the clamped versus
simply supported ranking, the linear-compression and
quadratic-shear interaction scaling, the effective width dependence,
and the ValueError cases for non-positive, non-finite or unknown
inputs. Run:
python3 scripts/test_plate_buckling.py
Compliance
- FAR-25 and CS-25 are referenced, not reproduced: standards-map.yaml
marks them gated: false and reference-only: true; only the summary
paraphrase above is used, never standard text.
- compliance: STANDARDS-REF, gated: false.
1---2name: plate-buckling3description: Use when a wing or fuselage skin panel, spar web or flat panel must be margin-checked against elastic instability in a stdlib-only environment without FEA software. Calculate the elastic buckling of flat plates and skin panels under compression and shear: resolve the plate buckling coefficient k from the edge conditions and the panel aspect ratio (k = 4.0 for a simply supported long plate, 6.97 for a clamped long plate), compute the critical compression buckling stress sigma_cr = k*pi^2*E/(12*(1-nu^2))*(t/b)^2 and the shear buckling stress tau_cr with the shear buckling coefficient k_s, run the combined compression-shear interaction check, and size the effective width of stiffened skin. Units are SI. Trigger: plate buckling, panel buckling, buckling coefficient, shear buckling, skin panel, spar web, critical buckling stress, effective width.4license: Apache-2.05---67# Plate Buckling (structures/fem/plate-buckling)89Use when the task is the elastic stability of a flat plate or skin10panel: resolving the plate buckling coefficient k from the edge11conditions and the panel aspect ratio, computing the critical12compression buckling stress sigma_cr = k * pi^2 * E / (12 * (1 -13nu^2)) * (t / b)^2 and the shear buckling stress tau_cr of a web or14panel, running the combined compression-shear interaction check, and15sizing the effective width of stiffened skin in the post-buckling16range. The logic module is pure Python standard library (no numpy, no17FEA software) and deterministic. Units are SI: E in Pa, t and b in m,18stresses in Pa, a and b in m.1920## Domain quick reference2122- A flat rectangular plate of thickness t and width b (measured23 across the load direction) buckles elastically when the applied24 edge stress reaches the critical value:2526 sigma_cr = k * pi^2 * E / (12 * (1 - nu^2)) * (t / b)^227 tau_cr = k_s * pi^2 * E / (12 * (1 - nu^2)) * (t / b)^22829 where E is the Young's modulus, nu the Poisson ratio, and k (or30 k_s) the plate buckling coefficient. The stress scales with the31 square of the thickness-to-width ratio: doubling t / b quadruples32 the critical stress, which is why skin thickness and stringer pitch33 trade directly against each other.3435- Compression coefficient, simply supported on all edges (exact,36 minimized over the half-wave count m):3738 k = min_m (m / a_r + a_r / m)^2, a_r = a / b3940 The long plate gives k = 4.0. The clamped long plate approximation41 is k = 6.97; short clamped plates have a higher coefficient and42 need tabulated data. Shear coefficient (Timoshenko):4344 simply supported: k_s = 5.34 + 4 / a_r^2 (a_r >= 1)45 k_s = 5.34 * a_r^2 + 4 (a_r < 1)46 clamped: k_s = 8.98 + 5.6 / a_r^2 (a_r >= 1)47 k_s = 8.98 * a_r^2 + 5.6 (a_r < 1)4849- Combined compression and shear interacts approximately as5051 sigma / sigma_cr + (tau / tau_cr)^2 <= 15253 linear in compression and quadratic in shear: a modest shear54 stress consumes a large share of the buckling capacity.5556- Post-buckling: stiffened skin carries load through the von Karman57 effective width b_e = 1.9 * t * sqrt(E / sigma_edge), capped at the58 panel width, valid once the edge stress exceeds the panel buckling59 stress.6061Worked anchors (verified by running scripts/plate_buckling_logic.py):62an aluminum skin with E = 70 GPa, nu = 0.33, t = 2 mm, stringer63pitch b = 150 mm and a/b = 2, simply supported, has k = 4.0 (the64m = 2 half-wave gives (1 + 1)^2) and sigma_cr = 45.9 MPa; against an65applied compression of 30 MPa the margin of safety is 0.531. An66aluminum spar web with t = 1.5 mm, depth b = 250 mm and a/b = 2 has67k_s = 5.34 + 4/4 = 6.34 and tau_cr = 14.7 MPa; against 8 MPa of68applied shear the margin is 0.844. With 30 MPa compression and 8 MPa69shear the interaction index is 0.947, stable with margin 0.056. At an70edge stress of 200 MPa the 2 mm skin has an effective width of7171.1 mm. Second anchor: the same skin at a/b = 1.5 gives k = 4.34072and at a/b = 0.5 gives k = 6.25, while the clamped long plate gives73k = 6.97, 74 percent above the simply supported value.7475## Workflow76771. Identify the panel geometry: the loaded length a, the width b78 across the load (for a skin panel between stiffeners this is the79 stiffener pitch, for a spar web the web depth), and the thickness80 t. Compute the aspect ratio a_r = a / b.812. Select the edge condition: 'ssss' for a simply supported panel82 (skin between stringers with flexible attachments) or 'cccc' for a83 clamped panel (heavily restrained edges). Aliases accepted:84 simply-supported, pinned, clamped, fixed.853. Resolve the coefficient with compression_coefficient(a_r,86 edge_condition) for compression or shear_coefficient(a_r,87 edge_condition) for shear.884. Compute the critical stress with89 compression_buckling_stress(E, nu, t, b, k) or90 shear_buckling_stress(E, nu, t, b, k_s). Both share the same91 denominator 12 * (1 - nu^2).925. Run the complete margin check in one call with93 compression_panel_check(E, nu, t, a, b, edge_condition,94 applied_stress) or shear_panel_check(E, nu, t, a, b,95 edge_condition, applied_shear), which return the coefficient, the96 critical stress, the margin of safety and the stable verdict.97 Apply the required factor of safety from the certification basis98 (1.5 ultimate-to-limit per FAR-25.303 / CS-25.303) before99 comparing the applied stress against the critical stress.1006. For combined compression and shear (a shear web carrying bending101 compression plus shear, or a skin panel under shear plus102 compression), run interaction_index(compression_stress,103 compression_critical, shear_stress, shear_critical): stable when104 the index is below 1, margin = 1 / index - 1.1057. For stiffened skin loaded beyond its buckling stress, size the106 effective width with effective_width(E, sigma_edge, t) and cap it107 at the panel width b before re-computing the stiffener load.108109## Pitfalls110111- Routing column buckling here: buckling-analysis handles 1D columns112 and struts with the Euler load, effective length factor K and113 slenderness ratio; plate-buckling handles 2D flat plates and skin114 panels with the k-coefficient formulas and never uses a slenderness115 ratio or an effective length factor.116- Routing FEA buckling here: a full-model eigenvalue buckling run in117 CalculiX belongs to calculix-linear or calculix-nonlinear;118 plate-buckling is a hand-scale closed-form panel check with no119 stiffness matrix and no software.120- Routing panel sizing here: fuselage-skin-stringer and wing-box-sizing121 (vehicle-design family) close the overall stiffened shell or wing122 box (skin thickness from hoop stress, stringer area, spar cap123 area); plate-buckling only checks the elastic stability of one flat124 panel with known dimensions.125- Routing sandwich panels here: sandwich-panels checks face stress,126 core shear and face wrinkling of a sandwich construction;127 plate-buckling checks monolithic flat skins and webs for elastic128 instability, not a sandwich cross-section.129- Using the column coefficient for a plate: k = 4.0 (simply130 supported) or 6.97 (clamped) applies to flat plates; the Euler131 column result is a different geometry and a different formula.132- Mixing the aspect ratio convention: a is the loaded length and b133 the width across the load; swapping them changes k (a/b = 0.5 gives134 k = 6.25, a/b = 2 gives k = 4.0) and the critical stress.135- Forgetting that clamped short plates are special: the 6.97 value is136 the long-plate clamped approximation; compression_coefficient137 raises ValueError below aspect_ratio 1 where tabulated data is138 required, so do not silently extrapolate.139- Applying the interaction equation wrongly: the compression term is140 linear and the shear term is squared; using (tau / tau_cr) to the141 first power overstates the margin.142- Using effective width below the buckling stress: the von Karman143 width is a post-buckling concept and must be capped at the panel144 width; below the critical stress the full width carries load.145- Mixing units: E in GPa with t and b in mm silently corrupts the146 stress by factors of 1e9 or 1e6; keep everything SI (Pa, m).147- Ignoring imperfections: the ideal flat plate formulas assume a148 perfect plate; initial waviness and eccentric load reduce the real149 buckling stress below sigma_cr, and in-service corrosion or dent150 damage lowers the effective thickness.151152## Behavior contract (gate 3)153154The plate buckling logic is exercised by the gate 3 contract test:155scripts/test_plate_buckling.py against156scripts/plate_buckling_logic.py (stdlib unittest, offline). It157asserts the worked anchors above, the coefficient boundaries at158aspect ratios 1 and 2, the (t/b)^2 and E scalings, the clamped versus159simply supported ranking, the linear-compression and160quadratic-shear interaction scaling, the effective width dependence,161and the ValueError cases for non-positive, non-finite or unknown162inputs. Run:163164python3 scripts/test_plate_buckling.py165166## Compliance167168- FAR-25 and CS-25 are referenced, not reproduced: standards-map.yaml169 marks them gated: false and reference-only: true; only the summary170 paraphrase above is used, never standard text.171- compliance: STANDARDS-REF, gated: false.