feat(shell-surface-pressure-load): step 7 - verify-and-report-pressure-feature
This commit is contained in:
@@ -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