eaa5cbeb21
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.
35 lines
8.5 KiB
Markdown
35 lines
8.5 KiB
Markdown
# 고정 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 검증은 진행 중이며 완료로 처리하지 않는다.
|