docs: consolidate solver knowledge and preserve formulation originals

This commit is contained in:
KOKO\Mimi
2026-10-17 22:34:12 +09:00
parent 149e7e2de8
commit d76602a0f1
19 changed files with 1740 additions and 380 deletions
+118 -59
View File
@@ -1,70 +1,129 @@
# HHT implicit dynamics
## 목적과 현재 상태
## 범위와 현재 상태
2026-10-11 [HHT-ADR-012](ADR.md)에 따라 nodal lumped kinetic mass로 변경한다.
변경본의 관성·convective 항·접선·state/HDF5 관련 Debug 검사38개와 Python 비교기137개가
통과했고, 같은 production 소스의 Release 원본 U 101-frame 비교 PASS·UR 경고200건을
확인했다. 독립 수치·물리 검토는 bounded PASS다. [채택 보고서](../hex8-structural-analysis/lumped-mass-adoption.md)에
검증 구성과 한계를 기록한다. 새 전체 Debug CTest789개는 자연 종료했다(native8:
784 PASS·4 FAIL·1 SKIP). Stale Hex8 test 두 개는 수정 후 공식 focused 검사에서 PASS다.
이 실행 당시 C08a 시간 정확도 FAIL·C08b 새 Newton 회전 예외 및 C04a SKIP이 남았다.
2026-10-12 사용자 요청으로 [두 시작점 정책](newton-start-policy.md)을 구현했다. 관련37개
Debug 회귀와 독립 수치 검토가 완료됐다. 전체802 CTest는 제외 없이 자연 종료했다
(11384.61초·native8:799 PASS·C08 정확도 FAIL2·기존 C04a SKIP1). 실제 C08b의5개 grid와
새65-frame runtime 회귀에서 회전 예외가 해소됐으며 fresh 원본 U101 families PASS·
UR 경고200건과 독립 kinetic/balance 대조를 확인했다. Source·원본·binary identity는
검증 전후 일치한다. Runtime 해결을 시간 정확도 해결로 해석하지 않는다.
다음 기존 consistent 구현의 이력과 원본 변위 통과를 현재 전체 검증으로 승계하지 않는다. 실제 shell의
C08a/C08b 시간수렴 실패는 미해결이다. 구현됨과 기능 검증 완료를 구분한다.
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)을 함께 본다.
2026-10-12 후속 [HHT-ADR-014](ADR.md)로 P 판정·C08b 최종 finer grid와 reduced shell
HHT/schema v2 구현을 승인받았다. 실제 채택식은
[축소 좌표 정식화](formulation-reduced-coordinate.md),
[carried-A arithmetic/noise](formulation-carried-a-noise.md),
[schema v2 상세](io-reduced-coordinate.md)를 따른다. 현재 구현과 검증은 진행 중이며
기존 v1 결과·실패 이력을 변경본 통과로 승계하지 않는다.
## 채택 방법과 산술 의미
- [PRD](PRD.md)·[ADR](ADR.md)·[요구사항](requirements.md): 범위·미해결·현재 checklist.
- [정식화](formulation.md), [유한회전 관성](formulation-inertia.md),
[가속도 복구 후보](formulation-acceleration-recovery.md): 채택식과 미채택 후보 구분.
- [I/O](io-contract.md), [reference 계약](reference-model.md),
[전체 변위 비교표](displacement-comparison-tables.md).
- [수치 기준](numerical-controls.md), [검증 사례](verification-cases.md),
[수학 검산](numerical-review.md#numerical-review), [연구](research.md#research).
- [구현 검토·실패·수정](implementation-numerical-review.md), [물리 평가](physics-evaluation.md).
- [Consistent/lumped 질량 비교 실험](mass-comparison.md): 채택 전 private 비교 이력과 후속 승인; production 재검증과 구별.
- [Newton 회전 실패 원인·해결 후보](newton-rotation-investigation.md): 변경 전 moving-null 접선 상쇄의 독립 대조와 private 후보 실험.
- [두 시작점 정책의 구현·검증](newton-start-policy.md): HHT-ADR-013 실제 정책·시행착오·현재 evidence·적용 한계. C08 시간 정확도와 구분.
- [시간 정확도·P 감소 실패의 해결 후보 조사](research.md#temporal-remediation-research): 축소 좌표·속도 수준 DAE 적분·시간 해상도·합산의 조사와 채택 경계. Solver 변경 또는 실패 폐쇄를 뜻하지 않는다.
- [시간 정확도·P 후속 검증](temporal-remediation.md): 소형 DAE 독립 검산, 실제 finer-grid와 carried-A private 산술 후보, P strict-decrease 계약 문제. 기존 C08 FAIL과 미채택 알고리즘을 구분한다.
- [Reduced C08 구현](implementation-c08-reduced.md): 실제 controller·N7·전체 산술 이력 및 좌표 증분 누적의 경계.
- [C08a 추가 refinement 결정](c08a-refinement-proposal.md): HHT-ADR-015로 승인된 두 변경과 승인 전 진단 evidence. 변경본 공식 검증은 별도로 수행한다.
- [N3 좌표 표현 결정](c08-n3-coordinate-representation-proposal.md): HHT-ADR-016으로 승인된 exact pair 증분 검사와 RN-even 저장 검사. 승인과 변경본 검증 완료를 구분한다.
- [병진 유지 Newton 명세](c09-channel-newton-proposal.md), [독립 검토와 N7 대응](numerical-review-channel-newton.md): HHT-ADR-017로 승인된 제한 보정·부분 행렬 N2-L 검사·full-model defect 보존. [C09 산술 진단](c09-newton-rounding-diagnostic.md)의 endpoint 존재증거와 자연 trajectory 검증을 구분한다.
- [Channel Newton 구현과 실행 기록](implementation-channel-newton.md): private helper/자연 proper-Q 진단과 configured 검증의 범위를 구분한다.
- [유한회전 공변성 실패 진단](channel-newton-covariance-diagnostic.md), [초기 null 직교 보완공간 제안](fixed-null-basis-proposal.md): 실제 selector recurrence 반례와 HHT-ADR-018로 승인된 basis/integrator 변경의 경계.
- [고정 null 기저 상세 정식화](formulation-fixed-null-basis.md), [독립 수치 검토](numerical-review-fixed-null-basis.md): sparse projection/lift, 혼합 부분구속 chart, augmented scaled operator, 초기 상태와 CA/N7의 구현 계약. 정적 수식 검토와 변경본 실행 검증은 별도다.
- [고정 null 기저 구현과 실행 기록](implementation-fixed-null-basis.md): 실제 scaled solve, basis 계수 오차 반경, global 좌표 반복 감지와 현재 검증의 범위.
- [고정 null 기저 물리 평가](physics-evaluation-fixed-null-basis.md): 새 C09의 실제 검증 범위, 강제 강체 병진의 독립 한계 계산과 reference 물리 검산의 진행 상태.
- [사용자 중단 시점 비교](interrupted-validation-comparison.md): Debug44개 완료와 Release 요약 일치, 원본99증분의 수렴 로그, 현재 HDF5 부재로 인한 Abaqus 비교 한계 및 후속 실행 순서.
[기본 정식화](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가 없으면 실패한다.
환경·명령은 [operations](../operations.md)를 따른다. I/O의 지원 `*DYNAMIC, DIRECT` subset과 고정 HHT 계수,
출력의 물리적 가속도와 보조 acceleration 구분을 확인한다.
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를 구성할 수 없다.
## 재사용 Handoff
관성력 `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)는 채택 경로와 다른 후보를 설명한다.
Eigen의 기존 nodal block lumped mass는 유지하고 HHT도 동일한 scalar moments의 nodal kinetic measure를 사용한다. HHT의 회전 의존 M·convective force·접선과 운동량은 같은 measure로 계산하며 scalar diagonal 치환은 하지 않는다. Total rotation-vector
chart의 generalized moment와 spatial moment도 다르다. Physical a와 algorithmic A를 바꾸어
쓰지 않으며 moving-null 제약과 동적·대수 초기평형을 유지한다. 같은 trial에서 full residual,
inertia와 tangent를 계산하고 실패 candidate가 accepted history를 변경하지 않게 한다.
## 입력·출력·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)을 따른다.
C08 두 실패는 열해석 전후 전체617개 회귀에서도 baseline metric과 동일했다.
가속도 복구 후보는 아직 채택하지 않았다. C09–C11의 잔여 coverage와 전체 physics 완료도
남아 있다. 굽힘 단면력의 두께 계수 `M=t^3 C kappa/12` 수정은14 focused tests 및 원본
HDF5 대조의 별도 evidence이며 동해석 전체의 완료를 뜻하지 않는다.
과거475 PASS/1 SKIP의 제외 실행과 최신 전체 회귀를 합치지 않는다.
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는 실행 중 메모리에 있어 강제 종료 로그만으로 복구되지 않는다.
## 검증 기준·교훈·남은 한계
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나 엄밀한 전역 오차 보증을 자동 대체하지 않는다. |