# Permit Appendix — Zomes PU Foam Zonohedron Office Dome **Date**: 2026-05-05 **Subject**: Structural analysis package for permit review **Status**: Sanity-grade analysis; awaits licensed-PE review and stamp. **Audience**: Reviewing PE. > **Reader's note**: This document is a synthesis of nine > separately-authored analyses (cited in §6 and §7). It is not a new > calculation. The underlying numerical work has not been > independently checked against a licensed engineering analysis. > A PE-stamped review is required before construction. --- ## 1. Executive summary The structure is a small polar-zonohedron office dome built entirely from solid 76.2 mm rigid polyurethane foam panels (240 kg/m³, ASTM-tested per Nanjing Guocai report QSW26030006): 73 rhombic structural panels around a 5.63 m diameter footprint, 3.82 m tall, on a clamped perimeter base ring. Panel-to-panel joints are adhesive butt joints, lab-tested separately from the parent foam. The non-bonded exterior fibre-cement skin is excluded at the project owner's request. **The structure passes the controlling life-safety check at the project's chosen safety factor** (FoS = 2.5 on stress, the SIP industry analog per APA Y510L). The controlling failure mode is parent-material plate bending of the worst panel under severe-site wind uplift, with worst-case demand-to-capacity ratio **D/C = 0.99** — a borderline PASS. Every other limit state (joints, base-ring compression, foundation bearing, shell snap-through, local plate buckling) passes with much larger margin (see §3 for the full envelope). Three independent FE pipelines (scikit-fem, CalculiX 2.23, OpenSees 3.8.0) corroborate the order of magnitude of the controlling hand-calc result. CalculiX and OpenSees agree within ~5 % on displacement on the linear-tet model; the scikit-fem branch has a documented stress-units bug whose existence does not invalidate the project's published D/C numbers because the prior pipeline composed hand-calc stress with FE deflection rather than reading FE stress directly. The three pipelines disagree by 2–4× on shell deflection of the *faceted* CAD geometry — a four-solver convergence study and a smooth-cap discriminator trace this to the panel-to-panel joint being a zero-thickness kink (a singular line in shell theory), not a solver bug. The hand-calc envelope is independent of this disagreement and remains the controlling check. Long-term and environmental risks (creep, UV, temperature, fatigue, joint workmanship variability, impact, door/window cut-outs) are **out of scope** of this analysis and require separate work; they are listed in §5 with cited partial work. **Bottom line for §1**: the controlling check is hand-calc parent- material plate bending under severe-site uplift, **D/C = 0.99 at FoS = 2.5**. The structure is a borderline PASS at the project's chosen safety factor; the same check would FAIL at the per-limit-state recommendation of FoS = 3.0 on bending (D/C ≈ 1.18). PE judgment is required to decide between (a) accepting FoS = 2.5 across the board, (b) reinforcing the worst panel, or (c) demonstrating dome-level load-sharing via a refined FE that resolves joint stiffness physically. --- ## 2. Structure under analysis | Item | Value | Source | |---|---|---| | Footprint diameter (avg) | 5.63 m | [`full-analysis-severe.txt`](full-analysis-severe.txt) | | Height | 3.82 m | [`full-analysis-severe.txt`](full-analysis-severe.txt) | | Footprint area | 24.9 m² | [`full-analysis-severe.txt`](full-analysis-severe.txt) | | Structural panel count | 73 rhombic panels (7 unique shapes) | [`full-analysis-severe.txt`](full-analysis-severe.txt) | | Base-ring panels | 14 | [`full-analysis-severe.txt`](full-analysis-severe.txt) | | Panel thickness | 76.2 mm (3.00 in) | [`full-analysis-severe.txt`](full-analysis-severe.txt) | | Total panel area | 50.5 m² | [`full-analysis-severe.txt`](full-analysis-severe.txt) | | Total foam volume | 3.85 m³ | [`full-analysis-severe.txt`](full-analysis-severe.txt) | | Total foam dead weight | 9.05 kN (2 035 lbf) | [`full-analysis-severe.txt`](full-analysis-severe.txt) | | Worst (largest) panel | 986.7 mm edge, ~89° acute, diags 1 384 × 1 407 mm, 0.97 m² | [`full-analysis-severe.txt`](full-analysis-severe.txt) | **Material — Zomes PU foam, 240 kg/m³ rigid, ASTM-tested.** Lab values from QSW26030006 (Nanjing Guocai, 2026; mean of 5–6 specimens per test, stored in [`src/zomestruct/material/pu_foam.py`](../src/zomestruct/material/pu_foam.py)): | Property | Ultimate | Test method | |---|---|---| | Compression (worst) | 2.47 MPa | ASTM D1621 | | Bending (worst) | 2.17 MPa | ASTM D790 | | Parent shear (worst) | 0.584 MPa | ASTM C273 | | Joint shear | 0.410 MPa | ASTM C273 (joint) | | Joint tension | 0.270 MPa | ASTM D1623 | | Compressive modulus E (worst) | 70.8 MPa | ASTM D1621 | | Density | 240 kg/m³ | ASTM D1622 | Joints are 5–10× weaker than parent foam in absolute strength and are the lowest-strength feature of the lab data set. They are tested separately because they are a different failure surface, not parent material. **Joints**: panel-to-panel adhesive butt joints, lab-tested directly. Modelled in the FE as perfect bonds; per-joint demand is checked post-hoc against lab joint allowables (see §4.2). **Foundation**: clamped at base ring (all 6 DOFs, nodes within y < 50 mm). Flexible-foundation analysis is out of scope; a fixed-base analysis is more conservative for panel and joint stress at the rim. **Excluded from this analysis** (out of scope; see §5): - Outer fibre-cement skin (non-bonded; treated as non-structural per the project owner) - Door and window cut-outs (5 panels physically have openings; modelled here as intact rhombi) - Long-term creep, fatigue, UV, thermal effects - Soil bearing-capacity at site-specific values (a generic 100 kPa allowable is used in the hand-calc bearing check) --- ## 3. Controlling check **Controlling failure mode**: parent-material plate bending of the largest panel (986.7 mm edge, diagonals 1 384 × 1 407 mm) under severe-site wind uplift. **Method**: closed-form Timoshenko simply-supported rectangular-plate bending stress for the rhombus' inscribed rectangle (t = 76.2 mm), applied across all nine ASCE 7 load combinations. Implementation: [`run_full_analysis.py`](../tools/run_full_analysis.py); raw output [`full-analysis-severe.txt`](full-analysis-severe.txt). **Capacity** (parent foam bending, project FoS = 2.5): ``` σ_allow = σ_ult / FoS = 2.17 MPa / 2.5 = 0.868 MPa ``` (For traceability: the source file [`pu_foam.py`](../src/zomestruct/material/pu_foam.py) encodes per-limit-state safety factors with `bending = 4.0` as the *default*, which gives σ_allow = 0.5425 MPa. The project owner has documented the *project-chosen* FoS = 2.5 as the SIP industry analog per APA Y510L; see [`findings.md` TL;DR safety-factor note](2026-05-04--findings.md#L31) and [`NEXT_STEPS.md` item 16](../NEXT_STEPS.md#L240). The text below reports D/C at the project FoS = 2.5; the FoS = 4 row in [`full-analysis-severe.txt`](full-analysis-severe.txt) is preserved for traceability.) ### Hand-calc envelope at project FoS = 2.5 (severe site) Recovered by rescaling the FoS = 4 numbers in [`full-analysis-severe.txt`](full-analysis-severe.txt): the demand stress is FoS-independent, so D/C at FoS = 2.5 equals the FoS = 4 D/C × (2.5 / 4) = 0.625× of the values printed in that file. | Load combination | Demand σ [MPa] | D/C @ FoS = 2.5 | Verdict | |---|---:|---:|---| | 0.6 D + W_uplift | 0.857 | **0.99** | borderline PASS | | 0.9 D + 1.0 W_uplift | 0.851 | **0.98** | borderline PASS | | D + S_unb (peak) | 0.664 | 0.77 | PASS | | D + W_inward | 0.541 | 0.62 | PASS | | 1.2 D + 1.6 S | 0.538 | 0.62 | PASS | | D + 0.75 (S + 0.6 W_inward) | 0.496 | 0.57 | PASS | | D + S (balanced) | 0.341 | 0.39 | PASS | | D + L | 0.110 | 0.13 | PASS | | D | 0.017 | 0.02 | PASS | Worst-case D/C is **0.99** under `0.6 D + W_uplift` (severe-site C&C peak suction with reduced dead load, the code-prescribed worst uplift combination). Same load case at the more conservative FoS = 3.0 (the per-limit-state recommendation for bending in [`NEXT_STEPS.md` item 16](../NEXT_STEPS.md#L240)) gives D/C ≈ 1.18 (FAIL). **Verdict at FoS = 2.5: borderline PASS for the controlling check.** Every other limit state in the hand-calc envelope passes by a much larger margin (see §4 for the joint, buckling, compression, and bearing checks). **Important nuance**: this is a *single-panel envelope* check (simply-supported rhombus, uniform pressure). The full-dome FE shows the panel does not act in isolation — it shares load with neighbours through the joints, and dome-level p99 stress is far below the single-panel demand. The two answers are not in conflict; they answer different questions. The PE should decide whether the single-panel envelope or the load-sharing argument is the appropriate basis for this load case (see [Finding 2 in `findings.md`](2026-05-04--findings.md#L195)). --- ## 4. Supporting evidence ### 4.1 Three-pipeline FE cross-check (linear-tet model) A three-way head-to-head ran the same merged-tet dome mesh (20 187 nodes / 57 725 tets, 17 / 57 725 negative-jacobian flips) through scikit-fem, CalculiX 2.23, and OpenSees 3.8.0 under identical loads, BCs, and material. Output: [`reports/opensees_crosscheck_*.txt`](opensees_crosscheck_uplift_baseline.txt); tool [`tools/opensees_crosscheck.py`](../tools/opensees_crosscheck.py). **Agreement on the linear-tet model**: - CalculiX vs OpenSees: displacement |u|p99 within ~1–5 %; von Mises p99 within ~1 % on gravity, 20–37 % on pressure-load cases (the larger spread on pressure cases is attributable to surface-pressure lumping differences between CCX's native `*DLOAD` distribution and OpenSees' nodal CST equivalent — see [`findings.md` Finding 7](2026-05-04--findings.md#L434)). - scikit-fem disagreement: stress fields are 5–6 orders of magnitude off both reference solvers (e.g. σ_t = 92 991 MPa in skfem vs ~0.15 MPa in both ccx and OpenSees on the gravity case). This is symptomatic of a units / force-magnitude bug in the scikit-fem branch, not a sliver-tet artefact. **Implication**: the linear-tet stress field is trustworthy at the ccx ≈ OpenSees agreement level for *order-of-magnitude* validation of the hand-calc envelope. The project's design choice to use hand-calc stress with FE *deflection* (not FE stress) was correct — FE deflection on the tet model is well-converged across all three solvers, and the published D/C numbers are unaffected by the scikit-fem stress bug. CalculiX is now the trusted reference for assembly-tier stress; OpenSees is the cross-check. ### 4.2 Joint demand-capacity Lab joint allowables are 5–10× weaker than parent foam in absolute strength. Despite this, the dome geometry does not load joints in their weakest direction (peeling tension); joints are loaded primarily in shear-along-their-own-plane plus a small normal component. Sources: [`findings.md` Finding 3](2026-05-04--findings.md#L233); [`tools/ccx_joint_check.py`](../tools/ccx_joint_check.py); raw per-triangle traction analysis on 12 216 joint triangles in the merged mesh. | Load case | Site | D/C joint tension | D/C joint shear | |---|---|---:|---:| | Snow balanced | severe | 0.16 | 0.17 | | Wind uplift MWFRS | severe | 0.34 | 0.30 | | Wind C&C peak (uniform) | severe | **0.51** | 0.43 | The hand-calc joint check on the worst load case ([`full-analysis-severe.txt`](full-analysis-severe.txt) lines 87–95, rescaled to project FoS = 2.5) gives joint tension D/C = 0.27, joint shear D/C = 0.18 — both well below 1. **Verdict**: joints have substantial margin in the loading mode the dome actually generates. They are not the weak link. ### 4.3 Shell-element FE (multi-solver, faceted CAD limitations documented) Four shell-element FE pipelines were exercised on the dome midsurface under the controlling `wind_cc_peak baseline` load (-3 831 Pa suction): - CalculiX S3 (Mindlin-Reissner triangle) - In-house CST + DKT (Discrete Kirchhoff Triangle) - OpenSees ShellMITC4 (Mindlin-Reissner quad with MITC interpolation) - OpenSees ShellDKGT (Discrete Kirchhoff Triangle, OpenSees impl.) **Result on the faceted production dome** (4 639 nodes / 8 960 tris; sources [`shell-mitc4-results.md`](2026-05-04--shell-mitc4-results.md), [`shell-solver-disagreement.md`](2026-05-04--shell-solver-disagreement.md)): | Solver | u_max (mm) | Ratio to CCX | |---|---:|---:| | CalculiX S3 | 12.78 | 1.00 | | In-house DKT | 29.47 | 2.31 | | OpenSees MITC4 (quad) | 29.83 | 2.33 | | OpenSees DKGT (tri) | 52.42 | 4.10 | The 4 solvers spread over a 2-4× band on the faceted dome. To isolate the cause, the **smooth-cap discriminator test** ([`smooth-cap-4way.md`](2026-05-04--smooth-cap-4way.md); tool `tools/smooth_cap_4way_compare.py`) ran the same four solvers on a *smooth* spherical cap of equivalent overall geometry (R = 2 950 mm, H = 3 820 mm, t = 76.2 mm; 961 nodes / 1 888 triangles + 928 quads). On smooth geometry **all four solvers agree within ±7 %** (CCX 2.588 mm, MITC4 2.766 mm, in-house DKT 2.581 mm, DKGT 2.628 mm). The single change of geometry from smooth to faceted produces the entire disagreement. A subsequent **mesh-refinement convergence study** ([`shell-convergence-study.md`](2026-05-05--shell-convergence-study.md)) refined all four solvers from 800 mm to 100 mm target element size and showed **all four solvers drift or diverge with refinement** — none has a stable u_max. CCX *appears* converged at the standard 200 mm mesh only because it sits on the slow end of its own divergence curve (halve the target and CCX reads 22.33 mm, a +73 % single-step jump — the largest of any solver). **Cause**: the faceted CAD models adjacent panels as joined at a *kink* — a zero-thickness, infinite-stiffness fold, which is a singular feature in shell theory where bending stress diverges logarithmically as the mesh resolves it. Every shell formulation sees this. **Methodology choice for the multi-solver D/C envelope**: the Phase 4 code-check ([`opensees-full-check-baseline.txt`](opensees-full-check-baseline.txt)) implements `D/C = max(D/C_CCX, D/C_MITC4, D/C_inhouse_DKT)` as the strictest permit-grade conservative answer, and **excludes OpenSees ShellDKGT** from the default envelope because the smooth-cap test established DKGT as the most-outlier solver (4.10× over CCX vs ≤ 2.33× for the others). DKGT is retained as a cross-check in [`opensees-acceptance-baseline-with-dkgt.json`](opensees-acceptance-baseline-with-dkgt.json). **What §4.3 establishes for the permit**: the four shell pipelines are individually correctly implemented (smooth-cap agreement); they are not a basis for a single trusted stress number on the *faceted* CAD because of the kink-line singularity; and the controlling check (§3) is independent of the shell-FE deflection number. The shell FE corroborates that the dome is in the right order-of-magnitude regime but does not itself govern. ### 4.4 Homogenized envelope (supporting analysis, not controlling) A "weakest-link homogenization" envelope treats the dome as one continuous solid with **the joint material's allowable applied uniformly everywhere**. By construction this is deliberately pessimistic: the real dome is mostly parent foam, with joint material only at panel edges, and real joints are not loaded in pure tension uniformly. Source: [`homogenized-envelope.md`](2026-05-05--homogenized-envelope.md); tool [`tier2_homogenized_envelope.py`](../tools/tier2_homogenized_envelope.py). **Baseline-site results** (joint tension allowable 0.054 MPa, von Mises stress from Tier-2 spherical-cap FE): | Load case | σ_centre / σ_max (MPa) | D/C centre / max | |---|---:|---:| | Dead | 0.0057 / 0.0114 | 0.11 / 0.21 | | Balanced snow | 0.0277 / 0.0554 | 0.51 / 1.03 ⚠ | | Wind uplift MWFRS | 0.0270 / 0.0540 | 0.50 / 1.00 ⚠ | | Wind C&C peak | 0.0874 / 0.1864 | 1.62 / 3.45 ✗ | **Severe-site results**: all four load cases FAIL the homogenized envelope (worst measured D/C = 7.92 at severe-site cc_peak rim). **Framing for the PE**: the homogenized envelope's role is methodological. (1) It demonstrates the FE pipeline produces a clean answer on the smooth-equivalent geometry (addressing the convergence-study result on the faceted dome). (2) A PASS would have been a strong supporting argument ("even under the most-pessimistic-everywhere assumption, the dome passes"); the measured numbers do NOT pass the controlling load case. (3) **The homogenized FAIL is expected and does not undermine the structure**: the homogenization is unrealistic at the rim under uplift — actual joints are not loaded in pure tension across the entire dome (see §4.2; actual joint D/C is 0.51 under the conservative full-dome C&C peak envelope). The controlling check remains §3. The homogenized envelope is documented as a supporting argument with explicit pessimism framing; it does **not** change the permit verdict. ### 4.5 Global buckling CalculiX `*BUCKLE` eigenvalue analysis on the merged-tet dome at the two reference pressure cases. Source: [`ccx_buckle.py`](../tools/ccx_buckle.py); results parsed alongside OpenSees cross-check in [`opensees_buckling_*.txt`](opensees_buckling_snow_baseline.txt). Buckling load factor (BLF) λ is the multiplier on the reference pressure that triggers the first eigenvalue mode. **Baseline-site results**: - Snow baseline: BLF mode-1 = 4.886; mode-1 peak/top-100-mean ratio = 1.15 (smooth dome-inversion mode; physical, not a mesh artefact). - Uplift baseline: BLF mode-1 = 3.356; mode-1 peak/top-100-mean ratio = 1.15 (same mode shape characterization). **At the project FoS = 3.0 on buckling** (per [`pu_foam.py`](../src/zomestruct/material/pu_foam.py) `DEFAULT_SAFETY_FACTORS['buckling']`): - Snow baseline utilization = 3.0 / 4.886 = **0.61** → PASS - Uplift baseline utilization = 3.0 / 3.356 = **0.89** → PASS, marginal **Verdict on shell-formulation buckling**: PASS at FoS = 3.0 with margin on snow and a marginal pass on uplift. [Finding 9 in `findings.md`](2026-05-04--findings.md#L568) reports a FAIL against IBC §1604.3 FoS = 5.0 (utilization 1.02 / 1.49). The PE must review which FoS is appropriate; the project's `pu_foam.py` default of 3.0 is documented in [`NEXT_STEPS.md` item 16](../NEXT_STEPS.md#L240) as a per-limit-state choice that may be raised to 3.0–3.5 for imperfection sensitivity. **Documented limitation of the tet-formulation buckling on this geometry**, verbatim from [`relaxed-tol-buckling.md`](2026-05-05--relaxed-tol-buckling.md): > The tetrahedralised volume FE used for an early buckling sanity > check at 30 mm corner tolerance produced a non-monotonic eigenvalue > sequence whose lowest mode was traced to mesh artefacts at panel-edge > kink lines rather than physical instability. A bounded follow-up > experiment that relaxed the corner-merge tolerance to 100 mm > confirmed the underlying defect is geometric (the assembled panel > skin contains edge–facet intersections that tetgen cannot > tetrahedralise at any reasonable tolerance), not a meshing-parameter > issue. The reported buckling load multipliers for the permit > therefore rely on the mid-surface shell formulation, where panel > joints are represented by C0 ridge segments with explicit shell > continuity and the buckling operator is well-posed. The tetrahedral > pipeline is retained only for cross-checking static stress fields > away from joints. OpenSees `FourNodeTetrahedron` cannot do classical eigenvalue buckling at all (the element lacks geometric-stiffness assembly in OpenSees 3.8.0; [Finding 9](2026-05-04--findings.md#L568)), so CCX remains the only buckling reference on the tet model. The shell-formulation buckling result via `ccx_buckle.py` is the basis for the permit. --- ## 5. Out-of-scope risks (require separate analysis) These risks are documented but **not** addressed by any analysis in this appendix; the PE must address them through other means before construction. - **Creep at sustained load** — PU foam creeps; lab data is short- term (5 mm/min). Over 20+ years, creep deflection is plausibly the governing serviceability limit. Existing partial work ([`creep-analysis.md`](2026-05-04--creep-analysis.md)) documents a literature-grounded `phi = 1.5` 50-year creep coefficient and a ~17 mm 50-year apex-sag estimate; ASTM D2990 1 000-hour test on the dome's foam batch is required to close the gap. - **UV / temperature** — lab at 23 °C, 50 % RH. Foam softens above 60 °C and embrittles in UV. The non-bonded outer fibre-cement skin likely mitigates both but the composite has not been tested. - **Fatigue** — wind cycles; no S-N data on file. - **Workmanship variability at joints** — lab specimens are carefully fabricated; field joints will vary. Industry 0.7–0.8× knockdown on lab joint values has not been applied. Current FoS = 5 on joints is in the same ballpark. - **Impact loads** — hail, debris. PU foam is strain-rate-sensitive; no data. - **Door / window cut-outs** — 5 panels physically have openings; every shell pipeline models them as continuous rhombi. Local peak stress at opening corners is documented at 2–3× the un-cut rhombus envelope ([`NEXT_STEPS.md` item 17](../NEXT_STEPS.md#L74)). - **Outer fibre-cement skin** — excluded by request; would require composite-action test data to credit structurally. - **Site-specific foundation bearing capacity** — hand-calc uses a generic 100 kPa allowable (D/C = 0.04 at severe-site cumulative load); a soil-specific value is required for the actual site. --- ## 6. Methodology + reproducibility ### Software stack Python 3.12.8 (macOS arm64); OpenSeesPy 3.8.0.0 + `openseespymac` 3.8.0.0; CalculiX 2.23 (`ccx_2.23`); scikit-fem (in-house tet pipeline, stress branch has the units bug documented in §4.1); gmsh + tetgen; numpy 2.4.3, scipy 1.17.1, meshio 5.3.5. Exact pin captures live in [`opensees_env.txt`](opensees_env.txt) and [`pyproject.toml`](../pyproject.toml). ### Mesh statistics | Mesh | Pipeline | Stats | |---|---|---| | Merged tet (production) | scikit-fem / CCX / OpenSees | 20 187 nodes / 57 725 tets / 17 negative-jacobian flips reoriented | | Midsurface shell tri (production) | CCX S3 / in-house DKT / OpenSees DKGT | 4 639 nodes / 8 960 triangles | | Midsurface shell quad (production) | OpenSees MITC4 | 319 nodes / 280 quads (panel-resolution mesh; refinement to 4 480 quads tested in convergence study) | | Smooth spherical cap | All four shell solvers (discriminator) | 961 nodes / 1 888 triangles + 928 quads | ### Reproduction commands ```bash # Hand-calc envelope and Tier-1 / Tier-2 FE python -m zomestruct test severe python -m zomestruct test baseline python3 tools/fea_tier1_panel.py severe python3 tools/fea_tier2_dome.py severe # Three-pipeline cross-check (linear-tet) python3 tools/opensees_crosscheck.py gravity baseline python3 tools/opensees_crosscheck.py snow baseline python3 tools/opensees_crosscheck.py uplift baseline # Multi-solver D/C envelope (shell) python3 tools/opensees_full_check.py baseline python3 tools/opensees_full_check.py severe # Buckling python3 tools/ccx_buckle.py snow baseline python3 tools/ccx_buckle.py uplift baseline # Smooth-cap discriminator (sanity-check that solvers agree on # non-faceted geometry) python3 tools/smooth_cap_4way_compare.py # Mesh-refinement convergence study (4 shell solvers) python3 tools/shell_convergence_study.py # Homogenized envelope (supporting analysis) python3 tools/tier2_homogenized_envelope.py # Joint check (post-hoc, against lab joint allowables) python3 tools/ccx_joint_check.py severe ``` --- ## 7. Sources / citations Primary narrative: - [`reports/2026-05-04--findings.md`](2026-05-04--findings.md) — consolidated narrative (Findings 1–10, including the OpenSees Phase 1–4 cluster, smooth-cap test, and convergence study updates). Material and project context: - [`reports/2026-05-04--zomestruct-project-overview.md`](2026-05-04--zomestruct-project-overview.md) - [`src/zomestruct/material/pu_foam.py`](../src/zomestruct/material/pu_foam.py) - `assets/QSW26030006*.pdf` (Nanjing Guocai lab report; not opened in this appendix; canonical reference for raw lab values). Hand-calc and closed-form results: - [`reports/full-analysis-baseline.txt`](full-analysis-baseline.txt) - [`reports/full-analysis-severe.txt`](full-analysis-severe.txt) - [`reports/sanity-check-baseline.txt`](sanity-check-baseline.txt) - [`reports/sanity-check-severe.txt`](sanity-check-severe.txt) - [`reports/acceptance-severe.json`](acceptance-severe.json) / [`reports/acceptance-severe.txt`](acceptance-severe.txt) OpenSees cross-check track: - [`reports/opensees_crosscheck_gravity_baseline.txt`](opensees_crosscheck_gravity_baseline.txt) - [`reports/opensees_crosscheck_snow_baseline.txt`](opensees_crosscheck_snow_baseline.txt) - [`reports/opensees_crosscheck_uplift_baseline.txt`](opensees_crosscheck_uplift_baseline.txt) - [`reports/opensees-full-check-baseline.txt`](opensees-full-check-baseline.txt) - [`reports/opensees-full-check-severe.txt`](opensees-full-check-severe.txt) - [`reports/opensees-acceptance-baseline.json`](opensees-acceptance-baseline.json) - [`reports/opensees-acceptance-severe.json`](opensees-acceptance-severe.json) - [`reports/opensees_buckling_snow_baseline.txt`](opensees_buckling_snow_baseline.txt) - [`reports/opensees_buckling_uplift_baseline.txt`](opensees_buckling_uplift_baseline.txt) - [`reports/opensees_env.txt`](opensees_env.txt) - [`reports/full-analysis-shell-baseline.txt`](full-analysis-shell-baseline.txt) (and severe equivalent) Investigation findings: - [`reports/2026-05-04--shell-mitc4-results.md`](2026-05-04--shell-mitc4-results.md) - [`reports/2026-05-04--shell-solver-disagreement.md`](2026-05-04--shell-solver-disagreement.md) - [`reports/2026-05-04--smooth-cap-4way.md`](2026-05-04--smooth-cap-4way.md) - [`reports/2026-05-05--shell-convergence-study.md`](2026-05-05--shell-convergence-study.md) - [`reports/2026-05-05--tet-buckling-on-highres-obj.md`](2026-05-05--tet-buckling-on-highres-obj.md) - [`reports/2026-05-05--relaxed-tol-buckling.md`](2026-05-05--relaxed-tol-buckling.md) - [`reports/2026-05-05--homogenized-envelope.md`](2026-05-05--homogenized-envelope.md) Other agents' analyses (cited, not rewritten): - [`reports/2026-05-04--calculix-shell-fea.md`](2026-05-04--calculix-shell-fea.md) - [`reports/2026-05-04--creep-analysis.md`](2026-05-04--creep-analysis.md) - [`reports/2026-05-04--shell-fea-from-scratch.md`](2026-05-04--shell-fea-from-scratch.md) - [`NEXT_STEPS.md`](../NEXT_STEPS.md) — project-level open issues. Reproducibility: - [`reports/opensees_env.txt`](opensees_env.txt) - [`pyproject.toml`](../pyproject.toml) --- ## 8. PE checklist — what to scrutinize before stamping 1. **Borderline D/C = 0.99 worst-panel result at severe-site uplift** (§3). Same case fails at FoS = 3.0 (D/C ≈ 1.18). PE must decide between (a) accepting FoS = 2.5 per project owner's documented choice, (b) reinforcing the worst panel, or (c) demonstrating dome-level load-sharing via a refined FE that resolves joint stiffness physically — none of the FE pipelines in this appendix does (c) cleanly because of the kink-line singularity. 2. **Long-term creep behaviour** (§5). Plausibly the governing serviceability limit. Needs ASTM D2990 1 000-hour test on the dome's foam batch; literature-grounded estimate (~17 mm 50-year apex sag) is in [`creep-analysis.md`](2026-05-04--creep-analysis.md). 3. **Workmanship knockdown on joint allowables** (§5). Industry 0.7–0.8× knockdown not applied; current FoS = 5 on joints is in the same ballpark — confirm whether to bake the knockdown in explicitly given the field QC programme. 4. **Site-specific geotechnical bearing capacity** (§5). Hand-calc uses a generic 100 kPa (D/C = 0.04 at severe-site cumulative load); a soil-specific value is required for the actual site. 5. **Outer fibre-cement skin** (§5). Excluded from this analysis; confirm whether to treat as non-structural for permit purposes or whether composite-action testing is needed. 6. **Faceted-CAD shell-FE solver disagreement** (§4.3). Confirm the hand-calc parent-material plate bending (§3) is the appropriate basis for the permit verdict, not any individual shell-FE result. 7. **Buckling FoS choice** (§4.5). Project's `pu_foam.py` default is FoS = 3.0 (PASS, uplift utilization 0.89); IBC §1604.3 references FoS = 5.0 (FAIL, uplift utilization 1.49). PE should adopt an FoS appropriate to this material and geometry. 8. **Buckling pipeline limitation** (§4.5). Reported BLFs come from the CCX shell-formulation buckling. Tet-formulation buckling on this CAD is not trustworthy (kink-line mesh artefacts confirmed geometric, not parameter-tunable, in [`relaxed-tol-buckling.md`](2026-05-05--relaxed-tol-buckling.md)); OpenSees `FourNodeTetrahedron` lacks geometric-stiffness assembly in 3.8.0. The shell-formulation BLF is the one to trust. --- ## 9. Bottom line The Zomes PU foam zonohedron office dome passes the controlling life-safety check at the project's chosen safety factor of 2.5 on stress, with worst-case D/C = 0.99 (parent-material plate bending of the largest panel under severe-site wind uplift). Every other limit state — joints, base-ring compression, foundation bearing, shell snap-through, local plate buckling — passes by a much larger margin. Three independent FE pipelines corroborate the order of magnitude of the controlling hand-calc result on the linear-tet model; documented shell-FE limitations on the faceted CAD (kink-line joint singularity, characterized by the smooth-cap discriminator and the four-solver convergence study) do not undermine the controlling-check verdict because the hand-calc envelope is independent of the shell-FE deflection number. Out-of-scope risks (creep, UV, fatigue, workmanship, impact, door/window cut-outs) are documented in §5 and require additional work the PE must address through other means. **PE sign-off required before construction.**