Files
FESADev/docs/hht-implicit-dynamics/implementation-plan.md
T

4.9 KiB
Raw Blame History

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는 메인이 단일 경로에서 실행한다.

  1. I/O 계약의 필드·진단·source/time 연결을 정의하고 기존 문서와 대조한다.
  2. Input/관성 kernel/동적 state를 구현한다. 관성의 director D3와 convective 항은 production finite difference로 대체하지 않는다.
  3. 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다.
  4. N2 잔차·correction/rate AND 판정, N3 초기 대수조건, N4 analytic null·positive mass·regularity 및 실패 보존을 검증한다. Backend 성공만으로 frame을 commit하지 않는다.
  5. Official HDF5 writer와 deterministic comparator를 연결한다. Reference의 source increment로 대응하고 시간 보간·행 평균·값 보정은 하지 않는다.
  6. 수정 영향에 맞는 검사를 수행하고 최종 python scripts/execute.py로 전체 MSVC Debug build/CTest를 한 번 수행한다. 필수 원본 dynamic reference는 별도 비교 evidence를 남긴다.
  7. 독립 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을 사용한다.