diff --git a/docs/shell-transient-heat-transfer/ADR.md b/docs/shell-transient-heat-transfer/ADR.md index 3323034..886f5b4 100644 --- a/docs/shell-transient-heat-transfer/ADR.md +++ b/docs/shell-transient-heat-transfer/ADR.md @@ -46,7 +46,7 @@ ## STH-ADR-005: NT11 외부 비교와 독립 물리 검증 -- 상태: Accepted +- 상태: Superseded by STH-ADR-015 (원본 비교의 blocking 분류에 한함) - 결정: 기존 CSV의 Step-1, t=37, NT11을 필수 비교하고 나머지는 해석해·수지·수렴으로 검증한다. - 이유: Reference의 실제 coverage는 단일 시점의 아랫면 온도 729행이다. - 영향: 공통 TOLERANCE의 row/family 기준을 유지한다. 추가 Abaqus CSV나 Abaqus 실행은 필수가 아니다. @@ -138,3 +138,20 @@ 전체 baseline을 먼저 재현하고 완료 시 전체 검사를 다시 실행한다. 재현된 무관한 HHT temporal 실패만 별도 미해결로 둘 수 있으며 새 실패·악화를 허용하지 않는다. 이를 전체 CTest green으로 보고하지 않는다. 열해석 필수 검증 실패는 면제되지 않는다. + +## STH-ADR-015: 원본 reference 진단 전환과 새 모델 비교 + +- 상태: Accepted; 사용자 선택 “A, reference 모델을 변경하겠습니다.” +- 결정: 승인된 Q4×P2, consistent C, raw 초기값 및 Backward Euler 정식화를 유지한다. + 기존 `reference/shell-thermal` Step-1/time 37/NT11 family는 진단으로 분류하고 + 공통 tolerance로 계산한 row/family 실패 수치를 그대로 남긴다. 사용자가 변경할 새 + reference 모델과 CSV가 확정되면 별도의 필수 family로 비교한다. +- 이유: 원본 729행 중 87행 실패와 RMS/S=0.04967408461567323 초과가 있었고, + FESA와 독립적으로 승인 식을 계산한 oracle도 같은 차이를 재현했다. + [충돌 evidence](reference-comparison-conflict.md)는 원본의 blocking 조건과 승인 방법을 + 동시에 만족하지 못함을 보여준다. +- 영향: 원본 artifact와 공통 tolerance는 수정하지 않는다. 진단 실패를 PASS로 바꾸지 + 않고 row identity·오차를 보고한다. 새 모델의 경로, 원본 hash, 비교 시점·성분·identity가 + 아직 제공되지 않았으므로 새 필수 비교의 실행·통과는 미완료다. 독립 해석해·수지·수렴성, + 전체 회귀 및 physics 검토를 완료 조건으로 유지한다. 이는 Abaqus 내부 알고리즘의 + 동등성이나 기존 reference가 잘못되었다는 판정이 아니다. diff --git a/docs/shell-transient-heat-transfer/FEATURED_AGENTS.md b/docs/shell-transient-heat-transfer/FEATURED_AGENTS.md index dc6d9af..72ace23 100644 --- a/docs/shell-transient-heat-transfer/FEATURED_AGENTS.md +++ b/docs/shell-transient-heat-transfer/FEATURED_AGENTS.md @@ -33,8 +33,10 @@ 반력 열률을 같은 observable로 대체하지 않는다. - Thin-shell 곡률 근사, 다른 두께·fold의 접속, 초기 온도 jump와 결과 schema는 [PRD 상세 계약](PRD.md#sth-c01--모델-geometry와-자유도)을 따른다. Edge 입력 011은 이번 구현에서 연기한다. 미지원 의미를 임의 default로 처리하지 않는다. -- Reference는 PRD가 지정한 기존 `.inp`와 CSV를 그대로 사용한다. 음수 reference는 +- 기존 reference `.inp`와 CSV는 변경하지 않고 진단 비교에 사용한다. 음수 reference는 roundoff로 단정하거나 clamp하지 않고 [TOLERANCE](../TOLERANCE.md)를 적용한다. + 새 필수 reference는 [PRD STH-C08](PRD.md#sth-c08--reference-원본과-완료-evidence)과 + [STH-ADR-015](ADR.md#sth-adr-015-원본-reference-진단-전환과-새-모델-비교)를 따른다. - All-constrained와 단면 전체 end 온도 지정은 검산용 algebra/assembly fixture다. 내부 온도점 경계조건을 공개 입력 기능으로 확대하는 근거로 사용하지 않는다. diff --git a/docs/shell-transient-heat-transfer/PRD.md b/docs/shell-transient-heat-transfer/PRD.md index 3c0e24a..c313a58 100644 --- a/docs/shell-transient-heat-transfer/PRD.md +++ b/docs/shell-transient-heat-transfer/PRD.md @@ -39,7 +39,7 @@ | 013 | 사용자 지정 총 시간과 기본 시간 간격; 마지막 증분만 필요 시 단축 | | 014 | 온도·요소 전역 열유속·지정 온도점의 반력 열률 | | 015 | 초기 온도와 모든 완료 증분을 공식 HDF5에 저장 | -| 016 | 원본 reference Step-1, t=37, NT11의 필수 외부 비교 | +| 016 | 원본 reference Step-1, t=37, NT11의 진단 외부 비교와 새 reference 모델의 필수 비교 | | 017 | 전체 온도·flux·반력에 대한 해석해·수지·시간 및 공간 수렴 검증 | | 018 | 하나의 transient step만 지원 | @@ -376,7 +376,8 @@ acceptance 변경이 필요하면 구체적 근거를 제시하고 사용자 결 | IO/실패 | 모든 양성/음성 subset, source identity, HDF5 round trip, 초기 dataset 부재, P=0 반력, 마지막delta, no-op warnings, candidate/lease/write/self-check/close 실패 시 기존결과 보존 | 구현 단계에는 열해석 관련 검사를 먼저 수행하고 전체 MSVC x64 Debug build/CTest와 -필수 reference 비교를 수행한다. 새 compiler warning을 추가하지 않는다. +확정된 새 reference의 필수 비교를 수행한다. 기존 reference의 진단 비교도 실패 수치까지 +보고한다. 새 compiler warning을 추가하지 않는다. 구현 전 전체 검사를 실행하여 기존 HHT 시간수렴 실패 2건의 실제 재현·이름·metric을 기록한다. 기록만으로 현재 실패를 가정하지 않는다. 구현 후 전체 검사에서 제외하지 않고, 새 실패·기존 실패 악화를 허용하지 않는다. 재현된 기존의 무관한 HHT 실패만 별도 @@ -406,8 +407,8 @@ worktree를 찾고 파일별 SHA256을 아래와 대조한다. 이 방식은 머 내용, metadata를 수정하는 권한은 포함하지 않는다. FESA HDF5/log는 복사한 입력 옆에 생성한다. 보조 deterministic CSV view는 공식 결과가 아니다. -외부 family는 `(shell-thermal, source step Step-1, time 37, bottom temperature NT11, -scalar, user-consistent temperature units, blocking)`이다. 원본은 단일 Part-1-1, +기존 외부 family는 `(shell-thermal, source step Step-1, time 37, bottom temperature NT11, +scalar, user-consistent temperature units, diagnostic)`이다. 원본은 단일 Part-1-1, 676 DS4, 729 node이며 CSV의 `Step,Frame,Node Label,NT11`에서 instance 열 부재는 입력의 단일 instance 및 label 집합 검증으로만 복원한다. HDF5의 source_step_name, 정확한 t=37 accepted frame, source DOF11을 일대일 대응한다. Nearest-time matching, @@ -418,11 +419,17 @@ Missing/extra/duplicate/nonfinite/identity 오류는 tolerance 전에 실패다. 그 밖의 relative<=0.05, family RMS/S<=0.01, S=0 exact-zero 규칙을 그대로 적용한다. 관찰된 min=-15.5742216, max=1000은 정적 관찰이며 solver 통과 evidence가 아니다. 음수·미소값을 clamp하거나 온도 기준·단위를 조정해 비교를 통과시키지 않는다. -필수 비교 실패 시 원인을 분리 조사하고 방법/acceptance 충돌은 사용자 결정으로 돌린다. +이 원본 비교의 tolerance 초과는 진단 실패로 남긴다. Row identity 오류와 metric을 +숨기거나 원본 비교를 통과로 표시하지 않는다. 독립 계산과 실제 실패 evidence는 +[충돌 보고서](reference-comparison-conflict.md)에 보존한다. 사용자가 변경할 새 reference +모델의 입력·CSV 경로, source row identity, 비교 시점·성분과 원본 hash가 확정되면 +이를 별도의 필수 family로 지정하여 실제 비교한다. 새 artifact가 아직 제공되지 않았으므로 +새 family의 통과를 주장하지 않는다. 공통 tolerance 수치는 변경하지 않는다. 완료 보고서는 구현 diff, 실제 검증 명령/환경·결과, 독립 numerical/physics 검토, 외부 비교 row/family 판정, 기존 HHT 실패, 남은 물리 한계를 구분한다. -추가 Abaqus CSV 확보는 필수 조건이 아니지만 다른 물리량 검증을 생략하는 근거도 아니다. +새 reference 모델과 그 결과 CSV가 확정되어야 새 필수 family를 실행할 수 있다. +이는 다른 물리량의 해석해·수지·수렴성 검증을 생략하는 근거가 아니다. ## 현재 checklist @@ -436,8 +443,9 @@ Missing/extra/duplicate/nonfinite/identity 오류는 tolerance 전에 실패다. - [x] Thermal semantic model·DOF·geometry·K/C·flux 구현 및 [독립·통합 검증](implementation-verification.md#요소-kernel과-형상-검증) - [x] Thermal 입력 subset·진단·결정적 조립·시간 적분 구현 및 [범위별 검증](implementation-verification.md#backward-euler-procedure와-candidate-검증) - [x] HDF5·CLI·candidate와 기존 결과 보존 [검증](implementation-verification.md#application과-실제-cli) -- [ ] 승인 정식화와 필수 reference 통과 조건의 [실측 충돌](reference-comparison-conflict.md)에 대한 사용자 결정 -- [ ] 해석해·수지·수렴성과 필수 NT11 외부 비교 통과 +- [x] 승인 정식화와 원본 reference 통과 조건의 [실측 충돌](reference-comparison-conflict.md)에 대한 사용자 결정: 기존 비교는 진단, 정식화 유지, 새 reference 모델 사용 +- [ ] 해석해·수지·수렴성 검증과 원본 NT11 진단 비교의 실패 metric 보존 +- [ ] 새 reference 모델·CSV·identity 확정 및 필수 외부 비교 통과 - [ ] 전체 MSVC Debug build/CTest 및 기존 실패 대비 확인 - [ ] 독립 physics 검토와 완료 evidence 기록 diff --git a/docs/shell-transient-heat-transfer/design-plan.md b/docs/shell-transient-heat-transfer/design-plan.md index 4c4674a..d02457a 100644 --- a/docs/shell-transient-heat-transfer/design-plan.md +++ b/docs/shell-transient-heat-transfer/design-plan.md @@ -221,7 +221,7 @@ Domain이 정의를 소유하고 AnalysisModel이 non-owning view를 제공하 | T8 | T6 | 구현 담당: thermal HDF5 writer·self-check | Synthetic state round trip·schema/identity/초기 dataset 부재·P=0·atomic 실패 | | T9 | T5,T7,T8 | 구현 담당: prepared_analysis와 CLI 연결 | 양성 CLI·lexical output·exit·lease·기존 결과 보존 | | T10 | T9 | 구현 담당: analytical physics·reference comparator/integration | 독립 oracle·온도/flux/reaction·수렴과 NT11 source mapping/tolerance | -| T11 | T10 | 검증 담당·독립 physics 검토자; 메인 완료 문서 | 전체 MSVC Debug build/CTest·필수 reference·baseline 대비·coverage 한계 | +| T11 | T10 | 검증 담당·독립 physics 검토자; 메인 완료 문서 | 전체 MSVC Debug build/CTest·새 reference 필수 비교·baseline 대비·coverage 한계 | 행동 변경은 기대 결과를 고정한 검사에서 실패를 확인한 뒤 구현한다. 구현 구조를 복제한 expected 값으로 정확도를 주장하지 않는다. 독립 numerical/physics 검토를 구현자의 자기 승인으로 대체하지 않는다. @@ -245,7 +245,8 @@ expected 값으로 정확도를 주장하지 않는다. 독립 numerical/physics - Semidiscrete 독립 eigenmode로 시간1차, Fourier 직사각형의 L2 온도2차·gradient1차. - Bottom step/top 단열 slab series의 온도·flux·에너지·반력; 고정5점 두께 오차 plateau와 초기 침투 깊이 보고. - 다중 재료/두께 strip 저항은 full-end assembly fixture로 확인한다. 내부 station BC를 CLI로 확대하지 않는다. -- 원본 Step-1 t37 NT11 729행의 identity precheck와 공통 tolerance blocking 비교. +- 원본 Step-1 t37 NT11 729행의 identity precheck와 공통 tolerance 진단 비교; + 새 reference 모델이 확정되면 별도 필수 비교. [STH-ADR-015](ADR.md#sth-adr-015-원본-reference-진단-전환과-새-모델-비교)를 따른다. 에너지 defect의 scale은 저장·외력·반력 항의 절댓값 합이며 free residual을 별도로 검사한다. E=1ᵀCT의 기준 온도 이동에 대한 DeltaE 불변성과 BE C-norm 소산은 서로 다른 검사다. @@ -267,8 +268,10 @@ MSVC x64 developer 환경과 승인 local GoogleTest/MKL/TBB/HDF5를 사용한 `.harness/config.json`이 동일 실행을 구성할 때만 `python scripts/execute.py`를 대안으로 사용한다. 개인 설정이 없다고 runner가 preset을 선택한다고 가정하지 않는다. 새 compiler warning을 추가하지 않는다. -Reference는 [PRD STH-C08](PRD.md#sth-c08--reference-원본과-완료-evidence)의 두 원본을 -승인된 dev checkout에서 byte 그대로 복사·hash 확인한다. Abaqus 실행·재생성·이름 변경·보정은 제외한다. +기존 Reference는 [PRD STH-C08](PRD.md#sth-c08--reference-원본과-완료-evidence)의 두 원본을 +승인된 dev checkout에서 byte 그대로 복사·hash 확인했다. Abaqus 실행·재생성·이름 변경·보정은 제외한다. +기존 비교의 불일치는 진단으로 보존하고 새 reference의 경로·identity·비교량이 확정된 뒤 +필수 비교를 실행한다. 실제 명령/exit, hash, baseline 및 최종 결과는 implementation-verification 문서에 기록한다. 재현된 무관한 기존 HHT 시간수렴 실패는 전체 검사에서 제외하지 않고 마지막에도 비교한다. diff --git a/docs/shell-transient-heat-transfer/implementation-verification.md b/docs/shell-transient-heat-transfer/implementation-verification.md index 059f833..5d4bb07 100644 --- a/docs/shell-transient-heat-transfer/implementation-verification.md +++ b/docs/shell-transient-heat-transfer/implementation-verification.md @@ -363,16 +363,19 @@ native exit 0이다. Inventory **592개**, application 관련 **28/28 PASS**이 script/binary hash를 포함한 `review-execution.json`을 보존했다. Probe 자체도 native exit 0이다. 이는 실행 경로와 저장 계약 검증이며 실제 열해의 정확도 판단은 다음 물리 검증에 속한다. -### 필수 reference 비교의 미해결 실패 +### 원본 reference 비교의 실패와 진단 전환 NT11 외부 비교를 실제 실행했으나 **실패**했다. 원본 Step-1/time37/DOF11의 729행 중 87행이 기준을 벗어났고 RMS/S=0.04967408461567323으로 승인 0.01을 초과한다. 별도 C++ 공통 정책 비교도 같은 실패를 재현했다. 승인 식을 FESA 코드 없이 조립·계산한 독립 oracle는 FESA와 최대 7.673861546209082e-12 차이로 같은 reference 불일치를 보였다. 수치·원본 hash·재현 명령·의사결정 범위는 [충돌 보고서](reference-comparison-conflict.md)에 -기록했다. 정식화나 tolerance를 변경하지 않았으며 기능 완료로 표시하지 않는다. +기록했다. 사용자 선택 A에 따라 승인 정식화와 공통 tolerance를 유지하고 원본 비교를 +진단으로 분류했다([STH-ADR-015](ADR.md#sth-adr-015-원본-reference-진단-전환과-새-모델-비교)). +실패 행과 family metric은 변경하지 않는다. 새 reference 모델·CSV는 아직 제공되지 않아 +그 필수 비교를 실행하거나 기능 완료로 표시하지 않는다. -T10 comparator checkpoint `95ba2c5`는 별도 작업 branch에 보존하고 필수 검사가 실패한 +결정 전 T10 comparator checkpoint `95ba2c5`는 별도 작업 branch에 보존하고 필수 검사가 실패한 상태로 구현 branch에 병합하지 않았다. Configure/build/inventory는 native 0, inventory 599개이며, 최종 schema/identity 음성검사 **6/6 PASS**(native 0)다. 원본 application/reference 실행의 CTest는 native 8이고, 최종 comparator 소스로 같은 diff --git a/docs/shell-transient-heat-transfer/reference-comparison-conflict.md b/docs/shell-transient-heat-transfer/reference-comparison-conflict.md index 54347cd..5dd388c 100644 --- a/docs/shell-transient-heat-transfer/reference-comparison-conflict.md +++ b/docs/shell-transient-heat-transfer/reference-comparison-conflict.md @@ -1,7 +1,9 @@ -# 승인 정식화와 필수 NT11 reference 비교의 충돌 +# 승인 정식화와 원본 NT11 reference 비교의 충돌 -상태: **미해결 — 사용자 결정 필요**. 작성일: 2026-09-29. -이 문서는 실패 evidence와 선택지를 기록한다. 정식화·초기화·허용치·blocking 분류를 변경하지 않는다. +상태: **비교 분류 결정 완료; 원본 수치 불일치 유지**. 작성일: 2026-09-29. +사용자는 정식화를 유지하고 기존 비교를 진단으로 전환하며 reference 모델을 변경하는 +선택 A를 승인했다([STH-ADR-015](ADR.md#sth-adr-015-원본-reference-진단-전환과-새-모델-비교)). +이 문서는 결정 전의 실패 evidence를 그대로 보존한다. 정식화·초기화·공통 허용치는 변경하지 않는다. 기준은 [PRD STH-C03/C04/C08](PRD.md), [formulation](formulation.md), [numerical review](numerical-review.md), [공통 tolerance](../TOLERANCE.md)다. @@ -31,7 +33,7 @@ FESA가 생성한 HDF5는 입력의 lexical sibling이다. 별도 C++ comparator도 기존 `ReferenceTolerancePolicy::Evaluate`를 그대로 사용하여 동일 실패를 확인했다. `ThermalReference.OriginalAbaqusNt11AtExactTime37`의 실제 결과는 729행, 87개 실패, RMS/S=0.049674084615673214, max_abs=245.26294650091862다. -해당 CTest 실행은 native exit 8이며 필수 비교를 통과로 표시하지 않았다. +결정 전 해당 CTest 실행은 native exit 8이었고, 비교를 통과로 표시하지 않았다. ## 2. FESA 코드를 사용하지 않은 독립 계산 @@ -74,24 +76,23 @@ Initial Conditions 절은 생략된 초기 온도의 기본값을 0으로 설명 reference 생성기의 내부 행렬·적분·초기 처리 방식이나 그 동등성을 단정하지 않는다. 다른 방법의 수치 결과가 비슷하다는 이유만으로 FESA의 승인 방법을 교체하지 않는다. -## 4. 결정이 필요한 범위 +## 4. 승인된 결정과 남은 비교 -현재 두 조건을 동시에 충족하지 못한다. +원본 모델에서는 다음 두 조건을 동시에 충족하지 못했다. 1. 승인된 consistent C, Q4×P2 두 구간, exact thickness 적분과 raw 초기값 BE를 유지한다. 2. 이 원본 NT11 비교를 현재 공통 tolerance의 필수 blocking 검사로 통과한다. -검토 가능한 선택지는 다음과 같다. 어느 것도 아직 승인되지 않았다. +사용자는 첫 조건을 유지하고 기존 원본 비교를 **진단**으로 전환하는 선택 A를 승인했다. +공통 tolerance 계산과 87행 실패, RMS/S 초과를 그대로 기록한다. 비교기의 새 진단 +테스트가 통과하더라도 이는 열해가 원본 CSV tolerance를 만족한다는 뜻이 아니다. +독립 해석해·수지·수렴성 검증과 새 reference 모델의 필수 비교가 완료 조건이다. +새 모델 및 결과 CSV의 경로·hash·비교 시점·성분·row identity는 아직 확정되지 않았다. +원본을 변경하거나 새 모델의 결과를 추정하여 통과로 표시하지 않는다. -- **정식화 유지:** 이 reference family의 역할을 진단 비교로 재정의할지 결정한다. - 공통 숫자 tolerance와 실패 metric은 그대로 남기며, 독립 해석해·수지·수렴성 검증을 - 완료 조건으로 유지한다. Feature acceptance/ADR의 명시적 변경이 필요하다. -- **필수 reference 통과 유지:** 현재 방법 선택을 다시 검토한다. 먼저 필요한 수치 방법의 - 장단점과 새로운 정식화·검증 계획을 제시하고 승인받아야 하며, 임의 lumping·초기 투영· - clamp 또는 reference 맞춤 수정으로 바로 넘어가지 않는다. - -T1–T9 구현·검증은 유지한다. T10은 실패를 숨기지 않은 comparator checkpoint까지이며, -남은 slab/수렴성 검증과 T11 전체 회귀·독립 physics 완료 판정은 수행 전이다. +T1–T9 구현·검증은 유지한다. T10은 실패를 숨기지 않은 comparator checkpoint 이후 +진단 분류와 slab/수렴성 검증을 진행 중이다. T11 전체 회귀·독립 physics 완료 판정은 +수행 전이다. ## 5. 보존 evidence