feat(linear-static-3d-euler-beam): step 21 - load-assembly
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user