Files
FESADev/docs/hht-implicit-dynamics/physics-evaluation.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

352 lines
36 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.
# 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).
## Findings
| ID | 상태 | 근거·영향·후속 owner |
| --- | --- | --- |
| HHT-PHY-001 | **C08 필수 시간수렴 FAIL** | 원 physical chart acceleration의 C08a finest 오차 `5.67565924005e-4 > 1e-4`, 마지막 두 차수 `1.028668669/1.028969238 < 1.8`. 별도 회복 후보도 C08a finest `1.005829141e-4`, C08b finest angular-a self-difference `.868938661`로 미달이다. Hidden2 개선만으로 시간 정확도를 입증하지 않는다. 구현·수치 owner의 후속 판단이 필요하다. |
| HHT-PHY-002 | **기존 reference 대기 해소; coverage 제한 유지** | 공식 101-frame HDF5와 comparator precheck, U 101 families PASS 확인. UR은 frame 1–100에서 row/RMS warning 200건. V/A/반력/에너지는 CSV 비교 대상이 아니다. |
| HHT-PHY-003 | **제한 Debug evidence 유지** | 기존 focused Debug 68 tests 중 67 PASS/1 C04a SKIP. 이번 C08은 optimized 실행으로 전체 configured Debug/CTest 완료가 아니다. |
| HHT-PHY-004 | **C04a finest reduction INCONCLUSIVE 유지** | Binary64 acceleration 차이 `3.07902091e-10`은 기존 `1e-10`보다 크고 N7 해상도 `6.29613541e-10`보다 작다. Decimal80 차이 `1.69341451e-73`은 수학적 identity 근거이며 binary64 통과가 아니다. |
| HHT-PHY-005 | **해소 — 수정 후 원본 HDF5 재검산** | 새 원본 HDF5의 `M11/M22/M12`가 `(t³/12)Cκ`와 최대 symmetric relative 차이 `1.94601128e-16`으로 일치한다. 이전 2배 불일치는 보관본에만 남는다. 100개 noninitial section-resultant dataset의 굽힘 성분만 정확히 `.5`배로 바뀌었고 나머지 데이터는 유지된다. 이 결론은 해당 recovery 수정의 검증이며 C08 통과가 아니다. |
| HHT-PHY-006 | **원본 시간 정확도 제한** | T 최대 `191.61420902651`, energy defect 최대 `+190.225571555207`, 최종 `−1.39842750647836`. 독립 적분도 같은 T를 준다. 거친 `h/T1≈7.4567`에서 작은 U와 reference 일치가 rate/energy 정확도를 입증하지 않는다. 이 reference에 없는 energy bound를 새 gate로 만들지 않는다. |
## 원본 HDF5 독립 계산
현재 공식 HDF5(당시 경로: `../../reference/shellNL-dyn-meshfine/shellNL-dyn-meshfine_results.h5`, 현재 checkout에 없음)의 SHA256은 `f07beddaa232abe314e20210534a243d6deaf1f677c598c64f9334428bbecb56`이다. 9월 26일 volume·평형 계산의 원본은 수정 전 보관본(당시 경로: `../../.harness/build/hht-numerical/reference-before-recovery-fix.h5`, 현재 checkout에 없음), SHA256 `23bac93d1f7998b2f74a0f68767ae98a9899ee92c53f5170d08a814d3ee936d4`다. 9월 27일 `uv run --with h5py python -B -`로 두 파일의 2033 datasets를 독립 대조했다. 값이 다른 dataset은 100개 noninitial section resultants뿐이다. 해당 dataset 안의 M 성분은 새 값이 옛 값의 정확히 `.5`배이며 N/Q 성분은 같다. 2025 floating datasets의 byte 비교에서도 그 100개 외 변경은 없다. 따라서 아래 평형·kinetic energy·운동학·stress 계산은 동일 데이터에 관한 근거로 유효하며, 굽힘 결과는 아래 새 재검산으로 대체한다.
Reviewer는 solver/build 및 artifact 재생성을 실행하지 않았다. 검토는 stdin Python/NumPy 계산과 실행 결과 열람이다. 모든 floating result 값의 finite 확인은 수정 전 audit와 수정 후 finite M 재검산·나머지 데이터 동일성으로 유지된다. 단위는 `consistent-input-units`; 이하 L/F/T는 입력 length/force/time이며 SI로 단정하지 않는다.
729 nodes/676 S4, 외곽 104 nodes의 6 DOF 고정, 중심 source node `2`에 constant force `(-100000,-100000,-100000)` F다. `rho=2700`, 면적 `100`, 두께 `.5`, 총질량 `135000`; 독립 27점 적분값은 `135000.00000000003`이다.
재계산은 저장 연결·초기 좌표의 bilinear N과 초기 Jacobian에 3×3×3 Gauss–Legendre quadrature를 적용했다. `z∈[-t/2,t/2]`, `x=ΣN_i(X_i+u_i+z d_i)`, `ḋ=ω×d`, `d̈=ω̇×d+ω×(ω×d)`로 volume v/a를 재구성하고 `T=½∫rho v·v dV0`, `Pdot=∫rho a dV0`, `Ldot=∫rho x×a dV0`를 계산했다. Current nodal arm은 X+u, 원점은 (0,0,0)이다. 이 모델의 applied moment는 0이고 support chart는 0이므로 spatial moment 변환은 항등이다. 일반 nonzero constrained rotation의 변환 검증으로 확대하지 않는다.
| 검사 | 실제 계산·최대값 | 판정과 한계 |
| --- | --- | --- |
| 고정 경계·반력 | 고정 q/v/a/A 모두 exact 0; `Rg−selector(E)=0`, free reaction exact 0; `R−Rg=0` | N2/I/O와 일치. |
| Full residual | `E−(I+f_int−F)=0`; free force/moment 최대 `4.52473614e-10` F / `3.06939613e-11` F·L | 상쇄된 항으로 N2 분모를 재정의하지 않는다. |
| N2 accepted 로그 | 101 rows의 최대 `rho_u=1.22427119e-15`, `rho_phi=8.19697100e-16`; frame0 phi numerator=scale=0 | 각각 `<=1e-10`. 양의 u scale 범위 `[200036.43398,446896.14404]` F, phi `[7874.45824,56398.12645]` F·L. Element별 uncancelled terms는 HDF5에 없어 로그 scale 자체를 독립 재조립하지 않았다. |
| N2 correction | u/phi 순서: q `2.44698e-11/7.62279e-12`, v `4.88286e-11/1.52110e-11`, a `9.34518e-11/2.91120e-11`, A `8.87792e-11/2.76564e-11` | 로그의 무차원 metric 모두 `<=1e-10`. 원 선형계 N2-L은 이번 audit 대상 밖이다. |
| N6 force | `Σ(F+R)−Pdot` 최대 `7.27596e-10` F; normalized 최대 `9.16951367e-16` | `<=1e-8`. 상쇄 전 applied/support 절점 force norm 및 volume inertia norm 합의 범위 `[401544.1353,1277362.8173]` F. |
| N6 moment | `Σ(x×F+M)−Ldot` 최대 `1.37915e-10` F·L; normalized 최대 `2.63510938e-16` | `<=1e-8`. 상쇄 전 applied/support moment 및 volume moment norm 합의 범위 `[274879.6378,1244342.4463]` F·L. 두 N6 분자는 infinity norm이다. |
| 저장 balance | 독립 계산과 `global/equilibrium` 성분별 차이 최대 `7.13044e-10` | 서로 다른 단위의 물리 norm이 아닌 성분별 차이 요약이다. HDF5에 없는 raw momentum/분모를 위 독립 적분으로 보충했다. |
| Kinetic energy | 저장 T와 직접 volume T 절대차 `3.12639e-13` F·L, 상대차 `2.98657131e-15` | N4 직접 kinetic 기준 `1e-12` 이내. A를 사용하지 않았다. |
| Energy 정의 | `W−ΣF·(q−q0)=0`, `defect−(T+Uphys+Udrill−E0−W)=0`; frame0 다섯 값 모두 0 | I/O 정의와 일치. 비선형 음수 alpha에 매-frame 감소/정확 보존을 요구하지 않는다. |
| 방향·대칭 | 중심 `max|Ux−Uy|=2.11758e-21` L; 최종 U=`(-1.17073455e-6,-1.17073455e-6,-2.56368154e-5)` L | 중심 하중 방향·x/y 교환 대칭과 일관. 전 자유도의 부호를 강제하지 않는다. |
| 회전·변형 규모 | 전판 `max|Uz|/t=9.77616975e-5`, 최대 UR 성분 `1.25625048e-5` rad; `max|d·d−1|=3.33067e-16` | 작은 응답·director 일관성. 큰 회전/rigid-motion 전체 이력 coverage는 아니다. |
초기 support force 합은 각 방향 `−.0146805358` F, Pdot는 각 방향 `−100000.014680536` F다. 작은 초기 반력 부호는 consistent mass coupling의 동적 평형과 일치한다. 최종 support 합 `(100032.408356,100032.408356,100011.576861)` F에 applied force를 더하면 독립 `Pdot=(32.4083563,32.4083563,11.5768612)` F와 일치한다. Support 합이 하중 반대값과 정확히 같아야 한다는 정적 판정을 적용하지 않았다.
T/Uphys/Udrill은 모두 비음수, 최대값은 `(191.6142090,5.087207660,1.893293439e-5)` F·L, 최대 `Udrill/Uphys=4.38863644e-6`이다. 최대 T와 양의 defect는 frame10(t=1)에 발생한다. 최종 `(T,Uphys,Udrill,W,defect)=(.000284443261,1.399111305,5.197018635e-6,2.797828452,-1.398427506)` F·L. 이는 수치 에너지 결함이며 physical damping energy가 아니다.
## Recovery 수정 전·후 검산
Plane-stress `C=E/(1−nu²)[[1,nu,0],[nu,1,0],[0,0,(1−nu)/2]]`로 모든 101 frames/element/GP를 검사했다. `N=t C epsilon0`의 `max|차이|/(max|좌변|+max|우변|)`는 `2.04358e-16`이다. 수정 전 `M=(t³/12)C kappa` 대조의 같은 metric은 `0.333333333333334`로 저장값/예상값이 2였다. 수정 후에는 최대 절대차 `1.45519152e-11` F, 같은 symmetric relative metric `1.94601128e-16`으로 일치한다.
Frame1, internal element `12`(0-based; source `Part-1-1`, element label `13`), GP2에서 `kappa11=kappa22=−1.72598199555e-5` L^-1이다. `t=.5,E=2.1e11,nu=.3`이면 `M11=M22=−53936.9373610` F다. 수정 전 저장값은 `−107873.8747221` F였고 수정 후 `−53936.93736103468` F로 일치한다. 같은 점의 `S11(bottom,middle,top)=(795234.504841,−499254.790420,−1793738.488372)` F/L²에서 독립 두께 moment `t²(S_top−S_bottom)/12`도 약 `−53936.93736` F다. Source identity는 HDF5 `/model/elements`의 해당 행으로 정한다.
전 frame의 face stress 차분 적분과 수정 M의 최대 절대차는 `4.07217431e-6` F, 위 symmetric relative metric은 `1.93401205e-10`이다. 한쪽 `max|M|`만 분모로 쓰는 main audit(당시 경로: `../../.harness/build/hht-numerical/reference-recovery-audit-20260927.json`, 현재 checkout에 없음)의 metric은 `3.86802409e-10`으로 동일 차이를 표현한다. 고 E·작은 strain에서 별도 평가된 face stress의 차감은 curvature 대조보다 민감하다. **Face identity가 전역 `1e-12`로 일치한다고 주장하지 않는다.** 수정 전 2배 오류 해소와 유한정밀도 차감 차이를 구별한다.
Generalized strain은 midsurface 값이 아니라 두께 평균/moment다. 따라서 `C epsilon0`와 middle stress의 작은 차이, top/bottom 평균과 middle stress의 작은 차이를 오류로 판정하지 않았다. 최대 membrane strain `5.07413e-6`, curvature `1.72598e-5` L^-1, transverse shear strain `4.28336e-6`, stress `1.79377197e6` F/L²는 작은 탄성 변형률 규모와 일관된다. Numerical drill이 physical stress에 포함됐다고 단정할 근거는 없다.
## C08 및 제한 evidence
9월 26일 C08 diagnostic 로그(당시 경로: `../../.harness/build/hht-numerical/c08-diagnostic-20260926.log`, 현재 checkout에 없음)는 195745 ms에 1 PASS/2 FAIL로 종료해 이전 로그(당시 경로: `../../.harness/build/hht-numerical/c08-optimized.log`, 현재 checkout에 없음)의 실패를 재현했다. C08a pointwise 독립 volume force/power/momentum은 최대 회전 `.54757231145` rad에서 PASS다. 시간 이력의 acceleration 차수/오차 실패와 finest N7 noise 분리 미달은 별도로 남는다.
C08b finest q_u/q_phi/v_u/v_phi/a_u/a_phi self-difference는 `(5.54743e-6,1.38701e-4,1.77613e-4,.0115434,.0119796,.868939)`다. q_u 외 채널은 finest `1e-4`를 넘는다. 최대 회전 약 `.27266` rad로 finite-rotation 범위는 도달했다. Energy/L error finest `9.55904e-7/4.29749e-7`, 마지막 refinement 비율 `.248198/.250140`은 C08b bounds와 일치한다. P error는 `3.85047e-14→4.82500e-14→2.00403e-13`으로 작지만 감소 조건에 실패했다. Roundoff 수준이라는 관찰로 승인 감소 조건을 면제하지 않는다. Finest hidden v/a defect `1.46403e-6/.00158291`은 진단량이며 N2 tolerance에 임의 대입하지 않는다.
후속 회복 후보 probe(당시 경로: `../../.harness/build/hht-numerical/c08-recovery-probe-20260926.log`, 현재 checkout에 없음)는 3 tests/1 PASS/2 FAIL이며, C08a split 수정 실행(당시 경로: `../../.harness/build/hht-numerical/c08-recovery-split-spectrum-20260927.log`, 현재 checkout에 없음)은 2 tests/1 PASS/1 FAIL이다. C08a recovered angular-a finest 최대오차 `1.005829141075e-4`, 마지막 두 raw 차수 `1.77942349/1.99162617`은 기존 bounds를 모두 충족하지 않는다. 수정된 split의 finest null/physical maximum은 `4.64641213e-7/1.00582661e-4`로 physical complement가 지배한다. 최초 probe의 C08a split=0은 loop 누락 diagnostic이므로 근거로 사용하지 않는다.
C08b recovered angular-a self-difference는 `.846306569/.881654308/.982191000/.868938661`로 수렴하지 않는다. Finest physical/null maximum은 `.868938153/.00286332558`이다. q/v를 유지하는 null-only recovery로 이 physical complement 오류가 해소되지 않는다는 근거다. Maximum들은 서로 다른 node/time일 수 있어 제곱합으로 합치지 않는다. Post-hidden2 ratio는 C08a finest `2.81779e-16`, C08b pair별 약 `6.06e-17..1.45e-16`으로 작아졌지만, [독립 수치 검토](implementation-numerical-review.md)의 explicit-time scale·recovery N7 noise qualification이 남는다. **Hidden2 개선은 시간 정확도·후보 채택 승인과 다르며 recovered-a order는 INCONCLUSIVE다.** 원 a_h의 FAIL은 그대로다.
기존 제한 근거: 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만 비교한다.
- Debug focused(당시 경로: `../../.harness/build/hht-numerical/focused-debug-complete.log`, 현재 checkout에 없음), stable kernel(당시 경로: `../../.harness/build/hht-numerical/focused-stable-kernel.log`, 현재 checkout에 없음), exact constraints(당시 경로: `../../.harness/build/hht-numerical/focused-exact-constraint.log`, 현재 checkout에 없음), C04a Decimal80(당시 경로: `../../.harness/build/hht-numerical/c04a-decimal-reduction.json`, 현재 checkout에 없음), [독립 수치 검토](implementation-numerical-review.md).
- Recovery 수정 후 optimized focused(당시 경로: `../../.harness/build/hht-numerical/recovery-green-optimized.log`, 현재 checkout에 없음): 13 tests PASS. 수정 전 HDF5를 소급하여 수정하지 않으며 공식 재생성 결과의 별도 검산은 위 SHA256과 수치로 구분한다.
실제 shell의 physical acceleration/무질량 좌표 시간 정확도와 C08b self-convergence는 미해결이다. 원본 굽힘 recovery 수정의 물리 대조는 완료했지만 HDF5에 없는 raw hidden vectors·regularity 조건수·N2-L 원 선형계는 이번 audit로 독립 확인하지 않았다. C09–C11 실패 보존·결정론·전체 rigid-motion coverage와 전체 Debug/CTest는 해당 실행 보고서에서 확인해야 한다. 완료 reference는 이 공백을 해소하지 않는다. 계약·수치 한계·artifact를 변경하지 않았으며 본 문서는 release 승인 문서가 아니다.