31 KiB
Shell 과도 열전달 구현·검증 기록
- Feature ID:
shell-transient-heat-transfer - Owner: 메인 assistant
- 상태: 기존 전체 baseline 확보; 열해석 구현·검증 진행 중. 제품 검증 완료가 아니다.
- 기준: PRD, ADR, 정식화, 독립 수치 검토, 공통 tolerance.
Production 변경 전 baseline
검사 대상 source revision은 a3502c9b974bc17698d57438274408f29317ced4다.
검사 도중 reference 두 파일만 e6fd9e9에 추가했으며 production source와 테스트는 변경하지 않았다.
정식화·계약 문서 편집은 별도 task checkout에서 수행했다.
Windows MSVC x64 Debug, CMake/Ninja와 기존 설치된 의존성을 사용했다.
MSVC toolset 14.51.36231, oneAPI MKL 2026.1, TBB 2023.1, HDF5 2.1.1 및
승인 local GoogleTest checkout을 사용했다. 머신별 절대 경로는 개인 실행 환경에만 둔다.
저장소에 .harness/config.json이 없어 직접 preset을 실행했다.
| 실행 | Captured exit | 관찰 |
|---|---|---|
cmake --preset windows-msvc-ninja-debug -DCMAKE_PROJECT_FESA_INCLUDE= |
0 | Configure 완료; 추가 task source overlay 없음 |
cmake --build --preset windows-msvc-ninja-debug --parallel 4 |
0 | 전체 baseline build 완료; compiler warning 검색 결과 없음 |
ctest --preset windows-msvc-ninja-debug --show-only=json-v1 |
0 | 478개 검사 발견 |
ctest --preset windows-msvc-ninja-debug --output-on-failure |
8 | 478개: 475 PASS, 2 FAIL, 1 SKIP. 3480.67초; 전체 검사 제외 없음 |
실제 로그·argv·revision·exit·완료 시각은 로컬 .dryforge/evidence/baseline-*.log와
각 .log.json에 보존한다. 전체 CTest 로그도 .dryforge/evidence/baseline-LastTest.log에
복사해 후속 실행으로 덮어쓰이지 않도록 보존했다. Native CTest exit은 8이고 외부
PowerShell 실행 도구는 실패 exit 1을 반환했다. 아래 표는 실제 로그의 값을 요약한다.
기존 HHT 실패
HhtShellPhysics.C08aRigidManufacturedOrbitFullCoordinateTimeConvergence는
828.34초 실행 후 실패했다. 여섯 channel의 정의와 원래 판정은
tests/unit/analysis/hht_shell_physics_test.cpp의 해당 검사 그대로다.
| 실패 metric | 실제 값 | 기존 기준 |
|---|---|---|
| Channel 3 최종 refinement error / noise floor | 1.178006582488537e-6 / 1.664587376115457e-6 |
error > noise floor |
| Channel 5 마지막 시간격자의 최대 error | 5.675659240050177e-4 |
<= 1e-4 |
| Channel 5 두 refinement order | 1.0286686694389584, 1.0289692381730642 |
각각 >= 1.8 |
| Channel 5 error / noise floor | 5.675659240050177e-4 / 8.1556816896757325e-4 |
error > noise floor |
HhtShellPhysics.C08bFreeFiniteRotationPlateSelfConvergenceAndPhysicalInvariants는
2382.81초 실행 후 실패했다. 마지막 공통시간 차이는 다음과 같다.
| Channel | 마지막 self-difference | 기존 기준 |
|---|---|---|
| q_u | 5.5474274071377627e-6 |
<= 1e-4 (이 항목은 통과) |
| q_phi | 1.3870090193204238e-4 |
<= 1e-4 |
| v_u | 1.7761250930811503e-4 |
<= 1e-4 |
| v_phi | 1.15434079805253e-2 |
<= 1e-4 |
| a_u | 1.1979645042237048e-2 |
<= 1e-4 |
| a_phi | 8.6893881162834119e-1 |
<= 1e-4 |
q_phi/v_phi/a_u/a_phi의 마지막 두 관측 차수는 각각
(-.1538334889569796,.17869938751647654),
(-.084636748464689021,.057860368459572473),
(.4062904963410236,.20093674620022031),
(-.15578672026532631,.17674898422982255)로 기존 >=1.8에 미달했다.
v_u의 마지막 차수도 .85658192310858094로 미달했다.
Linear momentum drift의 마지막 세 값은
3.8504721819452428e-14, 4.8249991985258491e-14, 2.004031863681472e-13으로,
원래 strict decrease와 마지막 비율 <=.6 검사도 실패했다. 작은 값이라는 이유로 면제하지 않는다.
최종 energy/L drift는 9.5590394502167011e-7 / 4.2974921804532845e-7이었다.
이 실패 양상은 기존 HHT physics 검토의
미해결 C08 범위와 일치하며 열해석 변경 이전에 재현했다.
기존 HHT N7 inconclusive
HhtTemporalVerification.C04aFinestReductionComparisonIsNumericallyResolved는
기존 테스트의 명시 GTEST_SKIP() 분기로 SKIP이었다. Full/reduced acceleration defect
3.0790209097630861e-10이 기존 비교 기준 1e-10보다 크지만 arithmetic/solve resolution
6.2961354117696263e-10 이하인 경우를 N7 INCONCLUSIVE로 표시하는 원래 검사다.
원인과 범위를 tests/unit/analysis/hht_temporal_verification_test.cpp:478 및 실제 출력으로
대조했다. 환경 누락이나 열 기능의 미실행이 아니며, 이 항목을 PASS로 세지 않는다.
최종 전체 검사에서도 이 분류와 metric을 대조하고 새 skip으로 검증을 회피하지 않는다.
승인된 예외는 재현된 무관한 기존 HHT 실패의 별도 보존뿐이다. 마지막 전체 검사에서 동일 metric을 대조하여 새 실패·악화 여부를 확인한다. 기존 실패를 PASS/SKIP으로 바꾸거나 전체 CTest green으로 보고하지 않는다. 예상하지 못한 실패와 열해석 필수 실패는 자동 면제하지 않는다.
Reference 복사와 원본 보존
git worktree list --porcelain으로 확인한 동일 저장소 dev checkout의
reference/shell-thermal/에서 다음 두 파일을 같은 상대 경로로 byte 그대로 복사했다.
원본과 복사본의 SHA256이 각각 일치했고, 복사본을 e6fd9e9에 기록했다.
| 파일 | 원본과 복사본의 SHA256 |
|---|---|
shell-thermal.inp |
955C8BEEC35CE53DA5F5DD48785CF8C12FCE726EBFDE7EAE40CF69DBF00D6EA4 |
shell-thermal NodalTemperature.csv |
765B0D0F64C24CDE6D033D6EF80E0267275A496C97E28D932466EB877810D3E5 |
Abaqus 실행·reference 재생성·이름 변경·내용 보정은 수행하지 않았다. 이 hash 확인은 FESA/reference 수치 비교 통과 evidence가 아니다.
구현 및 최종 검증
구현 전 수치 계약
정식화와 승인 범위의 정합, 전체 patch certificate, source 접속, 시간격자·오차·수렴·slab
검증 기준을 작성하고 독립 수치 검토를 마쳤다. 검토 대상 정식화의 마지막 수식 변경은
dd409b5, 독립 보고서의 최종 보완은 6df5a17이다. 설계상 blocking 지적은 해결했다.
소스 구현의 정확도 통과 판정은 아니다.
- 전역 T-edge 좌표 검사를 source endpoint를 공유하는 후보로 제한하여 disconnected 접촉을 구별했다.
- 입력 rounding-cell을 놓치는 시간격자 반례를 발견하고 정확한 cell overlap으로 보완했다. Production은 최대 122비트의 고정 폭 연산이며 새 임의정밀도 의존성을 요구하지 않는다.
- 공간수렴 검증은 8/16/32/64 정사각 mesh,
T=.001, 32증분으로 고정했다. 기존 관찰 차수 기준을 유지하고 시간오차/공간오차 비율의 최대값.006864를 확인했다. 가장 큰 mesh의 온도·flux 원시 이력은 약 77.3MiB다. - 고정5점의 초기 slab 오차·warped 3×3 적분 오차는 별도로 정량화했다.
통합된 문서의 독립 oracle 부록의 Python block 5개를
메인이 다시 추출 실행했다. Captured Python exit 0,
ALL SCRATCH BLOCKS COMPLETED를 확인했고 출력은
.dryforge/evidence/t1-oracle-replay.log에 보존했다.
기능 문서의 링크·anchor·요구사항 ID 및 git diff --check도 통과했다.
문서 변경을 이유로 solver build/CTest를 반복하지 않았다.
Thermal semantic model
열물성·Domain·AnalysisModel semantic 구현을 254247e, 283628e로 작성하고,
독립 코드 검토에서 해당 범위의 잔여 차단 항목이 없음을 확인했다.
BC/CFLUX는 source DOF 11·15만 허용한다. 열 재료·단면의 local index와 전체 Domain
material index를 구분하며, 구조 step 접근을 열 모델에 잘못 호출하면 명시적으로 실패한다.
두 단계 BC는 원본 수준별 정의를 보존하며 최종 상속·override는 후속 입력/실행 연결의 책임이다.
Endpoint 제한의 행동 재현 검사에서 기존 구현이 12·13·14를 수용하여 CTest exit 8을 확인했고 수정 후 통과했다. 이전 API 누락에 의한 compile 실패는 행동 재현 evidence로 계산하지 않는다. 잘못된 물성·두께, 비활성 target, 초기값·BC 충돌, constrained CFlux 중복·순서 보존, 이동 후 소유 데이터 접근과 다중 재료 인덱스를 검사했다.
작업 checkout의 clean MSVC x64 Debug build와 최종 fixture 추가 후 incremental build는
각각 exit 0이다. 최종 관련 CTest는 21/21 PASS, exit 0이며 compiler warning은
검색되지 않았다. 실제 evidence는 t2-correction-clean-build-build.log,
t2-correction-final-build-build.log, t2-correction-final-regression-test.log 및 각
명령·cwd·native exit JSON에 보존했다. 실행 당시 HEAD는 commit 전 254247e이고,
최종 검사 09:47:06 UTC 후 동일 수정분을 283628e로 기록했다.
검증 중 한국어 MSVC /showIncludes prefix가 CMake에서 잘못 decode되어 Ninja가
header dependency를 0개로 기록하는 환경 문제를 발견했다. Header 변경 후 이전 객체를
재사용하여 AnalysisModel 접근 오류가 발생했다. 개인 검증 환경에서 실제 UTF-8 prefix를
지정하고 clean build한 뒤 같은 객체의 dependency가 47개이며 관련 header를 포함함을
확인했다. 잘못된 추적 상태의 중간 incremental 결과는 최종 evidence로 사용하지 않는다.
Production 변경 전 baseline은 175개 build action을 처음부터 실행한 결과로 유지한다.
공통 CMake source/test 등록 후 통합 checkout에서도 clean build exit 0, CTest inventory
487개, 관련 semantic·기존 structural DOF 검사를 포함한 29/29 PASS를 확인했다.
Evidence는 .dryforge/evidence/semantic-integrated-{configure,build,test}.log와
semantic-integrated-serial-inventory.log다. 최초 inventory와 test를 동시에 시작했을 때
GoogleTest discovery의 공용 JSON 생성이 경합하여 inventory exit 8이 발생했다.
직렬 inventory 재실행은 exit 0이며, 이후 같은 build tree의 discovery/test는 직렬 실행한다.
Thermal DOF 매핑
e71f3ad, 17a2355의 열 5성분 profile, 활성 절점 번호, 20-entry scatter, partition과
CSR 매핑을 독립 검토했다. Canonical 11..15 순서, 비연속 반복 절점, 잘못된 enum 범위,
구조/열 profile 오용을 거부한다. 미사용 절점이 중간에 있는 경우와 공유 edge·분리 영역,
BC 상속·override, 실패 후 전체 mapping 보존을 확인했다.
t4-final3-build.log는 native exit 0, t4-final3-test.log는 13/13 PASS, exit 0이다.
이 중 기존 structural DofManager 검사는 8개다. t4-final2-inventory.log의 491개는
discovery 수이며 전체 실행 수가 아니다. 검사 후 마지막 수정은 줄바꿈·들여쓰기뿐임을
독립 reviewer가 확인했고, 범위 내 잔여 차단 항목 없이 7b9a36c로 통합했다.
요소 kernel과 결합한 통합 검사는 kernel 완료 후 수행한다.
PATH 밖의 설치된 clang-format을 확인한 뒤 새 semantic 파일의 서식을 적용했다.
8ba4d18은 세 신규 파일의 서식 수정이며 관련 신규 header/source/test의 dry-run 검사는
exit 0이다. 앞선 수동 서식 확인을 formatter 실행으로 대신 주장하지 않는다.
시간격자 독립 실행 확인
요소 kernel과 분리된 시간격자 checkpoint e33ee6a를 독립 검토자가 별도 실행기로
컴파일했다. Production의 binary64 입력 cell 판정을 exact Fraction oracle의
11,043개 사례에 대조했고, 유효 11,030개와 입력·INC 거부 13개에서 불일치가 없었다.
66,023개 Frame 표본의 저장 시각·실제 delta가 비트 단위로 일치했다.
기본 INC=100, 범위 밖 Frame 거부와 진단도 확인했다.
MSVC /Od /W4 /WX /fp:precise standalone build, runner 및 비교기는 각각 native exit 0이다.
원래 subnormal 간격, open/closed midpoint, 최대 finite, 실제 shortened 마지막 증분과
거대한 count의 O(1) 사전검사를 포함한다. Evidence는 작업 checkout의
.dryforge/review/time_grid_e33ee6a/에 committed source manifest, 실제 출력,
comparison.json 및 실행 명령으로 보존했다. 이는 시간격자에 한정한 evidence이며
kernel·procedure·physics의 최종 판정을 대신하지 않는다.
요소 kernel과 형상 검증
요소 구현 checkpoint 32f0c16의 독립 행동 계약 검토에서 잔여 차단 항목이 없었다.
Domain의 node/section 범위 검사 뒤 전체 patch와 source 접속을 검사하며, 분리 영역의
좌표 접촉을 자동 연결하지 않는다. Recovery는 4×6 위치, 중립면의 별도 두 trace와
열벡터 e1/e2/n을 유지한다. 생성·복구 실패는 기존 kernel을 변경하지 않는다.
작업 checkout의 t3-ready-build.log, t3-ready-test.log는 native exit 0이며
32/32 PASS다: kernel 10, geometry 9, time 7, semantic 6개다.
t3-ready-inventory.log의 513개는 discovery 수이며 전체 실행 수가 아니다.
실행 metadata의 HEAD는 commit 전 e33ee6a이고, 검사한 수정분을 이후 32f0c16에
기록했다. Build warning은 검색되지 않았고 formatter와 git diff --check도 통과했다.
32f0c16의 독립 수치 검토도 잔여 차단 항목 없이 통과했다. Commit에서 추출한 실제
kernel/geometry를 MSVC로 별도 컴파일하여 고정밀 oracle와 대조했다.
- 유효 fixture 22개의 C/K 계수 17,600개와 평가점 198개의 면적·gradient enclosure 2,574개에서 production 반올림 오차 경계 위반이 없었다.
- 직접 54점 적분과 절댓값 contribution 기준, C 양정치·K rank 19·상수 모드, 두께 변화·별도 중립면 trace·source topology 14개 사례를 확인했다.
- 고정 affine/distorted/saddle 사례의 3/5/7 적분 진단과 production C/K를 이용한
독립 BE 대수 응답, 실제
Recover의 온도 응답 5개를 확인했다. 전역 procedure를 실행한 결과는 아니다.
실제 명령·native exit와 계산 결과는 작업 checkout의
.dryforge/review/kernel_32f0c16/에 보존했다. 최종 compile/runner/checker는 모두 exit 0이다.
최초 surface oracle는 이동된 평판의 정확한 영 성분에 남은 고정밀 cancellation 폭으로
exit 1이었다. 입력 좌표 차를 exact Fraction으로 계산하여 oracle의 translation을
제거한 뒤 같은 포함 검사가 통과했다. Production 변경이나 tolerance 완화는 없었다.
공통 CMake 등록 commit 85b5daa에서 MSVC x64 Debug clean build exit 0,
inventory 517개, 열·기존 Domain·자유도 관련 89/89 PASS, exit 0을 확인했다.
Evidence는 .dryforge/evidence/thermal-kernel-final-{configure,build,inventory,test}.log와
각 native exit JSON이다. 전체 CTest 실행은 아니며 최종 회귀는 별도로 남는다.
최초 통합 build는 exit 0이었지만 Windows PowerShell 5가 UTF-8 BOM 없는 개인 helper의
한국어 prefix를 잘못 읽어 header 의존성 추적이 손상됐다. Helper에 BOM을 추가하고
pwsh로 configure 및 clean build를 다시 수행했다. 최종 Ninja prefix와 실제 header
dependency를 확인했으며, 중간 thermal-kernel-integrated-build.log는 최종 근거를
대신하지 않는다. 이 보완은 개인 검증 환경에 한정하며 제품 소스 변경은 없다.
결정적 조립과 accepted state
54154bee의 full K/C/Q 조립과 결과 state를 독립 검토하여 잔여 차단 항목이 없음을
확인했다. Local kernel 오차와 순서가 고정된 합산 오차를 포함한 경계를 제공하며,
constrained Q도 보존한다. State는 생성 뒤 Domain 수명에 의존하지 않고 raw 초기
프레임, immutable row mapping, 정확한 schedule 및 완료 프레임을 소유한다.
작업 checkout의 t6-final-{build,inventory,test}.log는 각각 native exit 0이다.
Inventory 528개 중 관련 11/11 PASS이며 24종류의 candidate 손상에 대한 전체
이력 보존과 UINT32_MAX schedule의 선할당 방지도 검사했다. 실행 당시 HEAD는
commit 전 85b5daa였고, 같은 수정분을 54154bee에 기록했다.
독립 실행기는 committed assembler/state를 별도 컴파일하여 4요소·9활성절점의 서로 다른 물성·두께 및 global material offset 모델을 검산했다. Exact Fraction oracle의 C/K 4,050항과 40개 하중 사례를 대조했고, 유효 39개와 overflow 거부 1개가 기대와 일치했다. Serial/actual TBB의 값·오차 경계·flux는 비트 단위로 일치했다. State의 초기값·완료 여부·잘못된 uint64 frame 거부·복사 독립성도 확인했다.
Evidence는 작업 checkout의 .dryforge/review/t6_54154bee/에 보존했다.
최초 reviewer runner의 정수 narrowing compile 실패를 구별해 기록했으며,
수정 후 compile/runner/Fraction checker/source audit는 모두 실제 exit 0이다.
입력 파서와 합친 통합 검사 결과는 아래에 기록한다.
Thermal 입력 subset과 진단
입력 구현 203d068을 독립 검토하여 T5 범위의 잔여 차단 항목이 없음을 확인했다.
DS4 inline ELSET, 상수 물성·5점 단면, raw 초기값, model/step 경계조건,
source 순서 CFLUX와 정확한 시간격자를 연결한다. 부가 keyword는 승인된 형식만
허용하며 source warning을 남긴다. 미사용 surface도 target을 검증하고 보존한다.
검토에서 strict output/restart, surface resolution, source 진단 및 mixed procedure 문제를 보완했다. 마지막 DS4 inline ELSET 거부와 beam section 무시 문제는 실제 반례 4개의 실패(native exit 8)를 확인한 뒤 수정했다. 같은 집합 내부의 member는 STH-C01에 따라 한 번 전개하고, 별도 CFLUX source row는 가산 대상으로 유지한다.
작업 checkout의 t5-inline-green-{build,test,inventory}.log와 JSON에서 각각
native exit 0을 확인했다. 관련 82/82 PASS는 thermal 입력 32개와 기존 structural
입력 50개이며 inventory 549개는 전체 실행 수가 아니다. 검사 당시 HEAD는
수정 전 360f8df였고, t5-inline-manifest.json의 소스·테스트 hash가 최종 commit과
일치함을 독립 확인했다. 원본 reference 두 파일의 hash는 변경되지 않았다.
공통 CMake 등록 commit 983e2fe에서 configure/build/inventory/test가 각각
native exit 0이었다. 실제 inventory는 560개, 열·기존 입력·Domain·자유도 관련
152/152 PASS다. 새 compiler warning이 없고 Ninja의 실제 header dependency도
정상임을 확인했다. Evidence는
.dryforge/evidence/thermal-input-state-integrated-{configure,build,inventory,test}.log
및 native exit JSON이다. 전체 회귀 검사는 아니며 시간 적분·HDF5·CLI 이후에 수행한다.
시간 적분 구현 전 residual 해석 확인
정식화의 reduced 분모 D_f=||A_ff||∞||T_f||∞+||b_f||∞를 reduced 및
full-free residual certificate 모두에 유지한다. Reduced 검사는 승인된 식 그대로 수행한다.
Full residual은 직접 평가 interval과 reduced residual에 독립적인 signed construction
interval을 더한 interval의 교집합으로 인증할 수 있다. 두 interval은 같은 stored-data
정확 잔차를 포함해야 하며 빈 교집합은 실패다. 이는 허용치를 늘리지 않고 포함 구간을
좁히는 방법이다. 방정식 구성 오차를 residual 허용치나 에너지 bound에 더하지 않는다.
독립 Fraction 반례에서 2-DOF fixture의 큰 constrained 온도에 의해 계산된 우변이
0으로 소실되지만 정확 우변은 4인 경우를 확인했다. Full BE scale로 정규화하면
이 오류가 통과할 수 있으므로 이를 blocking 분모로 대체하지 않는다.
.dryforge/review/t7_residual_normalization/의 script·실제 출력·실행 JSON은
native exit 0이며, 이는 승인 계약 해석의 evidence다. 최초 검토에서 direct-full의
느슨한 상계를 그대로 별도 gate로 요구한 해석은 필수 첫 jump에서 29.4u > 20u로
충돌하여 정정했다. refinement-interpretation.txt와 실제 Fraction 검산은 교집합
인증에서 같은 사례가 약 4u로 통과하고, 앞의 우변 소실 반례는 여전히 실패함을
보인다. D_f=0은 물리 잔차의 exact zero 증명이 필요하며 단순히 interval이 0을
포함한다고 통과시키지 않는다. Procedure 구현의 실제 interval 검증은 별도로 남는다.
Backward Euler procedure와 candidate 검증
ef8ec473의 시간 적분 구현은 독립 행동 계약 검토와 별도 exact 산술 검산에서
잔여 차단 항목이 없었다. Raw 초기값, 첫 증분의 old constrained 용량 항,
실제 delta가 같을 때의 factorization 재사용, full 반력·flux 복구와 실패 전 commit
방지를 구현했다. 공개 API는 Result<ThermalExecutionResult>이며 내부 검산용
partition이나 recovery 주입을 공개 경계조건 기능으로 노출하지 않는다.
작업 checkout의 t7-final-{build,inventory,test}.log 및 native exit JSON은 모두 0이다.
Inventory 570개, 관련 91/91 PASS이며 새 10개 tests는 두 증분 exact fixture,
all-constrained, 상쇄와 잘못된 solve 거부, 실제 시간격자·factorization 횟수,
실제 MKL affine mode/flux, 이력 보존, signed power·분리 영역, subnormal 경계,
잘못된 입력과 Serial/TBB 이력 일치를 검사한다. t7-tested-source-hashes.json은
실행한 6개 소스·테스트가 최종 commit과 동일함을 식별한다.
메인의 독립 실행기는 committed algebra와 bounds를 별도 MSVC target으로 호출하고
Python Fraction oracle와 비교했다. 31,668개 산술 enclosure, 인증된 502개 증분의
737개 free residual, 502개 열수지, 108개 단열 소산에서 경계 위반이 없었다.
추가 무작위 algebra 사례 1개는 full-free 인증 불가로 거부됐으며 통과 수에 포함하지
않았다. 허용치나 production을 결과에 맞춰 변경하지 않았다. Evidence와 적용 한계는
작업 checkout의 .dryforge/review/t7_ef8ec473/review.md, comparison.json, 실제
runner/checker 출력·native exit 기록에 보존했다. 최종 독립 build/runner/checker는 exit 0이다.
HDF5 구현과 합친 통합 검사는 writer의 독립 검토 후 수행한다.
Thermal HDF5 저장과 publication
7f11d533의 writer와 self-check를 STH-C05/C06에 대조한 독립 검토에서 차단 항목이
없었다. 모든 필수 metadata·model·mapping·frame·diagnostic의 field/type/extent/value를
검사하며, compound의 순서·padding에 의존하지 않고 fixed/variable UTF-8을 허용한다.
Global material ID, 정규화한 section provenance, raw initial, 실제 delta와 회전된 R 및
global flux의 trace/component 순서를 직접 읽어 검증했다.
Candidate close 이후 파일을 다시 열어 검사하고 reader close 성공 뒤에만 최종 파일을 교체한다. 쓰기·candidate close·self-check·reader close·finalize의 다섯 실패 경계에서 기존 결과 byte 보존과 candidate 정리를 확인했다. Domain과 이력의 활성 identity, 시간격자, raw 초기값, constraint mask와 완료된 prescribed 온도도 대조한다.
작업 checkout의 t8-final-{build,inventory,test}.log 및 native exit JSON은 모두 0이다.
Inventory 573개, 관련 31/31 PASS이며 이 중 thermal writer 검사는 13개다.
실행 당시 HEAD는 commit 전 983e2fe였고 t8-tested-source-hashes.json의 8개 파일 hash가
최종 commit과 정확히 일치함을 독립 확인했다. 이 결과는 writer 범위이며 CLI·물리·외부
reference 검증을 대신하지 않는다.
시간 적분과 writer를 실제 CMake에 등록한 1b82707에서 configure/build/inventory/test는
모두 native exit 0이다. Inventory 583개 중 Thermal|TransientHeat|Hdf5에 해당하는
134/134 PASS, 새 compiler warning 없음이다. Evidence는 메인 checkout의
.dryforge/evidence/thermal-procedure-output-integrated-{configure,build,inventory,test}.log
및 exit JSON에 보존했다. 이는 관련 통합 검사이며 전체 회귀는 아니다.
Application과 실제 CLI
7cccfcd의 독립 검토에서 application 연결 범위의 차단 항목이 없었다. Thermal step을
구조 step 개수 검사보다 먼저 선택하며, typed outcome과 thermal writer를 연결했다.
기존 호출의 optional adapter, output lease·log close 순서와 오류 분류를 보존한다.
실제 executable을 사용하는 통합 테스트의 CMake 의존성도 명시했다.
작업 checkout의 t9-verified-{build,test}.log, t9-complete-inventory.log와 exit JSON은
native exit 0이다. Inventory 592개, application 관련 28/28 PASS이며 새 thermal
검사 9개와 기존 static/nonlinear/eigen, 실제 HHT 경로를 포함한다. 최초 정상 thermal
입력이 invalid-analysis-step-count로 거부된 실패(native test exit 8)를 기록한 후 수정했다.
실행 시점 HEAD는 14160dd이고 t9-tested-source-sha256.json의 4개 파일은 최종 commit과
일치한다. Lease 경합, solver overflow와 실제 Windows final-file 교체 거부에서도 기존
결과가 보존되고 candidate가 정리됐다.
메인의 독립 probe는 실제 fesa.exe와 별도 h5dump를 subprocess로 실행했다.
29개 명령에서 기대 exit가 일치했고, raw 초기 온도·양면 지정 온도·모든 frame의
시간/실제 delta·source step·반력/flux shape·finite 값·초기 recovery 부재를 확인했다.
미지원 source DOF12와 usage 오류 이후에도 기존 최종 파일 SHA256이 유지됐다.
.dryforge/review/t9_cli/t9-7cccfcd/에 stdout/stderr, execution.json, result.json과
script/binary hash를 포함한 review-execution.json을 보존했다. Probe 자체도 native exit 0이다.
이는 실행 경로와 저장 계약 검증이며 실제 열해의 정확도 판단은 다음 물리 검증에 속한다.
원본 reference 비교의 실패와 진단 전환
NT11 외부 비교를 실제 실행했으나 실패했다. 원본 Step-1/time37/DOF11의 729행 중 87행이 기준을 벗어났고 RMS/S=0.04967408461567323으로 승인 0.01을 초과한다. 별도 C++ 공통 정책 비교도 같은 실패를 재현했다. 승인 식을 FESA 코드 없이 조립·계산한 독립 oracle는 FESA와 최대 7.673861546209082e-12 차이로 같은 reference 불일치를 보였다. 수치·원본 hash·재현 명령·의사결정 범위는 충돌 보고서에 기록했다. 사용자 선택 A에 따라 승인 정식화와 공통 tolerance를 유지하고 원본 비교를 진단으로 분류했다(STH-ADR-015). 실패 행과 family metric은 변경하지 않는다. 새 reference 모델·CSV는 아직 제공되지 않아 그 필수 비교를 실행하거나 기능 완료로 표시하지 않는다.
결정 전 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 소스로 같은
생성 HDF5를 다시 비교한 standalone 실행은 native 1로 같은 실패를 확인했다.
.dryforge/evidence/t10-checkpoint-{source,artifact}-sha256.json과 실제 실행/row 보고서를
보존했고, 4개 tested-source hash와 clean checkpoint의 일치를 메인이 확인했다.
이 checkpoint에는 물리·수렴성 검사 구현이나 production 변경이 없다.
T10 해석해·수지·수렴성과 원본 진단 비교
T10 고정 소스 9e8afb9의 8개 파일은
T2/.dryforge/evidence/t10-final-eigen-source-sha256.json의 SHA256과 모두 일치한다.
작업 checkout의 MSVC Debug build·inventory는 native exit 0, inventory 617개다.
t10-final-focused-test.log와 즉시 보존한 t10-final-focused-LastTest.log에서
26/26 PASS, native exit 0, 실제 2901.03초를 확인했다. 146개 수치 기록은
t10-final-metrics.json에 있다. Test 코드의 slab 에너지/반력 인덱스 오류는 최초
실패 로그를 보존한 뒤 수정했고, 위 최종 검사는 수정된 소스 전체를 다시 실행한 결과다.
단열 균일장, signed·중첩·구속점 열입력의 component별 수지, full-end 검산 fixture의
재료/두께 단차와 90° fold 저항, 회전·법선 반전·중립면 양쪽 flux trace를 확인했다.
Full-end fixture는 공개 입력의 내부 station BC 지원을 뜻하지 않는다. 독립 rational
Q1×P2 조립에서 8×8 고유모드 K v−λ_h C v의 405행과 C-노름을 검산했다.
실제 시간 수렴차수는 0.981712, 0.990734, 0.995336, 0.997660으로 승인 구간에 있다.
전체 이력을 저장한 8/16/32/64의 2D 공간 수렴은 온도 차수
1.996702, 2.000769, 2.006577, gradient 차수
0.997220, 0.999305, 0.999826이다. 64 mesh의 시간/공간 오차 비는
0.00686327이고 온도·flux payload는 81,074,472 byte였다.
Slab는 t=.001,.01,.05,.1,.5,1에서 N=4096/8192, 각 1×1/2×2 mesh의
24개 실제 해석·147,456증분을 실행했다. 모든 완료 프레임의 온도·flux와
에너지·반력을 독립 two-P2/Fourier interval 및 실제 residual 기반 오차 경계로
판정했다. 최대 (solver+oracle bound)/(D_space/1000)은 0.163432다.
초기 시점의 두께 오차 plateau는 관측됐으나 후기 .5/1의 T/E/R은 도달하지
않은 것으로 분리해 보고한다. 이는 고정 5점의 두께 해상도 한계다.
Warped patch의 production 3점 대 독립 3점 K/C·BE 온도/flux 검산과 3/5/7점
진단은 기존 고정 kernel 검토의 실제 evidence를 재사용했다.
7점을 exact해로 취급하지 않으며 이 검토만으로 전역 warped procedure 전체를
검증했다고 주장하지 않는다.
독립 수치 검토자는 Gauss header 112개 값과 slab header 654개 값을 generator로
재생성하여 일치함을 확인했다. 수정된 에너지/반력 index, 고유모드 405행,
C-노름 및 승인 오차 예산에서도 차단 finding이 없었다. 별도 비교기 검토는 원본
진단 분류에도 row identity/schema·공통 tolerance 실패가 그대로 드러남을 확인했다.
원본 CLI/reference 검사는 테스트로는 PASS지만 실제 비교는 87/729행 FAIL,
RMS/S=0.049674084615673214, max abs=245.26294650091936,
blocking=false다. 원본 INP/CSV SHA256은 실행 전후 승인 값과 같다.
새 필수 reference는 별도 경로의 모델·CSV를 아직 받지 못하여 미실행이다.
메인 통합 commit 9f7fb2e에서 CMake 등록 뒤 configure/build/inventory는 native 0,
inventory 617개, 새 compiler warning 없음이다. 짧은 물리·비교기 통합 검사
10/10 PASS도 native 0이다. 관련 로그는 메인의
.dryforge/evidence/t10-integrated-*와 작업 checkout의 위 t10-final-*에 보존한다.
전체 회귀와 독립 physics 완료 평가는 아직 진행 중이며 이 범위 검사로 대신하지 않는다.