4.9 KiB
HHT Implementation Plan
Goal: 일관질량 HHT shell 동적 해석을 원본 입력부터 공식 HDF5·전체 reference 비교·독립 물리 평가까지 구현한다.
Architecture: Domain의 별도 dynamic step과 별도 동적 state/procedure/writer를 연결한다. 기존 MITC4 내력·objective drilling은 보존하고 유한회전 consistent 관성을 정확히 미분한다. 물리적 a와 보조 A를 분리하고 candidate 검증 후에만 frame·최종 파일을 반영한다.
Tech Stack: C++17, MSVC x64 Debug, CMake/Ninja/CTest, MKL/TBB/HDF5.
Spec: 정식화, 관성, 내부 기준, 검증 사례, I/O, Reference.
실행 범위와 소유권
사용자가 I/O definition, implementation, physics evaluation을 모두 요청했으므로 기존 정식화의 추천 a/A 분리와 0+ 초기화를 구현 대상으로 채택한다. 메인은 통합·procedure·검증을 맡고 독립적인 kernel/input/writer 묶음만 구현 담당자에게 할당한다. 현재 checklist는 PRD에만 유지한다. 후속 사용자 요청에 따라 검증 묶음별 로컬 commit을 수행하며 push는 포함하지 않는다.
| 묶음 | 파일·책임 | 검증 |
|---|---|---|
| 입력 | model_types.h, domain.h/.cpp, Abaqus mapping: DynamicStepDefinition, StepDefinition::Dynamic/IsDynamic, Domain::Dynamic |
원본 INP, STEP·DIRECT·density·zero BC·force subset, unsupported·invalid input; static/eigen 회귀 |
| 관성 | elements/nonlinear_mitc4_inertia.h/.cpp: Create(nodes,frames,section,material,density), Evaluate(trial,v24,a24) → M/I/c/DqI/DvI/T/P/L/rates |
C05–C06 독립 volume·미분·null·좌표/단위 oracle |
| 상태·출력 | analysis/dynamic_analysis_state.h/.cpp, results/dynamic_results_writer.h, io/hdf5/dynamic_hdf5_results_writer.h/.cpp |
frame0 포함 commit/rollback, finite/identity/schedule 검증, schema readback·atomic failure |
| 시간적분 | analysis/hht_time_integration.h/.cpp와 tests |
C01–C04 정확해·HHT 환원·moving-null·초기화·소산 |
| 동적 절차 | analysis/hht_dynamic_procedure.h/.cpp 및 필요한 internal assembly/constraint helper |
초기 positive-range/null solve, 정확한 유효 접선, N1–N7, C07–C11 shell·관성반력·에너지·실패 |
| 통합 | prepared_analysis.h/.cpp, application, CMake 등록 |
원본 CLI 실행·진단·최종 HDF5; 기존 procedures 보존 |
| 비교·물리 | tests/reference/hht_dynamic_reference_*, 보고서와 ignored 실행 evidence |
C12 202 comparison families, 101 frames 전부, 독립 physics evaluation |
구현·검증 순서
각 묶음은 관찰 가능한 실패 사례를 먼저 추가하고 구현 후 관련 CMake target/CTest filter로 확인한다. 아직 없는 API의 컴파일 실패와 수치 oracle 실패를 구별해 기록한다. 코드 소유권이 겹치는 변경은 메인이 직렬로 통합한다. Build는 메인이 단일 경로에서 실행한다.
- I/O 계약의 필드·진단·source/time 연결을 정의하고 기존 문서와 대조한다.
- Input/관성 kernel/동적 state를 구현한다. 관성의 director D3와 convective 항은 production finite difference로 대체하지 않는다.
- HHT predictor와 물리적 endpoint 평형을 연결한다.
A=(q-q_p)/(beta*h*h),v=v_p+gamma*(q-q_p)/(beta*h),a=(A+alpha*a_n)/(1+alpha)이며 tangent는DqI+gamma/(beta*h)*DvI+M/((1+alpha)*beta*h*h)+Kint다. - N2 잔차·correction/rate AND 판정, N3 초기 대수조건, N4 analytic null·positive mass·regularity 및 실패 보존을 검증한다. Backend 성공만으로 frame을 commit하지 않는다.
- Official HDF5 writer와 deterministic comparator를 연결한다. Reference의 source increment로 대응하고 시간 보간·행 평균·값 보정은 하지 않는다.
- 수정 영향에 맞는 검사를 수행하고 최종
python scripts/execute.py로 전체 MSVC Debug build/CTest를 한 번 수행한다. 필수 원본 dynamic reference는 별도 비교 evidence를 남긴다. - 독립 physics reviewer가 실제 결과의 평형·운동량·에너지·coverage를 평가한다. 실패는 현 owner가 수정하며 tolerance를 결과에 맞추어 변경하지 않는다.
Review focus
- a/A 혼동 또는 current M만의 naive HHT 확대: C01–C04와 output readback으로 검출한다.
- 질량 영공간을 작은 질량·fixed UR3 삭제로 처리: C04–C06의 초기·moving-null 사례로 검출한다.
- Initial full STEP force와 초기 acceleration 누락: C02와 원본 frame0의 U/V/A 의미를 대조한다.
- 실패 trial·불완전 HDF5 노출: state/writer 실패 주입 및 기존 최종 파일 보존을 검사한다.
- 101-frame identity·reference subset 오류: C12의 누락·추가·중복·nonfinite·wrong-time mutation을 사용한다.