docs: group solver evidence by feature

This commit is contained in:
KOKO\Mimi
2026-08-15 02:18:26 +09:00
parent aa5d271a2e
commit 8b42e7883b
38 changed files with 83 additions and 1903 deletions
@@ -0,0 +1,238 @@
# Linear Static 3D Euler Beam Build/Test Report
## Metadata
- feature_id: `linear-static-3d-euler-beam`
- source_commit: `400db191ce9f766ca6b34e5b609eaa13c54ccfa3`
- source_implementation_report: `docs/implementation-plans/linear-static-3d-euler-beam-implementation-report.md`
- source_implementation_plan: `docs/implementation-plans/linear-static-3d-euler-beam.md`
- status: `pass-for-reference-verification`
- owner_agent: `build-test-executor-agent`
- 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
`<WarningLevel>Level4</WarningLevel>` and
`<TreatWarningAsError>true</TreatWarningAsError>` 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.
## No-Change Assertion
- source_files_modified: `false`
- test_files_modified: `false`
- cmake_files_modified: `false`
- requirements_or_upstream_contracts_modified: `false`
- reference_artifacts_modified: `false`
- tolerance_policies_modified: `false`
- owned_report_modified: `true`
- phase_index_step25_modified: `true`
- notes: Before report/index creation the worktree was clean at the audited HEAD. Final
scope validation is limited to this report and the Step 25 fields in the phase index.
## 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.
@@ -0,0 +1,41 @@
# Linear Static 3D Euler Beam Coordination Report
## Metadata
- feature_id: linear-static-3d-euler-beam
- status: completed
- owner_agent: coordinator-agent
- date: 2026-08-15
- migration_note: Existing evidence was relocated without rerunning workflow gates.
## Worklist
| stage | owner | status | evidence |
| --- | --- | --- | --- |
| 1. requirements | requirement-agent | passed | `requirements.md` |
| 2. research | research-agent | passed | `research.md` |
| 3. formulation | formulation-agent | passed | `formulation.md` |
| 4. numerical and reference | numerical-review-agent | passed | `numerical-review.md`; `reference-model.md` |
| 5. I/O | io-definition-agent | passed | `io.md` |
| 6. implementation and verification | implementation-planning-agent; implementation-agent | passed | `implementation-plan.md`; `implementation-report.md`; `build-test.md`; `reference-comparison.md` |
| 7. physics | physics-evaluation-agent | passed | `physics-evaluation.md` |
| 8. release | release-agent | passed | `release.md` |
## Current Progress
- active_sub_agent: none
- next_handoff: none
- closure_evidence: `release.md` status `ready-for-release`
- workflow_disposition: completed
## Decision Log
| date | decision | evidence | rationale |
| --- | --- | --- | --- |
| 2026-08-15 | Record migrated workflow as completed | `release.md` | Preserve the existing release verdict without retroactive gate execution. |
## Blockers and Rework
- active_blockers: none
- correction_attempt_count: 0
- needs_user_decision: false
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+473
View File
@@ -0,0 +1,473 @@
# Linear Static 3D Euler Beam I/O Definition
## Metadata
- feature_id: `linear-static-3d-euler-beam`
- source_requirement: `docs/requirements/linear-static-3d-euler-beam.md`
- source_formulation: `docs/formulations/3d-isoparametric-euler-beam-formulation.md`
- source_numerical_review: `docs/numerical-reviews/linear-static-3d-euler-beam-review.md`
- source_research: `docs/research/linear-static-3d-euler-beam-research.md`
- approved_design: `docs/superpowers/specs/2026-08-08-linear-static-3d-euler-beam-design.md`
- status: `ready-for-implementation-planning`
- owner_agent: `io-definition-agent`
- date: `2026-08-09`
- authoritative_output: `results.h5`
- reference_baseline: `reference/cantilever beam/` at source commit `2b34d0b`
이 문서는 승인된 V0의 semantic I/O contract만 정의한다. Parser, HDF5 writer,
comparison tooling의 C++ API나 구현 구조는 정의하지 않으며 Abaqus full compatibility를
주장하지 않는다.
## Abaqus Input Scope
- input_format: Abaqus input file (`.inp`)
- supported_analysis: 입력 파일당 하나의 linear-static step과 `TYPE=B33` 2절점 3D
EulerBernoulli beam
- ordinary_unit_system: user-consistent; `.inp`만 보고 SI를 추론하지 않음
- compatibility_disclaimer: 아래 표의 위치, parameter, data grammar만 지원함
`supported`는 해당 행의 정확한 subset만 의미한다. `warning no-op`은 syntax를 소비하고
구조화된 warning을 기록하지만 Domain, AnalysisModel 또는 mandatory HDF5 output을
변경하지 않는다는 뜻이다.
| keyword | status and allowed location | required parameters and data grammar | purpose and semantic mapping | unsupported behavior |
| --- | --- | --- | --- | --- |
| `*HEADING` | supported; optional top-level first keyword | parameters 없음; 다음 keyword 전까지 0개 이상의 text data line | 원문 heading을 source metadata로 보존 | 중첩 위치 또는 parameter는 input error |
| `*PART` / `*END PART` | supported; top-level model block | `NAME=<part-name>` 필수; `*END PART` data 없음 | part-local node, element, set, section 정의 범위 | 닫히지 않음, 중첩 part, duplicate part name은 error |
| `*NODE` | supported; part 내부 | parameter 없음; 각 row `node_label, x, y, z` | positive integer source label과 finite global Cartesian 좌표 | 다른 arity, duplicate label, nonfinite 좌표는 error |
| `*ELEMENT` | supported; part 내부 | `TYPE=B33` 필수; 각 row `element_label, node_1, node_2` | 2절점 straight Euler beam definition | `TYPE=B31``unsupported-element-formulation`; 다른 type/arity와 dangling connectivity는 error |
| `*NSET` | supported; part 또는 assembly 내부 | `NSET=<name>` 필수; optional `GENERATE`; assembly에서는 `INSTANCE=<instance-name>` 필수; explicit row는 하나 이상의 node label, generate row는 `first,last,increment` | part-local 또는 single-instance assembly node set | mixed-instance set, zero/negative increment, duplicate name, dangling member는 error |
| `*ELSET` | supported; part 또는 assembly 내부 | `ELSET=<name>` 필수; optional `GENERATE`; assembly에서는 `INSTANCE=<instance-name>` 필수; explicit/generate grammar는 `*NSET`과 동일 | part-local 또는 single-instance assembly element set | mixed-instance set, invalid range, duplicate name, dangling member는 error |
| `*MATERIAL` | supported; top-level model data | `NAME=<material-name>` 필수; data 없음 | 뒤따르는 단일 isotropic `*ELASTIC`을 소유 | duplicate name, missing/duplicate elasticity, 다른 material model은 error |
| `*ELASTIC` | supported; 현재 material 내부 | parameter 없음; 정확히 한 row `E, nu` | homogeneous isotropic elasticity; `G=E/(2(1+nu))` | extra field/row, nonfinite value 또는 `E<=0`/`G<=0`은 model error |
| `*BEAM GENERAL SECTION` | supported; part 내부 | `ELSET=<name>`, `MATERIAL=<name>`, `SECTION=GENERAL` 필수; 첫 row `A,I11,I12,I22,J`, 둘째 row `n1x,n1y,n1z` | section assignment, properties와 first section axis | 다른 `SECTION`, missing/dangling reference, `I12!=0`, invalid property/guide vector는 error |
| `*SECTION POINTS` | supported; 바로 앞 general beam section에 종속 | parameter 없음; 하나 이상의 row `x1,x2` | 입력 순서의 stress recovery point; `x1=y`, `x2=z` | 선행 section 없음, 다른 arity, nonfinite 또는 duplicate point는 error |
| `*ASSEMBLY` / `*END ASSEMBLY` | supported; 정확히 하나의 top-level assembly block | `NAME=<assembly-name>` 필수; `*END ASSEMBLY` data 없음 | identity instance와 assembly set 범위 | nested/duplicate assembly는 `unsupported-nested-assembly` |
| `*INSTANCE` / `*END INSTANCE` | supported; assembly 내부 | `NAME=<instance-name>`, `PART=<part-name>` 필수; 두 keyword 사이 data 없음 | named identity copy; 같은 part의 여러 identity instance 허용 | translation/rotation data는 `unsupported-instance-transform`; duplicate/dangling instance는 error |
| `*BOUNDARY` | supported; top-level model data 또는 sole step 내부 | parameter 없음; 각 row `target, first_dof, last_dof[, value]`; omitted value는 `0` | sole step의 prescribed displacement | invalid arity/range, unresolved target, conflicting expanded node/DOF value는 error |
| `*CLOAD` | supported; sole step 내부 | parameter 없음; 각 row `target, dof, magnitude` | sole step의 global nodal concentrated load | invalid arity/DOF, nonfinite magnitude 또는 unresolved target은 error |
| `*STEP` / `*END STEP` | supported; exactly one top-level history block | optional `NAME`; optional `NLGEOM=NO`; `*END STEP` data 없음 | canonical result identity `(Step-1, frame 0)` | second step은 `unsupported-multiple-step`; `NLGEOM=YES``unsupported-nonlinear-geometry` |
| `*STATIC` | supported; sole step 내부, exactly once | parameter 없음; exactly one row `initial_increment, time_period, minimum_increment, maximum_increment` | 승인 legacy row를 읽되 V0는 하나의 linear solve와 frame 0만 생성 | missing/extra/nonfinite/nonpositive field 또는 다른 procedure는 error |
| `*PREPRINT` | warning no-op; top-level | 모든 parameter를 보존 후 무시; data 없음 | legacy generator control 수용 | semantic object를 만들지 않음 |
| `*RESTART` | warning no-op; sole step | 모든 parameter를 보존 후 무시; data 없음 | legacy restart request 수용 | restart state를 만들지 않음 |
| `*TRANSVERSE SHEAR STIFFNESS` | warning no-op; beam section context | keyword와 소속 data line을 보존 후 무시 | B33 legacy deck 수용 | Euler formulation/property를 변경하지 않음 |
| `*OUTPUT, FIELD` | warning no-op; sole step | output parameter와 subordinate data를 보존 후 무시 | legacy field request root 수용 | mandatory FESA output을 선택·억제하지 않음 |
| `*OUTPUT, HISTORY` | warning no-op; sole step | output parameter와 subordinate data를 보존 후 무시 | legacy history request root 수용 | history result를 생성하지 않음 |
| `*NODE OUTPUT` | warning no-op; active output request 내부 | 모든 parameter와 다음 keyword 전 variable data를 무시 | legacy nodal variable request 수용 | requested variables로 HDF5 schema를 변경하지 않음 |
| `*ELEMENT OUTPUT` | warning no-op; active output request 내부 | 모든 parameter와 다음 keyword 전 variable data를 무시 | legacy element variable request 수용 | requested variables로 HDF5 schema를 변경하지 않음 |
| `*CONTACT OUTPUT` | warning no-op; active output request 내부 | 모든 parameter와 다음 keyword 전 variable data를 무시 | legacy contact variable request 수용 | contact model/result를 만들지 않음 |
`*DLOAD`, `*INCLUDE` 및 표에 없는 model-affecting keyword는 no-op 대상이 아니며
`unsupported-keyword` input error다. 특히 formulation-only constant local line-load
kernel은 parser나 Domain의 distributed-load 지원을 뜻하지 않는다.
### Nesting grammar
```text
input-file
:= heading? part+ assembly material+ model-boundary* step EOF
part
:= *PART
node-block+ element-block+ (nset | elset)*
general-section+ section-points*
*END PART
assembly
:= *ASSEMBLY
instance+ assembly-set*
*END ASSEMBLY
instance
:= *INSTANCE *END INSTANCE
step
:= *STEP *STATIC step-boundary* cload* allowed-no-op* *END STEP
```
Top-level material과 model boundary는 step 전에만 나타난다. Part는 assembly 전에 모두
닫혀야 하고 assembly 안에는 instance와 assembly-level set만 허용한다. Instance 안의
node/element 재정의, nested assembly, dependent/independent mesh option은 지원하지 않는다.
Sole step의 source `NAME` spelling은 metadata에 보존하지만 V0 HDF5와 comparison의
canonical identity는 항상 `Step-1`, `frame 0`이다.
## Syntax Policy
- keyword line은 첫 non-whitespace character가 `*`이고 `**`가 아니어야 한다.
- comment line은 `**`로 시작하며 의미 모델에서는 제외하되 file과 1-based line 위치를
유지한다.
- keyword, parameter name, enumerated parameter value와 named-reference lookup은 ASCII
case-insensitive다. Part, instance, material, set의 원래 spelling과 numeric label lexeme는
외부 identity를 위해 그대로 보존한다.
- keyword line은 comma-separated `KEY[=VALUE]` fields다. Data line도 comma-separated이며
field 양끝 whitespace를 제거한다. Required empty field, trailing empty optional value,
잘못된 numeric token은 input error다.
- Keyword/data continuation, quoted/multiline name, include file 및 line continuation은 V0에서
지원하지 않는다. 한 logical keyword/data row는 한 physical line에 완결되어야 한다.
- Node/element labels와 explicit set members는 positive base-10 integer다. Internal index로
바꾸어도 raw source label text를 잃지 않는다.
- 모든 numeric value는 finite `double`이어야 한다. `NaN`, positive/negative infinity는
syntax/semantic validation에서 거부한다.
- 각 parsed keyword, parameter, data row와 semantic entity는 `file`, 1-based `line`, raw
`keyword`, raw source label을 추적할 수 있어야 한다.
- Output-request subordinate variable data는 직전의 allowlisted output keyword부터 다음
keyword까지에만 warning no-op이다. 그 밖의 예상되지 않은 data line은 input error다.
### Duplicate and dangling-reference policy
- Part, assembly, instance, material, set 이름은 각 semantic scope의 case-insensitive key로
unique해야 한다. Node/element numeric source label은 part scope에서 unique해야 한다.
- 같은 part의 여러 identity instance는 duplicate가 아니다. 각 copy는 instance name으로
구분되는 별도 source identity를 가진다.
- Element connectivity, set membership, instance `PART`, section `ELSET`/`MATERIAL`, assembly
set `INSTANCE`, boundary/load target은 Domain finalization 전에 모두 resolve되어야 한다.
- Duplicate definition은 `duplicate-entity`; unresolved reference는 `unresolved-reference`
진단하고 partial Domain을 해석에 넘기지 않는다.
## Model Data Mapping
### Stable source identity and instances
Part-local node, element, set은 instance expansion 뒤 다음 identity를 갖는다.
```text
SourceEntityId { instance_name, source_label }
```
`instance_name``source_label`은 원래 spelling을 보존한다. Case-insensitive lookup key와
표시용 raw text는 별개다. Stable Domain internal index는 input declaration order,
instance declaration order, part-local entity declaration order의 결정적 순서로 부여하며
thread count나 hash iteration order에 의존하지 않는다. 같은 part의 두 identity instance는
source label이 같아도 instance name이 다르므로 서로 merge하지 않는다.
Assembly-level `*NSET`/`*ELSET``INSTANCE`는 정확히 하나의 identity instance를
지정하고 data의 label을 그 instance가 참조하는 part-local source label로 resolve한다.
따라서 assembly set member도 `(instance_name, source_label)`로 결정된다. V0는 한 set에
여러 instance의 member를 섞는 grammar를 제공하지 않는다.
### Nodes, elements, sets, material, and section
- Node는 global Cartesian coordinate `[X,Y,Z]`, stable internal node ID와 source identity를
가진다.
- B33 element는 ordered connectivity `[node_1,node_2]`, stable internal element ID,
source identity, general-section assignment를 가진다. Connectivity order가 local tangent
`t=(X2-X1)/L`의 방향을 정한다.
- Explicit set은 data order, generated set은 inclusive `first,last,increment` expansion
order를 보존한다. Membership은 internal ID에 연결되지만 source identity로 round-trip
가능해야 한다.
- Material은 정확한 입력 `E,nu`를 보존하고 `G=E/(2(1+nu))`를 유도한다.
- General section 첫 row는 정확히 `[A,I11,I12,I22,J]`다. V0는 `I12`의 exact numeric
zero만 허용하고 `Iy=I11`, `Iz=I22`로 매핑한다.
- Guide vector `a=n1`을 tangent에 직교 투영·정규화하여 local `y`로, `t x n1`을 local
`z`로 둔다. `(x,y,z)`는 right-handed다.
### Model validation
모든 값은 finite여야 하고 다음 조건을 element calculation 전에 검사한다.
```text
E > 0
G = E / (2 * (1 + nu)) > 0
A > 0, Iy > 0, Iz > 0, J > 0
L > 1e-12 * max(1, norm(X1), norm(X2))
norm(a_perp) > 1e-12 * max(1, norm(a))
```
`a_perp = a - dot(a,t)*t`다. 길이 조건 실패는 `invalid-beam-length`, zero guide vector나
projection 조건 실패는 `invalid-beam-guide-vector`, nonpositive property는
`invalid-beam-property`, `I12!=0``unsupported-coupled-section` model diagnostic이다.
Fallback axis, absolute-value 보정 또는 B31 재해석은 허용하지 않는다.
## History Data Mapping
V0는 하나의 history object, canonical `Step-1`만 만든다. `*STATIC`의 네 legacy field는
각각 `initial_increment`, `time_period`, `minimum_increment`, `maximum_increment`
보존한다. 모두 finite positive여야 하고 `minimum_increment <= maximum_increment`여야
한다. 이 값들은 입력 호환성과 provenance를 위한 값이며 V0가 increment loop나 여러
frame을 생성하게 하지 않는다. 결과는 항상 `(Step-1, frame 0)`이다.
`*BOUNDARY`의 target은 node source label 또는 node set이다. Assembly set은 그
`INSTANCE`를 포함해 source node identity로 확장한다. `first_dof <= last_dof`이고 두 값은
1..6이어야 한다. 생략된 value는 exact zero다. Model-level boundary와 step-level boundary는
sole step에 활성화되며 같은 expanded node/DOF에 서로 다른 value가 생기면 input error다.
`*CLOAD` target resolution은 boundary와 같고 각 row는 해당 target의 모든 node에 global
component load를 적용한다. 같은 node/DOF로 resolve되는 여러 load row는 input order로
결정적으로 합산한다.
| DOF | nodal kinematic component | boundary unit dimension | CLOAD component | load unit dimension |
| ---: | --- | --- | --- | --- |
| 1 | `UX` | length | `FX` | force |
| 2 | `UY` | length | `FY` | force |
| 3 | `UZ` | length | `FZ` | force |
| 4 | `URX` | radian | `MX` | force x length |
| 5 | `URY` | radian | `MY` | force x length |
| 6 | `URZ` | radian | `MZ` | force x length |
Abaqus output request는 history activation이나 output selection으로 매핑하지 않는다.
Allowlisted request의 존재 여부와 무관하게 mandatory HDF5 dataset은 모두 생성된다.
## Internal Model Contract
- Domain은 nodes, B33 elements, sets, material, section, boundary, load와 sole static step의
완전한 semantic definition을 소유하고 mapping 이후 effectively immutable하다.
- AnalysisModel은 sole step에 활성인 Domain IDs/references만 제공하며 Domain object를
복사하지 않는다.
- Node/element는 equation ID를 소유하지 않는다. DOF numbering과 constrained/free mapping은
이 I/O 계약 밖의 DofManager 책임이다.
- Boundary와 load는 expansion 전 target identity와 expansion 후 stable node identity를 모두
추적할 수 있어야 한다.
- Result identity는 source identity와 stable internal identity를 모두 보유해야 하며
parser의 raw keyword string을 solver physics object로 사용하지 않는다.
- Endpoint equilibrium action, endpoint section resultant, Gauss generalized result,
assembled residual reaction은 서로 다른 quantity/location identity다.
## Output HDF5 Schema
Authoritative output은 하나의 HDF5 file `results.h5`, schema version `0`이다. 아래의
`<step-name>`은 V0에서 literal `Step-1`이다. 모든 string은 UTF-8, 모든 물리 실수는
IEEE-754 float64, stable internal ID는 uint64다.
### Metadata and model identity
`/metadata`는 group이며 다음 scalar attributes를 반드시 가진다.
| attribute | required value or meaning |
| --- | --- |
| `schema_version` | `0` |
| `feature_id` | `linear-static-3d-euler-beam` |
| `solver_version` | 실행 solver version string |
| `source_input_identity` | normalized input path와 content identity를 추적 가능한 string |
| `unit_system_label` | ordinary run은 `user-consistent-unspecified` |
| `coordinate_convention` | `global-cartesian; beam-local=(t,n1,t-cross-n1)` |
| `element_formulation` | `B33-3D-Euler-Bernoulli` |
| `step_name` | `Step-1` |
| `frame_index` | integer `0` |
승인 legacy comparison은 `.inp`에서 SI를 추론하지 않는다. Reference Model Contract와
verification report가 model `cantilever-beam-b33`에 외부 `SI` provenance를 적용한다.
| dataset path | shape and dtype | row identity / fields | required attributes and ordering |
| --- | --- | --- | --- |
| `/model/nodes` | `[node_count]` compound | `internal_node_id:uint64`, `instance_name:utf8`, `source_label:utf8`, `coordinates:float64[3]` | internal node ID ascending; `coordinate_system=global-cartesian`, `units_label=length` |
| `/model/elements` | `[element_count]` compound | `internal_element_id:uint64`, `instance_name:utf8`, `source_label:utf8`, `node_internal_ids:uint64[2]`, `local_axes:float64[3,3]` | internal element ID ascending; axes row order `[x,y,z]`, `formulation=B33-3D-Euler-Bernoulli` |
### Step/frame result datasets
| quantity | exact dataset path | shape | row identity and component order | units/coordinates/location |
| --- | --- | --- | --- | --- |
| displacement | `/steps/<step-name>/frames/0/nodal/displacement` | `[node_count,6]` float64 | `/model/nodes` row; `[UX,UY,UZ,URX,URY,URZ]` | `[length,length,length,radian,radian,radian]`; global; nodal |
| reaction | `/steps/<step-name>/frames/0/nodal/reaction` | `[node_count,6]` float64 | `/model/nodes` row; `[RF1,RF2,RF3,RM1,RM2,RM3]` | `[force,force,force,force*length,force*length,force*length]`; global; nodal |
| equilibrium end action | `/steps/<step-name>/frames/0/element/end_force_local` | `[element_count,2,6]` float64 | element row, endpoint `[-1,+1]`; `[FX,FY,FZ,MX,MY,MZ]` | `[force x3, force*length x3]`; beam local; endpoint outward action |
| endpoint section resultant | `/steps/<step-name>/frames/0/element/section_resultant` | `[element_count,2,4]` float64 | element row, endpoint `[-1,+1]`; `[N,T,My,Mz]` | `[force,force*length,force*length,force*length]`; beam local; positive-local-x section cut |
| generalized strain | `/steps/<step-name>/frames/0/element/generalized_strain` | `[element_count,2,4]` float64 | element row, Gauss point `[-1/sqrt(3),+1/sqrt(3)]`; `[epsilon0,kappa_x,kappa_y,kappa_z]` | `[1,1/length,1/length,1/length]`; beam local; integration point |
| generalized resultant | `/steps/<step-name>/frames/0/element/generalized_resultant` | `[element_count,2,4]` float64 | element row, same Gauss points; `[N,T,My,Mz]` | `[force,force*length,force*length,force*length]`; beam local; integration point |
| axial stress | `/steps/<step-name>/frames/0/element/stress_s11` | `[stress_row_count]` compound | `internal_element_id`, `gauss_point_index`, `section_point_index`, `x1`, `x2`, `source`, `S11` | element/Gauss/section order; `units_label=force/length^2`, beam local section point |
| diagnostics | `/diagnostics` | `[diagnostic_count]` compound | `severity`, `code`, `file`, `line`, `keyword`, `entity_identity`, `message` | deterministic diagnostic order; empty dataset is required when count is zero |
각 numeric result dataset은 `component_names`, `component_unit_dimensions`,
`coordinate_system`, `location`, `step_name=Step-1`, `frame_index=0` attributes를 가진다.
Endpoint axis order는 `xi=-1` then `xi=+1`, Gauss axis order는 negative then positive다.
Stress row는 internal element ID, Gauss index 1..2, input section-point index 순으로 정렬한다.
입력 section point가 없으면 `(x1,x2)=(0,0)`, index `0`, `source=fesa-default`인 centroid
row 하나를 각 Gauss point에 쓴다. 입력 point는 index 1부터 원래 data order를 따른다.
Reaction은 모든 node와 여섯 component에 존재하며 free DOF의 residual도 포함한다.
Transverse/torsional shear stress dataset이나 averaged nodal stress는 만들지 않는다.
`S11`은 mandatory HDF5 output이지만 Abaqus reference comparison은 명시적 N/A다.
### Atomic finalization
Writer는 requested final path와 같은 directory에 temporary HDF5를 만들고 모든 mandatory
group/dataset/attribute 작성, flush, close, schema self-check가 성공한 뒤에만 final path를
원자적으로 교체한다. 실패하면 temporary artifact는 비권위적이며 기존 final file이
있다면 그대로 보존한다. 실패한 새 run은 불완전한 `results.h5`를 남기지 않고 exit code
`6`과 HDF5 diagnostic을 반환한다.
## FESA HDF5 to Reference CSV Comparison Schema
Authoritative 비교는 위 HDF5 rows와 read-only Abaqus CSV rows 사이에서만 수행한다.
HDF5에서 추출한 deterministic CSV view는 debugging/review 보조물이며 solver output이나
reference artifact가 아니다.
### Approved legacy artifact precheck
Comparison 전에 다음 exact files가 존재하고 변경되지 않았음을 확인한다.
- `reference/cantilever beam/cantilever beam.inp`
- `reference/cantilever beam/cantilever beam displacements.csv`
- `reference/cantilever beam/cantilever beam reactions.csv`
- `reference/cantilever beam/cantilever beam elemental forces.csv`
Input은 `TYPE=B33`이어야 하고 trim한 CSV header는 아래 mapping 표와 정확히 일치해야
한다. 각 projected row key는 unique하고 모든 numeric value는 finite여야 한다. 파일
missing/type mismatch는 `needs-reference-artifacts`, header/value/identity mismatch는
`schema-mismatch`이며 comparison은 시작하지 않는다. `metadata.json` 부재는 프로젝트
전역 정책에 따라 허용되고, `README.md`는 이 legacy bundle에서 N/A다. 파일을 rename,
rewrite, zero-clamp 또는 보정하지 않는다.
### Header and component normalization
| legacy file/header | canonical quantity/component | FESA HDF5 source |
| --- | --- | --- |
| `U-U1`, `U-U2`, `U-U3` | displacement `UX`, `UY`, `UZ` | `nodal/displacement` columns 0..2 |
| `UR-UR1`, `UR-UR2`, `UR-UR3` | displacement `URX`, `URY`, `URZ` | `nodal/displacement` columns 3..5 |
| `RF-RF1`, `RF-RF2`, `RF-RF3` | reaction `RF1`, `RF2`, `RF3` | `nodal/reaction` columns 0..2 |
| `RM-RM1`, `RM-RM2`, `RM-RM3` | reaction `RM1`, `RM2`, `RM3` | `nodal/reaction` columns 3..5 |
| `SF-SF1` | section resultant `N` | `element/section_resultant` component `N` |
| `SM-SM1` | section resultant `My` | `element/section_resultant` component `My` |
| `SM-SM2` | section resultant `Mz` | `element/section_resultant` component `Mz` |
| `SM-SM3` | section resultant `T` | `element/section_resultant` component `T` |
General Abaqus beam component meaning and FESA local mapping은 다음과 같다.
| Abaqus component | equilibrium end-action component | section-resultant component |
| --- | --- | --- |
| `SF1` | `FX` | `N` |
| `SF3` | `FY` | N/A in `[N,T,My,Mz]` |
| `SF2` | `FZ` | N/A in `[N,T,My,Mz]` |
| `SM3` | `MX` | `T` |
| `SM1` | `MY` | `My` |
| `SM2` | `MZ` | `Mz` |
이 general mapping은 component axis의 의미다. Outward equilibrium end action과
positive-local-x-face section resultant의 sign identity를 합치지 않는다. 승인 legacy
CSV는 `SF1/SM1/SM2/SM3`만 제공하고 section-cut result와 비교하므로 `SF2`/`SF3` row를
0으로 만들거나 reference row로 합성하지 않는다. HDF5의 transverse end action은
unit/analytical test와 physics sanity 대상이다.
### Frame, instance, and node-station normalization
- Legacy `Frame` value `Increment 1: Step Time = 1.000`은 canonical `(Step-1, frame 0)`으로
변환한다. 승인 bundle의 다른 increment/time string은 `schema-mismatch`다.
- `Part Instance Name`은 HDF5 `/model/nodes` 또는 `/model/elements`의 exact preserved
`instance_name`과 case-insensitive lookup 후 raw identity 일치 여부를 확인한다.
- `Node Label`은 instance 안의 preserved source node label로 resolve한다. Displacement와
reaction key는 `(model_id,Step-1,0,instance_name,source_node_label,quantity,component)`다.
- Elemental-force CSV는 element label이 없으므로 HDF5 endpoint section resultants를
source node station으로 project한다. Boundary station은 유일한 incident endpoint를 쓴다.
- Interior station collapse는 정확히 두 incident B33 endpoints, 동일 section/local-axis
orientation, 일관된 chain connectivity, 해당 node의 concentrated force/moment가 없는
경우에만 허용한다. 두 positive-face section-cut 값이 아래 승인 component tolerance
안에서 먼저 일치해야 한다.
- Interior 값이 일치하면 stable internal element ID가 작은 endpoint를 deterministic
representative로 선택한다. 두 값을 평균하지 않는다. 불일치는 `tolerance-failure`다.
- Reversed connectivity, local-axis discontinuity, section jump, branch 또는 loaded interior
station은 element label 없는 legacy schema로 collapse할 수 없다. 이 approved bundle
밖에서는 element-aware reference row가 필요하며 legacy projection은 `schema-mismatch`
중단한다.
Projected canonical comparison row는 다음 fields를 가진다.
```text
model_id, step_name, frame_index, instance_name, source_node_label,
quantity, component, value, unit_dimension, coordinate_system, hdf5_dataset_path
```
Stable ordering은 quantity inventory order, instance declaration order, stable source node
order, component order다. Approved model ID는 `cantilever-beam-b33`; nodal quantities는
global Cartesian, section resultants는 beam local이다.
### Row-set precheck and tolerance
먼저 양쪽을 legacy contract가 실제 제공하는 quantity/component projection으로 제한한다.
그 projection 안에서는 missing, extra, duplicate, nonfinite, schema-mismatched 또는
identity-mismatched row가 하나라도 있으면 tolerance 계산 전에 실패한다. HDF5에만
mandatory인 `SF2/SF3` 대응 end action, generalized results와 `S11`은 계약상 비교 대상이
아니므로 extra reference row가 아니다.
Matched rows는 같은 `model_id`, step/frame, quantity, component로 group한다.
```text
reference_scale = max(abs(reference_value_i))
row_tolerance = absolute_floor + 1e-6 * reference_scale
row_pass = abs(fesa_value_i - reference_value_i) <= row_tolerance
```
즉 exact policy는 `absolute_floor + 1e-6 * reference_scale`이다. `reference_scale`
read-only Abaqus values만 사용하고 FESA 값으로 조정하지 않는다. Scale이 zero면 relative
term은 zero다. Reference value나 작은 residue를 zero-clamp하지 않고 모든 row를 판정한다.
| approved SI component class | absolute floor |
| --- | ---: |
| displacement and rotation | `1e-9` |
| force and moment | `1e-3` |
Interior endpoint consistency도 해당 CSV quantity/component의 same Abaqus-only scale과
floor를 사용한다. Verification report는 모든 row pass/fail과 quantity별 max absolute
error, component-scale normalized error, RMS error, norm error, worst row/component를
기록한다. 이 reference tolerance는 analytical/formulation tolerance를 대체하지 않는다.
## CLI and Diagnostics Contract
```powershell
fesa.exe <model.inp> --output <results.h5>
```
`--output`을 생략하면 현재 작업 directory의 `results.h5`가 final path다. Input path는
정확히 하나이며 unknown option, missing argument, repeated `--output`은 usage error다.
| exit code | meaning |
| ---: | --- |
| `0` | success; authoritative HDF5 finalization complete |
| `2` | CLI usage error |
| `3` | input syntax or semantic mapping error, including unsupported keyword/formulation/wrapper |
| `4` | model validation error, including geometry, section or property invalidity |
| `5` | factorization or substitution error |
| `6` | HDF5 write, validation or atomic finalization error |
각 stderr diagnostic record는 exact field order `severity`, `code`, `file`, `line`,
`keyword`, `entity_identity`, `message`를 사용한다. Source-backed diagnostics는 normalized
file path와 1-based line을 가지며, source가 없는 solver/output error는 빈 source field를
명시한다. 출력 순서는 source file declaration order, line, entity stable internal ID,
diagnostic code의 tuple로 결정하고 같은 tuple에서는 discovery order를 보존한다. Warning은
성공 run에서도 `/diagnostics`에 기록되며 error가 있으면 해당 exit class를 반환한다.
## Validation Rules
| validation area | required pass condition | failure class |
| --- | --- | --- |
| keyword inventory | supported 또는 exact warning no-op allowlist에 속함 | input, exit 3 |
| nesting/cardinality | closed part/assembly/instance/step; one assembly and one static step | input, exit 3 |
| source identity | duplicate 없음; all references resolve; multi-instance identity unique | input, exit 3 |
| B33 semantics | only `TYPE=B33`; two distinct connected nodes | input/model, exit 3 or 4 |
| section/material | exact data arity/mapping, `I12=0`, all required positive properties | model, exit 4 |
| geometry/local axes | approved length/projection thresholds and right-handed axes | model, exit 4 |
| history | DOF 1..6, resolved targets, finite values, sole canonical frame | input, exit 3 |
| HDF5 | all exact paths, shapes, attributes, identities and finite result values | output, exit 6 |
| legacy artifacts | exact four files, B33, exact headers, unique finite rows | reference precheck |
| comparison | exact projected row-set, endpoint eligibility/consistency, approved tolerance | reference verification |
No parser/HDF5 implementation, reference artifact mutation, Abaqus execution, physics pass 또는
release approval을 이 status가 의미하지 않는다.
## Open Issues and Downstream Handoff
### Resolved numerical-review handoff
`NR-O03-STATION-NORMALIZATION`은 approved legacy bundle에 대해 unloaded, consistently
oriented two-endpoint interior station만 collapse하고, tolerance check 후 smaller stable
element ID를 선택하는 규칙으로 구체화했다. Reversed/branched/loaded/jumped station은
element-aware reference가 없는 한 비교하지 않는다.
### Reference Model Agent
- Exact legacy inventory, generator `Abaqus/CAE Learning Edition 2024`, source commit
`2b34d0b`, external SI provenance와 stress comparison N/A를 계약에 고정한다.
- 추가 reference model은 canonical filenames와 metadata를 사용하며 이 legacy file을
변경하지 않는다.
### Implementation Planning Agent
- Keyword별 positive/negative grammar, source location, duplicates/dangling references,
B31/transform/nested/multiple-step/NLGEOM diagnostics를 TDD cases로 만든다.
- Exact HDF5 path/shape/component/identity, mandatory-output independence와 atomic failure를
검증한다.
- C++ API는 이 semantic contract에서 파생하되 여기에 소급해 API 설계를 추가하지 않는다.
### Reference Verification Agent
- Artifact precheck 뒤 HDF5-to-legacy projection, node-station eligibility, row-set equality,
component-scale comparison 순서를 유지한다.
- Missing/extra/nonfinite row를 무시하거나 `SF2/SF3`/stress reference row를 합성하지 않는다.
@@ -0,0 +1,228 @@
# Linear Static 3D Euler Beam Numerical Review
## Metadata
- feature_id: `linear-static-3d-euler-beam`
- source_formulation: `docs/formulations/3d-isoparametric-euler-beam-formulation.md`
- source_requirements: `docs/requirements/linear-static-3d-euler-beam.md`
- source_research: `docs/research/linear-static-3d-euler-beam-research.md`
- approved_design: `docs/superpowers/specs/2026-08-08-linear-static-3d-euler-beam-design.md`
- status: `pass-for-implementation-planning`
- owner_agent: `numerical-review-agent`
- date: `2026-08-09`
- scope: formulation correctness and implementation-planning readiness only
## Review Verdict
- verdict: `pass-for-implementation-planning`
- reason: The DOF/sign convention, natural boundary actions, 4x12 B matrix, 12x12 stiffness, 2-point Gauss rule, transformation, constant line-load vector, constrained partition, and residual reaction are mutually consistent. No confirmed mathematical defect was found.
- qualification: This verdict permits implementation planning only; it is not reference-comparison, physics-sanity, release, or full Abaqus-compatibility approval.
## Critical Findings
### Confirmed defects
- None.
### Independent DOF, curvature, and end-action derivation
The fixed local nodal order is
$$
[u_1,v_1,w_1,\theta_{x1},\theta_{y1},\theta_{z1},
u_2,v_2,w_2,\theta_{x2},\theta_{y2},\theta_{z2}].
$$
For a small right-handed section rotation,
$\boldsymbol\theta\times[0,y,z]^T
=[z\theta_y-y\theta_z,-z\theta_x,y\theta_x]^T$.
The zero-shear constraints are therefore
$\theta_z=v'$ and $\theta_y=-w'$. Hence
$$
\varepsilon_{xx}=u'-zw''-yv'
=\varepsilon_0+z\kappa_y-y\kappa_z,
\quad \kappa_y=-w'',\quad \kappa_z=v''.
$$
Using the reviewed section-force definitions independently gives
$$
M_y=EI_y\kappa_y=-EI_yw'',\qquad
M_z=EI_z\kappa_z=EI_zv''.
$$
Twice integrating the bending virtual work, with outward sign $n=-1$ at
$x=0$ and $n=+1$ at $x=L$, yields
$$
F_y=-nM_z',\quad M_z^{end}=nM_z,\qquad
F_z=nM_y',\quad M_y^{end}=nM_y.
$$
The axial and torsional pairs are $F_x=nN$ and $M_x=nT$. Direct expansion of
$K_ld_l$ reproduces these relations at both endpoints when the V0 distributed
load is zero. Thus the equilibrium end action is an outward action, while
$DBd$ is the positive-local-x section resultant before the outward-normal
sign is applied. These outputs must remain distinct.
### B matrix, stiffness, quadrature, and modes
- Differentiating the Hermite fields reproduces the documented 4x12 B matrix. The $\kappa_y=-w''$ row has $[-H_1'',H_2'',-H_3'',H_4'']$ in the $[w_1,\theta_{y1},w_2,\theta_{y2}]$ columns; the $\kappa_z=v''$ row has $[H_1'',H_2'',H_3'',H_4'']$ in the $[v_1,\theta_{z1},v_2,\theta_{z2}]$ columns.
- Axial/torsional B rows are constant and bending rows are linear in $\xi$, so $B^TDBJ_x$ is degree at most two. The 2-point Gauss rule, exact through degree three, exactly produces the closed-form 12x12 stiffness.
- The axial and torsion blocks each have rank one, and each exact bending block has rank two. With positive $EA,GJ,EI_y,EI_z$, the free-element stiffness is symmetric positive semidefinite with rank 6.
- The six rigid modes are the three equal nodal translations, equal $\theta_x$, $\theta_{y1}=\theta_{y2}$ with $w_2-w_1=-L\theta_y$, and $\theta_{z1}=\theta_{z2}$ with $v_2-v_1=L\theta_z$. Each gives $Bd=0$.
- Since $d^TKd=\int(Bd)^TD(Bd)dx$, energy is strictly positive outside the six-dimensional rigid kernel, but the unconstrained element itself is not positive definite.
- A 1-point bending rule reduces the total element rank to 4 and introduces two spurious zero-energy modes. Production must use the approved 2-point rule or the reviewed closed form.
### Transformation and energy invariance
Projection/normalization of `n1` gives orthogonal unit $e_x,e_y$, and
$e_z=e_x\times e_y$ makes $R=[e_x^T;e_y^T;e_z^T]$ orthogonal and
right-handed: $RR^T=I$, $\det R=+1$. With
$T=\operatorname{diag}(R,R,R,R)$ in node translation/rotation block order,
$$
d_l=Td_g,\quad K_g=T^TK_lT,\quad f_g=T^Tf_l,
\quad d_g^TK_gd_g=d_l^TK_ld_l.
$$
This also confirms virtual-work invariance. Reversing the transform direction
would violate the documented component contract.
### Constant local line-load vector
Exact integration of $N_q^T[p_x,p_y,p_z,m_x,0,0]^T$ gives equal half-span
nodal forces/torques and
$$
M_{y1}=-p_zL^2/12,\quad M_{y2}=+p_zL^2/12,\qquad
M_{z1}=+p_yL^2/12,\quad M_{z2}=-p_yL^2/12.
$$
The signs follow from the $-H_2,-H_4$ interpolation for $w$ and
$H_2,H_4$ for $v$. The 2-point rule integrates the cubic load integrand
exactly. This remains a formulation-only kernel: `*DLOAD` input, a Domain
distributed-load object, and CLI distributed loading are out of scope.
### Independent numerical cross-check
An independent double-precision evaluation at $L=3.7$ with unequal positive
$EA,GJ,EI_y,EI_z$ produced:
| check | observed result |
| --- | ---: |
| 2-point Gauss/closed-form normalized error | $3.20\times10^{-16}$ |
| symmetry normalized error | $2.00\times10^{-17}$ |
| six rigid-mode residual norms | 0 to $2.81\times10^{-15}$ |
| numerical rank at relative $10^{-10}$ | rank 6 |
| constant line-load normalized error | $3.08\times10^{-16}$ |
| 1-point stiffness | rank 4 |
| rotated local/global energy difference | 0 |
| $\det R$ | $0.9999999999999999$ |
These calculations corroborate the derivation but do not replace production
tests.
## Numerical Risk Assessment
Confirmed defects, risks, and open issues are separated.
| id | risk or limit | assessment and required control |
| --- | --- | --- |
| NR-R01 | zero/near-zero length | Singular Jacobian and divergent $L^{-3}$ terms; `NR-T05` tests the approved scale-aware boundary before evaluation. |
| NR-R02 | zero/tangent-parallel `n1` | Undefined axes and inertia directions; `NR-T05` tests the projection boundary and forbids a silent fallback. |
| NR-R03 | under-integration | 1-point integration adds two mechanisms; `NR-T03` must show 2-point rank 6 and negative-control rank 4. |
| NR-R04 | mixed translation/rotation scaling | Raw rank is length-unit dependent; `NR-T04` uses length scaling and a well-scaled fixture. |
| NR-R05 | incomplete constraints | `Kff` is singular while any rigid mode survives; `NR-T09` covers free, partial, and stable systems. |
| NR-R06 | extreme stiffness ratios/units | A mathematically SPD system may be ill-conditioned; `NR-T10` checks residual/analytical error. Automatic scaling or a new threshold is not approved. |
| NR-R07 | transform direction | Rotated bending signs/components can be wrong; `NR-T05` checks orthogonality, handedness, work, and energy. |
| NR-R08 | end-action/section-cut confusion | Opposite signs can contaminate comparison; `NR-T07` checks both endpoints and distinct result types. |
| NR-R09 | sparse duplicate reduction | Thread-dependent summation can break reproducibility; `NR-T11` checks canonical CSR and normalized values. |
| NR-R10 | short/deep beam | EulerBernoulli may be too stiff; explicit limitation only. No unapproved slenderness diagnostic and no B31 reinterpretation. |
| NR-R11 | warping, eccentricity, or `I12!=0` | The diagonal constitutive model is insufficient; explicit rejection/exclusion, never silent approximation. |
| NR-R12 | result averaging | Averaging can hide discontinuities; baseline nodal averaging is excluded and `NR-T07` preserves endpoint identity. |
- shear_locking: N/A because no independent shear strain exists; deep-beam applicability remains limited.
- volumetric_locking: N/A.
- hourglass: N/A for the approved 2-point rule; the distinct 1-point rank deficiency is NR-R03.
- distortion: no curved/distorted mapping exists in this straight affine element; length and axis singularities are NR-R01/NR-R02.
- nonlinear convergence: N/A; linear residual and conditioning are NR-T09/NR-T10.
- mesh convergence: tip-force/tip-moment polynomial fields are one-element exact; the formulation-only constant transverse load has a quartic exact displacement and requires refinement evidence.
## Consistency Checks
| check | result | evidence |
| --- | --- | --- |
| units | pass | Stiffness blocks and nodal work pairs are dimensionally consistent. |
| dimensions | pass | B is 4x12, D is 4x4, and $B^TDBJ_x$ is 12x12. |
| signs | pass | Cross-product, curvature, natural-boundary, end-action, and line-load derivations agree. |
| dof_ordering | pass | Node blocks preserve `[u,v,w,theta_x,theta_y,theta_z]`. |
| coordinate_transforms | pass | R/T are right-handed orthogonal maps with local = transform times global. |
| jacobian | pass with validation | $J_x=L/2>0$ for accepted elements. |
| constitutive | pass | Positive diagonal $EA,GJ,EI_y,EI_z$ gives nonnegative energy; `I12!=0` is rejected. |
| integration | pass | The 2-point locations, unit weights, and $J_x$ integrate stiffness and constant-load kernels exactly. |
| symmetry | pass | Variational and numerical checks agree. |
| rank 6 and rigid modes | pass | Independent ranks $1+1+2+2=6$ and six rigid vectors span the kernel. |
| positive deformation energy | pass | Strictly positive outside the rigid kernel. |
| constrained partition | pass | $K_{ff}d_f=F_f-K_{fc}d_c$ includes nonzero $d_c$. |
| residual reaction | pass | $R_c=(Kd-F)_c=K_{cf}d_f+K_{cc}d_c-F_c$. |
| output locations | pass with downstream contract | Gauss values, section resultants, end actions, and residual reactions remain distinct. |
## Verification Readiness
| test id | concrete criterion |
| --- | --- |
| `NR-T01-DOF-SIGN` | Compare `B*d` with independently differentiated Hermite fields at multiple $\xi$; normalized error $\le10^{-12}$ and explicit $\theta_y=-w'$, $M_y=-EI_yw''$. |
| `NR-T02-PATCH` | Check endpoint value/slope, constant axial strain/twist, both constant-curvature patches, and six rigid modes; rigid residual $\le10^{-10}$. |
| `NR-T03-GAUSS-CLOSED` | All 12x12 entries and symmetry normalized $\le10^{-12}$; negative 1-point control must be rank 4. |
| `NR-T04-RANK-ENERGY` | Use $Q=\operatorname{diag}(1,1,1,L,L,L,1,1,1,L,L,L)$ and $\widehat K=Q^{-T}KQ^{-1}$. For a documented well-scaled fixture require six singular values $\le10^{-10}\sigma_{max}$, six $>10^{-10}\sigma_{max}$, and positive energy for six deformation vectors. |
| `NR-T05-TRANSFORM` | For a non-axis-aligned member require normalized orthogonality, handedness, virtual-work, transformed-stiffness, and energy errors $\le10^{-12}$; test geometry thresholds. |
| `NR-T06-LINE-LOAD` | Compare all 12 signed closed-form components at normalized $\le10^{-12}$; separately verify `*DLOAD` remains unsupported. |
| `NR-T07-END-SIGNS` | Pure axial/torsion/two-plane bending states must match outward natural actions and positive-face resultants at both endpoints, normalized $\le10^{-12}$; no averaging. |
| `NR-T08-ANALYTICAL` | Axial, torsion, local-y, and local-z cantilevers at relative $\le10^{-9}$; constant transverse load requires load-vector equality and mesh convergence. |
| `NR-T09-PARTITION-SPD` | Nonzero $d_c,F_c$: displacement and free/reaction residual normalized $\le10^{-10}$. Stable `Kff` factorizes; surviving rigid modes fail structurally with no result. |
| `NR-T10-CONDITIONING` | Sweep documented valid scales; accepted well-conditioned cases require residual $\le10^{-10}$ and analytical error $\le10^{-9}$; numerically unresolved cases fail explicitly. |
| `NR-T11-DETERMINISTIC-ASSEMBLY` | Across repeated thread counts require identical CSR structure/reduction order and values normalized $\le10^{-12}$. |
### Open issues
1. `NR-O01-PARDISO-CONTRACT`: official oneMKL evidence is still required for SPD matrix type, phases, zero-based CSR, repeated RHS, conditioning/error reporting, and failure codes before that adapter plan is approved. This is non-blocking for element mathematics and connects to NR-T09/NR-T10.
2. `NR-O02-DETERMINISTIC-REDUCTION`: stable COO sort and duplicate-summation rules are project policy and must be made explicit before NR-T11.
3. `NR-O03-STATION-NORMALIZATION`: reversed connectivity/local-axis orientation and legitimate jumps at loaded interior nodes need an explicit downstream row-normalization/eligibility rule. The legacy baseline may use its documented stable orientation and unloaded interior stations, but mismatch must never be averaged. NR-T07 covers element signs.
No open issue requires formulation revision. NR-O01/NR-O02 are implementation-planning
handoffs; NR-O03 belongs to I/O and reference-model contracts.
## Required Revisions
### Formulation Agent
- None. No confirmed mathematical defect or missing derivation blocks implementation planning.
### Research Agent
- Resolve NR-O01 from official Intel documentation before finalizing the PARDISO adapter plan.
### Reference Model Agent
- Make NR-O03 orientation and unloaded-interior assumptions explicit without modifying the approved legacy artifacts.
## Downstream Handoff
### Implementation Planning Agent
- Convert NR-T01 through NR-T11 into TDD `RED -> GREEN -> VERIFY` work without changing approved tolerances.
- Preserve stiffness/partition/factorization before load/effective-RHS/substitution.
- Treat SPD as a post-constraint property and retain singularity/conditioning diagnostics.
- Resolve NR-O01 and NR-O02 before the corresponding implementation steps.
### I/O Definition Agent
- Preserve outward endpoint action, positive-face section resultant, Gauss result, and assembled residual reaction as distinct identities.
- Define NR-O03 without broadening the approved Abaqus subset.
### Reference Model Agent
- Cover axial, torsion, both bending planes, rotated-space transformation, endpoint signs, and nonzero prescribed displacement.
- Keep `reference/cantilever beam/` read-only, stress comparison N/A, and `*DLOAD` outside CLI support.
@@ -0,0 +1,268 @@
# 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/reference-verifications/linear-static-3d-euler-beam-reference-verification.md`
- source_reference_model: `docs/reference-models/linear-static-3d-euler-beam-reference-models.md`
- source_requirement: `docs/requirements/linear-static-3d-euler-beam.md`
- source_formulation: `docs/formulations/3d-isoparametric-euler-beam-formulation.md`
- source_numerical_review: `docs/numerical-reviews/linear-static-3d-euler-beam-review.md`
- source_io_definition: `docs/io-definitions/linear-static-3d-euler-beam-io.md`
- status: `pass-for-release-agent`
- owner_agent: `physics-evaluation-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/reference-verifications/linear-static-3d-euler-beam-reference-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. |
## No-Change Assertion
- source_files_modified: `false`
- test_files_modified: `false`
- cmake_files_modified: `false`
- requirements_modified: `false`
- formulations_modified: `false`
- numerical_review_modified: `false`
- io_contract_modified: `false`
- reference_model_contract_modified: `false`
- reference_verification_report_modified: `false`
- reference_artifacts_modified: `false`
- tolerance_policies_modified: `false`
- Abaqus_or_other_reference_solver_executed: `false`
- owned_report_created: `true`
- phase_index_step27_modified: `true`
- notes: HDF5, comparison JSON, and legacy reference artifacts were inspected read-only; the only
generated files were the ignored build-local evidence regenerated by the exact approved CTest.
## 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.
@@ -0,0 +1,297 @@
# 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`
- review_fix_date: `2026-08-10`
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.
## 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`
- phase_step26_acceptance_modified_for_review_fix: `true`
- phase_index_step26_summary_modified_for_review_fix: `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; the final review fix changed only acceptance/report/index
documentation, and pre/post hashes, Git diff, and Git status agree
## 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.
@@ -0,0 +1,422 @@
# Linear Static 3D Euler Beam Reference Models
## Metadata
- feature_id: `linear-static-3d-euler-beam`
- source_requirement: `docs/requirements/linear-static-3d-euler-beam.md`
- source_research: `docs/research/linear-static-3d-euler-beam-research.md`
- source_formulation: `docs/formulations/3d-isoparametric-euler-beam-formulation.md`
- source_numerical_review: `docs/numerical-reviews/linear-static-3d-euler-beam-review.md`
- source_io_definition: `docs/io-definitions/linear-static-3d-euler-beam-io.md`
- approved_design: `docs/superpowers/specs/2026-08-08-linear-static-3d-euler-beam-design.md`
- status: `ready-for-implementation-planning`
- owner_agent: `reference-model-agent`
- date: `2026-08-09`
- approved_reference_model: `cantilever-beam-b33`
- approved_reference_schema: `abaqus-cae-report-csv-v0`
- reference_baseline: `reference/cantilever beam/` at source commit `2b34d0b`
이 문서는 구현 전에 필요한 code verification, analytical solution verification 및
approved B33 reference comparison의 모델·artifact 계약을 정의한다. 이 status는 모델과
테스트를 구현 계획으로 넘길 준비가 되었다는 뜻일 뿐, FESA 결과 비교, physics sanity,
release readiness 또는 Abaqus full compatibility의 pass를 뜻하지 않는다.
## Reference Strategy
### Code verification
요소 수식과 solver infrastructure를 외부 reference 값 없이 직접 검사한다. Hermite
보간, `theta_y=-dw/dx`, 4x12 `B`, 12x12 closed-form stiffness, 2-point Gauss, six rigid
modes/rank 6, positive deformation energy, local/global transform, constant local line-load
kernel, constrained partition, deterministic assembly 및 HDF5 schema가 대상이다. Numerical
Review의 `NR-T01`부터 `NR-T11`까지를 구현 전 RED test inventory로 사용한다.
### Analytical solution verification
서로 분리된 axial, torsion, local y bending, local z bending cantilever와 rigidly rotated
beam을 사용한다. 각 모델은 displacement/rotation, reaction, end action, section
resultant, residual 및 해당되는 axial `S11`을 upstream closed form과 비교한다. Nonzero
prescribed displacement는 partition 식을, constant local line load는 formulation-only
equivalent-vector 식을 검증한다. 이 모델들은 Abaqus CSV를 요구하지 않는 code/solution
test fixtures이며 reference artifact bundle로 가장하지 않는다.
### B33 reference comparison
논리 모델 `cantilever-beam-b33`의 exact read-only legacy bundle만 사용하여 FESA
`results.h5`의 displacement, reaction 및 endpoint section resultant를 Abaqus/CAE report
CSV row와 비교한다. Artifact precheck와 exact row-set matching이 먼저 통과해야 하며,
수치 비교는 component-scale mixed tolerance를 사용한다. Axial `S11` output은 필수지만
Abaqus beam stress comparison은 명시적 N/A다.
### Excluded validation scope
실험 자료에 대한 physical validation, Abaqus/Nastran 실행, 새로운 reference 값 생성,
deep-beam/Timoshenko validation, warping, `I12!=0`, instance transform, nonlinear/dynamic
behavior는 이 portfolio에 포함하지 않는다.
## Model Inventory
| model_id | category | purpose | target quantities or tests | required artifacts | status |
| --- | --- | --- | --- | --- | --- |
| `smoke-b33-cli` | smoke | 단일 B33 deck의 parse-to-HDF5와 mandatory output 확인 | CLI, diagnostics, HDF5 paths/identity/atomicity | implementation test fixture; Abaqus CSV N/A | planned |
| `cv-b33-shape-stiffness` | code verification | Hermite, `B`, closed-form stiffness, 2-point Gauss와 signed line-load kernel 격리 | `NR-T01`, `NR-T03`, `NR-T06` | in-process test data; reference bundle N/A | planned |
| `cv-b33-patch-rigid-assembly` | patch test | constant strain/curvature, six rigid modes, rank/energy와 deterministic assembly 확인 | `NR-T02`, `NR-T04`, `NR-T11` | implementation test mesh; Abaqus CSV N/A | planned |
| `an-b33-axial-cantilever` | analytical | axial response와 centroidal axial stress 확인 | `UX`, `RF1`, `N`, `FX`, `S11`, residual | analytical test fixture; Abaqus CSV N/A | planned |
| `an-b33-torsion-cantilever` | analytical | Saint-Venant torsion response 확인 | `URX`, `RM1`, `T`, `MX`, residual | analytical test fixture; Abaqus CSV N/A | planned |
| `an-b33-local-y-bending` | analytical | local `+y` force와 `Iz=I22` bending 확인 | `UY`, `URZ`, `RF2`, `RM3`, `Mz`, `FY`, residual | analytical test fixture; Abaqus CSV N/A | planned |
| `an-b33-local-z-bending` | analytical | local `+z` force와 `Iy=I11`, `theta_y=-w'` 확인 | `UZ`, `URY`, `RF3`, `RM2`, `My`, `FZ`, `S11`, residual | analytical test fixture; Abaqus CSV N/A | planned |
| `an-b33-rotated-space` | analytical | non-axis-aligned 3D beam의 transform와 energy invariance 확인 | transformed displacement/reaction/resultant, work, energy, `NR-T05` | analytical test fixture; Abaqus CSV N/A | planned |
| `an-b33-prescribed-displacement` | analytical | nonzero `dc` effective RHS, full reconstruction와 reaction 확인 | `df`, `dc`, `K*d-F`, `NR-T09` | analytical algebra fixture; Abaqus CSV N/A | planned |
| `an-b33-line-load-kernel` | analytical | formulation-only constant local line-load equivalent vector 확인 | signed 12-component vector, mesh convergence negative/positive control | element unit fixture; `*DLOAD` reference N/A | planned |
| `neg-b33-input-contract` | negative/invalid-input | unsupported/malformed input과 model-validation diagnostic 확인 | B31, second step, transform, nested assembly, `I12`, geometry, property, keyword cases | invalid input fixtures; result CSV N/A | planned |
| `cantilever-beam-b33` | benchmark and regression | approved Abaqus B33 nodal/section rows와 end-to-end 회귀 비교 | displacement, reaction, section resultant; stress N/A | exact legacy four-file bundle | inventory-ready; comparison not run |
`planned` analytical/code rows do not have missing reference artifacts: their acceptance source is
the reviewed formulation or an exact invariant. Only a model intended for Abaqus reference
comparison is subject to the CSV bundle requirement.
## Model Records
### Code and patch verification records
| model_id | analysis and element | material/section | boundary/load | expected target and tolerance | source |
| --- | --- | --- | --- | --- | --- |
| `smoke-b33-cli` | single linear static, two-node `B33` minimum deck | finite positive isotropic `E,nu,A,Iy,Iz,J`, `I12=0` | stable cantilever constraint and one `*CLOAD` | mandatory HDF5 inventory, identity and finite rows; exact schema | requirements and I/O definition |
| `cv-b33-shape-stiffness` | free two-node Euler beam element | unequal positive `EA,GJ,EIy,EIz` to expose component swaps | no global BC/load; direct element states and local line load | matrix/Gauss/line-load normalized error `<=1e-12`; signed components exact by contract | formulation sections 8-13; `NR-T01/T03/T06` |
| `cv-b33-patch-rigid-assembly` | one/multiple identity-oriented B33 elements | positive, well-scaled properties | rigid translation/rotation and constant strain/curvature fields | rigid residual `<=1e-10`, rank 6, positive deformation energy; identical CSR structure and values normalized `<=1e-12` | numerical review `NR-T02/T04/T11` |
### Analytical inventory
All analytical beam records use a straight prismatic B33 member, homogeneous isotropic linear
elasticity with positive `E,G,A,Iy,Iz,J`, `I12=0`, small displacement/rotation and a fixed root.
Signs follow the approved local `(x,y,z)=(t,n1,t x n1)` convention.
| model_id | boundary conditions and load | target quantity/test | analytical target | tolerance/status |
| --- | --- | --- | --- | --- |
| `an-b33-axial-cantilever` | root DOFs fixed; free-end local axial force `Px` | tip `UX`, root `RF1`, constant `N`, outward `FX`, centroid `S11`, residual | `u(L)=Px*L/(E*A)` with force equilibrium and `S11=N/A` | relative `1e-9`; residual normalized `1e-10`; planned |
| `an-b33-torsion-cantilever` | root fixed; free-end local torque `Mx` | tip `URX`, root `RM1`, constant `T`, outward `MX`, residual | `theta_x(L)=Mx*L/(G*J)` with torque equilibrium | relative `1e-9`; residual normalized `1e-10`; planned |
| `an-b33-local-y-bending` | root fixed; free-end force `Py` along local `+y` | tip `UY`, `URZ`, root `RF2/RM3`, endpoint `Mz/FY`, residual | `v(L)=Py*L^3/(3*E*Iz)`, `theta_z(L)=Py*L^2/(2*E*Iz)` | relative `1e-9`; end-sign normalized `1e-12`; planned |
| `an-b33-local-z-bending` | root fixed; free-end force `Pz` along local `+z` | tip `UZ`, `URY`, root `RF3/RM2`, endpoint `My/FZ`, section-point `S11`, residual | `w(L)=Pz*L^3/(3*E*Iy)`, `theta_y(L)=-Pz*L^2/(2*E*Iy)` | relative `1e-9`; end-sign normalized `1e-12`; planned |
| `an-b33-rotated-space` | rigidly rotate the axial/torsion/two-bending fixtures to a non-axis-aligned direction | `R*R^T`, `det(R)`, transformed displacement/reaction/resultant, work and energy | inverse-rotated physical results equal axis-aligned cases; `det(R)=+1` | normalized `1e-12`; planned |
| `an-b33-prescribed-displacement` | stable free/constrained partition with nonzero `dc`, finite `Ff` and `Fc` | effective RHS, `df`, full `d`, constrained reaction and free residual | `rhs=Ff-Kfc*dc`, `Rc=Kcf*df+Kcc*dc-Fc` | normalized `1e-10`; planned |
| `an-b33-line-load-kernel` | element-level constant local `[px,py,pz,mx]`; no parser/CLI `*DLOAD` | all 12 equivalent nodal components and signed end moments | formulation section 12.2 closed-form vector | normalized `1e-12`; planned |
The rotated record covers transformation rather than Abaqus instance transforms. The line-load
record covers only the element kernel and must be paired with a negative parser test proving that
`*DLOAD` remains unsupported.
### Invalid-input record
`neg-b33-input-contract` is a table-driven portfolio. Each case uses the smallest otherwise-valid
single-step deck and changes only the named condition.
| case | expected result |
| --- | --- |
| `TYPE=B31` | `unsupported-element-formulation`; no Euler element |
| second `*STEP` | `unsupported-multiple-step`; no solve/output |
| instance translation or rotation data | `unsupported-instance-transform` |
| nested assembly/dependent mesh semantic | structured unsupported diagnostic |
| `I12!=0` | `unsupported-coupled-section` model failure |
| nonpositive `E,G,A,Iy,Iz,J` | `invalid-beam-property` model failure |
| zero/near-zero length | `invalid-beam-length` at the approved scale-aware boundary |
| zero/tangent-parallel guide vector | `invalid-beam-guide-vector` at the approved projection boundary |
| `*DLOAD` or unlisted model-affecting keyword | `unsupported-keyword`; no distributed-load Domain object |
| malformed row, duplicate entity or dangling reference | input failure with source-backed deterministic diagnostic |
| missing/extra/duplicate/nonfinite/schema- or identity-mismatched reference row | comparison precheck failure before tolerance evaluation |
### Approved reference record: `cantilever-beam-b33`
- category: benchmark and regression
- purpose: end-to-end B33 displacement, reaction and section-resultant comparison
- analysis_type: single linear static
- element_type: ten straight two-node `TYPE=B33` elements, source labels 1 through 10
- geometry: global x-axis cantilever, total length 10 m, eleven source nodes
- material: `E=2.1e11`, `nu=0.3`, SI
- section: `A=1`, `I11=0.0833333`, `I12=0`, `I22=0.0833333`, `J=0.140833`; `n1=(0,1,0)`
- boundary_conditions: source node 1, DOFs 1 through 6 fixed
- load: source node 11, global DOF 3, magnitude `-1e6` N
- model_id: `cantilever-beam-b33`
- logical_schema: `abaqus-cae-report-csv-v0`
- source_commit: `2b34d0b`
- generator: `Abaqus/CAE Learning Edition 2024`
- units: SI
- nodal_coordinate_system: global Cartesian
- section_force_coordinate_system: beam local
- step_name: `Step-1`
- increment: `1`
- step_time: `1.0`
- artifact_status: all four exact paths present; structural precheck observed; FESA comparison not run
- stress: N/A for Abaqus reference comparison; mandatory FESA `S11` remains covered by unit/analytical and HDF5 schema tests
The input and CSV numeric reference values are not recalculated, repaired, rounded, clamped or
otherwise re-derived by this contract.
## Abaqus Input Requirements
The approved input is exactly
`reference/cantilever beam/cantilever beam.inp`. Read-only inspection confirms that it contains
`*ELEMENT, TYPE=B33` and remains within the V0 supported subset plus the documented warning
no-op output-request allowlist. Its single identity instance is `PART-1_1-1`; its canonical result
identity is `(Step-1, frame 0)` from increment 1, step time 1.0.
For later reference models:
- `model.inp` shall use only the feature-approved Abaqus keyword subset.
- Model data shall define nodes, B33 connectivity, sets, material, general section and orientation.
- History data shall define exactly one `*STEP, *STATIC`, supported boundary conditions and nodal
loads.
- `TYPE=B31`, instance transform, nested assembly, `I12!=0` and `*DLOAD` are not admissible ways
to create a positive V0 reference model.
- Abaqus output requests may be present for human generation of required CSVs, but they are
warning no-ops for FESA and never select mandatory HDF5 output.
## Artifact Bundle Contract
### Approved legacy exception
The following exact paths are the entire approved read-only bundle:
```text
reference/cantilever beam/cantilever beam.inp
reference/cantilever beam/cantilever beam displacements.csv
reference/cantilever beam/cantilever beam reactions.csv
reference/cantilever beam/cantilever beam elemental forces.csv
```
These files shall not be generated, modified, renamed, corrected or restored by an agent or
Harness. Their spaces and existing CAE report headers are legacy aliases, not a naming pattern for
new models.
For this approved legacy bundle:
- `metadata.json`: absent-allowed under the project-wide optional metadata policy
- `README.md`: N/A
- stress CSV: N/A because beam stress reference comparison is outside the approved V0 scope
The approved design and this contract record model ID, provenance, generator, source commit,
units, coordinate systems, step/frame identity, logical CSV schema, exact inventory, tolerance
policy and the stress N/A reason. The optional metadata file's absence and the approved legacy
README/stress exclusions therefore do not change the record to `needs-reference-artifacts`.
### Future reference bundles
Every later reference model shall use this structure unless its approved requirement explicitly
marks a quantity N/A:
```text
reference/
<model-id>/
model.inp
metadata.json # optional
<model-id>_displacements.csv
<model-id>_reactions.csv
<model-id>_internalforces.csv
<model-id>_stresses.csv
README.md
```
CSV names are canonical `<model-id>_*.csv` names. `README.md` is mandatory for later bundles;
`metadata.json` is optional. A quantity CSV may be omitted only when the upstream acceptance
contract explicitly records N/A and gives its verification replacement. Missing required files
or required Reference Model Contract provenance keep that model at `needs-reference-artifacts`.
## Reference Metadata Contract
This document is the required source of truth for the following metadata. A later bundle may
optionally duplicate it in `metadata.json` using at least this schema:
```json
{
"feature_id": "linear-static-3d-euler-beam",
"model_id": "<model-id>",
"artifact_status": "needs-reference-artifacts | ready-for-verification",
"input_file": "model.inp",
"abaqus_version": "<exact generator/version>",
"generation_owner": "<person or approved procedure>",
"generation_date": "<YYYY-MM-DD>",
"source_commit": "<commit>",
"units": "<consistent unit system>",
"coordinate_system": "<nodal and element result systems>",
"analysis_type": "single linear static",
"element_types": ["B33"],
"step_name": "Step-1",
"increment": 1,
"step_time": 1.0,
"output_requests": ["U", "RF", "SF"],
"reference_csv_schema_version": "<approved schema>",
"reference_csv_files": ["<canonical filenames>"],
"tolerance_policy": "<approved quantity/component policy>",
"limitations": ["<known limitations and explicit N/A quantities>"]
}
```
No agent may invent unknown provenance fields or mark a bundle ready merely because filenames
exist. An absent `metadata.json` is allowed. If the file exists, inventory it read-only and report
any disagreement with this contract or stored artifacts as an upstream contract/provenance issue.
## Abaqus Reference CSV Requirements
Header comparison trims whitespace around each comma-separated field but does not rename fields.
For every file, `Frame` must normalize exactly from
`Increment 1: Step Time = 1.000` to `(Step-1, frame 0)`, `Part Instance Name` must resolve to the
preserved instance identity, `Node Label` must be a unique source-node station, and all projected
numeric values must be finite.
| exact legacy path | expected trimmed header | unique row key | observed inventory |
| --- | --- | --- | --- |
| `reference/cantilever beam/cantilever beam displacements.csv` | `Frame, Part Instance Name, Node Label, U-U1, U-U2, U-U3, UR-UR1, UR-UR2, UR-UR3` | `(Frame, Part Instance Name, Node Label)` | 11 rows; header/key/finite/arity checks observed |
| `reference/cantilever beam/cantilever beam reactions.csv` | `Frame, Part Instance Name, Node Label, RF-RF1, RF-RF2, RF-RF3, RM-RM1, RM-RM2, RM-RM3` | `(Frame, Part Instance Name, Node Label)` | 11 rows; header/key/finite/arity checks observed |
| `reference/cantilever beam/cantilever beam elemental forces.csv` | `Frame, Part Instance Name, Node Label, SF-SF1, SM-SM1, SM-SM2, SM-SM3` | `(Frame, Part Instance Name, Node Label)` | 11 rows; header/key/finite/arity checks observed |
The wide-row key becomes unique canonical component rows after adding `quantity` and `component`.
Missing, extra, duplicate, nonfinite, header/schema or identity mismatch stops comparison as
`needs-reference-artifacts` or `schema-mismatch`. No bad or near-zero row may be silently dropped.
For the elemental-force CSV, source node station is not an element-end identity. A boundary
station uses its only incident endpoint. An interior station may collapse exactly two endpoints
only when chain connectivity, section and local axes are consistent and the station has no
concentrated force/moment. The two positive-local-x section-cut values must first agree within the
approved component tolerance. If they agree, choose the endpoint with smaller stable internal
element ID; never average. Reversed orientation, branch, section jump, local-axis discontinuity or
loaded interior station requires an element-aware future schema and is a `schema-mismatch` under
this legacy schema.
## Coverage Matrix
The authoritative comparison source is FESA HDF5, not an extracted FESA CSV. Dataset paths use
the canonical V0 step identity.
| verification quantity | requirement ids | model_id | FESA HDF5 dataset | legacy CSV and components | row identity/location | tolerance | verification method | status |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| nodal displacement/rotation | 003, 029-031, 036-042 | `cantilever-beam-b33` | `/steps/Step-1/frames/0/nodal/displacement` | `reference/cantilever beam/cantilever beam displacements.csv`: `U-U1/U-U2/U-U3 -> UX/UY/UZ`, `UR-UR1/UR-UR2/UR-UR3 -> URX/URY/URZ` | preserved instance + source node; global nodal | `1e-9 + 1e-6*reference_scale` per displacement/rotation component | HDF5-to-read-only CSV after artifact/row-set precheck | ready for implementation planning; comparison not run |
| nodal reaction force | 007, 027, 029-031, 036-042 | `cantilever-beam-b33` | `/steps/Step-1/frames/0/nodal/reaction` | `reference/cantilever beam/cantilever beam reactions.csv`: `RF-RF1/RF-RF2/RF-RF3 -> RF1/RF2/RF3` | preserved instance + source node; global nodal | `1e-3 + 1e-6*reference_scale` per force component | HDF5-to-read-only CSV plus global equilibrium | ready for implementation planning; comparison not run |
| nodal reaction moment | 007, 027, 029-031, 036-042 | `cantilever-beam-b33` | `/steps/Step-1/frames/0/nodal/reaction` | `reference/cantilever beam/cantilever beam reactions.csv`: `RM-RM1/RM-RM2/RM-RM3 -> RM1/RM2/RM3` | preserved instance + source node; global nodal | `1e-3 + 1e-6*reference_scale` per moment component | HDF5-to-read-only CSV plus moment equilibrium | ready for implementation planning; comparison not run |
| section axial force | 031, 036-042 | `cantilever-beam-b33` | `/steps/Step-1/frames/0/element/section_resultant` | `reference/cantilever beam/cantilever beam elemental forces.csv`: `SF-SF1 -> N` | positive-local-x endpoint projected to eligible source node station | `1e-3 + 1e-6*reference_scale` for `N` | endpoint consistency, deterministic station selection, HDF5-to-CSV | ready for implementation planning; comparison not run |
| section moments/torsion | 031, 036-042 | `cantilever-beam-b33` | `/steps/Step-1/frames/0/element/section_resultant` | `reference/cantilever beam/cantilever beam elemental forces.csv`: `SM-SM1 -> My`, `SM-SM2 -> Mz`, `SM-SM3 -> T` | positive-local-x endpoint projected to eligible source node station; beam local | `1e-3 + 1e-6*reference_scale` separately for `My`, `Mz`, `T` | endpoint consistency, deterministic station selection, HDF5-to-CSV | ready for implementation planning; comparison not run |
| equilibrium end action | 031, 035, 043 | analytical models and physics portfolio | `/steps/Step-1/frames/0/element/end_force_local` | Abaqus CSV N/A for direct outward-action comparison | element endpoint `xi=-1,+1`; local outward action `[FX,FY,FZ,MX,MY,MZ]` | analytical normalized `1e-12`; residual `1e-10` | unit/analytical end-sign tests and later physics sanity | planned |
| generalized strain/resultant | 029, 031, 035 | code and analytical models | `/steps/Step-1/frames/0/element/generalized_strain` and `/steps/Step-1/frames/0/element/generalized_resultant` | Abaqus CSV N/A | two Gauss points; beam local | matrix/formulation normalized `1e-12`, analytical relative `1e-9` | formulation/unit/HDF5 schema tests | planned |
| axial stress | 029, 032, 035 | axial/local-z analytical models | `/steps/Step-1/frames/0/element/stress_s11` | stress CSV N/A; Abaqus beam stress reference comparison N/A | element, Gauss point, input section point or `fesa-default` centroid | analytical relative `1e-9`; exact unit/row schema | unit/analytical recovery and HDF5 schema tests | planned; reference N/A |
For every matched reference group,
`reference_scale=max(abs(Abaqus reference rows))` for the same model, step/frame, quantity and
component, and `row_tolerance=absolute_floor+1e-6*reference_scale`. Abaqus values alone set the
scale. A zero scale uses only the floor. Every row decision and max absolute, component-scale
normalized, RMS, norm and worst-row/component metrics must be reported.
### Complete must-requirement coverage
Every approved `must` requirement is connected below to a model/test/quantity or an explicit
non-reference governance check. `N/A` means that an Abaqus CSV is not the applicable evidence;
it does not waive the requirement.
| requirement | model/test/quantity or explicit N/A | planned verification |
| --- | --- | --- |
| `FESA-REQ-LS3DEB-001` | `smoke-b33-cli`; `neg-b33-input-contract` second-step case | positive single-step and structured rejection test |
| `FESA-REQ-LS3DEB-002` | all analytical B33 records | model-validation and formulation scope tests; CSV N/A except approved benchmark |
| `FESA-REQ-LS3DEB-003` | all code/analytical records; displacement/reaction rows | exact DOF/component-order tests |
| `FESA-REQ-LS3DEB-004` | axial, torsion and both bending records | four independent analytical solution tests |
| `FESA-REQ-LS3DEB-005` | `smoke-b33-cli`, `cantilever-beam-b33` | B33 semantic mapping and artifact type precheck |
| `FESA-REQ-LS3DEB-006` | `neg-b33-input-contract` B31 case | exact `unsupported-element-formulation` test |
| `FESA-REQ-LS3DEB-007` | four cantilevers and prescribed-displacement record | DOF 1..6 load/BC and nonzero `dc` tests |
| `FESA-REQ-LS3DEB-008` | `an-b33-line-load-kernel`; negative `*DLOAD` case | closed-form vector and unsupported parser tests; reference CSV N/A |
| `FESA-REQ-LS3DEB-009` | `smoke-b33-cli`, keyword table tests, approved legacy input | exact positive keyword inventory |
| `FESA-REQ-LS3DEB-010` | parser code-verification cases | case/comment/source-label preservation tests; CSV N/A |
| `FESA-REQ-LS3DEB-011` | analytical load/BC decks and invalid arity/target cases | target expansion and row grammar tests |
| `FESA-REQ-LS3DEB-012` | both bending and rotated-space records | property/axis mapping and transform checks |
| `FESA-REQ-LS3DEB-013` | all analytical records; invalid property cases | `G` calculation and positive property tests |
| `FESA-REQ-LS3DEB-014` | `neg-b33-input-contract` geometry cases; `NR-T05` | exact scale-aware length/projection boundary tests |
| `FESA-REQ-LS3DEB-015` | multi-instance semantic fixture and all HDF5/reference identities | stable source/internal identity tests |
| `FESA-REQ-LS3DEB-016` | multi-instance semantic fixture | distinct deterministic identity test; reference CSV N/A |
| `FESA-REQ-LS3DEB-017` | invalid instance-transform case | exact diagnostic test |
| `FESA-REQ-LS3DEB-018` | invalid nested/dependent cases | structured unsupported tests |
| `FESA-REQ-LS3DEB-019` | `cantilever-beam-b33` input and allowlist table cases | warning/no-op and no semantic-effect tests |
| `FESA-REQ-LS3DEB-020` | unknown-keyword negative case and `smoke-b33-cli` | error plus mandatory-output independence test |
| `FESA-REQ-LS3DEB-021` | Domain/AnalysisModel code-verification fixture | non-copy/non-mutation ownership tests; CSV N/A |
| `FESA-REQ-LS3DEB-022` | DOF/scatter/reconstruction code-verification fixture | DofManager ownership and exact mapping tests; CSV N/A |
| `FESA-REQ-LS3DEB-023` | `smoke-b33-cli` and HDF5 state fixture | required/excluded state allocation tests; CSV N/A |
| `FESA-REQ-LS3DEB-024` | `cv-b33-patch-rigid-assembly`, `NR-T11` | repeated thread-count CSR determinism test; CSV N/A |
| `FESA-REQ-LS3DEB-025` | math/adapter dependency fixtures | storage/layout and public dependency review; CSV N/A |
| `FESA-REQ-LS3DEB-026` | orchestration event-trace fixture | exact factorize-before-load order test; CSV N/A |
| `FESA-REQ-LS3DEB-027` | `an-b33-prescribed-displacement` | effective RHS, reconstruction and residual reaction test |
| `FESA-REQ-LS3DEB-028` | `smoke-b33-cli` writer failure/success fixtures | authoritative output and atomicity tests; CSV N/A |
| `FESA-REQ-LS3DEB-029` | HDF5 rows in this Coverage Matrix | exact path/shape/component schema test |
| `FESA-REQ-LS3DEB-030` | `smoke-b33-cli`; `cantilever-beam-b33` provenance | ordinary unit label and external SI metadata tests |
| `FESA-REQ-LS3DEB-031` | all code/analytical models and three legacy CSV quantities | recovery component/location and mandatory-output tests |
| `FESA-REQ-LS3DEB-032` | axial/local-z analytical stress; HDF5 `stress_s11` | stress unit/analytical/schema tests; Abaqus stress comparison N/A |
| `FESA-REQ-LS3DEB-033` | `smoke-b33-cli`, diagnostic negative cases | CLI exit-code/field/order integration tests; CSV N/A |
| `FESA-REQ-LS3DEB-034` | every implementation model/test | per-step RED/GREEN/VERIFY and full MSVC/CTest evidence; model CSV N/A |
| `FESA-REQ-LS3DEB-035` | `NR-T01` through `NR-T11` and analytical inventory | exact numerical criteria in model records |
| `FESA-REQ-LS3DEB-036` | `cantilever-beam-b33` and comparison-policy unit fixtures | Abaqus-only component scale and exact formula tests |
| `FESA-REQ-LS3DEB-037` | same comparison fixtures, including zero-scale groups | exact SI floors and zero-scale tests |
| `FESA-REQ-LS3DEB-038` | malformed reference cases in `neg-b33-input-contract` | pre-tolerance fail-fast and no-clamp/no-drop tests |
| `FESA-REQ-LS3DEB-039` | verification-report schema fixture | every row decision and aggregate/worst metrics test |
| `FESA-REQ-LS3DEB-040` | exact legacy Artifact Bundle Contract | inventory plus `git diff --exit-code -- reference/` process check |
| `FESA-REQ-LS3DEB-041` | approved artifact precheck | four files, B33, exact headers, unique keys, finite values |
| `FESA-REQ-LS3DEB-042` | three comparison quantities and station normalization | exact component mapping, endpoint consistency and no-average tests |
| `FESA-REQ-LS3DEB-043` | gate audit; later physics portfolio | reference execution N/A at this step; enforce build/test -> comparison -> physics -> release order |
| `FESA-REQ-LS3DEB-044` | process/Git diff audit and limitations review | no reference execution/mutation and no out-of-scope support claim |
## Artifact Acceptance Checklist
Read-only inventory inspection on `2026-08-09` established the following pre-implementation facts:
- all four exact legacy paths exist;
- the input declares `TYPE=B33`;
- each CSV trimmed header matches the documented `abaqus-cae-report-csv-v0` inventory;
- each CSV has 11 data rows with a unique `(Frame, Part Instance Name, Node Label)` key;
- every projected numeric field is finite and every row has the header arity;
- generator, source commit, SI units, coordinates, step/increment/time and tolerance provenance are
recorded in the approved design and this contract;
- absent `metadata.json` is allowed by project-wide policy; legacy `README.md` and stress CSV are accepted N/A exceptions;
- no reference value was recalculated and no comparison was performed.
Before an actual comparison, tooling must repeat all artifact checks, verify the exact Frame and
instance identities, compare the complete projected row sets, and stop on any failure. The Step AC
must also show no working-tree diff under `reference/`. Passing this checklist is not a reference
comparison pass.
## Open Issues and Downstream Handoff
### Open issues
- No missing artifact or user decision blocks implementation planning for the approved legacy
model.
- `NR-O01` (official oneMKL PARDISO contract) and `NR-O02` (deterministic duplicate-reduction
algorithm) remain implementation-planning inputs, not reference artifact defects.
- Future reversed, branched, loaded-interior or section-jump reference models require an
element-aware canonical CSV schema; the legacy node-station schema must not be generalized.
### Implementation Planning Agent
Use this order for tests that must fail before their production implementation:
1. Hermite/DOF/sign and `B` checks.
2. Gauss/closed stiffness, rigid modes, rank and energy.
3. Rotation/local-axis and signed line-load kernel.
4. Axial, torsion, local-y and local-z analytical cantilevers.
5. Nonzero prescribed displacement, SPD/residual and deterministic assembly.
6. Parser invalid-input portfolio and CLI/HDF5 output contract.
7. Legacy artifact precheck, row projection and tolerance/report policy.
Keep reference comparison after the full MSVC build/test gate and do not require new Abaqus
artifacts for code/analytical fixtures.
### Reference Verification Agent
Run `ARTIFACT CHECK -> HDF5 ROW PROJECTION -> EXACT ROW-SET CHECK -> ENDPOINT CONSISTENCY ->
COMPONENT-SCALE COMPARE -> REPORT`. Use only the exact legacy files and the HDF5 paths/component
mappings in the Coverage Matrix. Do not synthesize `SF2/SF3` or stress rows, clamp values, omit
rows, average interior endpoints, or change the approved tolerance.
### Physics Evaluation Agent
Only after reference comparison passes, check global force/moment equilibrium, reaction sign,
displacement direction, bending symmetry, outward end action versus positive-face section
resultant consistency, and normalized residual. The approved reference model is one local-z
bending cantilever; broader physical coverage comes from the analytical portfolio, not an inflated
claim about the single CSV bundle.
### I/O Definition Agent
No upstream contract revision is requested. If a future reference model needs an element-aware row
identity, define and approve that schema separately without changing the read-only legacy aliases.
+284
View File
@@ -0,0 +1,284 @@
# Linear Static 3D Euler Beam Release Report
## Metadata
- feature_id: `linear-static-3d-euler-beam`
- approved_design: `docs/superpowers/specs/2026-08-08-linear-static-3d-euler-beam-design.md` (`status: approved`; approved 2026-08-08, amended 2026-08-09)
- source_requirement: `docs/requirements/linear-static-3d-euler-beam.md`
- source_research: `docs/research/linear-static-3d-euler-beam-research.md`
- source_formulation: `docs/formulations/3d-isoparametric-euler-beam-formulation.md`
- source_numerical_review: `docs/numerical-reviews/linear-static-3d-euler-beam-review.md`
- source_io_definition: `docs/io-definitions/linear-static-3d-euler-beam-io.md`
- source_reference_model: `docs/reference-models/linear-static-3d-euler-beam-reference-models.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`
- source_build_test_report: `docs/build-test-reports/linear-static-3d-euler-beam.md`
- source_reference_verification_report: `docs/reference-verifications/linear-static-3d-euler-beam-reference-verification.md`
- source_physics_evaluation_report: `docs/physics-evaluations/linear-static-3d-euler-beam-physics-evaluation.md`
- audited_head: `822b06be3d2128d5dfdc5e394078abbb9dcd5a50`
- reference_model_id: `cantilever-beam-b33`
- reference_schema: `abaqus-cae-report-csv-v0`
- reference_baseline: `reference/cantilever beam/` at source commit `2b34d0b`
- status: `ready-for-release`
- owner_agent: `release-agent`
- date: `2026-08-10`
- final_review_source_head: `b7a1258ce0f36a85b888e23470cf9d936a7595cd`
This is an internal feature-readiness verdict. It authorizes no publish, deploy, package, tag,
push, external release, or reference-artifact operation.
## Release Scope
| item | included | excluded | notes |
| --- | --- | --- | --- |
| analysis | one small-displacement/small-rotation `*STEP, *STATIC` linear solve | multiple steps; geometric/material nonlinearity; dynamics; contact; thermal | Stiffness/partition and `Kff` factorization precede load assembly, effective RHS, and substitution. |
| element | straight, prismatic, two-node 3D Euler-Bernoulli beam mapped only from `TYPE=B33` | `TYPE=B31`, shear-deformable/Timoshenko, curved/tapered/released/offset/warping members | Axial, two-plane bending, and Saint-Venant torsion are included. |
| material/section | homogeneous isotropic linear elasticity; positive `E,G,A,Iy,Iz,J`; `I12=0` | `I12!=0`, anisotropy, plasticity, temperature dependence, warping data | Mapping is `n1 -> local y`, `t x n1 -> local z`, `Iy=I11`, `Iz=I22`. |
| Abaqus input subset | approved keyword inventory, identity part/assembly/instance wrappers, `*BOUNDARY`, nodal `*CLOAD` | full compatibility, instance transforms, nested assembly, dependent/independent mesh semantics, `*DLOAD` | Approved output-request allowlist is warning no-op and cannot filter FESA output. |
| solver/storage | deterministic COO-to-0-based-CSR, oneTBB element-local work, oneMKL PARDISO SPD factorization/substitution | alternate solver claims, automatic regularization, unsupported conditioning policy | Backend types remain behind adapters. |
| authoritative output | HDF5 `results.h5`: displacement, reaction, equilibrium end action, section/generalized results, axial `S11`, metadata, diagnostics | official FESA CSV output; transverse/torsional shear stress; warping stress; nodal stress averaging | Beam stress reference comparison is N/A; `S11` remains mandatory and is analytically/schema tested. |
| reference comparison | exact read-only legacy B33 four-file bundle; displacement, reaction, section resultant | Abaqus stress CSV; broad B33 compatibility; reference solver execution | 176/176 rows and 16/16 metrics passed the approved mixed tolerance. |
## Gate Evidence Inventory
| gate | source | expected status | observed status/evidence | verdict |
| --- | --- | --- | --- | --- |
| approved design | approved design | `approved` | `approved`; same feature and legacy baseline | pass |
| requirements | requirements baseline | `approved` | `approved`; 44 consecutive `must` rows | pass |
| research | research brief | `ready-for-formulation` | `ready-for-formulation`; applicability limits retained | pass |
| formulation | formulation document | `ready-for-numerical-review` | `ready-for-numerical-review`; exact requirement/design links | pass |
| numerical review | numerical review | `pass-for-implementation-planning` | `pass-for-implementation-planning`; no confirmed mathematical defect | pass |
| I/O definition | I/O contract | `ready-for-implementation-planning` | `ready-for-implementation-planning` | pass |
| reference model | reference-model contract | `ready-for-implementation-planning` | legacy inventory/provenance and analytical portfolio defined | pass |
| implementation plan | implementation plan | `ready-for-implementation` | `ready-for-implementation`; TASK-07 through TASK-24 defined | pass |
| implementation evidence | implementation report plus phase index | all Step 7-24 blocks completed | 18/18 Step blocks and index entries `completed`; final cumulative suite 83 tests | pass with stale-header note below |
| build/test | build/test report | `pass-for-reference-verification` | `pass-for-reference-verification`; fresh MSVC x64 Debug build, warning count 0, 83/83 | pass |
| reference verification | reference-verification report | `pass-for-physics-evaluation` | `pass-for-physics-evaluation`; 176/176 rows and 16/16 metrics | pass |
| physics evaluation | physics-evaluation report | `pass-for-release-agent` | `pass-for-release-agent`; all documented physics checks and 17/17 targeted tests pass | pass |
| phase sequence | phase index | Steps 0-27 `completed` | 28/28 prerequisite entries completed in gate order | pass |
### Identity and contradiction audit
- All feature-level reports use `linear-static-3d-euler-beam`, the same approved design path,
authoritative HDF5 contract, logical model `cantilever-beam-b33`, legacy schema, and exact
`reference/cantilever beam/` baseline from `2b34d0b`.
- The formulation metadata uses the narrower element-document identity
`3d-isoparametric-euler-beam`. This is not a competing release feature: it names the exact
formulation path referenced by the approved feature requirements, design, numerical review,
I/O contract, reference-model contract, and implementation plan. Its `source_requirement` and
`approved_design` links establish the same release lineage.
- The implementation report aggregate metadata still says `status: in-progress`. This is a stale
aggregate header, not an unresolved release gate: every TASK-07 through TASK-24 block is
`completed`, all corresponding phase-index entries are `completed`, Step 25 independently audited
all 18 blocks, and a fresh build/discovery/full CTest passed 83/83. The Step 25 report reaches the
same explicit nonblocking conclusion. The upstream implementation report was not modified.
- Final review reproduced that the former Step 26 sample acceptance probe rejected a valid
`passed=true` artifact because it read a nonexistent string `status`. The phase probe now reads
the authoritative boolean `passed`; its exact command was rerun successfully without changing
source, tests, tolerance, or reference artifacts.
- The Step 25 prose contains a typo in the input SHA-256. Fresh Step 26/27 hashes, Git diff/status,
exact row reconstruction, and passing comparison evidence preserve artifact identity.
## Acceptance Traceability
Evidence aliases used below are exact upstream identities: `BT25` is the build/test report;
`RV26` is the reference-verification report; `PE27` is the physics-evaluation report. Model IDs
(`an-*`, `cv-*`, `neg-b33-input-contract`, `cantilever-beam-b33`) and `NR-T01` through `NR-T11`
are defined by the approved reference-model and numerical-review documents. Every row has priority
`must` in the approved Requirement Verification Matrix.
| requirement | acceptance criterion | exact test/evidence IDs | reference or analytical evidence | final disposition |
| --- | --- | --- | --- | --- |
| `FESA-REQ-LS3DEB-001` | One static step runs; a second step is rejected structurally. | `T12-MAP-001`, `T12-MAP-004`, `T13-MODEL-003`, `T24-CLI-001` | `smoke-b33-cli`; `neg-b33-input-contract`; `BT25` | released-in-V0 |
| `FESA-REQ-LS3DEB-002` | Accepted models obey the straight/prismatic/two-node, small linear-static scope and exclusions are not claimed. | `T12-MAP-001`, `T12-MAP-004`, `T16-BEAM-006`, `T24-ORCH-002` | `CB-AXIAL-TIP`, `CB-TORSION-TIP`, both bending candidates; `PE27` model coverage | released-in-V0 |
| `FESA-REQ-LS3DEB-003` | DOF and nodal-result order is exactly `[UX,UY,UZ,URX,URY,URZ]`. | `T14-DOF-001`, `T15-STATE-002`, `T23-HDF5-001` | `cantilever-beam-b33`; `RV26` HDF5 audit | released-in-V0 |
| `FESA-REQ-LS3DEB-004` | Axial, torsion, local-y bending, and local-z bending recover approved analytical quantities. | `T16-BEAM-006`, `T22-RECOVERY-004`, `NR-T08-ANALYTICAL` | `an-b33-axial-cantilever`, `an-b33-torsion-cantilever`, `an-b33-local-y-bending`, `an-b33-local-z-bending`; `PE27` | released-in-V0 |
| `FESA-REQ-LS3DEB-005` | Only B33 creates the approved Euler beam semantic object. | `T12-MAP-001`, `T24-B33-001` | `cantilever-beam-b33`; `RV26` confirms `TYPE=B33` | released-in-V0 |
| `FESA-REQ-LS3DEB-006` | B31 returns exact `unsupported-element-formulation` and creates no Euler beam. | `T12-MAP-004` | `CB-B31-NEGATIVE`; `neg-b33-input-contract` | released rejection behavior; B31 unsupported |
| `FESA-REQ-LS3DEB-007` | DOFs 1..6 map correctly and nonzero `dc` affects RHS and reaction. | `T14-DOF-002`, `T19-CONSTRAINT-003`, `T21-LOAD-001`, `T21-LOAD-003`, `T22-RECOVERY-001` | `an-b33-prescribed-displacement`; `NR-T09-PARTITION-SPD`; `PE27` | released-in-V0 |
| `FESA-REQ-LS3DEB-008` | Closed-form line-load vector passes while parser/CLI `*DLOAD` and Domain distributed load remain absent. | `T16-BEAM-005`, `T12-MAP-005`, `NR-T06-LINE-LOAD` | `an-b33-line-load-kernel`; `PE27` targeted portfolio | released kernel; `*DLOAD` unsupported |
| `FESA-REQ-LS3DEB-009` | Every approved keyword has positive coverage and no unlisted support claim exists. | `T12-MAP-001`, `T12-MAP-004` | `smoke-b33-cli`; exact I/O keyword inventory; legacy input | released approved subset only |
| `FESA-REQ-LS3DEB-010` | Case variants/comments behave correctly and raw source identity survives. | `T11-SYN-001`, `T11-SYN-002`, `T10-DOM-001` | legacy input exact-byte identity `fnv1a64:04543464cc970405`; `RV26` | released-in-V0 |
| `FESA-REQ-LS3DEB-011` | Only approved boundary/load arities and DOFs pass; target expansion is deterministic. | `T12-MAP-001`, `T12-MAP-002`, `T12-MAP-004`, `T14-DOF-002`, `T21-LOAD-001` | analytical load/BC fixtures; invalid-target portfolio | released-in-V0 |
| `FESA-REQ-LS3DEB-012` | Section properties and right-handed local-axis mapping match the contract. | `T12-MAP-001`, `T12-MAP-004`, `T16-BEAM-004`, `NR-T05-TRANSFORM` | both bending models; `an-b33-rotated-space`; `PE27` local/global signs | released-in-V0 |
| `FESA-REQ-LS3DEB-013` | Valid `E,nu`/derived `G` and positive section properties pass; malformed/nonpositive data fails. | `T12-MAP-001`, `T12-MAP-004`, `T16-BEAM-007` | analytical inventory; `neg-b33-input-contract` invalid properties | released-in-V0 |
| `FESA-REQ-LS3DEB-014` | Exact scale-aware length/guide thresholds reject boundary failures and valid geometry gives an orthonormal frame. | `T12-MAP-004`, `T16-BEAM-004`, `T16-BEAM-007`, `NR-T05-TRANSFORM` | `neg-b33-input-contract`; rotated-space analytical model | released-in-V0 |
| `FESA-REQ-LS3DEB-015` | Instance/source labels round-trip to stable unique internal IDs. | `T10-DOM-001`, `T10-DOM-002`, `T12-MAP-002`, `T23-HDF5-001` | multi-instance semantic fixture; `RV26` model identity audit | released-in-V0 |
| `FESA-REQ-LS3DEB-016` | Multiple identity instances remain distinct and deterministic. | `T10-DOM-003`, `T12-MAP-002` | multi-instance semantic fixture; reference CSV N/A | released-in-V0 |
| `FESA-REQ-LS3DEB-017` | Instance translation/rotation fails with exact `unsupported-instance-transform`. | `T12-MAP-004` | `neg-b33-input-contract` transform case | released rejection behavior; transforms unsupported |
| `FESA-REQ-LS3DEB-018` | Nested/dependent constructs fail structurally and produce no Domain model. | `T12-MAP-004` | `neg-b33-input-contract` nested/dependent cases | released rejection behavior; nested assembly unsupported |
| `FESA-REQ-LS3DEB-019` | Exact no-op allowlist emits deterministic warnings without semantic effect. | `T12-MAP-003`, `T23-HDF5-002`, `T23-HDF5-003` | legacy input/output requests; `RV26` mandatory-output audit | released-in-V0 |
| `FESA-REQ-LS3DEB-020` | Unlisted model keywords fail and allowed output requests cannot suppress mandatory HDF5 output. | `T12-MAP-004`, `T23-HDF5-002`, `T24-CLI-003` | `smoke-b33-cli`; `RV26` exact HDF5 inventory | released-in-V0 |
| `FESA-REQ-LS3DEB-021` | Active-step view neither copies nor mutates Domain. | `T10-DOM-002`, `T13-MODEL-002` | architecture/code-verification fixture; reference CSV N/A | released-in-V0 |
| `FESA-REQ-LS3DEB-022` | DofManager exclusively owns mapping/scatter/reconstruction; Node/Element have no equation IDs. | `T14-DOF-001`, `T14-DOF-003`, `T14-DOF-004`, `T19-CONSTRAINT-001` | code/dependency audit; reference CSV N/A | released-in-V0 |
| `FESA-REQ-LS3DEB-023` | Required V0 state is connected to output and excluded state is unallocated. | `T15-STATE-001`, `T15-STATE-002`, `T23-HDF5-001` | `smoke-b33-cli`; `RV26` HDF5 audit | released-in-V0 |
| `FESA-REQ-LS3DEB-024` | Repeated/thread-varied assembly has identical CSR order and values. | `T17-PFOR-002`, `T18-SPARSE-002`, `T18-SPARSE-004`, `T18-SPARSE-005`, `NR-T11-DETERMINISTIC-ASSEMBLY` | `cv-b33-patch-rigid-assembly`; reference CSV N/A | released-in-V0 |
| `FESA-REQ-LS3DEB-025` | Backend types do not leak and dense/sparse storage matches contract. | `T07-BUILD-002`, `T09-DENSE-001`, `T09-DENSE-002`, `T18-SPARSE-001`, `T20-PARDISO-004`; Step 25 dependency scans | adapter/code audit; `BT25` | released-in-V0 |
| `FESA-REQ-LS3DEB-026` | Event trace is stiffness/partition/factorize/load/RHS/solve with separate factorization. | `T20-PARDISO-002`, `T24-ORCH-001` | lifecycle event-trace fixture; `BT25` | released-in-V0 |
| `FESA-REQ-LS3DEB-027` | Effective RHS, full displacement, and residual reaction satisfy partition equations. | `T19-CONSTRAINT-001`, `T19-CONSTRAINT-003`, `T21-LOAD-003`, `T22-RECOVERY-001`, `T22-RECOVERY-002`, `NR-T09-PARTITION-SPD` | `an-b33-prescribed-displacement`; `PE27` residual/reaction checks | released-in-V0 |
| `FESA-REQ-LS3DEB-028` | Success atomically produces final HDF5 and failure leaves no incomplete final file. | `T23-HDF5-004`, `T23-HDF5-005`, `T24-CLI-001` | CLI writer success/failure fixtures; `RV26` authoritative output | released-in-V0 |
| `FESA-REQ-LS3DEB-029` | Every schema-v0 path exists at frame 0 with exact rank/component identity. | `T23-HDF5-001`, `T24-B33-001` | `RV26` read-only HDF5 schema audit | released-in-V0 |
| `FESA-REQ-LS3DEB-030` | Metadata fields, ordinary unit label, and external SI provenance are exact. | `T07-BUILD-001`, `T23-HDF5-001`, `T24-CLI-001`, `T24-B33-001` | `cantilever-beam-b33`; `RV26` metadata/source-identity audit | released-in-V0 |
| `FESA-REQ-LS3DEB-031` | Component order and endpoint/Gauss locations are exact and output-request independent. | `T15-STATE-002`, `T16-BEAM-006`, `T22-RECOVERY-003`, `T23-HDF5-001`, `T23-HDF5-002`, `T24-CLI-003` | all analytical models; `RV26`; `PE27` end/section checks | released-in-V0 |
| `FESA-REQ-LS3DEB-032` | Correct `S11` rows/default centroid exist, no shear stress is emitted, and stress reference is N/A. | `T16-BEAM-008`, `T22-RECOVERY-005`, `T23-HDF5-003`, `T24-B33-001` | axial/local-z analytical stress; `RV26` Stress Reference Status; `PE27` stress sanity | released; Abaqus stress reference N/A |
| `FESA-REQ-LS3DEB-033` | Default/explicit output and exact exit-code/ordered-diagnostic contract pass. | `T08-CORE-002`, `T24-CLI-001`, `T24-CLI-002` | CLI negative portfolio; `BT25` | released-in-V0 |
| `FESA-REQ-LS3DEB-034` | Every production step has RED, GREEN, focused/full VERIFY, discovery, and no warning. | `T07-*` through `T24-*`; TASK-07 through TASK-24 report blocks | `BT25`: 18/18 blocks audited, fresh warning count 0, 83 discovered, 83/83 pass | satisfied |
| `FESA-REQ-LS3DEB-035` | All matrix, mode, residual, transform, partition, and analytical thresholds pass. | `T16-BEAM-001` through `T16-BEAM-010`; `T18-SPARSE-004`; `T19-CONSTRAINT-003`; `T20-PARDISO-001`, `T20-PARDISO-006`; `T22-RECOVERY-002`; `NR-T01` through `NR-T11` | analytical portfolio; `PE27` exact targeted 17/17 | satisfied |
| `FESA-REQ-LS3DEB-036` | Abaqus-only component scale and exact mixed formula apply to every row. | `T24-REF-002`, `T24-B33-001` | `RV26`: 176 recalculated row decisions, 16 metrics | satisfied |
| `FESA-REQ-LS3DEB-037` | Exact SI floors and zero-scale behavior are applied. | `T24-REF-002`, `T24-B33-001` | `RV26` component table includes zero-scale groups and exact floors | satisfied |
| `FESA-REQ-LS3DEB-038` | Invalid row/schema/identity/nonfinite cases fail before tolerance; no clamp/drop occurs. | `T24-REF-001`, `T24-REF-002` | malformed contract fixtures; `RV26` zero missing/extra/duplicate/nonfinite rows | satisfied |
| `FESA-REQ-LS3DEB-039` | Every row decision and aggregate/worst metric is present. | `T24-REF-003`, `T24-B33-001` | `RV26`: 176 ledger rows, 16 component metrics, exact recomputation | satisfied |
| `FESA-REQ-LS3DEB-040` | Exact legacy filenames exist and reference content is unchanged. | `T11-SYN-004`, `T24-B33-001`; `BT25`/`RV26`/`PE27` reference diff/status checks | exact approved four-file bundle and pre/post hashes | satisfied legacy exception |
| `FESA-REQ-LS3DEB-041` | Four-file/B33/header/key/finite precheck passes before comparison with approved failure classes. | `T24-REF-001`, `T24-B33-001` | `RV26` Artifact Inventory: 4 files, 11/11/11 rows, finite/unique | satisfied |
| `FESA-REQ-LS3DEB-042` | Exact component/source identity and endpoint-consistency/no-average policy pass. | `T22-RECOVERY-006`, `T24-REF-004`, `T24-B33-001` | `RV26`: displacement 66, reaction 66, section 44; endpoint consistency true | satisfied |
| `FESA-REQ-LS3DEB-043` | Build precedes reference, reference precedes physics, and physics covers required checks. | `BT25`, `RV26`, `PE27`; phase Steps 25-27 | `PE27`: force/moment equilibrium, reaction, displacement, symmetry, section/end force, residual and coverage pass | satisfied |
| `FESA-REQ-LS3DEB-044` | No reference solver/artifact mutation occurs and release claims no excluded support. | `T12-MAP-004`, `T12-MAP-005`; `BT25`/`RV26`/`PE27` no-change assertions; Step 28 Git audit | exact legacy diff/status clean; this report's Release Scope and Known Limitations | satisfied |
Audit result: all 44 expected `must` requirements have an acceptance criterion, exact executable
or gate evidence, reference/analytical evidence or an explicit applicable N/A, and a final
disposition. No must requirement is deferred or blocked.
## Validation Evidence
| command or report | expected | observed | result |
| --- | --- | --- | --- |
| Step 25 fresh MSVC x64 Debug configure/build | exit 0; `/W4 /WX`; no warnings | exit 0; warning scan 0 | pass |
| Step 25 CTest discovery/full | nonzero discovery; zero failures | 83 discovered; feature 83/83; full 83/83 | pass |
| exact Build/Test gate string | `status: pass-for-reference-verification` | present | pass |
| exact Reference Verification gate string and result probe | `status: pass-for-physics-evaluation`; `passed=true` | present; corrected exact acceptance command and comparison test pass | pass |
| exact Physics Evaluation gate string | `status: pass-for-release-agent` | present; targeted physics selection 17/17 | pass |
| reference comparison | exact rows/metrics; approved tolerance | 176/176 rows, 16/16 metrics, `passed=true`; largest normalized error `0.026602795021994977 < 1` | pass |
| physics sanity | equilibrium/sign/symmetry/section/residual/coverage pass | force `1.1921e-13`, moment `2.7418e-13`, free residual `9.3563e-13`; all checks pass | pass |
| phase prerequisites | Steps 0-27 completed | all 28 prerequisite entries completed | pass |
## Release Checklist
- [x] Approved design, requirements, research, formulation, numerical, I/O, and reference-model evidence is present.
- [x] TASK-07 through TASK-24 implementation evidence is complete and independently audited.
- [x] Exact three-gate status strings are present and passing.
- [x] All 44 `must` requirements are traced to acceptance, exact evidence, reference/analytical coverage, and disposition.
- [x] Reference bundle identity and read-only status are preserved.
- [x] Known limitations, accepted Minors, evidence limitations, and explicit N/A items are documented.
- [x] No Critical, unresolved Important, defect, missing artifact, failed command, or user decision blocks internal readiness.
## Known Limitations
| limitation | category | user impact | disposition |
| --- | --- | --- | --- |
| Abaqus `TYPE=B31` / Timoshenko | element/input | rejected as `unsupported-element-formulation`; no shear-deformable beam behavior | documented, deferred feature |
| multiple analysis steps | analysis/input | a second `*STEP` is rejected; no step-to-step propagation | documented, deferred feature |
| instance transforms and nested/dependent assembly | model/input | translation/rotation and nested semantics are rejected | documented, deferred feature |
| `I12!=0` and section extensions | section/physics | coupled inertia, taper, offsets, releases, curved geometry, and warping are unsupported | documented, deferred feature |
| Abaqus `*DLOAD` | load/input | parser/CLI reject it; only the formulation-level constant local line-load kernel exists | documented, deferred feature |
| nonlinear/dynamic/contact/thermal | analysis/physics | no geometric/material nonlinearity, dynamics, contact, or thermal response | documented, deferred feature |
| shear and warping stress | output/physics | no transverse/torsional shear-stress or warping-stress recovery; no nodal averaging | documented, deferred feature |
| beam stress reference | verification | axial `S11` is mandatory and analytically/schema tested, but Abaqus stress reference is N/A | accepted contract N/A |
| approved four-file legacy exception | artifacts | spaces and legacy names remain; `metadata.json` is absent-allowed by project-wide policy, while `README.md` and stress CSV are N/A only for this bundle | read-only accepted filename/README exception; not precedent for new bundles |
| reference coverage | verification | single identity-axis local-z B33 cantilever does not itself cover axial/torsion/local-y/rotated/prescribed/line-load/nonzero-fiber stress | accepted; complementary analytical/unit portfolio passes |
| Euler-Bernoulli applicability | modeling | deep/short beams may be too stiff; no automatic slenderness threshold is approved | documented modeling limit |
| energy evidence | output | no HDF5 energy dataset; Step 27 derives positive `0.5*F^T*d` and uses rank/energy tests | accepted evidence limit |
| comparator file-type depth (Minor) | test evidence | test-only comparator pins float64 types but relies on writer self-check/full schema tests for exact uint64/compound/string file types | accepted defense-in-depth coverage limit |
| multi-source diagnostic order (Minor) | portability/future scope | sorter is sufficient for V0 single-input CLI but is not the future multi-source declaration/internal-ID ordering contract | accepted V0 limit |
| HDF5 `libmmd.dll` staging guard (Minor) | environment portability | unconditional guard is correct for approved shared-HDF5 environment; alternate HDF5 targets may need adjustment | accepted external portability limit |
| stale implementation aggregate header | documentation | top-level `in-progress` can confuse readers despite completed evidence | documented nonblocking stale header; upstream unchanged |
## Release Notes Draft
### Feature Summary
- Adds the internally release-ready FESA V0 end-to-end single-step linear-static 3D
Euler-Bernoulli beam pipeline for Abaqus `TYPE=B33` input.
- Supports stable identity instances, deterministic DOF/sparse assembly, separate PARDISO
factorization/substitution, nonzero prescribed displacement, residual reactions, and atomic
HDF5 `results.h5` output.
- Writes mandatory displacement, reaction, equilibrium end action, endpoint section resultant,
generalized strain/resultant, and axial `S11` regardless of Abaqus output requests.
### Verification Scope
- Fresh Visual Studio 18 2026/MSVC x64 Debug build passed under `/W4 /WX` with zero warnings and
all 83 discovered tests passing.
- The approved read-only `cantilever-beam-b33` bundle passed all 176 displacement/reaction/section
rows and all 16 metric groups under `absolute_floor + 1e-6 * reference_scale`.
- Physics evaluation passed force/moment equilibrium, reactions, displacement/rotation signs,
zero symmetry, end/section balance, local/global mapping, residual, `S11`, energy/modes, and
complementary analytical coverage.
### Main Limitations
- No B31, multiple steps, transforms/nested assembly, `I12!=0`, `*DLOAD`, nonlinear, dynamic,
contact, thermal, shear-stress, or warping-stress support.
- Abaqus beam stress reference comparison is N/A; nonzero `S11` evidence is analytical/unit-based.
- The legacy space-containing four-file reference bundle is a read-only exception. New bundles
must use canonical names and metadata.
- The single Abaqus cantilever is supplemented by analytical/unit models and does not establish
full Abaqus B33 compatibility or experimental validation.
- Accepted Minor test-depth and alternate-environment portability limits remain as documented in
Known Limitations.
### Artifacts
- Authoritative solver output for a run: HDF5 `results.h5`.
- Approved reference baseline: `reference/cantilever beam/` exact four-file legacy bundle.
- Gate evidence: the Build/Test, Reference Verification, and Physics Evaluation reports listed in
Metadata; deterministic build-local `comparison.json` is review evidence, not solver output.
## Release Verdict
- verdict: `ready-for-release`
- status: `ready-for-release`
- reason: all required upstream gates are present and passing, Steps 0-27 are completed, all 44
must requirements have complete acceptance/test/reference/disposition traceability, reference
identity is unchanged, known limitations and accepted risks are documented, and no unresolved
blocker exists.
- authority_boundary: internal feature readiness only; no publish, deploy, package, tag, push,
external release, or reference-artifact change is authorized. Harness-owned phase evidence
commits remain part of the internal development workflow, not release publication.
## Handoff Recommendation
| target_agent | reason | required input |
| --- | --- | --- |
| Coordinator Agent | Close the internal feature workflow with `ready-for-release`. | This report, exact three-gate reports, phase index Step 28 completion, and the documented authority boundary. |
| Correction Agent | N/A; no implementation-owned blocker exists. | N/A |
| Reference Verification Agent | N/A; required comparison passed. | N/A |
| Physics Evaluation Agent | N/A; required physics review passed. | N/A |
No release engineering, packaging, publication, tag, push, or external coordination was performed.
Harness/root phase-evidence commits are internal workflow records, not an external release action.
## No-Change Assertion
- source_files_modified: `false`
- test_files_modified: `false`
- cmake_files_modified: `false`
- requirements_or_upstream_contracts_modified: `false`
- implementation_report_modified: `false`
- build_report_modified: `false`
- reference_verification_report_modified_for_review_fix: `true`
- physics_report_modified: `false`
- reference_artifacts_modified: `false`
- tolerance_policies_modified: `false`
- Abaqus_or_other_reference_solver_executed: `false`
- release_agent_publish_deploy_package_tag_push_commit_performed: `false`
- harness_or_root_phase_evidence_commits_performed: `true`
- owned_release_report_created: `true`
- phase_index_step28_modified: `true`
- phase_step26_acceptance_modified_for_review_fix: `true`
- phase_index_step26_summary_modified_for_review_fix: `true`
- notes: The release audit initially created this report and changed only Step 28. Final review
then aligned the Step 26 acceptance probe/report/index summary with authoritative `passed=true`;
source, tests, tolerance, reference artifacts, and physical evidence remain unchanged.
## Open Issues
- Blocking issues: none.
- Nonblocking documentation issue: the implementation report aggregate `status: in-progress` is
stale; completed Step blocks, phase index, and Step 25 fresh audit are authoritative for release
closure. It remains unchanged to preserve upstream audit independence.
- Resolved final-review finding: Step 26 now probes authoritative `passed=true`, and the exact
acceptance command passes. The remaining Step 25 input-hash prose typo is nonblocking; later
exact hashes and Git audits resolve identity without changing artifacts.
- Nonblocking accepted Minors: comparator file-type defense-in-depth coverage, future multi-source
diagnostic ordering, and alternate-HDF5 `libmmd.dll` staging portability remain as documented.
- Deferred behavior is limited to the Known Limitations and is not claimed as supported.
@@ -0,0 +1,224 @@
# Linear Static 3D Euler Beam Requirements
## Metadata
- feature_id: `linear-static-3d-euler-beam`
- title: `Linear Static 3D Euler Beam`
- status: `approved`
- owner_agent: `requirement-agent`
- date: `2026-08-09`
- approved_design: `docs/superpowers/specs/2026-08-08-linear-static-3d-euler-beam-design.md`
- approval_basis: design `status: approved`, user approval on `2026-08-08`, and amendment on `2026-08-09`
- source_formulation: `docs/formulations/3d-isoparametric-euler-beam-formulation.md`
- reference_baseline: `reference/cantilever beam/` at source commit `2b34d0b`
## Purpose
이 baseline은 승인된 Abaqus `.inp` subset을 입력으로 받아 2절점 3차원
EulerBernoulli beam의 단일 선형 정적 step을 해석하고, 검증 가능한 변위, 반력,
요소 결과와 축응력을 authoritative `results.h5`에 기록하는 FESA V0 기능을 정의한다.
이 문서는 승인 설계를 검증 가능한 `shall` 요구조건으로 전사하며 Abaqus full
compatibility, 새로운 수학 계약 또는 새로운 구현 정책을 추가하지 않는다.
## In Scope
- 입력 파일당 하나의 `*STEP, *STATIC` 선형 정적 해석
- small displacement, small rotation, 균질 선형 등방 탄성
- 2절점 직선 prismatic 3D EulerBernoulli beam과 Abaqus `TYPE=B33`
- 절점당 전역 자유도 `[UX, UY, UZ, URX, URY, URZ]`
- 축 변형, 두 방향 굽힘, Saint-Venant 비틀림
- nodal concentrated load와 zero/nonzero prescribed displacement
- formulation 검증용 constant local line-load equivalent nodal vector kernel
- identity `*PART/*ASSEMBLY/*INSTANCE` wrapper와 stable source identity
- deterministic COO-to-CSR assembly, element-local oneTBB 계산, MKL PARDISO factorization/substitution
- HDF5 displacement, reaction, equilibrium end action, section resultant, generalized strain/resultant, axial `S11`
- 승인된 `reference/cantilever beam/` legacy B33 bundle의 displacement, reaction, section resultant comparison
## Out Of Scope
- Abaqus full compatibility와 Abaqus `TYPE=B31` Timoshenko beam
- 다중 analysis step과 step 간 load/BC propagation
- instance translation/rotation, nested assembly, dependent/independent mesh semantics
- `I12 != 0`, taper, offset, release, curved beam, warping
- Abaqus `*DLOAD` 입력과 Domain distributed-load object
- 기하·재료비선형, dynamics, contact, thermal effects
- transverse shear stress와 torsional shear stress recovery
- beam stress에 대한 Abaqus reference comparison
- Abaqus, Nastran 또는 다른 reference solver 실행과 reference artifact 생성·수정·복원
## Analysis Definition
- analysis_type: single-step linear static
- kinematics: small displacement and small rotation
- element: two-node straight prismatic 3D EulerBernoulli beam, Abaqus `TYPE=B33`
- nodal_dofs: global `[UX, UY, UZ, URX, URY, URZ]`
- deformation_modes: axial, local-y/local-z bending, Saint-Venant torsion
- material_model: homogeneous isotropic linear elasticity from `E` and `nu`
- boundary_conditions: DOF 1 through 6, including nonzero prescribed displacement
- loads: nodal concentrated load; formulation-only constant local line-load kernel
- local_coordinate_system: `t -> local x`, Abaqus first section axis `n1 -> local y`, `t x n1 -> local z`, right-handed
- units: input uses a user-consistent unit system; the approved cantilever reference bundle is SI
- authoritative_output: HDF5 `results.h5`
## Input Requirements
- **FESA-REQ-LS3DEB-001** — The FESA solver shall accept exactly one `*STEP` containing `*STATIC` per input file and shall reject a second analysis step with a structured unsupported diagnostic.
- **FESA-REQ-LS3DEB-002** — The FESA solver shall analyze only straight, prismatic, two-node 3D EulerBernoulli beams under small-displacement, small-rotation, linear-static assumptions.
- **FESA-REQ-LS3DEB-003** — The FESA solver shall assign each beam node the six global DOFs `[UX, UY, UZ, URX, URY, URZ]` in that order.
- **FESA-REQ-LS3DEB-004** — The FESA solver shall support axial deformation, bending about both local section axes, Saint-Venant torsion, and homogeneous isotropic linear elasticity.
- **FESA-REQ-LS3DEB-005** — The FESA solver shall map only `*ELEMENT, TYPE=B33` to the V0 EulerBernoulli beam formulation.
- **FESA-REQ-LS3DEB-006** — The FESA solver shall reject `*ELEMENT, TYPE=B31` with `unsupported-element-formulation` and shall not reinterpret B31 as B33.
- **FESA-REQ-LS3DEB-007** — The FESA solver shall support nodal `*CLOAD` and `*BOUNDARY` data for DOFs 1 through 6, including nonzero prescribed displacement.
- **FESA-REQ-LS3DEB-008** — The element verification contract shall include a constant local line-load equivalent nodal vector kernel, while the V0 parser and CLI shall not support `*DLOAD` or create a Domain distributed-load object.
- **FESA-REQ-LS3DEB-009** — The parser shall support exactly `*HEADING`; `*PART`, `*END PART`; `*NODE`; `*ELEMENT, TYPE=B33`; `*NSET`, `*ELSET`, including `GENERATE`; `*MATERIAL`, `*ELASTIC`; `*BEAM GENERAL SECTION, SECTION=GENERAL`; `*SECTION POINTS`; `*ASSEMBLY`, `*END ASSEMBLY`; `*INSTANCE`, `*END INSTANCE`; `*BOUNDARY`; `*CLOAD`; `*STEP`, `*STATIC`, and `*END STEP` as model/procedure keywords.
- **FESA-REQ-LS3DEB-010** — The parser shall interpret keyword and parameter names case-insensitively, recognize `**` comment lines, and preserve source label text for external identity.
- **FESA-REQ-LS3DEB-011** — The parser shall accept `*BOUNDARY` rows only as `target, first_dof, last_dof[, value]`, default an omitted value to zero, and accept `*CLOAD` rows only as `target, dof, magnitude`; targets shall resolve by source node label or node set, including assembly-level sets with `INSTANCE`.
- **FESA-REQ-LS3DEB-012** — The semantic mapping shall read general-section data as `A, I11, I12, I22, J`, require `I12=0`, map `Iy=I11` and `Iz=I22`, and construct local axes as `n1 -> y` and `t x n1 -> z`.
- **FESA-REQ-LS3DEB-013** — A general beam section shall reference a material whose isotropic `*ELASTIC` data provides exactly `E, nu`; the solver shall compute `G=E/(2(1+nu))` and require positive `E`, `G`, `A`, `Iy`, `Iz`, and `J`.
- **FESA-REQ-LS3DEB-014** — Before element calculation, the solver shall require `L > 1e-12 * max(1, norm(X1), norm(X2))` and `norm(a_perp) > 1e-12 * max(1, norm(a))`; zero/near-zero length, a zero guide vector, and a tangent-parallel guide vector shall produce structured model-validation diagnostics.
- **FESA-REQ-LS3DEB-015**`*PART/*ASSEMBLY/*INSTANCE` mapping shall preserve `SourceEntityId { instance_name, source_label }` for nodes, elements, and sets and shall map it deterministically to a separate stable Domain internal index.
- **FESA-REQ-LS3DEB-016** — The semantic model shall allow multiple identity instances of the same part without merging their source identities.
- **FESA-REQ-LS3DEB-017** — An instance containing translation or rotation data shall be rejected with `unsupported-instance-transform`.
- **FESA-REQ-LS3DEB-018** — Nested assembly and dependent/independent mesh semantics shall be rejected as unsupported rather than silently approximated.
- **FESA-REQ-LS3DEB-019** — The parser shall issue structured warnings and no-op the exact allowlist `*PREPRINT`, `*RESTART`, `*TRANSVERSE SHEAR STIFFNESS`, `*OUTPUT, FIELD`, `*OUTPUT, HISTORY`, `*NODE OUTPUT`, `*ELEMENT OUTPUT`, `*CONTACT OUTPUT`, and unsupported variable data belonging to those output requests.
- **FESA-REQ-LS3DEB-020** — Unsupported model-affecting keywords outside the no-op allowlist shall be errors, and accepted Abaqus output requests shall not change or suppress FESA's mandatory HDF5 results.
## Architecture and Execution Requirements
- **FESA-REQ-LS3DEB-021**`Domain` shall own the complete parsed model and remain effectively immutable after mapping; `AnalysisModel` shall expose references or IDs for the single active step without copying Domain objects.
- **FESA-REQ-LS3DEB-022**`DofManager` alone shall own node DOF definitions, full/free equation numbering, constrained/free mappings, element scatter maps, sparse patterns, and full/reduced vector reconstruction; Node and Element shall not store equation IDs.
- **FESA-REQ-LS3DEB-023** — V0 `AnalysisState` shall own full displacement, external/internal force, residual, constrained reaction, step/frame identity, and element recovery rows and shall not allocate velocity, acceleration, temperature, iteration history, or nonlinear element state.
- **FESA-REQ-LS3DEB-024** — Element-local stiffness work shall use the `ParallelFor`/oneTBB boundary, and global assembly shall deterministically reduce element contributions in stable element order from COO triplets into a 0-based CSR matrix.
- **FESA-REQ-LS3DEB-025** — MKL, TBB, and HDF5 API/types shall remain behind the `LinearSolver`, `ParallelFor`, dense/sparse math, and `ResultsWriter` adapter boundaries; `Vector` shall use contiguous doubles, `Matrix` row-major contiguous doubles, and `SparseMatrix` a separate 0-based CSR representation.
- **FESA-REQ-LS3DEB-026** — The linear-static lifecycle shall assemble and partition stiffness, call `Kff` factorization, and only then assemble the full load vector, form the effective RHS, and perform substitution; factorization and substitution shall remain observably separate.
- **FESA-REQ-LS3DEB-027** — For prescribed displacement `dc`, the solver shall form `rhs=Ff-Kfc*dc`, reconstruct the full displacement after substitution, and recover constrained reaction from `K*d-F`, equivalently `Rc=Kcf*df+Kcc*dc-Fc`, rather than a separate end-force sum.
## Output Requirements
- **FESA-REQ-LS3DEB-028** — The sole authoritative solver output shall be HDF5 `results.h5`; the writer shall complete a temporary file before replacing the final path and shall leave no incomplete final file after a writer failure.
- **FESA-REQ-LS3DEB-029** — HDF5 schema v0 shall contain `/metadata`, `/model/nodes`, `/model/elements`, `/steps/<step-name>/frames/0/nodal/displacement`, `/steps/<step-name>/frames/0/nodal/reaction`, `/steps/<step-name>/frames/0/element/end_force_local`, `/steps/<step-name>/frames/0/element/section_resultant`, `/steps/<step-name>/frames/0/element/generalized_strain`, `/steps/<step-name>/frames/0/element/stress_s11`, and `/diagnostics`.
- **FESA-REQ-LS3DEB-030** — HDF5 metadata/model identity shall record schema version, solver version, source input identity, unit-system label, coordinate convention, element formulation, stable internal IDs, and instance/source-label mappings; ordinary input shall use `user-consistent-unspecified`, while the approved cantilever comparison shall apply its external SI contract without inferring SI from `.inp` alone.
- **FESA-REQ-LS3DEB-031** — Output shall include every node's global displacement/reaction in `[UX, UY, UZ, URX, URY, URZ]`, local endpoint equilibrium end actions in `[FX,FY,FZ,MX,MY,MZ]`, endpoint section resultants in `[N,T,My,Mz]`, and generalized strain/resultant values at the two Gauss points, independent of Abaqus output requests.
- **FESA-REQ-LS3DEB-032** — The solver shall output axial `S11` at both Gauss points and each input section point, or at centroid `(0,0)` with `source=fesa-default` when section points are absent; transverse/torsional shear stress shall not be recovered, and Abaqus beam-stress reference comparison shall remain explicit N/A while analytical/unit and HDF5 schema tests remain mandatory.
- **FESA-REQ-LS3DEB-033** — The CLI shall support `fesa.exe <model.inp> --output <results.h5>`, default output to the current directory's `results.h5`, use exit codes `0=success`, `2=usage`, `3=input`, `4=model`, `5=solver`, `6=HDF5`, and emit `severity`, `code`, `file`, `line`, `keyword`, `entity_identity`, and `message` diagnostics to stderr in deterministic order.
## Verification Requirements
- **FESA-REQ-LS3DEB-034** — Every production C++ behavior shall be developed in one step as GoogleTest `RED -> GREEN -> VERIFY`, with a related C++ test file, focused CTest evidence, full MSVC x64 Debug build/CTest evidence, at least one discovered test, and no new warning under the FESA target's `/W4 /WX` policy.
- **FESA-REQ-LS3DEB-035** — Numerical tests shall satisfy normalized `1e-12` for stiffness symmetry and two-point-Gauss/closed-form agreement, normalized `1e-10` for rigid-mode and linear-system residual, and relative `1e-9` for analytical solutions, while checking six rigid modes, rank 6, positive deformation energy, transformation orthogonality/energy invariance, prescribed-displacement recovery, and axial/torsion/two-plane bending benchmarks.
## Verification Quantities
- nodal_displacement: required, global six components, HDF5-to-Abaqus CSV comparison
- reaction: required, global six components plus global force/moment equilibrium
- equilibrium_end_action: required, local endpoint six components; unit/analytical and physics tests
- section_resultant: required, endpoint `[N,T,My,Mz]`, node-station-normalized reference comparison
- generalized_strain_and_resultant: required at two Gauss points; formulation and schema tests
- stress: axial `S11` required; Abaqus reference comparison N/A
- residual: required, free-DOF and normalized global equilibrium checks
- energy_and_modes: required for symmetry, rank, rigid modes, and transform invariance
## Tolerance Policy
- **FESA-REQ-LS3DEB-036** — The approved B33 reference comparison shall group rows by the same model, step/frame, quantity, and component, compute `reference_scale` only from read-only Abaqus values, and apply `absolute_floor + 1e-6 * reference_scale` to every matched row.
- **FESA-REQ-LS3DEB-037** — For the approved SI bundle, displacement and rotation shall use `absolute_floor=1e-9`, force and moment shall use `absolute_floor=1e-3`, and a zero component scale shall use the applicable absolute floor alone.
- **FESA-REQ-LS3DEB-038** — Reference values shall not be zero-clamped and rows shall not be dropped; missing, extra, duplicate, nonfinite, schema-mismatched, or identity-mismatched rows shall fail before tolerance evaluation.
- **FESA-REQ-LS3DEB-039** — The verification report shall record every row decision and maximum absolute error, component-scale normalized error, RMS error, norm error, and worst row/component for each compared quantity.
## Reference Artifact Requirements
The approved logical model is `cantilever-beam-b33`, schema is
`abaqus-cae-report-csv-v0`, source commit is `2b34d0b`, generator is
`Abaqus/CAE Learning Edition 2024`, and the coordinate/output contract is global Cartesian
nodal output plus beam-local section-force output at `Step-1`, increment 1, step time 1.0.
- **FESA-REQ-LS3DEB-040** — The V0 reference baseline shall use the exact read-only files `reference/cantilever beam/cantilever beam.inp`, `reference/cantilever beam/cantilever beam displacements.csv`, `reference/cantilever beam/cantilever beam reactions.csv`, and `reference/cantilever beam/cantilever beam elemental forces.csv` without rename, rewrite, correction, or restoration; absent `metadata.json` is allowed by project-wide policy and `README.md` is N/A for this approved legacy bundle.
- **FESA-REQ-LS3DEB-041** — Before comparison, artifact validation shall confirm all four files, `TYPE=B33`, expected CAE report headers, unique row keys, and finite values; failure shall be classified as `needs-reference-artifacts` or `schema-mismatch` and comparison shall not start.
- **FESA-REQ-LS3DEB-042** — Reference verification shall compare displacement by source-node identity (`U1/U2/U3/UR1/UR2/UR3`), reaction by source-node identity (`RF1/RF2/RF3/RM1/RM2/RM3`), and node-station-normalized section resultant by `SF1->N`, `SM1->My`, `SM2->Mz`, `SM3->T`; adjacent interior endpoints shall first agree within approved tolerance and shall not be averaged to hide a mismatch.
- **FESA-REQ-LS3DEB-043** — Reference comparison shall run only after build/test passes; physics sanity shall run only after reference comparison passes and shall check global force/moment equilibrium, reaction sign, displacement direction, symmetry, element section-force consistency, and normalized residual; release readiness shall require all prior gate evidence and known limitations.
- **FESA-REQ-LS3DEB-044** — FESA agents and Harness shall not execute Abaqus, Nastran, or another reference solver and shall not create, modify, rename, or restore reference artifacts; release documentation shall not claim support for any Out Of Scope behavior.
## Requirement Verification Matrix
| id | statement | category | rationale | source | priority | verification_method | acceptance_criteria | tolerance | downstream_agents | status |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| FESA-REQ-LS3DEB-001 | The FESA solver shall accept exactly one `*STEP` containing `*STATIC` per input file and shall reject a second analysis step with a structured unsupported diagnostic. | analysis | Preserve the approved V0 single-step boundary. | Approved design §§2, 6.1; PRD FESA-PRD-011 | must | Parser/semantic unit test; CLI integration test | One static step runs; a second step fails with a structured unsupported diagnostic. | N/A | io-definition-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-002 | The FESA solver shall analyze only straight, prismatic, two-node 3D EulerBernoulli beams under small-displacement, small-rotation, linear-static assumptions. | analysis | Bound the formulation and validation domain. | Approved design §2; formulation §2 | must | Model validation test; formulation review | Accepted models satisfy every listed assumption and excluded procedures are not represented as supported. | N/A | research-agent; formulation-agent; numerical-review-agent | approved |
| FESA-REQ-LS3DEB-003 | The FESA solver shall assign each beam node the six global DOFs `[UX, UY, UZ, URX, URY, URZ]` in that order. | analysis | Keep assembly and result components deterministic. | Approved design §§2, 4.3 | must | DofManager unit test; HDF5 schema test | DOF mapping and nodal result columns use the exact approved order. | Exact ordering | formulation-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-004 | The FESA solver shall support axial deformation, bending about both local section axes, Saint-Venant torsion, and homogeneous isotropic linear elasticity. | analysis | Define the complete V0 beam physics. | Approved design §2; formulation §§2, 10 | must | Element unit tests; analytical benchmarks | Axial, torsion, local-y bending, and local-z bending cases recover the approved analytical quantities. | Relative `1e-9` analytical | research-agent; formulation-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-005 | The FESA solver shall map only `*ELEMENT, TYPE=B33` to the V0 EulerBernoulli beam formulation. | input | Preserve Abaqus element-family meaning. | Approved design §6.3; PRD FESA-PRD-011 | must | Parser/semantic unit test | B33 creates the approved beam semantic object and reaches model validation. | N/A | io-definition-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-006 | The FESA solver shall reject `*ELEMENT, TYPE=B31` with `unsupported-element-formulation` and shall not reinterpret B31 as B33. | input | B31 includes transverse shear deformation. | Approved design §§2.2, 6.3; ADR-013 | must | Parser diagnostic test | B31 fails with the exact approved diagnostic code and creates no Euler beam. | Exact diagnostic code | io-definition-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-007 | The FESA solver shall support nodal `*CLOAD` and `*BOUNDARY` data for DOFs 1 through 6, including nonzero prescribed displacement. | input | Exercise constrained partition and RHS correction. | Approved design §§2.1, 6.1, 7 | must | Parser test; constraint/load integration test | DOFs 1..6 map correctly and nonzero `dc` contributes to effective RHS and reaction. | Residual normalized `1e-10` | io-definition-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-008 | The element verification contract shall include a constant local line-load equivalent nodal vector kernel, while the V0 parser and CLI shall not support `*DLOAD` or create a Domain distributed-load object. | scope | Verify the formulation without widening CLI input. | Approved design §§2.1, 2.2, 4.5 | must | Element unit test; parser negative test | The closed-form equivalent vector passes and `*DLOAD` is rejected without a Domain distributed-load object. | Normalized `1e-12` kernel comparison | formulation-agent; io-definition-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-009 | The parser shall support exactly `*HEADING`; `*PART`, `*END PART`; `*NODE`; `*ELEMENT, TYPE=B33`; `*NSET`, `*ELSET`, including `GENERATE`; `*MATERIAL`, `*ELASTIC`; `*BEAM GENERAL SECTION, SECTION=GENERAL`; `*SECTION POINTS`; `*ASSEMBLY`, `*END ASSEMBLY`; `*INSTANCE`, `*END INSTANCE`; `*BOUNDARY`; `*CLOAD`; `*STEP`, `*STATIC`, and `*END STEP` as model/procedure keywords. | input | Avoid a full-compatibility claim. | Approved design §6.1; ADR-003 | must | Keyword inventory review; parser tests | Every listed keyword has positive coverage and no unlisted keyword is documented as supported. | Exact keyword inventory | io-definition-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-010 | The parser shall interpret keyword and parameter names case-insensitively, recognize `**` comment lines, and preserve source label text for external identity. | input | Match approved syntax and identity behavior. | Approved design §6.1 | must | Lexer/parser unit tests | Case variants parse equally, comments are ignored, and original label text survives mapping. | Exact source-label identity | io-definition-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-011 | The parser shall accept `*BOUNDARY` rows only as `target, first_dof, last_dof[, value]`, default an omitted value to zero, and accept `*CLOAD` rows only as `target, dof, magnitude`; targets shall resolve by source node label or node set, including assembly-level sets with `INSTANCE`. | input | Prevent ambiguous semantic mapping. | Approved design §6.1 | must | Parser positive/negative tests | Only approved row arities and DOFs 1..6 pass, and all approved target forms resolve deterministically. | N/A | io-definition-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-012 | The semantic mapping shall read general-section data as `A, I11, I12, I22, J`, require `I12=0`, map `Iy=I11` and `Iz=I22`, and construct local axes as `n1 -> y` and `t x n1 -> z`. | input | Preserve stiffness directions and signs. | Approved design §6.2; PRD FESA-PRD-019 | must | Section-mapping test; rotated-element test | Every property and right-handed local-axis mapping matches the approved contract. | Exact mapping; transform normalized `1e-12` | formulation-agent; io-definition-agent; numerical-review-agent | approved |
| FESA-REQ-LS3DEB-013 | A general beam section shall reference a material whose isotropic `*ELASTIC` data provides exactly `E, nu`; the solver shall compute `G=E/(2(1+nu))` and require positive `E`, `G`, `A`, `Iy`, `Iz`, and `J`. | input | Prevent nonphysical or indefinite stiffness. | Approved design §6.2; formulation §10 | must | Semantic/model validation tests | Complete valid data passes; malformed elasticity data or any nonpositive required property fails. | Input-consistent units; normalized `1e-12` for computed `G` | formulation-agent; io-definition-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-014 | Before element calculation, the solver shall require `L > 1e-12 * max(1, norm(X1), norm(X2))` and `norm(a_perp) > 1e-12 * max(1, norm(a))`; zero/near-zero length, a zero guide vector, and a tangent-parallel guide vector shall produce structured model-validation diagnostics. | input | Prevent singular geometry and undefined local axes. | Approved design §6.2; formulation §§3.1, 19 | must | Geometry validation tests | Values at or below either approved threshold fail and valid values produce a right-handed orthonormal frame. | Both thresholds use coefficient `1e-12` | numerical-review-agent; io-definition-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-015 | `*PART/*ASSEMBLY/*INSTANCE` mapping shall preserve `SourceEntityId { instance_name, source_label }` for nodes, elements, and sets and shall map it deterministically to a separate stable Domain internal index. | model | Make row mapping and diagnostics traceable. | Approved design §§4.1, 6.4 | must | Semantic mapping and determinism tests | Instance/source labels round-trip and map to stable unique internal IDs. | Exact identity | io-definition-agent; reference-model-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-016 | The semantic model shall allow multiple identity instances of the same part without merging their source identities. | model | Support approved wrapper reuse without transforms. | Approved design §§2.1, 6.4; ADR-013 | must | Multi-instance semantic integration test | Nodes, elements, and sets for each identity instance remain distinct and deterministic. | Exact identity | io-definition-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-017 | An instance containing translation or rotation data shall be rejected with `unsupported-instance-transform`. | model | V0 has no transform semantics. | Approved design §§2.2, 6.4 | must | Parser/semantic negative tests | Any translation or rotation data fails with the exact approved diagnostic code. | Exact diagnostic code | io-definition-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-018 | Nested assembly and dependent/independent mesh semantics shall be rejected as unsupported rather than silently approximated. | model | Prevent silent topology changes. | Approved design §§2.2, 6.4 | must | Semantic negative tests | Each excluded construct produces a structured unsupported diagnostic and no Domain model. | N/A | io-definition-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-019 | The parser shall issue structured warnings and no-op the exact allowlist `*PREPRINT`, `*RESTART`, `*TRANSVERSE SHEAR STIFFNESS`, `*OUTPUT, FIELD`, `*OUTPUT, HISTORY`, `*NODE OUTPUT`, `*ELEMENT OUTPUT`, `*CONTACT OUTPUT`, and unsupported variable data belonging to those output requests. | input | Accept the legacy input without changing analysis meaning. | Approved design §6.5; PRD FESA-PRD-013 | must | Parser diagnostic test | Every allowlisted keyword/data form yields deterministic warnings, no semantic effect, and no error. | Exact allowlist | io-definition-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-020 | Unsupported model-affecting keywords outside the no-op allowlist shall be errors, and accepted Abaqus output requests shall not change or suppress FESA's mandatory HDF5 results. | input/output | Keep the supported subset explicit. | Approved design §6.5; ADR-003 | must | Parser negative test; HDF5 integration test | An unlisted model keyword fails and mandatory datasets exist with or without allowed output requests. | Exact dataset inventory | io-definition-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-021 | `Domain` shall own the complete parsed model and remain effectively immutable after mapping; `AnalysisModel` shall expose references or IDs for the single active step without copying Domain objects. | architecture | Preserve approved ownership and activation boundaries. | Approved design §§4.1, 4.2; ADR-004 | must | Unit test; architecture review | Active-step view construction neither copies nor mutates Domain objects. | N/A | implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-022 | `DofManager` alone shall own node DOF definitions, full/free equation numbering, constrained/free mappings, element scatter maps, sparse patterns, and full/reduced vector reconstruction; Node and Element shall not store equation IDs. | architecture | Prevent distributed numbering state. | Approved design §4.3; ADR-004 | must | DofManager tests; dependency/code review | All maps reconstruct correctly and no Node or Element stores equation IDs. | Exact mapping | implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-023 | V0 `AnalysisState` shall own full displacement, external/internal force, residual, constrained reaction, step/frame identity, and element recovery rows and shall not allocate velocity, acceleration, temperature, iteration history, or nonlinear element state. | architecture | Keep V0 state minimal and traceable. | Approved design §4.4; PRD FESA-PRD-005 | must | State unit/integration tests | All required state is connected to output and every excluded state remains unallocated. | N/A | io-definition-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-024 | Element-local stiffness work shall use the `ParallelFor`/oneTBB boundary, and global assembly shall deterministically reduce element contributions in stable element order from COO triplets into a 0-based CSR matrix. | architecture | Ensure repeatable sparse assembly and reference rows. | Approved design §§2.1, 7; ADR-008, ADR-009 | must | Repeated assembly tests; CSR structure tests | Repeated and thread-count-varied runs produce identical CSR ordering and numerically identical values. | Stable ordering; normalized numeric `1e-12` | numerical-review-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-025 | MKL, TBB, and HDF5 API/types shall remain behind the `LinearSolver`, `ParallelFor`, dense/sparse math, and `ResultsWriter` adapter boundaries; `Vector` shall use contiguous doubles, `Matrix` row-major contiguous doubles, and `SparseMatrix` a separate 0-based CSR representation. | architecture | Isolate external backends from solver core. | Approved design §5; ADR-006 | must | Dependency review; math/backend unit tests | No public core API exposes backend types and every storage layout matches the approved contract. | N/A | implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-026 | The linear-static lifecycle shall assemble and partition stiffness, call `Kff` factorization, and only then assemble the full load vector, form the effective RHS, and perform substitution; factorization and substitution shall remain observably separate. | execution | Preserve reusable factorization and failure classification. | Approved design §§1, 7; ADR-007 | must | Orchestration test; solver-adapter test | The event trace is stiffness, partition, factorize, load, RHS, solve and no opaque solve hides factorization. | Exact event order | implementation-planning-agent; build-test-executor-agent | approved |
| FESA-REQ-LS3DEB-027 | For prescribed displacement `dc`, the solver shall form `rhs=Ff-Kfc*dc`, reconstruct the full displacement after substitution, and recover constrained reaction from `K*d-F`, equivalently `Rc=Kcf*df+Kcc*dc-Fc`, rather than a separate end-force sum. | execution | Correctly handle nonzero constraints and equilibrium. | Approved design §7; formulation §§15, 16.5 | must | Constraint/load integration and residual tests | RHS, full displacement, and constrained reactions match the approved partition equations. | Residual normalized `1e-10` | formulation-agent; numerical-review-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-028 | The sole authoritative solver output shall be HDF5 `results.h5`; the writer shall complete a temporary file before replacing the final path and shall leave no incomplete final file after a writer failure. | output | Prevent ambiguous or partial results. | Approved design §9; ADR-005 | must | HDF5 integration/atomicity tests | Success produces the final file and injected failure leaves no incomplete final `results.h5`. | N/A | io-definition-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-029 | HDF5 schema v0 shall contain `/metadata`, `/model/nodes`, `/model/elements`, `/steps/<step-name>/frames/0/nodal/displacement`, `/steps/<step-name>/frames/0/nodal/reaction`, `/steps/<step-name>/frames/0/element/end_force_local`, `/steps/<step-name>/frames/0/element/section_resultant`, `/steps/<step-name>/frames/0/element/generalized_strain`, `/steps/<step-name>/frames/0/element/stress_s11`, and `/diagnostics`. | output | Give downstream comparison a stable schema root. | Approved design §9 | must | HDF5 schema test | Every named path exists at frame 0 with documented identity and rank/component contracts. | Exact paths | io-definition-agent; reference-verification-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-030 | HDF5 metadata/model identity shall record schema version, solver version, source input identity, unit-system label, coordinate convention, element formulation, stable internal IDs, and instance/source-label mappings; ordinary input shall use `user-consistent-unspecified`, while the approved cantilever comparison shall apply its external SI contract without inferring SI from `.inp` alone. | output | Make results auditable without guessing units or identity. | Approved design §9; ADR-005 | must | Metadata/schema test; reference contract review | Every field is present, ordinary runs use the exact label, and legacy comparison records external SI provenance. | Exact labels and identity | io-definition-agent; reference-model-agent; reference-verification-agent | approved |
| FESA-REQ-LS3DEB-031 | Output shall include every node's global displacement/reaction in `[UX, UY, UZ, URX, URY, URZ]`, local endpoint equilibrium end actions in `[FX,FY,FZ,MX,MY,MZ]`, endpoint section resultants in `[N,T,My,Mz]`, and generalized strain/resultant values at the two Gauss points, independent of Abaqus output requests. | output | Separate equilibrium, section, and generalized results. | Approved design §§8, 9 | must | Recovery unit tests; HDF5 schema test | Every component order and endpoint/Gauss location matches the contract in runs with and without output requests. | Analytical `1e-9`; reference policy where applicable | formulation-agent; io-definition-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-032 | The solver shall output axial `S11` at both Gauss points and each input section point, or at centroid `(0,0)` with `source=fesa-default` when section points are absent; transverse/torsional shear stress shall not be recovered, and Abaqus beam-stress reference comparison shall remain explicit N/A while analytical/unit and HDF5 schema tests remain mandatory. | output | Retain useful stress recovery without inventing a reference baseline. | Approved design §§2.2, 8.3, 12 | must | Stress unit/analytical test; HDF5 schema test; report review | Correct stress rows and fallback label exist, no shear stress is emitted, and reference report marks stress N/A. | Analytical relative `1e-9`; Abaqus reference N/A | formulation-agent; io-definition-agent; reference-verification-agent | approved |
| FESA-REQ-LS3DEB-033 | The CLI shall support `fesa.exe <model.inp> --output <results.h5>`, default output to the current directory's `results.h5`, use exit codes `0=success`, `2=usage`, `3=input`, `4=model`, `5=solver`, `6=HDF5`, and emit `severity`, `code`, `file`, `line`, `keyword`, `entity_identity`, and `message` diagnostics to stderr in deterministic order. | output | Stabilize automation and failure classification. | Approved design §10 | must | CLI integration and diagnostic ordering tests | Default/explicit output works and every failure class returns its exact code and complete ordered fields. | Exact codes, fields, and order | io-definition-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-034 | Every production C++ behavior shall be developed in one step as GoogleTest `RED -> GREEN -> VERIFY`, with a related C++ test file, focused CTest evidence, full MSVC x64 Debug build/CTest evidence, at least one discovered test, and no new warning under the FESA target's `/W4 /WX` policy. | verification | Enforce project TDD and warning policy. | Approved design §§11.1, 11.4; ADR-012 | must | Implementation report; build/CTest logs | The related test fails first, then focused/full tests pass, discovery finds tests, and FESA emits no warning. | Zero test failures and new warnings | implementation-planning-agent; implementation-agent; build-test-executor-agent | approved |
| FESA-REQ-LS3DEB-035 | Numerical tests shall satisfy normalized `1e-12` for stiffness symmetry and two-point-Gauss/closed-form agreement, normalized `1e-10` for rigid-mode and linear-system residual, and relative `1e-9` for analytical solutions, while checking six rigid modes, rank 6, positive deformation energy, transformation orthogonality/energy invariance, prescribed-displacement recovery, and axial/torsion/two-plane bending benchmarks. | verification | Detect sign, integration, rank, and transform defects. | Approved design §§11.2, 11.3; formulation §18 | must | Unit, analytical, and orchestration tests | Every listed invariant and analytical case passes at its stated threshold. | `1e-12` matrix; `1e-10` residual; `1e-9` analytical | formulation-agent; numerical-review-agent; implementation-planning-agent | approved |
| FESA-REQ-LS3DEB-036 | The approved B33 reference comparison shall group rows by the same model, step/frame, quantity, and component, compute `reference_scale` only from read-only Abaqus values, and apply `absolute_floor + 1e-6 * reference_scale` to every matched row. | tolerance | Give zero and nonzero rows one deterministic rule. | Approved design §11.3; ADR-014 | must | Comparison unit/integration test; report review | Every group uses the Abaqus-only maximum absolute scale and every matched row uses the exact formula. | Relative coefficient `1e-6` | reference-model-agent; reference-verification-agent | approved |
| FESA-REQ-LS3DEB-037 | For the approved SI bundle, displacement and rotation shall use `absolute_floor=1e-9`, force and moment shall use `absolute_floor=1e-3`, and a zero component scale shall use the applicable absolute floor alone. | tolerance | Preserve dimensional meaning near zero. | Approved design §11.3; ADR-014 | must | Comparison tests with zero/near-zero rows | Each quantity uses its exact SI floor and zero-scale groups use no relative contribution. | SI `1e-9` displacement/rotation; `1e-3` force/moment | reference-model-agent; reference-verification-agent | approved |
| FESA-REQ-LS3DEB-038 | Reference values shall not be zero-clamped and rows shall not be dropped; missing, extra, duplicate, nonfinite, schema-mismatched, or identity-mismatched rows shall fail before tolerance evaluation. | tolerance | Prevent false passes through omission or clamping. | Approved design §§11.3, 12; ADR-014 | must | Negative comparison tests | Every listed invalid case fails before numeric comparison and zero values remain unchanged. | No ignored invalid rows | reference-verification-agent | approved |
| FESA-REQ-LS3DEB-039 | The verification report shall record every row decision and maximum absolute error, component-scale normalized error, RMS error, norm error, and worst row/component for each compared quantity. | tolerance | Make the pass/fail decision auditable. | Approved design §11.3; ADR-014 | must | Verification report schema/review | Per-row decisions and all required aggregate/worst metrics are present for every quantity. | Report completeness | reference-verification-agent; release-agent | approved |
| FESA-REQ-LS3DEB-040 | The V0 reference baseline shall use the exact read-only files `reference/cantilever beam/cantilever beam.inp`, `reference/cantilever beam/cantilever beam displacements.csv`, `reference/cantilever beam/cantilever beam reactions.csv`, and `reference/cantilever beam/cantilever beam elemental forces.csv` without rename, rewrite, correction, or restoration; absent `metadata.json` is allowed by project-wide policy and `README.md` is N/A for this approved legacy bundle. | reference | Protect the approved correctness baseline. | Approved design §12; ADR-010, ADR-014 | must | Artifact inventory; Git diff review | Exact filenames exist and no reference file is added, removed, renamed, or content-modified. | Exact path/content identity | reference-model-agent; reference-verification-agent; release-agent | approved |
| FESA-REQ-LS3DEB-041 | Before comparison, artifact validation shall confirm all four files, `TYPE=B33`, expected CAE report headers, unique row keys, and finite values; failure shall be classified as `needs-reference-artifacts` or `schema-mismatch` and comparison shall not start. | reference | Detect stale B31 or malformed evidence. | Approved design §§6.3, 12 | must | Artifact-check integration test | All checks pass before comparison and every failure uses an approved classification. | Exact inventory and schema | reference-model-agent; reference-verification-agent | approved |
| FESA-REQ-LS3DEB-042 | Reference verification shall compare displacement by source-node identity (`U1/U2/U3/UR1/UR2/UR3`), reaction by source-node identity (`RF1/RF2/RF3/RM1/RM2/RM3`), and node-station-normalized section resultant by `SF1->N`, `SM1->My`, `SM2->Mz`, `SM3->T`; adjacent interior endpoints shall first agree within approved tolerance and shall not be averaged to hide a mismatch. | reference | Compare equivalent quantities despite legacy station rows. | Approved design §§8.2, 12 | must | Reference comparison test/report | All components match by source identity and interior endpoints pass before deterministic representative selection. | Requirements 036 and 037 policy | io-definition-agent; reference-model-agent; reference-verification-agent | approved |
| FESA-REQ-LS3DEB-043 | Reference comparison shall run only after build/test passes; physics sanity shall run only after reference comparison passes and shall check global force/moment equilibrium, reaction sign, displacement direction, symmetry, element section-force consistency, and normalized residual; release readiness shall require all prior gate evidence and known limitations. | governance | Keep numerical similarity distinct from physical/release approval. | Approved design §§11, 12, 13 | must | Gate evidence audit | Each downstream report cites the preceding pass and physics evidence covers all six checks before release review. | Relevant upstream tolerances | coordinator-agent; physics-evaluation-agent; release-agent | approved |
| FESA-REQ-LS3DEB-044 | FESA agents and Harness shall not execute Abaqus, Nastran, or another reference solver and shall not create, modify, rename, or restore reference artifacts; release documentation shall not claim support for any Out Of Scope behavior. | governance | Prevent baseline contamination and scope inflation. | Approved design §§2.2, 12; ADR-010 | must | Process audit; Git diff; release documentation review | No reference execution or artifact mutation occurs and every exclusion is recorded without a support claim. | N/A | coordinator-agent; reference-model-agent; release-agent | approved |
## Open Questions
- 이 approved requirements baseline 안에는 사용자 결정을 기다리는 항목이 없다.
- source formulation의 `needs-research` 상태와 그 문서에 남은 evidence/open-issue 항목은 후속 Research, Formulation Alignment, Numerical Review gate에서 이 승인 baseline에 맞춰 해결해야 하며, 이 Step에서 새 정책으로 해소하지 않는다.
- 이 baseline의 수치, 단위, schema, keyword, reference 경로를 바꾸려면 요구조건 변경 승인과 downstream traceability 갱신이 필요하다.
## Downstream Handoff
### Research Agent
- B33/EulerBernoulli 의미, slender-beam 적용 한계, 두 방향 굽힘·비틀림 benchmark와 source reliability를 조사하되 승인 범위나 tolerance를 바꾸지 않는다.
- 확인된 사실과 추론을 분리하고 unresolved evidence gap을 명시한다.
### Formulation Agent
- source formulation의 feature/status를 이 baseline과 정렬하고 DOF 순서, local-axis, `theta_y=-dw/dx`, 2점 Gauss, stiffness/recovery 부호를 추적한다.
- 요구조건을 충족하는 수학 계약만 정리하고 C++ API나 input/output schema를 설계하지 않는다.
### I/O Definition Agent
- 요구조건 009~020과 028~033을 exact parser/model/HDF5 row schema와 diagnostic 계약으로 구체화한다.
- 최소 HDF5 path, stable source identity, ordinary-run unit label, legacy SI comparison provenance를 보존한다.
### Reference Model Agent
- 요구조건 036~044에 따라 read-only legacy inventory, provenance, row keys, component mapping, artifact precheck, tolerance coverage를 계약화한다.
- `reference/cantilever beam/`의 네 파일은 어떤 방식으로도 변경하지 않는다.
### Implementation Planning Agent
- 모든 `must` row를 테스트에 추적하고 C++ production 작업마다 같은 Step 안에서 RED/GREEN/VERIFY를 증명하는 계획을 작성한다.
- factorization-before-load orchestration, nonzero prescribed displacement, deterministic assembly, atomic HDF5, CLI diagnostics, reference precheck를 독립적으로 검증 가능하게 분해한다.
@@ -0,0 +1,165 @@
# Linear Static 3D Euler Beam Research Brief
## Metadata
- feature_id: `linear-static-3d-euler-beam`
- source_requirement: `docs/requirements/linear-static-3d-euler-beam.md`
- approved_design: `docs/superpowers/specs/2026-08-08-linear-static-3d-euler-beam-design.md`
- source_formulation: `docs/formulations/3d-isoparametric-euler-beam-formulation.md`
- status: `ready-for-formulation`
- owner_agent: `research-agent`
- date: `2026-08-09`
- evidence_route: configured FEM wiki at `C:\git\MultiPhysicsVault`; `wiki/hot.md` -> `wiki/index.md` -> selected wiki pages and their recorded raw-source chunks
- source_policy: verified external facts use Tier 1 or Tier 2 sources; approved FESA decisions and mathematical consequences are labeled `Project contract` or `Inference`
This brief supplies evidence for formulation alignment and later verification planning. It does not approve the existing formulation, define a C++ API, introduce a tolerance, or claim full Abaqus compatibility.
## Research Questions
1. What distinguishes Abaqus B31 from B33, and what supports treating only B33 as the EulerBernoulli member in FESA V0?
2. What evidence supports cubic Hermite bending interpolation, six free-element rigid modes, rank 6, two-point Gauss exactness, local/global transformation, and end-force sign checks for a two-node spatial Euler beam?
3. What do Abaqus general beam section data `A, I11, I12, I22, J`, the first section axis `n1`, beam resultants `SF*`/`SM*`, and axial `S11` mean?
4. Which axial, torsional, and two-plane bending cantilever cases provide analytical checks, and which quantities or behaviors do they not verify?
5. What technical evidence and limitations apply to SPD factorization, PARDISO selection, deterministic sparse assembly, and row-based reference comparison?
## Source Inventory
| id | document | provider_or_author | wiki page identity | original source/manual identity | reliability tier | applicable evidence |
| --- | --- | --- | --- | --- | --- | --- |
| S1 | Abaqus beam element and section documentation | Dassault Systèmes / SIMULIA | [[Abaqus Structural Element Families]]; [[Abaqus Beam and Shell Section Definitions]] | *Abaqus 2016 Analysis User's Guide, Volume IV: Elements*, sections 29.3.3, 29.3.4, 29.3.7, 29.3.8; vault chunks `AbaqusAnalysisUserGuide4_030.md`, `_031.md`, `_033.md`, `_035.md` | Tier 1 | B31/B33 family and interpolation classification, slender-beam limit, section axes/properties, beam output components |
| S2 | Beam and frame finite elements | Daryl L. Logan; Thomson | [[Beam and Frame Finite Elements]] | *A First Course in the Finite Element Method*, Fourth Edition, Chapter 4 and Gaussian quadrature material; chunks `AFirstCourseInTheFiniteElementMethod_018.md`, `_020.md`, `_049.md` | Tier 2 | EulerBernoulli assumptions, cubic Hermite interpolation, end-force signs, equivalent loads, cantilever checks, Gauss exactness |
| S3 | Static equation solution | Klaus-Jürgen Bathe | [[Static Equilibrium Equation Solvers]] | *Finite Element Procedures*, Second Edition (2014), Chapter 8; chunks `FiniteElementProcedures_072.md`, `_074.md`, `_076.md`, `_077.md` | Tier 2 | symmetry/positive-definiteness conditions, LDLT/Cholesky factorization, positive-pivot failure, conditioning limits |
| S4 | Isoparametric mapping and quadrature synthesis | FEM wiki, with Bathe, Logan, Abaqus, and local source provenance | [[Isoparametric Finite Elements]] | *Finite Element Procedures*; Logan textbook; *Abaqus Theory Manual*; *Abaqus Analysis User's Guide, Volume IV* | Tier 2 synthesis; Tier 1 where Abaqus-specific | natural coordinates, Jacobian mapping, quadrature choice, under-integration risk |
| S5 | FEM program verification workflow | FEM wiki, with textbook and official-manual provenance | [[Finite Element Program Implementation]]; [[Finite Element Modeling and Convergence Checks]] | *Finite Element Procedures*; Logan textbook; Abaqus user guides; production solver manuals | Tier 2 synthesis; Tier 1 for cited official-manual behavior | element-local/global separation, sparse assembly context, constraint/solve/recovery workflow, benchmark and equilibrium checks |
| P1 | Approved FESA feature contract | FESA project | N/A | approved requirements and design named in Metadata | Project contract, not external evidence | exact V0 scope, fixed tolerance policy, read-only reference inventory, required output and orchestration |
| P2 | Existing candidate formulation | FESA project | cites [[Beam and Frame Finite Elements]], [[Isoparametric Finite Elements]], and S5 pages | `docs/formulations/3d-isoparametric-euler-beam-formulation.md` | Candidate derivation, not an approved source | equations and sign choices that downstream Formulation and Numerical Review agents must check |
The wiki source records identify S1 as high-confidence manual provenance, S2 as a high-confidence textbook source, and S3 as a current textbook source. P1 and P2 are intentionally not assigned an external reliability tier.
## Extracted Facts
### B31, B33, and the supported EulerBernoulli meaning
- **F-01 — Verified, Tier 1 (S1):** Abaqus lists B33 as a two-node cubic three-dimensional beam and includes B33/B33H among its EulerBernoulli beam elements. These elements suppress transverse shear deformation and retain cross-sections normal to the beam axis in the no-warping idealization. [[Abaqus Structural Element Families]]
- **F-02 — Verified, Tier 1 (S1):** Abaqus lists B31 as a two-node linear three-dimensional Timoshenko beam. B31 allows transverse shear deformation, so interpreting B31 as the same formulation as a classical shear-free B33 changes the element meaning. [[Abaqus Structural Element Families]]
- **F-03 — Verified, Tier 1 (S1):** The manual gives a modeling guideline, not a universal acceptance threshold: for a homogeneous member, a typical cross-section dimension below roughly `1/15` of the typical axial distance makes transverse-shear flexibility negligible. [[Abaqus Structural Element Families]]
- **F-04 — Project-contract conclusion (P1), supported by F-01/F-02:** Mapping only `TYPE=B33` to the FESA EulerBernoulli element and rejecting B31 preserves the documented family distinction. This establishes a supported subset; it does not establish numerical or file-format equivalence with every Abaqus B33 capability.
- **F-05 — Applicability distinction, Tier 1 plus P1:** Abaqus documents its cubic beam for a wider small-strain/large-rotation setting, whereas FESA V0 deliberately restricts the model to small displacement and small rotation. The FESA restriction is narrower than the source element family. [[Abaqus Structural Element Families]]
### Interpolation, modes, integration, transformation, and signs
- **F-06 — Verified, Tier 2 (S2):** A two-node EulerBernoulli bending field has transverse displacement and slope/rotation at each node. A complete cubic field supplies the four interpolation conditions and is `C1` across connected beam elements; the functions are Hermite cubic interpolation functions. [[Beam and Frame Finite Elements]]
- **F-07 — Verified, Tier 2 (S2):** Gaussian quadrature with `n` points integrates a polynomial through degree `2n-1` exactly; two points therefore integrate a cubic polynomial exactly. [[Isoparametric Finite Elements]]
- **F-08 — Inference from F-07 and P2:** For the straight, constant-property FESA candidate, the bending rows of `B` are linear in the natural coordinate, so each entry of `B^T D B J` is at most quadratic. Two-point Gauss integration should reproduce the closed-form stiffness. This is a testable consequence, not final approval of the current `B` matrix.
- **F-09 — Verified principle, Tier 2 (S2/S4):** Spatial frame members transform nodal vectors between local member axes and the global system before assembly. An orthonormal, right-handed rotation preserves vector work; FESA energy-invariance and orthogonality checks are downstream consequences. [[Beam and Frame Finite Elements]]
- **F-10 — Inference from P2 and the 12-DOF model:** A free two-node spatial beam should have three translational and three rotational rigid-body modes. With six independent positive deformation modes, its 12-by-12 stiffness should have rank 6. The queried wiki does not state the exact FESA rank claim, so all six null vectors, six positive modes, and scale-aware rank classification require independent Numerical Review and executable tests.
- **F-11 — Verified sign risk, Tier 2 (S2):** Textbook beam nodal force and classical section-cut conventions can have opposite signs at an element end; local end forces must be defined as forces exerted on the element or on the adjoining cut, not inferred only from a component name. [[Beam and Frame Finite Elements]]
- **F-12 — Project-contract inference (P1/P2):** The approved FESA endpoint normalization and `theta_y=-dw/dx` determine the proposed end-action signs. S1 defines Abaqus output component meanings but does not prove the exact FESA-to-Abaqus endpoint section-cut sign transform. That transform remains an explicit review and reference-test item.
### Abaqus general beam section and output meanings
- **F-13 — Verified, Tier 1 (S1):** For `*BEAM GENERAL SECTION, SECTION=GENERAL`, the manual orders the direct geometric data as `A, I11, I12, I22, J` before optional warping-related terms. `A` is area, `I11` and `I22` are moments of inertia for bending about section axes 1 and 2, `I12` is the cross-bending inertia, and `J` is the Saint-Venant torsional constant. [[Abaqus Beam and Shell Section Definitions]]
- **F-14 — Verified, Tier 1 (S1):** Abaqus defines a local right-handed `(t,n1,n2)` beam section frame: `t` is positive from the first element node to the second, `n1` is the first beam section axis, and `n2` is the second section axis/beam normal. For a spatial beam, an approximate `n1` can be supplied with the section or an off-axis node. [[Abaqus Beam and Shell Section Definitions]]
- **F-15 — Mathematical inference from F-14 and Project contract P1:** In a right-handed frame, `n2=t x n1`; therefore the approved mapping `t -> local x`, `n1 -> local y`, and `t x n1 -> local z` is consistent with the manual axis order. `Iy=I11`, `Iz=I22`, and rejection of `I12!=0` are the approved FESA subset and must not be generalized to all Abaqus general sections.
- **F-16 — Verified, Tier 1 (S1):** Abaqus beam output defines `SF1` as axial force, `SM1` as bending moment about local section axis 1, `SM2` as bending moment about local section axis 2, and `SM3` as twisting moment about the beam axis. `SF2` and `SF3` are transverse shear components and are unavailable for B33/B33H. [[Abaqus Structural Element Families]]
- **F-17 — Verified, Tier 1 (S1):** `S11` is axial beam stress. Shear components documented for other beam/section cases do not establish that FESA V0 can recover them. [[Abaqus Beam and Shell Section Definitions]]
- **F-18 — Project-contract mapping (P1), supported by F-14/F-16:** With section axis 1 mapped to FESA local `y` and axis 2 to local `z`, the approved legacy comparison uses `SF1 -> N`, `SM1 -> My`, `SM2 -> Mz`, and `SM3 -> T`. The transverse `SF2/SF3` rows are outside the approved CSV comparison.
### Static solution, sparse assembly, and comparison evidence
- **F-19 — Verified, Tier 2 (S3):** Properly supported linear elastic FE systems commonly produce symmetric positive-definite coefficient matrices. Cholesky requires positive definiteness, and a nonpositive pivot indicates an invalid assumption, insufficient support, indefiniteness, or severe numerical difficulty rather than a result to accept silently. [[Static Equilibrium Equation Solvers]]
- **F-20 — Verified, Tier 2 (S3):** Matrix factorization and load-vector reduction/back substitution are distinct stages; retaining a factorization permits additional right-hand sides without repeating decomposition. [[Static Equilibrium Equation Solvers]]
- **F-21 — Project-contract inference (P1):** Using an SPD PARDISO mode for constrained `Kff` is consistent with F-19 only after positive section/material data and sufficient constraints remove all rigid modes. The FEM vault contains no Intel oneMKL PARDISO manual page, phase contract, or CSR indexing contract, so those product-specific details are not verified here.
- **F-22 — Verified workflow, Tier 2 synthesis (S5):** Reliable FEM software separates element-local calculations, global DOF mapping and assembly, constraint application, equation solution, and result recovery, then checks new elements with analytical or benchmark problems. [[Finite Element Program Implementation]]
- **F-23 — Project-contract inference (P1):** Stable element ordering, deterministic triplet sorting, duplicate reduction, and canonical 0-based CSR finalization are FESA reproducibility policies. The queried wiki supports sparse assembly as a stage but does not prescribe this exact deterministic algorithm.
- **F-24 — Verified verification principle, Tier 2 synthesis (S5):** Displacement, reaction, equilibrium, compatibility, convergence, coordinate-system meaning, and result location must be checked before trusting output tables. [[Finite Element Modeling and Convergence Checks]]
- **F-25 — Project contract (P1):** Exact row identities, the component-scale mixed tolerance, all-row reporting, and fail-fast handling of missing/extra/nonfinite rows come from approved FESA requirements. This brief neither alters nor independently approves those numerical values.
## Candidate Benchmarks
The equations below reproduce the already approved analytical candidates in P1/P2. They are not newly generated reference values. Load and response signs assume the P2 local-axis and rotation convention and must be independently checked before formulation approval.
| benchmark_id | evidence classification | configuration | target quantities | can verify | cannot verify |
| --- | --- | --- | --- | --- | --- |
| `CB-AXIAL-TIP` | Tier 2 beam/bar principle plus P2 equation | one straight cantilever, tip force `Px` along local `+x` | `u(L)=Px L/(EA)`, fixed-end reaction, constant `N`, axial `S11` at specified section points | axial stiffness, DOF/component direction, reaction equilibrium, centroidal axial stress | bending, torsion, B33 interpolation details, reference row normalization |
| `CB-TORSION-TIP` | Tier 2 member principle plus P2 equation | one cantilever, tip torque `Mx` about local `+x` | `theta_x(L)=Mx L/(GJ)`, reaction torque, constant `T` | Saint-Venant torsional stiffness, rotation sign, reaction and section torque | warping, bimoment, torsional shear-stress distribution, open-section fidelity |
| `CB-BEND-LOCAL-Y` | Tier 2 Euler beam theory plus P2 equation | one cantilever, tip force `Py` along local `+y` | `v(L)=Py L^3/(3 E Iz)`, `theta_z(L)=Py L^2/(2 E Iz)`, reaction force/moment, linear `Mz` | Hermite bending plane, `Iz=I22`, `theta_z` sign, endpoint equilibrium | shear deformation, deep-beam behavior, transverse stress recovery |
| `CB-BEND-LOCAL-Z` | Tier 2 Euler beam theory plus P2 sign convention | one cantilever, tip force `Pz` along local `+z` | `w(L)=Pz L^3/(3 E Iy)`, `theta_y(L)=-Pz L^2/(2 E Iy)`, reaction force/moment, linear `My` | second bending plane, `Iy=I11`, critical `theta_y=-dw/dx` sign | shear deformation, `I12` coupling, transverse stress recovery |
| `CB-RIGID-RANK` | Inference F-10 | unconstrained, otherwise valid free element | six explicit rigid vectors, `K r_i`, numerical rank, positive energy of six deformation modes | missing/extra constraints, sign errors that create spurious strain, rank loss from integration | global constraint sufficiency, PARDISO behavior, deep-beam accuracy |
| `CB-GAUSS-CLOSED` | Tier 2 Gauss theorem plus inference F-08 | constant `E,G,A,Iy,Iz,J`, straight element | two-point-Gauss stiffness versus independently evaluated closed form | quadrature/Jacobian/`B` consistency and stiffness symmetry | variable property/load integration, curved or tapered members |
| `CB-ROTATED-SPACE` | Tier 2 frame transformation plus inference F-09 | rigidly rotate each analytical cantilever to a non-axis-aligned 3D orientation | transformed displacement/reaction/resultant, `R R^T`, determinant, strain energy | local-axis construction, local/global mapping, energy invariance | instance transforms, curved axes, orientation fallback outside P1 |
| `CB-B31-NEGATIVE` | Tier 1 S1 plus P1 | otherwise valid input with `TYPE=B31` | `unsupported-element-formulation`; no Euler element | semantic preservation of Abaqus family meaning | numerical B31/Timoshenko behavior |
| `CB-LEGACY-B33-ROWS` | Project contract P1 with Tier 1 output semantics | exact read-only `reference/cantilever beam/` B33 bundle | displacement, reaction, node-station section-resultant rows | supported pipeline quantities, identities, component meanings, approved tolerance application | beam stress comparison, `SF2/SF3`, broad Abaqus compatibility, correctness outside this model |
## Verification Relevance
- **code_verification:** `CB-RIGID-RANK`, `CB-GAUSS-CLOSED`, Hermite value/slope conditions, stiffness symmetry, and `CB-ROTATED-SPACE` isolate interpolation, differentiation, integration, transform, and sign errors before reference comparison. Evidence basis: F-06 through F-12.
- **solution_verification:** The four analytical cantilevers compare exact member quantities against numerical displacement, rotation, reaction, section resultant, residual, and axial stress. Separate load cases prevent one sign or stiffness error from being hidden by a mixed response. Evidence basis: S2 and P2.
- **solver_verification:** `Kff` symmetry/positive-definiteness, factorization success, repeated-RHS substitution, normalized residual, and reaction recovery check the linear system path. A PARDISO-specific claim still requires the official oneMKL contract identified in Open Issues. Evidence basis: F-19 through F-21.
- **assembly_reproducibility:** Repeating assembly with changed thread counts should produce the same canonical CSR structure and values required by P1. This is a project-policy test, not an externally sourced theorem. Evidence basis: F-22/F-23.
- **reference_comparison:** S1 establishes Abaqus `U/RF/RM/SF/SM` component meaning; P1 establishes exact files, row identities, component mapping, and tolerance. Artifact/schema mismatches must fail before numeric comparison. `S11` comparison is explicitly N/A.
- **physics_sanity:** Global force/moment balance, reaction sign, displacement direction, two bending-plane symmetry, endpoint section-force consistency, and free-DOF residual remain separate from numerical similarity to the CSV. Evidence basis: F-24 and P1.
- **validation:** No experimental or physical-validation dataset was identified. These candidates support code verification, analytical solution verification, and source-solver comparison only; they do not validate EulerBernoulli theory for a real deep, warped, curved, nonlinear, or anisotropic member.
## Applicability Limits
- **linear_or_nonlinear:** linear static only; no geometric or material nonlinearity.
- **deformation:** FESA small displacement and small rotation. Abaqus B33's broader documented rotation capability is not inherited.
- **element_type:** straight, prismatic, two-node FESA EulerBernoulli element mapped only from `TYPE=B33`; no B31/Timoshenko reinterpretation.
- **slenderness:** EulerBernoulli neglects transverse shear. The S1 `1/15` statement is a modeling guideline and is not converted here into a FESA warning or rejection threshold.
- **section:** `A,I11,I12,I22,J` general beam section data with approved `I12=0`; no centroid/shear-center offset, warping constants, taper, release, or curved member.
- **material_model:** homogeneous isotropic linear elasticity with positive approved properties; no plasticity, anisotropy, temperature dependence, or nonlinear section integration.
- **loads:** nodal concentrated loads in the CLI. The constant local line-load vector is only a formulation verification kernel; it does not imply `*DLOAD` support.
- **integration:** two-point exactness applies to the straight constant-property candidate whose integrand degree is covered by F-08. It is not a general rule for variable properties, curved geometry, discontinuities, or higher-order loads.
- **coordinate_system:** right-handed local frame based on tangent and supplied `n1`; no silent fallback for zero or tangent-parallel guide vectors and no instance transform.
- **solver:** SPD factorization applies only to valid, sufficiently constrained `Kff`. Unconstrained element matrices are positive semidefinite and singular; indefinite, nonsymmetric, ill-conditioned, or multiplier systems are outside this contract.
- **results:** displacement/reaction, equilibrium end action, section resultants, generalized results, and axial `S11` only. Transverse/torsional shear stress and Abaqus stress comparison are outside scope.
- **units:** user-consistent units generally; the approved legacy comparison alone carries the external SI contract from P1.
- **reference_scope:** the existing B33 cantilever bundle is read-only and verifies only documented quantities and model coverage. It cannot establish broad B33 compatibility.
## Open Issues
1. **PARDISO manual gap — non-blocking for formulation:** The configured FEM wiki has no Intel oneMKL PARDISO source page. Exact SPD matrix type, phase sequence, zero-based CSR option, reordering, repeated-RHS lifetime, and error-code handling must be checked against an official Intel manual before implementation planning calls the adapter contract source-backed.
2. **Deterministic COO-to-CSR gap — project policy:** S5 supports the assembly stage, but no queried source prescribes FESA's stable element order, triplet sort key, duplicate summation order, or thread-count-independent reduction. The implementation plan must specify and test them without presenting them as textbook facts.
3. **Endpoint sign-normalization gap:** S1 defines `SF*`/`SM*` meanings and S2 warns that nodal end-action and section-cut signs differ. The exact FESA endpoint-to-node-station transform must be re-derived in Formulation Alignment, checked independently in Numerical Review, and exercised against unmodified reference rows.
4. **Exact Abaqus B33 equivalence is not established:** The manual describes a two-node cubic EulerBernoulli family and notes additional internal axial variables for cubic beams. This brief supports the approved physical subset, not internal-algorithm identity or bitwise equivalence.
5. **Slenderness policy remains intentionally unset:** The official `1/15` guidance documents applicability but P1 contains no automatic slenderness diagnostic. Adding one requires a requirements amendment.
6. **Legacy row-location semantics:** The approved CSV provides node-station force rows rather than complete element-end identity. Step 5 must retain the interior-endpoint consistency check and deterministic representative selection; averaging cannot hide a sign or continuity mismatch.
None of these issues changes the approved V0 scope or blocks mathematical formulation alignment. Issues 1 and 2 are mandatory implementation-planning handoffs; Issues 3 and 4 are mandatory for formulation and numerical review.
## Downstream Handoff
### Formulation Agent
- Use F-01 through F-18 to align the formulation identity to B33's shear-free cubic member meaning while retaining the narrower small-rotation FESA scope.
- Re-derive both bending-plane signs, especially `theta_y=-dw/dx`, and make equilibrium end action versus section-cut resultant conventions explicit at both endpoints.
- Treat six rigid modes/rank 6, two-point exactness, and `n2=t x n1` as reviewable consequences, not as facts made true merely by this brief.
- Do not add shear deformation, `I12` coupling, offsets, warping, or new tolerances.
### Numerical Review Agent
- Independently check all six rigid vectors, numerical rank scaling, positive deformation energy, stiffness symmetry, and Gauss/closed-form agreement.
- Check transformation orthogonality, determinant, virtual-work/energy invariance, and both endpoint signs using a rotated 3D member.
- Confirm `SM1/SM2` mapping after `n1 -> y`, `n2 -> z`, and audit equilibrium end action versus section resultant.
- Preserve S1 slenderness guidance as an applicability limit unless requirements are amended.
### I/O Definition Agent
- Use S1 for exact meanings of `A,I11,I12,I22,J`, `n1`, `S11`, `SF*`, and `SM*`, while documenting only the P1-approved keyword subset.
- Keep optional Abaqus warping/offset data and B31 outside semantic mapping rather than silently discarding or approximating them.
- Keep result location and coordinate metadata explicit enough to distinguish endpoint actions, section resultants, and Gauss/section-point `S11` rows.
### Reference Model Agent
- Cover axial, torsional, local-y bending, local-z bending, and rotated-space checks with target quantities and exclusions from Candidate Benchmarks.
- Preserve exact legacy B33 paths and do not generate, repair, rename, or rewrite reference artifacts.
- Make stress comparison N/A, `SF2/SF3` noncoverage, and interior endpoint consistency visible in the coverage matrix.
### Implementation Planning Agent
- Translate every candidate into a RED/GREEN/VERIFY test without changing P1 tolerances.
- Resolve Open Issues 1 and 2 with an official oneMKL contract and explicit deterministic reduction algorithm before planning PARDISO and sparse-assembly implementation.
- Keep factorization, load assembly, effective-RHS formation, and substitution observable as separate events.
### Coordinator Agent
- Carry the PARDISO source gap and endpoint-sign review forward. Reopen requirements only if a new slenderness diagnostic, broader Abaqus compatibility claim, or changed result/tolerance contract is proposed.