# HHT implicit dynamics ## 범위와 현재 상태 MITC4 shell의 유한회전 기하비선형 동해석이다. S4/S4R은 FESA-MITC4로 해석하며 외부 solver 내부 알고리즘과의 동등성을 뜻하지 않는다. 현재 채택 경로는 **nodal-lumped-kinetic 질량, reduced-coordinate HHT, 초기 null의 고정 직교 보완기저, shell schema v2**다. 과거 consistent 질량·full-coordinate v1 근거를 변경본 통과로 승계하지 않는다. 2026-10-13 기록에서 ADR-018의 실제 C09와 공식 Release C08a 7-grid는 통과했다. 최신 전체 Debug는 856개 중 44개 PASS 후 사용자 중단됐고 Release C08b도 중단됐다. 당시 원본 Release 해석은 증분99·t=9.9까지 accepted 로그만 남아 HDF5 비교가 불가능했다. 사용자 중단 exit -1은 수치 FAIL이나 PASS가 아니다. 이후 2026-10-14 성능 baseline은 원본을6372.325621초/native0으로 완료하고 schema v2·729nodes/101frames를 확인했다. 9-node U blocking 비교는 PASS(최대 relative RMS .0022824245), UR은 경고200건이었다. 이는 baseline source의 결과다. 최신 최적화 source의 새 원본 비교·C08b·전체 회귀·독립 전체 물리 판정은 남아 있으며 전체 green이 아니다. [성능 요약](../calculation-performance/README.md)을 함께 본다. ## 채택 방법과 산술 의미 [기본 정식화](formulation.md), [관성](formulation-inertia.md), [축소 좌표](formulation-reduced-coordinate.md), [고정 null 기저](formulation-fixed-null-basis.md)가 수식의 상세 원본이다. 초기 null과 실제 free 공간의 교집합에서 고정 sparse 열 Lp/Lz를 만들고 coupled graph root를 풀어 full `q=Q(p,t)`를 재구성한다. v와 physical a는 Q의 chain rule로 복원한다. 부분 회전구속을 full clamp로 바꾸거나 모든 node에 동일 reduced 차원을 강제하지 않는다. Fixed patch 밖에서 검증된 history transport가 없으면 실패한다. HHT 계수는 `alpha=-.05,beta=.275625,gamma=.55`다. Private p/vp/ap/Ar가 적분 이력이며 `Ar_n=(1+alpha)ap_n-alpha*ap_(n-1)`다. 공개 full `A_n=(1+alpha)a_n-alpha*a_(n-1)`는 **full-chart 진단용 filter combination**이고 full q/v의 predictor driver가 아니다. Frame0은 `q0=v0=0,A0=a0`이며 full 초기평형·hidden consistency를 만족해야 한다. 공개 A 또는 Qp*Ar로 private history나 restart를 구성할 수 없다. 관성력 `I=M(q)a+c(q,v)`, 접선, 에너지·운동량은 같은 nodal kinetic measure에서 계산한다. Lumped는 회전 block의 scalar diagonal 치환이 아니다. Epsilon inertia로 null을 없애지 않는다. Primitive hidden-gradient authority, tiny director increment와 coefficient-first inertia contraction은 큰 병진과 작은 회전의 소실을 줄이는 구현이다. Force·tangent·recovery는 같은 state/energy를 사용한다. [Carried-A 산술](formulation-carried-a-noise.md)은 noise indicator의 범위를, [가속도 복구 후보](formulation-acceleration-recovery.md)는 채택 경로와 다른 후보를 설명한다. ## 입력·출력·reference 계약 Single Part/identity Instance, homogeneous centered shell, 상수 isotropic elastic material과 양의 DENSITY, NLGEOM=YES인 단일 `*DYNAMIC, DIRECT`를 지원한다. INC 기본값은100이며 양의 uint32 증분 상한이다. h<=T이고 double(N)*h==T, N<=INC를 요구한다. h/T/INC는 정수 증분 수와 binary64 n*h의 exact schedule로 검증한다. 영 BC·영 초기 q/v·일정 global 병진 CLOAD만 허용한다. 사용자 계수, adaptive/explicit, amplitude/follower/분포하중, 회전 CLOAD, 비영/시간변화 BC, 비영 초기조건, restart는 제외한다. 허용된 `*RESTART, WRITE, FREQUENCY=0`은 warning no-op이다. CLI·lease·공통 identity/비교 정책은 [solver 공통 요약](../solver-core/README.md)을 따른다. Schema identity는 `(hht-implicit-dynamics,hht-implicit-dynamics,2)`다. `/metadata::time_integration_formulation`은 `reduced-coordinate-HHT-with-physical-rate-reconstruction`, `mass_formulation=nodal-lumped-kinetic`, `acceleration_convention=physical-endpoint-and-auxiliary-separated`다. 모든 result dataset version도 2이며 A의 quantity_semantics는 `full-chart-HHT-filter-combination-not-predictor-driver`다. 잘못된 marker·혼합 version·mass· inventory·nonfinite는 dynamic-output-schema 실패다. Historical v1 reader branch는 과거 full-coordinate 결과만 읽으며 marker를 보충하거나 v2로 재표시하지 않는다. 각 `/steps/Step-1/frames/`의 주요 F64 little-endian 결과는 다음과 같다. | 상대 경로 | Shape와 의미 | | --- | --- | | nodal/displacement, velocity, acceleration, algorithmic_acceleration | [N,6]; translation/global total rotation-vector chart의 q/v/physical a/public A | | nodal/angular_velocity, angular_acceleration | [N,3]; Jl*phidot 및 Jl*phiddot+DJl[phidot]phidot | | nodal/triad, director | [N,3,3], [N,3] | | nodal/generalized_inertia_force, generalized_internal_force, generalized_external_force, generalized_residual, generalized_reaction | [N,6]; residual=I+f-F, generalized reaction=constrained projection | | nodal/reaction | [N,6]; support-on-structure spatial RF/RM, moment는 Jl^-T 변환 | | element/shell/local_frame, generalized_strain, section_resultant, stress | [E,4,3,3], [E,4,8], [E,4,8], [E,4,3,3]; stress는 bottom/middle/top × S11/S22/S12 | | global/energy, global/equilibrium | [5] kinetic/physical/drill/work/defect, [6] 관성 포함 force/moment balance | Row는 model source inventory와 결합한다. Generalized moment와 spatial moment, physical a와 A, drilling force와 physical stress를 혼합하지 않는다. 영 BC는 q/v/a/A exact zero다. 일정 외력의 work는 `F*^T(qn-q0)`, defect는 `T+Uphysical+Udrill-E0-W`다. Momentum·hidden 진단 전체가 HDF5 필수 dataset인 것은 아니다. Reference는 reference/shellNL-dyn-meshfine의 INP와 displacements CSV다. 전체729-node/ 101-frame identity·finite를 먼저 확인한 뒤 고정9-node subset으로 투영한다. Instance/node/ Step-1/increment0..100으로 join하며 CSV decimal n/10과 binary double(n)*double(.1)을 각각 검증한다. U는 displacement 앞3성분, UR은 뒤3성분이다. Frame별27 scalars의 U blocking· UR warning-only 총202 families다. S=max|reference|, near-zero band/error limit .01S, 일반 상대오차 .05, family RMS/S .01, S=0 exact-zero다. Warning-only여도 schema/identity/ nonfinite 오류는 blocking이다. CSV에는 V/a/A/energy가 없어 변위 일치로 이들을 검증할 수 없다. ## 코드 흐름과 수명 [HhtDynamicProcedureExecutor::Execute](../../src/fesa/analysis/hht_dynamic_procedure.cpp)는 [ExecuteReducedHht](../../src/fesa/analysis/hht_reduced_procedure.cpp)로 연결된다. [FixedChart/FixedBasisColumn](../../src/fesa/analysis/hht_reduced_internal.h)과 [BuildFixedChart·SolveEmbeddingRoot·rate/augmented operators](../../src/fesa/analysis/hht_reduced_operators.cpp)는 analysis-private다. Sparse support가 projection/lift authority이며 DOF label만으로 단일 성분 injection을 가정하지 않는다. Domain은 non-owning AnalysisModel보다 오래 살아야 하고 호출자 소유 solver/parallel adapter는 Execute 동안 유효해야 한다. Private chart/history와 [DynamicAnalysisState](../../include/fesa/analysis/dynamic_analysis_state.h)의 full accepted frame은 같은 acceptance 뒤 commit한다. Full residual·recovery·finite·constraint 검증 전에 일부 이력을 commit하지 않는다. [DynamicHdf5ResultsWriter](../../src/fesa/io/hdf5/dynamic_hdf5_results_writer.cpp)는 완결 이력을 write/close/reopen/self-check한 뒤 final을 교체한다. 실패 candidate는 기존 final을 보존한다. Accepted history는 실행 중 메모리에 있어 강제 종료 로그만으로 복구되지 않는다. ## 검증 기준·교훈·남은 한계 N2 full force/moment·q/v/a/A correction은 채널별 1e-10, 실제 scaled solve backward error는 1e-12다. N3 update는 상쇄 전 same-unit scale의 1e-12와 exact-zero branch를 유지한다. Pair increment의 exact expansion 검사와 RN-even 저장 검사는 별도다. Hidden 위치 조건·rank/ regularity를 유지하되 hidden rate 진단을 임의 Newton gate로 바꾸지 않는다. 일반 dynamic operator에 대칭성을 강제하지 않는다. 일반 nonlinear HHT energy에 매 frame 보존·감소를 요구하거나 numerical dissipation을 physical damping으로 기록하지 않는다. 시간 검증은 q/v/physical a의 마지막 두 refinement 감소·차수 >=1.8 및 finest normalized error <=1e-4를 요구한다. N7 read-only linear/nonlinear defect solves와 arithmetic indicator는 100배 separation을 확인하며 state polishing이 아니다. 원본의 성긴 dt/T1≈7.4567에서 변위 일치와 시간 정확도를 구분한다. 과거 전체617의 HHT2 FAIL/1 SKIP, lumped 전체789의784 PASS/4 FAIL/1 SKIP, 후속802의 799 PASS/2 FAIL/1 SKIP은 각 당시 source 이력이다. 초기 C08b runtime 예외는 두 시작점 정책으로 해소됐고 후속 C09/C08a7 통과와 구분한다. 최신 Debug h=1/64 완료 요약의 이전 Release 일치는 전체 raw state bitwise나 전체 시간수렴 증거가 아니다. 원본 accepted residual 최대 병진1.889238010e-15·회전1.452384011e-15도 Abaqus 변위 오차가 아니다. C08b finer-grid·최신 최적화 source의 원본 HDF5 비교·전체 회귀·전체 물리 closure가 남는다. ## 보존한 과거 수식과 연구의 위치 | 원본 | 현재 해석 | | --- | --- | | [2026-10-04 본식](formulation-historical-docs-cleanup-20261004.md), [관성 원본](formulation-inertia-historical-docs-cleanup-20261004.md) | 당시 consistent 정책의 수식·검토 이력이다. 현재 lumped/reduced/fixed-null 정책이 우선한다. | | [C08b Newton 연구](formulation-c08b-newton-research-20261012.md), [DAE 연구](formulation-dae-research-20261012.md) | 원인·후보 조사이며 모든 Newton/DAE 후보의 채택을 뜻하지 않는다. | | [운동량 연구](formulation-momentum-research-20261012.md), [graph certificate 초안](formulation-graph-certificate-draft-20261012.md) | 불변량·controller/certificate 연구의 원본이다. 현재 acceptance나 엄밀한 전역 오차 보증을 자동 대체하지 않는다. |