calcs/concrete-beam/concrete-beam.typ
smillmorel 25f66bb4da Add generated beam cross-section figure to concrete-beam
Add reinforcement inputs (cover, stirrup size/spacing, longitudinal and
top bar size/count) and emit the derived bar geometry from calc.py.
beam_section.py renders a native Typst drawing of the section to
assets/beam-section.typ, which concrete-beam.typ imports as a figure.
Effective depth d remains authoritative for the tension-steel position.
2026-09-21 14:25:16 -04:00

130 lines
3.7 KiB
Typst
Raw 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.],
)
== Section and Reinforcement
#figure(
beam-section(),
caption: [
Beam cross-section: #n.bw in × #n.h in, No. #n.stirrup_size stirrups at #n.stirrup_spacing in
on center, and #n.n_bars No. #n.bar_size longitudinal bars (A_s = #n.As in²).
],
)
== 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],
)
== 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 = #n.As " in"^2$], [Provided tension steel (2 No. 5)])
#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: 3) " in"^2$], [Minimum longitudinal steel])
#calcline([$A_("s,prov") = #round(n.As, digits: 3) " 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$],
)