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:
commit
d5ac3fca7e
81 changed files with 18668 additions and 0 deletions
160
wood-joist/README.md
Normal file
160
wood-joist/README.md
Normal file
|
|
@ -0,0 +1,160 @@
|
|||
# Worksheets
|
||||
|
||||
Typst-first calculation sheets. Use Python only when the arithmetic is no longer comfortable in Typst.
|
||||
|
||||
```text
|
||||
lib/sheet.typ Shared letterhead, calc-line, check, check_service
|
||||
calcs/shore-post/ Typst-only completed calculation
|
||||
calcs/concrete-beam/ YAML numbers → Python → JSON → Typst
|
||||
calcs/concrete-beam2/ YAML quantities → Pint → JSON → Typst
|
||||
calcs/steel-beam/ YAML quantities → Pint + AISC XLSX → JSON → Typst
|
||||
calcs/wood-joist/ YAML quantities → Pint → JSON → Typst (NDS 2018 ASD)
|
||||
calcs/concentric-footing/ YAML quantities → Pint → JSON → Typst (ACI 318-19)
|
||||
```
|
||||
|
||||
Compile every sheet from this folder so the shared logo resolves.
|
||||
|
||||
## Typst-only
|
||||
|
||||
Edit numbers in `calcs/shore-post/shore-post.typ`.
|
||||
|
||||
```bash
|
||||
typst compile --root . calcs/shore-post/shore-post.typ calcs/shore-post/generated/shore-post.pdf
|
||||
typst watch --root . calcs/shore-post/shore-post.typ calcs/shore-post/generated/shore-post.pdf
|
||||
```
|
||||
|
||||
## Hybrid
|
||||
|
||||
Edit `calcs/concrete-beam/input.yaml`, then:
|
||||
|
||||
```bash
|
||||
python -m pip install -r requirements.txt
|
||||
python calcs/concrete-beam/calc.py
|
||||
typst compile --root . calcs/concrete-beam/beam.typ calcs/concrete-beam/generated/beam.pdf
|
||||
```
|
||||
|
||||
Optional output path: `python calcs/concrete-beam/calc.py path/to/input.yaml path/to/results.json`
|
||||
|
||||
```bash
|
||||
python -m pytest calcs/concrete-beam/test_concrete_beam.py
|
||||
```
|
||||
|
||||
`calc.py` writes named numbers. `beam.typ` does not recompute the design.
|
||||
|
||||
## Hybrid with units (Pint)
|
||||
|
||||
Same calculation pattern with unit-bearing YAML values. Write `span: "16 ft"`
|
||||
or `span: "192 in"`. Quote every quantity.
|
||||
|
||||
```bash
|
||||
python calcs/concrete-beam2/calc.py
|
||||
typst compile --root . calcs/concrete-beam2/beam.typ calcs/concrete-beam2/generated/beam.pdf
|
||||
python -m pytest calcs/concrete-beam2/test_concrete_beam2.py
|
||||
```
|
||||
|
||||
## Templates
|
||||
|
||||
Copy one of these folders into `calcs/` and rename it. Compile from the
|
||||
`worksheets/` directory so the shared logo resolves.
|
||||
|
||||
Typst-only:
|
||||
|
||||
```bash
|
||||
typst compile --root . template/typst-only/main.typ template/typst-only/generated/calculation.pdf
|
||||
```
|
||||
|
||||
Typst + Python:
|
||||
|
||||
```bash
|
||||
python template/typst-python/calc.py
|
||||
typst compile --root . template/typst-python/main.typ template/typst-python/generated/calculation.pdf
|
||||
python -m pytest template/typst-python/test_template.py
|
||||
```
|
||||
|
||||
## Steel beam
|
||||
|
||||
The steel beam sheet reads section properties directly from
|
||||
`aisc-shapes-database-v15.0.xlsx`. Edit `calcs/steel-beam/input.yaml`, then:
|
||||
|
||||
```bash
|
||||
python calcs/steel-beam/calc.py
|
||||
typst compile --root . calcs/steel-beam/beam.typ calcs/steel-beam/generated/beam.pdf
|
||||
python -m pytest calcs/steel-beam/test_steel_beam.py
|
||||
```
|
||||
|
||||
For a standalone JSON result on stdout, use:
|
||||
|
||||
```bash
|
||||
python calcs/steel-beam/calc.py --input calcs/steel-beam/input.yaml --stdout
|
||||
```
|
||||
|
||||
Use `--output path/to/results.json` to select a JSON output path. The reusable
|
||||
Python function is `compute(input_dict)` in `calcs/steel-beam/calc.py`.
|
||||
|
||||
`input.yaml` supplies the checked `Mu` and `Vu` demands. `beam.typ` determines
|
||||
and displays the gravity loads that produce those demands, and the test suite
|
||||
queries Typst metadata to verify the values match. The calculation covers
|
||||
major-axis AISC lateral torsional buckling, web shear, and point-load
|
||||
deflection. The test fixture locks the supplied `steel-beam.pdf` example for
|
||||
W6X8.5.
|
||||
|
||||
## Wood joist
|
||||
|
||||
The wood joist sheet reads reference design values and adjustment factors from
|
||||
`calcs/wood-joist/input.yaml`, then computes capacity checks per NDS 2018 ASD.
|
||||
|
||||
```bash
|
||||
python calcs/wood-joist/calc.py
|
||||
typst compile --root . calcs/wood-joist/beam.typ calcs/wood-joist/generated/wood-joist.pdf
|
||||
python -m pytest calcs/wood-joist/test_wood_joist.py
|
||||
```
|
||||
|
||||
For a standalone JSON result on stdout, use:
|
||||
|
||||
```bash
|
||||
python calcs/wood-joist/calc.py --input calcs/wood-joist/input.yaml --stdout
|
||||
```
|
||||
|
||||
Use `--output path/to/results.json` to select a JSON output path. The reusable
|
||||
Python function is `compute(input_dict)` in `calcs/wood-joist/calc.py`.
|
||||
|
||||
`input.yaml` supplies the checked demands (`w`, `wL`, `M`, `V`, `R` as
|
||||
Pint-quantity strings), `span`, section dimensions, bearing geometry, NDS
|
||||
reference design values, and adjustment factors — and no longer supplies `DL`,
|
||||
`LL`, or `spacing`. `beam.typ` determines the gravity loads inline (`DL = 25
|
||||
psf`, `LL = 50 psf`, span 9 ft, spacing 13 ft), derives `w`, `wL`, `M`, `V`,
|
||||
`R`, and presents them beside the Python-checked demands; the test suite
|
||||
reconciles the two via the `<wood-joist-loads>` metadata query. `calc.py` reads
|
||||
the demands and computes section properties, flexure (with `C_L`), shear,
|
||||
bearing, and L/240 + L/360 deflection. The two deflection checks use the shared
|
||||
`check_service` helper (Acting/Allowed/Utilization); flexure, shear, and
|
||||
bearing use `check`.
|
||||
|
||||
## Concentric footing
|
||||
|
||||
Square concentric spread footing under axial load per ACI 318-19 — soil bearing, one-way/two-way shear, flexure, minimum steel, concrete bearing.
|
||||
|
||||
```bash
|
||||
python calcs/concentric-footing/calc.py
|
||||
typst compile --root . calcs/concentric-footing/footing.typ calcs/concentric-footing/generated/footing.pdf
|
||||
python -m pytest calcs/concentric-footing/test_concentric_footing.py
|
||||
```
|
||||
|
||||
For a standalone JSON result on stdout, use:
|
||||
|
||||
```bash
|
||||
python calcs/concentric-footing/calc.py --input calcs/concentric-footing/input.yaml --stdout
|
||||
```
|
||||
|
||||
Use `--output path/to/results.json` to select a JSON output path. The reusable
|
||||
Python function is `compute(input_dict)` in `calcs/concentric-footing/calc.py`.
|
||||
|
||||
`input.yaml` supplies checked `Ps`/`Pu` (Pint quantities) and footing geometry/materials; `footing.typ` derives `Ps`/`Pu` inline from `DLr=10psf, LLr=20psf, Br=18.9ft, Lr=27.5ft, column 14in×14ft @145pcf` and reconciles via `<concentric-footing-loads>` query; bearing plate width `bp=6in` governs `A1`.
|
||||
|
||||
## New calculation
|
||||
|
||||
1. Copy the nearer example.
|
||||
2. Stay in Typst if it is arithmetic you want to see.
|
||||
3. If you need branching or iteration, write a small `calc.py` that reads YAML and writes `results.json` (`values` and `checks`).
|
||||
4. Lock one hand example in a pytest before treating the tool as stable.
|
||||
5. Extract a shared Python module only the second time you need the same procedure.
|
||||
Loading…
Reference in a new issue