Inelastic Column Buckling (structures/fem/inelastic-column-buckling)
Use when the task is the inelastic column strength of a whole solid,
round, tube or extruded compression member in the intermediate
slenderness band: the yield-anchored Euler-Johnson tangent column
strength curve F_col(lambda) whose Johnson parabola arm F_col =
F_cy*(1 - F_cylambda^2/(4pi^2E)) interpolates between the yield
anchor F_col = F_cy at lambda = 0 and the tangent point F_col = F_cy/2
at the transition lambda_t = sqrt(2pi^2E/F_cy), where it meets the
Euler arm F_col = pi^2E/lambda^2 with equal slope. The curve is the
standard Johnson form of the published Euler-Johnson tangent column
strength curve (Bruhn column analysis chapter, Niu column allowable
curves, Timoshenko and Gere inelastic columns, Roark columns chapter;
public engineering science, summary paraphrase only). The logic module
is pure Python standard library and deterministic. Units are SI: E and
F_cy in Pa, L and r in m, A in m^2, forces in N.
The leaf pairs with the elastic Euler owner of the same member:
structures/fem/buckling-analysis ends its elastic arm at the
yield-crossing classification and hands the inelastic side off; this
leaf takes the effective length factor K as a plain given number and
reports the Euler arm only as the upper arm of the yield-anchored
column strength curve, never as an elastic critical load deliverable.
It re-implements the Johnson arm equation family of
structures/fem/crippling-analysis re-anchored from the local crippling
stress of formed sheet onto the solid-section compressive yield F_cy,
covering the extruded and machined whole sections that leaf excludes.
Materials/ramberg-osgood defines the material stress-strain response;
this leaf consumes only the plain E and F_cy pair. The applied-load
context is the certification compression case under FAR 25.301 and CS
25.301 applied loads with the 1.5 ultimate factor of FAR 25.303 and CS
25.303 (standards named and paraphrased, never reproduced).
Domain quick reference
Effective slenderness of the member:
lambda = K * L / r
with K the effective length factor (given as a number; resolving K
from the support type is the buckling-analysis sibling's job), L the
physical length and r the radius of gyration of the section. Solid
round rod of diameter d: A = pid^2/4, r = d/4. Round tube with
outer and inner diameters d_o, d_i: A = pi(d_o^2 - d_i^2)/4,
I = pi*(d_o^4 - d_i^4)/64, r = sqrt(I/A), which equals
sqrt((d_o^2 + d_i^2)/16).
Euler-Johnson tangent transition (tangency of the two arms at
F_cy/2):
lambda_t = sqrt(2 * pi^2 * E / F_cy)
The elastic yield crossing of the Euler owner, lambda_1 =
pi*sqrt(E/F_cy), equals lambda_t/sqrt(2): the tangent transition
sits sqrt(2) higher, so the Johnson arm also covers the intermediate
band where the ideal Euler stress is still below yield but real
column allowables follow the parabola.
Johnson parabola arm (lambda <= lambda_t), the inelastic column
allowable stress:
F_col = F_cy * (1 - F_cy * lambda^2 / (4 * pi^2 * E))
Quadratic between the yield anchor F_cy at lambda = 0 and F_cy/2 at
lambda_t; the drop from yield F_cy - F_col is exactly quadratic in
lambda, so the drop at lambda_t/2 is one quarter of the drop at
lambda_t.
Euler arm (lambda > lambda_t), the elastic hyperbola of the same
curve:
F_col = pi^2 * E / lambda^2
Column capacity and margin of safety:
P_col = F_col * A MS = P_col / P_applied - 1
pass when MS >= 0. Regime: "johnson" at or below lambda_t, "euler"
above.
Materials registry pair (shared with crippling-analysis), used by the
worked examples: 7075-T6 E = 71.7 GPa, F_cy = 462 MPa; 2024-T3
E = 72.4 GPa, F_cy = 290 MPa. All functions take E and F_cy as plain
float arguments.
Workflow
- Gather the member inputs and section properties: the material
pair E and F_cy (Pa), the effective length factor K (a plain given
number; end-condition resolution belongs to buckling-analysis), the
physical length L in m, the radius of gyration r and gross section
area A in m^2, and the applied axial compression P_applied in N.
Solid round rod of diameter d: A = pid^2/4 and r = d/4; round tube
d_o/d_i: A = pi(d_o^2 - d_i^2)/4, I = pi*(d_o^4 - d_i^4)/64 and
r = sqrt(I/A).
- Compute the effective slenderness lambda = KL/r with
effective_slenderness(k_factor, length, radius_gyration). A member
length L = 40r pins lambda = 40 for the stubby-column regime;
L = 0.55 m at r = 0.01 m with K = 1.0 pins lambda = 55.
- Compute the euler-johnson-tangent transition lambda_t =
sqrt(2pi^2E/F_cy) with
johnson_transition_slenderness(e, f_cy); lambda_t sits sqrt(2)
above the elastic yield crossing lambda_1 = pi*sqrt(E/F_cy) of the
buckling-analysis sibling.
- Classify the regime with column_regime(e, f_cy, lam): "johnson" at
or below lambda_t, "euler" above it. The intermediate slenderness
band below lambda_t is where the yield-anchored parabola governs
and the ideal Euler stress overpredicts.
- Compute the inelastic column allowable stress F_col with
column_strength_allowable(e, f_cy, lam): the johnson-parabola
stress johnson_parabola_stress(e, f_cy, lam) =
F_cy*(1 - F_cylam^2/(4pi^2E)) below the transition (the
stubby-column-allowable) and the euler_arm_stress(e, lam) =
pi^2E/lam^2 above it.
- Compute the column capacity P_col = F_col*A with
column_capacity(e, f_cy, lam, area).
- Run the margin of safety and the verdict in one call with
column_check(e, f_cy, lam, area, applied_load), which returns the
dict {lambda_t, regime, F_col, P_col, margin, verdict} with verdict
"pass" when margin >= 0. In the certification compression case,
compare against the applied load amplified to the 1.5 ultimate
factor per FAR 25.303 / CS 25.303 (summary paraphrase of the
requirement, never standard text).
Worked example
Worked example 1 (corpus query 1): 7075-T6 solid round actuator rod,
d = 0.04 m, E = 71.7 GPa, F_cy = 462 MPa, K = 1.0, L = 0.55 m, applied
axial compression 200 kN. Real module outputs (verified identical
under /usr/bin/python3 3.9.6 and pyenv 3.13.12):
- A = pi*d^2/4 = 1.2566370614359172e-03 m^2, r = d/4 = 0.01 m.
- lambda = KL/r = 55; lambda_t = sqrt(2pi^2*E/F_cy) =
55.348194774118063, so lambda 55 sits just below the transition and
the regime is johnson.
- Johnson parabola stress F_col = 233897293.82113209 Pa (233.897 MPa).
The Euler arm of the curve at the same lambda is
233934094.39937419 Pa (233.934 MPa), 1.573e-4 above the parabola
near the tangency point; F_cy/2 = 231 MPa is 1.255e-2 below the
allowable.
- P_col = F_col*A = 293924.00798520073 N (293.9 kN).
- MS = P_col/P_applied - 1 = 0.46962003992600376, verdict pass.
Worked example 2 (corpus query 2): 2024-T3 extruded round tube
compression member, d_o = 0.05 m, d_i = 0.04 m (5 mm wall), E =
72.4 GPa, F_cy = 290 MPa, K = 1.0, applied axial compression 120 kN.
Real module outputs:
- A = pi*(d_o^2 - d_i^2)/4 = 7.0685834705770374e-04 m^2,
I = pi*(d_o^4 - d_i^4)/64 = 1.8113245143353656e-07 m^4,
r = sqrt(I/A) = 0.016007810593582122 m (the round-tube identity
sqrt((d_o^2 + d_i^2)/16) reproduces r exactly).
- Member length L = 40r = 0.6403124237432849 m pins lambda =
KL/r = 40; lambda_t = 70.199683594869498, so lambda 40 is deep in
the Johnson band (below 0.57*lambda_t) and the regime is johnson.
- Johnson parabola stress F_col = 242922035.66673699 Pa (242.922 MPa,
0.83766 of F_cy), the stubby-column-allowable. The Euler arm at the
same lambda is 446599599.14929342 Pa (446.6 MPa), 1.8384482820734314
times F_col and above F_cy itself, the elastic overprediction the
parabola corrects.
- P_col = F_col*A = 171711.46859528226 N (171.7 kN).
- MS = P_col/P_applied - 1 = 0.43092890496068548, verdict pass.
Curve shape (real module rows): the 7075-T6 allowable falls from the
462 MPa yield anchor through 454459414.671773 Pa at lambda 10,
341350634.748367 Pa at lambda 40, 233897293.821132 Pa at lambda 55
(johnson regime), then follows the Euler arm 196569620.988363 Pa at
lambda 60, 110570411.805954 Pa at lambda 80 and 70765063.5558107 Pa at
lambda 100 (euler regime). The 2024-T3 curve runs
287057627.229171 Pa at lambda 10 to 242922035.666737 Pa at lambda 40,
200993223.682425 Pa at lambda 55, 145823734.229382 Pa at lambda 70
(johnson, just below the transition) and 88217204.7702308 Pa at lambda
90, 49622177.6832548 Pa at lambda 120 (euler). Both arms return F_cy/2
at lambda_t to float roundoff and the parabola is tangent to the Euler
hyperbola there.
Verification
- Worked examples: the two cases above are asserted in the contract
test against the module's real outputs within the tolerances of the
spec validation list.
- Tangency by construction: at lambda_t both arms return F_cy/2 (the
Johnson arm, the Euler arm and their cross difference sit within
1e-12 relative, anchor residuals 2.58e-16 and 1.29e-16 for 7075-T6
and 0.0 for 2024-T3) and the closed-form slopes agree to 1e-9
relative.
- Quadratic-decay identity: 4*(F_cy - F_col(lam_t/2)) equals
F_cy - F_col(lam_t) = F_cy/2 to 1e-9 relative of F_cy.
- Yield anchor: johnson_parabola_stress at lam = lam_t*1e-6 sits
within 1e-9 relative of F_cy, so F_col approaches F_cy as lambda
approaches zero.
- Regime flip and continuity: column_regime is johnson at
lam_t*(1 - 1e-12) and euler at lam_t*(1 + 1e-12), and F_col at the
upper point stays within 1e-9 relative of F_cy/2.
- The curve is strictly monotone decreasing on a dense lambda grid
from 1 to 200 for both materials; the Euler arm lies strictly above
the Johnson parabola inside the Johnson band, the overprediction the
parabola corrects.
- ValueError rejection of non-physical inputs: zero or negative
k_factor, length, radius_gyration, e, f_cy, lam, area, allowable or
applied load all raise ValueError (16 cases in the contract test).
- Determinism: two identical full runs return identical bits; the
canonical dump sha256 is
1f3904e5de54c994b725577b30d02c298b726db9a7a2394172f74c6c2c8e1183
on both in-process passes and under both interpreters.
Related leaves
- structures/fem/buckling-analysis: the elastic Euler arm of the same
member with the end-condition effective length factor K table
(pinned-pinned, fixed-fixed, fixed-pinned, cantilever), the
radius-of-gyration-from-section workflow and the yield-crossing
classification at lambda_1 = pi*sqrt(E/sigma_y); this leaf takes K
as a number and reports the Euler arm only as the upper arm of the
yield-anchored column strength curve.
- structures/fem/crippling-analysis: the same Johnson arm equation
family anchored on the LOCAL crippling stress of formed sheet
stiffeners (never on yield); extruded and machined whole sections
are exactly the population this leaf serves on the solid-section
yield.
- structures/materials/ramberg-osgood: the elastic-plastic
stress-strain curve and tangent-modulus material response; this leaf
characterizes the material by plain E and F_cy only.
- structures/fem/plate-buckling and structures/fem/
cylindrical-shell-buckling: local flat-panel and shell wall
instability, which can govern thin formed sections and thin-walled
tubes before the column curve.
- structures/fem/beam-column-analysis: the axial-plus-bending
interaction check; this leaf is compression only.
Pitfalls
- Routing the elastic Euler instability here: the Euler critical load
Pcr = pi^2EI/(K*L)^2 at resolved end conditions, the slenderness
ratio from the radius of gyration and the yield-crossing
classification with the euler_governs flag belong to
structures/fem/buckling-analysis; this leaf takes K and r as given
numbers.
- Reading the Euler arm below lambda_t as the allowable: inside the
Johnson band the ideal Euler stress overpredicts the column strength
(in the tube example it exceeds F_cy itself), exactly the
overprediction the yield-anchored parabola corrects; the curve value
below lambda_t is the johnson-parabola stress.
- Anchoring the parabola on the wrong stress: this leaf anchors on the
solid-section compressive yield F_cy of a whole solid, round, tube
or extruded member. Formed sheet stiffeners anchor on the local
crippling stress F_cc and belong to structures/fem/crippling-
analysis, whose scope excludes extruded and machined whole sections.
- Confusing the material curve with the column curve: the
elastic-plastic stress-strain response and the secant or tangent
modulus of the material itself are the ramberg-osgood leaf's
content; here E and F_cy are plain material floats.
- Forgetting the wall-stability check: a thin formed section or
thin-walled tube may cripple or buckle locally (plate-buckling,
cylindrical-shell-buckling) before the yield-anchored column curve
governs; this closed form assumes whole-section behavior.
- Mixing units: E in GPa with L and r in mm, or F_cy in MPa with
A in m^2, silently corrupts F_col and P_col by factors of 1e9 or
1e6; keep everything SI (Pa, m, m^2, N).
- Applying a bending interaction: the check is axial compression only;
axial-plus-bending members belong to beam-column-analysis.
Behavior contract (gate 3)
The inelastic column logic is exercised by the gate 3 contract test
scripts/test_inelastic_column_buckling.py against
scripts/inelastic_column_buckling_logic.py (pure stdlib unittest,
offline, deterministic). It asserts the two worked examples above, the
column strength curve sweeps and monotone shape for both materials,
the F_cy/2 tangency of both arms at lambda_t, the slope tangency, the
quadratic-decay quarter-drop identity, the yield anchor, the regime
flip and continuity across the transition, the Euler-arm
overprediction inside the Johnson band, the capacity and margin
linearities, all ValueError rejections of non-physical inputs, and the
canonical determinism digest. Run:
python3 scripts/test_inelastic_column_buckling.py
Contract test
The contract test must pass offline under BOTH interpreters used by
the pre-push hook environment (31 test methods, deterministic, under
20 seconds):
/usr/bin/python3 skills/structures/fem/inelastic-column-buckling/scripts/test_inelastic_column_buckling.py
and
~/.pyenv/versions/3.13.12/bin/python3 skills/structures/fem/inelastic-column-buckling/scripts/test_inelastic_column_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 of the applied-load and 1.5 ultimate-factor context is
used (FAR 25.301 / CS 25.301, FAR 25.303 / CS 25.303), never
standard text.
- The Euler-Johnson tangent column strength curve is standard
engineering methodology (Bruhn, Niu, Timoshenko and Gere, Roark),
summary-only.
- compliance: STANDARDS-REF, gated: false.
1---2name: inelastic-column-buckling3description: Use when you must compute the inelastic column strength of a solid round, tube or extruded compression member in the intermediate slenderness band: the effective slenderness lambda = K*L/r of the member, the euler-johnson-tangent transition lambda_t = sqrt(2*pi^2*E/F_cy) where the yield-anchored Johnson parabola meets the Euler arm at F_cy/2, the johnson-parabola stress F_col = F_cy*(1 - F_cy*lambda^2/(4*pi^2*E)) below the transition and the Euler arm stress above it, the column capacity P_col = F_col*A and the margin of safety against the applied axial load, with the johnson or euler regime verdict. Produces the inelastic column allowable stress and load, the stubby-column-allowable and the pass-fail margin that gate compression checks of 7075-T6 and 2024-T3 actuator rods, tube members and extruded struts. Trigger: inelastic column buckling, Johnson parabola, column strength curve, intermediate slenderness, stubby column allowable.4license: Apache-2.05---67# Inelastic Column Buckling (structures/fem/inelastic-column-buckling)89Use when the task is the inelastic column strength of a whole solid,10round, tube or extruded compression member in the intermediate11slenderness band: the yield-anchored Euler-Johnson tangent column12strength curve F_col(lambda) whose Johnson parabola arm F_col =13F_cy*(1 - F_cy*lambda^2/(4*pi^2*E)) interpolates between the yield14anchor F_col = F_cy at lambda = 0 and the tangent point F_col = F_cy/215at the transition lambda_t = sqrt(2*pi^2*E/F_cy), where it meets the16Euler arm F_col = pi^2*E/lambda^2 with equal slope. The curve is the17standard Johnson form of the published Euler-Johnson tangent column18strength curve (Bruhn column analysis chapter, Niu column allowable19curves, Timoshenko and Gere inelastic columns, Roark columns chapter;20public engineering science, summary paraphrase only). The logic module21is pure Python standard library and deterministic. Units are SI: E and22F_cy in Pa, L and r in m, A in m^2, forces in N.2324The leaf pairs with the elastic Euler owner of the same member:25structures/fem/buckling-analysis ends its elastic arm at the26yield-crossing classification and hands the inelastic side off; this27leaf takes the effective length factor K as a plain given number and28reports the Euler arm only as the upper arm of the yield-anchored29column strength curve, never as an elastic critical load deliverable.30It re-implements the Johnson arm equation family of31structures/fem/crippling-analysis re-anchored from the local crippling32stress of formed sheet onto the solid-section compressive yield F_cy,33covering the extruded and machined whole sections that leaf excludes.34Materials/ramberg-osgood defines the material stress-strain response;35this leaf consumes only the plain E and F_cy pair. The applied-load36context is the certification compression case under FAR 25.301 and CS3725.301 applied loads with the 1.5 ultimate factor of FAR 25.303 and CS3825.303 (standards named and paraphrased, never reproduced).3940## Domain quick reference4142- Effective slenderness of the member:4344 lambda = K * L / r4546 with K the effective length factor (given as a number; resolving K47 from the support type is the buckling-analysis sibling's job), L the48 physical length and r the radius of gyration of the section. Solid49 round rod of diameter d: A = pi*d^2/4, r = d/4. Round tube with50 outer and inner diameters d_o, d_i: A = pi*(d_o^2 - d_i^2)/4,51 I = pi*(d_o^4 - d_i^4)/64, r = sqrt(I/A), which equals52 sqrt((d_o^2 + d_i^2)/16).5354- Euler-Johnson tangent transition (tangency of the two arms at55 F_cy/2):5657 lambda_t = sqrt(2 * pi^2 * E / F_cy)5859 The elastic yield crossing of the Euler owner, lambda_1 =60 pi*sqrt(E/F_cy), equals lambda_t/sqrt(2): the tangent transition61 sits sqrt(2) higher, so the Johnson arm also covers the intermediate62 band where the ideal Euler stress is still below yield but real63 column allowables follow the parabola.6465- Johnson parabola arm (lambda <= lambda_t), the inelastic column66 allowable stress:6768 F_col = F_cy * (1 - F_cy * lambda^2 / (4 * pi^2 * E))6970 Quadratic between the yield anchor F_cy at lambda = 0 and F_cy/2 at71 lambda_t; the drop from yield F_cy - F_col is exactly quadratic in72 lambda, so the drop at lambda_t/2 is one quarter of the drop at73 lambda_t.7475- Euler arm (lambda > lambda_t), the elastic hyperbola of the same76 curve:7778 F_col = pi^2 * E / lambda^27980- Column capacity and margin of safety:8182 P_col = F_col * A MS = P_col / P_applied - 18384 pass when MS >= 0. Regime: "johnson" at or below lambda_t, "euler"85 above.8687- Materials registry pair (shared with crippling-analysis), used by the88 worked examples: 7075-T6 E = 71.7 GPa, F_cy = 462 MPa; 2024-T389 E = 72.4 GPa, F_cy = 290 MPa. All functions take E and F_cy as plain90 float arguments.9192## Workflow93941. Gather the member inputs and section properties: the material95 pair E and F_cy (Pa), the effective length factor K (a plain given96 number; end-condition resolution belongs to buckling-analysis), the97 physical length L in m, the radius of gyration r and gross section98 area A in m^2, and the applied axial compression P_applied in N.99 Solid round rod of diameter d: A = pi*d^2/4 and r = d/4; round tube100 d_o/d_i: A = pi*(d_o^2 - d_i^2)/4, I = pi*(d_o^4 - d_i^4)/64 and101 r = sqrt(I/A).1022. Compute the effective slenderness lambda = K*L/r with103 effective_slenderness(k_factor, length, radius_gyration). A member104 length L = 40*r pins lambda = 40 for the stubby-column regime;105 L = 0.55 m at r = 0.01 m with K = 1.0 pins lambda = 55.1063. Compute the euler-johnson-tangent transition lambda_t =107 sqrt(2*pi^2*E/F_cy) with108 johnson_transition_slenderness(e, f_cy); lambda_t sits sqrt(2)109 above the elastic yield crossing lambda_1 = pi*sqrt(E/F_cy) of the110 buckling-analysis sibling.1114. Classify the regime with column_regime(e, f_cy, lam): "johnson" at112 or below lambda_t, "euler" above it. The intermediate slenderness113 band below lambda_t is where the yield-anchored parabola governs114 and the ideal Euler stress overpredicts.1155. Compute the inelastic column allowable stress F_col with116 column_strength_allowable(e, f_cy, lam): the johnson-parabola117 stress johnson_parabola_stress(e, f_cy, lam) =118 F_cy*(1 - F_cy*lam^2/(4*pi^2*E)) below the transition (the119 stubby-column-allowable) and the euler_arm_stress(e, lam) =120 pi^2*E/lam^2 above it.1216. Compute the column capacity P_col = F_col*A with122 column_capacity(e, f_cy, lam, area).1237. Run the margin of safety and the verdict in one call with124 column_check(e, f_cy, lam, area, applied_load), which returns the125 dict {lambda_t, regime, F_col, P_col, margin, verdict} with verdict126 "pass" when margin >= 0. In the certification compression case,127 compare against the applied load amplified to the 1.5 ultimate128 factor per FAR 25.303 / CS 25.303 (summary paraphrase of the129 requirement, never standard text).130131## Worked example132133Worked example 1 (corpus query 1): 7075-T6 solid round actuator rod,134d = 0.04 m, E = 71.7 GPa, F_cy = 462 MPa, K = 1.0, L = 0.55 m, applied135axial compression 200 kN. Real module outputs (verified identical136under /usr/bin/python3 3.9.6 and pyenv 3.13.12):137138- A = pi*d^2/4 = 1.2566370614359172e-03 m^2, r = d/4 = 0.01 m.139- lambda = K*L/r = 55; lambda_t = sqrt(2*pi^2*E/F_cy) =140 55.348194774118063, so lambda 55 sits just below the transition and141 the regime is johnson.142- Johnson parabola stress F_col = 233897293.82113209 Pa (233.897 MPa).143 The Euler arm of the curve at the same lambda is144 233934094.39937419 Pa (233.934 MPa), 1.573e-4 above the parabola145 near the tangency point; F_cy/2 = 231 MPa is 1.255e-2 below the146 allowable.147- P_col = F_col*A = 293924.00798520073 N (293.9 kN).148- MS = P_col/P_applied - 1 = 0.46962003992600376, verdict pass.149150Worked example 2 (corpus query 2): 2024-T3 extruded round tube151compression member, d_o = 0.05 m, d_i = 0.04 m (5 mm wall), E =15272.4 GPa, F_cy = 290 MPa, K = 1.0, applied axial compression 120 kN.153Real module outputs:154155- A = pi*(d_o^2 - d_i^2)/4 = 7.0685834705770374e-04 m^2,156 I = pi*(d_o^4 - d_i^4)/64 = 1.8113245143353656e-07 m^4,157 r = sqrt(I/A) = 0.016007810593582122 m (the round-tube identity158 sqrt((d_o^2 + d_i^2)/16) reproduces r exactly).159- Member length L = 40*r = 0.6403124237432849 m pins lambda =160 K*L/r = 40; lambda_t = 70.199683594869498, so lambda 40 is deep in161 the Johnson band (below 0.57*lambda_t) and the regime is johnson.162- Johnson parabola stress F_col = 242922035.66673699 Pa (242.922 MPa,163 0.83766 of F_cy), the stubby-column-allowable. The Euler arm at the164 same lambda is 446599599.14929342 Pa (446.6 MPa), 1.8384482820734314165 times F_col and above F_cy itself, the elastic overprediction the166 parabola corrects.167- P_col = F_col*A = 171711.46859528226 N (171.7 kN).168- MS = P_col/P_applied - 1 = 0.43092890496068548, verdict pass.169170Curve shape (real module rows): the 7075-T6 allowable falls from the171462 MPa yield anchor through 454459414.671773 Pa at lambda 10,172341350634.748367 Pa at lambda 40, 233897293.821132 Pa at lambda 55173(johnson regime), then follows the Euler arm 196569620.988363 Pa at174lambda 60, 110570411.805954 Pa at lambda 80 and 70765063.5558107 Pa at175lambda 100 (euler regime). The 2024-T3 curve runs176287057627.229171 Pa at lambda 10 to 242922035.666737 Pa at lambda 40,177200993223.682425 Pa at lambda 55, 145823734.229382 Pa at lambda 70178(johnson, just below the transition) and 88217204.7702308 Pa at lambda17990, 49622177.6832548 Pa at lambda 120 (euler). Both arms return F_cy/2180at lambda_t to float roundoff and the parabola is tangent to the Euler181hyperbola there.182183## Verification184185- Worked examples: the two cases above are asserted in the contract186 test against the module's real outputs within the tolerances of the187 spec validation list.188- Tangency by construction: at lambda_t both arms return F_cy/2 (the189 Johnson arm, the Euler arm and their cross difference sit within190 1e-12 relative, anchor residuals 2.58e-16 and 1.29e-16 for 7075-T6191 and 0.0 for 2024-T3) and the closed-form slopes agree to 1e-9192 relative.193- Quadratic-decay identity: 4*(F_cy - F_col(lam_t/2)) equals194 F_cy - F_col(lam_t) = F_cy/2 to 1e-9 relative of F_cy.195- Yield anchor: johnson_parabola_stress at lam = lam_t*1e-6 sits196 within 1e-9 relative of F_cy, so F_col approaches F_cy as lambda197 approaches zero.198- Regime flip and continuity: column_regime is johnson at199 lam_t*(1 - 1e-12) and euler at lam_t*(1 + 1e-12), and F_col at the200 upper point stays within 1e-9 relative of F_cy/2.201- The curve is strictly monotone decreasing on a dense lambda grid202 from 1 to 200 for both materials; the Euler arm lies strictly above203 the Johnson parabola inside the Johnson band, the overprediction the204 parabola corrects.205- ValueError rejection of non-physical inputs: zero or negative206 k_factor, length, radius_gyration, e, f_cy, lam, area, allowable or207 applied load all raise ValueError (16 cases in the contract test).208- Determinism: two identical full runs return identical bits; the209 canonical dump sha256 is210 1f3904e5de54c994b725577b30d02c298b726db9a7a2394172f74c6c2c8e1183211 on both in-process passes and under both interpreters.212213## Related leaves214215- structures/fem/buckling-analysis: the elastic Euler arm of the same216 member with the end-condition effective length factor K table217 (pinned-pinned, fixed-fixed, fixed-pinned, cantilever), the218 radius-of-gyration-from-section workflow and the yield-crossing219 classification at lambda_1 = pi*sqrt(E/sigma_y); this leaf takes K220 as a number and reports the Euler arm only as the upper arm of the221 yield-anchored column strength curve.222- structures/fem/crippling-analysis: the same Johnson arm equation223 family anchored on the LOCAL crippling stress of formed sheet224 stiffeners (never on yield); extruded and machined whole sections225 are exactly the population this leaf serves on the solid-section226 yield.227- structures/materials/ramberg-osgood: the elastic-plastic228 stress-strain curve and tangent-modulus material response; this leaf229 characterizes the material by plain E and F_cy only.230- structures/fem/plate-buckling and structures/fem/231 cylindrical-shell-buckling: local flat-panel and shell wall232 instability, which can govern thin formed sections and thin-walled233 tubes before the column curve.234- structures/fem/beam-column-analysis: the axial-plus-bending235 interaction check; this leaf is compression only.236237## Pitfalls238239- Routing the elastic Euler instability here: the Euler critical load240 Pcr = pi^2*E*I/(K*L)^2 at resolved end conditions, the slenderness241 ratio from the radius of gyration and the yield-crossing242 classification with the euler_governs flag belong to243 structures/fem/buckling-analysis; this leaf takes K and r as given244 numbers.245- Reading the Euler arm below lambda_t as the allowable: inside the246 Johnson band the ideal Euler stress overpredicts the column strength247 (in the tube example it exceeds F_cy itself), exactly the248 overprediction the yield-anchored parabola corrects; the curve value249 below lambda_t is the johnson-parabola stress.250- Anchoring the parabola on the wrong stress: this leaf anchors on the251 solid-section compressive yield F_cy of a whole solid, round, tube252 or extruded member. Formed sheet stiffeners anchor on the local253 crippling stress F_cc and belong to structures/fem/crippling-254 analysis, whose scope excludes extruded and machined whole sections.255- Confusing the material curve with the column curve: the256 elastic-plastic stress-strain response and the secant or tangent257 modulus of the material itself are the ramberg-osgood leaf's258 content; here E and F_cy are plain material floats.259- Forgetting the wall-stability check: a thin formed section or260 thin-walled tube may cripple or buckle locally (plate-buckling,261 cylindrical-shell-buckling) before the yield-anchored column curve262 governs; this closed form assumes whole-section behavior.263- Mixing units: E in GPa with L and r in mm, or F_cy in MPa with264 A in m^2, silently corrupts F_col and P_col by factors of 1e9 or265 1e6; keep everything SI (Pa, m, m^2, N).266- Applying a bending interaction: the check is axial compression only;267 axial-plus-bending members belong to beam-column-analysis.268269## Behavior contract (gate 3)270271The inelastic column logic is exercised by the gate 3 contract test272scripts/test_inelastic_column_buckling.py against273scripts/inelastic_column_buckling_logic.py (pure stdlib unittest,274offline, deterministic). It asserts the two worked examples above, the275column strength curve sweeps and monotone shape for both materials,276the F_cy/2 tangency of both arms at lambda_t, the slope tangency, the277quadratic-decay quarter-drop identity, the yield anchor, the regime278flip and continuity across the transition, the Euler-arm279overprediction inside the Johnson band, the capacity and margin280linearities, all ValueError rejections of non-physical inputs, and the281canonical determinism digest. Run:282283python3 scripts/test_inelastic_column_buckling.py284285## Contract test286287The contract test must pass offline under BOTH interpreters used by288the pre-push hook environment (31 test methods, deterministic, under28920 seconds):290291/usr/bin/python3 skills/structures/fem/inelastic-column-buckling/scripts/test_inelastic_column_buckling.py292293and294295~/.pyenv/versions/3.13.12/bin/python3 skills/structures/fem/inelastic-column-buckling/scripts/test_inelastic_column_buckling.py296297## Compliance298299- FAR-25 and CS-25 are referenced, not reproduced: standards-map.yaml300 marks them gated: false and reference-only: true. Only the summary301 paraphrase of the applied-load and 1.5 ultimate-factor context is302 used (FAR 25.301 / CS 25.301, FAR 25.303 / CS 25.303), never303 standard text.304- The Euler-Johnson tangent column strength curve is standard305 engineering methodology (Bruhn, Niu, Timoshenko and Gere, Roark),306 summary-only.307- compliance: STANDARDS-REF, gated: false.