Files
FESADev/docs/cpp-object-oriented-modular-refactoring/reference-comparison.md
T

10 KiB

C++ Object-Oriented Modular Refactoring Reference Comparison Report

Metadata

  • owner_agent: implementation-agent
  • feature_id: cpp-object-oriented-modular-refactoring
  • report_status: passed
  • date: 2026-08-16
  • reference_baseline: 1e5758f3e482fae4c3d58cac680abe0aac02e549
  • command_order: ARTIFACT CHECK -> COMPARE -> CLASSIFY -> REPORT
  • authoritative FESA output: generated results.h5
  • reference artifacts: read-only existing files under reference/

ARTIFACT CHECK

Exact declared artifact inventory:

Artifact Bytes Lines Data rows SHA-256
reference/cantilever beam/cantilever beam.inp 2330 106 N/A E406EA9560321B791DBDB829E03BD24593B9875E0195D35B86BD931EDA122EF3
reference/cantilever beam/cantilever beam displacements.csv 1790 12 11 7B3312FBC8848E81D9A0FD4FF2B56BC1954636A2C14B5C1CBB269CB9477D3C31
reference/cantilever beam/cantilever beam elemental forces.csv 1396 12 11 E5E77FEC0FA9482AE018DBF296E74D396335C7C711BD2E9AA2315247A34290BA
reference/cantilever beam/cantilever beam reactions.csv 1780 12 11 BF30CDB0CD50106885DE14D63492737736C587426EBD787DE4F7EE6AA86DAA23
reference/shell/shell.inp 4770 164 N/A 4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF
reference/shell/shell displacements.csv 5592 50 49 C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B

Read-only schema precheck:

Check Result
B33 input contains TYPE=B33 Pass
MITC4 S4 input contains TYPE=S4 Pass
B33 displacement CSV header/key/finite precheck Pass: 11 rows, 11 unique keys, 0 duplicate keys, 0 nonfinite values
B33 reaction CSV header/key/finite precheck Pass: 11 rows, 11 unique keys, 0 duplicate keys, 0 nonfinite values
B33 elemental-force CSV header/key/finite precheck Pass: 11 rows, 11 unique keys, 0 duplicate keys, 0 nonfinite values
MITC4 S4 displacement CSV header/key/finite precheck Pass: 49 rows, 49 unique keys, 0 duplicate keys, 0 nonfinite values
Reference tree diff before compare Pass: git diff --exit-code 1e5758f -- reference, exit 0

COMPARE

Command:

ctest --test-dir .harness/build -C Debug `
  -R "B33ReferenceComparison|Mitc4S4Reference" --output-on-failure

Result: exit 0 in 1.260s, 3/3 tests passed.

Generated artifacts:

Artifact Bytes SHA-256
.harness/build/reference/cantilever-beam-b33/results.h5 25336 58CD358F68D8094079E9E525C35EE88AE0575A2962D93472BF0678D78A785247
.harness/build/reference/cantilever-beam-b33/comparison.json 128118 258347AEA791D981AEA9B2BCAD85DE5344D4859ECA3692DC5E7AA01A848F8E0D
.harness/build/reference/mitc4-shell-s4-comparison/results.h5 95024 A8D2E12886E87BAA5D895B7E96278EA4B462718D13B985CA2688B505480F0195
.harness/build/reference/mitc4-shell-s4-comparison/comparison.json 94349 8E8DEA51B6F7C663BACC41FDA6103A4596DB26E02F1EAD6069D458F51E0102E6
.harness/build/reference/mitc4-shell-s4-metadata/results.h5 95024 8FD6609A2D3758365A2AC2E34692CC0EC982D8E67396BDFF03FAAF2539EF483C
.harness/build/reference/mitc4-shell-s4-metadata/comparison.json 94349 8E8DEA51B6F7C663BACC41FDA6103A4596DB26E02F1EAD6069D458F51E0102E6

The generated comparison.json files are the deterministic machine-readable per-row decision records. The summaries below preserve row counts, worst rows, precheck/tolerance decisions, and artifact hashes for audit.

HDF5-to-CSV projection and tolerance contracts

B33

  • Model: cantilever-beam-b33
  • HDF5 datasets:
    • /steps/Step-1/frames/0/nodal/displacement
    • /steps/Step-1/frames/0/nodal/reaction
    • /steps/Step-1/frames/0/element/section_resultant
  • Row identity: model, Step-1, frame 0, instance PART-1_1-1, source node label, quantity, component.
  • Components:
    • displacement UX/UY/UZ/URX/URY/URZ
    • reaction RF1/RF2/RF3/RM1/RM2/RM3
    • section resultant N/T/My/Mz
  • Tolerance: absolute_floor + 1.0e-6 * reference_scale, with reference scale from read-only Abaqus rows only; displacement/rotation floor 1.0e-9, force/moment floor 1.0e-3.
  • Pre-tolerance policy: missing, extra, duplicate, nonfinite, schema-mismatched, or identity-mismatched rows fail before tolerance.

MITC4 S4

  • Case: shell-s4
  • Source element type: S4
  • Internal formulation: FESA-MITC4
  • Integration rule: 2x2x2-gauss; mitc4-edge-midpoint-shear
  • HDF5 dataset: /steps/Step-1/frames/0/nodal/displacement
  • Row identity: case, instance, source node label, component.
  • Components: U1/U2/U3 blocking; UR1/UR2/UR3 warning-only.
  • Tolerance: fixed absolute 1.0e-5 for every U/UR row; no component scale, row denominator, zero clamp, omission, or averaging affects the decision.
  • Pre-tolerance policy: missing, extra, duplicate, nonfinite, header-mismatched, or identity-mismatched projected rows fail before tolerance.

CLASSIFY

Blocking classification: pass.

No missing, extra, duplicate, nonfinite, schema-mismatched, identity-mismatched, or tolerance-failed blocking row was reported by either generated comparison.

B33 row and metric decisions

Overall: passed=true; row decisions: 176/176 passed; failed rows: 0; nonfinite row metrics: 0; stress comparison applicable: false with N/A reason Abaqus beam stress comparison is N/A; analytical/unit and HDF5 schema tests provide stress evidence.

Physics evidence: endpoint consistency passed; free residual norm 9.356339321107032e-07.

Quantity Component Rows Reference scale Max abs error Max normalized error RMS error Norm error Worst row decision
displacement UX 11 0 0 0 0 0 node 1, FESA 0, reference 0, tol 1e-09, pass
displacement UY 11 0 0 0 0 0 node 1, FESA 0, reference 0, tol 1e-09, pass
displacement UZ 11 0.0190476272 5.33322917078971e-10 0.026602795021995 2.79095304685767e-10 9.25654406392607e-10 node 11, FESA -0.019047626666677083, reference -0.0190476272, tol 2.00476272e-08, pass
displacement URX 11 0 0 0 0 0 node 1, FESA 0, reference 0, tol 1e-09, pass
displacement URY 11 0.00285714399 1.00001394318094e-10 0.0259262798011579 5.80165854051178e-11 1.92419245406385e-10 node 9, FESA 0.002742858240001394, reference 0.00274285814, tol 3.85714399e-09, pass
displacement URZ 11 0 0 0 0 0 node 1, FESA 0, reference 0, tol 1e-09, pass
reaction RF1 11 0 0 0 0 0 node 1, FESA 0, reference 0, tol 0.001, pass
reaction RF2 11 0 0 0 0 0 node 1, FESA 0, reference 0, tol 0.001, pass
reaction RF3 11 1000000 8.19563865661621e-07 8.1874512054108e-07 3.62393833938394e-07 1.20192437351202e-06 node 1, FESA 1000000.0000008196, reference 1000000, tol 1.001, pass
reaction RM1 11 0 0 0 0 0 node 1, FESA 0, reference 0, tol 0.001, pass
reaction RM2 11 10000000 5.05149364471436e-06 5.05098854585977e-07 1.52613777609191e-06 5.06162638168429e-06 node 1, FESA -10000000.000005051, reference -10000000, tol 10.001, pass
reaction RM3 11 0 0 0 0 0 node 1, FESA 0, reference 0, tol 0.001, pass
section_resultant N 11 0 0 0 0 0 node 1, FESA 0, reference 0, tol 0.001, pass
section_resultant T 11 0 0 0 0 0 node 1, FESA 0, reference 0, tol 0.001, pass
section_resultant My 11 10000000 0.0156002428611895 0.00155986829928902 0.00470365086790684 0.0156002450736765 node 11, FESA 2.4286118949223834e-07, reference -0.0156, tol 10.001, pass
section_resultant Mz 11 0 0 0 0 0 node 1, FESA 0, reference 0, tol 0.001, pass

MITC4 S4 row and metric decisions

Overall: passed=true; rows: 294/294 within tolerance; blocking U rows: 147/147 passed; warning-only UR rows: 147/147 within tolerance; warning count: 0; vector metrics: 49.

Component Rows Blocking rows Reference scale Tolerance Max abs error Max normalized error RMS error Vector norm error Worst row decision
U1 49 49 3.11730945e-23 1e-05 3.11730945e-23 3.11730945e-18 1.13587076092006e-23 7.95109532644045e-23 node 12, FESA 0, reference 3.11730945e-23, pass
U2 49 49 3.11730945e-23 1e-05 3.11730945e-23 3.11730945e-18 1.13587076092006e-23 7.95109532644045e-23 node 11, FESA 0, reference 3.11730945e-23, pass
U3 49 49 2.37408203e-05 1e-05 1.90378534915144e-07 0.0190378534915144 4.24886125341252e-08 2.97420287738877e-07 node 2, FESA -2.3550441765084857e-05, reference -2.37408203e-05, pass
UR1 49 0 7.60725743e-06 1e-05 6.88285496274043e-08 0.00688285496274043 2.7737837921291e-08 1.94164865449037e-07 node 44, FESA 1.3985063203725957e-06, reference 1.46733487e-06, pass warning-only
UR2 49 0 7.60725743e-06 1e-05 6.8828549627399e-08 0.0068828549627399 2.77378379212909e-08 1.94164865449036e-07 node 34, FESA 1.398506320372601e-06, reference 1.46733487e-06, pass warning-only
UR3 49 0 5.27113701e-25 1e-05 5.27113701e-25 5.27113701e-20 2.12986098533393e-25 1.49090268973375e-24 node 34, FESA 0, reference -5.27113701e-25, pass warning-only

Overall worst MITC4 row: node 2, component U3, FESA -2.3550441765084857e-05, reference -2.37408203e-05, absolute error 1.903785349151439e-07, tolerance 1e-05, normalized error 0.01903785349151439, blocking pass.

Reference no-change assertion

Post-compare command:

git diff --exit-code 1e5758f -- reference

Result: exit 0, <no reference diff>.

No reference input, CSV, tolerance, comparator contract, or generated reference artifact was modified. Generated FESA outputs are confined to .harness/build/.

Open issues

None blocking. Passing comparison is only an implementation handoff to physics evaluation; it is not release readiness or physics approval.