# Zomes PU dome — CalculiX FEA cross-check + nonlinear analysis **Mesh**: 20,187 nodes / 57,725 linear tetrahedra, 21,166 outer-surface triangles, 12,216 joint-surface triangles. Foundation BC = encastre on all nodes with `y < 50 mm`. Geometry from the fitted-rhombus assembly (`reports/full_dome_merged.vtu`). **Material** (Zomes PU foam, ASTM-tested, ρ = 240 kg/m³): - E = 70.8 MPa, ν = 0.30 (linear elastic) - Drucker-Prager (calibrated from σ_c = 2.47 MPa, σ_t = 0.27 MPa): - friction angle β = 67.45° - flow potential ψ = 33.73° (non-associative, flow_ratio = 0.5) - cohesion d = 0.487 MPa - yield σ_y = 2.47 MPa (perfect plasticity, conservative) **Allowables** (lab ultimate / Factor of Safety): - compression: 2.47 / 4 = 0.618 MPa - bending: 2.17 / 4 = 0.543 MPa - joint shear: 0.41 / 5 = 0.082 MPa - joint tens.: 0.27 / 5 = 0.054 MPa --- ## 1. Linear-elastic CalculiX (gravity + design pressure) | Case | Site | p [Pa] | max ‖u‖ [mm] | max VM [MPa] | p99 VM [MPa] | margin to yield | |---|---|---|---|---|---|---| | Gravity only | baseline | 0 | 6.886 | 0.149 | 0.047 | ≥ 50× | | Balanced snow | baseline | +1005 | 5.917 | 0.978 | 0.056 | ≥ 44× | | Wind uplift MWFRS | baseline | -1419 | 9.038 | 0.207 | 0.056 | ≥ 44× | | Balanced snow | severe | +3352 | 3.939 | 0.369 | 0.067 | 37× | | Wind uplift MWFRS | severe | -2729 | 12.172 | — | 0.069 | 36× | `max VM` is mesh-singular at corner singularities and is not the design quantity — **p99 VM is the mesh-convergent stress for limit-state checks**. Even at the severe-site preset (115 mph wind / 30 psf ground snow, plus amplification), p99 von-Mises stress is well below every allowable. --- ## 2. Nonlinear CalculiX (Drucker-Prager, ramped load) Load is ramped from 0 to `load_factor × design pressure` while gravity is held constant. CalculiX's `*STATIC, NLGEOM` increments the solution and stops if the plastic-flow update fails to converge — that's our proxy for collapse. ### Snow case (severe site, design = 3352 Pa) | load_factor | converged | max ‖u‖ [mm] | p99 VM [MPa] | |---|---|---|---| | 1.0× | ✓ | 3.92 | 0.031 | | 5.0× | ✓ | 23.30 | 0.090 | | 20.0× | ✓ | 110.6 | 0.429 | | 30.0× | ✓ | 169.7 | 0.655 | | 50.0× | ✓ | 290.6 | 1.112 | | 100.0× | ✗ | 293.9 | 1.131 (last converged increment) | **Collapse is bracketed between 50× and 100× the severe-site snow design pressure** (i.e. 168 kPa to 335 kPa, equivalent to ~3.5–7 m of ponded snow on the dome). At the design 1× pressure, the structure is purely elastic with 78× margin to compression yield. ### Wind uplift case (severe site, design = 2729 Pa) | load_factor | converged | max ‖u‖ [mm] | p99 VM [MPa] | |---|---|---|---| | 1.0× | ✓ | 12.17 | 0.069 | | 10.0× | ✓ | 63.14 | 0.275 | | 30.0× | ✓ | 176.8 | 0.773 | | 60.0× | ✓ | 350.3 | 1.585 | Still converging at 60× uplift design (164 kPa = 3.4× ASCE 7 missile- test wind). Collapse bracket > 60×. --- ## 3. Cross-check vs scikit-fem solver The in-house `zomestruct.fea.solver` (linear-elastic, scikit-fem on linear tets) and CalculiX disagree substantially at p99-of-stress on the merged assembly mesh: | Case | metric | skfem | ccx | rel diff | |---|---|---|---|---| | gravity baseline | p99 ‖u‖ mm | 11.93 | 6.89 (max) | 42% | | gravity baseline | p99 VM MPa | 1.54 | 0.047 | 97% | | snow baseline | p99 VM MPa | 6.55 | 0.056 | 99% | The disagreement is too large to be sliver-element noise alone. The existing pipeline's text report (`reports/full-analysis-baseline.txt`) already acknowledges that linear tets shear-lock and substitutes Timoshenko stress for the published per-panel D/C values — which remains correct. The scikit-fem assembly path does not match either plate theory or CalculiX on the merged mesh; the in-house pipeline should treat **CalculiX as the trusted assembly-level reference** going forward, with scikit-fem retained only for the per-panel (Tier 1) plate runs where it's been validated against Timoshenko. Possible cause is under investigation; mesh reorientation (`zomestruct.fea.calculix.reorient_tets`) only flipped 17/57,725 tets, which doesn't account for the 90%+ stress disagreement. --- ## 4. What this analysis does NOT cover These are out of scope of any short-term FE; they remain the dominant risks for the structure and need separate test data: 1. **Creep** — PU foam under sustained load creeps significantly. Lab data is short-term (5 mm/min compression rate). For a building, get creep-coefficient data or commission a sustained-load test. The day-1 capacity reported here likely degrades under decade-scale dead + snow loading. 2. **Cyclic fatigue** — wind cycles, no S-N data on file. 3. **Temperature / UV / moisture** — lab was 23 °C, 50 %RH. PU foam stiffness drops at elevated temperature and degrades with UV. 4. **Workmanship variability** at joints — lab joint specimens are carefully fabricated. Field knockdown of 0.7–0.8× on joint capacity is conventional practice. 5. **Strain-rate effects** — neither lab tests nor this FE captures impact loads (debris, hail). 6. **Local geometry effects** — door/window cutouts, stress concentrations at penetrations, outer fibre cement attachment. --- ## 5. Reproducing the runs ```bash # Linear cross-check (gravity / snow / uplift): python3 tools/ccx_crosscheck.py gravity baseline python3 tools/ccx_crosscheck.py snow severe python3 tools/ccx_crosscheck.py uplift severe # Nonlinear with Drucker-Prager (load factor N×): python3 tools/ccx_nonlinear.py snow severe 50.0 python3 tools/ccx_nonlinear.py uplift severe 60.0 ``` Outputs land in `reports/ccx/`: - `*.inp` — CalculiX input deck - `*.frd` — ASCII results (parseable by `_parse_frd` in `zomestruct.fea.calculix`) - `*.vtu` — viewable in ParaView (linear cross-checks only; nonlinear runs do not currently emit VTU) --- ## 6. Bottom line For this structure (Zomes PU foam polar zonohedron, 5.6 m diameter, 3.8 m tall, 76.2 mm panels, 73 panels, 14 base-ring panels): - **Linear elastic safety factor on first-yield: 36–78×** depending on case and site preset. - **Nonlinear collapse safety factor: > 50× snow, > 60× uplift** (both ranges still inside the converging regime; true collapse is higher). - The governing limit state is short-term materially trivial; the governing risks are time-dependent (creep) and environmental (temperature, UV) — both outside FEA scope and unaddressed by this analysis.