# Linear Static MITC4 Shell Reference Verification Report ## Metadata - feature_id: `linear-static-mitc4-shell` - model_id: `shell-s4` - source_head: `820ba30c717b3d0e113775608e20dfd5fbc05d53` - source_build_test_report: `docs/linear-static-mitc4-shell/build-test.md` - source_reference_models: `docs/linear-static-mitc4-shell/reference-model.md` - source_io_definition: `docs/linear-static-mitc4-shell/io.md` - source_requirements: `docs/linear-static-mitc4-shell/requirements.md` - historical_status: `pass-for-physics-evaluation` - current_status: `pass-for-physics-evaluation` - superseded_on: `2026-08-18` - revalidated_on: `2026-08-18` - owner_agent: `reference-verification-agent` - date: `2026-08-13` The fixed-absolute-tolerance evidence below is preserved as a historical record. ADR-022 supersedes that decision with the common family-scale row/RMS policy. The following revalidation is the current reference-gate evidence. ## 2026-08-18 Common-policy Revalidation `cmake --build .harness/build --config Debug` passed, followed by `ctest --test-dir .harness/build -C Debug --output-on-failure`: 214/214 tests passed. The S4 reference test generated `.harness/build/reference/mitc4-shell-s4-comparison/comparison.json` from the declared read-only input/CSV pair. - exact canonical rows: 294 - blocking translation family: 147 rows, all row/RMS gates passed - warning-only rotation family: 147 rows, all row/RMS gates passed; warnings 0 - identity/schema/nonfinite failures: 0 - overall verdict: `passed=true` | family | rows | scale | near-zero rows | max absolute error | scale-relative RMS | | --- | ---: | ---: | ---: | ---: | ---: | | translation `U1/U2/U3` | 147 | `2.37408203e-5` | 122 | `1.903785349151439e-7` | `1.0332756650397166e-3` | | rotation `UR1/UR2/UR3` | 147 | `7.60725743e-6` | 107 | `6.882854962740428e-8` | `2.9771372973060382e-3` | All values above come from the generated JSON ledger. The historical report body starts below and must not be read as the current identity/tolerance evidence. The prerequisite build/test report has status `pass-for-reference-verification`. This report verifies only the approved full-integration S4 displacement case. It does not compare S4R artifacts, claim Abaqus formulation equivalence, approve physics sanity, or approve release readiness. ## Verdict The reference-comparison gate passes. The fresh FESA result has an exact 294-row identity match to the read-only Abaqus displacement CSV. All 147 blocking `U1/U2/U3` rows satisfy the fixed absolute tolerance `1.0e-5`. All 147 warning-only `UR1/UR2/UR3` rows also satisfy `1.0e-5`, so no rotational warning was emitted. - declared cases compared: `1/1` - blocking rows passed: `147/147` - blocking failures: `0` - warning-only rows compared: `147/147` - warning-only exceedances and warnings: `0/0` - missing / extra / duplicate / nonfinite rows: `0 / 0 / 0 / 0` - largest blocking normalized error: `0.0190378534915144` - comparison verdict: `passed=true` ## Artifact Inventory | item | exact path | status | direct evidence | | --- | --- | --- | --- | | declared S4 input | `reference/shell/shell.inp` | present, unchanged | 4,770 bytes; SHA-256 `4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF` | | required displacement CSV | `reference/shell/shell displacements.csv` | present, unchanged | 5,592 bytes; SHA-256 `C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B`; 49 wide rows and six finite components per row | | authoritative solver output | `.harness/build/reference/mitc4-shell-s4-comparison/results.h5` | present, valid | 95,024 bytes after a fresh verification run; observed raw SHA-256 `E88E5E5E1F83AB95CAE545AD1F28F896D3FCB82F3EA2B8006A3A703FED07A5CB` (non-decision inventory only) | | deterministic comparison ledger | `.harness/build/reference/mitc4-shell-s4-comparison/comparison.json` | present, valid | 94,349 bytes; SHA-256 `8E8DEA51B6F7C663BACC41FDA6103A4596DB26E02F1EAD6069D458F51E0102E6`; `passed=true` | | S4R reference artifacts | `reference/shellR/` | not consumed | Excluded from the approved acceptance comparison. | | reaction and stress CSVs | other files under `reference/shell/` | not consumed | Optional inspection evidence only; not an equality gate. | | FESA-derived CSV | N/A | not generated | HDF5 was compared directly to the Abaqus CSV. | The input and required CSV had identical SHA-256 values and identical UTC modification times (`2026-08-11T11:44:40.9520527Z`) before and after the fresh comparison runs. `git diff --name-only -- reference` and `git status --short -- reference` each returned zero paths. The HDF5 hash above inventories one fresh generation, not a stable content identity. Raw HDF5 bytes changed across regenerations while the projected values and deterministic JSON ledger remained identical; concurrent executions of the same ignored build-local route may replace the file again. This report does not claim byte-identical HDF5 container output. ### Authoritative HDF5 projection audit The comparator and a read-only HDF5 2.1.1 inspection established: - `/metadata`: schema version `0`, feature `linear-static-mitc4-shell`, solver version `0.1.0`, `Step-1`, frame `0`, internal formulation `FESA-MITC4`, and integration rule `2x2x2-gauss; mitc4-edge-midpoint-shear`; - source input identity: `path=C:/Users/baram/orca/workspaces/FESADev/MITC4/reference/shell/shell.inp;content_identity=fnv1a64:cf0795df753d377e`; - `/model/nodes`: 49 compound rows with ordered fields `internal_node_id`, `instance_name`, `source_label`, and `coordinates`; - `/model/elements`: 36 compound rows, source element type `S4`, and internal formulation `FESA-MITC4`; - `/steps/Step-1/frames/0/nodal/displacement`: float64 shape `[49,6]`, global nodal components `[UX,UY,UZ,URX,URY,URZ]`, mapped to `[U1,U2,U3,UR1,UR2,UR3]`; - all projected source identities and displacement values are unique and finite. ## Comparison Contract - case identity: `shell-s4` - authoritative FESA dataset: `/steps/Step-1/frames/0/nodal/displacement` - HDF5 node identity source: `/model/nodes.instance_name` and `/model/nodes.source_label` - normalized key: `(case_id, instance_name, source_node_label, component)` - observed instance: `Part-1-1` - observed source nodes: 49 unique labels - CSV projection: trimmed `Part Instance Name`, `Node Label`, `U-U1`, `U-U2`, `U-U3`, `UR-UR1`, `UR-UR2`, and `UR-UR3` - stable component order: `[U1,U2,U3,UR1,UR2,UR3]` - blocking inventory: `U1/U2/U3` - warning-only inventory: `UR1/UR2/UR3` - row precheck: exact key set, unique rows, finite HDF5/reference values, and exact required HDF5 schema before tolerance evaluation - tolerance source: requirements `FESA-REQ-LSMITC4-058` through `064`, the I/O definition Section 7, and the approved reference-model contract Section 5 - row tolerance: `abs(fesa-reference) <= 1.0e-5` - tolerance-normalized error: `absolute_error / 1.0e-5` - `reference_scale`: diagnostic only; it does not alter the tolerance or verdict - zero policy: no clamp, substitution, omission, averaging, or row-order matching Independent ledger reconstruction found 294 projected CSV keys, 294 comparison keys, zero duplicate keys, and exact set equality. All 294 serialized row tolerances equal `1.0e-5`. The complete per-row decisions remain in the identified deterministic `comparison.json`. ## Execution Evidence The existing FESA S4 reference route was used; Abaqus and other reference solvers were not executed. The first run regenerated the evidence after its test-owned output directory cleanup. Further exact reruns confirmed the ledger bytes and the final verification assertions. | order | exact command | exit code | result | | ---: | --- | ---: | --- | | 1 | `cmake --build .harness/build --config Debug --target fesa_reference_tests` | `0` | Reference test executable built; duration `1.830 s`. | | 2 | `ctest --test-dir .harness/build -C Debug -R '^Mitc4S4Reference\.' --output-on-failure` | `0` | Fresh S4 E2E tests `2/2` passed; duration `0.760 s`. | | 3 | PowerShell CSV/JSON identity and metric audit | `0` | 294 exact keys; missing/extra/duplicate/nonfinite/nonfixed-tolerance counts all zero. | | 4 | `ctest --test-dir .harness/build -C Debug -R '^Mitc4S4Reference\.' --output-on-failure` | `0` | Repeat S4 E2E tests `2/2` passed; duration `0.911 s`; JSON hash unchanged. | | 5 | `h5dump.exe -A -g '/metadata' ` with HDF5 and Intel oneAPI 2026.1 runtime directories prepended to `PATH` | `0` | Required metadata values inspected read-only. | | 6 | `h5dump.exe -H -d '/model/nodes' ` | `0` | Compound schema and shape `[49]` inspected. | | 7 | `h5dump.exe -H -d '/model/elements' ` | `0` | Compound schema and shape `[36]` inspected. | | 8 | `h5dump.exe -H -d '/steps/Step-1/frames/0/nodal/displacement' ` | `0` | Float64 displacement schema and shape `[49,6]` inspected. | | 9 | Final `ctest --test-dir .harness/build -C Debug -R '^Mitc4S4Reference\.' --output-on-failure` plus report/metric assertion script | `0` | S4 E2E tests `2/2`; `verification=PASS`; final generated artifacts retained. | | 10 | `git diff --check` | `0` | Report patch has no whitespace errors. | | 11 | target-only Git scope and reference no-change audit | `0` | Only this owned report and the pre-existing untracked build/test report are visible; reference scope remains clean. | An initial optional `h5dump` probe without the Intel runtime directory exited `-1073741515` because `libmmd.dll` was not on that process's `PATH`. The same read-only inspection passed after adding the installed oneAPI runtime path. This was an inspection-environment incident, not a solver, schema, comparison, or reference-artifact failure. The repeated JSON ledger was byte-identical: - size: `94,349` bytes - SHA-256 before and after repeat: `8E8DEA51B6F7C663BACC41FDA6103A4596DB26E02F1EAD6069D458F51E0102E6` - row decisions: `294` - component metrics: `6` - node vector metrics: `49` - warnings: `0` - verdict: `passed=true` ## Quantity Results `max_rel` is calculated only for nonzero Abaqus values and is diagnostic. Tiny reference residues make it ill-conditioned; the acceptance decision uses only the fixed absolute tolerance and its fixed-tolerance-normalized error. | quantity | components | behavior | compared | missing | extra | duplicate | nonfinite | max abs | max rel | max normalized | RMS | L2 norm | worst ID/component by abs error | result | | --- | --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | --- | | displacement | `U1/U2/U3` | blocking | 147 | 0 | 0 | 0 | 0 | `1.90378534915144e-7` | `1.0` | `0.0190378534915144` | `2.45308118840709e-8` | `2.97420287738877e-7` | `Part-1-1`, node 2, `U3` | pass | | rotation | `UR1/UR2/UR3` | warning-only | 147 | 0 | 0 | 0 | 0 | `6.88285496274043e-8` | `35.7165926082675` | `0.00688285496274043` | `2.26478498250615e-8` | `2.74590586054375e-7` | `Part-1-1`, node 44, `UR1` | pass, no warning | The translational maximum relative error `1.0` occurs on near-zero reference residue, including node 1 `U3=-1.17769804e-32`. The rotational maximum relative error `35.7165926082675` occurs at node 2 `UR2`, where the reference is `1.3860685e-22` and the absolute error is only `4.95056439416524e-21`. Neither value was clamped or omitted, and neither relative diagnostic controls the verdict. ### Component metrics Each component contains 49 matched rows. `reference_scale` is retained only as diagnostic information. `L2 norm` is the comparator's component `vector_norm_error`, and `worst_row` is the zero-based index in the JSON ledger. | component | behavior | reference scale | tolerance | max abs | max rel | max normalized | RMS | L2 norm | worst row | worst identity | result | | --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | --- | | `U1` | blocking | `3.11730945e-23` | `1.0e-5` | `3.11730945e-23` | `1.0` | `3.11730945e-18` | `1.13587076092006e-23` | `7.95109532644045e-23` | 66 | node 12 / `U1` | pass | | `U2` | blocking | `3.11730945e-23` | `1.0e-5` | `3.11730945e-23` | `1.0` | `3.11730945e-18` | `1.13587076092006e-23` | `7.95109532644045e-23` | 61 | node 11 / `U2` | pass | | `U3` | blocking | `2.37408203e-5` | `1.0e-5` | `1.90378534915144e-7` | `1.0` | `0.0190378534915144` | `4.24886125341252e-8` | `2.97420287738877e-7` | 8 | node 2 / `U3` | pass | | `UR1` | warning-only | `7.60725743e-6` | `1.0e-5` | `6.88285496274043e-8` | `11.9344619221920` | `0.00688285496274043` | `2.77378379212910e-8` | `1.94164865449037e-7` | 261 | node 44 / `UR1` | pass, no warning | | `UR2` | warning-only | `7.60725743e-6` | `1.0e-5` | `6.88285496273990e-8` | `35.7165926082675` | `0.00688285496273990` | `2.77378379212909e-8` | `1.94164865449036e-7` | 202 | node 34 / `UR2` | pass, no warning | | `UR3` | warning-only | `5.27113701e-25` | `1.0e-5` | `5.27113701e-25` | `1.0` | `5.27113701e-20` | `2.12986098533393e-25` | `1.49090268973375e-24` | 203 | node 34 / `UR3` | pass, no warning | ### Worst rows and node-vector metrics - global worst and worst blocking row: `shell-s4`, `Part-1-1`, node 2, `U3`; FESA `-2.35504417650849e-5`, Abaqus `-2.37408203e-5`, absolute error `1.90378534915144e-7`, tolerance `1.0e-5`, normalized error `0.0190378534915144`, within tolerance; - worst warning-only row: `shell-s4`, `Part-1-1`, node 44, `UR1`; FESA `1.39850632037260e-6`, Abaqus `1.46733487e-6`, absolute error `6.88285496274043e-8`, normalized error `0.00688285496274043`, within tolerance; - maximum per-node displacement-vector error: `1.90378534915144e-7` at `Part-1-1`, node 2; - maximum per-node rotation-vector error: `7.21144690026432e-8` at `Part-1-1`, node 39. ## Failure Classification - classification: `N/A` - primary_failure: `N/A` - evidence: declared artifacts exist; the authoritative HDF5 projection passed schema and identity checks; 294/294 exact row keys are unique and finite; 147/147 blocking rows pass; zero rotational exceedances or warnings occurred - correction_handoff: `N/A` The optional first `h5dump` runtime-path incident is classified as a resolved inspection-environment incident and does not affect this gate. ## Handoff Recommendation | target_agent | reason | required input | | --- | --- | --- | | Physics Evaluation Agent | All declared blocking reference rows passed the exact approved tolerance, and the warning-only inventory has no exceedance. | This report, `.harness/build/reference/mitc4-shell-s4-comparison/results.h5`, and its deterministic `comparison.json`. | The handoff status is `pass-for-physics-evaluation` only. Physics Evaluation remains responsible for equilibrium, reaction sign, displacement direction, symmetry, physical energy, result signs, and model-coverage adequacy. ## No-Change Assertion - source_files_modified: `false` - test_files_modified: `false` - cmake_files_modified: `false` - requirements_modified: `false` - formulation_modified: `false` - numerical_review_modified: `false` - io_contract_modified: `false` - reference_model_contract_modified: `false` - phase_files_modified: `false` - tolerance_policies_modified: `false` - reference_artifacts_modified: `false` - Abaqus_or_other_reference_solver_executed: `false` - owned_report_created: `true` - generated_build_local_evidence: `true`, ignored under `.harness/build/` - pre_existing_untracked_build_test_report_preserved: `true` ## Open Issues - None blocking Physics Evaluation. - Nonblocking audit note: raw HDF5 container hashes differed across fresh regenerations, while the authoritative projected rows and serialized comparison ledger were stable and the JSON was byte-identical. No HDF5 byte-determinism claim is made by this report.