Files
FESADev/docs/shell-surface-pressure-load/verification.md
T
2026-10-04 03:32:59 +09:00

340 lines
26 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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--shell-surface-pressure-load--빌드테스트-보고서"></a>
## Shell Surface Pressure Load — 빌드·테스트 보고서
<a id="build-test--메타데이터"></a>
### 메타데이터
- feature_id: `shell-surface-pressure-load`
- 상태: 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.
<a id="build-test--red-사전검사와-이전-tdd-증거"></a>
### 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`은 없다.
<a id="build-test--agent-소유-명령-기록"></a>
### 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 확인. |
<a id="build-test--발견focused-결과"></a>
### 발견·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는 없다.
<a id="build-test--경고와-runtime-closure"></a>
### 경고와 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도 실행으로 확인됐다.
<a id="build-test--stop-소유권-분류-변경-없음"></a>
### 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: Harness phase completed locally at
`2026-09-01 17:43:57`. The single automatic Stop whole-project MSVC x64
Debug build passed. It ran `cmake --build .harness/build --config Debug`,
then `ctest --test-dir .harness/build -C Debug --show-only=json-v1` with
nonzero discovery, and `ctest --test-dir .harness/build -C Debug
--output-on-failure`; the final full CTest result was `362/362 PASS`,
`0 failed`.
- automatic Stop evidence sources:
`phases/shell-surface-pressure-load/step7-output.json`,
`.harness/build/Testing/Temporary/LastTest.log`, and phase/commit metadata
`2c91462`, `bf2339c`, `c4d1e2a`. Classification: `pass`; failed tests:
none. Duration: not separately preserved in committed report; completion
timestamp and LastTest log are authoritative.
- Step 7은 source/header/test/CMake/Harness/tolerance/upstream contract/reference artifact를
변경하지 않았고, 세 Gate 6 보고서 및 허용된 Step 7 status/summary만 변경한다.
physics evaluation과 release readiness는 이 보고서 범위 밖이다.
<a id="reference-comparison"></a>
<a id="reference-comparison--shell-surface-pressure-load--reference-comparison-보고서"></a>
## Shell Surface Pressure Load — Reference Comparison 보고서
<a id="reference-comparison--메타데이터와-gate-6-판정"></a>
### 메타데이터와 Gate 6 판정
- feature_id: `shell-surface-pressure-load`
- case_id: `shellnl-meshfine-pressure-s4-follower`
- 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를 주장하지 않는다.
<a id="reference-comparison--artifact-check와-불변성"></a>
### 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 명칭은 실행 증거가 아니다.
<a id="reference-comparison--fesa-생성물과-frame-선택"></a>
### 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`다.
<a id="reference-comparison--compare-사전검사와-row-projection"></a>
### 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을 확인한다.
<a id="reference-comparison--공통-tolerance와-per-family-결정"></a>
### 공통 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도 없다.
<a id="reference-comparison--내부-blocking-evidence"></a>
### 내부 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 |
<a id="physics-evaluation"></a>
<a id="physics-evaluation--shell-surface-pressure-load-물리-평가"></a>
## Shell Surface Pressure Load 물리 평가
<a id="physics-evaluation--1-metadata"></a>
### 1. Metadata
- feature_id: `shell-surface-pressure-load`
- source reference comparison report: `docs/shell-surface-pressure-load/verification.md`
- source reference model: `docs/shell-surface-pressure-load/reference-model.md`
- status: `pass-for-release-agent`
- date: `2026-09-01`
- evaluated commit: `1eb4dce885175b78b8229b095f14cac102ea93df`
이 판정은 승인된 물리 기대와 기존 Gate 6 evidence에 한정한다. Abaqus 내부 formulation,
integration, stabilization 또는 result recovery와의 동등성을 주장하지 않으며 release
readiness를 승인하지 않는다.
<a id="physics-evaluation--2-input-evidence"></a>
### 2. Input Evidence
<a id="physics-evaluation--21-gate와-artifact"></a>
#### 2.1 Gate와 artifact
`reference-comparison.md`는 명시적으로 `pass-for-physics-evaluation` handoff를 권고하고,
blocking `U1/U2/U3` 2,187/2,187 rows와 warning-only `UR1/UR2/UR3` 2,187/2,187 rows가
모두 통과했음을 기록한다. Physics Gate는 그 tolerance 판정을 재승인하지 않고, 통과한
비교 결과를 물리 plausibility의 선행 조건으로만 사용했다.
| evidence | exact path / identity | read-only 확인 |
| --- | --- | --- |
| solver HDF5 | `.harness/build/reference/shell-surface-pressure-load/shellNL-meshfine-pressure_results.h5` | schema `1`, 10 accepted frames, unique factor-one frame `9` / increment `10`; SHA-256 `74f35e3e59edd05460733b1d6367994c7f4a1e847b366f2efad6fbecc03796f3` |
| nonlinear log | `.harness/build/reference/shell-surface-pressure-load/shellNL-meshfine-pressure_log.txt` | factor-one iteration `3`: `combined_pass=1`, `transition=accepted`; SHA-256 `8555ff365dcf1f066813d0cce6440c3d56c9840baf8246696daa7b2e7b0061a1` |
| required input | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure.inp` | 56,665 bytes, SHA-256 `53718ccc9b41c23fcc1b509a51d66f1347e87aca43a74f1d6cec4d2085f4b90e` |
| required Abaqus CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure displacements.csv` | 729 finite wide rows; SHA-256 `2fe53f98eac9f04779100721c3edf8049eb1dbfe733ebcbd819aeeed03b81198` |
| optional Abaqus CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure reactions.csv` | `review-only`; SHA-256 `a2347f4e88e4b73c75abe7c23e96bcc696c16c1975e2440b3ad9bf7ecda5f2b6` |
| excluded Abaqus CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure stresses.csv` | `excluded`; SHA-256 `bc06f3324cc5d6655ded2939b3e1cb9d55a0359fa0d272a6958399464218a128` |
| test record | `.harness/build/Testing/Temporary/LastTest.log` | existing automatic Stop evidence에서 full CTest `362/362 PASS`; 관련 physics test의 개별 pass 기록 확인 |
| optional FESA debug CSV views | 없음 | 요구되거나 생성된 debug CSV가 없으며 official output으로 사용하지 않음 |
확인한 authoritative quantities는 factor-one global nodal displacement, generalized external/
internal force, generalized residual, constrained reaction, global equilibrium, physical strain
energy, 기존 MITC4 generalized strain/section resultant/stress다. Model purpose는 729-node,
676-element `S4` square shell의 `SPOS`, positive `P=1e6`, `NLGEOM=YES` current-surface follower
pressure response를 end-to-end로 확인하고, stored case가 직접 포함하지 않는 sign, S4R,
linear, objectivity와 tangent 경계를 승인 internal tests로 보완하는 것이다.
<a id="physics-evaluation--3-physics-checks"></a>
### 3. Physics Checks
| physics check | status | evidence와 판정 |
| --- | --- | --- |
| global equilibrium | `pass` | Factor-one applied force sum은 `[8.626e-12, -7.311e-12, -1.0000000000000016e8]`이고 constrained reaction force sum은 `[-5.047e-6, -3.331e-6, 9.999999999999714e7]`이다. HDF5 stored balance를 approved current-arm scales로 다시 normalize하면 force `6.758e-14`, moment `3.725e-14`로 둘 다 `<=1e-8`이다. |
| reaction consistency | `pass` | Constrained DOF에서 `/nodal/reaction`과 `generalized_residual`은 exact 일치했다. Pressure resultant의 `-Z` `1.0e8`에 대해 masked constrained reaction은 `+Z` `9.999999999999714e7`이며, tiny `X/Y`와 moment remainder는 위 global balance gate 안이다. |
| displacement direction | `pass` | Reference connectivity의 `SPOS` vector area는 `+Z`, positive pressure resultant는 `-Z`다. Factor-one HDF5의 729개 `UZ`는 모두 nonpositive이며 625개 free nodes는 negative, 104개 constrained boundary nodes는 exact zero다. Center node의 `UZ=-5.514459701328648e-3`로 load 방향과 deformation mode가 일치한다. |
| pressure sign, resultant, and moment | `pass` | Current configuration의 quadrature vector-area oracle은 expected force `[-1.723e-12, 2.450e-11, -1.0000000000000025e8]`를 주며 HDF5 applied resultant와의 normalized error는 `8.94e-16`이다. Current-arm applied moment oracle error는 승인 `M_Sigma` 기준 `1.32e-16`이다. Existing `ShellSurfacePressureKernel.PartitionsUnityAndIntegratesPlanarResultantAndMoment`와 `ReversesExactlyForSposSnegAndNegativeMagnitude`도 full CTest 기록에서 pass했다. |
| symmetry and expected zero | `pass` | Feature-blocking exact-zero contract인 pressure generalized external rotational entries는 factor-one HDF5에서 exact zero다. Zero pressure/factor geometry validation test도 pass했다. Stored square patch의 mirror symmetry는 보조 sanity로만 확인했으며 `UX/UY/UZ` mirror mismatch의 최대 절대값은 `1.63e-16`, `1.09e-16`, `8.89e-17` 이하다. 별도 외부 symmetry tolerance를 만들지 않았다. |
| nonlinear follower objectivity and current-area behavior | `pass` | HDF5 resultant는 factor-one current `X+u` vector-area oracle과 위 roundoff 수준으로 일치했다. Current scalar area/reference scalar area ratio는 `1.0000006316335197`로 finite하다. Stored symmetric case만으로 reference/current path를 분리하지 않고, existing tests `UsesCurrentAreaAndNormalForFollowerForce`, `IsTranslationAndRigidRotationObjective`, `IsObjectiveUnderRigidMotionAndTracksCurrentArea`, `MatchesCenteredFiniteDifferenceForForceAndResidualSigns`의 pass evidence로 rigid rotation covariance, `gamma=1.25` area/resultant scaling, follower direction과 external tangent sign을 보완했다. |
| element force balance | `not-separately-applicable` | 이 feature는 pressure-only element force row나 element end-action balance contract를 정의하지 않는다. 대신 HDF5에서 `generalized_internal_force - generalized_external_force - generalized_residual`은 element assembly 이후 nodal full space에서 exact zero이고 global resultant/moment gate가 pass했다. Existing MITC4 section resultants는 finite이며 별도 pressure comparator를 만들지 않았다. |
| stress/strain | `pass-sanity-only` | Factor-one `generalized_strain`, `section_resultant`, `stress`의 component names, units, `shell-local` coordinate system과 `midsurface`/`section-position` location은 `io.md`와 일치하고 모든 값이 finite다. 관측 range는 strain `[-9.842e-4, 1.801e-3]`, section resultant `[-4.595e6, 8.646e6]`, stress `[-1.036e8, 1.039e8]`이다. Feature-specific stress sign/reference expectation은 없고 stress CSV는 `excluded`이므로 그 이상의 pass를 주장하지 않는다. |
| rigid body mode | `pass-no-symptom` | Stored case는 104 boundary nodes의 DOF 1–6을 구속하고 625 interior nodes가 자유다. 모든 accepted frame이 finite하게 수렴했고 factor-one maximum translation은 `5.514e-3`로 10-unit span 대비 `5.514e-4`이며 unbounded translation, near-zero-stiffness 또는 impossible displacement 증상이 없다. Pressure가 support를 제공한다는 주장은 하지 않는다. |
| energy/residual | `pass` | 모든 HDF5 numeric dataset과 required U/UR rows는 finite다. Factor-one free translation residual은 `9.06582420157065e-6 / 1.47929199940215e5 = 6.12849e-11 <=1e-2`; zero-external-scale rotation residual은 `1.3758908607997e-6 <=1e-3`이다. Existing `PHYSICAL_STRAIN_ENERGY=86418.04713575779`는 finite positive 보조 evidence이며 pressure-only energy gate로 사용하지 않았다. HDF5 diagnostics는 result-neutral ignored-keyword warning 4개뿐이고 error/nonfinite diagnostic은 없다. |
| model coverage | `pass` | Stored case의 declared inventory `729 nodes / 676 S4 / SPOS / positive P / NLGEOM=YES`와 unique factor-one frame이 모두 확인됐다. Stored case가 직접 다루지 않는 `S4R`, `SNEG`, negative/zero magnitude, linear reference configuration, exact resultant/moment, current-area objectivity와 tangent는 Numerical Review가 지정한 internal portfolio에서 해당 named tests가 pass했다. 승인 범위 밖의 추가 reference portfolio는 요구하지 않는다. |
<a id="physics-evaluation--4-failure-classification"></a>
### 4. Failure Classification
- failure classification: `none`
- 다음 분류는 발생하지 않았다: `equilibrium-failure`, `reaction-inconsistency`,
`displacement-direction-failure`, `symmetry-failure`, `stress-location-failure`,
`element-force-inconsistency`, `rigid-body-mode-suspected`, `nonfinite-result`,
`model-coverage-gap`, `upstream-contract`, `environment`.
`element force balance`의 `not-separately-applicable`과 stress의 `pass-sanity-only`는 upstream
contract가 의도적으로 pressure-only element/stress acceptance family를 만들지 않은 데 따른
범위 표시이며 failure 또는 evidence gap이 아니다.
<a id="physics-evaluation--5-evaluation-verdict"></a>
### 5. Evaluation Verdict
**Verdict: `pass-for-release-agent`.**
문서화된 pressure 방향/부호, resultant/moment, reaction/equilibrium, exact-zero와 보조 symmetry,
nonlinear follower objectivity/current-area, residual/nonfinite 및 declared model coverage가 모두
물리적으로 일관된다. Release Agent가 release readiness를 별도로 audit할 수 있다. 이 verdict는
release approval, publish 권한 또는 reference tolerance의 재승인이 아니다.
<a id="physics-evaluation--6-handoff-recommendation"></a>
### 6. Handoff Recommendation
- handoff target: `Release Agent`
- route: 항상 `Coordinator Agent`를 통해 전달
- recommendation: Gate 8은 requirements-to-physics traceability, known limitations와 release
evidence를 독립 audit한다. Physics Evaluation Agent는 Gate 8을 시작하거나 승인하지 않는다.
<a id="physics-evaluation--8-open-issues"></a>
### 8. Open Issues
- missing physical expectations: 없음.
- incomplete model coverage: 없음. Stored-case 한계는 승인 internal tests로 보완되며 추가
reference case는 계약상 요구되지 않는다.
- contradictory sign conventions: 없음.
- unavailable energy/residual evidence: 없음. Existing energy와 residual HDF5/log evidence를
사용했으며 새 pressure-only energy quantity는 요구되지 않는다.
- blockers: 없음.