The design strengths of a rolled I-shape in tension, compression, bending and shear, and the combined bending and axial check.
How the precision is kept
Each strength is one or a few closed-form 64-bit expressions with the coefficients the specification prints. The accuracy of a result is that of the specification's formulas and of the first-order analysis behind the forces, not of the arithmetic. One geometric constant for the root fillets is written to four digits.
Open item. Replace the fillet centroid constant 0.2234 by the expression (5 ÷ 6 − π ÷ 4) ÷ (1 − π ÷ 4), which is 0.22336793894575233 in 64-bit.
Calculations under this policy
12 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.
The area of one root fillet over r², and how far its centroid is from the corner over r.
area ÷ r² = 1 − π ÷ 4; centroid ÷ r = 0.2234
The area factor is computed from the 64-bit π. The centroid factor is the constant 0.2234; the exact value (5 ÷ 6 − π ÷ 4) ÷ (1 − π ÷ 4) is 0.22336793894575233, so the constant carries four digits. It enters only the fillets' share of the plastic moduli.
frame/frame-design-aisc.js
line 25
CadCraft 0.8.2
const FILLET = 1 - Math.PI / 4, FC = 0.2234; // spandrel area / r² and its centroid distance from the corner / r
Section properties for the checks
64-bit
Plastic and elastic moduli, radii of gyration, the warping constant and the slenderness ratios of an I-shape.
Closed-form expressions from the shape's dimensions and the analysis section's A, I and J. The fillet term uses the four-digit constant 0.2234. The square roots are of products of positive numbers.
frame/frame-design-aisc.js
lines 27 to 38
CadCraft 0.8.2
export function props(shape, sec) {
const { d, bf, tw, tf } = shape, r = shape.r || 0;
const ho = d - tf, hw = d - 2 * (tf + r), hc = d - 2 * tf; // hw: clear between the fillets (AISC h = d − 2k)
const Af = FILLET * r * r;
const Zx = bf * tf * (d - tf) + tw * hc * hc / 4 + 4 * Af * (hc / 2 - FC * r);
const Zy = tf * bf * bf / 2 + hc * tw * tw / 4 + 4 * Af * (tw / 2 + FC * r);
const Sx = sec.Iy / (d / 2), Sy = sec.Iz / (bf / 2);
const Cw = sec.Iz * ho * ho / 4;
const rx = Math.sqrt(sec.Iy / sec.A), ry = Math.sqrt(sec.Iz / sec.A);
const rts = Math.sqrt(Math.sqrt(sec.Iz * Cw) / Sx);
return { d, bf, tw, tf, r, ho, hw, A: sec.A, Ix: sec.Iy, Iy: sec.Iz, J: sec.J, Zx, Zy, Sx, Sy, Cw, rx, ry, rts, htw: hw / tw, bt: bf / (2 * tf) };
}
Slender-element limits
64-bit
Decides whether a flange or web is too slender for the checks that are built.
The design strength in compression for flexural buckling about both axes and torsional buckling.
Fe = π² E ÷ (KL ÷ r)²; Fcr = 0.658^(Fy ÷ Fe) Fy or 0.877 Fe; φPn = 0.9 Fcr Ag
The lowest of three elastic stresses governs. The branch is chosen by Fy ÷ Fe ≤ 2.25 with no tolerance. The divisions by the buckling lengths are not guarded in this function; the engine passes lengths above 0.
The quarter-point moments are read by straight-line interpolation between the diagram's stations. Cb is 1 when the largest moment is below 1e-9 N·mm, an absolute limit.
frame/frame-design-aisc.js
lines 68 to 71
CadCraft 0.8.2
export function cb(M) {
const { max, a, b, c } = M;
return max < 1e-9 ? 1 : 12.5 * max / (2.5 * max + 3 * a + 4 * b + 3 * c); // (F1-1), Rm = 1
}
Major-axis bending strength
64-bit
The design bending strength with lateral-torsional buckling and flange local buckling.
Lp = 1.76 ry √(E ÷ Fy); Lr by (F2-6); Mn by (F2-1) to (F2-4); φMn = 0.9 Mn
Closed-form 64-bit expressions with the specification's printed coefficients (1.76, 1.95, 6.76, 0.078, 0.7). The zone is chosen by comparing the unbraced length with Lp and Lr without a tolerance.
frame/frame-design-aisc.js
lines 73 to 92
CadCraft 0.8.2
export function flexureMajor(p, fy, E, Lb, Cb) {
const Mp = fy * p.Zx;
const Lp = 1.76 * p.ry * Math.sqrt(E / fy); // (F2-5)
const c = 1; // doubly symmetric I (F2-8a)
const x = p.J * c / (p.Sx * p.ho);
const Lr = 1.95 * p.rts * E / (0.7 * fy) * Math.sqrt(x + Math.sqrt(x * x + 6.76 * Math.pow(0.7 * fy / E, 2))); // (F2-6)
let Mn, zone;
if (Lb <= Lp) { Mn = Mp; zone = 'plastic'; }
else if (Lb <= Lr) { Mn = Math.min(Mp, Cb * (Mp - (Mp - 0.7 * fy * p.Sx) * (Lb - Lp) / (Lr - Lp))); zone = 'inelastic'; } // (F2-2)
else {
const q = Lb / p.rts;
const Fcr = Cb * Math.PI * Math.PI * E / (q * q) * Math.sqrt(1 + 0.078 * x * q * q); // (F2-4)
Mn = Math.min(Mp, Fcr * p.Sx); zone = 'elastic'; // (F2-3)
}
// flange local buckling of a noncompact flange (F3-1): Table B4.1b case 10, λp = 0.38√(E/Fy), λr = 1.0√(E/Fy)
const k = Math.sqrt(E / fy), lp = 0.38 * k, lr = 1.0 * k;
let flb = null;
if (p.bt > lp) { flb = Mp - (Mp - 0.7 * fy * p.Sx) * (p.bt - lp) / (lr - lp); Mn = Math.min(Mn, flb); }
return { phiMn: 0.9 * Mn, Mp, Lp, Lr, zone, flb, Cb };
}
Minor-axis bending strength
64-bit
The design bending strength about the weak axis.
Mp = min(Fy Zy, 1.6 Fy Sy); noncompact flange: straight line to 0.7 Fy Sy; φMn = 0.9 Mn
One minimum and, for a noncompact flange, one linear interpolation between the two slenderness limits.
The factor 8⁄9 is computed as 8 ÷ 9 in 64-bit, not typed as a decimal. The divisions by the strengths are not guarded here.
frame/frame-design-aisc.js
lines 120 to 123
CadCraft 0.8.2
export function interaction(Pr, Pc, Mrx, Mcx, Mry, Mcy) {
const m = Mrx / Mcx + Mry / Mcy, a = Pr / Pc;
return a >= 0.2 ? { ratio: a + 8 / 9 * m, eq: 'H1-1a' } : { ratio: a / 2 + m, eq: 'H1-1b' };
}
In detail
Method
ANSI/AISC 360-16, LRFD: D2, E3, E4, F1-1, F2, F3, F6, G2, G4, H1.1, with each function naming its clause in the code.
Number types
64-bit numbers. Units mm, N, MPa, N·mm.
Tolerances
Cb is taken as 1 when the largest moment of the segment is below 1e-9 N·mm (absolute).
Limits
Doubly symmetric rolled I-shapes only. Slender elements, welded shapes, torsion and second-order effects are not built; the check then says "not checked".
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.