5.3 KiB
5.3 KiB
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 CSVRF-RF1/RF-RF2/RF-RF3/RM-RM1/RM-RM2/RM-RM3, section-resultant CSVSF-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 floor1e-9, force/moment floor1e-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
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/
$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
검증 절차
- Artifact check를 comparison보다 먼저 완료한다.
- B33ReferenceComparison을 fresh 실행하고 comparison JSON과 HDF5를 직접 확인한다.
- 모든 row/metric/tolerance가 통과한 경우에만 report와 Step 26을 pass/completed로 갱신한다.
- 실패는 정해진 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가 담당한다.