Hex8 구조해석
범위와 현재 근거
8절점 육면체 C3D8의 요소당24 병진 DOF로 선형/비선형 정적, unstressed generalized 고유치와 선형/비선형 HHT 동해석을 제공한다. 2026-10-10 mean-volume 강성과 10-11 row-sum lumped 질량을 승인했다. Mean-volume 강성· reference row-sum lumped 질량이 현재 정책이다. 현재 구현·원본5개 비교·검토·인계는 확보했으나 최신 전체 통합 완료(FEM-REQ-HEX8-024)는 보류다.
2026-10-13의 관련 Debug C++91/91·비교기 Python96개가 PASS였고, 현재 비교기로 보존된 정적2·고유치1·동적2 결과를 재대조해 모두 PASS였다. 새 장시간 원본 실행이나 전체 CTest는 수행하지 않았다. 정적/고유치 결과는 당시 Debug, 동적2는 Release 산출물이다. Hex8 직접 실행·질량·복구·출력 source 동일성은 확인했으나 전체 공용 binary 동일성이나 전체 green을 주장하지 않는다. Shell의 최신 C08b·원본·전체 Debug 사용자 중단은 HHT 요약을 따른다.
채택 방법과 이유
기본 정식화와 정밀도 정식화가 상세 수식을
보존한다. 강성·복구·reference mass 적분은 2×2×2다. 선형 infinitesimal strain 또는
TL–StVK Green strain에서 deviatoric energy를 점별 적분하고, 체적 energy는
kappa*V*theta_bar^2/2, theta_bar=sum(w_g*tr(E_g))/V로 계산한다. Pointwise bulk의
과도한 강성을 줄이는 채택이며 center/unweighted mean, Fbar, mean-J와 다르다.
Force와 Kmat/Kgeo/Kt는 같은 energy의 gradient/Hessian이다. 평균의 미분에는 서로 다른
GP 간 coupling도 포함하며 local StVK tangent로 대체하지 않는다.
Mass는 full reference consistent24×24 matrix의 행합을 BC 축소 전에 구한 대각 matrix다. Warped 요소의 모든 node를 rho*V/8로 치환하지 않는다. Eigen normalization·HHT inertia· reaction·kinetic energy·momentum은 같은 reference M을 사용한다. Current geometry에 따라 mass를 재계산하지 않는다. 이 질량 변경은 입력 선택 option을 추가하지 않는다.
Solid HHT는 normalized high+low로 전체 physical state와 이력을 유지한다. Element의
상대변위 u_a-u_0에서 strain/force를 만들고 Ghat_0=-sum(a>0)G_a를 실제 gradient와
미분에 함께 사용한다. Tiny Green strain은 sym(H)+H^T H/2로 계산한다. Predictor·rates·
full residual·recovery·work·energy·momentum·다음 accepted state에 low를 보존한다.
Backend에는 RN64 operator/RHS를 전달하지만 acceptance는 full pair에서 검사한다.
공식 F64 출력은 전체 값의 RN64 observable이며 low를 별도 영속 field로 내보내지 않는다.
Rounded 출력만 다시 넣어 엄격한 내부 gate의 같은 PASS를 기대하지 않는다. Restart는 없다.
Whole-cell positive Jacobian은 outward-rounded interval/Bernstein subdivision으로 인증한다. 현재 좌표는 X+u_high+u_low 전체를 포함한다. Depth10/cell budget65536에서 인증되지 않는 uncertain 형상도 실패하며 |detJ|·clamp·자동 다른 요소로 정상화하지 않는다.
입력·출력·reference mapping
Single Part/identity Instance의 Solid-only C3D8, SOLID SECTION, 상수 isotropic ELASTIC을 지원한다. Frequency/HHT는 양의 DENSITY가 필요하다. 실제 BC/CLOAD는 DOF1–3이다. Exact-zero 회전 BC4–6만 source warning/no-op이며 비영 회전 BC와 값0을 포함한 모든 회전 CLOAD는 거부한다. 정적 비영 prescribed는 absolute target이고 비선형 factor가 force/target에 함께 적용된다. HHT는 zero BC/initial u,v와 fixed DYNAMIC,DIRECT schedule, TABULAR step-time relative CLOAD amplitude의 linear interpolation/end hold를 지원한다. Static/BC amplitude·TOTAL TIME·smoothing은 제외한다. Source FREQUENCY LANCZOS/SIM 표기와 내부 generalized MKL FEAST를 구분한다. 공통 solver 요약에 CLI·lease·공통 수치 정책이 있다. CLI는 입력 sibling에 결과를 쓰며 --output은 지원하지 않는다.
Schema version1, feature_id=hex8-structural-analysis,
mass_formulation=lumped-reference, component_order=node-major; UX,UY,UZ다.
기존 consistent-reference 파일을 metadata만 바꿔 재사용하지 않는다. F64/U64/U8은 explicit
little-endian, 문자열은 UTF-8이고 모든 physical 값은 finite다.
| 결과 | Shape·의미 |
|---|---|
| frame nodal/displacement, reaction, residual | [N,3]; U, constrained projection RF, full R는 별도 |
| frame solid/stress, solid/strain | [E,8,6]; global Cauchy S11/S22/S33/S12/S13/S23, infinitesimal 또는 Green strain의 tensor shear |
| dynamic nodal/velocity, acceleration, algorithmic_acceleration | [N,3]; v, physical a, auxiliary A |
| dynamic energy/work/balance·linear/angular momentum | 같은 full pair의 RN64; balance=T+U-T0-U0-W, W는 endpoint force 사다리꼴 work |
| /steps/Step-1/eigen/modes, frequencies, vectors | eigenvalue와 cycles/time 구분; vectors [modes,N,3], phi^T M phi=1 |
| eigen/verification/pairs, eta_gram, max_eta_orth | 반환한 모든 pair의 residual·normalization·직교 검증량 |
Strain은 실제 point kinematics이며 평균 strain으로 바꾸지 않는다. Cauchy stress의 isotropic 항이 모든 점에서 같은 pressure라는 뜻도 아니다. Extrapolation/절점 평균은 없다.
Reference/hexa의5 INP·8 CSV와 hexa_freq.txt는 read-only다. 442nodes/300elements, E=2.1e11,nu=.3,rho=7850, Step-1이다. Static DIRECT h=.1/T=1의 Increment10에서 U/RF/S를 각각 blocking family로 비교한다. U/RF 전체442 inventory 뒤 RF만 실제 constrained 성분으로 투영하며 free RF와 FESA free residual을 비교하지 않는다. Stress는300×8×6 전부다. Dynamic h=.1/T=10의101 frames 각각442×3 U family이며 Amp-1=(0,0),(.1,1),(10,1)이다. Frequency TXT의 Mode1..10 Value=lambda를 eigen/modes.eigenvalue와 직접 비교한다. Freq를 lambda로 변환하거나 mode를 근접 재매칭하지 않는다.
Key는 case/step/increment/instance/source node 또는 element/IntPt/component다.
IntPt 순서는 ---,+--,-+-,++-,--+,+-+,-++,+++이며 node 순서와3/4·7/8이 다르다.
Missing/extra/duplicate/nonfinite/schema/mass 오류는 tolerance 전에 실패한다. S=max|reference|,
near-zero band/error limit .01S, 일반 relative .05, family RMS/S .01, S=0 exact-zero이며
Shell eigen의5% RMS 예외는 적용하지 않는다. Coordinate는 reference 위치다.
실제 코드와 수명
Hex8Element의 ComputeStiffness/ComputeMass, EvaluateLinear/EvaluateNonlinear 및 high+low 대응 함수가 local response를 제공한다. 기본 kernel, paired kernel, 형상 인증은 immutable reference cache와 독립 trial을 사용한다. HighLow arithmetic은 RN·FTZ/DAZ 환경과 지원 product 범위를 검사하고 unsupported underflow/overflow를 실패로 전파한다. Universal correctly-rounded 106-bit 보장은 아니다. Reduction 순서를 바꾸는 최적화도 수치 변경이다.
Domain이 정의를 소유하고 DofManager가3N numbering/scatter를 소유한다. Stable local contribution을 ordered assembly한 뒤 Solid static, frequency, SolidHhtDynamicProcedureExecutor가 typed state를 만든다. SolidDynamicAnalysisState의 accepted full pairs가 다음 predictor의 원본이다. Domain은 view보다, 호출자 adapter는 Execute보다 오래 살아야 한다. Solid writer는 완결 결과를 write/close/reopen/self-check 후 atomic finalize하며 실패 candidate는 history와 기존 final을 보존한다.
수치 의미와 검증 한계
Solid HHT physical residual r=Ma+f-F는 모든 원래 free 성분에서
|r_i|/(|Ma_i|+|f_i|+|F_i|)<=1e-10, zero scale exact-zero다. Weighted 식과
(1+alpha)r_new-alpha*r_old의 identity·update는 uncancelled scale의1e-12이며 old residual을
0으로 치환하지 않는다. q/v/a/A fresh correction은 h와 reference length로 무차원화해1e-10,
증분당100 corrections를 유지한다. Geometry/recovery/finite/gate를 모두 통과한 trial만 commit한다.
과거 consistent mass의 modal7/10 FAIL·최대20.2513%와 Python collection5 오류는 당시 이력이다. Lumped 변경본의 새 원본5개 PASS와 후속 재대조가 이를 대체하는 해당 범위 근거이며 과거 전체787의 784 PASS/2 FAIL/1 SKIP이나 전체789/802를 새 전체 green으로 합산하지 않는다.
Reduced/hybrid/incompatible/20절점, plasticity/contact, mixed shell-solid, pressure/body load, 시간변화 BC·비영 초기상태, adaptive/explicit/restart는 제외한다. Mean-volume의 conditioning· warped stability·남은 bending shear locking, 임의 큰 변형/mesh/시간간격은 일반 보증 범위 밖이다. 원본 U 일치만으로 physical a·장시간 에너지·전체 시간수렴을 검증했다고 주장하지 않는다. 최적화 후 최종 source의 전체 MSVC Debug build/CTest·필수 원본·독립 물리 확인이 남는다.
통합된 local 경계
SolidTrialElement/Hex8TrialAdapter가 같은
stable-address immutable Hex8 kernel의 stiffness·reference mass·paired response를 빌린다.
Adapter에 equation·trial history를 옮기지 않으며 원래 paired 산술·실패 경계를 유지한다.
공통 procedure·typed pending과 결과 dispatch는 모듈화 요약을 따른다.
Frequency 비교는 reference/hexa/hexa_freq.txt의 modal Value를 직접 사용한다.