The design resistances of a rolled I or H section: classification, tension, bending, shear, buckling, lateral-torsional buckling and the combined checks.
How the precision is kept
Each resistance is a closed-form 64-bit expression with the standard's own coefficients and the partial factors of the project's National Annex table. The accuracy of a result is that of the standard's formulas and of the first-order analysis behind the forces. The fillet centroid constant is written to four digits.
Open item. Replace the fillet centroid constant 0.2234 by the expression (5 ÷ 6 − π ÷ 4) ÷ (1 − π ÷ 4).
Calculations under this policy
11 calculations in 1 source file. The code is read from the released app when this page loads. It is the calculation people run, not a copy kept for this page.
Closed-form expressions. The fillet term uses the constant 0.2234, which carries four digits of the exact 0.22336793894575233. The shear area is a difference of areas, floored at 0.
frame/frame-design-en.js
lines 32 to 44
CadCraft 0.8.2
export function props(shape, sec) {
const { d: h, bf: b, tw, tf } = shape, r = shape.r || 0;
const hw = h - 2 * tf, c = h - 2 * tf - 2 * r; // hw: between the flanges; c: clear of the fillets
const A = sec.A, Af = FILLET(r);
const hc = h - 2 * tf;
const Wply = b * tf * (h - tf) + tw * hc * hc / 4 + 4 * Af * (hc / 2 - 0.2234 * r);
const Wplz = tf * b * b / 2 + hc * tw * tw / 4 + 4 * Af * (tw / 2 + 0.2234 * r);
const Wely = sec.Iy / (h / 2), Welz = sec.Iz / (b / 2);
const Iw = sec.Iz * (h - tf) * (h - tf) / 4;
const Avz = Math.max(A - 2 * b * tf + (tw + 2 * r) * tf, 0); // 6.2.6(3)(a), rolled I and H, load parallel to the web
const Avy = A - hw * tw; // 6.2.6(3)(c), load parallel to the flanges
return { h, b, tw, tf, r, hw, c, A, Iy: sec.Iy, Iz: sec.Iz, It: sec.J, Iw, Wply, Wplz, Wely, Welz, Avz, Avy, iy: Math.sqrt(sec.Iy / A), iz: Math.sqrt(sec.Iz / A), cf: (b - tw - 2 * r) / 2, hb: h / b };
}
Cross-section class
64-bit
The class of the flange and web in compression and in bending.
ε = √(235 ÷ fy); flange c ÷ t ≤ 9ε, 10ε, 14ε; web ≤ 72ε, 83ε, 124ε (bending) or 33ε, 38ε, 42ε (compression)
Plain comparisons with no tolerance: a ratio exactly at a limit takes the better class.
frame/frame-design-en.js
lines 47 to 55
CadCraft 0.8.2
/** Table 5.2: rolled I, parts in compression (flange) / bending and compression (web). */
export function classify(p, fy) {
const eps = Math.sqrt(235 / fy);
const cls = (v, a, b, c) => (v <= a * eps ? 1 : v <= b * eps ? 2 : v <= c * eps ? 3 : 4);
const flange = cls(p.cf / p.tf, 9, 10, 14);
const webBend = cls(p.c / p.tw, 72, 83, 124);
const webComp = cls(p.c / p.tw, 33, 38, 42);
return { flange, webBend, webComp, bending: Math.max(flange, webBend), compression: Math.max(flange, webComp), epsilon: eps };
}
Tension resistance
64-bit
The design tension resistance of the gross section, and of the net section when one is given.
Nt,Rd = min(A fy ÷ γM0, 0.9 A_net fu ÷ γM2)
Two products and a minimum. Without a net area only the gross section is checked.
The plastic shear resistance, and the shear buckling resistance of a slender web.
Vpl,Rd = Av fy ÷ (√3 γM0); λ̄w = hw ÷ (86.4 tw ε); χw = η or 0.83 ÷ λ̄w
√3 is computed, not typed. The constant 86.4 is the one the standard prints for a web without stiffeners. Only the web's contribution is counted beyond the buckling limit.
frame/frame-design-en.js
lines 67 to 79
CadCraft 0.8.2
export function shearMajor(p, fy, na) {
const Av = Math.max(p.Avz, na.eta * p.hw * p.tw); // 6.2.6(3)(a)
const eps = Math.sqrt(235 / fy);
const VplRd = Av * fy / (Math.sqrt(3) * na.gammaM0); // (6.18)
const buckling = p.hw / p.tw > 72 * eps / na.eta; // 6.2.6(6)
if (!buckling) return { VplRd, Av, buckling, VRd: VplRd };
// EN 1993-1-5 §5.2: web contribution only (the flanges' share is left out), no intermediate stiffeners (kτ = 5.34),
// non-rigid end post: χw = η for λ̄w < 0.83/η, else 0.83/λ̄w; the cap is η fy hw tw / (√3 γM1)
const lamW = p.hw / (86.4 * p.tw * eps); // (5.6) with kτ = 5.34
const chiW = lamW < 0.83 / na.eta ? na.eta : 0.83 / lamW; // Table 5.1
const VbRd = Math.min(chiW * fy * p.hw * p.tw / (Math.sqrt(3) * na.gammaM1), na.eta * fy * p.hw * p.tw / (Math.sqrt(3) * na.gammaM1)); // (5.2), (5.1)
return { VplRd, Av, buckling, lamW, chiW, VbRd, VRd: VbRd };
}
Bending resistance with high shear
64-bit
The major-axis bending resistance reduced when the shear exceeds half the plastic shear resistance.
Applied to class 1 and 2 sections; a class 3 section is left unreduced, as the code's comment says.
frame/frame-design-en.js
lines 84 to 92
CadCraft 0.8.2
/** 6.2.8: major-axis bending resistance with high shear (V > 0.5 Vpl): fy reduced in the shear area by (1 − ρ). */
export function bendingWithShear(p, fy, na, cls, VEd, VplRd) {
const base = bendingMajor(p, fy, na, cls).McRd;
if (VEd <= 0.5 * VplRd) return { McRd: base, rho: 0 };
const rho = Math.pow(2 * VEd / VplRd - 1, 2); // (6.20)
const Aw = p.hw * p.tw;
const W = cls <= 2 ? p.Wply - rho * Aw * Aw / (4 * p.tw) : p.Wely; // (6.30) for class 1–2 I-sections; class 3 is left unreduced
return { McRd: Math.min(base, W * fy / na.gammaM0), rho };
}
Bending and axial force on the cross-section
64-bit
The utilization of the cross-section under axial force and bending about both axes.
class 1–2: (My ÷ M_N,y)² + (Mz ÷ M_N,z)^β, β = max(5n, 1); class 3: σ ÷ (fy ÷ γM0)
The reduced moments divide by (1 − 0.5a) and (1 − a), which are positive because a is capped at 0.5. An axial force at or above the plastic resistance returns an infinite ratio.
The design bending resistance of an unrestrained segment.
Mcr = C1 (π² E Iz ÷ L²) √(Iw ÷ Iz + L² G It ÷ (π² E Iz)); λ̄LT = √(W fy ÷ Mcr); Mb,Rd = χLT W fy ÷ γM1
The critical moment is the closed form for a load at the shear center and end warping free. A zero moment diagram gives C1 = 1 from the engine, so Mcr is not zero.
The diagram counts as straight when no station is further than 2 % of the peak from the line between the end moments. The 1e-9 N·mm limits that guard the ratios are absolute.
frame/frame-design-en.js
lines 174 to 195
CadCraft 0.8.2
/**
* Equivalent uniform moment factor Cm of Table B.3 from a segment's moment series (signed, x in mm).
* Linear diagram: 0.6 + 0.4ψ ≥ 0.4 (ψ = M_small / M_large of the end moments). A diagram with a load between the ends:
* 0.95 + 0.05 αh (uniform load) or 0.90 + 0.10 αh (point load), αh = hogging end moment / sagging maximum, 0 when the
* ends are not hogging. This is the table's two common shapes read by the diagram; other shapes → the same linear rule.
*/
export function cm(x, M, hasPointLoad) {
const n = M.length - 1, M0 = M[0], M1 = M[n];
const big = Math.max(Math.abs(M0), Math.abs(M1));
if (big < 1e-9 && Math.max(...M.map(Math.abs)) < 1e-9) return 1;
let dev = 0;
for (let k = 0; k <= n; k++) dev = Math.max(dev, Math.abs(M[k] - (M0 + (M1 - M0) * x[k] / x[n])));
const peak = Math.max(...M.map(Math.abs));
if (dev <= 0.02 * peak) {
const lo = Math.abs(M0) <= Math.abs(M1) ? M0 : M1, hi = Math.abs(M0) <= Math.abs(M1) ? M1 : M0;
const psi = hi === 0 ? 1 : lo / hi;
return Math.max(0.6 + 0.4 * psi, 0.4);
}
const Ms = Math.max(...M), Mh = Math.max(0, -Math.min(M0, M1));
const ah = Ms > 1e-9 ? Math.min(Mh / Ms, 1) : 0;
return hasPointLoad ? 0.90 + 0.10 * ah : 0.95 + 0.05 * ah;
}
In detail
Method
EN 1993-1-1:2005+A1:2014: Table 5.2, 6.2.3 to 6.2.9, 6.3.1, 6.3.2.2, Annex B method 2; EN 1993-1-5 §5 for a web beyond the shear buckling limit. Each function names its clause in the code.
Number types
64-bit numbers. Units mm, N, MPa, N·mm.
Tolerances
The moment factor Cm treats a diagram as a straight line when it leaves the line between its ends by at most 2 % of its peak, and as zero when every moment is below 1e-9 N·mm (absolute).
Limits
Class 4 sections, welded sections, torsion and second-order effects are not built. The factor C1 for the critical moment is taken from the quarter-point expression of AISC F1-1 by the engine.
Approach: 64-bit, stated limit
The arithmetic is 64-bit, but the method or the data sets the accuracy: a solver tolerance, a mesh, a step size, a datum shift, a table. The limit is stated where the result is shown.