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:
@@ -56,6 +56,7 @@ Feature 범위·상태는 [PRD](PRD.md), 상세 acceptance intent는 [requiremen
|
||||
|
||||
## HHT-ADR-007 — HHT 일관질량 선택
|
||||
|
||||
- 대체 이력: 2026-10-11 [HHT-ADR-012](#hht-adr-012--고유치hht-lumped-mass-채택)이 질량 선택을 대체했다. 아래는 당시 승인 기록이다.
|
||||
- 상태: `accepted-user-decision`
|
||||
- Owner: 메인 assistant; 수학 정의는 formulation-agent.
|
||||
- 승인 근거: 사용자가 질량 선택 질문에 “일관질량 (추천): shell 속도 보간의 운동에너지를 그대로 적분”을 선택했다.
|
||||
@@ -73,6 +74,7 @@ Feature 범위·상태는 [PRD](PRD.md), 상세 acceptance intent는 [requiremen
|
||||
|
||||
## HHT-ADR-009 — I/O·구현·Physics Evaluation 수행
|
||||
|
||||
- 대체 이력: 질량 선택 부분은 2026-10-11 HHT-ADR-012로 대체되며 나머지 승인 범위는 유지한다.
|
||||
- 상태: `accepted-for-implementation`; 검증 결과의 통과와 구별.
|
||||
- Owner: 메인 assistant; I/O 정의·구현·독립 physics review는 각 할당 담당자.
|
||||
- 승인 근거: 사용자의 “I/O definition, implementation, physics evaluation gate 모두 진행하세요” 및 후속 “깃에 커밋 하면서 진행하세요”.
|
||||
@@ -82,6 +84,7 @@ Feature 범위·상태는 [PRD](PRD.md), 상세 acceptance intent는 [requiremen
|
||||
|
||||
## HHT-ADR-010 — Newton 시작 형상과 영변형 산술
|
||||
|
||||
- 대체 이력: 2026-10-12 [HHT-ADR-013](#hht-adr-013--두-초기-형상의-newton-시작-선택)이 q_n 단독 시작 정책을 대체했다. 영변형 산술 수정과 당시 검증 기록은 유지한다.
|
||||
- 상태: `accepted-implementation-detail`; reference 통과를 의미하지 않는다.
|
||||
- Owner: 메인 assistant; 독립 수치 검토는 numerical-review-agent.
|
||||
- 근거: 승인된 전체 구현 범위 안의 수치 시작값 선택. `.harness/build/hht-numerical/zero-trial-red.log`와 original reference 실행에서 먼저 실패를 재현했다.
|
||||
@@ -97,3 +100,71 @@ Feature 범위·상태는 [PRD](PRD.md), 상세 acceptance intent는 [requiremen
|
||||
- 결정: 기존 C08/N7 정확도 요구와 실패 기록을 유지한다. 적분 history의 `a_h`와 별도 제약 가속도 `a_rec=a_h+N*eta`를 구분하는 후보를 정식화하고 독립 검증한다. `a_rec`를 다음 증분 history에 조용히 대입하지 않는다.
|
||||
- 근거: [독립 구현 검토 NR-009–010](implementation-numerical-review.md)의 Decimal80 반례와 실제 C08 실패. 초기 `A0`만 수정하는 방법은 일반적인 전체 시간 가속도 2차 정확도를 회복하지 못한다.
|
||||
- 영향: 현 공개 출력 의미·영속 schema·지원 범위·허용값은 유지한다. 후보의 hidden2 만족만으로 실제 shell의 2차 정확도를 주장하지 않는다. C08b 회전 좌표/속도 차이와 physical acceleration 오차는 별도로 해결해야 하며 채택은 검증 결과를 제시한 뒤 결정한다.
|
||||
|
||||
## HHT-ADR-012 — 고유치·HHT lumped mass 채택
|
||||
|
||||
- 상태: `accepted-user-decision`; 변경본 검증 완료와 구별.
|
||||
- 승인: 2026-10-11 사용자 “앞으로 고유치 해석과 HHT 동해석에서 질량 행렬은 lumped mass로 계산”.
|
||||
- 결정: 기존 MITC4 eigen의 nodal block lumped 질량은 유지한다. HHT는 `rho*N_i*dV0`의 nodal kinetic measure로 M, I, c, DqI, DvI, T, P, L 및 rates를 함께 계산한다. Scalar diagonal 치환이나 finite-rotation global matrix의 단순 row sum이 아니다.
|
||||
- 보존: 기준/현재 geometry 검사, 3×3×3 mass 적분, 회전 chart와 moving drilling null·실제 free null intersection, physical20 positivity 및 정확한 관성 미분을 유지한다. HHT 계수·physical a/auxiliary A·초기화·schedule·tolerance·field/shape/dtype/schema layout은 유지한다. Metadata는 `nodal-lumped-kinetic`이다.
|
||||
- 대체: HHT-ADR-007 및 HHT-ADR-009의 consistent mass 선택 부분을 대체한다. 기존 consistent 연구·검증은 역사적 evidence로 보존하고 변경본 통과로 승계하지 않는다.
|
||||
- 검증: 독립 nodal oracle·eigen 초기 M 대조·warped moment·Jensen·관성 partial/접선·momentum/power·C08·원본 비교와 전체 Debug 회귀를 새로 실행한다. 기존 C08 실패와 정확도 요구는 유지한다. 진행 상태는 [PRD](PRD.md)의 현재 checklist만 따른다.
|
||||
|
||||
## HHT-ADR-013 — 두 초기 형상의 Newton 시작 선택
|
||||
|
||||
- 상태: `accepted-user-task-implementation`; 실행·정확도 판정과 구별.
|
||||
- 날짜·승인 근거: 2026-10-12 사용자 “newton 회전 실패를 피하기 위한 방법을 적용하세요”.
|
||||
- 근거: [실패 조사](newton-rotation-investigation.md)에서 q_n 시작의 off-root 관성 잔차와 moving-null 미분의 상쇄를 확인했다. q_p 단독 시작은 기존 큰 DIRECT 증분에서 geometry가 유효해도 초기 잔차가 약 `4.60e19`여서 후속 Newton geometry 실패를 만들었다.
|
||||
- 결정: frozen HHT predictor와 old physical a를 유지한 채 q_p와 q_n의 rates·원래 endpoint E/Keff를 평가한다. 둘 다 유효하면 같은 초기 ell의 자유 `||D^T E||inf`가 작은 전역 좌표 벡터를 선택하고 exact tie는 q_p다. q_p=q_n이면 중복 평가를 생략한다. 최초 q_p의 genuine geometry/director/principal-chart 실패만 q_n 선택을 허용하며 rate·질량·recovery·접선·기타 산술 실패와 비교 norm overflow는 실패다. q_n 평가 실패도 전달한다.
|
||||
- 경계: dynamic-rotation 진단은 실제 source 순서의 첫 실패 절점에서 chart 조건을 확인한다. 다른 절점의 chart 위반으로 먼저 발생한 rate overflow를 숨기지 않는다. 유효 geometry에서 발생한 nonfinite strain/stress는 기존 recovery 진단으로 분리한다.
|
||||
- 보존: 선택한 assembly를 iteration0에서 사용한다. 이후 full Newton correction·100회 제한·모든 수용 gate·고정 DIRECT dt·계수·kinetic mass·physical a/auxiliary A·history·commit/rollback·결과 schema와 reference/tolerance는 그대로다. Newton 보정 후 retry·line search·clamp·cutback·rechart를 추가하지 않는다.
|
||||
- 영향: HHT-ADR-010의 q_n 단독 시작 부분을 대체한다. 작은 초기 잔차가 모든 모델의 수렴을 보장하지 않으며 C08/N7 시간 정확도를 해결했다는 결정이 아니다. 일반화한 명시적 drilling 잔차 Newton 후보는 채택하지 않는다. [방법·검증 기록](newton-start-policy.md), 현재 상태는 [PRD](PRD.md)를 따른다.
|
||||
|
||||
## HHT-ADR-014 — 시간수렴 수정과 reduced-coordinate 구현
|
||||
|
||||
- 상태: `accepted-for-implementation`; 실제 구현·검증 통과와 구별한다.
|
||||
- 날짜·승인: 2026-10-12 사용자가 [후속 검증 보고서](temporal-remediation.md)의 세 변경안에 “승인합니다”라고 답했다.
|
||||
- 결정1: Flat centered all-free C08b의 P에는 기존 absolute bound `<=1e-3`와 원 balance/update consistency를 유지하고 strict temporal-decrease 조건을 제거한다. E/L의 기존 감소·bound는 유지한다. 정확한 원 HHT branch가 모든 h에서 P를 보존하여 strict 감소가 `0<0`을 요구한다는 독립 검토를 근거로 한다. P를 P0로 덮어쓰거나 drift를 clamp하지 않는다.
|
||||
- 결정2: 기존64–1024 grid 결과를 보존하고32768/65536/131072를 C08b 최종 수렴 판정에 추가한다. Final q/v/physical-a self-difference bound `<=1e-4`, 마지막 두 차수 `>=1.8`와 N7 noise separation은 유지한다. 실제 finer 실행 성공을 보장하는 결정이 아니다.
|
||||
- 결정3: C08a 해결을 위해 reduced-coordinate HHT를 실제 shell에서 구현·검증한다. Chain-rule physical q/v/a, 정확한 초기 full state, 원 endpoint residual/hidden conditions를 유지한다. Public full A는 diagnostic full-chart filter combination으로 명시하고 shell dynamic 결과를 schema v2 및 formulation metadata로 구분한다. Private reduced history를 public A와 혼용하지 않는다. Solid HHT/static/eigen schema는 보존한다.
|
||||
- 구현 경계: Fixed embedding regularity·positive reduced mass·actual free/null intersection을 검사한다. 검증되지 않은 chart/history 전환·nonzero BC 확대·임의 drilling mass·FD production tangent·silent projection은 도입하지 않는다. Carried-A 산술 후보는 같은 full-coordinate recurrence의 개선으로 별도 검증하며 legacy q-inverse N7 estimator를 새 map의 인증으로 승계하지 않는다.
|
||||
- 대체: HHT-ADR-011의 “production/schema 변경 미승인” 경계를 위 승인 범위에 한해 대체한다. 기존 실패·수식 반례·schema v1 evidence는 보존한다. 구현 후 관련 검사·독립 수치/물리 검토·전체 configured Debug/CTest·필수 원본 비교가 필요하다.
|
||||
|
||||
## HHT-ADR-015 — C08a 최종 refinement와 hidden rate 판정
|
||||
|
||||
- 상태: `accepted-user-decision`; 변경본 검증 통과와 구별한다.
|
||||
- 날짜·승인: 2026-10-13 사용자가 [두 변경 제안](c08a-refinement-proposal.md)에 “승인합니다. dryforge 계획에 따라서 남은 단계를 진행하세요”라고 답했다.
|
||||
- 결정1: 원 16/32/64/128/256 grid와 실패 evidence를 보존하고 512/1024를 최종 grid로 추가한다. 전체 시점 최대 q/v/physical-a 오차의 finest bound `<=1e-4`, 마지막 두 refinement 차수 `>=1.8`, 최종 세 grid의 N7 factor100 separation을 유지한다. 초기 frame이나 transient를 제외하지 않는다.
|
||||
- 결정2: C08a hidden1/2의 strict temporal decrease만 각 frame의 `|ψk_i|/Sk_i <=1e-10` 판정으로 대체한다. 원래 단위와 uncancelled scale을 유지하고 scale0은 raw defect exact0을 요구한다. Raw defect와 scale을 기록하며 floor·clamp·projection을 추가하지 않는다. 실제 물리 시간수렴과 N7은 별도로 통과해야 한다.
|
||||
- 영향: C08b 및 다른 N1–N7 계약·물성·forcing·정확한 초기 state·HHT 계수는 유지한다. 이전 scratch finer 결과를 공식 PASS로 승계하지 않고 변경본을 재실행한다. 현재 상태는 [PRD](PRD.md), 상세 계약은 [검증 사례](verification-cases.md)를 따른다.
|
||||
|
||||
## HHT-ADR-016 — Reduced 좌표 증분 산술과 저장 표현의 분리
|
||||
|
||||
- 상태: `accepted-for-implementation`; 실제 검증 통과와 구별한다.
|
||||
- 날짜·승인: 2026-10-13 사용자가 [구체적인 N3 변경 제안](c08-n3-coordinate-representation-proposal.md)에 “승인합니다”라고 답했다.
|
||||
- 근거: 공식 C08a의58개 requested trace 실패 모두 가장 가까운 binary64 좌표와 양쪽 이웃에서도 기존 high-only 기준을 만족할 수 없었다. 실제 candidate pair와 요청 target의 정확한 차이는 최대7.70e-34였다. 기존 FAIL 로그를 보존한다.
|
||||
- 결정: Reduced private p의 whole/requested 두 증분 검사에서 실제 `(p_high+p_low)-old_accepted_high`를 EFT expansion으로 비교한다. 원래 uncancelled scale·`1e-12`·finite-first·scale0 exact-zero 판정을 유지한다. 이전 accepted low를 숨겨 history에 더하지 않는다.
|
||||
- 저장 계약: Public/model의 high가 실제 pair의 round-to-nearest/ties-to-even 결과인지 별도로 검사한다. Raw high-only 증분 오차와 표현 거리를 진단으로 보존한다. 임의 ULP floor·추가 허용량·nextafter/clamp·projection을 도입하지 않는다.
|
||||
- 보존: Absolute update·full physical residual·hidden constraints·CA whole-history radius·N2/N4/N7·시간 차수와 factor100·schema·원본 reference 및 외부 tolerance는 유지한다. Production/controller와 산술 회귀를 함께 갱신하고 변경본 C08·원본 비교·전체 configured Debug를 재검증한다. 현재 상태는 [PRD](PRD.md)를 따른다.
|
||||
|
||||
## HHT-ADR-017 — 병진 기준 만족 후 회전·보조변수 제한 Newton
|
||||
|
||||
- 상태: `accepted-for-implementation`; 실제 구현·검증 통과와 구별한다.
|
||||
- 날짜·승인: 2026-10-13 사용자가 [구현 제안](c09-channel-newton-proposal.md)에 “승인합니다”라고 답했다. [독립 검토](numerical-review-channel-newton.md)는 제안의 N2-L 영역과 N7 대응을 명시했다.
|
||||
- 근거: C09 full Newton100의 병진 잔차는 통과하지만 회전 잔차는 실패했다. 최종 병진 상태를 유지한 read-only 회전·보조변수 진단은 두 보정 후 원 full endpoint 기준을 만족했다. 이는 저장 가능한 해의 존재증거이며 자연 trajectory의 수렴 증거는 아니다.
|
||||
- 결정: 비어 있지 않은 병진 U의 원 residual 및 실제 마지막 mapped q/v/a/public A·관련 private Ar correction 검사가 모두 통과하고 phi residual이 실패한 경우만 제한 solve를 허용한다. 원 scaled augmented K의 U를 제외한 J에는 angular p와 모든 auxiliary unknown/hidden row를 포함한다. 실제 K[J,J] 보정의 U 성분은0이며 translation p high/low/Ar/vp/ap는 bitwise 유지하고 inherited CA radius도 유지한다.
|
||||
- N2-L 변경: 제한 step의 backward-error 검사 영역은 실제 K[J,J]다. 기존 all-free 선형계 검사와 같지 않으며 threshold 1e-12는 유지한다. 모든 후보의 원 full endpoint N2/N3/N4·hidden·regularity 검사는 계속 요구한다.
|
||||
- 해제·실패: U 기준을 벗어나면 다음 solve를 full로 선택한다. Retry·candidate 되돌림·예산 환급은 없고 실제 보정 합계100회 및101번째 solve 금지를 유지한다. 제한 행렬 singularity/nonfinite/backward 실패는 즉시 원 실패 절차로 처리한다. 다음 증분은 full 시작이며 mode는 영속 schema나 accepted physics에 저장하지 않는다.
|
||||
- N7: Restricted-last는 actual correction, restricted linear defect 해, 같은 trial의 full-model linear defect 해(제외 U 행 포함), fresh accepted full residual/hidden defect 해의 mapped norm 네 항을 합산한다. Full-last는 기존 세 항이다. 각 항의 q/v/a/private Ar/public A mapping·CA·factor100과 FAIL/INCONCLUSIVE 기준을 유지하며 full-model defect solve 실패를 통과로 처리하지 않는다.
|
||||
- 영향: HHT-ADR-013의 이후 full Newton-only 정책을 위 조건에 한해 대체한다. Physics·초기 state·계수·질량·BC·schema·reference·외부 tolerance는 유지한다. Production/C08 controller의 같은 의미 구현, trigger/thaw·combined100·rollback·omitted-U defect 회귀와 자연 C09/C08·전체 Debug·원본 비교가 필요하다. 현재 진행 상태는 [PRD](PRD.md)를 따른다.
|
||||
|
||||
## HHT-ADR-018 — 초기 analytic null 직교 보완공간의 고정 basis
|
||||
|
||||
- 상태: `accepted-for-implementation`; 구현·검증 완료와 구별한다.
|
||||
- 날짜·승인: 2026-10-13 사용자 “제안된 내용을 승인합니다”로 [고정 null 보완공간 제안](fixed-null-basis-proposal.md)을 승인했다. [실제 C09 진단](channel-newton-covariance-diagnostic.md)과 [독립 검토](numerical-review-channel-newton.md)를 근거로 한다.
|
||||
- 결정: Null이 있고 회전 세 성분이 모두 자유인 절점은 원 frame0의 analytic drilling null을 normalize한 n0와 그 직교평면의 stable orthonormal t1/t2를 사용한다. 최소 absolute component Cartesian axis를 투영하여 basis를 구성하고 시간 동안 고정한다. `phi=t1*p1+t2*p2+n0*z`의 constant sparse injection을 모든 graph/rate/augmented assembly 및 correction map에 사용한다.
|
||||
- 부분구속: 실제 free/null intersection은 유지한다. 회전 일부 성분이 구속된 절점은 기존 component chart를 유지하는 혼합 정책이다. Global BC를 local basis flag로 옮기지 않으며 지원 범위를 확대하지 않는다.
|
||||
- 수치 계약: 원 full frame0 q/v/a/A 및 state는 projection하지 않는다. Initial basis projection·roundtrip·N3 pair/RN-even·global reconstruction·CA 실제 product/sum을 검증한다. G regularity와 current-null/fixed-basis transversality는 별개로 검사하며 기존 fail-closed 기준을 유지한다. Private channel/full support metadata를 구분하고 basis index를 fullDOF 번호로 쓰지 않는다. [상세 수식](formulation-fixed-null-basis.md)은 실제 augmented row/unknown scaling과 물리 역변환, 원 private consistency와 추가 basis-lift 검사, 저장된 null 입력의 basis 구성 radius 범위를 명시한다.
|
||||
- 보존: HHT-ADR-017의 restricted/full solve·copy/thaw·combined100 및 N7 3/4항을 유지한다. Continuous physics·원 full endpoint 기준·hidden/N4·시간 차수/factor100·HHT 계수·lumped measure·BC·schema·원본 reference·외부 tolerance는 변경하지 않는다.
|
||||
- 영향: HHT-ADR-014의 global component selector를 위 all-free rotational subset에서 대체하므로 discrete trajectory는 달라질 수 있다. Exact arithmetic에서는 proper-Q의 retained-plane 변환이 constant O(2)이며 nonlinear reparameterization defect를 제거한다. 실제 tolerance/rounding·partial-BC subset의 일반 covariance까지 자동 보장하지 않는다.
|
||||
- 검증: 구현 상세 수식과 독립 검토 후 initial-state·basis/null/Gram·부분구속·N3/CA/N7·실제 warped/shared/nonzero-C1 N5·C09 모든 이력/좌표변환/결정론·공식 C08a7/C08b8 grid·구성된 전체 Debug 및 원본101-frame 비교를 새 identity에서 수행한다. 기존 C09 FAIL과 과거 PASS의 scope를 보존하고 현재 checklist는 [PRD](PRD.md)를 따른다.
|
||||
|
||||
@@ -17,6 +17,14 @@
|
||||
기존 개인 설정·reference·다른 작업자의 변경을 보존하며 실패를 tolerance 완화로 숨기지 않는다.
|
||||
문서만 수정하면 정적 검토를 수행하고, 동작 변경에는 관련 검사와 필요한 독립 검토를 수행한다.
|
||||
|
||||
Consistent kinetic mass, 물리적 a/보조 A, generalized/spatial moment, full residual을 구분한다.
|
||||
C08a/C08b 실패·C04a SKIP과 가속도 복구 후보의 미채택을 유지한다. 원본 변위 비교 PASS와
|
||||
현행 nodal lumped kinetic mass, 물리적 a/보조 A, generalized/spatial moment, full residual을 구분한다.
|
||||
C08a/C08b의 기존 실패·C04a SKIP과 가속도 복구 후보의 역사적 미채택을 보존한다.
|
||||
현재 HHT-ADR-014가 reduced-coordinate 구현 및 shell schema v2 의미 구분을 승인했고,
|
||||
HHT-ADR-015가 C08a 최종 grid와 hidden1/2 판정을 승인했다.
|
||||
HHT-ADR-016은 reduced 두 증분의 pair 산술 검사와 저장 high의 RN-even 검사를 승인했다.
|
||||
HHT-ADR-017은 병진 기준을 만족한 후보의 회전·보조변수 제한 Newton 및
|
||||
실제 부분 행렬 N2-L/full-model defect N7 검사를 승인했다.
|
||||
HHT-ADR-018은 all-free rotational null 절점의 초기 null 직교 보완공간을
|
||||
사용한 fixed sparse basis와 부분구속 혼합 chart를 승인했다.
|
||||
실제 완료 여부는 PRD의 checklist를 따른다. 원본 변위 비교 PASS와
|
||||
굽힘 단면력 계수 수정은 실제 shell 시간수렴 또는 동해석 전체 완료를 뜻하지 않는다.
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
사용자는 HHT implicit 적분법을 사용한 dynamic 해석 구현을 준비하기 위해 requirement/research, formulation, numerical research를 차례로 요청했고, 검증 모델로 `reference/shellNL-dyn-meshfine`을 지정했다. 현재 산출물은 요구사항·근거·정식화·독립 수치 검토와 검증 계약이다. 사용자의 후속 I/O definition·implementation·physics evaluation 전체 진행 요청에 따라 [I/O 계약](io-contract.md)과 [구현 계획](README.md#재사용-handoff)을 작성하고 실제 solver 구현·검증을 진행한다.
|
||||
|
||||
[시간적분 정식화](formulation.md)와 [shell 관성 상세](formulation-inertia.md)의 후속으로 [독립 수치 검토](numerical-review.md#numerical-review), [수치 기준](numerical-controls.md), [검증 사례](verification-cases.md), [추가 연구](research.md#numerical-research)를 작성한다. 사용자가 **consistent kinetic mass**를 선택했으며 이번 HHT 구현 범위는 일관질량이다. 후속 전체 gate 진행 요청에 따른 구현 대상·공개 subset·출력 schema는 [HHT-ADR-009](ADR.md)에 기록한다.
|
||||
[시간적분 정식화](formulation.md)와 [shell 관성 상세](formulation-inertia.md)의 후속으로 [독립 수치 검토](numerical-review.md#numerical-review), [수치 기준](numerical-controls.md), [검증 사례](verification-cases.md), [추가 연구](research.md#numerical-research)를 작성한다. 2026-10-11 사용자가 **nodal lumped kinetic mass**를 승인했다([HHT-ADR-012](ADR.md)). 과거 consistent 검증은 당시 evidence이며 변경본 통과로 승계하지 않는다. 후속 전체 gate 진행 요청에 따른 구현 대상·공개 subset·출력 schema는 [HHT-ADR-009](ADR.md)에 기록한다.
|
||||
|
||||
최소 구현 목표 후보는 기존 FESA-MITC4 shell의 선형 탄성 재료·기하비선형 동적 해석이다. 단일 step의 `*Dynamic,direct`, 초기 정지 상태, 고정 외곽 경계와 집중하중에 필요한 지원을 우선 정의한다. 질량·회전 관성·HHT 생략값·공식 동적 결과 범위는 근거를 확인하여 후속 정식화와 연결한다. 임의 amplitude, 시간변화 경계, 물리적 damping, contact, 소성, explicit, 다중 step/restart 또는 다른 요소의 dynamics는 이번 요청에서 지원을 약속하지 않는다.
|
||||
|
||||
@@ -59,7 +59,7 @@ Reference의 `max|U3|/thickness≈9.84e-5`, 기존 동일 mesh eigen reference
|
||||
| --- | --- | --- |
|
||||
| HHT-OPEN-001 | 음수 alpha 관례, 결합 beta/gamma, 물리적 a와 보조 A 분리 | 추천 HHT 확장 채택 및 공개 parameter subset |
|
||||
| HHT-OPEN-002 | frame 0을 `0+`로 정의, 전값 force와 동적·대수 초기 평형으로 a0 계산, A0=a0; 수치 기준 N2–N4 정의 | 초기화 계약 채택과 I/O 진단 binding, 구현 후 검증 |
|
||||
| HHT-OPEN-003 | **사용자 선택: consistent kinetic mass**; lumped는 비교 연구로 보존하고 이번 HHT 지원에서 제외 | 질량 종류 결정 완료; 임의 drilling inertia 없이 회전관성·영공간의 실제 구현 검증 필요 |
|
||||
| HHT-OPEN-003 | **사용자 선택: nodal-lumped-kinetic**; 기존 shell eigen nodal block lumping 유지 | 질량 종류 결정 완료; 임의 drilling inertia 없이 회전관성·영공간의 실제 구현 검증 필요 |
|
||||
| HHT-OPEN-004 | 기존 total rotation-vector chart에서 exact 관성·convective 항·비대칭 접선, moving-null 조건; N4–N7 및 C05–C08 정의 | 구현 후 실제 shell의 regularity·시간 수렴·회전 검증 |
|
||||
| HHT-OPEN-005 | 물리적 a/각가속도와 A, endpoint 반력, T/Uphys/Udrill/W의 수학적 의미 구별 | 공식 공개 quantity·HDF5 schema 및 mapping의 I/O 결정 |
|
||||
| HHT-OPEN-006 | 고정 100 increments, full Newton, 실패 trial 폐기, 동일 state의 전체 이력 commit; N2의 100 corrections/수렴 기준 정의 | I/O 실패 lifecycle과 reference 밖 입력 범위, 구현 후 실패 보존 검증 |
|
||||
@@ -76,12 +76,24 @@ Reference의 `max|U3|/thickness≈9.84e-5`, 기존 동일 mesh eigen reference
|
||||
|
||||
## 현재 checklist
|
||||
|
||||
아래 날짜 없는 실행 완료 항목은 기존 consistent 구현의 이력이다. 변경본의 통과로 승계하지 않는다.
|
||||
|
||||
- [x] HHT-ADR-012 변경본의 nodal measure 일관성·독립 관성/접선/물리 검토·원본 reference 재검증. [채택 evidence](../hex8-structural-analysis/lumped-mass-adoption.md): 관련 Debug C++ 38 PASS·Python 137 PASS, production Release 원본 U 101 families PASS·UR 경고200.
|
||||
- [x] HHT-ADR-012 변경본 전체 Debug 회귀의 자연 종료와 판정: 789개 native8(784 PASS·4 FAIL·1 SKIP). Test-only 수정 후 관련4개 PASS와 discovery790은 별도 evidence이며 전체790 재실행은 아니다. C08a/C08b 해결·C04a coverage는 미완료로 유지.
|
||||
- [x] 변경본 C08a/C08b 재실행과 결과 판정: C08a 정확도 FAIL, C08b `h=1/256`의 Newton trial principal-chart 이탈로 새 runtime FAIL. 허용값은 유지하며 실패 해결은 아래 미완료 항목이다. [현재 evidence](../hex8-structural-analysis/lumped-mass-adoption.md).
|
||||
- [x] 2026-10-12 C08b 실패 state의 원인 조사: history·moving-null 미분·선형 solve 독립 대조, predictor 시작과 명시적 drilling 잔차의 private 정확 Newton 후보 작성 및 scoped N5 검사. [조사 보고서](newton-rotation-investigation.md). 후보 채택·공식 C08 통과를 뜻하지 않는다.
|
||||
|
||||
- [x] 2026-10-12 [HHT-ADR-013](ADR.md) 초기 Newton 정책 구현: 같은 frozen predictor의 q_p/q_n 자유 energy 잔차 비교, 실제 첫 회전 오류 분류 및 nonfinite recovery 진단 분리. 관련 Debug37/37 native0·독립 수치 검토 완료. [변경 evidence](newton-start-policy.md).
|
||||
- [x] HHT-ADR-013 변경본의 h=1/256 runtime 회귀와 current-source Release 원본101-frame 재생성·비교: 65-frame runtime PASS·U101 families PASS/UR 경고200·독립 kinetic/balance 대조 일치. [변경 evidence](newton-start-policy.md). Runtime/원본 일치를 C08/N7 시간 정확도 해결로 승계하지 않는다.
|
||||
- [x] HHT-ADR-013 변경본의 전체802 Debug·공식 C08b 전체5 grid의 자연 종료와 판정. 제외 없는 전체 CTest는11384.61초·native8:799 PASS·C08 정확도 FAIL2·기존 C04a SKIP1이며 추가 예외0이다. C08b 5개 grid의 runtime finding은 CLOSED, 시간 정확도는 미완료다. Source·원본·binary identity 대조와 독립 bounded 검토는 [변경 evidence](newton-start-policy.md)를 따른다. execute.py의1800초 timeout native1과 최초 중단은 전체 완료 evidence가 아니다.
|
||||
- [x] 2026-10-12 권장 후속 조사 실행: 소형 moving-null DAE의 전체 시점 차수 독립 검산, 실제 C08b 해상도 및 fixed-state P/history drift 분리, 같은 HHT carried-A private 후보의512–4096 native0 실행. [실행 보고서](temporal-remediation.md). Production 채택·C08/N7 통과·acceptance 변경을 의미하지 않는다.
|
||||
|
||||
- [x] 사용자 지정 모델·출력과 현행 dev 기준 확인.
|
||||
- [x] 격리 worktree 및 Feature 핵심 문서 작성.
|
||||
- [x] Requirement 초안: 원자적 요구사항과 acceptance intent 작성.
|
||||
- [x] Research 초안: 일차·공식 근거의 열람 범위, 입력 생략 의미, 검증 후보와 근거 공백 정리.
|
||||
- [x] 문서 간 범위·비교 정책·로컬 링크 및 reference 원본 보존 정적 검토.
|
||||
- [x] 사용자 질량 선택 반영: 이번 HHT 기본·구현 범위는 consistent kinetic mass.
|
||||
- [x] 2026-10-11 질량 선택 반영: 이번 HHT 기본·구현 범위는 nodal lumped kinetic mass.
|
||||
- [x] 나머지 물리·공개 parameter·공식 결과 범위 확정: HHT-ADR-009와 I/O 계약.
|
||||
- [x] Formulation 후보 작성: HHT·정확한 유한회전 관성·초기화·잔차·접선·회복.
|
||||
- [x] 독립 수식 검토와 variable-mass / moving-null 제조해 검산; 메인 재현 확인.
|
||||
@@ -91,9 +103,140 @@ Reference의 `max|U3|/thickness≈9.84e-5`, 기존 동일 mesh eigen reference
|
||||
- [x] HDF5 구현과 readback 검증: state/writer focused Debug suite와 원본 101-frame 비교 실행 완료. 후속 발견된 굽힘 단면력 복구 오류의 수정 후 HDF5 재검증은 별도 항목이다.
|
||||
- [x] 지정 reference U 101 families PASS, UR row/RMS 경고 200건 기록. Reference 성공은 C08/physics 통과가 아니다.
|
||||
- [ ] C08a/C08b 시간수렴 실패 해결: [독립 검토](implementation-numerical-review.md), [물리 검토](physics-evaluation.md). 현 알고리즘과 tolerance를 유지한 실패 재현 완료.
|
||||
- [x] 2026-10-12 [HHT-ADR-014](ADR.md) 사용자 승인: C08b P absolute/balance 판정, 최종 finer grid 추가, 실제 shell reduced-coordinate HHT와 shell schema v2 의미 구분. 승인은 구현 통과가 아니다.
|
||||
- [x] 2026-10-13 [HHT-ADR-015](ADR.md) 사용자 승인: C08a 원 grid 보존 및 최종512/1024 추가, hidden1/2 모든 frame normalized bound 판정. 승인은 검증 통과가 아니다.
|
||||
- [x] 2026-10-13 [HHT-ADR-016](ADR.md) 사용자 승인: Reduced N3 whole/requested 증분의 실제 high+low 산술 검사와 저장 high의 RN-even 검사 분리. 승인은 검증 통과가 아니다.
|
||||
- [x] 2026-10-13 [HHT-ADR-017](ADR.md) 사용자 승인: 병진 기준 만족 후 회전·보조변수 부분 행렬 보정, 실제 부분 행렬 N2-L 검사 및 full-model defect를 보존하는 N7. [독립 검토](numerical-review-channel-newton.md) 완료; 구현 통과와 구별한다.
|
||||
- [ ] HHT-ADR-017 production/C08 controller 구현·trigger/thaw/100/rollback·omitted-U N7 회귀와 자연 C09/C08·원본·전체 Debug 재검증.
|
||||
- [x] 2026-10-13 [HHT-ADR-018](ADR.md) 사용자 승인: 초기 analytic null 직교 보완공간의 fixed sparse basis와 부분구속 혼합 chart 정책. 승인은 solver 검증 통과가 아니다.
|
||||
- [x] HHT-ADR-018 [상세 수식](formulation-fixed-null-basis.md) 및 [독립 정적 수치 검토](numerical-review-fixed-null-basis.md): sparse augmented blocks·scaled operator/undo·횡단성·초기화·N3/CA/N7 계약. Runtime PASS와 구별한다.
|
||||
- [ ] HHT-ADR-018 production/controller 및 N3/CA/N7 변환·initial/부분구속/N5/C09·공식 C08·원본·전체 Debug 재검증.
|
||||
- [ ] HHT-ADR-016 production/controller·표현 경계/산술 mutation 검사·C08·reference·전체 Debug 재검증.
|
||||
- [x] HHT-ADR-015 변경본 C08a 전체7 grid의 공식 시간수렴·hidden1/2·N7 재검증: ADR-018 최종 controller 계수 수정본 Release native0·703.90초. C08b·전체 Debug·reference 완료와 구분한다.
|
||||
- [ ] Carried-A production 산술 및 해당 N5/N7·BC·실패보존 검증.
|
||||
- [ ] Reduced shell embedding·정확한 chain-rule/접선·초기화·부분구속·원 residual/hidden 검증.
|
||||
- [x] Shell dynamic schema v2·public diagnostic A 의미·reader/comparator/readback focused 검증: state/writer 관련 Debug와 Python comparator47 PASS. Actual production 원본101-frame 비교와 전체 회귀는 아래 미완료 항목으로 구분한다.
|
||||
- [ ] 승인된 C08b32768/65536/131072 실제 실행과 시간수렴·P/E/L 판정.
|
||||
- [ ] HHT-ADR-011에 따른 가속도 복구 후보 정식화·독립 검증 후 채택 여부 결정.
|
||||
- [x] 굽힘 단면력의 두께 계수 수정: 최신 Debug 관련 14 tests PASS, 원본 HDF5 재생성·비교 및 `M=t³Cκ/12` 독립 대조 완료. 전체 회귀 상태는 아래 항목과 구분한다.
|
||||
- [ ] C09–C11 잔여 coverage: rigid translation 전체 이력, Newton100/101·실패 보존, 3회 결정론·partition·전체 모델 covariance.
|
||||
- [ ] Solver 구현·구성된 build/test·독립 물리 및 reference 검증. 최신 Debug build 및 C08 temporal2개 제외 CTest는475 PASS/1 C04a SKIP; C08 실패와 전체 gate 미완료는 유지한다.
|
||||
|
||||
2026-10-13 동결 source의 reduced operator·actual N5·procedure·산술 Debug15 PASS 및
|
||||
Release16 PASS를 확인했다. Large DIRECT의 Ar→좌표 재구성 상쇄를 실제 p 증분 누적으로
|
||||
수정했으며 원 N3의 requested increment trace·기존 수치 기준을 유지했다.
|
||||
[현재 실행 기록](temporal-remediation.md#좌표-증분-산술-수정-후-현재-범위)과
|
||||
[구현 기록](implementation-c08-reduced.md)을 따른다. 원본 Release 실행은
|
||||
증분39·t=3.9에서 increment trace 검사로 실패했다(CLI exit5).
|
||||
C08b는 기존5 grid 실행 후 첫 추가 grid에서
|
||||
hidden position 판정 실패로 종료했다(599.92초, native8). C08a의 추가 grid/hidden 판정은
|
||||
[승인된 변경](c08a-refinement-proposal.md)이다. 승인 grid7개를 실행한 Release는
|
||||
최종 오차·차수를 만족했으나 q increment trace 및 추가 velocity gate로 native8이었다.
|
||||
누적 산술 수정과 계약 정정 후의 최신 검증을 별도로 수행한다.
|
||||
|
||||
보상 누적 변경본의 C08a 전체7 grid도 888.432초·native8로 종료했다.
|
||||
Whole/requested 좌표 trace는 각각58건 실패했다. 독립 exact 검산에서
|
||||
58개 모두 현재 값이 가장 가까운 binary64 좌표였으며 인접 좌표도 원 기준을
|
||||
만족하지 못했다. [좌표 표현 분리 제안](c08-n3-coordinate-representation-proposal.md)은
|
||||
HHT-ADR-016으로 승인됐으며 변경본의 검증은 진행 중이다. 승인 이전 FAIL 판정은 보존한다.
|
||||
ADR-016 exact threshold 변경본은 전체 Debug target build 및 focused9개가 통과했다
|
||||
(149.36초, native0). N3 산술6개, warped 공유 절점 실제 N5, genuine nonzero C1 및
|
||||
독립5³ 관성 대조의 범위다. 초기 재구성 C09·공식 C08 grid·production reference·
|
||||
전체 configured Debug 검증 완료를 뜻하지 않는다.
|
||||
Actual N5 third-gradient mutation 검사는 통과했다. Proper-Q C09의 초기
|
||||
행별 평형 실패는 canonical primitive-gradient 수정 후 통과했지만,
|
||||
direct director increment 변경본도 increment1·outer100의 physical moment N2에서
|
||||
실패했다. 요소 관련 Debug16개 PASS를 전체 C09 통과로 승계하지 않는다.
|
||||
승인 N2 채널 기준 및 실제 재조립 scale와의
|
||||
계약 정정은 [후속 실행 기록](temporal-remediation.md#10-보상-좌표-누적-적용-후-재검증)을 따른다.
|
||||
|
||||
문서 gate의 완료와 solver 기능의 완료를 구별한다. 현재 구현 단계에서는 내부 수치 검증, solver build/test 및 지정 reference 해석·비교를 실행한다. 통과 여부와 physics 평가는 실제 evidence로 갱신한다.
|
||||
|
||||
2026-10-13 ADR-017 구현 전 최신 Release 공식 C08a7-grid는470.47초·native0으로
|
||||
통과했다. Configured Debug 관성13개·actual N5·partition 회귀는 통과하지만
|
||||
C09 full Newton100은 실패했다(전체 focused15 PASS·1 FAIL). Helper/partition
|
||||
추가 Debug 두 검사는 native0이다. 이 bounded evidence는 ADR-017 변경본의
|
||||
검증으로 승계하지 않는다. [현재 실행 기록](temporal-remediation.md)을 따른다.
|
||||
|
||||
ADR-017 변경본의 configured Debug C09는 여섯 solver trajectory를 완료했지만
|
||||
finite-rotation global covariance에서 native8·113.03초로 실패했다.
|
||||
[실제 진단](channel-newton-covariance-diagnostic.md)은 matched-state assembly와
|
||||
비선형 selector recurrence 차이를 분리했다. [고정 null 보완공간 제안](fixed-null-basis-proposal.md)은
|
||||
HHT-ADR-018로 승인된 후속 chart/integrator 변경이며 기능 완료 checklist는 그대로 미완료다.
|
||||
|
||||
ADR-017 최종 parity의 Release C08a7-grid+helper2는 native0·760.84초에
|
||||
통과했다(최소order1.80500237/N7 separation157.542906). Debug 실제 초기 이력
|
||||
64-step+helper2도 native0·786.88초다. 이 bounded 결과는 C09 covariance,
|
||||
C08b 전체8-grid·원본 production 비교·전체 configured Debug의 대체가 아니다.
|
||||
|
||||
ADR-018의 첫 configured Debug 전체 target build는 native0이며, 같은 동결 source의
|
||||
focused26개가 native0·176.41초에 통과했다. 비영 initial analytic null의 비성분 basis,
|
||||
부분구속 exact0·proper-Q 평면 변환·S/G 분리·계수 radius 보존·N3/제한 Newton/실패 보존과
|
||||
실제 warped/shared-node mixed-time N5 및 항 누락 검사가 포함된다(N5 152.47초).
|
||||
이는 C09 전체 이력, graph coefficient-BL certificate, 공식 C08·원본·전체 Debug의
|
||||
완료 evidence가 아니다. 별도 private proper-Q 실행의 inner-graph100 실패도 보존하며
|
||||
변경본 기능 checklist는 미완료다.
|
||||
|
||||
같은 첫 source epoch의 configured Debug C09는 native8·238.51초에 실패했다.
|
||||
Proper-Q 병진 trajectory의 증분2·t=0.5에서 inner-graph100에 도달했다.
|
||||
독립 raw 감사는 전체 q/z의4-cycle과 일부 phase의 정확한2-lag global-q 반복을
|
||||
확인했다. Private z만 검사하던 기존 반복 감지의 보완은 원 endpoint 기준을
|
||||
유지하는 수정으로 진행하며, 변경본 C09 통과와 공변성 판정은 아직 미완료다.
|
||||
|
||||
Actual-q 반복 감지와 graph certificate 보완을 포함한 후속 Debug binary의
|
||||
경계12개 검사는 native0·2.86초, configured C09는 native0·117.23초에 통과했다.
|
||||
Native basis 생성의7개 입력·63계수는 같은 raw binary64 입력과 고정 선택축의
|
||||
독립 Decimal1000/1200 대조에서 실제 출력 radius 안에 있었다.
|
||||
Controller 소스의 실행 중 한정 위치 이동·복원 후 hash 불일치는 별도로 기록하며,
|
||||
이 실행을 완전한 source7 identity 일치로 표현하지 않는다. Production·검사 exporter·
|
||||
실행 binary의 관련6개 hash는 일치한다. Projection/lift의 오차 반경을 실제
|
||||
Neumaier 합산 순서로 재현하는 후속 소스와 fresh identity 검증은 진행 중이다.
|
||||
공식 C08·원본·전체 Debug와 기능 완료 checklist는 계속 미완료다.
|
||||
|
||||
Neumaier source-order projection·p→z combined lift·실제 frame 중심 차이 반경을
|
||||
반영한 최종 epoch의 configured Debug 전체 target build는 native0이다.
|
||||
Controller 경계4개(native0·2.15초), reduced-core27개(native0·372.14초),
|
||||
CA/제한 Newton/N7 omitted-U5개(native0·1.98초)가 통과했다.
|
||||
Actual warped/shared mixed-time N5 및 항 누락 검사는314.76초에 통과했다.
|
||||
소스6개와 실행 binary의7개 SHA는 실행 전후 모두 일치하며 소스 스냅샷도 보존했다.
|
||||
Release C08a7-grid와 새 production 원본 해석은 실행 중이다. 해당 결과와
|
||||
C08b8-grid·원본 비교·독립 물리·전체 Debug를 아직 완료로 표시하지 않는다.
|
||||
|
||||
같은 Neumaier epoch의 configured Debug C09는 native0·217.24초에 통과했다.
|
||||
동결 source snapshot과 실행 binary를 보존했고, 후속 controller 수정은 해당
|
||||
CTest 종료 후 승인된 수정 범위에서 수행했다.
|
||||
Release C08a7-grid는 native8·819.31초로 실패했다. 실패83,520건은 모두 새
|
||||
basis-lift 일관성 검사 하나이며, 다른 시간수렴·hidden·N7 오류는 보고되지 않았다.
|
||||
Controller가 `LpᵀδA` 대신 `Lpᵀδa`를 비교한 `1+α` 누락을 독립 검토로 확인했다.
|
||||
Production에는 해당 계수가 이미 올바르게 적용되어 있다. 기준을 유지한 controller
|
||||
수정의 Debug build 및 비성분 basis 계수 누락 회귀는 native0·1.24초에 통과했다.
|
||||
수정 후 공식 C08a7-grid 재검증은 아직 완료되지 않았다.
|
||||
|
||||
최종 controller 계수 수정본의 공식 Release C08a7-grid와 계수 관련 회귀2개는
|
||||
native0·703.90초에 통과했다(C08a 자체703.39초). 승인된 마지막 세 grid의
|
||||
최소 시간수렴 차수는1.80500237, 최소 N7 separation은157.615676이다.
|
||||
소스6개와 Release 검사 binary의7개 SHA가 실행 전후 일치한다.
|
||||
실행 원본과 별도 계산한 지표는 `adr018-filter-c08a-release.raw.log` 및
|
||||
`adr018-filter-c08a-metrics.json`에 보존했다. 승인된 C08b 전체8-grid와
|
||||
production 원본 해석은 실행 중이며, 원본101-frame 비교·독립 물리·전체
|
||||
configured Debug와 기능 완료 checklist는 여전히 미완료다.
|
||||
|
||||
같은 동결 source에서 필수 `python scripts/execute.py`를 시작했다.
|
||||
실행 시작 시 소스6개·Debug 검사 binary의7개 SHA가 이전 identity와 일치했다.
|
||||
해당 실행은 전체 deadline1800초에 도달하여 2026-10-13 14:40 KST에
|
||||
native1로 종료했다. 출력상44개 검사는 통과했으며45번 C08a 시간수렴
|
||||
실행 중 timeout이었다. 이는 solver 검사 실패의 확정이나 전체 PASS가 아니다.
|
||||
`adr018-filter-configured-harness`와 별도 `adr018-filter-harness-timeout/`에
|
||||
종료 및 부분 CTest 기록을 보존했다. Debug 자식 프로세스가 남지 않았음을
|
||||
확인한 뒤 동일 preset 전체 CTest를 직접 시작했으며, 최종 native 결과는
|
||||
`adr018-filter-full-debug`로 별도 확인한다. 제외 검사나 기준 완화는 없다.
|
||||
|
||||
2026-10-13 16:33:50 KST 사용자가 세 실행의 종료와 저장 구간 비교를 요청했다.
|
||||
원본 Release 해석·Release C08b·전체 Debug CTest 및 자식 프로세스를 모두
|
||||
종료했으며 native exit는 각각 `-1`이다. 사용자 중단으로 분류한다.
|
||||
Debug44/856 PASS와 완료된 `h=1/64` controller 요약의 Release 일치,
|
||||
원본 증분99·t=9.9까지 accepted 로그의 수렴 상태를 검산했다.
|
||||
중간 HDF5가 없어 현재 Abaqus U/UR 비교는 수행할 수 없다.
|
||||
[중단 시점 비교](interrupted-validation-comparison.md)에 근거와 한계를 기록했다.
|
||||
사용자 요청에 따라 hexa 완료·성능 최적화 후 전체 검증을 다시 수행하며,
|
||||
이번 중단 후 해석·CTest를 재시작하지 않는다.
|
||||
|
||||
@@ -2,12 +2,31 @@
|
||||
|
||||
## 목적과 현재 상태
|
||||
|
||||
Consistent kinetic mass, 정확한 유한회전 관성·convective 항, HHT 잔차·접선·증분 state와
|
||||
HDF5를 구현했다. 원본 U의101-frame 비교 PASS와 UR 경고200건 기록이 있지만 실제 shell의
|
||||
2026-10-11 [HHT-ADR-012](ADR.md)에 따라 nodal lumped kinetic mass로 변경한다.
|
||||
변경본의 관성·convective 항·접선·state/HDF5 관련 Debug 검사38개와 Python 비교기137개가
|
||||
통과했고, 같은 production 소스의 Release 원본 U 101-frame 비교 PASS·UR 경고200건을
|
||||
확인했다. 독립 수치·물리 검토는 bounded PASS다. [채택 보고서](../hex8-structural-analysis/lumped-mass-adoption.md)에
|
||||
검증 구성과 한계를 기록한다. 새 전체 Debug CTest789개는 자연 종료했다(native8:
|
||||
784 PASS·4 FAIL·1 SKIP). Stale Hex8 test 두 개는 수정 후 공식 focused 검사에서 PASS다.
|
||||
이 실행 당시 C08a 시간 정확도 FAIL·C08b 새 Newton 회전 예외 및 C04a SKIP이 남았다.
|
||||
2026-10-12 사용자 요청으로 [두 시작점 정책](newton-start-policy.md)을 구현했다. 관련37개
|
||||
Debug 회귀와 독립 수치 검토가 완료됐다. 전체802 CTest는 제외 없이 자연 종료했다
|
||||
(11384.61초·native8:799 PASS·C08 정확도 FAIL2·기존 C04a SKIP1). 실제 C08b의5개 grid와
|
||||
새65-frame runtime 회귀에서 회전 예외가 해소됐으며 fresh 원본 U101 families PASS·
|
||||
UR 경고200건과 독립 kinetic/balance 대조를 확인했다. Source·원본·binary identity는
|
||||
검증 전후 일치한다. Runtime 해결을 시간 정확도 해결로 해석하지 않는다.
|
||||
다음 기존 consistent 구현의 이력과 원본 변위 통과를 현재 전체 검증으로 승계하지 않는다. 실제 shell의
|
||||
C08a/C08b 시간수렴 실패는 미해결이다. 구현됨과 기능 검증 완료를 구분한다.
|
||||
|
||||
## 계약과 사용법
|
||||
|
||||
2026-10-12 후속 [HHT-ADR-014](ADR.md)로 P 판정·C08b 최종 finer grid와 reduced shell
|
||||
HHT/schema v2 구현을 승인받았다. 실제 채택식은
|
||||
[축소 좌표 정식화](formulation-reduced-coordinate.md),
|
||||
[carried-A arithmetic/noise](formulation-carried-a-noise.md),
|
||||
[schema v2 상세](io-reduced-coordinate.md)를 따른다. 현재 구현과 검증은 진행 중이며
|
||||
기존 v1 결과·실패 이력을 변경본 통과로 승계하지 않는다.
|
||||
|
||||
- [PRD](PRD.md)·[ADR](ADR.md)·[요구사항](requirements.md): 범위·미해결·현재 checklist.
|
||||
- [정식화](formulation.md), [유한회전 관성](formulation-inertia.md),
|
||||
[가속도 복구 후보](formulation-acceleration-recovery.md): 채택식과 미채택 후보 구분.
|
||||
@@ -16,13 +35,28 @@ C08a/C08b 시간수렴 실패는 미해결이다. 구현됨과 기능 검증 완
|
||||
- [수치 기준](numerical-controls.md), [검증 사례](verification-cases.md),
|
||||
[수학 검산](numerical-review.md#numerical-review), [연구](research.md#research).
|
||||
- [구현 검토·실패·수정](implementation-numerical-review.md), [물리 평가](physics-evaluation.md).
|
||||
- [Consistent/lumped 질량 비교 실험](mass-comparison.md): 채택 전 private 비교 이력과 후속 승인; production 재검증과 구별.
|
||||
- [Newton 회전 실패 원인·해결 후보](newton-rotation-investigation.md): 변경 전 moving-null 접선 상쇄의 독립 대조와 private 후보 실험.
|
||||
- [두 시작점 정책의 구현·검증](newton-start-policy.md): HHT-ADR-013 실제 정책·시행착오·현재 evidence·적용 한계. C08 시간 정확도와 구분.
|
||||
- [시간 정확도·P 감소 실패의 해결 후보 조사](research.md#temporal-remediation-research): 축소 좌표·속도 수준 DAE 적분·시간 해상도·합산의 조사와 채택 경계. Solver 변경 또는 실패 폐쇄를 뜻하지 않는다.
|
||||
- [시간 정확도·P 후속 검증](temporal-remediation.md): 소형 DAE 독립 검산, 실제 finer-grid와 carried-A private 산술 후보, P strict-decrease 계약 문제. 기존 C08 FAIL과 미채택 알고리즘을 구분한다.
|
||||
- [Reduced C08 구현](implementation-c08-reduced.md): 실제 controller·N7·전체 산술 이력 및 좌표 증분 누적의 경계.
|
||||
- [C08a 추가 refinement 결정](c08a-refinement-proposal.md): HHT-ADR-015로 승인된 두 변경과 승인 전 진단 evidence. 변경본 공식 검증은 별도로 수행한다.
|
||||
- [N3 좌표 표현 결정](c08-n3-coordinate-representation-proposal.md): HHT-ADR-016으로 승인된 exact pair 증분 검사와 RN-even 저장 검사. 승인과 변경본 검증 완료를 구분한다.
|
||||
- [병진 유지 Newton 명세](c09-channel-newton-proposal.md), [독립 검토와 N7 대응](numerical-review-channel-newton.md): HHT-ADR-017로 승인된 제한 보정·부분 행렬 N2-L 검사·full-model defect 보존. [C09 산술 진단](c09-newton-rounding-diagnostic.md)의 endpoint 존재증거와 자연 trajectory 검증을 구분한다.
|
||||
- [Channel Newton 구현과 실행 기록](implementation-channel-newton.md): private helper/자연 proper-Q 진단과 configured 검증의 범위를 구분한다.
|
||||
- [유한회전 공변성 실패 진단](channel-newton-covariance-diagnostic.md), [초기 null 직교 보완공간 제안](fixed-null-basis-proposal.md): 실제 selector recurrence 반례와 HHT-ADR-018로 승인된 basis/integrator 변경의 경계.
|
||||
- [고정 null 기저 상세 정식화](formulation-fixed-null-basis.md), [독립 수치 검토](numerical-review-fixed-null-basis.md): sparse projection/lift, 혼합 부분구속 chart, augmented scaled operator, 초기 상태와 CA/N7의 구현 계약. 정적 수식 검토와 변경본 실행 검증은 별도다.
|
||||
- [고정 null 기저 구현과 실행 기록](implementation-fixed-null-basis.md): 실제 scaled solve, basis 계수 오차 반경, global 좌표 반복 감지와 현재 검증의 범위.
|
||||
- [고정 null 기저 물리 평가](physics-evaluation-fixed-null-basis.md): 새 C09의 실제 검증 범위, 강제 강체 병진의 독립 한계 계산과 reference 물리 검산의 진행 상태.
|
||||
- [사용자 중단 시점 비교](interrupted-validation-comparison.md): Debug44개 완료와 Release 요약 일치, 원본99증분의 수렴 로그, 현재 HDF5 부재로 인한 Abaqus 비교 한계 및 후속 실행 순서.
|
||||
|
||||
환경·명령은 [operations](../operations.md)를 따른다. I/O의 지원 `*DYNAMIC, DIRECT` subset과 고정 HHT 계수,
|
||||
출력의 물리적 가속도와 보조 acceleration 구분을 확인한다.
|
||||
|
||||
## 재사용 Handoff
|
||||
|
||||
Eigen derived lumped mass와 HHT consistent kinetic mass는 목적이 다르다. Total rotation-vector
|
||||
Eigen의 기존 nodal block lumped mass는 유지하고 HHT도 동일한 scalar moments의 nodal kinetic measure를 사용한다. HHT의 회전 의존 M·convective force·접선과 운동량은 같은 measure로 계산하며 scalar diagonal 치환은 하지 않는다. Total rotation-vector
|
||||
chart의 generalized moment와 spatial moment도 다르다. Physical a와 algorithmic A를 바꾸어
|
||||
쓰지 않으며 moving-null 제약과 동적·대수 초기평형을 유지한다. 같은 trial에서 full residual,
|
||||
inertia와 tangent를 계산하고 실패 candidate가 accepted history를 변경하지 않게 한다.
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
# C08 N3 좌표 표현과 increment arithmetic 분리 제안
|
||||
|
||||
상태: **2026-10-13 사용자 승인, HHT-ADR-016**. 아래 변경안의 구현·검증을 진행한다. 승인 이전 공식 compensated C08a는 native8/888.432s **FAIL**이며 변경본 통과로 승계하지 않는다. 아래 승인 전 설명은 제안 당시의 범위와 결정 근거로 보존한다.
|
||||
|
||||
## 현재 충돌의 실제 증거
|
||||
|
||||
공식 로그 `.dryforge/hht-remediation-20261012/compensated-c08a-release.log`의 SHA256은 `a8e8d5fcee3fe1d6aa60b56394fc53a8f74f42807e7c10089e8268aeb8611309`이다. Required requested-trace 실패는58개(512 grid6개,1024 grid52개)이며 동일 component의 whole-q update 실패도58개다.
|
||||
|
||||
각17-digit 로그 값을 원래 binary64로 복원하여 Python `Fraction`으로 정확히 계산했다. Gate target은 `old_p + stored_increment`, 별도 requested target은 `old_p + signed_sum + compensation`이다. Gate target의 가장 가까운 binary64 좌표와 양쪽 인접 좌표를 검사했다. **모든58개에서 현재 high가 최적값이며 세 좌표 모두 원1e−12 조건에 실패한다.** 좌표 간격은 monotonic이므로 더 먼 binary64 좌표도 통과할 수 없다. 이 사례들의 subtraction low는0이며 최종 subtraction 손실이 원인은 아니다.
|
||||
|
||||
| 사례 | 첫 실패 | 최악 실패 |
|
||||
|---|---:|---:|
|
||||
| grid/increment/full | 512/278/6 | 1024/555/6 |
|
||||
| old p | .071709031890658609 | .07170906968934286 |
|
||||
| current/nearest high | .071707935756794142 | .07170874594859544 |
|
||||
| stored increment | −1.096133864469764e−6 | −3.2374074742216707e−7 |
|
||||
| uncancelled scale | 1.0961338644697645e−6 | 3.237407474221672e−7 |
|
||||
| allowed defect `1e−12*scale` | 1.0961338644697644e−18 | 3.2374074742216723e−19 |
|
||||
| actual best defect | 2.600391148070702e−18 | 3.911862848216376e−18 |
|
||||
| best ratio | 2.3723299063737948e−12 | 1.208331938245387e−11 |
|
||||
| predecessor/current/successor ratios | 1.02883e−11 / 2.37233e−12 / 1.50330e−11 | 3.07837e−11 / 1.20833e−11 / 5.49503e−11 |
|
||||
| current low | −2.6003877354211524e−18 | −3.911862569787138e−18 |
|
||||
|
||||
두 표 사례는 `high + low`와 정확 requested target이 **exactly 동일**하다. 전체58개 pair-target gap의 최대는7.703719777548943e−34이다. 따라서 남은 실패를 더 정밀한 correction 누적으로 해결한다는 증거는 없다. 이전 C08b1024의 plain-addition 실패는 neighbor가 PASS 가능했고 compensated arithmetic으로 실제 해결된 별도 사례다.
|
||||
|
||||
재현 command: `python .dryforge/hht-reduced-c08a-finer-20261013/analyze-compensated-c08a.py` (exit0). 전체58개 exact rational gap, nearest/neighbor ratio, source-log identity는 같은 디렉터리 `compensated-c08a-representability.json`에 기록했다. 독립 numerical reviewer도 Fraction 계산으로 같은 결론을 확인했다. 실행 중인 shared binary나 원본 reference는 변경하지 않았다.
|
||||
|
||||
## 최소 변경안: 산술 검사는1e−12, 저장 표현은 별도 측정
|
||||
|
||||
원N3의 작은 increment 손실 검출 의도는 유지한다. **독립 requested trace와 실제 compensated candidate pair의 increment를 기존 uncancelled scale 및1e−12로 검사**하고, public/model에 저장하는 high의 표현 오차를 별도로 검사하는 방안을 제안한다. 이 변경은 acceptance 변경이므로 사용자 승인 전 구현하지 않는다.
|
||||
|
||||
1. 현재 실제 TwoSum 경로의 `(p_high,p_low)`와 독립 Neumaier requested trace를 유지한다. Trace를 candidate state에 복사하지 않는다. Predictor의 원래 두 요청 항, 선택된 old-start의 exact correlation, 모든 requested Newton correction을 포함한다.
|
||||
2. Exact candidate increment `D_pair=(p_high+p_low)−old_accepted_high`를 EFT TwoDiff/TwoSum expansion으로 계산한다. `|D_pair−T|/S<=1e−12`를 whole-q 및 requested trace 양쪽에 적용한다. `T`는 독립 요청 trace 또는 원래 HHT 우변이고 `S`는 해당 원래 uncancelled 항 절댓값 합이다. Old accepted history는 실제 저장 high이며 이전 increment의 low를 숨겨서 더하지 않는다. Zero-scale exact0와 finite-first는 유지한다. `p=pp+beta*h²*Ar`를 다시 계산하여 현재 primary candidate를 대체하지 않는다.
|
||||
3. 실제 저장 high가 pair의 round-to-nearest/ties-to-even 결과인지 별도로 검사한다. `B_repr=|p_low|`를 측정하며 인접 좌표 spacing의 half-ULP 안에 있어야 한다. Exact tie는 even 규칙까지 검사한다. Low의 overflow/underflow 및 EFT 유효성은 fail-closed로 다룬다. 필요 subtraction/trace rounding은 실제 compensated 연산의 별도 outward radius로 기록하며 임의 norm floor를 넣지 않는다.
|
||||
4. Raw stored-high increment의 기존 ratio와 정확 representation distance는 diagnostic으로 계속 기록한다. 별도의 ULP floor나 representation budget을1e−12 분모/허용량에 더하지 않는다. Arithmetic gate와 independently checked correct-rounding gate를 모두 통과해야 한다. 검증 expansion 자체의 유효성/finite 조건을 만족하지 못하면 FAIL이며 표현 오차로 산술 결함을 숨기지 않는다.
|
||||
|
||||
현재 남은 두 사례의 pair arithmetic defect는0인 반면 stored high representation defect가 scale 기준을 초과한다. 이 분리가 필요하다는 구체적 근거다. `1e−12` 자체를 올리거나 `max(1,...)` 분모를 추가하는 제안이 아니다. 최종 high 좌표를 nextafter/clamp/projection으로 바꾸는 방식도 사용하지 않는다.
|
||||
|
||||
이 제안은 reduced private p의 resolved whole/requested increment 검사에 한정한다. Absolute q/v/ap/public-A update, full physical residual, hidden constraints, CA whole-history radius, N2/N4/N7, temporal order와 factor100, public schema와 stored reference를 유지한다. Pair low는 실제 arithmetic remainder이며 새로운 물리 history 변수로 재해석하지 않는다. 모든 이전 FAIL 로그는 보존한다.
|
||||
|
||||
## 승인 후 필요한 검증
|
||||
|
||||
- Exact binary64 nearest/half-ULP/tie, subnormal 및 nonfinite 단위 검사. 실제 correction을 누락하거나 잘못 더한 mutation은 arithmetic gate에서 FAIL해야 한다.
|
||||
- 위 공식58개 frozen 사례에서 기존 stored-high criterion FAIL을 먼저 유지하고, 승인된 pair arithmetic 및 representation 검사를 각각 검증한다. 첫/최악 사례와 이전 solvable C08b 사례를 구분한다.
|
||||
- Production와 C08 controller에 같은 기준을 적용하고 configured 관련 unit checks 및 공식 C08a/C08b 전체 grid, N7 separation, 원본 reference를 새 source identity로 재실행한다. 과거 trajectory/scratch PASS를 현재 공식 PASS로 승계하지 않는다.
|
||||
|
||||
관련 구현·이전 red/green: [implementation-c08-reduced.md](implementation-c08-reduced.md). 현재 계약 원문: [numerical-controls.md](numerical-controls.md#n3-update초기화대수조건).
|
||||
@@ -0,0 +1,57 @@
|
||||
# C08a 최종 refinement와 hidden defect 판정 제안
|
||||
|
||||
상태: **2026-10-13 사용자 승인**. 아래 두 변경을 [HHT-ADR-015](ADR.md)에 기록했다.
|
||||
기존 FAIL과 진단 evidence를 보존하며, 승인 후 변경본의 공식 검증은 미완료다.
|
||||
근거는 [독립 검토](numerical-review-reduced-coordinate.md)와
|
||||
[실행 기록](temporal-remediation.md#2026-10-13-후속-실행)이다.
|
||||
|
||||
## 실제 진단 evidence
|
||||
|
||||
기존 16/32/64/128/256 grid를 변경하지 않은 Release 실행은 native8이다.
|
||||
별도 scratch target은 같은 실제 shell controller·물성·독립 forcing·원본 초기값을
|
||||
사용하여 512/1024 grid만 추가 조사했다. MKL/OMP=1, native0, 323.759초이며,
|
||||
그 실행의 `official_acceptance=NOT_EVALUATED` marker를 보존했다.
|
||||
공식 acceptance 또는 구성된 전체 Debug 통과로 승계하지 않는다.
|
||||
|
||||
| denominator | 최대 normalized angular-a error | 직전 grid와 차수 | error/N7 최대 noise |
|
||||
| --- | --- | --- | --- |
|
||||
| 256 | 1.003052994395584e-4 | 128→256 약2차 | 기존 실행에서 factor100 만족 |
|
||||
| 512 | 2.8705427708469167e-5 | 1.8050023730926419 | 167.7319066257858 |
|
||||
| 1024 | 7.3119405878985488e-6 | 1.9729972986554705 | 157.6087511308705 |
|
||||
|
||||
나머지 5개 channel도 두 finer refinement에서 차수1.8 이상, finest error1e-4 이하와
|
||||
factor100 separation을 만족한다. 이후 controller/source 수정본은 새로 실행해야 한다.
|
||||
Raw log·source/production library/binary identity는
|
||||
`.dryforge/hht-reduced-c08a-finer-20261013/`에 보존했다.
|
||||
|
||||
## 제안1: 최종 두 grid 추가
|
||||
|
||||
기존 16–256 evidence와 실패를 보존하고 512/1024를 C08a 최종 refinement로 추가한다.
|
||||
물성·T=1·forcing·정확한 초기값·HHT 계수는 유지한다. 최대 q/v/physical-a error
|
||||
`<=1e-4`, 마지막 두 refinement의 차수 `>=1.8`, factor100 N7 separation은 유지한다.
|
||||
기존 grid의 실패를 삭제하거나 초기 frame·초기 transient를 제외하지 않는다.
|
||||
|
||||
실제 physical-a 오차와 algebraic-only recovery의 오차는 거의 동일했다.
|
||||
독립 oscillator probe에서도 stiff elastic startup과 최대시점 이동으로 64→128 차수가
|
||||
1.8 미만일 수 있었다. 이는 actual shell의 정확한 원인 확정 또는 새 grid의 성공 보장이
|
||||
아니며, 더 잘 분해한 고주파 transient에서 동일 오차/차수 기준을 평가하는 제안이다.
|
||||
|
||||
## 제안2: 재구성된 hidden1/2의 absolute 판정
|
||||
|
||||
Reduced rate reconstruction에서 analytic ψ1/ψ2는 0이다. 현재 normalized defect는
|
||||
hidden1 약1e-16, hidden2는256/512/1024에서 약3.64e-13/8.84e-12/1.71e-11로
|
||||
변동한다. 이 zero quantity의 strict refinement 감소를 truncation order로 해석하지 않는다.
|
||||
|
||||
C08a의 hidden1/2에는 각 frame의 `|ψk_i|/Sk_i <=1e-10` upper bound를 요구하고
|
||||
strict temporal decrease를 대체한다. `Sk_i`는 원래 사용한 같은 단위의 uncancelled
|
||||
scale이며 새 floor·clamp·물리 가속도 projection을 도입하지 않는다. Scale0이면
|
||||
raw defect도 exact0이어야 한다. Raw ψ1/ψ2와 scale·normalized 최대값을 계속 기록한다.
|
||||
실제 q/v/physical-a 시간수렴과 N7 판정은 별도로 모두 통과해야 한다.
|
||||
|
||||
이는 기존 초기 N3의 숫자를 C08a의 endpoint hidden1/2에도 적용하는 **acceptance 변경**이다.
|
||||
기존에 endpoint1/2 unconditional upper bound가 이미 있었다고 주장하지 않는다.
|
||||
Defect 자체를 포함한 graph RHS uncertainty로 같은 defect를 unresolved 처리하거나,
|
||||
단위가 다른 physical-a N7 noise를 hidden uncertainty로 재사용하지 않는다.
|
||||
|
||||
승인된 검증 계약은 [검증 사례 C08a](verification-cases.md), 현재 완료 여부는
|
||||
[PRD checklist](PRD.md)를 따른다. 변경본 전체 grid와 필수 검증을 새로 실행한다.
|
||||
@@ -0,0 +1,28 @@
|
||||
# C09 translation 유지 Newton 전략 — 승인된 구현 명세
|
||||
|
||||
상태: 2026-10-13 사용자 승인, [HHT-ADR-017](ADR.md). 아래 승인 전 조사와 검증 요구는 보존한다. 구현·자연 trajectory 통과는 별도 evidence다.
|
||||
|
||||
현재 full Newton100 FAIL은 기준 자체의 불가능이 아니다. 실제 최종 translational p high/vp/ap/Ar를 고정한 read-only angular/hidden block 진단은2회 보정 후 원 full N2, hidden evidence, N4, graph regularity 및 N3 update 검사를 만족했다. Phi ratio는1→.00898031→1.4072994e-13이고 U ratio8.70943e-16는 그대로다. Commit하지 않았으며 private 의도 종료 native1/5.703s다. 공용 알고리즘은 변경하지 않았다.
|
||||
|
||||
## 승인 요청 범위
|
||||
|
||||
같은 HHT equations/원 full acceptance를 유지하면서, 한 증분 안에서 이미 원 translational residual와 correction 검사를 만족하는 후보의 translational p/Ar를 유지하고 angular/hidden Newton만 수행하는 내부 전략을 승인했다. 새 물리구속이나 BC가 아니며 공개 입력/결과/threshold를 변경하지 않는다. 기존 full augmented Newton 정책의 실행 방식과 N2-L 검사 영역을 아래 조건에 한해 변경한다.
|
||||
|
||||
1. Original pold/pp start 선택과 전체 augmented tangent assembly를 유지한다.
|
||||
2. 비어 있지 않은 U의 원 residual 및 마지막 실제 mapped correction의 병진 q/v/a/public A와 관련 private Ar 검사가 모두 통과하고 phi residual이 실패한 경우에만 진입한다. Phi correction-only 실패나 empty channel은 진입 조건이 아니다. 원 scale와 threshold 및 scale0의 exact-zero 검사를 유지한다.
|
||||
3. 원 scaling을 적용한 full augmented system을 K*x=b, x=(dp,dz,dvz,daz)로 둔다. Free translational p index 집합 U를 제외한 J의 실제 K[J,J]*x[J]=b[J]를 풀고 x[U]=0으로 둔다. All psi/velocity-psi/acceleration-psi rows와 all auxiliary blocks는 남긴다. 원 direct solver와 backward-error threshold 1e-12를 사용하되, **N2-L 검사 영역은 실제 부분 행렬 J로 변경된다. 원 all-free 선형계 검사와 동일하지 않으며 이 변경도 승인 대상이다.** Full endpoint 잔차 검사는 유지한다.
|
||||
4. Translational p high/low/Ar와 해당 vp/ap를 bitwise copy한다. Zero correction을 다시 누적하여 pair를 재정규화하지 않는다. Angular p와 Ar, implicit graph/rates는 원 갱신 식을 적용한다. 원 incremental trace와 inherited arithmetic history radius는 reset/clamp하지 않는다.
|
||||
5. 이후 매 candidate에서 원 full E, S_U, S_phi 및 correction 검사를 다시 적용한다. U가 원 조건을 벗어나면 다음 solve를 full Newton으로 선택한다. Candidate를 되돌려 retry하거나 예산을 환급하지 않는다. 양 모드의 actual correction을 합쳐 원100회 한도를 적용하며 101번째 solve는 없다. Restricted singularity/nonfinite/backward-check 실패는 원 실패 절차로 처리한다.
|
||||
6. Commit에는 기존 hidden/N4/regularity/N3/filter 및 모든 endpoint 검사를 그대로 요구한다. 모드나 선택 좌표를 다음 accepted history의 새 physics로 영속화하지 않는다.
|
||||
|
||||
## 검증과 정식화 검토 범위
|
||||
|
||||
Private frozen-final 진단은 표현가능한 endpoint의 존재를 보여주며, 처음부터 자연 HHT trajectory로 이 정책이 수렴한다는 증거는 아니다. Actual C09 initial/properQ/finite-phi/multiple-partitions 및 existing failure/state/100-boundary 검사가 필요하다. 같은 actual method를 사용하는 C08 controller도 일치시켜야 하며 공식 temporal/N7, configured full build/CTest 및 원본 reference를 새 identity에서 다시 검사해야 한다.
|
||||
|
||||
독립 정식화 검토를 완료했다. [검토와 N7 구현 명세](numerical-review-channel-newton.md)는 실제 restricted last operator와 원 full-model operator를 구분한다. Restricted-last의 N7은 실제 correction, restricted linear defect 해, **누락 U 행을 포함한 같은 trial의 full linear defect 해**, fresh accepted full residual/hidden defect 해의 mapped norm 네 항을 합산한다. Full-last는 기존 세 항을 유지한다. 모든 q/v/a/private Ar/public A mapping과 inherited CA radius를 유지하고 factor100을 바꾸지 않는다. 추가 full-model solve 실패는 N7 통과로 처리하지 않는다. 이 estimator는 forward-error bound가 아니다.
|
||||
|
||||
승인 후 trigger/thaw·실패 rollback·combined100/101 경계와 omitted-U defect 회귀를 먼저 구현하고 실제 C09 및 C08 전체 승인 grid, configured Debug 전체 검사와 원본 reference를 재검증한다. Restricted block singularity, U/phi coupling으로 인한 모드 왕복 및 large-arm/tiny-convective representation은 별도 검증 위험이다. 검토 완료는 production 구현 또는 자연 trajectory의 통과를 뜻하지 않는다.
|
||||
|
||||
## 증거
|
||||
|
||||
`.dryforge/hht-fixed-translation-c09-20261013/fixed-procedure.cpp`는 captured final100 state의 history/predictor identity를 확인하고 매 evaluation에 translational q/v/a의 bitwise 불변을 검사한다. Fixed block의 source/current inertia/library SHA는 identity.json에 저장했다. fixed-runtime.log, fixed-iteration.log 및 fixed-analysis.json은 모든48 full rows와 요청/적용 보정을 보존한다. 원 full Newton 경로의 선형/반올림 비교는 [C09 산술 진단](c09-newton-rounding-diagnostic.md)에 있다.
|
||||
@@ -0,0 +1,31 @@
|
||||
# C09 Newton 보정과 저장 좌표 산술 진단
|
||||
|
||||
Latest RateSum library snapshot과 coefficient-first inertia objectoverride의 실제 properQ C09 fixture는 원100회 정책으로 increment1/outer100에서 FAIL했다. Private build/link native0, actual runtime native1/454.432s다. 초기 재구성은 PASS지만 전체 C09 closure는 아니다. Source/기준/state/공용 binary/reference는 변경하지 않았다.
|
||||
|
||||
| 최종 채널 | numerator | 원 channel scale | ratio |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| U | 1.3322676295501878e-15 | 1.5296843745689783 | 8.70943e-16 |
|
||||
| phi | 3.3567686214448646e-17 | 3.3567686214448646e-17 | 1 |
|
||||
|
||||
최악full46에서 physical force−3.340385641864892e-17, inertia−1.6382979579972208e-19, drilling2.5868401886028114e-36이다. Selected rotational rows의 max residual은3.3567686214448646e-17이고 omitted z rows는6.963816335630029e-18이다. Selected rows도 실패하므로 omitted physical-null moment만 남는 상황이 아니다. Actual n·E max3.85186e-33 및 scalar psi max3.25696e-35는 지배적이지 않다.
|
||||
|
||||
## 실제 보정과 force authority
|
||||
|
||||
Last90..99의 full mapped correction을 원 Kint/Iq/Iv/M에 적용한 predicted E+Kint*dq+Iq*dq+Iv*dv+M*da는 모든 rotational row에서 max4.429060775850292e-32다. 같은 endpoint의 선형 해가 selected/omitted full residual을 모두 zero 근처로 옮긴다는 지표다.
|
||||
|
||||
그러나 physical force는 실제 저장 high 좌표를 평가한다. Zero-state physical matrix(Kinternal−Kdrilling)와 anchored displacement/tiny rotation의 exact stored-coefficient Fraction 계산은 native force와 max defect/uncancelled action2.038688672288276e-16로 일치했다. Last90..99 actual physical-force 변화와 K0*actual-high-coordinate-change의 max차이도1.5450867111269945e-31다. 현재 residual을 physical force value/gradient 불일치로 설명할 근거는 없다.
|
||||
|
||||
K0*(actual high change−requested correction)의 max는1.5704396711082182e-16이다. Translation high 반올림 action의 max1.553519432281809e-16이며, 이에 따라 graph가 다시 계산한 dependent z action max1.0770896510389219e-16도 있다. Selected rotary p의 직접 반올림 action은2.8143925125040197e-32에 불과하다. 대표 iteration96/full27에서 requested K0 action−4.092854540103234e-17 대비 actual high action−1.9797251251185415e-16이고 actual force 변화는−1.9797251251185405e-16다.
|
||||
|
||||
400회의 AdvanceCoordinate를 독립 Fraction으로 검사하면 모든 new high가 old high+old low+requested dp의 RN-even과 일치한다. Pair total의 max산술 gap은3.0814879110195774e-33이다. 누적 carry loss나 더 나은 단일 RN high 선택이 현재 근거에 나타나지 않는다.
|
||||
|
||||
이는 현재 full-Newton 경로의 requested correction과 실제 high/implicit-graph map 차이가 physical forcing을 바꾼다는 근거다. 모든 표현가능한 상태에서 원N2를 만족할 수 없다는 증명은 아니다. 기준 완화, zeroing, residual projection 또는 production state 보정은 적용하지 않았다. Final translational high를 고정한 read-only rotary/hidden block 진단은 후속 실행에서 원 endpoint 기준을 만족했다. 결과와 production 미적용 범위는 아래에 기록한다.
|
||||
|
||||
## Artifacts와 명령
|
||||
|
||||
별도 epoch `.dryforge/hht-latest-inertia-final-c09-20261013/`의 identity.json에 source/procedure/library SHA를 보존했다. final-runtime.log에는 last90..100의48 full q/v/a/physical/drilling/inertia/E/scales, p/ap/pp/high/low/Ar 및 requested/applied correction을 기록했다. final-iteration.log는 원 channel norms/판정과 최종100회 실패를 보존한다. final-analysis.json과 parse-final.py는 exact Fraction/RN 및 K0 action 계산이다. physical-map.log/physical-map-exact.json은 같은 physical kernel의 linear-map 감사다.
|
||||
|
||||
실행 명령: `cmd /c .dryforge\hht-latest-inertia-final-c09-20261013\build-final.cmd`, private `final-probe.exe --gtest_filter=Diagnostic.C09RotatedInitialReconstruction`, `python .dryforge/hht-latest-inertia-final-c09-20261013/parse-final.py`. Shared configured 최신 C09/N5/C08/reference 판정은 별도다.
|
||||
|
||||
|
||||
후속 승인된 read-only fixed-translation 진단은2회 보정 후 원fullN2/hidden/N4/regularity/N3를 만족했다. Translational q/v/a는 bitwise 불변이며 commit 전에 의도 종료(native1/5.703s)했다. Phi5.9848273021833354e-32/S4.252704241500445e-19→1.40730e-13다. 따라서 기준의 불가능으로 결론내리지 않는다. [Translation 유지 Newton 제안](c09-channel-newton-proposal.md)은 HHT-ADR-017로 사용자 승인됐으며 production/controller 구현과 자연 trajectory 검증을 진행한다.
|
||||
@@ -0,0 +1,52 @@
|
||||
# Actual C09 공변성 실패 진단
|
||||
|
||||
2026-10-13. Production/tests/기준은 변경하지 않았다. Configured C09는 여섯 trajectory의 실행 성공 후 공변성 비교에서 native8/113.03s로 실패했다. 원본 로그는 `.dryforge/hht-remediation-20261012/adr017-natural-c09-debug-raw.log`다. 아래 private 측정은 실행 성공과 원 공변성 기준 통과를 구분한다.
|
||||
|
||||
## 실제 경로별 오차
|
||||
|
||||
같은 production procedure/operators와 복사한 solver library로 원 순수 병진 pair 및 finite-phi pair를 실행했다. Finite pair는 T=.02를 유지하고 h=.01/.005/.0025로 각각2/4/8증분을 자연 종료했다. 모두 원 endpoint 검사로 accepted됐다. 측정 probe native0/350.545s는 **공변성 PASS가 아니라 여덟 trajectory 실행 성공**이다.
|
||||
|
||||
원 C09 scale은 q=1, v=1/T, a/A=1/T², force=1, director/triad=1이다. 모든 node/component/frame의 최대 오차를 사용했다. 순수 병진 pair는 모든 비교에서1e-10 이하이며 q≤4.45e-16, v≤1.34e-15, a/A≤3.56e-15, force/residual≤1.79e-14, director/triad≤2.23e-16이다. 실패는 finite-phi pair에 있다.
|
||||
|
||||
| Quantity/channel | 2증분 | 4증분 | 8증분 |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| q, angular | 4.2449713e-7 | 1.0008274e-7 | 2.1971053e-8 |
|
||||
| v, angular | 7.9297623e-7 | 2.4574791e-7 | 6.3087721e-8 |
|
||||
| a, angular | 2.5940786e-6 | 6.5595226e-7 | 1.6907375e-7 |
|
||||
| A, angular | 2.4966904e-6 | 6.3710091e-7 | 1.6818281e-7 |
|
||||
| I/Fint, max full component | 5.9519130e-7 | 1.6052073e-7 | 4.1361613e-8 |
|
||||
| director | 4.6176713e-7 | 1.0884266e-7 | 2.3901148e-8 |
|
||||
| triad | 5.6441014e-7 | 1.3284724e-7 | 2.9211792e-8 |
|
||||
|
||||
Finite2의 translational q/v/a/A 오차도 각각6.27749e-10/1.85494e-9/4.76153e-9/4.58596e-9다. 각 경로의 full E는 수렴하지만 서로 다른 accepted physical state가 생긴다. Trajectory residual의 공변성 차이는≤2.14e-16다. Finite2 energy 차이/reference100은 kinetic1.17776e-11, physical3.48377e-12, drilling3.29e-38이다. Angular a 차이의 refinement order는 약1.983/1.956이며,8증분도 원 공변성1e-10 기준에 실패한다. Refinement를 공식 fixture/기준 변경으로 사용하지 않는다.
|
||||
|
||||
## 같은 physical state의 조립을 별도로 비교
|
||||
|
||||
Finite2 source의 각 accepted q/v/a/A를 fixed proper rotation R로만 변환하고 rotated Domain에서 fresh assembly했다. Target trajectory state를 사용하지 않았다. 이 bounded probe는 native0/4.111s다.
|
||||
|
||||
- t=.01/.02의 inertia force 공변성 absolute defect≤5.56e-17, internal force≤1.48e-17이다. Internal force의 max-reference relative defect≤3.00e-15다.
|
||||
- 동일 mass에 대한 `R*(M*x)`와 `M_rot*(R*x)`의 unit-column action defect≤3.39e-20다.
|
||||
- Canonical scalar primitive value 차이≤3.90e-20, full gradient의 rotated comparison 차이≤3.04e-18다(gradient max reference≈.0026).
|
||||
- External force는 exact 일치했다. 잔차 차이≤1.12e-16이다. 잔차 자체가 거의0이므로 잔차를 분모로 한 relative 수치는 원 full N2 scale를 대신하지 않는다.
|
||||
|
||||
이 결과는 해당 상태의 constitutive/mass/primitive 공변성 오차가 trajectory force 차이5.95e-7보다 훨씬 작음을 보여준다. 일반 모든 geometry/state의 공변성 증명은 아니다.
|
||||
|
||||
## Actual recurrence에서 nonlinear selector 문제 확인
|
||||
|
||||
현재 [RC-03/04](formulation-reduced-coordinate.md)는 fixed global-component selector의 p에 HHT/Newmark recurrence를 적용한다. 두 fixture의 initial null direction에서 global Z가 최대이므로 각 node의 φZ가 z이고 φX/φY가 p다. Source finite2의 max |φZ|는 t=.01에서1.4298223e-7, t=.02에서3.2923220e-6이며, max |φ|는 .00361005다. φZ는 algebraic graph에서 복구하므로 source의 global Z 자체는 독립 Newmark 좌표가 아니다.
|
||||
|
||||
Proper rotation 후 선택 좌표는 `y=L'_p^T R_f Q(p)`다. R이 constant linear rotation이어도 z(p)가 nonlinear이면 y(p)는 nonlinear이다. Coordinate-wise Newmark는 이 nonlinear 좌표 변환에 불변이지 않다.
|
||||
|
||||
Actual source history에서 p의 position recurrence defect는4.34e-19이고 velocity defect는3.47e-18이다. 같은 physical history를 R로만 변환한 뒤 target selector에 대입하면 angular position defect는4.820072708909e-7/uncancelled scale.001933790222256≈2.493e-4, velocity defect는3.878217179085e-5/.208746818840≈1.858e-4다. Public A의 selected component는 해당 private Ar와 같은 값이므로 actual history의 q/v/A로 이 recurrence를 재평가할 수 있다.
|
||||
|
||||
Stored binary64 입력의 Fraction 대조는 source dependent-Z position/velocity defect1.618323538251e-6/1.302098645892e-4가 R의 Z→selected-X/Y 성분을 통해 위 transformed defect를 만든다는 점을 확인했다. Source X/Y의 기여 remainder는 position≤1.64e-19, velocity≤2.99e-17뿐이다. 실제 graph/time-discretization 좌표 의존성을 확인한 근거이며, 단순 endpoint tolerance 또는 force summation 문제로 설명하지 않는다. Translation freeze 정책만을 원인으로 확정하지 않는다.
|
||||
|
||||
## 해결 후보와 결정 경계
|
||||
|
||||
Fully free node에서 existing initial objective triad의 tangent_a/tangent_b/director를 fixed rotational basis B로 사용하면, rotated model의 basis가 R*B가 되어 reduced scalar coordinates가 proper rotation 아래 동일하다. `L_p/L_z`를 coordinate scatter 대신 이 constant basis injection으로 일반화하고 graph/rates/augmented tangent/초기화/CA/N7를 함께 정식화하는 후보가 있다. 같은 physical equations라도 현재 승인된 global-component selector 및 discrete integration operator를 바꾸므로 독립 정식화 검토와 사용자 결정이 먼저 필요하다. Partial global-component BC의 admissible basis, chart/rank 조건과 public global q/v/a 의미도 별도 검토해야 한다.
|
||||
|
||||
현재 조사에서 production 변경이나 acceptance 완화는 하지 않았다. 더 작은 h를 공식 공변성 기준의 대체로 삼거나 실패 finite-phi fixture를 제거하지 않는다.
|
||||
|
||||
## 재현과 identity
|
||||
|
||||
Artifacts는 `.dryforge/hht-channel-newton-20261013/covariance-*`다. `covariance-build.cmd` 및 `covariance-probe.exe --gtest_filter=DiagnosticCovariance.CurrentKernel`로 trajectory를, `covariance-matched-build.cmd` 및 `covariance-matched.exe --gtest_filter=DiagnosticCovariance.MatchedFiniteStateAssembly`로 matched assembly를 실행했다. `covariance-analyze.py`, `covariance-recurrence.py`, `covariance-exact-projection.py`가 각각 quantity/frame/node maxima, actual recurrence, exact binary projection을 계산한다. Raw full frames/summary/recurrence/Fraction 결과는 해당 JSON에 보존했다. `covariance-identity.json`에는 source/library/object/probe/log SHA와 single-thread 설정을 기록했다. 공용 build/CTest와 원본 reference는 수정하지 않았다.
|
||||
@@ -0,0 +1,102 @@
|
||||
# 초기 null의 직교 보완공간을 사용하는 고정 축소 좌표 제안
|
||||
|
||||
상태: 사용자 승인, 2026-10-13 [HHT-ADR-018](ADR.md). 구현 상세 수식과 변경본 검증은 별도 수행한다.
|
||||
독립 검토: [수치 검토의 actual covariance 및 fixed-basis 절](numerical-review-channel-newton.md).
|
||||
HHT-ADR-017의 제한 Newton 구현을 대체하거나 취소하는 제안이 아니다.
|
||||
[실제 C09 진단](channel-newton-covariance-diagnostic.md)에서 확인한
|
||||
global-component chart의 이산 공변성 문제를 해결하기 위한 후속 변경이다.
|
||||
|
||||
## 문제와 변경 경계
|
||||
|
||||
ADR-017 변경본은 C09 여섯 trajectory를 자연 종료했지만 유한회전의
|
||||
proper-Q 비교에서 원1e-10 기준을 넘었다. 동일 물리 상태의 fresh assembly는
|
||||
회전 변환과 일치한다. 현재 selected coordinate의 변환
|
||||
`p'=L'_p^T R6*q(p)`가 비선형이므로 HHT/Newmark recurrence를 보존하지 않는다.
|
||||
Read-only 2/4/8-step 진단은 이 차이가 약2차로 감소함을 보였다.
|
||||
수렴 반복 수나 잔차 tolerance를 더 줄이는 것으로 이 이산화 차이를 제거할
|
||||
근거는 없다. 비교 기준 완화는 제안하지 않는다.
|
||||
|
||||
변경 대상은 null이 있고 회전 세 성분이 모두 자유인 절점의 **고정 선형
|
||||
좌표 분해**다. Continuous full equation과 endpoint 기준은 유지하지만
|
||||
private coordinate를 적분하는 이산 방법은 달라지며 HHT-ADR-018로 승인됐다.
|
||||
병진 좌표·물리 BC·HHT 계수·lumped measure·public global 결과·schema 및
|
||||
원본 reference는 유지한다.
|
||||
|
||||
## 고정 basis의 구성
|
||||
|
||||
1. Frame0 원 full q/v/a와 실제 회전 kinematics에서 analytic drilling null
|
||||
`n_raw=Jl(phi0)^(-1)*d(phi0)`를 얻는다. Reference geometric director를
|
||||
비영 초기 회전의 실제 null 대신 사용하지 않는다.
|
||||
2. Positive finite norm으로 `n0=n_raw/||n_raw||2`를 만든다. 이 연산은 private
|
||||
basis 구성이고 model rotation/director/state의 재정규화가 아니다.
|
||||
3. `|n0[k]|`가 최소인 Cartesian axis `e_k`를 선택한다. Exact tie는 component
|
||||
순서다. `b=e_k-(e_k·n0)*n0`, `t1=b/||b||2`, `t2=n0×t1`로 만든다.
|
||||
수학적으로 `||b||2>=sqrt(2/3)`이므로 임의 floor나 tiny-vector fallback이
|
||||
필요 없다. Finite·positive 및 기존1e-12 Gram 검사를 요구한다.
|
||||
4. 각 절점에서 `phi=t1*p1+t2*p2+n0*z`로 둔다. Basis는 run 동안 고정이며
|
||||
current null을 따라 바꾸거나 rechart하지 않는다.
|
||||
|
||||
Tangent basis가 proper-Q에서 그대로 회전될 필요는 없다. 두 model의 initial
|
||||
null이 `n0'=s*Q*n0`, `s=±1`이고 각 retained basis가 해당 null 직교평면을
|
||||
span하면 `p'_rot=T2*p_rot`, `z'=s*z`, `T2∈O(2)`다. 이는 상수 선형 변환이다.
|
||||
Cartesian axis의 선택이 바뀌어도 평면을 보존하면 비선형 chart 전환이 되지
|
||||
않는다. 병진도 `p'_u=Q*p_u`이므로 exact arithmetic의 HHT recurrence가 이
|
||||
변환과 commute한다. Floating-point 연산과 channel infinity norm 때문에
|
||||
bitwise covariance나 실제1e-10 통과를 자동 보장한다는 주장은 하지 않는다.
|
||||
|
||||
## 부분 구속과 초기 상태
|
||||
|
||||
- Null이 실제 free 공간과 만나는지 판단하는 기존 계약을 유지한다.
|
||||
회전 일부 성분이 구속된 절점은 기존 component chart를 유지한다.
|
||||
Global BC flag를 새 local coordinate의 같은 번호에 복사하지 않는다.
|
||||
이 혼합 chart 정책을 명시하고 부분구속 실제 모델을 회귀 검증한다.
|
||||
- Fully fixed rotation은 exact prescribed value를 유지한다. Nonzero prescribed
|
||||
BC의 공개 지원 범위를 확대하지 않는다.
|
||||
- Frame0의 원 full q/v/a/A·force·accepted history는 projection하지 않는다.
|
||||
Private p/z 및 rates의 basis 변환은 연산 radius와 roundtrip/initialization
|
||||
검사를 새로 수행한다. 원 초기 gate를 못 만족하면 fail-closed이며
|
||||
초기 force/state 보정이나 hidden polishing으로 통과시키지 않는다.
|
||||
- Actual `G=psi_q*Lz`의 regularity와 positive reduced mass 검사를 유지한다.
|
||||
Current moving null과 fixed n0의 transversality가 나빠지면 기존 실패
|
||||
정책을 적용한다. Principal rotation bound만으로 이를 보장하지 않는다.
|
||||
`G` regularity와 `N(q)^T*Lz` transversality는 별개의 검사다. 기존 pivot의
|
||||
current-null nonzero 검사를 actual `n(q)·n0`와 해당 scaled conditioning으로
|
||||
일반화한다. `G` 통과로 selector의 full-root equivalence 검사를 생략하지 않는다.
|
||||
|
||||
## 행렬·보정·N3/CA/N7의 변경
|
||||
|
||||
Index scatter 대신 constant sparse injection `Lp/Lz`를 사용한다.
|
||||
Full row physical equilibrium은 `Lp^T*E`로 축소하고 augmented tangent는
|
||||
같은 basis의 exact constant chain rule로 구성한다. Hidden gradient/Hessian/
|
||||
third/time 항과 모든 auxiliary block도 동일 injection을 사용한다.
|
||||
Production finite differences나 full dense basis matrix는 도입하지 않는다.
|
||||
|
||||
`dq=Lp*dp+Lz*dz`, `dv=Lp*cv*dp+Lz*dvz`,
|
||||
`da=Lp*ca*dp+Lz*daz`, `dA=(1+alpha)*da`를 실제 sparse 연산으로 계산한다.
|
||||
ADR-017의 U trigger/copy/thaw와 combined100 및 all-free full endpoint 검사는
|
||||
유지한다. Private basis ordering을 public equation 번호로 노출하지 않는다.
|
||||
기존 `p_dofs[i]%6` 분류나 direct index scatter를 basis coordinate에 적용하지
|
||||
않는다. Private coordinate의 channel 및 full support metadata를 명시하고
|
||||
trigger·copy·CA·N7가 같은 injection과 분류를 사용하도록 한다.
|
||||
|
||||
N3 private pair의 accepted high/requested increment·RN-even 저장 검사를 유지하고,
|
||||
global reconstruction의 basis product/sum 및 정확한 constrained zeros를 별도로
|
||||
검산한다. CA는 초기 projection, 모든 basis action, graph/rate 재구성과 copied
|
||||
history의 실제 연산을 추적한다. 기존 index-only radius를 승계하지 않는다.
|
||||
N7의 actual restricted/full-last/fresh-full defect와3/4항 규칙을 새 map에 적용한다.
|
||||
Full physical q/v/a/public A와 private Ar의 역할·단위 및 factor100을 유지한다.
|
||||
|
||||
## 구현 및 검증 순서
|
||||
|
||||
1. Fixed sparse basis·partial-BC mapping·initial-state 보존 정식화 및 독립 검토.
|
||||
2. Analytic null/Gram, linear frame transition, exact constrained zeros와
|
||||
basis roundtrip/radius·N3 mutation 회귀. Actual G conditioning도 검사한다.
|
||||
3. Production/verification executor를 같은 injection으로 변경하고 실제
|
||||
nonzero-C1/warped/shared-node N5와 ADR-017 rollback/count 검사를 실행한다.
|
||||
4. 현재 실패한 finite-phi C09의 모든 이력·proper-Q·3회 결정론·partitions,
|
||||
2/4/8-step 진단과 matched-state force/inertia를 fresh identity로 재검증한다.
|
||||
5. 공식 C08a7 grid와 C08b8 grid의 시간 정확도·hidden·N7·P/E/L,
|
||||
구성된 전체 MSVC Debug/CTest 및 원본101-frame production 비교를 수행한다.
|
||||
|
||||
단계별 실패·미실행은 보존한다. 이 제안의 승인은 새 방법의 실제 수렴,
|
||||
공변성·시간 정확도 또는 reference 통과를 뜻하지 않는다.
|
||||
@@ -1,5 +1,7 @@
|
||||
# 제약 일관 가속도 복구 후보
|
||||
|
||||
2026-10-11 질량 정책 변경: [HHT-ADR-012](ADR.md)에 따라 현재 고유치·HHT는 lumped mass를 사용한다. 아래 consistent 질량을 전제로 한 수식 후보·검토·PASS/FAIL은 해당 시점의 이력이다. 변경본 통과로 승계하지 않으며 현재 수식은 [formulation](formulation.md), 재검증 상태는 [PRD](PRD.md)의 현재 checklist를 따른다.
|
||||
|
||||
- 상태: `candidate-for-independent-review; not-adopted`, 2026-09-26.
|
||||
- Owner: `formulation-agent`. 할당 범위는 이 문서이며 source·시험·상위 계약은 변경하지 않는다.
|
||||
- 기준: [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md), [공통 ADR](../ADR.md#adr-028), [Feature PRD](PRD.md), [시간적분](formulation.md), [관성 상세](formulation-inertia.md).
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
# Carried-A HHT의 arithmetic/noise 인계
|
||||
|
||||
상태: `implementation-ready-estimator; independent-review-pending`, 2026-10-12. [축소 좌표 정식화](formulation-reduced-coordinate.md)와 별개로, 동일 full-coordinate HHT에서 A를 직접 갱신하는 산술을 다룬다. 기존 [N7](numerical-controls.md)의 separation 기준을 완화하지 않는다. Half-ULP `q-qp-sA` closure는 이전 predictor·seed·update 오차 또는 history bound가 아니다.
|
||||
|
||||
## 1. 실제 연산 경로
|
||||
|
||||
`s=beta*h²`, `r=gamma*h`, `k=1+alpha`다. Frozen accepted history에서 qp/vp를 기존 predictor로 계산한다. 첫 trial assembly가 기존 `EvaluateNewtonStart`의 qn 또는 qp를 선택한다면 그 **실제** Aseed와 seed inverse 연산을 포함한다. 이후 모든 Newton correction에 대해
|
||||
|
||||
\[
|
||||
\Delta A=\Delta q/s,\quad A\leftarrow A+\Delta A,\quad
|
||||
q=qp+sA,\quad v=vp+rA,\quad a=(A+\alpha a_{old})/k.
|
||||
\tag{CA-01}
|
||||
\]
|
||||
|
||||
Requested Δq와 rounded reconstructed q 차이는 다른 값이다. 외력·평형 및 마지막 linear/nonlinear solve defect는 기존 N7 경로에서 별도로 계산한다. Stored last correction 하나는 앞선 update의 arithmetic를 나타내지 않는다.
|
||||
|
||||
## 2. 최소 online component radius
|
||||
|
||||
전체 Δq 목록을 저장하지 않고 component별 A radius `B_A`를 반복마다 누적할 수 있다. `hat x`는 실제 binary64 값, `B_x≥|hat x-x*|`는 같은 frozen input/correction path의 exact arithmetic 값에 대한 절대 radius다. 실제 evaluation order를 따라 아래 primitive rule로 scalar coefficient, predictor, seed, update, reconstruction의 모든 연산을 추적한다. Constrained 성분은 정확한 0이며 새로운 scale floor는 없다.
|
||||
|
||||
Normal finite binary64 operation의 rounding term은
|
||||
|
||||
\[
|
||||
\rho(\hat z)=\frac{u}{1-u}|\hat z|+\eta,\quad u=2^{-53},
|
||||
\tag{CA-02}
|
||||
\]
|
||||
|
||||
로 둘 수 있다. eta는 underflow를 지원하는 실제 IEEE 실행의 absolute rounding bound다. Flush-to-zero 여부를 확인하지 않은 채 정상 수의 상대오차 식만으로 subnormal을 인증하지 않는다. η를 물리 scale floor나 acceptance floor로 사용하지 않는다. 일반 범위에서는 검증된 gamma_m의 uncancelled operand sum bound로 구현해도 된다.
|
||||
|
||||
\[
|
||||
\begin{aligned}
|
||||
B_{x\pm y}&=B_x+B_y+\rho(\widehat{x\pm y}),\\
|
||||
B_{xy}&=|\hat x|B_y+|\hat y|B_x+B_xB_y+\rho(\widehat{xy}),\\
|
||||
B_{x/y}&=\frac{B_x+|\widehat{x/y}|B_y}{|\hat y|-B_y}
|
||||
+\rho(\widehat{x/y})\left(1+\frac{B_y}{|\hat y|-B_y}\right).
|
||||
\end{aligned}
|
||||
\tag{CA-03}
|
||||
\]
|
||||
|
||||
Division은 `|hat y|-B_y>0`일 때만 bound가 성립한다. 식은 실제 quotient에 대한 rounding uncertainty도 denominator perturbation과 함께 전파한 보수적인 bound다. Radius 계산 자체의 부동소수점 오차도 upper rounding/추가 gamma bound로 포함해야 한다. Bound 계산의 down-rounding으로 실제보다 작은 B를 반환하지 않는다.
|
||||
|
||||
Predictor의 `h*h*(.5-beta)` 및 `h*(1-gamma)`, `s,r,k`, 두 predictor sums를 CA-03으로 계산한다. Seed `(q_start-qp)/s`도 subtraction/division rule을 사용한다. q_start가 qp인 정확 동일-object 분기에서는 exact seed=0의 correlation을 사용 가능하지만 검증되지 않은 다른 state에 같은 cancellation을 적용하지 않는다. Old coordinate start에서는 actual qold radius를 seed에 포함한다.
|
||||
|
||||
매 correction Δq의 산술 입력 radius를 0으로 둘 때, 그 correction을 exact로 고정한 arithmetic-only radius다. Linear/nonlinear solve estimator는 별도이며 이를 correction rounding 0의 근거로 혼동하지 않는다. Δq scatter/scaling에 rounding이 있으면 그 primitive도 radius에 포함한다. 다음 방식으로 B_A를 반복마다 갱신한다:
|
||||
|
||||
\[
|
||||
B_{\Delta A}=\operatorname{divideBound}(\Delta q,s),\quad
|
||||
B_{A,new}=B_{A,old}+B_{\Delta A}+\rho(\widehat{A+\Delta A}).
|
||||
\tag{CA-04}
|
||||
\]
|
||||
|
||||
최종 accepted q/v/a radius는
|
||||
|
||||
\[
|
||||
\begin{aligned}
|
||||
B_q&=B_{qp}+|\hat s|B_A+|\hat A|B_s+B_sB_A+\rho_{mul}+\rho_{add},\\
|
||||
B_v&=B_{vp}+|\hat r|B_A+|\hat A|B_r+B_rB_A+\rho_{mul}+\rho_{add},\\
|
||||
B_{num}&=B_A+|\alpha|B_{a,old}+\rho_{\alpha a}+\rho_{sum},\\
|
||||
B_a&=\operatorname{divideBound}(\widehat{A+\alpha a_{old}},\hat k).
|
||||
\end{aligned}
|
||||
\tag{CA-05}
|
||||
\]
|
||||
|
||||
CA-05의 rho terms는 corresponding 실제 연산의 term이다. 사용한 alpha 자체를 exact binary64 입력으로 고정했다면 Balpha=0; alpha가 별도 계산 결과이면 해당 product term을 추가한다. Predictor의 correlation을 이용하지 않는 bound는 더 보수적이어도 유효하나 자동 PASS를 위한 cancellation은 금지다. Accepted A/predictor/last-solve만으로 CA-04 전체를 복원할 수 없으므로 online accumulator 또는 actual trace가 필수다.
|
||||
|
||||
## 3. Frozen-step과 history를 구분
|
||||
|
||||
각 step 시작의 old q/v/a/A radius를 0으로 두면 **frozen-step local arithmetic bound**다. 이를 global discretization error나 전체 history bound로 보고하지 않는다. 이전 accepted radii를 다음 predictor/seed/CA-04/05의 input radii로 넘기면 고정 Newton corrections 및 고정 선택 분기의 whole-history arithmetic bound를 얻는다. 그 bound는 rounding의 전파를 포함하나 perturbed nonlinear equilibrium의 correction sensitivity는 포함하지 않는다. 기존 solve defect/stability evidence와 함께 판단한다.
|
||||
|
||||
Equivalent 선형화 설명: state 순서 `(q,v,a,A)`, `b=h²(.5-beta)`, `d=h(1-gamma)`에서 frozen correction path의 initial-seed derivative는 q-start가 predictor일 때 `j=0`, old q일 때 `j=(0,-h/s,0,-b/s)`다. Exact accepted transition의 rows는
|
||||
|
||||
\[
|
||||
T_A=j,\quad T_q=(1,h,0,b)+s j,\quad
|
||||
T_v=(0,1,0,d)+r j,\quad T_a=j/k+(0,0,\alpha/k,0).
|
||||
\tag{CA-06}
|
||||
\]
|
||||
|
||||
`B_next≤|T|B_old+B_local`는 scalar coefficient uncertainty를 별도로 포함했을 때의 보수적인 component-history bound다. 이 fixed-correction-path |T| propagation은 cancellation을 잃어 커질 수 있다. Bound가 커지거나 overflow하면 N7 inconclusive로 남겨야 한다; norm을 줄이거나 floor를 추가하지 않는다. 실제 nonlinear stable trajectory의 더 날카로운 a posteriori bound는 독립 review가 필요한 별도 작업이다.
|
||||
|
||||
고정밀 replay는 stored binary64 history/coefficients/각 δq를 exact inputs로 보고 실제 selection 및 evaluation 순서를 재현해야 한다. Local replay는 local 산술 검산, recursively replayed whole path는 CA-06/online history bound의 독립 검산이다. High-precision 재계산 결과를 current accepted physical a로 덮어쓰거나 equilibrium-consistent corrected solution으로 표시하지 않는다.
|
||||
|
||||
## 4. N7 판정 인계
|
||||
|
||||
Component radii를 기존 length/time normalization으로 q/v/a 병진·회전 channels에 모아 전체 endpoint 최대를 구한다. Finest error/self-difference와 비교할 때 기존 N7의 approved factor/separation assertion을 유지하고 solve noise와 complete carried-A arithmetic evidence 중 큰 값을 사용한다. Grid pair는 기존처럼 두 grid의 radius를 함께 포함한다.
|
||||
|
||||
기존 q-subtraction 기반 gamma32 estimator를 carried-A의 완전한 estimator로 승계하지 않는다. Predictor·seed division·모든 update·재구성 및 필요한 history 전파가 없으면 해당 arithmetic evidence는 incomplete다. 반대로 기존 arithmetic estimate를 함께 보존하면 regression 진단에 도움이 되지만 새 경로의 correctness 증명은 아니다. 기존 N7 time amplification을 새 local radius에 곱하는 선택은 승인된 heuristic의 비교 evidence이며 독립적으로 whole-history rigorous bound라고 부르지 않는다.
|
||||
|
||||
필수 검산은 (1) exact/고정밀 frozen arithmetic와 primitive radius 비교, (2) seed qn/qp 양 분기, (3) multiple corrections와 tiny correction/addition absorption, (4) finite/division denominator/underflow 실패, (5) solver defect와 arithmetic radius의 별도 기록이다. Source·test·tolerance를 본 owner가 변경하거나 통과 승인하지 않았다.
|
||||
@@ -0,0 +1,505 @@
|
||||
# 고정 초기 null 기저의 sparse reduced HHT 정식화
|
||||
|
||||
상태: `implementation-ready; independent-review-and-runtime-pending`, 2026-10-13.
|
||||
승인 범위는 [고정 null 기저 제안](fixed-null-basis-proposal.md)과
|
||||
[HHT-ADR-018](ADR.md)의 사용자 결정이다. 본 문서는 수식·연산 계약이며
|
||||
자기 수치 승인이나 현재 production PASS 기록이 아니다.
|
||||
[기존 축소 정식화](formulation-reduced-coordinate.md)의 fully-free rotation
|
||||
component selector를 아래 고정 ON 기저로 대체한다. 기존
|
||||
[N1–N7](numerical-controls.md), [제한 Newton](c09-channel-newton-proposal.md),
|
||||
[독립 검토](numerical-review-channel-newton.md)와 허용값은 유지한다.
|
||||
|
||||
## 1. 적용 가정과 물리 계약
|
||||
|
||||
Total Lagrangian MITC4, 큰 변위·유한회전·작은 탄성 변형률, 등방 선형 탄성,
|
||||
objective drilling potential, `nodal-lumped-kinetic`, 기존 공간 적분·두께 적분과
|
||||
fixed-initial total rotation vector를 유지한다. 재료 history update는 없다.
|
||||
관성·내력·공간 각속도·단면력은 [기존 물리 정식화](formulation.md)와
|
||||
[관성 상세](formulation-inertia.md)가 소유한다. 좌표 변경은 constitutive law,
|
||||
mass measure, drilling stiffness 또는 recovery formula를 바꾸지 않는다.
|
||||
|
||||
Full node-major ordering은 `q_i=(u_x,u_y,u_z,phi_X,phi_Y,phi_Z)`다.
|
||||
`u`: length, `phi`: rad, `v=dot q`, `a=ddot q`이며 `v_phi`와 `a_phi`는
|
||||
공간 각속도·각가속도가 아니다. Zero fixed BC를 제거한 공간에서
|
||||
|
||||
\[
|
||||
E=I(q,v,a)+g(q,t),\quad I=M(q)a+c(q,v),\quad
|
||||
g=f_{int}(q)-F(t),\quad \delta q^T E=0. \tag{FB-01}
|
||||
\]
|
||||
|
||||
Residual 부호는 internal+inertia−external이고 Newton RHS는 −residual이다.
|
||||
공개 CLOAD는 constant global force이고 damping/follower load/nonzero BC/initial
|
||||
condition 입력을 확대하지 않는다. `Fdot,Fddot`는 C08a private oracle에만
|
||||
사용하며 원 analytic 시간미분을 보존한다. 이 변경은 continuous equation의
|
||||
roots를 유지하는 **승인된 private 좌표 시간 이산화 변경**이다.
|
||||
|
||||
## 2. 고정 기저와 혼합 chart
|
||||
|
||||
Frame0의 actual rotation kinematics에서
|
||||
|
||||
\[
|
||||
n_{raw}=J_l(\phi_0)^{-1}d(\phi_0),\quad
|
||||
n_0=n_{raw}/\|n_{raw}\|_2,\quad
|
||||
k=\arg\min_{X,Y,Z}|n_0[k]|,
|
||||
\]
|
||||
\[
|
||||
b=e_k-(e_k^Tn_0)n_0,\quad t_1=b/\|b\|_2,\quad
|
||||
t_2=n_0\times t_1,\quad B_p=[t_1,t_2],\quad B_z=n_0. \tag{FB-02}
|
||||
\]
|
||||
|
||||
Exact tie는 X,Y,Z 순서다. Norm은 finite positive이며 scaled sum-of-squares를
|
||||
사용한다. `||b||>=sqrt(2/3)`이므로 tiny-vector fallback/floor는 필요 없다.
|
||||
기존 `1e-12` ON/Gram 검사를 적용한다. Model director/phi를 정규화하지 않고
|
||||
reference geometric director를 actual analytic null 대신 사용하지 않는다.
|
||||
기저는 run 내 불변이며 current null에 맞추어 회전·pivot 변경·rechart하지 않는다.
|
||||
|
||||
| 절점의 실제 free rotation/null | 고정 분해 |
|
||||
| --- | --- |
|
||||
| 세 회전 모두 free, admissible analytic null 1개 | `phi=Bp p_rot+Bz z`, 두 angular p와 한 z |
|
||||
| 부분 회전 BC, admissible null 1개 | 기존 maximum-null-component pivot 및 component selector 유지 |
|
||||
| 부분 회전 BC가 null을 절단하여 admissible null 0개 | 모든 free component를 p에 유지 |
|
||||
| 세 회전 fixed | rotation private unknown 없음; exact prescribed0 유지 |
|
||||
|
||||
Null 교집합은 기존 exact component 계약이다. Tiny constrained null 성분을
|
||||
0으로 자르지 않는다. Initial admissible-node inventory와 각 trial inventory가
|
||||
달라지면 fixed-rank branch 실패다. Partial global BC를 `p_rot`의 같은 번호에
|
||||
복사하면 다른 BC가 되므로 금지한다. 일반 partial-BC frame covariance는 주장하지 않는다.
|
||||
|
||||
Full에 대한 constant sparse injection을 `Lp,Lz`로 표기한다. 병진과 기존
|
||||
component-chart 열은 identity support, 고정 plane 열은 세 global rotation
|
||||
성분 support다. Constrained rows는 exact0이고 free 공간에서
|
||||
|
||||
\[
|
||||
q= L_p p+L_z z,\quad L_p^TL_p=I,\quad L_z^TL_z=I,\quad
|
||||
L_p^TL_z=0,\quad L_pL_p^T+L_zL_z^T=I_f. \tag{FB-03}
|
||||
\]
|
||||
|
||||
이는 exact-arithmetic identity이며 stored binary64 Gram은 기존 gate로 검산한다.
|
||||
Production full dense basis matrix는 요구하지 않는다. Projection `Lp^T y`,
|
||||
lift `Lp x+Lz w` 및 `Lp^T K Lz` 등은 동일 sparse support의 source-ordered
|
||||
product/sum이다. 한 full DOF가 두 p 및 한 z에 기여할 수 있으므로 direct index
|
||||
scatter나 one-index reverse map으로 대체하지 않는다.
|
||||
|
||||
Private column metadata에는 immutable canonical node/source identity,
|
||||
`U`/`angular` channel, full support와 coefficient, fixed-plane/component-chart
|
||||
구분을 둔다. z/constraint rows는 initial null-node canonical order다.
|
||||
정확 저장 타입은 구현 owner가 결정한다. Plane column 번호를 full DOF 번호로
|
||||
간주하거나 `%6`로 channel을 판정하지 않는다. Public equation/source identity는
|
||||
기존 DofManager 계약이며 private ordering을 영속 결과에 노출하지 않는다.
|
||||
|
||||
Proper `Q`에서 `n0'=s Q n0` (`s=±1`)이면 retained planes 사이
|
||||
`T2=Bp'^T Q Bp∈O(2)`, `p_rot'=T2 p_rot`, `z'=s z`다.
|
||||
`Bp'=Q Bp` 자체는 필수 조건이 아니다. Axis/tie 선택이 달라도 이 전환은
|
||||
상수 선형이며 HHT recurrence와 exact arithmetic에서 commute한다. Floating
|
||||
rounding·infinity norm·mode branching의 실제 `1e-10` 통과는 별도 검증이다.
|
||||
|
||||
## 3. Graph, hidden rates와 서로 다른 regularity
|
||||
|
||||
Current normalized analytic null의 lift를 `N(q)`로 둔다. 물리 inertia의 null
|
||||
identity `N^T I=0`와 기존 direct scalar primitive
|
||||
|
||||
\[
|
||||
\psi=N^Tg=N^TE,\quad C=\psi_q,\quad G=C L_z,
|
||||
\]
|
||||
\[
|
||||
G z_v=-C L_p v_p-\psi_t,\quad v=L_pv_p+L_z z_v,
|
||||
\]
|
||||
\[
|
||||
G z_a=-C L_p a_p-\psi_{qq}[v,v]-2\psi_{qt}v-\psi_{tt},
|
||||
\quad a=L_pa_p+L_z z_a \tag{FB-04}
|
||||
\]
|
||||
|
||||
를 사용한다. Position graph `psi(Lp p+Lz z,t)=0`은 coupled global solve다.
|
||||
Gradient/Hessian/third·external time-mixed terms는 기존 RC-02, RC-13–15의
|
||||
analytic primitive를 그대로 사용하고 모든 injection을 FB-03으로 일반화한다.
|
||||
Shared node external term은 한 번만 추가한다. Numerical FD는 production tangent가 아니다.
|
||||
|
||||
검사는 다음처럼 분리한다.
|
||||
|
||||
| Operator / 조건 | 의미 |
|
||||
| --- | --- |
|
||||
| `G=psi_q Lz` 및 기존 `W^-1 G W^-1` conditioning | 선택된 graph의 implicit derivative/rate solve 가능성 |
|
||||
| `N(q)^T Lz`와 아래 normalized spanning matrix S | selector residual의 full-root equivalence와 정량적 횡단성 |
|
||||
| `psi_q N(q)`의 N4 null-coordinate conditioning | 실제 moving null 방향의 물리 대수 regularity |
|
||||
| `J=Lp+Lz z_p` rank, `J^T M J` positivity 및 기존 mass/N4 검사 | 축소 물리 range의 비퇴화 |
|
||||
|
||||
여기서 `W_i=sqrt(k_i)`, `k_i=N_i^T Kdrill_metric N_i>0`는 원 N4 scale다.
|
||||
G 검사와 moving-null 검사는 기존 `2^-32` 정책·finite-first·실제 operator로
|
||||
수행하며 하나의 PASS를 다른 operator의 PASS로 승계하지 않는다.
|
||||
Node-local `N^T Lz`는 fixed-plane node의 `n(q)^T n0`, component node의 원
|
||||
nonzero pivot component다. Exact0/nonfinite는 실패다. 작은 비영 내적의 정량적
|
||||
검사는 `D_f`를 N1의 free-row scale로 둔 다음 무차원 square matrix에서 수행한다.
|
||||
|
||||
\[
|
||||
S=[D_f^{-1}L_{p,f}D_p,\ D_f^{-1}N_f(q)],\qquad
|
||||
rcond_\infty(S)=1/(\|S\|_\infty\|S^{-1}\|_\infty)\ge2^{-32}. \tag{FB-04a}
|
||||
\]
|
||||
|
||||
S의 all-free angular block은 `[t1,t2,n(q)]`이고 부분 null block은
|
||||
`[retained component axes,n_free(q)]`, null이 없는 block은 identity다.
|
||||
병진 열은 ell로 정규화되어 identity다. Canonical node/block 순서의 inverse-action
|
||||
solves로 S와 inverse의 최대 row-sum을 계산하고 global dense inverse는 만들지 않는다.
|
||||
1×1 `N^T Lz`의 rcond는 비영일 때1이므로 작은 횡단각을 검출하지 못한다.
|
||||
S 대신 `S^TS`에 동일 threshold를 대입하면 conditioning 의미가 바뀌므로 하지 않는다.
|
||||
이 검사는 기존 `2^-32` 기준을 새 fixed-plane complement의 실제 normalized operator에
|
||||
적용한다. 임의 cosine cutoff를 추가하지 않는다. G/moving-null/range 검사는 별도다.
|
||||
Principal `||phi||<pi`는 횡단성을 보장하지 않는다.
|
||||
|
||||
Full-root 동등성: `Ep=Lp^T E=0`이면 FB-03으로 `E=Lz e_z`이고
|
||||
`psi=N^T E=(N^T Lz)e_z=0`이다. `N^T Lz`가 가역이면 `E_f=0`이다.
|
||||
`G`가 가역이라는 사실만으로 이 논증을 대체할 수 없다. 이 selector Newton은
|
||||
`J^TE`의 exact Newton RC-11과 root가 같지만 off-root correction은 다르다.
|
||||
|
||||
Hidden residual은 `psi0=psi`, `psi1=Cv+psi_t`,
|
||||
`psi2=Ca+psiqq[v,v]+2psiqt v+psitt`다. Raw defect와 원 uncancelled scale
|
||||
`S0=sum |N| s_full`,
|
||||
`S1=sum |C_i v_i|+|psi_t|`,
|
||||
`S2=sum |C_i a_i|+sum |H_ij v_i v_j|+2sum |psiqt_i v_i|+|psitt|`
|
||||
를 같은 units로 기록한다. S0의 `s_full`은 N2의 원 element/load 상쇄 전 scale다.
|
||||
Basis로 축소한 force나 취소된 graph RHS를 scale로 대신하지 않는다. 초기 gate,
|
||||
endpoint hidden0 gate 및 C08a hidden1/2 판정은 원 N3/ADR-015 그대로이며
|
||||
새 무조건 hidden1/2 Newton 종료 gate를 추가하지 않는다.
|
||||
|
||||
## 4. Augmented exact tangent와 스케일
|
||||
|
||||
`cv=gamma/(beta h)`, `ca=1/[(1+alpha)beta h²]`, `Kq=Iq+Kint`, `Kv=Iv`다.
|
||||
현 승인 load의 q derivative는0이며 새로운 follower-load 항은 없다.
|
||||
같은 trial에서 `Wext=(v,1)`이고
|
||||
|
||||
\[
|
||||
V=\psi_{qq}v+\psi_{qt},\qquad
|
||||
H=\psi_{qq}a+D^3\Psi[\,\cdot,W_{ext},W_{ext}].
|
||||
\]
|
||||
|
||||
Unknown `d=(delta p,delta z,delta vz,delta az)`의 **물리 단위** block은
|
||||
|
||||
\[
|
||||
K_{aug}=\begin{bmatrix}
|
||||
L_p^T(K_q+c_vK_v+c_aM)L_p&L_p^TK_qL_z&L_p^TK_vL_z&L_p^TML_z\\
|
||||
CL_p&CL_z&0&0\\
|
||||
(V+c_vC)L_p&VL_z&CL_z&0\\
|
||||
(H+2c_vV+c_aC)L_p&HL_z&2VL_z&CL_z
|
||||
\end{bmatrix}. \tag{FB-05}
|
||||
\]
|
||||
|
||||
Actual Newton trial은 graph/rate를 먼저 복구하므로 production solve RHS는
|
||||
`baug=(-Ep,0,0,0)`인 기존 tangent-on-graph 정책이다. 측정된 hidden roundoff를
|
||||
production auxiliary RHS에 넣어 endpoint를 polishing하지 않는다. N7 fresh full
|
||||
defect RHS는 별도로 `(-Ep,-psi0,-psi1,-psi2)`를 모두 포함한다.
|
||||
|
||||
N1의 `D=diag(ell I3,I3)`와 channel metadata에서
|
||||
`Dp=diag(ell for U,1 for angular)`를 정의한다. z는 rotational rad이고
|
||||
|
||||
\[
|
||||
S_x=\operatorname{diag}(D_p,I,h^{-1}I,h^{-2}I),\quad
|
||||
S_r=\operatorname{diag}(D_p,I,hI,h^2I),
|
||||
\]
|
||||
\[
|
||||
\widehat K=S_rK_{aug}S_x,\quad \widehat b=S_rb_{aug},\quad
|
||||
\widehat d=S_x^{-1}d,\quad \widehat K\widehat d=\widehat b. \tag{FB-06}
|
||||
\]
|
||||
|
||||
Scaled row units는 모두 energy다. First physical row는 N1의 virtual-work
|
||||
scale이고 hidden1/2 행은 각각 h/h²를 곱한다. Scaled auxiliary unknowns는
|
||||
`delta z,h delta vz,h² delta az`다. h/ell은 finite positive여야 하며 nonzero
|
||||
scale underflow/overflow는 실패다. 역변환 `d=Sx dhat` 후 다음 map을 적용한다.
|
||||
별도 adaptive equilibration/floor를 도입하지 않는다.
|
||||
|
||||
\[
|
||||
\delta q=L_p\delta p+L_z\delta z,\quad
|
||||
\delta v=L_pc_v\delta p+L_z\delta v_z,\quad
|
||||
\delta a=L_pc_a\delta p+L_z\delta a_z,
|
||||
\]
|
||||
\[
|
||||
\delta Ar=\delta p/(\beta h^2),\quad
|
||||
\delta A_{full}=(1+\alpha)\delta a. \tag{FB-07}
|
||||
\]
|
||||
|
||||
N2-L의 분자/분모는 **실제로 factor/solve한 operator**에서
|
||||
`||Khat dhat-bhat||inf / || |Khat||dhat|+|bhat| ||inf`, 원 `1e-12`다.
|
||||
대조 시점의 read-only source augmented assembly/solve는 raw `Kaug,baug`를 전달하고
|
||||
explicit FB-06이 없다. Raw 검산 evidence는 FB-06 scaled 검산의 증거가 아니다.
|
||||
FB-06은 승인된 scaled-operator 계약의 동등 representation으로 구현하며 actual
|
||||
scaling/undo를 source 및 focused evidence로 닫아야 한다. Full physical N2 residual/correction은 기존 global
|
||||
free channels에서 FB-07로 평가하며 selector `Ep`만으로 endpoint를 통과시키지 않는다.
|
||||
|
||||
ADR-017 restricted operator는 **actual scaled** `Khat[J,J]`이며 J에는 angular p와
|
||||
모든 z/vz/az 및 hidden rows를 보존한다. Omitted U unknown은 exact0으로 embed하고
|
||||
scale undo한다. Metadata를 trigger/copy/thaw/CA/N7가 공통으로 사용한다.
|
||||
Trigger의 initial explicit correction0, U 네 mapped metric/private-Ar gate,
|
||||
phi residual 실패, U thaw, combined100과 failure rollback은 원 계약 그대로다.
|
||||
|
||||
## 5. 초기화·시간 update·표현 evidence
|
||||
|
||||
Frame0의 independently initialized full `q0/v0/a0/A0`, force와 accepted frame는
|
||||
원본 그대로 보존한다. Private initialization은
|
||||
`p0=Lp^T q0`, `z0=Lz^T q0`, `vp0=Lp^T v0`, `ap0=Lp^T a0`, `Ar0=ap0`이며
|
||||
`Lz^T v0/Lz^T a0`는 rate roundtrip evidence에도 사용한다. 이 projection은 private
|
||||
좌표 표현 변환이다. Lift/reconstructed state를 original frame0에 덮어쓰거나
|
||||
초기 acceleration/force를 보정하는 projection은 금지한다.
|
||||
|
||||
공개 `q0=v0=0`에서는 원 exact q/v 초기 검사·constrained0이 그대로 성립하며
|
||||
이 exact gate를 유지한다.
|
||||
비영 q0/v0의 private fixture는 basis product/sum과 roundtrip defect/radius를
|
||||
별도로 기록하며 새 공개 initial-condition 지원이나 arbitrary roundtrip tolerance를
|
||||
추론하지 않는다. Original 및 reconstructed a0의 full N2, hidden0/1/2, G와
|
||||
moving-null/range evidence를 각각 검사한다. Independent solves가 bitwise 같은
|
||||
a0를 반환한다고 가정하지 않는다. 기존 gate 실패는 fail-closed다.
|
||||
|
||||
이력은 private `(p,vp,ap,Ar,z_seed)`이고 `s=beta h²`, `r=gamma h`, `k=1+alpha`로
|
||||
|
||||
\[
|
||||
p_{pred}=p_n+h v_{p,n}+h^2(1/2-\beta)Ar_n,\quad
|
||||
v_{pred}=v_{p,n}+h(1-\gamma)Ar_n,
|
||||
\]
|
||||
\[
|
||||
Ar_{n+1}=k a_{p,n+1}-\alpha a_{p,n},\quad
|
||||
v_p=v_{pred}+rAr,\quad a_p=(Ar+\alpha a_{p,n})/k. \tag{FB-08}
|
||||
\]
|
||||
|
||||
Production carried-Ar update는 `delta Ar=delta p/s`를 실제 가산한다.
|
||||
Graph/rates는 갱신된 p와 같은 endpoint 시간에서 매 trial 재평가하고 FB-04로 full
|
||||
q/v/a를 복구한다. z/vz/az corrections는 same-trial 보조변수이며 독립 history가 아니다.
|
||||
Public `Afull=k a-alpha a_old` (`Afull0=a0`)는 full-chart diagnostic filter이며
|
||||
private Ar나 `Lp Ar`를 대입하지 않는다. State/history/recovery는 검증 후 함께 commit한다.
|
||||
첫 predictor/old-p 시작 비교와 genuine geometry failure 제한 fallback도 유지한다.
|
||||
Accepted private p/vp/ap/Ar를 매 increment full q/v/a에 재투영하여 생성하지 않는다.
|
||||
Initial 한 번의 projection과 이후 private history recurrence는 다른 연산이다.
|
||||
|
||||
N3 private p pair는 actual `(p_high+p_low)-old_accepted_high`의 whole/requested
|
||||
increment를 EFT로 검사한다. Old accepted low를 암묵적으로 history에 더하지 않는다.
|
||||
Absolute private 검사는 `p_high≈p_pred+s Ar`, `vp≈v_pred+r Ar`,
|
||||
`k ap≈Ar+alpha ap_old`다. Pair의 whole 우변은
|
||||
`h vp_old+h²(.5-beta)Ar_old+s Ar`이며 scale는 이 세 항의 절댓값 합이다.
|
||||
Requested 우변은 actual start-offset/각 correction의 independent trace sum과
|
||||
compensation이며 scale는 trace 원 항의 상쇄 전 절댓값 합이다.
|
||||
Global lift 검사는 `q≈Lp p_high+Lz z`, `v≈Lp vp+Lz zv`,
|
||||
`a≈Lp ap+Lz za`의 actual product/sum이다. 모든 global phi에
|
||||
`q=q_pred+s Afull`을 강제하지 않는다. Dependent z에는 그 Newmark 식이 적용되지 않는다.
|
||||
Private high는 pair의 RN-even인지 별도로 검사한다. Global q는 sparse lift의
|
||||
product/sum 결과이며 plane coordinate high를 public global component와 동일시하지
|
||||
않는다. Global reconstruction absolute defect, actual full A filter identity,
|
||||
constrained exact0, 원 uncancelled scale/`1e-12`/scale0 exact-zero를 각각 보존한다.
|
||||
Pair low를 global state에 새로 주입하는 운용은 추가하지 않는다.
|
||||
|
||||
보정의 기존 private-Ar consistency는 `k delta ap`와 `delta Ar`를 원
|
||||
`1e-12`/`|delta Ar|` 및 scale0 exact-zero로 검사한다. Component chart의 기존
|
||||
mapped full-A consistency도 보존한다. 추가 basis-lift consistency는
|
||||
`Lp^T delta Afull`과 `delta Ar`를 비교한다.
|
||||
각 p열 i에서 분자는 `|sum_j Lp[j,i]*delta Afull[j]-delta Ar[i]|`이고 분모는
|
||||
`sum_j |Lp[j,i]*delta Afull[j]|+|delta Ar[i]|`다. 원 `1e-12`, finite-first,
|
||||
scale0 exact-zero를 적용한다. 먼저 상쇄한 projection을 분모로 사용하지 않는다.
|
||||
이 추가 검사는 rounded Gram leakage를 포함하며 identity column에서도 분모가
|
||||
기존 private gate와 다르므로 기존 gate의 동일 표현이나 대체로 해석하지 않는다. 별도로 실제
|
||||
`delta Ar=delta p/(beta h²)` recurrence, FB-07의 global mapped delta A 및
|
||||
`delta ap=ca delta p`, `k delta ap=delta Ar`, FB-08/full-A absolute update 검사를
|
||||
유지한다. Private recurrence에 `Lp^T full delta a`를 새 exact-zero 요구값으로
|
||||
사용하지 않는다. Algebraic leakage가 섞이는 projection과 private rate는 다르다.
|
||||
하나의 검사로 다른 검사를 대신하지 않는다.
|
||||
|
||||
CA는 [기존 primitive radius](formulation-carried-a-noise.md)를 따라 actual initial
|
||||
projection, basis 구성계수의 측정오차, 각 sparse product/sum, predictor/seed,
|
||||
모든 correction 가산, graph/rate/full-A 재구성과 history 상속을 추적한다.
|
||||
Bound 자체의 rounding도 보수적으로 포함한다. Stored basis를 exact input으로
|
||||
고정한 CA와 ideal analytic basis의 차이는 별도 증거이며 전자만으로 후자를
|
||||
인증하지 않는다. Basis coefficient uncertainty를 매 step0으로 reset하지 않는다.
|
||||
Graph/primitive assembly 산술 INDICATOR와 fixed-operation-path history bound도
|
||||
구분한다. Restricted U는 high/low/Ar/vp/ap·trace·radius를 bitwise copy하고
|
||||
zero 보정 EFT/Neumaier를 호출하지 않는다. Inherited U radius는 downstream
|
||||
graph/rates에 남는다. Index-only radius의 과거 증명이나 frozen-step bound를
|
||||
새 whole-history 증명으로 승계하지 않는다.
|
||||
|
||||
### 5.1 고정 basis coefficient radius의 실행 계약
|
||||
|
||||
실용적인 certificate의 입력은 frame0에서 이미 계산된 actual analytic
|
||||
`drill_null`의 세 binary64 값이다. 이 입력은 exact로 고정하여 `Braw=0`으로
|
||||
시작한다. 비교 대상은 **그 저장된 입력에 FB-02를 exact arithmetic으로 적용한
|
||||
기저**다. 전체 FE/AD/kinematics가 이상적인 real-input null을 얼마나 정확하게
|
||||
계산했는지의 rigorous bound를 주장하지 않는다. 그런 입력 radius가 별도 근거로
|
||||
주어지면 아래 `Bx`에 상속할 수 있지만 새 public API나 필수 지원범위를 만들지 않는다.
|
||||
|
||||
Normalize에 필요한 norm은 production/controller가 동일한 명시적 연산으로
|
||||
계산한다. `hat`은 actual rounded value, `B`는 같은 fixed-path exact target의
|
||||
component radius다. 세 성분에서
|
||||
|
||||
\[
|
||||
m=\max_c|\hat x_c|>0,\quad
|
||||
\hat y_c=fl(\hat x_c/m),\quad
|
||||
\hat s=fl(fl(fl(\hat y_0^2)+fl(\hat y_1^2))+fl(\hat y_2^2)),
|
||||
\]
|
||||
\[
|
||||
\hat r=fl(\sqrt{\hat s}),\qquad \widehat{norm}=fl(m\hat r). \tag{FB-CA-01}
|
||||
\]
|
||||
|
||||
m은 이 replay에서 선택한 exact binary64 scale로 고정하여 `Bm=0`으로 둔다.
|
||||
변동된 ideal x에도 같은 positive m을 사용하는 scaled norm의 수학적 값은
|
||||
`||x||2`이므로 max branch의 perturbation 미분은 필요 없다. 각 division/product/sum의
|
||||
radius는 CA-03으로 순서대로 전파한다. Finite positive m·norm, `hat s-Bs>0`을
|
||||
요구하며 floor나 fallback norm을 넣지 않는다. Absolute value/max는 유한한 stored
|
||||
입력의 exact branch operation이다. Product 자체는 `pow` 대신 실제 multiply다.
|
||||
|
||||
Sqrt는 확인된 실행환경의 correctly-rounded IEEE operation으로 취급한다.
|
||||
`epsilon_r=rho(hat r)`는 CA-02의 실제 sqrt rounding bound다. 보수적인 간단한 식은
|
||||
|
||||
\[
|
||||
d_{sqrt}=\hat r-\epsilon_r>0,\qquad
|
||||
B_r\le B_s/d_{sqrt}+\epsilon_r,\qquad
|
||||
B_{norm}\le |m|B_r+\rho(\widehat{norm}). \tag{FB-CA-02}
|
||||
\]
|
||||
|
||||
이는 `|sqrt(s*)-sqrt(hat s)|=|s*-hat s|/(sqrt(s*)+sqrt(hat s))` 및
|
||||
`sqrt(hat s)>=hat r-epsilon_r`의 보수적 bound다. Denominator는 lower enclosure,
|
||||
분자와 최종 radius는 upper enclosure로 계산하여 radius 산술 자체의 rounding을
|
||||
포함한다. 더 날카로운 denominator를 쓰려면 두 sqrt의 검증된 lower enclosure가
|
||||
필요하다. FTZ/DAZ 또는 subnormal sqrt/product를 지원할 때는 원 CA-02의 eta와
|
||||
실제 실행 의미를 확인한다. 확인되지 않은 연산의 `1u` 오차를 가정하지 않는다.
|
||||
기존 opaque `std::hypot`를 유지한다면 그 실제 norm의 독립 enclosure가 필요하며,
|
||||
FB-CA-01의 radius를 다른 hypot 연산 경로의 증거로 승계하지 않는다.
|
||||
|
||||
계수 생성은 actual FB-02의 순서를 그대로 replay한다: `n=raw/norm(raw)`,
|
||||
선택된 k에서 `b_c=e_k[c]-n_k*n_c`, `t1=b/norm(b)`,
|
||||
`t2_c=n_i*t1_j-n_j*t1_i` (cyclic c,i,j)다. `e_k`의0/1은 exact 입력이고,
|
||||
division은 `|hat denominator|-Bdenominator>0`을 요구한다. 각 operation의
|
||||
CA-03과 FB-CA-01/02로 얻는 radius를 `BLp[c,i]`, `BLz[c]`로 보존한다.
|
||||
FMA를 실제 사용하면 multiply/add 둘의 임의 replay 대신 그 actual fused operation의
|
||||
rounding contract를 사용한다. 선택된 k와 tie/source order는 고정 path metadata다.
|
||||
Exact target도 같은 k를 사용하며 다른 ideal min-axis branch의 민감도는 이
|
||||
certificate 범위 밖이다. 전체 initial Gram/finite gate는 별도로 유지한다.
|
||||
|
||||
각 sparse basis action의 product `hat w=fl(hat L*hat p)`에서
|
||||
|
||||
\[
|
||||
B_w\le |\hat L|B_p+|\hat p|B_L+B_LB_p+\rho(\hat w) \tag{FB-CA-03}
|
||||
\]
|
||||
|
||||
를 적용하고 actual canonical sum 또는 compensated sum의 모든 연산 radius를
|
||||
누적한다. Initial projection `Lp^T q0/Lz^T q0/Lp^T v0/Lp^T a0`, global lift,
|
||||
mapped correction 및 rate reconstruction에서 같은 coefficient와 BL을 사용한다.
|
||||
`BL`은 불변 basis와 함께 history 전체에 보존하며 step 시작에0으로 재설정하지 않는다.
|
||||
`hat L=0`이어도 `BL>0`이면 `|hat p|BL` 항이 남으므로 해당 coefficient의 radius
|
||||
support를 버리지 않는다. 기존 identity component 열의 exact0/1 coefficient는 `BL=0`이다.
|
||||
Constrained rows는 실제 basis support 밖의 exact0이며 불필요한 rounding radius를
|
||||
만들지 않는다. Basis construction certificate, graph arithmetic INDICATOR,
|
||||
solve noise 및 whole-history recurrence certificate는 서로 다른 증거다.
|
||||
|
||||
구현 검산은 stored binary64 raw input과 actual selected branch/operation 순서에 대한
|
||||
독립 고정밀 또는 interval replay로 coefficient마다 `|hat L-L*|<=BL`을 확인한다.
|
||||
Nonzero phi null, min-axis tie, 작은/큰 norm scale, coefficient0의 nonzero BL,
|
||||
projection/lift 및 inherited radius omission을 포함한다. 이 검산은 생산 state나
|
||||
원 reference를 수정하는 polishing이 아니다.
|
||||
|
||||
고정 basis radius는 graph contraction과 solve에도 전달한다. 이 경로의 정확한
|
||||
scope는 endpoint에서 저장된 `C=psi_q`, Hessian/time/third 계수를 exact input으로
|
||||
고정한 **fixed-operator arithmetic indicator**다. C/AD 자체의 ideal input 오차나
|
||||
nonlinear graph/root의 전체 forward error를 엄밀히 포함한다고 주장하지 않는다.
|
||||
그 scope 안에서는 다음 linear solve radius를 검증된 bound로 구성할 수 있다.
|
||||
|
||||
각 entry의 `G=C Lz`, `P=C Lp` product/sum은 FB-CA-03으로 계산한다.
|
||||
Stored C 계수에는 `BC=0`을 적용하지만 `BL`과 actual contraction rounding은
|
||||
유지하여 `|G*-hat G|<=BG`, `|P*-hat P|<=BP`를 entrywise로 얻는다.
|
||||
`*`는 같은 stored operator를 ideal fixed basis와 fixed inputs에 적용한 값이다.
|
||||
Initial rate partition, `P vp/P ap`, first/second/third implicit derivative,
|
||||
rate reconstruction의 반복 contraction마다 같은 inherited BL/BG/BP를 사용한다.
|
||||
RHS의 `P vp`에는 `|hat P|Bvp+|hat vp|BP+BP Bvp`와 actual product/sum rounding을
|
||||
포함한다. Hessian/time contraction도 저장된 계수는 고정하되 이미 얻은 v/a 등의
|
||||
input radius와 실제 product/sum을 전파한다. C를 고정한다는 scope가 basis product
|
||||
radius나 input history radius를0으로 놓는 근거는 아니다.
|
||||
|
||||
실제로 푼 matrix와 RHS를 `hat G,hat b`, computed solution을 `hat x`로 둔다.
|
||||
Small private verification chart에서는 다음 inverse-action certificate를 구성한다.
|
||||
각 canonical unit RHS의 actual solve로 얻은 approximate inverse columns를 R에
|
||||
보존하며 기존 finite/N2-L 검사를 유지한다. **R은 exact inverse가 아니다.**
|
||||
R의 stored entries를 exact inputs로 보아 `I-hat G R`의 각 product/sum을 replay하고,
|
||||
반올림을 포함하는 nonnegative enclosure와 norm을 계산한다.
|
||||
|
||||
\[
|
||||
\overline H\ge|I-\hat G R|,\quad
|
||||
\theta_H=\|\overline H\|_\infty<1,\quad
|
||||
c=|R|\overline H\mathbf1,
|
||||
\]
|
||||
\[
|
||||
Q_{ij}=|R_{ij}|+c_i/(1-\theta_H)
|
||||
\quad\Longrightarrow\quad Q\ge|\hat G^{-1}|. \tag{FB-CA-04}
|
||||
\]
|
||||
|
||||
이는 `H=I-hat G R`, `hat G^-1=R(I-H)^-1=R sum_(k>=0) H^k`의 Neumann
|
||||
bound다. `thetaH<1`은 center G의 invertibility도 인증한다. 각 inverse entry의
|
||||
tail은 `( |R| Hbar 1 )_i/(1-thetaH)` 이하이므로 computed R의 forward accuracy를
|
||||
별도로 가정하지 않는다. Q 산술은 upper enclosure, `1-thetaH`는 positive lower
|
||||
enclosure로 계산한다. 보통 N2-L을 통과한 small inverse-action이면 tail이 작지만
|
||||
N2-L PASS 자체를 이 certificate의 대체로 사용하지 않는다.
|
||||
|
||||
RHS에 `|b*-hat b|<=Bb`가 있고 matrix uncertainty가 BG일 때 actual stored x에
|
||||
대한 residual도 actual product/sum rounding을 포함해 검산한다.
|
||||
Bb는 실제 RHS의 P/input/time/Hessian contraction replay에서 얻으며 이미
|
||||
상쇄된 최종 RHS의 크기만으로 추정하지 않는다. Center residual은 stored G/b/x를
|
||||
exact inputs로 둔 `rhat=fl(bhat-Ghat xhat)`의 실제 연산 replay에서 Br를 얻어
|
||||
`rbar_i=|rhat_i|+Br_i`로 계산한다. Product·각 sum/compensation의 상쇄 전 rounding
|
||||
항을 유지하며 N2-L의 작은 normalized residual을 raw absolute radius로 대신하지 않는다.
|
||||
|
||||
\[
|
||||
\overline r\ge|\hat b-\hat G\hat x|,\quad
|
||||
y=Q(\overline r+B_b+B_G|\hat x|),\quad
|
||||
A=Q B_G,\quad\theta_G=\|A\|_\infty<1,
|
||||
\]
|
||||
\[
|
||||
B_{x,i}=y_i+(A\mathbf1)_i\,\|y\|_\infty/(1-\theta_G)
|
||||
\quad\Longrightarrow\quad |x_i^*-\hat x_i|\le B_{x,i}. \tag{FB-CA-05}
|
||||
\]
|
||||
|
||||
실제로 `G* x*=b*`에서 `|x*-hat x|<=y+A|x*-hat x|`가 성립하고,
|
||||
그 infinity norm은 `||y||inf/(1-thetaG)` 이하이므로 위 component bound가 따른다.
|
||||
모든 component에 이 uniform norm을 적용해도 유효하지만 FB-CA-05는 row별
|
||||
`y_i`와 `A` row sum을 보존한다. Actual linear residual, uncertain basis matrix와
|
||||
RHS radius를 모두 포함하고, `BG|hat x|`나 perturbation feedback A를 누락하지 않는다.
|
||||
이 계산도 finite-first·upper radius·positive lower denominator 규칙을 적용한다.
|
||||
Matrix/unknown scaling을 사용하는 경우 G/R/BG/b/x는 **같은 actual solve 표현**에서
|
||||
계산한 뒤 physical rate radius로 scale undo한다.
|
||||
|
||||
두 `theta<1`은 bound의 수학적 성립조건이며 새 acceptance tolerance가 아니다.
|
||||
Norm의 upper enclosure가1 이상이거나 positive denominator를 증명할 수 없으면
|
||||
indicator certificate는 incomplete/INCONCLUSIVE다. 임의 floor, pseudoinverse,
|
||||
radius0, tolerance 완화로 통과시키지 않는다. 원 G/N4 regularity 및 N2-L gate는
|
||||
그대로이며 일반 production에 새 inverse/R 저장/public API를 요구하지 않는다.
|
||||
C08의 null1/null4 같은 작은 private chart에서 finite dense R/Q를 사용하는 것은 검증 실행의 책임이다.
|
||||
Empty G는 원 empty-null exact branch로 처리한다. 이 frozen-operator bound를
|
||||
전체 nonlinear/AD/branch-sensitive trajectory의 rigorous error bound로 승계하지 않는다.
|
||||
|
||||
## 6. N7과 독립 검증의 함의
|
||||
|
||||
Last full K/RHS와 actual selected K/RHS, actual correction은 같은 trial을 authority로
|
||||
보존한다. Fresh accepted full operator는 별도 authority다. Restricted-last는
|
||||
`eL=KJ dhatJ-bJ`, `KJ zL=-eL`을 zero-U embed하고,
|
||||
`eM=Kfull dhatfull-bfull`, `Kfull zM=-eM`을 omitted-U/hidden 전체 행에서 푼다.
|
||||
Fresh endpoint는 FB-05/06과 `(-Ep,-psi0,-psi1,-psi2)`에서 zN을 푼다.
|
||||
Full-last는 actual correction/zL/zN 세 항, restricted-last는
|
||||
actual correction/zL/zM/zN 네 항이다.
|
||||
|
||||
각 vector는 actual scaling을 undo한 뒤 FB-07로 q/v/a/Ar/A에 sparse map하고,
|
||||
원 length/time/case amplitude와 global channel/node에서 각 norm을 **먼저** 구한
|
||||
뒤 합한다. 다른 vector를 상쇄한 뒤 norm을 구하지 않는다. Full-last에서 zM=zL을
|
||||
이중 계산하지 않는다. 모든 defect solve에 각 actual domain의 finite/N2-L을 요구하며
|
||||
full defect solve 실패를 restricted 성공으로 대신하지 않는다. Read-only 해를 state에
|
||||
적용하지 않는다. Factor100·FAIL/INCONCLUSIVE와 grid간 radius 합산을 유지하고,
|
||||
보수성 때문에 factor100을 만족하지 못해도 항을 삭제하거나 clamp하지 않는다.
|
||||
|
||||
독립 검증에 필요한 새 경계는 다음과 같다.
|
||||
|
||||
- Nonzero initial analytic null, minimum-axis tie, ON Gram, constant O(2)
|
||||
frame transition, sparse projection/lift/transpose action과 exact constrained0.
|
||||
- 독립 소형 dense 계산과 FB-05/06/07 전체 block 비교, actual scale undo,
|
||||
mixed-time third 항, G와 `N^T Lz`/S를 각각 퇴화시키는 사례, partial-BC rank-change 거부.
|
||||
- Frame0 원본 보전, private pair/RN-even와 global reconstruction의 구분,
|
||||
basis product/sum omission mutation, CA 초기 projection/history/rate-copy 대응.
|
||||
- Actual N7 aggregator의 전체 auxiliary/omitted-U defect omission mutation,
|
||||
full-last 세 항/restricted-last 네 항, trigger/thaw/combined100/rollback.
|
||||
- Genuine nonzero-C1/warped/shared-node N5, 자연 C09 전체 trajectory/proper-Q/결정론,
|
||||
2/4/8-step 진단, C08a7/C08b8 원 grid/hidden/physical q-v-a/P-E-L/N7,
|
||||
configured full Debug/CTest와 원101-frame reference. 실행은 fresh source identity에 연결한다.
|
||||
|
||||
남은 증거: actual diagonal scaling, 비영 private 초기상태 roundtrip 운용,
|
||||
새 basis coefficient CA, condition/transversality 실측 및 전체 runtime 항목은
|
||||
implementation owner와 독립 review가 확인한다. 새 tolerance/physics/schema/reference
|
||||
변경은 정하지 않았다. Empty null은 원 full-coordinate HHT로, all-fixed는 empty
|
||||
free solve와 원 full reaction으로 환원한다. 문서 정적 대조만 수행했으며
|
||||
build/test·외부 solver는 실행하지 않았다.
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
[주 정식화](formulation.md)의 구현 수식 상세다. 상태와 미결정 항목은 주 문서를 따른다. 아래 전개는 명시한 FESA 운동학에서의 자체 유도이며 Abaqus 내부 절차의 기술이 아니다.
|
||||
|
||||
사용자 선택에 따라 이번 HHT 기본 및 구현 질량은 consistent `T_C/M_C`다. Lumped 식은 비교용 이론·기존 eigen 회귀 참고로 보존하며 이번 HHT 구현·검증 요구를 추가하지 않는다. 다른 physics·알고리즘·공개 output의 승인은 이 선택과 별개다.
|
||||
2026-10-11 승인 [HHT-ADR-012](ADR.md)에 따라 이번 HHT 질량은 nodal lumped `T_L/M_L`다. Consistent 식은 비교와 미분 유도 이력으로 보존한다. 다른 physics·알고리즘·공개 output의 승인은 이 선택과 별개다.
|
||||
|
||||
## 1. 회전과 관성의 미분
|
||||
|
||||
@@ -64,7 +64,29 @@ D_vI_C[p]&=2\int\rho H^TB_x[v,p]\,dV_0,\qquad D_aI_C[p]=M_Cp.
|
||||
|
||||
첫 항 `B_x[p,·]^T ẍ`를 빼면 단순 current-mass tangent에 불과하다. `B_x[p,a]`, `C_x[p,v,v]`, `2B_x[v,δv]`도 생략하지 않는다. `T`의 Euler–Lagrange 전개에서 `D H`의 대칭성에 의해 `d(H^T)/dt`와 `∂q T` 항이 상쇄되어 위 식을 얻는다. 원형상 밀도·measure는 시간에 따라 갱신하지 않는다.
|
||||
|
||||
비교용 lumped 식에는 `x_i(z)=X_i+u_i+z d_i`, `H_i=D_q x_i`를 사용하여 위 적분을 `Σ_i ∫rho N_i (·)_i dV_0`로 바꾼다. `N_i`는 q와 무관하므로 동일한 derivative action이 성립한다. 별도의 경험적 gyroscopic 또는 Coriolis 보정항을 추가하지 않는다.
|
||||
채택한 nodal lumped 식에는 `x_i(z)=X_i+u_i+z d_i`, `H_i=D_q x_i`를 사용하여 위 적분을 `Σ_i ∫rho N_i (·)_i dV_0`로 바꾼다. `N_i`는 q와 무관하므로 동일한 derivative action이 성립한다. 별도의 경험적 gyroscopic 또는 Coriolis 보정항을 추가하지 않는다.
|
||||
|
||||
구체적인 현재 채택식은 다음과 같다. `B_i^x=D_q²x_i`, `C_i^x=D_q³x_i`이며
|
||||
각 nodal mapping의 도함수는 해당 node의6개 성분에만 작용한다.
|
||||
|
||||
\[
|
||||
T_L=\tfrac12\sum_i\int\rho N_i|H_iv|^2dV_0,\quad
|
||||
M_L=\sum_i\int\rho N_iH_i^TH_i dV_0,
|
||||
\quad I_L=\sum_i\int\rho N_iH_i^T\{H_ia+B_i^x[v,v]\}dV_0.
|
||||
\]
|
||||
\[
|
||||
c_L=I_L(q,v,0),\quad
|
||||
D_qI_L[p]=\sum_i\int\rho N_i\left((B_i^x[p,\cdot])^T\ddot x_i
|
||||
+H_i^T\{B_i^x[p,a]+C_i^x[p,v,v]\}\right)dV_0,
|
||||
\]
|
||||
\[
|
||||
D_vI_L[p]=2\sum_i\int\rho N_iH_i^TB_i^x[v,p]dV_0,
|
||||
\qquad D_aI_L[p]=M_Lp.
|
||||
\]
|
||||
|
||||
현재 위치·속도도 같은 nodal measure로 P/L을 계산한다. Geometry/Jacobian은 원래
|
||||
bilinear shell 보간으로 검사하며 nodal kinetic mapping으로 geometry를 교체하지 않는다.
|
||||
이를 통해 M만 바꾸고 기존 보간 기반 c/접선/에너지를 남기는 혼합 모델을 방지한다.
|
||||
|
||||
## 2. 채택 질량·비교식과 적분
|
||||
|
||||
@@ -81,7 +103,7 @@ C_{ij}^{(1)}B_i^T&C_{ij}^{(2)}B_i^TB_j
|
||||
|
||||
`rho`의 차원은 `mass/length³`, `(C0,C1,C2)` 및 `(m,s,j)`의 차원은 `(mass,mass·length,mass·length²)`다. `M_uu/M_uphi/M_phiphi`는 각각 같은 세 차원, residual translation은 force, rotation은 force·length이다. `v_u,a_u`는 `length/time,length/time²`; `v_phi,a_phi,omega,omega_dot`는 `1/time,1/time²`. 각도 단위는 rad이며 SI를 추정하지 않는다.
|
||||
|
||||
Moments는 현행 [eigen2 mass 계약 M2–M3](../mitc4-shell-feast-eigen2/formulation-mass-stabilization.md#m2-consistent-scalar-moments와-적분)의 `3×3×3` Gauss–Legendre를 기준으로 하며, 그 scalar-moment lumping은 비교식에만 사용한다. 긴 유도는 선행 [mass 계약 M3](../mitc4-shell-feast-eigen/formulation.md#formulation-mass--m3-consistent-matrix와-충분한-quadrature)에 있다. 점은 `−sqrt(3/5),0,+sqrt(3/5)`, weight는 `5/9,8/9,5/9`, 순서는 증가하는 `xi→eta→zeta`다. Geometry가 bilinear degenerated shell이고 rho/t가 일정할 때 `Ni Nj z^k J0`의 축별 차수는 최대 4여서 이 moment 적분은 정확하다. `B_i`와 그 도함수는 nodal 값이므로 현재 관성과 tangent도 같은 moment를 사용한다.
|
||||
Moments는 현행 [eigen2 mass 계약 M2–M3](../mitc4-shell-feast-eigen2/formulation-mass-stabilization.md#m2-consistent-scalar-moments와-적분)의 `3×3×3` Gauss–Legendre를 기준으로 하며, 그 scalar-moment lumping을 현재 HHT의 nodal kinetic measure에도 사용한다. 긴 유도는 선행 [mass 계약 M3](../mitc4-shell-feast-eigen/formulation.md#formulation-mass--m3-consistent-matrix와-충분한-quadrature)에 있다. 점은 `−sqrt(3/5),0,+sqrt(3/5)`, weight는 `5/9,8/9,5/9`, 순서는 증가하는 `xi→eta→zeta`다. Geometry가 bilinear degenerated shell이고 rho/t가 일정할 때 `Ni Nj z^k J0`의 축별 차수는 최대 4여서 이 moment 적분은 정확하다. `B_i`와 그 도함수는 nodal 값이므로 현재 관성과 tangent도 같은 moment를 사용한다.
|
||||
|
||||
모든 27 mass 점에서 finite positive `J0`와 기존 geometry predicate를 확인한다. Current trial도 내력 8점·tying·center·recovery와 추가 inertia 평가점에서 허용 geometry를 만족해야 한다. `abs(J)`, 점 생략, 강제 평면화는 없다. 물리 내력·물리 에너지와 section recovery는 기존 `2×2×2` 적분, drill potential은 기존 element-level 합을 보존한다.
|
||||
|
||||
@@ -98,7 +120,7 @@ Lumped positivity 조건은 `m_i>0`, `j_i−s_i²/m_i>0`다:
|
||||
T_L-T_C=\frac14\int\rho\sum_{i,j}N_iN_j|w_i-w_j|^2dV_0\ge0.
|
||||
\]
|
||||
|
||||
따라서 consistent와 lumped의 동적 응답이나 spectrum 동일성을 가정하지 않는다. 평판의 `s_i=0`, `j_i=t²m_i/12`를 warped geometry 일반식으로 사용하지 않는다. 사용자는 보간된 shell 속도의 운동에너지를 직접 적분하는 consistent mass를 선택했으며 기존 eigen의 lumped 계약은 변경하지 않는다.
|
||||
따라서 consistent와 lumped의 동적 응답이나 spectrum 동일성을 가정하지 않는다. 평판의 `s_i=0`, `j_i=t²m_i/12`를 warped geometry 일반식으로 사용하지 않는다. 사용자는 현재 nodal lumped kinetic mass를 선택했으며 기존 eigen의 lumped 계약은 변경하지 않는다.
|
||||
|
||||
## 3. 객관성·운동량·회복
|
||||
|
||||
|
||||
@@ -0,0 +1,270 @@
|
||||
# Shell 축소 좌표 HHT 정식화
|
||||
|
||||
상태: `implementation-ready; independent-review-and-shell-verification-pending`, 2026-10-12. 사용자는 실제 shell의 축소 좌표 HHT 구현·검증과 full A의 진단용 filter-combination 의미/schema 구분을 승인했다. 본 문서는 수식 인계이며 구현 또는 수치 통과를 승인하지 않는다. [기존 정식화](formulation.md), [현재 관성](formulation-inertia.md), [실험·실패 보고](temporal-remediation.md)를 전제로 한다. Carried-A의 동일 full-coordinate HHT 산술은 [별도 N7 상세](formulation-carried-a-noise.md)가 소유한다.
|
||||
|
||||
## 1. 물리와 좌표
|
||||
|
||||
2026-10-13 HHT-ADR-018 이후 all-free rotational null 절점의 component selector와
|
||||
이에 의존하는 projection/lift는 [고정 null 기저 상세](formulation-fixed-null-basis.md)의
|
||||
FB-02–07로 대체한다. 부분구속의 기존 component chart는 유지한다. 아래 continuous
|
||||
physics와 graph/rate 계약은 유지하되, identity-coordinate 전용 설명을 새 plane basis에
|
||||
그대로 적용하지 않는다. 실제 augmented scaling·초기화·CA/N7의 새 basis 경계는
|
||||
해당 상세 문서를 따른다.
|
||||
|
||||
기존 Total Lagrangian MITC4, objective numerical drilling potential, isotropic linear elasticity, nodal lumped kinetic measure, 공간 적분과 fixed-initial global chart를 유지한다. 좌표는 node-major `q=(u_x,u_y,u_z,phi_X,phi_Y,phi_Z)`, `v=dot q`, `a=ddot q`; 병진 단위는 length, 회전은 rad다. 질량 추가, damping, stiffness modification, stress averaging은 없다. 공개 load subset은 기존 constant global force, 구속은 fixed zero다. 아래 smooth F(t)의 시간미분은 C08a 내부 manufactured oracle에만 해당한다.
|
||||
|
||||
Zero constrained 성분을 정확히 제거한 free 공간에서
|
||||
|
||||
\[
|
||||
E(q,v,a,t)=I(q,v,a)+g(q,t),\quad I=M(q)a+c(q,v),\quad g=f_{int}(q)-F(t).
|
||||
\tag{RC-01}
|
||||
\]
|
||||
|
||||
실제 admissible nodal mass-null은 `n_i=normalize(J_l(phi_i)^{-1} d_i)`, `d_i=Exp(phi_i)d0_i`이다. N은 이 방향의 free-space lift이며 `MN=0`, `N^TI=0`이다. 원 대수조건은
|
||||
|
||||
\[
|
||||
\psi_i=N_i^Tg=\sum_{e\ni i} k_e S_i\gamma_{ei}-n_i^TF_{\phi,i}(t),\quad
|
||||
S_i=1/\|J_l^{-1}d_i\|.
|
||||
\tag{RC-02}
|
||||
\]
|
||||
|
||||
이는 기존 `drilling_constraint`의 scalar이며 raw twist gamma가 아니다. Physical force의 null work가 0인 정확 identity를 사용하므로 energy의 4차 tensor는 필요 없다. Translation force의 null work는 0이다. Shared node external term은 한번만 추가한다.
|
||||
|
||||
## 2. Fixed graph와 부분 구속
|
||||
|
||||
초기 frame에서 admissible null node마다 free rotation component 중 `|n_i[c]|` 최대 성분을 z pivot으로 선택한다. 동률은 X,Y,Z 순서이며 node는 기존 canonical/source order다. 나머지 free components가 p다. 고정 selector `L_p,L_z`로 `q_f=L_p p+L_z z`를 정의하고 **global coupled** `psi(q,t)=0`를 풀어 `z=z(p,t)`, `q=Q(p,t)`를 만든다. 각 node의 독립 scalar solve로 대신하지 않는다. `G=psi_q L_z`는 nonsymmetric일 수 있다.
|
||||
|
||||
부분 회전 BC의 null 개수는 `span(n_i) ∩ {w:C_i w=0}`에서 정한다. Constrained component에 n_i가 하나라도 nonzero이면 그 node의 admissible null은 0이며 해당 node의 모든 free components를 p에 남긴다. 모든 constrained null components가 정확히 0이면 null 1개다. 기존 `NullNodes`의 exact component convention을 사용하되 noise threshold로 rank를 바꾸지 않는다. 작은 constrained 성분을 0으로 clamp하거나 null을 잘라 정규화하지 않는다.
|
||||
|
||||
고정 graph 전체에서 initial admissible-node list가 같아야 한다. 매 trial의 실제 null 교집합을 다시 대조한다. Partial BC가 처음에는 null을 허용하나 finite rotation에서 가르면 rank가 변하므로 실패다. 그 모델은 본 fixed-rank local method의 지원 밖이며 silent full/reduced switching을 하지 않는다. Pivot은 최초 선택 후 변경하지 않는다. 기존 principal-chart, geometry, swing/twist validity와 동일한 branch를 유지한다. 실패 chart의 history transport·자동 rechart는 이번 최소 구현에서 지원하지 않는다.
|
||||
|
||||
다음은 서로 다른 필수 검사다: G solve regularity, `psi_q N` transversality, full column-rank J, `M_r=J^TMJ` positivity 및 기존 condition checks. G의 invertibility만으로 이 모두를 대체하지 않는다. `[J,N]`이 free space를 span하면 psi=0와 `J^TE=0`는 원 `E_f=0`와 동등하다. 기존 N1–N6 scale/condition policies를 사용하고 새 tolerance/floor/pseudoinverse/diagonal shift를 정하지 않는다.
|
||||
|
||||
Empty null에서는 `Q(p)=L_p p`, `J=L_p`, `Q_t=Q''=Q'''=0`이며 원 full-coordinate HHT로 환원한다. All-fixed에서는 p,z,free solve가 모두 비며 full reaction만 복구한다. All-free 및 all-rotation-fixed node 조합은 고정 rank를 직접 만족한다. 일반 partial node는 위 교집합/rank 검사 아래에서만 지원하며, 모든 partial BC의 성공을 보장하지 않는다.
|
||||
|
||||
## 3. 축소 적분과 물리 rate
|
||||
|
||||
초기 `p0=L_p^T q0`; graph의 identity coordinates 때문에 `vp0=L_p^T v0`, `ap0=L_p^T a0`다. 동일 Q branch와 chain-rule rates가 기존 full frame0를 복원해야 한다. 기존 정확 q0/v0/a0를 silent projection하거나 첫 frame를 제외하지 않는다. `Ar0=ap0`이다.
|
||||
|
||||
초기 null correction과 hidden evidence의 `psi_q`도 RC-02의 direct scalar primitive와
|
||||
동일한 미분을 사용한다. Analytically objective physical energy의 `n^T H`는 이 제약에
|
||||
기여하지 않지만, 별도로 계산한 physical Hessian을 투영하면 반올림 잡음이 제약 계수로
|
||||
남을 수 있다. 이를 원래 full `a0`에 가짜 null acceleration을 추가하는 근거로 사용하지
|
||||
않는다. Primitive의 source-ordered assembly와 안정적인 contraction으로 같은 수식을
|
||||
계산하고, physical mass range solve 및 original/reconstructed frame0의 full residual
|
||||
판정은 유지한다. 이 산술 정정의 원인·실행 범위는
|
||||
[후속 검증 기록](temporal-remediation.md)을 따른다.
|
||||
|
||||
\[
|
||||
Ar_{n+1}=(1+\alpha)ap_{n+1}-\alpha ap_n,\quad
|
||||
p_p=p_n+h vp_n+h^2(1/2-\beta)Ar_n,\quad
|
||||
vp_p=vp_n+h(1-\gamma)Ar_n,
|
||||
\tag{RC-03}
|
||||
\]
|
||||
\[
|
||||
Ar=(p-p_p)/(\beta h^2),\quad vp=vp_p+\gamma h Ar,\quad
|
||||
ap=(Ar+\alpha ap_n)/(1+\alpha).
|
||||
\tag{RC-04}
|
||||
\]
|
||||
|
||||
동등한 carried-Ar Newton 산술은 Ar를 직접 갱신할 수 있으나 실제 update operator와 N7 estimator가 대응해야 한다. Public full A는 Ar나 `J Ar`가 아니다.
|
||||
|
||||
\[
|
||||
q=Q(p,t),\quad v=J vp+Q_t,\quad
|
||||
a=J ap+Q_{pp}[vp,vp]+2Q_{pt}vp+Q_{tt},\quad J=Q_p,
|
||||
\tag{RC-05}
|
||||
\]
|
||||
\[
|
||||
A_{full,n+1}=(1+\alpha)a_{n+1}-\alpha a_n,\quad A_{full,0}=a_0.
|
||||
\tag{RC-06}
|
||||
\]
|
||||
|
||||
Afull은 full chart의 진단용 filter combination이며, reduced history `p,vp,ap,Ar`로 다음 predictor를 계산한다. Full physical v/a, spatial omega/omega_dot, 원 E와 반력은 기존 의미를 유지한다. 하나의 accepted full state에서 물리량을 복구하며 Ar를 physical acceleration으로 사용하지 않는다. 적분 이력과 물리 state를 함께 원자적으로 commit한다.
|
||||
|
||||
Newton 시작점은 같은 frozen `pp,vpp,ap_old`에서 p=pp와 p=pn을 각각 **새 endpoint 시간**의 Q(p,t)로 올린 두 trial이다. 시간 의존 psi에서 과거 full qn를 새 graph state로 그대로 사용하지 않는다. 두 trial의 실제 full chain-rule rates와 원 free `||D^T E||inf`를 대조하여 작은 쪽을 선택하고 exact tie는 predictor다. 같은 p이면 한번만 평가하며, 선택한 assembly를 그대로 첫 iteration에 사용한다. 기존 genuine geometry/chart fallback 범위를 유지하되 algebraic-rank, solve, arithmetic failure를 geometry 실패로 숨기지 않는다.
|
||||
|
||||
## 4. Tensor 없는 implicit embedding 미분
|
||||
|
||||
시간을 포함해 `Psi(q,t)=psi(q,t)`, `Qtilde=(Q,t)`로 쓴다. Full extended Hessian을 H, third trilinear operator를 T라 한다. p/t direction b에 대해 `U_b=DQtilde[b]`이며
|
||||
|
||||
\[
|
||||
G z_p=-\psi_q L_p,\qquad G z_t=-\psi_t,\qquad
|
||||
G z''[b,c]=-H[U_b,U_c].
|
||||
\tag{RC-07}
|
||||
\]
|
||||
|
||||
z의 first derivatives로 J와 Qt를 만든다. Second derivatives의 full vector는 z block에만 nonzero이며 time component는 0이다. 전체 second/third tensor를 저장할 필요 없다. 현재 endpoint에서
|
||||
|
||||
\[
|
||||
w=(vp,1),\quad W=(v,1)=DQtilde[w],\quad B=D^2Qtilde[w,w],\quad a=J ap+B_q.
|
||||
\tag{RC-08}
|
||||
\]
|
||||
|
||||
열 j마다 `U_j=(J e_j,0)`, `X_j=D²Qtilde[(e_j,0),w]`, `Y_j=D²Qtilde[(e_j,0),(ap,0)]`를 동일 G로 푼다. `B_q,X_{j,q},Y_{j,q}`는 RC-07의 Hessian RHS다. 필요한 third만
|
||||
|
||||
\[
|
||||
G C_{j,z}=-\{T[U_j,W,W]+2H[X_j,W]+H[B,U_j]\},
|
||||
\quad C_j=D^3Qtilde[(e_j,0),w,w].
|
||||
\tag{RC-09}
|
||||
\]
|
||||
|
||||
같은 G factorization을 모든 RHS에 재사용할 수 있다. 이는 매 endpoint의 graph derivative factorization이며 Newton tangent의 stale factor reuse를 뜻하지 않는다. Finite RHS/solve residual을 검사하고 direct inverse를 만들지 않는다.
|
||||
|
||||
## 5. Exact reduced Newton
|
||||
|
||||
Residual은 `R=J^T E_f`. `cv=gamma/(beta h)`, `ca=1/[(1+alpha)beta h²]`라 하면
|
||||
|
||||
\[
|
||||
\delta q_j=J_j,\qquad \delta v_j=X_{j,q}+cv J_j,\qquad
|
||||
\delta a_j=Y_{j,q}+ca J_j+C_{j,q}+2cv X_{j,q}.
|
||||
\tag{RC-10}
|
||||
\]
|
||||
\[
|
||||
K_{r,ij}=Q_{pp}[e_i,e_j]^T E_f+
|
||||
J_i^T\{(I_q+K_{int})\delta q_j+I_v\delta v_j+M\delta a_j\}.
|
||||
\tag{RC-11}
|
||||
\]
|
||||
|
||||
`Qpp`는 RC-07로 구하며 평형 밖에서 E와의 contraction을 생략할 수 없다. 전체 Qpp vectors 없이 `G^T lambda=L_z^T E`를 한번 풀면 첫 항은 `-lambda^T H[U_i,U_j]`다. 같은 transpose solve를 재사용하며 미분을 근사하지 않는다. `Kr Δp=-R`, 또는 `s=beta h²`인 동등식 `s Kr ΔAr=-R`를 nonsymmetric solver로 푼다. 기존 full-coordinate Keff에는 Q 곡률과 `(delta J)^T E`가 없으므로 Kr로 사용할 수 없다.
|
||||
|
||||
Reduced 수렴에는 원 free E, psi와 다음 hidden derivatives도 검사한다.
|
||||
|
||||
\[
|
||||
r_1=\psi_qv+\psi_t,\quad
|
||||
r_2=\psi_q a+\psi_{qq}[v,v]+2\psi_{qt}v+\psi_{tt}.
|
||||
\tag{RC-12}
|
||||
\]
|
||||
|
||||
작은 R만으로 ill-conditioned embedding이나 원 평형을 인증하지 않는다. 기존 full-space force/moment scales, physical recovery와 linear solve checks를 유지한다. 수정한 trial 좌표와 복구한 rate derivatives는 같은 assembly에 속해야 한다. Branch root와 outer Newton의 iteration 한도·진단은 구현·수치 검토 책임이며 본 정식화에서 새 acceptance 값을 만들지 않는다.
|
||||
|
||||
### 5.1 구현의 동등한 희소 augmented Newton
|
||||
|
||||
실제 구현은 전역 `J`, `Qpp`를 저장하는 대신 selector residual
|
||||
`E_p=L_p^T E`와 graph의 접선 방정식을 함께 푼다. `psi=N^T E=0`이고
|
||||
선택한 pivot의 `N_z`가 가역이면 `E_p=0`은 원 전체 평형 및 `J^T E=0`과
|
||||
같은 root를 갖는다. 이는 **다른 residual의 exact Newton**이다. 평형 밖의
|
||||
Newton step까지 RC-11과 동일하다고 주장하거나, RC-11에서 `delta J^T E`를
|
||||
생략하는 근사로 해석하지 않는다.
|
||||
|
||||
Unknown은 `(delta p, delta z, delta vz, delta az)`이며
|
||||
`delta q=L_p delta p+L_z delta z`,
|
||||
`delta v=L_p cv delta p+L_z delta vz`,
|
||||
`delta a=L_p ca delta p+L_z delta az`이다. Physical row는
|
||||
`L_p^T[(I_q+Kint)delta q+I_v delta v+M delta a]=-E_p`다.
|
||||
같은 trial의 `W=(v,1)`에 대해 나머지 세 row는 다음과 같다.
|
||||
|
||||
\[
|
||||
\psi_q\delta q=0,\qquad
|
||||
\psi_q\delta v+(\psi_{qq}v+\psi_{qt})\delta q=0,
|
||||
\]
|
||||
\[
|
||||
\psi_q\delta a+(\psi_{qq}a+D^3\Psi[\cdot,W,W])\delta q
|
||||
+2(\psi_{qq}v+\psi_{qt})\delta v=0.
|
||||
\]
|
||||
|
||||
각 trial은 position graph root, implicit physical-rate 복구, 실제 full
|
||||
assembly와 operator 재평가 순으로 구성한다. 위 auxiliary correction은
|
||||
linear solve의 full physical variation과 noise 평가에 모두 보존하되,
|
||||
독립적인 이력으로 commit하지 않는다. 다음 trial은 갱신한 `p`와 private
|
||||
`Ar`에서 다시 root와 rates를 복구한다. 원 full E, hidden 0/1/2,
|
||||
chart/rank regularity 및 기존 물리·선형 solve 검사를 그대로 수행한다.
|
||||
Hidden 1/2의 초기화 판정과 accepted endpoint의 진단·시간수렴 책임은
|
||||
기존 N3를 따른다. Endpoint의 hidden 1/2에 새로운 무조건적인 N2 종료
|
||||
허용값을 추가하지 않는다.
|
||||
|
||||
N2는 실제 `delta q`, `h delta v`, `h^2 delta a`, `h^2 delta A`의 승인된
|
||||
scaled norm과 private `delta Ar`를 검사한다. Public
|
||||
`delta A=(1+alpha)delta a`에서 이전 accepted physical acceleration은
|
||||
고정된다. N7에서도 augmented defect의 모든 auxiliary block을 위 식으로
|
||||
변환해야 한다. `delta p`만 남기거나 hidden defect를 무시하면 해당 noise
|
||||
판정은 유효하지 않다. 독립 소형 Schur 검산과 실제 shell 검증의 범위는
|
||||
[수치 검토](numerical-review-reduced-coordinate.md)에 구분하여 기록한다.
|
||||
|
||||
### 5.2 Newton 좌표 증분과 carried Ar의 산술 표현
|
||||
|
||||
Private physical candidate p와 Ar는 실제 augmented correction에서 함께 갱신한다.
|
||||
`p <- p + delta_p`, `Ar <- Ar + delta_p/(beta*h^2)`이며, vp/ap는 기존 Ar
|
||||
recurrence로 구한 뒤 full physical rates를 재구성한다. 처음 선택한 p/Ar 시작값과
|
||||
정확한 초기화, 원래 full residual·hidden·correction·update 기준은 유지한다.
|
||||
|
||||
Exact arithmetic에서는 `p=pp+beta*h^2*Ar`가 귀납적으로 유지된다. Binary64에서
|
||||
매 반복 p를 큰 pp와 반대 부호의 큰 Ar 항으로 다시 만드는 것은 작은 실제 Newton
|
||||
증분을 잃을 수 있다. 실제 large DIRECT probe에서 pp=-11218.75이고 Ar≈651228인
|
||||
상태의 요청 delta_p=-2.216e-12가 재구성 좌표에서는 -3.638e-12로 반영됐다.
|
||||
직접 p 증분 누적은 같은 수학 recurrence의 산술 표현 변경이며, p와 Ar를 별도 독립
|
||||
물리 unknown으로 늘리거나 실패 residual을 보정하는 방법이 아니다.
|
||||
|
||||
Accepted absolute update와 원 N3의 q increment trace에 기존 uncancelled-scale
|
||||
`1e-12`를 적용하며 불일치는 fail closed한다. 추가 vnew-vold subtraction은
|
||||
원 N3 요구가 아니므로 diagnostic으로 구분한다. Ar와 vp/ap의 별도 산술 이력 및
|
||||
graph-rate indicator를 계속 보존한다.
|
||||
|
||||
2026-10-13 후속 산술 수정은 Newton candidate의 p 덧셈에서 잃은 low를 유지한다.
|
||||
`(s,e)=TwoSum(p_high,delta_p)`, `t=p_low+e`,
|
||||
`(p_high_new,p_low_new)=TwoSum(s,t)`로 갱신하며 실제 geometry에는 high를 사용한다.
|
||||
원 predictor high 및 시작점 선택은 유지하고 predictor의 두 덧셈 low도 별도로
|
||||
carry한다. Old-p 시작은 해당 binary64 값에서 low0으로 시작한다. Requested trace는
|
||||
독립적인 보상 합계이며 candidate를 이 trace로 덮어쓰지 않는다.
|
||||
|
||||
Finite binary64·gradual underflow에서 pair radius는
|
||||
`Bpair_new=Bpair_old+rho(t)`, 실제 high radius는 `Bpair_new+abs(p_low_new)`다.
|
||||
Predictor의 inherited bound와 초기 low를 포함하고 accepted high의 uncertainty를
|
||||
다음 step으로 넘긴다. 기존 pp+Ar 또는 plain p addition bound를 이 새 경로의
|
||||
완전한 evidence로 승계하거나 radius를 reset/clamp하지 않는다. 이는 같은 수학
|
||||
recurrence의 산술 표현이며 stored high가 원 N3를 만족하지 못하면 여전히 실패다.
|
||||
독립 exact replay와 적용 한계는 [수치 검토](numerical-review-reduced-coordinate.md#n3-qtrace의-실제-coordinate-low-carry)를 따른다.
|
||||
|
||||
위 high-only 실패 정책은 승인 이전 evidence다. [HHT-ADR-016](ADR.md)에 따라
|
||||
reduced whole/requested 두 증분은 실제 candidate pair의 increment
|
||||
`(p_high+p_low)-old_accepted_high`를 EFT expansion으로 비교하고, 저장 high의
|
||||
RN-even 일치를 별도로 검사한다. 원래 각 scale와 `1e-12`, zero-scale exact-zero,
|
||||
독립 requested trace와 CA radius는 유지한다. Raw high-only 실패값을 보존하며
|
||||
승인 이전 FAIL을 변경본 PASS로 승계하지 않는다. 상세 범위와 표현 경계 검증은
|
||||
[승인된 제안](c08-n3-coordinate-representation-proposal.md)을 따른다.
|
||||
|
||||
## 6. 필요한 local operator와 시간 항
|
||||
|
||||
기존 scalar Jet의 `first`, `second`, `mixed_second[j]`는 gradient, Hessian과 `D³ scalar[e_j,v,v]`다. Internal psi(4 nodal scalars, 24 coordinate directions)와 external nodal scalar `-n(phi,d0)·Fphi`(3 rotation directions)에 이 값을 제공한다. AD/Jet/vendor type은 private로 유지한다. 시간 좌표를 포함한 Psi의 derivative contraction은
|
||||
|
||||
\[
|
||||
H[(u,\tau),(w,\sigma)]
|
||||
=\psi_{qq}[u,w]+\tau\psi_{qt}[w]+\sigma\psi_{qt}[u]+\tau\sigma\psi_{tt},
|
||||
\tag{RC-13}
|
||||
\]
|
||||
\[
|
||||
\psi_t=-n^TF',\quad \psi_{qt}[u]=-Dn[u]^TF',\quad \psi_{tt}=-n^TF'',
|
||||
\tag{RC-14}
|
||||
\]
|
||||
\[
|
||||
T[(u,0),(v,1),(v,1)]
|
||||
=D^3\psi_{int}[u,v,v]-D^3n[u,v,v]^TF
|
||||
-2D^2n[u,v]^TF'-Dn[u]^TF''.
|
||||
\tag{RC-15}
|
||||
\]
|
||||
|
||||
Fixed-time Newton에는 RC-15의 T만 필요하므로 **F'''는 불필요하다**. 일반 pure Qttt 요청에는 F'''가 필요하지만 이번 구현에서 요청하지 않는다. Constant public CLOAD에서는 F'=F''=0이다. Generalized rotational F가 nonzero이면 n의 pure-q 미분은 여전히 필요하다. C08a oracle에 Fdot/Fddot=0을 대입하면 잘못된 구현이다. External time-mixed second contraction은 n의 nodal Hessian에서 계산하며 force finite difference로 대체하지 않는다.
|
||||
|
||||
## 7. 최소 구현 인계
|
||||
|
||||
| Owner / 파일 제안 | 대응 operator / 책임 |
|
||||
| --- | --- |
|
||||
| `include/fesa/elements/nonlinear_mitc4_shell.h`, `src/fesa/elements/nonlinear_mitc4_shell.cpp` | Internal psi gradient/Hessian와 `drilling_constraint_third_directional_gradient[node][j]=D³psi[e_j,v,v]`; RC-02/15. 기존 physical energy force/tangent 보존 |
|
||||
| Element-local `NonlinearMitc4Shell::EvaluateExternalDrillingConstraint(node,phi,phi_dot,F,Fdot,Fddot)` | Unit d0, principal phi, n convention과 nodal scalar 미분. `gradient/Hessian`은 pure q, `directional_first/second`와 `gradient_directional_first/second`는 W=(v,1) contractions; RC-13–15 |
|
||||
| `src/fesa/analysis/hht_reduced_internal.h`, `hht_reduced_operators.cpp` 새 private proposal | Stable scatter/ordered assembly, external term once/node, current admissible null checks; shell/AD storage ownership 이전 금지 |
|
||||
| `src/fesa/analysis/hht_reduced_embedding.cpp` 새 private proposal | Fixed p/z selectors, coupled algebraic root, G/transposed-G solves, J/Qt/B/X/Y/C and full physical state; RC-07–10 |
|
||||
| `src/fesa/analysis/hht_dynamic_procedure.cpp` 및 필요시 `hht_reduced_newton.cpp` | Immutable prediction, reduced candidate/history, exact Kr, original equilibrium/hidden/geometry/recovery and atomic commit. Nonsymmetric sparse solver adapter 사용 |
|
||||
| `src/fesa/CMakeLists.txt` | 새 private source의 기존 production target registration; 새 vendor/public target 없음 |
|
||||
|
||||
Private interface는 `EvaluateAlgebraicOperators(q,t,F,Fdot,Fddot,v)`, `SolveEmbedding(fixed_chart,p,t,accepted_z_seed)`, `EvaluateReducedTrial(p,vp,ap,t)`의 수학적 책임을 분리하는 정도면 충분하다. 이름·저장/API는 구현자가 existing ownership에 맞춘다. `SolveEmbedding`은 immutable accepted z seed와 current trial를 구분하며 실패가 committed branch/cache에 반영되지 않는다. Perturbed algebraic-root finite difference is independent derivative validation only; production tangent must RC-11과 동일하다.
|
||||
|
||||
## 8. 검증 인계와 남은 한계
|
||||
|
||||
- Local scalar third: nonzero finite rotation/warped element, mixed external F/Fdot/Fddot, directional derivative sweeps와 independent scalar identity 확인. 임의 stored 0 third나 internal-only C08a 경로는 mutation 검출 대상이다.
|
||||
- RC-07–11: coupled mesh graph derivatives, exact reduced Newton tangent의 독립 directional sweep, `delta J^T E`/mixed-time/curvature 누락 mutation. Empty null의 원 full-coordinate recurrence와 all-fixed reaction, partial BC의 null 교집합·rank-change rejection도 확인한다.
|
||||
- Frame0와 hidden0/1/2, full E/reaction, director kinematics, spatial rates, energy/P/L, 실패 rollback을 현재 승인 기준으로 검사한다. 같은 alpha/beta/gamma가 과거 full-coordinate 결과의 동일성을 뜻하지 않는다.
|
||||
- C08a all-time full q/v/physical-a 차수와 실제 shell C08b physical high-frequency convergence는 별개다. 축소법의 null-rate 개선만으로 C08b finest fixed-grid 기준 통과를 주장하지 않는다. Original reference 비교·현재 full suite는 implementation owner가 수행한다.
|
||||
- Fixed component graph는 general chart/rank transport, smoothness가 깨진 null cutting BC, nonprincipal branch, nonsmooth F를 지원하지 않는다. 이 경계는 fail-closed 구현과 진단으로 드러나야 하며 tolerance/rank clipping으로 숨기지 않는다.
|
||||
|
||||
Owner의 [Decimal96 polynomial probe](../../.dryforge/hht-remediation-20261012/dae/reduced_operators_probe.py)는 explicit-time coupled 2-constraint graph의 RC-07/09와 RC-10/11을 세 상태에서 계산했다. [결과](../../.dryforge/hht-remediation-20261012/dae/reduced_operators_probe.json), [native0 기록](../../.dryforge/hht-remediation-20261012/dae/reduced_operators_probe-native.json)을 보존한다. Implicit derivatives를 polynomial Q의 직접 미분과 비교하고, 원 평형 밖의 임의 smooth covector에서 exact tangent와 central difference를 비교하여 `delta J` 생략 효과가 nonzero임을 확인했다. 이는 수식 bookkeeping 검산이며 실제 shell 물리 모델·production 실행 또는 독립 numerical review가 아니다.
|
||||
|
||||
독립 numerical reviewer가 RC-01–15와 actual implementation operator/BC/branch 대응을 검토해야 한다. Public A/schema details는 I/O owner의 승인 계약을 참조하며 본 수식 문서가 새로운 영속 문자열을 정하지 않는다.
|
||||
@@ -5,13 +5,15 @@
|
||||
- 기준: [프로젝트 지침](../../AGENTS.md), [제품 PRD](../PRD.md), [공통 ADR](../ADR.md#adr-028), [Feature PRD](PRD.md), [요구사항](requirements.md), [연구](research.md#research).
|
||||
- 관성의 전개식·초기 일관성·정확도 근거는 [formulation-inertia](formulation-inertia.md)가 소유한다. 영속 schema, C++ 저장 구조와 tolerance는 정의하지 않는다.
|
||||
|
||||
2026-10-12 사용자는 actual shell의 축소 좌표 HHT 구현·검증과 full A의 진단용 filter-combination 의미/schema 구분을 승인했다. 채택 방향의 수식은 [축소 좌표 HHT](formulation-reduced-coordinate.md)가 소유한다. 아래 full-coordinate recurrence는 기존 구현과 비교 이력이며 축소법의 full q/v update 식으로 승계하지 않는다. 승인과 actual solver 검증 완료는 구분한다.
|
||||
|
||||
## 1. 결론과 적용 범위
|
||||
|
||||
**추천 후보는 유한회전 kinetic energy에서 유도한 관성력과, 물리적 가속도 `a` / 알고리즘 가속도 `A`를 분리하는 HHT 확장이다.** 일정 질량의 표준 HHT force weighting으로 정확히 환원한다. 단순히 `M(q)`를 기존 일정 질량 잔차에 대입하는 식은 추천하지 않는다. 이 차이는 [상세 §5](formulation-inertia.md#5-시간-정확도와-대안의-경계)에 유도한다.
|
||||
|
||||
**사용자가 shell 속도 보간의 운동에너지를 그대로 적분하는 consistent mass를 선택했다.** 따라서 HHT 기본값과 이번 구현 범위는 consistent mass다. 같은 운동학의 scalar-moment nodal lumped 식은 비교용 이론 및 기존 eigen 회귀 참고이며 이번 HHT 구현 요구가 아니다. 선행 eigen 결과나 동적 reference와의 적합도로 선택한 것이 아니다. 유한회전 지원 범위를 작은 회전으로 축소하지 않는다.
|
||||
**2026-10-11 사용자가 고유치·HHT lumped mass를 승인했다([HHT-ADR-012](ADR.md)).** HHT는 아래 nodal kinetic measure의 `T_L/M_L`을 채택하고 기존 shell eigen nodal block lumping을 유지한다. `T_C/M_C`는 비교·유도 이력으로 보존한다. 선행 eigen 결과나 동적 reference와의 적합도로 선택한 것이 아니다. 유한회전 지원 범위를 작은 회전으로 축소하지 않는다.
|
||||
|
||||
아래 HHT 확장과 `0+` 초기화는 FESA 채택 제안이다. 이번 consistent mass 선택이 다른 physics·알고리즘·공개 output 계약 전체의 승인을 의미하지 않는다.
|
||||
아래 HHT 확장과 `0+` 초기화는 HHT-ADR-009에서 채택한 계약을 유지한다. 이번 lumped mass 선택은 그 밖의 physics·알고리즘·공개 output 범위를 확대하지 않는다.
|
||||
|
||||
| 구분 | 정식화 경계 |
|
||||
| --- | --- |
|
||||
@@ -81,7 +83,7 @@ Drilling stiffness는 물리적 회전 관성이 아니다. `U_phys`와 `U_drill
|
||||
|
||||
## 3. 질량·관성·연속 평형
|
||||
|
||||
`B_i=D_phi d_i=−[d_i]_× J_l(phi_i)`이고 `C_ij^(k)=∫rho N_iN_j z^k dV_0`이다. 채택한 consistent `T_C`와 비교용 lumped `T_L`은 다음과 같다.
|
||||
`B_i=D_phi d_i=−[d_i]_× J_l(phi_i)`이고 `C_ij^(k)=∫rho N_iN_j z^k dV_0`이다. 비교용 consistent `T_C`와 채택한 nodal lumped `T_L`은 다음과 같다.
|
||||
|
||||
\[
|
||||
T_C=\frac12\int_{\Omega_0}\rho\left|\sum_iN_i(v_{ui}+zB_iv_{\phi i})\right|^2dV_0,
|
||||
@@ -92,7 +94,7 @@ T_L=\frac12\sum_i\left(m_i|v_{ui}|^2+2s_i v_{ui}\cdot B_iv_{\phi i}
|
||||
(m_i,s_i,j_i)=\sum_j(C_{ij}^{(0)},C_{ij}^{(1)},C_{ij}^{(2)}).
|
||||
\]
|
||||
|
||||
비교용 lumped 식은 scalar moment의 row sum 후 tensor를 재구성하며 global matrix row sum이 아니다. 이번 HHT에는 `T=T_C`, `M=M_C`를 사용하고 artificial drilling inertia는 허용하지 않는다. `T=½v^T M(q)v`의 질량행렬은 회전에 의존한다. 관성 covector는
|
||||
채택한 lumped 식은 scalar moment의 row sum 후 tensor를 재구성하며 global matrix row sum이 아니다. 이번 HHT에는 `T=T_L`, `M=M_L`를 사용하고 artificial drilling inertia는 허용하지 않는다. `T=½v^T M(q)v`의 질량행렬은 회전에 의존한다. 관성 covector는
|
||||
|
||||
\[
|
||||
\boxed{I(q,v,a)=\frac{d}{dt}\partial_vT-\partial_qT=M(q)a+c(q,v)},
|
||||
@@ -210,6 +212,6 @@ W_{0\to n}=F^{\star T}(q_n-q_0),\quad
|
||||
| 구현 lifecycle | 동일 state tangent, 실패 rollback, time/frame 순서, deterministic assembly와 반복 결과 |
|
||||
| 외부 reference | 지정 원본 101 frames × 9 nodes, frame/instance/node/component의 exact mapping; U blocking / UR warning-only 및 공통 TOLERANCE. V/A/energy correctness는 해당 CSV에 coverage 없음 |
|
||||
|
||||
수식 후보의 [독립 검토](numerical-review.md#numerical-review)는 완료되었으며 표시된 수식에서 새 오류는 발견되지 않았다. 질량 선택은 consistent로 확정되었다. 구현 전 남은 계약은 (1) HHT 확장·초기화의 FESA 채택과 나머지 physics 범위, (2) initial algebraic regularity와 trial 실패 판정의 수치 기준, (3) 공식 output 의미의 공개 범위/I/O다. 이 선택 후 구현할 수 있는 수식 후보이며, 실제 유한회전 shell의 drilling DAE·관성 tangent·q/v/a 시간 수렴은 **구현 후 기능 acceptance에 필요한 검증**이다. 부모 문헌의 nonsingular-mass 조건을 shell mass-null에 자동 적용하지 않되, 모든 shell DAE의 보편적 수렴 증명을 코드 작성의 선행 조건으로 요구하지 않는다. 현재 문서 완료나 제한된 probe를 전체 solver 승인·검증 통과로 표시하지 않는다.
|
||||
수식 후보의 [독립 검토](numerical-review.md#numerical-review)는 완료되었으며 표시된 수식에서 새 오류는 발견되지 않았다. 현재 질량 선택은 HHT-ADR-012의 nodal lumped로 대체되었다. 이후 구현 전 상태를 설명하는 이 문단은 최초 정식화 당시의 기록이며 변경본 검증의 통과를 뜻하지 않는다. 구현 전 남은 계약은 (1) HHT 확장·초기화의 FESA 채택과 나머지 physics 범위, (2) initial algebraic regularity와 trial 실패 판정의 수치 기준, (3) 공식 output 의미의 공개 범위/I/O다. 이 선택 후 구현할 수 있는 수식 후보이며, 실제 유한회전 shell의 drilling DAE·관성 tangent·q/v/a 시간 수렴은 **구현 후 기능 acceptance에 필요한 검증**이다. 부모 문헌의 nonsingular-mass 조건을 shell mass-null에 자동 적용하지 않되, 모든 shell DAE의 보편적 수렴 증명을 코드 작성의 선행 조건으로 요구하지 않는다. 현재 문서 완료나 제한된 probe를 전체 solver 승인·검증 통과로 표시하지 않는다.
|
||||
|
||||
이번 owner 작업은 기존 정식화·source 대조, 일차 문헌 대조와 수식 유도 및 문서 정적 검토다. [독립 시간정확도 검산](numerical-review.md#numerical-review-probes)은 variable-mass SDOF와 moving-null 예제에서 추천 후보의 약 2차 q/v/physical-a 수렴을 관찰했고 naive 확대의 약 1차 오차를 구별했다. 이는 shell solver 검증이나 일반 drilling DAE 증명을 대신하지 않는다. Build/test·solver/reference 실행은 문서 작업 범위가 아니므로 미실행이다. 독립 검산과 Numerical Review 결과는 해당 owner의 보고서가 소유하며 본 문서가 스스로 승인하지 않는다.
|
||||
|
||||
@@ -0,0 +1,203 @@
|
||||
# Reduced-coordinate C08 구현 증거
|
||||
|
||||
`tests/unit/analysis/hht_shell_physics_test.cpp`의 C08 controller는 production private reduced 연산자를 사용한다. 기존 full-coordinate controller 결과를 현 경로의 증거로 승계하지 않는다. 공식 요구·grid·tolerance·reference는 이 보고서에서 변경하지 않는다.
|
||||
|
||||
- Endpoint마다 실제 graph root와 chain-rule q/v/a를 재구성하고 actual full residual로 시작 후보를 선택한다. Augmented Newton의 네 auxiliary block을 모두 full q/v/a 및 public A 진단으로 mapping한다.
|
||||
- N7 linear defect는 마지막 실제 augmented matrix, nonlinear defect는 accepted endpoint의 fresh augmented matrix로 평가한다. Original hidden endpoint defect 및 N2 backward check를 포함하며 estimator는 accepted state를 수정하지 않는다.
|
||||
- CA는 private selector p/Ar history를 전체 시간 이력에 걸쳐 유지한다. Frozen binary64 operator와 일차 graph/rate sensitivity의 arithmetic **indicator**이며 전체 AD/FEM/nonlinear-history의 엄밀한 forward-error certificate로 주장하지 않는다. Nonfinite 또는 noise separation 부족은 INCONCLUSIVE이고 factor100 기준을 보존한다.
|
||||
- 초기 q/v/a/A를 보존하고 별도 reconstructed frame0에 original full residual/N3/N4/equilibrium을 적용한다. 원래 64..1024 grid와 승인된 C08b finer grid를 유지한다.
|
||||
|
||||
## ADR-018 fixed-null basis 대응 (구현 중)
|
||||
|
||||
2026-10-13 사용자 승인 후 C08 controller도 `FixedChart::p_columns/z_columns`의
|
||||
immutable sparse support를 authority로 전환한다. `p_dofs/z_dofs`는 canonical label이며
|
||||
single full-DOF injection, `%6` channel 판정, index-only radius의 근거가 아니다.
|
||||
|
||||
- Initial private `p/vp/ap/z`는 sparse transpose projection으로 만들고, 이후 accepted
|
||||
private history recurrence는 FB-08을 직접 적용한다. 매 increment full state를 재투영해
|
||||
history를 만들지 않는다.
|
||||
- Actual augmented solve는 FB-06 scaled `tangent/rhs`와 `row_scale/unknown_scale`를
|
||||
사용한다. C08 N7 accepted-endpoint hidden RHS는 raw defect에 matching row scale을
|
||||
곱하고, mapped defect vector는 scale undo 뒤 FB-07 sparse lift를 사용한다.
|
||||
- Restricted U 판정과 bitwise copy는 column metadata의 translation/angular channel로
|
||||
결정한다. U의 high/low/Ar/vp/ap/trace/radius에는 zero update를 적용하지 않는다.
|
||||
- N3은 기존 private `k*delta_ap` 대 `delta_Ar` 검사를 유지한다. 추가 basis-lift
|
||||
consistency는 `Lp^T delta_Afull`의 source-order product/sum과 uncancelled denominator를
|
||||
별도 검사하며, 두 검사를 동일한 identity로 취급하지 않는다.
|
||||
|
||||
CA의 basis coefficient construction radius `B_L`는 `FixedBasisColumn::support_radii`에
|
||||
support와 같은 canonical 순서로 보존한다. Plane 열은 stored coefficient가 0인
|
||||
성분도 support에서 제거하지 않으며, component-chart identity 열만 coefficient radius가
|
||||
exact 0이다. Controller는 initial `Lp^T/Lz^T` projection, private history inheritance,
|
||||
sparse lift에서 실제 product/sum 순서로
|
||||
`|L|B_p+|p|B_L+B_LB_p+rho`를 적용한다. 따라서 0 stored coefficient와 nonzero
|
||||
private coordinate의 free full-row radius도 남는다.
|
||||
|
||||
Basis 생성 replay는 stored raw initial null을 exact input으로 두고 `m=max|x|`,
|
||||
`s=sum (x/m)^2`, `r=sqrt(s)`,
|
||||
`B_r=B_s/lower(r-rho(r))+rho(r)`, `B_norm=|m|B_r+rho`의 명시 경로를 사용한다.
|
||||
이는 `s-B_s>0`과 양의 denominator를 요구한다. Stored raw null exact→same-branch
|
||||
ideal constructed basis가 이 certificate의 범위이며, analytic-null/AD 입력 오차와
|
||||
구분한다.
|
||||
|
||||
현재 graph arithmetic INDICATOR는 stored C/H/time operator와 assembled G/P를
|
||||
frozen binary64 입력으로 둔다. `C·Lz`, `C·Lp` coefficient BL 및 inverse-action
|
||||
certificate는 FB-CA 후속 범위로 남아 있다. 따라서 현재 runtime evidence를
|
||||
whole-basis graph CA closure로 주장하지 않는다.
|
||||
|
||||
### 현재 실행 증거
|
||||
|
||||
ADR-018 첫 configured Debug focused run은 동일 source epoch에서 native0,
|
||||
26/26 PASS, 176.41 s였다. Fixed-basis 5개 helper/lifecycle 사례와
|
||||
actual non-component N5가 포함되며, 후자는 native0/152.47 s로 통과했다.
|
||||
이는 sparse chart, FB-06 scaling/undo 및 실제 off-graph tangent sweep의
|
||||
현재 실행 증거다. Graph `BG/BP` 및 FB-CA04/05 inverse-action certificate,
|
||||
전체 C09/C08 grid 및 reference closure는 이 실행으로 승계하지 않으며 PENDING이다.
|
||||
|
||||
### Graph basis/solve certificate 구현 중
|
||||
|
||||
Controller의 graph arithmetic path는 stored `C/H/time`을 fixed binary64 input으로
|
||||
두고, `gradient × basis support`의 source-order `RateSum` replay로 `G=C Lz`,
|
||||
`P=C Lp`와 entrywise `BG/BP`를 만든다. `support_radii`가 0 stored plane
|
||||
coefficient에도 남으므로 `BG/BP`에서 제거하지 않는다. 각 unit graph solve의 actual
|
||||
column `R`에 대해 `Hbar>=|I-GR|`, `thetaH<1`, `Q>=|G^-1|`를 구성하고, 실제 RHS
|
||||
solve는 raw center residual, `Bb`, `BG|x|`, `A=Q BG`, `thetaG<1`을 포함한 rowwise
|
||||
`Bx`를 만든다. 양의 lower denominator 또는 theta 조건을 잃으면 radius를0으로
|
||||
두지 않고 INCOMPLETE로 종료한다. `NaN`/음수 radius와 nonfinite matrix·RHS·center는
|
||||
fail-closed하고, inherited `+Inf` radius는 graph 결과 전체에 `+Inf`를 전파한다.
|
||||
`0×(+Inf)`는 exact-zero support로만 0을 유지한다. 이 helper와 1×1/4×4 perturbation,
|
||||
actual-center, invalid-radius behavior tests는 source에 추가되었지만 configured runtime은
|
||||
아직 PENDING이다.
|
||||
|
||||
Projection radius는 production `ColumnDot`의 support-order Neumaier 합을, lift radius는
|
||||
production `Lift`의 모든 p support 뒤 모든 z support 순서를 per-full `RateSumRadius`로
|
||||
replay한다. Combined replay center가 actual `Lift`와 같은지 검사하고, target frame과
|
||||
center의 차이는 `|fl(target-center)|+rho`를 별도 radius로 더한다. 이 변경의 configured
|
||||
grid/C09/reference runtime은 아직 PENDING이다.
|
||||
|
||||
최신 source epoch `adr018-neumaier-final-source-identity.json`에서 configured Debug
|
||||
full build는 native0이었다. 같은 Debug binary의 controller boundary 4개는 native0/4PASS,
|
||||
2.15 s였다. 이는 `BasisRadiusReplayMatchesCompensatedProjectionAndCombinedLift` 및
|
||||
graph certificate helper의 bounded evidence이며, C08 grid·C09·reference PASS로 승계하지
|
||||
않는다. Core focused run은 별도로 진행 중이다.
|
||||
|
||||
## C08a7 basis-lift algorithmic-A gate 수정
|
||||
|
||||
최신 Release C08a7은 모든 7 grid를 완료했지만 native8/819.31 s로 실패했다. Raw log는
|
||||
`adr018-neumaier-c08a-release.raw.log`에 보존했다. 실패는 새 projected basis-lift gate의
|
||||
`deltaAfull=(1+alpha) deltaa` 변환 누락에서 발생했고, 기존 private `k deltaap=deltaAr`
|
||||
gate는 이미 같은 factor를 사용했다. Controller는 이제 source-order `Lp^T` 합에 filtered
|
||||
algorithmic full correction을 사용한다. `BasisLiftedAlgorithmicCorrectionUsesHhtFilterFactor`
|
||||
는 non-component (.6,.8) basis에서 factor 생략이 원 1e-12 gate를 넘는 것을 검출한다.
|
||||
|
||||
Filter 수정 후 공식 Release C08a7과 coefficient regression 2개는 native0/703.90 s로
|
||||
통과했다(C08a 703.39 s). 마지막 두 temporal order의 최소값은 1.805002366이고 N7
|
||||
separation은 157.615676이다. Artifacts는
|
||||
`adr018-filter-c08a-release.raw.log`, `adr018-filter-c08a-release.native.json`,
|
||||
`adr018-filter-c08a-metrics.json`이다. Source 6개와 Release unit 7개의 pre/post SHA가
|
||||
일치해 같은 epoch의 결과임을 확인했다. 이는 filter 누락 전 native8/819.31 s 및 약
|
||||
83,520개의 basis-lift gate 실패를 지우거나 재해석하지 않는다. C08b8, reference 비교,
|
||||
전체 Debug/CTest는 아직 미완료다.
|
||||
|
||||
## LargeDIRECT 재구성 상쇄에 대한 수정
|
||||
|
||||
2026-10-13 기준 LargeDIRECT가 outer100에서 original full residual을 통과하지 못했다. Main의 endpoint 진단에서 graph ψ0≈4.49549e−14, max NᵀE≈2.56928e−13으로 null identity defect와 큰 physical residual은 구분된다.
|
||||
|
||||
변경 전 controller는 매iteration `p = pp + beta*h*h*Ar`를 다시 계산했다. 원fixture 초기 aZ=-800000, h=.25, beta=.275625에서는 ppZ=-11218.75 및 beta*h²=.0172265625이다. `Ar=-pp/(beta*h²)` 상태에 δp=1e−12를 적용하면 binary64 Ar update와 좌표 재구성이 보정을 흡수한다. 이 예는 actual endpoint 원인의 확정 증거가 아니라 재구성 정밀도 문제의 독립 재현이다.
|
||||
|
||||
변경 후 C08은 선택된 predictor/old p를 유지하고 actual δp를 직접 누적한다. Ar 증분과 vp/ap recurrence, original N2/update consistency 검사는 유지한다. Accepted pnew−pold를 실제 동차 우변 항의 절댓값 합으로 나누는 resolved increment 검사(1e−12)를 유지한다. Absolute vp update는 유지하며, 원N3에 없는 별도 vpnew−vpold 상대 검사는 독립 검토에 따라 diagnostic only로 정정했다. 추가로 선택된 predictor/old 시작과 실제 requested δp의 compensated signed sum 및 uncancelled absolute sum을 저장하여 pnew−pold를 검증한다. pnew−pp 또는 vpnew−vpp를 작은 correction 한 항으로만 정규화하는 별도 조건은 원N3에 없는 추가 기준이므로 독립 검토에 따라 제거했다. 좌표 radius는 chosen initial p radius와 각 실제 `p+=δp`의 AddRadius로 누적한다. δp는 fixed-path arithmetic 입력이고 solve uncertainty는 N7에서 별도 평가한다. Ar radius와 이전 accepted history는 reset/clamp하지 않는다.
|
||||
|
||||
## 검증 상태
|
||||
|
||||
`git diff --check -- tests/unit/analysis/hht_shell_physics_test.cpp`: exit0.
|
||||
|
||||
`PrimaryCoordinateRetainsCorrectionAbsorbedByCarriedAr`는 흡수 재현, direct p 보정 보존, 기존 uncancelled update tolerance, inherited radius 성장 검사를 추가했다. 최신 p-primary source의 build/runtime는 main 담당자가 수행하며 아직 이 보고서에서 PASS로 선언하지 않는다. 기존 C08a/finer 실행은 이전 재구성 경로의 historical evidence다.
|
||||
|
||||
Private diagnostic source·compile/link response files는 `.dryforge/hht-reduced-c08a-finer-20261013/`에 준비했다. `large-probe-definition.json`에 source identity와 observation을 기록했으며 production source/shared build를 변경하지 않는다. 실제 pp/Ar/p와 requested/realized δp의 runtime 값으로 재구성 상쇄 가설을 평가해야 한다.
|
||||
|
||||
관련 독립 검토: [numerical-review-reduced-coordinate.md](numerical-review-reduced-coordinate.md). 기존 C08a 판정과 finer-grid 제안: [c08a-refinement-proposal.md](c08a-refinement-proposal.md).
|
||||
|
||||
## 승인된 C08a 검증 갱신
|
||||
|
||||
사용자 승인에 따라 공식 C08a grid는 16,32,64,128,256,512,1024를 유지한다. 최종 두 order는 256→512 및 512→1024에서 p>=1.8, finest maximum error<=1e−4, N7 최종 세 grid factor100을 검사한다. Hidden1/2 strict decrease 대신 모든 frame의 finite normalized defect<=1e−10 및 zero-scale exact0를 검사한다. 최신 source runtime은 main 재실행 전까지 PENDING이다.
|
||||
|
||||
C08b finest 실행의 기존 dynamic-hidden-constraint FAIL은 유지한다. Original constraint 검사의 실패에 h/increment/time/stage 및 raw primitive ψ 대 full-force null projection 진단을 추가했다. Criteria, physical force, external force, stored state를 보정하지 않는다. 최신 진단으로 graph-root solve defect와 full-force contraction arithmetic 차이를 구분해야 한다.
|
||||
|
||||
## C08b physical-force null leak 재현과 최소 수정
|
||||
|
||||
별도 scratch C08b32768 실행에서 increment4/time=.0001220703125에 원래 hidden0 FAIL을 재현했다(native1,5.23s). Root iteration0, relative6.35516e−14, primitive ψ≈1.47926e−22인데 assembled force null projection≈5.75965e−18이었다. Same scale=1.62759e−8이며 저장된 n/F 값의 Decimal.from_float 100-digit exact dot에도 gap≈5.75950e−18가 남고 마지막 dot rounding은≈1.99e−25였다. Graph solve tolerance 또는 dot accumulation의 문제가 아니다.
|
||||
|
||||
실패 회전각≈1.314e−4가 기존 small-angle coefficient 경계1e−4를 처음 넘는 시점이다. `nonlinear_mitc4_shell.cpp` ExpSkew는 기존 squared_norm<.25의9항 stable series tensor를 전체 Jet에 일관되게 적용했다. 기존 코드가 directional derivative만 복사해 value/gradient/Hessian의 cancellation을 남기던 문제를 수정했다. Original geometry predicates와 branch boundary는 유지한다.
|
||||
|
||||
Frozen actual q의 scratch object override 비교: original native1 → complete stable Jet native0(243ms). Node0 physical-force null projection≈5.75950e−18 → −1.65e−24. 새 실제 unit regression도 original native1로 재현했고 stable override의4개 relevant tests native0/4PASS/1.219s였다(new null regression, original1e−4 및.5양쪽 third-gradient sweep, drilling force/gradient/Hessian identity, approved tangent directional schedule). Commands/artifacts는 `.dryforge/hht-reduced-c08a-finer-20261013/build-element-unit.cmd`, `element-unit-original.log`, `element-unit-stable.log`다. Shared configured build/test 및 전체 C08b temporal/N7 검증을 대체하지 않는다.
|
||||
|
||||
기존 C08b1024 log에서 별도의 required q increment trace FAIL도 발견됐다. New source는 실패 component의 selected-start/requested trace 및 binary addition low-part 진단을 추가했다. 원N3 q 기준은 유지하며, element null leak 수정만으로 전체 C08b PASS라고 주장하지 않는다.
|
||||
|
||||
## Required q trace와 compensated candidate arithmetic
|
||||
|
||||
Stable-element h1024 전체 C08b trajectory는257 frames를 완료했지만(native1,225.810s), increment200/full30에서 required q trace ratio1.47277339e−12로 실패했다. Current p=.01416209717993157의 요청 target에 대한 오차는1.43482331433e−18이며 actual addition TwoSum low 합의 반대와 일치한다. Decimal100 neighbor 검사에서 바로 아래 p=.014162097179931568은 같은 원scale의 ratio3.07833e−13로 PASS 가능했다. 이 사례는 최종binary64 irreducible representability가 아니라 누적 addition loss다.
|
||||
|
||||
Production과 C08 controller는 실제 coordinate correction마다 `(sum,error)=TwoSum(p,δp)`, `low_sum=low+error`, `(p_new,low_new)=TwoSum(sum,low_sum)`을 적용한다. Predictor의 기존 high 및 시작 선택은 그대로 평가하고 두 초기 predictor addition의 low를 보관한다. 같은 old-p 선택은 exact correlated low0로 시작한다. Requested increment trace는 별도 Neumaier 누적으로 보존하고 state를 그 trace에 복사하지 않는다. 모든 원N3 q/absolute v/filter gates는 유지한다.
|
||||
|
||||
CA는 EFT correlation 조건 아래 pair total radius에 실제 `low_sum` addition의 ρ를 누적하고 high 출력 radius는 pair radius+|low_new|로 둔다. Predictor pair radius는 기존 high radius+|initial low|로 보수적으로 시작한다. 이전 accepted history radius는 다음 predictor에도 유지한다. Low는 실제 arithmetic remainder이고 history의 새 물리 좌표나 accepted N7 polish가 아니다. Increments 사이에는 accepted high가 모델 이력이며 남은 low 크기가 출력 radius에 포함된다.
|
||||
|
||||
`CompensatedCoordinateRetainsAbsorbedNewtonCorrections`와 기존3개 scalar/indicator 검사는 scratch native0/4PASS였다. Quarter-ULP 네 보정, predictor low carry, gradual subnormal 및 overflow fail-closed를 포함한다. Current compensated h1024 fulltrajectory는 같은257frames/원N3 기준에서 native0/278.823s로 PASS했다. Hidden1 max1.68458e−13, hidden2 max3.65753e−13이며 required q trace failure는0이다. 이전 plain-p 동일 trajectory native1과 구분한다. 이 single-trajectory PASS로 전체 C08b finer-grid/self-pair/N7 판정을 승계하지 않는다. Artifacts: `compensated-scalar-tests.log`, `c08b1024-stable-trajectory.log`, `c08b1024-representability.json`, `c08b1024-compensated-trajectory.log`.
|
||||
|
||||
## 공식 compensated C08a의 남은 N3 FAIL
|
||||
|
||||
승인된7-grid 공식 C08a 실행은 native8/888.432s로 FAIL했다. 512에서6개,1024에서52개의 required requested-trace 및 같은 component의 whole-q update 실패가 남았다. 독립 exact Fraction 계산에서58개 모두 현재 high가 가장 가까운 binary64 좌표이며 양옆 이웃도 원1e−12 조건을 통과할 수 없었다. Actual pair와 exact requested target의 최대 gap은7.703719777548943e−34다. 최악1024/increment555/full6의 최솟값 ratio는1.208331938245387e−11이다. 이는 이전 누적-loss red/green과 구분되는 최종 stored-coordinate 표현 한계다.
|
||||
|
||||
과거 원기준 FAIL은 유지한다. 승인용 구체적 증거와 최소 분리안은 [c08-n3-coordinate-representation-proposal.md](c08-n3-coordinate-representation-proposal.md)에 기록했다. Shared 실행 중인 binary와 reference는 변경하지 않았다.
|
||||
|
||||
사용자 승인(HHT-ADR-016) 후 private `hht_reduced_increment.h::CheckPairIncrement`를 production과 actual C08 whole/requested 두 검사에 적용했다. 실제 binary64 high/low/old 및 각 우변 항을 EFT expansion으로 뺀다. Requested Neumaier sum/comp를 각각 입력하며 이전 accepted old는 stored high다. 원uncancelled scale/1e−12/finite-first/zero-scale exact0를 유지한다. 별도 `high+low` RN-even 결과가 stored high와 같은지 검사한다. Raw high defect는 진단에 남기고 floor/budget/nextafter 보정은 추가하지 않는다. Absolute q/v/a/A, actual physical criteria 및 CA/N7 history 코드는 변경하지 않았다.
|
||||
|
||||
새 `HhtReducedIncrement.*`5개 검사는 공식 first/worst frozen pair, midpoint parity/nearest, missing-correction·missing-low·wrong-sign negative, zero/subnormal, nonfinite/overflow를 포함한다. 별도 MSVC /O2 /MD C++17 header probe는 build/runtime native0이며 first/worst exact0 및 tie/missing-correction/subnormal/zero-scale 검사를 통과했다(`build-pair-increment-probe.cmd`, `pair-increment-probe.log`). Configured unit·공식 C08 전체·reference는 새source 재실행 전까지 PENDING이다.
|
||||
|
||||
## C10 경계·실패 보존의 남은 coverage
|
||||
|
||||
실제 executor의 outer100 경계는 acceptance를 먼저 평가한 뒤101번째 correction을 금지한다. 이 정책을 실제 executor가 사용하는 private constexpr helper로 명시하고99/100/101 경계를 검사하는 최소 patch를 준비했다. 실제100회 correction 후 물리적으로 수렴하는 trajectory 검증은 별도 coverage gap이며 policy test로 통과를 주장하지 않는다. Production acceptance callback/observer는 추가하지 않는다.
|
||||
|
||||
실제 reduced 실행의 기존 backend interface로 increment1 accepted 이후 factorization failure를 주입하고, 실패 Result에 candidate가 없으며 partial log에 accepted increment2가 없는지 검사하는 테스트를 추가했다. 같은 Domain에서 새 실행을 시작하여 전체 q/v/a/A 및 force/hidden history와 log가 baseline과 exact 일치하는지 비교한다. Private p/vp/ap/Ar/z history는 지역 실행 소유이며 이 테스트에서 직접 snapshot을 관측하지 않는다. HDF5 output preservation도 이 solver-only 테스트의 검증 범위가 아니다. Patch는 적용했고 diff check exit0이며 configured runtime는 PENDING이다.
|
||||
|
||||
## C09 초기 coefficient authority 수정
|
||||
|
||||
Rotated rigid-translation actual initial-only repro는 native1/3.21s였다. Original initialized full N2 channel은 통과하지만 reconstructed phi channel은 .968200478753255로 실패했다. 독립 Fraction 대조에서 primitive translation gradient 합과 가속도 contraction은 exact0인 반면, 기존 nH translation contraction +4.513567227e-15가 초기 null 가속도 eta=-1.6008465906363652e-12를 상쇄했다. Primitive gradient에서 같은 eta의 contraction은 -4.512015761e-15다. Final dot summation 오차보다 coefficient authority 불일치가 지배적이다.
|
||||
|
||||
Private DynamicAssembly에 기존 element scalar primitive에서 조립한 node/full hidden_gradient를 추가했다. Initializer, regularity, CompleteConstraintEvidence가 이 행을 함께 사용하며 absent authority는 fail-closed다. Dead-load external primitive gradient/Hessian도 global node당 한 번 포함한다. Hidden sparse v/a contraction은 deterministic compensated reduction을 사용한다. Physical mass range, full force assembly, original position psi/scale 및 승인 tolerance는 유지했다. 수정 후 configured runtime는 PENDING이며 이전 FAIL을 현재 PASS로 승계하지 않는다. Raw native/Fraction artifacts는 c09-initial-probe.log, c09-initial-exact-contractions.json 및 독립 approved-review/independent_c09_initial_gradient.json이다.
|
||||
|
||||
Canonical-gradient actual C09 private 실행은 초기 reconstructed N2를 통과한 뒤 increment1 outer100에서 실패했다(gtest native1/446.751s). 이 후속 FAIL은 canonical-c09-initial-runtime.log, canonical-c09-final-iteration.log, canonical-c09-initial-identity.json으로 분리했고 이전 초기 FAIL raw는 보존했다. Actual first/second endpoint point replay에서 full moment 잔차는 drilling보다 physical force에 지배되었다.
|
||||
|
||||
Tiny rotation phi=1e-17에서 기존 fullR*D0-D0의 physical force가0인 반면 K0*phi 예측은1.535101656671476e-16이다. Direct (R-I)D0 Jet scratch는 원함수 derivative에 대한 ratio1.605880834081617e-16로 PASS했고, 독립 shear energy oracle1.666666666666667e-33와 일치했다. 기존 scalar recovery energy0은 별도 RED였다. Production은 direct director increment와 scalar covariant increment를 함께 적용하고 recovery strain을 G0·deltaG+deltaG·G0+deltaG²로 계산한다. Public director, current geometry predicates 및 drilling angle 식은 유지한다. 새 검사 TinyRotationPreservesPhysicalForceAndRecoveryEnergy는 flat/rotated 및 flat/warped4조합, K0 force, positive quadratic energy, flat independent shear energy를 대조한다. Private current-source build/runtime는 native0/2PASS1.383s(tiny-production-shear-oracle.log). Configured element/N5/C09/공식 C08/reference의 새source 판정은 PENDING이다.
|
||||
|
||||
Current direct-DeltaD ABI library의 bounded actual runtime은 iteration0/1/2(최대2corrections) raw를 .dryforge/hht-direct-delta-c09-20261013 아래 별도 보존했다. Build native0, 진단용 중단 native1/9.5s이며 acceptance PASS를 의미하지 않는다. Phi numerator/scale ratios는 .999935739,1.002294047,.998792917이다. 물리 moment가 지배하며 drill maximum은1.5e-36,8.9e-34,1.4e-35다. U ratios는 correction1/2에서4.35e-15/2.54e-15다. All48 full rows의 q/v/a/physical/drilling/internal/inertia/external/residual/scale 및 actual source/lib SHA를 bounded-endpoints.json, bounded-runtime.log, identity.json에 저장했다. 이전 canonical-gradient epoch raw를 덮어쓰지 않았다. 이 bounded evidence로 후속 moment N2 실패 원인이나 irreducible 표현 한계를 확정하지 않는다.
|
||||
|
||||
## Mixed-scale inertia force 산술 수정
|
||||
|
||||
Fresh direct-DeltaD epoch outer20은 U ratio2.39509277e-15, phi ratio.9998109402를 보였다. q/v/a, actual p high/low, selected start, old p/vp/ap/Ar, pp/vpp/currentAr 및 trace는 outer20-endpoints.json에 저장했다. Stored binary64 mass coefficient/actual acceleration의 독립 Fraction replay에서 full39 native I=0 대비 M*a+c=2.070274834838396e-19, full34=1.883916436593294e-19, full27=-1.585777596546307e-19가 나왔다. Translational coupling action은 exact0이며 tiny rotary action이 native mass-point acceleration sum에서 소실됐다. 이는 force/operator 산술 불일치 근거이고 C09 전체 실패의 단독 원인 확정은 아니다.
|
||||
|
||||
Production은 independently integrated mass/c를 고정 column 순서 Neumaier 합으로 M*a+c에 결합한다. Nodal cross C1 entries를 보존하며 analytic null projection, zeroing, clamp는 추가하지 않았다. Mass/position/velocity tangents, kinetic energy, momentum/angular momentum/rates, original N2 uncancelled scale 및 승인 threshold는 그대로다. New theoretical test는 area4/rho1/t=.2의 nodal m=.2 및 rotary I=m*t²/12로 large translational a와 tiny tangent angular a의 force를 flat/properQ 두 경우에서 검증한다. Oldforce RED native1/136ms; private new-source NonlinearMitc4Inertia.*는 native0/12PASS11.824s이며 finite/warped energy/power, genuine C1, fixed derivative sweep와 omission 검사를 포함한다. Logs는 inertia-tiny-red.log, inertia-green.log, exact coefficients는 inertia-replay.log/inertia-exact-replay.json이다. Position tangent의 Dhrow·acceleration_point에도 tiny contribution absorption 가능성이 남으므로 이 force 수정으로 모든 floating derivative 경로를 해결했다고 주장하지 않는다. Current configured actual C09/strong N5 및 전체 기능 closure는 별도 PENDING이다.
|
||||
|
||||
|
||||
## Stable-force 이후 초기 partition 및 derivative/rate 분리
|
||||
|
||||
Configured stable-force epoch는 native8/13PASS1FAIL216.39s였다. 기존12 inertia와 actual strong N5는 PASS지만 C09는 reconstructed frame0 phi ratio.4509010842로 FAIL했다. 초기 a0는 그대로이며 새 M*a contraction이 이전 point sum의 I=0 masking을 제거했다. 독립 Fraction에서 첫4 primitive row의 selected-P RHS는 exact0, plain sum만1.734723475976807e-18이며 Neumaier는0이다. 둘째4row는 기존 initializer의 rounded-product Neumaier와 partition Neumaier가 일치한다. Rate reconstruction의 P/H/time contraction을 같은 고정 순서 보상 합산으로 수정하고 C08 CA는 각 실제 primitive 연산의 radius를 replay한다. 원 초기 state와 N2/N3 threshold는 유지했다. Current configured runtime는 PENDING이다. Raw는 adr016-stable-inertia-debug.log, 독립 계산은 independent_c09_partition_rhs.json이다.
|
||||
|
||||
별도 private Dq probe에서는 old position tangent0 대비 분석해 −.5*j*epsilon*d0의 해당 성분−3.3333333333333344e-21을 재현했다. DqM coefficient를 먼저 적분한 뒤 a와 수축하고 c_q를 독립 유지한 scratch는 분석해와 일치한다. Active node midpoint를 원점에 놓은 large translation/tiny rotary velocity 및 acceleration에서도 old L/Ldot0 대비 j*epsilon=6.666666666666669e-21가 소실됐다. h 및 position×h coefficient를 먼저 적분해 v/a와 수축한 candidate는 L/Ldot를 복구한다. 실제 arm, kinetic measure, convective contribution 및 원 rate_scale 적분은 유지한다.
|
||||
|
||||
Scratch inertia-dq-rates-green.log는 기존12검사+bounded3probe 15PASS/native0/34.409s다. Flat/properQ ×epsilon10^-7..10^-20 분석해 sweep은 current production RED1FAIL/2.245s와 candidate GREEN1PASS/2.506s다. 경로는 .dryforge/hht-direct-delta-c09-20261013/inertia-dq-rates-analytic-red.log, inertia-dq-rates-analytic.log 및 inertia-dq-rates-stable.cpp다. Dq/rate candidate는 production 미적용이며 독립 review와 configured 판정은 별도다. Scratch PASS로 C09/C08/reference closure를 주장하지 않는다.
|
||||
|
||||
|
||||
독립 reviewer의 coefficient-first 수식 적합 확인 후 Dq/rates candidate를 production에 적용했다. 반복 보상 수축은 private InertiaSum으로 공유하며 추가 public API는 없다. New MixedScaleRotationDerivativeAndAngularMomentum는 flat/properQ epsilon10^-7..10^-20에서 전체 Dq action, L 및 Ldot를 독립 nodal rotary inertia 식과 비교한다. Generic large orbital/tiny intrinsic의 최종 binary64 저장, point-arm 양자화 및 mixed tiny convective coefficient 소실은 별도 잔여 coverage다. Production source/lib/test SHA는 inertia-dq-rates-production-identity.json에 분리했다. Shared partition-only Debug/C08a frozen binary는 이 변경을 포함하지 않는다.
|
||||
|
||||
|
||||
Current production private13 inertia 검사는 native0/32.132s로 PASS했다(inertia-dq-rates-production.log). 같은 RateSum library snapshot과 최신 inertia objectoverride의 actual C09 bounded20은 native1/95.743s의 의도 중단이다. 초기 fresh N2 phi ratio2.756119955396106e-16은 PASS지만 increment1/outer20은 U2.104778492177613e-15 PASS, phi.9997440787374917 FAIL이었다. 최악full3 physical−8.687040021705924e-17 대비 I−4.500032835702614e-21, drilling3.2683e-36이다. Raw48rows와 p/high/low/Ar/요청 trace는 .dryforge/hht-latest-inertia-c09-20261013/outer20-endpoints.json에 저장했다.
|
||||
|
||||
같은 physical kernel의 zero-state tangent에서 Kphysical=Kinternal−Kdrilling을 추출해 anchored displacement와 tiny phi에 적용한 independent stored-coefficient Fraction replay는 physical force와 max defect/uncancelled action2.038688672288276e-16로 일치했다. Full3 exactlinear−8.687040021705925e-17 대비 nativephysical−8.687040021705924e-17이다. Artifact는 .dryforge/hht-latest-inertia-final-c09-20261013/physical-map.log 및 physical-map-exact.json이다. 이 linear-map 일치는 현재 큰 N2 phi ratio를 force value/gradient 불일치로 설명하지 않음을 보여주지만, 전체 acceptance의 irreducible representability 판정은 아니다. 원 Newton100 정책의 private natural endpoint와 마지막 requested/applied correction 비교를 별도 수집 중이다.
|
||||
|
||||
|
||||
원100회 current private C09는 native1/454.432s로 종료했다. 초기 PASS 이후 increment1 finalphi numerator=scale3.3567686214448646e-17로 FAIL했다. Full mapped 선형 예측은1e-32지만 실제 high 반올림 및 dependent graph가 physical forcing을 바꾼다. 독립 Fraction에서400candidate high는 모두 정확 RN이고 carry gap≤3.08149e-33이다. 전체 acceptance의 불가능을 주장하지 않는다. 자세한 source identity/48row/요청-적용 action 비교는 [C09 Newton 산술 진단](c09-newton-rounding-diagnostic.md)에 기록했다.
|
||||
|
||||
|
||||
Fixed-final translation read-only probe는 원모든endpoint검사를2회 보정으로 만족했다(의도중단 native1/5.703s, no commit). 이는 원N2를 만족하는 표현가능한 state의 존재 근거이며 현재fullNewton경로 FAIL을 구분한다. Production 변경 전에 [내부 Newton 전략 제안](c09-channel-newton-proposal.md)의 사용자 결정 및 N7 operator scope 검토가 필요하다.
|
||||
|
||||
사용자 승인 후 production channel 제한 Newton과 helper 회귀를 구현했다. 새 실제 trajectory/configured/reference closure는 별도로 유지하며 [구현 및 검증 범위](implementation-channel-newton.md)에 기록했다.
|
||||
@@ -0,0 +1,11 @@
|
||||
# 승인된 channel Newton 구현
|
||||
|
||||
2026-10-13, [승인 정책](c09-channel-newton-proposal.md)과 [독립 검토](numerical-review-channel-newton.md)를 구현했다. Original full assembly/endpoint 기준과100회 combined correction 한도는 유지한다.
|
||||
|
||||
Production은 nonempty U의 원 residual 및 마지막 실제 q/v/a/public A correction과 private Ar 일치 검사를 따로 확인한다. Phi residual이 실패할 때만 angular p와 모든 z/vz/az의 principal system을 풀고 실제 J-domain N2-L을 검사한다. Translation high/low/Ar와 vp/ap는 복사하고 trace에 zero correction을 재누적하지 않는다. Fresh candidate U가 실패하면 다음 solve는 full system이다. Restricted factorization/solve/backward 실패는 fallback 없이 원 실패 경로로 전달하며 mode를 실패 문맥에 남긴다.
|
||||
|
||||
`HhtReducedChannelNewton.*` 세 회귀는 각 trigger gate/empty channel/thaw, all auxiliary mapping/omitted-U full-model defect, full system이 가역이어도 restricted system이 특이한 경우를 검사한다. Private MSVC compile/link native0, 세 검사 native0/121ms다. Command는 `.dryforge/hht-channel-newton-20261013/build.cmd`, `probe.exe --gtest_filter=HhtReducedChannelNewton.*`이며 source/lib SHA는 같은 directory의 `identity.json`이다. 공용 build tree는 수정하지 않았다.
|
||||
|
||||
Helper 회귀는 실제 procedure의 copy/thaw/state preservation/count trajectory를 대신하지 않는다. Configured Debug/Release actual C09, controller/N7, 전체 C08 grid와 원본 reference는 새 source identity에서 별도로 닫아야 한다. 승인 전 full Newton FAIL과 frozen-final 존재증거는 [산술 진단](c09-newton-rounding-diagnostic.md)에 보존한다.
|
||||
|
||||
같은 private snapshot에 current production procedure/operators를 override한 `DiagnosticChannelNewton.ActualProperQNatural`은 원 proper-Q fixture의 초기 상태부터 두 증분을 자연 종료해 native0/23.685s로 통과했다. Frozen-state injection이나 의도 cutoff가 없으며 원 모든 endpoint 검사를 적용했다. 마지막 increment2/iteration4의 U numerator/scale은 `4.2188474935755949e-15/1.529684374568981`, phi는 `1.0729235349559767e-31/2.9299788492248393e-19`다. `build-actual.cmd`, `actual.exe --gtest_filter=DiagnosticChannelNewton.ActualProperQNatural`, `actual-runtime.log`와 `actual-iteration.log`를 같은 artifact directory에 보존했다. 이 한 trajectory는 configured C09의 여섯 경로를 대신하지 않는다.
|
||||
@@ -0,0 +1,41 @@
|
||||
# Fixed-null basis 구현 기록
|
||||
|
||||
2026-10-13, [HHT-ADR-018 정식화](formulation-fixed-null-basis.md)와 [독립 core 검토](numerical-review-fixed-null-basis.md)를 적용했다. 이 기록은 production 구현·컴파일·실행 결과를 구분하며 PRD의 완료 체크를 대신하지 않는다. Physics/public schema/원본 reference/tolerance는 변경하지 않았다.
|
||||
|
||||
## Source와 private API
|
||||
|
||||
`hht_reduced_internal.h`, `hht_reduced_operators.cpp`, `hht_reduced_procedure.cpp`가 production 변경 범위다. `FixedChart.p_dofs/z_dofs`는 canonical representative label만 남기고 계산에는 `p_columns/z_columns`의 node/channel/fixed-plane metadata와 sparse support를 사용한다. Fully-free admissible-null node는 actual frame0 analytic null의 ON complement이고, partial rotation BC는 원 component chart다. Basis는 run 동안 고정한다.
|
||||
|
||||
`ProjectPhysical/ProjectAlgebraic`는 sparse transpose, `Lift`는 source-ordered compensated product/sum이다. Graph Jacobian, retained Jacobian, implicit q/time derivatives, full v/a, projected equilibrium와 augmented tangent의 모든 block, full q/v/a correction을 같은 injection으로 연결했다. Frame0 원 q/v/a/A·force는 덮어쓰지 않으며 원 public exact q/v 초기 gate를 보존한다. Initial projection 후 accepted private history를 매 증분 재투영하지 않는다.
|
||||
|
||||
`AssembleAugmentedReducedSystem(...,cv,ca,ell,h)`는 actual `Sr*Kraw*Sx`와 `Sr*braw`를 반환한다. `row_scale/unknown_scale`을 함께 보존하고 `MapAugmentedCorrection`이 actual solution을 undo한 후 full state로 map한다. Nonzero scaling/undo의 underflow/overflow는 fail-closed다. Restricted Newton도 actual scaled principal system을 풀며 U high/low/Ar/vp/ap와 trace를 그대로 복사한다. Combined100/원 commit 조건은 유지한다.
|
||||
|
||||
`CheckSelectorTransversality`는 normalized moving-null와 retained basis의 node-local spanning operator S를 직접 만들고 inverse-action/actual backward checks로 global infinity rcond를 계산한다. `S^T*S`나 임의 cosine cutoff를 사용하지 않는다. 원 `2^-32`를 적용하며 G/moving-null/mass range 검사와 구분한다. `CheckGraphRegularity`는 S와 actual G를 각각 검사한다.
|
||||
|
||||
## Basis coefficient radius와 N3
|
||||
|
||||
`FixedBasisColumn.support_radii`는 support와 평행한 BL다. Actual norm은 frozen `m=max|x|`, `y=x/m`, `s=(y0²+y1²)+y2²`, `sqrt(s)`, `m*sqrt(s)`다. Normalize/projection/cross의 실제 연산과 outward radius를 함께 계산한다. FE-nearest 및 gradual-underflow 환경을 검사한다. Zero coefficient도 support/BL를 보존하며 invalid/nonfinite radius는 chart 생성 실패다.
|
||||
|
||||
BL의 범위는 **stored binary64 analytic null을 exact input으로 둔 frozen chosen branch의 ideal basis construction**이다. FEM/AD의 ideal analytic null 오차나 branch perturbation을 인증하지 않는다. Component identity coefficient의 BL0은 exact constant 의미다. Controller는 초기 projection과 모든 basis action/history에 이 BL를 사용해야 하며 과거 index-only CA PASS를 승계하지 않는다.
|
||||
|
||||
구현 중 division roundoff의 `rho*(1+Bden/lower)` 증폭과 nonzero subnormal product/quotient가0으로 반올림되는 radius enclosure를 추가로 교정했다. `denorm_min`은 산술 radius의 상향 enclosure이며 physical scale/floor가 아니다. Opaque hypot의1u 가정은 제거했다.
|
||||
|
||||
N3는 원 private `k*delta ap` 대 `delta Ar` single-term1e-12 gate 및 component-chart mapped full A gate를 유지한다. 별도의 `Lp^T*delta Afull` consistency를 actual coefficient product의 절댓값 합과 `|delta Ar|`로 검사한다. 이 추가 gate를 기존 single-term gate의 동일 표현이라고 부르지 않는다. Whole/requested private high+low pair와 RN-even 조건을 유지하고 global sparse q/v/a reconstruction과 full A filter를 따로 검사한다.
|
||||
|
||||
## 현재 evidence와 남은 상태
|
||||
|
||||
Private isolated MSVC production/fixture compile·link는 native0다. 최초 syntax compile에서 `Vector3`를 `std::array` metadata에 직접 넣는 type mismatch가 있었으며 explicit component copy로 수정했다. Main의 첫 configured Debug production 두 cpp는 컴파일됐으나 전체 build는 controller namespace/fixture 오류로 native2였다. Production-only compile을 전체 build PASS로 보고하지 않았다.
|
||||
|
||||
이후 main configured Debug full-target build는 native0, focused26 검사는 native0/176.41s다. Actual noncomponent finite-initial-null warped/shared/time-load N5는 mutation 포함152.47s PASS이며, basis5/BL/policy/N3/lifecycle 회귀도 통과했다. Artifacts는 `.dryforge/hht-remediation-20261012/adr018-core-linked-debug-build*`, `adr018-core-focused-debug*`, `adr018-core-focused-identity.json`이다. 같은 epoch actual C09는 native8/238.51s로 같은 inner-graph100 실패를 재현했다. 이26개 PASS가 C09/C08/reference closure를 뜻하지 않는다.
|
||||
|
||||
진행 중이던 private proper-Q natural 실행은 **native1/84.735s FAIL**이다. Original frame0와 increment1/iteration3은 accepted였으나 increment2/outer1에서 inner graph100에 도달했다. Last psi infinity norm은 `4.87541e-20`(row3), normalized norm은 `.000282689`, correction infinity norm은 `1.72978e-17`(column3)이다. Tiny graph residual만으로 원인 또는 기준의 불가능을 확정하지 않는다. 원 scale/threshold/state를 유지했고 추가 실행/production 변경은 configured feedback 전 보류했다.
|
||||
|
||||
이 private epoch는 `.dryforge/hht-fixed-null-basis-20261013/`의 `build.cmd`, `basis-proper-q-runtime.log`, `actual-iteration.log`, `identity.json`에 분리했다. Actual command는 `actual.exe --gtest_filter=DiagnosticChannelNewton.ActualProperQNatural`이다. 복사한 기존 solver library에 current procedure/operators object를 override했으며 공용 build/CTest는 수정하지 않았다. ADR017의 [covariance FAIL](channel-newton-covariance-diagnostic.md) 및 과거 private PASS는 현재 basis PASS로 승계하지 않는다.
|
||||
|
||||
공용 source를 수정하지 않은 instrumented private copy는 native1/144.191s로 동일 실패를 재현했다. Failing graph call9의 tail은 full q/z/operator fingerprint 모두 **4-cycle**이며 전체를1/2-cycle이라고 부르지 않는다. Last13의17자리 raw q/z를 IEEE binary64로 재구성하여 period4 bitwise equality9쌍을 확인했고, period2는 전체에 성립하지 않았다. 다만 next lifted q와 prior evaluated q의 actual full-vector memcmp는48회 같았으며 최초 iteration5다. Next z와 prior z는 같지 않아 기존 z-only1/2 guard가 이 actual-argument 반복을 검출하지 못했다. Same q에서 모든 scalar/gradient/Hessian/time/third operator fingerprint는 동일했다. 원 graph100 및 endpoint 기준의 FAIL은 유지했다.
|
||||
|
||||
`basis-inner-graph-trace.log`, `graph-trace-runtime.log`, `graph-trace-summary.json`, `analyze-graph-period.py`, `graph-trace-identity.json`에 이 증거를 별도로 저장했다. Trace replay iteration log는 원 private FAIL의 pretrace SHA와 exact 일치함을 확인했고 `graph-trace-iteration.log`에도 별도 보존했다.
|
||||
|
||||
독립 raw 감사 후 actual-argument 반복을 기존 stagnation 처리에 적용했다. Existing unchanged/two-z 처리 다음에 next Lift의 finite 여부와 current/prior evaluated q에 대한 **bitwise equality**만 확인한다. 반복이면 current evaluated p/z/q/operators와 raw diagnostics를 그대로 반환한다. Next z나 best-state를 적용하지 않으며 별도 tolerance/all-history search/budget refund는 없다. 후속 original full endpoint/N3/N4가 acceptance를 판단한다. 이 guard의 graph convergence 또는 새 전체 trajectory PASS를 선보고하지 않는다. Root가 valid ON basis의 `ReturnsEvaluatedTrialWhenLiftAbsorbsAChangedPrivateRoot` 회귀를 추가했고, 새 configured runtime은 PENDING이다.
|
||||
|
||||
새 configured basis/BL/S/scaled-N5 검사, actual C09 전체 경로, controller CA/N7, C08a7/C08b8 grid, 전체 Debug/CTest와 원101-frame reference는 새 source identity에서 닫아야 한다. Main이 공용 build/CTest와 acceptance 문서를 소유한다.
|
||||
@@ -1,5 +1,7 @@
|
||||
# HHT 관성 구현 독립 수치 검토
|
||||
|
||||
2026-10-11 질량 정책 변경: [HHT-ADR-012](ADR.md)에 따라 현재 고유치·HHT는 lumped mass를 사용한다. 아래 consistent 질량을 전제로 한 수식 후보·검토·PASS/FAIL은 해당 시점의 이력이다. 변경본 통과로 승계하지 않으며 현재 수식은 [formulation](formulation.md), 재검증 상태는 [PRD](PRD.md)의 현재 checklist를 따른다.
|
||||
|
||||
- Owner: `numerical-review-agent`; date: `2026-09-22`.
|
||||
- 상태: `source-delta-reviewed; runtime-verification-pending`. 수식/API 중간 검토이며 전체 구현 gate 통과 판정이 아니다.
|
||||
- 범위: [관성 API](../../include/fesa/elements/nonlinear_mitc4_inertia.h), [관성 구현](../../src/fesa/elements/nonlinear_mitc4_inertia.cpp), [관성 tests](../../tests/unit/elements/nonlinear_mitc4_inertia_test.cpp), [비선형 내력](../../src/fesa/elements/nonlinear_mitc4_shell.cpp)의 directional third-derivative, [초기화·null algebra](../../src/fesa/analysis/hht_dynamic_algebra.cpp), [동적 조립](../../src/fesa/analysis/hht_dynamic_assembly.cpp), [HHT procedure](../../src/fesa/analysis/hht_dynamic_procedure.cpp).
|
||||
@@ -219,3 +221,251 @@ Full residual metric은 각 mode의 `||K*phi-lambda*M*phi||2 / [(||K||2+abs(lamb
|
||||
| 1/1024 | .3123438723 |
|
||||
|
||||
**한정 결론:** coarse grids가 초기 고주파 탄성 모드를 잘 분해하지 못할 가능성은 추가 조사할 만하다. 그러나 최대 eigenfrequency만으로 C08b의 실패 원인을 확정하거나 finest의 asymptotic accuracy를 보증할 수 없다. Dump의 `EmptyFrame`은 v=0이므로 실제 C08b의 nonzero initial velocity에서 생기는 convective tangent/velocity coupling을 포함한 dynamic Jacobian spectrum이 아니다. 해당 모드의 초기 가진 크기, 비선형 진행 중의 frequency/phase 변화, 오차 history와의 대응 및 실제 rate convergence가 남는다. 기존 grid·C08/N7 threshold·실패 판정은 유지하며, 이 진단은 grid 변경이나 production recovery 채택의 근거가 아니다.
|
||||
|
||||
## 2026-10-11 lumped production 채택의 독립 검토
|
||||
|
||||
[HHT-ADR-012](ADR.md)에 따른 변경본을 읽기 전용으로 검토했다. 현재 판정은
|
||||
**source/oracle delta reviewed; fresh runtime evidence pending**이다. 이전 consistent
|
||||
검증과 [private 질량 비교](mass-comparison.md)의 통과를 변경본 실행으로 승계하지 않는다.
|
||||
현재 진행 상태는 [PRD](PRD.md)의 checklist가 소유한다.
|
||||
|
||||
`rho*N_i*dV0`를 고정 기준 measure로 두고 kinetic interpolation만 절점 i의
|
||||
`x_i=X_i+u_i+z*d_i`로 변경한 구현은 [관성 상세](formulation-inertia.md)의 T_L과
|
||||
일치한다. Geometry용 shape/J0와 current 27점 validity는 그대로다. M, I, c,
|
||||
DqI, DvI, T, P, L 및 rates가 같은 nodal measure를 사용하며, DqI의
|
||||
`D²x[p,·]ᵀ*xddot`, `Hᵀ*D²x[p,a]`, `Hᵀ*D³x[p,v,v]` 항과 DvI의 계수2를
|
||||
보존한다. c를 `I-Ma`의 차감으로 계산하지 않으며 off-node mass block은 exact0이다.
|
||||
임의 drilling inertia나 현재 질량의 scalar row-sum을 도입하지 않았다.
|
||||
|
||||
**HHT-LM-NR-001 — CLOSED: conditioning 검사 범위.** 기존 실제 physical20
|
||||
positivity와 `rcond_inf>=2^-32`를 유지한다. Nodal lumped의 scaled physical20은
|
||||
각 node physical5의 block diagonal이다. 따라서
|
||||
`||B||inf=max_i||Bi||inf`, `||B^-1||inf=max_i||Bi^-1||inf`이며
|
||||
`rcond_inf(B)<=rcond_inf(Bi)`다. 전체20 Cholesky/rcond 통과는 각 node5의
|
||||
양정성/동일 rcond 기준도 보장한다. 공통 positive scaling은 rcond에서 상쇄된다.
|
||||
이는 기존 실제 acceptance 유지의 근거이며 node별 조건으로 기준을 완화하지 않는다.
|
||||
|
||||
독립5³ nodal energy/force/momentum oracle, 초기 eigen lumped24 대조와 same-q/v
|
||||
Jensen fixture의 변경은 measure와 일관된다. 기존 warped·moving-null·단위/좌표변환,
|
||||
scaled partial/effective tangent sweep와 momentum/power 검사의 기준은 유지한다.
|
||||
Metadata writer/self-check와 comparator의 `nodal-lumped-kinetic`도 일치한다.
|
||||
현재 검토에서 추가 수식 오류는 발견하지 않았다.
|
||||
|
||||
새 C08·전체 Debug/CTest·원본 HHT 비교의 종료 evidence는 아직 검토하지 않았다.
|
||||
수정 전 focused binary의 부분 실패와 중단은
|
||||
`.dryforge/lumped-mass-adoption-20261011/focused-interrupted.json`에 보존되어 있으며
|
||||
변경본 PASS가 아니다. 기존 NR-009–010의 DAE startup/가속도 정확도 문제는 질량
|
||||
변경만으로 닫지 않는다. Reviewer는 production 코드·테스트·수치 기준을 수정하거나
|
||||
별도 C++ build/test를 실행하지 않았다.
|
||||
|
||||
### 2026-10-12 종료된 검증 근거의 보완
|
||||
|
||||
새 `new-kernels.log`와 native 기록을 확인했다. 8 suites/38 C++ tests가 모두 PASS이며
|
||||
실행 native0이다. Warped nodal moment/energy/power, 초기 eigen lumping·Jensen,
|
||||
moving drill null, D3·scaled partial/effective inertia tangent sweep와 metadata/readback
|
||||
검사가 포함된다. 이는 앞 절의 해당 focused 실행 대기를 해소하며 전체 회귀나 C08
|
||||
통과 판정은 아니다. `python-focused.log`의 pytest137 PASS도 별도 실행 근거로 확인했다.
|
||||
|
||||
Current production **MSVC x64 Release** 원본 shell HHT CLI와 comparator의 native0를
|
||||
확인했다. 101 U families는 모두 PASS, UR은100 families/600 rows 실패이며 기존
|
||||
warning-only200건이다. 최대 U/UR family 상대 RMS는 각각
|
||||
`0.0022824245022755826 / 0.025346048785888527`이다. 보고서의 모든5454 scalar
|
||||
오차·near-zero 분기·RMS·판정을 직접 재계산하고 U/UR을 HDF5 source node/frame에
|
||||
대조했다. `nodal-lumped-kinetic`,101 accepted frames, byte 동일 입력·binary·원본·
|
||||
결과 해시도 확인했다. HDF5 SHA는
|
||||
`e08f0ab304174f71c21c6644a6b7075ff5b122b2f7096936ddbcac6bcfbfb4ed`다.
|
||||
|
||||
Bounded 독립 감사 native0·finding0 자료는
|
||||
`.dryforge/lumped-mass-adoption-20261011/independent-closed-evidence.json`이다.
|
||||
이는 승인된 외부 U 비교와 실행 증거의 검토이며 V/A·에너지의 Abaqus 비교나
|
||||
시간 정확도의 인증을 추가하지 않는다.
|
||||
|
||||
전체 `execute.py` 실행은 deadline/공유 임시 경로 문제로 중단했고 native−1을 보존했다.
|
||||
이후 MKL/OMP threads1의 serial 전체789 CTest를 직접 실행 중이며 전체 PASS가 아니다.
|
||||
`full-direct.log`의 C08a rigid-orbit force/power/momentum test PASS는 확인했으나
|
||||
별도 C08a/C08b 시간수렴과 전체 회귀의 종료 판정은 아직 대기다. NR-009–010과
|
||||
기존 정확도 요구를 유지하며 새 mass 또는 외부 U PASS만으로 닫지 않는다.
|
||||
|
||||
### 2026-10-12 current C08a 시간수렴 실패의 독립 대조
|
||||
|
||||
Serial 전체 실행의 `HhtShellPhysics.C08aRigidManufacturedOrbitFullCoordinateTimeConvergence`
|
||||
종료 body를 확인했다. Current lumped 변경본은 **FAIL**, CTest elapsed731.27초이며
|
||||
5개의 assertion이 실패했다. 이는 앞 절의 C08a 시간수렴 대기를 해소한 실패 결과다.
|
||||
C08b와 전체789 실행의 종료는 아직 대기이며 전체 native code를 추정하지 않는다.
|
||||
|
||||
| C08a fixed-chart 회전 물리 가속도 φ̈의 normalized max error | 이전 baseline | Current lumped |
|
||||
| --- | ---: | ---: |
|
||||
| Finest h=1/256 | `0.0005675659240050177` | `0.00056747291267426469` |
|
||||
| h=1/64→1/128 raw order | `1.0286686694389584` | `1.0283765928414674` |
|
||||
| h=1/128→1/256 raw order | `1.0289692381730642` | `1.0294567508174022` |
|
||||
|
||||
5 grids의 전체 시점 maximum으로 두 마지막 `log2(e_h/e_h2)`를 직접 재계산했다.
|
||||
Current finest error는 기존 `<=1e-4`를 넘고 두 raw order도 기존 `>=1.8` 미만이다.
|
||||
Finest error의 baseline 대비 상대 변화는 약−0.0163878%로 작은 감소지만 통과가 아니다.
|
||||
실패 assertion의 구성은 이전과 같으며 실제 metric이 동일하다고 보고하지 않는다.
|
||||
|
||||
나머지 두 assertion은 N7의 noise100 분리 실패다. Finest φ̇ error
|
||||
`1.1876972777062108e-6`는 required100-noise `1.6576860896252254e-6` 이하이며,
|
||||
φ̈ error `5.6747291267426469e-4`도 required100-noise
|
||||
`8.1218686879245508e-4` 이하이다. 따라서 이 두 finest rate의 시간오차/차수 근거는
|
||||
**N7 INCONCLUSIVE**다. 관측 raw order를 인증된 시간차수로 확대하지 않으며,
|
||||
inconclusive를 PASS나 실패 수치 삭제로 처리하지 않는다. Accuracy 미달과 noise 분리
|
||||
미달을 모두 보존하고 finest/차수/noise 기준을 바꾸지 않았다.
|
||||
|
||||
Bounded 감사 native0 자료는
|
||||
`.dryforge/lumped-mass-adoption-20261011/independent-c08a-assessment.json`과
|
||||
같은 폴더의 `independent-c08a-current-section.log`다. Baseline은
|
||||
`.harness/hex8-evidence/mean-volume/full/ctest.log`의 해당 종료 body를 직접 읽었다.
|
||||
Active 전체 로그와 닫힌 C08a body를 구분한다. 이 audit native0는 실패 재현/대조의
|
||||
성공이며 C08a test PASS가 아니다. 외부 U 비교와 lumped 관성 불변량의 통과가
|
||||
NR-009–010의 shell DAE 가속도 정확도 문제를 해결했다는 근거는 확보되지 않았다.
|
||||
|
||||
### 2026-10-12 current C08b의 새 runtime 실패
|
||||
|
||||
**HHT-LM-NR-003 — OPEN: fine-grid Newton trial의 principal-chart 이탈.** Current
|
||||
`C08bFreeFiniteRotationPlateSelfConvergenceAndPhysicalInvariants`는438.18초 후
|
||||
`invalid-dynamic-rotation: Dynamic rotation requires finite principal coordinates
|
||||
and a unit initial director.` 예외로 **FAIL**했다. h=1/64와1/128만 완료했으며,
|
||||
h=1/256 완료 기록과 이후 시간차수·물리 불변량의 최종 판정은 없다. Baseline은
|
||||
5792.27초 동안5 grids를 모두 완료한 뒤 accuracy assertion이 실패했다. 따라서
|
||||
이번 결과를 이전과 같은 실패나 baseline 예외로 분류하지 않는다.
|
||||
|
||||
정확한 문구는 `EvaluateDynamicRotation`의 첫 입력 gate에서만 나온다.
|
||||
`EvaluateAssembly`는 그 직전 전체 q/v/a의 finite를 검사하고, initial director는
|
||||
fixture의 고정 `eZ`다. RunPlate는 모든 grids 뒤에만 AccelerationSplit을 호출하며
|
||||
RecordNoise/RecoverAcceleration은 회전 API를 재호출하지 않는다. 이 경로에서
|
||||
직접 좁혀지는 원인은 유한한 Newton trial의
|
||||
`||phi||>=pi-sqrt(epsilon_double)`다. 완료한 두 grid의 accepted maximum
|
||||
`0.27391502319015193 / 0.27394592218709063`는 실패한 중간 trial을 제한하지 않는다.
|
||||
실패 frame/iteration/node와 직전 correction이 기록되지 않아 이탈을 유발한
|
||||
근본 원인까지 확정하지는 않는다.
|
||||
|
||||
다음 진단은 private 실행에서 해당 identity·phi norm·직전 q/Δq, scaled physical/
|
||||
drilling-null correction과 effective tangent의 null regularity/Schur conditioning을
|
||||
보존하는 것이다. Linear backward error `<=1e-12`나 positive physical mass는
|
||||
near-singular nonlinear tangent의 큰 correction 및 massless DAE의 시간안정성을
|
||||
보장하지 않는다. Principal clamp, 기준 완화 또는 grid 생략으로 닫지 않는다.
|
||||
닫힌 body snapshot과 baseline/source hash를 보존한 읽기 전용 감사는
|
||||
`.dryforge/lumped-mass-adoption-20261011/independent-c08b-assessment.json`이다.
|
||||
전체789 CTest는 아직 실행 중이며 이 감사 native0는 test PASS가 아니다.
|
||||
|
||||
**HHT-LM-NR-002 — OPEN: manufactured force-rate oracle의 잔존 consistent 계수.**
|
||||
`RigidForceRates`의 두 병진 계수 `0.2/3`와 `integral(N_i X)=X_i/3` 주석은
|
||||
기존 consistent 식이다. 단일 centered rectangle의 nodal mass는 `0.2`이므로
|
||||
채택한 T_L의 `Fdot_u=0.2*x'''`, `Fddot_u=0.2*x''''`가 맞다. 회전 계수
|
||||
`0.008/12`는 유지한다. 세 callers는 모두 ManufacturedHidden으로 전달하고,
|
||||
그 함수는 회전 rows만 읽으므로 현재 C08a 수치에는 이 병진 오류가 전달되지 않는다.
|
||||
C08b의 manufactured=false 경로에는 호출 자체가 없으므로 위 예외의 원인이 아니다.
|
||||
Owner는 두 계수·주석을 수정하고, 모든24 force-rate rows를 독립 시간미분한
|
||||
`Integrate(RigidOrbit(t))`와 대조하는 작은 검사를 추가해야 한다. Generic interior
|
||||
t와 미분 step sweep 또는 독립 미분 quadrature를 사용해 현재 consumers가 무시하는
|
||||
비영 병진 rows도 검증한다. Reviewer는 source/test나 acceptance를 수정하지 않았다.
|
||||
|
||||
### 2026-10-12 force-rate oracle 수정의 독립 확인
|
||||
|
||||
**HHT-LM-NR-002 — CLOSED: source 수정 및 bounded 실행 근거 확인.** 두 병진
|
||||
계수가 `0.2`로 수정됐고 nodal moment 주석도 일치한다. 새
|
||||
`NodalRigidForceRatesMatchIndependentTimeDifferences`는 t=0.37,
|
||||
delta=0.02/0.01/0.005에서 독립5³ quadrature force의5점 시간미분을 계산한다.
|
||||
모든24 rows를 포함하되 병진/회전 norm을 각각 분리하고, 두 미분 모두 positive
|
||||
reference norm과 상대 norm error `<=1e-6`를 검사한다. 미분 stencil의 부호와
|
||||
`12*delta / 12*delta²` 분모를 확인했다. 이는 새 oracle 검사이며 기존 C08의
|
||||
accuracy/order/noise 또는 외부 비교 기준을 변경하지 않는다.
|
||||
|
||||
Private RED/GREEN TU의 산술 차이는 두 병진 계수뿐이며, GREEN TU는 현재 test
|
||||
source에 private main만 더한 것과 동일하다. RED native1에서6개 병진 검사가
|
||||
상대 norm error 약0.66666663–0.66666667로 FAIL했으므로 잔존 consistent 계수를
|
||||
실제 검출한다. GREEN의 새 검사1개와 기존 pointwise force/power/momentum 검사
|
||||
1개는 각각 PASS/native0다. Compile records는 MSVC x64 Debug·현재 production
|
||||
solver library의 link와 native0를 기록한다. 원시 log·TU·binary 해시를 포함한 감사는
|
||||
`.dryforge/lumped-mass-adoption-20261011/force-rate-oracle/independent-oracle-review.json`이다.
|
||||
|
||||
현재 shared 전체 CTest binary는 이 추가 검사로 재빌드되지 않았으므로 위 결과는
|
||||
별도 private probe 근거다. GREEN의 정확한 성공 error margin은 log에 출력되지 않는다.
|
||||
이 oracle finding만 닫으며 NR-009–010, C08a 시간정확도 실패와 HHT-LM-NR-003의
|
||||
새 C08b runtime 실패는 그대로다. Reviewer는 build/test를 실행하거나 source를
|
||||
수정하지 않았으며 보고서 정적 검토만 수행했다.
|
||||
|
||||
### 2026-10-12 C08b private trace로 확정한 실패 위치
|
||||
|
||||
**HHT-LM-NR-003 — OPEN; 직접 principal-chart 이탈은 실행으로 확인.** Private
|
||||
single-grid Debug runner의 `run.log`와 native1에서 같은 예외가 재현됐다.
|
||||
h=1/256, increment56, Newton iteration3, t=0.21875의 `phase=newton`,
|
||||
`third=false` 평가에서 internal node4(source label5)의 total 회전 좌표는
|
||||
`phi=(0.64127523289755728,-1.1977756953049712,3.6162098692194427)`다.
|
||||
로그 성분으로 독립 계산한 `||phi||=3.8630136368942867 rad`는 π보다
|
||||
`0.7214209833044936 rad` 크다. 회전 q/v/a 성분은 모두 finite이며, production
|
||||
전체-vector finite 검사를 지난 뒤 principal gate에서 실패하는 경로와 일치한다.
|
||||
앞 절의 bounded 추론은 이 직접 실패 위치에 대해서는 실행 근거로 확정됐다.
|
||||
|
||||
이 runner는 MakeFixture(2)의 h=1/256 grid를 직접 시작하므로 이전 두 coarse
|
||||
grids의 선행 실행 없이도 재현했다. 다만 직전 q/Δq 및 null/effective-tangent
|
||||
conditioning은 이 실행 trace에 없으므로 큰 invalid Newton trial의 근본 원인을
|
||||
mass 산술·DAE 시간안정성·conditioning·Newton 전략 중 하나로 확정하지 않는다.
|
||||
현재 private TU에는 이 log에 없는 추가 instrumentation이 있으므로 현재 TU와
|
||||
당시 실행 source가 byte 동일하다는 주장은 하지 않는다. 원시 log/native/기존
|
||||
binary 해시와 scalar 검산은
|
||||
`.dryforge/lumped-mass-adoption-20261011/c08b-diagnostic/independent-trace-review.json`에
|
||||
보존했다. 추가 재실행이나 source/tolerance 변경은 하지 않았다. 직접 실패 위치
|
||||
확인은 전체 C08b 시간수렴 통과나 HHT-LM-NR-003의 폐쇄가 아니다.
|
||||
|
||||
후속 active 전체 로그에서 Hex8 overflow/factory stale fixture의 FAIL 두 개도
|
||||
확인되어 현재 실패 관측은 총4개다. 두 fixture의 독립 수치 원인·test-only 수정과
|
||||
실행 대기 상태는 [Hex8 독립 검토](../hex8-structural-analysis/numerical-review.md)의
|
||||
2026-10-12 전체 실행 절을 따른다. 앞의 shell 두 실패만으로 전체 집계를 요약하지
|
||||
않으며, 아직 종료하지 않은 전체 native/최종 판정을 추정하지 않는다.
|
||||
|
||||
### 2026-10-12 최종 전체/focused 종료 근거
|
||||
|
||||
전체789 serial MSVC x64 Debug CTest의 자연 종료 로그를 직접 재집계해
|
||||
**784 PASS / 4 FAIL / 1 SKIP, native8, elapsed9131.26초**를 확인했다.
|
||||
원래 shell C08a/C08b와 Hex8 overflow/factory4개 FAIL 및 C04a finest reduction
|
||||
SKIP은 보존된다. 전체 종료는 FAIL이며 앞 절의 진행/최종 판정 대기를 해소한다.
|
||||
|
||||
이후3개의 test-only TU 수정으로 shared binary rebuild native0, discovery790을
|
||||
확인했다. 새 force-rate derivative·기존 pointwise force/power/momentum2개는
|
||||
`final-oracle-rebuild/ctest.log`의 configured CTest에서 PASS/native0다.
|
||||
따라서 HHT-LM-NR-002의 폐쇄 근거는 private probe에 더해 최종 shared 실행도
|
||||
확보했다. Hex8의 수정된 overflow/factory2개도 configured focused CTest에서
|
||||
PASS/native0이며 두 stale findings가 닫혔다. **전체790은 재실행하지 않았다.**
|
||||
HHT C08a 시간정확도/noise와 HHT-LM-NR-003 C08b runtime finding은 **OPEN**이며
|
||||
두 oracle PASS 또는 Hex8 fixture 폐쇄로 닫지 않는다.
|
||||
|
||||
전체 전후 production190 files/original16 files의 hash 동일성을 현재 파일의 직접
|
||||
재해시로 확인했다. Final actual unit SHA
|
||||
`4e39c8992a527366e66ea295bf4598a068ca44456fc32c1ab973d2376759c11a`도 일치한다.
|
||||
`final-test-identities.json`은 raw helper의 force-only note에 빠졌던 factory/
|
||||
overflow test-only 변경을 별도 annotation으로 정정하며3개 test source/record
|
||||
hash를 확인했다. 최종 읽기 전용 감사는
|
||||
`.dryforge/lumped-mass-adoption-20261011/independent-final-regression-review.json`이다.
|
||||
전체4 FAIL의 원시 이력과 후속2+2 focused PASS를 구분하며 전체 green·기능 완료를
|
||||
주장하지 않는다. Reviewer는 source/tolerance 수정이나 추가 build/test를 실행하지 않았다.
|
||||
|
||||
|
||||
### 2026-10-12 초기 Newton 정책 변경의 독립 검토
|
||||
|
||||
사용자 요청에 따른 HHT-ADR-013은 [구현·검증 기록](newton-start-policy.md)을 따른다.
|
||||
Reviewer가 task 시작 before snapshot과 실제 변경6개 파일을 대조해 기존 mass 변경을
|
||||
제외했다. 두 초기 좌표의 동일 predictor/rates·free energy norm·iteration0 assembly 소비·
|
||||
후속 full correction·기존 gate·실패 logging/commit 경계를 확인했다.
|
||||
|
||||
HHT-START-NR-001: source 순서의 앞 절점 rate overflow를 뒤 절점 chart 위반으로
|
||||
오인하는 분류 결함을 발견했다. Actual configured mixed-node 검사 native8 RED 뒤,
|
||||
동일 후보 rates로 첫 실패 절점만 판정하도록 수정해 CLOSED했다. 관련37/37 검사에는
|
||||
새 helper11개와 기존 large DIRECT 회귀·대수·shell recovery·HDF5 실패 보존이 포함되며
|
||||
native0다. 남은 actionable source blocker는 발견하지 못했다.
|
||||
|
||||
후속 closed-log 감사에서는 실제 C08b 5개 grid의 회전 예외 해소와 runtime 회귀 PASS,
|
||||
남아 있는16개 정확도/P 판정 실패를 독립 재계산했다. C08b N7 noise는 모두 PASS이며
|
||||
C08a의5개 실패와 finest noise INCONCLUSIVE는 별도로 유지한다. Fresh reference의
|
||||
실제 HDF5·CSV·202개 family·200 warnings도 독립 재계산해 U101 PASS와 일치했다.
|
||||
검증 시작 identity 대비 production190·원본16·task6·binary4 hash가 모두 일치했다.
|
||||
전체802도 제외 없이11384.61초 뒤 native8로 자연 종료했다:799 PASS·2 FAIL·1 SKIP.
|
||||
Discovery와 실제 완료 이름이 정확히 일치하고 검증 전후 source·원본·binary hash가
|
||||
보존됐다. 전체 예외는 C08a/C08b 정확도 판정과 기존 C04a SKIP이다. 이전789개의
|
||||
실패 metric 동일성 또는 HHT 전체 기능 완료를 주장하지 않는다.
|
||||
최종 독립 감사도 raw802행의 이름·순서·번호, native8·집계·원문 hash와 현재 identity를
|
||||
재대조해 일치함을 확인했다. 추가 actionable source blocker는 발견하지 못했다.
|
||||
Scratch 독립 기록은 `.dryforge/hht-predictor-newton-20261012/independent-review.{md,json}`이다.
|
||||
현재 C08/N7 정확도 finding은 별도로 유지한다. 과거789 FAIL·790 discovery 기록은
|
||||
당시 evidence이며 이번 변경의 전체 판정은 [PRD](PRD.md)의 연결 evidence를 따른다.
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
# 사용자 중단 시점의 검증·비교
|
||||
|
||||
2026-10-13 16:33:50 KST 사용자 요청으로 원본 Release 해석, Release C08b,
|
||||
전체 Debug CTest와 자식 프로세스를 종료했다. 5분 간격 상태 보고도 종료했다.
|
||||
세 native record의 exit는 모두 `-1`이며 **사용자 중단**이다. 수치 FAIL이나
|
||||
검증 PASS로 분류하지 않는다. 코드·입력·reference·허용값을 변경하지 않았다.
|
||||
|
||||
원본과 종료 로그, CTest 부분 기록은
|
||||
`.dryforge/hht-remediation-20261012/user-stop-20261013/`에 보존했다.
|
||||
`compare_saved_progress.py`의 저장 자료 검산은 exit0이며 `comparison.json`이
|
||||
결과다. 중단된 해석이나 전체 CTest의 통과를 뜻하지 않는다.
|
||||
|
||||
## 저장된 구간 비교
|
||||
|
||||
| 실행 | 저장된 근거 | 판정·한계 |
|
||||
| --- | --- | --- |
|
||||
| 전체 Debug CTest | 856개 중 앞44개 PASS. 44번 controller는700.64초에 완료. 45번 C08a 시간수렴 실행 중 중단 | 전체 완료 미판정. 실행 중이던45번의 grid별 결과는 저장되지 않음 |
|
||||
| Debug controller `h=1/64` | 65-frame history를 검사하는 완료된 사례의 요약을 이전 공식 Release C08a의 같은 fixture/grid와 비교 | 출력된 요약 문자열 전체가 정확히 일치. Full raw state의 bitwise 일치를 뜻하지 않음 |
|
||||
| Release C08b | 검사 시작 로그만 보존됨 | 완료된 grid 요약이 없어 시간 차수·N7·E/P/L을 판정할 수 없음 |
|
||||
| 원본 Release 해석 | 초기부터 증분99·`t=9.9`까지100개 accepted 로그. 모든 accepted의 residual/correction pass flag1, 최대 outer iteration3, 기록된 failure code 없음 | 최종 `t=10` 미완료. Full hidden·물리 검산 및 Abaqus 결과 비교는 미판정 |
|
||||
|
||||
Debug/Release가 일치하는 `h=1/64` 요약은 최대 회전0.547562523 rad,
|
||||
hidden velocity `1.125587687e-16`, hidden acceleration `3.733093549e-16`이다.
|
||||
Solve/arithmetic noise, selector-history radius, public-A indicator도 출력상 일치한다.
|
||||
이는 [이전 공식 C08a7-grid PASS](numerical-review-fixed-null-basis.md)의
|
||||
부분 재현 근거이며 새 전체 Debug 시간수렴 PASS가 아니다.
|
||||
|
||||
원본 accepted 로그의 numerator/scale을 다시 계산한 최대 residual ratio는
|
||||
병진 `1.889238010e-15`, 회전 `1.452384011e-15`로,
|
||||
[N2-R의 채널별 `1e-10`](numerical-controls.md#n2-full-newton-종료와-선형-solve) 아래다.
|
||||
Zero scale는 numerator exact0을 따로 확인했다. 이 값은 평형 잔차이며
|
||||
**Abaqus 변위 오차가 아니다**.
|
||||
|
||||
## Abaqus 변위 비교가 불가능한 이유
|
||||
|
||||
이번 원본 실행 폴더에는 INP·원본101-frame CSV·Newton 로그만 있고 HDF5가 없다.
|
||||
Accepted 상태는 해석 실행 중 메모리에 보관되므로 프로세스 강제 종료 후
|
||||
로그만으로 U/UR·속도·가속도·에너지 이력을 복구할 수 없다. CSV에는 로그의
|
||||
모든 accepted 시점이 있지만 비교할 현재 FESA 변위값이 없다.
|
||||
과거 HDF5를 현재 결과로 대체하거나 잔차로 변위를 추정하지 않았다.
|
||||
원본 파일의 SHA는 기록된 INP/CSV identity와 동일하다.
|
||||
|
||||
## 후속 실행 순서
|
||||
|
||||
사용자가 요청한 순서대로 hexa 작업을 완료하고 성능 최적화를 진행한 뒤
|
||||
전체 검증을 다시 수행한다. 이번 작업에서는 해석·CTest를 재시작하지 않았다.
|
||||
당시 source·binary identity와 사용자 중단 기록을 후속 실행과 구분한다.
|
||||
현재 체크리스트는 [PRD](PRD.md)에만 유지하며, C08b·현재 원본 비교·전체
|
||||
Debug·독립 전체 물리 검증의 미완료 상태를 보존한다.
|
||||
@@ -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가 통과한 것은 아니다.
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
# Reduced-coordinate shell HHT I/O 계약
|
||||
|
||||
상태: `user-approved; implementation-and-readback-pending`, 2026-10-12. Owner: `io-definition-agent`. 사용자 승인된 shell schema v2와 public A 의미를 정의한다. 기본 subset·quantity·inventory·진단·원자 출력은 [기존 계약](io-contract.md), 외부 비교는 [reference 계약](reference-model.md)을 따른다. 수식 및 acceptance의 owner는 해당 정식화와 Feature PRD이며 이 문서는 수치 기준을 추가하지 않는다.
|
||||
|
||||
## 1. 입력과 authoritative identity
|
||||
|
||||
기존 `*DYNAMIC, DIRECT`, exact h/T schedule, zero BC, constant global translational CLOAD, homogeneous centered MITC4 shell, nodal-lumped-kinetic mass와 기본 alpha/beta/gamma를 유지한다. Reduced method를 선택하는 새 INP keyword/option은 추가하지 않는다. 초기조건·시간변화 하중·restart·rank-changing branch 등 의미 있는 미지원 입력은 기존 진단으로 fail closed한다. 기존 allowlisted `*RESTART, WRITE, FREQUENCY=0`은 warning no-op이며 restart 지원이 아니다.
|
||||
|
||||
Source step/instance/node/element label, canonical inventory, accepted frame/index와 exact time이 결과 identity다. Private chart/split/pivot·reduced equation ID는 source identity를 대체하지 않는다. Full node-major q/v/a는 각각 기존 translation/global total rotation-vector chart의 위치·chart velocity·physical endpoint chart acceleration이다. 단위·component·orientation·angular velocity/acceleration·reaction·stress/resultant·energy·momentum의 물리 의미는 변경하지 않는다. Inertia와 recovery는 reconstructed full physical q/v/a로 계산하며 reduced residual 또는 public A로 대체하지 않는다.
|
||||
|
||||
## 2. Full A와 private integrator history
|
||||
|
||||
| Quantity | 승인 의미 |
|
||||
| --- | --- |
|
||||
| full q | `Q(p,t)` |
|
||||
| full v | `Qp*vp+Qt` |
|
||||
| full a | `Qp*ap+Qpp[vp,vp]+2*Qpt*vp+Qtt` |
|
||||
| public full A | frame n≥1에서 `(1+alpha)*a_n-alpha*a_(n-1)`; frame0에서 `a0`. Full-chart diagnostic filter combination이며 full q/v의 Newmark predictor driver가 아님 |
|
||||
| private p/vp/ap/Ar | Reduced integrator history. `Ar=(1+alpha)*ap_n-alpha*ap_(n-1)`, 초기 `Ar0=ap0`; analysis 소유 |
|
||||
| private chart context | Accepted branch/split/pivot 및 필요한 chart context. Model 정의와 분리하여 history와 함께 commit |
|
||||
|
||||
Public A의 dataset path `nodal/algorithmic_acceleration`, shape `[N,6]`, float64, AUX1..AUX6 및 physical a와 같은 단위를 유지한다. `Ar` 또는 `Qp*Ar`를 이 dataset에 저장하지 않는다. Public A만으로 private history를 복원하거나 restart할 수 없다. Private reduced/chart dataset이나 새로운 공개 restart API는 추가하지 않는다.
|
||||
|
||||
## 3. Shell schema v2
|
||||
|
||||
Schema identity `(feature_id,analysis_procedure,schema_version)`는 `hht-implicit-dynamics,hht-implicit-dynamics,2`다. 기존 shell mandatory dataset paths/shapes/dtypes/components·model/frame identity attrs는 유지하고 다음 변경을 함께 적용한다.
|
||||
|
||||
| 위치 | 필수 값 |
|
||||
| --- | --- |
|
||||
| `/metadata::schema_version` | uint64 little-endian `2` |
|
||||
| `/metadata::time_integration_formulation` | UTF-8 `reduced-coordinate-HHT-with-physical-rate-reconstruction` |
|
||||
| 모든 기존 result dataset의 `schema_version` | uint64 little-endian `2` |
|
||||
| `nodal/algorithmic_acceleration::quantity_semantics` | UTF-8 `full-chart-HHT-filter-combination-not-predictor-driver` |
|
||||
|
||||
`acceleration_convention=physical-endpoint-and-auxiliary-separated`, `mass_formulation=nodal-lumped-kinetic`, internal formulation 및 기존 q/v/physical-a semantics는 유지한다. Dataset version만 2이고 metadata가 1인 파일, marker 누락/오타, A의 과거 semantics, 잘못된 mass/coefficients/inventory/nonfinite는 `dynamic-output-schema` 실패다. Mandatory attrs의 dtype/rank와 attrs inventory 검사도 갱신한다.
|
||||
|
||||
과거 v1 파일은 당시 full-coordinate 실행 evidence로 보존한다. 현재 reduced-shell executor의 writer/self-check는 v2 identity를 사용하며 v1을 reduced 결과로 수용하지 않는다. Comparator는 schema1의 historical full-coordinate branch와 schema2의 reduced branch를 구분하여 읽는다. Historical branch는 기존 marker 생략 또는 명시된 full-coordinate marker를 허용하고 dataset version1을 요구하며, 현재 reduced 결과의 검증 통과로 승계하지 않는다. Marker 자동 보충·metadata rewrite·v1→v2 재표시는 금지한다. Solid HHT와 static/eigen의 schema를 변경하지 않는다.
|
||||
|
||||
## 4. 초기화·candidate·BC·실패
|
||||
|
||||
Frame0는 기존 `0+`, exact full q0=v0=0 및 full endpoint 평형·hidden consistency를 만족하는 a0를 유지한다. 같은 Q branch의 p0/vp0/ap0가 이 full state를 복원해야 한다. 이를 표현하지 못하면 `dynamic-initial-consistency` 실패이며 silent projection·첫 frame 제외·O(h²) 초기 rate 보정은 허용하지 않는다.
|
||||
|
||||
Private reduced history/chart와 public accepted full frame을 동일 candidate acceptance에서 원자 commit한다. Full original free residual·physical recovery·hidden diagnostics·finite/inventory/constraint 검사가 완료되기 전에 일부 상태만 commit하지 않는다. Hidden defects의 진단 의미는 유지하며 I/O owner가 새로운 Newton gate를 도입하지 않는다. 실패한 trial의 branch/pivot/cache/Ar는 마지막 committed state/history와 최종 HDF5를 변경하지 않는다.
|
||||
|
||||
Zero BC component selector는 full q/v/a/A에서 exact zero다. Partial rotational BC는 free 공간과 admissible null의 실제 교집합을 사용하며 모든 node에 `5/node` reduced dimension을 강제하지 않는다. Empty-null/all-clamped/mixed-node 상태도 원 full 방정식·inventory를 보존한다. Coupled algebraic branch를 node별 독립 scalar root로 바꾸거나 deterministic ordering을 worker 완료 순서에 맡기지 않는다.
|
||||
|
||||
| 실패 조건 | Diagnostic binding |
|
||||
| --- | --- |
|
||||
| 초기 full state 복원 불가 | `dynamic-initial-consistency` |
|
||||
| admissible null/rank, coupled chart regularity, reduced positive mass 실패 | `dynamic-mass-regularity` |
|
||||
| invalid branch/chart, nonfinite reconstructed state | `dynamic-invalid-state` 또는 구체적인 기존 geometry code |
|
||||
| inner branch/outer Newton 한도, linear solve 실패 | `dynamic-nonconvergence` / `dynamic-linear-solve`; stage 구분 |
|
||||
| schema/marker/A semantics·readback 불일치 | `dynamic-output-schema` |
|
||||
|
||||
Step/increment/time/stage와 가능한 source node/element identity 및 원 진단 context를 유지한다. Fixed patch 밖에서는 검증된 history transport가 없으면 fail closed한다. Silent rechart·clamp·epsilon mass·새 exit code는 추가하지 않는다.
|
||||
|
||||
## 5. 구현·검증 인계
|
||||
|
||||
| 실제 consumer | 필요한 변경 |
|
||||
| --- | --- |
|
||||
| `src/fesa/io/hdf5/dynamic_hdf5_results_writer.cpp` | Metadata allowed attrs/쓰기 및 reopen self-check, 모든 result dataset version, A quantity semantics를 v2에 연결. Physical quantity 정의·dataset inventory·원자 finalize 유지 |
|
||||
| `tests/unit/io/hdf5/dynamic_hdf5_results_writer_test.cpp` | v2 marker/version/A readback, a/A 구분, wrong/missing marker·mixed version 실패 및 기존 final 보존 확인 |
|
||||
| `scripts/verification/compare_hht_dynamic.py` | Metadata version/marker 및 dataset version strict 검사 갱신. Source node/frame/time·U/UR projection·202 families·tolerance 유지 |
|
||||
| `tests/test_compare_hht_dynamic.py` | 현재 fixture를 v2 identity로 정의; v2 missing/wrong marker·mixed version 거부와 historical v1 branch의 별도 의미 검증. 과거 evidence 파일 수정 금지 |
|
||||
| `DynamicAnalysisState`와 shell dynamic procedure | private reduced history와 full accepted frame의 transactional ownership; public A를 full predictor driver로 재사용하지 않도록 경계 분리 |
|
||||
|
||||
Reference CSV에는 A/V/physical acceleration 또는 reduced state가 없다. 비교는 원래 full U/UR이며 v2 marker를 허용했다는 이유로 새로운 reference PASS를 승계하지 않는다. C08b P 및 추가 grid 승인은 Feature PRD의 acceptance 변경이며 reference U/UR tolerance 변경이 아니다.
|
||||
|
||||
열린 upstream 항목은 실제 coupled Q branch/derivatives 및 exact tangent, partial BC의 admissible chart, patch history transport, 초기 equivalence와 rollback evidence다. Writer/readback·solver/reference 실행은 이 문서 owner가 수행하지 않았다. 계약 승인만으로 구현 또는 수치·물리 검증 완료를 주장하지 않는다.
|
||||
@@ -0,0 +1,213 @@
|
||||
{
|
||||
"date": "2026-10-12",
|
||||
"configuration": "MSVC x64 Release, current production source",
|
||||
"scope": "\uae30\uc900 27\uc810\uc5d0\uc11c nodal m/s/j\uc640 \ubb3c\ub9ac \uacf5\uac04 v/a \ubd88\ubcc0\uc2dd\uc744 \ub3c5\ub9bd \uac80\uc0b0; \uace0\uc815 \ud68c\uc804 \uc6d0\ubcf8\uc5d0 \ud55c\uc815; \uc194\ubc84 \uc7ac\uc2e4\ud589 \uc5c6\uc74c; C08 \uc2dc\uac04 \uc815\ud655\ub3c4 \ud1b5\uacfc \uc8fc\uc7a5 \uc5c6\uc74c",
|
||||
"hdf_sha256": "e08f0ab304174f71c21c6644a6b7075ff5b122b2f7096936ddbcac6bcfbfb4ed",
|
||||
"frames": 101,
|
||||
"mass_total": 135000.00000000003,
|
||||
"mass_range": [
|
||||
49.92604468934955,
|
||||
199.70417875739835
|
||||
],
|
||||
"s_max_abs": 0.0,
|
||||
"j_total": 2812.5000000000014,
|
||||
"maximums": {
|
||||
"T_absolute_gap": 1.7763568394002505e-13,
|
||||
"T_relative_gap": 3.7613791941592326e-15,
|
||||
"N6_force_absolute": 3.637978807091713e-10,
|
||||
"N6_force_ratio": 9.983533924029631e-16,
|
||||
"N6_moment_absolute": 1.4870808805276386e-10,
|
||||
"N6_moment_ratio": 1.9741496759949841e-16,
|
||||
"inertia_translation_gap": 1.6007106751203537e-10,
|
||||
"stored_residual_identity": 0,
|
||||
"fixed_q": 0,
|
||||
"fixed_v": 0,
|
||||
"fixed_a": 0,
|
||||
"fixed_A": 0,
|
||||
"free_reaction": 0,
|
||||
"Rg_projection": 0,
|
||||
"director_norm": 3.3306690738754696e-16,
|
||||
"center_Uxy": 4.235164736271502e-22,
|
||||
"support_R_vs_Rg": 0,
|
||||
"external_moment": 0,
|
||||
"work_gap": 0,
|
||||
"defect_identity": 0,
|
||||
"max_abs_Uz_over_t": 9.776079038997665e-05
|
||||
},
|
||||
"final": {
|
||||
"frame": 100,
|
||||
"energy": [
|
||||
9.319202462446592e-05,
|
||||
1.3991064821635262,
|
||||
5.197009636071226e-06,
|
||||
2.7978236297920196,
|
||||
-1.398618758594233
|
||||
],
|
||||
"node2_U": [
|
||||
-1.17073377449038e-06,
|
||||
-1.1707337744903798e-06,
|
||||
-2.5636768748939438e-05
|
||||
],
|
||||
"node2_a": [
|
||||
0.22603862562652707,
|
||||
0.22603862562652707,
|
||||
0.22048716340695879
|
||||
],
|
||||
"support_F_sum": [
|
||||
100032.41213056525,
|
||||
100032.41213056522,
|
||||
100011.6203238819
|
||||
]
|
||||
},
|
||||
"max_T": 64.12476142322326,
|
||||
"max_abs_defect": 62.73624080175007,
|
||||
"minimum_energies": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"initial": {
|
||||
"frame": 0,
|
||||
"energy": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"node2_U": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"node2_a": [
|
||||
-500.7407241161487,
|
||||
-500.7407241161487,
|
||||
-500.7407241161487
|
||||
],
|
||||
"support_F_sum": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"recovery_checks": {
|
||||
"N_absolute_gap": 5.820766091346741e-11,
|
||||
"M_absolute_gap": 1.4551915228366852e-11,
|
||||
"Q_absolute_gap": 0,
|
||||
"max_abs_strain": 5.074132509174319e-06,
|
||||
"max_abs_curvature": 1.7259725747205824e-05,
|
||||
"max_abs_stress": 1793764.834310077,
|
||||
"N_symmetric_relative_gap": 1.9403306822758222e-16,
|
||||
"M_symmetric_relative_gap": 2.008046999925874e-16,
|
||||
"Q_symmetric_relative_gap": 0
|
||||
},
|
||||
"C08a_current_debug": {
|
||||
"evidence": ".dryforge/lumped-mass-adoption-20261011/full-direct.log",
|
||||
"test": "HhtShellPhysics.C08aRigidManufacturedOrbitFullCoordinateTimeConvergence",
|
||||
"verdict": "FAIL",
|
||||
"test_duration_seconds": 731.27,
|
||||
"finest_h": 0.00390625,
|
||||
"finest_normalized_angular_a_error": 0.0005674729126742647,
|
||||
"last_two_orders": [
|
||||
1.0283765928414674,
|
||||
1.0294567508174022
|
||||
],
|
||||
"angular_v_error": 1.1876972777062108e-06,
|
||||
"angular_v_100_noise_bound": 1.6576860896252254e-06,
|
||||
"angular_a_100_noise_bound": 0.0008121868687924551,
|
||||
"null_recovery_diagnostic_finest_error": 0.00010030608493534597,
|
||||
"null_recovery_diagnostic_physical_maximum": 0.00010030577885358542,
|
||||
"null_recovery_diagnostic_null_maximum": 4.6944218244936117e-07,
|
||||
"post_hidden2_diagnostic": 2.9755320458171044e-16,
|
||||
"note": "\ucd5c\uc885 test-only oracle \uc218\uc815 \uc804 raw FAIL; \ubcc0\uacbd\ub41c \ubcd1\uc9c4 force-rate rows\ub294 \uc81c\uc870 hidden/null \ud68c\ubcf5\uc5d0\uc11c \uc18c\ube44\ud558\uc9c0 \uc54a\uc74c; \ucd5c\uc885790 \uc804\uccb4 \ubbf8\uc2e4\ud589\uc774\ubbc0\ub85c OPEN \uc720\uc9c0"
|
||||
},
|
||||
"C08b_current_debug": {
|
||||
"evidence": ".dryforge/lumped-mass-adoption-20261011/full-direct.log",
|
||||
"test": "HhtShellPhysics.C08bFreeFiniteRotationPlateSelfConvergenceAndPhysicalInvariants",
|
||||
"verdict": "FAIL",
|
||||
"duration_seconds": 438.18,
|
||||
"failure": "invalid-dynamic-rotation",
|
||||
"failed_grid_h": 0.00390625,
|
||||
"completed_grids": [
|
||||
{
|
||||
"h": 0.015625,
|
||||
"energy_error": 0.00025065432169060303,
|
||||
"P_error": 2.45022860759194e-15,
|
||||
"L_error": 0.00010727438825677137,
|
||||
"phi_max": 0.27391502319015193
|
||||
},
|
||||
{
|
||||
"h": 0.0078125,
|
||||
"energy_error": 6.415499114366987e-05,
|
||||
"P_error": 6.335052199623923e-15,
|
||||
"L_error": 2.7384802983989645e-05,
|
||||
"phi_max": 0.27394592218709063
|
||||
}
|
||||
],
|
||||
"not_run": [
|
||||
"h=1/512",
|
||||
"h=1/1024",
|
||||
"six-channel self-differences",
|
||||
"N7 noise separation",
|
||||
"finest energy and momentum checks"
|
||||
],
|
||||
"independent_initial_field_T": 0.29818583333333337,
|
||||
"independent_initial_field_P": [
|
||||
0.1,
|
||||
-0.2,
|
||||
0.05
|
||||
],
|
||||
"note": "\uc774\uc804 consistent self-difference assertion \uc2e4\ud328\uc640 \ub2e4\ub978 \uacbd\ub85c; \uc9c1\uc811 \uc2e4\ud328 \uc870\uac74\uc740 finite Newton trial\uc758 chart \uc774\ud0c8\ub85c \ud655\uc778; overshoot\uc758 \uadfc\ubcf8 trigger\ub294 \ubbf8\ud655\uc815",
|
||||
"diagnostic_trace": {
|
||||
"path": ".dryforge/lumped-mass-adoption-20261011/c08b-diagnostic/run.log",
|
||||
"log_sha256": "10c25d9bb5fb89f925701f318f9b74e1d08bbeb837016d37cc51345ce6076aad",
|
||||
"probe_exit": 1,
|
||||
"h": 0.00390625,
|
||||
"increment": 56,
|
||||
"iteration": 3,
|
||||
"time": 0.21875,
|
||||
"phase": "newton",
|
||||
"third": false,
|
||||
"internal_node_index_0_based": 4,
|
||||
"fixture_source_node_label": 5,
|
||||
"phi": [
|
||||
0.6412752328975573,
|
||||
-1.1977756953049712,
|
||||
3.6162098692194427
|
||||
],
|
||||
"phi_norm_independent": 3.8630136368942867,
|
||||
"all_9_logged_phi_v_a_finite": true,
|
||||
"proximate_failure": "finite Newton trial\uc758 principal-chart margin \uc774\ud0c8",
|
||||
"root_trigger": "\ubbf8\ud655\uc815"
|
||||
}
|
||||
},
|
||||
"final_verification_scope": {
|
||||
"full_789": {
|
||||
"native_exit": 8,
|
||||
"counts": {
|
||||
"pass": 784,
|
||||
"fail": 4,
|
||||
"skip": 1
|
||||
},
|
||||
"log_sha256": "47b814880ebeaf923002a52d0919703fc4e0671b298e4ba2c026c5c2ba331da6",
|
||||
"note": "\ucd5c\uc885 test-only \uc218\uc815 \uc804 raw \ud310\uc815\uc744 \ubcf4\uc874"
|
||||
},
|
||||
"final_debug_build_exit": 0,
|
||||
"final_discovery_count": 790,
|
||||
"final_790_full_executed": false,
|
||||
"final_hht_oracle_focused": {
|
||||
"native_exit": 0,
|
||||
"passed": 2
|
||||
},
|
||||
"final_hex8_stale_fixture_focused": {
|
||||
"native_exit": 0,
|
||||
"passed": 2
|
||||
},
|
||||
"final_test_manifest_sha256": "83dfab0cad81d11351c0a039161da565529f0cc7f455263088d362cfd5426446",
|
||||
"production_file_count": 190,
|
||||
"reference_file_count": 16,
|
||||
"independent_identity_mismatches": 0,
|
||||
"remaining_status": "HHT C08a/C08b OPEN; C04a SKIP; \uc804\uccb4 \ud1b5\uacfc \uc8fc\uc7a5 \uc5c6\uc74c"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,158 @@
|
||||
# MITC4 HHT consistent/lumped 질량 비교 실험
|
||||
|
||||
2026-10-11 사용자의 질량만 변경한 비교 요청에 따른 private 실험이다.
|
||||
기존 [질량 결정](ADR.md)과 [관성 정식화](formulation-inertia.md)의 consistent
|
||||
kinetic mass 기본값은 유지한다. Abaqus S4의 내부 질량행렬을 추출하거나 그 회전
|
||||
관성 구현을 재현한 실험은 아니다.
|
||||
|
||||
## 방법과 변경 경계
|
||||
|
||||
원본 `reference/shellNL-dyn-meshfine/shellNL-dyn-meshfine.inp`의 byte 동일 복사본을
|
||||
두 별도 출력 경로에서 해석한다. 729 nodes/676 S4, thickness=.5, rho=2700,
|
||||
E=2.1e11, nu=.3, 중심 node2의 각 병진 방향 하중 -100000, 외곽 104 nodes의
|
||||
6 DOF 고정, NLGEOM 및 HHT 계수와 `dt=.1`, 종료 시간10을 유지한다.
|
||||
|
||||
Consistent는 production source를 그대로 사용한다. Lumped는 관성 상세의 비교식
|
||||
`T_L=1/2 Σ_i ∫rho N_i |v_ui+z Dd_i v_phi_i|² dV0`을 private kernel에 적용한다.
|
||||
Reference geometry/Jacobian과 current geometry 검사는 유지하고, kinetic
|
||||
interpolation만 각 절점으로 옮긴다. 질량뿐 아니라 해당 kinetic energy의 관성력,
|
||||
convective force, 위치·속도 접선, 에너지와 운동량 회복까지 같은 measure로 계산한다.
|
||||
일반 24×24 행렬을 단순 대각화하거나 drilling에 질량을 추가하지 않는다.
|
||||
|
||||
두 실행 파일은 같은 source revision과 같은 새 MSVC Release library를 사용한다.
|
||||
Lumped 실행 파일만 관성 object와 결과 writer object를 먼저 링크한다. Writer의
|
||||
mass metadata/self-check는 `research-nodal-lumped-kinetic`으로 명시한다.
|
||||
Stiffness, HHT update, residual, 초기화·수렴 기준, 하중, 모델, 회전 운동학과
|
||||
나머지 recovery는 동일하다. Production source/API/CLI와 reference 원본은 수정하지 않는다.
|
||||
|
||||
## 요소 단위 검산
|
||||
|
||||
아래 결과는 MSVC Debug private probe의 제한된 smoke 진단이다. 기존 N5 또는
|
||||
C08 acceptance 통과로 분류하지 않는다. Rectangle .2 thickness, density1에서
|
||||
기존 eigen 요소의 consistent/lumped 24×24 행렬과 초기 질량을 직접 대조했다.
|
||||
|
||||
| 검사 | Consistent | Lumped |
|
||||
| --- | ---: | ---: |
|
||||
| 기존 mass oracle 최대 절대차 | 3.46945e-18 | 5.55112e-17 |
|
||||
| 절점 간 mass block 최대 절대값 | .0444444 | exact0 |
|
||||
| 방향별 총 병진 질량 | .8 | .8 |
|
||||
| uniform translation kinetic energy | 1.6 | 1.6 |
|
||||
| 동일 비균일 q/v의 kinetic energy | .0648590621 | .0802553965 |
|
||||
| `I−Ma−c` 최대 절대차 | 1.38778e-17 | 6.93889e-18 |
|
||||
| 병진 force 합과 momentum rate 최대 절대차 | 1.38778e-17 | 5.55112e-17 |
|
||||
|
||||
비영 q/v/a에서 central difference로 관성력 위치·속도 접선을, kinetic energy의
|
||||
시간 방향 미분으로 `v·I=dT/dt`를 대조했다. Step1e-3~1e-6의 raw 절대오차는
|
||||
약3.1e-11 이하이고 각 probe native exit0이다. 이는 기존 scaled N5 계약의
|
||||
검사와 구분한다. Warped geometry, objectivity, 전체 angular-momentum 평형과
|
||||
시간수렴을 이 smoke로 입증하지 않는다. 독립 numerical reviewer가 식·patch와
|
||||
probe 결과에서 오류를 발견하지 않았으며 같은 coverage 한계를 확인했다.
|
||||
|
||||
## 원본 모델 비교 결과
|
||||
|
||||
전체 100증분 결과를 확보한 뒤 원본 CSV의 승인된 row/RMS/near-zero 정책으로
|
||||
U/UR을 비교한다. Lumped용 private comparator는 기대하는 mass metadata만
|
||||
실험 이름으로 바꾸고 identity·finite·frame·tolerance 검사는 유지한다.
|
||||
Lumped의 통과 여부는 연구 관측이며 기존 consistent 지원 계약의 acceptance로
|
||||
분류하지 않는다. V/A·공간 각속도/각가속도·에너지는 Abaqus CSV에 없어 두 FESA
|
||||
해석 사이의 진단으로 구분한다.
|
||||
|
||||
두 private CLI가 모두 100 increments/101 frames를 완료했다. Native exit는 각각0,
|
||||
실행 시간은 consistent1116.70초/lumped1117.08초였다. 분석 script도 native exit0이며
|
||||
729-node identity, frame/time, metadata와 필요한 양의 finite 검사를 통과했다.
|
||||
원본 INP/CSV, production inertia/writer/comparator와 기존 Debug library의 before/after
|
||||
SHA256은 동일하다. 공통 source revision은 `ede137c6b40192f7e7c2647ec16765ce29c8239e`다.
|
||||
|
||||
| 원본 CSV 비교·동적 진단 | Consistent | Lumped |
|
||||
| --- | ---: | ---: |
|
||||
| U blocking comparison | PASS; 0 failures | PASS; 0 failures |
|
||||
| Frame별 U family 상대 RMS의 최댓값 | .227058974% | .228242450% |
|
||||
| Frame별 UR family 상대 RMS의 최댓값 | 2.53311382% | 2.53460488% |
|
||||
| UR warning 건수 | 200 | 200 |
|
||||
| 중심 node2 초기 병진 가속도; 각1–3방향 | −1502.222173 | −500.7407241 |
|
||||
| 최대 병진 속도 절대값; 전체 nodes/frames | 1.387005688 | .4644038863 |
|
||||
| 최대 운동에너지 | 191.6142090 | 64.12476142 |
|
||||
| 최종 운동에너지 | .0002844432611 | .00009319202462 |
|
||||
| 최대 energy defect 절대값 | 190.2255716 | 62.73624080 |
|
||||
| 최종 energy defect | −1.398427506 | −1.398618759 |
|
||||
| 중심 node2 최종 U3 | −2.563681542e-5 | −2.563676875e-5 |
|
||||
|
||||
외부 CSV의 U/UR 비교는 승인된9개 선택 절점의101 frames이다. 729-node 전체
|
||||
이력 비교와 혼동하지 않는다. 단위는 일관된 입력의 L/F/T를 따르며 acceleration=L/T², velocity=L/T,
|
||||
energy=F·L이다. SI 단위라고 단정하지 않는다. UR은 기존 정책의 warning-only이며,
|
||||
V/A와 energy의 값에는 이번 실험을 위한 새 acceptance threshold를 적용하지 않았다.
|
||||
|
||||
두 해석 사이의 전체729 nodes×101 frames×3 components의 동일 양에 대해
|
||||
`||L−C||₂/||C||₂`를 계산했다. 이것은 reference family RMS와 다른 private 진단이다.
|
||||
|
||||
| 양 | 전체 이력의 상대 L2 차이 |
|
||||
| --- | ---: |
|
||||
| 병진 변위 U | .0226059033% |
|
||||
| 회전 좌표 UR | .0223918588% |
|
||||
| 병진 속도 V | 76.3639464% |
|
||||
| 병진 물리 가속도 A | 76.3762180% |
|
||||
| 회전 좌표 속도 PHIDOT | 54.2689255% |
|
||||
| 회전 좌표 가속도 PHIDDOT | 54.2811291% |
|
||||
|
||||
Frame0을 제외한 병진 가속도 이력의 상대 차이도76.3762009%여서 초기 가속도 한
|
||||
frame만의 차이는 아니다. U의 최대 절대차는1.30297458e-8 L이다. 두 mass의 U
|
||||
reference RMS 차이는 .001183476 percentage points이며, 양쪽 모두 같은 정책을
|
||||
통과한다. 이 원본의 U 비교는 두 질량 선택을 판별하는 데 민감하지 않다는 관측이다.
|
||||
속도·가속도·운동에너지까지 같다고 확대할 수 없고, 회전 관성 차이의 상쇄가 원인이라고
|
||||
판별한 결과도 아니다. 병진 mass coupling만으로도 초기 가속도 분포가 달라진다.
|
||||
특히 이 centered flat shell의 frame0은 q=v=0이며, 두께의 first moment와
|
||||
병진–회전 mass coupling은0이다. 이때 속도의 제곱에 비례하는 convective 항도0이므로,
|
||||
중심 초기 병진 가속도의 약3배 차이는 병진 mass 분포·절점 간 coupling의 영향이다.
|
||||
이를 회전 관성항의 상쇄로 설명할 필요는 없다.
|
||||
|
||||
최대 T가 consistent 쪽에서 더 크더라도 같은 q/v에서의 `T_L>=T_C`와 모순되지
|
||||
않는다. 전체 해석에서는 두 질량 방식의 q/v 자체가 달라진다. Coarse dt에서 시간
|
||||
이산화·수치 감쇠가 U 차이를 가릴 수 있다는 가설은 이 관측과 양립하지만, 이를
|
||||
원인으로 확정하려면 같은 두 질량으로 시간 refinement를 수행해야 한다.
|
||||
|
||||
결과 HDF5 SHA256:
|
||||
|
||||
- Consistent: `fe0ea4bddca18a23c55c3c7880aaa377fd0ff13b964c1d4f70ddefad5995d5d9`.
|
||||
- Lumped: `b6253edae92ab73201d089795d274709d1f0cccce759a753b24712c7b6d9c3ea`.
|
||||
|
||||
공통 Release library SHA256:
|
||||
`1dc5d33417ce905e501cd56bbbb21262d1c8b856394a23e2c798e200cbcdfa31`.
|
||||
|
||||
독립 numerical reviewer는 comparator를 호출하지 않고 원본 CSV의202 families/
|
||||
5454 scalar values를 재계산하여 두 report의 원값·error·row 판정과 RMS를 확인했다.
|
||||
HDF5의101×729 전체 이력·초기값·에너지 요약, source/input/library/exe SHA와 공통
|
||||
metadata를 별도로 확인했고 finding은 없었다. 실제 독립 실행 native exit0이며
|
||||
`independent-review-result.json` SHA256은
|
||||
`b33d2019cb553f848fafdb2906dd540d2109982ec322b6b7d5b279721c22a20c`다.
|
||||
Energy identity의 재계산은 저장량 사이의 일관성 검사이며 독립 volume kinetic
|
||||
적분이나 정확한 에너지 보존·시간수렴을 새로 입증한 것은 아니다.
|
||||
|
||||
## 실행·재현과 한계
|
||||
|
||||
Private 생성·실행·결과 경로는 저장소 기준
|
||||
`.dryforge/hht-mass-comparison-20261011/`이다. `prepare.py`는 원본 source/reference
|
||||
hash와 byte 동일 입력 복사본을 보존한다. `build.ps1`/`build-probe.ps1`은 Debug
|
||||
요소 probe를, `build-optimized.ps1`은 공통 Release library와 paired CLI를 만든다.
|
||||
각 variant의 CLI에 그 variant의 복사 INP를 전달하고 `analyze.py`를 h5py/NumPy
|
||||
환경에서 실행한다. `result.json`, 두 `reference-comparison.json`, `probe.json`,
|
||||
native exit 기록과 before/after hash가 실제 evidence다.
|
||||
|
||||
Debug 원본 모델 실행은 각각 초기 동적 평형까지만 확보한 뒤 runtime 때문에 중단했다.
|
||||
각 native exit -1은 중단 기록이며 PASS가 아니다. 최초 private writer link의 HDF5
|
||||
DLL macro 누락은 수정했다; 초기 link 실패는 tool 실행 기록에 있으며 log 파일은
|
||||
후속 link 실행으로 덮어쓰여 별도 raw 파일로 남지 않았다. Probe의 index/Vector3
|
||||
API 오류는 수정 전 실패 로그로 별도 보존한다.
|
||||
초기 분석 script의 source label을 정수로 직접 비교한 오류는 HDF5의 문자열 label을
|
||||
명시적으로 해석하도록 수정했고, 수정 전 native1/log와 수정 후 native0을 구분해 보존했다.
|
||||
공통 Release source build 및 두 private CLI build는 native exit0이다.
|
||||
|
||||
이 실험은 production 수정이나 기능 완료 작업이 아니며 전체 MSVC Debug/CTest를
|
||||
새로 실행하지 않았다. 기존 C08 시간수렴 실패는 유지한다. `dt/T1≈7.4567`인 성긴
|
||||
원본 시간간격에서의 외부 U 비교를, 시간 정확도·큰 회전 관성 또는 질량 정책의
|
||||
동등성으로 확대하지 않는다. Source/reference와 기존 Debug library의 hash 보존을
|
||||
확인하며 reference 원본·tolerance·공개 mass 정책을 결과에 맞춰 변경하지 않는다.
|
||||
|
||||
|
||||
## 2026-10-11 후속 질량 정책 승인
|
||||
|
||||
사용자는 고유치·HHT lumped mass 채택을 명시 승인했다([HHT-ADR-012](ADR.md)). 위 조사와 private 비교는 채택 전 원문 기록이며 production 검증으로 승계하지 않는다. 현재 채택 수식은 [formulation](formulation.md), 변경본 재검증 상태는 [PRD](PRD.md)의 현재 checklist를 따른다. 원본 reference·허용값·HHT 계수와 출력 layout은 유지한다.
|
||||
@@ -0,0 +1,274 @@
|
||||
# Shell HHT 회전 실패의 원인 조사와 해결 후보
|
||||
|
||||
이 문서는 production 정책 변경 전의 원인 조사·private 후보 실험 기록이다.
|
||||
후속 사용자 요청으로 채택한 실제 시작 정책은 [HHT-ADR-013](ADR.md)과
|
||||
[Newton 시작점 구현·검증](newton-start-policy.md)을 따른다. 아래의 당시 미채택/미실행
|
||||
상태와 후보 결과를 현재 production 검증으로 승계하지 않는다.
|
||||
|
||||
|
||||
2026-10-12 사용자 요청에 따른 C08b 신규 runtime 실패 조사다. 공유 production 코드·tests·
|
||||
빌드 산출물·reference·허용값은 변경하지 않았다. 원래 알고리즘의 실패와 별도 후보의
|
||||
private 실행을 구분한다. 완료 checklist는 [PRD](PRD.md), 현재 채택 정책은
|
||||
[HHT-ADR-010·012](ADR.md)을 따른다.
|
||||
|
||||
## 조사 결론
|
||||
|
||||
실패의 직접 기전은 **직전 수용 좌표를 Newton 시작값으로 쓸 때 생기는 큰 관성 잔차와
|
||||
moving drilling null의 결합이, 정상적인 drilling 조건의 미분을 거의 상쇄하는 것**이다.
|
||||
처음부터 약한 null 접선에서 큰 회전 보정이 발생하고, 뒤의 Newton trial이 principal
|
||||
회전 범위를 벗어난다. 확인한 상태·방향에서는 질량/관성 항등식·접선 미분·선형 solve와
|
||||
time-history indexing에 명확한 구현 오류를 발견하지 못했다. 이 결론을 모든 상태의
|
||||
kernel correctness 또는 다른 모델의 안정성 보장으로 확대하지 않는다.
|
||||
|
||||
기존 방식의 실패 증분을 동일한 직전 수용 state에서 재현했다. 유효한 predictor 시작과
|
||||
명시적 drilling 잔차의 정확 Newton 후보는 모두3회 correction 후 기존 raw endpoint·
|
||||
constraint·equilibrium 기준을 통과했다. 후보의 접선도 같은 state의 N5 차분 검사를
|
||||
통과했다. 전체 시간구간 후보 실행과 물리 평가의 닫힌 결과는 아래 별도 절에 기록한다.
|
||||
|
||||
## 모델·실패·저장 상태
|
||||
|
||||
대상은 `HhtShellPhysics.C08bFreeFiniteRotationPlateSelfConvergenceAndPhysicalInvariants`의
|
||||
all-free plate다. 2×2 shell 요소·9절점·54자유도, 두께0.2, E=1000, ν=0.3, ρ=1,
|
||||
time period0.25이며 단위는 입력의 일관 단위다. 초기 강체 속도에 작은 변형 운동을
|
||||
더하고 외력은0이다. 전체5개 grid의 self-convergence와 물리 불변량을 검사하는 내부
|
||||
시험이며 CLI의 zero-initial-condition 지원 범위를 확대하지 않는다.
|
||||
|
||||
현재 shared CTest는 h=1/64·1/128만 완료했고 h=1/256의 증분56·t=0.21875·Newton
|
||||
반복 index3에서 source node5의 trial 회전 크기3.8630136369 rad로 실패했다.
|
||||
현재 gate는 `π−sqrt(epsilon_double)`보다 작은 total rotation-vector norm을 요구한다.
|
||||
이 좌표는 accepted physical frame이 아니다. 기존 consistent C08b는5개 grid를 모두
|
||||
끝낸 뒤 정확도 assertion에서 실패했으므로 같은 baseline 실패로 분류하지 않는다.
|
||||
|
||||
이번 private capture는 증분50–56의 valid Newton trial39개에 q/v/a/A, 직전 accepted
|
||||
state·predictor, M·Kint·Keff·drilling metric, analytic null, 잔차·보정량을 저장했다.
|
||||
처음 큰 보정이 발생한 위치는 증분56의 **반복0**이며 반복2만의 문제가 아니다.
|
||||
|
||||
| 증분56의 trial | 최대 회전 norm | 다음 보정의 최대 성분 |
|
||||
| --- | ---: | ---: |
|
||||
| 반복0: 직전 accepted 좌표로 시작 | 0.235649251 | 2.009074231 |
|
||||
| 반복1 | 1.946567141 | 2.843068141 |
|
||||
| 반복2 | 1.064939407 | 2.695998257 |
|
||||
| 반복3: 평가 실패 | 3.863013637 | 생성되지 않음 |
|
||||
|
||||
단위는 rad다. 반복0 보정의 scaled 2-norm 분해는 null2.124294782,
|
||||
physical0.016846220이며 null 비중은99.9969%다. Physical/null 분해는 analytic nodal
|
||||
null을 정규화해 수행했고, 작은 singular value를 잘라 null을 선정하지 않았다.
|
||||
|
||||
## 접선이 약해지는 수식과 실제 수치
|
||||
|
||||
기존 [관성 정식화](formulation-inertia.md)의 endpoint 방정식을
|
||||
`E=I+g`, `g=f_int−F`, `I=M(q)a+c(q,v)`라 한다. Analytic admissible null N은
|
||||
`NᵀI≡0`이며 drilling 대수 조건은 `ψ=Nᵀg=0`이다. Frozen old state·predictor로
|
||||
v(q), a(q)를 포함해 미분하면 다음 항등식이 성립한다.
|
||||
|
||||
\[
|
||||
N^T K_{eff}=D\psi-(DN)^T E.
|
||||
\]
|
||||
|
||||
`Dψ`가 정상이어도 미수렴 상태의 `−(DN)ᵀE`가 이를 상쇄할 수 있다. Root에서 E=0인
|
||||
regularity 검사와 Newton 중간 trial의 접선 regularity는 다른 검사다. q_trial=q_n이면
|
||||
`q_n−q_p=O(h)`이므로 HHT가 계산하는 시험 가속도는 일반적으로 O(1/h)까지 커질 수
|
||||
있다. 이는 accepted acceleration의 발산을 뜻하지 않는다.
|
||||
|
||||
| 증분56·반복0의 중심 절점 null 방향 | 값 |
|
||||
| --- | ---: |
|
||||
| 대수 조건의 방향 미분 `Dψ N` | 0.02259938760 |
|
||||
| 잔차 connection `(DNᵀE)N` | 0.02319413434 |
|
||||
| 위 connection의 관성 기여 | 0.02319333592 |
|
||||
| Raw null 접선 `NᵀKeff N` | −0.00059474674 |
|
||||
| 물리 방향을 소거한 중심 null Schur 성분 | −0.00000714209 |
|
||||
|
||||
Scaled 전체 접선의 2-norm condition number는7.3416e9, physical complement는
|
||||
약1101이다. 가장 약한 right singular vector의 null 투영 norm은0.9999983이다.
|
||||
이 condition number는 진단값이며 승인된 local reciprocal infinity-condition gate의
|
||||
대체 기준이 아니다. 대수 조건 자체의 정규화 condition number는 약1이므로,
|
||||
drilling stiffness 자체가 사라진 상황으로 설명하지 않는다.
|
||||
|
||||
증분50부터56까지 중심 Schur 성분은0.00252514→0.00209997→0.00167950→0.00126253→
|
||||
0.000843952→0.000420078→−0.00000714209로 연속 감소·부호 교차한다.
|
||||
단발적인 선형 solve 오류보다 off-root moving-null 접선의 약화에 부합하는 관측이다.
|
||||
|
||||
## 다른 원인 가설의 독립 대조
|
||||
|
||||
- 저장된 모든 predictor와 v/a/A를 독립 재계산한 차이는 exact0이다. Old state,
|
||||
increment/time과 trial-rate 연결의 오류를 확인한 범위에서는 발견하지 못했다.
|
||||
- `MN`과 `NᵀI` 항등식, 별도 Exp32/Jl32 complex-step null 미분과 위 null-row 항등식을
|
||||
직접 대조했다. 전체 null-row identity의 최대 차이는5.33e−14 이하이다.
|
||||
- 첫 큰 보정의 선형 backward error는1.64e−16이며 독립 dense solve의 보정 상대차는
|
||||
6.17e−11이다. 큰 보정은 별도 선형 해법에서도 재현된다. 작은 backward error만으로
|
||||
해의 forward accuracy를 인증한 것은 아니다.
|
||||
- 실패 직전 반복2와 첫 보정의 반복0에서 잔차·접선을 독립 차분했다. 추가 N5 검사는
|
||||
raw E와 후보 ψ residual 각각에 correction·center-null·mixed 방향을 사용했고,
|
||||
scaled 2-norm=1 및 s=2^−j, j=8,10,…,20을 적용했다. 두 residual의 모든3방향에서
|
||||
j10…18 중 연속 두 점의 승인 nonzero ratio≤1e−6을 만족했다. Center-null의 j10
|
||||
오차는약1.09e−5로 FAIL이며 j12 이후 연속 PASS인 truncation 경향을 보존했다.
|
||||
- Exact-zero action, u-only 방향, 다른 trial/mesh·부분 BC·D3의 새 전체 검증은 포함하지
|
||||
않는다. 이 scoped 미분 결과로 모든 kernel 오류 가능성을 제거했다고 주장하지 않는다.
|
||||
|
||||
## 해결 후보의 비교
|
||||
|
||||
모든 후보는 같은 lumped kinetic physics·HHT 계수·fixed h·Newton100·principal
|
||||
chart·최종 raw E/correction·constraint/equilibrium 기준을 사용한다. 차이는 승인 전의
|
||||
Newton 시작값 또는 residual 정책이며 production 수정이 아니다.
|
||||
|
||||
| 동일 old state에서 증분56 실행 | 첫 접선 cond2 | 첫 최대 correction | 결과 |
|
||||
| --- | ---: | ---: | --- |
|
||||
| 기존 q_n 시작/raw E Newton | 7.3416e9 | 2.00907423 | principal chart 이탈, native1 |
|
||||
| Predictor 시작/raw E Newton | 9.0077e6 | 1.97023e−5 | correction3회 후 endpoint 통과, native0 |
|
||||
| q_n 시작/명시적 ψ 정확 Newton | 8.9319e6 | 0.00552035 | correction3회 후 endpoint 통과, native0 |
|
||||
|
||||
성공한 두 후보의 endpoint 최대 차이는 q4.17e−17, v2.13e−14, a1.04e−11,
|
||||
A9.90e−12다. 새 임의 tolerance로 같은 해를 선언하지 않으며 관측된 차이를 그대로 보고한다.
|
||||
|
||||
### 후보1: 유효한 predictor를 Newton 시작값으로 사용
|
||||
|
||||
시간적분 식과 raw Newton 방정식을 유지하고 시작 좌표만 q_p로 둔다. 실패 trial의
|
||||
큰 관성 잔차를 피하는 최소 변경 후보다. 다만 기존 원본 DIRECT h=.1에서는 predictor가
|
||||
허용 geometry/chart 밖으로 나갔던 것이 [ADR-010](ADR.md)의 채택 이유다.
|
||||
모든 입력에 predictor를 강제하는 변경은 권고하지 않는다. Predictor 유효성을 확인하고
|
||||
부적합한 경우 시작값을 어떻게 선택할지 명시적으로 정해야 한다. 현재 지원 모델의
|
||||
geometry·부분 BC·실패 보존·원본과 회귀 검증이 필요하다.
|
||||
|
||||
### 후보2: 물리 좌표 방정식과 drilling 대수 조건을 정확 Newton으로 풀기
|
||||
|
||||
All-free 평판 연구에서는 P로 ux/uy/uz/φx/φy equation을 선택하고 남은9개 equation을
|
||||
ψ=Nᵀg로 바꾼다.
|
||||
|
||||
\[
|
||||
\mathcal F=\begin{bmatrix}PE\\\psi\end{bmatrix},\qquad
|
||||
\mathcal J=\begin{bmatrix}PK_{eff}\\(DN)^Tg+N^TK_{int}\end{bmatrix}.
|
||||
\]
|
||||
|
||||
현재 |n_z|가0에서 충분히 떨어져 있어 `[P;Nᵀ]`가 가역이면 `F=0⇔E=0`이다.
|
||||
Prototype의 지원 경계는 모든 절점 |n_z|≥0.5인 all-free 평판이며, 이0.5는 현재
|
||||
솔버에 채택된 regularity/tolerance 기준이 아니다. 이 경계 밖에서는 후보 실행을 거부한다.
|
||||
단순 row scaling이 아니라 residual의 정확 미분이므로 off-root Newton 경로가 바뀐다.
|
||||
Drilling inertia·가상 torque·물리 damping을 추가하지 않으며 최종 수용은 원래 raw E로
|
||||
검사한다. 독립 dense 재구성으로 candidate matrix의 sparsity 누락0과 null 미분을 확인했다.
|
||||
|
||||
항상 φz를 drilling 좌표로 정하는 방식은 일반 유한회전 mesh에 적용할 수 없다.
|
||||
실제 free 공간과 mass-null의 교집합·가역적인 equation 선택·constant rank·moving-null
|
||||
미분·sparse pattern union을 정의해야 한다. 현재 prototype은 이 일반화를 검증하지 않는다.
|
||||
|
||||
## 전체 시간구간의 후보 실험
|
||||
|
||||
각 후보를 같은 초기 state에서 t=0…0.25 전체 구간에 실행했다. h=1/256은65개,
|
||||
h=1/512는129개 frame을 출력했고 두 후보 모두 chart 이탈 없이 끝났다. 모든 accepted
|
||||
frame에서 기존 raw E/correction·constraint/equilibrium 검사를 유지했다. Standalone
|
||||
main의 EXPECT assertion은 자동으로 native failure를 만들지 않으므로 완료 마커,
|
||||
frame 이력·stdout assertion 실패·stderr를 별도로 확인한다.
|
||||
|
||||
| h | 후보 | 최대 accepted 회전 | 에너지 결함 | 병진 운동량 결함 | 각운동량 결함 |
|
||||
| --- | --- | ---: | ---: | ---: | ---: |
|
||||
| 1/256 | predictor | 0.273895229 | 1.61260792e−5 | 1.77e−14 | 6.87805734e−6 |
|
||||
| 1/256 | 명시적 ψ | 0.273895229 | 1.61260792e−5 | 2.32e−14 | 6.87805734e−6 |
|
||||
| 1/512 | predictor | 0.273914419 | 4.02172472e−6 | 2.85e−14 | 1.71965922e−6 |
|
||||
| 1/512 | 명시적 ψ | 0.273914419 | 4.02172472e−6 | 3.33e−14 | 1.71965922e−6 |
|
||||
|
||||
회전 단위는 rad이며 나머지는 기존 RunPlate가 산출한 normalized defect다. 에너지와
|
||||
각운동량 결함은 약1/4로 감소했다. 두 grid만으로 기존 다섯 grid self-convergence나
|
||||
noise-separation·최종 finest 기준을 통과했다고 판정하지 않는다. Raw V/A의 hidden
|
||||
defect는 nonzero이며 같은 endpoint를 찾는 Newton 변경으로 시간 scheme이 개선되었다고
|
||||
해석하지 않는다.
|
||||
|
||||
독립 수치 검토는 네 이력의 연속 increment/time·finite/chart·raw N2 잔차와 HHT
|
||||
update를 확인했다. 모든 noninitial frame은3회 correction 후 수용됐고 stdout에
|
||||
assertion 실패가 없었다. 같은 h에서 두 후보의 전체 이력 최대 차이는256에서
|
||||
q3.14e−15/v2.59e−12/a1.01e−8/A9.09e−9,512에서
|
||||
q8.41e−15/v5.23e−12/a4.47e−8/A4.03e−8이다. 이를 새 tolerance로 판정하지 않는다.
|
||||
|
||||
독립 물리 검토는 nodal mass/inertia와 별도 exponential 미분으로 T/P/L과 rates를
|
||||
재계산했다. 총 질량0.8, 초기 T0=0.29818583333333337이며 저장 T의 최대 차이는
|
||||
1.67e−16 이하이다. 전체 네 이력의 N6 force/spatial-moment balance는 각각
|
||||
7.25e−12/2.64e−11 이하로 기존1e−8 기준 이내다. Independent momentum ledger도
|
||||
일치했다. Uphys/Udrill은 저장값을 사용했으므로 독립 stress/strain recovery와 전체
|
||||
power ledger까지 검증했다고 주장하지 않는다. P drift는 roundoff 수준이라 단조 감소를
|
||||
인증하지 않는다.
|
||||
|
||||
독립 공통시점 대조에서도 h=1/256과1/512의 회전 가속도 차이는 남는다. 기간 T=0.25로
|
||||
T²를 곱한 최대 norm에서 fine analytic null 투영은0.00371322, physical complement는
|
||||
0.84104115다. 별도 exponential 미분으로 계산한 director acceleration 차이도0.83973943이다.
|
||||
이는 두 grid의 진단값이며 새 accuracy tolerance나 차수 판정이 아니다. 다만 큰 rate
|
||||
차이가 drilling null에만 있다는 설명과 null 성분만 복구하면 충분하다는 제안은 이
|
||||
관측으로 지지되지 않는다. Physical rotational dynamics의 시간 해상도·history 오차까지
|
||||
분리해서 조사해야 한다.
|
||||
|
||||
추가 elastic-scale 진단은 analytic null을 정적으로 소거한
|
||||
`Kc=Kpp−Kpn Knn⁻¹Knp`, `Mc=PᵀMP`의 일반화 고유값을 계산했다. 두 grid 각각의
|
||||
trial56에서 최대 양의 √λ는약311.3/time이며 ωh는1.216/0.608, 가장 빠른 순간 탄성
|
||||
주기당 증분은약5.17/10.33개다. 두 grid의 trial56은 각각 t=0.21875/0.109375로
|
||||
서로 다른 시점이다. 관성 convective/moving-null/HHT 항을 제외한 미평형 Kint의
|
||||
진단이므로 평형 고유진동수나 stability/accuracy 인증이 아니다. 음의 λ도 최대 크기
|
||||
약0.64와 roundoff 규모 값들을 그대로 보존했다. 이 관측은 physical rate의 시간
|
||||
해상도를 확인할 필요성을 뒷받침하지만 accuracy 실패의 단독 원인을 확정하지 않는다.
|
||||
|
||||
원 wrapper의 네 실행 native.json은 ExitCode를 null로 저장한 기록 결함이 있다.
|
||||
256의 native code는 미확보로 남긴다. 512는 종료 전에 process handle을 확보한 별도
|
||||
observer로 두 실제 native0을 기록했다(`grids/*-512/observer-native.json`). 결과·완료
|
||||
로그·독립 frame 검사와 native 기록의 범위를 구별한다.
|
||||
|
||||
## 기존 시간정확도 실패와 구분
|
||||
|
||||
현재 lumped C08a는 모든 grid를 끝냈지만 finest h=1/256의 회전 좌표 가속도 최대
|
||||
오차5.6747291e−4가 기준1e−4를 초과했다. 마지막 raw log2 오차비1.02838·1.02946은
|
||||
요구1.8보다 작다. 동시에 회전 rate의100배 noise-separation도 충족하지 못해 N7
|
||||
시간 정확도 판정은 INCONCLUSIVE다. 이 raw 숫자를 인증된1차 수렴이라고 해석하지
|
||||
않는다. [실제 전체 회귀 기록](../hex8-structural-analysis/lumped-mass-adoption.md)에
|
||||
실패 predicate와 실행 범위를 유지한다.
|
||||
|
||||
새 chart 실패를 해결해도 C08a 가속도 정확도나 이전 C08b self-convergence가 자동으로
|
||||
해결되지 않는다. 두 후보는 같은 endpoint root와 기존 HHT history를 유지하므로, 같은
|
||||
branch의 충분히 수렴한 해에서는 시간적분 오차를 고치는 방법이 아니다.
|
||||
|
||||
기존 NR-009의 regular mass-null cubic 반례를 Decimal80으로 새로 재현했다.
|
||||
`M=diag(1,0)`, `U=(z−x³)²/2`, exact x=t,z=t³에서 endpoint 좌표는 exact인데
|
||||
전체 시점 최대 가속도 오차는1차다. A0만 바꾸는 두 후보도1차를 유지한다. 이는
|
||||
roundoff/Newton과 별개의 acceleration-history 문제를 보이는 제한된 반례이며
|
||||
현재 shell C08a의 raw 차수를 인증하거나 남은 physical-complement 오차를 설명하는
|
||||
증거로 확대하지 않는다. 가속도 복구 후보는 [ADR-011](ADR.md)과
|
||||
[별도 정식화](formulation-acceleration-recovery.md)의 검증·채택 경계를 유지한다.
|
||||
|
||||
## 권고하는 해결 순서
|
||||
|
||||
단기 수정의 우선 후보는 **유효성이 확인된 predictor 시작**이다. Raw E·Keff와
|
||||
시간적분·최종 gate를 유지할 수 있고 이번 실패 state에서 큰 관성 잔차를 피했다.
|
||||
그러나 기존 원본의 predictor-invalid 이력을 함께 해결해야 한다. Predictor를 시험하고
|
||||
geometry/chart가 부적합할 때 q_n을 쓰는 정책은 제안이며 아직 채택하지 않았다.
|
||||
이 선택으로 모든 q_n 시작 실패까지 예방된다고 주장하지 않는다. 실제 원본·부분 BC·
|
||||
invalid predictor에서 accepted state 보존 검사를 먼저 확보해야 한다.
|
||||
|
||||
보다 일반적인 Newton 개선은 **admissible drilling 대수 잔차의 정확 미분**이다.
|
||||
이 방법은 이번 접선 상쇄 항을 직접 피하며 q_n 시작에서도 수렴했다. 일반화할 때는
|
||||
mass-null과 free 공간의 교집합, 가역 row 선택과 sparse union을 정의해야 한다.
|
||||
현재 φz-row prototype을 production에 그대로 옮기는 것은 권고하지 않는다.
|
||||
두 후보 모두 ADR-010 변경을 명시하고 기존 gate로 검증한 뒤 채택할 수 있다.
|
||||
|
||||
C08a/이전 C08b의 시간 정확도는 이 Newton 정책과 별도로 해결한다. Raw a/A history와
|
||||
독립 hidden-constraint/physical-complement 오차·noise를 분리하고, ADR-011의 복구
|
||||
후보를 전체 시점·초기층·회전 null·에너지/운동량·공식 결과 의미까지 검증한다.
|
||||
A0 변경만으로 해결한다거나 Newton 후보 성공을 N7 통과로 대체하지 않는다.
|
||||
|
||||
## 실행 근거와 채택 경계
|
||||
|
||||
새 evidence root는 `.dryforge/hht-c08b-investigation-20261012/`다. `trial-*.json`은
|
||||
valid trial capture, `independent-review/review.json`은 complex-step/null/Schur 대조,
|
||||
`replay/*/native.json`과 `independent-review/replay-review.json`은 동일 state 실험,
|
||||
`n5/*/native.json`과 `independent-review/n5-review.json`은 승인된 scoped 미분 검사다.
|
||||
전체 후보 실행은 `grids/*/frames.jsonl`·`result.json`·로그, 독립 수치 검토는
|
||||
`independent-review/final-grid-review.json`·`.md`, 독립 물리 검토는
|
||||
`physics-review.json`·`.md`에 기록했다. 수치/물리 검토자는 별도로 수행했으며
|
||||
생산 코드와 계약은 읽기 전용이었다.
|
||||
순간 elastic-scale 진단은 `independent-review/instantaneous-spectrum.json`에 보존했다.
|
||||
|
||||
처음 capture wrapper는 native stderr를 PowerShell terminating error로 처리해 마지막
|
||||
native record를 생성하지 못했다. 저장된39개 trial과 wrapper exit1은 보존하며 별도
|
||||
replay raw 실행의 closed native1·stderr가 같은 실패를 재현했다. 이후 wrapper는
|
||||
process ExitCode·stdout/stderr를 별도로 기록한다. 처음 wrapper를 완전한 native 기록으로
|
||||
소급 표시하지 않는다.
|
||||
|
||||
고정된 공유 Debug solver library SHA256은
|
||||
`b7fa77f02578d2c51c166447af7866784a3bf53a623e0b2fc246055720706a7c`다.
|
||||
현재 CTest의 C08b finding과 FEM-REQ-HEX8-024 완료 blocker는 열린 상태다.
|
||||
후보 채택은 Newton 정책과의 충돌을 명시해 결정해야 하며, 선택 후 관련 행동 검사·
|
||||
부분 BC·결정론·rollback·필수 원본·구성된 전체 MSVC Debug 회귀를 수행한다.
|
||||
이 조사는 공유 production build/CTest를 새로 통과시킨 작업이 아니다.
|
||||
@@ -0,0 +1,176 @@
|
||||
# Shell HHT Newton 시작점 선택
|
||||
|
||||
2026-10-12 사용자 요청에 따라 [HHT-ADR-013](ADR.md)의 시작 정책을 구현했다.
|
||||
현행 acceptance와 checklist는 [PRD](PRD.md), 기준은 [numerical-controls](numerical-controls.md)다.
|
||||
[이전 조사](newton-rotation-investigation.md)의 private 후보와 이번 production 검증을 구분한다.
|
||||
|
||||
## 목적과 원인
|
||||
|
||||
C08b의 q_n 단독 시작은 h=1/256, 증분56에서 off-root 관성 잔차와 moving-null
|
||||
미분이 drilling 접선을 거의 상쇄하고 큰 null correction을 만들어 principal chart를
|
||||
벗어났다. 첫 실패의 수용 회전 크기는 약0.27 rad였지만 Newton trial은 약3.86 rad였다.
|
||||
확인한 state의 history·관성 항등식·접선·선형 solve는 독립 대조와 일치했다.
|
||||
이 수치는 이전 실패 조사 evidence이며 변경본의 현재 metric으로 사용하지 않는다.
|
||||
|
||||
Predictor q_p는 이런 시작 잔차를 줄일 수 있지만, 큰 DIRECT 증분의 외삽이 유효한
|
||||
geometry/chart 안에서도 endpoint에서 너무 멀 수 있다. q_p 단독 정책으로 기존
|
||||
LargeDirectStepStartsFromAcceptedGeometry를 실행했을 때 초기 병진 잔차가 약4.60e19이고
|
||||
Newton 반복4 뒤 geometry 오류가 발생했다. Geometry validity만으로 시작점을 고르면
|
||||
기존 지원 모델을 보존할 수 없었다.
|
||||
|
||||
## 구현 방법
|
||||
|
||||
각 increment에서 predictor q_p/v_p와 old physical a_n을 한 번 만들고 고정한다.
|
||||
어떤 시작 좌표 q를 선택해도 기존 관계를 사용한다:
|
||||
|
||||
```text
|
||||
A(q) = (q - q_p) / (beta h^2)
|
||||
a(q) = (A(q) + alpha a_n) / (1 + alpha)
|
||||
v(q) = v_p + gamma h A(q)
|
||||
E(q) = M(q) a(q) + c(q,v(q)) + f_int(q) - F
|
||||
r_free(q) = (D^T E(q))_free, D = diag_i(ell I3, I3)
|
||||
```
|
||||
|
||||
ell은 활성 요소의 초기 최대 edge 길이다. 병진 force×ell과 회전 torque는 모두 energy
|
||||
단위다. 반력/constrained row는 선택 norm에서 제외한다. 후보마다 달라지는 상대 잔차
|
||||
분모를 사용하지 않는다. 선택은 전역 좌표 벡터 두 개 사이에서 이루어지며 절점마다
|
||||
서로 다른 후보를 섞지 않는다.
|
||||
|
||||
1. q_p의 rates·full residual·정확한 effective tangent를 평가한다.
|
||||
2. genuine predictor geometry/director/principal-chart 실패이면 동일 frozen predictor에서
|
||||
q_n을 평가한다. 그 외 오류는 전달한다. q_n 평가의 오류도 전달한다.
|
||||
3. q_p가 유효하고 q_p=q_n이면 중복 평가를 생략한다.
|
||||
4. 두 좌표가 다르면 q_n도 평가한다. 둘 다 유효하면 `||r_free||inf`가 작은 쪽을
|
||||
선택하며 exact tie는 q_p다. 비교 norm의 overflow도 실패다.
|
||||
5. 선택한 assembly와 같은 q/v/a/A를 iteration0에서 그대로 사용한다. 이후에는 기존
|
||||
full Newton correction을 그대로 적용하고 원래 모든 gate로 수용한다.
|
||||
|
||||
이는 초기값 선택이다. q_n을 선택해도 predictor를 q_n으로 덮어쓰지 않으며,
|
||||
수용한 old state나 history를 변경하지 않는다. 100 correction 제한·고정 DIRECT h·
|
||||
principal margin·질량 영공간·정확한 관성 미분·잔차/증가량/선형 solve 기준을 보존한다.
|
||||
Newton correction 뒤 chart/geometry 실패는 즉시 종료한다. Line search·clamp·cutback·
|
||||
rechart·임의 drilling mass 또는 ψ로 원 잔차를 대체하는 구현은 추가하지 않았다.
|
||||
|
||||
## 실패 분류와 시행착오
|
||||
|
||||
유효한 geometry의 nonfinite strain/stress가 geometry diagnostic에 포함돼 있던 private
|
||||
point evaluator를 `valid / invalid geometry / nonfinite recovery`로 나눴다. 기존
|
||||
`invalid-nonlinear-shell-recovery`로 산술 실패를 전달하며 strain/stress 수식은 유지한다.
|
||||
|
||||
`invalid-dynamic-rotation`은 chart 밖의 좌표와 valid-chart rate overflow를 함께 나타낸다.
|
||||
Independent review에서 전체 절점을 scan하면 뒤 절점의 chart 위반이 앞 절점의 rate
|
||||
오류를 숨길 수 있음을 발견했다. 기존 실제 평가와 같은 순서·같은 후보 rates로 첫
|
||||
실패 절점을 식별하고 그 절점의 principal predicate만 확인하도록 수정했다.
|
||||
혼합 절점 검사는 수정 전 wrong diagnostic으로 FAIL, 수정 후 PASS였다.
|
||||
|
||||
## 현재 실행 evidence
|
||||
|
||||
Scratch 실행 기록은 `.dryforge/hht-predictor-newton-20261012/`에 있으며 원본 입력을
|
||||
변경하지 않는다. Task 시작의 dirty source/test를 before snapshot으로 보존해 이전
|
||||
lumped-mass 변경과 이번 diff를 구분했다.
|
||||
|
||||
| 범위 | 결과 |
|
||||
| --- | --- |
|
||||
| 실제 Debug build | native0 |
|
||||
| 초기값 선택 11개·기존 large DIRECT·대수·비선형 복구·HDF5 관련 focused 검사 | 37/37 PASS, CTest native0 |
|
||||
| 혼합 절점 오류 | RED native8 → GREEN; 기존 오류 code 전달 확인 |
|
||||
| 독립 수치 source/행동 검토 | bounded PASS, 발견한 mixed-node 분류 결함 CLOSED |
|
||||
| h=1/256 기존 실패 자유 plate runtime 회귀 | 65 frames·T=.25 완료, actual configured PASS (310.27초); 전체802 실행 안의 결과 |
|
||||
| 실제 C08b 전체5 grid | 모두T=.25 완료·회전 예외 없음; test2466.24초 FAIL은 시간 정확도/차수·P 감소 기준 |
|
||||
| 실제 C08a | 654.68초 FAIL: angular-a 정확도·finest noise 분리 미달 유지 |
|
||||
| 제외 없는 전체802 Debug CTest | 자연 종료11384.61초·native8:799 PASS·2 FAIL·1 SKIP; 두 C08 정확도 실패와 기존 C04a SKIP, 추가 예외0 |
|
||||
| Current-source Release 원본101-frame U/UR 비교 | CLI/comparator native0, U101 families PASS·UR 경고200; 전체441774 scalars finite/identity precheck PASS |
|
||||
| 독립 current-reference 물리 대조 | T relative4.34e-15, inertial power6.88e-16, force/moment balance1.13e-15/2.20e-16; BC exact0·energy 정의 대조 일치 |
|
||||
|
||||
첫 전체 실행은 독립 검토 finding의 source 수정 전에 중단했다. Native−1의 partial
|
||||
실행을 전체 회귀 또는 PASS로 사용하지 않는다. 수정본 전체 실행은 별도 기록이다.
|
||||
|
||||
## 현재 C08b 결과와 남은 정확도 문제
|
||||
|
||||
Production helper를 사용하는 실제 C08b에서 5개 grid가 모두 T=.25까지 계산됐다.
|
||||
출력된 최대 회전은 약 `.27384..27395 rad`이고 principal-chart 예외는 없다.
|
||||
새 h=1/256 runtime 전용 회귀도65 frames를 완료했다. 이는 조사한 runtime 결함의
|
||||
폐쇄 근거이며 C08b 테스트 전체의 PASS가 아니다.
|
||||
|
||||
| h | Energy 상대 결함 | P 상대 결함 | L 상대 결함 |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| 1/64 | 2.50654e-4 | 1.78188e-15 | 1.07274e-4 |
|
||||
| 1/128 | 6.41550e-5 | 5.54677e-15 | 2.73848e-5 |
|
||||
| 1/256 | 1.61261e-5 | 1.76759e-14 | 6.87806e-6 |
|
||||
| 1/512 | 4.02172e-6 | 2.84555e-14 | 1.71966e-6 |
|
||||
| 1/1024 | 1.00065e-6 | 8.03575e-14 | 4.30176e-7 |
|
||||
|
||||
E/L의 마지막 비율은 약 `.24881/.25015`로 기존 감소/finest 기준 이내다.
|
||||
P의 절대 크기는 roundoff 수준이지만 마지막 감소 조건은 FAIL이며 면제하지 않는다.
|
||||
Hidden v/a 결함의 finest 값은 약 `1.17632e-6/1.36947e-3`이다.
|
||||
이는 기존 진단량이며 N2 수용 tolerance에 임의 대입하지 않는다.
|
||||
|
||||
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,.47489732)`다.
|
||||
q_phi/v_phi/a_u/a_phi는 finest1e-4 기준을 넘고, q_phi/v_u/v_phi/a_u/a_phi의 일부
|
||||
마지막 차수도1.8 미만이다. **현재 C08b의 기존 noise separation 검사는 통과했으나
|
||||
정확도와 self-convergence 요구는 FAIL**이다. C08a의 noise INCONCLUSIVE와 구별한다.
|
||||
Null-only 회복 진단의 physical angular-a 차이는 약 `.474897322`, null은 `.00184377`로
|
||||
physical complement가 여전히 지배한다. 회복한 a를 history/output에 채택하지 않았다.
|
||||
Raw current 블록은 scratch `c08b-closed.log`, 재집계는 `c08b-current-metrics.json`이다.
|
||||
|
||||
C08a 변경본의 finest 전체 최대 angular-a 오차는 약5.67473e-4로1e-4를 넘는다.
|
||||
출력된 raw 마지막 차수는 약1.02838/1.02946이지만 finest v_phi/a_phi의 N7 noise
|
||||
분리가 미달이므로 1차 수렴을 인증하지 않는다. 정확도 FAIL과 order INCONCLUSIVE를
|
||||
구별한다. Scratch `c08a-closed.log`와 `c08a-current-metrics.json`은 현재 실행이며
|
||||
이전 consistent/lumped 조사 결과를 승계한 수치가 아니다.
|
||||
|
||||
## 실행 구성과 원본 비교의 경계
|
||||
|
||||
실제 configured 명령은 `cmake --build --preset windows-msvc-ninja-debug`와
|
||||
`ctest --preset windows-msvc-ninja-debug --output-on-failure`다. Thread 설정은
|
||||
MKL/OMP=1, CTest serial이다. `python scripts/execute.py`도 실행했으나 설정된
|
||||
1800초 deadline에 native1 timeout으로 종료했다. 이후 같은 preset의 전체802개를
|
||||
제외 없이 직접 실행해11384.61초 뒤 native8로 자연 종료했다. 802개 이름은 discovery와
|
||||
정확히 일치하며799 PASS·2 FAIL·1 SKIP이다. Timeout이나 부분 실행을 전체 통과로
|
||||
계산하지 않는다. 실제 CTest native는 `final-full-direct.native.json`의8이며 외부
|
||||
PowerShell 후속 스크립트의 exit1과 구분한다.
|
||||
실행기·preset·수치 기준은 변경하지 않았다.
|
||||
|
||||
전체 예외는 C08a/C08b의 시간 정확도·P 감소 판정과 C04a finest-resolution SKIP뿐이다.
|
||||
과거 consistent 구현의 실패 metric과 동일하다고 주장하지 않는다. 새 runtime 회귀·
|
||||
전체 C08b grid·기존 large DIRECT·원본 Hex8 선형/비선형101-frame smoke 및 관련
|
||||
결과 lifecycle 검사는 PASS다. 독립 수치·물리 검토는 이 범위와 남은 정확도 실패를
|
||||
구분한다. `closed-full-summary.json`과 `closed-identities.json`에는 실제 완료 목록,
|
||||
native·원문 SHA256 및 검증 시작 대비 production190·원본16·task6·binary4의
|
||||
hash 동일성을 기록했다. 기존 사용자 변경과 원본 reference는 보존했다.
|
||||
최종 독립 수치·물리 감사가 실제802개 목록·집계·native·identity를 재대조해 일치함을
|
||||
확인했으며 새 actionable source blocker는 발견하지 못했다. 문서 정적 검토는
|
||||
로컬 참조523개 누락0·`git diff --check` native0다. 이 판정은 C08 정확도 또는
|
||||
원본 energy 시간 응답의 적정성을 승인하지 않는다.
|
||||
|
||||
원본은 scratch byte copy에서 같은 production source의 MSVC x64 Release CLI로
|
||||
재생성했다. 원 INP SHA256은 `b8922243ca8ddfe20b1dd39f3123207f789a1a75f6b10dbb6b0bc0b5a40dfff5`,
|
||||
CSV는 `422ecf17609e14fd119d60a3d5af7a0d1bc4a95e0f556608a7d791e2718c56c5`로 보존됐다.
|
||||
CLI SHA256은 `49ce7cb58929fed92f564b99e85eed1ece835dd369d8f46eb483ce8eb96255a7`,
|
||||
결과 HDF5는 `e57cd58eb45af04f16b36c32a38d63a469fb0ead281238a72af721859d1fad21`다.
|
||||
U 최대 frame relative RMS는 `.0022824245023`로 원 기준 `.01` 이내다.
|
||||
UR 최대 RMS는 `.0253460487859`이며 row/RMS 경고200건을 보존한다.
|
||||
|
||||
새 결과의 전체101×729 states에서 독립 nodal kinetic measure로 T·관성 power·
|
||||
Pdot/Ldot와 support force/spatial moment·현재 arm을 대조했다. Full E 정의는 exact0,
|
||||
104개 고정 절점의 q/v/a/A와 free reaction은 exact0이며 shell 복구량은 finite다.
|
||||
이는 원본이 제공하지 않는 양에 대한 제한된 물리 대조이고 temporal accuracy는 아니다.
|
||||
원본은 최대 회전 약1.25636e-5 rad여서 큰 회전 검증을 대신하지 않는다.
|
||||
Energy defect 범위는 `[-1.39861876,+62.73624080]` [force·length]이고 양의 peak는 t=1이다.
|
||||
독립 energy 정의 차이는 약9.24e-14이므로 저장 오류로 설명되지 않으며, coarse DIRECT의
|
||||
에너지 시간 응답 적정성은 미검증이다. 이 값으로 새 conservation gate를 만들거나
|
||||
physical damping으로 해석하지 않는다. Raw current 결과·비교·독립 물리 기록은
|
||||
scratch `reference/`와 `physics-reference.{py,json}`, `physics-review.md`에 있다.
|
||||
|
||||
## 사용과 후속 개발 한계
|
||||
|
||||
CLI/입력 옵션·결과 schema는 그대로다. Supported shell HHT DIRECT에서 자동으로 초기값을
|
||||
선택하므로 별도 설정은 필요하지 않다. 작은 초기 잔차는 null regularity 또는 Newton
|
||||
수렴을 보장하지 않는다. Component infinity norm의 순위는 전역 좌표축 회전에 불변이
|
||||
아니며 C11 전체 covariance/결정론 coverage를 대체하지 않는다.
|
||||
|
||||
이전 두-grid 후보에서는 runtime이 완료돼도 physical angular acceleration 차이가 컸다.
|
||||
이번 시작 정책은 physical a의 복구나 DAE 시간 정확도를 변경하지 않는다. C08/N7의
|
||||
기존 정확도 요구와 noise 판정을 유지하며 runtime 개선과 시간 정확도 해결을 구별한다.
|
||||
가속도 복구 후보 [HHT-ADR-011](ADR.md)은 이번 변경으로 채택되지 않았다.
|
||||
@@ -1,9 +1,15 @@
|
||||
# HHT 내부 수치 판정
|
||||
|
||||
[Numerical Review](numerical-review.md#numerical-review)의 구현용 계약이다. IEEE binary64를 기준으로 하며 [정식화](formulation.md), [관성 상세](formulation-inertia.md), [검증 사례](verification-cases.md)를 함께 적용한다. 사용자 결정 [HHT-ADR-007](ADR.md)에 따라 이번 HHT 구현은 **consistent kinetic mass**를 사용한다. 아래 lumped 대조는 기존 eigen/대안 evidence의 경계이며 새 HHT lumped 지원 요구가 아니다. 외부 reference는 [TOLERANCE](../TOLERANCE.md)만 따른다.
|
||||
[HHT-ADR-012](ADR.md)의 `nodal-lumped-kinetic`이 현재 필수 검증 대상이다. M, I, c, DqI, DvI, T, P, L 및 rates를 동일한 rho*N_i*dV0 measure로 계산한다. 기존 [수치 기준](numerical-controls.md), [검증 사례](verification-cases.md), [reference 계약](reference-model.md)과 모든 허용값을 유지한다. 과거 consistent 구현의 결과는 변경본 통과로 승계하지 않으며 현재 실행 상태는 [PRD](PRD.md)의 checklist와 각 검증 evidence를 따른다.
|
||||
|
||||
## N1. Scale와 공통 규칙
|
||||
|
||||
HHT-ADR-018의 고정 sparse reduced basis에는
|
||||
[상세 정식화](formulation-fixed-null-basis.md)의 FB-04a 횡단성 operator와
|
||||
FB-06 augmented row/unknown scale를 적용한다. 실제 scaled solve 후 물리 단위로
|
||||
역변환하여 아래 full residual·correction 및 N3–N7를 검사한다. 이전 raw augmented
|
||||
solve의 backward-error PASS는 새 scaled operator의 evidence로 승계하지 않는다.
|
||||
|
||||
`ell`은 활성 요소의 **초기** 최대 edge 길이이며 finite positive여야 한다. `D=diag_i(ell I3,I3)`, `x=D^-1 q`, `w=D^-1 v`, `b=D^-1 a`, `B=D^-1 A`, `r=D^T E`, `Khat=D^T K D`, `Mhat=D^T M D`를 사용한다. x는 무차원, w는 시간^-1, b/B는 시간^-2, r/Khat은 energy, Mhat은 mass·length²다. D는 분석 내 고정이다. Element 독립 비교에는 해당 element의 ell을 양쪽에 동일 적용한다.
|
||||
|
||||
별도 표시 없는 vector norm은 infinity norm, matrix norm은 infinity norm이다. Frobenius/2-norm은 식에 표시한다. Euclidean/Frobenius norm에는 scaled sum-of-squares, 조립에는 stable source 순서의 reduction을 사용한다. 원 force와 moment, 원 translation과 rotation을 직접 합하지 않는다. N2의 u/phi 채널도 분리한다.
|
||||
@@ -29,7 +35,9 @@
|
||||
|
||||
모든 적용 가능한 gate의 **AND**다. a와 A의 서로 다른 chain-rule 계수를 반영한다. h-based rate gate는 증가량의 운동학 일관성을 검사하며 physical acceleration의 시간 정확도를 인증하지 않는다. 해당 정확도는 N7의 독립 검증으로 확인한다.
|
||||
|
||||
Newton 초기 추정은 직전 accepted geometry `q_trial=q_n`으로 둔다([HHT-ADR-010](ADR.md)). `q_p`, `v_p` 및 물리 a/보조 A의 관계는 정식화 그대로 유지한다. 이는 Newton 시작값이며 시간 scheme 변경이 아니다. 모든 trial에서 고정 q/v/a/A 성분은 exact 0이다. Residual이 이미 통과하는 초기 추정은 correction=0으로 명시하여 동일 gate를 평가한다. 그 외에는 `Keff`를 매회 새로 조립하고 correction을 수정 없이 적용한 후 residual을 다시 검사한다. Initial guess가 chart/geometry 밖이면 실패이며 clamp·line search·cutback으로 바꾸지 않는다.
|
||||
Newton 초기 추정은 [HHT-ADR-013](ADR.md)의 두 시작점 정책을 따른다. 동일한 frozen `q_p`, `v_p`, old physical a에서 q_p와 q_n의 rates·원래 endpoint E/Keff를 평가한다. 둘 다 유효하면 공통 D의 자유 `||D^T E||inf`가 작은 전역 좌표 벡터를 선택하며 exact tie는 q_p다. Exact q_p=q_n은 한 번만 평가한다. Constrained 반력은 이 비교에서 제외한다. 최초 q_p의 genuine geometry/director/principal-chart 부적합만 q_n 선택을 허용한다. 실제 첫 실패 절점의 valid-chart rate overflow, 질량·recovery·접선·기타 산술 실패, q_n 평가 실패 또는 scaled 비교 norm overflow는 즉시 실패다. 이는 초기값 선택이며 별도 수용 tolerance가 아니다. 선택된 assembly를 iteration0에서 그대로 사용한다.
|
||||
|
||||
`q_p`, `v_p` 및 물리 a/보조 A의 관계는 정식화 그대로 유지한다. q_n 선택에도 predictor를 덮어쓰지 않는다. 모든 trial에서 고정 q/v/a/A 성분은 exact 0이다. Residual이 이미 통과하는 초기 추정은 correction=0으로 명시하여 동일 gate를 평가한다. 그 외에는 `Keff`를 매회 새로 조립하고 correction을 수정 없이 적용한 후 residual을 다시 검사한다. 후속 Newton correction이 chart/geometry 밖이면 즉시 실패한다. 최초 시작점 선택을 correction의 retry·clamp·line search·cutback으로 확대하지 않는다.
|
||||
|
||||
최대 **100개의 Newton correction**을 허용한다. 100번째 correction 뒤의 candidate가 모든 gate를 만족하면 통과, 아니면 실패하며 101번째 solve는 없다. 기존 정적 100회/no-cutback 제한을 동일 실패 상한으로 채택한 것이고, 동적 문제가 100회 안에 수렴한다는 보장은 아니다. Backend success나 작은 correction 하나만으로 성공하지 않는다. Singular/invalid/nonfinite/linear backward-error failure는 즉시 실패다.
|
||||
|
||||
@@ -37,6 +45,15 @@ Newton 초기 추정은 직전 accepted geometry `q_trial=q_n`으로 둔다([HHT
|
||||
|
||||
HHT 기본 `alpha=-.05,beta=.275625,gamma=.55`, `A0=a0`, `A1=(1+alpha)a1-alpha*a0`. `q,v`는 A로 적분하고 endpoint I에는 a를 넣는다. 각 update 식의 결함을 **동일 차원의 우변 항 절댓값 합**으로 나누어 `<=1e-12`를 요구한다. 큰 q 두 값을 빼서 잃은 작은 increment를 숨기지 않도록 `q1-qn`과 저장된 predictor/correction의 일치도 함께 검사한다. Fixed boundary의 exact zero는 이 ratio보다 우선한다.
|
||||
|
||||
[HHT-ADR-016](ADR.md)의 reduced private p 경로에서는 whole/requested 두 증분의
|
||||
좌변을 실제 `(p_high+p_low)-old_accepted_high`의 EFT expansion으로 검사한다.
|
||||
독립 요청 trace와 원 HHT 우변 각각의 원래 uncancelled scale 및 `1e-12`는 유지한다.
|
||||
실제 저장 high가 pair의 round-to-nearest/ties-to-even 결과인지 별도로 검사하고
|
||||
high-only 증분 오차·표현 거리를 raw 진단으로 보존한다. 이전 accepted low를
|
||||
history에 숨겨 더하지 않으며, scale0 exact-zero·finite-first·fixed exact-zero를
|
||||
유지한다. ULP floor·허용량 추가·좌표 clamp는 없다. 다른 absolute update·full
|
||||
physical residual·CA/N7 및 schema/reference 계약은 바꾸지 않는다.
|
||||
|
||||
Scaled analytic null basis Z는 `Mhat_ff Z=0`, `Z^TZ=I`이며 ψ=`Z^T(D^Tg)_f`다. Physical inertia의 null action도 N4로 검사한다. 초기 ψ는 `|| |Z|^T (D^T s)_f ||`로, 초기 velocity/acceleration hidden residual은 각각 `|| |ψ_x| |w|+|ψ_t| ||`, `|| |ψ_x| |b|+|ψ_xx|[|w|,|w|]+2|ψ_xt| |w|+|ψ_tt| ||`로 나누어 `<=1e-10`을 요구한다. Matrix/tensor contraction 내부 상쇄도 분모에서 제거한다. 초기 acceleration solve는 physical range equation과 null consistency equation 둘 다 통과해야 한다. 비영 ψ에 대해 초기 q/v를 몰래 보정하지 않는다.
|
||||
|
||||
초기 q0=v0=0, STEP의 `0+` force 전값과 우측 Fdot=Fddot=0을 사용한다. `M a_P=F-f_int-c`, `Z^T D^-1 a_P=0` 후 `a0=a_P+D Z eta`의 η를 differentiated ψ 식으로 결정한다. Null acceleration을 0으로 고정하거나 pseudoinverse 결과만 채택하지 않는다. c0=0은 v0=0에서 유도되는 값이지 일반 초기조건 생략 규칙이 아니다.
|
||||
@@ -45,14 +62,16 @@ Accepted endpoint의 ψ도 `<=1e-10`으로 검사하되 denominator는 `|| |Z|^T
|
||||
|
||||
## N4. 질량·null·대수 regularity
|
||||
|
||||
HHT-ADR-017의 제한 Newton 정책은 아래 질량·regularity 검사를 대체하지 않는다.
|
||||
|
||||
Analytic expected null은 각 node의 `[0;Jl^-1 d]`와 **실제 free component 공간의 교집합**이다. Constrained 성분 중 하나라도 정확히 비영인 null vector는 그 node의 admissible null이 아니다. Tiny nonzero를 0으로 취급하지 않는다. Rank-changing partial BC 구성은 regular branch를 벗어나므로 실패한다. 처음 예상한 rank를 numerical eigenvalue cutoff로 다시 정의하지 않는다. 지정 reference의 625 free nodes는 expected positive dimension 3125/null 625이며 실측 rank가 아니다. Z의 nodal 방향은 위 analytic 식을 positive norm으로 정규화하여 연속적으로 정의한다. Trial마다 eigen/SVD basis나 최대성분 부호 규칙을 새로 선택하여 ψ 미분에 불연속을 넣지 않는다.
|
||||
|
||||
| 대상 | 판정·수치 |
|
||||
| --- | --- |
|
||||
| `Mhat` symmetry, analytic null action | `||Mhat-Mhat^T||F/||Mhat||F <=1e-12`; `||Mhat Z||F/(||Mhat||F ||Z||F)<=1e-12`. Empty Z는 N/A |
|
||||
| Basis·complement | `||Z^TZ-I||F/sqrt(nz)<=1e-12`, `||P^TZ||F<=1e-12`, `[P Z]` Gram도 `1e-12`; deterministic basis sign/source ordering |
|
||||
| Positive mass | Consistent element physical20와 lumped node physical5의 projected scaled block에 Cholesky strict-positive pivot; assembled free physical mass factor도 SPD. Small positive pivot을 없애지 않음 |
|
||||
| Local conditioning | 각 nonempty element/node positive block의 `rcond_inf=1/(||B||inf ||B^-1||inf) >=2^-32` (약 `2.3283064e-10`). Small-block triangular solves로 계산하고 global dense inverse는 만들지 않음 |
|
||||
| Positive mass | 채택된 lumped 질량에도 기존 element 전체 physical20 projected scaled block의 Cholesky strict-positive pivot 검사를 유지한다. Assembled free physical mass factor도 SPD이며 small positive pivot을 없애지 않음 |
|
||||
| Local conditioning | 기존 element 전체 physical20 block의 `rcond_inf=1/(||B||inf ||B^-1||inf) >=2^-32` (약 `2.3283064e-10`)를 유지한다. Node별 physical5만 검사하는 비교 후보보다 엄격하며 nodal mass disparity도 포함한다. Small-block triangular solves로 계산하고 global dense inverse는 만들지 않음 |
|
||||
| Lumped scalar positivity | finite `m>0,j>0`, `j-(s/m)*s>0`; `m*j-s*s`의 overflow/underflow에 판정을 맡기지 않음. Independent centered thickness integral과 `1e-12` 대조 |
|
||||
| Mass/inertia identities | Scalar Ck entry error / `[m_e(t/2)^k]`, 총질량·uniform translation energy·직접 volume kinetic energy·Cholesky reconstruction: 각각 `1e-12`. Nonlinear physical inertia null action과 kinetic power identity는 `1e-10` |
|
||||
|
||||
@@ -93,6 +112,51 @@ Temporal 검증에서만 다음 **read-only defect solve**를 추가한다. 마
|
||||
|
||||
시간오차는 각 grid의 전체 시점에서 위 estimate/산술 지표의 최댓값보다 **100배 커야** order evidence로 사용한다. 미달이면 roundoff/iteration dominated로 **inconclusive**, 통과가 아니다. 정해진 coarse grids 또는 고정밀 독립 oracle로 다시 검토하며 실패한 판정값을 완화하지 않는다. 실제 shell self-convergence에는 C08의 별도 기준을 적용한다. 일반 production analysis/reference 비교에 이 두 추가 solve를 매 frame 수행하라는 요구는 아니다.
|
||||
|
||||
### 승인된 reduced-coordinate 경로의 N2/N7 변환
|
||||
|
||||
[HHT-ADR-014](ADR.md)와 [희소 augmented 정식화](formulation-reduced-coordinate.md)의
|
||||
경로에서는 full-coordinate `eta_x`에 고정 Newmark 계수를 곱하는 위 전파식을
|
||||
그대로 적용하지 않는다. 실제 correction 및 두 read-only defect solve의 네
|
||||
block `(delta p, delta z, delta vz, delta az)`를 모두 보존한다.
|
||||
각 solve별 full physical variation은
|
||||
`delta q=L_p delta p+L_z delta z`,
|
||||
`delta v=L_p gamma/(beta h) delta p+L_z delta vz`,
|
||||
`delta a=L_p/[ (1+alpha)beta h^2 ] delta p+L_z delta az`이며,
|
||||
public `delta A=(1+alpha)delta a`다. 이전 accepted physical a는 고정이다.
|
||||
각 측정량의 채널/node norm은 이 full variation을 N1 및 case amplitude로
|
||||
정규화한 뒤 마지막 correction·linear defect·accepted nonlinear defect의
|
||||
norm을 합한다. Private `delta Ar=delta p/(beta h^2)`도 N2에서 별도로 검사한다.
|
||||
|
||||
Accepted endpoint defect solve는 실제 graph의 hidden 0/1/2 residual을 포함하거나,
|
||||
별도로 계산한 embedding uncertainty를 해당 물리량의 bound에 합해야 한다.
|
||||
Auxiliary defect를 버리고 `J delta p`만 사용하는 것은 허용하지 않는다.
|
||||
|
||||
[HHT-ADR-017](ADR.md)의 restricted-last에는 N2-L 검사 영역이 실제
|
||||
scaled `K[J,J]`인 경우가 추가된다. 원 backward-error threshold는 `1e-12`다.
|
||||
원 full endpoint N2·hidden·N3/N4는 계속 요구한다. Trigger/thaw·copy·100회
|
||||
경계는 [승인 명세](c09-channel-newton-proposal.md)를 따른다.
|
||||
|
||||
이 경우 N7은 같은 last trial의 full K/RHS를 보존하여 다음 네 항을 사용한다:
|
||||
actual last correction, 실제 restricted linear defect 해(zL, zero-U embed),
|
||||
**제외 U 행도 포함한** full-model last linear defect 해(zM), fresh accepted
|
||||
full residual/hidden defect 해(zN). 각 vector를 원 physical q/v/a/private Ar/public A
|
||||
map으로 변환하고 norm을 각각 구한 뒤 합산한다. Restricted/full/fresh defect
|
||||
solve 모두 실제 operator의 N2-L·finite 검사를 요구한다. Full-last는 기존 세
|
||||
항을 유지한다. Full-model defect solve 실패를 restricted 성공으로 대체하지
|
||||
않으며 estimator의 보수성 때문에 factor100 미달이면 INCONCLUSIVE다.
|
||||
[독립 검토의 상세 식](numerical-review-channel-newton.md)을 따른다.
|
||||
Copied translation의 inherited CA radius는 계속 graph/rate map에 포함하며
|
||||
fixed-path CA는 mode-branch 민감도의 인증이 아니다. Defect 해는 read-only이고
|
||||
production state에 적용하지 않는다.
|
||||
Position subtraction에 의존하지 않는 carried-Ar 산술 해상도는
|
||||
[CA-01–06](formulation-carried-a-noise.md)의 이력 및 업데이트 연산 bound를
|
||||
사용하고 physical-rate reconstruction의 산술 오차도 별도로 보존한다.
|
||||
기존 position-cancellation 지표를 새 경로의 인증 bound로 승계하지 않는다.
|
||||
구체적인 독립 검산·구현 검토 범위는
|
||||
[reduced 수치 검토](numerical-review-reduced-coordinate.md)에 기록한다.
|
||||
위 변환은 **100배 separation**, 기존 N2/N7 허용값과
|
||||
FAIL/INCONCLUSIVE 판정을 변경하지 않는다.
|
||||
|
||||
동일 binary/runtime/thread/input 세 실행의 source/frame/diagnostic order와 sparse structure는 exact 일치, scaled scalar state 차이는 `1e-12` 이하를 요구한다. Failed trial은 committed q/v/a/A·history·frame count·기존 최종 HDF5를 바꾸지 않아야 한다. Reference fixed DIRECT는 100 increments이며 원 n*h schedule과 identity를 검사한다.
|
||||
|
||||
수치값의 근거: `u=2^-53`, `gamma4096≈4.55e-13`에 대해 작은 dense/27점 항등식 `1e-12`, 그보다 100배 큰 assembled residual `1e-10`을 사용한다. `rcond>=2^-32`는 `gamma64/rcond≈3.06e-5`의 local worst-case 규모를 제한하며 보편 forward accuracy 보장이 아니다. FD `1e-6`/zero `1e-10`, objectivity `1e-10`, balance `1e-8`은 기존 [비선형 검토](../nonlinear-static-newton-raphson/numerical-review.md) 및 [eigen2 controls](../mitc4-shell-feast-eigen2/numerical-review-controls.md)의 해당 식을 현재 관성/좌표에 대조해 채택했다. 기존 정적 Newton 외력 상대 1%·typed absolute `1e-3`, FEAST controls, eigen 외부 RMS 예외는 채택하지 않았다. 새로운 runtime/solver 사례의 실행 상태는 아직 **NOT RUN**이며 숫자를 실행 통과처럼 보고하지 않는다.
|
||||
수치값의 근거: `u=2^-53`, `gamma4096≈4.55e-13`에 대해 작은 dense/27점 항등식 `1e-12`, 그보다 100배 큰 assembled residual `1e-10`을 사용한다. `rcond>=2^-32`는 `gamma64/rcond≈3.06e-5`의 local worst-case 규모를 제한하며 보편 forward accuracy 보장이 아니다. FD `1e-6`/zero `1e-10`, objectivity `1e-10`, balance `1e-8`은 기존 [비선형 검토](../nonlinear-static-newton-raphson/numerical-review.md) 및 [eigen2 controls](../mitc4-shell-feast-eigen2/numerical-review-controls.md)의 해당 식을 현재 관성/좌표에 대조해 채택했다. 기존 정적 Newton 외력 상대 1%·typed absolute `1e-3`, FEAST controls, eigen 외부 RMS 예외는 채택하지 않았다. 문서 gate 당시 새로운 runtime/solver 사례는 **NOT RUN**이었다. 현재 실행 결과는 [PRD](PRD.md)와 연결된 evidence를 따르며, 기준 숫자 자체를 실행 통과처럼 보고하지 않는다.
|
||||
|
||||
@@ -0,0 +1,117 @@
|
||||
# Channel 제한 Newton 제안의 독립 수치 검토
|
||||
|
||||
상태: **승인 정책 source 정적 적합·focused8 PASS; actual C09 covariance FAIL**, 2026-10-13. 아래 독립 제안 검토의 restricted Newton/N7 정책을 사용자가 승인했다. 승인과 구현·실행 통과는 구별한다. Reviewer는 원 physics·threshold·production source를 변경하지 않았다. [제안](c09-channel-newton-proposal.md), [N2/N7](numerical-controls.md), [RC augmented 수식](formulation-reduced-coordinate.md), [주 검토](numerical-review-reduced-coordinate.md)를 대조한다.
|
||||
|
||||
## 실제 존재증거와 제한
|
||||
|
||||
[독립 frozen-state 감사](../../.dryforge/hht-remediation-20261012/approved-review/independent_fixed_translation_audit.json)는 captured final100을 시작한3prefix/48row에서 translation q/v/a의72개 값이 bitwise 유지됨을 확인했다. Source/library/inertia/final-log identity4개도 일치한다. 원 full N2의 U ratio=`8.70942824e-16`, phi는 `1→0.0089803070→1.40729921e-13`이다. [Scratch source](../../.dryforge/hht-fixed-translation-c09-20261013/fixed-procedure.cpp)는 원 hidden/equilibrium/G regularity/N3 검사를 통과한 뒤 commit 이전에 의도 종료한다. Native1/5.703s는 실제 solver 실패나 full C09 PASS가 아니다.
|
||||
|
||||
이는 원 endpoint 기준을 만족하는 binary64 상태의 존재증거다. 자연 predictor에서 적응 정책이100회 이내 도달하거나 일반 coupling 문제에 안전하다는 증거는 아니다. 원 full100 실패가 수용 가능한 상태의 비존재라는 해석은 배제한다.
|
||||
|
||||
## 승인해야 하는 정책과 N2-L 영역
|
||||
|
||||
Full scaled augmented 식을 `Khat*x=-rhat`, unknown을 `(dp,dz,dvz,daz)`로 둔다. Translation p index U를 제외한 J에는 angular p와 **모든** z/vz/az 및 모든 hidden0/1/2 row가 포함된다. 실제 제한 step은 `Khat[J,J]*xJ=-rhat[J]`, `xU=0`이다. 원 augmented row/column scaling을 먼저 적용하거나 그와 동등한 selector restriction을 사용하며 새 scale를 만들지 않는다.
|
||||
|
||||
`Khat[J,J]`의 N2-L backward error `<=1e-12`는 **실제 제한 선형식에 대한 검사**다. 원 all-free `Khat*x+rhat` 검사와 같지 않다. 제외 U row에는 `Khat[U,J]*xJ+rhat[U]`가 남는다. 따라서 제안의 “원 backward check 사용”만으로 기존 전체 선형계 N2-L을 보존했다고 표현하면 안 된다. 승인 범위에는 full Newton 대신 restricted step을 허용하고 실제 선형식의 N2-L 영역을 J로 바꾸는 정책을 명시해야 한다. 원 full endpoint N2/N3/N4·hidden/regularity는 계속 AND로 유지한다. N7에서 full-model defect도 보존한다.
|
||||
|
||||
제한 K의 singularity/invalid/nonfinite/backward failure는 즉시 실패다. Full K의 가역성은 principal submatrix의 가역성을 보장하지 않으므로 자동 full-solve fallback을 추가하지 않는다. 실패 branch의 rollback·diagnostic은 원 procedure와 같아야 한다. Freeze는 물리 BC 또는 fixed chart의 변경이 아니다.
|
||||
|
||||
## Trigger·해제·예산의 구체 계약
|
||||
|
||||
1. 매 candidate에서 원 전체 assembly/graph/rates와 N2를 평가한다. 비어 있지 않은 U channel의 residual 및 **실제 마지막 mapped correction**의 translation q/v/a/public A와 관련 private Ar gate가 모두 통과하고, phi residual이 실패한 경우에만 제한 모드가 가능하다. Empty channel/N/A를 임의 true로 처리하거나 phi correction-only 실패까지 trigger를 확대하지 않는다. 모든 scale0 branch는 원 exact-zero다.
|
||||
2. 제한 모드의 translation p high/low·Ar는 bitwise copy하며 predictor·old history·selector·BC를 바꾸지 않는다. Corresponding vp/ap의 실제 recurrence 값도 유지한다. Zero correction을 다시 TwoSum에 넣어 low/high를 재정규화하거나 CA radius를 reset하지 않는다. 실제 copy에는 새 산술 오차를 만들지 않되 inherited radius는 그대로 남긴다.
|
||||
3. Angular p/Ar 및 all auxiliary increments를 원 방식으로 적용하고 fresh graph/rates/full E/scale를 다시 평가한다. U의 residual 또는 관련 mapped correction gate가 벗어나면 **다음 solve**를 full로 선택한다. 이미 얻은 candidate를 폐기하여 직전 상태로 retry하거나 budget을 되돌리지 않는다. 전체 gate가 통과하면 원 acceptance/commit 절차로 간다.
|
||||
4. 두 모드의 실제 적용 corrections를 합쳐 원100회다. 100번째 후 acceptance는 가능하지만101번째 solve·retry·cutback은 없다. 동일 original pold/pp 시작점 정책과 source-order tie를 유지한다. 다음 increment는 새 full 시작이며 mode를 accepted 물리 history나 public schema에 영속화하지 않는다.
|
||||
|
||||
공용 production와 C08 verification executor에 동일 분기·scaling·update·count 의미가 필요하다. Auxiliary correction이 남아 있으므로 제한 solve를 angular dp-only correction으로 취급하면 안 된다.
|
||||
|
||||
## 구현 가능한 N7 대응 권고
|
||||
|
||||
이 절은 원 factor100·grid/amplitude·FAIL/INCONCLUSIVE를 유지하는 제안 명세이며 승인 후 구현/회귀가 필요하다. `S_J`를 J에서 full augmented unknown으로 zero-U embed하는 selector로 둔다. 모든 defect solve는 read-only이며 결과를 state/history에 적용하지 않는다.
|
||||
|
||||
| 증거 | 원 operator와 RHS | 필요한 해·검사 |
|
||||
| --- | --- | --- |
|
||||
| Actual last restricted linear defect | `eJ=Khat_last[J,J]*dxJ+rhat_last[J]` | `Khat_last[J,J]*zLJ=-eJ`; actual J N2-L, `zL=S_J*zLJ` |
|
||||
| Last full-model defect | `eM=Khat_last*(S_J*dxJ)+rhat_last` **전체 row** | `Khat_last*zM=-eM`; full-domain N2-L. Omitted U row·all hidden row를 포함하며 restricted residual로 대체하지 않는다. |
|
||||
| Accepted endpoint nonlinear defect | Fresh accepted `Khat_*`, full `rhat_*=(Ep,psi0,psi1,psi2)` | `Khat_* *zN=-rhat_*`; full-domain N2-L. U residual·auxiliary blocks를 누락하지 않는다. |
|
||||
|
||||
Last full-model tangent/RHS는 **실제 마지막 restricted solve와 같은 trial**에서 보존해야 한다. Fresh accepted tangent는 별도다. Full factorization/solve/finite/backward 검산이 실패하면 N7 evidence는 불완전/실패이며 restricted 성공으로 통과시키지 않는다. 일반 production analysis에 이 추가 solves를 강제하자는 제안은 아니다.
|
||||
|
||||
원 N7 mapping을 각 vector마다 적용한다. Scaled unknown을 먼저 물리 단위로 역변환하여
|
||||
`dq=Lp*dp+Lz*dz`, `dv=Lp*cv*dp+Lz*dvz`, `da=Lp*ca*dp+Lz*daz`, `dAr=dp/(beta*h²)`, `dA=(1+alpha)*da`를 사용한다. 같은 last trial의 map으로 actual `dx_last`, `zL`, `zM`를, accepted map으로 zN을 변환한다. Constrained entries는 exact0이고 norm은 각 term별로 먼저 구한다.
|
||||
|
||||
권고 estimator는 restricted-last인 경우 `eta_y=||map_y(dx_last)||2+||map_y(zL)||2+||map_y(zM)||2+||map_y(zN)||2`다. Full-last에서는 기존3term 식을 그대로 사용하여 zM=zL을 중복하지 않는다. Restricted 식의 두 linear 항은 conservatively 중복될 수 있으나 actual solve noise와 full-model omitted-row defect를 모두 보존한다. 해당 보수성 때문에 factor100을 못 만족하면 INCONCLUSIVE이며 항을 삭제·clamp하지 않는다. 이 식은 nonlinear forward-error bound가 아니라 원 N7와 같은 defect estimator다.
|
||||
|
||||
Whole-history CA와 graph/rate arithmetic INDICATOR는 actual restricted operation path에 맞추어 유지한다. Frozen translation radius도 downstream graph dependence에 계속 들어간다. Mode perturbation/branch 민감도는 fixed-path CA의 인증 범위 밖이며 FD/고정밀 독립 증거와 구분한다. Public full A noise는 actual physical da의 filter이고 private Ar noise와 분리한다.
|
||||
|
||||
## 승인 후 필요한 검증과 잔여위험
|
||||
|
||||
- Natural predictor→mode 진입→fresh full acceptance의 actual C09, proper-Q·finite-phi·shared/warped·deterministic partitions를 실행한다. Frozen-final 존재증거를 이 검증 대신 사용하지 않는다.
|
||||
- U-pass/phi-fail trigger, U-thaw, no-phi/no-U branch, constrained DOF exact0, restricted singularity/nonfinite/N2-L failure·rollback 및 combined100/101 boundary를 검증한다. Mode 왕복에 별도 hidden retry budget을 만들지 않는다.
|
||||
- N7 helper는 omitted-U residual이 비영인 synthetic coupled matrix에서 restricted linear defect0이어도 full zM/zN 비영임을 검출해야 한다. Unknown/hidden block omission mutations와 mapping·radius 이력을 대조한다.
|
||||
- Actual strategy를 적용한 C08 전체 승인 grid·factor100과 configured full MSVC Debug/CTest·필수 reference를 fresh identity에 연결한다. Public v2/full A semantics와 writer는 바꾸지 않는다.
|
||||
|
||||
Full-equation roots는 그대로지만 내부 해 탐색 경로는 달라지고 finite N2에서 선택되는 endpoint도 미세하게 달라질 수 있다. Principal submatrix singularity, 강한 U/phi coupling·mode 왕복, graph chart covariance 및 큰 orbital/tiny intrinsic quantization은 남는다. 원 기준을 통과하도록 무조건 보장하는 방법으로 제시하지 않는다.
|
||||
|
||||
## 구현 source 대조 준비
|
||||
|
||||
기존 production `CorrectionRecord.correction_pass`는 두 channel의 AND이고 controller의 `correction_pass`도 global이다. U-only trigger는 원 correction 배열0 및 관련 private Ar 검사를 별도로 취합해야 한다. 전체 correction-pass를 trigger로 쓰거나 phi residual PASS/correction-only FAIL까지 확대하지 않는다. Initial correction0·빈 channel·nonfinite는 원 explicit branch를 적용한다.
|
||||
|
||||
기존 full `LastSolve`는 full system/correction만 저장하므로 actual restricted K/RHS와 selector mapping을 추가로 보존해야 한다. Actual zL과 full zM/accepted zN의 source-trial authority를 구분하고 all auxiliary blocks를 map한다. Frozen copy의 high/low/Ar/trace/history-radius는 production/controller가 같은 operation을 수행해야 하며 zero TwoSum/Neumaier 호출로 미세하게 바뀌지 않는지 검사한다. 담당자의 실제 수정 완료 source와 회귀 evidence가 도착하기 전 정적/실행 PASS로 표현하지 않는다.
|
||||
|
||||
## Production 정책의 정적 대조
|
||||
|
||||
[Production 정적 identity](../../.dryforge/hht-remediation-20261012/approved-review/channel-production-static-identities.json)의 source에서 `ShouldRefineAngular`는 U-only4metric/private Ar equality·finite/비어 있지 않은 두 channel·phi residual 실패를 검사한다. Global correction-pass를 trigger로 쓰지 않는다. `SelectAugmentedSolve`는 actual full augmented operator의 J principal submatrix와 RHS를 source 순서로 선택하고 모든 auxiliary index를 유지한다. `EmbedAugmentedSolution`은 제외 U를 exact0으로 남기며 finite/monotone index를 검사한다. Factorization/solve/N2-L 실패는 제한 단계 문맥과 함께 즉시 실패하며 full fallback은 없다.
|
||||
|
||||
Actual procedure는 restricted step의 U high/low·Ar·trace 합/보정/uncancelled sum 갱신을 skip한다. 다음 evaluation의 U vp/ap는 retained 값으로 copy하며 predictor/old history를 바꾸지 않는다. U가 fresh residual에서 벗어나면 다음 solve의 shared predicate가 full을 선택하고 rate-copy flag를 해제한다. 원 evaluation/accepted 검사·100회 loop와 모든 commit 전 hidden/equilibrium/G/N3·full A 검사는 유지된다. 이 범위는 **정적 적합**이다.
|
||||
|
||||
새 `HhtReducedChannelNewton`3검사는 trigger/thaw predicate·각4metric/private gate/NaN/empty, allaux restriction/zeroU mapping/omitted-U full-linear 실패, restricted singularity와 full invertibility 차이를 검증하는 올바른 범위다. 실제 procedure의 bitwise copy·mode 왕복/rollback·combined100 및 C08 N7의 네 vector/full authority는 이 helper tests만으로 닫지 않는다. Controller가 편집 중인 현재 source와 실제 runtime은 별도 PENDING이다.
|
||||
|
||||
## Controller/N7 actual source 대조 중
|
||||
|
||||
Current `LastSolve`는 original full system, actual selected system/mapping 및 selected/full correction을 보존한다. `RecordNoise`의 selected RHS는 `rhs_selected−K_selected*dx_selected`이며 zL을 full unknown으로 zero-U embed한다. Restricted-last에서만 full RHS `rhs_full−K_full*dx_full`로 별도 zM을 풀고, fresh accepted full augmented K/RHS로 zN을 푼다. 모든 solves의 actual domain에서 N2-L을 적용하며 q/v/a mapping·채널별 norm을 먼저 계산하는3/4term 분기는 승인 식과 정적으로 일치한다. Endpoint hidden RHS의 기존 plain contraction은 actual residual 산술이고 별도 graph/rate arithmetic INDICATOR를 유지하며 floor를 추가하지 않았다.
|
||||
|
||||
최초 source의 다음 두 parity finding을 owner에게 전달했다. 후속 수정본의 정적 closure는 아래에 기록한다.
|
||||
|
||||
- Controller의 initial U correction metrics는 infinity/private-pass=false지만 production은 explicit correction0/private-pass=true다. 첫 candidate에서 U-pass/phi-fail이면 서로 다른 solve를 선택하므로 승인된 initial0 branch를 동일하게 적용해야 한다.
|
||||
- Frozen controller U vp/ap와 reconstruction radius를 매 evaluation에서 recurrence로 다시 계산한다. Production의 retained vp/ap copy와 동일하게 실제 값 및 inherited 해당 radius를 유지하여 actual operations/CA를 맞춰야 한다. p/Ar/trace update skip만으로 이 경계가 자동 인증되지는 않는다.
|
||||
|
||||
새 `RestrictedLastSolvePreservesOmittedTranslationDefect`는 synthetic coupled `K=[[1,2],[3,1]]`에서 restricted defect0이어도 omitted U defect−2 및 full zM 비영임을 확인한다. 이 수학/solve 회귀는 적합하지만 `RecordNoise`를 직접 실행하지 않으므로 실제4term aggregator에서 zM을 누락하는 mutation을 검출하지 않는다. Actual aggregation의 측정/omission 또는 분리 raw-norm evidence는 별도 필요하다.
|
||||
|
||||
## Postfix source와 focused 실행 closure
|
||||
|
||||
두 controller parity finding은 **정적 CLOSED**다. Initial U corrections는 explicit0/private-pass=true이며, restricted 후 실제 U vp/ap와 coordinate/v/a/private-Ar의 네 inherited radius를 저장해 다음 trial에 copy한다. U high/low/Ar/trace 갱신을 skip하며 full 모드로 돌아가면 원 recurrence를 재개한다. Private Ar는 원 normalized correction gate와 함께 `(1+alpha)*delta_a=delta_p/(beta*h²)`의 finite-first `1e-12`/scale0 exact-zero 검사를 적용하여 production과 일치한다. 현재 source의 actual selected/full/fresh authority 및 N7 네 term의 부호·mapping에는 정적 blocker를 찾지 못했다. [Postfix 정적 identity](../../.dryforge/hht-remediation-20261012/approved-review/channel-postfix-static-identities.json)는 runtime 인증과 구분한다.
|
||||
|
||||
[공용 focused Debug log](../../.dryforge/hht-remediation-20261012/adr017-channel-newton-policy-debug.log)와 [native0](../../.dryforge/hht-remediation-20261012/adr017-channel-newton-policy-debug.native.json)은8/8 PASS(23.79s)다. Shared policy3검사, omitted-U synthetic, external-Hessian helper2검사, correction100/101 및 failure/rollback lifecycle 검사를 포함한다. Helper 경계와 원 lifecycle의 통과이며 실제 mode 왕복100회 trajectory·N7 aggregator omission을 모두 검증한 것은 아니다. Controller parity 최종 수정 이후의 temporal 실행 통과로 승계하지 않는다.
|
||||
|
||||
[Private 자연 proper-Q 실행](../../.dryforge/hht-channel-newton-20261013/actual-runtime.log)은 원 predictor/초기화에서 실제 production2증분을 수행해 native0/23.685s PASS다. Captured final state나 의도 cutoff를 사용하지 않았지만 이 driver는 solver 성공을 검사하며 full covariance assertions를 실행하지 않는다.
|
||||
|
||||
후속 [공용 C09 native8](../../.dryforge/hht-remediation-20261012/adr017-natural-c09-debug.native.json), [raw log](../../.dryforge/hht-remediation-20261012/adr017-natural-c09-debug-raw.log), [production identity](../../.dryforge/hht-remediation-20261012/adr017-natural-c09-debug-source-identity.json)는113.03s의 **FAIL**이다. Serial/TBB/serial·proper-Q rigid translation·비영회전·proper-Q 비영회전의6개 solver HasValue 검사는 통과했으나 rotated vector와 triad/director covariance가 `1e-10`을 넘었다. 원 판정은 FAIL로 유지한다. 이 aggregate log만으로 지배 history/quantity와 원인을 확정하지 않는다.
|
||||
|
||||
주 검토의 nonlinear reduced-coordinate 반례는 실제 실패의 가능한 mechanism이다. Actual source/rotated chart의 `p'=L'_p^T R6 Q(p,t)` recurrence defect와 동일 endpoint의 force/mass/hidden covariance를 별도로 대조해야 actual fixture에 연결된다. Root 수렴 성공·continuous objectivity 또는 restricted step의 exact0 U만으로 이산 history 공변성을 인증하지 않는다. 현재 C08 전체 승인 grid/N7 actual aggregation·전체 Debug·원본 reference는 이 focused 증거로 닫지 않는다.
|
||||
|
||||
## Initial triad fixed basis 후보의 이론 검토
|
||||
|
||||
이 후보는 **미승인 chart/integrator 정책**이며 현재 source 교정이나 actual C09 원인의 확정이 아니다. Null이 있는 절점에서 fixed orthonormal `B=[t1,t2,n0]`를 초기 triad로 구성하고 `phi=t1*p1+t2*p2+n0*z`로 둔다. Proper-Q에서 baseline triad가 `B'=Q B`이면 reduced rotational p와 z가 그대로 유지된다. Translation p의 변화는 선형 Q이고 B는 시간에 상수이므로 HHT predictor·p/vp/Ar recurrence와 chain-rule lift가 frame change와 commute한다. 기존 global-component selector의 일반적인 nonlinear reduced-coordinate 변환 결함은 이 조건에서 제거된다. Continuous equation/roots를 보존해도 이산 scheme은 달라지므로 사용자 승인과 새 검증이 필요하다.
|
||||
|
||||
`B'=Q B`는 충분조건이며 필요조건은 아니다. Initial analytic null이 `n0'=s Q n0`, `s=±1`이면 해당 두 직교보완공간의 임의 ON basis 사이에 `T=Bp'^T Q Bp∈O(2)`가 존재한다. Cross block `Bp'^T Q n0`와 `n0'^T Q Bp`는0이며 `p'=T p`, `z'=s z`는 상수 선형이다. 따라서 initial tangent basis의 global-axis 선택이나 sign/tie가 달라도 retained plane을 보존하면 기존 nonlinear-chart 결함을 만들지 않는다. 앞의 stronger triad-objectivity 조건을 필수로 확대하지 않는다.
|
||||
|
||||
Actual `G=psi_q*Lz` regularity와 selector full-root equivalence의 `N(q)^T Lz` transversality를 각각 유지한다. Current moving null과 fixed n0의 transversality가 낮아질 수 있으며 principal rotation norm `<pi`만으로 이를 보장하지 않는다. 기존 fail-closed conditioning을 유지하고 임의 rechart를 추가하지 않는다. Partial global-component rotational BC는 B mixing과 일반적으로 commute하지 않는다. 정확 BC pullback을 새 범위로 도입하지 않는 최소 후보는 partial rotation 절점의 기존 component chart를 유지하는 명시적 혼합 정책이다. 이 subset에 일반 frame covariance를 주장하지 않는다. BC flag를 local coordinate의 같은 번호에 그대로 적용하면 원 물리 BC를 바꾸게 된다.
|
||||
|
||||
Actual augmented lift/selector residual은 index scatter 대신 constant sparse basis actions로 구성하고 모든 q/v/a·auxiliary·external derivative를 같은 basis로 변환해야 한다. Original full N2/hidden/N4 및 global result는 유지한다. N3 pair 의미·global reconstruction defect와 CA의 basis product/sum, N7 full mapped corrections도 새 actual operations에 맞추어 검토해야 하며 기존 index-only certificate를 승계하지 않는다. Frame0 원 full state의 basis roundtrip/reconstruction도 원 gate로 검사한다. Finite tolerance의 component infinity metric·mode trigger 및 floating rounding 때문에 위 exact-arithmetic 성질만으로 bitwise covariance나 모든 `1e-10` acceptance를 보장하지 않는다. Actual covariance/step refinement/partial-BC 실패 경계·genuine-C1/N5 및 원본 비교가 별도 필요하다.
|
||||
|
||||
## Actual covariance 진단의 독립 감사와 후보 대조
|
||||
|
||||
[독립 raw/Fraction 감사](../../.dryforge/hht-remediation-20261012/approved-review/independent_channel_covariance.json)는8개 case/40frame의 DOF·quantity inventory/finite 및15개 source/artifact SHA를 검산했다. Pure translation의 모든 원 comparison은 `1e-10` 이하다. Finite2/4/8의 angular q defect는 `4.244971e-7→1.000827e-7→2.197105e-8`, scaled angular a defect는 `2.594079e-6→6.559523e-7→1.690738e-7`로 감소하지만 원 기준은 모두 FAIL이다.
|
||||
|
||||
Actual configured fixed h와 stored binary64의 exact Fraction 계산에서 finite2 source selected XY의 position defect는 `<=2.335e-19`다. Dependent Z의 defect=`1.618323538e-6`이고 proper-Q 뒤 retained XY에 투영된 defect=`4.820072709e-7`다. 그 투영을 제외한 XY 잔여는 `<=1.64e-19`다. Public A의 source selected component가 private Ar와 같다는 현 계약으로 actual q/v/A recurrence를 대조했다. Stored high만 사용했으므로 pair low/N3 certificate의 재인증으로 표현하지 않는다. Source/rotated 두 chart에 같은 physical history를 넣어도 recurrence가 동시에 만족되지 않는 **actual 반례**이며, 원 full endpoint 수렴 성공과 양립한다. Restricted policy만의 원인으로 확정하지 않는다.
|
||||
|
||||
[Owner의 matched-state 진단](channel-newton-covariance-diagnostic.md)은 rotated trajectory 값을 사용하지 않고 source q/v/a/A만 Q로 변환해 fresh assembly했다. t=.01/.02에서 I absolute defect `<=5.55e-17`, Fint `<=1.475e-17`, mass unit-column action `<=3.39e-20`, primitive value `<=3.90e-20`다. Frame0 I의 `1.11e-16`도 보존한다. Aggregate native 측정을 읽고 source의 matched-state construction을 대조했으며 모든 raw coefficient를 독립 재조립한 것은 아니다. 해당 요소 계산의 차이가 trajectory force defect 약`5.95e-7`보다 훨씬 작고 exact recurrence 반례와 일치하므로 selector time-discretization의 좌표 의존성을 구체 원인으로 지목할 수 있다. 일반 모든 geometry/state 공변성의 증명은 아니다.
|
||||
|
||||
[Fixed null basis 제안](fixed-null-basis-proposal.md)의 최소-axis 선택은 unit n0에서 `|n0[k]|<=1/sqrt(3)`이므로 projection norm `>=sqrt(2/3)`이고 arbitrary tiny-vector fallback이 필요 없다. Null은 reference geometric director가 아닌 actual initial analytic `Jl(phi0)^-1*d(phi0)`를 정규화한다. ON complement의 상수 O(2) frame transition, partial-BC 혼합 정책 및 frame0 보존은 이론적으로 적합하며 사용자 제안 단계의 blocker를 찾지 못했다. 구현 시 기존 pivot 검사를 `N(q)^T Lz`로 일반화하고 G conditioning과 분리한다. Private basis index를 full DOF로 간주한 `%6` channel 분류/direct scatter는 사용할 수 없으므로 explicit channel/support metadata와 actual sparse injection을 production/CA/N7 전체에 적용해야 한다. 새 scheme/metadata/initial operations의 구현 및 검증 통과는 아직 PENDING이다.
|
||||
|
||||
## Actual N7 aggregator의 omitted-U 회귀 closure
|
||||
|
||||
후속 `RestrictedRecordNoiseIncludesFullModelOmittedUDefect`는 **실제 RecordNoise의 zM 누락 검출 공백을 해당 범위에서 CLOSED**한다. Actual shell의 endpoint/chart/operators를 두 호출에서 동일하게 두고, last full matrix는 identity와 U/angular `[[1,2],[3,1]]` coupling으로 구성한다. Baseline과 restricted의 selected J RHS·dx 및 fresh endpoint는 같고 full omitted-U RHS만 `2→0`이다. 따라서 actual correction·zL·zN은 동일하며 zM만 `0→(.4 U,−1.2 angular)`로 달라진다. 실제 함수의 summed mapped solve_noise 증가 assertion은 zM을 aggregator에서 삭제하면 실패한다. Synthetic full last matrix를 사용하는 검사이며 실제 trajectory의 모든 auxiliary omission·일반 N7 accuracy를 인증하지 않는다.
|
||||
|
||||
[최종 source freeze](../../.dryforge/hht-remediation-20261012/adr017-n7-final-source-freeze.json)의 controller SHA=`69B41710…C3D2ED1B`는 독립 확인한 actual source와 일치한다. Freeze 후 양 tree에서 해당 translation unit을 다시 compile/link한 native0를 확인했다. 최종 [Debug log](../../.dryforge/hht-remediation-20261012/adr017-n7-final-debug.log)/[native0](../../.dryforge/hht-remediation-20261012/adr017-n7-final-debug.native.json)는1 PASS/1.23s, [Release log](../../.dryforge/hht-remediation-20261012/adr017-n7-final-release.log)/[native0](../../.dryforge/hht-remediation-20261012/adr017-n7-final-release.native.json)는1 PASS/.62s다. 이전 edit/compile 경합 중 실행을 이 final identity의 근거로 사용하지 않는다. 본 회귀 추가 전 공식 C08a·orbit 실행의 identity도 별도로 보존하며 테스트 추가만으로 이전 binary hash를 갱신하지 않는다. C09 covariance FAIL 및 fixed-basis 제안 미적용 상태는 그대로다.
|
||||
@@ -0,0 +1,45 @@
|
||||
# Neumaier radius의 의존성 및 이력 경로 검토
|
||||
|
||||
2026-10-13. **유효하지만 느슨한 diagnostic bound. Exponential private feedback 가설은 해당 소스에서 성립하지 않는다.**
|
||||
검토 대상은 controller SHA `3387D8F52719311624B8158EBB7E3EA6A6C5BCA9336C6D074E051D8DFEC3A4F6`다.
|
||||
Production·tests·기준을 수정하지 않았다. [기본 검토](numerical-review-fixed-null-basis.md)의
|
||||
frozen stored operator arithmetic indicator 범위에 한정한다.
|
||||
|
||||
## 실제 전달 경로
|
||||
|
||||
`RunPlate` commit은 private p/vp/ap/Ar radius를 각각 candidate_p/vp/ap/ar radius로 직접 상속한다.
|
||||
다음 predictor도 그 private radius를 사용한다. `full_indicator`는 별도 `arithmetic_radii`에 저장되며
|
||||
다음 graph 호출에서 incomplete guard 및 public-A filter의 `alpha*old.acceleration` radius에 사용된다.
|
||||
Full q/v/a indicator를 매 increment private selector로 재투영하는 경로는 없다.
|
||||
|
||||
`RecordNoise`는 full indicator를 projection/lift한 selector radius를 별도 진단으로 기록한다.
|
||||
이 결과는 history에 쓰지 않으며 C08의 factor100 gate는 `solve_noise`와 `arithmetic_noise`를 사용한다.
|
||||
Empty-null은 원 selector radius를 즉시 반환하므로 해당 graph 변환도 없다.
|
||||
따라서 repeated9배 private feedback으로 exponential Inf가 생긴다는 주장은 이 소스의 증거가 아니다.
|
||||
Private carried-Ar 원 primitive recurrence의 보수성·h 의존성과 arithmetic overflow는 별도 가능성이며,
|
||||
그 bound를 reset/clamp하여 PASS로 바꾸지 않는다.
|
||||
|
||||
## 느슨함의 크기와 미채택 개선 후보
|
||||
|
||||
[독립 Fraction probe](../../.dryforge/hht-remediation-20261012/approved-review/independent_neumaier_radius_dependency.json)는
|
||||
단일 exact identity support에서 입력 radius `B=1e-8`에 대해 기존 sum radius 약 `3.00000003B`,
|
||||
projection 후 lift에서 약 `9.00000013B`를 확인했다. Sum/error/correction에서 같은 입력을
|
||||
서로 독립인 uncertainty로 다루어 재계산한 결과이며, 기존 bound의 underbound 증거가 아니다.
|
||||
Graph full U에서 이 계수가 한 endpoint에 나타날 수 있으나 앞 절의 private history feedback과 다르다.
|
||||
|
||||
Dependency를 보존한 Neumaier exact identity는 다음과 같다. `e_first`, `e_error`, `e_c`
|
||||
는 실제 first subtraction, error addition, correction addition의 rounding error이고 `e_final`은
|
||||
마지막 sum+correction의 rounding error다.
|
||||
|
||||
`Value - sum(stored terms) = sum(e_first + e_error + e_c) + e_final`.
|
||||
|
||||
Next-sum rounding은 final sum과 correction 사이에서 정확히 상쇄된다. 따라서 입력 term radius를
|
||||
한 번씩 합하고 `sum(rho(first)+rho(error)+rho(c))+rho(Value)`를 더하는 sharper bound가 가능하다.
|
||||
Product의 coefficient/input/cross radius 및 actual product rounding은 term radius에 한 번 포함한다.
|
||||
71개의 identity·cancellation·zero·subnormal·큰 scale·여러 term probe에서 위 exact identity와
|
||||
조건부 enclosure를 Fraction으로 검산했다. 단일 identity의 후보 bound는 약 `1.00000001B`다.
|
||||
|
||||
이는 **미채택 수학 후보**다. 새 native outward arithmetic·finite/underflow 검사·actual operation
|
||||
replay가 구현/검증됐다는 뜻이 아니며 전체 FEM/AD/nonlinear forward bound도 아니다.
|
||||
공식 C08 결과를 근거로 현재 보수 bound를 유지한다. Tol/factor100 변경, history truncation,
|
||||
solver/physics 변경이나 추가 acceptance gate는 제안하지 않는다.
|
||||
@@ -0,0 +1,311 @@
|
||||
# 고정 초기 null 기저의 독립 수치 검토
|
||||
|
||||
2026-10-13. **수식/core·actual-q guard·compensated CA 정적 적합, focused Debug27+controller4·자연 C09·최종 공식 Release C08a7 PASS, native BL63계수/identity7 PASS. C08b·필수 reference·전체 Debug CTest 등은 PENDING.**
|
||||
[HHT-ADR-018](ADR.md)의 승인 범위에서 [구현 정식화](formulation-fixed-null-basis.md),
|
||||
[N1–N7](numerical-controls.md), [공통 tolerance](../TOLERANCE.md)를 대조했다.
|
||||
Reviewer는 production/tests·기준·schema·reference를 변경하거나 공용 build를 실행하지 않았다.
|
||||
기존 [actual 공변성 실패 감사](numerical-review-channel-newton.md)는 새 방법의 PASS가 아니다.
|
||||
|
||||
## 수식과 판정 경계
|
||||
|
||||
| ID | 독립 판정과 구현 확인 사항 |
|
||||
| --- | --- |
|
||||
| FBN-01 | Actual initial analytic null의 정규화와 minimum-axis projection은 안정적인 고정 ON 기저를 정의한다. Partial rotation BC의 기존 component chart·exact free/null intersection을 유지한다. Sparse support는 한 full 회전 성분에 두 p와 z가 함께 기여할 수 있으므로 one-index reverse map이나 label `%6`을 injection/channel로 사용하지 않는다. |
|
||||
| FBN-02 | Full-root 동등성은 `Lp^T E=0 ⇒ E=Lz ez`, `psi=N^T E=(N^T Lz)ez=0`과 실제 `N^T Lz`의 가역성으로 성립한다. G 가역성만으로 selector 동등성을 대체하지 않는다. 원 full E/scale·hidden·N4를 매 candidate에서 다시 검사한다. |
|
||||
| FBN-03 | FB-04a의 `S=[Df^-1 Lp Dp,Df^-1 N(q)]`는 무차원 full-free spanning operator다. N은 현재 normalized analytic null이다. Nodal blocks의 norm/inverse-action row-sum 최대는 block-permutation된 global infinity norm과 같다. Scalar `N^T Lz`의 rcond=1 함정을 피하며 `S^TS`에 같은 기준을 적용하지 않는다. 원 `2^-32`를 이 명시적 operator에 적용하는 조건이며 기존 다른 행렬의 condition PASS를 승계하지 않는다. G·psi_q N·physical mass/J 조건은 별도다. |
|
||||
| FBN-04 | `V=psiqq v+psiqt`, `H=psiqq a+D3Psi[.,(v,1),(v,1)]`에서 FB-05 네 block의 transpose·부호·cv/ca·2V 계수는 정확하다. Time-mixed third 항을 제외하거나 external primitive를 중복하면 안 된다. Production auxiliary RHS0의 tangent-on-graph 정책과 fresh N7 hidden0/1/2 defect RHS를 구분한다. |
|
||||
| FBN-05 | FB-06의 `Sx=diag(Dp,I,h^-1 I,h^-2 I)`, `Sr=diag(Dp,I,h I,h² I)`는 모든 row를 energy, 모든 unknown을 무차원으로 만든다. 실제 `Khat=Sr Kaug Sx`를 solve/check하고 physical correction은 `Sx dhat`로 복원한다. Restricted J 선택은 이 actual scaled operator에서 한다. 기존 raw augmented backward evidence는 scaled N2-L의 근거가 아니다. |
|
||||
| FBN-06 | 원 full frame0를 그대로 보존하고 initial private projection만 수행한다. 공개 q0=v0=0·fixed0은 exact 검사다. Original/reconstructed a0의 원 full N2·hidden·G/N4를 각각 유지하고 independent solves의 bitwise 동일성을 가정하지 않는다. 이후 private history를 full state에 반복 재투영하지 않는다. |
|
||||
| FBN-07 | Private p absolute HHT 식·whole/requested pair 두 식·RN-even 저장과 global sparse lift/full-A filter는 서로 다른 검사다. 모든 global phi에 Newmark update를 강제하지 않는다. 기존 `k delta ap=delta Ar`의 `1e-12/|delta Ar|` 및 component mapped-A 검사는 유지한다. 추가 projected-A 검사의 product-sum 분모는 identity column에서도 기존 분모와 달라 기존 gate의 대체가 아니다. 해당 구분은 최종 수식에 반영돼 정적 finding CLOSED다. |
|
||||
| FBN-08 | N7는 actual selected zL·같은 trial의 omitted-U 포함 full zM·fresh full hidden RHS zN을 모두 보존한다. 각 해를 scaling undo 후 모든 q/v/a/Ar/A block으로 map하고 vector별 norm을 먼저 더한다. Full-last3항/restricted-last4항·factor100·FAIL/INCONCLUSIVE·read-only 경계와 inherited copied-U radius를 유지한다. |
|
||||
|
||||
FB-04a는 fixed basis의 current spanning condition 검사이며 fixed initial ON Gram 검사와 다르다.
|
||||
Current N이 initial n0와 직교에 가까워져도 initial Gram은 통과할 수 있다.
|
||||
Exact nonzero·conditioning·G/moving-null/range 검사 중 하나를 삭제하거나 cosine floor로 대체하지 않는다.
|
||||
All-fixed/empty-null은 각각 empty free solve 및 원 full-coordinate 경로로 환원해야 한다.
|
||||
|
||||
## 독립 검산의 범위
|
||||
|
||||
[Exact-rational 다항식 검산](../../.dryforge/hht-remediation-20261012/approved-review/independent_fixed_basis_augmented.json)은
|
||||
한 병진과 세 회전 좌표, 비자명 ON plane, nonlinear q/time scalar constraint와 nonsymmetric Kq를 사용했다.
|
||||
Physical block와 hidden0/1/2를 독립 residual에서 중앙차분하고 FB-05/06 action과 비교했다.
|
||||
여섯 augmented column 및 mixed 방향의 고정 `j=8,10,…,20` sweep7개 모두 통과했고,
|
||||
exact Fraction 계산의 truncation이 `s²`에 비례함을 확인했다. Translation ell 및 auxiliary h/h²
|
||||
row/column scale를 포함하며 `j=10..18`의 연속 두 점 조건도 만족한다.
|
||||
|
||||
이는 **대수·단위·time-third 계수의 offline PASS**다. Mass-null shell physics·actual AD,
|
||||
MSVC 산술·partial BC·실제 sparse assembly·source build의 통과를 뜻하지 않는다.
|
||||
[정식화 revision identity](../../.dryforge/hht-remediation-20261012/approved-review/fixed-basis-formulation-review-identity.json)에
|
||||
검토한 계약과 probe SHA를 보존했다. Source가 구현 중이므로 새 header의 존재를 구현 완료로 판정하지 않는다.
|
||||
|
||||
## Source 인계와 남은 검증
|
||||
|
||||
CA는 initial basis/projection 및 모든 sparse products/sums의 실제 순서를 추적해야 한다.
|
||||
예를 들어 coefficient L과 input p의 한 product radius에는
|
||||
`|Lhat|Bp+|phat|BL+BL Bp+rho(product)`가 필요하며 reduction·bound 자체의 rounding도 포함한다.
|
||||
Normalization의 norm/분모 하한과 coefficient radius 산출 근거, 초기 projection 및 global lift의
|
||||
primitive replay를 source에 연결해야 한다. Stored basis를 exact input으로 보는 frozen scope와
|
||||
ideal basis의 구성 오차를 구분하고 coefficient/history radius를 step마다 reset하지 않는다.
|
||||
이는 원 minimum arithmetic estimator 범위이며 모든 FEM/AD 연산의 엄밀한 global forward bound를
|
||||
새로 요구한다는 뜻은 아니다. Index-only·frozen-step 증거를 whole-history로 승계하지 않는다.
|
||||
|
||||
Fresh source가 준비되면 아래 경계를 확인한다.
|
||||
|
||||
- Actual scaling/undo 및 full sparse injection, allaux mapping, channel metadata와 source ordering.
|
||||
- S/G/psi_q N을 따로 퇴화시키는 사례, positive mass, 부분 BC rank-change·exact constrained0.
|
||||
- Preserved frame0, initial-only projection, private pair·원 consistency·추가 lift 검사 및 CA replay.
|
||||
- ADR-017 U copy/thaw·combined100/rollback, actual N7 aggregator의 omitted-U/auxiliary omission.
|
||||
- Warped/shared/genuine-C1 N5와 자연 C09 전체 history/proper-Q/partition 결정론, 승인 C08a7/C08b8
|
||||
grid·hidden·P/E/L·N7, configured 전체 Debug/CTest 및 원본101-frame 비교의 fresh identity.
|
||||
|
||||
현재 core 수식에 blocker는 없다. **Production/controller source 대조·native basis coefficient CA evidence와
|
||||
모든 새 runtime은 PENDING**이며, 과거 raw solve·C08 PASS·C09 FAIL을 새 scheme의 판정으로 승계하지 않는다.
|
||||
|
||||
## FB-CA01–03의 후속 독립 검토
|
||||
|
||||
실용 certificate의 exact input은 이미 계산된 frame0 `drill_null`의 저장 binary64 값이다.
|
||||
Target은 그 값에 selected min-axis branch의 FB-02를 exact arithmetic으로 적용한 basis다.
|
||||
원 real-input FE/AD null의 오차까지 인증하는 범위가 아니다. Norm의 selected `m`을 exact로 고정해도
|
||||
`m sqrt(sum(x/m)²)=||x||2`이므로 perturb된 입력에 max branch 미분을 추가할 필요 없다.
|
||||
Actual division·multiply·두 sums·sqrt·최종 multiply를 같은 순서로 replay한다.
|
||||
|
||||
Sqrt의 `Br=Bs/lower(rhat-rho_r)+rho_r`는 정적으로 보수적이다. 두 sqrt의 합인 정확 분모를
|
||||
`sqrt(shat)>=rhat-rho_r>0`으로 낮추므로 `Bs`의 perturbation 및 actual sqrt rounding을 포함한다.
|
||||
`shat-Bs>0`, denominator lower enclosure, 모든 radius 연산의 upper enclosure와 IEEE 환경을 확인해야 한다.
|
||||
이 식은 다른 opaque hypot의 radius로 승계할 수 없다. Coefficient divide에는 원 CA-03의
|
||||
`rho*(1+Bden/lower)`도 필요하고, nonzero product/division 또는 radius product가0으로 반올림되면
|
||||
gradual-underflow absolute term을 보존한다. Literal exact0/identity 계수와 rounded-to-zero를 구분한다.
|
||||
|
||||
[독립 고정밀 coefficient 검산](../../.dryforge/hht-remediation-20261012/approved-review/independent_fixed_basis_coefficient_radius.json)은
|
||||
1000-digit replay와 exact rational radius 식으로7개 raw vector의9계수씩 및 initial projection/lift를 확인했다.
|
||||
Axis/tie·일반 finite null·큰/작은 norm·subnormal tail·zero-value/positive-radius를 포함하며,
|
||||
zero norm과 certificate denominator lower를 잃는 최소 subnormal norm의2개 branch는 fail-closed였다.
|
||||
이는 **CA 수식의 bounded offline PASS**이며 native source의 outward radius 연산이나 std::sqrt 실행환경을
|
||||
인증하지 않는다. [후속 revision identity](../../.dryforge/hht-remediation-20261012/approved-review/fixed-basis-ca-review-identity.json)에
|
||||
계약/probe와 읽은 중간 source SHA를 분리해 기록했다.
|
||||
|
||||
중간 source에서 발견한 quotient-rounding amplification 누락 및 underflow-to-zero radius 누락은
|
||||
후속 `BasisDivide`와 `RadiusProduct/Quotient`의 수정본에서 정적으로 닫혔다. Source는 아직 freeze가 아니다.
|
||||
최종 감사에는 coefficient support의 +Inf 처리, 실제 원시연산·환경·boundary replay·initial projection,
|
||||
immutable BL의 history 상속 및 copied-U radius를 확인한다. +Inf는 certificate failure/incomplete일 뿐 PASS가
|
||||
아니며 BL를0으로 보정하지 않는다. Plane의 값0인 coefficient에도 BL가 남으면 그 radius support를 유지한다.
|
||||
Whole-history CA와 graph arithmetic INDICATOR·solve noise의 증거 경계는 계속 분리한다.
|
||||
|
||||
## Graph coefficient perturbation certificate
|
||||
|
||||
FB-CA04의 right residual은 `H=I-Ghat R`다. 그러면 `Ghat^-1=R(I-H)^-1`이고
|
||||
각 inverse entry의 tail은 `(|R|Hbar1)i/(1-thetaH)` 이하이므로 제시된 Q는 유효하다.
|
||||
`I-R Ghat`를 같은 식에 넣거나 computed R을 exact inverse로 가정하면 안 된다.
|
||||
Center residual·Hbar의 실제 dot/compensation replay를 포함하고 모든 Q 연산은 upper,
|
||||
`1-thetaH`는 positive lower enclosure로 계산한다. N2-L PASS가 이 inverse bound의 대체는 아니다.
|
||||
|
||||
FB-CA05의 uncertain solve에는 `|e|<=y+A|e|`, `A=Q BG`가 성립한다.
|
||||
`thetaG<1`에서 `||e||inf<=||y||inf/(1-thetaG)`이므로
|
||||
`Bi=yi+(A1)i||y||inf/(1-thetaG)`도 보수적이다. Basis BG/BP와 RHS/input radii,
|
||||
`BG|xhat|` 및 perturbation feedback A를 모두 보존한다. 한 theta의 upper enclosure라도1 이상이면
|
||||
certificate는 incomplete/INCONCLUSIVE이며 radius0 또는 solve 성공으로 대체하지 않는다.
|
||||
|
||||
[독립 소형 graph 검산](../../.dryforge/hht-remediation-20261012/approved-review/independent_fixed_basis_graph_certificate.json)은
|
||||
stored-input exact Fraction으로1×1/4×4의 inverse-action enclosure와32개 matrix/RHS perturbation을 검산했다.
|
||||
Approximate R의 unit-column 및 x의 원 `1e-12` backward 검사, Q의 exact inverse entry 상한,
|
||||
Bi의 실제 error enclosure가 PASS다. Scalar thetaG≈.95 사례는 feedback A를 삭제하면 상한 위반을
|
||||
검출한다. thetaH/thetaG의 certificate 실패 branch도 확인했다.
|
||||
[Revision identity](../../.dryforge/hht-remediation-20261012/approved-review/fixed-basis-graph-review-identity.json)에
|
||||
수식/probe SHA를 기록했다. 이는 **조건부 linear certificate의 offline PASS**이며 native replay가 아니다.
|
||||
|
||||
Scope는 frozen stored C/H/time/third와 같은 selected basis를 사용하는 fixed-operator arithmetic다.
|
||||
Actual nonlinear graph/root sensitivity·AD coefficient의 real-input 오차·전체 trajectory의 엄밀한
|
||||
forward bound로 승계하지 않는다. Actual source에서는 G/R/BG/b/x가 같은 solve/scaling 표현인지,
|
||||
center residual의 uncancelled dot radius·BL support·initial partition/history 전달과 각 physical scale undo를
|
||||
확인해야 한다. 일반 production에 dense global inverse나 새 public certificate API를 요구하지 않는다.
|
||||
|
||||
## 첫 production core epoch의 source·실행 대조
|
||||
|
||||
[동결 identity](../../.dryforge/hht-remediation-20261012/adr018-core-focused-identity.json)의 production3파일,
|
||||
increment helper·검사2파일 및 unit binary의7개 SHA가 독립 확인 시 actual 파일과 일치했다.
|
||||
이 epoch의 정적 대조에서 다음을 확인했다.
|
||||
|
||||
- FB-02 실제 initial null/min-axis·explicit norm/BL·Gram·혼합 BC와 finite coefficient radius guard.
|
||||
Plane3support는 값0도 유지하고 identity coefficient의 radius는0이다.
|
||||
- Graph/rate·physical projection·augmented blocks는 constant sparse support를 사용한다.
|
||||
Actual Sr K Sx/RHS를 solve한 뒤 unknown_scale를 undo하여 allaux full q/v/a로 lift한다.
|
||||
Scaling/undo의 nonfinite 및 nonzero-to-zero 변환은 실패한다.
|
||||
- S spanning inverse-action 검사는 G regularity와 함께 호출되지만 다른 실제 operator를 별도로 검사한다.
|
||||
Current free/null inventory·exact transversality·기존 moving-null/physical mass evidence를 유지한다.
|
||||
- Original frame0 및 exact public q/v0를 보존하고 private initial projection 뒤 history를 직접 상속한다.
|
||||
원 private/component consistency, 추가 projected-A, pair whole/requested/RN-even 및 global lift/filter가 분리된다.
|
||||
U trigger/copy/thaw는 column channel을 사용하며 원100/101 및 commit 전 full gate를 유지한다.
|
||||
|
||||
검토 중 private Ar에 별도 plane infinity magnitude `1e-10`을 요구해야 한다고 전달했으나,
|
||||
명시 승인 근거를 다시 대조하여 **그 finding을 철회했다**. 원 N2의 mapped q/v/a/A magnitude와
|
||||
FB-§5의 private consistency `1e-12/|deltaAr|`는 서로 다르다. 일반적인 “private Ar도 검사”라는
|
||||
표현을 새 plane magnitude acceptance로 확대하지 않으며 원 component gate와 추가 lift 검사만 유지한다.
|
||||
|
||||
[Focused Debug log](../../.dryforge/hht-remediation-20261012/adr018-core-focused-debug.log)/
|
||||
[native0](../../.dryforge/hht-remediation-20261012/adr018-core-focused-debug.native.json)는26/26 PASS(176.41s)다.
|
||||
새 basis5검사·pair/경계·rollback·source BL sparse-action 회귀와 비성분 plane의 warped/shared actual N5(152.47s)를 포함한다.
|
||||
N5는 fixed scaled directions/모든 block·연속 sweep·omission을 검사한다. Supplied finite initial kinematics로
|
||||
비성분 plane을 구성한 private fixture이므로 full public 초기화나 자연 proper-Q 전체 이력의 통과로 확대하지 않는다.
|
||||
BL sparse-action 회귀도 수동 coefficient/radius를 사용하므로 native basis 생성 radius의 고정밀 replay는 아직 필요하다.
|
||||
|
||||
별도 [private 자연 proper-Q log](../../.dryforge/hht-fixed-null-basis-20261013/basis-proper-q-runtime.log)는
|
||||
84.735s의 FAIL이며 increment2 inner-graph100에서 raw psi=`4.875405e-20`, normalized=`2.826890e-4`다.
|
||||
[Read-only graph 진단](../../.dryforge/hht-fixed-null-basis-20261013/graph-trace-summary.json)의 call9는
|
||||
전체4cycle 안에서 일부 lifted q가2lag 전 평가값과 반복되지만 z의 기존 검사는 검출하지 못한다.
|
||||
전체2cycle이라는 최초 요약은 아래 독립 raw 감사로 정정한다. 이는 helper의 arithmetic stagnation
|
||||
경계 조사이며 작은 raw 값만으로 PASS를 만들지 않는다. Lifted-q 반복 상태를 원 no-change/argument-repeat 의미로
|
||||
일반화할 경우에도 이미 평가한 trial만 반환하고 full hidden/N2/N3/N4 및 N7 uncertainty가 판단해야 한다.
|
||||
아직 그 source 교정·실행 closure는 이 epoch에 포함되지 않는다.
|
||||
|
||||
Controller BG/BP/inverse certificate·native coefficient replay와 C09/공식 C08·전체 Debug/reference는
|
||||
별도 PENDING이다. Focused PASS를 그 검증으로 승계하지 않는다.
|
||||
|
||||
## Inner-graph의 actual argument 반복 감사
|
||||
|
||||
[독립 bitwise 감사](../../.dryforge/hht-remediation-20261012/approved-review/independent_fixed_basis_graph_repetition.json)는
|
||||
trace의101 evaluation/100 candidate step 및 마지막13 full q48/z8 vector·hidden8row의 inventory/finite와
|
||||
7개 artifact SHA를 대조했다. q/z 모두4lag 비교9/9가 일치하지만 q의2lag는6/11, z의2lag는0/11이다.
|
||||
따라서 전체4cycle이며 전체2cycle이 아니다. Next lifted q가 prior evaluated q와 같은 prefix는48회,
|
||||
최초 iteration5다. 같은 q fingerprint의 operator fingerprint·raw norm/relative도 일치하며,
|
||||
전체 derivative coefficient를 독립 재조립한 evidence로 표현하지 않는다.
|
||||
|
||||
공용 [C09 native8](../../.dryforge/hht-remediation-20261012/adr018-core-c09-debug.native.json)은238.51s FAIL이다.
|
||||
현재 private/공용 실패는 tolerance·graph 수렴 PASS로 바꾸지 않는다. 최소 해결 후보는 existing z stagnation
|
||||
return을 `next Lift(p,nextz)`가 current q 또는 바로 전 evaluated q와 **정확히 동일한** actual-argument 반복으로
|
||||
일반화하는 것이다. 현재 평가한 q/z/operator만 immutable trial로 반환한다. Nextz·cycle의 best state를
|
||||
적용하지 않고 budget 환급·추가 correction이나 tolerance를 도입하지 않는다. Returned trial이 graph certificate를
|
||||
통과했다는 뜻이 아니며 outer full hidden/N2/G/N3/N4와 N7 embedding uncertainty가 계속 판단해야 한다.
|
||||
Guard의 새 regression/source 및 natural trajectory closure는 별도로 확인한다.
|
||||
|
||||
## Actual-q guard와 controller 경계의 후속 epoch
|
||||
|
||||
새 `SolveEmbeddingRoot`는 `next Lift(p,nextz)`가 current q 또는 바로 전 evaluated q와
|
||||
bitwise 동일하면 **CURRENT 평가 trial**의 p/z/q/operator·residual·correction 진단을 반환한다.
|
||||
Candidate nextz, cycle의 best state, budget 환급을 사용하지 않는다. 정적 source는 이 계약과 일치한다.
|
||||
Guard 반환은 graph convergence PASS가 아니며 원 outer gate와 N7가 남는다.
|
||||
Valid ON basis에서 z는 바뀌지만 q가 흡수되는 회귀도 nonzero psi/relative를 보존한다.
|
||||
|
||||
Controller certificate의 actual-center finding은 수정됐다. `BoundGraphSolution`은 accepted
|
||||
z/vz/az에서 `rbar+Bb+BG|actual_center|`를 계산하고 새 solve 결과로 중심을 바꾸지 않는다.
|
||||
`G=2, b=1, BG=Bb=0, center=.5+2^-30` 회귀가 중심 거리 누락을 검사한다.
|
||||
Right-residual Hbar/Q, y 및 A-feedback의 순서·부호는 FB-CA-04/05와 일치한다.
|
||||
NaN/음수·비유한 matrix/radius/rhs/center는 finite-first로 거부하며,
|
||||
`0*NaN`은0으로 숨기지 않는다. Exact `0*(+Inf)`만0이고 inherited history `+Inf`는
|
||||
graph 결과를 전채널 `+Inf`로 유지하여 INCONCLUSIVE 의미를 보존한다. 기준·radius를 clamp하지 않는다.
|
||||
|
||||
[경계 native0](../../.dryforge/hht-remediation-20261012/adr018-guard-ca-boundaries-debug.native.json)와
|
||||
[actual raw](../../.dryforge/hht-remediation-20261012/adr018-guard-ca-boundaries-debug.raw.log)는
|
||||
12/12 PASS(2.86s)이며 chart/BL 생성, graph perturbation/center/nonfinite, sparse BL support,
|
||||
argument-absorption 회귀 범위다. 공식 C08/C09·전체 Debug/reference의 PASS로 확대하지 않는다.
|
||||
|
||||
Actual frozen-operation replay에 **남은 evidence gap**이 있다. `ProjectBasisRadii`와
|
||||
`LiftBasisRadii`는 plain-add radius를 누적하지만 production `ColumnDot`/`Lift`는 Neumaier
|
||||
`RateSum`이다. 현재 radius의 실제 underbound 반례를 확정한 것은 아니나 FB-CA-03이 요구한
|
||||
실제 compensation의 sum/difference/correction/final-add replay와 다르다.
|
||||
다음 동결 epoch에서 기존 `RateSumRadius`의 동일 source-order replay 또는 독립 enclosure 근거가 필요하다.
|
||||
이 finding은 tolerance/물리 변경 요구가 아니다. Controller 전체 CA 판정은 그 closure까지 PENDING이다.
|
||||
|
||||
후속 coordinated epoch에서 위 plain-add finding의 **source 정적 closure**를 확인했다.
|
||||
`ProjectBasisRadii`는 production ColumnDot와 같은 support-order `RateSumRadius`이며,
|
||||
`ReplayLiftBasisRadii`는 모든 p support 후 모든 z support를 같은 per-full state에 누적한다.
|
||||
각 sum/difference/correction/final-add 및 product/BL uncertainty를 추적한다.
|
||||
Final q/v/a radius는 actual `Lift`와 replay center의 exact 값 일치를 검사한 뒤
|
||||
`d=fl(frame-center)`, `Bgap=upper(|d|+rho(d))`를 더해 accepted frame 중심으로 옮긴다.
|
||||
이는 triangle enclosure이며 history radius의 reset/clamp나 tolerance 변경이 아니다.
|
||||
Original empty-null early return도 inherited-Inf graph 처리보다 앞에 보존됐다.
|
||||
|
||||
새 `BasisRadiusReplayMatchesCompensatedProjectionAndCombinedLift`는
|
||||
`(2^53,1,-2^53)`의 projection 및 p 두 항→z 한 항의 combined lift에서 actual center1을
|
||||
plain center0과 구별한다. 큰 cancellation radius가 center-gap 누락을 숨길 수 있다는
|
||||
리뷰 finding에 따라 p=(1,0), z=0의 small replay radius<.25와 target1.25의
|
||||
distance .25 enclosure도 추가됐다. 이 검사는 primitive replay/centering 범위이며
|
||||
actual GraphIndicator 전체나 nonlinear trajectory의 mutation coverage로 확대하지 않는다.
|
||||
[최종 정적 source identity](../../.dryforge/hht-remediation-20261012/approved-review/fixed-basis-compensated-replay-source-review-identity.json)의
|
||||
controller SHA는 `44BB7CEE52896BE2C7543CF7C89E30462F65A6FEE65EB7744A59E088784AB01F`다.
|
||||
이 source의 새 configured runtime은 아직 PENDING이며 앞선 경계12/nativeBL binary PASS를 승계하지 않는다.
|
||||
|
||||
## 실제 native basis coefficient의 독립 enclosure 대조
|
||||
|
||||
[독립 replay](../../.dryforge/hht-remediation-20261012/approved-review/independent_fixed_basis_native_radius.json)는
|
||||
위 raw의 hexfloat 입력3개·selected axis·stored9계수·actual9 radius를 사용했다.
|
||||
Exact stored raw와 같은 고정 axis의 ideal 기저를 Decimal1000 및1200으로 계산하여
|
||||
각 `error+두 precision 결과 차이<=actual BL`를 확인했다. 7개 입력, 63계수 모두 PASS이며
|
||||
최대 `error/BL=0.32514549`다. Normal axis·minimum-axis tie·actual finite-phi drill_null·
|
||||
`1e300`/`1e-300` scale·subnormal tail·stored0/positive BL를 포함한다.
|
||||
FE_TONEAREST 및 MXCSR8096의 FTZ/DAZ clear도 raw와 대조했다.
|
||||
|
||||
[동결 manifest](../../.dryforge/hht-remediation-20261012/adr018-guard-ca-debug-identity.json)의
|
||||
basis production·export fixture·unit binary 등 관련6 SHA는 replay 시 actual과 일치했다.
|
||||
Controller의 postfreeze hash는 당시 saved `0B8FA38C…`와 actual `E298993D…`가 달랐고,
|
||||
따라서 전체7개 identity 일치나 controller 현재 source의 native PASS를 주장하지 않는다.
|
||||
독립 artifact는 이 차이와 full raw/manifest/probe SHA를 보존한다.
|
||||
이는 앞선 offline radius-algebra probe와 구별되는 **실제 native coefficient generation의
|
||||
조건부 enclosure evidence**다. Frozen stored raw의 FEM/AD real-input 오차,
|
||||
다른 min-axis branch, graph nonlinear sensitivity 및 전체 history의 rigorous forward bound는 포함하지 않는다.
|
||||
|
||||
## 최종 Neumaier epoch의 focused 실행 closure
|
||||
|
||||
[최신 독립 native replay](../../.dryforge/hht-remediation-20261012/approved-review/independent_fixed_basis_native_radius_neumaier.json)는
|
||||
[fresh raw](../../.dryforge/hht-remediation-20261012/adr018-neumaier-core-debug.raw.log)의7개/63계수에 대해
|
||||
같은 Decimal1000/1200 enclosure를 재확인했다. 최대 `error/BL=0.32514549`, 환경 검사도 PASS다.
|
||||
이전6/7 identity artifact와 원 script는 별도로 보존했고 새 결과로 덮어쓰지 않았다.
|
||||
|
||||
[독립 실행 감사](../../.dryforge/hht-remediation-20261012/approved-review/fixed-basis-neumaier-runtime-review.json)는
|
||||
동결/실행 후/current의7개 SHA 및 보존된 source6 snapshot의 byte identity를 모두 확인했다.
|
||||
Final controller SHA는 `3387D8F52719311624B8158EBB7E3EA6A6C5BCA9336C6D074E051D8DFEC3A4F6`이며,
|
||||
앞선 정적 대조에서의 변경은 alias 선언 위치와 검사 Vector 초기화의 compile 교정이다.
|
||||
Source compensation·combined p→z·actual-center·finite guard의 수치 의미는 유지됐다.
|
||||
|
||||
Configured full Debug **build** native0 후 controller4/4 PASS(2.15s), reduced core27/27 PASS(372.14s)다.
|
||||
Actual 비성분 plane·warped/shared·mixed-time N5와 omission sweep은314.76s PASS이며,
|
||||
새 cancellation/center-distance·graph certificate·inherited radius 회귀도 현재 binary에서 PASS다.
|
||||
따라서 해당 focused source/runtime closure는 확인됐고 전체 Debug **CTest**,
|
||||
자연 C09 전체 이력·공식 C08·필수 reference 및 broader physics coverage는 별도 PENDING이다.
|
||||
Frozen stored operator의 산술 indicator scope를 전체 nonlinear forward certificate로 확대하지 않는다.
|
||||
|
||||
## 자연 C09와 공식 C08a의 실제 후속 판정
|
||||
|
||||
[C09 native0](../../.dryforge/hht-remediation-20261012/adr018-neumaier-c09-debug.native.json)/
|
||||
[raw](../../.dryforge/hht-remediation-20261012/adr018-neumaier-c09-debug.raw.log)는217.24s PASS다.
|
||||
이는 자연 rigid/proper-Q·serial/TBB/serial 해당 fixture의 closure다. 다른 C08/reference로 승계하지 않는다.
|
||||
|
||||
[공식 C08a native8](../../.dryforge/hht-remediation-20261012/adr018-neumaier-c08a-release.native.json)/
|
||||
[raw](../../.dryforge/hht-remediation-20261012/adr018-neumaier-c08a-release.raw.log)는819.31s FAIL이다.
|
||||
독립 raw 집계에서83,520 error가 모두 같은 `lifted_pass`이며7 grid가 끝났다.
|
||||
원인은 controller가 `Lp^T deltaa`를 deltaAr와 비교한 `(1+alpha)` 누락이다.
|
||||
Production은 `deltaAfull=(1+alpha)deltaa`를 만든 뒤 투영하므로 해당 factor가 정확하다.
|
||||
FB-§5/FB-08도 `Lp^T deltaAfull`을 요구한다. Alpha=-.05에서 이상적인 단위 열의 누락 ratio는
|
||||
`|1/k-1|/(1+1/k)=.025641…`이므로 원 `1e-12`를 통과할 수 없다.
|
||||
앞선 helper/core PASS와 CA 정적 대조는 이 controller correction-gate 오류를 검출한 증거가 아니었다.
|
||||
|
||||
최소 교정 source SHA `B8A2DBD416D53E6807DBA075BB2F98EE88C0331D5398840569823997248412C4`는
|
||||
filtered deltaA를 projection 및 support product 양쪽에 사용한다. 원 private `k deltaap=deltaAr`,
|
||||
uncancelled denominator·finite/scale0 exact·`1e-12`를 보존하여 정적 finding CLOSED다.
|
||||
Noncomponent(.6,.8), alpha=-.05 회귀는 filtered1.9와 omission2.0을 구별한다.
|
||||
이 교정 시점에는 공식 FAIL을 새 configured 실행 전까지 유지했다. Temporal/N7의 다른 실패 error는 이 raw에서 없으며,
|
||||
이를 전체 test PASS로 해석하지 않는다.
|
||||
|
||||
[Radius 의존성 감사](numerical-review-fixed-null-basis-radius-dependency.md)는 단위 action에서
|
||||
약3배, projection+lift에서약9배의 유효하지만 느슨한 bound를 확인했다.
|
||||
Actual private history는 candidate p/vp/ap/Ar radius를 직접 상속하므로 graph full indicator의
|
||||
9배가 매 epoch private history에 feedback된다는 가설은 성립하지 않는다.
|
||||
Dependency-aware rounding 분리 후보는 미채택 메모로만 보존하고 현재 bound/기준을 변경하지 않는다.
|
||||
|
||||
## Filter-factor 교정본의 최종 공식 C08a closure
|
||||
|
||||
[공식 native0](../../.dryforge/hht-remediation-20261012/adr018-filter-c08a-release.native.json)/
|
||||
[raw](../../.dryforge/hht-remediation-20261012/adr018-filter-c08a-release.raw.log)는703.90s, C08a 및
|
||||
filter omission 회귀2/2 PASS다. [독립 raw 감사](../../.dryforge/hht-remediation-20261012/approved-review/independent_fixed_basis_c08a_filter_audit.json)는
|
||||
source6·Release unit binary의 pre/post/current7 SHA 일치와 grid inventory `16,32,64,128,256,512,1024`를 확인했다.
|
||||
Raw에서 여섯 channel의 최대오차·solve/arith noise를 다시 파싱하여 아래를 재계산했다.
|
||||
|
||||
- 마지막 두 pair의12개 차수 최솟값 `1.8050023661548598 >=1.8`.
|
||||
- Finest h=1/1024의 여섯 normalized 최대오차가 모두 `<=1e-4`; 최댓값은 각가속도 `7.311940681520467e-6`.
|
||||
- 마지막 세 grid의18개 N7 `error/max(solve_noise,arithmetic_noise)` 최솟값 `157.61567568504597 >100`.
|
||||
Noise를 합하거나 diagnostic selector radius로 바꾸지 않았다.
|
||||
- Hidden1/2 raw maxima는 finite이며 `<=1e-10`. 모든 frame의 inventory·finite·normalized/scale0 exact 검사는
|
||||
해당 native test PASS로 확인한다. Raw에 매 frame vector가 저장됐다고 주장하지 않는다.
|
||||
|
||||
[공식 metrics](../../.dryforge/hht-remediation-20261012/adr018-filter-c08a-metrics.json)와 독립 재계산이 일치하며
|
||||
error/INCONCLUSIVE 출력도 없었다. 기존 factor 누락의83,520 FAIL 및 이전 arithmetic/trajectory 실패는
|
||||
원 epoch evidence로 보존한다. 이번 bounded PASS는 C08b·원본 reference·전체 Debug CTest의 완료를 의미하지 않는다.
|
||||
@@ -0,0 +1,465 @@
|
||||
# 축소 좌표 shell HHT 독립 수치 검토
|
||||
|
||||
상태: **정식화·augmented 블록 정적 대조 PASS, production 채택 검증 PENDING**. 2026-10-13.
|
||||
Owner: numerical-review-agent. [HHT-ADR-014](ADR.md), [RC-01–15](formulation-reduced-coordinate.md), [CA-01–06](formulation-carried-a-noise.md), [N1–N7](numerical-controls.md), [공통 외부 tolerance](../TOLERANCE.md)를 적용한다. 구현 담당자가 수정 중인 source의 점검 결과와 완료된 검산을 구별한다. 다른 담당자의 source·tests·계약·reference는 수정하지 않았다.
|
||||
|
||||
## 정식화 및 독립 검산
|
||||
|
||||
| 대상 | 독립 판정과 근거 |
|
||||
| --- | --- |
|
||||
| RC-01/02, full residual 동등성 | `N^T I=0`, `psi=N^T g=0`, `R=J^T E=0` 및 `[J,N]`의 full free-space span을 함께 만족해야 `E_f=0`다. 작은 reduced R 또는 G의 가역성 하나로 인증할 수 없다. 임의 drilling mass는 불필요하며 허용하지 않는다. |
|
||||
| RC-03–06, 물리 rate와 이력 | HHT 적분 대상은 p이며 physical full a에는 Q의 곡률/시간 항이 포함된다. Public full A는 filter combination이고 Ar/`J Ar`가 아니다. 초기 full q/v/a를 동일 graph로 복원할 수 없으면 실패하며 frame0 projection·제외는 허용하지 않는다. |
|
||||
| RC-07/09, implicit 미분 | Coupled G에 대한 second/third RHS의 부호 및 `2H[X,W]+H[B,U]` multiplicity가 맞다. 시간 차원의 W 성분은 1이다. Fixed-time `D^3 Psi[(U,0),(v,1),(v,1)]`에는 F'''가 필요 없다. |
|
||||
| RC-10/11, exact Newton | `delta v=X+cv J`, `delta a=Y+ca J+C+2cv X`와 `delta J^T E`가 필요하다. `G^T lambda=Lz^T E`로 계산하는 `-lambda^T H[Ui,Uj]`의 부호가 맞다. Full-coordinate Keff나 SPD solve로 대체할 수 없다. |
|
||||
| CA-02–05, 산술 radius | Positive denominator 조건의 나눗셈 bound는 타당하다. Radius 연산 자체의 outward rounding, underflow 처리, 실제 연산 순서의 coefficient/predictor/seed/전체 correction/reconstruction 추적이 필요하다. |
|
||||
| CA-06, history 적용 범위 | Whole-history radius는 고정 선택 분기·고정 correction 경로의 산술 전파다. Perturbed nonlinear solve의 correction 변화나 branch 민감도까지 인증하지 않는다. |
|
||||
|
||||
소형 graph 검산은 formulation owner의 probe를 import하지 않고 Fraction 다항식의 계수 전개를 사용했다. 서로 다른 **explicit-time coupled 2p/2z** graph의 세 상태에서 B/X/Y/C와 transpose 곡률 항은 exact rational equality다. Reduced tangent는 N5의 `2^-8..2^-20` fixed directional sweep에서 연속 두 점 조건을 충족한다. 임의 smooth full covector를 사용한 평형 밖 검산이므로 shell 물리 모델/질량 positivity 증거는 아니다.
|
||||
|
||||
CA 검산은 qn/qp seed, 다중 correction·흡수되는 작은 correction, 5-step fixed-path propagation, gradual-underflow 및 denominator fail-closed를 포함했다. **906 scalar 연산**에서 exact Fraction error가 outward radius 이하였고 두 probe의 실제 child native exit는 0이다. Python의 gradual-underflow 확인은 MSVC/MXCSR 실행 환경의 확인을 대체하지 않는다. [RC 결과](../../.dryforge/hht-remediation-20261012/approved-review/independent_rc_probe.json), [CA 결과](../../.dryforge/hht-remediation-20261012/approved-review/independent_ca_probe.json), [source identity·native 기록](../../.dryforge/hht-remediation-20261012/approved-review/independent-native.json)을 보존한다.
|
||||
|
||||
## 현재 source 대응과 열린 finding
|
||||
|
||||
| ID | 판정 | 근거와 필요한 조치 |
|
||||
| --- | --- | --- |
|
||||
| RCN-01 | local operator 정적 대응 PASS; 실행 PENDING | `nonlinear_mitc4_shell.cpp`의 internal `constraints[node].mixed_second[j]` 반환은 `D^3 psi[e_j,v,v]`다. External `scalar.mixed_second+2*scalar_time.mixed_first+scalar_acceleration.first`는 RC-15의 pure-q/mixed-time 항과 부호가 일치한다. Internal scalar는 raw gamma가 아니라 `k*S*gamma`다. |
|
||||
| RCN-02 | coverage PENDING, owner 전달 | 새 local third/external tests는 단일 `h=1e-4`와 absolute EXPECT_NEAR를 사용한다. 승인된 scaled N5 고정 sweep/연속 두 점 판정, warped/nonzero-rotation 및 mixed-time omission mutation 증거가 추가로 필요하다. 단일-h PASS를 N5 완료로 보고하지 않는다. |
|
||||
| RCN-03 | dense Hessian 정적 finding CLOSED; 규모 실행 PENDING | 초기 `ConstraintOperators`가 null row마다 dense `full_dof_count^2` Hessian을 저장했다. 지정 모델 4374 full DOF/625 null이면 이 저장만 `625*4374^2*8=95,659,380,000` bytes(약 89.1 GiB)다. 수정 source의 row별 sparse gradient 및 element-scatter Hessian entry list를 확인했다. 실제 graph/tangent의 남은 dense 저장과 원본 규모 실행 가능성은 별도 검증 대상이다. |
|
||||
| RCN-04 | direct time 미분 정적 finding CLOSED; 실행 PENDING | 초기 struct에 psi_t/psi_qt/psi_tt가 없어 인계했다. 이후 directional contraction에서 차감해 추출한 경로는 exact algebra가 맞지만 cancellation으로 constant CLOAD에 artificial time 항을 만들 수 있어 direct RC-14 평가를 요청했다. 수정 source에서 zero phi_dot의 Fdot/Fddot external primitive value/gradient를 직접 취합하는 것을 확인했다. Constant-load exact-zero 및 manufactured mixed-time 실행 대조가 남는다. |
|
||||
| RCN-05 | partial BC/branch 검증 PENDING | FixedChart 초기 pivot은 실제 admissible null의 최대 free 성분, exact tie X/Y/Z다. 현재 Lift는 constrained 성분을 exact zero로 남기고 trial null-node list를 초기 list와 대조한다. G regularity 외에 psi_q N, J rank, positive reduced mass 및 source/context 있는 rank-change failure를 실제 embedding 경로에서 확인해야 한다. |
|
||||
| RCN-06 | acceptance/cache/rollback 검증 PENDING | 선택한 실제 assembly와 derivative factorization의 authority가 일치해야 한다. Accepted z seed를 trial cache로 수정하거나 stale assembly를 rate 재구성 후 재사용하지 않는다. 원 E/psi/hidden0–2, physical recovery와 BC를 검사한 뒤 full state와 private history를 함께 commit해야 한다. |
|
||||
| RCN-07 | schema 정적 경계 PASS; 실제 reduced execution PENDING | State enum은 기본 full-coordinate이고 history 내 formulation 변경을 거부한다. Writer는 actual frame enum에 따라 v1/v2를 분리한다. Reduced 실행 전 기존 full recurrence를 v2로 표시해서는 안 된다. 실제 procedure의 marker, full-A 의미, readback/reference는 후속 증거다. |
|
||||
| RCN-08 | carried-A N7 구현 검증 PENDING | CA primitive 검산 PASS는 실제 C++ accumulator의 연산 순서·outward norm·underflow 설정·seed/scatter 전체 추적을 인증하지 않는다. Solve-defect와 fixed-path arithmetic radius를 별도로 보존하고, 기존 gamma32 heuristic을 새 경로의 완전한 bound로 승계하지 않는다. |
|
||||
| RCN-09 | scope finding CLOSED; 최신 Debug/Release build PASS | `ReconstructPhysicalRates`의 is_p mask가 다른 함수에 선언된 compile blocker를 찾았다. 수정 source에서 rate helper의 selector mask를 확인했다. 아래 frozen source의 두 build native0을 확인했다. 전체 Debug CTest 통과를 뜻하지 않는다. |
|
||||
| RCN-10 | sparse support 정적 finding CLOSED; test 실행 PENDING | One-element test의 size<24 조건과 모든24 entries 반환이 충돌함을 전달했다. 수정 source는 정확히0인 gradient/Hessian entry를 생략하며 tiny-value clamp는 없다. Scalar reduction 순서와 finite-first 검사는 유지된다. |
|
||||
| RCN-11 | augmented 블록 및 최신 Debug/Release 단일 actual-shell N5 fixture PASS; 확장 coverage PENDING | 새 off-graph sweep의 u/phi/z/vz/az/mixed, D/h/h² scaling, j10..18 내부 연속쌍, row-block metric과 zero branch를 정적 대조했다. 최신 두 raw log의 6방향·4블록 모두 내부 연속 두 점 PASS를 독립 확인했다. z는 j10/12와 j12/14 쌍이 통과한다. Omission mutation 및 shared-node/warped coverage는 별도 evidence가 필요하다. 과거 [Release focused log](../../.dryforge/hht-remediation-20261012/reduced-scaled-n5-and-large.log)의 paired LargeDIRECT FAIL/native8은 당시 evidence로 보존한다. |
|
||||
| RCN-12 | graph 종료/authority 정적 대응 PASS; 실행 PENDING | 기존 N3 `sum_c abs(n_c)*position.residual_scale_c`와 N2 회전 correction `1e-10`을 graph 종료에 사용한다. Zero scale의 비영 ψ를 `abs(ψ)<=1e-10`으로 통과시키던 오류는 전달 후 exact-zero branch로 수정됐다. Root residual/correction/iteration을 보존하고 100번째 candidate를 검사한다. Stagnation 반환은 outer full/hidden acceptance를 대체하지 않는다. Actual reconstructed v에서 third를 재평가하는 실제 executor 경로도 확인했다. |
|
||||
| RCN-13 | reserve 정적 finding CLOSED; peak 실행 PENDING | Reference에서 약18.75 million entries를 미리 할당하던 `8*nz*(np+nz)` reserve를 actual sparse constraint entry count 기반으로 교체한 것을 확인했다. Dense Hessian 위험도 해결됐다. Actual reference peak memory와 실행 가능성은 별도 측정 대상이다. |
|
||||
| RCN-14 | graph conditioning 정적 finding CLOSED; 실행 PENDING | `CheckGraphRegularity`가 기존 positive drilling metric의 W로 `W^-1 G W^-1`을 구성하고 fresh nonsymmetric factorization 및 backward-checked inverse-column solves로 `rcond_inf>=2^-32`를 검사한다. 초기/accepted endpoint 호출도 확인했다. Physical SPD 및 psi_q N regularity를 G의 conditioning으로 오인하지 않는다. 실제 condition 값·native 결과 보존이 남는다. |
|
||||
| RCN-15 | frame0 bitwise 요구 정적 finding CLOSED; rotated 초기 재구성 실행 FAIL | Independent a0 solve의 bitwise 일치를 요구하던 코드를 제거했다. 수정 source는 original initialized a0를 그대로 frame0에 보존하고, reconstructed a0를 미commit assembly로 평가하여 원 free residual/N3 hidden/N4 physical mass·regularity/global equilibrium를 별도 검사한다. q0/v0 exact-zero 표현은 유지한다. 후속 실제 rotated uniform-translation 검사는 reconstructed frame0 N2에서 실패했으며 상세 원인 분리를 진행한다. |
|
||||
| RCN-16 | Newton 초기 정책 정적 finding CLOSED; 실패 실행 PENDING | Legacy Ep raw norm은 같은 length의 full free energy norm으로 바뀌었고 exact tie는 predictor다. 동일 p 중복 평가 생략과 scaled compare overflow failure를 확인했다. Geometry fallback은 v/a=0의 position assembly 단계만 허용하며 ambiguous rotation 실패는 실제 q의 principal-chart 부적합을 검사한다. Reconstructed physical-rate 실패는 이 fallback을 쓰지 않는다. Valid-chart overflow/후속 correction 실패의 회귀 실행 및 stage diagnostic은 별도 검증 대상이다. |
|
||||
| RCN-17 | N2/update 정적 finding CLOSED; 실제 검사 PENDING | 초기 legacy δq 배수 gate는 mapped full δq/δv/δa 및 `(1+alpha)δa` gate로 교체되었다. Private Ar와 public full A 검사도 분리했고 public filter는 모든 full component를 검사한다. Mapped multiplication의 nonfinite failure가 추가되었다. 실제 callback/계산된 correction·constraint·zero branch는 실행 검증 대상이다. |
|
||||
| RCN-18 | reduced C08 산술 지표/defect 정적 대응 PASS; 실행 PENDING | Actual reduced C08 controller가 CA selector 이력, finite graph/rate INDICATOR 및 전체 auxiliary defect를 추적한다. P/W/C 계수·multiplicity와 sparse rate RHS의 실제 연산 순서가 아래 명세와 일치한다. 초기 zN의 last-K 재사용 및 frame0 `max(1,abs(a0))` floor를 발견해 전달했다. 수정 source는 fresh endpoint K로 zN의 solve/check/map을 수행하고 reconstructed frame0 candidate의 original full/N3/N4/global-equilibrium 검사를 적용하여 두 finding은 정적 CLOSED다. Native 결과 및 N7 separation으로 실행 판정을 별도 닫는다. |
|
||||
| RCN-19 | Primary p 산술 수정 및 최신 focused 실행 PASS | Large DIRECT의 큰 pp/sAr 상쇄를 피하여 chosen physical p에 δp를 직접 누적한다. Ar는 독립 carried update를 유지하고 vp/ap는 기존 Ar로 복원한다. 최신 Neumaier trace source의 Debug/Release focused 검사를 확인했고 Large/context도 두 구성에서 PASS다. 전체 검증 범위로 확대하지 않는다. |
|
||||
| RCN-20 | 추가 단일항 metric finding CLOSED; N3 trace 정적·focused 실행 PASS | 후속 `pnew−pp=βh²Arnew`/`vnew−vpp=γhArnew` 검사는 작은 단일항에 subtraction 오차를 상대화하는 추가 조건이었다. 이전 정적 수식 PASS를 승인 계약 PASS로 해석한 판단을 정정한다. 원 N3는 `pnew−pold`와 실제 predictor/correction increment의 대조다. 최신 production/fixture는 predictor 두 항과 모든 requested δp의 Neumaier trace를 보존하며 원 `1e-12`·uncancelled scale·zero exact 및 absolute/whole-increment 검사를 유지한다. 추가 조건 제거는 tolerance 완화가 아니다. Release actual C08a64의 이력·검사 실행 PASS는 공식 C08a 전체 grid acceptance와 다르다. |
|
||||
| RCN-21 | C08b ψ0 force/operator gap 재현·complete-Jet 정적 수정 확인; scratch 회귀 PASS·production 실행 PENDING | grid32768 inc4의 scalar primitive는 충분히 작지만 assembled force/null projection이 N3를 넘는다. 9개 node의 frozen binary64 operands를 Fraction으로 재계산해 최종 dot rounding이 원인이 아님을 확인했다. 수정 source의 complete `result=stable` 반환을 확인했다. Frozen54-q point와 element 원본 FAIL/안정 series PASS는 아래 scratch 증거다. Production 및 전체 C08 통과로 승계하지 않는다. |
|
||||
| RCN-22 | Proper-Q 부분 coverage 정적 확인; ell/Eref finding CLOSED·실행 FAIL | 새 실제 executor 검사는 분리2요소·serial/TBB/serial·proper `Rz(.7)Rx(.4)`로 geometry/frames/CLOAD를 함께 변환한다. Coordinate scale3은 ell1로 수정됐고 one/two-element Eref도 fixture별 인자로 교정됐다. 후속 A/force/triad 및 비영 rotation fixture 확장을 확인했다. Rotated uniform-translation 실행은 reconstructed frame0 N2에서 실패했다. `EXPECT_DOUBLE_EQ`는4ULP 비교이며 sparse structure·일반 finite-rotation covariance/C09 무하중 P/T/C10 rollback의 완료로 확대하지 않는다. |
|
||||
| RCN-23 | Actual p low-carry 수식/CA·predictor 초기화 정적 PASS; C08a 원 N3 FAIL | Stable C08b1024 inc200의 과거 qtrace FAIL은 여러 addition의 low 손실이다. 수정 source는 predictor의 두 addition low와 inherited pair/high 반경을 포함한다. TwoSum pair와 final-high 반경을 Fraction으로 검산했다. 후속 C08a의58개 qtrace FAIL은 모두 현재 high가 closest binary64이고 양 neighbor도 실패하는 representability 사례로 확인됐다. 원 N3 FAIL을 유지한다. |
|
||||
| RCN-24 | Initializer per-row/assembled-scale finding 정적 CLOSED; fresh procedure N2 FAIL | 승인 N2는 u/phi channel별 `max|E|/max s`다. 잘못된 helper preliminary acceptance를 제거하고 fresh actual-a0 caller가 원 element/load uncancelled scale로 N2를 검사한다. 모든 candidate a finite/constrained exact0, mass/range/null/hidden 검사와 header의 caller certificate 책임을 확인했다. Production actual/reconstructed frame0 및 C08 fresh initial frame N2 검사를 보존한다. |
|
||||
| RCN-25 | Rotated 초기 original/reconstructed moment N2 실행 FAIL; geometry 산술 원인 후보 독립 재현 | 후속 진단은 original phi도 `0.0653542`로 이미 실패했음을 보여준다. Uniform-director flat shell의 point geometry 산술 replay에서 실제 original worst-row residual과 같은 spurious moment를 재현했다. Reference covariance의 anchor/partition 기반 동등 계산과 실제 native force/M·a 대조가 필요하며, 작은 C1 또는 scale를 clamp하지 않는다. |
|
||||
| RCN-26 | ADR016 exact pair helper 정적·독립 native PASS; threshold boundary finding CLOSED | Both whole/requested gate가 같은 EFT helper에 각각 원 HHT 항 또는 독립 Neumaier sum/comp를 전달한다. FTZ/DAZ 확인 누락은 기존 environment guard와 negative test로 정적 CLOSED다. Current helper의 frozen58 requested 결과는 Fraction oracle와 모두 일치한다. 최종 rounded metric의 boundary false PASS를 재현한 후 owner의 exact threshold sign 비교 교정을 확인했다. 후속126 boundary cases와6개 configured pair unit tests도 통과했다. |
|
||||
| RCN-27 | Canonical geometry 수식 정적 PASS; genuine C1 fixture focused PASS·초기 rate closure PENDING | Reference/current covariant의 anchor/partition 수식과 volume/current-validity predicate를 대조했고 point arms·h/force/tangent는 보존된다. 기존 one-element warped/constant-director fixture는 nonzero C1를 검증하지 못한다. 잘못된 x-axis tilt fixture를 지적한 후 owner가 left/right y-axis triad로 교정했다. Genuine nonzero-C1 fixture와 independent5³ oracle의 후속 focused PASS를 확인했다. 원 C09 초기 derivative authority/재구성 실패는 별도 미해결이다. |
|
||||
| RCN-28 | Actual warped/shared N5와 특정 omission coverage focused PASS | 후속6node/2element warped/shared fixture의 실제 4block 고정 sweep과 Ha·combined HW/2W·third·psi-qt omission negative를 raw log로 독립 확인했다. Positive8개 sweep은 내부 연속쌍을 통과하고 mutant4개는 통과쌍이 없다. 독립 2W 단독/external-position-gradient omission 및 psi-tt의 scaled N5 coverage까지 완료했다고 확대하지 않는다. |
|
||||
| RCN-29 | Global-selector reduced HHT의 일반 proper-Q covariance 보장 없음; 실제 fixture 판정 PENDING | Frame change는 full q에 선형으로 작용하지만 selected p 사이의 변화는 graph Q를 거쳐 일반적으로 비선형이다. RC05의 exact chain rule만으로 RC03/04 시간 recurrence의 공변성을 보장하지 않는다. 독립 exact recurrence 반례는 아래에 기록하며 실제 finite-rotation fixture의 FAIL 판정을 대신하지 않는다. |
|
||||
| RCN-30 | Canonical 초기 scalar gradient 교정 정적 적합; direct-delta epoch 초기 gate PASS·later outer FAIL | 새 optional hidden_gradient는 RC02 local primitive를 deterministic scatter하고 external gradient/Hessian을 node당1회 추가한다. Initializer/regularity/hidden evidence가 이를 공통 사용하며 missing-field의 full-Hessian fallback은 없다. 후속 configured direct-delta epoch는 original/reconstructed frame0를 넘었으나 rotated increment1/100correction에서 실패했다. 이후 force source 변경에는 이 실행을 승계하지 않는다. |
|
||||
| RCN-31 | Tiny rotation quantization 재현·direct Jet/scalar recovery source 정적 적합; local actual2검사 PASS | `ExpSkew(phi)*D0−D0`의 작은 increment 소실을 native/Fraction6scale로 재현했다. 후속 direct `(R−I)D0` 전체 Jet 및 scalar covariant-increment strain은 같은 Rodrigues/TL 식이며 기존 public geometry 판정은 유지된다. Actual source와 일치한 local copy의 force/Jet/recovery2검사 PASS를 확인했으나 configured C09 전체 history/outer convergence는 별도다. |
|
||||
| RCN-32 | Mixed acceleration의 tiny rotary inertia 소실 actual24row 확인; force-only 교정 정적 적합·private12검사 PASS | Stored M*a+c의 exact Fraction값은 비영인데 actual point force는24개 exported 회전 row에서 모두0이다. Integrated local M와 독립 c의 Neumaier contraction은 원 inertia 식과 동등하며 N2 scale는 유지된다. 독립 native tiny-acceleration oracle와 private12검사 PASS를 확인했으나 position tangent/Pdot/Ldot mixed contraction 및 전체 C09는 별도다. |
|
||||
| RCN-33 | Force-only 이후 tiny Dq/L/Ldot discrepancy 확인; 후속 scratch 동등 교정·회귀 PASS | Actual Dq의 회전 항0과 stable force FD/독립 SO(3) derivative가 불일치하며 L/Ldot의 tiny intrinsic 값도 소실된다. Integrated DqM 및 h/position×h coefficients의 동등 contraction을 정적 확인했고 independent analytic RED→GREEN를 읽었다. Production 적용/공용 실행은 별도다. |
|
||||
| RCN-34 | Stable inertia epoch의 초기 재구성 N2 FAIL; partition RHS reduction 원인 독립 확인 | 동일 primitive gradient라도 initializer의 Neumaier full contraction과 graph의 plain P-partition contraction이 다르다. Actual8row 감사에서 첫4row exact RHS0에 plain reduction만 비영을 만든다. 후속 RateSum 및 controller replay 수정은 정적 대조 대상이며 fresh 실행 PASS로 아직 승계하지 않는다. |
|
||||
| RCN-35 | C08 manufactured hidden helper의 external Hessian 중복 확인 | Canonical assembly.hidden_second는 internal+external ψqq[v,v]인데 helper가 −n''[v,v]·F를 다시 더한다. 원 explicit-time 항과 기준은 유지하고 중복 value/scale 항만 제거해야 한다. 역사적 C08a hidden-a FAIL은 보존하며 fresh 검증이 필요하다. |
|
||||
| RCN-36 | Representable endpoint 존재 독립 확인; 승인 후 channel 제한 Newton 구현 대조 PENDING | Frozen translation q/v/a72개가 bitwise 유지되면서 원 full endpoint phi N2가2회 뒤1.4073e-13으로 통과한다. Restricted K[J,J]의 N2-L은 기존 all-free full linear 식과 domain이 다르다. 사용자가 승인한 trigger/예산/N7 actual+full-model defect 명세는 [별도 독립 검토](numerical-review-channel-newton.md)에 있으며 실제 source/runtime는 별도 대조한다. |
|
||||
|
||||
## 최신 focused 실행 closure
|
||||
|
||||
최종 Neumaier source의 [동결 source/binary identity](../../.dryforge/hht-remediation-20261012/reduced-closed-source-identities.json) **235개**를 당시 파일 SHA256와 독립 대조하여 누락0·불일치0을 확인했다. [독립 closure 검산](../../.dryforge/hht-remediation-20261012/approved-review/check_closed_runtime_identity.json)은 두 raw N5 sweep의 6방향·4블록 내부 연속쌍도 확인한다. 이는 해당 snapshot에 한정된 판정이며 이후 source/binary 변경에는 승계하지 않는다.
|
||||
|
||||
| 구성 | Build native | Focused CTest native·결과 | Raw evidence |
|
||||
| --- | --- | --- | --- |
|
||||
| MSVC x64 Debug | [0](../../.dryforge/hht-remediation-20261012/reduced-closed-trace-debug-build.native.json) | [0, 15/15 PASS](../../.dryforge/hht-remediation-20261012/reduced-closed-debug-core.native.json), 103.98s | [N5 sweep·실제 절차 검사](../../.dryforge/hht-remediation-20261012/reduced-closed-debug-raw.log) |
|
||||
| MSVC x64 Release | [0](../../.dryforge/hht-remediation-20261012/reduced-closed-trace-release-build.native.json) | [0, 16/16 PASS](../../.dryforge/hht-remediation-20261012/reduced-closed-release-core.native.json), 36.98s | [N5 sweep·C08a64 Neumaier trace](../../.dryforge/hht-remediation-20261012/reduced-closed-release-raw.log) |
|
||||
|
||||
Production Large DIRECT/context, original zero-motion 관련 검사, 단일 actual-shell N5 및 Release actual C08a64의 full history/N3 검사가 포함된다. Export된 C08 trace의 첫5 increment는 signed sum·compensation·uncancelled scale을 함께 보존하며 해당 실행 전체가 기존 update 기준을 통과했다. **전체 Debug CTest, 필수 reference 비교, 공식 C08a 전체 grid 및 C08b 최종 판정은 이 focused 결과로 닫지 않는다.** 공식 C08a 원기준 FAIL은 역사적 evidence로 유지한다. 이후 승인된 C08a grid/hidden 검사 변경본의 실행은 별도로 필요하며 이 snapshot 통과로 승계하지 않는다. Mutation·warped/shared-node 등의 확장 coverage도 PENDING이다.
|
||||
|
||||
Source는 구현 중이며 위 판정은 연결된 정적 snapshot에 한정한다. 고정 source identity와 관련 test native 결과를 받은 뒤 실행 판정을 갱신한다. 공통 build는 메인 소유이며 본 reviewer는 실행하지 않았다. 과거 ABI/header dependency 문제를 현재 build 실패로 승계하지 않는다.
|
||||
|
||||
정적 대조 대상은 [local operator](../../src/fesa/elements/nonlinear_mitc4_shell.cpp), [local tests](../../tests/unit/elements/nonlinear_mitc4_shell_tangent_test.cpp), [reduced operator](../../src/fesa/analysis/hht_reduced_operators.cpp), [private declarations](../../src/fesa/analysis/hht_reduced_internal.h), [실제 executor](../../src/fesa/analysis/hht_reduced_procedure.cpp), [actual reduced C08 controller](../../tests/unit/analysis/hht_shell_physics_test.cpp)다. [정적 snapshot identity](../../.dryforge/hht-remediation-20261012/approved-review/static-source-identities.json)는 이 검토 시점만 식별하며 build/test identity가 아니다.
|
||||
|
||||
## 축소 좌표 N7 대응 명세
|
||||
|
||||
기존 N7의 **100배 separation**, pair-grid noise 합산, FAIL/INCONCLUSIVE 및 acceptance 값은 유지한다. 변경할 대상은 승인된 적분법의 실제 derivative map이며 기존 full q inverse의 `cv*eta_x`, `ca*eta_x`를 full reconstructed rate에 그대로 적용하면 안 된다. 아래는 구현 인계용의 동일 N7 **일차 defect estimate**이며 nonlinear trajectory의 rigorous global forward bound는 아니다.
|
||||
|
||||
고정 p selector에서 `Dp=diag(ell for translation,1 for rotation)`이고 `xf=Dp^-1 p`다. `D`는 기존 full-space scale다. 해당 trial의 원 unsymmetric reduced tangent로 `Krhat=Dp^T Kr Dp`, `rhat=Dp^T R`를 만든다. 마지막 실제 solve의 `eL=Krhat_last*delta_x_last+rhat_last`에 대해 `Krhat_last*zL=-eL`, accepted endpoint의 **새 Krhat/R**로 `Krhat_accepted*zN=-rhat_accepted`를 read-only로 푼다. 두 defect solve도 원래 matrix의 N2-L backward-error 검사를 통과해야 한다. 결과를 history에 적용하지 않는다.
|
||||
|
||||
각 endpoint의 fixed predictor/time/old ap에서 다음 full-vector action을 사용한다. `X_j,Y_j,C_j`는 RC-08–10의 현재 graph 미분이다.
|
||||
|
||||
| Quantity | Scaled defect lift operator |
|
||||
| --- | --- |
|
||||
| q | `Lq=D^-1 J Dp` |
|
||||
| v | `Lv=D^-1 [X+cv J] Dp` |
|
||||
| physical a | `La=D^-1 [Y+ca J+C+2cv X] Dp` |
|
||||
| private Ar | `LAr=Dp^-1 Dp/(beta*h²)` |
|
||||
| public full A | `LA=(1+alpha)*La`, old full a를 고정한 endpoint defect에 한함 |
|
||||
|
||||
채널별 estimate는 `||L delta_x_last||2+||L zL||2+||L zN||2`로 각각 계산한다. 마지막 correction은 **실제로 사용한 마지막 trial의 L**, zN은 accepted L을 사용하고, 각 term의 norm을 먼저 구하여 서로 상쇄시키지 않는다. 원 full u/phi channels로 projection한 후 case의 q/v/a amplitude로 정규화하며 전체 시점 최대를 기록한다. Empty-null이면 J가 free selector이고 X/Y/C=0이므로 원 full-coordinate N7 식으로 환원한다. Constrained 성분은 exact zero다.
|
||||
|
||||
아래 sparse augmented 방식을 실제 사용하면 defect solve도 그 **전체 scaled augmented matrix**에서 수행한다. 마지막 실제 solve의 zL과 accepted `(Ep,psi0,psi1,psi2)` residual의 zN은 `(delta p,delta z,delta v_z,delta a_z)` **모든 block**을 보존한다. Hidden row의 비영 defect에 의해 발생한 auxiliary error는 J/RC-10의 homogeneous constraint lift에 포함되지 않으므로 δp만 남기고 나머지를 버려서는 안 된다. 각 defect vector를 actual substitutions의 δq/δv/δa로 변환하고 full A는 `(1+alpha)delta a`로 계산하여 위 channel norm에 넣는다. Scaled unknown의 h/length factors를 먼저 역변환한다. Accepted graph residual을 0이라고 가정한 별도 인증이 없다면 zN RHS에도 실제 hidden defects 또는 대응 uncertainty를 포함한다.
|
||||
|
||||
Graph root/derivative solve의 residual·backward error·conditioning은 따로 보고한다. 작은 projected reduced defect가 원 full E 또는 hidden equation의 잔차를 숨기지 않아야 한다. 위 linear lift만으로 유한 perturbation의 nonlinear embedding/reconstruction error를 엄밀히 bound했다고 말하지 않는다. 독립 fresh graph finite perturbation sweep과 필요시 고정밀 reconstruction으로 estimator 적용 영역을 검토한다.
|
||||
|
||||
산술 evidence는 다음 두 경계를 구분한다.
|
||||
|
||||
1. **Reduced recurrence:** 실제 p predictor/seed/모든 carried-Ar update를 CA primitive로 추적한다. Frozen-step local radius와 recursively propagated fixed-correction-path history radius를 별도 출력한다. 이 bound가 증가하거나 overflow하면 inconclusive이며 reset·clamp·last-correction-only로 대체하지 않는다.
|
||||
2. **Embedding/reconstruction:** Graph/rate direct solves 및 full filter A의 산술 지표를 아래 frozen-operator 명세로 보존한다. Reduced arithmetic radius만으로 full physical-a 지표의 완전성을 주장하지 않는다. N7의 원래 최소 산술 지표는 모든 FEM/AD 연산의 엄밀한 forward enclosure를 요구하지 않는다. 지표의 제한된 범위와 FD/고정밀 증거를 명시하고, 필요한 지표 자체가 빠진 경우만 incomplete로 기록한다.
|
||||
|
||||
Radius norm은 upper rounding을 적용해야 한다. `std::hypot`의 반환값 하나를 roundoff-free upper bound로 취급하지 않는다. 검증된 library error enclosure 또는 outward primitive의 보수적인 L1 upper norm 등으로 2-norm 상한을 만들 수 있으나, 그 보수성이 separation을 통과시키지 못하면 inconclusive다. Tiny/subnormal value와 제곱 underflow를 positive scale floor로 숨기지 않는다. C++ gradual-underflow/rounding mode 검사는 실제 실행 evidence가 필요하다.
|
||||
|
||||
독립 FD는 derivative 검증이고 고정밀 fixed-path replay는 산술 검증이다. 둘 다 nonlinear equilibrium correction 변화/branch transport를 포함한 global stability proof가 아니다. 기존 N7 heuristic time amplification을 유지하면 **heuristic 비교값**으로 명시하고 rigorous whole-history bound와 별도 기록한다. C08a 및 final C08b grid의 error가 승인된 해당 complete noise evidence보다 100배 크지 않으면 시간 차수는 inconclusive다.
|
||||
|
||||
### Graph/rate의 최소 산술 지표: 구현 인계
|
||||
|
||||
**판정 범위:** 기존 N7의 minimum arithmetic indicator를 승인된 실제 reduced map에 적용한다. 전체 FEM/AD 평가·유한 nonlinear graph perturbation·nonlinear correction sensitivity의 rigorous forward bound가 아니다. 전체 fixed-correction-path selector CA 이력 `Bp,Bvp,Bap,BAr`는 누적하며 reset/clamp하지 않는다. Graph z는 별도 적분 이력이 아니라 현재 p/time의 implicit 출력이다. 이에 대한 현재 frozen derivative의 일차 전파를 whole-history nonlinear certificate라고 부르지 않는다.
|
||||
|
||||
현재 실제 endpoint의 sparse `P=ψq Lp`, `G=ψq Lz`, `W_i=H_i v+ψqt_i`, `C_i=H_i a+T_i[.,(v,1),(v,1)]`를 사용한다. Physical v/a와 시간 미분을 포함한 **actual** operator를 binary64 coefficient input으로 고정한다. Fresh G inverse-column solves의 N2-L 검사로 R을 구성하며 `abs(R)*radius`의 uncancelled action을 계산한다. `abs(solve(G,positive_radius))`는 내부 상쇄로 과소평가할 수 있어 대체로 쓰지 않는다. C08의 작은 null block에 한정된 transient inverse-column 자료이며 production global inverse 저장 요구가 아니다.
|
||||
|
||||
일차 input sensitivity와 frozen 연산의 산술 지표를 다음 순서로 계산한다. 모든 radius는 componentwise 절대값이고 selector scatter의 constrained component는 exact 0이다.
|
||||
|
||||
```
|
||||
Bz = abs(R) * (abs(P)*Bp + ε0)
|
||||
Bq = Lp Bp + Lz Bz
|
||||
Bvz = abs(R) * (abs(W)*Bq + abs(P)*Bvp + ε1)
|
||||
Bv = Lp Bvp + Lz Bvz
|
||||
Baz = abs(R) * (abs(C)*Bq + 2*abs(W)*Bv + abs(P)*Bap + ε2)
|
||||
Ba = Lp Bap + Lz Baz
|
||||
```
|
||||
|
||||
W/C의 부호와 multiplicity는 ψ1/ψ2의 exact first variation에서 나온다. C에는 `δG*az`, `δP*ap`, Hessian 및 mixed-time 변화가 이미 포함되어 있으므로 이를 별도 항으로 다시 input sensitivity에 더하지 않는다. Direct RHS의 input radius까지 전파한 뒤 같은 W/C sensitivity를 다시 더하는 방식도 중복이며, 보수적 중복을 사용한다면 표시한다.
|
||||
|
||||
ε1/ε2의 arithmetic-only 부분은 실제 sparse entry 순서의 direct rate RHS `bv=-P vp-ψt`, `ba=-P ap-H[v,v]-2ψqt v-ψtt`를 CA-03으로 replay하여 얻는다. 이 replay의 coefficient와 실제 vp/ap/v input radius는 0이며 입력의 불확실성은 위 식에서 별도로 전파한다. Zero entry 생략, Hessian 곱의 순서, 2의 곱, 각 덧셈을 실제 source와 대조한다. `G vz-bv`, `G az-ba`의 실제 residual 절댓값 및 동일 sparse G dot-product의 arithmetic-only radius도 ε1/ε2에 보존한다. Backend status만으로 이 항을 0이라 두지 않는다. R의 radius action 및 norm 자체도 outward CA 연산이나 검증된 uncancelled gamma-count로 계산한다. Inverse-column backward error와 G conditioning은 별도 기록하며 rigorous inverse enclosure로 표시하지 않는다.
|
||||
|
||||
ε0는 실제 ψ0 defect와 최종 scalar 저장/감산의 CA rounding 지표를 보존한다. 추가로 frozen position g와 nodal null의 **비영** `n_c*g_c` 곱·합을 CA-03으로 replay한 projection radius를 기록할 수 있다. 이는 physical residual/null projection 경계의 최소 지표이며 actual scalar AD `k*S*γ` 전체의 연산 bound가 아니다. `value_scale*gamma32`를 사용한다면 heuristic임을 명시하고 실제 AD operation count라고 보고하지 않는다. 기존 N3 value_scale는 root 종료 기준의 denominator이며 arithmetic radius나 acceptance floor가 아니다.
|
||||
|
||||
실제 root/derivative defect가 augmented zN에도 들어가면 ε의 defect와 보수적으로 중복될 수 있다. Solver-defect estimator와 arithmetic-only 지표는 분리 기록하여 범위를 알 수 있게 한다. Public full A는 실제 `A=(1+α)a-α aold` 순서의 CA primitive로 계산하고 이전 full physical-a radius도 보존한다. Private Ar는 selector recurrence에서만 갱신한다.
|
||||
|
||||
Finite-first, valid fixed chart, original N4/G regularity 및 backward checks가 전제다. Missing/nonfinite radius는 INCONCLUSIVE이며 epsilon floor, reset 또는 eigen cutoff로 유한화하지 않는다. 지표와 solve noise 중 큰 값을 기존 normalization으로 집계하고 pair의 두 grid 값을 합한 뒤 **100배 separation**을 적용한다. 이 기준 미달은 유한 지표라도 INCONCLUSIVE다.
|
||||
|
||||
독립 [graph indicator 검산](../../.dryforge/hht-remediation-20261012/approved-review/independent_graph_indicator_probe.json)은 explicit-time coupled 다항식 세 상태의 **192 input sign corners**에서 위 세 일차 sensitivity가 direct Q derivative와 exact Fraction equality임을 확인했다. Absolute-inverse radius가 모든 corner action을 포함하고, sparse direct RHS의 **150 scalar 연산**에서 binary64 error가 CA radius 이하인 것을 확인했다. Native exit 0은 [manifest](../../.dryforge/hht-remediation-20261012/approved-review/independent-native.json)에 있다. Actual shell C++ arithmetic count, inverse-column solve 및 전체 C08의 N7 PASS를 인증하는 결과는 아니다.
|
||||
|
||||
### Large DIRECT: physical p의 독립 누적
|
||||
|
||||
큰 predictor의 예 `a0_Z=-800000`, `h=.25`, `β=.275625`에서 `pp_Z=-11218.75`, `s=βh²=.0172265625`, `Ar≈6.51e5`다. Binary64의 `s*ulp(Ar)=2.0054358174e-12`, `ulp(s*Ar)=1.8189894035e-12`는 관측한 late δp 약 `2e-12`와 같다. pp+sAr를 매 correction 뒤 다시 만들면 작은 물리 p의 해상도가 큰 두 항의 해상도에 묶인다. 기존 Large residual cycle과 크기가 일치하지만 원인 확정/해결 완료는 새 실행으로 확인해야 한다. Analytic/full null identity의 약 `2e-13` 결함을 이 physical residual 실패의 주원인으로 보고하지 않는다.
|
||||
|
||||
Legitimate minimal fix는 선택한 physical `p_start`에 모든 requested δp를 직접 누적하고 `Ar+=δp/s`를 별도로 유지하는 것이다. Exact arithmetic에서 `p_start=pp+s Ar_seed`이며, 귀납하면 `p_new=pp+s Ar_new`는 변하지 않는다. 승인 Ar0/ap0, first-start 선택, full E, N2/N3, fixed BC, graph branch 및 Newton100을 바꾸는 새 적분법이 아니다. Floating p와 Ar의 두 표현을 물리적으로 같다고 bitwise 강제하지 않고 기존 uncancelled update 판정으로 검사한다.
|
||||
|
||||
CA p radius는 actual initial branch의 `Bp_start=Bpp` 또는 inherited `Bp_old`에서 시작하여 매 actual `p+=δp`마다 `Bp_new=Bp+ρ(p_new)`를 outward 누적한다. Fixed arithmetic-only δp input radius는0이고 solve noise는 별도다. 기존 `Bpp+s BAr+...`를 새로운 actual p path의 radius로 승계하지 않는다. Ar division/addition, vp/ap reconstruction, graph lift 및 whole-history 누적은 기존 명세대로 유지한다. Controller의 actual candidate-p radius 전달 및 accumulator 수정은 정적 대조했다. Predictor copy와 fixture의 `pp+s*0`처럼 실제 경로가 다르면 보수적 추가 primitive의 범위도 표시한다.
|
||||
|
||||
[독립 p-carry probe](../../.dryforge/hht-remediation-20261012/approved-review/independent_position_carry_probe.json)는 세 작은 p seed와 흡수되는 corrections의 **201 scalar 연산**에서 exact Fraction relation 및 CA radius를 확인했다. 예 p≈1에서 direct p error 약 `1.8e-17`인 correction을 large-term reconstruction은 약 `3.8e-13` 다르게 저장했다. vp의 large-product ULP도 약 `1.46e-11`이므로 rate staircase는 별도 확인 대상이다. Coupled vp/ap carry 또는 compensated Ar는 수학적으로 필수인 선행 수정이 아니다. Minimal p fix 후 actual rate floor가 문제로 남으면 같은 endpoint/N3/N7 판정 아래 별도 산술 개선을 검토한다. Trial의 vp/ap를 oracle 또는 defect solve로 교체하지 않는다.
|
||||
|
||||
N3의 **resolved increment**는 absolute closure와 구별한다. 큰 old p를 denominator에 넣어 작은 requested increment의 손실을 숨기지 않도록 accepted `p_new-p_old`와 실제 predictor increment/선택 seed/누적 correction을 uncancelled increment scale로 대조한다. 원문은 `q1−qn`과 저장된 predictor/correction의 대조를 요구한다. 후속으로 추가했던 `pnew−pp=βh²Arnew`와 fixture의 `vnew−vpp=γhArnew`는 서로 가까운 저장 좌표/속도를 빼고 작은 단일항만 분모에 넣는 **별도 강화 조건**이었다. 해당 식의 대수적 동등성만 확인한 이전 정적 PASS는 계약 적합성 판정으로 충분하지 않았으며 이를 정정한다. [당시 실행](../../.dryforge/hht-remediation-20261012/reduced-resolved-release-core.log)의 FAIL은 보존한다.
|
||||
|
||||
[독립 N3 반례](../../.dryforge/hht-remediation-20261012/approved-review/independent_n3_increment_probe.json)에서 old p=`.4`, predictor increment=`.0065`, correction=`1e-8`일 때 원 whole-increment metric은 `1.3344e-16`으로 PASS지만 추가 단일항 metric은 `5.26356e-10`으로 FAIL다. 같은 `1e-12`를 사용해도 분모·비교 대상이 달라진 것이다. Genuine requested increment 손실 사례도 별도로 FAIL하여 원 계약을 무조건 통과시키는 trace가 아님을 확인했다.
|
||||
|
||||
최신 production/fixture는 predictor 시작이면 **old p에 더하기 전** `h*vold`, `h²(.5−β)*oldAr` 두 항을 기록하고, 모든 실제 requested δp를 Neumaier signed sum/compensation과 `Σabs(term)`에 누적한다. Old-p 선택/fallback은 실제 같은 old-p 저장값으로 시작하므로 세 trace vector의 initial zero가 정확한 상관관계다. Accepted 비교는 `pnew−pold` 대 `sum+compensation`, denominator=`Σabs(term)`이며 finite-first·scale0 exact·`<=1e-12`를 그대로 적용한다. Rounded applied difference를 trace에 넣어 항등식으로 만들지 않고 old p도 분모에 넣지 않는다. Step별 trace 초기화는 whole-history CA p/Ar radius 초기화와 다르며 CA radius는 계속 전파한다.
|
||||
|
||||
추가 단일항 gate는 제거됐고 원 absolute `p=pp+βh²Ar`, `vp=vpp+γhAr`, physical a/public A filter 및 전체 `pnew−pold`/`vnew−vold` update는 유지됐다. Old physical a와 old Ar도 분리한다. 이 수정의 정적 판정과 위 최신 focused 실행 판정은 PASS다. Primary-p/context의 [native 기록](../../.dryforge/hht-remediation-20261012/reduced-primary-p-large-and-context.native.json)은 당시 0으로 별도 보존하며, 최신 판정에는 동결 source의 새 native 기록을 사용한다.
|
||||
|
||||
## Sparse augmented Newton 및 N2 대응
|
||||
|
||||
Reference 규모에서 dense J/graph third tensor를 피하기 위한 **selector residual의 exact Newton**은 승인된 p-HHT의 동일 nonlinear endpoint root를 푸는 구현 선택으로 타당하다. `Ep=Lp^T E`를 쓰되 이를 `J^T E` 접선에서 `delta J`를 생략한 방법이라고 부르지 않는다. Trial은 매번 coupled Q graph와 exact chain-rule v/a로 구성한다.
|
||||
|
||||
`N_z=Lz^T N`이 nonzero diagonal이고 `psi=N^T E=0`이면 Ep=0는 E_f=0를 뜻한다. `G=psi_q Lz` 및 `psi_q N`의 regularity와 J/N transversality를 별도로 확인하면 기존 `J^T E` root와도 동등하다. Fixed pivot에서 N_z가 zero/invalid로 변하면 실패하며 silent pivot 변경은 없다. **Newton correction 자체는 일반적으로 서로 다르다**: 두 residual 사이의 q-dependent row transformation을 미분하면 off-root 항이 생기기 때문이다.
|
||||
|
||||
Augmented unknown은 `(delta p,delta z,delta v_z,delta a_z)`이고 다음 substitutions를 사용한다.
|
||||
|
||||
`delta q=Lp delta p+Lz delta z`, `delta v=Lp cv delta p+Lz delta v_z`, `delta a=Lp ca delta p+Lz delta a_z`.
|
||||
|
||||
Fixed endpoint time과 frozen predictor/old ap에서 원 ψ0/1/2의 정확한 linearized rows는 다음과 같다. `gradient_W=psi_qq v+psi_qt`, `third_WW=gradient_q{psi_qq[v,v]+2psi_qt v+psi_tt}`다.
|
||||
|
||||
1. `psi_q delta q=0`.
|
||||
2. `psi_q delta v+gradient_W delta q=0`.
|
||||
3. `psi_q delta a+(psi_qq a+third_WW) delta q+2 gradient_W delta v=0`.
|
||||
|
||||
물리 row는 `Lp^T[(Iq+Kint)delta q+Iv delta v+M delta a]=-Ep`다. RHS가 0인 hidden rows는 **trial의 ψ0/1/2가 exact chain-rule로 해결된 경우**다. 유한 root/derivative solve defect가 남으면 이를 감추지 않고 실제 residual/solve certificate와 함께 처리해야 한다. 보조 unknown은 Newton linearization에만 사용하며 physical state는 새로운 p의 Q/chain-rule로 다시 복구한다. δz/δv_z/δa_z를 accepted history에 직접 더하는 방법은 아니다.
|
||||
|
||||
독립 Fraction probe에서 explicit-time coupled 2p/2z의 6×6 auxiliary block을 Gaussian elimination으로 풀었다. 세 상태, 두 p basis 방향 모두 eliminated δq/δv/δa가 RC-10의 직접 analytic action과 **exact rational equality**였다. 실제 shell mass-null/branch·conditioning·정확한 selector tangent의 실행 검증은 남는다.
|
||||
|
||||
Augmented unknown의 time/length 차원을 보존하도록 예를 들어 `(Dp^-1 delta p,Dz^-1 delta z,h Dz^-1 delta v_z,h² Dz^-1 delta a_z)`와 hidden rows `(psi0,h psi1,h² psi2)`를 사용하여 scaled sparse solve를 만들 수 있다. 실제 적용한 unsymmetric operator/RHS/solution에서 기존 N2-L `<=1e-12`를 검사하고 singularity·불량 conditioning을 scalar floor로 숨기지 않는다.
|
||||
|
||||
N2-Q/V/a/A는 full chart의 실제 linearized variation을 각각 u/phi 채널로 나눠 계산한다. `||D^-1 delta q||inf`, `h||D^-1 delta v||inf`, `h²||D^-1 delta a||inf`, `h²||D^-1 delta A_full||inf`의 해당 채널 값은 기존 `<=1e-10`이며 모든 gate의 AND다. Public `delta A_full=(1+alpha)delta a`는 old physical a를 고정한 endpoint filter variation이다. Private `delta Ar=delta p/(beta*h²)`도 의미를 분리해 검사한다. Empty-null이면 원 full-coordinate gate의 `{1,gamma/beta,1/[(1+alpha)beta],1/beta}` 계수로 환원한다. Principal chart physical v/a와 spatial omega/omega_dot는 다른 quantity이며 이 gate에서 서로 바꾸지 않는다.
|
||||
|
||||
위 변화량은 linearized variation이다. 유한 새 p에서 실제 복구된 full state 증가량과 rounded requested correction을 별도 기록한다. 새 endpoint의 원 full E, finite/BC/recovery, hidden defects·update identity 판정과 Newton100 한도를 유지하며 작은 linear correction만으로 accept하지 않는다.
|
||||
|
||||
Hidden acceptance의 원래 N3 구분은 유지한다. Frame0의 hidden1/2 consistency와 accepted psi0의 기존 정규화 기준을 적용하고, endpoint hidden1/2는 raw/normalized diagnostic 및 N7 시간 검증 대상으로 남긴다. 이를 새로운 unconditional N2 `1e-10` gate로 확대하지 않는다. Graph/rate solver의 backward check와 정확한 재구성 의미도 diagnostic을 clamp하거나 silent projection할 근거가 아니다.
|
||||
|
||||
기존 physical-complement mass SPD와 psi_q N의 regularity는 재사용할 수 있다. `J=[I;z_p]`여서 column rank가 보장되고, `psi_q N=G(N_z-z_p N_p)`이므로 nonsingular G와 기존 regularity는 J/N transversality를 준다. M의 kernel이 N이고 physical complement가 SPD이면 `J^T M J`도 strict positive다. Dense reduced mass를 추가로 저장·factorize할 필요는 없다. 다만 psi_q N의 conditioning은 G의 conditioning을 보장하지 않는다. G의 scaled condition/inverse-action evidence를 별도 확보하고, rcond를 forward-error certificate로 해석하지 않는다.
|
||||
|
||||
## Production 채택에 필요한 evidence
|
||||
|
||||
### C08a 현재 실행: FAIL 및 원인 분리
|
||||
|
||||
[Release C08a log](../../.dryforge/hht-remediation-20261012/reduced-release-c08a.log)는 고정 `h=1/16..1/256` 전체 실행의 **native 8 / FAIL**이다. Physical angular-a의 finest max error `1.003052994395584e-4`는 승인 `1e-4`를 넘고 h64→128 order `1.777772580127911`은 `1.8` 미만이다. Hidden1/2의 마지막 refinement strict decrease도 실패했다. 로그의 기존 N7 factor100 separation은 통과했으므로 이 실패를 단순히 N7 INCONCLUSIVE 또는 테스트 통과로 바꾸지 않는다. Runtime source/binary closure는 메인이 별도로 고정한다.
|
||||
|
||||
| h | Angular-a max error | 최대 시점 | 최대오차의 null / physical 성분 |
|
||||
| --- | --- | --- | --- |
|
||||
| 1/64 | `1.377134252e-3` | `.03125` | `3.31194e-6 / 1.377130270e-3` |
|
||||
| 1/128 | `4.016182211e-4` | `.0078125` | `9.26867e-7 / 4.016171515e-4` |
|
||||
| 1/256 | `1.003052994e-4` | `.05078125` | `2.49769e-7 / 1.003049885e-4` |
|
||||
|
||||
Null-only recovered acceleration의 전체 max error도 각 grid에서 사실상 동일하다. 이는 graph hidden2 보정만으로 physical-a 시간오차를 해결할 수 없다는 증거다. q/v는 거의 2차이고 angular-a의 최대 시점이 startup/early elastic transient 사이에서 이동한다. 고주파의 비점근 구간과 sampled maximum-envelope가 가능한 원인이지만 actual shell 원인 확정은 아니다. Actual C08a physical M/K spectrum, 각 초기 error의 modal projection, analytic p(t)의 첫-step HHT defect와 independent N5가 필요하다.
|
||||
|
||||
독립 [forced-oscillator probe](../../.dryforge/hht-remediation-20261012/approved-review/independent_hht_transient_probe.json)는 정확 초기 상태와 동일 승인 HHT recurrence만 사용했다. `q_exact=sin(.7t)`, `F=(Ω²-.7²)sin(.7t)`에서 Ω=320의 h64→128 a-order는 `1.783906992`, Ω=640은 `1.728040350`이다. 구현오류 없이 fixed-grid order 미달이 가능함을 보여주는 mechanism evidence이며 shell acceptance가 아니다.
|
||||
|
||||
Startup의 별도 유도: 정확 reduced jerk `jp0`에 대해 승인 `Ar0=ap0`이면 `Ar1=ap0+(1+α)h jp0+O(h²)`이고 첫 vp update의 h² 계수는 `γ(1+α)=.5225`다. Exact 계수 `.5`와의 차이가 초기 고주파 transient를 자극할 수 있다. 진단 후보 `Ar0=ap0+αh jp0`는 `(1-γ)α+γ(1+α)=.5`로 해당 항을 제거하고 소형 Ω320 probe의 a-order를 `1.916456951`로 개선했다. **이 후보는 RC-04의 초기화 변경이며 현재 승인된 production에 적용하지 않는다.** Original frame0 또는 첫 step를 제외하거나 가속도를 oracle로 덮어쓰는 해결책도 허용하지 않는다.
|
||||
|
||||
Hidden1/2는 reduced chain-rule reconstruction에서 수학적으로 0인 식이다. 현재 normalized max는 각각 약 `1e-16`, `1e-14..1e-13`이다. `ManufacturedHidden`의 full physical/internal projection에는 analytic null identities의 cancellation과 higher-derivative 연산이 포함되어, sparse scalar ψ 계산보다 roundoff가 클 수 있다. Residual이 0에 수렴하는 별도 truncation component가 해상되었다는 증거 없이 이 roundoff의 strict refinement decrease를 temporal accuracy로 해석할 수 없다. Compensated contraction 및 independent higher-precision/direct-scalar 재평가는 합법적 수치 개선이지만 strict monotonicity를 보장하지 않는다. 현재 gate는 FAIL로 유지한다.
|
||||
|
||||
### C08a 사용자 승인과 이전 후보 검토의 구분
|
||||
|
||||
2026-10-13 사용자는 기존16..256을 보존하고 최종512/1024를 추가하며, hidden1/2 strict decrease를 **모든 frame의 inventory·finite 및 normalized `<=1e-10`, scale0 raw exact0** 검사로 대체하는 안을 승인했다. Physical q/v/a의 final error `1e-4`, 마지막 두 refinement order `1.8` 및 N7 factor100은 유지한다. 아래 resolved-only 감소/uncertainty 분류는 이전의 독립 검토 후보이며 이번 승인안이 요구하는 추가 gate가 아니다. 승인 변경 source의 실행 판정은 PENDING이며 과거 5-grid FAIL을 삭제하거나 새 source PASS로 대체하지 않는다.
|
||||
|
||||
아래는 승인 전의 후보·장단점 검토 기록이다.
|
||||
|
||||
1. **C08a final grid 추가:** 기존16..256의 실패·raw data를 보존하고512/1024를 최종 점근 판정 후보로 추가한다. Final normalized error `<=1e-4`, 마지막 두 refinement order `>=1.8`, N7 factor100 및 physical-a 의미는 그대로다. 이는 default production timestep 변경이 아니며 새 acceptance grid의 승인이 필요하다. Finer run은 진단 evidence일 뿐 승인 전 기존 FAIL을 덮어쓰지 않는다.
|
||||
2. **Hidden 판정 변경 후보:** 현재 N3 psi0/초기 hidden1/2 및 original full E/N4는 보존한다. C08 endpoint hidden1/2에는 같은 normalized 숫자 `<=1e-10`의 upper criterion을 추가하고, **resolved nonzero defect**에 한해서 마지막 두 refinement의 감소를 검사하는 안이다. 기존 endpoint1/2는 N3에서 raw/normalized diagnostic이며 unconditional `1e-10` gate가 이미 있었던 것은 아니다. 이 안은 평가 대상과 acceptance 조건의 변경이고 자동 채택하거나 단순한 기존 기준 유지라고 표시하지 않는다. Numeric threshold 완화는 없지만 unresolved zero quantity의 strict decrease 조건을 대체한다.
|
||||
|
||||
단위 및 metric은 명확히 고정해야 한다. ψ0/ψ1/ψ2의 raw 단위는 각각 energy, energy/time, energy/time²다. `S1=sum_j |ψq_ij v_j|+|ψt_i|`, `S2=sum_j |ψq_ij a_j|+sum_jk |H_ijk v_j v_k|+2sum_j |ψqt_ij v_j|+|ψtt_i|`는 같은 차원의 uncancelled sums다. Scaled x/w/b를 사용해도 D의 변환을 함께 적용하면 동일 차원이다. Current C08 stored property는 `max_i |ψk_i|/Sk_i`이며 raw 값이 아니다. Source에서 실제 contraction 내부의 uncancelled scale를 어떻게 보존했는지도 함께 고정한다. `S=0`은 raw exact0만 PASS, C04b unit-circle의 raw `1e-6/1e-4`를 shell에 이식하지 않는다.
|
||||
|
||||
Resolved 판정에는 **별도 arithmetic-only hidden uncertainty**가 필요하다. ψ1/ψ2 실제 contraction의 CA roundoff replay 또는 독립 고정밀 평가 차이를 기록하고, graph/rate solve backward checks와 N5를 별도 통과해야 한다. Raw uncertainty와 uncancelled scale의 arithmetic radius를 모두 구해 `S-BS>0`에서 CA quotient rule로 normalized uncertainty를 계산한다. 작은 S에 임의 floor를 넣지 않는다. 실제 hidden defect를 이미 포함한 ε1/ε2를 noise로 재사용하면 `noise>=defect`로 모든 실패를 unresolved라고 만드는 순환 논리가 된다. Physical-a N7 noise도 단위가 달라 그대로 사용할 수 없다. 최소 지표 범위·누락된 operator 평가 불확실성은 표시하며 엄밀한 전체 AD enclosure라고 부르지 않는다.
|
||||
|
||||
후보의 구체 분류는 (a) zero/exact 또는 defect가 arithmetic uncertainty와 분리되지 않으면 **constraint upper criterion 판정 + temporal decrease N/A**, (b) nonzero defect 및 감소량이 두 grid uncertainty 합의100배보다 크면 기존 strict decrease 판정, (c) nonzero 추세가 해상되지만 감소가 없으면 FAIL, (d) 필요한 uncertainty가 빠지거나 감소량이 미해상되면 INCONCLUSIVE다. 전 구간 upper criterion 및 finite/zero-scale 검사는 어느 분류에서도 생략하지 않는다. 두 grid에 해상된 nonzero truncation 부분이 없다면 'hidden 시간수렴 PASS'라고 보고하지 않는다. 장점은 zero-constraint roundoff를 물리 시간오차와 구분하는 것이며, 손실은 기존 raw strict-decrease assertion을 모든 grid에 일괄 적용하지 않는다는 점이다. N5·independent diagnostics·upper criterion으로 구현 오류를 숨기지 않는 보완이 필요하다.
|
||||
|
||||
실제 coupled shell의 정확한 reduced tangent를 N5 sweep 및 곡률/시간/`delta J` omission mutation으로 확인한다. Empty null/all-fixed/부분 BC·rank-change·frame0 복원·inner/outer 실패 rollback을 각각 확인한다. Local positive mass와 regularity, full equilibrium 및 hidden diagnostics는 같은 accepted full q/v/a에서 얻어야 한다. Fixed component graph 밖의 chart/history transport는 지원했다고 주장하지 않는다.
|
||||
|
||||
승인된 P absolute/balance 판정은 평면·centered·all-free C08b에만 적용한다. 최종32768/65536/131072 grid와 N7 separation, 전체 configured Debug/CTest 및 지정 원본 U/UR comparison의 최종 완료 evidence는 본 검토에서 확보하지 않았다. C08a의 과거 fixed-grid 실행은 위 FAIL이며 승인된 추가 grid/hidden 기준 변경본의 실행 완료를 뜻하지 않는다. 공개 A/schema 승인이나 소형 probe PASS는 이 검증을 대체하지 않는다. 외부 U/UR tolerance 5%/RMS1%, identity·finite·zero-scale 정책과 현재 내부 N2–N7 값은 변경하지 않았다.
|
||||
|
||||
## C08b ψ0 실패의 추가 독립 검토
|
||||
|
||||
[Closed C08b 실행](../../.dryforge/hht-remediation-20261012/reduced-closed-c08b.log)은 599.92s 뒤 [native8](../../.dryforge/hht-remediation-20261012/reduced-closed-c08b.native.json)로 FAIL이다. 마지막 trace는 grid32768이며 ψ0=`5.7596457839072371e-18`, 원 scale=`1.627592976412797e-8`, normalized=`3.5387506995769016e-10`으로 기존 `1e-10`을 넘는다. Raw ψ1/ψ2의 normalized 값은 각각 `1.43396e-14`, `5.30008e-11`이다. Exception은 ψ0 조건에서 발생했다. 당시 log에는 failure의 정확한 increment/stage 및 scalar primitive 값이 없어 원인 확정은 PENDING이다. 이후 추가된 failure context/primitive/projection 진단 source는 이 실패 실행과 구분한다.
|
||||
|
||||
후속 [동일 h의 짧은 failure probe](../../.dryforge/hht-reduced-c08a-finer-20261013/c08b-hidden-probe.log)는 **inc4, t=.0001220703125, accepted stage**에서 같은 failure를 재현했다. Root iterations0, normalized primitive max=`6.35516e-14`, raw max=`2.88070e-22`다. Node0의 primitive=`1.47926e-22`, projected=`5.75964578e-18`이며 **같은 scale**를 사용한다. [독립 Fraction replay](../../.dryforge/hht-remediation-20261012/approved-review/independent_c08b_exact_dot.json)는 log hash와 9개 node의 frozen binary64 operands를 검산했다. Node0 final-dot rounding=`1.99168e-25`, force/operator gap=`5.75949766e-18`; node8 gap=`8.29803207e-18`이다. Root tolerance/scale mismatch와 최종 dot reduction은 이번 재현의 주원인에서 제외된다. Root polishing 또는 final-dot compensation만으로 해결할 수 없다.
|
||||
|
||||
같은 후보의 analytic scalar `ψprimitive=Σ k*S*γ−nᵀF`와 actual assembled `ψprojected=nᵀ(fint−F)`는 수학적으로 같아야 한다. Position root의 scale와 dynamic scale도 대조한다. 같은 q/force/null이면 dynamic scale에는 position 항과 추가 `Σ|Ma|+|c|`가 있으므로 dynamic scale가 작아지는 현상은 정상적인 time-step 효과가 아니다. Assembly authority·scale 항 누락/순서·state mismatch를 먼저 확인한다. Graph의 no-change/2-cycle 반환은 scaled certificate 없이도 가능하므로 root residual·relative scale·last correction·termination reason도 필요하다.
|
||||
|
||||
[독립 산술 한계 계산](../../.dryforge/hht-remediation-20261012/approved-review/independent_c08b_projection_probe.json)은 final projection의 frozen binary64 operand와 원 scale가 `L1=Σ|n*g|`를 덮는 조건에서 `γ5*L1<=9.03496e-24`다. 관측 ψ는 이 최종 3-product/2-add rounding 한계보다 약 `6.37e5`배 크다. 따라서 **최종 dot의 상쇄만**을 원인으로 단정하거나 compensated dot만으로 해결된다고 주장할 수 없다. Primitive도 같은 scale로 certified라면 `|projected−primitive|>=4.13205e-18`이므로 upstream physical/drilling force·null·AD evaluation 오차를 검토해야 한다. 이 한계는 AD 전체의 forward-error bound가 아니다.
|
||||
|
||||
기준/scale를 유지하는 수정 순서는 다음과 같다.
|
||||
|
||||
1. Same-frame primitive/projection/각 성분/uncancelled L1 및 root 종료 근거를 보존한다. Frozen 저장값 projection을 exact Fraction 또는 독립 고정밀로 replay하면 최종 reduction 오차와 upstream operand 오차를 분리할 수 있다.
|
||||
2. Primitive residual이 해상되며 root 조기 종료가 주원인이면, 같은 inner Newton100·fixed chart 안에서 원 projected ψ0 검사를 만족할 때까지 graph 평가/수정을 진행하도록 종료 조건을 보강한다. Stagnation을 PASS로 바꾸거나 승인 N7 defect solve를 state에 적용하지 않는다. 모든 rate·operator·full E는 바뀐 같은 q에서 재평가한다.
|
||||
3. Primitive는 충분히 작고 `projected−primitive`가 남으면 local force/AD/geometry/null의 상쇄 전 연산을 개선한다. 필요한 경우 해당 evaluation을 더 높은 precision으로 독립 대조하고 value/gradient를 함께 개선하며 같은 N5/N4/full-residual 검사를 반복한다. ψ를 scalar primitive로 덮어쓰기, force의 null 성분을 projection으로 제거하기, denominator 확대·floor·clamp로 통과시키기는 허용하지 않는다.
|
||||
|
||||
Source의 `ExpSkew`는 norm `1e-4..0.5`에서 value/gradient/Hessian을 direct `(1−cos(norm))/squared_norm`으로 계산하면서 directional/mixed 층만 stable9항 series로 교체한다. 같은 Jet의 derivative 층이 서로 다른 산술 evaluation을 쓰는 점이 실제 위험이다. [독립 coefficient probe](../../.dryforge/hht-remediation-20261012/approved-review/independent_rodrigues_coefficient_probe.json)는 norm `.0001314`에서 B 계수의 squared-norm D0/D1/D2/D3 direct 오차 약 `5.77e-10/.0334/3.87e6/6.72e14`를 재현한다. Complete-Jet stable9항 사용은 같은 Rodrigues 정식의 산술 개선이며 허용 physics/chart 범위 변경이 아니다. Norm .5에서 9항 coefficient의 D3 truncation은 A 약 `8.60e-22`, B 약 `3.91e-23`이나 이 scalar 검산이 full tensor/C++ Jet 실행을 인증하지는 않는다. 기존 `1e-4` 및 새 `.5` 경계 양측 D0–D3 연속성·null work·force/Hessian N5와 실제 failure-prefix/full C08 재검증이 필요하다. Fresh derivative/operator authority와 physical mass 경로의 일관성도 유지한다.
|
||||
|
||||
후속 source는 norm<.5에서 `result=stable`을 대입하여 value/first/second/directional/mixed를 모두 같은 series로 반환한다. 정적 수식 대응은 PASS다. [Frozen54-q 원본 point](../../.dryforge/hht-reduced-c08a-finer-20261013/point-original.log)의 FAIL과 [안정 series point](../../.dryforge/hht-reduced-c08a-finer-20261013/point-stable.log)의 PASS를 읽었다. Stable node0 physical null 약 `−1.65e-24`, primitive 약 `1.52e-22`로 force gap이 줄었다. [Element 원본](../../.dryforge/hht-reduced-c08a-finer-20261013/element-unit-original.log)은 새 actual inc4 null-force regression에서 FAIL, [안정 series element](../../.dryforge/hht-reduced-c08a-finer-20261013/element-unit-stable.log)는4검사 PASS(1.219s)다. 이는 scratch local source의 재현/수정 증거이며 아직 production build/runtime 동결 증거를 대체하지 않는다.
|
||||
|
||||
새 `SmallRotationPhysicalForceRetainsDrillingNullIdentity`는 actual24DOF local 상태의4node 물리 null과 internal force/scalar 관계를 각각 normalized `1e-10`으로 검사한다. 새 boundary test는 `1e-4`/`.5` 양측에서 기존 scaled third-gradient fixed sweep을 실행한다. 두 경계의 D0–D3 직접 continuity 비교 전부를 포함하는 것은 아니므로 추가 coverage로 구분한다.
|
||||
|
||||
별도 N3 finding도 있다. 같은 C08b log에서 whole-velocity subtraction gate가 grid64부터 반복 실패하고, grid32768 step3에는 `Δv≈−3.26128e-16`, 우변 `−3.262057e-16`, ratio=`2.38160e-4`다. 원 N3의 명시된 추가 subtraction trace는 `q1−qn`이며 RC-04의 velocity 식은 `vp=vpp+γhAr`다. 새 `vnew−vold` subtraction metric은 별도 강화 조건이므로 제거는 계약 정정으로 타당하다. 원 absolute velocity 식·full physical rates·whole-history CA/N7는 유지해야 한다. 과거 static 판단에서 whole-velocity subtraction까지 계약 적합하다고 취급한 범위는 정정한다. ψ0 산술 개선과 이 metric 정정을 별개로 실행 검증하며 원 실패 log는 보존한다.
|
||||
|
||||
## 다음 actual 검증의 최소 범위
|
||||
|
||||
Augmented N5의 local smoke와 별도로 finite **off-graph q/v/a** 상태를 사용하면 graph root가 principal branch 밖으로 가는 문제 없이 discriminating private F/Fdot/Fddot를 둘 수 있다. 현재 F=`1e-6`은 external position derivative 누락을 검출하기에 충분한지 증명되지 않았다. `Ha`, `T[W,W]`, rate row의 `2W`, explicit `ψqt/ψtt`, external position gradient를 하나씩 누락한 **analytic action**과 fresh 원 residual FD를 비교하여 각 mutation이 기존 N5 한계를 넘는 증거가 필요하다. 한 번에 여러 항을 삭제해 어느 항이 검출됐는지 숨기지 않는다. Warped1요소와 shared-node2요소에 같은6방향·4block·고정 sweep/내부 연속쌍을 적용하여 sparse scatter·cross-node coupling을 확인한다. 독립 Fraction toy graph 결과가 actual omission/warped/shared coverage를 대신하지 않는다.
|
||||
|
||||
새 loaded rigid translation 검사는2분리요소의 실제 reduced executor를 serial/TBB/serial로 실행하고 geometry/director/tangents/CLOAD에 동일한 `Rz(.7)Rx(.4)`를 적용한다. 최초 `kCoordinateScale=3` global extent finding은 후속 ell1 적용으로 정적 CLOSED다. 후속 source는 all-node/frame full q/v/a/A, force families, triad/director 및 별도 nonzero-rotation fixture의 covariance를 비교한다. One-element finite-rotation fixture에도 hardcoded two-element Eref를 사용하던 점은 후속 fixture별 Eref 인자로 정적 CLOSED다. `EXPECT_DOUBLE_EQ`의4ULP scalar 비교와 log/source/ordering의 exact 비교도 구분한다. 후속 rotated 초기 재구성 실행은 아래 N2 FAIL이며 전체 source-binary closure는 아직 없다. Sparse structure/C09 무하중 uniform-velocity P/T/C10 rollback 및 일반 유한회전 covariance를 완료로 확대하지 않는다. Global-component selector는 proper-Q 후 nonlinear reduced-coordinate 변화가 될 수 있으므로 이산 HHT covariance는 continuous physics objectivity만으로 자동 인증되지 않는다.
|
||||
|
||||
## N3 qtrace의 실제 coordinate low carry
|
||||
|
||||
[Stable C08b1024 trajectory](../../.dryforge/hht-reduced-c08a-finer-20261013/c08b1024-stable-trajectory.log)는257frames를 평가했으나 inc200/full30의 qtrace ratio=`1.47277e-12`로 FAIL이다. [저장값 representability 검산](../../.dryforge/hht-reduced-c08a-finer-20261013/c08b1024-representability.json)의 exact requested target은 약 `.014162097179931568436`이고 저장 p=`.01416209717993157`은 누적 addition low `−1.43482e-18`을 잃었다. 다음 작은 float `.014162097179931568`의 같은 metric은 `3.07833e-13`이다. 이 사례는 tolerance를 바꿀 필요가 없는 산술 누적 개선 대상이다.
|
||||
|
||||
실제 coordinate pair의 high/low와 read-only requested trace의 compensation은 서로 다른 소유량이다. Pair update를 `(s,e)=TwoSum(high,δp)`, `t=low+e`, `(high_new,low_new)=TwoSum(s,t)`로 하면 exact pair 합의 변화는 `δp`와 t의 한 번 rounding뿐이다. EFT가 성립하는 finite binary64/gradual-underflow 실행에서는 **`Bpair_new=Bpair_old+ρ(t)`**, public high의 radius는 **`Bhigh=Bpair_new+abs(low_new)`**로 둘 수 있다. Radius 계산은 outward로 하고 nonfinite/FTZ 미확인은 인증하지 않는다. Ar는 별도 실제 δp/s update와 radius를 유지하며 vp/ap를 oracle로 대체하지 않는다. Accepted full residual·N3 absolute/trace·N7 factor100은 그대로 필요하다.
|
||||
|
||||
[독립 pair-carry probe](../../.dryforge/hht-remediation-20261012/approved-review/independent_coordinate_low_probe.json)는4개 normal/extreme/subnormal 경로152updates에서 exact Fraction pair/public-high error가 위 radius 이하임을 확인했다. 위 inc200의 best float도 독립 확인했다. 이는 Python IEEE 실행과 frozen correction arithmetic 검산이며 C++ MXCSR 또는 nonlinear error의 인증이 아니다. Probe의 사후 low folding은 representability 진단 전용이며 production accepted state를 사후 수정하는 절차가 아니다.
|
||||
|
||||
초기 predictor의 `pold+h*vold` 및 추가 `h²(.5−β)Ar_old` addition low도 qtrace target carry에 포함해야 한다. 기존 predictor high·두 시작점 선택은 보존하고, actual low 보조량과 초기 pair radius를 별도로 설정한다. 보수적 초기 bound는 기존 `Bhigh+abs(initial_low)`다. Old-p 선택/fallback은 같은 old-p로 시작하므로 low0의 correlation을 사용하되 inherited high radius는 유지한다. 최초 source의 predictor low 미반영 finding은 후속 production/fixture의 실제 초기화로 정적 CLOSED다. Final pair/high radius 또는 whole-history CA radius를 reset·clamp하지 않는다. Pair radius의 단조 증가와 달리 high radius의 `abs(low)` 항은 remainder가 high에 소비되면 줄 수 있으나 history reset/clamp가 아니다. Step별 requested trace 초기화와 accepted high로부터의 다음 step pair 초기화는 CA uncertainty 폐기와 구분한다. [Release focused native0](../../.dryforge/hht-remediation-20261012/compensated-coordinate-release-core.native.json)·13/13 PASS는 scalar/pair 관련 focused 범위이며 전체 C08의 N3 통과 증거가 아니다.
|
||||
|
||||
보상 산술도 원 N3를 모든 grid에서 만족시킨다는 보장은 없다. Target p의 가장 가까운 binary64와의 거리 `dmin`이 `1e-12*Σabs(requested increments)`보다 크면 어떤 저장 p도 그 기준을 만족하지 못한다. 독립 반례 old p=1, δp=`2^-54`는 best float가1이고 ratio1이다. 그런 실제 candidate는 **원 N3 FAIL**이며, arbitrary nextafter 선택·scale 확대·절대 floor·기준 완화·accepted-state polishing으로 통과시키지 않는다. N7의 시간오차 evidence와 iteration/roundoff dominance는 별도로 보고한다.
|
||||
|
||||
### Compensated C08a 전체 실패의 exact 대조
|
||||
|
||||
[공식 compensated C08a log](../../.dryforge/hht-remediation-20261012/compensated-c08a-release.log)는7grid 평가 뒤 testcase888.432s, [native8](../../.dryforge/hht-remediation-20261012/compensated-c08a-release.native.json)로 FAIL이다. [모든 exported failure의 독립 Fraction 검산](../../.dryforge/hht-remediation-20261012/approved-review/independent_c08a_representability.json)은 whole-coordinate update58회와 requested trace58회, 총116개의 gtest 오류를 집계했다. Requested trace58개는 grid512에서6개, grid1024에서52개다. **58개 모두 현재 p가 `pold+stored_increment`의 closest binary64이고 양쪽 neighbor도 원 `1e-12` gate를 실패한다.** 모든 checked coordinate subtraction은 exact다. `high+low`와 `pold+signed_sum+compensation`의 exact Fraction 차이는 최대 `7.70e-34`로, 이 requested trace 실패를 coordinate-carry 구현 오류로 설명할 근거는 없다. Whole-update의 Ar 우변 항은 log에 export되지 않아 해당58개를 exact replay했다고 주장하지 않는다. Requested gate만으로 기존 FAIL은 확정된다.
|
||||
|
||||
| 관측 | Best stored-coordinate metric | 양 neighbor metric | 판정 |
|
||||
| --- | ---: | --- | --- |
|
||||
| 첫 실패, grid512/inc278/full6 | `2.372329906e-12` | down `1.028833888e-11`, up `1.503299870e-11` | 원 N3 FAIL; 더 가까운 binary64 없음 |
|
||||
| 최악 실패, grid1024/inc555/full6 | `1.208331938e-11` | down `3.078365958e-11`, up `5.495029834e-11` | 원 N3 FAIL; 더 가까운 binary64 없음 |
|
||||
|
||||
### N3 표현 오차 분리: HHT-ADR-016 승인
|
||||
|
||||
다음 비교 대상 변경은 2026-10-13 사용자가 [HHT-ADR-016](ADR.md#hht-adr-016--reduced-좌표-증분-산술과-저장-표현의-분리)으로 **구현을 승인**했다. 구현·검증 완료와는 구분한다. 기존 computation threshold `1e-12`, uncancelled requested scale S 및 absolute p/v/a/A/full E/N2/N7는 유지하면서, increment computation은 exact represented pair `L=(p_high−pold_high)+subtraction_low+p_low`와 저장 predictor/correction trace T를 비교한다. Old accepted history는 실제 high이므로 step 시작 old low는0이다. Whole-coordinate update 검사를 유지한다면 그 우변의 원 항 scale를 보존하고 좌변도 같은 pair increment로 명시해야 한다.
|
||||
|
||||
실제 저장 high는 별도 `p_high=roundToNearestEven(exact(p_high+p_low))`를 검사한다. 임의 absolute floor를 N3 분모에 더하지 않고 high-only subtraction defect, low 및 closest-float 거리를 raw evidence로 계속 보존한다. Scale0에서는 represented increment/trace exact0, fixed high/low의 exact0을 우선한다. Pair와 출력 high의 CA uncertainty는 whole history 및 N7에 보존한다. 이 안은 arithmetic computation과 불가피한 좌표 quantization을 분리하지만 원 high-only subtraction gate의 비교 대상을 바꾸므로 승인 이전 original FAIL은 유지하며, 변경 source의 실제 검증 전 새 기준 PASS로 보고하지 않는다.
|
||||
|
||||
위58개 exported trace의 exact pair computation metric은 최대 `9.97303e-28`, stored high의 nearest-pair 검사는58개 모두 일치했다. 이는 승인안의 read-only 진단이며 승인 이전 source의 원 N3 FAIL 판정을 바꾸지 않는다. Whole-update Ar 우변 또는 전체 시간오차·모든 frame 조건의 새 acceptance 통과도 이58개 값만으로 주장하지 않는다.
|
||||
|
||||
## C09 initializer의 N2 channel 계약
|
||||
|
||||
[Initial equilibrium failure 진단](../../.dryforge/hht-remediation-20261012/initial-equilibrium-diagnostic-debug.log)은 full2의 residual=`−2.13662e-34`, row scale=`1.02177e-32`, acceleration=`1.31406e-34`를 기록한다. 승인 N2는 u/phi별 **`max_free |E_i| / max_free s_i`**이며 각 row의 ratio AND가 아니다. Per-row gate를 channel max로 교정하는 것은 계약 정정이다. Scale0는 해당 **전체 channel**의 모든 E가 exact0인 경우에만 PASS이고 empty channel은 N/A다. 모든 free residual/scale를 max 이전에 finite-first 검사하여 NaN을 숨기지 않고 fixed/reaction rows를 제외한다.
|
||||
|
||||
또한 initializer의 현재 s_i는 assembled c/internal/F의 절댓값과 assembled M의 matvec 항 절댓값 합이다. 원 N2는 `Σelement,j |Me_ij aej|+Σelement|ce_i|+Σelement|fphysical_ei|+Σelement|fdrill_ei|+Σload|Fload_i|`이므로 두 식은 일반 shared-element/상쇄 load에서 같지 않다. 실제 a0로 재평가한 assembly의 기존 element/load uncancelled residual_scale 또는 동등한 local scatter scale가 필요하다. 초기 a=0의 scale에 assembled `|Ma|`만 더해 교체한 것으로 충분하다고 주장하지 않는다. Physical range solve backward check, initial hidden consistency·N4 및 fresh reconstructed frame0/full equilibrium은 계속 별도로 적용한다.
|
||||
|
||||
최소 교정으로 helper의 잘못된 preliminary full-free acceptance loop만 제거하고 **caller의 fresh actual-a0 assembly**가 N2-R을 소유하게 할 수 있다. Production callsite는 `ExecuteReducedHht` 한 곳이며 actual a0 재조립→reconstructed frame0 N2→original initialized frame0 N2→commit 순서를 정적 확인했다. Helper의 positive-mass/range backward check/null/initial hidden 검사와 모든 candidate a의 finite/fixed exact0은 유지해야 한다. Internal header에 반환값은 아직 complete full-equilibrium acceptance가 끝나지 않은 candidate이며 caller의 재조립/channel N2가 필수임을 명시한다. Direct internal unit 검사는 해당 candidate/대수 범위로 한정한다. C08 `RunPlate`의 original initialized frame도 global `CompleteEquilibrium`만으로 N2를 대체하지 않고 fresh free_residual_metrics를 명시 검사해야 한다. 이 소유권 교정은 gate/tolerance 삭제가 아니며 source 수정·회귀 실행은 implementation owner가 수행한다.
|
||||
|
||||
후속 source에서 해당 loop 제거, 모든 candidate acceleration finite와 `ConstrainedDofs()` exact0, internal header의 candidate/caller certificate 계약을 재확인했다. C08 `RunPlate`도 fresh initialized frame의 free metrics finite 및 `<=1e-10`을 frame0 history 이전에 검사한다. Production의 original/reconstructed frame0 gate와 commit 순서는 그대로다. 이 helper-contract finding은 **정적 CLOSED**다. 후속 algebra8개 PASS와 actual C09 초기 N2 FAIL은 아래처럼 별도 판정한다. 새로운 actual N5 omission mutation·warped/shared 및 전체 Debug/reference 완료 판정과 혼동하지 않는다.
|
||||
|
||||
### Fresh caller N2 실행과 초기 재구성 차이
|
||||
|
||||
[Fresh Debug focused log](../../.dryforge/hht-remediation-20261012/initializer-caller-n2-debug.log)와 [native8](../../.dryforge/hht-remediation-20261012/initializer-caller-n2-debug.native.json)은 algebra8개 PASS와 loaded rigid/proper-Q 검사1개 FAIL을 기록한다. 실패는 rotated uniform translation의 reconstructed frame0 N2이며 testcase140.327s다. Preliminary helper gate의 계약 교정이 원 frame0의 모든 물리 검증 통과를 뜻하지 않는다. Detailed original/reconstructed channel numerator/scale 진단은 별도 진행 중이며 작은 값이라는 이유로 gate를 삭제하지 않는다.
|
||||
|
||||
RC §3의 동일 graph/rate 복원은 독립 두 solve의 bit pattern 일치를 뜻하지 않지만, 재구성된 physical rate의 원 full E/N2를 요구한다. 같은 q0/v0에서 ap를 보존한 재구성 차이는 z block에만 있으므로 일반 rotated n 전체의 mass-null 방향이 아니다. Exact arithmetic에서는 초기 hidden consistency와 G regularity가 차이0을 보장하나, floating-point hidden/RHS/solve 결함이 tiny z acceleration 변화와 실제 moment를 만들 수 있다. 우선 `E_reconstructed−E_original`과 `M*delta_a` 및 동일 sparse operator의 original/reconstructed hidden acceleration을 대조한다. 전자는 affine inertia 변화와 actual force/mass assembly 산술 gap을, 후자는 graph rate RHS/solve와 initializer 차이를 분리한다. 안정 dot/RHS·backward-checked refinement 또는 동등한 coupled range/hidden solve는 원인을 확인한 뒤 검토하며, original a0만 채택해 재구성 검사를 생략하거나 moment scale에 translation force floor를 넣지 않는다.
|
||||
|
||||
### Original 초기 moment도 실패: reference geometry 산술 후보
|
||||
|
||||
[후속 initial/reconstruction 진단](../../.dryforge/hht-remediation-20261012/c10-initial-reconstruction-debug.log)은 C10 두 검사 PASS와 rotated rigid 검사 FAIL(testcase137.126s)을 기록한다. Original `rho_u=1.45157e-16`이나 **original `rho_phi=0.0653541779`도 원 N2 FAIL**이다. 재구성은 phi numerator=`2.1257138844e-17`, scale=`2.3674025018e-17`, ratio=`0.897909791`이다. Worst full4에서 original residual=`−4.0318768289e-19`이며 a와 original a는 둘 다 `4.9146402261e-13`이다. 해당 row의 delta a0만으로 전체 column coupling이나 전체 재구성 오차가0이라고 주장하지 않는다. 따라서 원인을 재구성 solve 하나로 한정한 가설은 충분하지 않다.
|
||||
|
||||
`nonlinear_mitc4_inertia.cpp`는 `Xi+z Di`를 먼저 만들고 그 값들의 shape derivative 합으로 covariant를 평가한다. Flat uniform director이면 exact covariant는 z와 무관하지만 binary64의 큰 coordinate addition/reduction이 ±z Jacobian 차이를 만들 수 있다. 이어 M의 `Σscale hᵀh`와 force의 `Σscale hᵀ(Σh a)`가 다른 arithmetic path를 사용하므로, tiny first-thickness moment C1과 moment channel은 별도 cancellation 오차를 가진다. 안정 complement projection의 기존 Gram/rcond PASS만으로 이 point force/mass 일치를 보장하지 않는다.
|
||||
|
||||
[독립 geometry/linear-inertia replay](../../.dryforge/hht-remediation-20261012/approved-review/independent_c09_moment_probe.json)는 같은 rotated node geometry/director, rho2, thickness.1, source3×3×3 quadrature 순서와 pure translation a=`20 Q ex`를 Python binary64로 계산했다. Node0 source geometry의 opposite-z Jacobian 차이는 `3.46945e-18`, C1=`−2.66815e-20`, direct moment-Y=`−4.0318768289304696e-19`로 위 original residual과 일치한다. Stored binary64 M의 exact Fraction dot과 direct force의 moment-Y 차이는 `2.12267e-19`다. Shifted 두 번째 element도 같은 산술 gap을 보인다. Uniform director의 z 독립 covariant를 계산한 diagnostic 경로에서는 ±z gap/C1/moment/M·a가 모두 exact0이다. 이 probe는 actual initialized 전체 a·drilling force 또는 native MSVC/FMA 실행을 replay하지 않으므로 전체 원인의 확정/해결 PASS로 승격하지 않는다.
|
||||
|
||||
수학적으로 동등한 개선 후보는 canonical anchor와 partition identities를 써서 `ref_xi=ΣNξ_i(Xi−X0)+z ΣNξ_i(Di−D0)` 및 eta를 계산하고, `ref_zeta=(t/2)[D0+ΣNi(Di−D0)]`로 구성하는 것이다. General warped/nonuniform director 항은 보존하며 uniform director derivative는 구성상 exact0이다. Current covariant에도 같은 구조를 적용할 수 있으나 physical point와 spatial moment arm의 원 정의는 유지한다. Native actual ±z Jacobian/C1·M·a/direct force 및 range/null/RHS 대조 후 owner가 교정해야 한다. Flat rotated/large-offset 및 **nonzero physical C1의 warped/director-gradient** 회귀가 필요하며, geometry 변경을 진짜 C1의 clamp·rotation acceleration0 강제·N2 scale floor로 바꾸지 않는다.
|
||||
|
||||
### HHT-ADR-016 구현 독립 검토 범위
|
||||
|
||||
승인안의 whole/requested 두 gate에 exact pair increment를 동일하게 적용하고, 각각 원 HHT RHS/독립 compensated requested trace와 해당 uncancelled scale를 사용해야 한다. Neumaier trace의 `sum+compensation`을 먼저 하나의 rounded scalar로 줄여 exact low를 버리지 않는다. Stored high의 RN-even 검사는 nonoverlapping pair에 대한 actual high+low rounding 또는 동등한 exact spacing/tie 조건을 확인하며, nextafter로 state를 변경하지 않는다. Finite-first·fixed exact0·scale0 exact0와 finite EFT/subnormal 유효성을 유지한다. Expansion 중 overflow나 유효성 실패를 표현오차 예외로 통과시키지 않는다.
|
||||
|
||||
초기 predictor low와 whole-history pair/public-high CA radius는 승인 이전 TwoSum 경로 그대로 유지해야 한다. 새로운 검사 expansion의 산술 경계가 필요하더라도 이를 denominator floor나 N7 uncertainty reset으로 사용하지 않는다. Frozen58-case exact 비교, tie-even/odd 및 양방향 spacing 경계, subnormal/overflow/nonfinite, 누락/잘못된 correction mutation과 production/controller 동일 helper 적용을 source/runtime로 검증한다. Current implementation owner가 helper와 geometry source를 작성 중이므로 이 절은 준비 명세이며 정적/실행 PASS가 아니다.
|
||||
|
||||
### ADR016 실제 helper와 threshold boundary
|
||||
|
||||
Actual `hht_reduced_increment.h::CheckPairIncrement`는 최대3개 RHS와 high/low/old를 grow TwoSum expansion으로 보존하고 storage `high+low==high`를 독립 검사한다. 최대6개 입력이므로8-slot capacity가 충분하며 nonfinite/overflow는 실패다. Production와 controller의 whole/requested 두 gate는 각각 원3항 scale와 independent trace sum/comp 및 원 uncancelled scale를 사용한다. 기존 pair/history CA 코드 변화는 없다. FE_TONEAREST만 검사하던 최초 finding은 기존 `ArithmeticEnvironmentSupported()`의 MXCSR FTZ/DAZ/rounding guard로 교정됐고 상태 복원하는 negative tests를 확인했다.
|
||||
|
||||
[현재 helper의 독립 standalone MSVC 검산](../../.dryforge/hht-remediation-20261012/approved-review/independent_pair_increment_native.json)은 frozen58 requested 사례의 exact Fraction oracle와 arithmetic/storage 판정 및 defect RN이 모두 일치한다(native0, maxratio=`9.97303e-28`, helper SHA256=`9ef99d6a2801891e60b181ad598b6ca924b054d6be9c600c0cad358d6fc62a7e`). Actual exported whole HHT RHS는 없으므로 whole58개까지 replay했다고 주장하지 않는다. 이 evidence는 아래 exact comparator까지 반영한 helper source/binary에 한정되며 이후 변경에 승계하지 않는다.
|
||||
|
||||
Final expansion의 exact 값과 마지막 `difference += component`/division의 rounded scalar는 구분해야 한다. Actual standalone helper에 high=old=low=0, RHS=`{1e-12,2^-94}`, requested scale1을 주면 exact defect는1e-12를 넘지만 rounded defect/ratio가1e-12라 arithmetic/storage 모두 PASS다. 이는 approved computation threshold 근처의 rounding false PASS이며 frozen58의 충분히 작은 defect에는 영향을 주지 않는다. Owner에게 rounded ratio를 diagnostic으로 남기고 exact expansion과 threshold product의 sign을 비교하도록 요청했다. Threshold product의 underflow tail을0으로 가정하지 않으며 scale0 exact-zero/finite/environment gate를 유지해야 한다. 새로운 floor·tolerance 변경은 필요하지 않다.
|
||||
|
||||
### Anchor geometry 실제 source와 C1 coverage
|
||||
|
||||
Actual inertia source의 `DerivativeSum`은 canonical node0 차이, `InterpolatedSum`은 D0+ΣNi(Di−D0)를 사용한다. Current ξ/η는 reference coordinate anchor와 displacement derivative를 따로 더하고 director derivative를 유지한다. Reference/current ζ, reference volume 및 current positive-Jacobian predicate 모두 이 covariant에 대응한다. Geometry에는 high의 actual displacement/director를 쓰며 physical point/spatial arms·h·convective force·force/tangent 식은 그대로다. 이는 partition identities의 동등 산술이며 C1를 직접0으로 설정하지 않는다.
|
||||
|
||||
최초 Warped()는 one-element preprocessing이 constant director를 주므로 nonzero C1 smoke가 실패한 것이 geometry 오류를 뜻하지 않는다. 다음 left/right x-axis director tilt도 Dxi가y 방향이고 B_eta_x=d_x=0인 exact twist여서 determinant z-linear coefficient0이다. 이 fixture finding을 전달한 뒤 owner는 left/right ±.1 y-axis triad `ta=(cos,0,−sin),tb=(0,1,0),d=(sin,0,cos)`로 교정하여 Dxi_x와 physical C1를 만든다. 해당 fixture를 기존 독립5³ C0/C1/C2 recovery·energy/force oracle loop에도 포함한 것을 확인했다. 단순 coupling>0은 magnitude/identity oracle를 대신하지 않으며 실제 runtime은 별도 판정한다.
|
||||
|
||||
[Anchor 첫 focused Debug](../../.dryforge/hht-remediation-20261012/adr016-anchored-inertia-debug.log)의15/17 PASS·C09 및 최초 zero-C1 smoke FAIL은 당시 evidence다. Original phi가0으로 개선된 뒤에도 재구성 phi가약.968로 실패하여 초기 rate/operator의 별도 산술 문제가 남았다. CovariantIncrement는 이미 relative displacement Jet라 direct uniform-translation direction에서는 derivative0을 보존할 수 있으나, 반환 fullgradient의 사후 dot은 상쇄 순서 때문에0을 잃을 수 있다. 실제 all a_phi/null 방향, δaz 및 fullgradient·direct directional hidden-a 대조로 가설을 검증해야 하며 original state를 seed해 검사를 우회하지 않는다.
|
||||
|
||||
### Exact comparator 교정과 현재 focused closure
|
||||
|
||||
Owner의 후속 comparator는 rounded defect/ratio를 diagnostic으로 남기고, grow EFT defect expansion의 sign을 정규화한 뒤 기존 `TwoProduct(1e-12,scale)`의 exact high/low를 빼서 최고 nonzero component의 sign으로 판정한다. 최대6개 원 입력+2개 threshold 항이므로8-slot capacity가 충분하다. Threshold의 lowest-bit exponent가 지원 범위 밖이면 명시 FAIL이며 product의 잃은 tail을0으로 간주하지 않는다. Exact defect0은 positive scale에서도 threshold product를 만들기 전에 PASS하므로 실제 subnormal equality를 불필요하게 실패시키지 않는다. Scale0 exact-zero/finite/environment/storage gate와 CA는 유지된다.
|
||||
|
||||
[독립 native boundary 검산](../../.dryforge/hht-remediation-20261012/approved-review/independent_pair_boundary_native.json)은 above/below/equality·양 sign·scale `2^-1000..2^1000`126사례에서 Fraction oracle와 판정이 모두 일치한다(native0; unsupported product-tail24개 fail-closed 포함). 기존 `2^-94`/`2^-100` false PASS도 차단됐다. Frozen58 actual helper 검산도 새 helper hash로 다시 실행하여 모두 PASS를 유지했다.
|
||||
|
||||
[Configured Debug focused native0](../../.dryforge/hht-remediation-20261012/adr016-exact-threshold-warped-debug.native.json)와 [9/9 PASS log](../../.dryforge/hht-remediation-20261012/adr016-exact-threshold-warped-debug.log)는 pair6개·mixed-time graph/rate1개·genuine C1와 independent5³ oracle2개를 포함한다(CTest149.36s). 이는 original C09의 초기 derivative authority 오류, 전체 C08/reference/전체 Debug를 닫지 않는다.
|
||||
|
||||
### 초기 gradient authority discrepancy의 exact 원인
|
||||
|
||||
[Actual C09 initial-only native 진단](../../.dryforge/hht-reduced-c08a-finer-20261013/c09-initial-probe.log)의8개 row를 [독립 Fraction으로 감사](../../.dryforge/hht-remediation-20261012/approved-review/independent_c09_initial_gradient.json)했다. Row0 primitive translation coefficient의 exact 합과 exact acceleration dot은0이며 printed `−4.07e-20`은 final summation noise다. Original a_phi는 `eta*n`, eta=`−1.60084659e-12`이며8개 node의 null 방향으로부터 최대 거리=`5.16e-29`다. Primitive exact `ψq*a=−4.512015761e-15`는 전부 이 null acceleration에서 온다. 반면 force-Hessian projected gradient `nH`의 가짜 translation dot=`+4.513567227e-15`가 이를 상쇄한다. Primitive/force-derived operator gap이 원인 규모이고 final dot rounding `O(1e-18)`은 별도 작다.
|
||||
|
||||
따라서 range mass solve가 실패했다거나 원 initial a를 재구성 seed로 유지하면 된다는 결론은 부적절하다. RC-02에 따라 initial null solve/regularity/hidden evidence의 derivative를 실제 scalar primitive와 동일 authority로 계산하는 것은 수학적으로 동등한 교정이다. 이후 sparse contraction 및 graph rate partition RHS도 compensated reduction으로 원 rigid-translation cancellation을 보존해야 한다. Physical mass range solve·initial A0=a0·q0/v0·부분구속/rank·N2/N3/N4/full actual assembly는 유지하며 초기 a를 외부에서 projection·0으로 강제하지 않는다. 선택한 derivative의 실제 input/assembly authority가 일치하고 plain full-Hessian gradient로 silent fallback하지 않는 source 계약이 필요하다. 실제 구현·회귀는 owner가 수행하며 현재 C09는 FAIL이다.
|
||||
|
||||
### Actual warped/shared N5 현재 evidence
|
||||
|
||||
앞의 준비 명세 후 `ReconstructsActualShellRatesWithMixedTimeLoad` fixture가6node/2element 공유 edge·warped node 및 실제 F/Fdot/Fddot 상태로 확장됐다. [현재 raw sweep의 독립 대조](../../.dryforge/hht-remediation-20261012/approved-review/independent_current_n5_sweep.json)는 u/phi/z/vz/az/mixed와 별도 Ha 및 HW/2W8개의 positive sweep에서4block 모두 `j10..18` 내부 연속쌍을 통과했음을 확인한다. z는 마지막16/18쌍을 제외한 앞3쌍이 통과한다. Actual configured testcase147.11s PASS는 위9/9 focused native0에 포함된다.
|
||||
|
||||
Omission mutants4개는 원 fresh residual FD를 유지하고 analytic action의 Ha, combined HW/2W, third 또는 psi-qt 항을 각각 제거하여 통과쌍이 없음을 확인했다. Ha는 v0 상태로 분리했으나 HW와2W는 함께 제거하는 mutation이므로 각각의 독립 누락 검출로 표현하지 않는다. psi-tt 제거는 reconstructed rate의 raw hidden defect>`1e-8` smoke로 검출하며 scaled N5/원 N3 certificate가 아니다. External-position-gradient omission은 아직 별도 검출 증거가 없다. 이 현재 evidence는 준비-only 상태를 해당 범위에서 갱신하지만 partial-BC 실패/C09 초기화/C10 실제 correction100 trajectory/일반 proper-Q covariance 및 전체 reference closure를 대신하지 않는다.
|
||||
|
||||
### Canonical 초기 gradient의 후속 source
|
||||
|
||||
Actual [assembly](../../src/fesa/analysis/hht_dynamic_assembly.cpp)는 `directional_third=true`에서 local scalar `drilling_constraint_gradient`를 canonical/source order로 조립하여 private `hidden_gradient`에 저장한다. External scalar는 `−n(phi)^T F_phi`이며 shared node당1회 gradient/Hessian을 더하므로 graph의 RC02/RC14 부호·중복 규칙과 일치한다. Constant public dead force의 explicit time 항은0이다. [Algebra](../../src/fesa/analysis/hht_dynamic_algebra.cpp)의 `ConstraintGradient`는 이 authority를 initial null solve, `psi_q N` regularity 및 accepted hidden evidence에 공통 적용하고 required field 누락을 실패로 반환한다. Full physical Hessian projection으로 silent fallback하지 않는다.
|
||||
|
||||
Sparse v/a contraction에 Neumaier sum을 적용한 것은 원 항과 scale를 바꾸지 않는 산술 교정이다. 원 physical range mass solve, candidate finite/fixed exact0, `Ar0=ap0`, `A0=a0`, original frame0 보존 및 original/reconstructed full N2/N3/N4 gate는 유지된다. 이 첫 수정 시점의 graph rate partition RHS와 hidden Hessian contraction은 아직 plain reduction이다. Fresh initial-only/actual C09에서 잔류 subtraction/RHS/solve 차이를 확인해야 하며 과거9/9 focused PASS나 old Release C08를 새 source의 통과로 승계하지 않는다.
|
||||
|
||||
### Global component selector와 proper-Q 시간 이력
|
||||
|
||||
Full global chart의 proper frame change는 `q'=R6 q`이고 continuous physical equation과 RC05 chain-rule rate는 이 선형 변환 아래 공변적이다. 그러나 초기 null의 최대 global 성분을 z로 선택하는 현 method에서는 transformed reduced coordinates가 `p'=L'_p^T R6 Q(p,t)`다. Q가 곡면이면 이 변화는 일반적으로 비선형이며, pivot이 같은 이름의 성분인 경우에도 선형성을 보장하지 않는다. Constant affine coordinate change는 RC03/04 recurrence와 commute하지만 nonlinear change는 Hessian/시간미분 항 때문에 그렇지 않다. 따라서 full physical objectivity·exact tangent·hidden-rate consistency만으로 finite-phi의 **전체 이산 history**가 `1e-10` 이내 공변적이라는 일반 보장은 없다.
|
||||
|
||||
[독립 exact recurrence 검산](../../.dryforge/hht-remediation-20261012/approved-review/independent_reduced_covariance_probe.json)은 graph `q=(p,kappa*p^2)`, proper rotation의 `c=4/5,s=3/5`, transformed selector `y=c*p-s*kappa*p^2`를 쓴다. `p0=vp0=0`, constant `ap=a`, `Ar0=a`인 한 p step는 RC03/04를 exact 만족한다. Transformed physical rates로 같은 y recurrence를 계산하면 position defect는 `[3*beta*(1+alpha)-1/4]*s*kappa*h^4*a^2`, velocity defect는 `[3*gamma*(1+alpha)-1]*s*kappa*h^3*a^2`다. 승인 계수 `alpha=-.05,beta=.275625,gamma=.55`에서 두 계수는 비영이다. Fraction 검산은 h halving 시 각각16/8배 감소를 확인했다. 이는 시간 recurrence의 nonlinear reparameterization 비불변성을 보여 주는 toy이며 actual shell force/mass/constraint 검증이나 실제 fixture FAIL 증거가 아니다.
|
||||
|
||||
현재 proper-Q testcase는 rigid translation 경로와 별도 단일 shell2step 비영 phi 경로의 all-node/frame q/v/a/A, energy, force 및 triad/director를 비교한다. Ell1, `ell/T`, `ell/T^2`와 fixture별 Eref는 해당 고정 단위 fixture의 positive physical scale로 해석할 수 있다. Force/moment에 모두 숫자1을 쓰는 대조는 load scale1과 ell1인 이 fixture에 한정되며 일반 단위변환 norm을 인증하지 않는다. `maximum_rotation>0`은 graph curvature나 위 reparameterization defect를 해상했다는 조건이 아니다. 기존 N6 `1e-10` 및 C11 판정은 그대로 유지하고 fresh 실행 결과를 읽되, 통과하더라도 general finite-rotation covariance로 확대하지 않는다. 실패하면 같은 endpoint의 constitutive/inertia covariance와 time-update defect를 분리하여 원인을 확인하고, 기준·method를 수정해야 하는지는 메인이 사용자 승인 계약과 대조한다. 현재는 초기 N2 failure 때문에 새 finite-rotation 전체history 판정이 닫히지 않았다.
|
||||
|
||||
### Tiny rotation의 direct director increment 후보
|
||||
|
||||
Canonical 초기 gradient 교정 뒤 실제 초기 gate를 넘었지만 rotated rigid-translation increment1의 physical moment Newton residual이 계속 남는다는 owner 진단은 별도 failure-prefix 검토 대상이다. 아직 complete native 종료/failed endpoint dump를 읽지 않았으므로 원인이나 해당 source의 실패 완료를 확정하지 않는다. Current `MakeJetTrial`은 full rounded `ExpSkew(phi)*D0`를 만든 뒤 `CovariantIncrement`에서 D0를 뺀다. Tiny phi에서는 full director의 value 변화가 D0의 ULP에 흡수되고 Jet derivative는 유한하게 남을 수 있다.
|
||||
|
||||
[독립 standalone MSVC/Fraction quantization probe](../../.dryforge/hht-remediation-20261012/approved-review/independent_director_increment.json)는 대표 rotated D0와 phi scale `1e-18..1e-5`6개를 현재 scalar Rodrigues9항의 같은 coefficient로 평가했다(native compile/run0). `phi=(1e-17,−2e-17,3e-17)`에서 기존 director difference는3성분 모두0인 반면 direct increment는 약 `(−9.486e-18,−1.685e-18,2.039e-18)`이다. Exact stored-coefficient polynomial 대비 direct cross max error=`2.83e-34`, 기존 difference max error=`9.49e-18`이다. Actual 실패 q·Jet AD·full element force·native outer Newton을 replay한 것은 아니다.
|
||||
|
||||
동등 수식은 `deltaD=A(theta²)*(phi cross D0)+B(theta²)*(phi cross(phi cross D0))`다. Current complete-Jet A/B 및 기존 branch를 재사용하고 value/gradient/Hessian/directional/mixed를 전부 같은 direct increment에서 계산하면 physical strain energy와 force/tangent 미분의 authority를 유지할 수 있다. `ExpSkew(phi)−I`를 사후 계산하면 이미 흡수된 diagonal increment를 회복하지 못한다. Public full director/triad, principal chart·geometry/opposition predicate, physical point arms와 inertia의 기존 정의는 자동 변경하지 않는다.
|
||||
|
||||
Current scalar recovery는 rounded full covariant의 Gram difference이고 returned physical energy도 recovery 값을 사용한다. Direct Jet increment 개선이 recovery 산술까지 자동으로 바꾸지는 않으므로 tiny-state energy/recovery/force 차이를 확인한다. DrillingEnergy의 `I+increment`, polar 및 corotated full-matrix 산술에도 별도 quantization 경계가 남는다. 실패 endpoint에서 physical/drill/inertia force를 분리한 실제 evidence와 same-root graph/full E·N5/경계/rigid-motion 회귀로 교정을 검증하며, tiny phi clamp·moment floor·rotation acceleration0 강제 또는 criterion 변경으로 대체하지 않는다.
|
||||
|
||||
후속 strong-F warped/shared N5 mutation은 same q/v/a의 no-F primitive **gradient만** actual operator에 대입하고 actual F/Fdot/Fddot의 fresh residual FD 및 나머지 derivatives를 보존한다. 이 source 구조는 external position-gradient 누락의 분리 검증으로 적합하다. Sparse dof 구조/changed-entry 검사로 fixture 퇴화를 검출한다. Physical Ep block의 tangent는 그 gradient를 쓰지 않으므로 모든4block 각각의 누락검출로 표현하지 않는다. 기존 block-AND/내부 연속쌍 positive/negative sweep 및 strong-F root의 실제 runtime은 아직 PENDING이다.
|
||||
|
||||
### Direct increment와 scalar recovery의 실제 수정 범위
|
||||
|
||||
[Tiny 원본 actual-element log](../../.dryforge/hht-reduced-c08a-finer-20261013/tiny-old.log)는 rotated uniform tangent-axis tilt `theta=1e-17`에서 physical force와 energy가0이라 zero-state physical Hessian의 `K0*phi`와 force ratio1로 실패한다. [Jet direct-increment scratch](../../.dryforge/hht-reduced-c08a-finer-20261013/tiny-stable.log)는 force ratio=`1.60588e-16`과 Jet energy=`1.6666666666666663e-33`으로 local regression을 통과하지만 public recovery energy0은 남았다. K0는 같은 actual element의 zero-state derivative이므로 이 force 검사는 value/derivative consistency이며 완전히 독립적인 전체 stiffness oracle라고 표현하지 않는다.
|
||||
|
||||
후속 production source의 private `ExpSkew(increment_only=true)`는 identity를 처음부터 생략하고 기존 complete-Jet9항/branch를 그대로 사용한다. Scalar `DirectorIncrement`도 같은 coefficient/`.25` 조건을 쓰며 `Geometry.covariant_increment`는 `DeltaG_xi=DerivativeSum(u)+z*DerivativeSum(deltaD)`, eta의 같은 식 및 `DeltaG_zeta=(t/2)*Sum(N deltaD)`다. Scalar `DirectStrain`도 Jet와 같은 `0.5*(G0_i·DeltaG_j+DeltaG_i·G0_j+DeltaG_i·DeltaG_j)`로 바뀌었다. `E33=0`, tying weights, reciprocal/reference frame, material/integration 및 current full director/covariant의 geometry/opposition predicates는 보존된다. 수학적 대응은 정적 적합하며 scalar cross와 Jet matrix 연산의 bitwise 동일성을 요구하지 않는다.
|
||||
|
||||
[현재 source-copy local 실행](../../.dryforge/hht-reduced-c08a-finer-20261013/tiny-production.log)은2검사 PASS(1277ms)다. [독립 감사](../../.dryforge/hht-remediation-20261012/approved-review/independent_actual_tiny_energy.json)는 actual production source와 local override copy의 SHA256=`fe7cc9cf4e04d225e2a391d69d4cf420b6c802764041b6adbf77f63e86919f00` exact 일치를 확인했다. Uniform tilt의 독립 leading shear energy `0.5*(5/6)*E/[2*(1+nu)]*t*area*theta²`는 E1000/nu.25/t.1/area1에서=`1.666666666666667e-33`이며 actual Jet와 recovery의 relative error는 각각=`4.16e-16`이다. 원 recovery RED와 후속 local PASS를 구분하며 전체 configured build/runtime의 동결 evidence를 대신하지 않는다.
|
||||
|
||||
새 `TinyRotationPreservesPhysicalForceAndRecoveryEnergy`는 unrotated/rotated×flat/warped4case를 검사한다. Zero-state force/energy, positive linearization scale, same-source physical K0의 force/quadratic-energy limit과 flat case의 독립 shear energy=`1.6e-33`(E120/nu.25/t.2/area4)을 대조한다. Warped case는 독립 closed-form stiffness를 추가한 것이 아니다. 기존 finite-amplitude N5·boundary·rigid/objectivity 및 전체 C09/temporal/reference 실행은 별도 확인해야 하며 local2검사로 완료 판정을 확대하지 않는다.
|
||||
|
||||
### Mixed point acceleration과 rotary inertia 소실
|
||||
|
||||
[Configured direct-delta Debug native8](../../.dryforge/hht-remediation-20261012/adr016-direct-director-debug.native.json)와 [log](../../.dryforge/hht-remediation-20261012/adr016-direct-director-debug.log)는 nonlinear element16검사 PASS 및 C09 FAIL을 기록한다(전체326.12s). Rotated uniform translation은 원 initial/reconstructed frame0를 넘었지만 increment1의100correction 후 실패했다. 최종 `max NtE=1.69482e-32`, `max NtI=0`이므로 작은 null projection을 full physical moment N2 통과로 해석하지 않는다. 이후 source 변경의 실행 결과와 분리한다.
|
||||
|
||||
같은 epoch의 [outer20 stored operator dump](../../.dryforge/hht-direct-delta-c09-20261013/inertia-replay.log)를 [독립 Fraction으로 감사](../../.dryforge/hht-remediation-20261012/approved-review/independent_inertia_stored_operator.json)했다. Exported24개의 rotational row 모두 actual native force0, translation `M*a` exact0이지만 rotation `M*a+c`는 비영이고 relative defect1이다. Full39의 exact값=`2.0702748348383957e-19`, full34=`1.8839164365932936e-19`, full27=`−1.5857775965463067e-19`다. Convective c는 독립적으로 약 `1e-37` 규모다. 이는 source가 O15 translation과 작은 rotary contribution을 mass-point acceleration에서 먼저 더하고 row dot/±z 적분 전에 잃는 실제 산술 discrepancy다. 전체 nonconvergence의 모든 원인을 이 한 finding으로 닫지는 않는다.
|
||||
|
||||
[독립 standalone MSVC phi0 검산](../../.dryforge/hht-remediation-20261012/approved-review/independent_inertia_acceleration.json)은 flat uniform director, v0, nodal m=.05/t=.1에서 proper rotated tangent의 angular acceleration `1e-17,1e-15,1e-12`와 translation0/20을 조합한6case다. 원 point force는 translation20에서 앞2case의 회전 force를 모두0으로 만들고 마지막 case도 약8% error를 보인다. Integrated mass의 compensated contraction은 exact stored-entry dot 대비 최대 `7.4e-17` error이며 `j*(|d|²I−d dᵀ)*a_phi`, `j=m*t²/12`의 analytic oracle와 mass 차이는=`1.32e-16`이다. 이 probe는 scalar lumped-node 산술이며 full element/finite velocity/일반 C1/시간 이력 검증은 아니다.
|
||||
|
||||
후속 actual inertia source는 mass와 independent convective force를 원 quadrature로 적분한 뒤, local24columns의 `M_ij*a_j`와 c를 fixed-order Neumaier sum으로 계산한다. 이는 원 `I=M(q)a+c(q,v)`와 동등하며 c를 `I−Ma`로 회복하지 않는다. Actual physical a·C1≠0 cross mass·mass/null/condition checks를 보존하고 nonfinite result는 실패한다. 원 N2 denominator는 **element별 이미 적분된** `Σ_j |Me_ij*a_ej|+|ce_i|` 및 physical/drill/load 항 그대로다. Pointwise `Σ|scale*h_i·h_j*a_j|`로 확대하거나 rotation floor/force clamp를 넣지 않는다.
|
||||
|
||||
[새 theoretical tiny-acceleration test 원본 RED](../../.dryforge/hht-direct-delta-c09-20261013/inertia-tiny-red.log)는 native1/136ms이며 [후속 private inertia12검사 PASS](../../.dryforge/hht-direct-delta-c09-20261013/inertia-green.log)는 native0/11824ms다. Unrotated/proper-Q flat test의 nodal m=.2, `j=m*.2²/12`와 tangent angular acceleration `1e-17`은 독립 analytic 기대값이다. 기존 finite v/a·warped genuine C1·5³ energy/power oracle, fixed derivative sweeps 및 omissions가 포함된다. Private compile은 actual source를 include했으나 configured C09/전체 Debug/reference closure를 대신하지 않는다.
|
||||
|
||||
Force-only 교정 뒤에도 position tangent의 `Dh_i·acceleration_point`와 Pdot/Ldot 계산은 mixed point acceleration을 사용한다. 수학적 tangent `DqI=(DqM)a+Dqc`, `DvI=Dvc`는 그대로지만 해당 tiny-term 산술까지 교정됐다고 주장하지 않는다. 필요하면 `Σ_j (Dh_i·h_j+h_i·Dh_j)*a_j+Dh_i·b+h_i·Dqb`를 항/채널별로 분리해 같은 quadrature로 계산하고 fixed N5·kinetic-power/full balance를 확인한다. Genuine nonzero C1는 보존하며 큰 실제 cross moment에 더 작은 항의 최종 quantization이 남는 경우를 zero-C1 소실과 구분한다. 이번 source의 actual C09 endpoint/full history와 후속 temporal/reference 판정은 아직 별도 검증 대상이다.
|
||||
|
||||
### Stable inertia의 configured 실행 범위
|
||||
|
||||
[동결 identity](../../.dryforge/hht-remediation-20261012/adr016-stable-inertia-debug-source-identity.json)에 연결된 [configured Debug log](../../.dryforge/hht-remediation-20261012/adr016-stable-inertia-debug.log)와 [native8](../../.dryforge/hht-remediation-20261012/adr016-stable-inertia-debug.native.json)은 **13 PASS/1 FAIL**, 216.39s다. Inertia12검사는 PASS이며 strong-F warped/shared actual N5는137.22s PASS다. 앞의 external-gradient omission 준비 상태는 이 testcase의 실행 범위에서 갱신한다. 현재 passing raw sweep를 별도로 독립 감사한 것은 아니므로 이전 weak-F raw8positive/4mutant 증거와 구분한다. Individual2W, psi-tt scaled N5, 부분구속, 일반 finite-rotation covariance, 전체 Debug 및 C08/reference 완료를 뜻하지 않는다.
|
||||
|
||||
C09는62.83s 후 **reconstructed frame0 N2 FAIL**이다. Original phi ratio=`2.43187e-16`, reconstructed ratio=`0.4509010842`(numerator=`7.63812e-21`, scale=`1.69397e-20`)다. Stable force가 작은 실제 `M*delta_a`를 보존하여 이전 point-force 산술에 가려진 재구성 차이를 드러냈다. Original full a는 계속 frame0에 보존하며 이 실패를 frame0 제외·translation scale floor로 통과시키지 않는다. 이후 rate/tangent source 변경에는 이 동결 실행을 승계하지 않는다.
|
||||
|
||||
### Tiny Dq 및 momentum-rate의 남은 산술 경계
|
||||
|
||||
[Actual Dq diagnostic](../../.dryforge/hht-direct-delta-c09-20261013/inertia-dq-risk.log)은 flat phi=v0, node0의 translation a=(15,12,0), angular a=`1e-17*ex`에서 analytic `DqI(phi_z,phi_y)=0`, stable force central FD(h=`1e-5`)=`−3.3333333332500014e-21`을 기록한다. 이 diagnostic testcase는 값을 출력한 PASS이며 tangent의 correctness PASS가 아니다.
|
||||
|
||||
[독립 exact Fraction SO(3) 검산](../../.dryforge/hht-remediation-20261012/approved-review/independent_inertia_dq.json)은 `B_j=e_j cross d0`, `DB_j[eta]=0.5*(eta cross(e_j cross d0)+e_j cross(eta cross d0))`, `DqI=j*(DB^T B+B^T DB)*a_phi`를 사용한다. Nodal m=.2/t=.2, `j=m*t²/12`, `a_phi=epsilon*ta`, `eta=tb`에서 결과는 unrotated 및 exact rational proper-Q 모두 `−0.5*j*epsilon*d0`다. Flat 결과=`−3.3333333333333333e-21*ez`는 actual FD와 일치한다. 따라서 force-only 수정 이후의 value/tangent discrepancy가 남았다.
|
||||
|
||||
동등 교정은 각 `(Dh_i·h_j+h_i·Dh_j)` coefficient를 원 quadrature로 적분한 뒤 actual a_j를 contraction하거나 translation/rotation/convective 항의 별도 accumulator를 최종 적분까지 보존하는 것이다. Point 내부에서 다시 큰 translation 항과 합치면 같은 소실이 재발한다. Convective `Dqc`, nonzero C1 cross coupling, mass/predicates 및 원 elementwise N2 scale는 유지한다. Unrotated/proper-Q 두 방향의 analytic action과 기존 고정 sweep/연속쌍·genuine-C1 oracle가 회귀 범위다.
|
||||
|
||||
Momentum-rate의 독립 최소 oracle도 같은 phi=v0에서 node0 mid-position을 원점에 두고 다른 node a=0으로 만들면 `Pdot=m*a_u`, `Ldot=j*a_phi`다. 큰 orbital term을 제거하여 작은 intrinsic Ldot 소실을 분리할 수 있다. 이 actual regression은 아직 실행되지 않았으며 기존 finite-v energy/power PASS로 tiny mixed-signal Pdot/Ldot를 인증하지 않는다.
|
||||
|
||||
### 초기 재구성 partition RHS의 독립 대조
|
||||
|
||||
[Actual8row Fraction 감사](../../.dryforge/hht-remediation-20261012/approved-review/independent_c09_partition_rhs.json)는 위 configured log의 stored primitive gradient·original a를 읽었다. 첫4row의 full hidden acceleration dot 및 selected-P RHS는 exact0이고, 같은 rounded products의 Neumaier 합도0이다. Plain partition reduction만 RHS=`+1.734723475976807e-18`을 만들어 `G00=0.0025960274682822085`의 solve가 dependent `a_phi_z=6.6822231165553645e-16`을 만든다. 이것은 coefficient/rank 변경이 아닌 합산 순서의 discrepancy다.
|
||||
|
||||
둘째 요소4row에서는 compensated full dot이 약 `1.8e-34..3.85e-34`이고 compensated rounded-product P RHS=`−1.839573100344928e-18`이다. Stored binary64 operands의 exact-product RHS=`−1.788550990472171e-18`와 차이=`−5.10221098727572e-20`는 product rounding이다. Graph만 exact-product dot으로 바꾸면 현재 initializer의 rounded-product/Neumaier authority와 또 달라질 수 있다. 최소 교정은 full hidden evidence와 rate P-partition의 동일 compensated rounded-product reduction이며 초기 q/v/a 계약·mass range/null solve·G·원 acceptance는 유지한다.
|
||||
|
||||
후속 source의 `ReconstructPhysicalRates`는 `RateSum`으로 `−psi_t−psi_qP*vp` 및 `−H[v,v]−2psi_qt*v−psi_tt−psi_qP*ap`를 구성한다. Hessian/time의 중간 compensated reduction과 전체 RHS의 부호·P-only selector를 대조했다. Controller `GraphArithmeticIndicator`도 실제 product 순서와 중간 reduction/Neumaier 연산의 radius를 replay하는 구조다. Solve 전 finite RHS 검사와 원 backward-error gate는 유지된다. 이 현재 패치는 **정적 적합/실행 PENDING**이며 actual q0v0뿐 아니라 nonzero H/time fixture의 fresh 실행·CA replay가 필요하다. Initial a를 seed/projection/clamp하거나 N2 floor로 대체하지 않는다.
|
||||
|
||||
`RateSumRadius`는 `next=sum+term`, 선택한 `first=sum−next` 또는 `term−next`, `error=first+other`, `correction+=error`, 최종 `sum+correction`의 모든 합/차감에 각각 outward `AddRadius`를 적용한다. Hessian의 두 products, time-gradient product 및 factor2 product의 입력 radius도 별도로 전달한다. [독립 Python/Fraction 검산](../../.dryforge/hht-remediation-20261012/approved-review/independent_rate_sum_radius.json)은 actual8row와 cancellation/subnormal5case의183개 누적 prefix에서 exact 입력합 오차가 radius 이내임을 확인했다. 이는 frozen Neumaier branch의 arithmetic 검산이며 native MSVC 환경·FEM/AD coefficient uncertainty·변경된 nonlinear trajectory의 rigorous bound가 아니다. Whole selector history radius를 reset하거나 N7 factor100을 바꾸지 않는다.
|
||||
|
||||
### Dq 및 momentum coefficients의 후속 scratch 검토
|
||||
|
||||
[후속 scratch source](../../.dryforge/hht-direct-delta-c09-20261013/inertia-dq-rates-stable.cpp)는 nodal kinetic measure `rho*Ni*dV0`의 각 mass node에서3×6×6 `DqM` coefficient를 먼저 적분한다. Kinetic_shape는 해당 node에서1이고 다른 node0이므로 원 nodal block 밖의 derivative를 버리지 않는다. 원 position derivative의 `Dqh*a` 항을 제거한 뒤 `(Dh_i·h_j+h_i·Dh_j)*a_j`를 integrated coefficient로 복원한다. 남은 tangent는 독립 `Dh_i·b+h_i·Dqb`이며 두 경로 사이의 중복·누락이 없다. `DqI=(DqM)a+Dqc`의 부호·DOF 대응은 정적으로 적합하다.
|
||||
|
||||
Momentum coefficients는 같은 positive measure와 actual point position으로 `P_j=∫h_j dm`, `L_j=∫x cross h_j dm`을 적분한다. 최종 `P=ΣP_j*v_j`, `L=ΣL_j*v_j`, `Pdot=ΣP_j*a_j+∫b dm`, `Ldot=ΣL_j*a_j+∫x cross b dm`의 fixed-order compensated contraction을 사용한다. `d(x cross vpoint)/dt=vpoint cross vpoint+x cross apoint`에서 첫항0이므로 Ldot의 추가항은 필요하지 않다. Convective 부분을 Ma에서 차감해 추출하지 않는다. Reference/current geometry와 volume, point arms, mass, kinetic energy, velocity tangent, 기존 rate norm scale 및 elementwise N2 denominator/finite/mass 검사는 유지된다.
|
||||
|
||||
[원 momentum diagnostic](../../.dryforge/hht-direct-delta-c09-20261013/inertia-momentum-risk.log)은 active node의 mid-position을 원점으로 두고 큰 translation v/a와 작은 tangent rotation을 조합했을 때 L와 Ldot0을 기록한다. 이는 값을 출력하는 진단이며 통과 증거가 아니다. [후속 scratch15검사](../../.dryforge/hht-direct-delta-c09-20261013/inertia-dq-rates-green.log)는 기존12검사와 diagnostic3개 PASS(34.409s)다. 별도의 [analytic regression source](../../.dryforge/hht-direct-delta-c09-20261013/inertia-dq-rates-analytic-test.inc)는 flat/proper-Q×epsilon `10^-7..10^-20`28case에서 `DqI*tb=−0.5*j*epsilon*d`, `L=Ldot=j*epsilon*ta`를 positive intrinsic scale로 검사한다. [원본 RED](../../.dryforge/hht-direct-delta-c09-20261013/inertia-dq-rates-analytic-red.log) native1/2.245s와 [후속 GREEN](../../.dryforge/hht-direct-delta-c09-20261013/inertia-dq-rates-analytic.log) native0/2.506s를 구분한다. Independent analytic magnitude와 기존 finite-v/genuine-C1 power·고정 tangent sweep을 함께 사용하므로 단일 FD diagnostic만으로 판단하지 않는다.
|
||||
|
||||
이 판정은 명시적으로 include한 scratch candidate의 정적·local 회귀 범위다. Production 적용 후 current source/binary identity와 공용 C09/temporal/reference는 다시 연결해야 한다. Full point arm 자체의 coordinate/director quantization, 큰 orbital term과 tiny intrinsic term을 최종 합칠 때의 표현 한계 및 generic tiny convective 항의 coefficient 적분 오차는 남는다. 이를 floor·C1 clamp·kinetic-energy 자동 변경 또는 N7 radius reset으로 보정하지 않는다.
|
||||
|
||||
후속 production의 [actual include/identity](../../.dryforge/hht-direct-delta-c09-20261013/inertia-dq-rates-production-identity.json)와 source를 대조했다. Inertia source SHA256=`68df2e221b6fa1423b24884110f24d039c60a6306ed8226f966552e944645b14`, test=`eb4562c8abedcfbc7c2f953b58bae30f67a84d7ccf0bbea9ae384dfcf595f055`다. Scratch 대비 반복 Neumaier lambda를 private `InertiaSum::Add/Value`로 공통화한 것은 같은 합산 분기/곱셈/순서를 보존한다. Coefficients·kinetic_shape1·independent convective 및28case analytic assertions도 일치하여 **production 정적 적합**이다. [Actual production include13검사](../../.dryforge/hht-direct-delta-c09-20261013/inertia-dq-rates-production.log)는 private native0/13 PASS(32.132s)로 닫혔다. 이 local 실제 source 실행과 공용 source/binary closure는 별도이며 old partition Debug/Release 또는 전체 C09/temporal/reference를 승계하지 않는다.
|
||||
|
||||
### Compensated partition 이후의 원 N2 잔류 실패
|
||||
|
||||
[RateSum 동결 Debug identity](../../.dryforge/hht-remediation-20261012/adr016-compensated-partition-debug-source-identity.json)의 [raw log](../../.dryforge/hht-remediation-20261012/adr016-compensated-partition-debug-raw.log)와 [native8](../../.dryforge/hht-remediation-20261012/adr016-compensated-partition-debug.native.json)은8 PASS/1 C09 FAIL(전체832.13s)이다. 초기 재구성을 넘었으나 increment1/100correction에서 실패했고 `max NtE=3.85186e-33`, `max psi=3.25696e-35`, `max NtI=1.20371e-35`다. 이 실행의 inertia Dq/rates는 후속 coefficient-first production epoch와 다르다.
|
||||
|
||||
새 RateSum library/current inertia override의 [별도 identity](../../.dryforge/hht-latest-inertia-c09-20261013/identity.json), [bounded outer20 log](../../.dryforge/hht-latest-inertia-c09-20261013/outer20-runtime.log)는 initial phi ratio=`2.75612e-16`을 통과하고20correction 뒤 의도적으로 중단한 private native1이다. [독립48row·4prefix 감사](../../.dryforge/hht-remediation-20261012/approved-review/independent_c09_outer_channels.json)는 outer20의 원 channel N2를 `rho_u=2.10478e-15` PASS, `rho_phi=0.9997440787` FAIL로 재계산했다. Worst full3의 physical force=`−8.68704002e-17`, inertia=`−4.50003284e-21`, drill=`3.27e-36`다. Raw endpoint 합산 scale는 이미 조립된 scalar이므로 element별 `Σ|Me_ij*a_ej|`를 독립 재구성했다고 주장하지 않는다.
|
||||
|
||||
Stored physical/drill/inertia/load components의 exact Fraction 합과 final residual 차이는 phi24row에서 최대=`5.05e-33`이다. 따라서 final residual dot/summation polishing만으로 moment ratio 약1을 `1e-10`으로 줄일 수 없다. Printed `NtE−psi−NtI≈1.366e-32`도 physical moment `O(1e-16)` 대비 roundoff 수준이며 현재 evidence는 scalar/full-force authority gap의 지배를 지지하지 않는다. High translation coordinate는 X3종/Y2종 binary64값으로 나뉘므로 anchored `u−u0`에도 실제 비균일 입력이 남는다. 작은 strain/rotation force라는 이유로 clamp하지 않는다.
|
||||
|
||||
이 prefix만으로 stored-state representability의 불가역 한계나 전체 원인을 확정하지 않는다. Natural100 종료와 actual requested correction·high/low roundtrip, fresh tangent action 대비 `Enew−Eold`, 동일 endpoint의 physical linearization을 추가 대조해야 한다. 특히 translation channel이 이미 N2를 만족하더라도 해당 correction을 생략하거나 state를 uniform projection하는 것은 원 Newton의 수정이다. 현재 공용 최신 source의 C09/전체 history와 C08/reference 판정은 별도 PENDING이다.
|
||||
|
||||
### Manufactured hidden helper의 external Hessian 계수 중복
|
||||
|
||||
[RateSum Release C08a raw log](../../.dryforge/hht-remediation-20261012/adr016-compensated-partition-c08a-release-raw.log)는 승인7grid에서 hidden-a normalized 약 `1.07e-6` 실패를 기록한다. 해당 실패를 interpolation/시간차수 문제 또는 원 hidden 기준의 문제로 단정하지 않는다. Canonical `EvaluateAssembly(directional_third=true)`는 internal scalar Hessian에 shared node당1회 external scalar `−n(q)^T F(t)`의 Hessian을 더한 후 `assembly.hidden_second=psi_qq,total[v,v]`를 반환한다.
|
||||
|
||||
반면 현재 `ManufacturedHidden`는 second를 이 total 값으로 시작하고 `−rotation.null_directional_second·F`를 다시 더한다. 즉 external `psi_qq[v,v]=−n_qq[v,v]·F`의 **value와 scale 항을 중복**한다. `n_q*(f_int−F)*a+n*K_int*a`는 ψq*a이며 이 loop 자체는 중복이 아니다. `−2n_q*v*Fdot`, `−n*Fddot`는 별도 explicit-time 항으로 각각1회 필요하다. 원 finite-first·normalized `1e-10`·scale0 exact0·all-frame inventory는 유지하고 중복 항의 value/scale만 제거하는 것은 helper 계약 교정이다.
|
||||
|
||||
독립 scalar 미분의 최소 negative fixture는 phi0/d0=ez/v=ex+ez/F=ex, Fdot=Fddot0, a=−ey/3이다. `n=normalize(Jr^-1*d0)`에서 `psi_q*a=+1/6`, `psi_qq[v,v]=−1/6`이므로 실제 hidden2=0이나 중복 helper는−1/6이다. Normalization의 phi0 second correction은 d0 방향이며 F⊥d0라 이 수치는 바뀌지 않는다. Shell source/state를 바꾸지 않고 counting을 검증할 수 있다. 같은 endpoint의 actual reduced scalar-gradient/Hessian/time operator와 helper를 대조하여 수정해야 하며, historical native FAIL을 수정 후 PASS로 재기록하지 않는다.
|
||||
|
||||
후속 source에서 중복 항의 value/scale 제거를 정적으로 확인했다. 새 `ExternalDrillingHessianBalancesGradientAcceleration`은 위 독립 scalar 값을 primitive API와 단일-h FD로 확인하는 올바른 smoke다. 그러나 `ManufacturedHidden`를 직접 호출하지 않으므로 helper에 중복항이 재도입되는 mutation을 검출하지 못한다. Helper-level counting 회귀와 fresh C08 실행은 별도이며 이 primitive smoke를 scaled N5 완료로 표현하지 않는다.
|
||||
|
||||
### Channel 제한 Newton 승인 전 검토
|
||||
|
||||
후속 natural100 raw는 phi가 원 N2에서 실패하지만 full-linear requested correction과 actual high-state의 physical force change가 다른 경로임을 보여준다. Captured final100의 translation을 고정한 [독립48row·identity 감사](../../.dryforge/hht-remediation-20261012/approved-review/independent_fixed_translation_audit.json)는 q/v/a72개 bitwise 불변과2회 뒤 원 full N2 U=`8.70943e-16`, phi=`1.40729921e-13` PASS를 확인했다. Scratch는 hidden/equilibrium/G/N3 검사 후 commit 전 의도 종료하며 native1/5.703s다. 이는 representable endpoint의 존재증거이지 natural adaptive policy/full C09 PASS가 아니다.
|
||||
|
||||
[제안의 독립 상세 검토](numerical-review-channel-newton.md)는 trigger·thaw·combined100 budget·BC/rollback/schema와 N7를 구체화한다. 핵심은 actual restricted `K[J,J]` N2-L을 원 all-free full linear check와 같다고 표현하지 않는 것이다. 승인안에 domain 정책 변경을 명시하고 full endpoint criterion은 모두 유지해야 한다. N7는 actual restricted-last solve defect와 original full last/accepted augmented-model defects를 따로 계산하여 omitted U rows와 all auxiliary errors를 보존해야 한다. 원 factor100/threshold/FAIL·INCONCLUSIVE는 유지한다.
|
||||
|
||||
후속 사용자 승인으로 restricted Newton/N7 구현이 시작됐다. Reviewer는 production source를 변경하지 않았으며 실제 구현 완료 source 및 회귀 대조는 PENDING이다. Frozen-final 존재증거나 local inertia PASS를 새 전략의 temporal/reference/전체 Debug evidence로 승계하지 않는다.
|
||||
@@ -1,5 +1,7 @@
|
||||
# HHT 독립 정식화 검토와 제조해 검산
|
||||
|
||||
2026-10-11 질량 정책 변경: [HHT-ADR-012](ADR.md)에 따라 현재 고유치·HHT는 lumped mass를 사용한다. 아래 consistent 질량을 전제로 한 수식 후보·검토·PASS/FAIL은 해당 시점의 이력이다. 변경본 통과로 승계하지 않으며 현재 수식은 [formulation](formulation.md), 재검증 상태는 [PRD](PRD.md)의 현재 checklist를 따른다.
|
||||
|
||||
아래 상태와 미실행 표시는 각 검토 당시의 기록이다. 이후 reference 비교와 실제 shell
|
||||
검증 결과는 [구현 수치 검토](implementation-numerical-review.md), 현재 실패·잔여 범위는
|
||||
[PRD](PRD.md)와 [전체 현황](../tracking/status.md)을 따른다.
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
# 고정 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 검증은 진행 중이며 완료로 처리하지 않는다.
|
||||
@@ -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만 비교한다.
|
||||
|
||||
@@ -4,9 +4,11 @@
|
||||
- 상태: `numerical-contract-reviewed; io-binding-and-solver-execution-pending`.
|
||||
- 기준: [요구사항](requirements.md), [정식화](formulation.md), [수치 검토](numerical-review.md#numerical-review), [공통 TOLERANCE](../TOLERANCE.md).
|
||||
|
||||
2026-10-12 승인된 reduced-coordinate shell 결과는 [shell schema v2 계약](io-reduced-coordinate.md)의 version·time integration marker·public A semantics를 먼저 검증한다. 과거 full-coordinate v1 결과와 비교 evidence는 보존하되 현재 v2 실행 통과로 승계하지 않는다. 아래 원본 U/UR identity·101 frames·projection·202 families·수치 tolerance는 그대로다. Reference CSV에는 public A가 없으므로 A 의미 변경을 CSV로 검증할 수 없다.
|
||||
|
||||
## 1. 원본과 모델 의미
|
||||
|
||||
입력은 [shellNL-dyn-meshfine.inp](../../reference/shellNL-dyn-meshfine/shellNL-dyn-meshfine.inp), 외부 결과는 같은 폴더의 [shellNL-dyn-meshfine displacements.csv](<../../reference/shellNL-dyn-meshfine/shellNL-dyn-meshfine displacements.csv>)다. 원본 이름·내용을 보존한다. 공식 FESA 출력은 입력의 lexical sibling `shellNL-dyn-meshfine_results.h5`이며 dataset path와 schema는 후속 I/O 소유다. [HHT-ADR-007](ADR.md)의 **consistent kinetic mass**와 시간적분 계약을 결과 identity에 연결해야 하며 비교 결과에 따라 variant를 바꾸지 않는다.
|
||||
입력은 [shellNL-dyn-meshfine.inp](../../reference/shellNL-dyn-meshfine/shellNL-dyn-meshfine.inp), 외부 결과는 같은 폴더의 [shellNL-dyn-meshfine displacements.csv](<../../reference/shellNL-dyn-meshfine/shellNL-dyn-meshfine displacements.csv>)다. 원본 이름·내용을 보존한다. 공식 FESA 출력은 입력의 lexical sibling `shellNL-dyn-meshfine_results.h5`이며 dataset path와 schema는 후속 I/O 소유다. [HHT-ADR-012](ADR.md)의 **nodal-lumped-kinetic mass**와 시간적분 계약을 결과 identity에 연결해야 하며 비교 결과에 따라 variant를 바꾸지 않는다.
|
||||
|
||||
CSV에는 step column이 없다. 원본 INP의 **유일한 dynamic step `Step-1`**과의 연결이 step authority다. 다른 step이나 reference를 파일명으로 추정하지 않는다.
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
## 요청과 실제 검증 대상
|
||||
|
||||
HHT implicit dynamic analysis를 도입하기 위한 요구조건을 정의한다. 최초 작성은 requirement/research gate였으며, 이번 갱신은 사용자 일관질량 선택의 요구사항 반영에 한정한다. Solver 구현, reference 재생성 및 Abaqus 실행을 포함하지 않는다. 아래 요구사항은 향후 구현의 acceptance intent이고, 미결정 사항은 승인된 수식·입출력 계약처럼 취급하지 않는다.
|
||||
HHT implicit dynamic analysis를 도입하기 위한 요구조건을 정의한다. 최초 작성은 requirement/research gate였으며, 2026-10-11 갱신은 사용자 lumped mass 승인([HHT-ADR-012](ADR.md))을 반영한다. Solver 구현, reference 재생성 및 Abaqus 실행을 포함하지 않는다. 아래 요구사항은 향후 구현의 acceptance intent이고, 미결정 사항은 승인된 수식·입출력 계약처럼 취급하지 않는다.
|
||||
|
||||
직접 읽은 원본은 [INP](../../reference/shellNL-dyn-meshfine/shellNL-dyn-meshfine.inp)와 [변위 CSV](<../../reference/shellNL-dyn-meshfine/shellNL-dyn-meshfine displacements.csv>)다.
|
||||
|
||||
@@ -36,7 +36,7 @@ HHT implicit dynamic analysis를 도입하기 위한 요구조건을 정의한
|
||||
| FEM-REQ-HHT-004 | HHT parameter 생략 시 적용 의미와 허용 범위를 명시해야 한다. 생략값을 CSV 적합도로 추정하거나 비교 결과에 맞춰 변경하지 않는다. | 공개 근거와 FESA 결정 추적, 승인 범위의 경계·잘못된 parameter 진단 |
|
||||
| FEM-REQ-HHT-005 | Amplitude 없는 집중하중의 시간 이력과 시작 시점 의미를 확정하여 초기화와 모든 increment에서 일관되게 적용해야 한다. | 첫 increment 및 load onset 독립 사례; 최종 값만 같은 다른 하중 이력을 구별 |
|
||||
| FEM-REQ-HHT-006 | 초기 변위·회전, 속도 및 가속도의 물리적 의미와 초기 평형 조건을 명시해야 한다. 원본에 초기조건이 없다는 이유로 초기 가속도를 무조건 영으로 가정하지 않는다. | 초기 frame과 첫 step의 동역학적 일관성; mass-null 자유도를 포함한 초기화 검증 |
|
||||
| FEM-REQ-HHT-007 | 사용자 선택에 따라 shell 속도 보간의 운동에너지를 적분하는 일관질량(`consistent kinetic mass`)을 사용하고, 밀도·두께에 따른 질량과 회전 관성의 물리적 의미를 보존해야 한다. 질량이 없는 자유도나 drilling 자유도 처리를 임의의 관성 추가로 은폐하지 않는다. | 총 질량·관성 및 관련 강체 운동 검증, 허용/불허 mass-null 사례 |
|
||||
| FEM-REQ-HHT-007 | 사용자 선택에 따라 `rho*N_i*dV0`의 절점별 운동에너지를 적분하는 `nodal-lumped-kinetic` 질량을 사용하고, 밀도·두께에 따른 질량과 회전 관성의 물리적 의미를 보존해야 한다. 질량이 없는 자유도나 drilling 자유도 처리를 임의의 관성 추가로 은폐하지 않는다. | 총 질량·관성 및 관련 강체 운동 검증, 허용/불허 mass-null 사례 |
|
||||
| FEM-REQ-HHT-008 | 고정된 자유도와 비선형 회전 상태를 시간에 따라 일관되게 유지해야 한다. 회전 좌표의 미분과 물리적 각속도·각가속도를 근거 없이 동일시하지 않는다. | 고정 경계의 운동학, 좌표 회전 및 유한회전 일관성 검증 |
|
||||
| FEM-REQ-HHT-009 | 각 increment의 수렴·실패와 마지막 유효 상태를 구별해야 하며, 실패 trial이 성공 frame이나 committed 상태로 노출되지 않아야 한다. | 비수렴·계산 실패·출력 실패 주입 및 기존 최종 결과 보존 확인 |
|
||||
| FEM-REQ-HHT-010 | HHT 알고리즘 평형 잔차, 물리적 동적 평형 evidence, 구속 반력의 정의·평가 시점을 구별해야 한다. 정적 `K*d-F`를 동적 반력으로 재사용하지 않는다. | 관성력이 있는 구속 사례 및 전체 힘·모멘트 평형 검증 |
|
||||
@@ -56,13 +56,13 @@ HHT implicit dynamic analysis를 도입하기 위한 요구조건을 정의한
|
||||
|
||||
[Research](research.md#research)에서 공식 문서에 따른 원본 입력의 생략 의미를 확인했다. 이는 reference 입력의 해석 근거이며 FESA 구현 승인이나 신규 사용자 결정이 아니다. 아래에서는 확인된 공개 의미와 남은 FESA 계약 결정을 구분한다.
|
||||
|
||||
사용자는 이번 HHT 기본 질량으로 일관질량을 명시 선택했다([HHT-ADR-007](ADR.md)). 이번 HHT의 lumped mass 지원은 제외한다. 이 선택으로 다른 미결정 physics·지원 범위·공식 schema의 승인을 추정하지 않는다.
|
||||
2026-10-11 사용자는 고유치·HHT의 lumped mass를 승인했다([HHT-ADR-012](ADR.md)). Shell HHT는 nodal kinetic measure를 사용하며 기존 shell eigen nodal block lumping은 유지한다. 이 선택으로 다른 미결정 physics·지원 범위·공식 schema의 승인을 추정하지 않는다.
|
||||
|
||||
| Decision ID | 확정이 필요한 내용 | 결정 근거·owner |
|
||||
| --- | --- | --- |
|
||||
| HHT-OPEN-001 | 공개 의미 확인: contact 없는 기본 `TRANSIENT FIDELITY`의 `HHT-TF`, `alpha=-0.05`, `beta=0.275625`, `gamma=0.55`. FESA의 공개 parameter 지원 범위와 정식화 세부는 미확정 | 공개 근거는 Research 참조; Formulation 검토 후 메인 결정, 실제 물리·호환성 변경은 사용자 결정 |
|
||||
| HHT-OPEN-002 | 공개 의미 확인: amplitude 생략은 `STEP` 하중으로 첫 increment부터 전값, 기본 `INITIAL`은 초기 가속도 계산. FESA 초기화와 `t0-/t0+` 및 첫 잔차 평가 세부는 미확정 | Research의 공개 의미를 바탕으로 Formulation/I/O가 일관성을 입증; 첫 잔차 세부의 research gap과 source 충돌은 메인에 전달 |
|
||||
| HHT-OPEN-003 | 질량 종류는 사용자 선택으로 `consistent kinetic mass` 확정, 이번 HHT lumped 지원 제외. 회전 관성 및 mass-null/drilling 지원·검증 세부는 전문 계약과 연결 | [정식화](formulation.md), [관성 상세](formulation-inertia.md), [수치 기준](numerical-controls.md), [검증 사례](verification-cases.md) 및 후속 I/O 계약을 대조; 질량 선택 자체를 재승인 대상으로 두지 않음 |
|
||||
| HHT-OPEN-003 | 질량 종류는 HHT-ADR-012에 따라 `nodal-lumped-kinetic` 확정. 회전 관성 및 mass-null/drilling 지원·검증 세부는 전문 계약과 연결 | [정식화](formulation.md), [관성 상세](formulation-inertia.md), [수치 기준](numerical-controls.md), [검증 사례](verification-cases.md) 및 후속 I/O 계약을 대조; 질량 선택 자체를 재승인 대상으로 두지 않음 |
|
||||
| HHT-OPEN-004 | 기존 기하비선형 shell 운동학을 동역학으로 확장할 때 허용하는 회전·관성 범위 | Formulation이 필요한 물리 가정과 한계를 명시; 원본 `NLGEOM=YES`를 충족하지 못하면 범위 충돌 |
|
||||
| HHT-OPEN-005 | 공식 HDF5의 속도·가속도·동적 반력·에너지 공개 범위 및 기존 소비자 호환성 | Requirements는 독립 검증 필요성만 고정; 메인이 공개 범위를 확정하고 I/O가 schema를 정의 |
|
||||
| HHT-OPEN-006 | 공개 의미 확인: contact 없는 `DIRECT`는 고정 시간간격. FESA 실패 종료·increment 제한 lifecycle과 고정 간격 밖의 지원 범위는 미확정 | 원본 DIRECT 보존이 최소 조건; adaptive 확대는 별도 범위 결정, 세부 lifecycle은 Formulation/I/O |
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# 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 후속 조사: [C08 시간 정확도·P 감소 실패 해결 후보](#temporal-remediation-research)는
|
||||
현행 lumped mass·HHT-ADR-013 변경본의 evidence를 대상으로 한다. 해결 후보의 조사이며
|
||||
새 적분법·startup·수치 기준의 채택 또는 solver 변경 승인이 아니다.
|
||||
|
||||
|
||||
|
||||
<a id="research"></a>
|
||||
@@ -364,3 +370,138 @@ Numerical Review에 인계할 결정은 scaling·conditioning/hidden-defect 판
|
||||
시간 수렴 구간·case 최소 조합이다. Formulation에 남는 사항은 singular-mass regularity의
|
||||
실제 shell 적용과 full-coordinate hidden constraint 검증이다. 사용자 결정에 따라 이번
|
||||
HHT 구현은 consistent mass를 사용한다. 위 lumped 비교 근거는 연구 이력이며 현재 지원 요구가 아니다.
|
||||
|
||||
<a id="temporal-remediation-research"></a>
|
||||
## 2026-10-12 C08 시간 정확도·P 감소 실패 해결 후보
|
||||
|
||||
사용자 요청에 따른 `fem-research-evidence` 조사다. 전문 research-agent의 DAE 문헌 조사와
|
||||
메인의 현재 evidence·시간 해상도·합산 조사 결과를 대조했다. Production·tests·reference·
|
||||
tolerance·PRD checklist·ADR 결정은 변경하지 않았다. 아래 제안은 정식화·독립 검토를
|
||||
거쳐야 하는 후보이며 현재 실패를 통과로 대체하지 않는다.
|
||||
문서 정적 검토는 로컬 참조528개 누락0·git diff --check native0이다. 이전 완료 검증의
|
||||
production190·원본16·task source/test6·binary4 hash가 그대로임을 확인했다.
|
||||
|
||||
### 현재 판정과 공동 해결책이 아닌 방법
|
||||
|
||||
[현재 실행 기록](newton-start-policy.md)의 전체802 결과는799 PASS·2 FAIL·1 SKIP이다.
|
||||
C08a는 finest 정규화 angular-a error 약5.67473e-4와 finest noise 분리 미달을 유지한다.
|
||||
C08b는 N7 noise 분리에 성공했지만 finest angular-a self-difference 약.474897과
|
||||
q/v/a 일부 시간수렴·P 감소 기준에 실패했다. 별도 복구 진단의 physical complement는
|
||||
약.474897, null 성분은 약.001844다. P drift는 약2.84555e-14→8.03575e-14로 증가했다.
|
||||
|
||||
- 현재 endpoint 평형·물리 a/보조 A 분리는 이미 Arnold–Brüls variant와 같은 방향이다.
|
||||
같은 variant를 다시 채택하는 것은 해결책이 아니다. [R1]의 일반 constrained 결과를
|
||||
singular moving-null shell의 정확도 보장으로 확대하지 않는다.
|
||||
- A0만 바꾸는 방법은 [NR-009의 Decimal80 cubic 반례](implementation-numerical-review.md)에서
|
||||
실패했다. Newton이나 double roundoff 없이도 전체 시점 최대 null 가속도 오차가1차다.
|
||||
- 기존 [null 가속도 복구 후보](formulation-acceleration-recovery.md)는 physical complement와
|
||||
q/v를 바꾸지 않는다. 같은 q/v에서 physical mass block의 가속도를 다시 풀어도 이미
|
||||
endpoint 평형으로 결정된 physical a의 시간오차를 자동으로 없애지 못한다.
|
||||
- 추가 고정밀·refinement 조사는 원인을 구분하는 diagnostic이다. 공식 grid·최대 시점
|
||||
범위를 바꾸거나 초기 구간을 제외해 기존 acceptance를 통과시킨 것으로 표시하지 않는다.
|
||||
|
||||
### 후보 비교와 채택 경계
|
||||
|
||||
| 후보 | 기대 효과 | 제한·필요한 결정 |
|
||||
| --- | --- | --- |
|
||||
| **국소 대수 drilling 좌표 제거와 q/v/a 미분 복구** | 독립적인 physical 좌표를 적분하고 대수 평형으로 drilling 좌표를 재구성해 null 좌표의 이력 차분 문제를 피하는 후보 | 전체 좌표의 현 이산 recurrence가 바뀐다. Smooth chart·rank·partial BC·양의 reduced mass·원 full residual 동등성 정식화가 필요하다. C08b 고주파 해상도 해결은 별도 검증 |
|
||||
| **위치·속도 수준 제약을 함께 처리하는 DAE 적분** | Hidden velocity drift와 startup의 일관성을 같이 다루는 SOI2/stabilized index-2 후보 [R2,R3] | 추가 보조 변수·수정 kinematic update가 필요하다. Force-derived psi를 표준 holonomic reaction 제약으로 대입하면 다른 모델이 될 수 있으므로 동등성 증명이 선행돼야 함 |
|
||||
| Constraint-consistent numerical startup | 초기 가속도 transient 감소 가능성 [R3, §4.1 Example8] | 유효한 문헌 방법은 속도의 O(h²) 수치 보정도 포함한다. Exact frame0 q/v/a 보존과 이력 일관성 검증 필요; A0-only 재시도는 근거 부족 |
|
||||
| Same-schedule 산술 개선 | Compensated/error-free sum·dot, 작은 증분의 차감 계산, 높은 정밀도의 residual 및 refinement로 noise 감소 [R5,R6] | C08a noise와 P 계산의 일부 문제에 유용할 수 있으나 DAE order reduction·C08b의 큰 physical 오차를 고치는 증거는 아님 |
|
||||
| Momentum/energy를 보존하거나 소산하는 새 적분법 | Nonlinear shell dynamics의 보존·안정성에 맞춘 별도 알고리즘 [R4,R7] | Algorithmic force/stress·관성 및 시간 update가 바뀌는 범위. 현 HHT 대체에 대한 사용자 결정·정식화·독립 검증 필요; 보존만으로 현재 fixed-grid 정확도 PASS를 보장하지 않음 |
|
||||
|
||||
국소 제거 후보는 DOF를 삭제하거나 drilling 질량을 추가하는 방식이 아니다. 원래 대수
|
||||
평형 psi=N(q)^T(f_int-F)=0을 풀어 full q를 복구한다. G=psi_q N의 가역성은 국소
|
||||
transversality 근거이지만 전 구간의 독립 좌표 chart를 제공하지는 않는다. 적절한 국소
|
||||
chart에서 대수 좌표가 독립 좌표·시간의 함수임을 확인해야 한다. 복구된 속도·가속도에는
|
||||
embedding의 미분·곡률과 explicit-time 항이 모두 필요하다. Current N/P를 매 frame 곱하고
|
||||
그 미분을 생략하는 projection은 이 방법과 다르다. 특히 C08a의 F(t)에 대한 시간미분을
|
||||
누락하면 올바른 oracle가 아니다. 이는 개념 후보이며 구현-ready 정식화가 아니다.
|
||||
|
||||
### C08b의 시간 해상도 판별
|
||||
|
||||
[이전 private elastic-scale 조사](newton-rotation-investigation.md)는 일부 state에서
|
||||
omega≈311.3/time을 관측했지만 current trajectory의 dynamic Jacobian spectrum·실제
|
||||
가진 amplitude를 확인한 결과가 아니다. [R4]의 stiff shell-like 사례는 선형 안정성과
|
||||
비선형 시간 정확도·보존의 구별을 뒷받침한다.
|
||||
|
||||
이번에 같은 HHT 계수(alpha=-.05,beta=.275625,gamma=.55)와 endpoint physical a를 쓰는
|
||||
**독립 scalar unit-amplitude oscillator**를 계산했다. Omega311.3, T=.25,
|
||||
q0=1/v0=0/a0=A0=-omega²이며 전체 endpoint 최대 q error를 측정했다.
|
||||
Scratch `.dryforge/hht-accuracy-research-20261012/oscillator-resolution.py`와 JSON의
|
||||
실제 실행 native0이며 FESA build/test 또는 실제 shell 검증은 아니다.
|
||||
독립 numerical-review-agent가 별도3×3 증폭행렬로8개 grid를 재계산했으며 저장된
|
||||
q/v/a 최대 오차와의 차이는 최대3.36e-15였다. 후보의 전제·채택 경계도 검토했고,
|
||||
P floor 확정 표현은 아래처럼 의심 단계로 수정했다. 이는 후보 연구의 검토 결과다.
|
||||
|
||||
| h | omega*h | 주기당 증분 수 | 최대 정규화 q error | 직전 grid 대비 관측 차수 |
|
||||
| --- | ---: | ---: | ---: | ---: |
|
||||
| 1/512 | .6080 | 10.33 | 1.76413 | .04693 |
|
||||
| 1/1024 | .3040 | 20.67 | .645985 | 1.44939 |
|
||||
| 1/2048 | .1520 | 41.34 | .167876 | 1.94410 |
|
||||
| 1/4096 | .0760 | 82.67 | .0421431 | 1.99403 |
|
||||
| 1/8192 | .0380 | 165.34 | .0105458 | 1.99863 |
|
||||
|
||||
이 계산은 coarse grid에서 비단조 오차가 발생하고 더 작은 h에서2차 구간에 들어갈 수
|
||||
있음을 보여 준다. **C08b의 원인을 확정한 재현은 아니다.** 실제 모드 amplitude가 작을
|
||||
수 있고 회전·DAE 결합도 다르다. 2차 차수의 회복과 finest1e-4 달성도 별개다.
|
||||
Current C08b의 공통 시점에서 physical mass block의 spectrum/가진 amplitude와
|
||||
오차 history를 대응시키고, 별도 finer-grid·고정밀 oracle와 비교해야 한다. 공식5개
|
||||
grid는 그대로 판정한다. 해상도 부족이 확인되면 현 fixed-grid·HHT 요구와의 양립성을
|
||||
검토해야 하며 silent substep·alpha 변경·benchmark 초기조건 변경으로 해결하지 않는다.
|
||||
|
||||
### P 감소 실패의 조사·처리 방법
|
||||
|
||||
P의 두 finest 값은 roundoff floor가 의심되는 크기이며 strict decrease를 보장하는 수정은
|
||||
아직 없다. 실제 floor 판정은 아래 고정-state·고정밀 대조로 확인해야 한다.
|
||||
우선 같은 accepted q/v를 고정하고 다음 세 계산을 대조해 오차 위치를 구분한다.
|
||||
|
||||
1. 현재 quadrature/global P 합과 deterministic compensated/error-free sum·dot의 P 합.
|
||||
2. 동일 binary64 입력값의 arbitrary-precision 적분·차감 결과. 이 대조는 저장·평가
|
||||
오차만 구분하며 원 accepted history 자체의 roundoff를 복구하지 않는다.
|
||||
3. 현재 flat centered C08b의 독립 nodal 식과 시간 update에서 유도한 momentum 증분.
|
||||
이 fixture의 zero first moment를 일반 warped shell에 자동 적용하지 않는다.
|
||||
|
||||
평가 오차가 원인이면 같은 P의 정의·source 순서를 유지한 산술 개선을 검증한다.
|
||||
History 오차가 지배하면 합산만 바꿔 strict decrease가 회복된다고 보장할 수 없다.
|
||||
같은 물리/이산 식의 더 정확한 계산과, momentum projection으로 q/v/history를 바꾸는
|
||||
새 방법을 구분한다. Exact conservation 또는 새 energy-momentum method도 finite
|
||||
precision의 감소 조건을 자동 보장하지 않는다. Roundoff floor가 확인되면 absolute
|
||||
보존 기준과 시간 truncation의 감소 판정을 분리하는 **계약 검토 후보**를 제시할 수 있으나
|
||||
현재 strict 조건·허용값·FAIL은 유지한다. 결과 clamp나 P를 P0로 덮어쓰는 방법은 배제한다.
|
||||
|
||||
MSVC의 long double은 double과 같은 representation이므로 단순 타입 교체를 고정밀
|
||||
검증으로 부르지 않는다 [R6]. 고정밀 oracle 또는 double-double/error-free 연산은
|
||||
검증할 연산·입력·누적·반올림 경계를 명시해야 한다.
|
||||
|
||||
### 권장 검증 순서
|
||||
|
||||
2026-10-12 사용자 요청으로 수행한 후속 수학·private 실행 결과는
|
||||
[시간 정확도·운동량 후속 검증](temporal-remediation.md)에 기록한다. 아래는 조사 당시
|
||||
권장 순서이며 private 후보 실행과 production 채택을 구별한다.
|
||||
|
||||
1. 기존 Decimal80 cubic 반례로 후보의 exact frame0 보존·전체 시점 q/v/a 정확도와
|
||||
hidden0/1/2를 확인한다. 초기 구간과 후반 구간을 진단상 분리하되 전체 최대 기준은 유지한다.
|
||||
2. Explicit-time 및 실제 moving-null 소형 모델에서 축소 embedding/새 DAE update를
|
||||
검증한다. Partial BC·empty null·원 full residual·physical momentum/energy와의
|
||||
동등성을 확인하고 고정 null 모델의 성공을 shell로 확대하지 않는다.
|
||||
3. C08a의 null/physical error와 recurrence/solve/recovery noise를 구분하고 C08b의
|
||||
가진 모드·physical rate·time resolution을 대조한다. Finer oracle는 기존 grid의
|
||||
정확도를 평가하는 자료이지 기존 FAIL의 대체가 아니다.
|
||||
4. P의 고정-state 평가와 history drift를 분리한 뒤 원인에 맞는 수정 또는 계약 검토를 선택한다.
|
||||
5. 채택 후보만 구현-ready 정식화·독립 수치 검토·필요한 사용자 결정으로 넘긴다.
|
||||
실제 구현 뒤 기존 C08/N7·lifecycle·필수 원본·전체 MSVC 회귀와 물리 검토를 수행한다.
|
||||
|
||||
### 일차 출처와 적용 한계
|
||||
|
||||
Accessed2026-10-12. 위 문헌은 방법 선택 근거이며 FESA 실패 해결의 실행 evidence가 아니다.
|
||||
|
||||
| ID | 출처·locator | 열람 범위·한계 |
|
||||
| --- | --- | --- |
|
||||
| R1 | Arnold–Brüls(2007), [Convergence of the generalized-alpha scheme for constrained mechanical systems](https://orbi.uliege.be/bitstream/2268/27094/1/pa_ArnoldBruls2007_ConvergenceOfTheGeneralizedAlphaSchemeForConstrainedMechanicalSystems.pdf), §2.1·§3 | 현재 endpoint/auxiliary 방식과의 연결. 원 singular shell의 theorem 아님 |
|
||||
| R2 | Jay–Negrut, [A Second Order Extension of the Generalized-alpha Method for Constrained Systems in Mechanics](https://homepage.divms.uiowa.edu/~ljay/publications.dir/GenerAlphaDAEs.pdf), §4 Eq.9/Theorem1·§6 | Research-agent가 author PDF 열람. 메인의 fetch는 timeout. Position+velocity SOI2·bordered regularity 조건; force-derived shell psi에 대한 직접 적용 증명 없음 |
|
||||
| R3 | Arnold(2016), [DAE aspects of multibody system dynamics](https://www2.mathematik.uni-halle.de/reports/sources/2016/01-2016.pdf), §2.3·§4.1 Example8·§4.2 | PSD mass/index 분류·startup 보정·stabilized index-2. FESA index와 동등성은 별도 검토 |
|
||||
| R4 | Lavrenčič–Brank(2020), [Comparison of numerically dissipative schemes for structural dynamics](https://www.sciencedirect.com/science/article/pii/S0263823120309496), abstract·Introduction | Publisher의 공개 본문 열람, 직접 open은 오류. Stiff shell-like 모델의 비교; 원 FESA benchmark나 적용 증명 아님 |
|
||||
| R5 | Demmel–Hida(2002), [Accurate floating point summation](https://people.eecs.berkeley.edu/~demmel/AccurateSummation.pdf), §1–4; Ogita–Rump–Oishi(2004), [Accurate Sum and Dot Product with Applications](https://www.tuhh.de/ti3/paper/rump/OgRuOi04a.pdf) | Cancellation과 정확 합산·dot의 방법 근거. 입력 history의 오차 제거 또는 strict 감소 보장 아님 |
|
||||
| R6 | Microsoft, [IEEE Floating-Point Representation](https://learn.microsoft.com/en-us/cpp/build/ieee-floating-point-representation?view=msvc-170) | MSVC long double representation. 다른 compiler·arbitrary precision으로 일반화하지 않음 |
|
||||
| R7 | Simo–Tarnow–Wong(1992), [Exact energy-momentum conserving algorithms and symplectic schemes for nonlinear dynamics](https://www.sciencedirect.com/science/article/pii/004578259290115Z), abstract; Kuhl–Ramm(1999), [Generalized Energy–Momentum Method for non-linear adaptive shell dynamics](https://www.sciencedirect.com/science/article/pii/S0045782599000249), abstract·Introduction | Publisher 공개 설명 열람. 새 algorithmic force/stress의 범위 근거; current drill DAE·회전 chart·정확도 기준에 맞춘 정식화 없음 |
|
||||
|
||||
@@ -0,0 +1,746 @@
|
||||
# C08 시간 정확도·운동량 실패의 후속 검증
|
||||
|
||||
후속 승인: 사용자가 아래 §7의 세 변경안을 승인했으며
|
||||
[HHT-ADR-014](ADR.md)에 기록했다. 아래 private 결과·미채택 표현은 승인 전 조사와
|
||||
실행의 이력이다. 승인 후 실제 구현·검증 상태는 [PRD checklist](PRD.md)를 따른다.
|
||||
승인 자체가 기존 실패 또는 새 production 검증을 PASS로 바꾸지는 않는다.
|
||||
|
||||
2026-10-12. 사용자가 [해결 후보 조사](research.md#temporal-remediation-research)의 권장
|
||||
순서 실행을 요청한 작업이다. 소형 DAE 검산, 실제 C08b 해상도 분석, P 평가와 history
|
||||
분리, 같은 HHT 식의 산술 후보를 다룬다. Production·공식 검사·허용값·reference는
|
||||
변경하지 않았다. 기존 C08a/C08b FAIL은 유지한다. [PRD](PRD.md)의 미완료 항목을
|
||||
이 private 실험의 실행 성공으로 닫지 않는다.
|
||||
|
||||
## 1. 소형 DAE: 초기화와 전체 시간 정확도를 구분
|
||||
|
||||
`M=diag(1,0), U=(z−x³)²/2`인 cubic 제조해와 explicit-time 제조해, moving-null
|
||||
oscillator, 실제 3DOF의 prescribed spectator BC 모델을 Decimal80으로 실행했다.
|
||||
각 모델에서 현 full-coordinate HHT recurrence와 reduced-coordinate HHT를
|
||||
`h=1/16…1/256`, `T=1`에 대조했다. Frame0의 정확한 q/v/물리적 a와 `A0=a0`를
|
||||
보존하며 처음 몇 frame을 제외하지 않고 전체 시점의 최대 오차를 사용했다.
|
||||
|
||||
Moving-null 모델은 `y=x+z²/2`, `z=y³`, `y=sin(t)`로 두고
|
||||
`M=(1,z)ᵀ(1,z)`, `N=(-z,1)`이다. 물리 관성에는 `v_z²`를 포함한다.
|
||||
축소 embedding은 `Q(y)=(y−y⁶/2,y³)`이며
|
||||
`v=Q_y v_y`, `a=Q_y a_y+Q_yy v_y²`로 실제 full rates를 복구한다.
|
||||
|
||||
| Moving-null finest 결과 | q 오차 | v 오차 | 물리적 a 오차 | 마지막 refinement 차수(q/v/a) |
|
||||
| --- | ---: | ---: | ---: | --- |
|
||||
| Full-coordinate recurrence | 1.28632e-5 | 2.43051e-5 | 3.22243e-2 | 2.00105 / 2.00095 / 1.00078 |
|
||||
| Reduced-coordinate + chain rule | 1.97708e-6 | 3.54847e-6 | 9.93091e-6 | 1.99986 / 1.99968 / 1.99911 |
|
||||
|
||||
Cubic/explicit-time의 full-coordinate 물리적 a도 차수1이다. 정확한 초기 a만으로
|
||||
후속 recurrence의 차수 저하가 없어지지 않는다. Reduced 방식의 정확히0인 오차에는
|
||||
차수를 부여하지 않았다. Full residual 최대는3.22e-75 이하이며 reduced residual 및
|
||||
hidden0/1/2는2e-79 수준 이하이다. 작은 잔차와 시간 정확도를 혼동하지 않는다.
|
||||
|
||||
실제 current C08a의 finest angular-a 최대 오차는5.67473e-4이며 기존1e-4를 넘는다.
|
||||
Raw 마지막 차수는 약1이지만 finest v_phi/a_phi의 N7 noise separation은
|
||||
INCONCLUSIVE다. 실제 shell의 차수 전체를 이 raw 값만으로 확정하지 않는다.
|
||||
위 Decimal 반례는 이와 별개의 exact-arithmetic recurrence 차수 저하 증거다.
|
||||
Current shell 측정의 원본은 [두 시작점 정책 보고서](newton-start-policy.md)를 따른다.
|
||||
|
||||
최종 v2는 실제3state/mass/null/free projection/reaction을 계산한다. 초기 v1의 spectator
|
||||
bookkeeping 문제는 보존된 이력과 분리해 수정했다. 별도 Decimal100 polynomial-root
|
||||
oracle가40행을 재현했고 오차 측정값 차이는5.99e-77 이하이다. Native exit0.
|
||||
이 BC는 moving null을 자르는 BC가 아니며 shell partial-rotation BC·rank 변화·empty-null
|
||||
검증으로 확대하지 않는다.
|
||||
|
||||
Evidence: `.dryforge/hht-remediation-20261012/dae/compare.py`, `comparison.json`,
|
||||
`run-native.json`, `formulation.md`; 독립 검산은 같은 작업의
|
||||
`review/dae-independent.json`, `review/numerical-review.md`.
|
||||
|
||||
## 2. 실제 C08b: 해상도와 finer Newton 실패
|
||||
|
||||
Current `RunPlate`·[두 시작점 정책](newton-start-policy.md)을 이용해 실제 accepted
|
||||
q/v/a/A와 관성·내력 접선을 export했다. Debug 512/1024는129/257 frames를 모두
|
||||
기록했고 공식 P와 일치한다. 초기 wrapper가 native process handle을 보존하지 않아
|
||||
이 두 실행의 **native exit는 미확인**이다. Completion marker만으로 exit0을 추정하지
|
||||
않는다. 같은 소스의 private MSVC Release 1024는 실제 exit0이며 이력과 P가 Debug와
|
||||
bitwise 일치했다. Release는 별도 build tree여서 기존 Debug binary를 바꾸지 않았다.
|
||||
|
||||
Analytic mass null로 물리 부분공간을 정의하고 그 공간의 양의 mass를 Cholesky로
|
||||
whiten했다. Elastic static condensation의 최대 주파수는 약311rad/s이다. 현재
|
||||
convective partials까지 포함한 frozen full quadratic pencil의 최대 허수 주파수도
|
||||
약311rad/s이며 원54-row pencil residual은5e-15 이하이다. Frozen coefficient/basis
|
||||
분석이 실제 trajectory의 모드·안정성을 증명하지는 않는다. Elastic tangent의 비대칭
|
||||
크기를 기록하고 symmetric-part 진단이라는 점을 명시했다. 음의 고유값·실수 root를
|
||||
clamp하지 않았다.
|
||||
|
||||
초기 M/K와 실제 초기 v를 고정한 linear elastic surrogate에서도 회전 a의
|
||||
512→1024 정규화 self-difference가0.437559였다. 실제 비선형 C08b는0.474897이다.
|
||||
Surrogate exact solution 대비 회전 a 오차는1024/2048/4096/8192에서
|
||||
0.162320 / 0.0413825 / 0.0103790 / 0.00259656으로 차수2에 접근한다.
|
||||
이 결과는 고주파 시간 해상도가 중요하다는 근거다. Surrogate는 실제 nonlinear a0,
|
||||
changing geometry/stiffness·convective 항을 대체하지 않으며 실패의 전체 원인 증명이 아니다.
|
||||
독립 3-state amplification 계산이 surrogate 오차를1.15e-13 이내로 재현했다.
|
||||
|
||||
원 q-갱신 방식의 추가2048/4096 실행은 각각 increment242/1에서 Newton100에
|
||||
도달했다. 초기 wrapper의 두 nonzero exit는 직접 보존되지 않았다. 별도 bounded
|
||||
4096 instrumented 실행에서 실제 exit1과 첫 증분 실패를 확인했다. Iteration90–100의
|
||||
free residual은 약1.79929e-10으로 기존1e-10 기준을 넘었고 보정량은 약8.2e-19였다.
|
||||
q 변화는 약8.27e-19에서 정체했다. 이 시점의 q−q_p 차감으로 rates를 되찾는 산술이
|
||||
잔차 감소를 제한하는 근거이며 기준 완화나 실패 frame 수용은 하지 않았다.
|
||||
독립 tail 검산에서 이11개 iteration의 병진27개 q component는 전부 변하지 않았다.
|
||||
잔차 gate를 초과한 것도 병진 채널이며 회전 채널 잔차는 약8.93e-13이었다.
|
||||
|
||||
Evidence: 작업 폴더의 `c08b/run-512`, `c08b/run-1024`,
|
||||
`c08b/release/run-*`, `c08b/primary-A/run-current-4096-instrumented`,
|
||||
`resolution/analyze.json`, `resolution/initial_elastic_surrogate.json`;
|
||||
독립 검토는 `review/capture-numerical-review.md`, `review/surrogate-independent.json`.
|
||||
|
||||
## 3. P 평가 오차와 accepted history drift
|
||||
|
||||
동일 binary64 accepted state에 대해 ordinary sum, compensated sum, Decimal80,
|
||||
별도 exact Fraction을 대조했다. 기존 정규화 P 오차는512/1024에서
|
||||
2.84555e-14 / 8.03575e-14이고 정확한 state 평가에서도
|
||||
2.86236e-14 / 8.03708e-14였다. Sequential 평가와 exact 평가의 차이는
|
||||
5.59e-17 / 6.83e-17 이하이다. 합산만 개선해서 history drift를 제거할 수 없다.
|
||||
|
||||
Frozen history에서 predictor/rates를 Decimal100으로 다시 계산하면 weighted predictor
|
||||
오차의 가속도 증폭 규모가5.91e-12 / 2.97e-11이다. 원
|
||||
`sum(m_i*a_ui)`의 최대4.59e-12 / 2.14e-11과 비슷한 규모다. Binary64 replay는 실제
|
||||
54개 rate를 정확히 재현했다. 그러나 고정밀 rates만 덮어쓰면 기존 equilibrium과
|
||||
일관된 새 history가 되지 않으며 실제 weighted acceleration도 더 커졌다. 이를 보정된
|
||||
solution으로 사용하지 않았다. 원인 분리에 필요한 sensitivity evidence다.
|
||||
|
||||
Evidence: `c08b/analyze_p.py`, 각 `p-analysis.json`,
|
||||
`resolution/rate_arithmetic.json`, `review/capture-independent.json`,
|
||||
`review/rate-independent.json`. Product rounding과 final cast를 포함한 proxy를 순수
|
||||
product-only 오차로 부르지 않는다.
|
||||
|
||||
## 4. 같은 HHT 방정식의 carried-A 산술 후보
|
||||
|
||||
Frozen predictor `q_p/v_p`와 old physical a를 두고 `b=beta*h²`라 하면 현재 식은
|
||||
|
||||
```
|
||||
q = q_p + b*A
|
||||
v = v_p + gamma*h*A
|
||||
a = (A + alpha*a_old)/(1+alpha)
|
||||
```
|
||||
|
||||
`dE/dA=b*K_eff`이므로 기존 solve `K_eff*delta_q=-E` 이후
|
||||
`A <- A+delta_q/b`로 갱신하고 위 식으로 실제 trial을 구성한다. 각 iteration에서
|
||||
`A=(q−q_p)/b`를 다시 계산하지 않는다. 정확산술에서는 같은 full-coordinate HHT와
|
||||
Newton이다. Reduced-coordinate 적분이나 momentum projection이 아니며 public A의
|
||||
의미를 바꾸는 제안도 아니다. Binary64 history는 기존 q-update와 bitwise 다를 수 있다.
|
||||
|
||||
첫 iteration은 실제 `EvaluateNewtonStart`가 선택한 frame과 assembly를 그대로 소비한다.
|
||||
그 후 실제 trial의 q/v/a/A로 residual/tangent를 조립한다. Requested scaled correction,
|
||||
잔차·hidden·geometry·linear solve·Newton100 기준을 유지한다. 실제 반올림된 q 변화가
|
||||
작더라도 inertia rates는 움직일 수 있으므로 requested correction과 실제 state 변화,
|
||||
`q−q_p−b*A` closure를 구별해야 한다.
|
||||
|
||||
Private 512/1024/2048/4096은 모두 native exit0으로129/257/513/1025 frames를
|
||||
완료했다. 정규화 P 오차는 각각
|
||||
4.71100e-16 / 5.30454e-16 / 7.57130e-16 / 1.20892e-15이다. 원 q-update 대비 history 차이는
|
||||
관측됐으며 bitwise 동일한 구현이라고 보고하지 않는다. **Legacy `RecordNoise`는
|
||||
q-inverse 경로를 위한 N7 estimator다. 그대로 기록한 값은 carried-A 경로의 새 noise
|
||||
인증이 아니다.** 후보의 실제 finer 결과는 다음과 같다.
|
||||
|
||||
| Common-time grid pair | q_u | q_phi | v_u | v_phi | a_u | a_phi |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
|
||||
| 512→1024 | 4.29914e-6 | 1.10373e-4 | 8.79298e-5 | 7.21911e-3 | 4.37504e-3 | 4.74897e-1 |
|
||||
| 1024→2048 | 1.08964e-6 | 3.10386e-5 | 2.28210e-5 | 2.01776e-3 | 1.21522e-3 | 1.31782e-1 |
|
||||
| 2048→4096 | 2.73155e-7 | 7.96550e-6 | 5.85811e-6 | 5.45651e-4 | 3.14411e-4 | 3.40941e-2 |
|
||||
| 마지막 self-difference 차수 | 1.99605 | 1.96223 | 1.96185 | 1.88670 | 1.95049 | 1.95056 |
|
||||
|
||||
표의 마지막 행은 `log2(previous difference/current difference)`이며 exact error의
|
||||
차수가 아니다. 각 pair의 전체 공통 시점과9 nodes의 최대값을 사용하며 rate order r에
|
||||
대해 `T^r` (`T=.25`)를 곱한다. 병진 length scale은 최대 초기 edge1이다.
|
||||
회전 a의 차이는 finer grid에서 감소하지만 원512→1024 값은 그대로여서 기존 정확도
|
||||
기준을 충족했다고 볼 수 없다. 새 grid로 기존 grid의 FAIL을 대체하지 않는다.
|
||||
|
||||
기존 finest difference bound는1e-4다. 관측한 차수2가 계속된다고 가정하면 회전 a의
|
||||
2048→4096 차이0.0340941을 이 bound 이하로 줄이려면 coarse denominator가
|
||||
약3.8만 이상이어야 한다. 예를 들어65536→131072의 차이는 단순 차수 외삽으로
|
||||
약3.33e-5다. **실제 실행이나 통과 보장이 아닌 비용/해상도 추정**이다.
|
||||
최종 두 refinement 차수까지 유지하려면32768/65536/131072 같은 추가 grid 후보를
|
||||
검토할 수 있다. 승인된64–1024 grid를 이 후보로 자동 교체하지 않는다. 기존 문제의
|
||||
고주파를 제거하거나 초기 변형 진폭을 줄여 통과시키지도 않는다.
|
||||
|
||||
Energy 오차는4.02172e-6 / 1.00065e-6 / 2.49394e-7 / 6.22469e-8, angular momentum
|
||||
오차는1.71966e-6 / 4.30176e-7 / 1.07558e-7 / 2.68907e-8로 감소한다. 반면 P는
|
||||
작아져도 strict decrease를 충족하지 않는다. 시간 해상도·산술 개선·acceptance 문제를 구별한다.
|
||||
|
||||
Evidence: `c08b/primary-A/primary_a.cpp`, 각 `identity.json`·`native.json`·
|
||||
`trajectory.jsonl`, `pureq-vs-primaryA.json`; 실행 wrapper는 Python subprocess의 실제
|
||||
child exit를 종료 전에 기록한다. 최초512의 DLL 누락 exit3221225781은 별도 실패로
|
||||
보존했고 runtime 구성 후 성공 실행과 구분했다.
|
||||
Common-time 대조의 실행 원본은 `resolution/carried_a_differences.py`·동일 이름의 `.json`이다.
|
||||
|
||||
독립 reviewer는 실제 source/계수/잔차·보정 기준·첫 assembly 소비를 대조했고 각 grid의
|
||||
stored q/v/a를 binary64 direct map으로 재현했다(mismatch0). Fraction 기준의
|
||||
`q−q_p−b*A` closure는 최대0.499998 ulp였다. 독립 exact nodal P drift는
|
||||
3.53493e-16 / 4.87510e-16 / 5.52863e-16 / 9.31361e-16이며 공식 quadrature P와
|
||||
별도 지표다. Weighted physical/auxiliary acceleration 합도 약1.8e-16 이하로 감소했다.
|
||||
원54-row endpoint 내력 합과의 완전 오차 예산은 capture에 raw 내력 합이 없어 미완료다.
|
||||
Six-channel 차이와 peak time/node도 독립 exact-input 계산으로 재현했다.
|
||||
Review evidence는 `review/carried-a-final-review.md`·`carried-a-independent.json`이다.
|
||||
|
||||
Scoped N5는 초기 selected state·h=1/512에서 u/phi/mixed normalized direction에
|
||||
대해 `2^-j`, j=8,10,12,14,16,18,20 고정 sweep을 수행했다. 첫 probe는 linked
|
||||
q/v/a/A increment의 analytic tangent를 검사했다. 독립 검토 지적 후 v2는 base 및
|
||||
양/음 perturbation을 실제 `q_p+b*A` map으로 재구성하고 base tangent도 다시
|
||||
조립했다. 내부 sweep에 연속 통과 쌍이 있으며 최악 j10 상대 action 차이는
|
||||
2.35197e-8로 기존1e-6 이하이다. 두 probe 모두 실제 child exit0이고 N5 stdout
|
||||
completion marker와 빈 stderr를 확인했다. 공용 wrapper가 다른 marker를 검색해
|
||||
`completion_marker=false`로 기록한 원값은 보존했다. 이 한 상태의 검사이며 모든
|
||||
accepted state·BC·N7 통과로 확대하지 않는다. Evidence는
|
||||
`c08b/primary-A/n5-carried-a-v2`, `review/carried-a-n5-audit.json`이다.
|
||||
|
||||
별도 instrumented512는 기존 trajectory를 덮어쓰지 않고 실제 exit0으로 완료했다.
|
||||
384 corrections에서 requested/actual reconstructed delta q의 최대 차이는4.67227e-17,
|
||||
binary64로 평가한 q-map closure는2.77287e-17이었다(위 Fraction closure와 구분).
|
||||
최대 requested correction6.21702e-6과 실제
|
||||
correction도 별도로 기록했다. Requested full vectors를 보존했지만 실제 full delta
|
||||
vector는 기록하지 않아 모든 component의 독립 재계산을 의미하지는 않는다.
|
||||
`c08b/primary-A/instrumented-512/requested-vs-actual-dq.jsonl`·`native.json`에
|
||||
실행 identity와 수치를 남겼다. N5와 마찬가지로 wrapper marker boolean은false지만
|
||||
해당 stdout marker·실제 child exit0을 확인했다.
|
||||
|
||||
최종 독립 검토는 위4grid의 recurrence/저장 state, one-state N5 v2,
|
||||
384 correction records의 순서·집계·source/exe/library identity를 확인했다.
|
||||
Correction은 aggregate/source audit이며 complete independent rounding oracle는 아니다.
|
||||
최종 판정은 **이 private arithmetic 후보의 scoped 수치 타당성 확인**이다.
|
||||
Production 채택·N7·BC·공식 C08 PASS 판정과 구별한다.
|
||||
|
||||
## 5. P strict decrease의 계약 문제
|
||||
|
||||
현재 flat centered all-free C08b에서는 first thickness moment가0이므로
|
||||
`P_n=sum(m_i*v_ui,n)`, 병진 관성은 `m_i*a_ui`이다. 실제 물리/drilling potential의
|
||||
균일 translation 불변성에서 `sum(f_int,ui)=0`이다. 정확한 endpoint equilibrium을
|
||||
합하면 `S_a,n=sum(m_i*a_ui,n)=0`이다. 초기 평형과 `A0=a0`가 이를 만족하면
|
||||
|
||||
```
|
||||
S_A,n+1 = (1+alpha)*S_a,n+1 - alpha*S_a,n = 0
|
||||
P_n+1 - P_n = h*((1-gamma)*S_A,n + gamma*S_A,n+1) = 0
|
||||
```
|
||||
|
||||
따라서 원 full-coordinate HHT의 정확 branch는 모든 h에서 P를 정확히 보존한다.
|
||||
P drift의 strict temporal decrease는 정확 branch에조차 `0<0`을 요구한다.
|
||||
독립 reviewer도 실제 translation-invariant source와 reference의 zero first moment,
|
||||
별도 유리수 HHT recurrence 대조를 통해 이 증명을 확인했다.
|
||||
Finite-precision 비영 drift의 비율은 이 문제의 P 시간절단 차수가 아니다. 이 증명이
|
||||
현재 drift 전부를 roundoff로 인증하거나 energy/angular momentum의 정확한 이산
|
||||
보존을 보장하지는 않는다. General warped shell·first moment≠0·외력·반력 및 새
|
||||
reduced recurrence에 이 간단한 증명을 그대로 적용할 수 없다.
|
||||
|
||||
**사용자 결정 후보:** 기존 absolute P bound `<=1e-3`는 유지하고 이 특수 C08b에서는
|
||||
P 절대 보존과 원 balance/update consistency를 검사한다. E/L의 기존 temporal
|
||||
decrease는 유지하며 P에만 strict-decrease를 요구하지 않는다. 필요한 raw 진단은
|
||||
`S_a`, `S_A`, `sum(f_int,u)`, `sum(E_u)`, HHT filter 및 velocity update defect다.
|
||||
이는 acceptance 변경이므로 미승인 상태다. Tests·tolerance·FAIL을 자동 변경하지 않았다.
|
||||
|
||||
## 6. C08a의 실제 차수 문제와 다음 구현 경계
|
||||
|
||||
Carried-A는 같은 recurrence의 산술 개선이므로 §1의 물리적 a 차수1 반례를 해결하지
|
||||
않는다. 실제 shell에 reduced-coordinate 후보를 적용하려면 smooth embedding
|
||||
`q=Q(p,t)`, constraint Jacobian의 regularity·transversality, 양의 reduced mass를
|
||||
검증해야 한다. Fixed graph에서 drilling scalar `psi=0`을 풀며 `psi_z` 가역성 하나만으로
|
||||
모든 조건이 충족되었다고 판정하지 않는다.
|
||||
|
||||
복구식은 `v=J*v_p+Q_t`,
|
||||
`a=J*a_p+Q_pp[v_p,v_p]+2*Q_pt*v_p+Q_tt`다. Residual은 `R=J^T*E`이고 정확한
|
||||
접선에는 `(delta J)^T*E` 및 curvature/time 미분을 포함한다. Raw internal-force
|
||||
third derivative만으로 충분하다고 단정하지 않는다. 현재 shell의 정확 drilling identity를
|
||||
활용하면 일부 high-order energy 미분을 피할 수 있으나 constraint의 필요한 third
|
||||
contractions·force/time derivatives·partial BC·chart transition을 실제 구현해야 한다.
|
||||
|
||||
구체적으로 fixed graph의 독립 좌표 p와 종속 drilling 좌표 z를 잡아 coupled
|
||||
`psi(p,z,t)=0`을 푼다. 각 node의 admissible null을 n_i라 하면 현재 shell의 exact
|
||||
identity는 `n_i^T*grad(U_phys)=0`이며 drilling constraint는
|
||||
`psi_i=sum_e(k_e*S_i*gamma_ei)−n_i^T*F_i`,
|
||||
`S_i=1/||J_l(phi_i)^(-1)*d_i||`로 표현할 수 있다. `gamma_ei`는 raw drilling
|
||||
measure이고 현재 공개 `drilling_constraint`는 그 raw measure와 다른 force-derived
|
||||
scalar다. 기존 scalar gradient/Hessian을 재사용할 수 있으나 필요한 third contractions는
|
||||
현재 public return에 없다. 이 identity는 일반 U의 fourth derivative를 무조건 요구하는
|
||||
경로를 피하는 데 유용하지만 외력의 null 미분과 explicit-time 항을 생략하는 근거가 아니다.
|
||||
|
||||
정확한 reduced Newton action은 같은 full trial에서
|
||||
|
||||
```
|
||||
delta R = (delta J)^T*E
|
||||
+ J^T*((I_q + K_int - F_q)*delta q + I_v*delta v + M*delta a)
|
||||
```
|
||||
|
||||
를 계산한다. `delta q=J*delta p`이고 delta v/a는 위 chain-rule 복구식 전체를
|
||||
미분한다. 따라서 Q_ppp와 mixed-time operators, 독립 HHT rate의 delta v_p/a_p가
|
||||
포함된다. Constraint의 implicit derivatives는 같은 coupled `psi_z`로 solve한다.
|
||||
`(delta J)^T*E`를 free endpoint residual이 작다는 이유로 제거하거나 FD 접선을 공식
|
||||
정확 접선으로 대체하지 않는다. Fixed graph가 invalid하면 새 pivot/chart와 history의
|
||||
검증된 수송식이 필요하다. 준비 전에는 silent normalization 대신 명시적 실패다.
|
||||
|
||||
최종 소형 정식화와 source capability 분석은 작업의 `dae/formulation.md`에 있고 실제
|
||||
shell reduced prototype은 아직 미구현이다. 같은 full A field에 filter-combination 값을
|
||||
담더라도 full Newmark driver라는 기존 의미가 사라질 수 있다. State/history·HDF5
|
||||
semantics/schema 선택은 `io/io.md`의 **미채택 후보**이며 기존 계약을 덮어쓰지 않는다.
|
||||
실제 채택 전 구체적인 알고리즘·영속 결과 의미 결정이 필요하다.
|
||||
|
||||
새 production 구현 후에는 해당 산술의 N5/N7, lifecycle/BC/physical balance와 기존
|
||||
C08 검사를 먼저 실행하고, 구성된 전체 MSVC Debug/CTest·필수 원본 비교를 수행한다.
|
||||
이번 private 수학/실행 자료를 공식 전체 회귀의 현재 PASS로 승계하지 않는다.
|
||||
|
||||
## 7. 채택 전에 필요한 결정과 검사
|
||||
|
||||
1. Carried-A는 같은 식의 산술 후보다. 실제 map의 scoped N5와 requested/actual
|
||||
correction 대조와 별도로 N7 arithmetic estimator·BC/lifecycle·production 회귀가
|
||||
남는다. 이번4grid 실행만으로 production을 수정하거나 완료를 선언하지 않는다.
|
||||
2. C08b의 P는 §5의 absolute conservation 판정 변경 여부를 사용자에게 확인한다.
|
||||
Energy/L bound·잔차·physical mass는 그대로다. 정확 branch에도 strict decrease가
|
||||
성립하지 않는 현재 계약 문제를 tolerance 완화로 해결하지 않는다.
|
||||
3. C08b의 시간 정확도에는 고주파를 충분히 resolve하는 grid가 필요하다. 기존64–1024
|
||||
결과를 보존하고32768/65536/131072를 최종 수렴 판정에 추가하는 후보는 acceptance
|
||||
변경이다. 관측된 차수 외삽이며 N7 또는 실제 성공의 보장이 없음을 함께 결정한다.
|
||||
4. C08a에는 원 full-coordinate recurrence와 다른 reduced-coordinate 적분을 검토한다.
|
||||
물리적 q/v/a·초기값·원 residual/hidden 기준은 유지한다. Public full A를 diagnostic
|
||||
filter combination으로 정의하고 shell 결과에 algorithm metadata/schema version2를
|
||||
구분하는 것은 **미승인 제안**이다. 승인 후에도 실제 shell prototype·독립 검토 없이
|
||||
채택하지 않고 fixed patch 밖은 검증된 전환식이 마련될 때까지 fail closed한다.
|
||||
|
||||
위2–4는 승인된 acceptance·절차·영속 의미를 바꾸므로
|
||||
[프로젝트 지침](../../AGENTS.md)의 사용자 결정 경계에 해당한다. 이번 실행의 성공을
|
||||
승인으로 해석하지 않는다. 작업에 사용한 기존 production·tests·원본·binary의 hash는
|
||||
`.dryforge/hht-predictor-newton-20261012/closed-identities.json`과 대조해 전부 일치했다.
|
||||
따라서 이번 작업에서는 새 production 전체 build/CTest·reference 재검증을 실행하지 않았다.
|
||||
문서의 local 링크와 whitespace는 정적 검사한다.
|
||||
최종 정적 검사에서 local 링크536개에 missing0, `git diff --check` exit0이었다.
|
||||
|
||||
## 8. 승인 후 실제 구현과 현재 검증 범위
|
||||
|
||||
2026-10-12의 HHT-ADR-014 승인 후 reduced shell operator, augmented sparse
|
||||
Newton 및 실제 executor 연결을 구현하고 있다. §7의 미승인 설명과 hash 일치는
|
||||
승인 전 조사 시점의 기록이다. 현재 working source가 그 과거 binary와 같다는
|
||||
의미가 아니다. 현 정식화와 public 의미는
|
||||
[reduced 정식화](formulation-reduced-coordinate.md),
|
||||
[수치 검토](numerical-review-reduced-coordinate.md),
|
||||
[I/O 계약](io-reduced-coordinate.md)을 따른다.
|
||||
|
||||
| 실행 | 실제 결과 | 근거와 범위 |
|
||||
| --- | --- | --- |
|
||||
| Operator clean MSVC x64 Debug build | exit0 | `.dryforge/hht-remediation-20261012/operator-clean-build.log`; 실제 executor 연결 전 operator/기존 회귀용 build |
|
||||
| Operator·algebra·state·writer·local third focused | 35 PASS, CTest exit0 | `operator-clean-focused.stdout.log`, `operator-clean-focused.native.json`; 실제 reduced 시간수렴 증거는 아님 |
|
||||
| Reduced executor 첫 build | exit0 | `reduced-executor-build.native.json`; 빌드 후 후속 source 수정이 진행됨 |
|
||||
| Executor·operator·Newton start·algebra·state·writer focused | 39 PASS / 1 FAIL, CTest exit8 | `reduced-executor-focused.native.json`; large DIRECT에서 첫 outer correction 후 graph root가 100회 종료 |
|
||||
| 원본 reference 보존 | 16개 hash 일치 | 과거 `closed-identities.json`의 originals와 현재 파일 대조; 새로운 수치 비교 PASS가 아님 |
|
||||
|
||||
처음 incremental 검사에서는 localized MSVC `/showIncludes` prefix와 Ninja
|
||||
설정의 encoding 불일치로 헤더 dependency가 0개였다. Private assembly 구조를
|
||||
변경한 뒤 stale object가 섞여 algebra 8개가 실패했다. 현재 직접 developer-shell
|
||||
실행에서 prefix를 맞춘 clean build 후 operator object의 dependency 39개와
|
||||
관련 35개 통과를 확인했다. 별도 hidden child process는 다른 encoding을 사용할
|
||||
수 있으므로 이후 build에서도 실제 dependency를 확인한다. 이 환경 오류를
|
||||
물리 정식화 실패와 혼동하지 않는다.
|
||||
|
||||
첫 reduced executor focused 실패는 별도 graph-root 문제이며 조사 중이다.
|
||||
초기 trial은 full free scaled residual로 비교하고, N2는 augmented의 실제
|
||||
full q/v/a variation과 public A/private Ar를 각각 검사하도록 수정했다.
|
||||
초기 full state는 보존하며 별도 reconstructed-rate candidate를 기존
|
||||
초기화·hidden·mass 기준으로 검증한다. 이러한 후속 수정과 actual C08/N7,
|
||||
승인된 finer grid, 새 reference 비교 및 전체 회귀의 결과는 아직 위 통과로
|
||||
승계하지 않는다. 현재 완료 checklist는 [PRD](PRD.md) 한 곳에서 관리한다.
|
||||
|
||||
### 2026-10-13 후속 실행
|
||||
|
||||
후속 root 종료 조건은 기존 N3 uncancelled scale와 N2 회전 correction을 사용한다.
|
||||
Scale가 0인 경우 literal zero만 허용한다. 초기 원본 q/v/a/A는 보존하고 별도
|
||||
재구성 candidate를 검증한다. 기존 실패와 다음 결과를 구분한다.
|
||||
|
||||
| 실행 | 실제 결과 | 범위 |
|
||||
| --- | --- | --- |
|
||||
| `reduced-basics-focused` Debug | 11 PASS / 1 FAIL, CTest exit8, 1416.04초 | Plate h=1/256, T=.25의 65-frame runtime PASS(1290.35초). Large DIRECT는 inner graph 오류 대신 outer100 endpoint nonconvergence로 종료. 후속 N5/N7 수정 전 binary |
|
||||
| `reduced-current-graph-focused` Debug | 25 PASS, CTest exit0, 61.83초 | 실제 mixed-time load의 augmented N5 sweep, zero-scale root, chart/부분구속, 상태·writer/readback·실패 파일 보존. Actual N5 47.43초 |
|
||||
| Python HHT comparator | 47 PASS, exit0 | `uv run --with pytest --with h5py --with numpy python -m pytest tests/test_compare_hht_dynamic.py -q` |
|
||||
| `reduced-release-core` | 9 PASS / 1 FAIL, CTest exit8 | Bounded C08a64의 초기 원본 상태·65-frame 이력 PASS. 최초 mixed-load N5 fixture의 graph branch 이탈 FAIL. Nonzero drilling force를 principal branch 안의 크기로 수정한 뒤 위 Debug N5에서 재검증 |
|
||||
| `reduced-release-c08a` | CTest exit8, 114.95초 | 실제 16/32/64/128/256 전체 grid 완료; 승인 accuracy/hidden 기준의 실패는 아래와 같음. Release는 configured Debug 전체 회귀를 대체하지 않음 |
|
||||
|
||||
C08a의 h=1/256 최대 normalized angular-acceleration error는
|
||||
`1.003052994395584e-4`로 `1e-4`를 초과한다. h=1/64→1/128의 차수는
|
||||
`1.777772580127911`로 `1.8` 미만이며, 다음 refinement는 약2차다. 다른
|
||||
q/v/translation-a channel은 이 실행의 정확도 기준을 만족했고 모든 channel의
|
||||
기존 N7 factor100 separation 검사는 통과했다. 이러한 부분 결과를 C08a PASS로
|
||||
표시하지 않는다.
|
||||
|
||||
Hidden velocity/acceleration defect는 각각 약 `1e-16`/`1e-13`에서 변동하여
|
||||
strict 감소 검사가 실패했다. Reduced reconstruction에서 해당 analytic 식은
|
||||
0이므로 이 값의 감소를 truncation order로 해석할 수 없다. 그러나 승인된 검사는
|
||||
유지하며 독립 검토 및 진단을 진행한다. Algebraic acceleration recovery는 최대
|
||||
angular-a error를 실질적으로 바꾸지 않았고, 오차 대부분은 physical complement에
|
||||
있다. Hidden root drift만으로 정확도 실패를 설명하지 않는다.
|
||||
|
||||
현재 large DIRECT의 outer 잔차 정체와 C08a 정확도 실패를 해결 중이며, C08b 최종
|
||||
finer grid·최신 production 원본 reference·구성된 전체 Debug 회귀는 미완료다.
|
||||
|
||||
### 좌표 증분 산술 수정 후 현재 범위
|
||||
|
||||
Large DIRECT의 실제 pp는 `-11218.75`, 반대 부호의 algorithmic 항은
|
||||
`11218.426469199354`, physical p는 `-.32353080064604001`이었다. 요청
|
||||
`delta_p=-2.2160194823574155e-12`가 Ar에서 p를 다시 계산하면
|
||||
`-3.637978807091713e-12`로 바뀌었다. 이전 이 절의 outer100 실패는 이러한
|
||||
상쇄·Ar quantization 문제와 구분하여 보존한다.
|
||||
|
||||
현재 p는 실제 Newton `delta_p`를 직접 누적하고 Ar는 독립적으로 같은 수학
|
||||
recurrence를 유지한다. 기존 absolute update, whole p/v increment와 요청한
|
||||
predictor/correction의 Neumaier trace를 기존 `1e-12`로 검사한다. 추가했던
|
||||
`p-predictor` 대 작은 단일 algorithmic 항의 ratio는 N3에 없는 gate로 확인하여
|
||||
제거했다. 정상 binary64 덧셈에도 그 ratio가 실패하므로 tolerance 완화가 아니라
|
||||
계약의 정정이다. 실제 적용된 rounded delta를 요청 delta 대신 쓰지 않는다.
|
||||
|
||||
| 현재 동결 source 실행 | 결과 | Evidence |
|
||||
| --- | --- | --- |
|
||||
| MSVC x64 Debug 전체 target build | exit0 | `reduced-closed-trace-debug-build.native.json` |
|
||||
| Supplemental Release build | exit0 | `reduced-closed-trace-release-build.native.json` |
|
||||
| Debug operator·N5·procedure·산술 focused | 15 PASS, CTest exit0, 103.98초 | `reduced-closed-debug-core.native.json`; large DIRECT20.33초 PASS, injected backend cause/context PASS |
|
||||
| Release 같은 범위 + 실제 C08a64 이력 | 16 PASS, CTest exit0, 36.98초 | `reduced-closed-release-core.native.json`; 최신 p/Ar/CA 및 전체 resolved checks 포함 |
|
||||
|
||||
Raw N5 sweep와 C08 incremental trace는 `reduced-closed-debug-raw.log`와
|
||||
`reduced-closed-release-raw.log`에 보존했고 source/binary identity는
|
||||
`reduced-closed-source-identities.json`에 기록했다. 이후 source 변경본으로
|
||||
이 PASS를 승계하지 않는다. 원본16개 hash는 변경0이다.
|
||||
|
||||
이전 binary의 원본 재해석은6 accepted increments 뒤, 새 resolved 계약 정정에
|
||||
따라 의도적으로 종료했다. 이를 physics FAIL 또는 reference PASS로 계산하지
|
||||
않는다. 최신 source의 byte-copy 원본 재해석과 C08b 전체 승인 grid의 Release
|
||||
보조 실행을 시작했다. 원본 재해석은 증분39·t=3.9의 increment trace 판정으로
|
||||
CLI exit5에 종료했다(48분19.51초). C08b는599.92초·CTest exit8로
|
||||
종료했으며 기존5 grid 이후 첫 finer grid에서 hidden position 판정이 실패했다.
|
||||
Raw `ψ=5.7596457839072371e-18`, scale `1.627592976412797e-08`로 normalized
|
||||
값은 약3.54e-10이다. 직전 velocity increment 검사 실패도 있어 원인을 함께 조사한다.
|
||||
Evidence는 `reduced-closed-c08b.log`에 보존한다. Full configured Debug/CTest·필수
|
||||
reference comparison은 아직 완료되지 않았다. C08a의 [두 변경](c08a-refinement-proposal.md)은
|
||||
2026-10-13 HHT-ADR-015로 승인됐으며 변경본의 공식 검증을 새로 수행한다.
|
||||
|
||||
승인 C08a7 grid의 첫 Release 실행은862.08초·CTest exit8이다. 최종 angular-a
|
||||
maximum은7.311940783e-6, 마지막 두 차수는1.805002375/1.972997261이고 다른
|
||||
5개 physical channel도 마지막 두 차수1.8 및 finest error1e-4 기준을 만족했다.
|
||||
Hidden1/2 bound와 N7 검사는 실패를 보고하지 않았으나 q increment 및 requested
|
||||
trace assertion은 각각110건 실패했다. 추가 velocity subtraction assertion1184건은
|
||||
위 원 N3 계약 정정 전 binary의 이력이다. Physical 부분 통과를 전체 PASS로
|
||||
확대하지 않는다. `approved-c08a-release.log`, `approved-c08a-analysis.json`에
|
||||
결과를 보존한다. 이 실행은 stable complete-Jet 및 후속 candidate 누적 수정 전이다.
|
||||
|
||||
## 9. Finer C08b의 작은 각도 내력 불일치
|
||||
|
||||
같은 h=1/32768 fixture의 별도 진단에서 증분4·t=.0001220703125를 확정했다.
|
||||
Graph는 iteration0에서 normalized residual 약6.36e-14지만 node0의 analytic
|
||||
constraint `1.4792647557e-22`와 실제 내력 null projection `5.7596457839e-18`은
|
||||
같은 scale `1.6275929764e-8`에서 불일치했다. 저장된 binary64 component를
|
||||
독립 Fraction/Decimal로 재계산한 최종 dot rounding은 약1.99e-25이다.
|
||||
Root polishing 또는 최종 dot 보상합산으로 이 차이를 해결할 수 없다.
|
||||
|
||||
회전 norm은 이전 증분까지1e-4 미만이고 실패 증분에서 약1.314e-4다.
|
||||
`ExpSkew`의 Rodrigues coefficient는 이 구간에서 value/gradient/Hessian에
|
||||
`(1-cos(theta))/theta²`의 직접 Jet 계산을 쓰고, directional/mixed derivative에는
|
||||
이미 안정적인9항 급수를 썼다. 동일 Jet의 모든 층에 이 급수를 일관되게 적용한
|
||||
동일54좌표 진단은 원 normalized1e-10 기준을 통과했다. 물리 null force는
|
||||
node0에서 약5.76e-18에서1.65e-24로 줄었다. 물리식·geometry predicate·
|
||||
원 scale·tolerance를 변경하거나 힘을 projection하지 않았다.
|
||||
|
||||
별도 scratch unit 실행은 새 null-work 회귀의 수정 전 native1, 수정 후4/4
|
||||
native0(1.219초)을 기록했다. 기존1e-4와 급수 경계.5 양측의 third-gradient
|
||||
sweep, force/constraint derivative 및 기존 tangent schedule을 포함한다.
|
||||
Evidence는 `.dryforge/hht-reduced-c08a-finer-20261013/`의 `point-original.log`,
|
||||
`point-stable.log`, `element-unit-original.log`, `element-unit-stable.log`와
|
||||
[독립 수치 검토](numerical-review-reduced-coordinate.md)에 연결했다.
|
||||
Configured build/CTest와 전체 C08 이력 통과는 별도로 확인해야 한다.
|
||||
|
||||
원 N3는 velocity의 absolute update와 q1-qn의 predictor/correction trace를 요구한다.
|
||||
추가했던 vnew-vold subtraction gate는 독립 계약 검토에 따라 diagnostic으로
|
||||
정정했다. 원 velocity 식·whole-history CA·physical rates·q subtraction gate는
|
||||
유지한다. 과거 C08b h=1/1024에는 q trace 실패도 있어 이 문제는 별도로 조사한다.
|
||||
|
||||
## 10. 보상 좌표 누적 적용 후 재검증
|
||||
|
||||
실제 Newton candidate 좌표의 high/low를 TwoSum으로 누적하고 predictor의
|
||||
하위 자릿값도 보존했다. 요청 증분 trace는 별도 합산으로 유지하며 기존
|
||||
`q_new-q_old`의 uncancelled scale 및 `1e-12` 기준은 변경하지 않았다.
|
||||
산술·관성·요소 관련 Release 13개 검사는 통과했다. 이후 추가된 검사와
|
||||
production 초기 평형 진단 변경을 이 binary의 통과로 승계하지 않는다.
|
||||
|
||||
승인된 C08a 전체7 grid의 재실행은 888.432초, CTest native8로 종료했다
|
||||
(`compensated-c08a-release.log`). Finest angular-a maximum은
|
||||
`7.3119407370681913e-6`이지만 q subtraction 및 requested trace가 실패했다.
|
||||
첫 실패는 h=1/512, increment278, full DOF6이다. 저장된 좌표 증분은
|
||||
`-1.0961338644671637e-6`, 요구 증분은 `-1.096133864469764e-6`,
|
||||
scale은 `1.0961338644697645e-6`, ratio는 `2.3723299063737948e-12`다.
|
||||
Candidate low는 `-2.6003877354211524e-18`이다. 가장 가까운 binary64 좌표의
|
||||
표현 한계와 구현 오류를 독립적으로 구별하는 조사를 진행하며, 현재 결과는 FAIL이다.
|
||||
|
||||
Actual N5의 올바른 augmented Jacobian과 third-directional-gradient를 제거한
|
||||
mutation 검사는 Debug에서 통과했다(86.70초). Mutant의 row3 normalized
|
||||
error 약 `1.00336e-3`은 원 `1e-6` 기준을 넘었다. 나머지 필수 mutation과
|
||||
warped/shared-element coverage는 이 검사로 대체하지 않는다.
|
||||
전체 Debug focused 11개 실행은 10 PASS, proper-Q covariance 1 FAIL이다
|
||||
(`compensated-debug-core.log`). 회전된 fixture는 초기 complete free equation에서
|
||||
실패했으며, 기존 평형식과 허용값을 유지한 상세 진단을 추가해 재검증한다.
|
||||
|
||||
상세 진단은 unforced global-Z row의 residual `-2.1366160554637391e-34`,
|
||||
row scale `1.0217671502953158e-32`를 확인했다. 내부 초기화 함수의 행별
|
||||
검사는 승인 N2의 채널 최대값 기준과 다르고, assembled force/mass 기반 scale도
|
||||
요소·하중별 uncancelled scale를 보존하지 않았다. 해당 사전 검사를 제거했다.
|
||||
반환 가속도의 finite/구속 exact-zero, mass/range solve 및 hidden consistency는
|
||||
유지한다. 호출자는 실제 a0로 다시 조립한 original/reconstructed frame0의
|
||||
기존 N2 검사를 통과한 후에만 commit한다. C08 controller에도 fresh a0의
|
||||
명시적 채널 검사를 추가했다. 독립 정적 검토는 이 소유권 정정을 확인했다.
|
||||
Debug 전체 target 재빌드는 native0이며 관련 algebra 검사8개는 통과했다.
|
||||
Actual proper-Q 이력의 재실행은 140.327초에 reconstructed frame-zero의
|
||||
physical residual 검사로 실패했다. Focused 합계는8 PASS·1 FAIL, native8이다
|
||||
(`initializer-caller-n2-debug.log`). 잘못된 사전 gate를 제거한 것으로 좌표계
|
||||
회전 문제가 해결됐다고 보고하지 않는다. 재구성 초기 가속도와 실제 원 가속도의
|
||||
채널·힘·scale 진단을 추가하여 원인을 조사한다.
|
||||
|
||||
C08b 전체 승인 grid와 byte-copy 원본 reference 재해석은 별도 실행 중이다.
|
||||
최종 HDF5·reference 비교·전체 configured Debug gate는 아직 완료되지 않았다.
|
||||
|
||||
추가 C10 변경본의 전체 Debug target build는 native0이다
|
||||
(`c10-initial-reconstruction-debug-build.native.json`). 실제 executor가 사용하는
|
||||
100 correction policy의99/100/101 경계 검사는 통과했다. Accepted increment1
|
||||
뒤 backend 실패를 주입하고 candidate 미반환·partial log·같은 Domain의 fresh
|
||||
retry 전체 이력/로그를 대조하는 검사는51.30초에 통과했다. Actual proper-Q
|
||||
재구성 진단 검사는 별도로 실행 중이다. 실제 물리 문제의100회
|
||||
수렴, private local history의 직접 snapshot, HDF5 보존 coverage를 이 검사로
|
||||
주장하지 않는다. N3 좌표 표현 변경 제안은 승인 대기다.
|
||||
|
||||
### HHT-ADR-016 승인 이후 실행 경계
|
||||
|
||||
2026-10-13 사용자가 pair 증분 검사와 저장 high의 RN-even 검사 분리를 승인했다.
|
||||
위 승인 대기 설명은 이전 실행 이력이며 변경본 구현·검증을 새로 수행한다.
|
||||
이전 production reference는 증분40·t=4의 requested trace에서 CLI exit5로
|
||||
종료했다(`compensated-reference.native.json`, 약72분38초). 최종 HDF5/reference
|
||||
비교 PASS가 아니다. 이전 기준의 C08b 장시간 실행은 새 승인 기준과 관성 수정으로
|
||||
대체하기 위해 중단했다(`compensated-c08b-release.interruption.json`). CTest native8,
|
||||
16750.04초이며 마지막 출력은 h=1/65536·증분16384의 원 high-only trace 실패다.
|
||||
이 중단 실행을 전체 grid 자연 종료 또는 변경본 검증 통과로 보고하지 않는다.
|
||||
|
||||
추가 진단 실행은 C10 두 검사 PASS·C09 FAIL, native8로 종료했다
|
||||
(`c10-initial-reconstruction-debug.log`). C09는137.126초에 실패했으며,
|
||||
original frame0의 phi residual ratio도 `0.065354177871985789`로 이미
|
||||
N2를 만족하지 않았다. 재구성 phi ratio는 `0.89790979051373154`,
|
||||
최대 residual은 `2.1257138844293921e-17`, scale은 `2.3674025017737948e-17`다.
|
||||
해당 full4 성분의 가속도는 original/reconstructed 모두
|
||||
`4.9146402260681746e-13`이며 delta는0이다. Translation channel은 통과했다.
|
||||
초기 range solve의 mass matvec와 실제 관성 조립 및 다른 가속도 성분을
|
||||
대조해야 하며, 단순히 재구성 한 성분의 오차로 원인을 확정하지 않는다.
|
||||
|
||||
후속 anchored covariant 관성 계산의 Debug 검사에서 original frame0의 phi ratio는
|
||||
0으로 개선됐다. Reconstructed frame0는 ratio `0.968200478753255`, residual
|
||||
`2.1660326527186968e-17`, scale `2.2371737054993837e-17`로 여전히 실패했다.
|
||||
따라서 관성 geometry 수정만으로 C09를 폐쇄하지 않는다. 기존 flat large-offset
|
||||
zero-moment 검사는 통과했고, 잘못된 비영 C1 fixture 두 실행의 실패도 보존한다.
|
||||
현재 genuine director-gradient fixture의 독립 적분 대조는 별도 실행한다.
|
||||
|
||||
ADR-016 exact threshold 변경본 전체 Debug target build는 native0이다
|
||||
(`adr016-exact-threshold-warped-debug-build.native.json`). N3 산술 검사6개는
|
||||
통과했다. 독립 MSVC/Fraction 대조는 frozen58개 및 threshold 경계126개에서
|
||||
모두 판정이 일치했다. Unsupported product-tail24개는 fail-closed로 처리했다.
|
||||
이 결과는 전체 C08 grid 또는 production reference의 통과를 뜻하지 않는다.
|
||||
|
||||
같은 변경본의 focused Debug 실행은 native0,9/9 PASS,149.36초로 종료했다
|
||||
(`adr016-exact-threshold-warped-debug.native.json`). Warped 공유 절점의 실제 N5
|
||||
fixed-sweep/mutation 검사는147.11초에 통과했다. Genuine Y-axis director-gradient의
|
||||
비영 C1 검사와 독립5³ nodal moment·energy·power 대조도 통과했다. 이전 flat 및
|
||||
twist fixture의 비영 C1 주장 실패를 이 실행에서 삭제하거나 재해석하지 않는다.
|
||||
|
||||
Actual initial-only 진단과8개 row의 독립 Fraction 대조에서 초기 회전 가속도는
|
||||
질량 영공간 방향의 가짜 값으로 확인됐다. Direct primitive의 translation-gradient
|
||||
합과 uniform-translation contraction은 정확히0이지만, physical tangent로부터
|
||||
구한 projected constraint-gradient 계수의 잡음이 이를 상쇄하는 영공간 가속도를
|
||||
생성했다. 재구성은 direct primitive를 사용하므로 그 가속도의 일부를 변경하고
|
||||
실제 관성 모멘트 잔차를 만든다. 초기화와 재구성의 derivative authority를 동일한
|
||||
direct primitive로 계산하는 동등 정식화의 수정 및 재검증이 진행 중이다.
|
||||
초기 가속도의 projection이나 판정 기준 완화로 이 문제를 숨기지 않는다.
|
||||
|
||||
ADR-016 N3 및 anchored inertia의 frozen Release 실행에서 공식 C08a7개 grid는
|
||||
native0,485.77초에 통과했다(`adr016-c08a-release.native.json`, raw CTest 보존).
|
||||
최종 h=1/1024의6개 최대 normalized q/v/a 오차는
|
||||
`3.47803e-8,5.94530e-8,4.16492e-8,8.35754e-8,2.50804e-7,7.31194e-6`이다.
|
||||
원 승인 시간수렴 차수·hidden1/2·최종3-grid N7 factor100 검사도 통과했다.
|
||||
보존 raw aggregate의 별도 재계산에서 최종 두 refinement의 최소 차수는
|
||||
`1.8050023624308058`, 최종3-grid의 최소 noise separation은
|
||||
`157.63456436970105`로 각각 원 기준1.8 및100을 만족했다.
|
||||
실행 binary/source identity는 `adr016-c08a-release-source-identity.json`에 기록했다.
|
||||
이 binary는 canonical initial-gradient 정정 이전의 snapshot이므로 후속 변경본의
|
||||
전체 gate로 승계하지 않는다. Debug C08 및 C08b·reference·전체 회귀는 미완료다.
|
||||
|
||||
Canonical initial-gradient 변경본의 Debug target build는 native0이다. Algebra/C09
|
||||
focused는562.44초·native8,7 PASS·2 FAIL로 종료했다
|
||||
(`adr016-canonical-initial-debug.native.json`). 하나는 수동 regularity fixture의
|
||||
gradient mutation 누락이며 수정 후 해당 경계 및 missing-gradient negative가 통과했다.
|
||||
C09는 초기 재구성 gate를 통과했지만 increment1·outer100에서 physical moment N2
|
||||
비수렴으로 실패했다. 초기 authority 정정을 전체 C09 통과로 보고하지 않는다.
|
||||
|
||||
Actual 첫 후보의 요소 replay에서 물리힘이 회전 잔차를 지배하며 drilling 기여는
|
||||
약1e-37이었다. 절점 병진1–2 ULP 차이는 실제 작은 변형을 만든다. 별도의 rotated
|
||||
element tiny tilt `phi=1e-17*tangent_a`에서 기존 full director 차감은 물리힘0을
|
||||
반환하지만 같은 요소의 zero-state physical tangent 선형화는 비영 힘을 예측했다
|
||||
(상대 차이1). 이는 value/gradient 일관성 검사이며 별도 전체 stiffness oracle가 아니다.
|
||||
Rodrigues의 direct director increment를 전체 Jet에 사용한 private replay는
|
||||
상대 차이`1.605880834081617e-16`으로 개선됐다. Quadratic energy oracle
|
||||
`1.666666666666667e-33`는 uniform tilt의 독립 해석식
|
||||
`U=0.5*(5/6)*[E/(2*(1+nu))]*t*area*theta^2`에서도 얻어진다.
|
||||
Stable Jet energy도 일치하지만 기존 scalar recovery
|
||||
energy는0이어서 force/tangent만 수정할 수 없다. Recovery에도 같은 covariant
|
||||
increment와 Green–Lagrange 식을 적용하는 동등 산술 수정·검증이 진행 중이다.
|
||||
이 bounded replay를 actual C09 또는 production reference의 통과로 확대하지 않는다.
|
||||
|
||||
Direct director increment와 recovery 변경본의 configured Debug focused 실행은
|
||||
native8,16 PASS·1 FAIL,326.12초로 종료했다
|
||||
(`adr016-direct-director-debug.native.json`). 비선형 요소의 residual·tangent·
|
||||
objectivity·patch 검사16개는 통과했다. Actual C09는 초기 gate를 통과했지만
|
||||
increment1·outer100에서 실패했다. 마지막 진단의 `max_NtE=1.69482e-32`,
|
||||
`max_NtInertia=0`이며 작은 물리 moment 잔차가 남아 있다. 이 절댓값만으로
|
||||
원래 uncancelled scale에 대한 N2 통과를 주장하지 않는다. 마지막 후보의
|
||||
q/v/a와 관성 contraction을 조사 중이며 tolerance나 scale floor를 추가하지 않는다.
|
||||
|
||||
앞선 canonical-gradient 변경본에서 strong external-gradient N5, missing-gradient
|
||||
negative, regularity 경계 검사는 native0,3/3 PASS,140.49초였다
|
||||
(`adr016-strong-external-boundary-debug.native.json`). 실제 N5는139.35초에 통과했다.
|
||||
이 evidence는 direct director increment 후의 N5 재검증을 대신하지 않는다.
|
||||
|
||||
현재 direct-increment epoch의 actual outer20 후보를 동결하여 q/v/a·private
|
||||
predictor/trace와48개 full row를 별도 저장했다. 당시 phi ratio는
|
||||
`0.9998109402`이며 아직 수렴하지 않았다. 저장된 질량계수와 같은 가속도를
|
||||
Fraction으로 수축한 별도 replay에서 full39의 `M*a+c`는
|
||||
`2.070274834838396e-19`이고 병진 coupling은 exact0이지만 native 관성힘은0이었다.
|
||||
Full34와 full27에서도 각각 `1.883916436593294e-19`,
|
||||
`-1.585777596546307e-19`가0으로 소실됐다. 자료는
|
||||
`.dryforge/hht-direct-delta-c09-20261013/outer20-endpoints.json` 및
|
||||
`inertia-exact-replay.json`에 보존했다.
|
||||
|
||||
Mass-point에서 큰 병진 가속도와 작은 회전 가속도를 먼저 더하는 산술은
|
||||
작은 회전 기여를 잃을 수 있다. 동등한 `I=M*a+c`의 안정적인 계산과 독립
|
||||
관성·접선·power 검증을 진행한다. N2 분모는 이미 원래
|
||||
`sum_element,j |M_eij*a_ej|` 계약을 사용하므로 이를 변경하지 않는다.
|
||||
이 bounded 불일치는 수정 근거이며 outer100 실패 전체의 원인 확정이나 통과
|
||||
evidence가 아니다.
|
||||
|
||||
관성힘은 적분이 끝난 같은 원 질량행렬과 독립 convective force로
|
||||
`I=M*a+c`를 deterministic compensated reduction하여 계산하도록 수정했다.
|
||||
Mass·관성 접선·kinetic energy·P/L 및 rates의 수식과 원 N2 scale는 유지했다.
|
||||
독립 검토에서 actual24개 회전 row의 소실을 재확인했고, 별도의 zero-state
|
||||
해석식 `j*(|d|² I-d*d^T)*a_phi`도 stable contraction과 일치했다.
|
||||
새 tiny-angular/large-translation 해석식 검사는 수정 전 native1/136ms로
|
||||
실패했고 수정 후 기존 관성 검사까지 private12/12 PASS/11.824초였다.
|
||||
Configured Debug 전체 target build는 native0이며 actual N5·C09 및 관성
|
||||
focused 실행은 진행 중이다(`adr016-stable-inertia-debug-source-identity.json`).
|
||||
Mixed point acceleration을 사용하는 Dq tangent·Pdot/Ldot의 다른 산술 경계까지
|
||||
해결됐다는 의미는 아니며 전체 trajectory·temporal·reference 판정은 남아 있다.
|
||||
|
||||
위 configured Debug focused 실행은216.39초·native8,13 PASS·1 FAIL로 종료했다.
|
||||
Actual N5는137.22초에 통과했고 관성12개도 통과했다. C09는62.83초에 초기
|
||||
재구성 gate에서 실패했다. Original phi ratio는`2.4318705488789172e-16`이지만
|
||||
reconstructed ratio는`0.4509010842022384`였다. Numerator는
|
||||
`7.6381179402664958e-21`, 원 scale는`1.693967525888814e-20`이다.
|
||||
Stable inertia가 보존한 작은 힘 때문에 이전 point 수축에서 드러나지 않았던
|
||||
초기 dependent acceleration 차이가 확인됐다. 원 초기 state를 projection하거나
|
||||
잔차 분모를 바꾸지 않고 initializer와 재구성 contraction을 대조한다.
|
||||
원인 조사와 후속 수정은 이 실행의 FAIL 판정을 대체하지 않는다.
|
||||
|
||||
독립8-row Fraction 감사에서 rows0–3의 selected-P gradient contraction은
|
||||
곱의 합과 product rounding 모두 exact0인데 plain reduction만
|
||||
`1.734723475976807e-18`을 만들었다. 초기화와 같은 compensated reduction은0이다.
|
||||
Rows4–7은 compensated partition RHS가 기존 `G*z`와 일치했다. Graph 경로만
|
||||
exact-product 수축으로 교체하면 초기화와 coefficient/product authority가 다시
|
||||
달라질 수 있으므로 같은 compensated partition 산술을 우선 적용한다.
|
||||
이 감사는 원 초기 state의 변경이나 whole C09 통과를 의미하지 않는다.
|
||||
|
||||
Rate partition은 같은 coefficient/product authority의 compensated 합산으로
|
||||
수정했고 C08 CA replay도 해당 연산 순서를 추적한다. 독립13-case/183-prefix
|
||||
검산에서 exact 누적 오차가 추적 radius 안에 있음을 확인했다. Selected partition
|
||||
회귀는 `(+1e16,+1,-1e16)`에서 plain 합0과 compensated rates1을 구별한다.
|
||||
첫 Release build는 편집 중인 새 fixture의 Vector 생성 문법으로 native1이었고,
|
||||
수정 후 새 prefix의 build는 native0이다. 두 실행 기록은 별도로 보존했다.
|
||||
이 source의 Debug actual C09와 Release C08a7-grid 실행 판정은 아직 대기 중이다.
|
||||
|
||||
별도 independent zero-state 해석식은 큰 병진과 작은 회전 성분에서 Dq inertia,
|
||||
L 및 Ldot의 추가 소실을 확인했다. `DqM`와 momentum coefficient를 적분 후
|
||||
수축하는 동등 산술을 production에 적용했다. Original full position arm·
|
||||
rho*N_i*dV0·독립 convective 항·mass·kinetic energy·rate scale와 predicates를
|
||||
보존했다. Flat/proper-Q에서 epsilon=`1e-7..1e-20`의 whole Dq action 및 L/Ldot
|
||||
28개 analytic 사례가 원 계산 RED에서 수정안 GREEN으로 바뀌었다. Exact
|
||||
production source의 private 관성13개는 native0,32.132초에 통과했고 독립 정적
|
||||
검토도 적합이다. 이 epoch의 공용 N5/C09·C08·reference 검증은 남아 있다.
|
||||
Point-arm 양자화와 큰 orbital/작은 intrinsic 항의 최종 저장 반올림,
|
||||
일반 tiny convective 사례는 별도 coverage 한계로 유지한다.
|
||||
|
||||
## 2026-10-13 현재 검증과 C09 정책 제안
|
||||
|
||||
Coefficient-first inertia와 compensated partition을 적용한 configured Debug
|
||||
focused 실행은 native8·779.32초, 15 PASS·C09 1 FAIL이다. 관성13개,
|
||||
actual N5와 selected-partition 회귀는 통과했다. C09의 초기 재구성은
|
||||
통과하지만 첫 증분 full Newton100 종료 기준은 실패했다.
|
||||
|
||||
C08a manufactured helper는 assembly에 이미 포함된 external Hessian을
|
||||
중복 누적하던 value/scale 항을 제거했다. 최신 Release 공식7-grid
|
||||
C08a는 native0·470.47초에 통과했다. Raw와 native identity는
|
||||
`.dryforge/hht-remediation-20261012/adr016-coefficient-inertia-c08a-release*`에
|
||||
보존했다. 잘못된 helper 이름을 포함한 regex는 실제 공식 C08a 한 개만
|
||||
실행했으므로 helper 통과로 계산하지 않는다. 별도 Release helper는
|
||||
통과했고, 후속 configured Debug build native0 및 helper/partition 두
|
||||
회귀도 native0·0.99초에 통과했다(`channel-proposal-helper-debug*`).
|
||||
Release C08a 통과는 configured Debug 전체 또는 기능 완료를 뜻하지 않는다.
|
||||
|
||||
Read-only C09 최종 상태 진단은 병진 q/v/a와 p high/low/Ar를 유지하고
|
||||
회전 및 모든 auxiliary block을 두 번 보정하여 원 full endpoint 기준을
|
||||
만족했다. Commit 전 의도 종료 native1·5.703초이며 production C09 PASS가
|
||||
아니다. [산술 진단](c09-newton-rounding-diagnostic.md),
|
||||
[정책 제안](c09-channel-newton-proposal.md)과
|
||||
[독립 검토 및 N7 명세](numerical-review-channel-newton.md)를 연결한다.
|
||||
부분 행렬 N2-L 검사 영역 변경은 이후 HHT-ADR-017로 승인돼 구현 중이다.
|
||||
자연 C09 trajectory, 변경 후 C08/N7, configured 전체 Debug 및 필수
|
||||
reference 검증이 남아 있다. 기존 실패 기록과 원본 reference를 보존한다.
|
||||
|
||||
ADR-017 첫 configured Debug build는 native0이다. 새 channel-policy 세 검사,
|
||||
external Hessian primitive/실제 manufactured helper 및 omitted-U N7 세 검사,
|
||||
기존100/101 경계와 실패 후 retry 두 검사의 합계8개는 native0·23.79초에
|
||||
통과했다. Prefix는 `adr017-channel-newton-debug-build`와
|
||||
`adr017-channel-newton-policy-debug`다. Controller의 초기 trigger와 frozen-rate
|
||||
copy parity는 독립 검토 후 추가 정정 중이므로 이 epoch를 공식 C08 통과로
|
||||
계산하지 않는다. [구현 기록](implementation-channel-newton.md)의 private
|
||||
proper-Q 자연 두 증분 PASS도 configured C09 전체를 대신하지 않는다.
|
||||
|
||||
Configured Debug actual C09의 여섯 실행은 모두 HasValue로 자연 종료했지만,
|
||||
gtest 전체는 global-frame covariance 비교에서 native8·113.03초로 실패했다
|
||||
(`adr017-natural-c09-debug` 및 raw/source identity). Solver nonconvergence와
|
||||
다른 실패다. Vector/triad/director의 원1e-10 비교 기준을 유지하며 finite-phi
|
||||
및 reduced chart 전환의 영향은 별도 read-only 진단으로 조사한다.
|
||||
Serial/TBB/repeated-history 비교 실패나 endpoint 실패는 해당 raw에서 발견되지
|
||||
않았지만 이 bounded 구분을 C09 전체 PASS로 보고하지 않는다.
|
||||
최종 controller parity 정정 후 Debug/Release build는 각각 native0이며
|
||||
공식 C08a7-grid 및 helper 검사는 새 identity에서 진행 중이다.
|
||||
|
||||
최종 parity 변경본의 Release C08a7-grid와 helper 두 검사는 native0·760.84초에
|
||||
통과했다(`adr017-final-parity-c08a-release`). Raw·native·source identity와
|
||||
별도 aggregate를 보존했다. Finest 전체 시점 최대 normalized error의 최댓값은
|
||||
`7.31194068e-6`, 마지막 두 refinement의 최소 order는`1.80500237`, 최종 세
|
||||
grid의 최소 N7 noise separation은`157.542906`이다. 원 bounds·factor100을
|
||||
만족하지만 Release 범위이며 configured 전체 Debug 완료가 아니다.
|
||||
Configured Debug의 실제 manufactured 초기 이력64-step 검사 및 helper 두
|
||||
검사도 native0·786.88초에 통과했다(`adr017-final-parity-controller-debug`).
|
||||
이는 Debug C08a 전체7-grid 검사나 C08b8-grid 실행을 대신하지 않는다.
|
||||
|
||||
[유한회전 진단](channel-newton-covariance-diagnostic.md)은 순수 병진에서
|
||||
원 covariance 기준을 만족했다. 유한회전의2/4/8-step에서는 angular a 차이가
|
||||
`2.594e-6→6.560e-7→1.691e-7`로 감소했고 같은 q/v/a를 회전해 재조립한
|
||||
force/inertia는 약1e-17에서 일치했다. Independent Fraction 감사는 selected
|
||||
position의 회전 전 결함 약2.34e-19와 회전 후4.82e-7를 분리하여 실제 비선형
|
||||
selector recurrence의 차이를 재현했다. [고정 null 보완공간 제안](fixed-null-basis-proposal.md)은
|
||||
독립 검토된 미승인 후속 변경이며 기존 C09 FAIL을 통과로 바꾸지 않는다.
|
||||
|
||||
추가 configured Debug의 clamped/load reaction, unloaded/free/partial BC,
|
||||
large DIRECT 및 initial backend failure-context 네 검사는 native0·21.24초에
|
||||
통과했다(`adr017-boundary-procedure-debug`). 실제 `RecordNoise` 집계의
|
||||
omitted-U zM을 검사하는 `RestrictedRecordNoiseIncludesFullModelOmittedUDefect`를
|
||||
추가했다. J의 step/defect와 accepted endpoint가 같은 두 입력에서 full omitted-U
|
||||
defect만 변경하여 aggregate noise의 증가를 확인하므로 zM 누락을 검출한다.
|
||||
최종 Debug/Release build native0 및 해당 검사 native0·1.23초/0.62초다
|
||||
(`adr017-n7-final-*`). Production/controller 동작은 이전 공식 C08a와 같고
|
||||
추가 regression fixture만 바뀌었다.
|
||||
|
||||
첫 aggregator build 이후 fixture 단순화가 공용 Debug compile과 겹쳤다.
|
||||
그 실행은 intermediate snapshot으로 보존하고 최종 identity 근거로 사용하지
|
||||
않았다. Final source freeze 후 mtime를 갱신하여 두 tree를 실제 재compile했다.
|
||||
`adr017-n7-final-source-freeze.json`에 SHA와 이유를 기록했다.
|
||||
이 bounded closure에도 C09 전체는 covariance FAIL이며 C08b8-grid·최종
|
||||
chart 변경본의 공식 Debug 시간검사·전체 configured Debug/CTest 및 필수
|
||||
production 원본 비교가 남아 있다.
|
||||
@@ -1,6 +1,6 @@
|
||||
# HHT 반증 가능한 검증 사례
|
||||
|
||||
[Numerical Review](numerical-review.md#numerical-review)의 사례 계약이다. [N1–N7 내부 기준](numerical-controls.md)과 [reference 계약](reference-model.md)을 적용한다. 아래 synthetic 초기값·제조 하중은 kernel/procedure 검증용이며 공개 INP 지원을 확대하지 않는다. 사용자 결정 [HHT-ADR-007](ADR.md)의 **consistent kinetic mass**가 HHT 필수 검증 대상이다. Lumped 언급은 기존 mass/eigen 대조 또는 선택되지 않은 대안 설명이며 새 동적 지원 의무가 아니다. 모든 신규 solver 사례는 **NOT RUN**이다.
|
||||
[HHT-ADR-012](ADR.md)의 `nodal-lumped-kinetic`이 현재 필수 검증 대상이다. M, I, c, DqI, DvI, T, P, L 및 rates를 동일한 rho*N_i*dV0 measure로 계산한다. 기존 [수치 기준](numerical-controls.md), [검증 사례](verification-cases.md), [reference 계약](reference-model.md)과 모든 허용값을 유지한다. 과거 consistent 구현의 결과는 변경본 통과로 승계하지 않으며 현재 재검증은 대기다.
|
||||
|
||||
## 공통 측정과 실행 상태
|
||||
|
||||
@@ -56,17 +56,17 @@ Element state는 `u_i=.01*(i,-i,.5i)`, `phi_i=(.05i,-.03i,.02i)`, `v_ui=(.1,.05i
|
||||
|
||||
## C08. 실제 shell 유한회전·자유운동·에너지
|
||||
|
||||
**C08a manufactured rigid orbit:** C05 기본 1 element와 동일 물성으로, `phi(t)=(.4sin t,.6sin(.7t),.2sin(1.3t))`, 모든 node에 `R=exp(phi×)`, `u_i=(R-I)X_i`, `d_i=R d0_i`를 준다. `T=1,h=1/16..1/256`; q/v/a 초기값은 해당 analytic curve와 독립 exponential derivative로 구한다. `max|phi|>0.5 rad`를 실제 관측하여 small-rotation만 통과한 사례로 대체되지 않도록 한다.
|
||||
**C08a manufactured rigid orbit:** C05 기본 1 element와 동일 물성으로, `phi(t)=(.4sin t,.6sin(.7t),.2sin(1.3t))`, 모든 node에 `R=exp(phi×)`, `u_i=(R-I)X_i`, `d_i=R d0_i`를 준다. `T=1,h=1/16,1/32,1/64,1/128,1/256,1/512,1/1024`; 원 16–256 결과와 실패를 보존하고 [HHT-ADR-015](ADR.md)에 따라 512/1024를 최종 grid로 추가한다. q/v/a 초기값은 해당 analytic curve와 독립 exponential derivative로 구한다. `max|phi|>0.5 rad`를 실제 관측하여 small-rotation만 통과한 사례로 대체되지 않도록 한다.
|
||||
|
||||
제조된 generalized force는 선택된 consistent mass의 **독립 volume oracle**에서 `F_i=∫rho H_i^T xddot dV0`로 생성한다. Objective internal/drill force는 rigid orbit에서 0이어야 한다. Production I를 다시 호출해 F를 만드는 자기검증을 금지한다. Time-dependent generalized forcing과 nonzero initial rates는 내부 verification fixture이며 공개 CLOAD/초기조건 지원을 뜻하지 않는다. 전체 redundant 6 DOF/node를 풀고 N7 q/v/a 시간수렴, moment/power, analytic drill null 및 hidden defect 감소를 확인한다.
|
||||
제조된 generalized force는 선택된 nodal lumped mass의 **독립 volume oracle**에서 `F_i=∫rho N_i H_i^T xddot_i dV0`로 생성한다. Objective internal/drill force는 rigid orbit에서 0이어야 한다. Production I를 다시 호출해 F를 만드는 자기검증을 금지한다. Time-dependent generalized forcing과 nonzero initial rates는 내부 verification fixture이며 공개 CLOAD/초기조건 지원을 뜻하지 않는다. 실제 full q/v/physical-a 전체 이력에서 finest normalized error `<=1e-4`, 마지막 두 refinement 차수 `>=1.8`, 최종 세 grid의 N7 factor100 separation을 요구한다. Moment/power와 analytic drill null을 검증한다. C08a hidden1/2는 strict 감소 대신 모든 frame의 `|ψk_i|/Sk_i <=1e-10`을 요구한다(HHT-ADR-015). 원 uncancelled scale을 유지하고 scale0이면 raw defect exact0이어야 하며 floor·clamp·projection을 쓰지 않는다. Raw defect·scale·normalized 최대값을 기록한다.
|
||||
|
||||
**C08b free deformable plate:** `[−1,1]²`의 2×2 정사각 mesh(9 nodes/4 elements), C05 물성, 모든 DOF free, F=0, q0=0. 초기 midsurface velocity는 `V+Omega×X+(0,0,.02 X_x X_y)`, `V=(.125,-.25,.0625)`, `Omega=(.8,.6,.4)`다. 초기 physical director rate는 `Omega×d0`; 남은 null velocity는 `ψ_x w=0`으로 결정한다. a0는 physical equation과 초기 2차 ψ 조건으로 구한다. Arbitrary null velocity/acceleration=0을 넣지 않는다.
|
||||
|
||||
`T=.25`, `h=1/64,1/128,1/256,1/512,1/1024`로 비교한다. 모든 grid에서 principal/swing/geometry branch를 만족해야 한다. 최종 최대 회전이 0.2 rad 이상인지 기록한다; 미달이면 이 fixture의 finite-rotation coverage가 부족한 것이며 값을 바꾸어 통과를 만드는 대신 별도 보강 설계를 검토한다.
|
||||
`T=.25`, `h=1/64,1/128,1/256,1/512,1/1024`의 기존 결과를 보존한다. 2026-10-12 [HHT-ADR-014](ADR.md)의 사용자 승인으로 `h=1/32768,1/65536,1/131072`를 최종 시간수렴 판정에 추가한다. 모든 grid에서 principal/swing/geometry branch를 만족해야 한다. 최종 최대 회전이 0.2 rad 이상인지 기록한다; 미달이면 이 fixture의 finite-rotation coverage가 부족한 것이며 값을 바꾸어 통과를 만드는 대신 별도 보강 설계를 검토한다.
|
||||
|
||||
공통 coarse time points에서 `d_h=max||q_h-q_h2||`와 v/a 차이를 각각 측정한다. Translation scale ell, rotation 1 rad, v/a는 각 scale/T, scale/T²를 사용한다. 마지막 두 self-convergence ratios의 `log2(d_h/d_h2)>=1.8`, finest normalized difference `<=1e-4`, N7 noise separation을 요구한다. 이것은 self-convergence이며 정확해 error bound라고 표시하지 않는다. 각 frame의 N2/N4/N6 평형도 필수다.
|
||||
|
||||
F=0의 positive E0에 대해 `e_E(h)=max|T+U_phys+U_drill-E0|/E0`를 기록한다. 마지막 두 refinement에서 감소, 마지막 ratio `e_E(h/2)/e_E(h)<=.6`, finest `e_E<=1e-3`를 요구한다. Momentum은 P0/L0 및 변화가 존재하는 각 quantity의 자연적인 초기 integrand norm 합으로 정규화해 같은 감소/finest `1e-3`를 확인한다. 초기 합 scale=0인 component는 scalar component floor 대신 vector integral의 sum-of-norm scale를 쓴다. 매 frame energy 단조감소·exact nonlinear momentum 보존은 요구하지 않는다.
|
||||
F=0의 positive E0에 대해 `e_E(h)=max|T+U_phys+U_drill-E0|/E0`를 기록한다. 마지막 두 refinement에서 감소, 마지막 ratio `e_E(h/2)/e_E(h)<=.6`, finest `e_E<=1e-3`를 요구한다. Momentum은 P0/L0 및 변화가 존재하는 각 quantity의 자연적인 초기 integrand norm 합으로 정규화한다. L에는 같은 감소/finest `1e-3`를 요구한다. Flat centered all-free fixture의 P에는 finest absolute `<=1e-3`와 원 balance/HHT update consistency를 요구하고 strict 감소는 요구하지 않는다(HHT-ADR-014). Reduced-coordinate 적분에서는 실제 복구된 full rates와 해당 update로 보존·balance를 독립 확인하며 기존 full-coordinate velocity recurrence를 자동 적용하지 않는다. 초기 합 scale=0인 component는 scalar component floor 대신 vector integral의 sum-of-norm scale를 쓴다. 매 frame energy 단조감소·exact nonlinear momentum 보존은 요구하지 않는다.
|
||||
|
||||
문헌 free-flying plate는 [추가 연구 N7](research.md#numerical-research)의 case-family 근거일 뿐이다. 위 C08은 FESA의 별도 완전 지정 synthetic fixture이며 미열람 문헌 그림의 하중·곡선을 재현한다고 주장하지 않는다.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user