Files
FESADev/docs/shell-transient-heat-transfer

Shell transient heat transfer

범위와 현재 상태

DS4 4절점 shell의 5개 두께 온도점을 사용하는 단일 uncoupled transient heat transfer다. Q4×two-P2 요소의 K/C, Backward Euler, 온도·24개 Fourier flux trace·열저장 포함 반력, 입력·CLI·atomic HDF5를 구현했다. 당시 추가139개 검사는 모두 PASS이고 전체617개는 614 PASS·기존 HHT2 FAIL·1 SKIP(native8)이었다. 이 문서 정리에서는 build/test를 재실행하지 않았다. 새 필수 reference 모델·NT11 CSV가 준비 중이므로 외부 검증 완료나 전체 green 상태가 아니다.

채택 방법과 물리 의미

정식화가 geometry·보간·행렬·시간격자·판정의 상세 원본이다. 한 node의 source DOF11..15는 zeta=[-1,-.5,0,.5,1]이며 11/13/15가 bottom/mid/top이다. 요소는 node-major20 DOF로 면내 Q4와 두 구간 C0 P2 두께 보간을 결합한다. 다섯 독립2D 판이 아니며 두께 미분으로 station 사이를 결합한다. Midsurface metric·법선의 thin-shell product-domain이고 thickness offset의 곡률 보정은 생략한다. Fold·두께 단차는 같은 normalized station을 공유하는 이상화이며 실제3D 접합부 전도와 동등하지 않다.

Consistent capacity를 사용하고 lumping·인공 확산·음수 온도 clamp는 하지 않는다. 면내3×3 Gauss와 정확 P2 thickness Z0/Z1로 C=rho*c*(h/2)*(M⊗Z0), K=k*((h/2)*(S⊗Z0)+(2/h)*(M⊗Z1))를 만든다. 별도9×2×3=54 직접 적분점은 검산 위치이며 아래24 flux trace와 다르다. 퇴화·뒤집힘·self-crossing·불일치 side는 실패하고 |detJ|로 보정하지 않는다.

BE는 A=C/delta+K, b=Q+C*Told/delta다. Free RHS에는 C_fc*Told_c/delta-A_fc*g_new가 포함된다. Raw 초기 온도를 t=0에 보존하고 첫 양의 시점부터 지정온도를 부과한다. 첫 BC jump를 초기 projection으로 없애지 않는다. 일정 계수·delta에서 A_ff factorization을 재사용하며 실제 마지막 간격이 짧을 때만 재분해한다. n*dt로 생성한 시간격자는 마지막을 입력 T_end로 저장한다. dt>T_end이면 한 증분이다. 단열 K의 상수 null은 양의 C가 있는 transient A의 singularity를 뜻하지 않는다.

공개 입력과 제외 범위

기존 Part/identity Instance·node/set subset과 DS4, SHELL SECTION의 상수 양의 두께, CONDUCTIVITY/DENSITY/SPECIFIC HEAT의 상수 양의 k/rho/c를 사용한다. *INITIAL CONDITIONS, TYPE=TEMPERATURE의 signed finite T는 target node/Nset의5점에 동일 적용하고 미지정은0이다. 공개 BOUNDARY와 CFLUX는 DOF11/15만 지원한다. CFLUX의 signed P는 모델로 들어오는 power이며 면적·두께를 곱하지 않는다. Source row 순서로 중복 하중을 더하고 constrained 입력도 full Q에 남긴다. 자연 경계는 단열이다.

Model/step BC 각각의 동일 target 충돌을 검사한 뒤 step 값이 model 값을 덮어쓴다. 동일 값 중복은 허용하고 다른 값은 오류다. 생략 BC 값은0이다. 단일 *HEAT TRANSFER의 END 생략 또는 PERIOD와 dt,T_end를 지원한다. 시간변화/amplitude, 내부 station 직접 BC/CFLUX, edge 열입력, 열-구조 연성, composite, 온도의존 물성, 절점별 두께와 사용자 station 수는 제외한다. 공통 solver 요약에 CLI·source identity·lease·공통 tolerance가 있다. 사용자 일관 단위를 쓰며 SI를 추정하지 않는다.

복구와 HDF5 계약

Flux는 같은 보간의 직접 미분 q_global=-k*B*T_e이며 power/area다. 면내2×2 Gauss 네 위치 × 두께 trace [-1+,-.5,0-,0+,.5,1-]의24 위치를 구별한다. C0 중앙면의 양쪽 두께 도함수를 평균하지 않는다. Local frame R=[e1,e2,n]의 열은 global 축 성분이며 local flux=R^T*q_global로 후처리한다. Bottom 외향 법선은 -n, top은+n이다.

반력은 r=C*(Tnew-Told)/delta+K*Tnew-Q의 constrained projection이다. 양수는 모델에 추가 공급되는 열이며 전도 flux의 절점 평균과 다르다. Free residual·열에너지는 내부 검증량이고 필수 공개 dataset을 임의로 추가하지 않는다.

Schema version U64=1, feature_id=shell-transient-heat-transfer, analysis_procedure=uncoupled-transient-heat-transfer, internal_formulation=FESA-Q4-P2x2-thermal-shell, integration_rule=surface-3x3-gauss; thickness-exact-P2x2, time_integration=backward-euler다. Metadata에는 source_step_name·source_input_identity· nominal_time_increment·time_period를 기록한다. 모든 숫자는 explicit little-endian F64/U64/U8/I8, 문자열은 UTF-8이며 mandatory finite·shape·identity를 검사한다. Compound padding은 계약이 아니다.

경로 Shape·mapping
/model/nodes, elements, thermal_materials, shell_sections Source identity/연결·k/rho/c·두께와 provenance
/model/thermal_node_ids, thermal_element_ids U64[N], U64[E]; 활성 row의 stable model ID
/model/temperature_dofs, temperature_zeta U64[5]=11..15, F64[5]=[-1,-.5,0,.5,1]
/model/thermal_constraint_mask, thermal_reaction_dofs U8[N,5], compound[P]=(internal_node_id,source_dof); node/station 순서, P=0도 유지
/model/thermal_flux_inplane_coordinates, thermal_flux_zeta, thermal_flux_trace_side [4,2], [6], I8[6]=[1,0,-1,1,0,-1]
/model/thermal_flux_local_frames F64[E,4,3,3]; global component × local axis
/steps/Step-1/accepted_frames frame_index/increment_index U64, time/time_increment F64, is_initial U8; raw initial 포함
frames/n/nodal/temperature F64[N,5], NT11..NT15; initial과 completed 모두 존재
frames/n/nodal/reaction_heat_rate F64[P], RFL, power, positive into-model; completed만 존재
frames/n/element/heat_flux F64[E,4,6,3], QX/QY/QZ global; completed만 존재

위 frames 상대 경로의 부모는 /steps/Step-1이다. 실제 source step 이름은 metadata에서 구별한다. Frame0은 time=delta=0,is_initial=1이며 flux/reaction dataset이 없다. 이를 NaN·계산된0으로 채우지 않는다. 완료 frame은 실제 양의 delta를 저장한다. Diagnostics는 source/severity/code/message의 기존 convention을 보존한다.

코드 흐름과 수명

Abaqus step mapper가 semantic Domain을 만들고 ThermalShell::Create/Recover와 thermal geometry가 local K/C·flux를 제공한다. 열 kernel은 구조 displacement Element::Recover를 전용하지 않는다. AssembleThermal은 DofManager scatter와 stable source 순서로 K/C/Q를 조립한다. C를 structural mass에 저장하지 않는다.

TransientHeatProcedureExecutor::Execute는 ThermalTimeGrid, BE algebra와 residual certificates를 사용해 solve→full temperature→residual/flux/finite/수지 검사→commit을 수행한다. 호출자 소유 solver와 parallel adapter는 Execute보다 오래 살아야 하고 Domain은 non-owning model보다 오래 살아야 한다. ThermalAnalysisState::Create/MakeCompletedFrame/CommitAcceptedFrame는 inventory와 accepted history를 소유한다. Create 뒤 Domain/model/assembly 참조를 남기지 않아 state가 이들보다 오래 살 수 있다. 거부된 candidate는 기존 frames를 바꾸지 않는다.

Thermal writer와 self-check는 candidate close 뒤 재개방해 schema/identity/초기값·완료 BC·frame completeness를 확인한다. Reader close까지 성공한 뒤 final을 교체한다. Write/candidate close/self-check/reader close/finalize 실패에서 기존 final을 보존한다.

검증 의미와 재사용 교훈

Residual backward error는 D_f=||A_ff||inf*||T_f||inf+||b_f||inf의 reduced-system scale을 사용한다. 큰 constrained 값의 full BE scale로 이를 바꾸면 RHS 상쇄 오류를 숨길 수 있다. Direct full residual과 독립 signed construction의 enclosure 교집합으로 같은 stored-data 잔차를 인증하며 빈 교집합은 실패다. D_f=0은 exact-zero 증명이 필요하고 interval이0을 포함한다는 이유만으로 통과하지 않는다. 수지 bound에 방정식 구성 오차를 tolerance처럼 더하지 않는다.

독립2-DOF C=2,1],[1,2,K=1,-1],[-1,1,delta=.5,old=0,g=1 fixture의 첫 free=-.2·다음=.04·reaction4.8/1.44가 초기 용량 결합을 검출한다. 당시 시간차수 .981712..997660, 온도 공간차수1.996702..2.006577, gradient .997220..999826을 확인했다. Slab의24해석·147456증분과 독립 oracle는 고정5점 두께 오차 plateau와 초기 침투 깊이를 구분했다. Slab energy/reaction oracle index 오류는 수정 후 focused 전체를 다시 실행했다.

기존 reference Step-1/t37/DOF11 NT11은676DS4/729nodes다. CSV에 instance 열이 없어 hash-checked 입력의 유일 instance와 결합하며 node source identity로 bottom 값을 비교한다. 원본87/729행 FAIL, RMS/S=.049674084615673214, max abs≈245.262946500919로 공통 .01 RMS 기준을 넘었다. 독립 정식화 oracle도 같은 불일치를 보였다. 사용자 선택으로 원 정식화·tolerance를 유지하고 이 비교만 diagnostic/nonblocking으로 분류했다. 진단 분류 테스트 PASS를 외부 수치 PASS로 바꾸지 않는다. 음수 NT11도 clamp하지 않는다. 새 모델/CSV의 별도 identity·시점·hash를 확정한 필수 비교가 남아 있다.

초기 두께 경계층의 local flux/reaction, 일반 curved mesh의 전역 응답·점열원 수렴·실제3D 접합부는 검증 한계다. 단일 NT11 시점으로 다른 station·flux·반력·전체 시간 정확도를 검증했다고 주장하지 않는다. Dev 통합 승인은 새 필수 reference 통과 승인이 아니다.

통합된 kernel 경계

ThermalElement/Ds4ThermalAdapter는 immutable DS4 kernel을 빌리고 DOF11–15 layout·K/C와 interval·복구를 typed로 제공한다. Kernel의 주소·수명은 adapter보다 안정적이어야 한다. Thermal state·잔차 인증·accepted history와 writer 실패 경계는 그대로 procedure/state/writer에 남는다. 전체 검증 대상에 과도 열해석도 포함하며, 새 필수 reference 미확보와 기존 NT11 diagnostic 불일치를 통과로 바꾸지 않는다.