Add structural calculation worksheets

Collection of engineering calculation projects (Python + Typst), each with
input, calc script, tests, results, and generated PDF where available.
This commit is contained in:
smillmorel 2026-09-21 12:19:20 -04:00
commit d5ac3fca7e
81 changed files with 18668 additions and 0 deletions

BIN
shore-post/assets/logo.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

View file

@ -0,0 +1,82 @@
#let navy = rgb("#1a3a5f")
#let muted = rgb("#626b73")
#let pass = rgb("#1f6b45")
#let fail = rgb("#9b2c2c")
#let calcsheet(
title: "Structural Calculation",
project: "",
prepared-by: "",
body,
) = {
set document(title: title, author: prepared-by)
set page(
paper: "us-letter",
margin: (x: 1in, top: 1.25in, bottom: 1in),
header: context {
grid(
columns: (1fr, 1fr),
align: (left, right),
image("../assets/logo.png", height: 30pt),
[#text(size: 9pt)[Project:] \
#text(size: 10pt, weight: "bold")[#project]],
)
},
footer: context {
set text(size: 8.5pt, fill: muted)
stack(
spacing: 4pt,
line(length: 100%, stroke: 0.5pt + muted),
[#prepared-by],
)
},
)
set text(font: "Libertinus Serif", size: 10pt, lang: "en")
set par(justify: true)
set heading(numbering: none)
show heading.where(level: 1): set text(size: 14pt, weight: "bold", fill: black)
show heading.where(level: 2): set text(size: 11pt, weight: "bold", fill: black)
show heading.where(level: 2): set block(above: 2em, below: 1em)
body
}
#let calcline(formula, note) = grid(
columns: (1.7fr, 1fr),
gutter: 4pt,
align: (left, left),
formula, text(size: 9pt, fill: muted, note),
)
#let check(label, demand, capacity, unit: "", ok: auto, demand-label: "Demand", capacity-label: "Capacity") = {
let utilization = demand / capacity
let passes = if ok == auto { utilization <= 1 } else { ok }
let color = if passes { pass } else { fail }
block(
breakable: false,
width: 100%,
stroke: 0.8pt + black,
inset: 8pt,
radius: 2pt,
)[
#grid(
columns: (1fr, auto),
[#text(weight: "bold")[#label]],
box(stroke: 0.8pt + color, inset: (x: 6pt, y: 2pt))[
#text(weight: "bold", fill: color)[#if passes { "OK" } else { "NOT OK" }]
],
)
#v(4pt)
#grid(
columns: (1fr, auto),
[
#demand-label: #calc.round(demand, digits: 2) #unit #h(14pt)
#capacity-label: #calc.round(capacity, digits: 2) #unit
],
[
D/C: #calc.round(utilization, digits: 2)
],
)
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

1038
shore-post/shore-post.pdf Normal file

File diff suppressed because it is too large Load diff

68
shore-post/shore-post.typ Normal file
View file

@ -0,0 +1,68 @@
#import "assets/sheet.typ": calcline, calcsheet, check
#show: calcsheet.with(
title: "Shore Post Analysis and Design",
project: "Deer Creek Shoring",
prepared-by: "Conemco Engineering",
)
#let round(value, digits: 2) = calc.round(value, digits: digits)
= Shore Post Analysis and Design
Analysis to determine the axial demand for heavy duty shore post supporting the building's roof adjacent to the masonry walls to be repaired.
#figure(
image("assets/tributary-areas.png", width: 69%),
caption: [Plan tributary area for highest loaded shore post pair.],
)
== Tributary Area
#let Bx = 6.25
#let By = 16
#let At = Bx * By
#calcline([$S_x = #Bx " ft"$], [Tributary width in x (Spacing in X)])
#calcline([$S_y = #By " ft"$], [Tributary width in y (Spacing in Y)])
#calcline(
[$A_t = S_x S_y = #round(At) " ft"^2$],
[Plan tributary area],
)
== Load Determination
#let DL = 40.0
#let SDL = 15.0
#let LL = 20.0
#let P = ((DL + SDL + LL) * At) / 2
#calcline([$D = #DL " psf"$], [Dead load])
#calcline([$D_("s") = #SDL " psf"$], [Superimposed dead load])
#calcline([$L_L = #LL " psf"$], [Live load])
#calcline(
[$P_max = display((( D + D_("s") + L_L) A_t ) / 2) = #round(P) " lbf"$],
[Maximum service load on one post],
)
== Shore Post Axial Capacity
Considering AS550 Heavy Duty Shore post
#let H = 14
#let Pcap = 6400
#calcline([$H = #H " ft"$], [Shore post height])
#calcline([$P_("cap") = #Pcap " lbf"$], [AS550 Shore post capacity as per tech report])
#v(8pt)
#check(
"Shore post axial capacity",
P,
Pcap,
unit: "lbf",
demand-label: [$P_max$],
capacity-label: [$P_"cap"$],
)