Files
FESADev/docs/shell-transient-heat-transfer/reference-comparison-conflict.md
T

109 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 승인 정식화와 필수 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 `95ba2c5`의 최종 schema/identity
음성검사는 6/6 PASS이며, 동일 출력의 최종 comparator는 native 1로 비교 실패를 유지했다.
세부 source/artifact hash와 보존 상태는 [구현 검증 보고서](implementation-verification.md)에 기록했다.
- 원본 reference INP/CSV는 변경하지 않았다. 생성 HDF5와 CSV row view는 외부 reference
artifact를 교체하는 자료가 아니다.