============================================================================== OpenSees per-panel code-check (multi-solver envelope) Site: baseline (typical CONUS) ============================================================================== 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': 4.0, 'tension': 4.0, 'shear': 4.0, 'bending': 4.0, 'buckling': 3.0, 'joint': 5.0} ALLOWABLE compression (worst) : 0.618 MPa ALLOWABLE bending (worst) : 0.542 MPa ALLOWABLE joint shear : 82.0 kPa ALLOWABLE joint tension : 54.0 kPa Mesh: midsurface VTU : reports/full_dome_midsurface.vtu nodes : 4,639 triangles : 8,960 rhombic panels : 70 thickness : 76.2 mm Solvers consumed: inhouse_dkt + opensees_mitc4 (DKGT excluded by default; use --include-dkgt to add) - inhouse_dkt ( 840 CheckResults, 210 panel:case combos) - opensees_mitc4 ( 840 CheckResults, 210 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 58, snow : D/C = 0.378 (inhouse_dkt: 0.378 opensees_mitc4: 0.048) [PASS] panel 58, wind_cc_peak: D/C = 1.161 (inhouse_dkt: 1.161 opensees_mitc4: 0.162) [FAIL] <- governing panel 54, wind_mwfrs : D/C = 0.422 (inhouse_dkt: 0.422 opensees_mitc4: 0.010) [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 58 712 72.33 1.161 1.161 0.162 inhouse_dkt 54 1014 30.56 1.149 1.149 0.032 inhouse_dkt 59 720 71.90 1.111 1.111 0.169 inhouse_dkt 52 1014 30.28 0.966 0.966 0.020 inhouse_dkt 50 1014 30.09 0.952 0.952 0.019 inhouse_dkt 56 1016 30.38 0.934 0.934 0.036 inhouse_dkt 63 1065 40.40 0.890 0.890 0.753 inhouse_dkt 57 1029 30.42 0.860 0.860 0.024 inhouse_dkt 64 1064 40.56 0.817 0.412 0.817 mitc4 53 1013 30.78 0.760 0.760 0.019 inhouse_dkt WORST OVERALL: D/C = 1.161 (panel 58, load case wind_cc_peak) -> FAIL [MEMBRANE COMPRESSION] envelope worst (per load case): panel 59, snow : D/C = 0.570 (inhouse_dkt: 0.570 opensees_mitc4: 0.294) [PASS] panel 59, wind_cc_peak: D/C = 1.289 (inhouse_dkt: 1.289 opensees_mitc4: 0.233) [FAIL] <- governing panel 59, wind_mwfrs : D/C = 0.415 (inhouse_dkt: 0.415 opensees_mitc4: 0.060) [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 59 720 71.90 1.289 1.289 0.233 inhouse_dkt 60 709 72.46 1.209 1.209 0.000 inhouse_dkt 64 1064 40.56 0.744 0.744 0.000 inhouse_dkt 61 718 72.66 0.720 0.720 0.145 inhouse_dkt 62 853 57.09 0.715 0.715 0.584 inhouse_dkt 63 1065 40.40 0.627 0.627 0.221 inhouse_dkt 10 830 60.01 0.491 0.491 0.035 inhouse_dkt 4 847 60.58 0.468 0.468 0.000 inhouse_dkt 5 846 60.39 0.463 0.463 0.000 inhouse_dkt 6 846 60.41 0.444 0.444 0.000 inhouse_dkt WORST OVERALL: D/C = 1.289 (panel 59, load case wind_cc_peak) -> FAIL [MEMBRANE TENSION] envelope worst (per load case): panel 59, snow : D/C = 5.292 (inhouse_dkt: 5.292 opensees_mitc4: 1.306) [FAIL] panel 59, wind_cc_peak: D/C = 17.415 (inhouse_dkt: 17.415 opensees_mitc4: 7.340) [FAIL] <- governing panel 59, wind_mwfrs : D/C = 5.484 (inhouse_dkt: 5.484 opensees_mitc4: 2.028) [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 59 720 71.90 17.415 17.415 7.340 inhouse_dkt 64 1064 40.56 17.020 17.020 7.657 inhouse_dkt 61 718 72.66 10.890 10.890 7.367 inhouse_dkt 60 709 72.46 9.169 9.169 2.656 inhouse_dkt 9 847 60.54 8.851 8.851 4.324 inhouse_dkt 10 830 60.01 8.721 8.721 4.171 inhouse_dkt 63 1065 40.40 7.970 7.970 7.550 inhouse_dkt 58 712 72.33 7.467 7.467 2.506 inhouse_dkt 3 847 60.05 6.894 6.894 4.434 inhouse_dkt 18 973 62.27 6.369 6.369 2.980 inhouse_dkt WORST OVERALL: D/C = 17.415 (panel 59, load case wind_cc_peak) -> FAIL [LOCAL PLATE BUCKLING] envelope worst (per load case): panel 59, snow : D/C = 0.507 (inhouse_dkt: 0.507 opensees_mitc4: 0.262) [PASS] panel 59, wind_cc_peak: D/C = 1.147 (inhouse_dkt: 1.147 opensees_mitc4: 0.207) [FAIL] <- governing panel 59, wind_mwfrs : D/C = 0.370 (inhouse_dkt: 0.370 opensees_mitc4: 0.053) [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 59 720 71.90 1.147 1.147 0.207 inhouse_dkt 60 709 72.46 1.060 1.060 0.000 inhouse_dkt 40 957 88.58 0.861 0.861 0.000 inhouse_dkt 61 718 72.66 0.649 0.649 0.131 inhouse_dkt 62 853 57.09 0.592 0.592 0.483 inhouse_dkt 38 964 89.30 0.529 0.529 0.000 inhouse_dkt 25 939 67.82 0.522 0.522 0.077 inhouse_dkt 64 1064 40.56 0.505 0.505 0.000 inhouse_dkt 37 917 89.18 0.498 0.498 0.000 inhouse_dkt 18 973 62.27 0.493 0.493 0.000 inhouse_dkt WORST OVERALL: D/C = 1.147 (panel 59, load case wind_cc_peak) -> FAIL ============================================================================== OVERALL VERDICT (envelope across all solvers) ============================================================================== Limit state Worst D/C Solver Panel Load case Verdict plate bending 1.161 inhouse_dkt 58 wind_cc_peak FAIL membrane compression 1.289 inhouse_dkt 59 wind_cc_peak FAIL membrane tension 17.415 inhouse_dkt 59 wind_cc_peak FAIL local plate buckling 1.147 inhouse_dkt 59 wind_cc_peak FAIL OVERALL: FAIL (envelope across all consumed shell solvers) ============================================================================== GLOBAL BUCKLING (deferred — see reports/opensees_buckling_*_baseline.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 baseline : ccx BLF = 4.886 (BLF/FoS = 1.629: PASS) uplift baseline : ccx BLF = 3.356 (BLF/FoS = 1.119: 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. ==============================================================================