106 lines
5.3 KiB
Markdown
106 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`
|
|
- `/.codex/skills/fesa-cpp-msvc-tdd/SKILL.md`
|
|
- `/docs/linear-static-3d-euler-beam/build-test.md`
|
|
- `/docs/linear-static-3d-euler-beam/reference-model.md`
|
|
- `/docs/linear-static-3d-euler-beam/io.md`
|
|
- `/docs/linear-static-3d-euler-beam/requirements.md`
|
|
- `/docs/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/linear-static-3d-euler-beam/reference-comparison.md`를 작성하라.
|
|
|
|
Artifact check:
|
|
|
|
- exact legacy 네 파일 존재, input `TYPE=B33`, expected CAE CSV headers, unique row keys,
|
|
finite values를 검사한다.
|
|
- `metadata.json` 부재는 프로젝트 전역 정책에 따라 허용한다. 이 bundle의 `README.md`와
|
|
stress CSV 부재는 승인된 legacy 예외이므로 차단하지 않는다. 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/linear-static-3d-euler-beam/build-test.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.passed -ne $true) { throw "Reference comparison failed: passed=$($metrics.passed)" }
|
|
git diff --exit-code -- reference/
|
|
```
|
|
|
|
```powershell
|
|
$path = 'docs/linear-static-3d-euler-beam/reference-comparison.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가 담당한다.
|