calcs/concrete-beam/concrete-beam.typ
smillmorel aa790c1be5 Normalize spacing before units across all calc sheets
Plain units already get a gap from the source whitespace, so drop the
leading space inside the string; keep it only on superscripted units
(in^2, in^3, in^4, ft^2). Also fix the generated concrete-beam figure
labels. Regenerate all affected PDFs.
2026-09-21 20:38:04 -04:00

127 lines
3.6 KiB
Typst
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#import "assets/sheet.typ": calcline, calcsheet, check
#import "assets/beam-section.typ": beam-section
#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: "Concrete Beam Analysis",
project: data.project,
prepared-by: data.prepared_by,
)
= Reinforced Concrete Beam
Simple-span rectangular beam under uniform gravity load. Numbers come from `calc.py`. This sheet only presents them.
#let beam-sketch = {
set align(center)
box(width: 82%, inset: (y: 8pt))[
#line(length: 100%, stroke: 1.4pt)
#v(-7.5pt)
#grid(
columns: (auto, 1fr, auto),
align: (left, center, right),
polygon(fill: black, (0pt, 0pt), (8pt, 10pt), (-8pt, 10pt)),
text(size: 9pt)[$w_u$ uniform factored load],
polygon(fill: black, (0pt, 0pt), (8pt, 10pt), (-8pt, 10pt)),
)
#v(2pt)
#text(size: 9pt)[#n.span ft simple span · #n.bw in × #n.h in section]
]
}
#figure(
beam-sketch,
caption: [#n.span ft simply supported beam, #n.bw in × #n.h in rectangular section.],
)
== Loads and Beam Demand
#calcline([$L = #n.span "ft"$], [Simple span])
#calcline([$B_t = #n.tributary "ft"$], [Tributary width])
#calcline([$D = #n.D "psf"$], [Dead load including superimposed dead])
#calcline([$L_L = #n.L "psf"$], [Live load])
#calcline([$w_("sw") = #round(n.self_weight, digits: 3) "kip/ft"$], [Beam self-weight])
#calcline(
[$w_u = 1.2 w_D + 1.6 w_L = #round(n.wu, digits: 3) "kip/ft"$],
[Factored uniform line load],
)
#calcline(
[$M_u = (w_u L^2) / 8 = #round(n.Mu) "kip·ft"$],
[Maximum positive moment],
)
#calcline(
[$V_u = (w_u L) / 2 = #round(n.Vu) "kip"$],
[Support shear],
)
== Section and Reinforcement
#align(right, block(width: 2.5in, figure(
beam-section(),
caption: [Beam cross-section],
)))
== Flexural Strength
#calcline([$b_w = #n.bw "in"$], [Beam width])
#calcline([$h = #n.h "in"$], [Overall depth])
#calcline([$d = #n.d "in"$], [Effective depth])
#calcline([$f'_c = #n.fc "ksi"$], [Concrete compressive strength])
#calcline([$f_y = #n.fy "ksi"$], [Steel yield strength])
#calcline([$A_s = #round(n.As, digits: 2) " in"^2$], [Provided tension steel (#n.n_bars No. #n.bar_size)])
#calcline(
[$a = (A_s f_y) / (0.85 f'_c b_w) = #round(n.a, digits: 3) "in"$],
[Equivalent compression-block depth],
)
#calcline([$epsilon_t = #round(n.et, digits: 4)$], [Net tensile strain])
#calcline([$phi = #round(n.phi, digits: 2)$], [Strength reduction factor])
#calcline(
[$phi M_n = phi A_s f_y (d - a/2) = #round(n.phiMn) "kip·ft"$],
[Design flexural strength],
)
#v(7pt)
#check(
"Flexural strength",
checks.flexure.demand,
checks.flexure.capacity,
unit: "kip·ft",
ok: checks.flexure.ok,
demand-label: [$M_u$],
capacity-label: [$phi M_n$],
)
== Minimum Steel and Concrete Shear
#calcline([$A_("s,min") = #round(n.As_min, digits: 2) " in"^2$], [Minimum longitudinal steel])
#calcline([$A_("s,prov") = #round(n.As, digits: 2) " in"^2$], [Provided longitudinal steel])
#v(7pt)
#check(
"Minimum longitudinal reinforcement",
checks.minimum_steel.demand,
checks.minimum_steel.capacity,
unit: "in²",
ok: checks.minimum_steel.ok,
demand-label: [$A_("s,min")$],
capacity-label: [$A_("s,prov")$],
)
#v(10pt)
#calcline([$V_c = 2 sqrt(f'_c) b_w d = #round(n.Vc) "kip"$], [Concrete shear strength])
#calcline([$phi V_c = #round(n.phiVc) "kip"$], [Design concrete shear strength])
#v(7pt)
#check(
"Concrete shear",
checks.shear.demand,
checks.shear.capacity,
unit: "kip",
ok: checks.shear.ok,
demand-label: [$V_u$],
capacity-label: [$phi V_c$],
)