feat(shell-surface-pressure-load): step 7 - verify-and-report-pressure-feature
This commit is contained in:
@@ -0,0 +1,84 @@
|
|||||||
|
# Shell Surface Pressure Load — 빌드·테스트 보고서
|
||||||
|
|
||||||
|
## 메타데이터
|
||||||
|
|
||||||
|
- feature_id: `shell-surface-pressure-load`
|
||||||
|
- owner_agent: `implementation-agent`
|
||||||
|
- 상태: agent 소유 focused 검증 통과
|
||||||
|
- `.harness/config.json`은 없었으므로 Step 7이 지정한 direct CMake 명령을 사용했다.
|
||||||
|
- 선택 환경: root CMake project, Visual Studio 18 2026 generator, x64, Debug,
|
||||||
|
C++17, MSVC 19.51.36252.0 (tool path 14.51.36231), MSBuild 18.8.2.
|
||||||
|
- 의존성: GoogleTest `C:/git/googletest`, MKL 2026.1, TBB 2023.1, HDF5 2.1.1.
|
||||||
|
|
||||||
|
## RED 사전검사와 이전 TDD 증거
|
||||||
|
|
||||||
|
시작 시 `implementation-report.md`, `build-test.md`,
|
||||||
|
`reference-comparison.md`가 모두 없었다. 이는 Step 7이 요구한
|
||||||
|
evidence-state RED다. Steps 1–6의 실행 기록을 감사하여 각 production/test/CMake
|
||||||
|
변경마다 expected RED와 GREEN/focused VERIFY가 있음을 확인했다. Step 1/2의
|
||||||
|
outer Harness timeout은 `corrections.md`가 기록한 full CTest와 Stop의 중복 실행이며,
|
||||||
|
제품 실패나 RED 누락이 아니다. `evidence-gap`은 없다.
|
||||||
|
|
||||||
|
## Agent 소유 명령 기록
|
||||||
|
|
||||||
|
duration은 command runner가 관측한 wall-clock 시간이다. Agent는 targetless
|
||||||
|
whole-project build 또는 unfiltered full CTest를 실행하지 않았다.
|
||||||
|
|
||||||
|
| ID | 명령 | exit | duration | 결과 / 의미 있는 tail |
|
||||||
|
| --- | --- | ---: | ---: | --- |
|
||||||
|
| `V-CONFIG` | `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 | 7.5 s | `CXX compiler identification is MSVC 19.51.36252.0`; configure/generate 완료. |
|
||||||
|
| `V-BUILD` | `cmake --build .harness/build --config Debug --target fesa_unit_tests fesa_integration_tests fesa_reference_tests` | 0 | 5.9 s | 세 test executable이 `.harness/build/tests/Debug`에 link됨. |
|
||||||
|
| `V-SHOW` | `ctest --test-dir .harness/build -C Debug --show-only=json-v1` | 0 | 1.7 s | 유효한 `ctestInfo` JSON; 후속 audit에서 362 tests 확인. |
|
||||||
|
| `V-FOCUSED` | `ctest --test-dir .harness/build -C Debug --output-on-failure -R "^(InpSyntax|ShellSurfacePressureInput|ShellSurfacePressureDomain|ShellSurfacePressureKernel|SurfacePressureAssembly|LinearShellSurfacePressure|NonlinearShellSurfacePressure|ShellSurfacePressureApplication|ShellSurfacePressureReference)\."` | 0 | 15.8 s | `100% tests passed`, 64/64; unit 37, integration 18, reference 9. |
|
||||||
|
| `V-REFERENCE` (사전) | `ctest --test-dir .harness/build -C Debug --output-on-failure -R "^ShellSurfacePressureReference\."` | 0 | 2.9 s | 9/9 통과. |
|
||||||
|
| `V-CLI-BUILD` | `cmake --build .harness/build --config Debug --target fesa_cli` | 0 | 2.7 s | `.harness/build/src/fesa/Debug/fesa.exe` link 완료. |
|
||||||
|
| `V-CLI-RUN` | `fesa.exe .harness/build/reference/shell-surface-pressure-load/shellNL-meshfine-pressure.inp` | 0 | 약 10 m 56 s | FESA만 실행. factor-one increment 10이 accepted되고 schema-1 HDF5/log가 atomic publish됨. 마지막 log는 `combined_pass=1`, `transition=accepted`. |
|
||||||
|
| `V-REFERENCE` (생성 결과) | 같은 `^ShellSurfacePressureReference\.` 명령 | 0 | 2.7 s | 새 root execution-directory HDF5를 선택하여 9/9 통과. |
|
||||||
|
| inventory | CTest JSON suite/count 및 staged DLL audit | 0 | 1.9 s | 362 discovered, 모든 named suite nonzero, runtime closure 확인. |
|
||||||
|
|
||||||
|
## 발견·focused 결과
|
||||||
|
|
||||||
|
| suite | 발견 수 | 결과 |
|
||||||
|
| --- | ---: | --- |
|
||||||
|
| `InpSyntax` | 5 | 통과 |
|
||||||
|
| `ShellSurfacePressureInput` | 15 | 통과 |
|
||||||
|
| `ShellSurfacePressureDomain` | 3 | 통과 |
|
||||||
|
| `ShellSurfacePressureKernel` | 11 | 통과 |
|
||||||
|
| `SurfacePressureAssembly` | 3 | 통과 |
|
||||||
|
| `LinearShellSurfacePressure` | 5 | 통과 |
|
||||||
|
| `NonlinearShellSurfacePressure` | 10 | 통과 |
|
||||||
|
| `ShellSurfacePressureApplication` | 3 | 통과 |
|
||||||
|
| `ShellSurfacePressureReference` | 9 | 통과 |
|
||||||
|
| 선택 합계 | 64 | 64 passed, 0 failed |
|
||||||
|
|
||||||
|
선택된 test 중 skip, zero-discovery, failure는 없다.
|
||||||
|
|
||||||
|
## 경고와 runtime closure
|
||||||
|
|
||||||
|
configure/build 출력에는 compiler/linker warning이 없다. `CMAKE_HAVE_LIBC_PTHREAD`
|
||||||
|
probe의 실패 표시는 Windows configure probe 결과일 뿐 `/W4 /WX` warning이 아니다.
|
||||||
|
|
||||||
|
| 실행 파일 directory | staged DLL |
|
||||||
|
| --- | --- |
|
||||||
|
| `.harness/build/src/fesa/Debug` | `hdf5.dll`, `libiomp5md.dll`, `libmmd.dll`, `mkl_core.3.dll`, `mkl_def.3.dll`, `mkl_intel_thread.3.dll`, `tbb12_debug.dll` |
|
||||||
|
| `.harness/build/tests/Debug` | `hdf5.dll`, `libiomp5md.dll`, `libmmd.dll`, `mkl_core.3.dll`, `mkl_def.3.dll`, `mkl_intel_thread.3.dll`, `tbb12_debug.dll` |
|
||||||
|
|
||||||
|
test discovery/execution뿐 아니라 copied nonlinear input을 CLI로 실제 완료했으므로,
|
||||||
|
MKL/TBB/HDF5 runtime staging도 실행으로 확인됐다.
|
||||||
|
|
||||||
|
## Stop 소유권, 분류, 변경 없음
|
||||||
|
|
||||||
|
`.codex/hooks.json`의 Stop은 `scripts/hooks/stop_validation.py`에 연결되어 있다.
|
||||||
|
이 훅이 agent turn 종료 시 단 한 번의 targetless whole-project MSVC x64 Debug build와
|
||||||
|
unfiltered CTest를 소유한다. 이 Step은 hook entry point를 수동 호출하거나 중복 full
|
||||||
|
verification을 실행하지 않았다.
|
||||||
|
|
||||||
|
- agent-owned classification: `passed`
|
||||||
|
- 실패 classification: 없음 (`configure`, `compile`, `link`, `test`,
|
||||||
|
`reference-comparison`, `artifact`, `environment`, `regression` 모두 없음)
|
||||||
|
- automatic Stop disposition: turn 종료 때 실행될 authoritative whole-project evidence;
|
||||||
|
이 보고서에는 실행 전 결과를 꾸며 쓰지 않는다.
|
||||||
|
- Step 7은 source/header/test/CMake/Harness/tolerance/upstream contract/reference artifact를
|
||||||
|
변경하지 않았고, 세 Gate 6 보고서 및 허용된 Step 7 status/summary만 변경한다.
|
||||||
|
|
||||||
|
physics evaluation과 release readiness는 이 보고서 범위 밖이다.
|
||||||
@@ -0,0 +1,116 @@
|
|||||||
|
# Shell Surface Pressure Load — 구현 보고서
|
||||||
|
|
||||||
|
## 메타데이터와 판정
|
||||||
|
|
||||||
|
- feature_id: `shell-surface-pressure-load`
|
||||||
|
- implementation gate: Gate 6
|
||||||
|
- owner: `implementation-agent` (Step 7 evidence/report)
|
||||||
|
- 판정: `pass-for-physics-evaluation` 권고
|
||||||
|
|
||||||
|
이 Step은 Steps 1–6에서 구현된 surface pressure 기능을 수정하지 않고, 그
|
||||||
|
TDD 이력과 fresh MSVC focused 검증 및 FESA-only reference comparison을 감사해
|
||||||
|
Gate 6 산출물을 완성했다. Physics Gate 7과 release readiness는 판정하지 않는다.
|
||||||
|
|
||||||
|
## Step 7 RED 사전검사
|
||||||
|
|
||||||
|
시작 시 `implementation-report.md`, `build-test.md`,
|
||||||
|
`reference-comparison.md`에 이번 Gate의 fresh passing evidence가 없었다. 이는
|
||||||
|
요구된 evidence-state RED다. 이어서 Steps 1–6의 phase summary, 실행 기록 및
|
||||||
|
`corrections.md`를 읽어 production/test/CMake 변경마다 아래의 test-first RED와
|
||||||
|
후속 GREEN 증거가 있음을 확인했다. 증거 누락(`evidence-gap`)은 없다.
|
||||||
|
|
||||||
|
| Step | test-first RED 또는 관측 실패 | 최소 GREEN / VERIFY 증거 |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| 1 | pressure semantic mapping 부재를 겨냥한 parser/domain RED | parser/domain focused 36/36, full CTest 310/310 |
|
||||||
|
| 2 | invalid pressure input 18 tests 중 7 expected failures | hardened input GREEN 18/18, legacy 24/24, full CTest 321/321 |
|
||||||
|
| 3 | `surface_pressure_evaluator.h` 누락 C1083 | kernel 11/11, MITC4 regression 7/7 |
|
||||||
|
| 4 | surface pressure assembler header/API 부재 | pressure assembly 10/10, regression 43/43, discovery 342 |
|
||||||
|
| 5 | pressure가 외력에 반영되지 않는 assertion RED | nonlinear/HDF5/tangent/reference focused 23/23 |
|
||||||
|
| 6 | pressure reference registry/contract 부재 | pressure comparison 9/9, reference suite 14/14, discovery 362 |
|
||||||
|
|
||||||
|
Step 1/2의 outer Harness timeout은 `corrections.md`가 기록한 Stop/full CTest
|
||||||
|
중복 실행의 환경적 시간 초과이며, product RED/GREEN 증거 누락으로 분류하지
|
||||||
|
않았다.
|
||||||
|
|
||||||
|
## 구현 범위와 변경 인터페이스
|
||||||
|
|
||||||
|
Steps 1–6에서 이미 완료된 기능은 다음의 하나의 입력-해석-결과 경로다.
|
||||||
|
|
||||||
|
1. `*SURFACE, TYPE=ELEMENT`와 additive `*DSLOAD, P`를 immutable Domain/Step
|
||||||
|
pressure facet으로 map하고 stable facet identity와 source order를 보존한다.
|
||||||
|
2. target, face, pressure, duplicate/conflict, finite 값과 shell surface 방향을
|
||||||
|
fail-closed diagnostic으로 검증한다.
|
||||||
|
3. 4-node MITC4 facet의 reference/current configuration pressure force를 평가하며,
|
||||||
|
follower external tangent를 exact contribution으로 제공한다.
|
||||||
|
4. linear path에서는 reference-configuration pressure force만 deterministic full-space
|
||||||
|
load assembly에 더하고, nonlinear full Newton path에서는 current configuration
|
||||||
|
force와 external tangent를 trial assembly에 포함한다.
|
||||||
|
5. schema-0/1, no-pressure behaviour, CLI lexical-sibling output 및 existing B33/MITC4
|
||||||
|
contracts를 확장하거나 변경하지 않는다.
|
||||||
|
|
||||||
|
Step 7은 production/header/test/CMake/Harness/tolerance/reference artifact를 변경하지
|
||||||
|
않았다. 이 Step의 허용된 변경은 세 Gate 6 보고서와 phase index의 Step 7
|
||||||
|
`status`/one-line `summary`뿐이다.
|
||||||
|
|
||||||
|
## 요구조건 커버리지
|
||||||
|
|
||||||
|
아래 매핑은 승인 requirements의 24개 ID 전체가 orphan 없이 Steps 1–6의 구현과
|
||||||
|
passing evidence에 연결됨을 보인다. 상세 command, count 및 artifact evidence는
|
||||||
|
`build-test.md`와 `reference-comparison.md`에 있다.
|
||||||
|
|
||||||
|
| 요구조건 | 구현 Step | 검증 증거 |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-001` | 1 | `ShellSurfacePressureInput` |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-002` | 1 | `ShellSurfacePressureDomain` |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-003` | 1, 4 | `ShellSurfacePressureInput`, `SurfacePressureAssembly` |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-004` | 2 | `ShellSurfacePressureInput` invalid-target cases |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-005` | 2 | duplicate/conflict input cases |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-006` | 3 | `ShellSurfacePressureKernel` |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-007` | 3 | reference/current pressure force cases |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-008` | 3, 5 | follower tangent kernel/nonlinear cases |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-009` | 4 | `SurfacePressureAssembly` deterministic order |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-010` | 4 | `LinearShellSurfacePressure` |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-011` | 4 | linear reaction/schema preservation |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-012` | 5 | `NonlinearShellSurfacePressure` |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-013` | 5 | exact external tangent/full Newton cases |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-014` | 5 | accepted free residual/global balance test |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-015` | 1–5 | parser-to-analysis integration suites |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-016` | 4, 5 | no-pressure schema-0/1 regression |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-017` | 5 | schema-1 accepted-frame/HDF5 cases |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-018` | 2, 5 | diagnostics and failure-atomicity cases |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-019` | 6, 7 | `ShellSurfacePressureReference` 9/9 |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-020` | 6, 7 | exact artifact SHA/size and precheck evidence |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-021` | 6, 7 | U blocking / UR warning-only projection |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-022` | 6, 7 | common family-scale row/RMS comparison |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-023` | 4–7 | schema/CLI/no-pressure regression suites |
|
||||||
|
| `FESA-REQ-SHELL-PRESSURE-024` | 1–7 | recorded RED/GREEN, fresh MSVC focused gates |
|
||||||
|
|
||||||
|
커버된 요구조건: 24/24. Orphan count: 0.
|
||||||
|
|
||||||
|
## Step 7 GREEN 및 VERIFY
|
||||||
|
|
||||||
|
`.harness/config.json`이 없었으므로 approved direct CMake command를 사용했다.
|
||||||
|
Visual Studio 18 2026, x64, Debug, MSVC 19.51.36252.0에서 test target을 build했고,
|
||||||
|
feature focused CTest는 64/64, generated schema-1 HDF5를 다시 소비한 pressure
|
||||||
|
reference suite는 9/9로 통과했다. Configure/build에 새 `/W4 /WX` warning이 없고,
|
||||||
|
CLI 및 test directory에 HDF5/MKL/TBB runtime DLL closure도 존재했다.
|
||||||
|
|
||||||
|
Required input의 byte-identical build copy에 FESA CLI만 실행했다. 결과는 unique
|
||||||
|
factor-one accepted frame을 가진 schema-1 HDF5이며, U 2,187 blocking rows와 UR
|
||||||
|
2,187 warning-only rows 모두 common tolerance row/RMS gate를 통과했다. Input/CSV
|
||||||
|
artifact의 pre/post SHA-256, size 및 timestamp는 동일했다.
|
||||||
|
|
||||||
|
Agent는 targetless whole-project build나 unfiltered full CTest를 실행하지 않았다.
|
||||||
|
그 검증은 `.codex/hooks.json`에 등록된 automatic Stop의 단 한 번의 authoritative
|
||||||
|
MSVC x64 Debug validation 소유권이다. Stop 결과를 이 보고서에 미리 주장하지 않는다.
|
||||||
|
|
||||||
|
## 한계와 handoff
|
||||||
|
|
||||||
|
- FESA가 Abaqus 내부 formulation, integration, stabilization 또는 result recovery와
|
||||||
|
동등하다는 주장은 하지 않는다.
|
||||||
|
- reaction CSV는 review-only, stress CSV는 external pressure reference comparison에서
|
||||||
|
제외된다. 이는 internal equilibrium/free-residual evidence의 대체물이 아니다.
|
||||||
|
- UR은 contract상 warning-only이며 이번 실행에서는 numerical warning도 발생하지 않았다.
|
||||||
|
- Step 7은 Gate 6 evidence만 완료한다. Coordinator는 이를 근거로
|
||||||
|
`pass-for-physics-evaluation` handoff만 수행할 수 있으며, physics/release decision은
|
||||||
|
후속 owner의 범위다.
|
||||||
@@ -0,0 +1,122 @@
|
|||||||
|
# Shell Surface Pressure Load — Reference Comparison 보고서
|
||||||
|
|
||||||
|
## 메타데이터와 Gate 6 판정
|
||||||
|
|
||||||
|
- feature_id: `shell-surface-pressure-load`
|
||||||
|
- case_id: `shellnl-meshfine-pressure-s4-follower`
|
||||||
|
- owner_agent: `implementation-agent`
|
||||||
|
- FESA authoritative output: schema-1
|
||||||
|
`.harness/build/reference/shell-surface-pressure-load/shellNL-meshfine-pressure_results.h5`
|
||||||
|
- 실행 모드: 요구 input의 byte-identical copy에 대한 FESA-only 실행
|
||||||
|
- tolerance authority: 변경하지 않은 `docs/TOLERANCE.md`
|
||||||
|
- deterministic classification: `passed`
|
||||||
|
- blocking verdict: pass
|
||||||
|
- warning-only verdict: pass (UR warning 없음)
|
||||||
|
|
||||||
|
이 문서는 Coordinator에 `pass-for-physics-evaluation`만 권고한다. Abaqus 내부 알고리즘
|
||||||
|
동등성, Physics Gate 7 또는 release readiness를 주장하지 않는다.
|
||||||
|
|
||||||
|
## ARTIFACT CHECK와 불변성
|
||||||
|
|
||||||
|
아래 source artifact는 FESA-only 실행 전후에 size, SHA-256 및 기록 timestamp가 모두
|
||||||
|
동일했다. Reference artifact의 rename, rewrite, 보정 또는 생성은 없었다.
|
||||||
|
|
||||||
|
| 용도 | 정확한 source path | bytes | SHA-256 |
|
||||||
|
| --- | --- | ---: | --- |
|
||||||
|
| required input | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure.inp` | 56,665 | `53718ccc9b41c23fcc1b509a51d66f1347e87aca43a74f1d6cec4d2085f4b90e` |
|
||||||
|
| required displacement CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure displacements.csv` | 111,182 | `2fe53f98eac9f04779100721c3edf8049eb1dbfe733ebcbd819aeeed03b81198` |
|
||||||
|
| review-only reaction CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure reactions.csv` | 108,923 | `a2347f4e88e4b73c75abe7c23e96bcc696c16c1975e2440b3ad9bf7ecda5f2b6` |
|
||||||
|
| excluded stress CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure stresses.csv` | 1,036,876 | `bc06f3324cc5d6655ded2939b3e1cb9d55a0359fa0d272a6958399464218a128` |
|
||||||
|
|
||||||
|
유일하게 copy한 source artifact는 다음 exact input이다.
|
||||||
|
|
||||||
|
```text
|
||||||
|
.harness/build/reference/shell-surface-pressure-load/
|
||||||
|
shellNL-meshfine-pressure.inp
|
||||||
|
```
|
||||||
|
|
||||||
|
copy의 size/SHA-256은 required input과 정확히 일치한다. Source history와 실행 command를
|
||||||
|
감사했으며 `abaqus.exe`, `abaqus.bat`, Nastran 또는 다른 reference solver invocation은
|
||||||
|
없었다. source/path text의 `abaqus` parser 명칭은 실행 증거가 아니다.
|
||||||
|
|
||||||
|
## FESA 생성물과 frame 선택
|
||||||
|
|
||||||
|
| 생성물 | bytes | SHA-256 | 검증 증거 |
|
||||||
|
| --- | ---: | --- | --- |
|
||||||
|
| copied input | 56,665 | `53718ccc9b41c23fcc1b509a51d66f1347e87aca43a74f1d6cec4d2085f4b90e` | source와 exact match |
|
||||||
|
| `shellNL-meshfine-pressure_results.h5` | 10,547,430 | `74f35e3e59edd05460733b1d6367994c7f4a1e847b366f2efad6fbecc03796f3` | atomic publish된 schema-1 HDF5 |
|
||||||
|
| `shellNL-meshfine-pressure_log.txt` | 40,786 | `8555ff365dcf1f066813d0cce6440c3d56c9840baf8246696daa7b2e7b0061a1` | factor-one increment accepted |
|
||||||
|
|
||||||
|
`Step-1`에는 load factor 0.1부터 1.0까지 accepted frame 10개가 있다. factor-one
|
||||||
|
entry는 frame index 9, increment 10, `load_factor=1.0`, `is_factor_one=1`의 정확히
|
||||||
|
하나이며, selected dataset은
|
||||||
|
`/steps/Step-1/frames/9/nodal/displacement`다.
|
||||||
|
|
||||||
|
## COMPARE 사전검사와 row projection
|
||||||
|
|
||||||
|
비교기는 `/model/nodes`와 factor-one final nodal displacement를 사용한다. Key는 row
|
||||||
|
position 또는 internal index가 아니라 `(Step-1 factor-one accepted frame, instance,
|
||||||
|
source node label, component)`다.
|
||||||
|
|
||||||
|
| 사전검사 | 결과 |
|
||||||
|
| --- | --- |
|
||||||
|
| exact source artifact를 읽을 수 있음 | pass |
|
||||||
|
| schema / Step / accepted factor-one frame | pass: schema 1, `Step-1`, factor-one 1개 |
|
||||||
|
| HDF5 `/model/nodes` inventory | pass: finite/unique `(Part-1-1, label)` 729개 |
|
||||||
|
| displacement CSV wide-row inventory | pass: finite/unique `(PART-1-1, label)` 729개 |
|
||||||
|
| identity normalization | pass: comparison key에서만 instance ASCII case normalize; stored identity 보존 |
|
||||||
|
| component projection | pass: U1/U2/U3 -> UX/UY/UZ, UR1/UR2/UR3 -> URX/URY/URZ |
|
||||||
|
| U logical rows | pass: 정확히 2,187 |
|
||||||
|
| UR logical rows | pass: 정확히 2,187 |
|
||||||
|
| missing / extra / duplicate / nonfinite | 없음; tolerance 전에 fail-closed precheck |
|
||||||
|
| reaction/stress disposition | reaction review-only, stress excluded; comparison family를 생성하지 않음 |
|
||||||
|
|
||||||
|
생성 HDF5가 존재한 뒤 `ShellSurfacePressureReference`를 다시 실행하여 9/9가 통과했다.
|
||||||
|
이는 exact artifact audit, schema/frame selection, cardinality, identity match,
|
||||||
|
precheck-before-tolerance, family policy와 deterministic repeat comparison을 확인한다.
|
||||||
|
|
||||||
|
## 공통 tolerance와 per-family 결정
|
||||||
|
|
||||||
|
Reference만으로 family scale과 near-zero band를 계산했다.
|
||||||
|
|
||||||
|
\[
|
||||||
|
S=\max |r_i|,\qquad B=0.01S.
|
||||||
|
\]
|
||||||
|
|
||||||
|
`abs(reference) <= B`이면 `abs(fesa-reference) <= B`, 나머지는 relative error
|
||||||
|
`<= 0.05`를 적용하고 family relative RMS도 `<= 0.01`이어야 한다. 별도의 absolute
|
||||||
|
gate, `max(1,S)`, clamp, average, row omission은 사용하지 않았다.
|
||||||
|
|
||||||
|
| family | 영향 | components | rows | S | B | near-zero pass | relative pass | max abs. error / row | max applicable relative error / row | relative RMS | verdict |
|
||||||
|
| --- | --- | --- | ---: | ---: | ---: | ---: | ---: | --- | --- | ---: | --- |
|
||||||
|
| `pressure_nodal_translation_blocking` | blocking | U1, U2, U3 | 2,187 | `5.51545573e-3` | `5.51545573e-5` | 1,582/1,582 | 605/605 | `9.96028671352255e-7`, `(Part-1-1, 2, U3)` | `3.12464512172274e-3`, `(Part-1-1, 419, U3)` | `5.18831997081359e-5` | pass |
|
||||||
|
| `pressure_nodal_rotation_warning` | warning-only | UR1, UR2, UR3 | 2,187 | `1.64645887e-3` | `1.64645887e-5` | 995/995 | 1,192/1,192 | `3.29623883250936e-6`, `(Part-1-1, 250, UR2)` | `3.81566175195545e-2`, `(Part-1-1, 286, UR2)` | `3.10406152731217e-4` | pass |
|
||||||
|
|
||||||
|
결정적인 4,374개의 모든 row decision이 통과했다. max absolute-error row와 max
|
||||||
|
applicable-relative-error row는 별도로 기록하며 서로 다른 source row일 수 있다.
|
||||||
|
두 family RMS도 모두 `0.01` 미만이다. U는 blocking으로 pass했고, UR은 warning-only
|
||||||
|
contract를 유지하며 이번 결과는 pass여서 deterministic warning도 없다.
|
||||||
|
|
||||||
|
## 내부 blocking evidence
|
||||||
|
|
||||||
|
최종 nonlinear log는 factor-one increment 10 / iteration 3에서
|
||||||
|
`combined_pass=1`, `transition=accepted`를 기록했다. 이 internal evidence는 external
|
||||||
|
CSV tolerance와 독립적이며 reaction CSV로 대체하지 않는다.
|
||||||
|
|
||||||
|
| internal family | rows | numerator / stored evidence | scale 또는 branch | metric / gate | 결과 |
|
||||||
|
| --- | ---: | --- | --- | --- | --- |
|
||||||
|
| accepted free translation-force residual | free DOF 1,875 | infinity norm `9.06582420157065e-6` | external/internal scale `1.47929199940215e5` | `6.12848863188238e-11 <= 1e-2` | pass |
|
||||||
|
| accepted free rotation-moment residual | free DOF 1,875 | infinity norm `1.3758908607997e-6` | exact-zero external-scale branch | `1.3758908607997e-6 <= 1e-3` | pass |
|
||||||
|
| global force balance | 3 | `[-5.04652281563267e-6, -3.33100482574622e-6, -3.02493572235107e-6]` | applied + masked constrained reaction, current arm | approved normalized gate `<=1e-8`, focused nonlinear test가 실행 | pass |
|
||||||
|
| global moment balance | 3 | `[1.21226185001433e-6, 7.79749825596809e-7, -1.57924777074714e-5]` | spatial physical moment, current arm | approved normalized gate `<=1e-8`, 같은 focused test가 실행 | pass |
|
||||||
|
|
||||||
|
## 분류, no-change assertion, open issues
|
||||||
|
|
||||||
|
- final classification: `passed`; `implementation`, `test`, `configure`, `compile`,
|
||||||
|
`link`, `reference-comparison`, `infrastructure`, `environment`, `artifact`,
|
||||||
|
`regression`, `evidence-gap`, `upstream-contract` failure가 없다.
|
||||||
|
- source artifact/CSV value/name, tolerance policy, upstream feature docs,
|
||||||
|
source/test/CMake code를 이 Step에서 변경하지 않았다.
|
||||||
|
- generated input/HDF5/log는 `.harness/build/` 아래에만 존재한다.
|
||||||
|
- Gate 6 blocking open issue는 없다. physics plausibility와 release readiness는
|
||||||
|
의도적으로 이 Step의 판정 범위 밖이다.
|
||||||
Reference in New Issue
Block a user