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
@@ -1,5 +1,186 @@
# HHT 동해석 물리 평가
2026-10-11 질량 정책 변경: [HHT-ADR-012](ADR.md)에 따라 현재 고유치·HHT는 lumped mass를 사용한다. 아래 consistent 질량을 전제로 한 수식 후보·검토·PASS/FAIL은 해당 시점의 이력이다. 변경본 통과로 승계하지 않으며 현재 수식은 [formulation](formulation.md), 재검증 상태는 [PRD](PRD.md)의 현재 checklist를 따른다.
## 2026-10-12 lumped 변경본 원본의 물리 검토
**판정: 현재 원본 101 endpoints의 nodal inertia·평형·에너지 정의는 제한된 PASS.
C08 시간 정확도 및 기능 전체 통과를 뜻하지 않는다.** `$fem-physics-review`로 새 결과를
읽기 전용 검산했다. 아래 9월 consistent 결과와 구분한다. 상세 값은
[lumped 계산 결과](lumped-mass-physics-details.json)에 있다.
실행 evidence는 `.dryforge/lumped-mass-adoption-20261011/references/shell-hht/`의
`native.json`, `comparison.json`, `shellNL-dyn-meshfine_results.h5`다. Current production
MSVC x64 **Release** CLI exit 0, U의 101 families blocking PASS, UR warnings 200건이다.
HDF SHA-256은 `e08f0ab304174f71c21c6644a6b7075ff5b122b2f7096936ddbcac6bcfbfb4ed`다.
원본/실행 복사본 raw bytes가 같으며 metadata는 `nodal-lumped-kinetic`이다.
이 CLI를 Debug 실행으로 표시하지 않는다.
저장된 reference 좌표·director·두께·밀도에서 **별도 27점 적분**으로
`(m_i,s_i,j_i)=∫ρN_i(1,z,z²)dV₀`를 재구성했다. 저장된 spatial ω/ωdot와 director로
`d_dot=ω×d`, `d_ddot=ωdot×d+ω×(ω×d)`를 계산하고 절점 위치
`x_i=X_i+u_i`의 nodal kinetic measure에서 T/Pdot/Ldot를 직접 합산했다.
Interpolation한 volume velocity의 제곱인 과거 consistent 식을 사용하지 않았다.
이 flat centered 원본은 `s_i=0`, 총질량 `135000.00000000003`, `Σj_i=2812.5000000000014`다.
| 검사 | 현재 최대값 | 해석 |
| --- | --- | --- |
| T 직접 적분 대조 | 절대 `1.77636e-13`, 상대 `3.76138e-15` | N4 `1e-12` 이내 |
| N6 force / moment balance | normalized `9.98353e-16` / `1.97415e-16` | 각 `1e-8` 이내; 상쇄 전 절점/관성 term norm 합 사용 |
| 공간 병진 inertia 대조 | `1.60071e-10` force | 별도 질량 적분과 저장 generalized inertia 병진부의 차이 |
| Fixed q/v/a/A, free reaction | 모두 exact 0 | 구속과 반력 projection 일관 |
| Residual, Rg projection, work/defect 정의 | 모두 exact 일치 | `E=I+f_int−F`, `W=ΣF·q`, `defect=T+Uphys+Udrill−E0−W` |
| 중심 x/y 대칭·director norm | `4.23516e-22` length / `3.33067e-16` | 대칭 하중과 단위 director에 일관 |
| Section N/M/Q constitutive identity | symmetric relative `1.94033e-16` / `2.00805e-16` / `0` | `tCε₀`, `(t³/12)Cκ`, `(5/6)tGγ`와 일치 |
초기 중심 node2의 각 병진 acceleration은 `−500.7407241161487`이고 초기 support force 합은
exact 0이다. Nodal diagonal 병진 질량에 가해진 constant force와 일치하며 과거 consistent
mass의 비국소 초기 관성 반력을 요구하지 않는다. 최종 중심 U는
`(−1.17073377449e-6,−1.17073377449e-6,−2.56367687489e-5)`이고 하중 방향과 일관된다.
`max|Uz|/t=9.77607904e-5`, strain 최대 `5.07413251e-6`, stress 최대
`1.79376483e6 force/length²`다. 단위는 입력 일관 단위이며 SI로 단정하지 않는다.
T/Uphys/Udrill은 모두 비음수다. 최종 `(T,Uphys,Udrill,W,defect)`는
`(9.31920246e-5,1.39910648216,5.19700964e-6,2.79782362979,−1.39861875859)`이며
최대 T `64.1247614232`, 최대 `|defect|=62.7362408018`이다. 이는 같은 kinetic/work 정의의
재현이고, coarse `h=.1`에서 rate·energy 시간 정확도를 증명하지 않는다. Alpha<0의 비선형
계산에 exact energy conservation이나 매-frame 단조 감소 기준을 추가하지 않았다.
모든 support rotation이 0인 이 원본에서는 spatial reaction과 chart reaction이 일치한다.
일반 nonzero prescribed rotation의 `Jl^-T` 변환, arbitrary warped 모델, 초기조건 확대,
raw hidden vectors와 C08 시간수렴은 이 원본 audit의 coverage 밖이다. 아래 새 C08a는
변경본에서도 FAIL이며 원본 U 통과로 해소하지 않는다. 전체 configured Debug 검증의
진행·중단 기록은 현재 [PRD checklist](PRD.md)를 따른다.
새 `new-kernels.log`와 native record는 38 tests PASS / exit 0이며 그 범위의 warped nodal
moments·Jensen·partial tangent·moving null 등 독립 검사를 지지한다.
현재 `full-direct.log`에서 C08a의 **pointwise** 독립 force/power/momentum 검사는 PASS다.
바로 다음 full-coordinate 시간수렴 검사는 FAIL이므로 이 두 판정을 구별한다.
### 변경본 C08a — HHT-PHY-007: 시간수렴 FAIL
현재 MSVC x64 Debug 실행의
`.dryforge/lumped-mass-adoption-20261011/full-direct.log`에서
`HhtShellPhysics.C08aRigidManufacturedOrbitFullCoordinateTimeConvergence`는
731.27초 후 FAIL로 닫혔다. 이는 새 lumped oracle를 사용한 실행 판정이며 과거 consistent
수치를 재인용한 결과가 아니다. 계약 [C08a](verification-cases.md) 및
[N7](numerical-controls.md)의 grid·기준은 바꾸지 않았다.
| 현재 측정 | 실제 값 | 기존 기준·판정 |
| --- | --- | --- |
| Finest `h=1/256` physical chart angular-a normalized 최대오차 | `5.6747291267426469e-4` | `<=1e-4` 미달 |
| 마지막 두 refinement 차수 | `1.0283765928414674`, `1.0294567508174022` | 각각 `>=1.8` 미달 |
| Finest angular-v 오차 / 100×noise bound | `1.1876972777062108e-6` / `1.6576860896252254e-6` | N7 separation 미달; 차수 근거 불충분 |
| Finest angular-a 오차 / 100×noise bound | `5.6747291267426469e-4` / `8.1218686879245506e-4` | N7 separation 미달; 차수 근거 불충분 |
제조 하중은 현재 `ρN_i dV₀` nodal measure의 독립 inertia로 구성한다.
같은 orbit의 pointwise force/power/momentum PASS는 이 관성식의 물리 대조를 지지하지만,
무질량 회전 좌표를 포함한 constrained 시간 이력의 정확도를 대신하지 않는다.
오차와 N7 noise를 분리하지 못한 구간의 차수를 확정된 수렴 차수로 승인하지 않는다.
관측된 약 1차와 finest bound 미달이 그대로 남아 있으며 tolerance를 완화하지 않았다.
로그의 null-only 회복 **진단 후보**는 finest angular-a 최대오차
`1.0030608493534597e-4`, physical/null maximum
`1.0030577885358542e-4` / `4.6944218244936117e-7`이다.
Post-hidden2는 `2.9755320458171044e-16`으로 작아졌지만 physical complement 오차가
기준을 넘는다. Maximum은 서로 다른 시점일 수 있어 합성하지 않는다.
이 후보 진단을 채택된 상태·시간수렴 PASS로 표현하지 않는다.
과거 consistent finest 오차 `5.675659240050177e-4`와 현재 값은 비슷하지만 동일하지 않다.
동일한 실패 유형이 남았다는 결론이며 질량 변경이 시간수렴 문제를 해결했다는 근거는 없다.
현재 C08b는 아래 예외로 FAIL이며 전체 789개 회귀도 아래 기록처럼 실패로 종료했다. 후속 owner는 구현·수치 검토이며,
본 물리 검토에서 적분 알고리즘·null 처리·acceptance를 변경하지 않는다.
### 변경본 C08b — HHT-PHY-008: 새 refinement 중단 FAIL
같은 `full-direct.log`의
`HhtShellPhysics.C08bFreeFiniteRotationPlateSelfConvergenceAndPhysicalInvariants`는
438.18초 후 `invalid-dynamic-rotation` 예외로 FAIL이다. **과거 consistent 실행의
최종 self-difference assertion 실패와 다른 실패 경로이며 원인 조사가 필요하다.**
이 결과를 기존 baseline의 동일 실패라고 분류하지 않는다.
C08b는 무하중·무구속 9절점/4요소 centered plate이며 span 2×2, `t=.2,ρ=1,E=1000,ν=.3`,
총 기준 질량 `.8`이다. Initial velocity는 translation `(.125,−.25,.0625)`와
rotation `(.8,.6,.4)` 및 `vz += .02xy`로 시작하고 무질량 회전 성분을 초기 constraint로
맞춘다. 현재 nodal 질량에서 이 초기 prescribed physical field의 독립
`T0=.29818583333333337`, `P0=(.1,−.2,.05)`는 양의 에너지·일정 선형 운동량 규모를 준다.
이 직접 초기장 계산은 예외 시점의 상태를 재구성한 결과가 아니다.
| 완료된 현재 grid | Normalized energy drift | P drift | L drift | accepted `phi_max` |
| --- | ---: | ---: | ---: | ---: |
| `h=1/64` | `2.5065432169060303e-4` | `2.45022860759194e-15` | `1.0727438825677137e-4` | `.27391502319015193` |
| `h=1/128` | `6.4154991143669873e-5` | `6.335052199623923e-15` | `2.7384802983989645e-5` | `.27394592218709063` |
첫 refinement의 energy/L ratio는 `.255950069845` / `.255278109053`으로 감소한다.
이는 두 완료 grid의 관측이며 다섯 grid의 마지막 두 refinement 조건을 충족한 결과가 아니다.
P drift는 이미 반올림 수준의 작은 값이고 감소하지 않았지만, 미실행 finer grids의
승인 감소 조건을 미리 면제하거나 판정하지 않는다.
세 번째 `RunPlate(h=1/256)`에서 예외가 발생했다. 이어질 `1/512,1/1024` 및 grid 전체가
준비된 뒤 계산하는 6-channel self-difference·N7 noise separation·finest energy/momentum
판정은 생성되지 않았다. 완료된 두 grid의 작은 energy drift나 원본 101 U families PASS로
이 검증 공백을 채우지 않는다.
`EvaluateDynamicRotation`의 해당 diagnostic은 phi·initial director·velocity·acceleration의
finite 검사, initial director unit 검사, principal-chart margin을 함께 포함한다.
최초 full 로그의 메시지만으로는 어떤 조건이 실패했는지 구분할 수 없었지만,
추가 진단이 **finite Newton trial의 principal-chart 이탈**을 확인했다.
추가 evidence는 `.dryforge/lumped-mass-adoption-20261011/c08b-diagnostic/`의
`run.log`, `run-native.json`이며 별도 진단 probe는 exit 1이다. `h=1/256`, increment 56,
iteration 3, `t=.21875`, `phase=newton`, `third=false`에서 내부 node index 4
(0-based, fixture source label 5)의 phi는
`(.64127523289755728,−1.1977756953049712,3.6162098692194427)`다.
독립 norm 재계산 `|phi|=3.8630136368942867 > π`이므로 승인된 principal-chart margin을
위반한다. 기록된 9개 절점의 phi/v/a는 모두 finite다. Fixture 초기 director는
`(0,0,1)`로 단위이며 이 진단은 수렴 후 회복 단계나 새 유효한 accepted endpoint의
물리량이 아니다. Run-log SHA-256은
`10c25d9bb5fb89f925701f318f9b74e1d08bbeb837016d37cc51345ce6076aad`다.
Completed-grid `phi_max≈.274`와 rejected Newton trial의 `|phi|≈3.863`을 구별한다.
직접적인 거부 조건은 확인했으나 **왜 이 Newton overshoot가 발생했는지**의 근본 trigger와
안정성 영향은 미확정이다. 지원된 물리 궤적 자체가 π를 넘어야 한다거나 원본 101 endpoints가
손상됐다는 결론으로 확대하지 않는다. 수치 owner가 직전 유효 상태·correction·tangent/
constraint conditioning을 추가 조사한다. Predicate 완화·director 재정규화·clamp·시간 grid
변경으로 통과시키지 않는다. 필수 C08b coverage는 미완료이며 본 검토는 계약·코드·원본·출력을
변경하지 않았다.
### 최종 회귀와 test-only 후속 검증의 구분
`full-direct-summary.json`/`full-direct-native.json`의 전체 MSVC x64 Debug 789개 실행은
자연 종료 native **8**, **784 PASS / 4 FAIL / 1 SKIP**다. Raw 실패 4개는 C08a/C08b 및
`SolidFrequencyProcedure.RejectsOverflowingOriginalPencilValidationScale`,
`ElementFactory.SolidBindingPreservesThreeComponentsAndReferenceMass`이며 C04a finest는
SKIP다. 이 원래 판정을 후속 focused 결과로 덮어쓰지 않았다.
최종 test-only 수정은 세 파일에 한정된다. `RigidForceRates` 병진 시간미분 coefficient를
현재 nodal measure의 `.2`로 맞추고 24개 force 성분의 독립 1·2차 시간미분 검사를 추가했다.
Factory expectation은 consistent off-diagonal을 요구하던 이전 값을 lumped 질량에 맞췄으며,
overflow fixture는 lumped pencil에서 finite인 `E=3e306` 대신 실제 nonfinite validation을
유발하는 `E=4e306`으로 변경했다. Production·형상 predicate·tolerance 변경은 없다.
| 실행 시점·범위 | 결과 | 현재 해석 |
| --- | --- | --- |
| 수정 전 전체 789 | 784 PASS / 4 FAIL / 1 SKIP, native 8 | Raw 실패 보존 |
| 최종 Debug rebuild / discovery | build native 0, 발견된 tests 790 | Discovery는 실행 통과가 아님 |
| 최종 HHT oracle focused | 새 force-rate 시간미분 + 기존 pointwise orbit, 2 PASS | `final-oracle-rebuild/ctest.log`, native 0 |
| 최종 stale fixture focused | Overflow gate + factory lumped expectation, 2 PASS | `final-stale-fixtures.log`, native 0 |
| 최종 전체 790 | **미실행** | C08a/C08b OPEN, C04a SKIP을 전체 PASS로 바꾸지 않음 |
위 C08a raw 수치는 force-rate oracle 수정 전 test binary의 결과다. 수치 검토의 소비 경로
확인에서 변경된 병진 force-rate rows는 제조 hidden/null 회복 계산에서 읽지 않으므로,
이 수정이 C08a 실패의 원인이었다거나 시간수렴을 해결했다는 결론을 내리지 않는다.
C08b는 free fixture이며 확인된 rejected Newton trial의 chart 이탈도 별도 미해결로 남는다.
최종 소유권·SHA record는 `final-test-identities.json`이다. 이전
`final-oracle-identities.json`의 force-only 설명은 세 test 파일 중 두 개를 누락한 raw note이므로
최종 manifest의 정정을 따른다. `closed-identities-after-final-regression.json`의 production
190 files와 reference 16 files의 SHA를 현재 파일에서 독립 재계산해 불일치 0을 확인했다.
따라서 앞의 닫힌 원본 수지 대조는 같은 production·원본에 관한 근거로 유지하되,
최종 전체 회귀 통과나 HHT 시간 정확도 승인은 아니다.
## 아래 기록의 적용 시점
- Owner: `physics-evaluation-agent`; 검토일: `2026-09-27`.
- 판정: **미통과 — C08 시간수렴 실패 유지**. HHT-PHY-005 굽힘 resultant 불일치는 재생성된 원본 HDF5에서 해소를 확인했다. 완료 원본의 전판 관성 평형과 U reference 통과를 전체 physics gate 통과로 확대하지 않는다.
- 적용 계약: [정식화](formulation.md), [관성 상세](formulation-inertia.md), [N1–N7](numerical-controls.md), [C01–C12](verification-cases.md), [reference](reference-model.md), [I/O](io-contract.md), [상속 recovery §13](../nonlinear-static-newton-raphson/formulation.md#132-integration-point-physical-strain-and-stress).
@@ -65,6 +246,102 @@ C08b recovered angular-a self-difference는 `.846306569/.881654308/.982191000/.8
기존 제한 근거: C01/C03/C04a/C04b scalar 시간수렴 약 2차, C07 alpha0 energy defect `1.14353e-13 <=1e-10`, 기본 alpha의 `omega*h=1000` spectral radius `.904763`은 analytic limit `.9047619048`에 접근한다. C05/C06 kernel/rotation PASS와 C07 physical inertial support reaction은 각각의 검사 범위만 지지한다.
## 2026-10-12 초기 Newton 정책 변경본의 물리 검토
[HHT-ADR-013 변경 evidence](newton-start-policy.md)는 위 consistent mass 시기의 기록과 구분한다.
현재 nodal lumped kinetic mass와 q_p/q_n 초기 선택을 사용한 공식 C08b는
h=1/64, 1/128, 1/256, 1/512, 1/1024 모두 T=.25까지 완료했다. Principal-chart 예외는
재발하지 않았고 h=1/256의 별도65-frame runtime 회귀도 PASS다. 이는 시간 정확도
acceptance의 통과가 아니다. 전체802 Debug 회귀는11384.61초 뒤 native8로 자연 종료해
799 PASS·2 FAIL·1 SKIP이다. 예외는 C08a/C08b 정확도 실패와 기존 C04a SKIP이며
새 runtime 예외는 없다. Source·원본·실행 파일의 검증 전후 hash가 일치한다.
최종 독립 물리 감사도802개 discovery 이름·순서와 실제 완료 목록, 집계·identity를
대조해 확인했다. 아래 시간 정확도·에너지 응답의 한계는 전체 실행 종료 후에도 유지한다.
독립 재계산에서 C08b의 모든 pair/channel N7 noise separation은 PASS이며 최소
d/(noise 합)=73223.1>100이다. Finest self-difference는
q_u/q_phi/v_u/v_phi/a_u/a_phi 순서로
`(4.29914e-6,1.10373e-4,8.79298e-5,.00721911,.00437504,.474897)`이다.
회전·가속도 등의 시간 정확도 기준과 P 감소 기준은 FAIL로 유지한다.
Finest energy/L error는 `1.00065e-6/4.30176e-7`, 마지막 refinement 비율은
`.248811/.250152`로 해당 bounds를 만족한다. P error는
`2.84555e-14→8.03575e-14`로 증가했다. 작은 절대값으로 감소 조건을 면제하지 않는다.
Recovered angular-a의 finest physical/null maximum은 `.474897322/.00184377209`다.
Physical complement가 지배하므로 null-only recovery로 해결됐다고 판단하지 않으며
회복 후보를 공식 history에 채택하지 않았다.
현재 C08a angular-a finest error는 `5.67473e-4>1e-4`다. Raw 마지막 두 차수
`1.02838/1.02946`은 N7 finest noise 분리 미달 때문에 확정 차수로 보고하지 않는다.
C08a noise INCONCLUSIVE와 C08b noise PASS를 구분한다. C04a finest-resolution
검사는 기존 SKIP이며 해당 coverage는 미완료다.
현재 production Release CLI로 원본을 별도 경로에 재생성해 U101 families PASS,
UR 경고200건을 확인했다. 독립 초기 Q4 nodal mass 적분과 회전 미분 검산에서
저장 T·inertial power의 최대 상대차는 `4.33647e-15/6.87716e-16`, N6 힘·공간
모멘트 ratio는 `1.13018e-15/2.19580e-16`이다. Full endpoint E 및 반력 selector,
고정 q/v/a/A와 free reaction의 정의도 일치했다. 이 검산은 저장 strain/stress의
독립 recovery 또는 큰 유한회전 검증을 포함하지 않는다. 원본 max phi는
`1.25636e-5` rad이다.
원본의 에너지 시간 응답 적정성은 별도 open 위험이다. 정의대로 계산한 energy defect는
`[-1.39861876,+62.73624080]` force·length이고 양의 peak는 t=1이다.
Max T는64.12476142, max W는5.33495625다. 저장 정의 대조는 일치하지만 coarse
DIRECT 한 이력의 결과로 refinement·시간 정확도·물리적 감쇠를 확인할 수 없다.
새 에너지 tolerance를 도입하거나 전체 물리 적정성을 PASS로 표시하지 않는다.
실제 명령·identity·원문 evidence와 독립 검토 artifact는
[현재 정책 기록](newton-start-policy.md)에 연결한다.
## 2026-10-13 reduced-coordinate 변경본의 제한된 물리 평가
[HHT-ADR-014/015](ADR.md)와 [축소 정식화](formulation-reduced-coordinate.md)를 기준으로
실제 reduced Release 결과를 검토했다. 기존 이력을 변경본 PASS로 승계하지 않았다.
독립 계산·원문 hash는 [reduced 물리 검산](../../.dryforge/hht-remediation-20261012/reduced-physics/assessment.json),
[계산 script](../../.dryforge/hht-remediation-20261012/reduced-physics/analyze.py)에 보존한다.
`reduced-closed-c08b.log`/native는 **599.20 s, exit8/FAIL**이다. 원래 다섯 grid는
T=.25까지 완료했으나 추가 h=1/32768은 increment4, t=.0001220703125에서 중단됐다.
이 실행은 stable exponential Jet 수정 이전의 결과이며 최신 source의 통과 근거가 아니다.
| 완료 grid h | Normalized energy drift | P drift | L drift |
| --- | ---: | ---: | ---: |
| 1/64 | 2.50654158e-4 | 3.79071465e-16 | 1.07274502e-4 |
| 1/128 | 6.41546821e-5 | 3.97669962e-16 | 2.73848033e-5 |
| 1/256 | 1.61258753e-5 | 4.00712378e-16 | 6.87804460e-6 |
| 1/512 | 4.02165996e-6 | 5.98404006e-16 | 1.71966016e-6 |
| 1/1024 | 1.00063183e-6 | 6.83006552e-16 | 4.30175806e-7 |
Energy/L 마지막 두 비는 `.249392/.248811`, `.250022/.250152`로 약2차 감소와 일관된다.
P는 승인된 absolute1e-3보다 작고 ADR014에 따라 strict 감소를 요구하지 않는다.
Max rotation `.273836… .273946 rad`는 유한회전 coverage와 일관된다. 초기 nodal
measure를 별도 계산한 mass=.8, T0=.2981858333333333, P0=(.1,−.2,.05),
L0=(.3221333333333333,.2416,.32)이며 단위는 각각 mass, force·length,
momentum, angular momentum의 입력 일관 단위다. 초기장 계산을 후속 이력 검산으로 확대하지 않는다.
원문에는 실제 full v/a로 계산하는 독립5³ rectangle nodal/exponential T/P/L oracle의
assertion 실패가 없다. Accepted full E·regularity·N6는 source의 Require 경로로 확인하되
원행렬·전 frame를 독립 replay한 근거는 아니다. Static inertia source는
`rho*N_i*dV0`, `x_i+z*d_i`, 물리 v/a와 current-arm spatial balance를 사용한다.
Public full A는 physical-a filter 진단량이고 private Ar가 reduced predictor를 구동한다.
두 값을 kinetic energy·momentum의 physical acceleration으로 사용하지 않는다.
All-free 반력은 N/A이며 이 로그로 strain/stress recovery·일반 warped/partial-BC를 검증하지 않았다.
완료 grid의 hidden v/a 최대는 `2.30218e-13/6.24917e-11`로 작지만 시간정확도
통과를 대신하지 않는다. 원문은 velocity subtraction assertion1583건 외에도 h=1/1024의
position update 및 requested-increment trace 실패 각1건을 포함한다. 제거된 별도
velocity gate와 남은 position 증거를 구분하며 이 실행의 N3 전체 PASS를 주장하지 않는다.
실제 중단 state의9절점 force-null을 stored binary64 값에서 별도 Decimal contraction한
결과, analytic psi와 full force의 차이는 마지막 dot 반올림보다 크다.
같은 frozen54-coordinate point probe에서 stable 후보의 최대 physical-null force는
`8.29803e-18→1.65436e-24`, 원 scale의 total-null ratio는
`3.53875e-10→9.27507e-15`로 줄었다. 같은 물리 identity·허용값의 복구를 지지하는
제한된 point evidence이며 full Jet·새 trajectory·최종 C08 PASS는 아니다.
남은 필수 범위는 최신 동결 source의 C08a7 grid/hidden/N7, C08b 추가3 grid와 최종
q/v/physical-a self-convergence·N7·E/P/L, 닫힌 reduced 원본 HDF5/비교와 독립 수지 검산,
구성된 전체 Debug 회귀다. 원본 작은 U 일치 또는 소형 embedding probe로 대체하지 않는다.
기존 partial-BC rank/branch·실패 보존·determinism/covariance 한계도 해당 검증 범위로 남긴다.
## Evidence와 잔여 위험
- [원본 INP](../../reference/shellNL-dyn-meshfine/shellNL-dyn-meshfine.inp), [CSV](<../../reference/shellNL-dyn-meshfine/shellNL-dyn-meshfine displacements.csv>), 완료 Newton 로그(당시 경로: `../../reference/shellNL-dyn-meshfine/shellNL-dyn-meshfine_log.txt`, 현재 checkout에 없음), 수정 후 비교 JSON(당시 경로: `../../.harness/build/hht-numerical/reference-after-recovery-fix.json`, 현재 checkout에 없음): U 101 families PASS/UR warnings 200. 수정 전 비교 JSON(당시 경로: `../../.harness/build/hht-numerical/reference-comparison.json`, 현재 checkout에 없음)의 precheck 441774 scalars, U RMS 최대 `.00227058974`, UR RMS 최대 `.02533113821` 근거도 U/UR 데이터 동일성 범위에서 유지된다. 원본 9 nodes의 U/UR projection만 비교한다.