docs(hex8): record carry diagnostics and pending precision design

This commit is contained in:
KOKO\Mimi
2026-10-09 08:37:01 +09:00
parent f32500f1b6
commit d8d06ae8ae
4 changed files with 90 additions and 0 deletions
@@ -16,6 +16,7 @@ static/frequency/HHT 절차를 추가한다. 코드 존재와 기능 검증 완
| [reference model](reference-model.md) | read-only 원본 inventory·quantity/key/point/time mapping | | [reference model](reference-model.md) | read-only 원본 inventory·quantity/key/point/time mapping |
| [numerical review](numerical-review.md) | 작성자와 독립된 정식화/controls 검토의 결과 | | [numerical review](numerical-review.md) | 작성자와 독립된 정식화/controls 검토의 결과 |
| [lessons](lessons.md) | 정밀도 손실·수렴 실패와 수정의 근거 및 재사용할 주의점 | | [lessons](lessons.md) | 정밀도 손실·수렴 실패와 수정의 근거 및 재사용할 주의점 |
| [precision proposal](precision-proposal.md) | 미채택 내부 정밀도 변경안·결과 의미·승인 전 검증 범위 |
메인이 문서·공유 연결·완료 판단을 소유한다. Kernel owner는 Hex8 local 계산/복구 payload와 메인이 문서·공유 연결·완료 판단을 소유한다. Kernel owner는 Hex8 local 계산/복구 payload와
직접 consumer를, semantic owner는 Domain/parser/3성분 DOF/load/assembly를 소유한다. 직접 consumer를, semantic owner는 Domain/parser/3성분 DOF/load/assembly를 소유한다.
+18
View File
@@ -214,6 +214,24 @@ SHA를 별도 검산한 Python exit는0이다. 두 native 관측 검사의 exit0
다음 fresh solve·accepted history는 실행하지 않았다. 예측 개선을 실제 개선으로 다음 fresh solve·accepted history는 실행하지 않았다. 예측 개선을 실제 개선으로
대체하거나 이16개 실패로 모든 표현 가능한 해의 부재를 주장하지 않는다. 대체하거나 이16개 실패로 모든 표현 가능한 해의 부재를 주장하지 않는다.
Increment-local 보상 가산은 물리 상태를 단일 Float64 변위로 유지하면서 덧셈의 소실량만
다음 Newton 갱신에 누적하는 별도 관찰이었다. 같은 최선 cursor에서 plain/carry 각각
12회씩, 선형·비선형 총48회 fresh solve를 수행했다. 두 경로 모두 원래1275개 free
방정식 전체를 풀고 실제 current Kt를 재조립했으며 old residual과 모든 기존 gates를 유지했다.
Production의 principal refinement·history·ULP 탐색은 이 비교에 포함하지 않았다.
첫 Kt/Keff/RHS·fresh 방향·전체 물리 배열은 두 경로에서 정확히 같았다. 이후 carry는
실제로 다른 변위 경로를 만들었지만 모든48개 physical 판정은 FAIL이었다. 최종 비율은
선형 plain/carry `3.14971e-8`/`3.14508e-8`, 비선형 `4.43049e-8`/`1.54565e-7`로,
둘 다 시작 cursor보다 컸다. 다른 gates는 모두 통과했다. Native exit0의 두 관측 검사는
수렴 성공이 아니며, 독립 Python 검산 exit0은 원시201개 SHA·carry 산술·연산/경로·r/Si와
게이트를 검증한 것이다. TEMP source는 실행 전 복원하고 실제 object를 재컴파일했다.
이 결과는 production carry 도입이나 반복 횟수 확대를 뒷받침하지 않는다.
Low를 물리 변위로 사용하는 [내부 정밀도 변경안](precision-proposal.md)은 미채택이다.
단순 carry와 구분하여 전체 계산 상태 및 Float64 출력의 반올림 의미를 결정해야 한다.
현재 물리 기준이나 원본을 조용히 변경하지 않는다.
원시 capture·정확 산술·backsolve·이웃 예측·native replay의 재현 자료와 독립 raw 검산은 원시 capture·정확 산술·backsolve·이웃 예측·native replay의 재현 자료와 독립 raw 검산은
로컬 `.harness/hex8-evidence/t6-independent-frozen/`에 보존한다. 기능 checklist는 로컬 `.harness/hex8-evidence/t6-independent-frozen/`에 보존한다. 기능 checklist는
그대로 미완료다. 그대로 미완료다.
@@ -0,0 +1,56 @@
# Hex8 동해석 내부 정밀도 변경 제안 — 미채택
이 문서는 사용자 검토용 제안이다. 현재 [PRD](PRD.md)·[정식화](formulation.md)·
[numeric controls](numeric-controls.md)의 승인 계약을 변경하거나 구현 완료를 뜻하지 않는다.
실패 근거와 검증 범위는 [lessons](lessons.md)에 기록한다.
## 변경이 필요한 이유
현재 production은 단일 Float64 물리 상태를 사용한다. 두 동적 원본은 세 번째 증분의
100회 제한에서 componentwise physical residual 기준을 만족하지 못했다. Fresh Newton
보정이 저장된 변위를 바꾸지 못하는 경우를 실제 실행과 독립 검산으로 확인했다.
제한된 단일·두 좌표 탐색의 실패는 표현 가능한 해의 부재를 증명하지 않는다.
갱신 중 사라진 덧셈을 다음 반복에 누적하는 carry와, 실제 변위를 high+low로 표현하는
물리 상태는 다르다. Carry 실험의 kernel·rates·형상은 rounded high만 사용한다.
아래 제안은 low도 물리 계산에 사용하는 별도 정밀도 계약이며, 원본 수렴을 보장하지 않는다.
## 제안하는 계산과 결과의 의미
- 내부 변위·속도·physical a·auxiliary A와 predictor를 두 Float64 값의 합으로 표현한다.
Low를 유지한 candidate와 accepted endpoint를 복사하고 다음 증분에도 전달한다.
연산별 반올림 오차·비유한 값·정규화 조건을 정의하고 독립 검증한다.
재방문 판별의 동일 상태 비교에는 low를 포함한다.
- Hex8의 상대 변위·H/E/S/P·내력·에너지·응력과 tangent는 같은 전체 상태를 사용한다.
형상 인증도 전체 상태를 포함하는 보수적 경계를 사용한다. Kernel 직전이나 H를 만든
직후 low를 버리는 구현은 이 제안을 충족하지 않는다.
- 기준 consistent M과 material/geometry 입력은 기존 정의를 유지한다. 관성력·weighted
residual·old residual·reaction·수지·수정량·update 판정도 같은 전체 상태로 계산한다.
Sparse factorization은 기존 Float64 backend를 사용하되, 보정량을 전체 상태에 누적한다.
Rounded tangent와 전체 상태 residual 사이의 일관성을 별도로 검증한다.
- HHT 계수·고정 h·exact schedule·100회 제한, 모든 원래 free 성분의 Si·exact-zero branch,
residual/correction `1e-10` 및 update/weighted identity `1e-12`를 유지한다.
Low를 사후 residual 보정이나 평형 projection으로 만들지 않는다.
- HDF5의 field·shape·Float64 dtype은 유지한다. 각 값은 내부 물리량을 Float64로 반올림한
observable이다. 내부 전체 상태의 gate PASS를 HDF5 배열만으로 같은 식을 재계산한
gate PASS로 표현하지 않는다. Self-check는 내부 값의 올바른 직렬화와 기존 schema·identity를
검증하고, 로그에 사용한 내부 산술을 명시한다. Restart는 계속 지원하지 않는다.
Float64 직렬화의 overflow·비유한 값은 실패로 처리하며 기존 최종 파일을 보존한다.
현재 accepted state와 published Float64 state를 동일 계산 입력으로 취급하는 의미가
달라지므로, 위 결과 의미와 내부 정밀도 변경을 함께 승인해야 한다.
## 구현 전에 고정할 검증
1. 독립 정확 산술 oracle과 binary-power 사례로 덧셈·곱셈·나눗셈·low 보존 및 유한 범위를
검증한다. 단일 Float64로 collapse하는 대조 구현이 실패하는 의미 있는 사례를 포함한다.
2. 작은 coupled Hex8 사례에서 low가 실제 변형률·힘·관성력에 전달되는지 확인한다.
에너지 미분·tangent·객관성·형상 인증·비영 old residual의 HHT identity와 네 수정량
channel을 검증한다. 승인한 low를 제외한 다른 상태에서 gate를 계산하지 않는다.
3. Accepted/trial 복사와 실패 rollback, geometry/backend 실패, 원래 범위의 시간수렴·
에너지·운동량·반력을 검증한다. 정적·고유치의 기존 계산을 불필요하게 변경하지 않는다.
4. 제한된 실제 동적 실행에서 개선 근거를 얻고 독립 검토한 후, 원본 두 건의101개 endpoint와
공식 HDF5/외부 비교·전체 회귀를 수행한다. 외부 row5%/RMS1% 기준과 원본은 유지한다.
작은 사례에서 개선을 입증하지 못하면 추가 정밀도 확대를 자동으로 반복하지 않는다.
다음 접근과 계약 영향을 사용자에게 다시 제시한다.
+15
View File
@@ -1,5 +1,20 @@
# 미해결 문제 # 미해결 문제
## Hex8 동해석의 엄격 잔차와 내부 상태 정밀도
- 조건·현상: Hex8 동적 구현 `f661864`에서 `reference/hexa/hexa_dynlinear.inp`와
`hexa_dynnonlinear.inp`를 실행하면 세 번째 증분100회 제한에서 실패한다. 최신 원본
physical residual 비율은 `1.77739e-8`·`8.73572e-9`, 기준은 `1e-10`이다.
- 영향: 원본101개 endpoint의 필수 검증과 동해석 완료 조건을 충족하지 못했다.
현재 전체 요구와 checklist는 [기능 PRD](../hex8-structural-analysis/PRD.md)에 있다.
- 현재 해결하지 못한 이유: 실제 fresh 변위 보정의 반올림 소실을 확인했지만 제한된
단일·두 좌표 탐색과 보상 가산에서도 passing candidate를 얻지 못했다. 실패한 탐색은
Float64 해의 부재를 증명하지 않으며, 수렴 기준·원본을 변경할 근거로 쓰지 않는다.
- 후속 방향: [실패 근거](../hex8-structural-analysis/lessons.md)를 보존하고, 전체 물리
상태의 high+low 계산과 Float64 출력의 반올림 의미를 정하는
[미채택 변경안](../hex8-structural-analysis/precision-proposal.md)을 사용자와 결정한다.
변경을 승인하기 전에는 기존 precision·acceptance 계약을 유지한다.
## HHT shell의 시간수렴 ## HHT shell의 시간수렴
- 조건·현상: 실제 shell의 두 시간수렴 사례에서 요구한 수렴 성능을 만족하지 못한 - 조건·현상: 실제 shell의 두 시간수렴 사례에서 요구한 수렴 성능을 만족하지 못한