Module: vernastruct.analysis.steel.ltb_nominal_moment (+ check_steel_beam_lrfd(Lb_m=…))
Code basis: AISC 360-16 §F2 (doubly symmetric compact I-shapes), formulas
as summarized in the NCEES FE Reference Handbook 10.4. Section constants from
published EC3 hot-rolled tables (eurocodeapplied.com / ArcelorMittal).
Status: ✅ PASS — software matches hand calculation exactly.
The VC-02 beam (IPE200, S355, 5.0 m span, D = 0.20 + L = 0.15 t/m² on a 1.5 m tributary) — but with the compression flange braced only every Lb = 3.0 m instead of continuously by the deck.
| Section constant (IPE200) | Value | Source |
|---|---|---|
| Sx (elastic) | 194.3 cm³ | library (v6 parity) |
| Zx (plastic) | 220.6 cm³ | EC3 tables |
| Iy (weak axis) | 142.3 cm⁴ | EC3 tables |
| J (torsion) | 6.98 cm⁴ | EC3 tables |
| tf | 8.5 mm | EC3 tables |
Derived: ry = √(Iy/A) = 22.345 mm; ho = h − tf = 191.5 mm; Cw ≈ Iy·ho²/4 = 1.3046×10¹⁰ mm⁶ (within ~3% of the tabulated warping constant — documented approximation); rts = √(√(Iy·Cw)/Sx) = 26.481 mm.
Zone limits:
Lp = 1.76·ry·√(E/Fy) = 1.76 × 22.345 × 23.7357 = 933.5 mm = 0.9335 m
X = J/(Sx·ho) = 69 800/37 208 450 = 1.8759e-3
Lr = 1.95·rts·(E/0.7Fy)·√(X + √(X² + 6.76(0.7Fy/E)²)) = 3.1133 m
Lb = 3.0 m → inelastic zone (Lp < Lb ≤ Lr):
Mp = Fy·Zx = 355 × 220 600 = 78.313 kN·m
0.7FySx = 248.5 × 194 300 = 48.284 kN·m
Mn = Mp − (Mp − 0.7FySx)·(Lb−Lp)/(Lr−Lp)
= 78.313 − 30.029 × 0.94800 = 49.844 kN·m
φMn = 0.9 × min(Mn, Fy·Sx) = 44.860 kN·m (28% below braced 62.079)
util = Mu/φMn = 22.889/44.860 = 0.51023 → PASS
Boundary checks: Lb = 0.5 m ≤ Lp → braced, Mn = Mp (then first-yield cap governs → φMn = 62.079, identical to VC-02). Lb = 4.0 m > Lr → elastic: Fcr = π²E/(Lb/rts)²·√(1+0.078X(Lb/rts)²) = 180.20 MPa → Mn = 35.013 kN·m.
| Quantity | Hand calc | Software | Match |
|---|---|---|---|
| Lp | 0.9335 m | 0.9335 m | ✅ |
| Lr | 3.1133 m | 3.1133 m | ✅ |
| Mn (Lb = 3.0, inelastic) | 49.844 kN·m | 49.844 kN·m | ✅ |
| φMn (Lb = 3.0) | 44.860 kN·m | 44.860 kN·m | ✅ |
| Mn (Lb = 4.0, elastic) | 35.013 kN·m | 35.013 kN·m | ✅ |
| φMn (Lb = 0, braced) | 62.0789 kN·m | 62.0789 kN·m | ✅ (VC-02 unchanged) |
Design conventions (documented): bending capacity remains capped at first yield Fy·Sx (conservative vs AISC Mp — preserves v6 parity and VC-02); Cb = 1.0 (uniform-moment conservative default; the true UDL value ≈ 1.14); Lb = 0 means "continuously braced by the roof deck" — the previous implicit assumption, now an explicit, reportable input. Sections without published Zx/Iy/J/tf (the heritage 10×10 square, UB254x146x43 pending Blue Book data) refuse an Lb > 0 check rather than guessing.
from vernastruct.core.sections import default_library
from vernastruct.analysis.steel import check_steel_beam_lrfd
r = check_steel_beam_lrfd(
section=default_library().get_steel("IPE200"),
span_m=5.0, D_ton_per_m2=0.20, L_ton_per_m2=0.15,
tributary_width_m=1.5, Fy_MPa=355.0,
Lb_m=3.0,
)
assert r.ltb_zone == "inelastic" and r.ok
Pinned as
tests/test_verification_cases.py::test_vc09_steel_ltb.
Every case in this manual is pinned as an automated regression test that runs on every build — no future change can silently break a verified result. © 2026 Hesham Salama.