Files
FESADev/docs/hht-implicit-dynamics/physics-evaluation-fixed-null-basis.md
T
KOKO\Mimi eaa5cbeb21 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.
2026-10-13 16:57:19 +09:00

35 lines
8.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 고정 null-basis 물리 평가
2026-10-13. 범위: [HHT-ADR-018](ADR.md)의 guard·최종 Neumaier C09·filter-factor C08a epoch 결과. **C09와 공식 C08a 7 grids의 제한된 근거는 확보했으나 원본 reference·C08b·전체 물리 검증은 아직 닫히지 않았다.** 현재 계약·허용값을 변경하거나 release를 승인하지 않는다.
## 확인 결과
| 근거 | 관찰과 물리 의미 | 한계 |
| --- | --- | --- |
| [최종 C09 native](../../.dryforge/hht-remediation-20261012/adr018-neumaier-c09-debug.native.json), [raw](../../.dryforge/hht-remediation-20261012/adr018-neumaier-c09-debug.raw.log) | Configured Debug native0, 1/1 PASS, 217.24 s. Serial 병진 2회·TBB 병진 1회·proper-Q 병진 1회·단일 shell 비균일 하중 회전 및 proper-Q 회전 각 1회, 총 6 trajectories/각 3 frames. 이전 guard native0/117.23 s와 별개 새 실행 | 짧은 이력의 결과이며 C08 시간수렴이나 일반 partial-BC covariance가 아님 |
| [C09 source](../../tests/unit/analysis/hht_dynamic_procedure_test.cpp) | 전 frame q/v/physical a/public A·힘/반력·triad/director covariance `1e-10`; 반복/partition의 source identity·state·energy·log 비교. 원 병진의 균일 U1, zero U2/U3/rotation `1e-12`, physical/drill energy / `E_ref=200` 각각 `<=1e-10`, +X 변위와 회전 사례의 nonzero rotation 검사 | `EXPECT_DOUBLE_EQ`는 GoogleTest 부동소수점 동등성 검사다. 로그 등 exact 비교와 구별한다. 실제 raw state dump의 독립 재계산은 제공되지 않음 |
| [경계 log](../../.dryforge/hht-remediation-20261012/adr018-guard-ca-boundaries-debug.log) | 12/12 PASS, 2.86 s. 실제 finite initial-null, minimum-axis tie, partial BC의 exact zero/null 절단, graph와 횡단성의 구별, basis radius 및 actual lifted-q 흡수 경계 포함 | 경계/표현 evidence이며 유한회전 전체 운동이나 N6 전체 balance의 독립 대조가 아님 |
| [공식 C08a native](../../.dryforge/hht-remediation-20261012/adr018-filter-c08a-release.native.json), [raw](../../.dryforge/hht-remediation-20261012/adr018-filter-c08a-release.raw.log) | Release native0, C08a 7 grids 및 `BasisLiftedAlgorithmicCorrectionUsesHhtFilterFactor` 2/2 PASS, 703.90 s. 전체 시점 normalized q/v/physical-a error·마지막 두 refinement·최종 세 grid N7·모든 frame hidden1/2의 기존 기준 통과 | Private manufactured forcing/초기율의 rigid orbit이며 공개 입력 지원·free deformable C08b·전체 물리 PASS가 아님 |
| 원본 reference | [captured identity](../../.dryforge/hht-remediation-20261012/adr018-guard-reference-identity.json), staged INP/CSV로 Release CLI 진행 중 | 완료 native record·닫힌 final HDF5·fresh comparator·독립 물리 계산 없음. 과거 reference PASS를 승계하지 않음 |
C09 병진은 무하중 보존 사례가 아니다. 두 개의 면적 1 shell, `rho=2`, `t=0.1`로 총질량 `m=0.4`이고 8 nodes 각각 +X 하중 1이므로 `F_X=8`, `a_X=20`이다. 초기 정지의 정확한 강체 한계는 `t=0.25`에서 `(u_X,v_X,T,P_X,W)=(0.625,5,5,2,5)`, `t=0.5`에서 `(2.5,10,20,4,20)`이다. 이는 방향·zero strain·positive T·`T=W`의 예상 계산이다. 현재 source에는 이 수치와 실제 결과의 직접 assertion이 없으므로 exact-limit 일치를 주장하지 않는다. 단위는 consistent-input의 length/time/mass/force 계열이며 SI로 단정하지 않는다. [독립 계산과 hashes](../../.dryforge/hht-remediation-20261012/fixed-basis-physics/c09-assessment.json)를 보존했다.
C08a의 `h=1/16..1/1024`, `T=1` raw 요약을 독립 재계산하여 [제공 metrics](../../.dryforge/hht-remediation-20261012/adr018-filter-c08a-metrics.json)의 마지막 두 refinement 차수·최종 세 grid separation을 정확히 재현했다. 최소 차수는 `1.8050023661548598 >=1.8`, 최소 N7 separation은 `157.61567568504597 >100`이다. Finest 전체 시점 error는 순서 `(u,phi,v_u,v_phi,a_u,a_phi)`로 `(3.4780e-8,5.9453e-8,4.1649e-8,8.3575e-8,2.5080e-7,7.3119e-6)`이며 모두 `<=1e-4`다. 모든 grid `phi_max>0.547 rad>0.5 rad`, 최대 hidden1/2 normalized 값은 각각 `1.65298e-16/4.84520e-16`이다. Physical a의 오차를 A나 diagnostic recovery의 오차로 대체하지 않았다. Force는 독립 volume oracle의 제조 하중이고 동일 kinetic oracle의 T/P/L 대조 assertion이 각 accepted frame에 적용된다. Raw state의 외부 replay는 없으며 force/moment 전체 balance의 독립 HDF5 검산을 대신하지 않는다. [독립 raw 요약 계산](../../.dryforge/hht-remediation-20261012/fixed-basis-physics/fresh-c09-c08a-assessment.json)에 수치와 artifact SHA를 기록했다.
## Reference 독립 계산 계획
[준비된 private script](../../.dryforge/hht-remediation-20261012/fixed-basis-physics/analyze_reference.py)는 성공 native record와 101-frame final HDF5가 있을 때만 계산한다. `uv run --offline --with numpy --with h5py python <script>`의 기존 격리 cache를 사용하며 shared interpreter·solver·결과 artifact를 수정하지 않는다.
실행 경로는 보존된 **과거 ADR013/schema1** HDF5로 별도 adapter를 사용해 점검했다. 101 frames의 parser·독립 director 도함수·kinetic/balance·resultant 계산이 완료됐고 derivative 배열은 finite였다. 현재 v2 parser는 이 과거 파일을 metadata schema에서 거부했다. 과거 final SHA는 당시 native record와 일치하며 파일을 수정하지 않았다. [Plumbing 기록](../../.dryforge/hht-remediation-20261012/fixed-basis-physics/plumbing-summary.json)과 [과거 전용 계산](../../.dryforge/hht-remediation-20261012/fixed-basis-physics/historical-plumbing.json)은 현재 epoch의 physics PASS가 아니다. Fresh v2 parser는 marker·A semantics·읽는 result dataset version·HHT 계수·101-frame identity를 fail-closed로 확인한다.
- 저장 reference geometry에서 `rho*t*N_i`를 적분하여 nodal `m_i`와 `j_i=m_i*t²/12`를 구한다. 이 식은 centered 평판 모델에 한정된다.
- Production 회전 함수 대신 exponential block series로 `d`, `dDot`, `dDDot`를 구하고 physical a로 관성력·T·kinetic power·Pdot/Ldot를 재계산한다.
- `sum(F+R)-Pdot`, `sum(x×F+x×R+M_support)-Ldot`를 현재 arm과 공간 moment로 검사한다. 원 N6의 상쇄 전 nodal/thickness-point norm 합과 `1e-8`을 사용한다.
- 초기 q/v, constrained q/v/a/A의 exact0, 하중 source/방향, generalized reaction selector, residual 정의, public `A=(1+alpha)a-alpha*a_old`, `T/Uphys/Udrill/W/defect`와 finite strain/stress/resultants를 확인한다. 저장 strain과 `N=t*Cps*epsilon`, `M=t³*Cps*kappa/12`, `Q=t*(5/6)*G*gamma`의 차이는 정보성 수치로 보고한다.
## 잔여 위험과 범위
이전 guard의 [Debug identity](../../.dryforge/hht-remediation-20261012/adr018-guard-ca-debug-identity.json)와 controller 변경/복원 한계는 과거 evidence로 유지한다. 최종 C09 [pre](../../.dryforge/hht-remediation-20261012/adr018-neumaier-final-debug-identity.json)/[post](../../.dryforge/hht-remediation-20261012/adr018-neumaier-c09-post-identity.json)에서 production 및 binary는 일치한다. Controller post hash 차이는 [timeline](../../.dryforge/hht-remediation-20261012/adr018-neumaier-c09-edit-timeline.json)의 `CTestFinishUtc=04:43:13.6721482Z` 뒤 `ControllerLastWriteUtc=04:48:35.6268178Z` 수정이며 binary SHA는 유지됐으므로 해당 완료 실행과 후속 source를 구별한다. C08a [pre](../../.dryforge/hht-remediation-20261012/adr018-filter-release-identity.json)/[post](../../.dryforge/hht-remediation-20261012/adr018-filter-c08a-post-identity.json)는 7/7 source/binary 일치다. 두 manifest 모두 C09 test source 자체를 포함하지 않으며 현재 snapshot을 당시 동결 identity로 대신하지 않는다.
HDF5에는 original uncancelled element scale·hidden vectors·private basis/history가 없어 독립 full N2/N3/N4/CA/N7 인증이 불가능하다. C08a의 separation은 raw에 명시된 `frozen-operator-first-order-indicator`를 포함한 기존 estimator 기준의 근거이며 보편 whole-model forward-error certificate가 아니다. Actual-q guard의 반환은 graph convergence 통과가 아니며 원 full endpoint gate가 그대로 판단한다. Reference의 복합 −X/−Y/−Z 하중에는 단순 반사대칭 zero-response를 요구할 수 없다. 원본의 작은 변위·성긴 `h=0.1`은 큰 회전/hidden-rate 안정성이나 시간 차수의 근거가 아니다. 원본 reference native/101-frame HDF5·fresh comparator·독립 kinetic/balance, 공식 C08b 8 grids 및 전체 configured Debug 검증은 진행 중이며 완료로 처리하지 않는다.