Files
willtools-demo/docs/eriksson-wall-method.md
T
will 52d94303bc
ci / test (push) Has been cancelled
WillTools: precast shop-ticket QC and panel handling tools
Public demo snapshot of an in-house pyRevit extension for precast concrete
shop-ticket QC (37 checks / 46 checklist rows) and a standalone panel
handling solver (PCI Chapter 8).

- No client, job, plant or product data: knowledge layers ship as
  structural templates only.
- Ticket QC's model-read escalation targets a LAN model server endpoint
  (configurable), not a cloud provider.
- Built from the private development repo via tools/make_dist.py.
2026-09-03 16:33:47 -05:00

427 lines
26 KiB
Markdown
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.
# Eriksson Wall — method & structure spec, and the gap to our code
What Eriksson Wall actually computes, reverse-engineered from **six** real
output packages, so that `tools/panelanalysis.py` + the `panelanalysis/1` deck
schema can replace it. Part A is the spec; Part B is the concrete punch-list of
what our code must add to reach parity, ordered by importance for a wall panel.
**Scrub note.** The packages carry a client, a developer, an engineering
office, its address, job numbers, designer initials and per-run model
(`.ewf`) filenames. **None of those appear here.** The samples are named only
by their piece-mark / sheet labels, which are generic precast nomenclature:
| label | what it is (type, not identity) |
| --- | --- |
| **WPA1.0** | 12" solid wall, non-prestressed, in-place only |
| **WPA2.0** | 16" horizontal wall, prestressed, handling + in-place |
| **WPA3.0** | 8" horizontal wall, non-prestressed, in-place only |
| **WPA4.0** | 8" vertical (spanning) wall, prestressed, one unified handling + in-place run |
| **SWA1.0** | 12" shear wall, non-prestressed |
| **MWH1.0** | 8" prestressed wall, one file carrying several analysis units |
Page cites are **PDF page numbers** written `WPA4.0 p.10`. Software on every
run is **Eriksson Wall v4.3.2**, spec **ACI 318-14**, losses **PCI Design
Handbook 8th Ed.** (The richer insulated-sandwich package studied earlier —
call it **WPB (v4.13.2)** — is `knowledge/library/notes/E1-wpb10-eriksson-package.md`;
this note reconciles against it and does not repeat its arithmetic proofs.)
Read: 2026-09-02, text layer via PyMuPDF, all six extract cleanly. Numbers
below are transcribed as printed; anything image-only is flagged in §A.8, not
guessed.
---
# Part A — the Eriksson method & structure
## A.1 The invariant section order, and the two-model split
Every Eriksson Wall run prints the same input blocks in the same order, then a
results half whose sections depend on which stages were enabled. Confirmed
identical across all six samples and WPB:
```
Project Information materials (f'ci/f'c, Eci/Ec, unit wt, type; rebar fy/Es,
strand fpu/Ep), prestress-loss method + humidity + release/
erection times, exterior/interior soil, LOAD COMBINATIONS
Settings deflection limit, 2nd-order + βd, R-value, stress options,
in-place stress limits, handling stress limits, flexure
options, resistance factors, development multipliers,
shear options, axial options ← this page IS the method
Concrete Extents panel geometry (top/bottom elevation, height, section
type, "top in form", miters, width, thickness), openings/
reveals/solid zones, then SECTION PROPERTIES (Area, Cx, Cy,
Izz, Iyy, Izy, Sb, St)
Structural Model restraints (foundation + floor ties, each an elevation +
type + gravity/thermal restraint + stiffness), releases,
concentrated loads, load options, WIND loads, SEISMIC
loads, TEMPERATURE loads, SOIL loads, additional self
weight, structural sections
[handling runs] Handling panel weight + CG, face lifters, edge lifters, then
per-stage Stripping / Transportation / Erection blocks
Reinforcement strands / rebar / mesh / interrupts tables, plus a Strand
summary box (Aps, cgx, cgy, ex, ey) and a Mild box (As...)
------ results ------
[handling] Stripping (and Transportation/Erection if run):
Reactions (+ Tilt Potential) → Stresses table → Flexure
table → Shear table
[in-place] In-Place Strength Summary:
Reaction Forces → Flexure table → Shear table → Axial table
In-Place Service Summary:
Tension table → Total Compression table → Deflection graph
```
Every page carries the header (`Eriksson Wall v4.3.2` / `Licensee:` / timestamp)
and footer (`<file>.ewf` / copyright / `pg. n / N`).
**Handling and In-Place are two separate models of the same panel, and the two
are NOT always in the same run.** WPB ran them as separate `.ewf` files (one
mild-only, one strand-only, each deliberately blind to the other's steel).
WPA4.0 instead runs **both in one file** (§A.3/A.4) — strand credited in both.
Which pattern you get is a per-job modelling choice, not an Eriksson rule. What
IS invariant: the block order above, and that a handling result section only
appears when that stage is enabled.
**A per-file run can also contain several analysis units.** MWH1.0 prints
`2.1 In-Place Strength Summary` and `4.1 In-Place Strength Summary`
(MWH1.0 p.1763, p.3260) — one document, multiple numbered runs. Our schema must
tolerate a package that is a *list* of runs, not assume one.
Reconciliation with WPB's per-run order: **identical.** WPB additionally had
`Sandwich Panel Properties`, `Design Parameters` (composite/non-composite
section interpolation) and `Horizontal Shear Analysis` — those appear **only for
insulated sandwich panels**. None of the six solid walls here print them (§A.7).
## A.2 The checks Eriksson runs, with the method as printed
| check | where | method / criterion as printed |
| --- | --- | --- |
| **Flexure** | handling + in-place | `Util = |Mu|/|ΦMn|`. ΦMn from **Whitney stress block** (Settings: `Flexure Method: Whitney Stress Block`) on a P-M interaction surface at the actual `Pu` (in-place). Columns carry `c`, `θ`, `As`, `A's`, `Aps`, `Loss`, `d`. **Φ is not constant** — it ramps 0.75→0.90 down the table (§A.2.1). |
| **Shear** | handling + in-place | ACI 318 **detailed method**: both `Vci` and `Vcw` printed side by side, `Vc = min(Vci, Vcw)`, `ϕVn = 0.75·Vc` (verified: WPA4.0 p.11 Loc 5.51 → 154.5/206.1 = 0.75). `bwd` printed as one product (in²). `∞` printed for `Vci` at a zero-moment station. Settings: `Shear Options: Treat as column, Use ACI 22.5.8.2`. |
| **Axial** | in-place only | Columns `Pu`, `ΦPn (C)`, `ΦPn (T)`, `ΦPcrit`, `Ag`. `ΦPcrit` is the **critical buckling** load (`∞` where slenderness does not bind). Settings: `Axial Options: Ignore tensile strength failures, Ignore buckling failures` (both defeat-able switches, both ON here). |
| **P-M interaction** | in-place | ΦMn is read off the interaction diagram at the station's `Pu`. The one-page summary prints an **Interaction Diagram (Controlling Section @ 0.95L)** (WPA4.0 p.9). |
| **Service tension / cracking** | in-place | extreme-fibre tension vs a **Cracking** limit = `7.5√f'c` (= 580.9 psi at 6000, WPA4.0 p.15). Prestressed: **Class U** `7.5√f'c` / **Class T** transition `12√f'c` (WPA4.0 p.15 section view). Non-prestressed: a single **Modulus of Rupture** `7.5√f'c` (SWA1.0 p.10). |
| **Service compression** | in-place | total compression vs **Limit = 0.6 f'c** (= 3600 psi at 6000, WPA4.0 p.16 / SWA1.0 p.17). |
| **Handling stresses** | handling | extreme-fibre tension vs **`5√f'ci` or `7.5√f'ci`** (per job, §A.6) and compression vs **`0.6 f'ci`** (= 2100 at 3500), with an `fci req` column = the f'ci the station would need. This is the check that usually **governs stripping** (§A.3). |
| **Deflection** | in-place | vs `L / 150` (or `L/120`, `L/240` per job, §A.6). Graph only, no table. |
| **Torsion** | — | **Eriksson Wall does not run torsion for a wall.** No torsion table in any of the six. (WPB's torsion table came from Eriksson *Beam*, a different program, for a lintel.) Not needed for wall parity. |
### A.2.1 The Φ ramp (flexure) — development, not strain
`Φ` in every flexure table runs `0.75 → 0.90` with distance from the piece end
(WPA4.0 p.10: 0.75 at 1.84 ft, 0.90 by mid-panel). It is **ACI 318-19 §21.2.3**:
Φ = 0.75 from the end through the **transfer** length, linear 0.75→0.90 to the
end of the **development** length, then 0.90 — not the c/dₜ strain transition.
The transfer/development lengths are scaled by the **Development Multipliers**
setting. WPB proved the mechanism (its own §4.1); these six confirm the ramp and
pin the multiplier at **1.0** for all v4.3.2 runs (§A.6), where WPB used **1.3**.
## A.3 Handling stages
Two stages are ever enabled on these walls; a third exists and is off:
| | Stripping | Transportation | Erection (Primary/Secondary) |
| --- | --- | --- | --- |
| **Load Multiplier** | **1.4** | **1.5** (WPB) | — (never run in any of the six) |
| Concrete strength | **Initial** (f'ci) | In-Place (f'c) | — |
| Stress limits | **Handling** (§A.6) | In-Place | — |
| Lift Type | Static Lift | Static Lift | — |
| Sling Angle | 60° | — | — |
Confirmed WPA4.0 p.7 (Stripping, mult 1.4, Initial, Handling limits, Static,
60°; Transportation/Erection "not being performed") and WPA2.0 p.853 (Stripping,
mult 1.4). The multiplier is the equipment/dynamic factor; **no strength-design
load factor stacks on top of it** (WPB §6: handling `Mu` = self-weight × the
stage multiplier, nothing else).
**PCI basis & rigging idealisation.** The panel is idealised as a **beam whose
supports are the lifter lines**, not dunnage. Lifters are entered as **Face
Lifters** and **Top-Edge Lifters**, each a number of columns and lateral
locations given as a **fraction of panel width** (WPA4.0 p.7: 2 columns at
0.207 from each side). The run prints:
- `Panel weighs X kips and its center of gravity is …` (WPA4.0 p.7),
- **Reactions** as `Location | Vertical | Horizontal (k)` per lifter line, with
a **Tilt Potential (deg)** value (WPA4.0 p.10),
- reactions are printed **unfactored per lifter** while the Stresses/Flexure
moments are **factored** — the run says which is which.
The Stripping **Stresses** table (WPA4.0 p.10) is the governing handling check:
`Loc | Tension | Limit | Comp. | Limit | fci req | Mg | Aps | Losses | Pi | Mzi | Myi`.
`Pi` is the prestress force (negative = compression), `Mzi/Myi` the prestress
moments about the two axes, `Mg` the stage moment.
## A.4 The In-Place model
The panel is analysed as a member spanning between its **restraints** (a
foundation connection + floor ties — WPA4.0 p.6 lists 5 restrained elevations)
under lateral + gravity + axial demand.
**Load cases applied** (Structural Model, WPA4.0 p.6 / SWA1.0 p.12):
| case | how applied |
| --- | --- |
| Dead + Self weight | self weight distributed; self-weight eccentricity from panel CG |
| Live, Roof | as part of concentrated loads / tributary |
| **Wind** | out-of-plane **distributed**, a `W1…W4` table of **Pressure** and **Suction** magnitudes (psf), varying start→end over height (WPA4.0 p.6: 68/82 psf then 212/212 psf zones) |
| **Seismic** | zone(s) over `x/L`, `Cs` as % of dead, applied to Deadload + Self weight |
| **Earth / soil** | interior & exterior soil, elevation + surcharge; lateral pressure coefficient set in Project Information |
| Temperature | exterior/interior °F + thermal-elasticity multiplier (out-of-plane thermal bow) |
| **Concentrated axial** | `P1/P2 …` at an elevation with an eccentricity, split Dead/Live/Roof/Pres/Suct/Seis (SWA1.0 p.12: 139.6k D + 44.6k L each) |
**Load combinations** (Project Information): the ACI 318-14 set with columns
`D L R W E T H`, printed as **Strength** (8 combinations: 1.4D; 1.2D+1.6L+0.5R;
… 0.9D+1.0W; 0.9D+1.0E — each with `T` at 1.0 and soil `H` at 1.6, Include=1)
and **Service** (5–10 combinations, WPA4.0 p.4 shows 10; SWA1.0 p.10 shows 5).
The result tables are headed `All Combinations` and each controlling section
names its governing LC (e.g. WPA4.0 p.9 `Flexure LC: LC 7 - 0.9D + 1.0W + 1.0T + 1.6H`).
**Second-order / slenderness.** Settings `2nd Order Effects: P-Delta`,
`Analysis βd: Non-Sway` (all six). The restraints define the unbraced spans; the
axial table's `ΦPcrit` is the buckling capacity; the summary prints a controlling
P-M interaction section at `0.95L`. (WPB additionally printed a `Second Order
Effects` block with `kL/r`, 1st-order vs 2nd-order moment, `% Increase`.)
## A.5 Service checks
- **Tension**: `Location | Tension (psi) | Cracking (psi) | M (k-ft) | P (k)`
(+ prestress `Aps/Losses/Pi/Mzi/Myi`). Cracking = **7.5√f'c**. Prestressed
runs classify each section **Class U** (≤7.5√f'c) / **Class T** (≤12√f'c)
(WPA4.0 p.15). Non-prestressed use a single Modulus-of-Rupture 7.5√f'c.
- **Total Compression**: `Location | Comp. (psi) | Limit (psi) | M | P`.
Limit = **0.6 f'c** = 3600 (WPA4.0 p.16, SWA1.0 p.17).
- **Deflection**: graph vs allowable = the deflection limit (§A.6). A `Δlim`
and `Δmax` also print in the one-page summary.
- The controlling section for each prints a **Section View** block (section
properties Ag/Cx/Cy/Izz/Iyy, θ, strand Aps/%Loss/ex/ey, the stress vs limit).
## A.6 Settings / parameters Eriksson exposes (and the per-job variation)
The Settings page is the method statement. Verbatim-equivalent across the six,
with the per-job values called out:
```
Deflection Limit L/150 (WPA3, WPA4) | L/120 (WPA1) | L/240 (WPA2, SWA, MWH)
2nd Order Effects P-Delta | Analysis βd: Non-Sway
Stress Options Failure if cracked | Ignore Lateral Strand Eccentricity
| Use Principal Axis
In-Place Stress Limits Tension 7.5 √fc (Uncracked / Class U) / 12 √fc (Transition
/ Class T) | Compression 0.6 fc | Allowable Δfps 36 ksi
(non-prestressed prints one "Modulus of Rupture 7.5 √fc")
Handling Stress Limits Tension 5 √fc (WPA1, MWH, WPB) OR 7.5 √fc (WPA2, WPA3,
WPA4) | Compression 0.6 fc ← PER-JOB, both occur
Flexure Options Method: Whitney Stress Block | Cracking Check: None
Resistance Factors Developed: Tension 0.90, Compression 0.65, Shear 0.75
Transferring: Tension 0.75
(values verified against the shear tables; the printed
grid's column order is ambiguous — see §A.8)
Development Multipliers Strand Normal 1.0 | Debonded 2.0 | Cut 1.0 | Mild 1.0
(ALL v4.3.2 runs here; WPB v4.13.2 used 1.3 — PER-JOB)
Shear Options Treat as column | Use ACI 22.5.8.2
Axial Options Ignore tensile strength failures | Ignore buckling failures
Prestress Losses PCI Design Handbook | Humidity 70 | Release ~8 hrs |
Erection 30 days
Materials f'ci 2.5–3.5 ksi, f'c 6.0 ksi, 150 pcf normalweight;
strand fpu 270, Ep 28500; mild fy 60, Es 29000
```
## A.7 Result presentation
- **Per-check tables**, each preceded by a `Legend`, a `Max/Min` header block, a
`Summary Graph` (x-axis in **inches**, 11 ticks 0→L) and a `Summary Table`.
- **`Loc.` always first, in feet, two decimals.** Signs: sagging +, hogging −;
a separate `θ (deg)` column carries the sense (0 sagging / 180 hogging). `c`
prints an inch mark inside the cell.
- **Zero rows at the piece ends are printed, not suppressed** (Φ, ΦMn, Aps all
0.00 there). `∞` where a quantity is genuinely unbounded. **No colour, no
FAIL flag** — the verdict lives in the `Max Utilization:` header and the
engineer's margin.
- Station spacing ≈ **L/20** plus a straddling pair at every geometric
discontinuity; **Section Properties at L/10** (11 rows).
- **A one-page summary** (WPA4.0 p.9) collects, per stage: utilizations
(shear/flexure/axial), controlling LC, `Max Comp/Tension vs limit`, and the
P-M interaction diagram. This is the at-a-glance sheet an engineer reads first.
- Column sets, exactly:
- **Handling Stresses**: `Loc | Tension | Limit | Comp | Limit | fci req | Mg | Aps | Losses | Pi | Mzi | Myi`
- **Flexure (handling)**: `Loc | Util | Mu | Φ | ΦMn | c | θ | As | A's | Aps | Loss | d`
- **Flexure (in-place)** adds `Mcr | Pu | ΦPn` (15 cols)
- **Shear**: `Loc | Util | Vu | ϕVn | Vc | Vs Req | bwd | Av Min | Vci | Vcw` (Vci/Vcw handling only; in-place drops them)
- **Axial**: `Loc | Util | Pu | ΦPn(C) | ΦPn(T) | ΦPcrit | As | Aps | Loss | Ag`
- **Service Tension**: `Loc | Tension | Cracking | M | P | (Aps | Loss | Pi | Mzi | Myi)`
- **Service Compression**: `Loc | Comp | Limit | M | P | …`
## A.8 What Eriksson Wall does NOT do here (and what is image-only)
**Not done for a solid wall — do not build to mimic:**
- **No torsion** (§A.2). **No horizontal-shear / percent-composite / C-GRID**
interpolation — those are sandwich-panel sections (WPB only), absent from all
six solid walls.
- **No in-plane shear-wall / diaphragm design.** SWA1.0's in-plane shear
(`Vc1/Vc2`, ACI 11.5.4/11.6, `Vcmax = 10√f'c·h·d`), overturning/uplift
story-by-story spreadsheet, horizontal-joint shear-friction and corbel
(PCI 5.3.1) are all **hand Mathcad/spreadsheet** sheets by the engineer
(SWA1.0 p.4–8, p.18). Eriksson Wall itself only did SWA's **out-of-plane**
bending + axial + service. Our tool replaces the Eriksson part, not these.
- **No minimum-reinforcement / Mcr floor** (`Cracking Check: None`); `Mcr` is an
informational column.
**Image-only — flagged, NOT transcribed, needs image verification before any
number is trusted:**
1. **Resistance-factor grid** (WPA4.0 p.4): the Developed/Transferring × Tension/
Compression/Shear cell placement extracts jumbled (`0.9 / 0.75 / 0.65`). The
*values* 0.90/0.65/0.75 are verified against the shear tables and WPB p.71,
but confirm the exact cell layout from the rendered page.
2. **Interaction (P-M) diagrams** (WPA4.0 p.9, and each service Section View):
plotted curves, axis values partially OCR'd — read from image if a numeric
PM point is ever needed.
3. **Summary Graphs** on every results section: the curve is an image; only the
Summary Table beneath it is text. We rely on the table.
4. **Cover-sheet strand/reinforcing patterns and stripping-pick geometry**
(each p.1): dimensioned drawings — pick fractions (`.104L / .291L`) read as
text but the layout is an image.
---
# Part B — GAP analysis vs our current code
Scope of what exists today (`tools/panelanalysis.py`, `panelanalysis_schema.py`,
schema `panelanalysis/1`, engine `panellift`): a **self-weight handling beam**
solved on `structural_model.supports` (continuous beam, rigid supports),
strand-only capacity (`ΦMn`, `Mcr` informational, `ΦVn`, `f_se`) at L/20
stations, section properties at L/10, a demand-vs-capacity table with
`M/ΦMn` and `V/ΦVn` ratios, and every In-Place section rendered as an explicit
NOT-BUILT placeholder. Legend of status: **(a) covered · (b) partial/different ·
(c) missing.**
Ordered by importance for a wall panel: **flexure / shear / handling → in-place
wind → service → the rest.**
### Tier 1 — handling & the capacity primitives (build first)
1. **(c) Handling STRESS check — the governing stripping check is not computed.**
Eriksson's Stripping *Stresses* table (extreme-fibre tension vs `5`/`7.5√f'ci`,
compression vs `0.6 f'ci`, and `fci req`) is what governs stripping — and we
compute `ΦMn` strength but never the service stress that actually controls.
The settings block already carries `tension_limit_sqrt_fc` /
`compression_limit_ratio`; **nothing reads them.** Add: extreme-fibre stress
from `(Pi/A ± Pi·e·y/I ± Mg·y/I)` at each station, compared to the two limits,
plus the `fci req` back-solve. **Highest handling priority.**
2. **(b) Handling is one self-weight stage; Eriksson runs staged multipliers.**
We have a single stage at `loading.self_weight.load_factor`. Eriksson runs
**Stripping ×1.4 @ f'ci with Handling limits** and **Transportation ×1.5 @
f'c with In-Place limits** (and an Erection stage, off here). Add a
`handling.stages[]` list, each with `{multiplier, concrete: initial|in_place,
stress_limits: handling|in_place}`, and solve/report each. The engine already
takes a per-stage `fc_psi` and `multiplier`.
3. **(b) Handling idealisation is dunnage, not lifters.** Eriksson idealises
stripping as a **beam on lifter lines** (Face + Top-Edge lifters at width
fractions, sling angle, **Tilt Potential**, per-lifter Vertical/Horizontal
reactions). We solve a beam on generic `supports`. `panellift` already models
lifters/rigging — wire `structural_model` to carry lifter columns + lateral
fractions and let the handling solve use the lift path, reporting reactions
per lifter (unfactored) with moments factored, matching Eriksson's split.
4. **(c) Φ development ramp + development multiplier.** Our Φ is a constant 0.90;
Eriksson ramps **0.75→0.90 across the transfer→development length** (ACI
21.2.3), scaled by the Development Multiplier (1.0 here, 1.3 on WPB). Our
`pci.development_length_in` applies no multiplier. Add the ramp to Φ and to
the effective `Aps(x)`; expose `development_length_multiplier` in settings
(already a field, currently unused). Materially changes near-end capacity.
5. **(c) Non-prestressed / mild-steel capacity path.** `panellift.capacity` is
**strand-only** — so WPA1.0, WPA3.0 and SWA1.0 (mild-reinforced walls) cannot
be analysed at all today; the tool renders a "no prestress → not computed"
box. Eriksson runs full flexure/shear/axial on mild `As` (with `A's`). Add a
mild-steel flexural/axial capacity path. **Unlocks whole panel classes.**
6. **(b) Shear method.** Confirm our `ΦVn` uses the Eriksson **detailed
Vci/Vcw** method (`Vc = min(Vci, Vcw)`, `ΦVn = 0.75·Vc`, `bwd` as a product,
`∞` at zero-moment) and reports both columns for handling. WPB §4.6 found our
`d` and √f'c-coefficient handling differed from Eriksson's — re-check against
these tables and align, or document the deviation.
### Tier 2 — the In-Place engine (the large missing piece, Stage 3)
7. **(c) Load-case engine.** None of it exists. Build the cases of §A.4:
self/dead, live, roof, **wind (out-of-plane distributed Pressure + Suction,
varying over height)**, **seismic (Cs % of dead over x/L zones)**, **soil
(interior/exterior surcharge + lateral coefficient)**, temperature (thermal
bow), and **concentrated axial loads** at an elevation + eccentricity. The
`loading.wind` / `loading.combinations` fields are already `unread`
placeholders waiting for this. The owner has named a `wallanalysis` Project
Config module (wind speed, Kzt, ASCE edition, parameter table) as the input
source — not built.
8. **(c) ACI 318-14 load combinations.** The `D L R W E T H` **8 strength /
N service** matrix, envelopes per station, and the "controlling LC" naming.
Prerequisite for everything in-place.
9. **(c) In-place flexure with axial (P-M interaction).** In-place `ΦMn` is
evaluated at the actual `Pu` on the interaction surface, with `Mcr`, `Pu`,
`ΦPn` columns. Our flexure is pure bending, no axial. Add the P-M surface and
evaluate demand `(Mu, Pu)` against it.
10. **(c) Axial check.** `ΦPn(C)`, `ΦPn(T)`, and `ΦPcrit` (buckling) with
utilization — entirely absent. Include the two "ignore tensile/buckling
failure" switches from Axial Options.
11. **(c) Second-order / slenderness.** P-Delta with non-sway βd, `kL/r` per
restrained span, moment magnification, 1st vs 2nd-order `% increase`.
Depends on the restraint model (next).
12. **(c) Restraint / span model.** `structural_model.restraints` is an `unread`
placeholder. In-place needs the foundation + floor-tie restraints (elevation,
type, gravity/thermal, stiffness) to set spans for both bending and
slenderness.
### Tier 3 — service, then presentation & settings
13. **(c) Service checks.** Tension vs cracking (`7.5√f'c`; Class U/T `12√f'c`
for prestressed; Modulus of Rupture for mild), total compression vs `0.6 f'c`,
and deflection vs the per-job limit (`L/150` etc.). None built. Reuse the
extreme-fibre stress primitive from item 1 with in-place loads/limits.
14. **(b) Settings coverage.** Expose the full Settings page: in-place stress
limits (`7.5/12√f'c`, `Δfps 36 ksi`), the resistance-factor matrix
(developed 0.90/0.65/0.75 + transferring 0.75), stress options (Failure if
cracked, Ignore Lateral Strand Eccentricity, Use Principal Axis), shear/axial
options, cracking method. Our `settings` block is thin. **Per-job values
(handling limit 5 vs 7.5√f'ci; dev multiplier 1 vs 1.3; deflection limit)
must be inputs, not constants** — both values occur across the six.
15. **(b) Result presentation parity.** Move from our single combined
demand-vs-capacity table toward Eriksson's **separate Stresses / Flexure /
Shear / Axial** tables with the exact column sets in §A.7 (`θ`, `c`, `Loss`,
`d`, `As`, `A's`, `Aps` …), plus the **one-page summary** (per-stage
utilizations, controlling LC, P-M diagram). Lower priority — arithmetic
first, layout second.
16. **(c) Multi-run / multi-section packages.** A deck must be able to carry
**several analysis runs** (MWH1.0's `2.1`/`4.1`) and Eriksson's optional
`Structural Sections` (analysing sub-strips of the cross-section). Our schema
assumes one panel/one run.
### Explicitly NOT on the punch-list (scope guards)
- **Torsion** — Eriksson Wall does not run it for a wall (§A.2). Do not add.
- **Horizontal shear / percent-composite / C-GRID** — sandwich-panel only (WPB),
absent from every solid wall here. Needed only when insulated panels enter
scope; our code already marks it N/A for a solid section, which is correct.
- **In-plane shear-wall / diaphragm / corbel design** — the engineer does this
by hand (SWA1.0), Eriksson Wall does not, so neither must the replacement.
- **1.2 Mcr floor / minimum-steel check** — Eriksson has `Cracking Check: None`;
keep `Mcr` informational (matches our current behaviour — do not "fix").
---
## Reconciliation summary (this note vs WPB note)
| item | WPB (v4.13.2, sandwich) | these six (v4.3.2, solid walls) |
| --- | --- | --- |
| section/page order | as §A.1 | **identical** |
| handling/in-place split | separate `.ewf`, mild-only vs strand-only | either separate OR one unified run (WPA4.0); MWH multi-run |
| handling tension limit | 5√f'ci | 5√f'ci (WPA1,MWH) or 7.5√f'ci (WPA2/3/4) — per job |
| development multiplier | 1.3 | 1.0 (all v4.3.2) — per job, confirms WPB open-Q #4 |
| torsion | from Eriksson *Beam* (lintel) | none |
| horizontal shear / % composite | yes (C-GRID sandwich) | none (solid) |
| Φ ramp, Whitney block, Vci/Vcw, P-M, service limits, combos | as §A.2–A.6 | **same method** |