# 3D Euler–Bernoulli Beam 검증과 한계 본 문서는 당시 revision의 검증·판정 기록이다. 본문에 남긴 원본 보고서 이름과 SHA-256은 통합 전 자료의 식별자이며 정리된 현재 파일의 byte hash를 뜻하지 않는다. 원문은 Git `858e87b`의 해당 기능 폴더에서 확인할 수 있다. 현재 진입점과 대응 기록은 [README](README.md)를 따른다. 아래 날짜·revision·명령·수치는 당시 실제 실행 기록이다. 문서 정리에서 solver를 다시 실행하지 않았다. 현재 계약은 [요구사항](requirements.md), [정식화](formulation.md), [I/O](io.md), [공통 tolerance](../TOLERANCE.md)를 따른다. [과거 release 판정](release.md)의 재검증 경계도 유지한다. ## Linear Static 3D Euler Beam Build/Test Report ### Metadata - feature_id: `linear-static-3d-euler-beam` - source_commit: `400db191ce9f766ca6b34e5b609eaa13c54ccfa3` - source_implementation_report: `docs/linear-static-3d-euler-beam/lessons.md` - source_implementation_plan: `docs/linear-static-3d-euler-beam/README.md` - status: `pass-for-reference-verification` - date: `2026-08-09` - evidence_window: `2026-08-09T23:16:20.8670416+09:00` through `2026-08-09T23:20:15.7264584+09:00` ### Verdict Fresh Visual Studio 18 2026/MSVC x64 Debug configuration, a clean full rebuild, the exact Step 25 configure/build commands, nonzero JSON discovery, the feature-label CTest run, and the full CTest run all passed. CTest discovered the expected 83 tests and both executed suites passed 83/83. The clean rebuild emitted no compiler or linker warning line, and generated FESA product projects retain Level 4 plus warnings-as-errors. The build/test gate therefore passes for handoff to Step 26 Reference Verification. This verdict does not approve reference tolerance, physics sanity, or release readiness. ### Execution Environment - os: `Microsoft Windows 11 Home 10.0.26200 build 26200; 64-bit` - source_head: `400db191ce9f766ca6b34e5b609eaa13c54ccfa3` - generator: `Visual Studio 18 2026` - Visual Studio: `Community 18.8.2` (`18.8.12023.21`) - MSBuild: `18.8.2+ce25c0108` - compiler: `MSVC 19.51.36252.0` - compiler_architecture: `x64` - Windows SDK: `10.0.26100.0` - language: `C++17`, required, extensions disabled - config: `Debug` - build_dir: `.harness/build` - harness_config: absent; repository auto-CMake defaults plus Step 25 explicit cache values - project_selection: auto CMake from root `CMakeLists.txt` - command_discovery_path: default CMake/MSVC x64 Debug with explicit local dependency paths - CMake / CTest: `4.4.0 / 4.4.0` #### Dependency Revisions | dependency | resolved revision or version | evidence | | --- | --- | --- | | GoogleTest | `04ee1b4f2aefdffb0135d7cf2a2c519fe50dabe4` | clean `C:/git/googletest` checkout HEAD | | Intel oneMKL | `2026.1.0` | `MKLConfigVersion.cmake`; configure reported `MKL_VERSION: 2026.1.0`, dynamic ILP64, Intel threading | | Intel oneTBB | `2023.1.0` | `TBBConfigVersion.cmake` from the configured `2023.1` package | | HDF5 | `2.1.1` | `hdf5-config-version.cmake` from the configured `2.1.1` package | ### Freshness and Configuration Resolution The ignored generated build tree already existed. Fresh evidence was obtained without reusing its cache or products by running CMake `--fresh` with the generator explicitly fixed to Visual Studio 18 2026, then running the generated `clean` target before the full build. The literal no-`--fresh`, no-`-G` configure command from Step 25 was then run against that resolved VS18 cache and followed by the literal build, discovery, feature-label, and full-test commands. Post-configure metadata recorded: - `CMAKE_GENERATOR=Visual Studio 18 2026` - `CMAKE_GENERATOR_PLATFORM=x64` - `CMAKE_CXX_COMPILER_ID=MSVC` - `CMAKE_CXX_COMPILER_VERSION=19.51.36252.0` - `CMAKE_CXX_COMPILER_ARCHITECTURE_ID=x64` ### Command Log Summary | order | command | start / end | exit code | duration | verdict and stdout/stderr tail | | ---: | --- | --- | ---: | ---: | --- | | 1 | `cmake --fresh -S . -B .harness/build -G "Visual Studio 18 2026" -A x64 -DFESA_GTEST_SOURCE_DIR=C:/git/googletest "-DMKL_DIR=C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl" "-DTBB_DIR=C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb" "-DHDF5_DIR=C:/Program Files/HDF_Group/HDF5/2.1.1/cmake"` | `23:16:20.867+09:00` / `23:16:27.706+09:00` | 0 | `6.836 s` | pass; MKL 2026.1.0 and required runtime libraries resolved; `Configuring done`, `Generating done`, build files written to `.harness/build` | | 2 | `cmake --build .harness/build --config Debug --target clean` | `23:16:37.194+09:00` / `23:16:37.914+09:00` | 0 | `0.716 s` | pass; generated VS18 clean target completed | | 3 | `cmake --build .harness/build --config Debug` | `23:16:47.054+09:00` / `23:18:01.769+09:00` | 0 | `74.713 s` | pass; clean compile/link produced `fesa.exe` and all three test executables; warning scan count `0` | | 4 | `cmake -S . -B .harness/build -A x64 -DFESA_GTEST_SOURCE_DIR=C:/git/googletest "-DMKL_DIR=C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl" "-DTBB_DIR=C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb" "-DHDF5_DIR=C:/Program Files/HDF_Group/HDF5/2.1.1/cmake"` | `23:19:10.210+09:00` / `23:19:10.861+09:00` | 0 | `0.649 s` | pass; exact Step 25 command selected Windows SDK 10.0.26100.0, retained VS18/x64, and completed configure/generate | | 5 | `cmake --build .harness/build --config Debug` | `23:19:25.404+09:00` / `23:19:28.969+09:00` | 0 | `3.562 s` | pass; exact Step 25 build confirmed `fesa_solver`, `fesa.exe`, and all test executables; warning scan count `0` | | 6 | `ctest --test-dir .harness/build -C Debug --show-only=json-v1` | `23:19:45.728+09:00` / `23:19:45.798+09:00` | 0 | `0.065 s` | pass; JSON kind `ctestInfo` version 1.0; 83 tests; every test has the feature label | | 7 | `ctest --test-dir .harness/build -C Debug -L linear-static-3d-euler-beam --output-on-failure` | `23:20:00.199+09:00` / `23:20:04.163+09:00` | 0 | `3.961 s` | pass; `100% tests passed out of 83`; real test time `3.92 s` | | 8 | `ctest --test-dir .harness/build -C Debug --output-on-failure` | `23:20:11.899+09:00` / `23:20:15.726+09:00` | 0 | `3.825 s` | pass; `100% tests passed out of 83`; real test time `3.79 s` | An initial post-clean discovery/feature/full smoke was also run before the literal configure replay: discovery exit 0 in `0.068 s` with 83 tests, feature-label CTest exit 0 in `4.244 s` with 83/83, and full CTest exit 0 in `4.011 s` with 83/83. Rows 4 through 8 are the final canonical Step 25 acceptance chain. ### Validation Results | validation_stage | result | evidence | | --- | --- | --- | | harness self-test | skipped | No Harness Python, Hook, or agent-config file is part of HEAD `400db19` verification scope. | | fresh configure | pass | Explicit VS18/x64 `--fresh` configure exit 0, followed by clean target exit 0. | | exact configure | pass | Literal Step 25 configure exit 0; generated metadata is MSVC/x64. | | clean full build | pass | Exit 0 after clean; all source and test translation units compiled and linked. | | exact build | pass | Exit 0; product and three test executables confirmed. | | compiler/warning policy | pass | `fesa_solver` and `fesa_cli` generated projects have `Level4` and `TreatWarningAsError=true`; clean and exact build scans found zero warning lines. | | CTest discovery | pass | Exit 0; 83 tests, greater than zero and equal to the expected inventory. | | feature-specific tests | pass | Label `linear-static-3d-euler-beam`: 83/83 passed. | | full CTest | pass | 83/83 passed with zero failed tests. | | reference immutability | pass | Pre/post `git diff --exit-code -- reference/` exit 0, status empty, and four exact SHA-256 values unchanged. | | source worktree before report | pass | `git status --short` empty at HEAD `400db19`. | ### CTest Inventory #### Label Inventory | label | count | | --- | ---: | | `linear-static-3d-euler-beam` | 83 | | `unit` | 73 | | `integration` | 5 | | `reference` | 5 | #### Suite Inventory and Step Trace | implementation Step | CTest suite or suites | count | cumulative count | Step 7-24 report evidence audit | | ---: | --- | ---: | ---: | --- | | 7 | `BuildInfo` | 2 | 2 | pass | | 8 | `CoreDiagnostics` | 3 | 5 | pass | | 9 | `DenseMath` | 2 | 7 | pass | | 10 | `DomainModel` | 3 | 10 | pass | | 11 | `InpSyntax` | 4 | 14 | pass | | 12 | `InpDomainMapping` | 5 | 19 | pass | | 13 | `AnalysisModel` | 3 | 22 | pass | | 14 | `DofManager` | 4 | 26 | pass | | 15 | `AnalysisState` | 3 | 29 | pass | | 16 | `EulerBeam3D` | 10 | 39 | pass | | 17 | `ParallelFor` | 3 | 42 | pass | | 18 | `SparseAssembly` | 5 | 47 | pass | | 19 | `EssentialConstraints` | 4 | 51 | pass | | 20 | `MklPardisoSolver` | 6 | 57 | pass | | 21 | `LoadAssembly` | 5 | 62 | pass | | 22 | `ResultRecovery` | 6 | 68 | pass | | 23 | `Hdf5ResultsWriter` | 5 | 73 | pass | | 24 | `LinearStaticCli` (5), `ReferenceComparisonContract` (4), `B33ReferenceComparison` (1) | 10 | 83 | pass | The JSON inventory contains every exact test name registered by GoogleTest discovery. No duplicate CTest name was observed; the label partition is exactly 73 unit + 5 integration + 5 reference = 83. ### Step 7-24 Implementation Evidence Audit The cumulative implementation report was checked block-by-block against the implementation plan and the phase index summaries. All 18 Step blocks are present and each records: - its matching `TASK-07` through `TASK-24`, `status: completed`, changed files, requirement IDs, and test IDs; - at least one implementation-owned nonzero RED command with the expected missing API or named behavioral failure; - a zero-exit GREEN build/test for the Step's targeted CTest suite; - zero-exit MSVC x64 configure/build, nonzero JSON discovery, and zero-failure full CTest; - `/W4 /WX` or equivalent generated warning-policy evidence and reference-tree immutability evidence. Step 20 and Step 22 additionally retain valid behavioral RED/GREEN correction evidence. Step 23 records its environment link incident separately from the valid missing-API RED, so the environment incident was not counted as TDD evidence. The cumulative counts in the implementation report and the Step 7-24 phase summaries progress exactly to the freshly discovered 83-test inventory above. The implementation report's cumulative header still says `in-progress`; the audited step-local evidence contract and phase index nevertheless mark every implementation Step 7-24 `completed`. This stale aggregate header is not a missing Step block, missing test, or failed build/test gate and was not modified by the independent executor. ### `/W4 /WX` and Warning Audit - `src/fesa/CMakeLists.txt` applies `/W4 /WX` privately to `fesa_solver` and `fesa_cli`. - Generated `fesa_solver.vcxproj` and `fesa_cli.vcxproj` contain `Level4` and `true` for Debug and the other generated configurations. - The clean 74.713-second build recompiled the product and all test translation units; its compiler/linker warning scan found `0` lines. - The exact post-configure build also exited 0 and found `0` warning lines. Result: no product warning was emitted, and any MSVC product warning would have failed the build under `/WX`. ### Reference Read-Only Audit The following SHA-256 values were identical before and after all configure/build/test commands, while both reference diff checks exited 0 and both reference status checks were empty: | exact approved legacy path | SHA-256 | | --- | --- | | `reference/cantilever beam/cantilever beam.inp` | `E406EA9560321B791DB829E03BD24593B9875E0195D35B86BD931EDA122EF3` | | `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` | ### Failure Classification - classification: `N/A` - primary_failure: `N/A` - first_failed_command: `N/A` - evidence_tail: All required configure, build, discovery, feature-label, and full-test commands exited 0; no failed test exists. - correction_handoff: `N/A`; no implementation-owned, environment, harness, or upstream-contract failure requires correction. ### Failed Test Inventory None. Feature-label CTest and full CTest both passed 83/83. ### Handoff Recommendation | target_agent | reason | required_input | | --- | --- | --- | | Reference Verification Agent | Step 25 build/test gate is `pass-for-reference-verification`. | This report, HEAD `400db19`, `.harness/build/tests/Debug/fesa_reference_tests.exe`, and the unchanged exact legacy bundle. | The build-local Step 24 evidence exists at `.harness/build/reference/cantilever-beam-b33/results.h5` and `.harness/build/reference/cantilever-beam-b33/comparison.json`; the JSON is 128,118 bytes with SHA-256 `258347AEA791D981AEA9B2BCAD85DE5344D4859ECA3692DC5E7AA01A848F8E0D`. Step 26 must independently rerun and inspect the approved comparison evidence. Its presence and CTest success here are not a reference-verification verdict. ### Open Issues - None blocking Reference Verification. - The implementation report aggregate `in-progress` header is noted above but does not contradict its 18 completed Step blocks, the phase index, or the fresh build/test result. ## 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/linear-static-3d-euler-beam/verification.md` - source_reference_models: `docs/linear-static-3d-euler-beam/reference-model.md` - source_io_definition: `docs/linear-static-3d-euler-beam/io.md` - source_implementation_plan: `docs/linear-static-3d-euler-beam/README.md` - source_implementation_report: `docs/linear-static-3d-euler-beam/lessons.md` - historical_status: `pass-for-physics-evaluation` - current_status: `pass-for-physics-evaluation` - superseded_on: `2026-08-18` - revalidated_on: `2026-08-18` - date: `2026-08-09` - review_fix_date: `2026-08-10` The 2026-08-09 evidence below is preserved as a historical record of the former 11-station, component-scale comparison. ADR-022 and the regenerated 20-row element-endpoint CSV supersede that identity and tolerance. 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 B33 reference test generated `.harness/build/reference/cantilever-beam-b33/comparison.json` from the exact read-only reference paths. - exact canonical rows: 212 = 66 displacement + 66 reaction + 80 direct element-endpoint section-resultant rows - exact families: 6; all row gates and family RMS gates passed - direct section identity: 20 endpoint rows, 10 B33 elements x 2 connectivity-matched endpoints - warnings, identity/schema/nonfinite failures: 0 - overall verdict: `passed=true` | family | rows | scale | near-zero rows | max absolute error | scale-relative RMS | | --- | ---: | ---: | ---: | ---: | ---: | | translation `UX/UY/UZ` | 33 | `1.90476272e-2` | 23 | `5.333229170789711e-10` | `8.459623217000381e-9` | | rotation `URX/URY/URZ` | 33 | `2.85714399e-3` | 23 | `1.000013943180944e-10` | `1.1723557271997219e-8` | | reaction force `RF1/RF2/RF3` | 33 | `1.0e6` | 32 | `8.195638656616211e-7` | `2.0922817757699256e-13` | | reaction moment `RM1/RM2/RM3` | 33 | `1.0e7` | 32 | `5.0514936447143555e-6` | `8.811160558471221e-14` | | section force `N` | 20 | `0` | 20 | `0` | `0` | | section moment `T/My/Mz` | 60 | `1.0e7` | 41 | `1.2499958951957524e-1` | `2.2910664449287597e-9` | 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 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` is absent-allowed under project-wide policy, while `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. | | optional metadata | `reference/cantilever beam/metadata.json` | absent-allowed | Approved design, ADR-010, I/O definition, and reference-model contract supply provenance; absence is not a missing artifact. | | 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 authoritative TASK-24 `ComparisonReport`, test contract, serialized JSON, and Step 26 acceptance probe all define the verdict as the boolean `passed`. Final review reproduced that the former `$metrics.status` sample failed against the valid artifact, corrected the phase probe to `$metrics.passed -eq $true`, and reran the exact acceptance chain successfully. The generated JSON has `passed=true`. ### Execution Evidence The exact command was run twice after the artifact precheck: ```powershell 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. ### Open Issues - 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. - Resolved final-review finding: the Step 26 acceptance probe now reads the authoritative boolean `passed`, and its exact command passes on the current artifact. - No issue blocks Physics Evaluation. ## Linear Static 3D Euler Beam Physics Evaluation Report ### Metadata - feature_id: `linear-static-3d-euler-beam` - model_id: `cantilever-beam-b33` - evaluated_head: `d76d052456ec134a98bcd5aa3b3c18a6b0ad6ba4` - source_reference_verification_report: `docs/linear-static-3d-euler-beam/verification.md` - source_reference_model: `docs/linear-static-3d-euler-beam/reference-model.md` - source_requirement: `docs/linear-static-3d-euler-beam/requirements.md` - source_formulation: `docs/linear-static-3d-euler-beam/formulation.md` - source_numerical_review: `docs/linear-static-3d-euler-beam/numerical-review.md` - source_io_definition: `docs/linear-static-3d-euler-beam/io.md` - status: `pass-for-release-agent` - date: `2026-08-09` This verdict means that the documented physical checks pass and the Release Agent may audit release readiness. It does not approve release readiness and does not re-evaluate the Step 26 reference tolerance decision. ### Input Evidence The reference-verification prerequisite has status `pass-for-physics-evaluation`. Its checked artifact identity was reproduced before the physics checks and again after the targeted CTest. | evidence | exact path or identity | status | notes | | --- | --- | --- | --- | | reference verification | `docs/linear-static-3d-euler-beam/verification.md` | pass-for-physics-evaluation | Required gate satisfied. | | solver HDF5 | `.harness/build/reference/cantilever-beam-b33/results.h5` | present and readable | 25,336 bytes; post-acceptance-run SHA-256 `13ECCF68262C14BBDE0F63667C0F10896ACD40EFEC56E8C9121C298333FD9B6D`. | | comparison evidence | `.harness/build/reference/cantilever-beam-b33/comparison.json` | present and passing | 128,118 bytes; SHA-256 `258347AEA791D981AEA9B2BCAD85DE5344D4859ECA3692DC5E7AA01A848F8E0D`; `passed=true`, 176 rows, 16 metrics. | | reference input | `reference/cantilever beam/cantilever beam.inp` | exact read-only artifact | SHA-256 `E406EA9560321B791DB829E03BD24593B9875E0195D35B86BD931EDA122EF3`; `TYPE=B33`. | | reference displacement | `reference/cantilever beam/cantilever beam displacements.csv` | exact read-only artifact | SHA-256 `7B3312FBC8848E81D9A0FD4FF2B56BC1954636A2C14B5C1CBB269CB9477D3C31`. | | reference reaction | `reference/cantilever beam/cantilever beam reactions.csv` | exact read-only artifact | SHA-256 `BF30CDB0CD50106885DE14D63492737736C587426EBD787DE4F7EE6AA86DAA23`. | | reference elemental force | `reference/cantilever beam/cantilever beam elemental forces.csv` | exact read-only artifact | SHA-256 `E5E77FEC0FA9482AE018DBF296E74D396335C7C711BD2E9AA2315247A34290BA`. | | solver CSV views | N/A | not used | No derived FESA CSV was generated or used. | | stress reference CSV | N/A by approved contract | not applicable | `S11` is evaluated from HDF5 schema, formulation, and analytical/unit evidence only. | | targeted physics tests | `.harness/build`, MSVC x64 Debug | pass | Exact Step 27 CTest passed 17/17: EulerBeam3D 10, ResultRecovery 6, B33ReferenceComparison 1. | Read-only HDF5 inspection confirmed schema `0`, solver `0.1.0`, feature identity, `Step-1` frame `0`, formulation `B33-3D-Euler-Bernoulli`, source content identity `fnv1a64:04543464cc970405`, and coordinate convention `global-cartesian; beam-local=(t,n1,t-cross-n1)`. The file contains 11 nodes at `(x,y,z)=(0..10,0,0)` m and 10 consecutive one-metre elements. Every element has identity local axes, so local `(x,y,z)` equals global `(X,Y,Z)` for this model. The documented physical model is a 10 m cantilever with node 1 fixed in all six DOFs and a free-end global/local `FZ=-1.0e6 N` at node 11. The section and material are SI: `E=2.1e11 Pa`, `Iy=I11=0.0833333 m^4`, and the only expected deformation mode is local-`z` translation with bending about local `y`. ### Physics Checks All normalized physics criteria below come from the approved `1e-10` residual/equilibrium, `1e-12` matrix/transform/end-sign, or `1e-9` analytical contracts. They are independent checks of physical meaning, not a second application of the Abaqus row tolerance. #### 1. global equilibrium In global Cartesian coordinates, force equilibrium is `r_F = sum(F_applied) + sum(R)`, with criterion `||r_F|| / max(||sum(F_applied)||, ||sum(R)||) <= 1e-10`. The comparison physics evidence records `sum(F_applied)=[0,0,-1000000] N` and `sum(R)=[0,0,999999.9999998808] N`. Therefore `r_F=[0,0,-1.1920928955078125e-7] N`, its norm is `1.1920928955078125e-7 N`, and the normalized value is `1.1920928955078125e-13`. Verdict: **pass**. Moment equilibrium about the global origin is `r_M = sum(M_applied) + sum(X cross F_applied) + sum(M_reaction) + sum(X cross R_force)`. The free-end force gives `[0,1.0e7,0] N*m`; the complete HDF5 reaction field gives `[0,-9999999.999997258,0] N*m`. Thus `r_M=[0,2.7418136596679688e-6,0] N*m`, with normalized norm `2.7418136596679688e-13` against `1.0e7 N*m`. Verdict: **pass**. #### 2. reaction consistency and true free residual The constrained reaction contract is `R_c=(K*d-F)_c`. At fixed node 1 the observed global row is `[RF1,RF2,RF3,RM1,RM2,RM3] = [0,0,1000000.0000008196,0,-10000000.000005051,0]` in `[N,N,N,N*m,N*m,N*m]`. It opposes the applied `-Z` force and balances its positive origin moment. Differences from the physical closed-form reactions are `8.195638656616211e-7 N` and `5.0514936447143555e-6 N*m`, normalized to `8.195638656616211e-13` and `5.0514936447143555e-13`. Verdict: **pass**. The reaction dataset intentionally preserves free residuals. The implementation uses `rho_f = ||(K*d-F)_f||_2 / max(||K*d||_f, ||F||_f)` with no artificial unit floor. The serialized true free residual norm is `9.356339321107032e-7 N-equivalent`; the physical free scale is `1.0e6 N`, so `rho_f=9.356339321107032e-13 <= 1e-10`. The largest observed free force-residual component is `5.9604644775390625e-7 N`, and the largest free moment-residual component is `2.0861625671386719e-7 N*m`. Verdict: **pass**. #### 3. displacement direction and rotation sign For free-end local `Pz=-1.0e6 N`, the documented Euler-Bernoulli solution is `w(L)=Pz*L^3/(3*E*Iy)`, `theta_y(L)=-Pz*L^2/(2*E*Iy)`. The expected values are `-0.0190476266666697 m` and `+0.00285714400000046 rad`. HDF5 gives tip `UZ=-0.019047626666677083 m` and `URY=+0.0028571440000013902 rad`, with relative errors `3.87e-13` and `3.27e-13`, below the analytical `1e-9` criterion. All non-root `UZ` values are negative and monotonically increase in magnitude toward the loaded tip; all non-root `URY` values are positive, as required by `theta_y=-dw/dx`. Verdict: **pass**. #### 4. expected zero and uncoupled symmetry The fixed-root displacement row is exactly zero in all six components. Across all nodes, `UX`, `UY`, `URX`, and `URZ` are exactly zero. The only nonzero kinematic components are `UZ` and `URY`, and the only physical constrained reactions are `RF3` and `RM2`. In the element recovery, `epsilon0`, `kappa_x`, and `kappa_z`, and the corresponding `N`, `T`, and `Mz`, are exactly zero. This is the documented uncoupled local-`z` bending symmetry, with no axial, torsional, or cross-plane leakage. Verdict: **pass**. #### 5. element force, adjacent endpoints, and boundary balance The HDF5 `end_force_local` rows are outward endpoint actions in `[FX,FY,FZ,MX,MY,MZ]`; `section_resultant` rows are positive-local-`x` section cuts in `[N,T,My,Mz]`. With no distributed load, `F_X=n*N`, `M_X=n*T`, `M_Y=n*My`, `M_Z=n*Mz`, `F_Y=-n*dMz/dx`, and `F_Z=n*dMy/dx`, where `n=-1` at `xi=-1` and `n=+1` at `xi=+1`. Observed section `My` is positive and decreases linearly from `10000000.000005048 N*m` at the root to `2.4286118949223834e-7 N*m` at the free end. The maximum positive-face `My` mismatch between adjacent unloaded endpoints is `2.73110345005989e-7 N*m`, normalized to `2.73110345005989e-14` against the model moment scale. The comparison ledger independently records `endpoint_consistency_passed=true` without averaging. Adjacent outward actions cancel. The maximum interior `FZ_right+FZ_left` magnitude is `5.364418029785156e-7 N` (`5.364418029785156e-13` normalized); the maximum interior `MY_right+MY_left` magnitude is `2.682209014892578e-7 N*m` (`2.682209014892578e-14` normalized). Both satisfy the documented end-sign/residual criteria. At the root, the first element action is exactly the constrained reaction evidence: `FZ=+1000000.0000008196 N`, `MY=-10000000.000005051 N*m`. At the free boundary, the last element has `FZ=-999999.9999998808 N` and `MY=-5.9604644775390625e-8 N*m`, balancing the applied end force and the zero applied end moment to normalized residual scale. Verdict: **pass**. #### 6. local/global mapping and section-force signs Every stored local-axis matrix is the identity. Therefore the global `-Z` load is local `Pz=-1.0e6 N`, `UZ=w<0`, `URY=theta_y>0`, and the positive-face section resultant is `My=-Pz*(L-x)>0`. The observed outward signs are `FZ>0, MY<0` at left endpoints and `FZ<0, MY>0` at right endpoints, except for the physically zero free-end moment residue. These values satisfy the documented `theta_y=-w'`, `My=-E*Iy*w''`, outward-normal, and positive-face-section-cut conventions. Verdict: **pass**. #### 7. stress location, unit, and sign sanity The stress contract is `S11(xi,y,z)=E*(epsilon0 + z*kappa_y - y*kappa_z)`, where `x1=y`, `x2=z`, the coordinate system is beam local, the unit is `force/length^2`, and the location is a section point at each of two Gauss points. The reference input has no section points, so HDF5 correctly contains 20 ordered `fesa-default` centroid rows `(x1,x2)=(0,0)`, one at each Gauss point of ten elements. This model has pure bending with `epsilon0=0`; consequently all 20 observed centroid `S11` values are exactly `0 Pa`. Nonzero location/sign evidence comes only from the approved analytical/unit portfolio, not from an Abaqus stress comparison. `EulerBeam3D.RecoversSectionPointAndDefaultCentroidS11` passed with `epsilon0=0.01`, `kappa_y=0.02 1/m`, `kappa_z=-0.03 1/m`, `E=2.1e11 Pa`: the formula gives `1.575e9 Pa` at `(y,z)=(0.25,-0.5)`, `8.4e8 Pa` at `(-0.4,0.3)`, and `2.1e9 Pa` at the default centroid. The test enforces the formula at both Gauss points with normalized `1e-12` evidence. Abaqus beam stress comparison remains explicitly N/A. Verdict: **pass**. #### 8. nonfinite, rigid-body, abnormal-magnitude, and energy symptoms All mandatory numeric HDF5 rows inspected here are finite; `comparison.json` also records no nonfinite row among the 176 compared rows and the 20 stress rows are finite. The fixed root is exactly zero, factorization/solution completed, the normalized free residual is `9.36e-13`, and the displacement field is smooth, so there is no rigid-body-mode symptom. For this one-load linear case, the recoverable strain energy is `U=0.5*F^T*d=9523.81333333854 N*m`, which is finite and positive. The ratios `|UZ_tip|/L=0.00190476266666771` and `|URY_tip|=0.00285714400000139 rad` agree with the analytical solution and show no abnormal magnitude relative to the documented small-displacement/rotation model. The targeted rank/energy test also passed the six-rigid-mode, rank-six, and positive deformation-energy checks. Verdict: **pass**. #### 9. model coverage The approved B33 bundle is one identity-axis local-`z` bending cantilever. It directly covers the end-to-end parser/solver/HDF5 path, global equilibrium, reaction sign, `UZ/URY`, `My/FZ`, endpoint continuity, and the centroid stress fallback. It does not by itself cover axial, torsion, local-`y` bending, rotated space, nonzero fiber stress, prescribed displacement, or the formulation-only line-load kernel. The targeted analytical/unit portfolio supplies the documented complementary coverage: | coverage | targeted passing evidence | criterion | | --- | --- | --- | | axial, torsion, both bending planes | `EulerBeam3D.AnalyticalAxialTorsionAndTwoPlaneBendingRecover` and `ResultRecovery.MatchesAxialTorsionAndTwoPlaneEndSigns` | analytical relative `1e-9`; signed recovery contract | | rotated local/global mapping | `EulerBeam3D.RotatedTransformPreservesWorkAndEnergy` | transform/work/energy normalized `1e-12` | | constant local line-load kernel | `EulerBeam3D.ConstantLineLoadMatchesAllSignedComponents` | all 12 signed components normalized `1e-12`; `*DLOAD` remains outside CLI scope | | rigid modes, rank, and energy | `EulerBeam3D.HasSixRigidModesRankSixAndPositiveDeformationEnergy` | rigid residual `1e-10`, rank six, positive deformation energy | | prescribed displacement and residual | `ResultRecovery.ComputesResidualReactionForNonzeroPrescription`, `ResultRecovery.EnforcesNormalizedFreeResidual` | partition/reaction and normalized residual `1e-10` | | result identity and continuity | `ResultRecovery.KeepsEndActionSectionAndGaussResultsDistinct`, `ResultRecovery.RequiresInteriorEndpointConsistencyWithoutAveraging` | distinct locations and no-average consistency | | S11 location/sign/default | `EulerBeam3D.RecoversSectionPointAndDefaultCentroidS11`, `ResultRecovery.OrdersStressPointsAndDefaultCentroid` | formula/schema normalized `1e-12` | The exact acceptance command passed all 17 selected tests. The single reference model plus this analytical portfolio covers every documented physical expectation without attributing unsupported coverage to the legacy CSV bundle. Verdict: **pass**. ### Failure Classification - classification: `N/A` - primary_failure: `N/A` - evidence: all documented physics checks passed; no equilibrium, reaction, displacement, symmetry, element-force, stress-location, rigid-body, nonfinite, coverage, contract, or environment failure was found - correction_handoff: `N/A` ### Evaluation Verdict - verdict: `pass-for-release-agent` - reason: the exact reference gate and artifact identity are valid; force and origin-moment equilibrium, constrained reaction consistency, true free residual, deformation signs, expected zeros, element force balance, local/global and section-force signs, S11 schema/analytical sanity, finite/energy/mode checks, and complementary model coverage all satisfy their documented criteria - release_approval: `not granted by this report` ### Handoff Recommendation | target_agent | reason | required_input | | --- | --- | --- | | Release Agent | All documented physical checks passed. | This report, the Step 26 reference-verification report, exact build-local HDF5/comparison identities, targeted CTest evidence, and the limitations below. | ### Open Issues - Non-blocking coverage limitation: the approved Abaqus bundle is one identity-axis local-`z` bending cantilever. Axial, torsion, local-`y`, rotated, prescribed-displacement, line-load, and nonzero stress checks rely on the approved analytical/unit portfolio; no broader Abaqus reference coverage is claimed. - Non-blocking stress limitation: the B33 bundle has no section points, so its physical `S11` evidence is the correct zero centroid result. Nonzero fiber location/sign evidence is analytical; Abaqus beam stress comparison remains N/A. - Non-blocking output limitation: HDF5 has no strain-energy dataset by contract. The positive energy value in this report is calculated from `0.5*F^T*d` and is supported by the rank/energy unit test. - Known formulation limitations remain: Euler-Bernoulli deep-beam applicability, transverse and torsional shear stress, warping, `I12!=0`, B31/Timoshenko behavior, and CLI `*DLOAD` are outside V0. - No open issue blocks Release Agent review.