feat(linear-static-3d-euler-beam): step 12 - inp-domain-mapping
This commit is contained in:
@@ -238,3 +238,91 @@
|
||||
- handoff: backend-free `KeywordParameter`, `DataLine`, `KeywordBlock`,
|
||||
`ParsedInput`, and `AbaqusInputReader::read` with syntax/source provenance are
|
||||
available to Step 12 semantic mapping.
|
||||
|
||||
|
||||
## Step 12 — inp-domain-mapping
|
||||
|
||||
- task_id: `TASK-12`
|
||||
- status: `completed`
|
||||
- changed_files: `include/fesa/io/abaqus/domain_mapper.hpp`,
|
||||
`src/fesa/io/abaqus/domain_mapper.cpp`,
|
||||
`tests/unit/io/abaqus/domain_mapper_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-12-report.md`
|
||||
- requirement_ids: `FESA-REQ-LS3DEB-001`, `FESA-REQ-LS3DEB-002`,
|
||||
`FESA-REQ-LS3DEB-005` through `FESA-REQ-LS3DEB-020`,
|
||||
`FESA-REQ-LS3DEB-034`, `FESA-REQ-LS3DEB-044`
|
||||
- test_ids: `T12-MAP-001`, `T12-MAP-002`, `T12-MAP-003`,
|
||||
`T12-MAP-004`, `T12-MAP-005`
|
||||
|
||||
| stage | exact command | exit_code | expected_or_observed_result | evidence_tail |
|
||||
| --- | --- | ---: | --- | --- |
|
||||
| RED | `cmake --build .harness/build --config Debug --target fesa_tests`; `ctest --test-dir .harness/build -C Debug -R InpDomainMapping --output-on-failure` | 1 | All five planned tests were registered before production and the implementation-owned mapper API was absent | MSVC C1083 reported missing `fesa/io/abaqus/domain_mapper.hpp`; CTest then found no runnable mapper tests because the executable did not build |
|
||||
| GREEN-build | `cmake --build .harness/build --config Debug --target fesa_tests` | 0 | The mapper, five semantic tests, solver library, and unit executable compile and link | `domain_mapper.cpp` and `domain_mapper_test.cpp` built without a FESA warning under `/W4 /WX` |
|
||||
| GREEN-test | `ctest --test-dir .harness/build -C Debug -R InpDomainMapping --output-on-failure` | 0 | Exact supported inventory, deterministic expansion, no-op policy, negative portfolio, and DLOAD exclusion pass | 5/5 exact `InpDomainMapping` 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 MSVC x64 build tree regenerates with explicit dependencies | Windows SDK and oneMKL 2026.1 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 the existing `/W4 /WX` policy |
|
||||
| VERIFY-targeted | `ctest --test-dir .harness/build -C Debug -R InpDomainMapping --output-on-failure` | 0 | Focused Step 12 suite remains green after review corrections | 5/5 `InpDomainMapping` 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 mapper tests | 19 tests discovered with all five planned `InpDomainMapping` names and feature/unit labels |
|
||||
| VERIFY-full | `ctest --test-dir .harness/build -C Debug --output-on-failure` | 0 | Full accumulated C++ suite has zero failures | 19/19 tests passed |
|
||||
| VERIFY-dependency-direction | Backend, upward-I/O, core-upward, distributed-load-object, unapproved-`nu`-gate, and exact-test-count scans over Step 12 files | 0 | Public dependencies and approved scope remain intact | backend leaks 0; upward dependencies 0; core upward dependencies 0; distributed-load objects 0; unapproved `nu` gates 0; mapper tests 5 |
|
||||
| VERIFY-diff | `git diff --check` plus trailing-whitespace scan over the three new files | 0 | Tracked and untracked Step 12 files have no whitespace errors | Git reported informational LF-to-CRLF notices only; 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 |
|
||||
|
||||
- contract_checks: the mapper consumes syntax-only `ParsedInput` and returns
|
||||
one complete immutable `Domain` or a categorized diagnostic. It enforces the
|
||||
monotonic top-level/part/assembly/step grammar, B33 only, identity instances
|
||||
only, exact inclusive set generation, case-insensitive references, stable
|
||||
declaration/instance-order internal IDs, and `SourceEntityId
|
||||
{instance_name, source_label}`. Direct node labels, part and assembly sets,
|
||||
ambiguous multi-instance labels/sets, and direct-versus-set constraint
|
||||
overlap are resolved before Domain success.
|
||||
- contract_checks: material and section mapping uses exact `E,nu`,
|
||||
`G=E/(2*(1+nu))`, `A,I11,I12,I22,J`, exact `I12=0`,
|
||||
`Iy=I11`, `Iz=I22`, and `n1 -> local y`. It requires positive
|
||||
`E,G,A,I11,I22,J` without adding a `nu < 0.5` gate. Nonfinite material,
|
||||
section, and guide data are model failures. Overflow-safe scaled norms apply
|
||||
the exact length and guide-vector inequalities; equality fails, values above
|
||||
pass, and valid finite geometry near `1e308` is accepted without a fallback
|
||||
axis.
|
||||
- contract_checks: model-level and step-level boundaries and sole-step CLOAD
|
||||
targets are validated, conflicting expanded node/DOF prescriptions fail, the
|
||||
exact four positive finite `*STATIC` fields are retained, and the sole
|
||||
canonical result identity is `Step-1`, frame 0. The exact warning no-op
|
||||
allowlist produces stable `ignored-input-keyword` diagnostics without
|
||||
changing semantic objects. B31, transforms, nested/dependent assembly
|
||||
semantics, second step, NLGEOM, unknown keywords, and `*DLOAD` fail; no
|
||||
distributed-load Domain object, B31 alias, multi-step path, or transform
|
||||
fallback exists.
|
||||
- generated_evidence: `.harness/build/src/fesa/Debug/fesa_solver.lib`,
|
||||
`.harness/build/tests/Debug/fesa_unit_tests.exe`
|
||||
- reference_diff: unchanged; the legacy cantilever input maps successfully
|
||||
while exact bytes and modification time remain unchanged, and
|
||||
`git diff --exit-code -- reference/` exits 0
|
||||
- handoff: `AbaqusDomainMapper::map(const ParsedInput&)`, complete immutable
|
||||
Domain objects, stable expanded node/element/set identities, validated
|
||||
material/section indices, and the sole `StaticStepDefinition` are available
|
||||
to Step 13 `AnalysisModel`.
|
||||
|
||||
### Step 12 Review Corrections
|
||||
|
||||
- A duplicate-`*ELASTIC` regression test first failed because a second
|
||||
consecutive elasticity record lost the owning-material state. Preserving the
|
||||
immediate material eligibility produced the exact `duplicate-entity`
|
||||
diagnostic and restored targeted 5/5.
|
||||
- Ten monotonic-order regressions first failed at the accepted late-`*PART`
|
||||
case. Explicit phase state now rejects late model data, assembly sets before
|
||||
or followed by instances, element-before-node, incomplete block closure, and
|
||||
pre-`*STATIC` or out-of-order history data with
|
||||
`invalid-keyword-location`.
|
||||
- Review edge tests then failed for valid `1e308` geometry and for nonfinite
|
||||
elasticity being classified as input. Context-specific model parsing,
|
||||
overflow-safe scaled geometry comparisons, active beam-section context,
|
||||
exact GENERATE landing, direct/ambiguous target resolution, and exact
|
||||
threshold cases were added. The corrected focused suite passes 5/5 and the
|
||||
full accumulated suite passes 19/19.
|
||||
- Focused re-review returned Critical 0 and Important 0. Its sole remaining
|
||||
minor requested an explicit negative transverse-shear context assertion;
|
||||
that table case was added and passes without a production change.
|
||||
|
||||
Reference in New Issue
Block a user