feat(linear-static-3d-euler-beam): step 16 - euler-beam-element

This commit is contained in:
KOKO\Mimi
2026-08-09 18:04:52 +09:00
parent 6fa01de5f9
commit 987f276ef1
6 changed files with 1486 additions and 0 deletions
@@ -513,3 +513,70 @@
- handoff: the exact backend-free result records and `AnalysisState` ledger API
provide full-space mutable solution vectors, step/frame identity, and stable
recovery-row collections to Step 16 and later result recovery/output tasks.
## Step 16 — euler-beam-element
- task_id: `TASK-16`
- status: `completed`
- changed_files: `include/fesa/elements/euler_beam_3d.hpp`,
`src/fesa/elements/euler_beam_3d.cpp`,
`tests/unit/elements/euler_beam_3d_test.cpp`, `src/fesa/CMakeLists.txt`,
`tests/CMakeLists.txt`,
`docs/implementation-plans/linear-static-3d-euler-beam-implementation-report.md`,
`phases/linear-static-3d-euler-beam/index.json`,
`.superpowers/sdd/linear-static-3d-euler-beam/task-16-report.md`
- requirement_ids: `FESA-REQ-LS3DEB-002`, `FESA-REQ-LS3DEB-004`,
`FESA-REQ-LS3DEB-008`, `FESA-REQ-LS3DEB-012`,
`FESA-REQ-LS3DEB-013`, `FESA-REQ-LS3DEB-014`,
`FESA-REQ-LS3DEB-031`, `FESA-REQ-LS3DEB-032`,
`FESA-REQ-LS3DEB-035`, `FESA-REQ-LS3DEB-044`
- test_ids: `T16-BEAM-001`, `T16-BEAM-002`, `T16-BEAM-003`,
`T16-BEAM-004`, `T16-BEAM-005`, `T16-BEAM-006`, `T16-BEAM-007`,
`T16-BEAM-008`, `T16-BEAM-009`, `T16-BEAM-010`
| stage | exact command | exit_code | expected_or_observed_result | evidence_tail |
| --- | --- | ---: | --- | --- |
| RED-build | `cmake --build .harness/build --config Debug --target fesa_tests` | 1 | Exactly ten planned tests were registered before production and the EulerBeam3D public API was absent | MSVC C1083 reported missing `fesa/elements/euler_beam_3d.hpp` from `euler_beam_3d_test.cpp` after successful CMake regeneration |
| GREEN-build | `cmake --build .harness/build --config Debug --target fesa_tests` | 0 | The minimum beam kernel, ten tests, solver library, and unit executable compile and link | `euler_beam_3d.cpp`, `euler_beam_3d_test.cpp`, `fesa_solver.lib`, and `fesa_unit_tests.exe` built without a FESA warning under `/W4 /WX` |
| GREEN-test | `ctest --test-dir .harness/build -C Debug -R EulerBeam3D --output-on-failure` | 0 | Reviewed signs, Gauss integration, rank, transform, loads, analytical modes, validation, recovery, patches, and negative control pass | 10/10 exact `EulerBeam3D` tests passed |
| VERIFY-configure | `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"` | 0 | Approved explicit-dependency MSVC x64 build tree generates | Windows SDK, oneMKL 2026.1, oneTBB, and HDF5 resolved; configure and generate completed |
| VERIFY-build | `cmake --build .harness/build --config Debug` | 0 | Full Debug build passes without a new FESA warning | `fesa_solver.lib` and `fesa_unit_tests.exe` built under `/W4 /WX` |
| VERIFY-targeted | `ctest --test-dir .harness/build -C Debug -R EulerBeam3D --output-on-failure` | 0 | Focused Step 16 suite remains green | 10/10 exact `EulerBeam3D` tests passed |
| VERIFY-discovery | `ctest --test-dir .harness/build -C Debug --show-only=json-v1` | 0 | CTest discovers the accumulated suite and all ten exact EulerBeam3D names | 39 tests discovered, including 10 `EulerBeam3D` tests, with feature/unit labels |
| VERIFY-full | `ctest --test-dir .harness/build -C Debug --output-on-failure` | 0 | Full accumulated C++ suite has zero failures | 39/39 tests passed |
| VERIFY-contract-scans | Backend public-header, upward-dependency, out-of-scope formulation, production one-point path, two-point Gauss/invariant, exact-test-count, and CMake-registration scans using fail-on-match `rg` wrappers | 0 | The kernel implements only the approved exact ledger and numerical integration contract | backend leaks 0; upward dependencies 0; out-of-scope couplings 0; production one-point paths 0; two-point Gauss consumers 3; normalized closed-form invariant `1e-12`; tests 10; registrations 1/1 |
| VERIFY-diff | `git diff --check` plus trailing-whitespace scan over the three new files | 0 | Tracked and untracked Step 16 files have no whitespace errors | Diff check exit 0; new-file trailing whitespace matches 0 |
| VERIFY-reference | `git diff --exit-code -- reference/`; `git status --short -- reference/` | 0 | Approved legacy reference artifacts remain read-only and unchanged | Reference diff exit 0 and reference status empty |
- green_triage: the first implementation build passed and the first focused
run was 9/10. The single failure was isolated to a large-coordinate test
fixture whose requested equality rounded to a represented length above the
threshold. The test fixture was replaced by an exactly representable unit
threshold equality plus below/above large-coordinate cases; the production
strict `>` comparison and formulation were unchanged before the 10/10 run.
- contract_checks: local DOF order is exactly
`[u1,v1,w1,rx1,ry1,rz1,u2,v2,w2,rx2,ry2,rz2]`. Rotation rows are
`(ex,ey,ez)`, `dl=T*dg`, and `Kg=T^T*Kl*T`. The B-matrix follows the reviewed
`theta_y=-w'`, `theta_z=v'` signs; two-point Gauss `B^T D B` is the sole
production stiffness path and is checked against the independent closed
matrix with normalized tolerance `1e-12`. The test-only one-point rule has
rank four while the production rule has rank six and six rigid modes.
- contract_checks: length and guide-vector tests use the exact scale-aware
strict thresholds with no fallback axis. `E`, derived `G`, `A`, `Iy`, `Iz`,
and `J` must be finite and positive and `I12` must be exactly zero. Constant
local `px,py,pz,mx` receives the consistent signed load only; no parser,
`*DLOAD`, B31, Timoshenko, shear correction, or transverse/torsional stress
support was added.
- contract_checks: recovery keeps local outward equilibrium end actions,
endpoint section resultants, and two-Gauss generalized strain/resultants
distinct. Axial stress is
`S11=E(epsilon0+x2*kappa_y-x1*kappa_z)` in input section-point order; absent
input points produce section point 0 at the centroid with source
`fesa-default`.
- generated_evidence: `.harness/build/src/fesa/Debug/fesa_solver.lib`,
`.harness/build/tests/Debug/fesa_unit_tests.exe`
- reference_diff: unchanged; `git diff --exit-code -- reference/` exit 0
- handoff: the exact backend-free `EulerBeam3D` ledger API supplies global and
local stiffness, constant local equivalent load, and distinct recovery data
to Step 18 sparse assembly and Step 22 result recovery without owning element
identity, equation numbering, parser coupling, or result persistence.