From 37e61ed8e41ba10ebc1888f7395d36ebda334561 Mon Sep 17 00:00:00 2001 From: "KOKO\\Mimi" Date: Tue, 29 Sep 2026 22:39:02 +0900 Subject: [PATCH] docs: record unresolved thermal reference acceptance conflict --- docs/shell-transient-heat-transfer/PRD.md | 1 + .../implementation-verification.md | 11 +- .../reference-comparison-conflict.md | 107 ++++++++++++++++++ 3 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 docs/shell-transient-heat-transfer/reference-comparison-conflict.md diff --git a/docs/shell-transient-heat-transfer/PRD.md b/docs/shell-transient-heat-transfer/PRD.md index b0b4117..3c0e24a 100644 --- a/docs/shell-transient-heat-transfer/PRD.md +++ b/docs/shell-transient-heat-transfer/PRD.md @@ -436,6 +436,7 @@ 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 외부 비교 통과 - [ ] 전체 MSVC Debug build/CTest 및 기존 실패 대비 확인 - [ ] 독립 physics 검토와 완료 evidence 기록 diff --git a/docs/shell-transient-heat-transfer/implementation-verification.md b/docs/shell-transient-heat-transfer/implementation-verification.md index 4b624eb..4e6a521 100644 --- a/docs/shell-transient-heat-transfer/implementation-verification.md +++ b/docs/shell-transient-heat-transfer/implementation-verification.md @@ -363,4 +363,13 @@ native exit 0이다. Inventory **592개**, application 관련 **28/28 PASS**이 script/binary hash를 포함한 `review-execution.json`을 보존했다. Probe 자체도 native exit 0이다. 이는 실행 경로와 저장 계약 검증이며 실제 열해의 정확도 판단은 다음 물리 검증에 속한다. -전체 thermal 검사, NT11 외부 수치 비교와 실제 결과의 독립 physics 평가는 아직 수행하지 않았다. +### 필수 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를 변경하지 않았으며 기능 완료로 표시하지 않는다. + +남은 전체 thermal 물리 검사, 전체 회귀와 실제 결과의 독립 physics 완료 평가는 아직 수행하지 않았다. diff --git a/docs/shell-transient-heat-transfer/reference-comparison-conflict.md b/docs/shell-transient-heat-transfer/reference-comparison-conflict.md new file mode 100644 index 0000000..1acbd57 --- /dev/null +++ b/docs/shell-transient-heat-transfer/reference-comparison-conflict.md @@ -0,0 +1,107 @@ +# 승인 정식화와 필수 NT11 reference 비교의 충돌 + +상태: **미해결 — 사용자 결정 필요**. 작성일: 2026-09-29. +이 문서는 실패 evidence와 선택지를 기록한다. 정식화·초기화·허용치·blocking 분류를 변경하지 않는다. +기준은 [PRD STH-C03/C04/C08](PRD.md), [formulation](formulation.md), +[numerical review](numerical-review.md), [공통 tolerance](../TOLERANCE.md)다. + +## 1. 실제 실행과 비교 + +구현 `7cccfcd`의 실제 CLI로 원본 `reference/shell-thermal/shell-thermal.inp`를 실행했다. +100개 증분과 초기 프레임을 저장하고 exit 0으로 종료했다(153.5초). +원본 INP와 CSV의 SHA256은 실행 전후 PRD의 승인 값과 일치했다. +FESA가 생성한 HDF5는 입력의 lexical sibling이다. + +별도 `h5dump`로 source step, 정확한 time=37/increment=37, DOF11, +`Part-1-1`/node label과 thermal row mapping을 확인했다. 729행 모두 중복·누락 없이 +대응했고 값은 finite였다. Source DOF13이나 nearest frame으로 대체하지 않았다. + +| 판정량 | 실제 결과 | 승인 기준 | +| --- | ---: | ---: | +| 비교 행 | 729 | 모든 source 행의 일대일 대응 | +| Reference scale S / near-zero B | 1000 / 10 | 공통 정책 | +| 행별 실패 수 | 87 | 0 | +| RMS/S | 0.04967408461567323 | ≤0.01 | +| 최대 절대 차이 | 245.26294650091884 | 해당 행 기준으로 판정 | +| FESA 최솟값 / 최댓값 | -258.91081180091885 / 1000 | clamp 금지 | + +대표 source node 22에서 reference=-13.6478653, FESA=-258.91081180091885이며, +행별 5% 기준은 0.682393265다. 근소한 반올림 차이가 아니다. + +별도 C++ comparator도 기존 `ReferenceTolerancePolicy::Evaluate`를 그대로 사용하여 +동일 실패를 확인했다. `ThermalReference.OriginalAbaqusNt11AtExactTime37`의 실제 결과는 +729행, 87개 실패, RMS/S=0.049674084615673214, max_abs=245.26294650091862다. +해당 CTest 실행은 native exit 8이며 필수 비교를 통과로 표시하지 않았다. + +## 2. FESA 코드를 사용하지 않은 독립 계산 + +독립 Python/SciPy 실행기는 원본 텍스트에서 729개 좌표, 676개 사각형 connectivity, +Set-10의 196개 node를 읽었다. 모든 요소가 평면 직사각형임을 확인한 뒤, +직사각형 Q1의 닫힌형 M/S와 두 P2 구간의 정확한 Z0/Z1을 조립했다. +FESA parser·kernel·assembler·시간 적분 코드는 호출하지 않았다. + +입력 물성 k=54, rho=7850, c=460, h=0.5를 사용하고 승인된 식 +`C=rho*c*(h/2)*M⊗Z0`, `K=k*((h/2)*S⊗Z0+(2/h)*M⊗Z1)`을 적용했다. +전체 raw T0=0, Set-10의 source DOF11만 g=1000, dt=1인 BE를 37회 계산했다. +3449 free / 196 constrained DOF를 별도 SciPy sparse LU로 풀었다. + +| 독립 계산량 | 결과 | +| --- | ---: | +| FESA NT11과 최대 절대 차이 | 7.673861546209082e-12 | +| 최대 정규화 선형 잔차 | 3.599964225668404e-16 | +| Reference 행별 실패 수 | 87 | +| Reference RMS/S | 0.04967408461567341 | +| 독립 NT11 최솟값 | -258.9108118009203 | + +이 수치는 새 tolerance가 아니다. 승인 식의 독립 계산도 같은 큰 reference 차이를 +재현한다는 관측이다. 이 사례의 차이를 단순한 source mapping이나 production 행렬 +계산 버그로 설명할 근거는 발견하지 못했다. 전체 물리 검증의 통과를 뜻하지는 않는다. + +별도 read-only 검토자는 원본 hash·수치 상수·경계조건, oracle의 tensor 식/BE 우변, +HDF/CSV identity join과 공통 tolerance 계산을 대조하여 이 충돌 evidence의 차단 오류를 +발견하지 못했다. Oracle는 범용 입력기가 아니며 물성·두께·시간·g는 이 사례의 확인된 +상수를 사용한다. 다른 입력에 대한 정확도나 Abaqus의 내부 동작을 입증하는 검사는 아니다. + +## 3. 공개 문서 확인과 해석 한계 + +공개 [Choosing a Shell Element](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEELMRefMap/simaelm-c-shellelem.htm)의 +Heat Transfer Shell Elements 절은 다중 온도점을 갖는 shell의 DOF11을 아랫면 온도로 +설명한다. [Uncoupled Heat Transfer Analysis](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEANLRefMap/simaanl-c-heattransfer.htm)의 +Initial Conditions 절은 생략된 초기 온도의 기본값을 0으로 설명한다. +이 관측 가능한 의미는 현재 reference mapping을 DOF13으로 바꿀 근거를 주지 않는다. + +확인 가능한 문서는 2025판이며 2024 URL은 접근 거부였다. 공개 문서와 한 시점의 CSV만으로 +reference 생성기의 내부 행렬·적분·초기 처리 방식이나 그 동등성을 단정하지 않는다. +다른 방법의 수치 결과가 비슷하다는 이유만으로 FESA의 승인 방법을 교체하지 않는다. + +## 4. 결정이 필요한 범위 + +현재 두 조건을 동시에 충족하지 못한다. + +1. 승인된 consistent C, Q4×P2 두 구간, exact thickness 적분과 raw 초기값 BE를 유지한다. +2. 이 원본 NT11 비교를 현재 공통 tolerance의 필수 blocking 검사로 통과한다. + +검토 가능한 선택지는 다음과 같다. 어느 것도 아직 승인되지 않았다. + +- **정식화 유지:** 이 reference family의 역할을 진단 비교로 재정의할지 결정한다. + 공통 숫자 tolerance와 실패 metric은 그대로 남기며, 독립 해석해·수지·수렴성 검증을 + 완료 조건으로 유지한다. Feature acceptance/ADR의 명시적 변경이 필요하다. +- **필수 reference 통과 유지:** 현재 방법 선택을 다시 검토한다. 먼저 필요한 수치 방법의 + 장단점과 새로운 정식화·검증 계획을 제시하고 승인받아야 하며, 임의 lumping·초기 투영· + clamp 또는 reference 맞춤 수정으로 바로 넘어가지 않는다. + +T1–T9 구현·검증은 유지한다. T10은 실패를 숨기지 않은 comparator checkpoint까지이며, +남은 slab/수렴성 검증과 T11 전체 회귀·독립 physics 완료 판정은 수행 전이다. + +## 5. 보존 evidence + +- 메인 `.dryforge/review/t10_reference/`: `run.py`, `execution.json`, stdout/stderr, + 생성 log, `compare.py`, 실제 dump/exit 기록, `comparison.json`, `comparison-rows.json`. +- 같은 경로의 `independent.py`, `independent-execution.json`, + `independent-comparison.json`, `independent-rows.json`: native exit 0, + NumPy 2.4.6 / SciPy 1.17.1, 사용 script hash 포함. +- 작업 checkout T2 `.dryforge/evidence/t10-reference-test.log` 및 native exit JSON: + 공통 정책을 사용한 C++ 비교의 실제 실패. Checkpoint 최종 hash와 보충 음성검사는 + [구현 검증 보고서](implementation-verification.md)에 기록한다. +- 원본 reference INP/CSV는 변경하지 않았다. 생성 HDF5와 CSV row view는 외부 reference + artifact를 교체하는 자료가 아니다.