calcnote ACI 318-19
Methodology Feedback Run a calc

Biaxial column interaction surface: 16×20 tied column verification

Test case TC-15 verifies calcnote's three-dimensional P-Mx-My biaxial solver on an unsymmetric rectangular column (16×20 in with 10-#8 bars) subjected to simultaneous major-axis and minor-axis bending. Because published textbook biaxial examples rely on the approximate Bresler reciprocal load formula or visual chart interpolation rather than exact 2D clipped-compression-zone integration at inclined neutral-axis angles θ, this witness case is cross-validated against two independent first-principles strain-compatibility derivations implemented without access to calcnote's engine source.

Verdict

Across all anchor points on the demand plane λ = 30.96° and at the factored operating point (Pu = 200 kip, Mux = 50 kip-ft, Muy = 30 kip-ft), calcnote agrees with the independent first-principles baseline to within ≤ 0.5% (with anchor-level agreement ≤ 0.02% across the strain-compatibility points and ≤ 0.5% across the demand-plane ray-scaling check).

Section and load inputs (TC-15)

Parameter Value Notes / ACI 318-19 reference
Gross dimensions b × h 16 in × 20 in Ag = 320.0 in2; Igx = 10,667 in4; Igy = 6,827 in4
Longitudinal steel 10-#8 (perimeter) Ast = 7.90 in2 (ρg = 2.47%, within 1% to 8% per §10.6.1.1)
Transverse ties & cover #3 ties @ 16 in, 1.5 in cover Bar-center offset from outer face = 1.5 + 0.375 + 0.500 = 2.375 in
Material strengths f′c = 4,000 psi, fy = 60 ksi β1 = 0.85 (§22.2.2.4.3); ϵty = 0.00207 (§21.2.2)
Factored loads Pu = 200 kip, Mux = 50 kip-ft, Muy = 30 kip-ft Resultant demand moment Mλ = 58.31 kip-ft (699.7 kip-in) at λ = 30.96°
Slenderness parameters kx = ky = 1.0, lux = luy = 120 in (klu/r)x = 20.0 ≤ 28.0 (short); (klu/r)y = 25.0 ≤ 28.0 (short)

2D bar coordinate layout

With a 16×20 in section, 1.5 in clear cover, #3 ties (dtie = 0.375 in), and #8 longitudinal bars (db = 1.000 in), the bar centers lie 2.375 in inside each perimeter face. Measured from the gross section centroid (x ∈ [−8, +8] in, y ∈ [−10, +10] in), the 10-#8 perimeter layout has 3 bars along the top and bottom 16-in faces (x = −5.625, 0.000, +5.625 in at y = ±7.625 in) and 4 bars along the left and right 20-in faces (y = −7.625, −2.542, +2.542, +7.625 in at x = ±5.625 in).

Demand-plane angle λ vs. neutral-axis angle θ

The factored end moments define the target moment angle λ in the (Mx, My) plane:

$$\lambda = \operatorname{atan2}(M_{uy},\, M_{ux}) = \operatorname{atan2}(30,\, 50) = 30.96^\circ, \qquad M_\lambda = \sqrt{50^2 + 30^2} = 58.31\text{ kip-ft}$$

Because Igx ≠ Igy (20 in ≠ 16 in), setting the neutral-axis angle θ equal to 30.96° does not produce a moment vector aligned with 30.96°. Instead, at each target neutral-axis depth c, calcnote solves for the neutral-axis angle θ(c) such that the internal nominal moment vector (Mnx(c,θ), Mny(c,θ)) satisfies atan2(Mny, Mnx) = λ = 30.96°. Across the tension-controlled and transition zones on this section, the required neutral-axis inclination θ varies between 37.8° and 41.3° to hold the output moment plane fixed at λ = 30.96°.

Demand-plane anchor comparison (λ = 30.96°)

The table below lists the exact strain-compatibility anchors computed on the λ = 30.96° plane, showing the converged neutral-axis angle θ, neutral-axis depth c, extreme tensile strain ϵt, strength reduction factor φ, nominal axial and moment components, and factored capacities (φPn, φMn):

Anchor θ (deg) c (in) ϵt φ Pn (kip) Mnx (kip-in) Mny (kip-in) φPn (kip) φMn (kip-ft)
1 · pure_compression_cap n/a ∞ n/a 0.650 1228.1 0.0 0.0 798.3 0.0
2 · cap_intersection 39.47 22.98 -0.00009 0.650 1228.0 1698.2 1018.9 798.2 107.3
3 · arc_strain_zero 40.02 22.26 0.00000 0.650 1190.6 1875.4 1125.3 773.9 118.5
4 · arc_strain_pos_half_ety 44.89 16.44 0.00103 0.650 773.4 3053.8 1832.2 502.7 192.9
5 · compression_controlled_limit 44.58 13.09 0.00207 0.650 425.0 3349.9 2010.0 276.2 211.6
6 · transition_lower 42.16 10.14 0.00357 0.775 119.1 3037.7 1822.6 92.3 228.8
7 · tension_controlled_limit 41.63 8.94 0.00446 0.849 0.1 2731.8 1639.1 0.1 225.4
8 · tension_controlled_deep 41.63 8.94 0.00446 0.849 0.1 2731.8 1639.1 0.1 225.4
9 · pure_bending 41.63 8.94 0.00446 0.849 0.0 2731.8 1639.1 0.0 225.4

Operating-point capacity and ray scaling

In the 2D demand plane λ = 30.96°, the factored load point is (Pu, Mλ) = (200.0 kip, 58.31 kip-ft). Tracing the radial load ray from the origin (0, 0) through (200.0 kip, 58.31 kip-ft) to the factored boundary curve (φPn, φMn) gives the boundary intersection:

Automated regression lock

TC-15 runs automatically in the continuous verification test suite (tests/test_biaxial.py) on every commit. The test suite verifies 3D surface equilibrium, four-quadrant symmetry on the 16×20 section, convergence of the achieved moment angle λ across all anchors, and agreement with the independent first-principles demand-plane baseline within 0.5%.