170 lines
14 KiB
Markdown
170 lines
14 KiB
Markdown
# HHT implicit dynamics
|
||
|
||
## 범위와 현재 상태
|
||
|
||
2026-10-18 후속 사용자 지시로 polar 반복 12→1회, 관성 회전/Jacobian 급수 32→3차,
|
||
질량 대칭·null/Gram·분해 복원 검사 1e-12→1e-3의 local 근사 실험을 적용했다.
|
||
최초 엄격한 기준의 관련 요소 46개 중 5개가 실패했다. 후속 사용자 지시로 관성·접선·
|
||
HHT 물리 테스트의 오차 기준을 1e-3으로 완화했다. 이후 Abaqus2025 공개 field 규칙을
|
||
양의 증분의 실제 종료에 연결하고 accepted 평균 이력·hht-log-v2를 구현했다.
|
||
2026-10-19 Native Debug/CTest 전체는 각각998개 중987 PASS·10 FAIL·1 SKIP이다.
|
||
새 정책의 실제 조기 종료·rollback·강체 병진 oracle는 통과했으나 D3·drilling·C08와
|
||
후속 mass-null/triad 검사가 실패한다. 실제 비선형 후보 시간 정확도는 미검증이다.
|
||
아래 정식화의 유한회전 항등식과 과거 검증을 이 근사본의 통과로 승계하지 않는다.
|
||
변경 범위와 실제 검증 한계는 [실험 기록](../abaqus-tolerance/local-kernel-experiment.md)을 따른다.
|
||
|
||
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의 결과다. 2026-10-19 같은 승인 local 근사본의 strict 원본을
|
||
6350.7895521초/native0으로 완료했고 정식 U 비교는 통과했다. 현재 field 후보는 수치 실패로
|
||
공식100증분을 실행하지 않았으며 새 원본 비교·비선형 시간수렴·전체 물리 판정과 speedup은
|
||
미성립이다. 전체 회귀는 위 수치대로 실제 실행했으며 전체 green이 아니다.
|
||
[수렴 정책 실험 결과](../abaqus-tolerance/results.md)에 현재 근거를 보존했다.
|
||
|
||
## 채택 방법과 산술 의미
|
||
|
||
현재 물리·관성은 [관성 상세](formulation-inertia.md), 시간적분·graph는
|
||
[축소 좌표](formulation-reduced-coordinate.md), plane basis·scaling은
|
||
[고정 null 기저](formulation-fixed-null-basis.md)를 순서대로 읽는다.
|
||
[기본 정식화](formulation.md)의 full-coordinate recurrence는 비교 이력이다.
|
||
초기 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/<n>`의 주요 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는 실행 중 메모리에 있어 강제 종료 로그만으로 복구되지 않는다.
|
||
Field 평균 후보는 반복마다 재계산하고 accepted 증분에서 한 번 갱신한다. State의 staged
|
||
copy에서 commit을 검증하고 로그 flush 성공 뒤 state·private/flux history를 공개한다.
|
||
누적 frame 이력 복사 비용이 있으며 공식 후보 elapsed에 포함할 대상이다.
|
||
|
||
## 검증 기준·교훈·남은 한계
|
||
|
||
현재 양의 증분은 `abaqus2025-field-on-fesa-v1`로 종료한다. 힘/모멘트 flux 평균과
|
||
full endpoint u/total-φ의 실제 보정·증분을 사용하며 normal/zero-flux/linear/nonquadratic과
|
||
추정 보정을 구분한다. 기존 N2 full force/moment·q/v/a/A의1e-10은 strict 진단이다.
|
||
PrivateCorrectionEqual과 회전 전용 보정의 기존 strict 선택 자격은 유지했다.
|
||
Frame0·후속 hidden/rank/regularity·전역 평형1e-8도 별도 gate다.
|
||
실제 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을 요구한다.
|
||
이번 승인 근사 실험의 관련 테스트 오차는1e-3이다. 기존 strict algebra의 finest1e-4
|
||
검사도 그대로 통과했지만 실제 비선형 후보의 refinement·finest 오차 판정은 미완료다.
|
||
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·현재 field 후보의 원본 HDF5 비교·전체 물리 closure가 남는다.
|
||
전체 회귀의 실제 실패와 해상도 SKIP을 과거 통과로 덮지 않는다.
|
||
|
||
## 보존한 과거 수식과 연구의 위치
|
||
|
||
| 원본 | 현재 해석 |
|
||
| --- | --- |
|
||
| [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나 엄밀한 전역 오차 보증을 자동 대체하지 않는다. |
|
||
|
||
## 통합된 실행 경계
|
||
|
||
공통 [AnalysisProcedure](../../include/fesa/analysis/analysis_procedure.h) 선택 뒤 reduced 절차를 실행한다.
|
||
[ShellHhtIntegrator](../../src/fesa/analysis/hht_reduced_integrator.h)는 predictor/rate 복원을,
|
||
[EquilibriumStep](../../src/fesa/analysis/equilibrium_algorithm.h)은0부터 시작하는 correction과
|
||
typed pending을 분리한다. History는 procedure가 소유하고 동일 acceptance 뒤 commit한다.
|
||
|
||
2026-10-18 사용자가 장시간 HHT 검증을 중단하고 정적해석만 검증해 다음 단계로
|
||
진행하도록 변경했다. Native 전체 실행의 부분 stdout·기존 결과와 비정적 테스트는
|
||
보존했다. 당시 interrupted run·finest binary64 noise의 미판정은 현재 HHT 전체 PASS나
|
||
수치 FAIL로 승계하지 않았다. 완료된 개별 검사와 중단된 C08b 및 병합 선별 검사의
|
||
범위·근거는 [통합 현황](../cpp-object-oriented-modular-refactoring/README.md)을 따른다.
|
||
이 실행 범위 변경은 정식화·허용치·시간수렴 요구 자체의 변경이 아니다.
|