============================================================================== OpenSees per-panel code-check (multi-solver envelope) Model: Studio prototype (ZS-2026-002) (studio) Site: severe (high-snow / high-wind site) ============================================================================== Material: Zomes PU foam (240 kg/m^3 rigid, ASTM-tested) density : 240 kg/m^3 E (worst dir) : 70.8 MPa poisson : 0.30 ULTIMATE -- compression (worst): 2.47 MPa ULTIMATE -- bending (worst) : 2.17 MPa ULTIMATE -- parent shear : 0.584 MPa ULTIMATE -- joint shear : 0.410 MPa ULTIMATE -- joint tension : 0.270 MPa Safety factors : {'compression': 2.5, 'tension': 2.5, 'shear': 2.5, 'bending': 2.5, 'buckling': 3.0, 'joint': 2.5} ALLOWABLE compression (worst) : 0.988 MPa ALLOWABLE bending (worst) : 0.868 MPa ALLOWABLE joint shear : 164.0 kPa ALLOWABLE joint tension : 108.0 kPa Mesh: midsurface VTU : reports/studio/full_dome_midsurface.vtu nodes : 6,161 triangles : 12,032 rhombic panels : 94 thickness : 76.2 mm Solvers consumed: inhouse_dkt + opensees_mitc4 (DKGT excluded by default; use --include-dkgt to add) - inhouse_dkt (1128 CheckResults, 282 panel:case combos) - opensees_mitc4 (1128 CheckResults, 282 panel:case combos) Note on excluded solver: ShellDKGT is excluded from the default envelope. The smooth-cap test (reports/2026-05-04--smooth-cap-4way.md) found DKGT is the most-outlier solver on the faceted dome (4.10x over CCX S3 vs 2.33x for MITC4). The envelope below combines two independent codebases that agree to ~1.2 % on the faceted geometry: the in-house CST+DKT solver (zomestruct.fea.shell_solver) and OpenSees ShellMITC4 (Mindlin-Reissner quad). ============================================================================== PER-PANEL DEMAND/CAPACITY (worst panel per limit state per case) ============================================================================== [PLATE BENDING] envelope worst (per load case): panel 49, snow : D/C = 0.870 (inhouse_dkt: 0.171 opensees_mitc4: 0.870) [PASS] panel 49, wind_cc_peak: D/C = 2.050 (inhouse_dkt: 0.424 opensees_mitc4: 2.050) [FAIL] <- governing panel 49, wind_mwfrs : D/C = 0.712 (inhouse_dkt: 0.209 opensees_mitc4: 0.712) [PASS] per-panel envelope D/C summary (top-10 hottest): panel edge_mm acute_deg D/C(env) D/C(inhouse_dkt) D/C(mitc4) governing_solver 49 986 80.52 2.050 0.424 2.050 mitc4 48 984 81.13 2.014 0.908 2.014 mitc4 75 1012 26.26 1.883 1.883 0.093 inhouse_dkt 78 1012 26.34 1.764 1.764 0.207 inhouse_dkt 84 619 84.51 1.728 1.388 1.728 mitc4 86 632 84.35 1.704 0.937 1.704 mitc4 9 884 54.91 1.470 1.470 0.600 inhouse_dkt 88 935 62.52 1.322 1.202 1.322 mitc4 80 1013 26.17 1.309 1.309 0.106 inhouse_dkt 31 937 61.96 1.296 1.296 1.276 inhouse_dkt WORST OVERALL: D/C = 2.050 (panel 49, load case wind_cc_peak) -> FAIL [MEMBRANE COMPRESSION] envelope worst (per load case): panel 11, snow : D/C = 1.103 (inhouse_dkt: 1.103 opensees_mitc4: 0.291) [FAIL] panel 11, wind_cc_peak: D/C = 2.369 (inhouse_dkt: 2.369 opensees_mitc4: 0.363) [FAIL] <- governing panel 11, wind_mwfrs : D/C = 0.783 (inhouse_dkt: 0.783 opensees_mitc4: 0.106) [PASS] per-panel envelope D/C summary (top-10 hottest): panel edge_mm acute_deg D/C(env) D/C(inhouse_dkt) D/C(mitc4) governing_solver 11 828 57.78 2.369 2.369 0.363 inhouse_dkt 10 884 55.01 0.962 0.962 0.311 inhouse_dkt 21 981 57.03 0.785 0.785 0.362 inhouse_dkt 31 937 61.96 0.773 0.773 0.406 inhouse_dkt 87 825 47.56 0.768 0.768 0.322 inhouse_dkt 7 884 54.88 0.736 0.736 0.074 inhouse_dkt 20 966 57.96 0.728 0.728 0.348 inhouse_dkt 30 1003 57.40 0.718 0.718 0.343 inhouse_dkt 48 984 81.13 0.699 0.699 0.273 inhouse_dkt 9 884 54.91 0.650 0.650 0.229 inhouse_dkt WORST OVERALL: D/C = 2.369 (panel 11, load case wind_cc_peak) -> FAIL [MEMBRANE TENSION] envelope worst (per load case): panel 11, snow : D/C = 9.991 (inhouse_dkt: 9.991 opensees_mitc4: 1.816) [FAIL] panel 11, wind_cc_peak: D/C = 22.506 (inhouse_dkt: 22.506 opensees_mitc4: 5.498) [FAIL] <- governing panel 11, wind_mwfrs : D/C = 7.564 (inhouse_dkt: 7.564 opensees_mitc4: 1.758) [FAIL] per-panel envelope D/C summary (top-10 hottest): panel edge_mm acute_deg D/C(env) D/C(inhouse_dkt) D/C(mitc4) governing_solver 11 828 57.78 22.506 22.506 5.498 inhouse_dkt 10 884 55.01 19.537 19.537 6.233 inhouse_dkt 48 984 81.13 15.440 15.440 6.266 inhouse_dkt 31 937 61.96 14.996 14.996 4.174 inhouse_dkt 9 884 54.91 12.603 12.603 4.801 inhouse_dkt 49 986 80.52 11.363 11.363 6.249 inhouse_dkt 2 883 55.24 9.605 9.605 6.294 inhouse_dkt 1 829 57.80 9.467 9.467 5.368 inhouse_dkt 21 981 57.03 8.549 8.549 3.962 inhouse_dkt 88 935 62.52 8.073 8.073 4.215 inhouse_dkt WORST OVERALL: D/C = 22.506 (panel 11, load case wind_cc_peak) -> FAIL [LOCAL PLATE BUCKLING] envelope worst (per load case): panel 48, snow : D/C = 2.282 (inhouse_dkt: 2.282 opensees_mitc4: 0.892) [FAIL] panel 11, wind_cc_peak: D/C = 3.027 (inhouse_dkt: 3.027 opensees_mitc4: 0.464) [FAIL] <- governing panel 11, wind_mwfrs : D/C = 1.000 (inhouse_dkt: 1.000 opensees_mitc4: 0.136) [PASS] per-panel envelope D/C summary (top-10 hottest): panel edge_mm acute_deg D/C(env) D/C(inhouse_dkt) D/C(mitc4) governing_solver 11 828 57.78 3.027 3.027 0.464 inhouse_dkt 48 984 81.13 2.282 2.282 0.892 inhouse_dkt 49 986 80.52 1.729 1.729 0.883 inhouse_dkt 44 994 79.78 1.644 1.644 0.000 inhouse_dkt 45 991 79.75 1.493 1.493 0.085 inhouse_dkt 31 937 61.96 1.434 1.434 0.753 inhouse_dkt 21 981 57.03 1.373 1.373 0.633 inhouse_dkt 41 991 79.80 1.354 1.354 0.086 inhouse_dkt 30 1003 57.40 1.328 1.328 0.634 inhouse_dkt 39 1014 63.14 1.308 1.308 0.625 inhouse_dkt WORST OVERALL: D/C = 3.027 (panel 11, load case wind_cc_peak) -> FAIL ============================================================================== OVERALL VERDICT (envelope across all solvers) ============================================================================== Limit state Worst D/C Solver Panel Load case Verdict plate bending 2.050 mitc4 49 wind_cc_peak FAIL membrane compression 2.369 inhouse_dkt 11 wind_cc_peak FAIL membrane tension 22.506 inhouse_dkt 11 wind_cc_peak FAIL local plate buckling 3.027 inhouse_dkt 11 wind_cc_peak FAIL OVERALL: FAIL (envelope across all consumed shell solvers + global buckling FoS check) ============================================================================== GLOBAL BUCKLING (deferred — see reports/studio/opensees_buckling_*_severe.txt) ============================================================================== The OpenSees FourNodeTetrahedron lacks geometric-stiffness assembly so classical buckling analysis on the tet mesh is not available in OpenSees (see Phase 3 finding). CalculiX *BUCKLE remains the buckling reference: Buckling FoS = 3.0 (source: src/zomestruct/material/pu_foam.py DEFAULT_SAFETY_FACTORS['buckling']) snow severe : ccx BLF = 2.363 (BLF/FoS = 0.788: FAIL) uplift severe : ccx BLF = 11.289 (BLF/FoS = 3.763: PASS) Mode shapes are smooth dome-inversion (smoothness ratio ~1.15), suggesting real buckling modes. See Finding 4 in reports/2026-05-04--findings.md. ============================================================================== NOTES & OUT-OF-SCOPE (same as existing pipeline) ============================================================================== - Creep at sustained dead+snow load NOT modelled. - Cyclic wind fatigue NOT modelled. - Thermal & UV degradation of joints NOT modelled. - Door / window cut-outs NOT modelled. - Joint capacity uses 'perfect bond' assumption; lab joint allowables applied to membrane principal stresses as a conservative proxy. - Joint-shear envelope across panel boundaries NOT computed in this Phase 4 run (deferred -- requires per-edge force extraction, which the per-panel CSV does not capture). - Multi-solver envelope is the conservative max across the consumed shell formulations. The default envelope combines the in-house CST+DKT solver and OpenSees ShellMITC4 (two independent codebases that agree to ~1.2 % on the faceted dome). OpenSees ShellDKGT can be added back via --include-dkgt for a stricter (4x more conservative) envelope. See reports/2026-05-04--smooth-cap-4way.md. ==============================================================================