feat(linear-static-3d-euler-beam): step 21 - load-assembly

This commit is contained in:
KOKO\Mimi
2026-08-09 20:34:48 +09:00
parent be5f4eb86d
commit d30ba7a34d
6 changed files with 845 additions and 0 deletions
@@ -969,3 +969,55 @@
that the factorized CSR must be nonempty or that empty input is rejected.
- concerns: none; the transient build contention was resolved before recorded
RED/GREEN/VERIFY runs and no critical or upstream blocker remains.
## Step 21 — load-assembly
- task_id: `TASK-21`
- status: `completed`
- changed_files: `include/fesa/assembly/load_assembler.hpp`,
`src/fesa/assembly/load_assembler.cpp`,
`tests/unit/assembly/load_assembler_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`
- requirement_ids: `FESA-REQ-LS3DEB-007`, `FESA-REQ-LS3DEB-011`,
`FESA-REQ-LS3DEB-027`, `FESA-REQ-LS3DEB-034`
- test_ids: `T21-LOAD-001`, `T21-LOAD-002`, `T21-LOAD-003`,
`T21-LOAD-004`, `T21-LOAD-005`
| stage | exact command | exit_code | expected_or_observed_result | evidence_tail |
| --- | --- | ---: | --- | --- |
| RED-build | `cmake --build .harness/build --config Debug --target fesa_tests` | 1 | Exactly five planned tests were registered before production and the public load API was absent | MSVC C1083 reported missing `fesa/assembly/load_assembler.hpp` from `load_assembler_test.cpp` |
| GREEN-build | `cmake --build .harness/build --config Debug --target fesa_tests` | 0 | Minimum nodal load/effective RHS implementation and all five tests compiled and linked | `load_assembler.cpp`, its test, `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 LoadAssembly --output-on-failure` | 0 | Node/set loads, source-order accumulation, nonzero prescribed RHS, rejection, and zero cases pass | 5/5 exact `LoadAssembly` 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 10.0.26100.0, oneMKL 2026.1 ILP64/dynamic, oneTBB, and HDF5 resolved; configure/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 LoadAssembly --output-on-failure` | 0 | Focused Step 21 suite remains green | 5/5 exact `LoadAssembly` tests passed |
| VERIFY-discovery | `ctest --test-dir .harness/build -C Debug --show-only=json-v1` | 0 | CTest discovers the accumulated suite and all five exact names | 62 tests discovered, including 5 `LoadAssembly` tests |
| VERIFY-full | `ctest --test-dir .harness/build -C Debug --output-on-failure` | 0 | Full accumulated C++ suite has zero failures | 62/62 tests passed |
| VERIFY-contract-scans | Exact-test-count, public-backend, factorization/solve/distributed-load, whitespace, and reference diff/status scans | 0 | Load/RHS scope and backend boundary remain isolated | exact tests 5; public backend leaks 0; forbidden scope 0; whitespace clean; reference unchanged |
- contract_checks: semantic node label/node-set targets resolve case-insensitively
to unique stable node indices. All six global components use DofManager full
order, constrained loads remain in the full vector, and duplicate CLOAD rows
accumulate strictly in active source order; a cancellation fixture proves
that the implementation does not reorder floating-point additions.
- contract_checks: model/full/free/constrained/prescribed dimensions, stable
DOF partition/equation order, active-load order, target indices, component
range, and finite individual inputs are validated before use. Nonfinite
source-order load sums, `Kfc*dc` products/row sums, and final subtraction fail
closed with one structured model diagnostic.
- contract_checks: effective RHS is exactly the stable gather of `Ff` minus
CSR row-order `Kfc*dc`; hand-computed nonzero `dc`, zero-load, zero-free, and
zero-constrained cases pass. No factorization/substitution call, distributed
load object, `*DLOAD`, or line-load behavior was added.
- contract_checks: the public header exposes only the two approved static
`LoadAssembler` functions and no MKL, oneTBB, HDF5, or PARDISO type.
- 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: Step 22 can consume the full external force and effective free RHS;
Step 24 retains ownership of factorize-before-load orchestration,
substitution, reconstruction, recovery, and output sequencing.
- concerns: none; no critical implementation, environment, backend, or
upstream-contract conflict was found.