feat: adopt lumped mass and reduced-coordinate shell HHT

Integrate Hex8 mass verification and fixed-null-basis shell dynamics with numerical and physics handoff evidence. Preserve interrupted reference and full-validation status; full integration validation is deferred until after performance optimization.
This commit is contained in:
KOKO\Mimi
2026-10-13 16:57:19 +09:00
parent ede137c6b4
commit eaa5cbeb21
110 changed files with 15274 additions and 971 deletions
+14 -4
View File
@@ -1,9 +1,15 @@
# HHT I/O 계약
- 상태: `io-contract-defined; implementation-and-readback-pending`, 2026-09-22.
- 상태: `reduced-shell-schema-v2-approved; implementation-and-readback-pending`, 2026-10-12. 기존 v1 계약은 아래에 이력으로 보존한다.
- Owner: `io-definition-agent`. 메인 인계로 새 procedure의 아래 공개 subset/schema를 확정한다. 물리·수치 기준의 원본은 [formulation](formulation.md), [inertia](formulation-inertia.md), [numerical-controls](numerical-controls.md)다.
- 기준: [AGENTS](../../AGENTS.md), [프로젝트 PRD](../PRD.md), [공통 ADR](../ADR.md), [ARCHITECTURE](../ARCHITECTURE.md), [Feature PRD](PRD.md), [Feature ADR](ADR.md). 기존 문서의 `I/O pending`은 본 계약 이전 상태다.
## 현재 승인 계약과 과거 계약의 구분
2026-10-12 사용자는 실제 shell의 reduced-coordinate HHT 구현·검증과, 채택 시 public full A를 진단용 filter combination으로 표시하는 shell schema v2를 승인했다. 새 shell 결과의 권위 계약은 [reduced-coordinate I/O](io-reduced-coordinate.md)이며, 아래 §1–2의 입력·identity·physical quantity와 §3–4의 dataset inventory·비교 mapping을 해당 문서의 변경사항과 함께 적용한다. 아래 `schema_version=1` 및 predictor-driver A 의미는 과거 full-coordinate shell 결과의 계약이다. v1 파일과 당시 evidence를 보존하며 v2 결과로 재표시하지 않는다.
v2는 shell HHT에 한정한다. Solid HHT, static, eigen 결과와 입력 subset·질량·시간 schedule·source identity·U/UR tolerance는 변경하지 않는다. 계약 승인과 writer/readback/reference 검증 완료는 구분한다.
## 1. 입력과 호환성
기존 [비선형 I/O](../nonlinear-static-newton-raphson/io.md)의 lexical parsing, source target resolution, part/identity instance, node/set, S4/S4R → FESA-MITC4, centered homogeneous shell, isotropic elastic material, geometry와 chart 검증을 상속한다. 아래 절차 차이만 dynamic에 적용한다. 기존 static/frequency 입력·결과의 의미나 schema는 바꾸지 않는다. Source S4/S4R 표기는 보존하며 Abaqus 내부 요소·관성·시간 알고리즘 동등성을 주장하지 않는다. 공개 Abaqus 관례의 근거는 이미 조사한 [research](research.md#research)의 관측 가능한 입력 의미에 한정한다.
@@ -23,7 +29,7 @@
`*NODE OUTPUT`, `*ELEMENT OUTPUT` 등 child selectors와 다른 OUTPUT parameter/frequency는 미지원이다. 원본 [INP](../../reference/shellNL-dyn-meshfine/shellNL-dyn-meshfine.inp)는 위 root 요청만 사용한다. 초기조건 keyword, amplitude, damping, distributed/follower load, contact, 비탄성, 다른 dynamic 요소, 다중 step/restart는 fail closed다. 기존 shell section의 source integration-point field `5`는 기존 allowlisted warning 의미를 유지하며 FESA 관성 적분 선택이 아니다.
공개 계수는 기본 `alpha=-0.05,beta=0.275625,gamma=0.55`만 제공한다. Internal 검증용 alpha=0은 formulation의 결합계수로 실행할 수 있으나 INP 지원 확대가 아니다. 질량은 `consistent-kinetic`; 사용자 선택을 lumped fallback으로 바꾸지 않는다. 초기 frame은 `0+`, q0=v0=0, F0=F*, A0=a0이며 physical a0와 null 일관성은 N3에 따라 구한다. 하중은 이후 모든 endpoint에도 전값이다.
공개 계수는 기본 `alpha=-0.05,beta=0.275625,gamma=0.55`만 제공한다. Internal 검증용 alpha=0은 formulation의 결합계수로 실행할 수 있으나 INP 지원 확대가 아니다. 2026-10-11 사용자 승인에 따라 HHT 질량은 `nodal-lumped-kinetic`이다. `rho*N_i*dV0`의 절점별 운동에너지 측도로 M, I, c, 관성 접선, kinetic energy와 physical momentum/rates를 일관되게 계산한다. 이는 shell 회전 관성을 포함한 절점 block이며 scalar diagonal 질량이나 Hex8의 full reference matrix row-sum을 뜻하지 않는다. 질량 선택 keyword/API는 추가하지 않는다. 초기 frame은 `0+`, q0=v0=0, F0=F*, A0=a0이며 physical a0와 null 일관성은 N3에 따라 구한다. 하중은 이후 모든 endpoint에도 전값이다.
## 2. Identity, 시간, state 경계
@@ -80,11 +86,13 @@ struct DynamicAcceptedFrameState {
Momentum/rates는 전체 두께 volume kinetic kinematics로 구한 physical quantities, 원점 O=(0,0,0)에 대한 global angular momentum이다. Chart generalized momentum을 spatial angular momentum으로 표시하지 않는다. `global_equilibrium`은 N6의 applied+support minus momentum-rate이며 current arms와 spatial moments를 사용한다. Hidden vectors는 N3의 raw ψ/1차/2차 defects, `_scale`는 그 항별 uncancelled norm scale다. n_z=0은 empty vector, empty free channel metric 저장값 0은 해당 constraint inventory와 함께 N/A로 해석한다. NaN sentinel을 사용하지 않는다. Hidden 1·2차 defect는 진단/시간수렴 대상이며 Newton 수렴 기준으로 임의 승격하지 않는다.
## 3. 공식 HDF5 schema v1
## 3. 과거 full-coordinate shell HDF5 schema v1
공식 경로는 input lexical sibling `<stem>_results.h5`, CLI/lock/log/atomic file lifecycle은 기존 I/O §7.1을 상속한다. Dynamic log는 `nsnr-log-v1` 또는 target_factor를 사용하지 않는다. 기존 log stream에 dynamic diagnostic을 기록할 경우 `record=dynamic-newton-iteration`, `schema=hht-log-v1`, increment/time/iteration/stage와 N2 metric의 raw numerator/scale/branch/pass를 명시한다. 정적 전용 tolerance를 재사용하지 않는다.
Schema identity는 `(feature_id,analysis_procedure,schema_version)`다. `/metadata` attribute: `feature_id=hht-implicit-dynamics`, `analysis_procedure=hht-implicit-dynamics`, `schema_version:uint64=1`, `mass_formulation=consistent-kinetic`, `internal_formulation=FESA-MITC4-total-lagrangian`, `initial_state=zero-q-v-step-load-0+`, `acceleration_convention=physical-endpoint-and-auxiliary-separated`, `source_step_name`, `step_name=Step-1`, `alpha/beta/gamma:float64`, `initial_increment/time_period:float64`, `increment_count/maximum_increments:uint64`. 기존 solver_version/source_input_identity/unit_system_label도 필수, 단위 label은 `consistent-input-units`이며 SI로 추정하지 않는다.
Schema identity는 `(feature_id,analysis_procedure,schema_version)`다. `/metadata` attribute: `feature_id=hht-implicit-dynamics`, `analysis_procedure=hht-implicit-dynamics`, `schema_version:uint64=1`, `mass_formulation=nodal-lumped-kinetic`, `internal_formulation=FESA-MITC4-total-lagrangian`, `initial_state=zero-q-v-step-load-0+`, `acceleration_convention=physical-endpoint-and-auxiliary-separated`, `source_step_name`, `step_name=Step-1`, `alpha/beta/gamma:float64`, `initial_increment/time_period:float64`, `increment_count/maximum_increments:uint64`. 기존 solver_version/source_input_identity/unit_system_label도 필수, 단위 label은 `consistent-input-units`이며 SI로 추정하지 않는다.
이번 승인은 `mass_formulation`의 공개 값과 그 물리 의미를 변경한다. Dataset path/field/shape/dtype 및 schema_version=1은 유지한다. 과거 `consistent-kinetic` 결과 파일은 당시 계산의 evidence로 보존하며 현재 계약의 reader/self-check/comparator에서는 mass identity mismatch로 실패한다. Metadata만 바꾸어 과거 결과를 재사용하거나 같은 schema_version을 같은 mass 의미로 간주하지 않는다. 입력·출력 identity와 단위·component·reference projection, 승인 tolerance 및 HHT 계수는 그대로다. 기존 MITC4 고유치의 nodal block lumped 정책은 변경하지 않는다.
모든 numeric data는 finite-first, float64=IEEE binary64 little-endian, integer는 fixed width little-endian, string은 UTF-8 variable length다. Mandatory datasets는 contiguous/uncompressed. 아래 N=nodes, E=elements, F=Nincrements+1이다. Paths의 `<n>`은 leading-zero 없는 decimal ordinal이다.
@@ -148,6 +156,8 @@ Energy의 W=F*ᵀ(qn-q0), defect=T+Uphys+Udrill-E0-W다. Initial physical energy
## 5. 인계 및 확인 상태
2026-10-11 질량 정책 변경의 I/O 계약을 반영했다. 새 mass identity에 대한 production write/readback와 원본 비교는 메인이 새 실행 evidence로 확인해야 하며, 아래 최초 계약 정의 당시의 상태나 과거 consistent 결과를 현재 통과로 승계하지 않는다.
입력 원본의 procedure/density/BC/CLOAD/output 요청과 기존 semantic/prepared_analysis/state/writer 경계를 대조했다. 이번 변경은 이 문서뿐이며 source/test/reference artifact는 수정하지 않았다. 문서 링크와 diff를 정적 검사한다. Build/test·dynamic HDF5 readback·reference 비교는 문서 owner의 작업이 아니므로 미실행이다.
상위 물리 선택 충돌은 없다. 구현에 아직 필요한 upstream quantity는 별도 Udrill energy, exact inertia/kinetic energy, spatial rates, physical momentum/rates, N2 uncancelled per-row scale 및 N3 hidden defects다. 기존 nonlinear recovery가 Uphys만 반환한다는 이유로 Udrill=0 또는 누락으로 바꾸면 안 된다. 메인은 이 문서를 main report에서 연결하고 공개 subset/schema 결정 근거를 Feature ADR에 기록한다. 이 계약 정의만으로 solver/physics gate가 통과한 것은 아니다.