feat(cpp-object-oriented-modular-refactoring): step 24 - final-quality-reference-gate
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
# C++ Object-Oriented Modular Refactoring Build/Test Report
|
||||
|
||||
## Metadata
|
||||
|
||||
- owner_agent: `implementation-agent`
|
||||
- feature_id: `cpp-object-oriented-modular-refactoring`
|
||||
- report_status: `passed`
|
||||
- date: `2026-08-16`
|
||||
- workspace: `C:\git\FESADev\.worktrees\cpp-object-oriented-modular-refactoring`
|
||||
- branch: `feat-cpp-object-oriented-modular-refactoring`
|
||||
- head: `f84ebb541f4717ab8300cf0d80497e1277d3bb48`
|
||||
- `.harness/config.json`: absent; Harness/CMake defaults and Step 24 explicit commands used
|
||||
- build generator: `Visual Studio 18 2026`
|
||||
- platform/configuration: `x64` / `Debug`
|
||||
- compiler observed by configure: `MSVC 19.51.36252.0`
|
||||
- inherited environment note: `FESA_HARNESS_CODEX_SANDBOX=danger-full-access`
|
||||
|
||||
## Execution environment
|
||||
|
||||
Required dependency paths all existed:
|
||||
|
||||
| Path | Status |
|
||||
| --- | --- |
|
||||
| `C:/git/googletest` | found |
|
||||
| `C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl` | found |
|
||||
| `C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb` | found |
|
||||
| `C:/Program Files/HDF_Group/HDF5/2.1.1/cmake` | found |
|
||||
|
||||
LLVM tools:
|
||||
|
||||
- `clang-format version 22.1.8`
|
||||
- `clang-tidy LLVM version 22.1.8`
|
||||
- `clang-tidy --verify-config`: `No config errors detected.`
|
||||
|
||||
## Command log summary
|
||||
|
||||
| Command | Exit | Duration | Output tail / result |
|
||||
| --- | ---: | ---: | --- |
|
||||
| `uv run --with pytest python -m pytest -v -rs` | 1 | 2.700s | 20 passed, 1 failed: `test_invoke_codex_uses_utf8_for_unicode_prompt` saw inherited sandbox override `danger-full-access` instead of default `workspace-write`. Classified as environment-specific diagnostic, not product failure. |
|
||||
| Clean child process without `FESA_HARNESS_CODEX_SANDBOX`; `uv run --with pytest python -m pytest -v -rs` | 0 | 0.751s | `21 passed in 0.13s`. |
|
||||
| `clang-format --dry-run --Werror` over `@(rg --files include src tests -g "*.h" -g "*.cpp")` | 1 | 0.892s | Reported four formatting findings in `src/fesa/math/sparse_matrix.cpp`, `tests/unit/math/sparse_matrix_test.cpp`, `tests/unit/solvers/linear/linear_solver_test.cpp`, `tests/unit/solvers/linear/mkl_pardiso_solver_test.cpp`. |
|
||||
| `clang-format -i` on the four reported files | 0 | tool wall 0.5s | Normalized formatting/stat state; `git diff --raw` and `git diff --numstat` remained empty for those files. |
|
||||
| `clang-format --dry-run --Werror` over 163 C++ files | 0 | 0.888s | `CPP_FILE_COUNT: 163`; no violations. |
|
||||
| `clang-tidy --config-file=.clang-tidy <publicHeader> -- -x c++ -std=c++17 -Iinclude` | 0 | 41.822s | `PUBLIC_HEADER_COUNT: 46`; 45 diagnostics were required trailing-underscore header guards and two were `const` parameter classifications; zero other naming diagnostics. |
|
||||
| Read-only production Doxygen/header-guard and test-tag scan | 0 | 0.302s | 63 production headers, 0 missing guards, 0 missing Doxygen-contract headers, and 0 test files with imposed Doxygen tags. |
|
||||
| `.hpp` scan under `include src tests` | 0 | 0.162s | `LEGACY_HPP_COUNT: 0`; `rg` returned 1 for empty result but count-based AC passed. |
|
||||
| Required dependency path check | 0 | 0.165s | All four declared dependency paths found. |
|
||||
| `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"` | 0 | 6.204s | Configure/generate complete; MKL 2026.1.0 found; build files written to `.harness/build`. |
|
||||
| `cmake --build .harness/build --config Debug --target fesa_tests` | 0 | 9.639s | `fesa_solver.lib`, `fesa_integration_tests.exe`, `fesa_reference_tests.exe`, and `fesa_unit_tests.exe` built. |
|
||||
| `ctest --test-dir .harness/build -C Debug --show-only=json-v1` | 0 | 0.235s | `DISCOVERED_TEST_COUNT: 206`. |
|
||||
| `ctest --test-dir .harness/build -C Debug --output-on-failure` | 0 | 9.908s | `100% tests passed out of 206`; labels: unit 182, integration 11, reference 13. |
|
||||
| `ctest --test-dir .harness/build -C Debug -R "B33ReferenceComparison|Mitc4S4Reference" --output-on-failure` | 0 | 1.260s | `100% tests passed out of 3`. |
|
||||
| `git diff --check` | 0 | 0.199s | `<no whitespace errors>`. |
|
||||
|
||||
## Validation results
|
||||
|
||||
| Validation | Result |
|
||||
| --- | --- |
|
||||
| Harness Python/policy tests | Pass in clean child process: 21/21. |
|
||||
| LLVM tool availability/config | Pass. |
|
||||
| clang-format repository dry-run | Pass: 163 files. |
|
||||
| clang-tidy selected public-header check | Pass: 46 headers, exit 0, zero naming diagnostics outside the two documented contract exceptions. |
|
||||
| Production Doxygen/header-guard policy | Pass: 63/63 headers; tests contain no imposed Doxygen boilerplate tags. |
|
||||
| Header extension policy | Pass: 0 `.hpp` under `include`, `src`, `tests`. |
|
||||
| Fresh MSVC x64 Debug configure | Pass. |
|
||||
| MSVC x64 Debug build | Pass: `fesa_tests`. |
|
||||
| CTest discovery | Pass: 206 tests. |
|
||||
| Full CTest | Pass: 206/206. |
|
||||
| Approved reference suites | Pass: 3/3. |
|
||||
| Reference tree no-change | Pass before and after compare: `git diff --exit-code 1e5758f -- reference` exit 0. |
|
||||
|
||||
## Failure classification and failed test inventory
|
||||
|
||||
Blocking classification: `none`.
|
||||
|
||||
Nonblocking diagnostics:
|
||||
|
||||
- `environment`: inherited `FESA_HARNESS_CODEX_SANDBOX=danger-full-access` caused the raw pytest command to fail one default-sandbox test. The same pytest command passed 21/21 in a child process with only that override removed.
|
||||
- `style`: initial clang-format dry-run reported four whitespace/line-ending findings. Formatting normalization introduced no tracked source-content diff, and the rerun passed.
|
||||
- `static-policy`: clang-tidy reported header-guard trailing underscores and two
|
||||
`const` parameters because its generic macro/constant categories differ from the
|
||||
higher-priority FESA guard and parameter conventions. It reported no other naming
|
||||
diagnostics, and the required command exited 0.
|
||||
|
||||
Failed blocking tests after clean verification: none.
|
||||
|
||||
## Handoff recommendation
|
||||
|
||||
Proceed to Physics Evaluation Agent. Build/test evidence is sufficient for the final
|
||||
Implementation-owned gate; no compile, link, test, reference-comparison, or
|
||||
environment blocker remains.
|
||||
|
||||
## No-change assertion
|
||||
|
||||
No production behavior, reference artifact, reference tolerance, comparator contract,
|
||||
or generated Doxygen output was changed in Step 24.
|
||||
|
||||
## Open issues
|
||||
|
||||
None blocking.
|
||||
@@ -0,0 +1,120 @@
|
||||
# C++ Object-Oriented Modular Refactoring Implementation Report
|
||||
|
||||
## Metadata
|
||||
|
||||
- feature_id: `cpp-object-oriented-modular-refactoring`
|
||||
- owner_agent: `implementation-agent`
|
||||
- final_step: `24 final-quality-reference-gate`
|
||||
- source_plan: `docs/cpp-object-oriented-modular-refactoring/implementation-plan.md`
|
||||
- phase_index: `phases/cpp-object-oriented-modular-refactoring/index.json`
|
||||
- evidence_date: `2026-08-16`
|
||||
- head: `f84ebb541f4717ab8300cf0d80497e1277d3bb48`
|
||||
- reference_baseline: `1e5758f3e482fae4c3d58cac680abe0aac02e549`
|
||||
- classification: `pass-for-physics-evaluation`
|
||||
|
||||
## Scope and no-change assertion
|
||||
|
||||
Step 24 added no production behavior, no comparator/tolerance changes, and no
|
||||
reference artifact changes. The only implementation-owned source action during this
|
||||
step was running `clang-format -i` on four files that the dry-run style gate reported;
|
||||
`git diff --raw`, `git diff --numstat`, and `git diff --check` for those files were
|
||||
empty after the run, so no tracked source-content diff was introduced.
|
||||
|
||||
No Doxygen executable, hook entry point, `scripts/execute.py`, Abaqus, Nastran,
|
||||
reference solver, commit, or push was run.
|
||||
|
||||
## Prior Step RED/GREEN/VERIFY evidence
|
||||
|
||||
The final gate reviewed the Executor-recorded Step 0-23 summaries. Each prior step is
|
||||
already `completed` in the phase index and retains its Executor-owned timestamps.
|
||||
|
||||
| Step | Task | Evidence summary |
|
||||
| ---: | --- | --- |
|
||||
| 0 | `coding-style-agent-contract` | RED missing mandatory `CODINGSTYLE.md`; GREEN/VERIFY pytest 13/13, clean-env pytest 20/20, VS18 Debug build and CTest 144/144. |
|
||||
| 1 | `cpp-style-tooling` | RED missing style/Doxygen config; GREEN/VERIFY policy pytest, clean-env pytest 21/21, LLVM 22.1.8 config checks, VS18 Debug build, CTest 144/144. |
|
||||
| 2 | `architecture-boundaries` | Documentation-only architecture/ADR update; contract grep, diff check, MSVC Debug build, CTest discovery and 144/144 passed. |
|
||||
| 3 | `foundation-google-style` | RED missing `.h` header; GREEN/VERIFY focused build/CTest 22/22, format, full build, CTest 144/144. |
|
||||
| 4 | `model-element-google-style` | RED missing model `.h`; GREEN/VERIFY focused build/CTest 37/37, format 14 files, full build, CTest 144/144. |
|
||||
| 5 | `solver-workflow-google-style` | RED missing analysis model `.h`; GREEN/VERIFY focused build/CTest 57/57, format 31 files, full build, CTest 144/144. |
|
||||
| 6 | `io-application-google-style` | RED missing input reader `.h`; GREEN/VERIFY focused I/O/HDF5/app/reference CTest 36/36, format 23 files, full build, CTest 144/144. |
|
||||
| 7 | `vector3-value-type` | RED missing `vector3.h`; GREEN/VERIFY Vector3 tests 7/7, format/tidy, full build, CTest 151/151. |
|
||||
| 8 | `element-geometry-vector3` | RED typed Vector3 seam compile failure; GREEN/VERIFY focused CTest 44/44, duplicate scan 0, format, full build, CTest 155/155. |
|
||||
| 9 | `result-io-vector3` | RED duplicate helpers; GREEN/VERIFY ResultRecovery/InpDomainMapping/HDF5 33/33, duplicate scan 0, format, full build, CTest 156/156. |
|
||||
| 10 | `dense-blas-adapter` | RED missing dense BLAS internal header; GREEN/VERIFY focused CTest 4/4, public vendor scan 0, format, full build, CTest 158/158. |
|
||||
| 11 | `source-target-resolver` | RED missing ASCII/source-target modules and plus-label failure; GREEN/VERIFY targeted/focused tests 44/44, helper scan, format, full build, CTest 164/164. |
|
||||
| 12 | `material-property-hierarchy` | RED missing material/property bases; GREEN/VERIFY focused CTest 11/11, format, full build, CTest 170/170. |
|
||||
| 13 | `element-definition-domain` | RED missing element definition/ownership APIs; GREEN/VERIFY focused CTest 20/20, format, full build, CTest 172/172. |
|
||||
| 14 | `runtime-element-factory` | RED missing runtime element API; GREEN/VERIFY focused CTest 35/35, dynamic_cast scan 0, format, full build, CTest 176/176. |
|
||||
| 15 | `generic-dof-manager` | RED fake element/layout seam failures; GREEN/VERIFY focused CTest 21/21, concrete/helper branches 0, format, full build, CTest 178/178. |
|
||||
| 16 | `generic-sparse-assembler` | RED fake runtime contribution seam missing; GREEN/VERIFY SparseAssembly 9/9, concrete branch count 0, format, full build, CTest 179/179. |
|
||||
| 17 | `generic-result-recovery` | RED missing generic recovery seam; GREEN/VERIFY focused CTest 53/53, concrete branch count 0, format, full build, CTest 182/182. |
|
||||
| 18 | `load-hierarchy` | RED missing Load APIs; GREEN/VERIFY focused CTest 29/29, format, full build, CTest 186/186. |
|
||||
| 19 | `boundary-condition-policy` | RED missing BoundaryCondition APIs; GREEN/VERIFY focused CTest 29/29, format, full build, discovery/full CTest 191/191. |
|
||||
| 20 | `analysis-hierarchy` | RED missing `analysis.h`; GREEN/VERIFY focused CTest 12/12, scans, full build, discovery/full CTest 193/193. |
|
||||
| 21 | `domain-mapper-modules` | RED missing private mapper seam; GREEN/VERIFY focused CTest 17/17, format, full build, CTest 197/197. |
|
||||
| 22 | `result-recovery-modules` | RED missing recovery component seam; GREEN/VERIFY focused CTest 28/28, format, full build, CTest 203/203. |
|
||||
| 23 | `hdf5-writer-modules` | RED missing HDF5 component seam; GREEN/VERIFY focused schema/atomicity CTest 13/13, scans, format, full build, CTest 206/206. |
|
||||
|
||||
Step 24 is a final verification gate and did not manufacture a new RED condition;
|
||||
it reused the approved B33 and MITC4 reference comparisons after style and full
|
||||
build/test verification.
|
||||
|
||||
## Step 24 command evidence
|
||||
|
||||
| Stage | Command | Exit | Duration | Result |
|
||||
| --- | --- | ---: | ---: | --- |
|
||||
| Environment diagnostic | `uv run --with pytest python -m pytest -v -rs` with inherited `FESA_HARNESS_CODEX_SANDBOX=danger-full-access` | 1 | 2.700s | Environment-specific failure: default-sandbox test observed the explicit override. |
|
||||
| Policy verify | `Remove FESA_HARNESS_CODEX_SANDBOX` in child process; `uv run --with pytest python -m pytest -v -rs` | 0 | 0.751s | 21/21 passed. |
|
||||
| Tool verify | `& "C:/Program Files/LLVM/bin/clang-format.exe" --version` | 0 | 0.026s | clang-format 22.1.8. |
|
||||
| Tool verify | `& "C:/Program Files/LLVM/bin/clang-tidy.exe" --version` | 0 | 0.030s | clang-tidy 22.1.8. |
|
||||
| Tool verify | `& "C:/Program Files/LLVM/bin/clang-tidy.exe" --verify-config` | 0 | 0.028s | No config errors. |
|
||||
| Style RED | `clang-format --dry-run --Werror` over 163 files | 1 | 0.892s | Four whitespace/line-ending format findings. |
|
||||
| Style normalization | `clang-format -i` on the four reported files | 0 | tool wall 0.5s | No tracked content diff after formatting normalization. |
|
||||
| Style verify | `clang-format --dry-run --Werror` over 163 files | 0 | 0.888s | Passed. |
|
||||
| Public-header policy | `clang-tidy --config-file=.clang-tidy <header> -- -x c++ -std=c++17 -Iinclude` over 46 public headers | 0 | 41.822s | Passed. The 47 naming diagnostics were 45 required trailing-underscore header guards and two `const` parameter classifications; there were zero other naming diagnostics. |
|
||||
| Doxygen/header-guard policy | Read-only scan of production headers and test Doxygen tags | 0 | 0.302s | 63/63 production headers had guards and Doxygen contracts; 0 test files contained imposed Doxygen tags. |
|
||||
| Header extension | `.hpp` scan under `include src tests` | 0 | 0.162s | 0 legacy `.hpp` files. |
|
||||
| Dependency precheck | Test declared GoogleTest/MKL/TBB/HDF5 paths | 0 | 0.165s | All paths found. |
|
||||
| Fresh configure | `cmake --fresh -S . -B .harness/build -G "Visual Studio 18 2026" -A x64 ...` | 0 | 6.204s | MSVC 19.51, VS18, build files generated. |
|
||||
| Build | `cmake --build .harness/build --config Debug --target fesa_tests` | 0 | 9.639s | Debug aggregate test target built. |
|
||||
| Discovery | `ctest --test-dir .harness/build -C Debug --show-only=json-v1` | 0 | 0.235s | 206 tests discovered. |
|
||||
| Full test | `ctest --test-dir .harness/build -C Debug --output-on-failure` | 0 | 9.908s | 206/206 passed. |
|
||||
| Artifact check | Exact declared artifact existence, SHA-256, line/row inventory | 0 | 0.218s | Six declared files present. |
|
||||
| Artifact no-change | `git diff --exit-code 1e5758f -- reference` | 0 | 0.165s | No reference diff. |
|
||||
| Artifact schema | Read-only type/header/key/finite precheck | 0 | 0.266s | B33/S4 type present; CSV headers/keys/finite checks passed. |
|
||||
| Compare | `ctest --test-dir .harness/build -C Debug -R "B33ReferenceComparison|Mitc4S4Reference" --output-on-failure` | 0 | 1.260s | 3/3 approved reference tests passed. |
|
||||
| Generated result check | Required `results.h5` existence and hashes | 0 | 0.218s | B33 and MITC4 comparison `results.h5` present. |
|
||||
| Post no-change | `git diff --exit-code 1e5758f -- reference` | 0 | 0.179s | No reference diff after compare. |
|
||||
| Whitespace check | `git diff --check` | 0 | 0.199s | No whitespace errors. |
|
||||
|
||||
## Requirement traceability
|
||||
|
||||
| Requirement | Final-gate evidence |
|
||||
| --- | --- |
|
||||
| `R-PRESERVE-001` | Full CTest 206/206, B33 comparison 176/176 rows passed, MITC4 S4 comparison 147/147 blocking U rows passed; no tolerance/comparator/reference diff. |
|
||||
| `R-STYLE-001` | `.h` header scan passed with zero `.hpp`; clang-format passed over 163 files; clang-tidy selected public-header check passed over 46 headers. |
|
||||
| `R-DOC-001` | Policy pytest passed; 63/63 production headers had header guards and Doxygen contracts, while 0 test files contained imposed Doxygen tags. Doxygen generation was intentionally not run. |
|
||||
| `R-DUP-001` | Step 7-9 summaries record the shared `Vector3`, element/result/I/O preservation tests, and duplicate-definition scans with zero remaining local definition families; full CTest 206/206 passed. |
|
||||
| `R-DUP-002` | Steps 10, 11, and 15 record the single dense-BLAS adapter, shared ASCII/source resolver, and DofManager-owned invariant logic with focused tests and helper/branch scans; full CTest 206/206 passed. |
|
||||
| `R-MODEL-001` | Steps 12-13 record polymorphic Material/ElementProperty/ElementDefinition ownership and stable Domain views; focused ownership tests and full CTest passed. |
|
||||
| `R-ELEMENT-001` | Step 14 records semantic/runtime separation, fail-closed factory compatibility checks, virtual destruction, owner-bounded views, and zero `dynamic_cast` uses; full CTest passed. |
|
||||
| `R-PIPELINE-001` | Steps 15-17 record generic DofManager, SparseAssembler, and ResultRecovery seams with fake runtime elements, deterministic/atomic tests, and zero concrete B33/MITC4 consumer branches; full CTest passed. |
|
||||
| `R-LOAD-001` | Step 18 records Domain-owned Load objects, ordered contributions, validation-before-candidate accumulation, and focused LoadAssembler tests; full CTest passed. |
|
||||
| `R-BC-001` | Step 19 records BoundaryCondition definitions and stable essential-constraint partition/reconstruction, including nonzero and `0 x 0 Kff` cases; full CTest passed. |
|
||||
| `R-ANALYSIS-001` | Step 20 records minimal base `Run()` dispatch and procedure-owned lifecycle tests, including factorize-before-load, exactly-one factorization, all-constrained solve, and writer suppression on recovery failure; full CTest passed. |
|
||||
| `R-MODULE-001` | Steps 21-23 record the approved Domain-mapper, result-recovery, and HDF5 private component splits with facade, diagnostic, identity, rollback, self-check, and atomic-finalization tests; full CTest passed. |
|
||||
| `R-AGENT-001` | Step 0 records the mandatory `docs/CODINGSTYLE.md` implementation-agent contract; the final clean-environment policy suite passed 21/21. |
|
||||
| `R-SCOPE-001` | No production behavior or future-feature changes in Step 24; reference tree diff against `1e5758f` is empty. |
|
||||
|
||||
All acceptance traceability rows from the approved implementation plan are listed
|
||||
above. Their owning task rows `T00..T23` retain the recorded RED/GREEN/VERIFY
|
||||
summaries, and `T24` supplies the final style, build, CTest, artifact, HDF5,
|
||||
comparison, and no-change evidence.
|
||||
|
||||
## Handoff
|
||||
|
||||
Implementation gate verdict: `pass-for-physics-evaluation`.
|
||||
|
||||
Open issues: none blocking. The inherited `FESA_HARNESS_CODEX_SANDBOX` override is an
|
||||
environment note only; the clean child-process policy command passed without code
|
||||
changes.
|
||||
@@ -0,0 +1,165 @@
|
||||
# C++ Object-Oriented Modular Refactoring Reference Comparison Report
|
||||
|
||||
## Metadata
|
||||
|
||||
- owner_agent: `implementation-agent`
|
||||
- feature_id: `cpp-object-oriented-modular-refactoring`
|
||||
- report_status: `passed`
|
||||
- date: `2026-08-16`
|
||||
- reference_baseline: `1e5758f3e482fae4c3d58cac680abe0aac02e549`
|
||||
- command_order: `ARTIFACT CHECK -> COMPARE -> CLASSIFY -> REPORT`
|
||||
- authoritative FESA output: generated `results.h5`
|
||||
- reference artifacts: read-only existing files under `reference/`
|
||||
|
||||
## ARTIFACT CHECK
|
||||
|
||||
Exact declared artifact inventory:
|
||||
|
||||
| Artifact | Bytes | Lines | Data rows | SHA-256 |
|
||||
| --- | ---: | ---: | ---: | --- |
|
||||
| `reference/cantilever beam/cantilever beam.inp` | 2330 | 106 | N/A | `E406EA9560321B791DBDB829E03BD24593B9875E0195D35B86BD931EDA122EF3` |
|
||||
| `reference/cantilever beam/cantilever beam displacements.csv` | 1790 | 12 | 11 | `7B3312FBC8848E81D9A0FD4FF2B56BC1954636A2C14B5C1CBB269CB9477D3C31` |
|
||||
| `reference/cantilever beam/cantilever beam elemental forces.csv` | 1396 | 12 | 11 | `E5E77FEC0FA9482AE018DBF296E74D396335C7C711BD2E9AA2315247A34290BA` |
|
||||
| `reference/cantilever beam/cantilever beam reactions.csv` | 1780 | 12 | 11 | `BF30CDB0CD50106885DE14D63492737736C587426EBD787DE4F7EE6AA86DAA23` |
|
||||
| `reference/shell/shell.inp` | 4770 | 164 | N/A | `4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF` |
|
||||
| `reference/shell/shell displacements.csv` | 5592 | 50 | 49 | `C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B` |
|
||||
|
||||
Read-only schema precheck:
|
||||
|
||||
| Check | Result |
|
||||
| --- | --- |
|
||||
| B33 input contains `TYPE=B33` | Pass |
|
||||
| MITC4 S4 input contains `TYPE=S4` | Pass |
|
||||
| B33 displacement CSV header/key/finite precheck | Pass: 11 rows, 11 unique keys, 0 duplicate keys, 0 nonfinite values |
|
||||
| B33 reaction CSV header/key/finite precheck | Pass: 11 rows, 11 unique keys, 0 duplicate keys, 0 nonfinite values |
|
||||
| B33 elemental-force CSV header/key/finite precheck | Pass: 11 rows, 11 unique keys, 0 duplicate keys, 0 nonfinite values |
|
||||
| MITC4 S4 displacement CSV header/key/finite precheck | Pass: 49 rows, 49 unique keys, 0 duplicate keys, 0 nonfinite values |
|
||||
| Reference tree diff before compare | Pass: `git diff --exit-code 1e5758f -- reference`, exit 0 |
|
||||
|
||||
## COMPARE
|
||||
|
||||
Command:
|
||||
|
||||
```powershell
|
||||
ctest --test-dir .harness/build -C Debug `
|
||||
-R "B33ReferenceComparison|Mitc4S4Reference" --output-on-failure
|
||||
```
|
||||
|
||||
Result: exit 0 in 1.260s, 3/3 tests passed.
|
||||
|
||||
Generated artifacts:
|
||||
|
||||
| Artifact | Bytes | SHA-256 |
|
||||
| --- | ---: | --- |
|
||||
| `.harness/build/reference/cantilever-beam-b33/results.h5` | 25336 | `58CD358F68D8094079E9E525C35EE88AE0575A2962D93472BF0678D78A785247` |
|
||||
| `.harness/build/reference/cantilever-beam-b33/comparison.json` | 128118 | `258347AEA791D981AEA9B2BCAD85DE5344D4859ECA3692DC5E7AA01A848F8E0D` |
|
||||
| `.harness/build/reference/mitc4-shell-s4-comparison/results.h5` | 95024 | `A8D2E12886E87BAA5D895B7E96278EA4B462718D13B985CA2688B505480F0195` |
|
||||
| `.harness/build/reference/mitc4-shell-s4-comparison/comparison.json` | 94349 | `8E8DEA51B6F7C663BACC41FDA6103A4596DB26E02F1EAD6069D458F51E0102E6` |
|
||||
| `.harness/build/reference/mitc4-shell-s4-metadata/results.h5` | 95024 | `8FD6609A2D3758365A2AC2E34692CC0EC982D8E67396BDFF03FAAF2539EF483C` |
|
||||
| `.harness/build/reference/mitc4-shell-s4-metadata/comparison.json` | 94349 | `8E8DEA51B6F7C663BACC41FDA6103A4596DB26E02F1EAD6069D458F51E0102E6` |
|
||||
|
||||
The generated `comparison.json` files are the deterministic machine-readable
|
||||
per-row decision records. The summaries below preserve row counts, worst rows,
|
||||
precheck/tolerance decisions, and artifact hashes for audit.
|
||||
|
||||
## HDF5-to-CSV projection and tolerance contracts
|
||||
|
||||
### B33
|
||||
|
||||
- Model: `cantilever-beam-b33`
|
||||
- HDF5 datasets:
|
||||
- `/steps/Step-1/frames/0/nodal/displacement`
|
||||
- `/steps/Step-1/frames/0/nodal/reaction`
|
||||
- `/steps/Step-1/frames/0/element/section_resultant`
|
||||
- Row identity: model, `Step-1`, frame `0`, instance `PART-1_1-1`, source node label, quantity, component.
|
||||
- Components:
|
||||
- displacement `UX/UY/UZ/URX/URY/URZ`
|
||||
- reaction `RF1/RF2/RF3/RM1/RM2/RM3`
|
||||
- section resultant `N/T/My/Mz`
|
||||
- Tolerance: `absolute_floor + 1.0e-6 * reference_scale`, with reference scale from read-only Abaqus rows only; displacement/rotation floor `1.0e-9`, force/moment floor `1.0e-3`.
|
||||
- Pre-tolerance policy: missing, extra, duplicate, nonfinite, schema-mismatched, or identity-mismatched rows fail before tolerance.
|
||||
|
||||
### MITC4 S4
|
||||
|
||||
- Case: `shell-s4`
|
||||
- Source element type: `S4`
|
||||
- Internal formulation: `FESA-MITC4`
|
||||
- Integration rule: `2x2x2-gauss; mitc4-edge-midpoint-shear`
|
||||
- HDF5 dataset: `/steps/Step-1/frames/0/nodal/displacement`
|
||||
- Row identity: case, instance, source node label, component.
|
||||
- Components: `U1/U2/U3` blocking; `UR1/UR2/UR3` warning-only.
|
||||
- Tolerance: fixed absolute `1.0e-5` for every U/UR row; no component scale, row denominator, zero clamp, omission, or averaging affects the decision.
|
||||
- Pre-tolerance policy: missing, extra, duplicate, nonfinite, header-mismatched, or identity-mismatched projected rows fail before tolerance.
|
||||
|
||||
## CLASSIFY
|
||||
|
||||
Blocking classification: `pass`.
|
||||
|
||||
No missing, extra, duplicate, nonfinite, schema-mismatched, identity-mismatched, or
|
||||
tolerance-failed blocking row was reported by either generated comparison.
|
||||
|
||||
### B33 row and metric decisions
|
||||
|
||||
Overall: `passed=true`; row decisions: 176/176 passed; failed rows: 0; nonfinite row
|
||||
metrics: 0; stress comparison applicable: `false` with N/A reason
|
||||
`Abaqus beam stress comparison is N/A; analytical/unit and HDF5 schema tests provide stress evidence.`
|
||||
|
||||
Physics evidence: endpoint consistency passed; free residual norm
|
||||
`9.356339321107032e-07`.
|
||||
|
||||
| Quantity | Component | Rows | Reference scale | Max abs error | Max normalized error | RMS error | Norm error | Worst row decision |
|
||||
| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |
|
||||
| displacement | UX | 11 | 0 | 0 | 0 | 0 | 0 | node 1, FESA 0, reference 0, tol `1e-09`, pass |
|
||||
| displacement | UY | 11 | 0 | 0 | 0 | 0 | 0 | node 1, FESA 0, reference 0, tol `1e-09`, pass |
|
||||
| displacement | UZ | 11 | 0.0190476272 | 5.33322917078971e-10 | 0.026602795021995 | 2.79095304685767e-10 | 9.25654406392607e-10 | node 11, FESA -0.019047626666677083, reference -0.0190476272, tol `2.00476272e-08`, pass |
|
||||
| displacement | URX | 11 | 0 | 0 | 0 | 0 | 0 | node 1, FESA 0, reference 0, tol `1e-09`, pass |
|
||||
| displacement | URY | 11 | 0.00285714399 | 1.00001394318094e-10 | 0.0259262798011579 | 5.80165854051178e-11 | 1.92419245406385e-10 | node 9, FESA 0.002742858240001394, reference 0.00274285814, tol `3.85714399e-09`, pass |
|
||||
| displacement | URZ | 11 | 0 | 0 | 0 | 0 | 0 | node 1, FESA 0, reference 0, tol `1e-09`, pass |
|
||||
| reaction | RF1 | 11 | 0 | 0 | 0 | 0 | 0 | node 1, FESA 0, reference 0, tol `0.001`, pass |
|
||||
| reaction | RF2 | 11 | 0 | 0 | 0 | 0 | 0 | node 1, FESA 0, reference 0, tol `0.001`, pass |
|
||||
| reaction | RF3 | 11 | 1000000 | 8.19563865661621e-07 | 8.1874512054108e-07 | 3.62393833938394e-07 | 1.20192437351202e-06 | node 1, FESA 1000000.0000008196, reference 1000000, tol `1.001`, pass |
|
||||
| reaction | RM1 | 11 | 0 | 0 | 0 | 0 | 0 | node 1, FESA 0, reference 0, tol `0.001`, pass |
|
||||
| reaction | RM2 | 11 | 10000000 | 5.05149364471436e-06 | 5.05098854585977e-07 | 1.52613777609191e-06 | 5.06162638168429e-06 | node 1, FESA -10000000.000005051, reference -10000000, tol `10.001`, pass |
|
||||
| reaction | RM3 | 11 | 0 | 0 | 0 | 0 | 0 | node 1, FESA 0, reference 0, tol `0.001`, pass |
|
||||
| section_resultant | N | 11 | 0 | 0 | 0 | 0 | 0 | node 1, FESA 0, reference 0, tol `0.001`, pass |
|
||||
| section_resultant | T | 11 | 0 | 0 | 0 | 0 | 0 | node 1, FESA 0, reference 0, tol `0.001`, pass |
|
||||
| section_resultant | My | 11 | 10000000 | 0.0156002428611895 | 0.00155986829928902 | 0.00470365086790684 | 0.0156002450736765 | node 11, FESA 2.4286118949223834e-07, reference -0.0156, tol `10.001`, pass |
|
||||
| section_resultant | Mz | 11 | 0 | 0 | 0 | 0 | 0 | node 1, FESA 0, reference 0, tol `0.001`, pass |
|
||||
|
||||
### MITC4 S4 row and metric decisions
|
||||
|
||||
Overall: `passed=true`; rows: 294/294 within tolerance; blocking U rows: 147/147
|
||||
passed; warning-only UR rows: 147/147 within tolerance; warning count: 0; vector
|
||||
metrics: 49.
|
||||
|
||||
| Component | Rows | Blocking rows | Reference scale | Tolerance | Max abs error | Max normalized error | RMS error | Vector norm error | Worst row decision |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- |
|
||||
| U1 | 49 | 49 | 3.11730945e-23 | 1e-05 | 3.11730945e-23 | 3.11730945e-18 | 1.13587076092006e-23 | 7.95109532644045e-23 | node 12, FESA 0, reference 3.11730945e-23, pass |
|
||||
| U2 | 49 | 49 | 3.11730945e-23 | 1e-05 | 3.11730945e-23 | 3.11730945e-18 | 1.13587076092006e-23 | 7.95109532644045e-23 | node 11, FESA 0, reference 3.11730945e-23, pass |
|
||||
| U3 | 49 | 49 | 2.37408203e-05 | 1e-05 | 1.90378534915144e-07 | 0.0190378534915144 | 4.24886125341252e-08 | 2.97420287738877e-07 | node 2, FESA -2.3550441765084857e-05, reference -2.37408203e-05, pass |
|
||||
| UR1 | 49 | 0 | 7.60725743e-06 | 1e-05 | 6.88285496274043e-08 | 0.00688285496274043 | 2.7737837921291e-08 | 1.94164865449037e-07 | node 44, FESA 1.3985063203725957e-06, reference 1.46733487e-06, pass warning-only |
|
||||
| UR2 | 49 | 0 | 7.60725743e-06 | 1e-05 | 6.8828549627399e-08 | 0.0068828549627399 | 2.77378379212909e-08 | 1.94164865449036e-07 | node 34, FESA 1.398506320372601e-06, reference 1.46733487e-06, pass warning-only |
|
||||
| UR3 | 49 | 0 | 5.27113701e-25 | 1e-05 | 5.27113701e-25 | 5.27113701e-20 | 2.12986098533393e-25 | 1.49090268973375e-24 | node 34, FESA 0, reference -5.27113701e-25, pass warning-only |
|
||||
|
||||
Overall worst MITC4 row: node 2, component U3, FESA
|
||||
`-2.3550441765084857e-05`, reference `-2.37408203e-05`, absolute error
|
||||
`1.903785349151439e-07`, tolerance `1e-05`, normalized error
|
||||
`0.01903785349151439`, blocking pass.
|
||||
|
||||
## Reference no-change assertion
|
||||
|
||||
Post-compare command:
|
||||
|
||||
```powershell
|
||||
git diff --exit-code 1e5758f -- reference
|
||||
```
|
||||
|
||||
Result: exit 0, `<no reference diff>`.
|
||||
|
||||
No reference input, CSV, tolerance, comparator contract, or generated reference
|
||||
artifact was modified. Generated FESA outputs are confined to `.harness/build/`.
|
||||
|
||||
## Open issues
|
||||
|
||||
None blocking. Passing comparison is only an implementation handoff to physics
|
||||
evaluation; it is not release readiness or physics approval.
|
||||
Reference in New Issue
Block a user