Files
FESADev/docs/reference-verifications/linear-static-3d-euler-beam-reference-verification.md
T

17 KiB

Linear Static 3D Euler Beam Reference Verification Report

Metadata

  • feature_id: linear-static-3d-euler-beam
  • model_id: cantilever-beam-b33
  • source_head: 451d9077ea70e3087454db3760e677da0095d27f
  • source_build_test_report: docs/build-test-reports/linear-static-3d-euler-beam.md
  • source_reference_models: docs/reference-models/linear-static-3d-euler-beam-reference-models.md
  • source_io_definition: docs/io-definitions/linear-static-3d-euler-beam-io.md
  • source_implementation_plan: docs/implementation-plans/linear-static-3d-euler-beam.md
  • source_implementation_report: docs/implementation-plans/linear-static-3d-euler-beam-implementation-report.md
  • status: pass-for-physics-evaluation
  • owner_agent: reference-verification-agent
  • date: 2026-08-09

The prerequisite build/test report has status pass-for-reference-verification. This report applies only the approved Abaqus B33 reference tolerance. It does not approve physics sanity or release readiness.

Artifact Inventory

The approved B33 exception overrides the generic new-bundle inventory. The exact four legacy files with spaces are the complete read-only reference bundle; metadata.json, README.md, and a stress CSV are contractually N/A and are not missing artifacts.

item exact path status direct audit evidence
reference directory reference/cantilever beam/ present, exact inventory Four regular files only; no extra entry.
reference input reference/cantilever beam/cantilever beam.inp present, valid 2,330 bytes; exactly one *ELEMENT, TYPE=B33 declaration at line 21.
displacement CSV reference/cantilever beam/cantilever beam displacements.csv present, valid Exact 9-column CAE header; 11 unique rows; 66 finite values.
reaction CSV reference/cantilever beam/cantilever beam reactions.csv present, valid Exact 9-column CAE header; 11 unique rows; 66 finite values.
elemental-force CSV reference/cantilever beam/cantilever beam elemental forces.csv present, valid Exact 7-column CAE header; 11 unique rows; 44 finite values.
legacy metadata reference/cantilever beam/metadata.json N/A Approved design, ADR-010, I/O definition, and reference-model contract supply provenance.
legacy README reference/cantilever beam/README.md N/A Approved B33 legacy exception.
reference stress CSV N/A N/A Abaqus beam-stress comparison is outside the approved V0 scope.
authoritative solver output .harness/build/reference/cantilever-beam-b33/results.h5 present, valid 25,336 bytes; generated by the fresh exact CTest; HDF5 schema inspected read-only with HDF5 2.1.1 utilities.
comparison ledger .harness/build/reference/cantilever-beam-b33/comparison.json present, valid 128,118 bytes; 176 row decisions, 16 component metrics, and passed=true.
solver debug CSV view N/A N/A No derived FESA CSV was generated or used.

Reference hashes

Fresh pre-comparison and post-comparison SHA-256 values were identical:

exact approved legacy path SHA-256
reference/cantilever beam/cantilever beam.inp E406EA9560321B791DBDB829E03BD24593B9875E0195D35B86BD931EDA122EF3
reference/cantilever beam/cantilever beam displacements.csv 7B3312FBC8848E81D9A0FD4FF2B56BC1954636A2C14B5C1CBB269CB9477D3C31
reference/cantilever beam/cantilever beam reactions.csv BF30CDB0CD50106885DE14D63492737736C587426EBD787DE4F7EE6AA86DAA23
reference/cantilever beam/cantilever beam elemental forces.csv E5E77FEC0FA9482AE018DBF296E74D396335C7C711BD2E9AA2315247A34290BA

git diff --exit-code -- reference/ exited 0 and git status --short -- reference/ was empty after both comparison runs.

Authoritative HDF5 audit

h5ls and h5dump opened results.h5 read-only and established:

  • schema version 0, solver version 0.1.0, feature linear-static-3d-euler-beam, formulation B33-3D-Euler-Bernoulli, Step-1, and frame 0;
  • metadata unit label user-consistent-unspecified, as required for ordinary .inp interpretation; the approved reference-model contract supplies the external SI provenance used by this comparison;
  • coordinate convention global-cartesian; beam-local=(t,n1,t-cross-n1);
  • source identity path=C:/Users/baram/orca/workspaces/FESADev/LinearStatic/reference/cantilever beam/cantilever beam.inp;content_identity=fnv1a64:04543464cc970405; a fresh FNV-1a calculation of the input bytes reproduced 04543464cc970405;
  • 11 nodes with stable internal IDs 0 through 10, source labels 1 through 11, instance PART-1_1-1, global coordinates (0..10,0,0);
  • 10 elements with stable IDs 0 through 9, source labels 1 through 10, consecutive connectivity and identity local axes;
  • displacement and reaction shapes [11,6], section-resultant shape [10,2,4], exact component/unit/coordinate/location attributes, and finite float64 values;
  • mandatory stress_s11 compound schema with 20 finite rows (10 elements x 2 Gauss points), S11, force/length^2, beam-local section-point attributes, and the required fesa-default centroid identity.

Only results.h5 and comparison.json exist in the build-local evidence directory.

Comparison Contract

  • reference_csv_schema_version: abaqus-cae-report-csv-v0
  • hdf5_schema_version: 0
  • model / frame normalization: CSV Increment 1: Step Time = 1.000 -> (cantilever-beam-b33, Step-1, frame 0)
  • id_matching: exact preserved instance_name plus source node label; section-resultant endpoints project to an eligible source-node station
  • row-set policy: expected canonical keys are all 11 nodes crossed with 6 displacement, 6 reaction, and 4 section-resultant components
  • displacement normalization: U-U1/U-U2/U-U3/UR-UR1/UR-UR2/UR-UR3 -> UX/UY/UZ/URX/URY/URZ
  • reaction normalization: RF-RF1/RF-RF2/RF-RF3/RM-RM1/RM-RM2/RM-RM3 -> RF1/RF2/RF3/RM1/RM2/RM3
  • section normalization: SF-SF1 -> N, SM-SM1 -> My, SM-SM2 -> Mz, SM-SM3 -> T
  • coordinates: global Cartesian for nodal quantities; beam local for section resultants
  • output locations: nodal displacement/reaction and positive-local-x endpoint section cut projected to node station
  • interior-node policy: both incident endpoints must first pass the approved component tolerance; the smaller stable element ID is selected without averaging
  • tolerance source: requirements 036-039, ADR-014, approved I/O definition, and reference-model contract
  • tolerance policy: absolute_floor + 1e-6 * reference_scale
  • reference scale: maximum absolute value from read-only Abaqus rows in the same model, step/frame, quantity, and component only
  • SI floors: 1e-9 for displacement/rotation and 1e-3 for force/moment; zero scale uses the floor alone
  • fail-before-tolerance conditions: missing, extra, duplicate, nonfinite, schema-mismatched, or identity-mismatched row
  • zero-reference policy: no zero clamp, deletion, substitution, or omission

The complete expected set of 176 canonical keys was reconstructed independently from the contract and matched the 176 unique ledger rows exactly. The 16 expected quantity/component keys matched the 16 unique metrics. Every serialized absolute error, tolerance, pass decision, Abaqus-only reference scale, maximum error, maximum tolerance-normalized error, RMS error, norm error, and worst-row index was recalculated from the row ledger and matched exactly. Missing rows, extra rows, duplicate rows, nonfinite rows, and failed rows were all zero.

The Step 26 sample acceptance probe reads $metrics.status -eq 'pass', but the authoritative TASK-24 ComparisonReport, test contract, and serialized JSON define the verdict as the boolean passed. The generated JSON has no status field and has passed=true. This report uses passed=true; the stale sample-field mismatch does not change source, tests, or upstream contracts.

Execution Evidence

The exact command was run twice after the artifact precheck:

ctest --test-dir .harness/build -C Debug -R B33ReferenceComparison -V --output-on-failure

Both executions passed the single exact test B33ReferenceComparison.GeneratesAuthoritativeHdf5AndComparisonEvidence 1/1. Each run reset only .harness/build/reference/cantilever-beam-b33/ and regenerated the same two build-local files. The comparison ledger was byte deterministic on both runs:

  • size: 128118 bytes
  • SHA-256: 258347AEA791D981AEA9B2BCAD85DE5344D4859ECA3692DC5E7AA01A848F8E0D
  • verdict: passed=true

results.h5 remains the authoritative solver output. The JSON is deterministic review evidence derived directly from HDF5 and the read-only Abaqus CSV rows.

Quantity Results

maximum_relative_error below is calculated only where the Abaqus reference is nonzero. It is reported for audit completeness, but it is not the acceptance rule: near-zero Abaqus residues make row-relative error ill-conditioned. The approved component-scale normalized error is absolute_error / row_tolerance.

quantity FESA HDF5 dataset reference CSV compared missing extra nonfinite max abs error max relative error max tolerance-normalized error RMS error norm error worst ID/component by abs error result
displacement /steps/Step-1/frames/0/nodal/displacement reference/cantilever beam/cantilever beam displacements.csv 66 0 0 0 5.333229170789711e-10 1.0 0.026602795021994977 1.1637590907608428e-10 9.454423547085314e-10 node 11 / UZ pass
reaction /steps/Step-1/frames/0/nodal/reaction reference/cantilever beam/cantilever beam reactions.csv 66 0 0 0 5.0514936447143555e-6 8.195638656616211e-13 8.187451205410801e-7 6.403678373262425e-7 5.202372903532068e-6 node 1 / RM2 pass
section resultant /steps/Step-1/frames/0/element/section_resultant reference/cantilever beam/cantilever beam elemental forces.csv 44 0 0 0 1.5600242861189492e-2 1.0000155680249674 0.0015598682992890203 0.0023518254339534184 0.015600245073676508 node station 11 / My pass
stress /steps/Step-1/frames/0/element/stress_s11 N/A N/A N/A N/A 0 in 20 mandatory HDF5 rows N/A N/A N/A N/A N/A N/A N/A for Abaqus comparison; HDF5 requirement passed

The displacement row-relative maximum occurs at node 1 UZ, where the stored reference residue is -1e-30; the section row-relative maximum occurs at free-end My, where the stored reference residue is -1.56e-2. Neither row was clamped or omitted. Their approved mixed-tolerance decisions pass.

Component metrics

Each group contains 11 matched rows. worst_row is the zero-based index in the deterministic JSON row ledger.

quantity component reference scale row tolerance max abs error max normalized error RMS error norm error worst row worst identity result
displacement UX 0 1e-9 0 0 0 0 0 node 1 / UX pass
displacement UY 0 1e-9 0 0 0 0 1 node 1 / UY pass
displacement UZ 0.0190476272 2.00476272e-8 5.333229170789711e-10 0.026602795021994977 2.790953046857666e-10 9.256544063926071e-10 62 node 11 / UZ pass
displacement URX 0 1e-9 0 0 0 0 3 node 1 / URX pass
displacement URY 0.00285714399 3.85714399e-9 1.000013943180944e-10 0.025926279801157852 5.801658540511775e-11 1.924192454063848e-10 52 node 9 / URY pass
displacement URZ 0 1e-9 0 0 0 0 5 node 1 / URZ pass
reaction RF1 0 1e-3 0 0 0 0 66 node 1 / RF1 pass
reaction RF2 0 1e-3 0 0 0 0 67 node 1 / RF2 pass
reaction RF3 1e6 1.001 8.195638656616211e-7 8.187451205410801e-7 3.6239383393839433e-7 1.2019243735120167e-6 68 node 1 / RF3 pass
reaction RM1 0 1e-3 0 0 0 0 69 node 1 / RM1 pass
reaction RM2 1e7 10.001 5.0514936447143555e-6 5.05098854585977e-7 1.5261377760919117e-6 5.061626381684292e-6 70 node 1 / RM2 pass
reaction RM3 0 1e-3 0 0 0 0 71 node 1 / RM3 pass
section resultant N 0 1e-3 0 0 0 0 132 node 1 / N pass
section resultant T 0 1e-3 0 0 0 0 133 node 1 / T pass
section resultant My 1e7 10.001 0.015600242861189492 0.0015598682992890203 0.004703650867906837 0.015600245073676508 174 node 11 / My pass
section resultant Mz 0 1e-3 0 0 0 0 135 node 1 / Mz pass

The largest normalized comparison error across all 176 rows is 0.026602795021994977 at node 11 UZ, below the pass boundary of 1.0.

Row decision ledger

Every row decision is recorded in the deterministic build-local comparison.json identified above. Its stable row order is displacement nodes 1-11 x six components, reaction nodes 1-11 x six components, then section node stations 1-11 x [N,T,My,Mz]. Independent parsing confirmed:

  • rows: 176
  • unique canonical row keys: 176
  • row decisions with passed=true: 176
  • row decisions with passed=false: 0
  • finite FESA/reference/error/tolerance records: 176
  • missing / extra / duplicate / identity-mismatched rows: 0 / 0 / 0 / 0
  • metrics: 16 unique expected component groups

Stress Reference Status

  • Abaqus stress reference comparison: N/A
  • reason: the approved V0 reference contract excludes beam-stress CSV comparison and substitutes analytical/unit plus HDF5 schema evidence
  • mandatory solver stress output: pass
  • direct evidence: stress_s11 exists with the exact compound schema, exact unit/coordinate/location attributes, two Gauss rows for each of ten elements, finite S11, and deterministic element/Gauss ordering

No stress reference row was synthesized, and mandatory HDF5 stress was not treated as optional.

Physics Evidence Handoff

The comparator serialized the following evidence for independent Step 27 review:

evidence value
free residual norm 9.356339321107032e-7
applied force [0, 0, -1000000]
reaction force [0, 0, 999999.9999998808]
applied moment about origin [0, 10000000, 0]
reaction moment about origin [0, -9999999.999997258, 0]
endpoint consistency passed=true

These values are handed off as evidence only. This Step does not interpret them as a physics-sanity verdict.

Failure Classification

  • classification: N/A
  • primary_failure: N/A
  • evidence: artifact precheck passed; exact comparison CTest passed twice; 176/176 rows and 16/16 metric groups passed; no schema, identity, unit, coordinate, nonfinite, missing/extra, or tolerance failure was found
  • correction_handoff: N/A

Handoff Recommendation

target_agent reason required input
Physics Evaluation Agent All required reference comparisons passed the exact approved tolerance. This report, authoritative build-local results.h5, deterministic comparison.json, and its physics_evidence.

The handoff status is pass-for-physics-evaluation only. Physics sanity remains responsible for global force/moment equilibrium, reaction sign, displacement direction, symmetry, section-force consistency, residual interpretation, and model-coverage adequacy.

No-Change Assertion

  • source_files_modified: false
  • test_files_modified: false
  • cmake_files_modified: false
  • requirements_modified: false
  • formulations_modified: false
  • io_contract_modified: false
  • reference_model_contract_modified: false
  • reference_artifacts_modified: false
  • tolerance_policies_modified: false
  • Abaqus_or_other_reference_solver_executed: false
  • owned_report_created: true
  • phase_index_step26_modified: true
  • generated_build_local_evidence: true, ignored under .harness/build/
  • notes: comparison and HDF5 inspection were read-only with respect to the approved reference bundle; pre/post hashes, Git diff, and Git status agree

Open Issues

  • Non-blocking acceptance-text mismatch: Step 26's sample PowerShell reads a nonexistent string status; authoritative TASK-24 code/tests/JSON use boolean passed=true. No upstream file was changed in this independent gate.
  • Non-blocking evidence typo: the Step 25 build/test report prints the input SHA-256 without the second DB after ...1DB; the fresh 64-character pre/post value in this report matches the unchanged working-tree file. Reference Git diff/status and the end-to-end reference snapshot check are clean.
  • No issue blocks Physics Evaluation.