#import "assets/sheet.typ": calcline, calcsheet, check #let data = json("results.json") #let n = data.values #let checks = data.checks #let round(value, digits: 2) = calc.round(value, digits: digits) #show: calcsheet.with( title: "Wood Stud Column — Axial Capacity", project: data.project, prepared-by: data.prepared_by, ) = Wood Stud Column — Axial Capacity Concentrically loaded 2x4 wood stud (SP / Southern Pine No. 2) analyzed for axial compression parallel to grain per NDS 2018 ASD. Pint parses `input.yaml`; `calc.py` computes the column stability factor $C_p$ (NDS 3.7.1.5, Eq. 3.7-1) and the adjusted compression capacity. The governing limit state is compression with buckling about the weak axis. == Geometry And Axial Load #let P = 400 #let L_ft = 6 #let b = 1.5 #let d = 3.5 #let A = b * d #metadata((P_lbf: P, A_in2: A)) #calcline([$P = #P " lbf"$], [Axial load, compression (ASD)]) #calcline([$L = #L_ft " ft" = #n.L_in " in"$], [Total stud length]) #calcline([$b = #b " in"$, $d = #d " in"$], [Actual dimensions of a nominal 2x4]) #calcline([$A = b d = #round(n.A_in2, digits: 2) " in"^2$], [Cross-sectional area]) #calcline([$K_e = #n.Ke$], [Effective-length factor, pinned-pinned (NDS 3.7.1.2)]) #calcline([$L_e = K_e L = #round(n.Le_in, digits: 1) " in"$], [Effective length]) #calcline([$d_"min" = min(b, d) = #n.d_least_in " in"$], [Least dimension; weak-axis buckling governs]) #calcline([$L_e / d_"min" = #round(n.Le_in / n.d_least_in, digits: 1) <= 50$], [Slenderness ratio, weak axis; cap $L_e/d <= 50$ (NDS 3.7.1.4)]) == Material And Adjustment Factors #calcline([$"Species/grade" = #n.species_grade$], [NDS Supplement reference values]) #calcline([$F_c = #n.Fc_psi " psi"$], [Reference compression parallel to grain]) #calcline([$E = #n.E_psi " psi"$, $E'_"min" = #n.Emin_psi " psi"$], [Moduli of elasticity]) #calcline([$C_D = #n.CD$, $C_M = #n.CM$, $C_t = #n.Ct$, $C_F = #n.CF$, $C_i = #n.Ci$], [Load duration ($C_D=1.0$ normal/occupancy, NDS 2.3.2), wet service, temperature, size ($C_F=1.15$ for 2x4 compression, NDS 4.3.6), incising (NDS Table 4.3.1)]) == Column Stability Factor (NDS 3.7.1.4) #calcline([$F^*_c = F_c C_D C_M C_t C_F C_i = #round(n.Fc_star_psi, digits: 1) " psi"$], [Adjusted reference compression, NDS 3.7.1.5]) #calcline([$E'_"min" = E_"min" C_M C_t C_i = #round(n.Emin_prime_psi, digits: 0) " psi"$], [Adjusted 5th-percentile modulus]) #calcline([$F_("cE") = 0.822 E'_"min" / (L_e / d_"min")^2 = #round(n.FcE_weak_psi, digits: 2) " psi"$], [Critical buckling stress, NDS Eq. 3.7-2 (coefficient 0.822)]) #calcline([$0.822$ (Euler coeff., NDS Eq. 3.7-2), $c = #n.c_sawn$], [Sawn-lumber column coefficient, NDS Eq. 3.7-1]) #calcline([$C_p = (1 + F_("cE")/F^*_c)/(2c) - sqrt(...) = #round(n.Cp, digits: 4)$], [Column stability factor, NDS Eq. 3.7-1 (3.7.1.5); weak axis governs]) == Adjusted Compression Capacity #calcline([$F'_c = F^*_c C_p = #round(n.Fc_prime_psi, digits: 2) " psi"$], [Adjusted compression design value, NDS 3.7.1.5]) #calcline([$f_c = P / A = #round(n.fc_psi, digits: 2) " psi"$], [Acting compression stress]) #calcline([$P_a = F'_c A = #round(n.Pa_lbf, digits: 1) " lbf"$], [Allowable axial load]) #v(7pt) #check("Axial Compression", checks.axial.demand, checks.axial.capacity, unit: "lbf", ok: checks.axial.ok, demand-label: [$P$], capacity-label: [$P_a$])