108 lines
6.7 KiB
Markdown
108 lines
6.7 KiB
Markdown
# 승인 정식화와 필수 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를 교체하는 자료가 아니다.
|