Resources Numerical accuracy Calculation policy

Steel member strength to AISC 360-16

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.

frame/frame-design-aisc.js CadCraft 0.8.2 64-bit 12 calculations Reviewed

Tests bin/test-frame-design.mjs

Root fillet constants

64-bit

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.

Zx = bf tf (d − tf) + tw hc² ÷ 4 + 4 A_f (hc ÷ 2 − 0.2234 r); Cw = Iy ho² ÷ 4; rts = √(√(Iy Cw) ÷ Sx)

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.

bf ÷ 2tf > 0.56 √(E ÷ Fy); h ÷ tw > 1.49 √(E ÷ Fy); bending: 1.0 √(E ÷ Fy), 3.76 √(E ÷ Fy)

Plain comparisons with no tolerance, so a ratio exactly at a limit counts as not slender.

  • frame/frame-design-aisc.js
  • lines 40 to 48
  • CadCraft 0.8.2
/** What AISC's slender-element rules would need and we do not build: { compression, bending } = null | { why, clause }. */
export function slender(p, fy, E) {
  const k = Math.sqrt(E / fy);
  const out = { compression: null, bending: null };
  if (p.bt > 0.56 * k || p.htw > 1.49 * k) out.compression = { why: 'slender-compression', clause: 'E7' };       // Table B4.1a cases 1, 5
  if (p.bt > 1.0 * k) out.bending = { why: 'slender-flange', clause: 'F3' };                                     // Table B4.1b case 10 (λr)
  else if (p.htw > 3.76 * k) out.bending = { why: 'noncompact-web', clause: 'F4' };                              // case 15 (λp)
  return out;
}

Tension strength

64-bit

The design strength in tension: yielding of the gross section, and rupture when a net area is given.

φPn = min(0.90 Fy Ag, 0.75 Fu Ae)

Two products and a minimum. Without an effective net area only yielding is checked.

  • frame/frame-design-aisc.js
  • lines 50 to 54
  • CadCraft 0.8.2
export function tension(p, fy, fu, Ae = null) {
  const yielding = 0.9 * fy * p.A;                                              // (D2-1), φt = 0.90
  const rupture = Ae ? 0.75 * fu * Ae : Infinity;                               // (D2-2), φt = 0.75
  return { phiPn: Math.min(yielding, rupture), yielding, rupture, clause: rupture < yielding ? 'D2(b)' : 'D2(a)' };
}

Compression strength

64-bit

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.

  • frame/frame-design-aisc.js
  • lines 56 to 66
  • CadCraft 0.8.2
export function compression(p, fy, E, G, Lcy, Lcz, Lt) {
  const Feof = (KLr) => Math.PI * Math.PI * E / (KLr * KLr);
  const Fcr = (Fe) => (fy / Fe <= 2.25 ? Math.pow(0.658, fy / Fe) * fy : 0.877 * Fe);        // (E3-2), (E3-3); Fy/Fe ≤ 2.25 ⇔ KL/r ≤ 4.71√(E/Fy)
  const KLry = Lcy / p.rx, KLrz = Lcz / p.ry;
  const Fey = Feof(KLry), Fez = Feof(KLrz);
  const Fet = (Math.PI * Math.PI * E * p.Cw / (Lt * Lt) + G * p.J) / (p.Ix + p.Iy);          // (E4-4), doubly symmetric
  const cands = [['y', Fey, KLry], ['z', Fez, KLrz], ['t', Fet, null]];
  const [mode, Fe, KLr] = cands.reduce((a, b) => (b[1] < a[1] ? b : a));
  const fcr = Fcr(Fe);
  return { phiPn: 0.9 * fcr * p.A, mode, Fe, Fcr: fcr, KLr, KLry, KLrz, Fey, Fez, Fet };
}

Moment gradient factor Cb

64-bit

The factor that raises the lateral-torsional buckling strength when the moment is not uniform.

Cb = 12.5 Mmax ÷ (2.5 Mmax + 3 M_A + 4 M_B + 3 M_C)

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.

  • frame/frame-design-aisc.js
  • lines 94 to 100
  • CadCraft 0.8.2
export function flexureMinor(p, fy, E) {
  const Mp = Math.min(fy * p.Zy, 1.6 * fy * p.Sy);                                            // (F6-1)
  const k = Math.sqrt(E / fy), lp = 0.38 * k, lr = 1.0 * k;
  let Mn = Mp;
  if (p.bt > lp) Mn = Math.min(Mp, fy * p.Zy - (fy * p.Zy - 0.7 * fy * p.Sy) * (p.bt - lp) / (lr - lp));   // (F6-2)
  return { phiMn: 0.9 * Mn, Mp };
}

Web shear coefficient

64-bit

The reduction of shear strength for a slender web or flange.

Cv = 1; 1.10 √(kv E ÷ Fy) ÷ (h ÷ t); 1.51 kv E ÷ ((h ÷ t)² Fy)

Three branches chosen by plain comparisons, with the specification's coefficients 1.10, 1.37 and 1.51.

  • frame/frame-design-aisc.js
  • lines 102 to 107
  • CadCraft 0.8.2
function cv(h_t, kv, fy, E) {
  const a = Math.sqrt(kv * E / fy);
  if (h_t <= 1.10 * a) return 1;                                                              // (G2-3)
  if (h_t <= 1.37 * a) return 1.10 * a / h_t;                                                 // (G2-4)
  return 1.51 * kv * E / (h_t * h_t * fy);                                                    // (G2-5)
}

Shear strength along the web

64-bit

The design shear strength in the direction of the web.

φVn = φ 0.6 Fy d tw Cv; φ = 1.0 when h ÷ tw ≤ 2.24 √(E ÷ Fy), else 0.9

One product. The web area is the full depth times the web thickness.

  • frame/frame-design-aisc.js
  • lines 108 to 113
  • CadCraft 0.8.2
export function shearMajor(p, fy, E) {
  const Aw = p.d * p.tw;                                                                      // (G2-1)
  if (p.htw <= 2.24 * Math.sqrt(E / fy)) return { phiVn: 1.0 * 0.6 * fy * Aw, phi: 1.0, Cv: 1 };       // G2.1(a)
  const C = cv(p.htw, 5, fy, E);
  return { phiVn: 0.9 * 0.6 * fy * Aw * C, phi: 0.9, Cv: C };
}

Shear strength along the flanges

64-bit

The design shear strength in the direction of the flanges.

φVn = 0.9 × 0.6 Fy (2 bf tf) Cv, kv = 1.2

One product; the slenderness used for Cv is bf ÷ 2tf.

  • frame/frame-design-aisc.js
  • lines 114 to 118
  • CadCraft 0.8.2
export function shearMinor(p, fy, E) {
  const Aw = 2 * p.bf * p.tf;                                                                 // G4: Aw = bf tf per flange, kv = 1.2
  const C = cv(p.bt * 1, 1.2, fy, E);
  return { phiVn: 0.9 * 0.6 * fy * Aw * C, phi: 0.9, Cv: C };
}

Bending and axial force together

64-bit

The utilization of a member under axial force and bending about both axes.

Pr ÷ Pc ≥ 0.2: Pr ÷ Pc + 8⁄9 (Mrx ÷ Mcx + Mry ÷ Mcy); else Pr ÷ 2Pc + (Mrx ÷ Mcx + Mry ÷ Mcy)

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.

Every policy that takes this approach