============================================================================== OpenSees per-panel code-check (multi-solver envelope) Model: Office prototype (ZS-2026-001) (office) 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': 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/office/full_dome_midsurface.vtu nodes : 18,239 triangles : 35,840 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.237 (inhouse_dkt: 0.237 opensees_mitc4: 0.040) [PASS] panel 58, wind_cc_peak: D/C = 0.727 (inhouse_dkt: 0.727 opensees_mitc4: 0.171) [PASS] <- governing panel 54, wind_mwfrs : D/C = 0.264 (inhouse_dkt: 0.264 opensees_mitc4: 0.015) [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 713 72.37 0.727 0.727 0.171 inhouse_dkt 54 1014 30.55 0.718 0.718 0.045 inhouse_dkt 59 720 71.90 0.695 0.695 0.234 inhouse_dkt 52 1014 30.27 0.604 0.604 0.050 inhouse_dkt 50 1015 30.09 0.595 0.595 0.049 inhouse_dkt 56 1016 30.38 0.584 0.584 0.043 inhouse_dkt 63 1065 40.41 0.557 0.557 0.259 inhouse_dkt 57 1029 30.43 0.538 0.538 0.047 inhouse_dkt 53 1013 30.77 0.475 0.475 0.043 inhouse_dkt 3 847 60.06 0.422 0.422 0.050 inhouse_dkt WORST OVERALL: D/C = 0.727 (panel 58, load case wind_cc_peak) -> PASS [MEMBRANE COMPRESSION] envelope worst (per load case): panel 59, snow : D/C = 0.356 (inhouse_dkt: 0.356 opensees_mitc4: 0.066) [PASS] panel 59, wind_cc_peak: D/C = 0.806 (inhouse_dkt: 0.806 opensees_mitc4: 0.039) [PASS] <- governing panel 59, wind_mwfrs : D/C = 0.260 (inhouse_dkt: 0.260 opensees_mitc4: 0.008) [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 0.806 0.806 0.039 inhouse_dkt 60 710 72.54 0.757 0.757 0.000 inhouse_dkt 64 1064 40.57 0.465 0.465 0.023 inhouse_dkt 61 718 72.64 0.450 0.450 0.039 inhouse_dkt 62 853 57.06 0.447 0.447 0.068 inhouse_dkt 63 1065 40.41 0.390 0.390 0.023 inhouse_dkt 10 830 60.00 0.307 0.307 0.000 inhouse_dkt 4 847 60.60 0.293 0.293 0.000 inhouse_dkt 5 846 60.40 0.289 0.289 0.000 inhouse_dkt 6 846 60.41 0.278 0.278 0.000 inhouse_dkt WORST OVERALL: D/C = 0.806 (panel 59, load case wind_cc_peak) -> PASS [MEMBRANE TENSION] envelope worst (per load case): panel 59, snow : D/C = 2.647 (inhouse_dkt: 2.647 opensees_mitc4: 0.213) [FAIL] panel 59, wind_cc_peak: D/C = 8.715 (inhouse_dkt: 8.715 opensees_mitc4: 1.574) [FAIL] <- governing panel 59, wind_mwfrs : D/C = 2.744 (inhouse_dkt: 2.744 opensees_mitc4: 0.489) [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 8.715 8.715 1.574 inhouse_dkt 64 1064 40.57 8.513 8.513 1.545 inhouse_dkt 61 718 72.64 5.446 5.446 1.567 inhouse_dkt 60 710 72.54 4.580 4.580 0.890 inhouse_dkt 9 847 60.56 4.428 4.428 1.016 inhouse_dkt 10 830 60.00 4.364 4.364 1.088 inhouse_dkt 63 1065 40.41 3.983 3.983 1.528 inhouse_dkt 58 713 72.37 3.733 3.733 0.887 inhouse_dkt 3 847 60.06 3.447 3.447 1.010 inhouse_dkt 18 973 62.28 3.187 3.187 0.721 inhouse_dkt WORST OVERALL: D/C = 8.715 (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.095) [PASS] panel 59, wind_cc_peak: D/C = 1.148 (inhouse_dkt: 1.148 opensees_mitc4: 0.056) [FAIL] <- governing panel 59, wind_mwfrs : D/C = 0.370 (inhouse_dkt: 0.370 opensees_mitc4: 0.011) [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.148 1.148 0.056 inhouse_dkt 60 710 72.54 1.064 1.064 0.000 inhouse_dkt 40 957 88.60 0.861 0.861 0.000 inhouse_dkt 61 718 72.64 0.648 0.648 0.056 inhouse_dkt 62 853 57.06 0.592 0.592 0.089 inhouse_dkt 38 966 89.29 0.530 0.530 0.000 inhouse_dkt 25 939 67.86 0.522 0.522 0.042 inhouse_dkt 64 1064 40.57 0.505 0.505 0.025 inhouse_dkt 37 919 89.17 0.501 0.501 0.000 inhouse_dkt 18 973 62.28 0.493 0.493 0.037 inhouse_dkt WORST OVERALL: D/C = 1.148 (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 0.727 inhouse_dkt 58 wind_cc_peak PASS membrane compression 0.806 inhouse_dkt 59 wind_cc_peak PASS membrane tension 8.715 inhouse_dkt 59 wind_cc_peak FAIL local plate buckling 1.148 inhouse_dkt 59 wind_cc_peak FAIL OVERALL: FAIL (envelope across all consumed shell solvers) ============================================================================== GLOBAL BUCKLING (deferred — see reports/office/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 = 19.389 (BLF/FoS = 6.463: PASS) uplift baseline : ccx BLF = 35.564 (BLF/FoS = 11.855: 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. ==============================================================================