114 lines
7.5 KiB
Markdown
114 lines
7.5 KiB
Markdown
# 승인 정식화와 원본 NT11 reference 비교의 충돌
|
||
|
||
상태: **비교 분류 결정 완료; 원본 수치 불일치 유지**. 작성일: 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)다.
|
||
|
||
## 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 검사로 통과한다.
|
||
|
||
사용자는 첫 조건을 유지하고 기존 원본 비교를 **진단**으로 전환하는 선택 A를 승인했다.
|
||
공통 tolerance 계산과 87행 실패, RMS/S 초과를 그대로 기록한다. 비교기의 새 진단
|
||
테스트가 통과하더라도 이는 열해가 원본 CSV tolerance를 만족한다는 뜻이 아니다.
|
||
독립 해석해·수지·수렴성 검증과 새 reference 모델의 필수 비교가 완료 조건이다.
|
||
새 모델과 결과 CSV는 기존 원본과 분리된 경로에 두기로 했다. 구체적인 경로·hash·비교
|
||
시점·성분·row identity는 아직 확정되지 않았다.
|
||
원본을 변경하거나 새 모델의 결과를 추정하여 통과로 표시하지 않는다.
|
||
|
||
T1–T9 구현·검증은 유지한다. T10은 원본 비교의 실제 FAIL metric을 보존한 진단
|
||
분류와 독립 slab/시간·공간 수렴 검증을 마쳤다. 자세한 실제 실행은
|
||
[구현 검증 보고서](implementation-verification.md#t10-해석해수지수렴성과-원본-진단-비교)에
|
||
기록했다. 전체 회귀와 독립 physics·최종 구현 검토도 완료했고 그 결과는
|
||
[구현 검증 보고서](implementation-verification.md#통합-전체-회귀와-남은-완료-조건)에
|
||
기록했다. 새 필수 reference 비교는 별도 모델·CSV 제공 전까지 미실행이다.
|
||
|
||
## 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를 교체하는 자료가 아니다.
|