Files
FESADev/docs/shell-transient-heat-transfer/implementation-verification.md
T

6.2 KiB

Shell 과도 열전달 구현·검증 기록

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가 아니다.

구현 및 최종 검증

Thermal source 구현, 전체 thermal 검사, NT11 외부 수치 비교와 실제 결과의 독립 physics 평가는 아직 수행하지 않았다. 완료 후 실제 명령·결과·coverage와 미해결 한계를 이 절에 기록한다.