modify documents
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
# MITC4 선형 정적 Shell
|
||||
|
||||
## 목적과 현재 범위
|
||||
|
||||
S4/S4R 승인 subset, director·MITC4 shear·drilling 분리와 단면력 복구를 구현한 기능이다. 역사적 기능 검증과 현재 통합 회귀의 범위를 구분한다.
|
||||
최근 dev 통합 회귀는 [전체 현황](../tracking/status.md)에 연결하며, 과거 release 판정은
|
||||
[release.md](release.md)에 남긴다. 문서 정리는 새 기능 검증이나 재승인을 뜻하지 않는다.
|
||||
|
||||
## 계약과 재사용 Handoff
|
||||
|
||||
- [요구사항·acceptance](requirements.md): 지원·제외와 기존 요구사항 ID.
|
||||
- [정식화](formulation.md): 수식·가정·부호·좌표계·복구 위치.
|
||||
- [I/O](io.md): 입력 subset·진단·source identity·결과 schema.
|
||||
- [Reference 모델](reference-model.md): 원본과 비교량·행 identity·적용 범위.
|
||||
- [독립 수치 검토](numerical-review.md): 검산·위험·반례와 수정 확인.
|
||||
- [검증·물리 결과](verification.md): 실제 실행한 명령·수치·실패·미실행·한계.
|
||||
- [연구 근거](research.md): 정식화에 필요한 출처와 적용 경계.
|
||||
|
||||
공통 소유권은 [ARCHITECTURE](../ARCHITECTURE.md)를 따른다. Element는 local 계산,
|
||||
Assembly는 결정적 reduction, Procedure는 trial/commit, Recovery는 물리 의미,
|
||||
Writer는 직렬화를 담당한다. 새 기능에서 기존 stage/phase 실행 계획을 재사용하지 않는다.
|
||||
현재 공개 API는 `include/fesa/`, 실제 구현은 `src/fesa/`와 대응 검사를 확인한다.
|
||||
|
||||
## 사용법
|
||||
|
||||
환경 준비·build·CTest·CLI 기본 사용은 [operations](../operations.md), 입력과 결과의
|
||||
공통 계약은 [contracts](../contracts.md)를 따른다. 이 기능의 keyword·option 허용 범위는
|
||||
위 I/O 계약을 확인한다. 과거 보고서의 machine 경로·임시 command를 현재 기본값으로 쓰지 않는다.
|
||||
|
||||
## 개발 과정과 주의사항
|
||||
|
||||
기존 단계별 계획·coordination은 완료된 실행 운영 기록이어서 제거했다. 승인된 요구사항·
|
||||
수식·검토·실제 검증 결과는 위 문서에 보존한다. Git `858e87b`의 이전 경로는 당시 원문을
|
||||
조회하는 용도로만 사용하며 현행 작업 지침이 아니다.
|
||||
|
||||
- [MITC4 시행착오와 수정 기록](../MITC4_SUPP.md)을 함께 읽는다.
|
||||
- 아래 원래 정식화의 최소 대각 drilling scale은 당시 계약이다. 현재 공변 trace-average 변경은
|
||||
[고유치 기능의 질량·stabilization](../mitc4-shell-feast-eigen2/formulation-mass-stabilization.md)을 따른다.
|
||||
물리 strain/MITC4 정의와 수치 stabilization 변경을 분리한다. S3 partial-BC 충돌의 보류도 함께 확인한다.
|
||||
- `S4R` spelling은 FESA의 적분법 선택 스위치가 아니며 section resultant의 위치·단위·두께 계수를 유지한다.
|
||||
@@ -1,193 +0,0 @@
|
||||
# Linear Static MITC4 Shell Build/Test Report
|
||||
|
||||
## Metadata
|
||||
|
||||
- feature_id: `linear-static-mitc4-shell`
|
||||
- source_commit: `820ba30c717b3d0e113775608e20dfd5fbc05d53`
|
||||
- source_implementation_report: `N/A`; Harness completion evidence is recorded in
|
||||
`phases/linear-static-mitc4-shell/index.json`
|
||||
- source_implementation_plan:
|
||||
`docs/linear-static-mitc4-shell/implementation-plan.md`
|
||||
- status: `pass-for-reference-verification`
|
||||
- owner_agent: `build-test-executor-agent`
|
||||
- date: `2026-08-13`
|
||||
|
||||
## Verdict
|
||||
|
||||
The formal build/test gate passes. A fresh Visual Studio 18 2026/MSVC x64 Debug
|
||||
configuration, clean full rebuild, three implementation-plan-focused CTest runs,
|
||||
nonzero JSON discovery, full CTest regression, and the required Harness Python
|
||||
self-test all completed successfully.
|
||||
|
||||
- clean full rebuild: exit `0`; compiler/linker warning scan `0`; error scan `0`
|
||||
- focused kernel/model/assembly/recovery regex: `87/87` passed
|
||||
- focused linear-static lifecycle regex: `10/10` passed
|
||||
- focused MITC4 reference-test regex: `8/8` passed
|
||||
- CTest discovery: `144` tests, including `32` names containing `Mitc4`
|
||||
- full CTest after clean rebuild: `144/144` passed
|
||||
- Harness Python self-test: `7/7` passed
|
||||
- failed tests: `0`
|
||||
- required S4 reference hash mismatches or Git changes: `0`
|
||||
|
||||
This verdict authorizes handoff to Reference Verification only. It does not approve
|
||||
reference tolerance results, physics sanity, or release readiness.
|
||||
|
||||
## Execution Environment
|
||||
|
||||
- os: `Microsoft Windows 11 Home 10.0.26200 build 26200`
|
||||
- branch: `feat-linear-static-mitc4-shell`
|
||||
- source_head: `820ba30c717b3d0e113775608e20dfd5fbc05d53`
|
||||
- generator: `Visual Studio 18 2026`
|
||||
- MSBuild: `18.8.2+ce25c0108`
|
||||
- compiler: `MSVC 19.51.36252.0`
|
||||
- compiler_architecture: `x64`
|
||||
- Windows SDK: `10.0.26100.0`
|
||||
- language/config: `C++17 / Debug`
|
||||
- CMake: `4.4.0`
|
||||
- build_dir: `.harness/build`
|
||||
- harness_config: absent
|
||||
- project_selection: auto CMake from root `CMakeLists.txt`
|
||||
- command_discovery_path: default CMake/MSVC x64 Debug with implementation-plan
|
||||
generator and dependency paths
|
||||
- resolved dependencies: GoogleTest `C:/git/googletest`; oneMKL `2026.1.0`;
|
||||
oneTBB package path `2023.1`; HDF5 package path `2.1.1`
|
||||
|
||||
The generated compiler metadata at
|
||||
`.harness/build/CMakeFiles/4.4.0/CMakeCXXCompiler.cmake` independently confirms
|
||||
`CMAKE_CXX_COMPILER_ID=MSVC` and version `19.51.36252.0`.
|
||||
|
||||
## Command Log Summary
|
||||
|
||||
All durations below are wall-clock durations measured for the command. The initial
|
||||
green chain was retained as corroborating evidence; the later clean-rebuild chain is
|
||||
the canonical acceptance evidence.
|
||||
|
||||
| order | command | exit_code | duration | relevant stdout/stderr tail |
|
||||
| ---: | --- | ---: | ---: | --- |
|
||||
| 1 | `git status --short --branch; git rev-parse HEAD` | 0 | `0.8 s` | Clean `feat-linear-static-mitc4-shell`; HEAD matched `820ba30...`. |
|
||||
| 2 | Required dependency `Test-Path` precheck from the implementation plan | 0 | `0.215 s` | All four GoogleTest/MKL/TBB/HDF5 paths returned `True`. |
|
||||
| 3 | `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 | `8.684 s` | MSVC `19.51.36252.0`, MKL `2026.1.0`; `Configuring done`, `Generating done`. The failed pthread probes were normal CMake feature probes; `Found Threads: TRUE`. |
|
||||
| 4 | `cmake --build .harness/build --config Debug` | 0 | `4.382 s` | Initial incremental build produced `fesa.exe` and all three test executables; warning/error scan `0/0`. |
|
||||
| 5 | `ctest --test-dir .harness/build -C Debug -R "DomainModel|InpDomainMapping|Mitc4Geometry|Mitc4Shell|DofManager|EssentialConstraints|SparseAssembly|LoadAssembly|ResultRecovery|Hdf5ResultsWriter" --output-on-failure` | 0 | `5.743 s` | `100% tests passed out of 87`; failed `0`. |
|
||||
| 6 | `ctest --test-dir .harness/build -C Debug -R "LinearStaticCli|Mitc4ShellCli" --output-on-failure` | 0 | `1.442 s` | `100% tests passed out of 10`; failed `0`. |
|
||||
| 7 | `ctest --test-dir .harness/build -C Debug -R "Mitc4ReferenceComparison|Mitc4S4Reference" --output-on-failure` | 0 | `1.377 s` | `100% tests passed out of 8`; failed `0`. |
|
||||
| 8 | `ctest --test-dir .harness/build -C Debug --show-only=json-v1` | 0 | `0.208 s` | Discovered `144` tests; `32` test names contained `Mitc4`. |
|
||||
| 9 | `ctest --test-dir .harness/build -C Debug --output-on-failure` | 0 | `9.789 s` | Initial full regression: `144/144` passed; failed `0`. |
|
||||
| 10 | First environment/reference audit helper | 1 | `0.9 s` | Non-gating report-generation error: it hardcoded nonexistent CMake internal directory `CMakeFiles/4.3.0`; both S4 hashes had already matched before the helper stopped. No build or test failed. |
|
||||
| 11 | Corrected dynamic environment/reference audit helper | 0 | `0.583 s` | Located `CMakeFiles/4.4.0/CMakeCXXCompiler.cmake`; confirmed MSVC/version, both S4 hashes, no S4 diff, and clean worktree. |
|
||||
| 12 | `cmake --build .harness/build --config Debug --target clean` | 0 | `1.251 s` | Generated Visual Studio clean target completed. |
|
||||
| 13 | `cmake --build .harness/build --config Debug` | 0 | `94.616 s` | Canonical clean rebuild compiled/linked the solver, CLI, and all test executables; `89` output lines, warning scan `0`, error scan `0`. |
|
||||
| 14 | `cmake --build .harness/build --config Debug --target fesa_unit_tests` | 0 | `1.943 s` | `fesa_solver`, GoogleTest, and `fesa_unit_tests.exe` confirmed. |
|
||||
| 15 | Focused kernel/model/assembly/recovery regex from order 5 | 0 | `4.863 s` | Canonical focused run: `87/87` passed; failed `0`. |
|
||||
| 16 | `cmake --build .harness/build --config Debug --target fesa_integration_tests` | 0 | `1.712 s` | `fesa_solver`, GoogleTest, and `fesa_integration_tests.exe` confirmed. |
|
||||
| 17 | Focused lifecycle regex from order 6 | 0 | `1.531 s` | Canonical focused run: `10/10` passed; failed `0`. |
|
||||
| 18 | `cmake --build .harness/build --config Debug --target fesa_reference_tests` | 0 | `1.769 s` | `fesa_solver`, GoogleTest, and `fesa_reference_tests.exe` confirmed. |
|
||||
| 19 | Focused reference regex from order 7 | 0 | `1.511 s` | Canonical focused run: `8/8` passed; failed `0`; S4 end-to-end tests were included. |
|
||||
| 20 | `ctest --test-dir .harness/build -C Debug --show-only=json-v1` | 0 | `0.080 s` | Canonical discovery: `144` total, `32` MITC4-named; unit/integration/reference labels `121/10/13`. |
|
||||
| 21 | `ctest --test-dir .harness/build -C Debug --output-on-failure` | 0 | `9.669 s` | Canonical full regression: `100% tests passed out of 144`; failed `0`; CTest real time `9.62 s`. |
|
||||
| 22 | Full `reference/` Git scope and worktree audit | 0 | `0.362 s` | `reference_diff_count=0`, `reference_status_count=0`; branch and HEAD unchanged. |
|
||||
| 23 | `git merge-base dev HEAD` plus changed-file scope audit | 0 | `0.321 s` | Merge base `a058ef7...`; detected `scripts/execute.py`, so Harness Python self-test was required. |
|
||||
| 24 | `uv run --with pytest python -m pytest -v -rs` | 0 | `4.651 s` | Python `3.11.15`, pytest `9.1.1`; `7 passed in 0.11s`; failed `0`. |
|
||||
|
||||
## Validation Results
|
||||
|
||||
| validation_stage | result | evidence |
|
||||
| --- | --- | --- |
|
||||
| clean baseline | pass | Branch and HEAD matched the requested baseline; worktree was clean before report creation. |
|
||||
| dependency precheck | pass | All four implementation-plan dependency paths existed. |
|
||||
| fresh configure | pass | VS18/x64 configure exit `0`; compiler metadata is MSVC x64. |
|
||||
| clean full build | pass | Exit `0`; solver, CLI, unit, integration, and reference targets compiled/linked. |
|
||||
| compiler warning policy | pass | Clean rebuild emitted zero warning lines and zero compiler/linker error lines; product CMake uses warnings-as-errors. |
|
||||
| feature-specific tests | pass | Approved focused regexes passed `87/87`, `10/10`, and `8/8`. |
|
||||
| CTest discovery | pass | Nonzero inventory: `144` tests, including `32` MITC4-named tests. |
|
||||
| full CTest | pass | `144/144` passed after the clean rebuild. |
|
||||
| Harness self-test | pass | Required because `scripts/execute.py` differs from the `dev` merge base; `7/7` passed. |
|
||||
| reference immutability | pass | Required S4 SHA-256 values match; entire `reference/` tree has no Git diff or status entry. |
|
||||
|
||||
## CTest Inventory
|
||||
|
||||
| inventory | count |
|
||||
| --- | ---: |
|
||||
| all discovered tests | 144 |
|
||||
| unit label | 121 |
|
||||
| integration label | 10 |
|
||||
| reference label | 13 |
|
||||
| test names containing `Mitc4` | 32 |
|
||||
| failed tests | 0 |
|
||||
|
||||
The `32` MITC4-named tests comprise `30` tests in `Mitc4*` suites plus
|
||||
`DomainModel.Mitc4ShellRecordsPreserveSourceAndInternalIdentity` and
|
||||
`InpDomainMapping.MapsS4AndS4rThroughOneMitc4Identity`. The broader focused regex
|
||||
also exercises shared Domain, DOF, constraints, assembly, recovery, and HDF5 seams.
|
||||
|
||||
CTest currently applies the target-wide legacy label
|
||||
`linear-static-3d-euler-beam` to all `144` tests and has no separate MITC4 label.
|
||||
The approved implementation plan explicitly permits exact suite regex filtering,
|
||||
which was used here, so this labeling limitation is nonblocking.
|
||||
|
||||
## Warning and Failure Audit
|
||||
|
||||
- Clean rebuild warning lines: `0`.
|
||||
- Clean rebuild compiler/linker error lines: `0`.
|
||||
- Focused CTest failures: `0`.
|
||||
- Full CTest failures: `0`.
|
||||
- Harness Python failures: `0`.
|
||||
- Configure probes for POSIX pthread symbols reported expected negative probe
|
||||
results on MSVC before CMake resolved `Threads: TRUE`; this is not a configure
|
||||
warning or failure.
|
||||
- One report-generation helper failed because it assumed a CMake internal versioned
|
||||
directory. The corrected dynamic lookup passed. This incident did not affect
|
||||
configure, compile, link, test, reference artifacts, or the gate verdict.
|
||||
|
||||
## Reference Read-Only Audit
|
||||
|
||||
| exact approved path | observed SHA-256 | expected match |
|
||||
| --- | --- | --- |
|
||||
| `reference/shell/shell.inp` | `4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF` | yes |
|
||||
| `reference/shell/shell displacements.csv` | `C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B` | yes |
|
||||
|
||||
The post-test audit found zero changed paths anywhere under `reference/`. No Abaqus
|
||||
or other reference solver was run.
|
||||
|
||||
## Failure Classification
|
||||
|
||||
- classification: `N/A`
|
||||
- primary_failure: `N/A`
|
||||
- first_failed_build_or_test_command: `N/A`
|
||||
- failed_target_or_test: `N/A`
|
||||
- correction_handoff: `N/A`
|
||||
- non_gating_incident: report-only environment metadata lookup used the wrong CMake
|
||||
internal directory and was rerun successfully; no product correction is required
|
||||
|
||||
## Failed Test Inventory
|
||||
|
||||
None. All focused, full CTest, and Harness Python tests passed.
|
||||
|
||||
## Handoff Recommendation
|
||||
|
||||
| target_agent | reason | required_input |
|
||||
| --- | --- | --- |
|
||||
| Reference Verification Agent | Build/test status is `pass-for-reference-verification`. | This report, source HEAD `820ba30...`, `.harness/build/tests/Debug/fesa_reference_tests.exe`, and the unchanged declared S4 input/CSV pair. |
|
||||
|
||||
The focused reference CTest generated/used build-local comparison evidence, but the
|
||||
Build/Test Executor does not interpret that evidence as the formal reference
|
||||
tolerance verdict. Reference Verification must independently inspect and report it.
|
||||
|
||||
## No-Change Assertion
|
||||
|
||||
- source_files_modified: `false`
|
||||
- test_files_modified: `false`
|
||||
- cmake_files_modified: `false`
|
||||
- requirements_formulation_io_numerical_reference_documents_modified: `false`
|
||||
- phase_files_modified: `false`
|
||||
- tolerance_policies_modified: `false`
|
||||
- reference_artifacts_modified: `false`
|
||||
- owned_report_modified: `true`
|
||||
- notes: The worktree was clean at the requested source HEAD before this report was
|
||||
created. Build products remained under the ignored `.harness/build/` directory.
|
||||
|
||||
## Open Issues
|
||||
|
||||
- None blocking Reference Verification.
|
||||
- The target-wide legacy CTest label prevents a precise MITC4 label count; exact
|
||||
implementation-plan suite regexes provide the approved focused test entry point.
|
||||
@@ -1,42 +0,0 @@
|
||||
# Linear Static MITC4 Shell Coordination Report
|
||||
|
||||
## Metadata
|
||||
|
||||
- feature_id: linear-static-mitc4-shell
|
||||
- status: completed
|
||||
- owner_agent: coordinator-agent
|
||||
- date: 2026-08-15
|
||||
- migration_note: Existing evidence was relocated without rerunning workflow gates.
|
||||
|
||||
## Worklist
|
||||
|
||||
| stage | owner | status | evidence |
|
||||
| --- | --- | --- | --- |
|
||||
| 1. requirements | requirement-agent | passed | `requirements.md` |
|
||||
| 2. research | research-agent | passed | `research.md` |
|
||||
| 3. formulation | formulation-agent | passed | `formulation.md` |
|
||||
| 4. numerical and reference | numerical-review-agent | passed | `numerical-review.md`; `reference-model.md` |
|
||||
| 5. I/O | io-definition-agent | passed | `io.md` |
|
||||
| 6. implementation and verification | implementation-planning-agent; implementation-agent | passed | `implementation-plan.md`; `build-test.md`; `reference-comparison.md` |
|
||||
| 7. physics | physics-evaluation-agent | passed | `physics-evaluation.md` |
|
||||
| 8. release | release-agent | passed | `release.md` |
|
||||
|
||||
## Current Progress
|
||||
|
||||
- active_sub_agent: none
|
||||
- next_handoff: none
|
||||
- closure_evidence: `release.md` status `ready-for-release`
|
||||
- workflow_disposition: completed
|
||||
- historical_gap: No standalone `implementation-report.md` existed before migration; no replacement was fabricated.
|
||||
|
||||
## Decision Log
|
||||
|
||||
| date | decision | evidence | rationale |
|
||||
| --- | --- | --- | --- |
|
||||
| 2026-08-15 | Record migrated workflow as completed | `release.md` | Preserve the existing release verdict without retroactive gate execution. |
|
||||
|
||||
## Blockers and Rework
|
||||
|
||||
- active_blockers: none
|
||||
- correction_attempt_count: 0
|
||||
- needs_user_decision: false
|
||||
@@ -1,5 +1,9 @@
|
||||
# FESA Linear Static MITC4 Shell Formulation
|
||||
|
||||
> 적용 경계: 물리 정식화와 당시 수치 stabilization 유도를 구분한다. 현재 공변 trace-average
|
||||
> scale·frozen lifecycle은 [고유치 질량·stabilization](../mitc4-shell-feast-eigen2/formulation-mass-stabilization.md)을
|
||||
> 함께 따른다. 이전 minimum-diagonal 식을 현재 기준으로 재도입하지 않으며 S3 partial-BC 보류를 유지한다.
|
||||
|
||||
## Metadata
|
||||
|
||||
- feature_id: `linear-static-mitc4-shell`
|
||||
|
||||
@@ -1,921 +0,0 @@
|
||||
# Linear Static MITC4 Shell Implementation Plan
|
||||
|
||||
> **For agentic implementation workers:** 이 문서는 사용자 승인 전 `draft`다. 승인 후
|
||||
> Implementation Planning Agent가 같은 내용으로 Harness phase planning files만
|
||||
> materialize한다. Implementation Agent는 승인된 phase의 pending Step을
|
||||
> `docs/HARNESS.md`와 `docs/HARNESS_WORKFLOW.md`에 따라 하나씩 실행해야 하며,
|
||||
> Harness hook/runner lifecycle을 우회해서는 안 된다.
|
||||
|
||||
## 1. Metadata
|
||||
|
||||
- feature_id: `linear-static-mitc4-shell`
|
||||
- document_type: `implementation-plan`
|
||||
- status: `ready-for-implementation`
|
||||
- approval_state: `harness-step-draft-approved-2026-08-12`
|
||||
- owner_agent: `implementation-planning-agent`
|
||||
- date: `2026-08-13`
|
||||
- source_requirement: `docs/linear-static-mitc4-shell/requirements.md`
|
||||
- source_research: `docs/linear-static-mitc4-shell/research.md`
|
||||
- source_formulation: `docs/linear-static-mitc4-shell/formulation.md`
|
||||
- source_numerical_review:
|
||||
`docs/linear-static-mitc4-shell/numerical-review.md`
|
||||
- source_io_definition:
|
||||
`docs/linear-static-mitc4-shell/io.md`
|
||||
- source_reference_models:
|
||||
`docs/linear-static-mitc4-shell/reference-model.md`
|
||||
- target_platform: `Windows x64 / MSVC / C++17`
|
||||
- build_system: `CMake + CTest`
|
||||
- execution_infrastructure: `Python Harness`
|
||||
- current_numerical_verdict: `pass-for-implementation-planning`
|
||||
- harness_task_name_candidate: `linear-static-mitc4-shell`
|
||||
- implementation_authorized: `true-user-requested-2026-08-12`
|
||||
- harness_execution_authorized: `true-user-requested-2026-08-12`
|
||||
- phase_files_authorized: `true-user-approved-2026-08-12`
|
||||
|
||||
### Goal
|
||||
|
||||
승인된 Abaqus `.inp` subset의 `S4` 및 `S4R` source element를 하나의 FESA
|
||||
`FESA-MITC4` 선형 정적 shell formulation으로 해석하고, 물리적으로 분리된 fixed
|
||||
drilling stabilization, deterministic sparse assembly, mandatory HDF5 shell results,
|
||||
sole declared S4 displacement reference case를 end-to-end로 연결한다.
|
||||
|
||||
### Architecture
|
||||
|
||||
기존 B33 경로를 파괴하거나 speculative common element hierarchy를 만들지 않는다.
|
||||
Domain에 shell semantic records를 추가하고, 별도 concrete `Mitc4Shell` kernel과
|
||||
shell-specific recovery를 만든다. 기존 `Analysis` lifecycle, six-DOF nodal
|
||||
load/constraint, sparse COO reduction, `LinearSolver`, generic `ResultsWriter` 경계,
|
||||
HDF5 temporary/self-check/atomic replacement는 재사용한다.
|
||||
|
||||
### Tech Stack
|
||||
|
||||
- C++17, MSVC `/W4 /WX`
|
||||
- CMake 3.25+, Visual Studio 18 2026 generator, x64 Debug
|
||||
- GoogleTest/CTest
|
||||
- Intel oneAPI MKL and TBB
|
||||
- HDF5 schema version 0
|
||||
- Python 3 Harness runner and repository hooks
|
||||
|
||||
### Global Constraints
|
||||
|
||||
1. 모든 production behavior는 같은 Step 안에서 `RED -> observed failure ->
|
||||
minimal GREEN -> focused VERIFY -> full VERIFY`를 닫는다.
|
||||
2. production C++ 파일 변경은 관련 C++ test와 함께 수행한다.
|
||||
3. public solver headers에 MKL, TBB, HDF5, Win32/vendor type을 노출하지 않는다.
|
||||
4. Node/Element에 equation ID를 저장하지 않고 `DofManager`만 numbering, scatter,
|
||||
constrained/free mapping 및 sparse pattern을 소유한다.
|
||||
5. `S4`와 `S4R`은 같은 FESA numerical path를 사용하며 source metadata만 다르다.
|
||||
6. physical 20-DOF kernel과 four numerical drilling coordinates를 recovery/output에서
|
||||
분리한다.
|
||||
7. reference files를 생성, 수정, rename, repair, normalize하지 않으며 Abaqus를
|
||||
실행하지 않는다.
|
||||
8. future geometrically nonlinear residual/tangent, distributed loads, mixed beam-shell
|
||||
models, reduced integration/hourglass, drilling calibration/energy output,
|
||||
`NR-O03`/`NR-O04`는 구현 범위 밖이다.
|
||||
9. 이 `draft`의 승인은 phase planning files 작성만 허용한다. Harness 실행은 별도의
|
||||
명시적 사용자 요청이 있어야 한다.
|
||||
|
||||
## 2. Readiness Check
|
||||
|
||||
| gate | evidence | status | planning consequence |
|
||||
| --- | --- | --- | --- |
|
||||
| Requirements | `docs/linear-static-mitc4-shell/requirements.md`, 001-072 approved | pass | 모든 must를 task/test에 추적 |
|
||||
| Research | `docs/linear-static-mitc4-shell/research.md` | pass | source-backed MITC4 tying/director/drilling 경계 유지 |
|
||||
| Formulation | `docs/linear-static-mitc4-shell/formulation.md`, `approved-for-implementation-planning` | pass | linear sections만 구현; Section 15 future nonlinear 제외 |
|
||||
| Numerical Review | `docs/linear-static-mitc4-shell/numerical-review.md` | pass | critical blocker 없음; planning authorized |
|
||||
| I/O | `docs/linear-static-mitc4-shell/io.md`, `approved-for-implementation-planning` | pass | keyword, diagnostic, HDF5 schema를 그대로 구현 |
|
||||
| Reference Model | `docs/linear-static-mitc4-shell/reference-model.md` | pass | sole S4 input/CSV pair만 read-only acceptance input으로 사용 |
|
||||
| Repository seams | parser/model, element/analysis, result/reference 영역 read-only 조사 | pass | candidate files와 current signatures 확인 |
|
||||
| Toolchain paths | GoogleTest/MKL/TBB/HDF5 config directories 존재 | pass | Section 10의 exact configure command 사용 가능 |
|
||||
|
||||
Toolchain path evidence was resolved in this workspace on `2026-08-12`with
|
||||
`Test-Path -LiteralPath`returning `True`for all four literal directories used in
|
||||
Sections 10 and 12. They are environment-resolved paths, not placeholders. Each Step
|
||||
copies the fail-fast path precheck before CMake so a changed machine configuration
|
||||
stops before RED/GREEN evidence is recorded.
|
||||
|
||||
Declared read-only reference inventory:
|
||||
|
||||
| case | source | displacement CSV | SHA-256 |
|
||||
| --- | --- | --- | --- |
|
||||
| S4 | `reference/shell/shell.inp` | `reference/shell/shell displacements.csv` | input `4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF`; CSV `C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B` |
|
||||
|
||||
README, `metadata.json`, Abaqus provenance/version, canonical naming 및 추가 portfolio는
|
||||
readiness gate가 아니다. 현재 열린 product/numerical 결정은 없다. 남은 승인 항목은
|
||||
Section 12의 multi-Step Harness draft뿐이다.
|
||||
|
||||
## 3. Implementation Scope
|
||||
|
||||
### Included behavior
|
||||
|
||||
- exactly one `*STEP, *STATIC`, small displacement/small rotation
|
||||
- four-node `S4`/`S4R` parsing and one internal `FESA-MITC4` identity
|
||||
- stable source instance/label/type and four-node source ordering
|
||||
- homogeneous isotropic `E,nu` and centered single-layer constant `t`
|
||||
- deterministic positive-thickness nodal directors and right-handed frames
|
||||
- six global nodal DOFs; 24-entry shell scatter
|
||||
- physical membrane, bending, transverse shear with MITC edge-midpoint tying
|
||||
- common `2x2x2` Gauss integration for S4 and S4R
|
||||
- fixed `k_d=10^-3 min(R+)` drilling stabilization from the eight physical
|
||||
tangent-rotation diagonals only
|
||||
- nodal BC and global CLOAD; aggregate director-parallel moment rejection
|
||||
- deterministic global stiffness, constrained partition, factorize-before-load,
|
||||
effective RHS, solve, full residual/reaction
|
||||
- physical-only shell recovery, energy/equilibrium/verification metrics
|
||||
- exact mandatory HDF5 model/result schema and failure-atomic finalization
|
||||
- direct HDF5-to-Abaqus-displacement comparison: U blocking, UR warning-only
|
||||
|
||||
### Non-goals
|
||||
|
||||
- Abaqus `S4`/`S4R` algorithm equivalence
|
||||
- B31 mapping, mixed B33/MITC4 model execution or common public element hierarchy
|
||||
- `*DLOAD`, pressure, gravity, body/edge/follower load
|
||||
- composite, offsets, variable thickness, explicit normal/orientation
|
||||
- reduced integration, hourglass control, MITC4+
|
||||
- nonlinear state, finite director update, nonlinear residual/tangent execution
|
||||
- drilling physical strain/load/result/stress/energy, coefficient sweep or calibration
|
||||
- `NR-O03` smooth-angle and `NR-O04` warp/distortion threshold sweeps
|
||||
- extra shell benchmarks as a completion gate
|
||||
- Abaqus execution or reference artifact mutation
|
||||
|
||||
## 4. Work Breakdown
|
||||
|
||||
Tasks are ordered by implementation dependency. Harness executes Steps 0-13 in strict
|
||||
order even when the minimal dependency set below is smaller.
|
||||
|
||||
| task | depends on |
|
||||
| --- | --- |
|
||||
| TASK-00 | none |
|
||||
| TASK-01 | TASK-00 |
|
||||
| TASK-02 | TASK-01 |
|
||||
| TASK-03 | TASK-02 |
|
||||
| TASK-04 | TASK-03 |
|
||||
| TASK-05 | TASK-04 |
|
||||
| TASK-06 | TASK-00; executed after TASK-05 |
|
||||
| TASK-07 | TASK-04, TASK-06 |
|
||||
| TASK-08 | TASK-02, TASK-07 |
|
||||
| TASK-09 | TASK-05, TASK-08 |
|
||||
| TASK-10 | TASK-05, TASK-09 |
|
||||
| TASK-11 | TASK-09, TASK-10 |
|
||||
| TASK-12 | TASK-01, TASK-07, TASK-08, TASK-10, TASK-11 |
|
||||
| TASK-13 | TASK-11, TASK-12 |
|
||||
| TASK-14 | TASK-13 |
|
||||
| TASK-15 | TASK-01, TASK-07, TASK-11 |
|
||||
| TASK-16 | TASK-00 through TASK-15 |
|
||||
|
||||
### TASK-00: `shell-semantic-model`
|
||||
|
||||
- Own only model semantic records and immutable Domain access.
|
||||
- Candidate additions: `Mitc4ShellDefinition`, `ShellSection`, source type enum/value,
|
||||
internal formulation identity, four-node indices, material/section indices, node
|
||||
director/frame storage.
|
||||
- Preserve current B33 records and stable source/internal identity; reject mixed models
|
||||
at mapping rather than designing a heterogeneous solver hierarchy.
|
||||
- Tests: `MITC4-MODEL-001`, `MITC4-MODEL-002`.
|
||||
|
||||
### TASK-01: `shell-domain-mapping`
|
||||
|
||||
- Extend `AbaqusDomainMapper::map(const ParsedInput&)`; keep `AbaqusInputReader`
|
||||
syntax-only.
|
||||
- Accept exact S4/S4R and single-layer SHELL SECTION grammar, resolve ELSET/material,
|
||||
identity wrappers and six-DOF BC/CLOAD.
|
||||
- Fail closed with exact I/O diagnostic classes for connectivity, assignment,
|
||||
unsupported option/procedure/mixed model/distributed load.
|
||||
- Tests: `MITC4-MAP-001` through `MITC4-MAP-004`.
|
||||
|
||||
### TASK-02: `shell-director-geometry`
|
||||
|
||||
- Add deterministic geometry preprocessing after instance expansion: element normal
|
||||
candidates, area-weighted nodal director, pairwise orientation validation and nodal
|
||||
frame tie-break.
|
||||
- Validate center, eight stiffness points, four tying points and committed recovery
|
||||
points for finite bases, nonzero surface measure and positive finite Jacobian.
|
||||
- Do not introduce calibrated angle, warp or distortion thresholds.
|
||||
- Tests: `MITC4-GEO-001` through `MITC4-GEO-004`.
|
||||
|
||||
### TASK-03: `mitc4-kinematics-constitutive`
|
||||
|
||||
- Create concrete candidate `Mitc4Shell` without a public base hierarchy.
|
||||
- Implement shape identities, local frames, `T_p`/`T_d` channel maps, direct
|
||||
membrane/bending terms, all four covariant MITC tying samples/interpolation,
|
||||
engineering-shear factors, `C_ps/C_5/A/D/A_s` and fixed point order.
|
||||
- Keep all intermediate physical coordinates at 20 DOFs.
|
||||
- Tests: `MITC4-KIN-001` through `MITC4-KIN-005`.
|
||||
|
||||
### TASK-04: `mitc4-stiffness-drilling`
|
||||
|
||||
- Form physical `K20` with common `2x2x2` integration and embed by congruence.
|
||||
- Build `R+` only from the eight physical tangent-rotation diagonals, use exact
|
||||
`k_d=10^-3 min(R+)` and `T_d^T(k_d I4)T_d`; fail empty/nonfinite `R+`.
|
||||
- Tests: `MITC4-KERNEL-001` through `MITC4-KERNEL-006`.
|
||||
|
||||
### TASK-05: `mitc4-physical-recovery`
|
||||
|
||||
- Add only the element-kernel physical recovery seam for generalized strain/resultant,
|
||||
bottom/middle/top stress and physical element energy.
|
||||
- Prove pure numerical drill action contributes zero to every physical recovery value.
|
||||
- Tests: `MITC4-KERNEL-007`, `MITC4-PHYSREC-001`.
|
||||
|
||||
### TASK-06: `shell-dof-scatter`
|
||||
|
||||
- Retain six per-node full DOFs and add typed 24-entry shell scatter/pattern access;
|
||||
preserve existing 12-entry B33 behavior.
|
||||
- Preserve stable full/free/constrained numbering and all-constrained `0x0 Kff`.
|
||||
- Tests: `MITC4-DOF-001` through `MITC4-DOF-003`.
|
||||
|
||||
### TASK-07: `shell-sparse-assembly`
|
||||
|
||||
- Dispatch shell topology to `Mitc4Shell::globalStiffness()`.
|
||||
- Emit 576 element-local COO entries with stable `elementOrder`/`localOrder` into
|
||||
worker-owned buffers; preserve canonical fixed reduction and diagonal slots.
|
||||
- Tests: `MITC4-ASM-001` through `MITC4-ASM-003`.
|
||||
|
||||
### TASK-08: `shell-load-validation`
|
||||
|
||||
- Reuse global six-DOF `LoadAssembler` and existing constraint partition.
|
||||
- Aggregate CLOAD deterministically before testing exact-zero or
|
||||
`rho_M=abs(dot(d,M))/norm(M)<=1e-12`; rejected moments never reach stabilization.
|
||||
- Preserve force/moment units and factorization-before-load lifecycle.
|
||||
- Tests: `MITC4-LOAD-001` through `MITC4-LOAD-004`.
|
||||
|
||||
### TASK-09: `shell-analysis-state`
|
||||
|
||||
- Add shell result rows to `AnalysisState` and `result_records.hpp`: four fixed
|
||||
midsurface locations, local frames, eight generalized strains/resultants,
|
||||
bottom/middle/top stress, physical energy, equilibrium and verification metrics.
|
||||
- Preserve stable row order and expose candidate-owned containers only; perform no
|
||||
element calculation in this task.
|
||||
- Tests: `MITC4-STATE-001` through `MITC4-STATE-003`.
|
||||
|
||||
### TASK-10: `shell-result-recovery`
|
||||
|
||||
- Recover full residual `K*d-F` for nodal reaction/equilibrium evidence but call the
|
||||
kernel physical-only recovery for shell quantities.
|
||||
- Validate candidates fully before committing state; keep stable row order.
|
||||
- Tests: `MITC4-REC-001` through `MITC4-REC-005`.
|
||||
|
||||
### TASK-11: `shell-hdf5-output`
|
||||
|
||||
- Extend `Hdf5ResultsWriter` behind the unchanged generic `ResultsWriter::write`
|
||||
boundary.
|
||||
- Add exact schema paths/shapes/component attributes from the I/O contract without
|
||||
changing B33 dataset meaning.
|
||||
- Reuse temporary write, finite/schema self-check, close/reopen and atomic replace.
|
||||
- Tests: `MITC4-H5-001` through `MITC4-H5-004`.
|
||||
|
||||
### TASK-12: `shell-linear-static-flow`
|
||||
|
||||
- Route a shell Domain through the existing eight-hook `Analysis::run()` lifecycle.
|
||||
- Preserve assemble/partition, factorize, load/effective RHS, substitute,
|
||||
reconstruct, full residual/recover, atomic write order and single factorization.
|
||||
- Validate nonzero prescribed values, singular support and valid all-constrained solve.
|
||||
- Tests: `MITC4-FLOW-001` through `MITC4-FLOW-004`.
|
||||
|
||||
### TASK-13: `shell-reference-comparison`
|
||||
|
||||
- Add a test-only MITC4 comparator rather than widening beam-specific assumptions.
|
||||
- Consume exactly one declared input and displacement CSV per case; map instance,
|
||||
source node and six displacement components directly to HDF5.
|
||||
- Precheck header/row set/duplicates/nonfinite/schema/identity before numeric work.
|
||||
- Apply fixed absolute `1.0e-5` to every U/UR row without a scale-dependent decision
|
||||
term; U blocks, UR only emits deterministic warning; record all required metrics
|
||||
and worst row.
|
||||
- Tests: `MITC4-REF-001` through `MITC4-REF-006`.
|
||||
|
||||
### TASK-14: `shell-s4-end-to-end`
|
||||
|
||||
- This is declared-case sub-work owned by TASK-13/Step 13's test-only reference module,
|
||||
not an independent production-module Step.
|
||||
- Run the declared S4 deck through CLI, authoritative HDF5, schema checks and
|
||||
read-only comparator.
|
||||
- Assert source type `S4`, internal `FESA-MITC4` and U pass/UR report behavior.
|
||||
- Tests: `MITC4-E2E-S4-001`, `MITC4-E2E-S4-002`.
|
||||
|
||||
### TASK-15: `shell-s4r-common-path-verification`
|
||||
|
||||
- This is non-reference coverage distributed across the existing domain-mapping,
|
||||
sparse-assembly and HDF5 tests; Step 13 does not consume an S4R Abaqus artifact.
|
||||
- Assert S4R selects the same FESA-MITC4 integration/kernel/assembly path as an
|
||||
otherwise identical S4 semantic fixture while preserving only source metadata.
|
||||
- Tests: `InpDomainMapping.MapsS4AndS4rThroughOneMitc4Identity`,
|
||||
`SparseAssembly.S4AndS4rSemanticFixturesAssembleIdenticalStiffness`, and the
|
||||
existing shell HDF5 source-type metadata coverage.
|
||||
|
||||
### TASK-16: `mitc4-full-verification`
|
||||
|
||||
- Run MSVC x64 Debug full build, CTest discovery, focused feature suites and full CTest.
|
||||
- Audit warnings, deterministic repeat evidence, required HDF5 inventory, reference
|
||||
immutability and git diff scope.
|
||||
- Produce only downstream implementation evidence; do not claim reference verification,
|
||||
physics sanity or release readiness.
|
||||
- Tests/audits: `MITC4-VERIFY-001` through `MITC4-VERIFY-004`.
|
||||
|
||||
## 5. TDD Test Plan
|
||||
|
||||
| test id | initial RED assertion | minimal GREEN behavior | focused verification |
|
||||
| --- | --- | --- | --- |
|
||||
| MITC4-MODEL-001 | four-node S4/S4R records/director/source identity do not exist | immutable shell records preserve source and internal identity | `DomainModel.*` |
|
||||
| MITC4-MODEL-002 | shell section/material/thickness ownership unavailable | one resolved centered homogeneous assignment per element | `DomainModel.*` |
|
||||
| MITC4-MAP-001 | valid S4/S4R and SHELL SECTION reject | both source types map to FESA-MITC4 | `InpDomainMapping.*` |
|
||||
| MITC4-MAP-002 | duplicate/unresolved/conflicting section cases lack exact errors | exact assignment/material validation | `InpDomainMapping.*` |
|
||||
| MITC4-MAP-003 | excluded shell options/mixed models may be ignored | exact fail-closed diagnostics | `InpDomainMapping.*` |
|
||||
| MITC4-MAP-004 | second/nonstatic/NLGEOM/DLOAD cases lack shell boundary tests | exact procedure/load rejection; no-op output unchanged | `InpDomainMapping.*` |
|
||||
| MITC4-GEO-001 | planar/rotated/warped directors unavailable | deterministic unit director and right-handed frame | `Mitc4Geometry.*` |
|
||||
| MITC4-GEO-002 | incident orientation/tie-break is untested | stable area-weighted result across repeated order | `Mitc4Geometry.*` |
|
||||
| MITC4-GEO-003 | duplicate/bow-tie/zero/reversed/nonfinite geometry may pass | exact geometry failures | `Mitc4Geometry.*` |
|
||||
| MITC4-GEO-004 | required-point Jacobian inventory absent | every required point finite and positive | `Mitc4Geometry.*` |
|
||||
| MITC4-KIN-001 | shape/derivative identities unavailable | partition/unity/derivative identities | `Mitc4ShellKinematics.*` |
|
||||
| MITC4-KIN-002 | frame/T transforms unavailable | orthonormal/right-handed frames and channel selection | `Mitc4ShellKinematics.*` |
|
||||
| MITC4-KIN-003 | tying values/weights unavailable | four hand-computed covariant tying values | `Mitc4ShellKinematics.*` |
|
||||
| MITC4-KIN-004 | constitutive/section matrices unavailable | exact coefficients, symmetry, positivity, unit rescaling | `Mitc4ShellConstitutive.*` |
|
||||
| MITC4-KIN-005 | quadrature order not fixed | exact common 2x2x2 points/weights | `Mitc4ShellKinematics.*` |
|
||||
| MITC4-KERNEL-001 | no 24x24 shell stiffness | finite symmetric 24x24 stiffness | `Mitc4ShellKernel.*` |
|
||||
| MITC4-KERNEL-002 | energy congruence unavailable | 20/24 virtual work and energy equal within 1e-12 | `Mitc4ShellKernel.*` |
|
||||
| MITC4-KERNEL-003 | rigid/rank checks fail | six physical rigid modes, physical rank 14, stabilized rank 18 | `Mitc4ShellKernel.*` |
|
||||
| MITC4-KERNEL-004 | deformation energy/patch fields unavailable | positive membrane/bending/shear/twist modes | `Mitc4ShellPatch.*` |
|
||||
| MITC4-KERNEL-005 | R+ membership/coefficient not implemented | exact rotational-only min and 1e-3 factor | `Mitc4ShellDrilling.*` |
|
||||
| MITC4-KERNEL-006 | empty R+ and pure drill behavior unspecified | deterministic failure; pure drill stabilized | `Mitc4ShellDrilling.*` |
|
||||
| MITC4-KERNEL-007 | drilling contaminates recovery/energy | physical recovery/energy exact zero for pure drill | `Mitc4ShellDrilling.*` |
|
||||
| MITC4-PHYSREC-001 | kernel recovery contract is not independently callable | exact physical strain/resultant/stress/energy for hand field | `Mitc4ShellPhysicalRecovery.*` |
|
||||
| MITC4-DOF-001 | shell scatter fixed at 12 | stable 24-entry scatter in node/component order | `DofManager.*` |
|
||||
| MITC4-DOF-002 | shell pattern unavailable | sorted unique pattern with all diagonals | `DofManager.*` |
|
||||
| MITC4-DOF-003 | constraint roundtrip lacks shell-sized system | no/mixed/all constraints and nonzero values roundtrip | `DofManager.*; EssentialConstraints.*` |
|
||||
| MITC4-ASM-001 | assembler rejects four-node element | 576 stable local contributions assemble | `SparseAssembly.*` |
|
||||
| MITC4-ASM-002 | thread/repetition may reorder | serial/TBB/repeated CSR bytes and values match | `SparseAssembly.*` |
|
||||
| MITC4-ASM-003 | S4/S4R could branch numerically | identical semantic fixtures produce identical K | `SparseAssembly.*` |
|
||||
| MITC4-LOAD-001 | shell force/moment fixture unavailable | six global components aggregate stably | `LoadAssembly.*` |
|
||||
| MITC4-LOAD-002 | director-parallel exact-zero branch untested | zero aggregate moment accepted | `LoadAssembly.*` |
|
||||
| MITC4-LOAD-003 | rho boundary/rejection untested | <=1e-12 accepted; >1e-12 exact diagnostic | `LoadAssembly.*` |
|
||||
| MITC4-LOAD-004 | rejected moment might enter drill channel | failure occurs before RHS/substitution | `LoadAssembly.*` |
|
||||
| MITC4-STATE-001 | AnalysisState has no shell row containers | exact shell row/component/location types are owned | `AnalysisState.*` |
|
||||
| MITC4-STATE-002 | physical energy/equilibrium/metrics are absent | finite candidate global evidence is stored | `AnalysisState.*` |
|
||||
| MITC4-STATE-003 | shell candidate rollback is unavailable | invalid candidate leaves prior state unchanged | `AnalysisState.*` |
|
||||
| MITC4-REC-001 | shell row types absent | four ordered location/frame/strain/resultant rows | `ResultRecovery.*` |
|
||||
| MITC4-REC-002 | bottom/middle/top stress absent | direct S11/S22/S12 recovery in fixed order | `ResultRecovery.*` |
|
||||
| MITC4-REC-003 | energy may include drilling | physical strain energy excludes stabilization | `ResultRecovery.*` |
|
||||
| MITC4-REC-004 | reaction/equilibrium semantics may diverge | full residual, force/moment balance, normalized metrics | `ResultRecovery.*` |
|
||||
| MITC4-REC-005 | invalid partial rows may commit | nonfinite/inventory failure preserves old state | `ResultRecovery.*` |
|
||||
| MITC4-H5-001 | shell metadata/model schema missing | exact metadata, elements, director/frame, material/section | `Hdf5ResultsWriter.*` |
|
||||
| MITC4-H5-002 | mandatory shell result paths missing | exact displacement/reaction/frame/strain/resultant/stress/global rows | `Hdf5ResultsWriter.*` |
|
||||
| MITC4-H5-003 | output request could filter or drilling paths appear | inventory unconditional; forbidden paths absent | `Hdf5ResultsWriter.*` |
|
||||
| MITC4-H5-004 | invalid shell candidate may replace final file | self-check failure preserves prior final | `Hdf5ResultsWriter.*` |
|
||||
| MITC4-FLOW-001 | shell cannot traverse Analysis lifecycle | exact hook order and one factorization | `LinearStaticCli.*` |
|
||||
| MITC4-FLOW-002 | prescribed shell RHS/reconstruction absent | Ff-Kfc*dc and full displacement correct | `LinearStaticCli.*` |
|
||||
| MITC4-FLOW-003 | singular/all-constrained behavior unproven | singular fails; 0x0 Kff succeeds | `LinearStaticCli.*` |
|
||||
| MITC4-FLOW-004 | failed output may commit state | candidate state/output commits only after validation | `LinearStaticCli.*` |
|
||||
| MITC4-REF-001 | six-column CSV header unsupported | exact MITC4 header maps instance/node/U/UR | `Mitc4ReferenceComparison.*` |
|
||||
| MITC4-REF-002 | invalid row inventory may be ignored | missing/extra/duplicate/nonfinite/schema mismatch fails first | `Mitc4ReferenceComparison.*` |
|
||||
| MITC4-REF-003 | tolerance could remain scale-dependent or clamp/row-normalize | exact fixed absolute `1.0e-5` for every U/UR row | `Mitc4ReferenceComparison.*` |
|
||||
| MITC4-REF-004 | UR may block verdict | U blocks; UR only warns | `Mitc4ReferenceComparison.*` |
|
||||
| MITC4-REF-005 | report metrics/order incomplete | row decisions, max, normalized, RMS, vector, worst row deterministic | `Mitc4ReferenceComparison.*` |
|
||||
| MITC4-REF-006 | comparator may require administrative files | only declared input/CSV/HDF5 required | `Mitc4ReferenceComparison.*` |
|
||||
| MITC4-E2E-S4-001 | S4 deck cannot produce valid shell HDF5 | CLI succeeds with exact S4 metadata/schema | `Mitc4S4Reference.*` |
|
||||
| MITC4-E2E-S4-002 | S4 U comparison unavailable | all U rows pass; UR fully reported | `Mitc4S4Reference.*` |
|
||||
| MITC4-VERIFY-001 | feature tests not discoverable | all planned suites discovered/labeled | CTest JSON inventory |
|
||||
| MITC4-VERIFY-002 | warnings/regressions unknown | MSVC Debug full build passes /W4 /WX | full build |
|
||||
| MITC4-VERIFY-003 | nondeterminism unknown | repeated focused/full tests pass | full CTest |
|
||||
| MITC4-VERIFY-004 | artifact governance unknown | reference hashes/path and git diff unchanged | read-only audit |
|
||||
|
||||
Numerical thresholds are fixed: frame/symmetry/transformation-energy `<=1e-12`;
|
||||
rigid action, linear residual and global equilibrium `<=1e-10`. Patch tests compare
|
||||
against independently hand-computed analytical fields and signs, not the production
|
||||
routine itself.
|
||||
|
||||
## 6. CMake/CTest Plan
|
||||
|
||||
### Existing topology to preserve
|
||||
|
||||
- production library: `fesa_solver`
|
||||
- CLI: `fesa_cli`
|
||||
- unit: `fesa_unit_tests`
|
||||
- integration: `fesa_integration_tests`
|
||||
- reference: `fesa_reference_tests`
|
||||
- aggregate: `fesa_tests`
|
||||
|
||||
No new executable target is required. New kernel/test/comparator source files are
|
||||
explicitly registered in existing source lists. Add `linear-static-mitc4-shell` as an
|
||||
additive CTest label without removing the B33 label. Because
|
||||
`gtest_discover_tests()` currently applies target-wide labels, focused Step
|
||||
verification uses exact suite regexes; label-based MITC4 filtering is enabled only
|
||||
if per-test labeling can be added without relabeling unrelated B33 tests.
|
||||
|
||||
Candidate registrations:
|
||||
|
||||
- `src/fesa/CMakeLists.txt`: candidate `model/shell_geometry.cpp`,
|
||||
`elements/mitc4_shell.cpp` and any separate shell recovery implementation.
|
||||
- `tests/CMakeLists.txt`: candidate `shell_geometry_test.cpp`,
|
||||
`mitc4_shell_test.cpp`, optional focused shell recovery/HDF5 tests, and MITC4
|
||||
reference comparator/test sources.
|
||||
- Preserve existing runtime staging for MKL/TBB/HDF5 on all three test executables.
|
||||
|
||||
CTest discovery must show every suite named in Section 5 before implementation is
|
||||
considered verified.
|
||||
|
||||
## 7. Candidate Files and Ownership
|
||||
|
||||
All signatures in this section are candidates for the Implementation Agent to confirm
|
||||
against the approved contracts during the owning Step; they are not new approved APIs.
|
||||
|
||||
| owner/module | candidate files | candidate interface/direction |
|
||||
| --- | --- | --- |
|
||||
| model | `include/fesa/model/model_types.hpp`, `include/fesa/model/domain.hpp`, `src/fesa/model/domain.cpp` | separate shell records/accessors; no equation IDs |
|
||||
| shell semantic geometry | candidate new `include/fesa/model/shell_geometry.hpp`, `src/fesa/model/shell_geometry.cpp` | director/frame and required-point geometry validation without parser/kernel dependency |
|
||||
| Abaqus semantic map | `include/fesa/io/abaqus/domain_mapper.hpp`, `src/fesa/io/abaqus/domain_mapper.cpp` | keep `map(const ParsedInput&) -> Result<Domain>` |
|
||||
| analysis view | `include/fesa/analysis/analysis_model.hpp`, `src/fesa/analysis/analysis_model.cpp` | non-owning active shell view only if record representation requires |
|
||||
| shell kernel | new `include/fesa/elements/mitc4_shell.hpp`, `src/fesa/elements/mitc4_shell.cpp` | concrete create/stiffness/physical-recover API |
|
||||
| DOF | `include/fesa/fem/dof_manager.hpp`, `src/fesa/fem/dof_manager.cpp` | typed `array<size_t,24>` shell scatter beside B33 scatter |
|
||||
| sparse assembly | `src/fesa/assembly/sparse_assembler.cpp` | topology dispatch; unchanged public assemble signature |
|
||||
| load | `src/fesa/assembly/load_assembler.cpp` only if aggregate director projection cannot live in semantic validation | reuse full six-DOF assembly |
|
||||
| state/results | `include/fesa/analysis/analysis_state.hpp`, `src/fesa/analysis/analysis_state.cpp`, `include/fesa/results/result_records.hpp` | additive shell rows/global metrics |
|
||||
| recovery | `include/fesa/results/result_recovery.hpp`, `src/fesa/results/result_recovery.cpp` or new shell-specific cpp | candidate-then-commit; physical/drill split |
|
||||
| HDF5 | `src/fesa/io/hdf5/hdf5_results_writer.cpp` | generic public writer unchanged |
|
||||
| lifecycle | `src/fesa/analysis/linear_static_analysis.cpp` | preserve existing hook order |
|
||||
| app | `tests/integration/app/fesa_application_test.cpp`; production app only if feature dispatch needs it | CLI syntax unchanged |
|
||||
| reference tests | new `tests/reference/mitc4_reference_comparison.hpp/.cpp` and tests | test-only direct HDF5/CSV comparator |
|
||||
| build graph | `src/fesa/CMakeLists.txt`, `tests/CMakeLists.txt` | explicit additive source/test registration |
|
||||
|
||||
Candidate kernel seam:
|
||||
|
||||
```cpp
|
||||
class Mitc4Shell {
|
||||
public:
|
||||
static Result<Mitc4Shell> create(
|
||||
std::array<const Node*, 4> nodes,
|
||||
std::array<Vector3, 4> initialDirectors,
|
||||
const ShellSection& section,
|
||||
const LinearElasticMaterial& material);
|
||||
|
||||
[[nodiscard]] Matrix physicalLocalStiffness20() const;
|
||||
[[nodiscard]] Matrix globalStiffness24() const;
|
||||
[[nodiscard]] Result<ShellRecovery> recoverPhysical(
|
||||
const Vector& globalElementDisplacement24) const;
|
||||
};
|
||||
```
|
||||
|
||||
This candidate explicitly avoids returning drill energy/results and avoids a common
|
||||
public `Element` hierarchy. Exact value/reference ownership and math types are decided
|
||||
inside TASK-03 after compiling the first RED test.
|
||||
|
||||
## 8. Data Flow Contract
|
||||
|
||||
```text
|
||||
.inp bytes
|
||||
-> AbaqusInputReader (syntax/source locations only)
|
||||
-> AbaqusDomainMapper (approved semantics, S4/S4R provenance, section/material)
|
||||
-> geometry/director preprocessing
|
||||
-> immutable Domain
|
||||
-> non-owning AnalysisModel
|
||||
-> DofManager (6 DOF/node, 24-entry shell scatter, free/constrained maps)
|
||||
-> Mitc4Shell physical K20 + fixed drill embedding -> global K24
|
||||
-> worker-local COO -> stable SparseMatrix reduction
|
||||
-> Kff/Kfc/Kcf/Kcc partition -> Kff factorize
|
||||
-> aggregate CLOAD/director check -> Ff-Kfc*dc
|
||||
-> substitute -> full displacement
|
||||
-> full residual K*d-F
|
||||
-> physical-only shell recovery + global evidence
|
||||
-> validated candidate AnalysisState
|
||||
-> temporary results.h5 -> schema self-check -> atomic finalization
|
||||
|
||||
authoritative results.h5
|
||||
-> test-only MITC4 HDF5 projection
|
||||
-> exact source instance/node/component row-set precheck
|
||||
-> read-only declared Abaqus displacement CSV
|
||||
-> U blocking / UR warning-only deterministic report
|
||||
```
|
||||
|
||||
Invariants:
|
||||
|
||||
- Domain outlives AnalysisModel; no Domain copying.
|
||||
- Source labels/instances/types never become equation indices.
|
||||
- `S4`/`S4R` source type is metadata; both call the same kernel/quadrature.
|
||||
- full residual uses stabilized global K; shell strain/resultant/stress/physical energy
|
||||
use physical recovery only.
|
||||
- HDF5 `nodal/reaction` is full residual; constraint mask decides reaction versus free
|
||||
residual evidence.
|
||||
- result rows use fixed GP1..GP4 and BOTTOM/MIDDLE/TOP identity; no averaging or Abaqus
|
||||
integration-point relabeling.
|
||||
- state/output mutation occurs only after complete validation.
|
||||
|
||||
## 9. Acceptance Traceability Matrix
|
||||
|
||||
The inclusive ranges below cover every must requirement `001` through `072` exactly
|
||||
once without gap or overlapping requirement range.
|
||||
|
||||
| requirement range | owning tasks | test/evidence id | reference model id | acceptance |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 001 | TASK-01, TASK-12 | MAP-004, FLOW-001 | N/A | one static step only; deterministic rejection otherwise |
|
||||
| 002-004 | TASK-00, TASK-01, TASK-11, TASK-14, TASK-15 | MODEL-001, MAP-001, H5-001, S4 E2E plus S4R common-path tests | `shell-s4` for reference; S4R N/A | S4/S4R one kernel; distinct stable source identity |
|
||||
| 005 | TASK-00, TASK-06, TASK-11 | MODEL-001, DOF-001/003, H5-001/002 | N/A | exact six-component order; no distributed equation ownership |
|
||||
| 006-010 | TASK-00, TASK-01 | MODEL-002, MAP-002/003 | N/A | finite E,nu,t; one assignment; unsupported meanings fail |
|
||||
| 011-016 | TASK-02, TASK-03 | GEO-001..004, KIN-002 | N/A | deterministic unit directors; exact geometry predicates |
|
||||
| 017-020 | TASK-01, TASK-08 | MAP-004, LOAD-001..004 | N/A | six-DOF BC/CLOAD; drilling/distributed load fails |
|
||||
| 021-023 | TASK-01 | MAP-001..004 and existing no-op regression | N/A | approved parser subset/identity wrappers/no-op policy |
|
||||
| 024-030 | TASK-00, TASK-06, TASK-07, TASK-09, TASK-10, TASK-12, TASK-16 | MODEL, DOF, ASM, STATE, REC, FLOW, VERIFY suites | N/A | ownership, deterministic assembly, lifecycle, residual reaction |
|
||||
| 031-038 | TASK-03, TASK-04, TASK-05, TASK-07, TASK-10 | KIN, KERNEL, PHYSREC, ASM-003, REC-003 | N/A | physical 5-DOF embedding, exact drilling, same quadrature, invariants |
|
||||
| 039-048 | TASK-09, TASK-10, TASK-11, TASK-12 | STATE-001..003, REC-001..005, H5-001..004, FLOW-004 | N/A | mandatory finite schema/results and atomic commit |
|
||||
| 049 | TASK-00 through TASK-16 | every production Task records RED/failure/GREEN/focused/full VERIFY; VERIFY-001..003 | `shell-s4` where reference-dependent | TDD evidence, related C++ tests, MSVC Debug no-warning build and full CTest |
|
||||
| 050 | TASK-02 through TASK-05, TASK-07 | GEO-001/002, KIN-001/002, KERNEL-001..004, ASM-002 | N/A | frames, Jacobian, symmetry, transformation, six modes, positivity and repeatability |
|
||||
| 051 | TASK-02 through TASK-05, TASK-10, TASK-12 | GEO-001, KERNEL-001..003, REC-004, FLOW-002 | N/A | exact normalized 1e-12 and 1e-10 algebraic thresholds |
|
||||
| 052 | TASK-03 through TASK-05, TASK-10 | KIN-003/004, KERNEL-004, PHYSREC-001, REC-001/002 | N/A | independent membrane, bending, shear, twist fields and recovery signs/order |
|
||||
| 053 | TASK-04, TASK-05, TASK-14 | KERNEL-001..007, PHYSREC-001, declared S4 E2E suite | `shell-s4` | formulation invariants/patches and the S4 reference case pass |
|
||||
| 054 | TASK-02 | GEO-001..004 | N/A | exact valid/rejected geometry inventory; no NR-O03/O04 |
|
||||
| 055 | TASK-16 | VERIFY scope audit | N/A | extra benchmark portfolio is explicitly nonblocking and absent from completion gate |
|
||||
| 056 | TASK-04, TASK-05, TASK-07, TASK-10 | KERNEL-005..007, PHYSREC-001, ASM-001/002, REC-003 | N/A | exact fixed drilling, deterministic rank/action and physical-output exclusion |
|
||||
| 057 | TASK-10, TASK-12, downstream Physics Evaluation | REC-002..004, FLOW-002, later physics report | `shell-s4` | implementation exposes equilibrium/sign/energy evidence; physical plausibility verdict is downstream |
|
||||
| 058-060 | TASK-13, TASK-14 | REF-003 and S4 E2E comparison | `shell-s4` | exact fixed absolute U tolerance `1.0e-5` without scale/clamp |
|
||||
| 061-062 | TASK-13, TASK-14 | REF-004/005 and S4 E2E test | `shell-s4` | UR fixed absolute `1.0e-5`, deterministic warning only |
|
||||
| 063-064 | TASK-13 | REF-001/002/005 | `shell-s4` | schema/row failure before numeric comparison; full metrics |
|
||||
| 065-068 | TASK-13, TASK-14, TASK-15 | REF-001/002/006, S4 case precheck and S4R non-consumption/common-path evidence | `shell-s4` | exact two S4 paths; unique finite mapped rows; no S4R artifact consumption |
|
||||
| 069-071 | TASK-14, TASK-15 | S4 E2E suite and S4R common-path tests | `shell-s4` | S4 U blocks/UR warns; S4R mapping has no Abaqus equality gate |
|
||||
| 072 | TASK-13 through TASK-16 | REF-006, VERIFY-004 and git/hash audit | `shell-s4` | no reference solver run or artifact mutation |
|
||||
|
||||
## 10. Validation Commands
|
||||
|
||||
These commands are the environment-resolved Windows x64 Debug baseline. Planning does
|
||||
not execute build/tests. Each approved Harness Step first runs this literal path
|
||||
precheck and then repeats the relevant build/test subset after its RED and GREEN
|
||||
changes.
|
||||
|
||||
```powershell
|
||||
$requiredBuildPaths = @(
|
||||
"C:/git/googletest",
|
||||
"C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl",
|
||||
"C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb",
|
||||
"C:/Program Files/HDF_Group/HDF5/2.1.1/cmake"
|
||||
)
|
||||
foreach ($requiredBuildPath in $requiredBuildPaths) {
|
||||
if (-not (Test-Path -LiteralPath $requiredBuildPath)) {
|
||||
throw "Required configured build path is absent: $requiredBuildPath"
|
||||
}
|
||||
}
|
||||
|
||||
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"
|
||||
|
||||
cmake --build .harness/build --config Debug
|
||||
ctest --test-dir .harness/build -C Debug --show-only=json-v1
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure
|
||||
```
|
||||
|
||||
Focused commands:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "DomainModel|InpDomainMapping|Mitc4Geometry|Mitc4Shell|DofManager|EssentialConstraints|SparseAssembly|LoadAssembly|ResultRecovery|Hdf5ResultsWriter" --output-on-failure
|
||||
|
||||
cmake --build .harness/build --config Debug --target fesa_integration_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "LinearStaticCli|Mitc4ShellCli" --output-on-failure
|
||||
|
||||
cmake --build .harness/build --config Debug --target fesa_reference_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "Mitc4ReferenceComparison|Mitc4S4Reference" --output-on-failure
|
||||
```
|
||||
|
||||
Planning-document verification:
|
||||
|
||||
```powershell
|
||||
git diff --check -- docs/linear-static-mitc4-shell/implementation-plan.md
|
||||
git status --short
|
||||
git diff --name-only
|
||||
```
|
||||
|
||||
Reference immutability audit is read-only and fails on any mismatch:
|
||||
|
||||
```powershell
|
||||
$expectedReferenceHashes = [ordered]@{
|
||||
"reference/shell/shell.inp" = "4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF"
|
||||
"reference/shell/shell displacements.csv" = "C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B"
|
||||
}
|
||||
foreach ($referencePath in $expectedReferenceHashes.Keys) {
|
||||
$actualHash = (Get-FileHash -Algorithm SHA256 -LiteralPath $referencePath).Hash
|
||||
if ($actualHash -ne $expectedReferenceHashes[$referencePath]) {
|
||||
throw "Reference artifact changed: $referencePath"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Do not invoke `scripts/hooks/*.py` manually. Harness runner installs/uses the configured
|
||||
PreToolUse and Stop hooks automatically. Do not invoke `scripts/execute.py` until the
|
||||
user separately authorizes execution.
|
||||
|
||||
## 11. Risks and Downstream Handoff
|
||||
|
||||
| risk | controlling plan decision | stop condition |
|
||||
| --- | --- | --- |
|
||||
| beam-only ModelDefinition leaks through every layer | add shell semantic records first; preserve B33 access | stop if a Step requires unapproved mixed-model hierarchy |
|
||||
| fixed 12-DOF scatter breaks B33 | typed beam/shell scatter paths and B33 regressions | stop on any B33 focused/full regression |
|
||||
| drilling contaminates physical output | separate physical recovery from stabilized full K | stop if pure-drill recovery/energy is nonzero |
|
||||
| director/frame sign nondeterminism | source-order, area-weight and tie-break tests | stop on repeat/order/thread difference |
|
||||
| S4R accidentally selects reduced integration | one internal formulation and ASM/E2E equality tests | stop if source type reaches quadrature dispatch |
|
||||
| full residual confused with element resultants | keep reaction from Kd-F, physical recovery separately | stop if reaction is reconstructed from shell resultants |
|
||||
| writer expansion changes B33 schema | additive shell branches plus full B33 CTest | stop on B33 schema regression |
|
||||
| comparator inherits B33 four-file/Frame assumptions | dedicated test-only MITC4 comparator | stop if administrative files become required |
|
||||
| reference artifacts staged by Harness | clean isolated worktree, hash/diff audit | stop immediately on any reference path change |
|
||||
| future nonlinear equations enter production | scope and code review prohibition | stop if nonlinear state/tangent is allocated or called |
|
||||
|
||||
### Implementation Agent
|
||||
|
||||
- Read the approved implementation plan, `docs/HARNESS.md` and
|
||||
`docs/HARNESS_WORKFLOW.md` before every Step.
|
||||
- Execute only the Harness-selected pending Step and use the repository hooks/scripts
|
||||
through the documented runner lifecycle.
|
||||
- Never choose the next Step, edit executor-owned timestamps/statuses, batch multiple
|
||||
Steps, or implement outside the Step's file ownership.
|
||||
- Record the RED command and observed failure before GREEN.
|
||||
|
||||
### Build/Test Executor Agent
|
||||
|
||||
- Use Section 10 exact CMake/MSVC/CTest baseline after implementation Steps finish.
|
||||
- Report new warnings, discovery gaps and exact failing test names without changing
|
||||
upstream contracts.
|
||||
|
||||
### Correction Agent
|
||||
|
||||
- Apply only minimal failure-driven corrections inside approved file ownership.
|
||||
- Do not reinterpret MITC4 mathematics, I/O schema or tolerance.
|
||||
|
||||
### Reference Verification Agent
|
||||
|
||||
- Consume authoritative HDF5 and declared read-only CSV directly.
|
||||
- Create the separate reference-verification report; only U affects pass/fail and every
|
||||
UR warning remains visible.
|
||||
|
||||
### Physics Evaluation and Release Agents
|
||||
|
||||
- Physics evaluates equilibrium, directions, symmetry, energy and result signs after
|
||||
reference verification.
|
||||
- Release readiness remains blocked until implementation, build/test, reference and
|
||||
physics gates all provide evidence.
|
||||
|
||||
## 12. Harness Step Draft
|
||||
|
||||
This approved draft is materialized under `phases/linear-static-mitc4-shell/`.
|
||||
Every Step is zero-based, kebab-case and closes RED/GREEN/VERIFY before the
|
||||
Executor advances it. TASK-14 is declared-case sub-work inside Step 13's single
|
||||
test-only reference module; TASK-15 is non-reference coverage already owned by
|
||||
Steps 1/7/11; TASK-16 is downstream Build/Test Executor evidence,
|
||||
not an Implementation Agent phase Step. During materialization, the exact required-reading
|
||||
paths, configure block, focused command and full VERIFY block shown here are copied
|
||||
verbatim into every `stepN.md`; a materialized Step never refers back to this draft or
|
||||
to an external conversation.
|
||||
|
||||
Every materialized Step copies this mandatory reading inventory before its
|
||||
Step-specific paths:
|
||||
|
||||
- `AGENTS.md`
|
||||
- `docs/PRD.md`, `docs/ARCHITECTURE.md`, `docs/ADR.md`
|
||||
- `docs/HARNESS.md`, `docs/HARNESS_WORKFLOW.md`
|
||||
- this approved implementation plan and all source contracts listed in Metadata
|
||||
- `.codex/hooks.json`
|
||||
- `phases/index.json`, `phases/linear-static-mitc4-shell/index.json` and its own
|
||||
`phases/linear-static-mitc4-shell/stepN.md`
|
||||
- every path created/modified by prerequisite Steps and their step output/status
|
||||
|
||||
If any mandatory or Step-specific path is missing or contradicts the approved plan,
|
||||
the Implementation Agent records `blocked` for the Executor-selected current Step and
|
||||
stops; it does not invent the missing contract.
|
||||
|
||||
Step-specific path ledger copied into the corresponding materialized Step:
|
||||
|
||||
| Step | exact source/prerequisite paths |
|
||||
| ---: | --- |
|
||||
| 0 | `include/fesa/model/model_types.hpp`; `include/fesa/model/domain.hpp`; `src/fesa/model/domain.cpp`; `tests/unit/model/model_types_test.cpp`; `tests/unit/model/domain_test.cpp` |
|
||||
| 1 | Step 0 paths; `include/fesa/io/abaqus/domain_mapper.hpp`; `src/fesa/io/abaqus/domain_mapper.cpp`; `tests/unit/io/abaqus/domain_mapper_test.cpp` |
|
||||
| 2 | Step 0-1 paths; candidate new `include/fesa/model/shell_geometry.hpp`; `src/fesa/model/shell_geometry.cpp`; `tests/unit/model/shell_geometry_test.cpp`; `src/fesa/CMakeLists.txt`; `tests/CMakeLists.txt` |
|
||||
| 3 | Step 2 paths; candidate new `include/fesa/elements/mitc4_shell.hpp`; `src/fesa/elements/mitc4_shell.cpp`; `tests/unit/elements/mitc4_shell_test.cpp`; `src/fesa/CMakeLists.txt`; `tests/CMakeLists.txt` |
|
||||
| 4 | Step 3 MITC4 kernel/header/test paths |
|
||||
| 5 | Step 3-4 MITC4 kernel/header/test paths |
|
||||
| 6 | Step 0 paths; `include/fesa/fem/dof_manager.hpp`; `src/fesa/fem/dof_manager.cpp`; `tests/unit/fem/dof_manager_test.cpp`; `tests/unit/constraints/essential_constraints_test.cpp` |
|
||||
| 7 | Steps 4/6 paths; `include/fesa/assembly/sparse_assembler.hpp`; `src/fesa/assembly/sparse_assembler.cpp`; `tests/unit/assembly/sparse_assembler_test.cpp` |
|
||||
| 8 | Steps 2/7 paths; `include/fesa/assembly/load_assembler.hpp`; `src/fesa/assembly/load_assembler.cpp`; `tests/unit/assembly/load_assembler_test.cpp` |
|
||||
| 9 | Step 5 paths; `include/fesa/results/result_records.hpp`; `include/fesa/analysis/analysis_state.hpp`; `src/fesa/analysis/analysis_state.cpp`; `tests/unit/results/result_records_test.cpp` |
|
||||
| 10 | Steps 5/9 paths; `include/fesa/results/result_recovery.hpp`; `src/fesa/results/result_recovery.cpp`; `tests/unit/results/result_recovery_test.cpp` |
|
||||
| 11 | Steps 9/10 paths; `include/fesa/io/hdf5/hdf5_results_writer.hpp`; `src/fesa/io/hdf5/hdf5_results_writer.cpp`; `tests/unit/io/hdf5/hdf5_results_writer_test.cpp` |
|
||||
| 12 | Steps 7-11 paths; `include/fesa/analysis/linear_static_analysis.hpp`; `src/fesa/analysis/linear_static_analysis.cpp`; `tests/integration/analysis/linear_static_analysis_test.cpp`; `tests/integration/app/fesa_application_test.cpp` |
|
||||
| 13 | Steps 11/12 paths; candidate new `tests/reference/mitc4_reference_comparison.hpp`, `tests/reference/mitc4_reference_comparison.cpp`, `tests/reference/mitc4_reference_comparison_test.cpp`, `tests/reference/mitc4_reference_cases_test.cpp`; `tests/CMakeLists.txt`; the two exact read-only S4 reference paths in Section 2 |
|
||||
|
||||
The configure command copied before each Step's RED build is:
|
||||
|
||||
```powershell
|
||||
$requiredBuildPaths = @(
|
||||
"C:/git/googletest",
|
||||
"C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl",
|
||||
"C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb",
|
||||
"C:/Program Files/HDF_Group/HDF5/2.1.1/cmake"
|
||||
)
|
||||
foreach ($requiredBuildPath in $requiredBuildPaths) {
|
||||
if (-not (Test-Path -LiteralPath $requiredBuildPath)) {
|
||||
throw "Required configured build path is absent: $requiredBuildPath"
|
||||
}
|
||||
}
|
||||
|
||||
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"
|
||||
```
|
||||
|
||||
The full VERIFY block copied at the end of every Step is:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug
|
||||
ctest --test-dir .harness/build -C Debug --show-only=json-v1
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure
|
||||
```
|
||||
|
||||
### Step 0 — `shell-semantic-model`
|
||||
|
||||
- Required reading: requirements 002-016/024, I/O Sections 3/5, architecture model
|
||||
ownership, current `model_types.hpp`/`domain.*` and their tests.
|
||||
- Prerequisite: approved plan only; no production dependency on a prior Step.
|
||||
- RED: add MODEL-001/002 tests and CMake registration if needed; run:
|
||||
`cmake --build .harness/build --config Debug --target fesa_unit_tests` then
|
||||
`ctest --test-dir .harness/build -C Debug -R "DomainModel" --output-on-failure`.
|
||||
Record the missing shell type/accessor failure. Unexpected pass is a stop.
|
||||
- GREEN: minimally add shell semantic records/Domain const access; no parser/kernel.
|
||||
- VERIFY: rerun the focused commands and common full VERIFY.
|
||||
- Prohibitions: no equation IDs, element hierarchy, mixed-model execution, parser edits.
|
||||
|
||||
### Step 1 — `shell-domain-mapping`
|
||||
|
||||
- Required reading: Step 0 outputs, requirements 001-010/017-023, I/O Sections 1-3/8-9,
|
||||
current `domain_mapper.*` and parser/model tests.
|
||||
- Prerequisite: Step 0 `completed`.
|
||||
- RED: add MAP-001..004; build `fesa_unit_tests` and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "InpDomainMapping" --output-on-failure`.
|
||||
Record valid S4/S4R rejection and exact negative diagnostic failures.
|
||||
- GREEN: minimally extend semantic mapping; keep `input_reader` syntax-only.
|
||||
- VERIFY: focused parser/model tests, then common full VERIFY.
|
||||
- Prohibitions: no element math, no silent unsupported keyword, no reference edits.
|
||||
|
||||
### Step 2 — `shell-director-geometry`
|
||||
|
||||
- Required reading: requirements 011-016, formulation Sections 4/9/17, Numerical Review
|
||||
5.2/5.5/6.1, I/O 3.3/9, completed semantic model/mapping.
|
||||
- Prerequisite: Step 1 `completed`.
|
||||
- RED: add GEO-001..004; build unit target and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "Mitc4Geometry" --output-on-failure`.
|
||||
- GREEN: implement deterministic director/frame and exact geometry inventory validation.
|
||||
- VERIFY: focused geometry/mapping tests, then common full VERIFY.
|
||||
- Prohibitions: no calibrated angle/warp/distortion threshold; no NR-O03/O04.
|
||||
|
||||
### Step 3 — `mitc4-kinematics-constitutive`
|
||||
|
||||
- Required reading: formulation Sections 3-11/17, Numerical Review 5.1-5.6/6.1,
|
||||
current math adapters and Euler kernel style.
|
||||
- Prerequisite: Step 2 `completed`.
|
||||
- RED: add KIN-001..005 in new `mitc4_shell_test.cpp`, register it, build unit target,
|
||||
run `ctest --test-dir .harness/build -C Debug -R "Mitc4ShellKinematics|Mitc4ShellConstitutive" --output-on-failure`.
|
||||
- GREEN: minimally add concrete shell kernel kinematics/constitutive seams; no global
|
||||
assembly or drilling.
|
||||
- VERIFY: focused kernel tests, then common full VERIFY.
|
||||
- Prohibitions: no public base hierarchy, no S4R branch, no nonlinear tangent code.
|
||||
|
||||
### Step 4 — `mitc4-stiffness-drilling`
|
||||
|
||||
- Required reading: formulation Sections 10-14/17, requirements 031-038/050-056,
|
||||
Numerical Review 5.7/6.1-6.2, completed Step 3 kernel.
|
||||
- Prerequisite: Step 3 `completed`.
|
||||
- RED: add KERNEL-001..006; build unit target and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "Mitc4ShellKernel|Mitc4ShellPatch|Mitc4ShellDrilling" --output-on-failure`.
|
||||
- GREEN: implement K20, 20-to-24 congruence and exact fixed drilling only.
|
||||
- VERIFY: focused kernel suite, then common full VERIFY.
|
||||
- Prohibitions: translations in R+, coefficient sweep, recovery/result output, future nonlinear.
|
||||
|
||||
### Step 5 — `mitc4-physical-recovery`
|
||||
|
||||
- Required reading: formulation Sections 14/16, requirements 035/042-046/052/056,
|
||||
I/O result component/location order, completed Step 4 kernel.
|
||||
- Prerequisite: Step 4 `completed`.
|
||||
- RED: add KERNEL-007 and PHYSREC-001; build unit target and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "Mitc4ShellDrilling|Mitc4ShellPhysicalRecovery" --output-on-failure`.
|
||||
- GREEN: minimally add kernel-local physical recovery and physical energy API only.
|
||||
- VERIFY: focused physical recovery/drilling tests, then common full VERIFY.
|
||||
- Prohibitions: no AnalysisState/global result rows, no drilling contribution or HDF5.
|
||||
|
||||
### Step 6 — `shell-dof-scatter`
|
||||
|
||||
- Required reading: requirements 005/025, architecture DofManager ownership, current
|
||||
`dof_manager.*` and constraint tests, completed shell model.
|
||||
- Prerequisite: Step 5 `completed`.
|
||||
- RED: add DOF-001..003; build unit target and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "DofManager|EssentialConstraints" --output-on-failure`.
|
||||
- GREEN: minimally add typed 24-entry scatter/pattern while preserving 12-entry B33.
|
||||
- VERIFY: focused DOF/constraint tests, then common full VERIFY.
|
||||
- Prohibitions: no equation IDs in model, no constraint/load ownership move.
|
||||
|
||||
### Step 7 — `shell-sparse-assembly`
|
||||
|
||||
- Required reading: requirements 027/030/037, architecture deterministic COO rule,
|
||||
current `sparse_assembler.cpp`/`sparse_matrix.cpp` tests, completed kernel/scatter.
|
||||
- Prerequisite: Step 6 `completed`.
|
||||
- RED: add ASM-001..003; build unit target and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "SparseAssembly" --output-on-failure`.
|
||||
- GREEN: minimally dispatch shell and emit stable 576-entry local buffers.
|
||||
- VERIFY: focused assembly tests, then common full VERIFY.
|
||||
- Prohibitions: no worker global CSR mutation, unordered reduction or S4R integration branch.
|
||||
|
||||
### Step 8 — `shell-load-validation`
|
||||
|
||||
- Required reading: requirements 017-020/028, formulation 8/13, I/O 4.2-4.3,
|
||||
current `load_assembler.*` and constraint lifecycle.
|
||||
- Prerequisite: Step 7 `completed`.
|
||||
- RED: add LOAD-001..004; build unit target and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "LoadAssembly|EssentialConstraints" --output-on-failure`.
|
||||
- GREEN: minimally add aggregate nodal moment/director validation and reuse full DOF load.
|
||||
- VERIFY: focused load/constraint tests, then common full VERIFY.
|
||||
- Prohibitions: no distributed/equivalent/follower load; no drill load channel.
|
||||
|
||||
### Step 9 — `shell-analysis-state`
|
||||
|
||||
- Required reading: requirements 026/041-046/048, I/O 6.3-6.5,
|
||||
current `analysis_state.*`/`result_records.hpp` and completed physical recovery types.
|
||||
- Prerequisite: Step 8 `completed`.
|
||||
- RED: add STATE-001..003; build unit target and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "AnalysisState" --output-on-failure`.
|
||||
- GREEN: minimally add candidate-owned shell row/global evidence containers and
|
||||
validation/commit mechanics.
|
||||
- VERIFY: focused AnalysisState tests, then common full VERIFY.
|
||||
- Prohibitions: no element calculation, ResultRecovery orchestration or HDF5 writing.
|
||||
|
||||
### Step 10 — `shell-result-recovery`
|
||||
|
||||
- Required reading: requirements 029/035/041-046/048, formulation 14/16, I/O 6.3-6.5,
|
||||
current `result_recovery.*` and completed Steps 5/9.
|
||||
- Prerequisite: Step 9 `completed`.
|
||||
- RED: add REC-001..005; build unit target and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "ResultRecovery" --output-on-failure`.
|
||||
- GREEN: minimally orchestrate full-residual evidence and physical shell recovery into
|
||||
a fully validated candidate, then commit it.
|
||||
- VERIFY: focused recovery tests, then common full VERIFY.
|
||||
- Prohibitions: no new result record type, location averaging, drill recovery or writer edit.
|
||||
|
||||
### Step 11 — `shell-hdf5-output`
|
||||
|
||||
- Required reading: requirements 039-048, I/O Section 6 exact schema, ADR atomic output,
|
||||
current HDF5 writer/self-check tests, completed recovery records.
|
||||
- Prerequisite: Step 10 `completed`.
|
||||
- RED: add H5-001..004; build unit target and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "Hdf5ResultsWriter" --output-on-failure`.
|
||||
- GREEN: add exact additive shell schema behind unchanged ResultsWriter boundary.
|
||||
- VERIFY: focused HDF5 tests, then common full VERIFY.
|
||||
- Prohibitions: no B33 schema reinterpretation, CSV solver output, partial final file.
|
||||
|
||||
### Step 12 — `shell-linear-static-flow`
|
||||
|
||||
- Required reading: requirements 024-030, architecture eight-hook lifecycle, I/O CLI
|
||||
contract, current `linear_static_analysis.*`/application integration tests.
|
||||
- Prerequisite: Step 11 `completed`.
|
||||
- RED: add FLOW-001..004; build integration target and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "LinearStaticCli|Mitc4ShellCli" --output-on-failure`.
|
||||
- GREEN: minimally route shell through existing lifecycle; preserve one factorization.
|
||||
- VERIFY: focused integration tests, then common full VERIFY.
|
||||
- Prohibitions: no analysis lifecycle reorder, no 0x0 singular conversion, no early state commit.
|
||||
|
||||
### Step 13 — `shell-reference-comparison`
|
||||
|
||||
- Required reading: requirements 058-072, I/O Section 7, Reference Model contract,
|
||||
the sole declared S4 paths and hashes, and current B33 comparator only as reusable
|
||||
identity/report precedent.
|
||||
- Scope ownership: this one test-only reference module owns TASK-13 comparator behavior
|
||||
plus TASK-14 declared-case tests; it owns no solver production module.
|
||||
- Prerequisite: Step 12 `completed` and valid MITC4 HDF5 fixture.
|
||||
- RED: update REF-003 first so the existing scale-dependent comparator fails against
|
||||
literal fixed-boundary cases around `1.0e-5`; build the reference target and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "Mitc4ReferenceComparison|Mitc4S4Reference" --output-on-failure`.
|
||||
Record the expected old-tolerance assertion failure.
|
||||
- GREEN: minimally replace only the MITC4 comparator decision value with fixed absolute
|
||||
`1.0e-5`; keep reference scale as diagnostic report data only.
|
||||
- If a declared case exposes a production defect outside this reference-test module,
|
||||
stop the Step and route a focused correction to the owning prior module; do not patch
|
||||
unrelated production layers inside this Step.
|
||||
- VERIFY: focused comparator and the declared S4 tests, then common full VERIFY.
|
||||
- Prohibitions: no reference artifact writes/Abaqus run, no metadata/README gate, no UR
|
||||
blocking, no B33 comparator change, and no scale/clamp substitution for fixed `1.0e-5`.
|
||||
|
||||
After explicit approval, planning may create only:
|
||||
|
||||
- `phases/index.json` with task status `pending` and no creation timestamp;
|
||||
- `phases/linear-static-mitc4-shell/index.json` with Steps 0-13 initially `pending` and
|
||||
no executor-owned timestamps;
|
||||
- `phases/linear-static-mitc4-shell/stepN.md` containing the approved self-contained
|
||||
directions.
|
||||
|
||||
Approval does not authorize `python scripts/execute.py linear-static-mitc4-shell` or
|
||||
`--push`.
|
||||
|
||||
## 13. Open Issues
|
||||
|
||||
| id | item | blocking now | resolution owner |
|
||||
| --- | --- | --- | --- |
|
||||
| OI-001 | Section 12 multi-Step Harness draft was explicitly approved on 2026-08-12 and materialized. | resolved | user |
|
||||
| OI-002 | Candidate shell semantic representation and exact C++ value/reference types are not public API decisions. | no | owning RED test in Steps 0/3 |
|
||||
| OI-003 | Per-test MITC4 CTest label can be added without relabeling B33 tests인지 확인한다. Exact suite regex remains sufficient. | no | Step 0 and downstream TASK-14 CMake verification |
|
||||
|
||||
No mathematical, I/O, reference-inventory or tolerance decision remains open for
|
||||
implementation planning. The user separately authorized implementation and Harness
|
||||
execution on 2026-08-12; the Executor still owns branch, Step selection, timestamps,
|
||||
commits and advancement.
|
||||
@@ -1,331 +0,0 @@
|
||||
# Linear Static MITC4 Shell Physics Evaluation Report
|
||||
|
||||
## Metadata
|
||||
|
||||
- feature_id: `linear-static-mitc4-shell`
|
||||
- model_id: `shell-s4`
|
||||
- evaluated_head: `820ba30c717b3d0e113775608e20dfd5fbc05d53`
|
||||
- source_build_test_report:
|
||||
`docs/linear-static-mitc4-shell/build-test.md`
|
||||
- source_reference_verification_report:
|
||||
`docs/linear-static-mitc4-shell/reference-comparison.md`
|
||||
- source_reference_model:
|
||||
`docs/linear-static-mitc4-shell/reference-model.md`
|
||||
- source_requirement: `docs/linear-static-mitc4-shell/requirements.md`
|
||||
- source_formulation: `docs/linear-static-mitc4-shell/formulation.md`
|
||||
- source_numerical_review:
|
||||
`docs/linear-static-mitc4-shell/numerical-review.md`
|
||||
- source_io_definition: `docs/linear-static-mitc4-shell/io.md`
|
||||
- status: `pass-for-release-agent`
|
||||
- owner_agent: `physics-evaluation-agent`
|
||||
- date: `2026-08-13`
|
||||
|
||||
This verdict means that the documented physical checks pass and the Release Agent
|
||||
may audit release readiness. It does not approve release readiness, re-approve the
|
||||
reference comparison, or change its tolerance decision.
|
||||
|
||||
## Input Evidence
|
||||
|
||||
The prerequisite reference-verification report has status
|
||||
`pass-for-physics-evaluation`. The existing S4 reference-test route was rebuilt and
|
||||
executed to regenerate fresh FESA evidence. Abaqus and other reference solvers were
|
||||
not executed.
|
||||
|
||||
| evidence | exact path or identity | status | notes |
|
||||
| --- | --- | --- | --- |
|
||||
| build/test report | `docs/linear-static-mitc4-shell/build-test.md` | `pass-for-reference-verification` | Clean MSVC x64 Debug build, focused `87/87`, lifecycle `10/10`, reference `8/8`, and full `144/144` CTest passed. |
|
||||
| reference verification | `docs/linear-static-mitc4-shell/reference-comparison.md` | `pass-for-physics-evaluation` | Required prerequisite satisfied; 147/147 blocking U rows passed and no UR warning was emitted. |
|
||||
| solver HDF5 | `.harness/build/reference/mitc4-shell-s4-comparison/results.h5` | present and readable | Freshly generated, 95,024 bytes; observed raw SHA-256 `E102D80E82BA133EBDF1C5532F3A0A4FE9984AB6CC36D00264399F7308D9230F` (inventory only). |
|
||||
| comparison ledger | `.harness/build/reference/mitc4-shell-s4-comparison/comparison.json` | present and passing | 94,349 bytes; SHA-256 `8E8DEA51B6F7C663BACC41FDA6103A4596DB26E02F1EAD6069D458F51E0102E6`; `passed=true`. |
|
||||
| declared S4 input | `reference/shell/shell.inp` | present, unchanged, read-only | SHA-256 `4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF`. |
|
||||
| declared displacement CSV | `reference/shell/shell displacements.csv` | present, unchanged, read-only | SHA-256 `C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B`. |
|
||||
| optional Abaqus reaction/stress CSVs | `reference/shell/shell reactions.csv`, `reference/shell/shell stresses.csv` | not used as equality gates | Their presence did not expand the approved U-only blocking boundary. |
|
||||
| solver CSV views | N/A | not generated | HDF5 was inspected directly. |
|
||||
| fresh S4 route | `.harness/build`, MSVC x64 Debug | pass | `Mitc4S4Reference.*` passed `2/2`. |
|
||||
|
||||
The HDF5 contains 49 nodes, 36 source-`S4` elements, internal formulation
|
||||
`FESA-MITC4`, and the required full `2 x 2 x 2` result inventory. All inspected
|
||||
numeric model and result values were finite. The diagnostics dataset contains four
|
||||
approved warning rows for ignored `PREPRINT`, `RESTART`, and `OUTPUT` keywords and
|
||||
no error diagnostic.
|
||||
|
||||
Raw HDF5 bytes are not a physics decision identity and may change across valid
|
||||
regenerations. The projected values and deterministic comparison ledger are the
|
||||
relevant evidence.
|
||||
|
||||
### Documented model expectation
|
||||
|
||||
The reference input is a flat `10 x 10`, thickness `0.5`, homogeneous isotropic
|
||||
square plate with `E=2.1e11` and `nu=0.3`. Its 24 perimeter nodes are fully clamped
|
||||
in all six global DOFs, and center node 2 at the global origin carries one
|
||||
`F3=-100000` concentrated force. The geometry, boundary, material, and load are
|
||||
symmetric about both global `x=0` and `y=0` planes.
|
||||
|
||||
The documented physical expectations are therefore:
|
||||
|
||||
- total constrained reaction force opposes the applied `-Z` force;
|
||||
- total force and moment about the global origin balance within the approved
|
||||
normalized `1e-10` limit;
|
||||
- perimeter displacements are zero and the interior deflects in `-Z`, with the
|
||||
largest magnitude at the center;
|
||||
- the displacement and rotation field obeys the polar/axial-vector reflection
|
||||
parity about both symmetry planes;
|
||||
- a linear, flat transverse plate response has no membrane strain/resultant or
|
||||
middle-surface in-plane stress, while bottom and top in-plane stresses reverse;
|
||||
- stored physical strain energy is finite, strictly positive, and consistent with
|
||||
the recovered generalized fields and `0.5 F^T d`;
|
||||
- free residual, finite results, rank/rigid-mode evidence, and the approved
|
||||
one-case coverage show no rigid-body or unsupported-mode symptom.
|
||||
|
||||
## Physics Checks
|
||||
|
||||
| check | documented expectation | observed evidence | verdict | classification |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| global equilibrium | Applied plus constrained reaction force/moment about origin; normalized metrics `<=1e-10` | force residual `[0,0,-1.12049747258425e-9]`; moment residual `[6.45741238258779e-10,-2.63753463514149e-10,0]`; normalized force/moment `1.12049747258425e-14` / `2.35981341581908e-15` | pass | N/A |
|
||||
| reaction consistency | Perimeter-only reactions from full residual oppose `F3=-100000`; constrained motion is zero | summed constrained force `[0,0,99999.9999999989]`; constrained displacement exactly zero | pass | N/A |
|
||||
| displacement direction | Interior bends in `-Z`; center is maximum; no in-plane or drilling leakage | center `U3=-2.35504417650849e-5`; all 25 free-node U3 values nonpositive; `U1/U2/UR3` exactly zero | pass | N/A |
|
||||
| symmetry | Correct polar/axial reflection parity about `x=0` and `y=0` | max absolute reflection mismatch `4.27126230127111e-20` / `2.29087480670778e-20` | pass | N/A |
|
||||
| element force balance | No documented direct element-end-action output exists for shell GP resultants | Global assembled residual/equilibrium passed; direct element-end-action balance is skipped rather than inferred from mismatched locations | skipped | N/A |
|
||||
| recovered resultant consistency | `N=A*epsilon0`, `M=D*kappa`, `Q=As*gamma0` at each of 144 GP rows | absolute L2 residual `9.9301874551584e-12`; normalized L2 `5.56240926027087e-17` | pass | N/A |
|
||||
| stress/location/sign sanity | Local `[S11,S22,S12]` at bottom/middle/top; middle zero and faces reverse for this linear flat bending field | absolute L2 constitutive residual `1.29488994752188e-9`; normalized `3.05323934859307e-16`; middle stress exactly zero; face reversal exact | pass | N/A |
|
||||
| rigid body/nonfinite | Complete constraints, finite solution, acceptable residual, no abnormal uncontrolled mode | zero nonfinite values; `FREE_RESIDUAL_NORMALIZED=1.07747756058988e-14`; rank/rigid-mode tests passed upstream | pass | N/A |
|
||||
| physical energy | Positive and consistent physical-only energy; no drilling-energy gate | `1.17752208825422`; independently recovered value identical to relative `1.88569375589575e-16`; `0.5F^Td=1.17752208825424` | pass | N/A |
|
||||
| model coverage | Approved sole S4 case plus declared invariant/patch/common-path portfolio | S4 case covers end-to-end symmetric plate response; focused build/test portfolio passed; expanded models are explicitly nonblocking | pass | N/A |
|
||||
|
||||
### 1. Global force and moment equilibrium
|
||||
|
||||
The reaction dataset is the assembled full residual `K*d-F`. Applying the
|
||||
constraint mask gives
|
||||
|
||||
```text
|
||||
sum constrained RF = [0, 0, 99999.9999999989]
|
||||
sum applied F = [0, 0, -100000]
|
||||
force residual = [0, 0, -1.12049747258425e-9]
|
||||
```
|
||||
|
||||
The load acts at the global origin and therefore contributes no origin moment.
|
||||
The constrained force and moment rows give
|
||||
|
||||
```text
|
||||
moment residual = [ 6.45741238258779e-10,
|
||||
-2.63753463514149e-10,
|
||||
0 ]
|
||||
```
|
||||
|
||||
These independently reconstructed values match the stored HDF5 equilibrium vector
|
||||
exactly. The serialized normalized metrics are:
|
||||
|
||||
| metric | value | threshold | result |
|
||||
| --- | ---: | ---: | --- |
|
||||
| `FREE_RESIDUAL_NORMALIZED` | `1.07747756058988e-14` | `1.0e-10` | pass |
|
||||
| `FORCE_BALANCE_NORMALIZED` | `1.12049747258425e-14` | `1.0e-10` | pass |
|
||||
| `MOMENT_BALANCE_NORMALIZED` | `2.35981341581908e-15` | `1.0e-10` | pass |
|
||||
|
||||
### 2. Reaction consistency and constrained/free meaning
|
||||
|
||||
The 24 perimeter nodes provide 144 constrained DOFs; the remaining 150 DOFs are
|
||||
free. The HDF5 constraint mask agrees with the input set exactly, all prescribed
|
||||
values are zero, and the maximum constrained displacement is exactly zero.
|
||||
|
||||
The total positive `RF3=99999.9999999989` opposes the center `F3=-100000`. The
|
||||
nearly zero total `RF1/RF2` and origin `RM1/RM2/RM3` are required by the centered
|
||||
load and double symmetry. The largest raw free residual component is
|
||||
`7.62156560085714e-10`; because translational and rotational entries have different
|
||||
dimensions, the decision uses the documented normalized metric rather than this
|
||||
raw maximum. The normalized free residual passes by more than three orders of
|
||||
magnitude.
|
||||
|
||||
### 3. Displacement direction and deformation mode
|
||||
|
||||
Center node 2 has
|
||||
|
||||
```text
|
||||
[U1,U2,U3,UR1,UR2,UR3]
|
||||
= [0, 0, -2.35504417650849e-5, 0, 0, 0]
|
||||
```
|
||||
|
||||
Every free-node `U3` is nonpositive, the center is the maximum-magnitude
|
||||
translation, and every clamped boundary displacement is zero. Across the complete
|
||||
model, maximum absolute `U1`, `U2`, and `UR3` are exactly zero. Maximum absolute
|
||||
`UR1` and `UR2` are `7.55060026636931e-6` and
|
||||
`7.55060026636933e-6`, respectively. This is the expected symmetric plate-bending
|
||||
mode under a negative transverse center load, with no in-plane or drilling
|
||||
deformation leakage.
|
||||
|
||||
### 4. Reflection symmetry and expected zeros
|
||||
|
||||
For reflection through `x=0`, polar displacement components transform as
|
||||
`[-U1,+U2,+U3]`, while the axial rotation vector transforms as
|
||||
`[+UR1,-UR2,-UR3]`. Reflection through `y=0` similarly uses
|
||||
`[+U1,-U2,+U3,-UR1,+UR2,-UR3]`.
|
||||
|
||||
All 294 scalar nodal component comparisons per reflection were paired by source
|
||||
coordinates. The maximum absolute mismatch was `4.27126230127111e-20` for the
|
||||
`x` reflection and `2.29087480670778e-20` for the `y` reflection. The equality
|
||||
evidence is numerical roundoff, not a new acceptance tolerance.
|
||||
|
||||
### 5. Shell generalized resultants and physical work signs
|
||||
|
||||
At every one of 36 elements times four midsurface Gauss locations, an independent
|
||||
constitutive reconstruction applied the documented centered-section identities:
|
||||
|
||||
```text
|
||||
N = A * epsilon0
|
||||
M = D * kappa
|
||||
Q = As * gamma0
|
||||
```
|
||||
|
||||
The complete 1,152-component resultant comparison has absolute L2 residual
|
||||
`9.9301874551584e-12` and normalized L2 residual
|
||||
`5.56240926027087e-17`. All membrane strains and `N` resultants are exactly zero,
|
||||
as required for this linear flat plate bending response.
|
||||
|
||||
The generalized work density `generalized_strain dot section_resultant` is strictly
|
||||
positive at all 144 locations: minimum `4.46321446508071e-4`, maximum
|
||||
`1.27059464107458e-1`, negative count `0`. This supports the physical sign and
|
||||
component-order interpretation.
|
||||
|
||||
The shell contract does not expose element-end nodal actions and explicitly forbids
|
||||
averaging mismatched result locations. Consequently a separate GP-to-element-end
|
||||
force-balance assertion is not documented and is marked `skipped`; the assembled
|
||||
global residual and equilibrium checks provide the required force-balance evidence.
|
||||
|
||||
### 6. Stress component, location, and sign sanity
|
||||
|
||||
HDF5 stores local in-plane `[S11,S22,S12]` directly at each GP and ordered section
|
||||
positions `BOTTOM(-1), MIDDLE(0), TOP(+1)`. Independent reconstruction used
|
||||
`Cps*(epsilon0+z*kappa)` at all 432 section locations. The absolute L2 residual is
|
||||
`1.29488994752188e-9`, or normalized `3.05323934859307e-16`, against a maximum
|
||||
absolute stored stress of `313250.779137971`.
|
||||
|
||||
All middle-surface in-plane stresses are exactly zero. For every component and GP,
|
||||
bottom and top stresses are equal in magnitude and opposite in sign. This is the
|
||||
documented curvature/stress-location convention for a centered homogeneous section.
|
||||
No `S33`, `S13`, `S23`, nodal stress, or Abaqus stress equality was inferred.
|
||||
|
||||
### 7. Physical energy, residual, and rigid-body symptoms
|
||||
|
||||
The stored `PHYSICAL_STRAIN_ENERGY` is finite and positive:
|
||||
|
||||
```text
|
||||
HDF5 physical energy = 1.17752208825422
|
||||
independent GP generalized energy = 1.17752208825422
|
||||
0.5 * F^T * d = 1.17752208825424
|
||||
```
|
||||
|
||||
The HDF5-versus-recovered normalized difference is
|
||||
`1.88569375589575e-16`; the final fresh HDF5-versus-external-work normalized
|
||||
difference is `9.14561471609432e-15`. The HDF5 value excludes numerical drilling stabilization,
|
||||
as required. No drilling-energy ratio, calibration, or warning criterion was
|
||||
introduced.
|
||||
|
||||
The solution is finite, the full perimeter support is enforced, the expected
|
||||
deformation mode is smooth and symmetric, all three normalized verification
|
||||
metrics pass `1e-10`, and the build/test evidence passes six-rigid-mode,
|
||||
stabilized-rank, non-rigid positive-energy, and pure-drill separation tests. No
|
||||
rigid-body, singular, nonfinite, or abnormal-mode symptom is present.
|
||||
|
||||
### 8. Approved model coverage
|
||||
|
||||
The sole approved reference model provides end-to-end evidence for the
|
||||
full-integration `S4 -> FESA-MITC4` path, a nonzero transverse bending response,
|
||||
fully constrained reaction recovery, global force/moment balance, two-axis
|
||||
symmetry, physical energy, and shell result recovery.
|
||||
|
||||
The prerequisite focused `87/87` build/test portfolio supplies the documented
|
||||
complementary element evidence: membrane, bending, transverse-shear and twist patch
|
||||
fields; six physical rigid modes; expected physical/stabilized rank; frame and
|
||||
energy invariance; fixed numerical drilling and physical-recovery separation; and
|
||||
S4/S4R common-kernel/source-metadata behavior. The reference verification supplies
|
||||
the approved external displacement comparison.
|
||||
|
||||
This is the complete approved coverage for the feature. Pinched-cylinder,
|
||||
hemisphere, Scordelis-Lo, locking/convergence sequences, drilling calibration,
|
||||
expanded distorted/curved portfolios, and `NR-O01` through `NR-O04` are explicitly
|
||||
nonblocking or out of scope and were not invented as new physics gates.
|
||||
|
||||
## Execution Evidence
|
||||
|
||||
| order | exact command or read-only operation | exit code | result |
|
||||
| ---: | --- | ---: | --- |
|
||||
| 1 | `cmake --build .harness/build --config Debug --target fesa_reference_tests` | `0` | Existing S4 reference route rebuilt. |
|
||||
| 2 | `ctest --test-dir .harness/build -C Debug -R '^Mitc4S4Reference\.' --output-on-failure` | `0` | Fresh S4 tests `2/2` passed; FESA HDF5 and ledger regenerated. |
|
||||
| 3 | `h5dump.exe -n .harness/build/reference/mitc4-shell-s4-comparison/results.h5` with HDF5/oneAPI runtime on `PATH` | `0` | Required HDF5 inventory inspected read-only. |
|
||||
| 4 | `h5dump.exe -y -w 0 -m '%.17g' -d <dataset> .harness/build/reference/mitc4-shell-s4-comparison/results.h5` for model nodes/elements/mask/prescribed values, nodal U/R, shell frames/strain/resultant/stress, energy/equilibrium/metrics/diagnostics | `0` | High-precision read-only numerical audit supplied all reported values. |
|
||||
| 5 | PowerShell independent input/mask, reaction/equilibrium, reflection, constitutive recovery, stress-location, energy, finite, and diagnostics audit over the `h5dump` values | `0` | All documented physics assertions passed. |
|
||||
| 6 | `cmake --build .harness/build --config Debug --target fesa_unit_tests fesa_reference_tests`, then `ctest --test-dir .harness/build -C Debug -R 'Mitc4Shell(Kernel|Patch|Drilling|PhysicalRecovery)|ResultRecovery\..*Shell|Mitc4S4Reference' --output-on-failure` | `0` | Final focused verification passed `17/17`; the regenerated ledger retained `passed=true`, 294 rows, and zero warnings. |
|
||||
|
||||
Three intermediate audit-helper incidents were diagnostic-only and did not alter
|
||||
the product or verdict: a compound-record regular expression initially omitted the
|
||||
last node, a PowerShell array-expression initially bound subtraction to an array,
|
||||
and a final optional `h5ls` operand-order probe exited `1`. The root causes were
|
||||
confirmed as audit-command/parser usage, while successful high-precision HDF5
|
||||
inspection established 49/49 nodes and the complete evidence above. They are not
|
||||
solver, HDF5-schema, reference, or physics failures.
|
||||
|
||||
## Failure Classification
|
||||
|
||||
- classification: `N/A`
|
||||
- primary_failure: `N/A`
|
||||
- evidence: all documented force/moment equilibrium, reaction, displacement,
|
||||
symmetry, recovery, stress-location, physical-energy, residual, finite-result,
|
||||
rigid-mode and approved coverage checks passed
|
||||
- correction_handoff: `N/A`
|
||||
- non_gating_incident: resolved read-only audit helper parsing/usage errors only
|
||||
|
||||
## Evaluation Verdict
|
||||
|
||||
- verdict: `pass-for-release-agent`
|
||||
- reason: the prerequisite reference status is valid and fresh FESA S4 evidence
|
||||
satisfies every documented physical expectation under its approved threshold;
|
||||
no implementation, formulation, I/O, model-coverage, nonfinite, rigid-body, or
|
||||
environment failure remains
|
||||
- release_approval: `not granted by this report`
|
||||
- reference_reapproval: `not performed by this report`
|
||||
|
||||
## Handoff Recommendation
|
||||
|
||||
| target_agent | reason | required_input |
|
||||
| --- | --- | --- |
|
||||
| Release Agent | All documented MITC4 physics checks passed. | This report, the build/test and reference-verification reports, the fresh build-local HDF5/comparison evidence, and the nonblocking limitations below. |
|
||||
|
||||
## No-Change Assertion
|
||||
|
||||
- source_files_modified: `false`
|
||||
- test_files_modified: `false`
|
||||
- cmake_files_modified: `false`
|
||||
- requirements_modified: `false`
|
||||
- formulation_modified: `false`
|
||||
- numerical_review_modified: `false`
|
||||
- io_contract_modified: `false`
|
||||
- reference_model_contract_modified: `false`
|
||||
- build_test_report_modified: `false`
|
||||
- reference_verification_report_modified: `false`
|
||||
- phase_files_modified: `false`
|
||||
- tolerance_policies_modified: `false`
|
||||
- reference_artifacts_modified: `false`
|
||||
- Abaqus_or_other_reference_solver_executed: `false`
|
||||
- owned_report_created: `true`
|
||||
- generated_build_local_evidence: `true`, ignored under `.harness/build/`
|
||||
- pre_existing_untracked_build_test_report_preserved: `true`
|
||||
- pre_existing_untracked_reference_verification_report_preserved: `true`
|
||||
|
||||
## Open Issues
|
||||
|
||||
- Nonblocking coverage limitation: the approved external reference inventory is one
|
||||
flat, symmetric, fully clamped S4 plate. The approved analytical/unit portfolio
|
||||
supplies membrane, shear, twist, rigid-mode, rank, drilling-separation and S4R
|
||||
common-path evidence. No broader Abaqus or benchmark portfolio is claimed.
|
||||
- Known original-MITC4 limitations remain: transverse-shear locking is mitigated by
|
||||
the tying field, but distorted-curved membrane locking and broader thin/thick mesh
|
||||
convergence are not characterized by this release gate.
|
||||
- Source `S4R` maps to the same full-integration FESA kernel and is not compared to
|
||||
the optional Abaqus S4R artifacts. This is an approved boundary, not missing
|
||||
physics evidence.
|
||||
- The fixed numerical drilling stiffness is not a physical stress/resultant/energy
|
||||
channel. No drilling calibration, coefficient sweep, energy-ratio gate, or
|
||||
director-parallel moment support is claimed.
|
||||
- Geometrically nonlinear execution remains outside the current feature even though
|
||||
future-only residual/tangent equations are documented. No nonlinear release claim
|
||||
is made.
|
||||
- No open issue blocks Release Agent review.
|
||||
@@ -1,271 +0,0 @@
|
||||
# Linear Static MITC4 Shell Reference Verification Report
|
||||
|
||||
## Metadata
|
||||
|
||||
- feature_id: `linear-static-mitc4-shell`
|
||||
- model_id: `shell-s4`
|
||||
- source_head: `820ba30c717b3d0e113775608e20dfd5fbc05d53`
|
||||
- source_build_test_report:
|
||||
`docs/linear-static-mitc4-shell/build-test.md`
|
||||
- source_reference_models:
|
||||
`docs/linear-static-mitc4-shell/reference-model.md`
|
||||
- source_io_definition: `docs/linear-static-mitc4-shell/io.md`
|
||||
- source_requirements: `docs/linear-static-mitc4-shell/requirements.md`
|
||||
- historical_status: `pass-for-physics-evaluation`
|
||||
- current_status: `pass-for-physics-evaluation`
|
||||
- superseded_on: `2026-08-18`
|
||||
- revalidated_on: `2026-08-18`
|
||||
- owner_agent: `reference-verification-agent`
|
||||
- date: `2026-08-13`
|
||||
|
||||
The fixed-absolute-tolerance evidence below is preserved as a historical record. ADR-022
|
||||
supersedes that decision with the common family-scale row/RMS policy. The following revalidation
|
||||
is the current reference-gate evidence.
|
||||
|
||||
## 2026-08-18 Common-policy Revalidation
|
||||
|
||||
`cmake --build .harness/build --config Debug` passed, followed by
|
||||
`ctest --test-dir .harness/build -C Debug --output-on-failure`: 214/214 tests passed.
|
||||
The S4 reference test generated
|
||||
`.harness/build/reference/mitc4-shell-s4-comparison/comparison.json` from the declared
|
||||
read-only input/CSV pair.
|
||||
|
||||
- exact canonical rows: 294
|
||||
- blocking translation family: 147 rows, all row/RMS gates passed
|
||||
- warning-only rotation family: 147 rows, all row/RMS gates passed; warnings 0
|
||||
- identity/schema/nonfinite failures: 0
|
||||
- overall verdict: `passed=true`
|
||||
|
||||
| family | rows | scale | near-zero rows | max absolute error | scale-relative RMS |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: |
|
||||
| translation `U1/U2/U3` | 147 | `2.37408203e-5` | 122 | `1.903785349151439e-7` | `1.0332756650397166e-3` |
|
||||
| rotation `UR1/UR2/UR3` | 147 | `7.60725743e-6` | 107 | `6.882854962740428e-8` | `2.9771372973060382e-3` |
|
||||
|
||||
All values above come from the generated JSON ledger. The historical report body starts below
|
||||
and must not be read as the current identity/tolerance evidence.
|
||||
|
||||
The prerequisite build/test report has status `pass-for-reference-verification`.
|
||||
This report verifies only the approved full-integration S4 displacement case. It
|
||||
does not compare S4R artifacts, claim Abaqus formulation equivalence, approve
|
||||
physics sanity, or approve release readiness.
|
||||
|
||||
## Verdict
|
||||
|
||||
The reference-comparison gate passes. The fresh FESA result has an exact
|
||||
294-row identity match to the read-only Abaqus displacement CSV. All 147 blocking
|
||||
`U1/U2/U3` rows satisfy the fixed absolute tolerance `1.0e-5`. All 147
|
||||
warning-only `UR1/UR2/UR3` rows also satisfy `1.0e-5`, so no rotational warning
|
||||
was emitted.
|
||||
|
||||
- declared cases compared: `1/1`
|
||||
- blocking rows passed: `147/147`
|
||||
- blocking failures: `0`
|
||||
- warning-only rows compared: `147/147`
|
||||
- warning-only exceedances and warnings: `0/0`
|
||||
- missing / extra / duplicate / nonfinite rows: `0 / 0 / 0 / 0`
|
||||
- largest blocking normalized error: `0.0190378534915144`
|
||||
- comparison verdict: `passed=true`
|
||||
|
||||
## Artifact Inventory
|
||||
|
||||
| item | exact path | status | direct evidence |
|
||||
| --- | --- | --- | --- |
|
||||
| declared S4 input | `reference/shell/shell.inp` | present, unchanged | 4,770 bytes; SHA-256 `4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF` |
|
||||
| required displacement CSV | `reference/shell/shell displacements.csv` | present, unchanged | 5,592 bytes; SHA-256 `C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B`; 49 wide rows and six finite components per row |
|
||||
| authoritative solver output | `.harness/build/reference/mitc4-shell-s4-comparison/results.h5` | present, valid | 95,024 bytes after a fresh verification run; observed raw SHA-256 `E88E5E5E1F83AB95CAE545AD1F28F896D3FCB82F3EA2B8006A3A703FED07A5CB` (non-decision inventory only) |
|
||||
| deterministic comparison ledger | `.harness/build/reference/mitc4-shell-s4-comparison/comparison.json` | present, valid | 94,349 bytes; SHA-256 `8E8DEA51B6F7C663BACC41FDA6103A4596DB26E02F1EAD6069D458F51E0102E6`; `passed=true` |
|
||||
| S4R reference artifacts | `reference/shellR/` | not consumed | Excluded from the approved acceptance comparison. |
|
||||
| reaction and stress CSVs | other files under `reference/shell/` | not consumed | Optional inspection evidence only; not an equality gate. |
|
||||
| FESA-derived CSV | N/A | not generated | HDF5 was compared directly to the Abaqus CSV. |
|
||||
|
||||
The input and required CSV had identical SHA-256 values and identical UTC
|
||||
modification times (`2026-08-11T11:44:40.9520527Z`) before and after the fresh
|
||||
comparison runs. `git diff --name-only -- reference` and
|
||||
`git status --short -- reference` each returned zero paths.
|
||||
|
||||
The HDF5 hash above inventories one fresh generation, not a stable content
|
||||
identity. Raw HDF5 bytes changed across regenerations while the projected values
|
||||
and deterministic JSON ledger remained identical; concurrent executions of the
|
||||
same ignored build-local route may replace the file again. This report does not
|
||||
claim byte-identical HDF5 container output.
|
||||
|
||||
### Authoritative HDF5 projection audit
|
||||
|
||||
The comparator and a read-only HDF5 2.1.1 inspection established:
|
||||
|
||||
- `/metadata`: schema version `0`, feature `linear-static-mitc4-shell`, solver
|
||||
version `0.1.0`, `Step-1`, frame `0`, internal formulation `FESA-MITC4`, and
|
||||
integration rule `2x2x2-gauss; mitc4-edge-midpoint-shear`;
|
||||
- source input identity:
|
||||
`path=C:/Users/baram/orca/workspaces/FESADev/MITC4/reference/shell/shell.inp;content_identity=fnv1a64:cf0795df753d377e`;
|
||||
- `/model/nodes`: 49 compound rows with ordered fields
|
||||
`internal_node_id`, `instance_name`, `source_label`, and `coordinates`;
|
||||
- `/model/elements`: 36 compound rows, source element type `S4`, and internal
|
||||
formulation `FESA-MITC4`;
|
||||
- `/steps/Step-1/frames/0/nodal/displacement`: float64 shape `[49,6]`, global
|
||||
nodal components `[UX,UY,UZ,URX,URY,URZ]`, mapped to
|
||||
`[U1,U2,U3,UR1,UR2,UR3]`;
|
||||
- all projected source identities and displacement values are unique and finite.
|
||||
|
||||
## Comparison Contract
|
||||
|
||||
- case identity: `shell-s4`
|
||||
- authoritative FESA dataset:
|
||||
`/steps/Step-1/frames/0/nodal/displacement`
|
||||
- HDF5 node identity source: `/model/nodes.instance_name` and
|
||||
`/model/nodes.source_label`
|
||||
- normalized key:
|
||||
`(case_id, instance_name, source_node_label, component)`
|
||||
- observed instance: `Part-1-1`
|
||||
- observed source nodes: 49 unique labels
|
||||
- CSV projection: trimmed `Part Instance Name`, `Node Label`, `U-U1`, `U-U2`,
|
||||
`U-U3`, `UR-UR1`, `UR-UR2`, and `UR-UR3`
|
||||
- stable component order: `[U1,U2,U3,UR1,UR2,UR3]`
|
||||
- blocking inventory: `U1/U2/U3`
|
||||
- warning-only inventory: `UR1/UR2/UR3`
|
||||
- row precheck: exact key set, unique rows, finite HDF5/reference values, and
|
||||
exact required HDF5 schema before tolerance evaluation
|
||||
- tolerance source: requirements `FESA-REQ-LSMITC4-058` through `064`, the I/O
|
||||
definition Section 7, and the approved reference-model contract Section 5
|
||||
- row tolerance: `abs(fesa-reference) <= 1.0e-5`
|
||||
- tolerance-normalized error: `absolute_error / 1.0e-5`
|
||||
- `reference_scale`: diagnostic only; it does not alter the tolerance or verdict
|
||||
- zero policy: no clamp, substitution, omission, averaging, or row-order matching
|
||||
|
||||
Independent ledger reconstruction found 294 projected CSV keys, 294 comparison
|
||||
keys, zero duplicate keys, and exact set equality. All 294 serialized row
|
||||
tolerances equal `1.0e-5`. The complete per-row decisions remain in the
|
||||
identified deterministic `comparison.json`.
|
||||
|
||||
## Execution Evidence
|
||||
|
||||
The existing FESA S4 reference route was used; Abaqus and other reference solvers
|
||||
were not executed. The first run regenerated the evidence after its test-owned
|
||||
output directory cleanup. Further exact reruns confirmed the ledger bytes and the
|
||||
final verification assertions.
|
||||
|
||||
| order | exact command | exit code | result |
|
||||
| ---: | --- | ---: | --- |
|
||||
| 1 | `cmake --build .harness/build --config Debug --target fesa_reference_tests` | `0` | Reference test executable built; duration `1.830 s`. |
|
||||
| 2 | `ctest --test-dir .harness/build -C Debug -R '^Mitc4S4Reference\.' --output-on-failure` | `0` | Fresh S4 E2E tests `2/2` passed; duration `0.760 s`. |
|
||||
| 3 | PowerShell CSV/JSON identity and metric audit | `0` | 294 exact keys; missing/extra/duplicate/nonfinite/nonfixed-tolerance counts all zero. |
|
||||
| 4 | `ctest --test-dir .harness/build -C Debug -R '^Mitc4S4Reference\.' --output-on-failure` | `0` | Repeat S4 E2E tests `2/2` passed; duration `0.911 s`; JSON hash unchanged. |
|
||||
| 5 | `h5dump.exe -A -g '/metadata' <results.h5>` with HDF5 and Intel oneAPI 2026.1 runtime directories prepended to `PATH` | `0` | Required metadata values inspected read-only. |
|
||||
| 6 | `h5dump.exe -H -d '/model/nodes' <results.h5>` | `0` | Compound schema and shape `[49]` inspected. |
|
||||
| 7 | `h5dump.exe -H -d '/model/elements' <results.h5>` | `0` | Compound schema and shape `[36]` inspected. |
|
||||
| 8 | `h5dump.exe -H -d '/steps/Step-1/frames/0/nodal/displacement' <results.h5>` | `0` | Float64 displacement schema and shape `[49,6]` inspected. |
|
||||
| 9 | Final `ctest --test-dir .harness/build -C Debug -R '^Mitc4S4Reference\.' --output-on-failure` plus report/metric assertion script | `0` | S4 E2E tests `2/2`; `verification=PASS`; final generated artifacts retained. |
|
||||
| 10 | `git diff --check` | `0` | Report patch has no whitespace errors. |
|
||||
| 11 | target-only Git scope and reference no-change audit | `0` | Only this owned report and the pre-existing untracked build/test report are visible; reference scope remains clean. |
|
||||
|
||||
An initial optional `h5dump` probe without the Intel runtime directory exited
|
||||
`-1073741515` because `libmmd.dll` was not on that process's `PATH`. The same
|
||||
read-only inspection passed after adding the installed oneAPI runtime path. This
|
||||
was an inspection-environment incident, not a solver, schema, comparison, or
|
||||
reference-artifact failure.
|
||||
|
||||
The repeated JSON ledger was byte-identical:
|
||||
|
||||
- size: `94,349` bytes
|
||||
- SHA-256 before and after repeat: `8E8DEA51B6F7C663BACC41FDA6103A4596DB26E02F1EAD6069D458F51E0102E6`
|
||||
- row decisions: `294`
|
||||
- component metrics: `6`
|
||||
- node vector metrics: `49`
|
||||
- warnings: `0`
|
||||
- verdict: `passed=true`
|
||||
|
||||
## Quantity Results
|
||||
|
||||
`max_rel` is calculated only for nonzero Abaqus values and is diagnostic. Tiny
|
||||
reference residues make it ill-conditioned; the acceptance decision uses only
|
||||
the fixed absolute tolerance and its fixed-tolerance-normalized error.
|
||||
|
||||
| quantity | components | behavior | compared | missing | extra | duplicate | nonfinite | max abs | max rel | max normalized | RMS | L2 norm | worst ID/component by abs error | result |
|
||||
| --- | --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | --- |
|
||||
| displacement | `U1/U2/U3` | blocking | 147 | 0 | 0 | 0 | 0 | `1.90378534915144e-7` | `1.0` | `0.0190378534915144` | `2.45308118840709e-8` | `2.97420287738877e-7` | `Part-1-1`, node 2, `U3` | pass |
|
||||
| rotation | `UR1/UR2/UR3` | warning-only | 147 | 0 | 0 | 0 | 0 | `6.88285496274043e-8` | `35.7165926082675` | `0.00688285496274043` | `2.26478498250615e-8` | `2.74590586054375e-7` | `Part-1-1`, node 44, `UR1` | pass, no warning |
|
||||
|
||||
The translational maximum relative error `1.0` occurs on near-zero reference
|
||||
residue, including node 1 `U3=-1.17769804e-32`. The rotational maximum relative
|
||||
error `35.7165926082675` occurs at node 2 `UR2`, where the reference is
|
||||
`1.3860685e-22` and the absolute error is only `4.95056439416524e-21`.
|
||||
Neither value was clamped or omitted, and neither relative diagnostic controls
|
||||
the verdict.
|
||||
|
||||
### Component metrics
|
||||
|
||||
Each component contains 49 matched rows. `reference_scale` is retained only as
|
||||
diagnostic information. `L2 norm` is the comparator's component
|
||||
`vector_norm_error`, and `worst_row` is the zero-based index in the JSON ledger.
|
||||
|
||||
| component | behavior | reference scale | tolerance | max abs | max rel | max normalized | RMS | L2 norm | worst row | worst identity | result |
|
||||
| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | --- |
|
||||
| `U1` | blocking | `3.11730945e-23` | `1.0e-5` | `3.11730945e-23` | `1.0` | `3.11730945e-18` | `1.13587076092006e-23` | `7.95109532644045e-23` | 66 | node 12 / `U1` | pass |
|
||||
| `U2` | blocking | `3.11730945e-23` | `1.0e-5` | `3.11730945e-23` | `1.0` | `3.11730945e-18` | `1.13587076092006e-23` | `7.95109532644045e-23` | 61 | node 11 / `U2` | pass |
|
||||
| `U3` | blocking | `2.37408203e-5` | `1.0e-5` | `1.90378534915144e-7` | `1.0` | `0.0190378534915144` | `4.24886125341252e-8` | `2.97420287738877e-7` | 8 | node 2 / `U3` | pass |
|
||||
| `UR1` | warning-only | `7.60725743e-6` | `1.0e-5` | `6.88285496274043e-8` | `11.9344619221920` | `0.00688285496274043` | `2.77378379212910e-8` | `1.94164865449037e-7` | 261 | node 44 / `UR1` | pass, no warning |
|
||||
| `UR2` | warning-only | `7.60725743e-6` | `1.0e-5` | `6.88285496273990e-8` | `35.7165926082675` | `0.00688285496273990` | `2.77378379212909e-8` | `1.94164865449036e-7` | 202 | node 34 / `UR2` | pass, no warning |
|
||||
| `UR3` | warning-only | `5.27113701e-25` | `1.0e-5` | `5.27113701e-25` | `1.0` | `5.27113701e-20` | `2.12986098533393e-25` | `1.49090268973375e-24` | 203 | node 34 / `UR3` | pass, no warning |
|
||||
|
||||
### Worst rows and node-vector metrics
|
||||
|
||||
- global worst and worst blocking row: `shell-s4`, `Part-1-1`, node 2,
|
||||
`U3`; FESA `-2.35504417650849e-5`, Abaqus `-2.37408203e-5`, absolute
|
||||
error `1.90378534915144e-7`, tolerance `1.0e-5`, normalized error
|
||||
`0.0190378534915144`, within tolerance;
|
||||
- worst warning-only row: `shell-s4`, `Part-1-1`, node 44, `UR1`; FESA
|
||||
`1.39850632037260e-6`, Abaqus `1.46733487e-6`, absolute error
|
||||
`6.88285496274043e-8`, normalized error `0.00688285496274043`, within
|
||||
tolerance;
|
||||
- maximum per-node displacement-vector error: `1.90378534915144e-7` at
|
||||
`Part-1-1`, node 2;
|
||||
- maximum per-node rotation-vector error: `7.21144690026432e-8` at
|
||||
`Part-1-1`, node 39.
|
||||
|
||||
## Failure Classification
|
||||
|
||||
- classification: `N/A`
|
||||
- primary_failure: `N/A`
|
||||
- evidence: declared artifacts exist; the authoritative HDF5 projection passed
|
||||
schema and identity checks; 294/294 exact row keys are unique and finite;
|
||||
147/147 blocking rows pass; zero rotational exceedances or warnings occurred
|
||||
- correction_handoff: `N/A`
|
||||
|
||||
The optional first `h5dump` runtime-path incident is classified as a resolved
|
||||
inspection-environment incident and does not affect this gate.
|
||||
|
||||
## Handoff Recommendation
|
||||
|
||||
| target_agent | reason | required input |
|
||||
| --- | --- | --- |
|
||||
| Physics Evaluation Agent | All declared blocking reference rows passed the exact approved tolerance, and the warning-only inventory has no exceedance. | This report, `.harness/build/reference/mitc4-shell-s4-comparison/results.h5`, and its deterministic `comparison.json`. |
|
||||
|
||||
The handoff status is `pass-for-physics-evaluation` only. Physics Evaluation
|
||||
remains responsible for equilibrium, reaction sign, displacement direction,
|
||||
symmetry, physical energy, result signs, and model-coverage adequacy.
|
||||
|
||||
## No-Change Assertion
|
||||
|
||||
- source_files_modified: `false`
|
||||
- test_files_modified: `false`
|
||||
- cmake_files_modified: `false`
|
||||
- requirements_modified: `false`
|
||||
- formulation_modified: `false`
|
||||
- numerical_review_modified: `false`
|
||||
- io_contract_modified: `false`
|
||||
- reference_model_contract_modified: `false`
|
||||
- phase_files_modified: `false`
|
||||
- tolerance_policies_modified: `false`
|
||||
- reference_artifacts_modified: `false`
|
||||
- Abaqus_or_other_reference_solver_executed: `false`
|
||||
- owned_report_created: `true`
|
||||
- generated_build_local_evidence: `true`, ignored under `.harness/build/`
|
||||
- pre_existing_untracked_build_test_report_preserved: `true`
|
||||
|
||||
## Open Issues
|
||||
|
||||
- None blocking Physics Evaluation.
|
||||
- Nonblocking audit note: raw HDF5 container hashes differed across fresh
|
||||
regenerations, while the authoritative projected rows and serialized comparison
|
||||
ledger were stable and the JSON was byte-identical. No HDF5 byte-determinism
|
||||
claim is made by this report.
|
||||
@@ -1,5 +1,9 @@
|
||||
# Linear Static MITC4 Shell Release Report
|
||||
|
||||
본 문서는 당시 revision의 검증·판정 기록이다. 본문에 남긴 원본 보고서 이름과 SHA-256은
|
||||
통합 전 자료의 식별자이며 정리된 현재 파일의 byte hash를 뜻하지 않는다. 원문은 Git
|
||||
`858e87b`의 해당 기능 폴더에서 확인할 수 있다. 현재 진입점과 대응 기록은 [README](README.md)를 따른다.
|
||||
|
||||
## Metadata
|
||||
|
||||
- feature_id: `linear-static-mitc4-shell`
|
||||
@@ -9,19 +13,18 @@
|
||||
- source_numerical_review: `docs/linear-static-mitc4-shell/numerical-review.md`
|
||||
- source_io_definition: `docs/linear-static-mitc4-shell/io.md`
|
||||
- source_reference_model: `docs/linear-static-mitc4-shell/reference-model.md`
|
||||
- source_implementation_plan: `docs/linear-static-mitc4-shell/implementation-plan.md`
|
||||
- source_implementation_plan: `docs/linear-static-mitc4-shell/README.md`
|
||||
- source_implementation_evidence: `phases/linear-static-mitc4-shell/index.json`
|
||||
- source_implementation_report: `N/A`; the project Harness phase index is the implementation completion ledger for this execution
|
||||
- source_correction_report: `N/A`; no final Build/Test, Reference Verification, or Physics Evaluation failure was handed to Correction Agent
|
||||
- source_build_test_report: `docs/linear-static-mitc4-shell/build-test.md`
|
||||
- source_reference_verification_report: `docs/linear-static-mitc4-shell/reference-comparison.md`
|
||||
- source_physics_evaluation_report: `docs/linear-static-mitc4-shell/physics-evaluation.md`
|
||||
- source_build_test_report: `docs/linear-static-mitc4-shell/verification.md`
|
||||
- source_reference_verification_report: `docs/linear-static-mitc4-shell/verification.md`
|
||||
- source_physics_evaluation_report: `docs/linear-static-mitc4-shell/verification.md`
|
||||
- audited_source_head: `820ba30c717b3d0e113775608e20dfd5fbc05d53`
|
||||
- audited_branch: `feat-linear-static-mitc4-shell`
|
||||
- historical_status: `ready-for-release`
|
||||
- current_status: `superseded-pending-revalidation`
|
||||
- superseded_on: `2026-08-18`
|
||||
- owner_agent: `release-agent`
|
||||
- date: `2026-08-13`
|
||||
- release_boundary: internal FESA feature release readiness only; no publish, deploy, package, tag, commit, or external release was performed
|
||||
|
||||
@@ -29,181 +32,6 @@ The readiness evidence below is historical. The 2026-08-18 common-policy referen
|
||||
passed, but fresh physics and release audits are still required before a current
|
||||
`ready-for-release` verdict may be issued.
|
||||
|
||||
## Release Scope
|
||||
|
||||
| item | included | excluded | notes |
|
||||
| --- | --- | --- | --- |
|
||||
| analysis type | One small-displacement, small-rotation `*STEP, *STATIC` | Multiple steps, geometric/material nonlinearity, buckling, modal, dynamic, contact, thermal | Existing factorize-before-load linear-static lifecycle is retained. |
|
||||
| element type | Four-node source `S4` and `S4R` mapped to one full-integration `FESA-MITC4` path | `S3`, `S8`, `S8R`, continuum/solid/axisymmetric shells, MITC4+, MITC4/D, reduced integration/hourglass behavior | Source type is preserved as metadata; no Abaqus formulation-equivalence claim is made. |
|
||||
| nodal degrees of freedom | Global `[UX,UY,UZ,URX,URY,URZ]`; 20 physical element coordinates plus four numerical drilling coordinates | Physical drilling strain/load/result channel | Director-parallel nodal moment is rejected. |
|
||||
| material and section | Centered, single-layer, homogeneous isotropic linear elasticity with finite valid `E`, `nu`, and constant positive thickness | Composite/laminated or orthotropic sections, offsets, variable/nodal thickness, user orientation | Multiple valid materials/sections/element sets are allowed with exactly one assignment per element. |
|
||||
| geometry | Valid four-node quadrilaterals and smooth shell patches with deterministic geometry-derived directors | Explicit normals/directors, shared-node sharp folds, hinges, shell-beam joints, calibrated distortion/warp thresholds | A physical fold requires duplicated source nodes. |
|
||||
| loads and constraints | Nodal `*BOUNDARY` and global nodal `*CLOAD` on DOFs 1-6, subject to the drilling-moment projection rule | `*DLOAD`, pressure, gravity, body/edge/follower load | Output-request keywords in the allowlist remain warning no-ops. |
|
||||
| authoritative output | HDF5 `results.h5`: nodal displacement/full residual, shell frames, generalized strain/resultant, bottom/middle/top in-plane stress, physical energy, equilibrium, verification metrics, diagnostics | Official CSV solver output, drilling output/energy, `S33`, pointwise `S13/S23`, nodal shell-stress averaging | HDF5 schema version remains `0` and is extended additively. |
|
||||
| external acceptance | Read-only `reference/shell/shell.inp` and `reference/shell/shell displacements.csv`; `U1/U2/U3` blocking at fixed absolute `1.0e-5`; `UR1/UR2/UR3` warning-only at the same value | S4R artifact consumption; Abaqus reaction/stress/strain/resultant equality | Direct HDF5-to-CSV source identity mapping is authoritative. |
|
||||
|
||||
## Gate Evidence Inventory
|
||||
|
||||
| gate | source | expected status/evidence | observed status/evidence | verdict |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| requirements | `docs/linear-static-mitc4-shell/requirements.md` | approved scope, acceptance criteria, tolerance and reference boundary | `approved`; requirements `001-072` are all `must` and covered without gaps | pass |
|
||||
| research | `docs/linear-static-mitc4-shell/research.md` | approved evidence with applicability limits | `approved`; no research-owned blocking decision remains | pass |
|
||||
| formulation | `docs/linear-static-mitc4-shell/formulation.md` | implementation-ready current linear formulation | `approved-for-implementation-planning`; future nonlinear Section 15 remains explicitly non-executable | pass |
|
||||
| numerical review | `docs/linear-static-mitc4-shell/numerical-review.md` | `pass-for-implementation-planning` | `pass-for-implementation-planning`; no current-scope blocker | pass |
|
||||
| I/O definition | `docs/linear-static-mitc4-shell/io.md` | approved input/HDF5/comparison contract | `approved-for-implementation-planning`; exact S4-only acceptance boundary and fixed tolerance are present | pass |
|
||||
| reference model | `docs/linear-static-mitc4-shell/reference-model.md` | approved exact artifact inventory and row mapping | `approved-for-implementation-planning`; both declared files exist and match hashes | pass |
|
||||
| implementation plan | `docs/linear-static-mitc4-shell/implementation-plan.md` | approved TDD plan tracing every `must` requirement | `ready-for-implementation`; ranges cover `001-072` exactly once | pass |
|
||||
| implementation | `phases/linear-static-mitc4-shell/index.json` at source HEAD | completed RED/GREEN/VERIFY execution | Steps `0-13` are `completed`; all 14 `stepN-output.json` records have `exitCode=0`; top-level phase is `completed` | pass |
|
||||
| correction | final downstream reports and commit/Harness history | no unresolved implementation-owned failure | `N/A`; final Build/Test and Reference Verification classify correction handoff as `N/A`; historical pre-gate Step 13 retries are closed | pass |
|
||||
| build/test | `docs/linear-static-mitc4-shell/build-test.md` | `pass-for-reference-verification` | `pass-for-reference-verification`; clean MSVC x64 Debug build, focused `87/87`, `10/10`, `8/8`, full `144/144`, Harness Python `7/7`, zero warnings | pass |
|
||||
| reference verification | `docs/linear-static-mitc4-shell/reference-comparison.md` | `pass-for-physics-evaluation` | `pass-for-physics-evaluation`; exact `294/294` row identity, blocking U `147/147`, UR warnings `0`, invalid rows `0` | pass |
|
||||
| physics evaluation | `docs/linear-static-mitc4-shell/physics-evaluation.md` | `pass-for-release-agent` | `pass-for-release-agent`; equilibrium, reaction, direction, symmetry, recovery, stress signs, residual and physical energy pass | pass |
|
||||
|
||||
### Gate Consistency and Staleness Audit
|
||||
|
||||
- Every gate uses `feature_id=linear-static-mitc4-shell`. Build/Test, Reference Verification, and Physics Evaluation all identify source HEAD `820ba30c717b3d0e113775608e20dfd5fbc05d53`, which is the audited current HEAD.
|
||||
- The requirements metadata value `current_product_state=requirements-approved-not-implemented` records the product state when the requirements gate was authored. It is not the requirements gate status and does not alter the later implementation evidence.
|
||||
- Numerical Review values `implementation_complete=false`, `build_test_complete=false`, `reference_comparison_complete=false`, `physics_evaluation_complete=false`, and `release_ready=false` are explicit pre-implementation review boundaries. Later same-feature reports at the audited HEAD supply those downstream decisions. They are phase-time markers, not contradictory live statuses.
|
||||
- No contract meaning, reference inventory, tolerance, or source identity in those earlier documents conflicts with the final reports. The phase-time markers are therefore nonblocking and are not silently treated as current completion claims.
|
||||
- A separate implementation report is nonblocking under the current workflow because the Build/Test report explicitly declares `source_implementation_report=N/A` and points to the Harness index. The index records each RED failure, GREEN behavior, focused/full verification summary and completion timestamp, while all 14 generated step-output records have `exitCode=0`.
|
||||
- A correction report is nonblocking `N/A`: Correction Agent reporting is required after a formal downstream failure handoff. The final formal Build/Test, Reference Verification, and Physics Evaluation gates report no such failure or unresolved defect. Historical implementation-phase retries and correction commits precede the clean independent gates and are closed by the final phase ledger and source HEAD.
|
||||
- The Numerical Review metadata contains two historical commit references (`reviewed_head=cf769aa` and a downstream note naming `a058ef7`). This is a document-history inconsistency, but its mathematical verdict was re-audited against the current tracked requirements/formulation/I/O/reference contracts and independently exercised at `820ba30...`; it does not create a scope, tolerance, or acceptance contradiction.
|
||||
|
||||
## Evidence Hash Inventory
|
||||
|
||||
SHA-256 values are lowercase. The build-local HDF5 container is intentionally not a decision identity because valid regenerations can change raw container bytes; the deterministic projected ledger is the stable comparison evidence.
|
||||
|
||||
| evidence | bytes | SHA-256 | audit role |
|
||||
| --- | ---: | --- | --- |
|
||||
| requirements | 35,124 | `c8966f667ee42c3d35d0bf2f1bc1662a93784a2037d5b191b59793fb5ad66c64` | approved must-requirement baseline |
|
||||
| research | 37,197 | `45f02291c8b2fdc7066cdb938cf6662a97dd3dceb9023fa743fe1c356a7970b4` | theory/benchmark/applicability evidence |
|
||||
| formulation | 57,593 | `117932a112b2ad7f1cb6a8084304733fcd529a675a93cca6364c2f6a16c57cd0` | mathematical implementation contract |
|
||||
| numerical review | 24,406 | `c82bd7b4f14f7664fb082d9a860dc443bf76571affa24caa8a7a9acfba04af1e` | independent formulation gate |
|
||||
| I/O definition | 41,327 | `6f362b16625e61c85949648e6bc1f215c92ff31e99654f6efd9787b428dd54c4` | input/HDF5/comparison contract |
|
||||
| reference model | 6,112 | `978e18485a627b6abf83373f74929cfe564952d29f68574e0cab75ef5e689c44` | exact S4 inventory and row mapping |
|
||||
| implementation plan | 56,316 | `8d269455d0d5fe9bb9dc32f140d1ea6f105bab60ebfe73d368ad8c5225af6482` | TDD task/test traceability |
|
||||
| Harness implementation index | 7,392 | `8c0a7369bc81fc7a12f9f3a49158a9534d4727b9a924c95b1ece7e915d16880d` | 14-step completion ledger |
|
||||
| Build/Test report | 11,970 | `d261e13eb1c6dc20cf24f85ee97a3fcb6b667420486ad12725030e3eebf8dcd1` | independent MSVC/CMake/CTest evidence |
|
||||
| Reference Verification report | 14,362 | `2c69814eeb265bd47672c46e17e2c63d55a0f8d834325c2b0d78e0500a83bade` | fixed-tolerance comparison evidence |
|
||||
| Physics Evaluation report | 19,596 | `d753521c73ac8509fe2d3e2896e2f6dd23a362c0f17f153fadbeb6227b8ed4c6` | physical plausibility evidence |
|
||||
| declared S4 input | 4,770 | `4005851e1ab22fd3a16ac17a8d5da3e051233f69f37419079f3553ad134ecfcf` | immutable reference input |
|
||||
| declared S4 displacement CSV | 5,592 | `c81d94e0b4a849f87aa0f79c83a79b94d5661ac79e44ed826919ab432c87746b` | immutable required reference quantity |
|
||||
| deterministic comparison ledger | 94,349 | `8e8dea51b6f7c663bacc41fda6103a4596db26e02f1ead6069d458f51e0102e6` | `294` row decisions, `passed=true`, zero warnings |
|
||||
|
||||
## Acceptance Traceability
|
||||
|
||||
Evidence abbreviations: `PH` = Harness phase index; `BT` = Build/Test report; `RV` = Reference Verification report; `PE` = Physics Evaluation report. `shell-s4` means the sole declared read-only S4 comparison model. Every row below has priority `must` in the approved requirements baseline.
|
||||
|
||||
| requirement_id | acceptance criterion | test/phase evidence | reference/physics evidence | release disposition |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `001` | Exactly one supported static step; unsupported procedure or second step fails deterministically. | `InpDomainMapping.*Procedure*`; `Mitc4ShellCli.*`; PH Steps 1/12; BT | N/A | released |
|
||||
| `002` | S4 and S4R map to one FESA MITC4 path without equivalence claim. | `InpDomainMapping.MapsS4AndS4rThroughOneMitc4Identity`; PH Steps 0/1/7; BT | S4R is intentionally non-reference | released |
|
||||
| `003` | Source element type and internal formulation remain separate metadata. | `DomainModel.Mitc4ShellRecordsPreserveSourceAndInternalIdentity`; `Hdf5ResultsWriter.WritesExactShellMetadataAndModelIdentity`; BT | RV HDF5 projection audit | released |
|
||||
| `004` | Four distinct ordered nodes and stable source element identity are enforced. | `InpDomainMapping.RejectsInvalidShellConnectivityOptionsAndMixedModels`; Domain/HDF5 tests; BT | RV observed 36 uniquely identified S4 elements | released |
|
||||
| `005` | Six global DOFs use the exact order and equation ownership remains in DofManager. | `DofManager.BuildsShellScatterInSourceNodeAndComponentOrder`; HDF5 schema tests; PH Steps 0/6/11; BT | RV `[UX,UY,UZ,URX,URY,URZ]` projection | released |
|
||||
| `006` | Valid homogeneous isotropic `E,nu` is accepted and invalid/unsupported material data fails. | `InpDomainMapping.RejectsInvalidShellAssignmentsAndProperties`; `Mitc4ShellConstitutive.*`; BT | PE material audit | released |
|
||||
| `007` | One finite positive constant thickness is accepted for a centered single-layer shell section. | Domain/model/mapping tests; `Mitc4ShellConstitutive.*`; BT | PE thickness/model audit | released |
|
||||
| `008` | Each element resolves to exactly one section and material; missing/conflicting/duplicate assignments fail. | `DomainModel.ShellOwnershipPreservesResolvedAssignmentsAndOptionalFrames`; `InpDomainMapping.RejectsInvalidShellAssignmentsAndProperties`; BT | N/A | released |
|
||||
| `009` | Multiple valid sets/sections/materials are allowed while each element remains homogeneous and single-layer. | Domain/model/mapping suites; PH Steps 0/1; BT | N/A | released |
|
||||
| `010` | Composite, offset, variable thickness, explicit normal and orientation meanings fail closed. | `InpDomainMapping.RejectsInvalidShellConnectivityOptionsAndMixedModels`; BT | N/A | released |
|
||||
| `011` | Nodal director is a unit vector separate from scalar thickness. | `Mitc4Geometry.BuildsDeterministicFramesForPlanarRotatedAndWarpedElements`; HDF5 director tests; BT | PE finite/model audit | released |
|
||||
| `012` | Element normal candidate follows deterministic source order and tangent cross product. | `Mitc4Geometry.*`; PH Step 2; BT | N/A | released |
|
||||
| `013` | Smooth shared-node directors use deterministic area-weighted averaging. | `Mitc4Geometry.AreaWeightsSharedDirectorsInStableSourceIdentityOrder`; BT | N/A | released |
|
||||
| `014` | Nonfinite/zero/opposed normals fail without an invented smooth-angle threshold. | `Mitc4Geometry.RejectsInvalidSurfaceJacobianAndIncidentOrientationCases`; BT | N/A | released |
|
||||
| `015` | Discontinuous shared-node director fields are not silently averaged; folds require duplicate nodes. | Geometry negative tests and mapper unsupported-scope tests; BT | Documented limitation | released |
|
||||
| `016` | Duplicate, bow-tie, nonfinite, zero-area and nonpositive-J geometry fails at every required point. | `Mitc4Geometry.RejectsInvalidSurfaceJacobianAndIncidentOrientationCases`; `.ExposesTheCompleteRequiredValidationPointInventory`; BT | PE finite-result audit | released |
|
||||
| `017` | Nodal label/set boundary targets support global DOFs 1-6 and zero/nonzero prescribed values. | `EssentialConstraints.PreservesShellSizedNoMixedAndAllConstraintRoundTrips`; `Mitc4ShellCli.AppliesKfcForNonzeroPrescribedDisplacement`; BT | PE constraint-mask audit | released |
|
||||
| `018` | Global nodal force/moment CLOAD components aggregate deterministically. | `LoadAssembly.AggregatesAllSixGlobalShellLoadComponentsInSourceOrder`; BT | PE load/reaction audit | released |
|
||||
| `019` | Aggregate director-parallel moment fails as `unsupported-drilling-load`. | `LoadAssembly.AcceptsExactlyZeroAggregateShellMoment`; `.EnforcesAggregateShellMomentDirectorProjectionThreshold`; PH Step 8; BT | N/A | released |
|
||||
| `020` | Distributed/follower/body/edge load inputs remain unsupported. | `InpDomainMapping.PreservesProcedureLoadAndOutputRequestBoundariesForShells`; BT | Documented limitation | released |
|
||||
| `021` | Only the approved identity-preserving keyword subset plus S4/S4R and shell section is accepted. | `InpDomainMapping.*`; full CTest regression; BT | `shell-s4` parsed end-to-end | released |
|
||||
| `022` | Identity wrappers/multiple instances preserve source identity; transforms/nesting remain unsupported. | `InpDomainMapping.*`; Domain identity tests; BT | RV exact instance/node identity | released |
|
||||
| `023` | Allowlisted output requests do not affect mandatory results; other model-affecting meanings fail. | `InpDomainMapping.PreservesProcedureLoadAndOutputRequestBoundariesForShells`; `Hdf5ResultsWriter.WritesShellInventoryDespiteRequestsAndOmitsForbiddenPaths`; BT | PE observed warning-only diagnostics | released |
|
||||
| `024` | Domain owns shell semantics and AnalysisModel remains a non-owning active view. | `DomainModel.*`; PH Step 0 and full lifecycle Step 12; BT | N/A | released |
|
||||
| `025` | DofManager solely owns six-DOF numbering, maps, scatter and sparse pattern. | `DofManager.*`; `EssentialConstraints.*`; PH Step 6; BT | N/A | released |
|
||||
| `026` | AnalysisState owns only required linear-static shell solution/recovery/evidence rows. | `AnalysisState.OwnsExactShellRowsInStableElementAndLocationOrder`; `.CommitsFiniteShellGlobalEvidence`; BT | PE required-result audit | released |
|
||||
| `027` | Element buffers and stable COO/fixed reduction are deterministic across thread paths. | `SparseAssembly.ShellSerialTbbReverseAndRepeatedRunsAreByteIdentical`; PH Step 7; BT | N/A | released |
|
||||
| `028` | Stiffness/partition/factorization precedes load/effective RHS/substitution/recovery/commit. | `Mitc4ShellCli.UsesExistingLifecycleAndExactlyOneFactorization`; `.AppliesKfcForNonzeroPrescribedDisplacement`; `.DoesNotWriteAnInvalidRecoveryCandidate`; BT | PE final-state evidence | released |
|
||||
| `029` | Reaction/free equilibrium derives from full residual `K*d-F`. | `ResultRecovery.KeepsFullResidualAndComputesGlobalShellEquilibrium`; BT | PE reaction and equilibrium reconstruction | released |
|
||||
| `030` | S4/S4R use the same numerical path and may differ only in source metadata. | Mapper identity test; `SparseAssembly.S4AndS4rSemanticFixturesAssembleIdenticalStiffness`; HDF5 metadata tests; BT | S4R reference intentionally N/A | released |
|
||||
| `031` | Physical kernel uses three translations plus two tangent rotations; drilling is not physical strain. | `Mitc4ShellKinematics.BuildsRightHandedFramesAndSeparatePhysicalDrillingMaps`; drill/recovery tests; BT | PE no drilling leakage | released |
|
||||
| `032` | Deterministic right-handed frames transform global rotations to tangent/drilling coordinates. | `Mitc4ShellKinematics.BuildsRightHandedFramesAndSeparatePhysicalDrillingMaps`; `Mitc4Geometry.*`; BT | PE symmetry/direction evidence | released |
|
||||
| `033` | Drilling is a symmetric positive numerical stabilization only. | `Mitc4ShellDrilling.*`; `Mitc4ShellKernel.*`; BT | PE physical-energy audit | released |
|
||||
| `034` | `R+`, `k_ref`, `k_d=1e-3*k_ref`, and `I4` use only eight positive physical rotational diagonals. | `Mitc4ShellDrilling.UsesOnlyEightPositivePhysicalRotationDiagonalsAndFixedFactor`; BT | N/A | released |
|
||||
| `035` | Drilling contributes to no physical generalized strain/resultant/stress/output. | `Mitc4ShellDrilling.ExcludesPureDrillFromPhysicalRecoveryAndEnergy`; HDF5 forbidden-path test; BT | PE physical-only recovery/energy | released |
|
||||
| `036` | Empty/nonfinite valid `R+` fails; no coefficient/energy calibration gate or output exists. | `Mitc4ShellDrilling.FailsNonfiniteReferenceAndStabilizesEachPureDrillCoordinate`; BT | Documented limitation/boundary | released |
|
||||
| `037` | S4 and S4R share the approved full `2x2x2` rule; no reduced integration/hourglass selection. | `Mitc4ShellKinematics.UsesOneFixedTwoByTwoByTwoQuadratureOrder`; S4/S4R assembly parity; BT | RV S4-only boundary | released |
|
||||
| `038` | Stabilized element keeps six physical rigid modes, symmetry, energy invariance and positive non-rigid modes. | `Mitc4ShellKernel.*`; `Mitc4ShellPatch.*`; BT | PE rigid/rank/energy evidence | released |
|
||||
| `039` | HDF5 is authoritative and invalid candidates cannot replace a valid final result. | `Hdf5ResultsWriter.InvalidShellInventoryPreservesExistingFinal`; CLI invalid-candidate test; BT | RV/PE read authoritative HDF5 | released |
|
||||
| `040` | Required metadata/model identities, frames, directors, section/material and source/internal types are written. | `Hdf5ResultsWriter.WritesExactShellMetadataAndModelIdentity`; BT | RV HDF5 schema audit | released |
|
||||
| `041` | Every node has global six-component displacement and full-residual reaction rows in stable order. | HDF5 mandatory inventory; `ResultRecovery.*`; BT | RV 49x6 displacement; PE reaction audit | released |
|
||||
| `042` | Four shell locations contain ordered eight-component generalized strain with correct dimensions. | `Mitc4ShellPhysicalRecovery.*`; `ResultRecovery.RecoversShellRowsInStableElementAndGpOrder`; HDF5 tests; BT | PE 144-GP reconstruction | released |
|
||||
| `043` | The same locations contain ordered `N/M/Q` section resultants with correct dimensions. | Physical recovery/result recovery/HDF5 suites; BT | PE 1,152-component resultant reconstruction | released |
|
||||
| `044` | Bottom/middle/top local `[S11,S22,S12]` is emitted; S33/S13/S23 is not. | `ResultRecovery.RecoversDirectBottomMiddleTopShellStress`; HDF5 inventory/forbidden paths; BT | PE stress/location/sign reconstruction | released |
|
||||
| `045` | Rows preserve source element, exact natural/section location, frame and component order without averaging. | AnalysisState, ResultRecovery stable-order and HDF5 schema tests; BT | PE location-specific audit | released |
|
||||
| `046` | Free residual, force/moment balance and deterministic physical shell energy are output without drilling datasets. | `ResultRecovery.*ShellEquilibrium`; `.SumsOnlyPhysicalShellEnergyInSourceOrder`; HDF5 global rows; BT | PE equilibrium and energy checks | released |
|
||||
| `047` | Abaqus output requests neither suppress nor expand mandatory HDF5; CSV remains auxiliary. | Mapper output-request test; `Hdf5ResultsWriter.WritesShellInventoryDespiteRequestsAndOmitsForbiddenPaths`; BT | RV compared HDF5 directly; no FESA CSV | released |
|
||||
| `048` | Nonfinite/incomplete recovery or HDF5 inventory fails without partial success. | `AnalysisState.InvalidShellCandidatesLeavePriorStateUnchanged`; `ResultRecovery.InvalidLaterShellLeavesEntirePriorStateUnchanged`; HDF5 invalid-inventory test; BT | N/A | released |
|
||||
| `049` | Each production behavior has RED/GREEN/VERIFY evidence, related C++ tests, clean MSVC Debug build and no new warning. | PH Steps 0-13 and outputs; BT clean build, zero warnings, `144/144` | N/A | released |
|
||||
| `050` | Frames, Jacobians, symmetry, transform energy, six modes, positivity and repeatability are tested. | Geometry, Kinematics, Kernel, Patch and SparseAssembly suites; BT | PE rigid/rank summary | released |
|
||||
| `051` | Approved normalized `1e-12` and `1e-10` algebraic/equilibrium criteria are applied. | Kernel/frame tests; `ResultRecovery.UsesScaleAwareShellMetricsAndRejectsExcess`; BT | PE verification metrics all below `1e-10` | released |
|
||||
| `052` | Independent membrane, bending, shear and twist patch/sign/component checks pass. | `Mitc4ShellPatch.ReproducesIndependentMembraneBendingShearAndTwistFields`; PhysicalRecovery tests; BT | PE recovery sign checks | released |
|
||||
| `053` | Formulation invariants/patches and declared S4 displacement reference case pass; expanded portfolio is not required. | Kernel/Patch/PhysicalRecovery suites; `Mitc4S4Reference.*`; BT | RV blocking U `147/147`; PE coverage audit | released |
|
||||
| `054` | Exact geometry acceptance/rejection tests pass without NR-O03/NR-O04 calibration. | `Mitc4Geometry.*`; BT | N/A | released |
|
||||
| `055` | Additional curved/locking/convergence benchmarks remain optional and nonblocking. | Implementation-plan scope audit; BT/PE coverage inventory | PE records limitation and approved coverage | released |
|
||||
| `056` | Exact drilling formula, symmetry/positivity/rank/determinism and recovery exclusion are verified. | `Mitc4ShellDrilling.*`; Kernel/Sparse/Recovery suites; BT | PE drilling separation evidence | released |
|
||||
| `057` | Physics verifies equilibrium, direction, symmetry, energy, signs and resultant consistency. | ResultRecovery/CLI suites; BT | PE all documented checks pass | released |
|
||||
| `058` | Every matched U row uses fixed absolute `1.0e-5` and blocks on exceedance. | `Mitc4ReferenceComparison.AppliesFixedAbsoluteToleranceWithoutScaleClampOrRowDenominator`; `Mitc4S4Reference.*`; BT | RV U `147/147` pass | released |
|
||||
| `059` | Reference scale, row denominator, component magnitude and zero clamp never alter MITC4 tolerance. | Fixed-tolerance comparator test; BT | RV all 294 tolerances exactly `1.0e-5` | released |
|
||||
| `060` | U tolerance is in user-consistent length units and independent of B33 policy. | Comparator contract test and scope audit; BT | RV reports independent fixed policy | released |
|
||||
| `061` | UR uses fixed absolute `1.0e-5`; exceedance warns deterministically and never blocks. | `Mitc4ReferenceComparison.RotationExceedanceWarnsWithoutBlockingTranslationVerdict`; BT | RV UR `147/147`, zero warnings | released |
|
||||
| `062` | UR tolerance is dimensionless and no extra UR/drilling threshold is required. | Comparator/report tests; BT | RV fixed-tolerance metrics | released |
|
||||
| `063` | Missing/extra/duplicate/nonfinite/schema/identity mismatch fails before tolerance. | `Mitc4ReferenceComparison.RejectsInvalidInventoryBeforeNumericComparison`; BT | RV all invalid counts zero | released |
|
||||
| `064` | Report contains every U/UR decision, maximum, normalized, RMS, vector and worst-row evidence. | `Mitc4ReferenceComparison.ReportsMetricsVectorsWorstRowAndJsonDeterministically`; BT | RV complete quantity/component/worst-row tables | released |
|
||||
| `065` | Exact S4 input and displacement CSV paths are used without mutation. | `Mitc4S4Reference.*`; comparator required-file test; BT hash audit | `shell-s4`; immutable hashes match | released |
|
||||
| `066` | S4R artifacts are not required/consumed; parser/common-kernel/assembly/HDF5 tests cover S4R. | Mapper identity, S4/S4R assembly parity, HDF5 source-type tests; BT | RV confirms `reference/shellR/` not consumed | released |
|
||||
| `067` | Only declared input/CSV, FESA HDF5, mapping and tolerance/precheck rules gate readiness. | `Mitc4ReferenceComparison.RequiresOnlyDeclaredInputCsvAndHdf5`; BT | RV no administrative artifact gate | released |
|
||||
| `068` | Reference rows are unique, finite and deterministically source-mapped without internal-equivalence inference. | Comparator mapping and invalid-inventory tests; BT | RV exact `294/294` key set | released |
|
||||
| `069` | Sole Abaqus case is full-integration S4; S4R coverage remains non-reference. | Common quadrature/S4R mapping tests and `Mitc4S4Reference.*`; BT | RV one declared case, S4R excluded | released |
|
||||
| `070` | Authoritative FESA HDF5 rows are compared directly by model/step/frame/source/component. | Comparator mapping/E2E tests; BT | RV direct HDF5 projection, no FESA CSV | released |
|
||||
| `071` | Reaction/stress/strain/resultants do not become undeclared equality gates. | Comparator only projects U/UR; BT | RV and PE keep optional CSVs out of pass/fail | released |
|
||||
| `072` | No Abaqus/reference-solver execution or reference artifact mutation occurs. | PH/BT Git and hash audits | RV and PE no-change assertions; immutable hashes match | released |
|
||||
|
||||
No requirement is deferred or blocked. Out-of-scope behavior is documented as a limitation rather than silently accepted.
|
||||
|
||||
## Validation Evidence
|
||||
|
||||
| command or report | expected | observed | verdict |
|
||||
| --- | --- | --- | --- |
|
||||
| config-resolved VS18/MSVC x64 Debug fresh configure and clean build | exit `0`, no new warning | exit `0`; warning/error scan `0/0` | pass |
|
||||
| focused model/kernel/assembly/recovery CTest | pass | `87/87` | pass |
|
||||
| focused linear-static lifecycle CTest | pass | `10/10` | pass |
|
||||
| focused MITC4 reference CTest | pass | `8/8` | pass |
|
||||
| CTest discovery and full regression | nonzero inventory and all pass | `144` discovered; `144/144` pass; current read-only discovery includes 57 test names containing `Mitc4` or `Shell` | pass |
|
||||
| Harness Python verification | pass because Harness runner changed on the feature branch | `7/7` pass | pass |
|
||||
| final release-stage confirmation | current HEAD build, full CTest and Harness self-test pass | fresh `cmake --build` exit `0`; CTest `144/144`; Harness pytest `7/7` | pass |
|
||||
| Harness implementation ledger | every Step completed successfully | Steps `0-13` completed; `14/14` output `exitCode=0` | pass |
|
||||
| reference verification | `pass-for-physics-evaluation` | exact 294 rows; U `147/147`; invalid rows/warnings `0` | pass |
|
||||
| physics evaluation | `pass-for-release-agent` | all equilibrium/direction/symmetry/recovery/energy checks pass | pass |
|
||||
| immutable reference audit | exact expected hashes, no Git reference diff/status | both hashes match; zero changed reference paths | pass |
|
||||
|
||||
The Release Agent did not run Abaqus. It independently read the complete upstream evidence chain, enumerated current CTest discovery read-only, checked all Harness output exit codes, verified source HEAD/branch/status, and recomputed the declared artifact/report hashes. The primary audit then performed a fresh current-HEAD incremental full build, full CTest run and Harness self-test as the final completion check; all passed as recorded above.
|
||||
|
||||
## Release Checklist
|
||||
|
||||
- [x] One `feature_id` across all required gate documents.
|
||||
- [x] Requirements, research, formulation, numerical review, I/O, reference-model and implementation-plan gates are approved/passing for their intended downstream phase.
|
||||
- [x] Harness implementation is complete at the audited source HEAD with 14 successful Step outputs.
|
||||
- [x] Independent Build/Test status is `pass-for-reference-verification`.
|
||||
- [x] Reference Verification status is `pass-for-physics-evaluation`.
|
||||
- [x] Physics Evaluation status is `pass-for-release-agent`.
|
||||
- [x] All `must` requirements `001-072` trace to acceptance criteria, test/phase evidence, reference/physics evidence where applicable, and a released disposition.
|
||||
- [x] Sole required comparison files exist, match approved hashes, and were not modified.
|
||||
- [x] Fixed MITC4 tolerance and U-blocking/UR-warning-only policy are unchanged.
|
||||
- [x] No unresolved build, test, reference, physics, schema, identity, nonfinite or environment failure remains.
|
||||
- [x] Known limitations, unsupported Abaqus meanings and accepted risks are documented below and in the Release Notes Draft.
|
||||
- [x] Release Agent changed only this report and performed no external release action.
|
||||
|
||||
## Known Limitations
|
||||
|
||||
| limitation | category | user impact | disposition |
|
||||
@@ -221,36 +49,6 @@ The Release Agent did not run Abaqus. It independently read the complete upstrea
|
||||
| Raw HDF5 container bytes are not a declared deterministic identity | output/evidence | Regeneration may change the raw file hash; ordered projected rows and the JSON comparison ledger are deterministic evidence. | documented, nonblocking |
|
||||
| Target-wide CTest label remains the legacy beam label | test infrastructure | MITC4 selection uses the approved exact suite regexes instead of a dedicated label. | documented, nonblocking |
|
||||
|
||||
## Release Notes Draft
|
||||
|
||||
### Feature Summary
|
||||
|
||||
- Adds end-to-end single-step linear-static analysis for four-node shell inputs labeled `S4` or `S4R`, both mapped to the independent full-integration `FESA-MITC4` formulation.
|
||||
- Adds deterministic geometry-derived nodal directors, six global nodal DOFs, MITC4 transverse-shear tying, fixed nonphysical drilling stabilization, deterministic sparse assembly, full-residual reactions, physical shell recovery and failure-atomic HDF5 output.
|
||||
- Adds mandatory HDF5 nodal displacement/reaction, shell local frames, generalized strain/resultant, bottom/middle/top in-plane stress, physical energy, equilibrium and verification metrics.
|
||||
|
||||
### Verification Scope
|
||||
|
||||
- Clean Visual Studio 18 2026/MSVC x64 Debug build and full `144/144` CTest regression passed with zero compiler/linker warnings.
|
||||
- All 14 Harness implementation Steps completed with recorded RED/GREEN/VERIFY evidence and successful output exit codes.
|
||||
- The sole declared S4 case matched all `147` blocking translational rows within fixed absolute `1.0e-5`; all `147` rotation rows were within the warning threshold and produced no warnings.
|
||||
- Physics checks passed for global force/moment equilibrium, full-residual reactions, displacement direction, double symmetry, generalized resultant/stress consistency, free residual, finite results and positive physical energy.
|
||||
|
||||
### Main Limitations
|
||||
|
||||
- The released scope is linear static, small deformation, homogeneous isotropic single-layer MITC4 with nodal loads and constraints only.
|
||||
- Abaqus compatibility and Abaqus S4/S4R formulation equivalence are not claimed. S4R uses the same FESA full-integration kernel and is not an Abaqus reference gate.
|
||||
- Broader curved/distorted/thin-thick convergence, original-MITC4 membrane-locking characterization, nonlinear execution, distributed loads, composites, physical drilling behavior and expanded stress output remain outside this release.
|
||||
|
||||
### Artifacts
|
||||
|
||||
- Release report: `docs/linear-static-mitc4-shell/release.md`
|
||||
- Build/Test report: `docs/linear-static-mitc4-shell/build-test.md`
|
||||
- Reference Verification report: `docs/linear-static-mitc4-shell/reference-comparison.md`
|
||||
- Physics Evaluation report: `docs/linear-static-mitc4-shell/physics-evaluation.md`
|
||||
- Declared reference pair: `reference/shell/shell.inp`, `reference/shell/shell displacements.csv`
|
||||
- Build-local deterministic ledger: `.harness/build/reference/mitc4-shell-s4-comparison/comparison.json`
|
||||
|
||||
## Release Verdict
|
||||
|
||||
- verdict: `ready-for-release`
|
||||
@@ -267,29 +65,6 @@ The Release Agent did not run Abaqus. It independently read the complete upstrea
|
||||
| Reference Verification Agent | N/A; the required S4 comparison is complete and passing. | N/A |
|
||||
| Physics Evaluation Agent | N/A; physics evaluation is complete and passing. | N/A |
|
||||
|
||||
## No-Change Assertion
|
||||
|
||||
- source_files_modified: `false`
|
||||
- test_files_modified: `false`
|
||||
- cmake_files_modified: `false`
|
||||
- requirements_modified: `false`
|
||||
- research_modified: `false`
|
||||
- formulation_modified: `false`
|
||||
- numerical_review_modified: `false`
|
||||
- io_contract_modified: `false`
|
||||
- reference_model_contract_modified: `false`
|
||||
- implementation_plan_or_phase_files_modified: `false`
|
||||
- build_test_report_modified: `false`
|
||||
- reference_verification_report_modified: `false`
|
||||
- physics_evaluation_report_modified: `false`
|
||||
- reference_artifacts_modified: `false`
|
||||
- tolerance_policies_modified: `false`
|
||||
- Abaqus_or_other_reference_solver_executed: `false`
|
||||
- publish_deploy_package_tag_commit_performed: `false`
|
||||
- owned_report_created: `true`
|
||||
- pre_existing_untracked_reports_preserved: `true`
|
||||
- notes: before this report was created, the worktree had no tracked/staged diff and contained only the three upstream gate reports as untracked files. This audit adds only `docs/linear-static-mitc4-shell/release.md`; generated build-local evidence remains ignored under `.harness/build/`.
|
||||
|
||||
## Open Issues
|
||||
|
||||
- blocking: `none`
|
||||
@@ -298,3 +73,5 @@ The Release Agent did not run Abaqus. It independently read the complete upstrea
|
||||
- missing required comparison files or mappings: `none`
|
||||
- nonblocking administrative note: the Build/Test, Reference Verification, Physics Evaluation and this Release report are untracked workspace reports pending whatever repository-integration action the user or Coordinator Agent separately authorizes. Their untracked state does not invalidate their content or the current internal readiness verdict.
|
||||
- nonblocking evidence note: raw `results.h5` hashes can differ across valid regenerations; no byte-identical HDF5 container claim is made.
|
||||
|
||||
현재 build·reference·물리 실행 기록은 [검증 보고서](verification.md)에 통합했다. 과거 readiness와 현재 재검증 필요를 구분하며 이 정리는 새로운 release 감사가 아니다.
|
||||
|
||||
@@ -0,0 +1,802 @@
|
||||
# MITC4 선형 정적 Shell 검증과 한계
|
||||
|
||||
본 문서는 당시 revision의 검증·판정 기록이다. 본문에 남긴 원본 보고서 이름과 SHA-256은
|
||||
통합 전 자료의 식별자이며 정리된 현재 파일의 byte hash를 뜻하지 않는다. 원문은 Git
|
||||
`858e87b`의 해당 기능 폴더에서 확인할 수 있다. 현재 진입점과 대응 기록은 [README](README.md)를 따른다.
|
||||
|
||||
아래 날짜·revision·명령·수치는 당시 실제 실행 기록이다. 문서 정리에서 solver를 다시 실행하지 않았다.
|
||||
현재 계약은 [요구사항](requirements.md), [정식화](formulation.md), [I/O](io.md), [공통 tolerance](../TOLERANCE.md)를 따른다. [과거 release 판정](release.md)의 재검증 경계도 유지한다.
|
||||
|
||||
<a id="build-test"></a>
|
||||
|
||||
<a id="build-test--linear-static-mitc4-shell-buildtest-report"></a>
|
||||
## Linear Static MITC4 Shell Build/Test Report
|
||||
|
||||
<a id="build-test--metadata"></a>
|
||||
### Metadata
|
||||
|
||||
- feature_id: `linear-static-mitc4-shell`
|
||||
- source_commit: `820ba30c717b3d0e113775608e20dfd5fbc05d53`
|
||||
- source_implementation_report: `N/A`; Harness completion evidence is recorded in
|
||||
`phases/linear-static-mitc4-shell/index.json`
|
||||
- source_implementation_plan:
|
||||
`docs/linear-static-mitc4-shell/README.md`
|
||||
- status: `pass-for-reference-verification`
|
||||
- date: `2026-08-13`
|
||||
|
||||
<a id="build-test--verdict"></a>
|
||||
### Verdict
|
||||
|
||||
The formal build/test gate passes. A fresh Visual Studio 18 2026/MSVC x64 Debug
|
||||
configuration, clean full rebuild, three implementation-plan-focused CTest runs,
|
||||
nonzero JSON discovery, full CTest regression, and the required Harness Python
|
||||
self-test all completed successfully.
|
||||
|
||||
- clean full rebuild: exit `0`; compiler/linker warning scan `0`; error scan `0`
|
||||
- focused kernel/model/assembly/recovery regex: `87/87` passed
|
||||
- focused linear-static lifecycle regex: `10/10` passed
|
||||
- focused MITC4 reference-test regex: `8/8` passed
|
||||
- CTest discovery: `144` tests, including `32` names containing `Mitc4`
|
||||
- full CTest after clean rebuild: `144/144` passed
|
||||
- Harness Python self-test: `7/7` passed
|
||||
- failed tests: `0`
|
||||
- required S4 reference hash mismatches or Git changes: `0`
|
||||
|
||||
This verdict authorizes handoff to Reference Verification only. It does not approve
|
||||
reference tolerance results, physics sanity, or release readiness.
|
||||
|
||||
<a id="build-test--execution-environment"></a>
|
||||
### Execution Environment
|
||||
|
||||
- os: `Microsoft Windows 11 Home 10.0.26200 build 26200`
|
||||
- branch: `feat-linear-static-mitc4-shell`
|
||||
- source_head: `820ba30c717b3d0e113775608e20dfd5fbc05d53`
|
||||
- generator: `Visual Studio 18 2026`
|
||||
- MSBuild: `18.8.2+ce25c0108`
|
||||
- compiler: `MSVC 19.51.36252.0`
|
||||
- compiler_architecture: `x64`
|
||||
- Windows SDK: `10.0.26100.0`
|
||||
- language/config: `C++17 / Debug`
|
||||
- CMake: `4.4.0`
|
||||
- build_dir: `.harness/build`
|
||||
- harness_config: absent
|
||||
- project_selection: auto CMake from root `CMakeLists.txt`
|
||||
- command_discovery_path: default CMake/MSVC x64 Debug with implementation-plan
|
||||
generator and dependency paths
|
||||
- resolved dependencies: GoogleTest `C:/git/googletest`; oneMKL `2026.1.0`;
|
||||
oneTBB package path `2023.1`; HDF5 package path `2.1.1`
|
||||
|
||||
The generated compiler metadata at
|
||||
`.harness/build/CMakeFiles/4.4.0/CMakeCXXCompiler.cmake` independently confirms
|
||||
`CMAKE_CXX_COMPILER_ID=MSVC` and version `19.51.36252.0`.
|
||||
|
||||
<a id="build-test--command-log-summary"></a>
|
||||
### Command Log Summary
|
||||
|
||||
All durations below are wall-clock durations measured for the command. The initial
|
||||
green chain was retained as corroborating evidence; the later clean-rebuild chain is
|
||||
the canonical acceptance evidence.
|
||||
|
||||
| order | command | exit_code | duration | relevant stdout/stderr tail |
|
||||
| ---: | --- | ---: | ---: | --- |
|
||||
| 1 | `git status --short --branch; git rev-parse HEAD` | 0 | `0.8 s` | Clean `feat-linear-static-mitc4-shell`; HEAD matched `820ba30...`. |
|
||||
| 2 | Required dependency `Test-Path` precheck from the implementation plan | 0 | `0.215 s` | All four GoogleTest/MKL/TBB/HDF5 paths returned `True`. |
|
||||
| 3 | `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 | `8.684 s` | MSVC `19.51.36252.0`, MKL `2026.1.0`; `Configuring done`, `Generating done`. The failed pthread probes were normal CMake feature probes; `Found Threads: TRUE`. |
|
||||
| 4 | `cmake --build .harness/build --config Debug` | 0 | `4.382 s` | Initial incremental build produced `fesa.exe` and all three test executables; warning/error scan `0/0`. |
|
||||
| 5 | `ctest --test-dir .harness/build -C Debug -R "DomainModel|InpDomainMapping|Mitc4Geometry|Mitc4Shell|DofManager|EssentialConstraints|SparseAssembly|LoadAssembly|ResultRecovery|Hdf5ResultsWriter" --output-on-failure` | 0 | `5.743 s` | `100% tests passed out of 87`; failed `0`. |
|
||||
| 6 | `ctest --test-dir .harness/build -C Debug -R "LinearStaticCli|Mitc4ShellCli" --output-on-failure` | 0 | `1.442 s` | `100% tests passed out of 10`; failed `0`. |
|
||||
| 7 | `ctest --test-dir .harness/build -C Debug -R "Mitc4ReferenceComparison|Mitc4S4Reference" --output-on-failure` | 0 | `1.377 s` | `100% tests passed out of 8`; failed `0`. |
|
||||
| 8 | `ctest --test-dir .harness/build -C Debug --show-only=json-v1` | 0 | `0.208 s` | Discovered `144` tests; `32` test names contained `Mitc4`. |
|
||||
| 9 | `ctest --test-dir .harness/build -C Debug --output-on-failure` | 0 | `9.789 s` | Initial full regression: `144/144` passed; failed `0`. |
|
||||
| 10 | First environment/reference audit helper | 1 | `0.9 s` | Non-gating report-generation error: it hardcoded nonexistent CMake internal directory `CMakeFiles/4.3.0`; both S4 hashes had already matched before the helper stopped. No build or test failed. |
|
||||
| 11 | Corrected dynamic environment/reference audit helper | 0 | `0.583 s` | Located `CMakeFiles/4.4.0/CMakeCXXCompiler.cmake`; confirmed MSVC/version, both S4 hashes, no S4 diff, and clean worktree. |
|
||||
| 12 | `cmake --build .harness/build --config Debug --target clean` | 0 | `1.251 s` | Generated Visual Studio clean target completed. |
|
||||
| 13 | `cmake --build .harness/build --config Debug` | 0 | `94.616 s` | Canonical clean rebuild compiled/linked the solver, CLI, and all test executables; `89` output lines, warning scan `0`, error scan `0`. |
|
||||
| 14 | `cmake --build .harness/build --config Debug --target fesa_unit_tests` | 0 | `1.943 s` | `fesa_solver`, GoogleTest, and `fesa_unit_tests.exe` confirmed. |
|
||||
| 15 | Focused kernel/model/assembly/recovery regex from order 5 | 0 | `4.863 s` | Canonical focused run: `87/87` passed; failed `0`. |
|
||||
| 16 | `cmake --build .harness/build --config Debug --target fesa_integration_tests` | 0 | `1.712 s` | `fesa_solver`, GoogleTest, and `fesa_integration_tests.exe` confirmed. |
|
||||
| 17 | Focused lifecycle regex from order 6 | 0 | `1.531 s` | Canonical focused run: `10/10` passed; failed `0`. |
|
||||
| 18 | `cmake --build .harness/build --config Debug --target fesa_reference_tests` | 0 | `1.769 s` | `fesa_solver`, GoogleTest, and `fesa_reference_tests.exe` confirmed. |
|
||||
| 19 | Focused reference regex from order 7 | 0 | `1.511 s` | Canonical focused run: `8/8` passed; failed `0`; S4 end-to-end tests were included. |
|
||||
| 20 | `ctest --test-dir .harness/build -C Debug --show-only=json-v1` | 0 | `0.080 s` | Canonical discovery: `144` total, `32` MITC4-named; unit/integration/reference labels `121/10/13`. |
|
||||
| 21 | `ctest --test-dir .harness/build -C Debug --output-on-failure` | 0 | `9.669 s` | Canonical full regression: `100% tests passed out of 144`; failed `0`; CTest real time `9.62 s`. |
|
||||
| 22 | Full `reference/` Git scope and worktree audit | 0 | `0.362 s` | `reference_diff_count=0`, `reference_status_count=0`; branch and HEAD unchanged. |
|
||||
| 23 | `git merge-base dev HEAD` plus changed-file scope audit | 0 | `0.321 s` | Merge base `a058ef7...`; detected `scripts/execute.py`, so Harness Python self-test was required. |
|
||||
| 24 | `uv run --with pytest python -m pytest -v -rs` | 0 | `4.651 s` | Python `3.11.15`, pytest `9.1.1`; `7 passed in 0.11s`; failed `0`. |
|
||||
|
||||
<a id="build-test--validation-results"></a>
|
||||
### Validation Results
|
||||
|
||||
| validation_stage | result | evidence |
|
||||
| --- | --- | --- |
|
||||
| clean baseline | pass | Branch and HEAD matched the requested baseline; worktree was clean before report creation. |
|
||||
| dependency precheck | pass | All four implementation-plan dependency paths existed. |
|
||||
| fresh configure | pass | VS18/x64 configure exit `0`; compiler metadata is MSVC x64. |
|
||||
| clean full build | pass | Exit `0`; solver, CLI, unit, integration, and reference targets compiled/linked. |
|
||||
| compiler warning policy | pass | Clean rebuild emitted zero warning lines and zero compiler/linker error lines; product CMake uses warnings-as-errors. |
|
||||
| feature-specific tests | pass | Approved focused regexes passed `87/87`, `10/10`, and `8/8`. |
|
||||
| CTest discovery | pass | Nonzero inventory: `144` tests, including `32` MITC4-named tests. |
|
||||
| full CTest | pass | `144/144` passed after the clean rebuild. |
|
||||
| Harness self-test | pass | Required because `scripts/execute.py` differs from the `dev` merge base; `7/7` passed. |
|
||||
| reference immutability | pass | Required S4 SHA-256 values match; entire `reference/` tree has no Git diff or status entry. |
|
||||
|
||||
<a id="build-test--ctest-inventory"></a>
|
||||
### CTest Inventory
|
||||
|
||||
| inventory | count |
|
||||
| --- | ---: |
|
||||
| all discovered tests | 144 |
|
||||
| unit label | 121 |
|
||||
| integration label | 10 |
|
||||
| reference label | 13 |
|
||||
| test names containing `Mitc4` | 32 |
|
||||
| failed tests | 0 |
|
||||
|
||||
The `32` MITC4-named tests comprise `30` tests in `Mitc4*` suites plus
|
||||
`DomainModel.Mitc4ShellRecordsPreserveSourceAndInternalIdentity` and
|
||||
`InpDomainMapping.MapsS4AndS4rThroughOneMitc4Identity`. The broader focused regex
|
||||
also exercises shared Domain, DOF, constraints, assembly, recovery, and HDF5 seams.
|
||||
|
||||
CTest currently applies the target-wide legacy label
|
||||
`linear-static-3d-euler-beam` to all `144` tests and has no separate MITC4 label.
|
||||
The approved implementation plan explicitly permits exact suite regex filtering,
|
||||
which was used here, so this labeling limitation is nonblocking.
|
||||
|
||||
<a id="build-test--warning-and-failure-audit"></a>
|
||||
### Warning and Failure Audit
|
||||
|
||||
- Clean rebuild warning lines: `0`.
|
||||
- Clean rebuild compiler/linker error lines: `0`.
|
||||
- Focused CTest failures: `0`.
|
||||
- Full CTest failures: `0`.
|
||||
- Harness Python failures: `0`.
|
||||
- Configure probes for POSIX pthread symbols reported expected negative probe
|
||||
results on MSVC before CMake resolved `Threads: TRUE`; this is not a configure
|
||||
warning or failure.
|
||||
- One report-generation helper failed because it assumed a CMake internal versioned
|
||||
directory. The corrected dynamic lookup passed. This incident did not affect
|
||||
configure, compile, link, test, reference artifacts, or the gate verdict.
|
||||
|
||||
<a id="build-test--reference-read-only-audit"></a>
|
||||
### Reference Read-Only Audit
|
||||
|
||||
| exact approved path | observed SHA-256 | expected match |
|
||||
| --- | --- | --- |
|
||||
| `reference/shell/shell.inp` | `4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF` | yes |
|
||||
| `reference/shell/shell displacements.csv` | `C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B` | yes |
|
||||
|
||||
The post-test audit found zero changed paths anywhere under `reference/`. No Abaqus
|
||||
or other reference solver was run.
|
||||
|
||||
<a id="build-test--failure-classification"></a>
|
||||
### Failure Classification
|
||||
|
||||
- classification: `N/A`
|
||||
- primary_failure: `N/A`
|
||||
- first_failed_build_or_test_command: `N/A`
|
||||
- failed_target_or_test: `N/A`
|
||||
- correction_handoff: `N/A`
|
||||
- non_gating_incident: report-only environment metadata lookup used the wrong CMake
|
||||
internal directory and was rerun successfully; no product correction is required
|
||||
|
||||
<a id="build-test--failed-test-inventory"></a>
|
||||
### Failed Test Inventory
|
||||
|
||||
None. All focused, full CTest, and Harness Python tests passed.
|
||||
|
||||
<a id="build-test--handoff-recommendation"></a>
|
||||
### Handoff Recommendation
|
||||
|
||||
| target_agent | reason | required_input |
|
||||
| --- | --- | --- |
|
||||
| Reference Verification Agent | Build/test status is `pass-for-reference-verification`. | This report, source HEAD `820ba30...`, `.harness/build/tests/Debug/fesa_reference_tests.exe`, and the unchanged declared S4 input/CSV pair. |
|
||||
|
||||
The focused reference CTest generated/used build-local comparison evidence, but the
|
||||
Build/Test Executor does not interpret that evidence as the formal reference
|
||||
tolerance verdict. Reference Verification must independently inspect and report it.
|
||||
|
||||
<a id="build-test--open-issues"></a>
|
||||
### Open Issues
|
||||
|
||||
- None blocking Reference Verification.
|
||||
- The target-wide legacy CTest label prevents a precise MITC4 label count; exact
|
||||
implementation-plan suite regexes provide the approved focused test entry point.
|
||||
|
||||
<a id="reference-comparison"></a>
|
||||
|
||||
<a id="reference-comparison--linear-static-mitc4-shell-reference-verification-report"></a>
|
||||
## Linear Static MITC4 Shell Reference Verification Report
|
||||
|
||||
<a id="reference-comparison--metadata"></a>
|
||||
### Metadata
|
||||
|
||||
- feature_id: `linear-static-mitc4-shell`
|
||||
- model_id: `shell-s4`
|
||||
- source_head: `820ba30c717b3d0e113775608e20dfd5fbc05d53`
|
||||
- source_build_test_report:
|
||||
`docs/linear-static-mitc4-shell/verification.md`
|
||||
- source_reference_models:
|
||||
`docs/linear-static-mitc4-shell/reference-model.md`
|
||||
- source_io_definition: `docs/linear-static-mitc4-shell/io.md`
|
||||
- source_requirements: `docs/linear-static-mitc4-shell/requirements.md`
|
||||
- historical_status: `pass-for-physics-evaluation`
|
||||
- current_status: `pass-for-physics-evaluation`
|
||||
- superseded_on: `2026-08-18`
|
||||
- revalidated_on: `2026-08-18`
|
||||
- date: `2026-08-13`
|
||||
|
||||
The fixed-absolute-tolerance evidence below is preserved as a historical record. ADR-022
|
||||
supersedes that decision with the common family-scale row/RMS policy. The following revalidation
|
||||
is the current reference-gate evidence.
|
||||
|
||||
<a id="reference-comparison--2026-08-18-common-policy-revalidation"></a>
|
||||
### 2026-08-18 Common-policy Revalidation
|
||||
|
||||
`cmake --build .harness/build --config Debug` passed, followed by
|
||||
`ctest --test-dir .harness/build -C Debug --output-on-failure`: 214/214 tests passed.
|
||||
The S4 reference test generated
|
||||
`.harness/build/reference/mitc4-shell-s4-comparison/comparison.json` from the declared
|
||||
read-only input/CSV pair.
|
||||
|
||||
- exact canonical rows: 294
|
||||
- blocking translation family: 147 rows, all row/RMS gates passed
|
||||
- warning-only rotation family: 147 rows, all row/RMS gates passed; warnings 0
|
||||
- identity/schema/nonfinite failures: 0
|
||||
- overall verdict: `passed=true`
|
||||
|
||||
| family | rows | scale | near-zero rows | max absolute error | scale-relative RMS |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: |
|
||||
| translation `U1/U2/U3` | 147 | `2.37408203e-5` | 122 | `1.903785349151439e-7` | `1.0332756650397166e-3` |
|
||||
| rotation `UR1/UR2/UR3` | 147 | `7.60725743e-6` | 107 | `6.882854962740428e-8` | `2.9771372973060382e-3` |
|
||||
|
||||
All values above come from the generated JSON ledger. The historical report body starts below
|
||||
and must not be read as the current identity/tolerance evidence.
|
||||
|
||||
The prerequisite build/test report has status `pass-for-reference-verification`.
|
||||
This report verifies only the approved full-integration S4 displacement case. It
|
||||
does not compare S4R artifacts, claim Abaqus formulation equivalence, approve
|
||||
physics sanity, or approve release readiness.
|
||||
|
||||
<a id="reference-comparison--verdict"></a>
|
||||
### Verdict
|
||||
|
||||
The reference-comparison gate passes. The fresh FESA result has an exact
|
||||
294-row identity match to the read-only Abaqus displacement CSV. All 147 blocking
|
||||
`U1/U2/U3` rows satisfy the fixed absolute tolerance `1.0e-5`. All 147
|
||||
warning-only `UR1/UR2/UR3` rows also satisfy `1.0e-5`, so no rotational warning
|
||||
was emitted.
|
||||
|
||||
- declared cases compared: `1/1`
|
||||
- blocking rows passed: `147/147`
|
||||
- blocking failures: `0`
|
||||
- warning-only rows compared: `147/147`
|
||||
- warning-only exceedances and warnings: `0/0`
|
||||
- missing / extra / duplicate / nonfinite rows: `0 / 0 / 0 / 0`
|
||||
- largest blocking normalized error: `0.0190378534915144`
|
||||
- comparison verdict: `passed=true`
|
||||
|
||||
<a id="reference-comparison--artifact-inventory"></a>
|
||||
### Artifact Inventory
|
||||
|
||||
| item | exact path | status | direct evidence |
|
||||
| --- | --- | --- | --- |
|
||||
| declared S4 input | `reference/shell/shell.inp` | present, unchanged | 4,770 bytes; SHA-256 `4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF` |
|
||||
| required displacement CSV | `reference/shell/shell displacements.csv` | present, unchanged | 5,592 bytes; SHA-256 `C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B`; 49 wide rows and six finite components per row |
|
||||
| authoritative solver output | `.harness/build/reference/mitc4-shell-s4-comparison/results.h5` | present, valid | 95,024 bytes after a fresh verification run; observed raw SHA-256 `E88E5E5E1F83AB95CAE545AD1F28F896D3FCB82F3EA2B8006A3A703FED07A5CB` (non-decision inventory only) |
|
||||
| deterministic comparison ledger | `.harness/build/reference/mitc4-shell-s4-comparison/comparison.json` | present, valid | 94,349 bytes; SHA-256 `8E8DEA51B6F7C663BACC41FDA6103A4596DB26E02F1EAD6069D458F51E0102E6`; `passed=true` |
|
||||
| S4R reference artifacts | `reference/shellR/` | not consumed | Excluded from the approved acceptance comparison. |
|
||||
| reaction and stress CSVs | other files under `reference/shell/` | not consumed | Optional inspection evidence only; not an equality gate. |
|
||||
| FESA-derived CSV | N/A | not generated | HDF5 was compared directly to the Abaqus CSV. |
|
||||
|
||||
The input and required CSV had identical SHA-256 values and identical UTC
|
||||
modification times (`2026-08-11T11:44:40.9520527Z`) before and after the fresh
|
||||
comparison runs. `git diff --name-only -- reference` and
|
||||
`git status --short -- reference` each returned zero paths.
|
||||
|
||||
The HDF5 hash above inventories one fresh generation, not a stable content
|
||||
identity. Raw HDF5 bytes changed across regenerations while the projected values
|
||||
and deterministic JSON ledger remained identical; concurrent executions of the
|
||||
same ignored build-local route may replace the file again. This report does not
|
||||
claim byte-identical HDF5 container output.
|
||||
|
||||
<a id="reference-comparison--authoritative-hdf5-projection-audit"></a>
|
||||
#### Authoritative HDF5 projection audit
|
||||
|
||||
The comparator and a read-only HDF5 2.1.1 inspection established:
|
||||
|
||||
- `/metadata`: schema version `0`, feature `linear-static-mitc4-shell`, solver
|
||||
version `0.1.0`, `Step-1`, frame `0`, internal formulation `FESA-MITC4`, and
|
||||
integration rule `2x2x2-gauss; mitc4-edge-midpoint-shear`;
|
||||
- source input identity:
|
||||
`path=C:/Users/baram/orca/workspaces/FESADev/MITC4/reference/shell/shell.inp;content_identity=fnv1a64:cf0795df753d377e`;
|
||||
- `/model/nodes`: 49 compound rows with ordered fields
|
||||
`internal_node_id`, `instance_name`, `source_label`, and `coordinates`;
|
||||
- `/model/elements`: 36 compound rows, source element type `S4`, and internal
|
||||
formulation `FESA-MITC4`;
|
||||
- `/steps/Step-1/frames/0/nodal/displacement`: float64 shape `[49,6]`, global
|
||||
nodal components `[UX,UY,UZ,URX,URY,URZ]`, mapped to
|
||||
`[U1,U2,U3,UR1,UR2,UR3]`;
|
||||
- all projected source identities and displacement values are unique and finite.
|
||||
|
||||
<a id="reference-comparison--comparison-contract"></a>
|
||||
### Comparison Contract
|
||||
|
||||
- case identity: `shell-s4`
|
||||
- authoritative FESA dataset:
|
||||
`/steps/Step-1/frames/0/nodal/displacement`
|
||||
- HDF5 node identity source: `/model/nodes.instance_name` and
|
||||
`/model/nodes.source_label`
|
||||
- normalized key:
|
||||
`(case_id, instance_name, source_node_label, component)`
|
||||
- observed instance: `Part-1-1`
|
||||
- observed source nodes: 49 unique labels
|
||||
- CSV projection: trimmed `Part Instance Name`, `Node Label`, `U-U1`, `U-U2`,
|
||||
`U-U3`, `UR-UR1`, `UR-UR2`, and `UR-UR3`
|
||||
- stable component order: `[U1,U2,U3,UR1,UR2,UR3]`
|
||||
- blocking inventory: `U1/U2/U3`
|
||||
- warning-only inventory: `UR1/UR2/UR3`
|
||||
- row precheck: exact key set, unique rows, finite HDF5/reference values, and
|
||||
exact required HDF5 schema before tolerance evaluation
|
||||
- tolerance source: requirements `FESA-REQ-LSMITC4-058` through `064`, the I/O
|
||||
definition Section 7, and the approved reference-model contract Section 5
|
||||
- row tolerance: `abs(fesa-reference) <= 1.0e-5`
|
||||
- tolerance-normalized error: `absolute_error / 1.0e-5`
|
||||
- `reference_scale`: diagnostic only; it does not alter the tolerance or verdict
|
||||
- zero policy: no clamp, substitution, omission, averaging, or row-order matching
|
||||
|
||||
Independent ledger reconstruction found 294 projected CSV keys, 294 comparison
|
||||
keys, zero duplicate keys, and exact set equality. All 294 serialized row
|
||||
tolerances equal `1.0e-5`. The complete per-row decisions remain in the
|
||||
identified deterministic `comparison.json`.
|
||||
|
||||
<a id="reference-comparison--execution-evidence"></a>
|
||||
### Execution Evidence
|
||||
|
||||
The existing FESA S4 reference route was used; Abaqus and other reference solvers
|
||||
were not executed. The first run regenerated the evidence after its test-owned
|
||||
output directory cleanup. Further exact reruns confirmed the ledger bytes and the
|
||||
final verification assertions.
|
||||
|
||||
| order | exact command | exit code | result |
|
||||
| ---: | --- | ---: | --- |
|
||||
| 1 | `cmake --build .harness/build --config Debug --target fesa_reference_tests` | `0` | Reference test executable built; duration `1.830 s`. |
|
||||
| 2 | `ctest --test-dir .harness/build -C Debug -R '^Mitc4S4Reference\.' --output-on-failure` | `0` | Fresh S4 E2E tests `2/2` passed; duration `0.760 s`. |
|
||||
| 3 | PowerShell CSV/JSON identity and metric audit | `0` | 294 exact keys; missing/extra/duplicate/nonfinite/nonfixed-tolerance counts all zero. |
|
||||
| 4 | `ctest --test-dir .harness/build -C Debug -R '^Mitc4S4Reference\.' --output-on-failure` | `0` | Repeat S4 E2E tests `2/2` passed; duration `0.911 s`; JSON hash unchanged. |
|
||||
| 5 | `h5dump.exe -A -g '/metadata' <results.h5>` with HDF5 and Intel oneAPI 2026.1 runtime directories prepended to `PATH` | `0` | Required metadata values inspected read-only. |
|
||||
| 6 | `h5dump.exe -H -d '/model/nodes' <results.h5>` | `0` | Compound schema and shape `[49]` inspected. |
|
||||
| 7 | `h5dump.exe -H -d '/model/elements' <results.h5>` | `0` | Compound schema and shape `[36]` inspected. |
|
||||
| 8 | `h5dump.exe -H -d '/steps/Step-1/frames/0/nodal/displacement' <results.h5>` | `0` | Float64 displacement schema and shape `[49,6]` inspected. |
|
||||
| 9 | Final `ctest --test-dir .harness/build -C Debug -R '^Mitc4S4Reference\.' --output-on-failure` plus report/metric assertion script | `0` | S4 E2E tests `2/2`; `verification=PASS`; final generated artifacts retained. |
|
||||
| 10 | `git diff --check` | `0` | Report patch has no whitespace errors. |
|
||||
| 11 | target-only Git scope and reference no-change audit | `0` | Only this owned report and the pre-existing untracked build/test report are visible; reference scope remains clean. |
|
||||
|
||||
An initial optional `h5dump` probe without the Intel runtime directory exited
|
||||
`-1073741515` because `libmmd.dll` was not on that process's `PATH`. The same
|
||||
read-only inspection passed after adding the installed oneAPI runtime path. This
|
||||
was an inspection-environment incident, not a solver, schema, comparison, or
|
||||
reference-artifact failure.
|
||||
|
||||
The repeated JSON ledger was byte-identical:
|
||||
|
||||
- size: `94,349` bytes
|
||||
- SHA-256 before and after repeat: `8E8DEA51B6F7C663BACC41FDA6103A4596DB26E02F1EAD6069D458F51E0102E6`
|
||||
- row decisions: `294`
|
||||
- component metrics: `6`
|
||||
- node vector metrics: `49`
|
||||
- warnings: `0`
|
||||
- verdict: `passed=true`
|
||||
|
||||
<a id="reference-comparison--quantity-results"></a>
|
||||
### Quantity Results
|
||||
|
||||
`max_rel` is calculated only for nonzero Abaqus values and is diagnostic. Tiny
|
||||
reference residues make it ill-conditioned; the acceptance decision uses only
|
||||
the fixed absolute tolerance and its fixed-tolerance-normalized error.
|
||||
|
||||
| quantity | components | behavior | compared | missing | extra | duplicate | nonfinite | max abs | max rel | max normalized | RMS | L2 norm | worst ID/component by abs error | result |
|
||||
| --- | --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | --- |
|
||||
| displacement | `U1/U2/U3` | blocking | 147 | 0 | 0 | 0 | 0 | `1.90378534915144e-7` | `1.0` | `0.0190378534915144` | `2.45308118840709e-8` | `2.97420287738877e-7` | `Part-1-1`, node 2, `U3` | pass |
|
||||
| rotation | `UR1/UR2/UR3` | warning-only | 147 | 0 | 0 | 0 | 0 | `6.88285496274043e-8` | `35.7165926082675` | `0.00688285496274043` | `2.26478498250615e-8` | `2.74590586054375e-7` | `Part-1-1`, node 44, `UR1` | pass, no warning |
|
||||
|
||||
The translational maximum relative error `1.0` occurs on near-zero reference
|
||||
residue, including node 1 `U3=-1.17769804e-32`. The rotational maximum relative
|
||||
error `35.7165926082675` occurs at node 2 `UR2`, where the reference is
|
||||
`1.3860685e-22` and the absolute error is only `4.95056439416524e-21`.
|
||||
Neither value was clamped or omitted, and neither relative diagnostic controls
|
||||
the verdict.
|
||||
|
||||
<a id="reference-comparison--component-metrics"></a>
|
||||
#### Component metrics
|
||||
|
||||
Each component contains 49 matched rows. `reference_scale` is retained only as
|
||||
diagnostic information. `L2 norm` is the comparator's component
|
||||
`vector_norm_error`, and `worst_row` is the zero-based index in the JSON ledger.
|
||||
|
||||
| component | behavior | reference scale | tolerance | max abs | max rel | max normalized | RMS | L2 norm | worst row | worst identity | result |
|
||||
| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | --- |
|
||||
| `U1` | blocking | `3.11730945e-23` | `1.0e-5` | `3.11730945e-23` | `1.0` | `3.11730945e-18` | `1.13587076092006e-23` | `7.95109532644045e-23` | 66 | node 12 / `U1` | pass |
|
||||
| `U2` | blocking | `3.11730945e-23` | `1.0e-5` | `3.11730945e-23` | `1.0` | `3.11730945e-18` | `1.13587076092006e-23` | `7.95109532644045e-23` | 61 | node 11 / `U2` | pass |
|
||||
| `U3` | blocking | `2.37408203e-5` | `1.0e-5` | `1.90378534915144e-7` | `1.0` | `0.0190378534915144` | `4.24886125341252e-8` | `2.97420287738877e-7` | 8 | node 2 / `U3` | pass |
|
||||
| `UR1` | warning-only | `7.60725743e-6` | `1.0e-5` | `6.88285496274043e-8` | `11.9344619221920` | `0.00688285496274043` | `2.77378379212910e-8` | `1.94164865449037e-7` | 261 | node 44 / `UR1` | pass, no warning |
|
||||
| `UR2` | warning-only | `7.60725743e-6` | `1.0e-5` | `6.88285496273990e-8` | `35.7165926082675` | `0.00688285496273990` | `2.77378379212909e-8` | `1.94164865449036e-7` | 202 | node 34 / `UR2` | pass, no warning |
|
||||
| `UR3` | warning-only | `5.27113701e-25` | `1.0e-5` | `5.27113701e-25` | `1.0` | `5.27113701e-20` | `2.12986098533393e-25` | `1.49090268973375e-24` | 203 | node 34 / `UR3` | pass, no warning |
|
||||
|
||||
<a id="reference-comparison--worst-rows-and-node-vector-metrics"></a>
|
||||
#### Worst rows and node-vector metrics
|
||||
|
||||
- global worst and worst blocking row: `shell-s4`, `Part-1-1`, node 2,
|
||||
`U3`; FESA `-2.35504417650849e-5`, Abaqus `-2.37408203e-5`, absolute
|
||||
error `1.90378534915144e-7`, tolerance `1.0e-5`, normalized error
|
||||
`0.0190378534915144`, within tolerance;
|
||||
- worst warning-only row: `shell-s4`, `Part-1-1`, node 44, `UR1`; FESA
|
||||
`1.39850632037260e-6`, Abaqus `1.46733487e-6`, absolute error
|
||||
`6.88285496274043e-8`, normalized error `0.00688285496274043`, within
|
||||
tolerance;
|
||||
- maximum per-node displacement-vector error: `1.90378534915144e-7` at
|
||||
`Part-1-1`, node 2;
|
||||
- maximum per-node rotation-vector error: `7.21144690026432e-8` at
|
||||
`Part-1-1`, node 39.
|
||||
|
||||
<a id="reference-comparison--failure-classification"></a>
|
||||
### Failure Classification
|
||||
|
||||
- classification: `N/A`
|
||||
- primary_failure: `N/A`
|
||||
- evidence: declared artifacts exist; the authoritative HDF5 projection passed
|
||||
schema and identity checks; 294/294 exact row keys are unique and finite;
|
||||
147/147 blocking rows pass; zero rotational exceedances or warnings occurred
|
||||
- correction_handoff: `N/A`
|
||||
|
||||
The optional first `h5dump` runtime-path incident is classified as a resolved
|
||||
inspection-environment incident and does not affect this gate.
|
||||
|
||||
<a id="reference-comparison--handoff-recommendation"></a>
|
||||
### Handoff Recommendation
|
||||
|
||||
| target_agent | reason | required input |
|
||||
| --- | --- | --- |
|
||||
| Physics Evaluation Agent | All declared blocking reference rows passed the exact approved tolerance, and the warning-only inventory has no exceedance. | This report, `.harness/build/reference/mitc4-shell-s4-comparison/results.h5`, and its deterministic `comparison.json`. |
|
||||
|
||||
The handoff status is `pass-for-physics-evaluation` only. Physics Evaluation
|
||||
remains responsible for equilibrium, reaction sign, displacement direction,
|
||||
symmetry, physical energy, result signs, and model-coverage adequacy.
|
||||
|
||||
<a id="reference-comparison--open-issues"></a>
|
||||
### Open Issues
|
||||
|
||||
- None blocking Physics Evaluation.
|
||||
- Nonblocking audit note: raw HDF5 container hashes differed across fresh
|
||||
regenerations, while the authoritative projected rows and serialized comparison
|
||||
ledger were stable and the JSON was byte-identical. No HDF5 byte-determinism
|
||||
claim is made by this report.
|
||||
|
||||
<a id="physics-evaluation"></a>
|
||||
|
||||
<a id="physics-evaluation--linear-static-mitc4-shell-physics-evaluation-report"></a>
|
||||
## Linear Static MITC4 Shell Physics Evaluation Report
|
||||
|
||||
<a id="physics-evaluation--metadata"></a>
|
||||
### Metadata
|
||||
|
||||
- feature_id: `linear-static-mitc4-shell`
|
||||
- model_id: `shell-s4`
|
||||
- evaluated_head: `820ba30c717b3d0e113775608e20dfd5fbc05d53`
|
||||
- source_build_test_report:
|
||||
`docs/linear-static-mitc4-shell/verification.md`
|
||||
- source_reference_verification_report:
|
||||
`docs/linear-static-mitc4-shell/verification.md`
|
||||
- source_reference_model:
|
||||
`docs/linear-static-mitc4-shell/reference-model.md`
|
||||
- source_requirement: `docs/linear-static-mitc4-shell/requirements.md`
|
||||
- source_formulation: `docs/linear-static-mitc4-shell/formulation.md`
|
||||
- source_numerical_review:
|
||||
`docs/linear-static-mitc4-shell/numerical-review.md`
|
||||
- source_io_definition: `docs/linear-static-mitc4-shell/io.md`
|
||||
- status: `pass-for-release-agent`
|
||||
- date: `2026-08-13`
|
||||
|
||||
This verdict means that the documented physical checks pass and the Release Agent
|
||||
may audit release readiness. It does not approve release readiness, re-approve the
|
||||
reference comparison, or change its tolerance decision.
|
||||
|
||||
<a id="physics-evaluation--input-evidence"></a>
|
||||
### Input Evidence
|
||||
|
||||
The prerequisite reference-verification report has status
|
||||
`pass-for-physics-evaluation`. The existing S4 reference-test route was rebuilt and
|
||||
executed to regenerate fresh FESA evidence. Abaqus and other reference solvers were
|
||||
not executed.
|
||||
|
||||
| evidence | exact path or identity | status | notes |
|
||||
| --- | --- | --- | --- |
|
||||
| build/test report | `docs/linear-static-mitc4-shell/verification.md` | `pass-for-reference-verification` | Clean MSVC x64 Debug build, focused `87/87`, lifecycle `10/10`, reference `8/8`, and full `144/144` CTest passed. |
|
||||
| reference verification | `docs/linear-static-mitc4-shell/verification.md` | `pass-for-physics-evaluation` | Required prerequisite satisfied; 147/147 blocking U rows passed and no UR warning was emitted. |
|
||||
| solver HDF5 | `.harness/build/reference/mitc4-shell-s4-comparison/results.h5` | present and readable | Freshly generated, 95,024 bytes; observed raw SHA-256 `E102D80E82BA133EBDF1C5532F3A0A4FE9984AB6CC36D00264399F7308D9230F` (inventory only). |
|
||||
| comparison ledger | `.harness/build/reference/mitc4-shell-s4-comparison/comparison.json` | present and passing | 94,349 bytes; SHA-256 `8E8DEA51B6F7C663BACC41FDA6103A4596DB26E02F1EAD6069D458F51E0102E6`; `passed=true`. |
|
||||
| declared S4 input | `reference/shell/shell.inp` | present, unchanged, read-only | SHA-256 `4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF`. |
|
||||
| declared displacement CSV | `reference/shell/shell displacements.csv` | present, unchanged, read-only | SHA-256 `C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B`. |
|
||||
| optional Abaqus reaction/stress CSVs | `reference/shell/shell reactions.csv`, `reference/shell/shell stresses.csv` | not used as equality gates | Their presence did not expand the approved U-only blocking boundary. |
|
||||
| solver CSV views | N/A | not generated | HDF5 was inspected directly. |
|
||||
| fresh S4 route | `.harness/build`, MSVC x64 Debug | pass | `Mitc4S4Reference.*` passed `2/2`. |
|
||||
|
||||
The HDF5 contains 49 nodes, 36 source-`S4` elements, internal formulation
|
||||
`FESA-MITC4`, and the required full `2 x 2 x 2` result inventory. All inspected
|
||||
numeric model and result values were finite. The diagnostics dataset contains four
|
||||
approved warning rows for ignored `PREPRINT`, `RESTART`, and `OUTPUT` keywords and
|
||||
no error diagnostic.
|
||||
|
||||
Raw HDF5 bytes are not a physics decision identity and may change across valid
|
||||
regenerations. The projected values and deterministic comparison ledger are the
|
||||
relevant evidence.
|
||||
|
||||
<a id="physics-evaluation--documented-model-expectation"></a>
|
||||
#### Documented model expectation
|
||||
|
||||
The reference input is a flat `10 x 10`, thickness `0.5`, homogeneous isotropic
|
||||
square plate with `E=2.1e11` and `nu=0.3`. Its 24 perimeter nodes are fully clamped
|
||||
in all six global DOFs, and center node 2 at the global origin carries one
|
||||
`F3=-100000` concentrated force. The geometry, boundary, material, and load are
|
||||
symmetric about both global `x=0` and `y=0` planes.
|
||||
|
||||
The documented physical expectations are therefore:
|
||||
|
||||
- total constrained reaction force opposes the applied `-Z` force;
|
||||
- total force and moment about the global origin balance within the approved
|
||||
normalized `1e-10` limit;
|
||||
- perimeter displacements are zero and the interior deflects in `-Z`, with the
|
||||
largest magnitude at the center;
|
||||
- the displacement and rotation field obeys the polar/axial-vector reflection
|
||||
parity about both symmetry planes;
|
||||
- a linear, flat transverse plate response has no membrane strain/resultant or
|
||||
middle-surface in-plane stress, while bottom and top in-plane stresses reverse;
|
||||
- stored physical strain energy is finite, strictly positive, and consistent with
|
||||
the recovered generalized fields and `0.5 F^T d`;
|
||||
- free residual, finite results, rank/rigid-mode evidence, and the approved
|
||||
one-case coverage show no rigid-body or unsupported-mode symptom.
|
||||
|
||||
<a id="physics-evaluation--physics-checks"></a>
|
||||
### Physics Checks
|
||||
|
||||
| check | documented expectation | observed evidence | verdict | classification |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| global equilibrium | Applied plus constrained reaction force/moment about origin; normalized metrics `<=1e-10` | force residual `[0,0,-1.12049747258425e-9]`; moment residual `[6.45741238258779e-10,-2.63753463514149e-10,0]`; normalized force/moment `1.12049747258425e-14` / `2.35981341581908e-15` | pass | N/A |
|
||||
| reaction consistency | Perimeter-only reactions from full residual oppose `F3=-100000`; constrained motion is zero | summed constrained force `[0,0,99999.9999999989]`; constrained displacement exactly zero | pass | N/A |
|
||||
| displacement direction | Interior bends in `-Z`; center is maximum; no in-plane or drilling leakage | center `U3=-2.35504417650849e-5`; all 25 free-node U3 values nonpositive; `U1/U2/UR3` exactly zero | pass | N/A |
|
||||
| symmetry | Correct polar/axial reflection parity about `x=0` and `y=0` | max absolute reflection mismatch `4.27126230127111e-20` / `2.29087480670778e-20` | pass | N/A |
|
||||
| element force balance | No documented direct element-end-action output exists for shell GP resultants | Global assembled residual/equilibrium passed; direct element-end-action balance is skipped rather than inferred from mismatched locations | skipped | N/A |
|
||||
| recovered resultant consistency | `N=A*epsilon0`, `M=D*kappa`, `Q=As*gamma0` at each of 144 GP rows | absolute L2 residual `9.9301874551584e-12`; normalized L2 `5.56240926027087e-17` | pass | N/A |
|
||||
| stress/location/sign sanity | Local `[S11,S22,S12]` at bottom/middle/top; middle zero and faces reverse for this linear flat bending field | absolute L2 constitutive residual `1.29488994752188e-9`; normalized `3.05323934859307e-16`; middle stress exactly zero; face reversal exact | pass | N/A |
|
||||
| rigid body/nonfinite | Complete constraints, finite solution, acceptable residual, no abnormal uncontrolled mode | zero nonfinite values; `FREE_RESIDUAL_NORMALIZED=1.07747756058988e-14`; rank/rigid-mode tests passed upstream | pass | N/A |
|
||||
| physical energy | Positive and consistent physical-only energy; no drilling-energy gate | `1.17752208825422`; independently recovered value identical to relative `1.88569375589575e-16`; `0.5F^Td=1.17752208825424` | pass | N/A |
|
||||
| model coverage | Approved sole S4 case plus declared invariant/patch/common-path portfolio | S4 case covers end-to-end symmetric plate response; focused build/test portfolio passed; expanded models are explicitly nonblocking | pass | N/A |
|
||||
|
||||
<a id="physics-evaluation--1-global-force-and-moment-equilibrium"></a>
|
||||
#### 1. Global force and moment equilibrium
|
||||
|
||||
The reaction dataset is the assembled full residual `K*d-F`. Applying the
|
||||
constraint mask gives
|
||||
|
||||
```text
|
||||
sum constrained RF = [0, 0, 99999.9999999989]
|
||||
sum applied F = [0, 0, -100000]
|
||||
force residual = [0, 0, -1.12049747258425e-9]
|
||||
```
|
||||
|
||||
The load acts at the global origin and therefore contributes no origin moment.
|
||||
The constrained force and moment rows give
|
||||
|
||||
```text
|
||||
moment residual = [ 6.45741238258779e-10,
|
||||
-2.63753463514149e-10,
|
||||
0 ]
|
||||
```
|
||||
|
||||
These independently reconstructed values match the stored HDF5 equilibrium vector
|
||||
exactly. The serialized normalized metrics are:
|
||||
|
||||
| metric | value | threshold | result |
|
||||
| --- | ---: | ---: | --- |
|
||||
| `FREE_RESIDUAL_NORMALIZED` | `1.07747756058988e-14` | `1.0e-10` | pass |
|
||||
| `FORCE_BALANCE_NORMALIZED` | `1.12049747258425e-14` | `1.0e-10` | pass |
|
||||
| `MOMENT_BALANCE_NORMALIZED` | `2.35981341581908e-15` | `1.0e-10` | pass |
|
||||
|
||||
<a id="physics-evaluation--2-reaction-consistency-and-constrainedfree-meaning"></a>
|
||||
#### 2. Reaction consistency and constrained/free meaning
|
||||
|
||||
The 24 perimeter nodes provide 144 constrained DOFs; the remaining 150 DOFs are
|
||||
free. The HDF5 constraint mask agrees with the input set exactly, all prescribed
|
||||
values are zero, and the maximum constrained displacement is exactly zero.
|
||||
|
||||
The total positive `RF3=99999.9999999989` opposes the center `F3=-100000`. The
|
||||
nearly zero total `RF1/RF2` and origin `RM1/RM2/RM3` are required by the centered
|
||||
load and double symmetry. The largest raw free residual component is
|
||||
`7.62156560085714e-10`; because translational and rotational entries have different
|
||||
dimensions, the decision uses the documented normalized metric rather than this
|
||||
raw maximum. The normalized free residual passes by more than three orders of
|
||||
magnitude.
|
||||
|
||||
<a id="physics-evaluation--3-displacement-direction-and-deformation-mode"></a>
|
||||
#### 3. Displacement direction and deformation mode
|
||||
|
||||
Center node 2 has
|
||||
|
||||
```text
|
||||
[U1,U2,U3,UR1,UR2,UR3]
|
||||
= [0, 0, -2.35504417650849e-5, 0, 0, 0]
|
||||
```
|
||||
|
||||
Every free-node `U3` is nonpositive, the center is the maximum-magnitude
|
||||
translation, and every clamped boundary displacement is zero. Across the complete
|
||||
model, maximum absolute `U1`, `U2`, and `UR3` are exactly zero. Maximum absolute
|
||||
`UR1` and `UR2` are `7.55060026636931e-6` and
|
||||
`7.55060026636933e-6`, respectively. This is the expected symmetric plate-bending
|
||||
mode under a negative transverse center load, with no in-plane or drilling
|
||||
deformation leakage.
|
||||
|
||||
<a id="physics-evaluation--4-reflection-symmetry-and-expected-zeros"></a>
|
||||
#### 4. Reflection symmetry and expected zeros
|
||||
|
||||
For reflection through `x=0`, polar displacement components transform as
|
||||
`[-U1,+U2,+U3]`, while the axial rotation vector transforms as
|
||||
`[+UR1,-UR2,-UR3]`. Reflection through `y=0` similarly uses
|
||||
`[+U1,-U2,+U3,-UR1,+UR2,-UR3]`.
|
||||
|
||||
All 294 scalar nodal component comparisons per reflection were paired by source
|
||||
coordinates. The maximum absolute mismatch was `4.27126230127111e-20` for the
|
||||
`x` reflection and `2.29087480670778e-20` for the `y` reflection. The equality
|
||||
evidence is numerical roundoff, not a new acceptance tolerance.
|
||||
|
||||
<a id="physics-evaluation--5-shell-generalized-resultants-and-physical-work-signs"></a>
|
||||
#### 5. Shell generalized resultants and physical work signs
|
||||
|
||||
At every one of 36 elements times four midsurface Gauss locations, an independent
|
||||
constitutive reconstruction applied the documented centered-section identities:
|
||||
|
||||
```text
|
||||
N = A * epsilon0
|
||||
M = D * kappa
|
||||
Q = As * gamma0
|
||||
```
|
||||
|
||||
The complete 1,152-component resultant comparison has absolute L2 residual
|
||||
`9.9301874551584e-12` and normalized L2 residual
|
||||
`5.56240926027087e-17`. All membrane strains and `N` resultants are exactly zero,
|
||||
as required for this linear flat plate bending response.
|
||||
|
||||
The generalized work density `generalized_strain dot section_resultant` is strictly
|
||||
positive at all 144 locations: minimum `4.46321446508071e-4`, maximum
|
||||
`1.27059464107458e-1`, negative count `0`. This supports the physical sign and
|
||||
component-order interpretation.
|
||||
|
||||
The shell contract does not expose element-end nodal actions and explicitly forbids
|
||||
averaging mismatched result locations. Consequently a separate GP-to-element-end
|
||||
force-balance assertion is not documented and is marked `skipped`; the assembled
|
||||
global residual and equilibrium checks provide the required force-balance evidence.
|
||||
|
||||
<a id="physics-evaluation--6-stress-component-location-and-sign-sanity"></a>
|
||||
#### 6. Stress component, location, and sign sanity
|
||||
|
||||
HDF5 stores local in-plane `[S11,S22,S12]` directly at each GP and ordered section
|
||||
positions `BOTTOM(-1), MIDDLE(0), TOP(+1)`. Independent reconstruction used
|
||||
`Cps*(epsilon0+z*kappa)` at all 432 section locations. The absolute L2 residual is
|
||||
`1.29488994752188e-9`, or normalized `3.05323934859307e-16`, against a maximum
|
||||
absolute stored stress of `313250.779137971`.
|
||||
|
||||
All middle-surface in-plane stresses are exactly zero. For every component and GP,
|
||||
bottom and top stresses are equal in magnitude and opposite in sign. This is the
|
||||
documented curvature/stress-location convention for a centered homogeneous section.
|
||||
No `S33`, `S13`, `S23`, nodal stress, or Abaqus stress equality was inferred.
|
||||
|
||||
<a id="physics-evaluation--7-physical-energy-residual-and-rigid-body-symptoms"></a>
|
||||
#### 7. Physical energy, residual, and rigid-body symptoms
|
||||
|
||||
The stored `PHYSICAL_STRAIN_ENERGY` is finite and positive:
|
||||
|
||||
```text
|
||||
HDF5 physical energy = 1.17752208825422
|
||||
independent GP generalized energy = 1.17752208825422
|
||||
0.5 * F^T * d = 1.17752208825424
|
||||
```
|
||||
|
||||
The HDF5-versus-recovered normalized difference is
|
||||
`1.88569375589575e-16`; the final fresh HDF5-versus-external-work normalized
|
||||
difference is `9.14561471609432e-15`. The HDF5 value excludes numerical drilling stabilization,
|
||||
as required. No drilling-energy ratio, calibration, or warning criterion was
|
||||
introduced.
|
||||
|
||||
The solution is finite, the full perimeter support is enforced, the expected
|
||||
deformation mode is smooth and symmetric, all three normalized verification
|
||||
metrics pass `1e-10`, and the build/test evidence passes six-rigid-mode,
|
||||
stabilized-rank, non-rigid positive-energy, and pure-drill separation tests. No
|
||||
rigid-body, singular, nonfinite, or abnormal-mode symptom is present.
|
||||
|
||||
<a id="physics-evaluation--8-approved-model-coverage"></a>
|
||||
#### 8. Approved model coverage
|
||||
|
||||
The sole approved reference model provides end-to-end evidence for the
|
||||
full-integration `S4 -> FESA-MITC4` path, a nonzero transverse bending response,
|
||||
fully constrained reaction recovery, global force/moment balance, two-axis
|
||||
symmetry, physical energy, and shell result recovery.
|
||||
|
||||
The prerequisite focused `87/87` build/test portfolio supplies the documented
|
||||
complementary element evidence: membrane, bending, transverse-shear and twist patch
|
||||
fields; six physical rigid modes; expected physical/stabilized rank; frame and
|
||||
energy invariance; fixed numerical drilling and physical-recovery separation; and
|
||||
S4/S4R common-kernel/source-metadata behavior. The reference verification supplies
|
||||
the approved external displacement comparison.
|
||||
|
||||
This is the complete approved coverage for the feature. Pinched-cylinder,
|
||||
hemisphere, Scordelis-Lo, locking/convergence sequences, drilling calibration,
|
||||
expanded distorted/curved portfolios, and `NR-O01` through `NR-O04` are explicitly
|
||||
nonblocking or out of scope and were not invented as new physics gates.
|
||||
|
||||
<a id="physics-evaluation--execution-evidence"></a>
|
||||
### Execution Evidence
|
||||
|
||||
| order | exact command or read-only operation | exit code | result |
|
||||
| ---: | --- | ---: | --- |
|
||||
| 1 | `cmake --build .harness/build --config Debug --target fesa_reference_tests` | `0` | Existing S4 reference route rebuilt. |
|
||||
| 2 | `ctest --test-dir .harness/build -C Debug -R '^Mitc4S4Reference\.' --output-on-failure` | `0` | Fresh S4 tests `2/2` passed; FESA HDF5 and ledger regenerated. |
|
||||
| 3 | `h5dump.exe -n .harness/build/reference/mitc4-shell-s4-comparison/results.h5` with HDF5/oneAPI runtime on `PATH` | `0` | Required HDF5 inventory inspected read-only. |
|
||||
| 4 | `h5dump.exe -y -w 0 -m '%.17g' -d <dataset> .harness/build/reference/mitc4-shell-s4-comparison/results.h5` for model nodes/elements/mask/prescribed values, nodal U/R, shell frames/strain/resultant/stress, energy/equilibrium/metrics/diagnostics | `0` | High-precision read-only numerical audit supplied all reported values. |
|
||||
| 5 | PowerShell independent input/mask, reaction/equilibrium, reflection, constitutive recovery, stress-location, energy, finite, and diagnostics audit over the `h5dump` values | `0` | All documented physics assertions passed. |
|
||||
| 6 | `cmake --build .harness/build --config Debug --target fesa_unit_tests fesa_reference_tests`, then `ctest --test-dir .harness/build -C Debug -R 'Mitc4Shell(Kernel|Patch|Drilling|PhysicalRecovery)|ResultRecovery\..*Shell|Mitc4S4Reference' --output-on-failure` | `0` | Final focused verification passed `17/17`; the regenerated ledger retained `passed=true`, 294 rows, and zero warnings. |
|
||||
|
||||
Three intermediate audit-helper incidents were diagnostic-only and did not alter
|
||||
the product or verdict: a compound-record regular expression initially omitted the
|
||||
last node, a PowerShell array-expression initially bound subtraction to an array,
|
||||
and a final optional `h5ls` operand-order probe exited `1`. The root causes were
|
||||
confirmed as audit-command/parser usage, while successful high-precision HDF5
|
||||
inspection established 49/49 nodes and the complete evidence above. They are not
|
||||
solver, HDF5-schema, reference, or physics failures.
|
||||
|
||||
<a id="physics-evaluation--failure-classification"></a>
|
||||
### Failure Classification
|
||||
|
||||
- classification: `N/A`
|
||||
- primary_failure: `N/A`
|
||||
- evidence: all documented force/moment equilibrium, reaction, displacement,
|
||||
symmetry, recovery, stress-location, physical-energy, residual, finite-result,
|
||||
rigid-mode and approved coverage checks passed
|
||||
- correction_handoff: `N/A`
|
||||
- non_gating_incident: resolved read-only audit helper parsing/usage errors only
|
||||
|
||||
<a id="physics-evaluation--evaluation-verdict"></a>
|
||||
### Evaluation Verdict
|
||||
|
||||
- verdict: `pass-for-release-agent`
|
||||
- reason: the prerequisite reference status is valid and fresh FESA S4 evidence
|
||||
satisfies every documented physical expectation under its approved threshold;
|
||||
no implementation, formulation, I/O, model-coverage, nonfinite, rigid-body, or
|
||||
environment failure remains
|
||||
- release_approval: `not granted by this report`
|
||||
- reference_reapproval: `not performed by this report`
|
||||
|
||||
<a id="physics-evaluation--handoff-recommendation"></a>
|
||||
### Handoff Recommendation
|
||||
|
||||
| target_agent | reason | required_input |
|
||||
| --- | --- | --- |
|
||||
| Release Agent | All documented MITC4 physics checks passed. | This report, the build/test and reference-verification reports, the fresh build-local HDF5/comparison evidence, and the nonblocking limitations below. |
|
||||
|
||||
<a id="physics-evaluation--open-issues"></a>
|
||||
### Open Issues
|
||||
|
||||
- Nonblocking coverage limitation: the approved external reference inventory is one
|
||||
flat, symmetric, fully clamped S4 plate. The approved analytical/unit portfolio
|
||||
supplies membrane, shear, twist, rigid-mode, rank, drilling-separation and S4R
|
||||
common-path evidence. No broader Abaqus or benchmark portfolio is claimed.
|
||||
- Known original-MITC4 limitations remain: transverse-shear locking is mitigated by
|
||||
the tying field, but distorted-curved membrane locking and broader thin/thick mesh
|
||||
convergence are not characterized by this release gate.
|
||||
- Source `S4R` maps to the same full-integration FESA kernel and is not compared to
|
||||
the optional Abaqus S4R artifacts. This is an approved boundary, not missing
|
||||
physics evidence.
|
||||
- The fixed numerical drilling stiffness is not a physical stress/resultant/energy
|
||||
channel. No drilling calibration, coefficient sweep, energy-ratio gate, or
|
||||
director-parallel moment support is claimed.
|
||||
- Geometrically nonlinear execution remains outside the current feature even though
|
||||
future-only residual/tangent equations are documented. No nonlinear release claim
|
||||
is made.
|
||||
- No open issue blocks Release Agent review.
|
||||
Reference in New Issue
Block a user