calcs/concrete-beam/concrete-beam.typ
smillmorel d5ac3fca7e Add structural calculation worksheets
Collection of engineering calculation projects (Python + Typst), each with
input, calc script, tests, results, and generated PDF where available.
2026-09-21 12:19:20 -04:00

119 lines
3.5 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
#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 ft simple span · #n.bw_in in × #n.h_in in section]
]
}
#figure(
beam-sketch,
caption: [#n.span_ft ft simply supported beam, #n.bw_in in × #n.h_in in rectangular section.],
)
== Loads and Beam Demand
#calcline([$L = #n.span_ft " ft"$], [Simple span])
#calcline([$B_t = #n.tributary_ft " ft"$], [Tributary width])
#calcline([$D = #n.D_psf " psf"$], [Dead load including superimposed dead])
#calcline([$L_L = #n.L_psf " psf"$], [Live load])
#calcline([$w_("sw") = #round(n.self_weight_klf, digits: 3) " kip/ft"$], [Beam self-weight])
#calcline(
[$w_u = 1.2 w_D + 1.6 w_L = #round(n.wu_klf, digits: 3) " kip/ft"$],
[Factored uniform line load],
)
#calcline(
[$M_u = w_u L^2 / 8 = #round(n.Mu_kipft) " kip·ft"$],
[Maximum positive moment],
)
#calcline(
[$V_u = w_u L / 2 = #round(n.Vu_kip) " kip"$],
[Support shear],
)
== Flexural Strength
#calcline([$b_w = #n.bw_in " in"$], [Beam width])
#calcline([$h = #n.h_in " in"$], [Overall depth])
#calcline([$d = #n.d_in " in"$], [Effective depth])
#calcline([$f'_c = #n.fc_ksi " ksi"$], [Concrete compressive strength])
#calcline([$f_y = #n.fy_ksi " ksi"$], [Steel yield strength])
#calcline([$A_s = #n.As_in2 " in"^2$], [Provided tension steel (2 No. 5)])
#calcline(
[$a = A_s f_y / (0.85 f'_c b_w) = #round(n.a_in, 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_kipft) " 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_in2, digits: 3) " in"^2$], [Minimum longitudinal steel])
#calcline([$A_("s,prov") = #round(n.As_in2, 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) " kip"$], [Concrete shear strength])
#calcline([$phi V_c = #round(n.phiVc_kip) " 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$],
)