Files
FESADev/phases/linear-static-3d-euler-beam/step26.md
T
2026-08-09 01:35:44 +09:00

105 lines
5.3 KiB
Markdown

# Step 26: Abaqus B33 Reference Verification
## 담당 역할과 필수 스킬
- 담당 역할: `reference-verification-agent`
- 필수 스킬: `fesa-reference-comparison`
- `ARTIFACT CHECK -> COMPARE -> CLASSIFY -> REPORT` 순서를 지켜라.
## 읽어야 할 파일
- `/AGENTS.md`
- `/docs/ARCHITECTURE.md`
- `/docs/ADR.md`
- `/docs/reference-verifications/README.md`
- `/docs/build-test-reports/linear-static-3d-euler-beam.md`
- `/docs/reference-models/linear-static-3d-euler-beam-reference-models.md`
- `/docs/io-definitions/linear-static-3d-euler-beam-io.md`
- `/docs/requirements/linear-static-3d-euler-beam.md`
- `/docs/implementation-plans/linear-static-3d-euler-beam-implementation-report.md`
- `/reference/cantilever beam/cantilever beam.inp`
- `/reference/cantilever beam/cantilever beam displacements.csv`
- `/reference/cantilever beam/cantilever beam reactions.csv`
- `/reference/cantilever beam/cantilever beam elemental forces.csv`
- Step 24가 생성한 reference comparison test/command 계약과 build-directory result/metrics
## 작업
Build/Test report status가 `pass-for-reference-verification`인지 먼저 확인한다. 통과했다면
승인 input으로 solver output을 재생성하고, test-only comparison utility가 기록한 raw
normalized rows/metrics를 독립 검토해
`docs/reference-verifications/linear-static-3d-euler-beam-reference-verification.md`를 작성하라.
Artifact check:
- exact legacy 네 파일 존재, input `TYPE=B33`, expected CAE CSV headers, unique row keys,
finite values를 검사한다.
- 이 bundle은 승인된 예외이므로 `metadata.json`, `README.md`, stress CSV 부재만으로
차단하지 않는다. Contract에서 provenance/units/schema/stress N/A를 확인한다.
- generated HDF5 schema/version/units/coordinate/step-frame/source identity를 검사한다.
Comparison:
- displacement CSV `U-U1/U-U2/U-U3/UR-UR1/UR-UR2/UR-UR3`, reaction CSV
`RF-RF1/RF-RF2/RF-RF3/RM-RM1/RM-RM2/RM-RM3`, section-resultant CSV
`SF-SF1/SM-SM1/SM-SM2/SM-SM3`을 canonical component로 normalize한 뒤 exact
identity/component mapping으로 비교한다.
- CSV increment 1/time 1.0을 `(Step-1, frame 0)`으로 normalize한다.
- interior endpoint consistency를 먼저 검사하고 평균으로 숨기지 않는다.
- 같은 model/step/frame/quantity/component의 read-only reference rows에서만
`reference_scale=max(abs(reference_value_i))`를 계산한다.
- 모든 row에 `absolute_floor + 1e-6*reference_scale`을 적용한다. SI displacement/rotation
floor `1e-9`, force/moment floor `1e-3`; scale zero면 floor만 적용한다.
- Missing/extra/nonfinite/schema/identity mismatch는 tolerance 전에 fail한다.
- max absolute error, component-scale normalized error, RMS, norm, worst row/component를 기록한다.
- Stress reference comparison은 N/A라고 명시하고 HDF5 stress schema/unit test evidence를 연결한다.
모든 비교 통과 시 Metadata status는 `pass-for-physics-evaluation`이다. No-Change Assertion에
source/test/CMake/reference/tolerance가 모두 unchanged임을 기록한다.
## Acceptance Criteria
```powershell
if (-not (Select-String -LiteralPath 'docs/build-test-reports/linear-static-3d-euler-beam.md' `
-SimpleMatch 'status: `pass-for-reference-verification`' -Quiet)) {
throw 'Build/test gate is not passing'
}
ctest --test-dir .harness/build -C Debug -R B33ReferenceComparison -V --output-on-failure
$metricsPath = '.harness/build/reference/cantilever-beam-b33/comparison.json'
if (-not (Test-Path $metricsPath)) { throw 'Missing comparison metrics' }
$metrics = Get-Content -Raw $metricsPath | ConvertFrom-Json
if ($metrics.status -ne 'pass') { throw "Reference comparison failed: $($metrics.status)" }
git diff --exit-code -- reference/
```
```powershell
$path = 'docs/reference-verifications/linear-static-3d-euler-beam-reference-verification.md'
if (-not (Test-Path $path)) { throw "Missing $path" }
$required = @('status: `pass-for-physics-evaluation`', '## Artifact Inventory',
'## Comparison Contract', '## Quantity Results', '## No-Change Assertion',
'cantilever-beam-b33', 'absolute_floor + 1e-6 * reference_scale', 'stress', 'N/A')
foreach ($text in $required) {
if (-not (Select-String -LiteralPath $path -SimpleMatch $text -Quiet)) {
throw "Missing reference verification evidence: $text"
}
}
git diff --check -- $path
```
## 검증 절차
1. Artifact check를 comparison보다 먼저 완료한다.
2. B33ReferenceComparison을 fresh 실행하고 comparison JSON과 HDF5를 직접 확인한다.
3. 모든 row/metric/tolerance가 통과한 경우에만 report와 Step 26을 pass/completed로 갱신한다.
4. 실패는 정해진 classification과 handoff를 report에 기록하고 Step 26을 `error`로 둔다.
사용자/외부 artifact 조치가 필수인 경우만 `blocked`로 둔다.
## 금지사항
- source, tests, CMake, upstream contract를 수정하지 마라. 이유: independent comparison gate다.
- FESA 결과나 reference value로 scale/tolerance를 조정하지 마라. 이유: acceptance를 오염시킨다.
- row를 zero-clamp, 삭제, 평균 처리하지 마라. 이유: mismatch를 숨긴다.
- reference artifact를 생성·수정·rename하지 마라. 이유: read-only baseline이다.
- Abaqus를 실행하지 마라. 이유: 저장된 CSV만 authoritative reference다.
- 직접 commit하지 마라. 이유: Harness executor가 담당한다.