feat(hex8): preserve full high-low state in dynamic element responses
This commit is contained in:
@@ -57,3 +57,15 @@ warning/no-op으로 수용한다. Mixed1–6 range의1–3은 적용하고4–6
|
||||
**영향:** 실제 DOF·constraint·state/output은3성분이다. 비영 회전 BC·모든 회전 CLOAD,
|
||||
DOF범위 밖이나 의미 있는 미지원 BC 옵션은 계속 거부한다. 원본을 수정·preprocess하지 않는다.
|
||||
Parser에서 경고·translational 적용·회전 equation 부재·거부 경계를 행동 테스트로 확인한다.
|
||||
|
||||
## HEX8-ADR-008 — High+low 내부 물리 상태와 Float64 observable
|
||||
|
||||
**승인:** 2026-10-09 사용자는 제한된 단일·두 좌표 및 보상 가산 관찰 실패 이후
|
||||
A([내부 정밀도 변경안](precision-proposal.md))를 선택했다.
|
||||
**선택:** Solid HHT 내부 상태·predictor·힘·rates·수지·gate에 normalized high+low를
|
||||
일관되게 사용하고 accepted history/rollback도 전체 상태를 보존한다. 기존 Float64
|
||||
backend와 HDF5 field/shape/dtype은 유지하되 공식 값은 전체 물리량의 반올림 observable이다.
|
||||
**영향:** 기존 Si/exact-zero·strict gate·HHT 계수·기준 M·고정 h/schedule·100회와 외부
|
||||
tolerance는 유지한다. Kernel/geometry에 low를 전달하지 않는 update carry와 구분한다.
|
||||
작은 독립 산술/Hex8·시간수렴·상태 보존 검증과 긍정적 실제 실행 이후 필수 원본101개
|
||||
endpoint·HDF5/외부 비교·전체 회귀를 진행한다. 승인과 수렴 완료를 혼동하지 않는다.
|
||||
|
||||
@@ -16,7 +16,8 @@ static/frequency/HHT 절차를 추가한다. 코드 존재와 기능 검증 완
|
||||
| [reference model](reference-model.md) | read-only 원본 inventory·quantity/key/point/time mapping |
|
||||
| [numerical review](numerical-review.md) | 작성자와 독립된 정식화/controls 검토의 결과 |
|
||||
| [lessons](lessons.md) | 정밀도 손실·수렴 실패와 수정의 근거 및 재사용할 주의점 |
|
||||
| [precision proposal](precision-proposal.md) | 미채택 내부 정밀도 변경안·결과 의미·승인 전 검증 범위 |
|
||||
| [precision proposal](precision-proposal.md) | 승인된 내부 정밀도 변경안·결과 의미·구현 전 검증 범위 |
|
||||
| [precision formulation](precision-formulation.md) | HHT 전체 high+low 상태·동일 gradient 미분·산술 범위·반올림 출력 계약 |
|
||||
|
||||
메인이 문서·공유 연결·완료 판단을 소유한다. Kernel owner는 Hex8 local 계산/복구 payload와
|
||||
직접 consumer를, semantic owner는 Domain/parser/3성분 DOF/load/assembly를 소유한다.
|
||||
|
||||
@@ -424,6 +424,11 @@ Generalized sparse FEAST의 공개 진입점은
|
||||
|
||||
## 현재 checklist
|
||||
|
||||
2026-10-09 사용자 A 승인은 [내부 정밀도 변경안](precision-proposal.md)의 전체 high+low
|
||||
물리 상태와 Float64 반올림 observable을 FEM-REQ-HEX8-015·017–020에 적용한다.
|
||||
HHT 식·기준 consistent M·입력·고정 schedule·100회·Si/exact-zero·원래 strict gate 및
|
||||
외부 tolerance는 유지한다. 아래 구현·검증 checklist는 이 승인만으로 완료되지 않는다.
|
||||
|
||||
- [x] 수식·입출력·numeric controls·원본 mapping 정리 및 독립 numerical review 완료
|
||||
- [x] Hex8 K0/consistent M/비선형 f/Kmat/Kgeo/Kt·형상·복구 kernel 검증
|
||||
- [x] Solid Domain/parser/3N DOF/ordered assembly/amplitude 검증
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
물리 선택은 [ADR](ADR.md)에 있다. 이 문서는 승인된 식의 구현용 유도이며
|
||||
외부 결과에 맞추어 physics를 바꾸는 권한이 아니다. 수치 controls는
|
||||
[별도 원본](numeric-controls.md), 출력 tensor/identity는 [I/O](io.md)를 따른다.
|
||||
2026-10-09 승인된 Solid HHT 내부 정밀도 변경의 구현 계약은
|
||||
[precision formulation](precision-formulation.md)이다. 동적 paired 경로의 상대변위 gradient,
|
||||
전체 상태·계수 연산과 반올림 출력 의미는 해당 문서를 함께 적용한다.
|
||||
|
||||
## Shape·기준 geometry·적분
|
||||
|
||||
|
||||
@@ -7,6 +7,13 @@ FEM-REQ-HEX8-008–011,016–020,022–023다. Public CLI·path/lease/exit는
|
||||
|
||||
## Source 입력과 실패 경계
|
||||
|
||||
Solid HHT의 [승인된 high+low 계산](precision-proposal.md)은 내부 전체 물리 상태를
|
||||
accepted history와 다음 trial에 유지한다. 공식 HDF5의 기존 field·shape·Float64 dtype은
|
||||
변경하지 않으며 값은 전체 물리량의 round-to-Float64 observable이다. Self-check는
|
||||
직렬화가 그 반올림과 일치하는지 확인한다. 내부 gate PASS를 rounded 배열 자체의
|
||||
동일 gate PASS로 해석하지 않는다. 로그에 내부 산술을 명시하고 직렬화 비유한 값·
|
||||
overflow는 실패로 처리해 기존 final을 보존한다. Restart는 지원하지 않는다.
|
||||
|
||||
기존 single Part/identity Instance/set/target subset을 재사용하고 source spelling/location/
|
||||
instance/label과 internal index를 구분한다. C3D8의8 distinct nodes와 SOLID SECTION의 elset/
|
||||
material 연결, constant E/nu 및 procedure별 density capability를 검증한다. Blank section row는
|
||||
|
||||
@@ -228,10 +228,29 @@ Production의 principal refinement·history·ULP 탐색은 이 비교에 포함
|
||||
게이트를 검증한 것이다. TEMP source는 실행 전 복원하고 실제 object를 재컴파일했다.
|
||||
이 결과는 production carry 도입이나 반복 횟수 확대를 뒷받침하지 않는다.
|
||||
|
||||
Low를 물리 변위로 사용하는 [내부 정밀도 변경안](precision-proposal.md)은 미채택이다.
|
||||
단순 carry와 구분하여 전체 계산 상태 및 Float64 출력의 반올림 의미를 결정해야 한다.
|
||||
현재 물리 기준이나 원본을 조용히 변경하지 않는다.
|
||||
이 진단 종료 시점에는 low를 물리 변위로 사용하는 변경안을 채택하지 않았다.
|
||||
이후 사용자가 2026-10-09 선택 A로 [내부 정밀도 변경안](precision-proposal.md)을 승인했다.
|
||||
단순 carry와 구분해 전체 계산 상태를 high+low로 유지하고 Float64는 반올림 observable로
|
||||
출력한다. 기존 실패 evidence는 새 방식의 통과 증거가 아니며 물리 기준·원본은 유지한다.
|
||||
|
||||
원시 capture·정확 산술·backsolve·이웃 예측·native replay의 재현 자료와 독립 raw 검산은
|
||||
로컬 `.harness/hex8-evidence/t6-independent-frozen/`에 보존한다. 기능 checklist는
|
||||
그대로 미완료다.
|
||||
|
||||
## 승인된 전체 high+low 요소의 첫 검증
|
||||
|
||||
2026-10-09 승인 A 후, low를 누락하는 대조 kernel에서 실제 요소 assertion3개가 실패했다.
|
||||
전체 pair로 H/Green strain/응력/힘/에너지/접선을 계산한 kernel은 native build0/CTest0이다.
|
||||
원래 요소27개와 새 검사15개의 최종 묶음42/42가 통과했고, quarter-turn 작은 전단의 힘
|
||||
covariance와 독립 exact-dyadic primitive oracle을 포함한다. Native 산술6/6은 RN/FTZ/DAZ
|
||||
실행 전제와 normal high에 최소 subnormal FMA error가 붙는 경계까지 확인했다.
|
||||
|
||||
동적 선형과 비선형은 같은 상대변위 gradient의 미분을 사용한다. 기존 rounded K0를 새 힘에
|
||||
혼합하지 않는다. 기준 절점0의 signed 방향 차분은 접선·에너지 gradient와 일치했고,
|
||||
두 brick의 공유 면 힘, linear/NL zero-state Hessian 및 low만 남은 현재 셀의 ±폭을 검사했다.
|
||||
중앙 에너지 차분의 StVK cubic 오차는 step²로 감소한다. 이를 exact 미분값으로 간주해
|
||||
과도한 test bound를 적용했던 실패를 구분하고 분석적 truncation bound를 적용했다.
|
||||
|
||||
독립 numerical reviewer는 실제 shared arithmetic·kernel·geometry의 한정된 범위를 PASS로
|
||||
판정했다. 재현 로그는 `.harness/hex8-evidence/precision/`에 보존한다. 이 결과는 동적 전체
|
||||
상태·시간수렴·원본 endpoint·공식 출력의 완료를 뜻하지 않는다. 현재 checklist는 미완료다.
|
||||
|
||||
@@ -7,7 +7,11 @@
|
||||
## 계산·형상 인증
|
||||
|
||||
모든 input/파생 값/결과를 finite 검증하고 positive Jacobian·밀도·material capability를 확인한다.
|
||||
Production 계산 precision은 Float64다. Whole-cell 인증은 outward interval coefficient bounds와
|
||||
정적·고유치와 기존 계산은 Float64다. 사용자 승인 [정밀도 변경안](precision-proposal.md)에 따라
|
||||
Solid HHT의 내부 물리 상태와 힘·rates·수지·gate 계산은 normalized high+low를 사용한다.
|
||||
Float64 sparse backend와 반올림 출력은 유지하며, 전체 상태 gate를 rounded 출력만으로
|
||||
재계산한 gate PASS로 표현하지 않는다. 구현 검증은 아직 진행 중이다.
|
||||
Whole-cell 인증은 outward interval coefficient bounds와
|
||||
subdivision이며 estimate-only positive 검사와 abs(det J)를 허용하지 않는다.
|
||||
Depth default10, 처리한 cell budget default65536이며 uncertain 시 fail-closed다. 이 값은
|
||||
resource/precision tuning이고 accepted geometry의 positive 조건을 완화하는 tolerance가 아니다.
|
||||
@@ -40,11 +44,14 @@ h²·da/L, h²·dA/L를 모두 확인한다. Residual/correction limit1e-10, upd
|
||||
max iteration100이 default다. Update scale은 동일 단위의 uncancelled formula term 합이며 scale0은
|
||||
exact-zero다. 빈 free vector는 vacuous convergence이며 required prescribed/recovery validation은 유지한다.
|
||||
|
||||
### 표현 가능한 변위에서의 내부 정제
|
||||
### 이전 Float64 구현의 내부 정제 기록
|
||||
|
||||
검토된 별도 동적 구현 `f661864`는 위 판정을 유지하며 다음 정제를 사용한다.
|
||||
관련76개 검사와 독립 코드 검토는 통과했지만 두 동적 원본은 세 번째 증분에서 실패했다.
|
||||
이전 구현 `b394ae7`의 원본 실패와 변경 근거는 [lessons](lessons.md)에 기록한다.
|
||||
아래는 이전 경로의 검토 기록이며 새 paired 경로의 실행 지침이 아니다.
|
||||
새 경로는 [precision formulation](precision-formulation.md)의 전체 상태 Newton을 적용하고,
|
||||
모든 원래 free 성분을 푼다. 이전 holding/history/ULP 탐색을 자동으로 이식하지 않는다.
|
||||
|
||||
물리 잔차가 통과한 좌표에서 sub-ULP 갱신 소실이 발생하면, 물리 잔차와 각 좌표의
|
||||
fresh correction4개가 모두 통과한 좌표를 hold한다. 다음 반복부터 원래 effective tangent의
|
||||
|
||||
@@ -6,6 +6,17 @@
|
||||
필수 원본/입력 계약 충돌은2026-10-09 사용자 선택 A로 해소했다. 구현 전 문서 blocker0이며
|
||||
실제 solver 수치 PASS가 아니다.
|
||||
|
||||
## 2026-10-09 — 승인된 high+low의 한정된 검토
|
||||
|
||||
`hex8_t5_numerical_spec` reviewer가 [precision formulation](precision-formulation.md)과
|
||||
실제 shared arithmetic·paired kernel·geometry를 독립 검토했다. Canonical zero와 scalar
|
||||
−0 lifting의 두 결함은 수정했고 native fixture로 검증했다. 동일 상대변위 gradient의 chain
|
||||
rule, isotropic material Hessian·geometric 항·Cauchy 복구와 full X+high+low interval은
|
||||
일관된다. 산술의 실제 graph bound와 exact-dyadic 기대값을 별도로 검토했으며 native6/6
|
||||
산술 검사 로그를 확인했다. 해당 범위 bounded PASS이며 새 actionable finding은 없다.
|
||||
일반 correctly-rounded106-bit 보장이나 T6 전체 state/시간수렴/원본 PASS가 아니다.
|
||||
T6 consumer·backend·worker 경계와 rollback은 해당 구현이 고정된 후 별도 검토한다.
|
||||
|
||||
## HEX8-NR-001 — 영 회전 경계와 필수 원본 충돌
|
||||
|
||||
검토 당시 PRD008/I/O는 BC/CLOAD DOF4–6을 값0이어도 거부했다. 그러나 모든 필수 INP에
|
||||
|
||||
@@ -0,0 +1,280 @@
|
||||
# Hex8 동해석 high+low 정식화
|
||||
|
||||
적용: 사용자가 2026-10-09 선택 A로 승인한 [정밀도 제안](precision-proposal.md).
|
||||
기본 물리식·DOF·부호·적분점 순서는 [formulation](formulation.md), 판정 원본은
|
||||
[numeric-controls](numeric-controls.md), 영속 출력은 [I/O](io.md)다. 본 문서는
|
||||
승인된 정밀도 변경의 구현 계약이며 구현 완료나 독립 수치 승인이 아니다.
|
||||
기존 선형/비선형 정적·고유치의 Float64 경로를 변경하는 계약이 아니다.
|
||||
|
||||
## 산술과 고정 계수
|
||||
|
||||
내부 scalar \(z=(z_h,z_l)\)의 물리값은 실수 합 \(\widehat z=z_h+z_l\)다.
|
||||
두 성분은 finite IEEE binary64이며, RN은 round-to-nearest, ties-to-even이다.
|
||||
정규화는 error-free `TwoSum` 계열의 재분해로 같은 합을 보존하고
|
||||
\(z_h=\operatorname{RN}(\widehat z)\)를 만족시킨다. 영은 유일한 \((+0,+0)\)으로
|
||||
정규화한다. Nonoverlap 조건은 이 RN 식으로 정의하며 binade 경계에서 임의의
|
||||
대칭 ULP 간격을 가정하지 않는다. 입력 binary64 \(c\)는 \((c,0)\)으로 올린다.
|
||||
|
||||
아래 식의 덧셈·곱셈·나눗셈·축약은 별도 표시가 없으면 전체 pair 연산이다.
|
||||
연산의 목표는 전체 피연산자의 실수 연산값이며 실제 결과에는 pair 산술 반올림이 있다.
|
||||
덧셈은 high/low 네 항과 취소 오차, 곱셈은 hh/hl/lh/ll 네 곱과 product error를
|
||||
포함하고 정규화한다. 나눗셈은 nonzero 전체 분모로 계산하며 high quotient만을
|
||||
반환하지 않는다. Quotient refinement의 잔차 \(x-yq\)에도 양쪽 low와 product
|
||||
error가 참여한다. `TwoSum`/FMA product-error 및 고정 순서의 residual refinement는
|
||||
가능한 구현이며 구체적인 storage/backend/vendor 타입은 지정하지 않는다.
|
||||
|
||||
이 표현은 IEEE binary128도, 모든 연산의 correctly-rounded 106-bit 보장도 아니다.
|
||||
EFT 전제가 성립하는 normal 범위에서 연산 graph의 오차는 same-unit uncancelled operand
|
||||
scale에 대해 binary64 단일 연산의 1차 오차를 회수한 2차 수준이어야 한다. 취소 후 작은
|
||||
결과값만을 relative error 분모로 삼지 않는다. 구현별 graph의 roundoff bound를 독립 exact
|
||||
dyadic/rational oracle와 대조한다. 최종 잔차가 작다는 사실로 산술 오차 bound를 대신하지
|
||||
않는다. Subnormal에는 gradual underflow를 적용하고 EFT의 exact-error 보장이 깨지는
|
||||
항은 실제 binary64 반올림 오차로 따로 포함한다. Exponent 범위를 확장하지 않으며 최소
|
||||
양의 quantum은 \(2^{-1074}\)다. Underflow로 이 quantum보다 작은 결과가 반올림되는
|
||||
것과 임의의 low/잔차 clamp를 구별한다. FTZ/DAZ 또는 재결합이 전제를 깨는 실행은 지원
|
||||
산술의 증거가 아니다. 입력·중간·결과의 NaN/Inf, overflow, zero divisor와 정상화 실패는
|
||||
candidate 실패다. 유한한 최종 실수값만으로 overflow한 중간 연산을 통과시키지 않는다.
|
||||
|
||||
Underflow로 소실된 비영 항을 exact-zero 평형이나 양의 형상 인증의 근거로 쓰지 않는다.
|
||||
특히 high product가 정상/비영이라는 검사만으로 hl/lh/ll product와 FMA residual의
|
||||
underflow가 배제되지는 않는다. 구현한 graph가 해당 소실의 오차를 보수적으로 추적해
|
||||
zero/부호/gate를 보증하지 못하는 입력은 지원 산술 범위 실패다. 모든 EFT intermediate를
|
||||
지원한다는 가정 없이 실제 지원 범위와 실패 경계를 독립 검사에 남긴다.
|
||||
|
||||
Exact-zero, 부호, abs, max, 비교와 동일 상태 판별은 정규화한 전체 pair를 사용한다.
|
||||
비영 low를 지닌 값을 high만 읽어 zero로 판정하지 않는다. Pair 합산 순서는 기존 source,
|
||||
element, local component 및 CSR 순서로 결정적으로 고정한다.
|
||||
|
||||
### 실제 primitive graph의 오차와 지원 경계
|
||||
|
||||
구현은 `src/fesa/math/high_low_arithmetic.h`이며 원시 두 성분 입력을 조용히 정상화하지
|
||||
않는다. F64 scalar lifting의 ±0만 canonical(+0,+0)로 만든다. Native 실행에서 RN 및
|
||||
MXCSR의 FTZ/DAZ 비활성을 검사하고, 지원하지 않는 환경을 자동 변경하지 않는다.
|
||||
|
||||
Add의 head/tail/middle/join `TwoSum`이 EFT인 지원 범위에서 최종 exact 합과의 차이는
|
||||
`j=joined.low, m=middle.low, t=tail.low`, `z1=RN(j+m)`, `z2=RN(z1+t)`의 두 반올림뿐이다.
|
||||
따라서 absolute bound는 `Badd=|z1-(j+m)|+|z2-(z1+t)|`다. Normal 합에 대해서는
|
||||
`u(|j+m|+|z1+t|)`, `u=2^-53`으로 상계한다. Subnormal 덧셈은 quantum-grid에서 exact인
|
||||
지원 사례를 별도로 검사한다. 취소된 최종 결과만으로 bound를 나누지 않는다.
|
||||
|
||||
TwoProduct는 각 비영 입력의 실제 least dyadic bit exponent 합이 −1074 이상인 경우만
|
||||
지원한다. FMA residual까지 표현될 수 있는 보수적 범위이며 high product만 검사하지 않는다.
|
||||
지원된 hh/hl/lh/ll 네 product는 exact pair이고 Multiply의 absolute bound는 이어지는
|
||||
세 Add의 `Badd` 합이다. Overflow 또는 지원되지 않는 exact tail은 invalid로 전파한다.
|
||||
|
||||
Divide는 첫 quotient 후 두 번 full residual refinement를 사용한다. 각 step에서 현재 stored
|
||||
pair의 실수값을 n,d,q라 하고 `rtilde=Subtract(n,Multiply(d,q))=(rh,rl)`,
|
||||
`Br=Bmultiply(d,q)+Bsubtract(n,p)`, `c=RN(rh/dh)`로 둔다. `Bq`는 `Add(q,c)`의 bound,
|
||||
`Bc`는 scalar quotient RN bound이면 새 quotient의 absolute error는
|
||||
`Bq+Bc+(|rh*dl|+|rl*dh|)/(|dh|*|d|)+Br/|d|` 이하이다.
|
||||
분모는 exact pair의 양의 절댓값 또는 `|dh|-|dl|`의 보수적 양의 lower bound를 사용한다.
|
||||
Normal quotient의 `Bc=u*|rh/dh|`, 지원 subnormal의 exact rational rounding cell bound를
|
||||
구별한다. 두 번째 step도 새 full residual을 다시 계산한다. Quotient가 비영 residual을0으로
|
||||
소실하거나 중간 연산이 지원 범위를 벗어나면 실패한다. 이 bound는 universal correctly-rounded
|
||||
106-bit 보장이 아니다. 독립 exact rational fixtures와 binary scaling으로 실제 graph를 검증한다.
|
||||
|
||||
최소 계수 정밀도 선택은 다음과 같다. 기존 reference cache의 F64 \(N_a,G_a,w_g\),
|
||||
Lamé 상수와 좌표, 기존 조립 F64 consistent \(M\), 기존 load assembler가 endpoint에서
|
||||
평가한 F64 \(F_n\)를 exact dyadic 입력으로 올린다. 형상/재료/질량 적분을 새로 정의하거나
|
||||
높은 차수 quadrature로 바꾸지 않는다. 단, 아래 상대변위의 미분에 필요한 \(\widehat G_0\)와
|
||||
dynamic paired linear operator는 동일 pair 산술로 구성한다. 기존 rounded K0를 paired
|
||||
힘에 혼합하지 않는다. 일정 F64 \(\alpha,\beta,\gamma,h\)는 기존 생성값을 올리며
|
||||
\(c=1+\alpha\), \(b=\beta h^2\)와 모든 파생 계수는 공통 pair 산술로 계산한다.
|
||||
\(b>0,c>0\) 및 finite를 요구한다. 기존 coefficient 생성·검증과
|
||||
`time=double(n)*h`, `N*h==T` 및 endpoint 하중 평가 의미는 유지한다.
|
||||
|
||||
## 같은 상대변위에서의 energy·force·Hessian
|
||||
|
||||
절점 index \(a=0,\ldots,7\), 성분 \(i=1,2,3\), node-major 24 DOF를 사용한다.
|
||||
\(u,v\)의 단위는 length, length/time이고 \(a,A\)는 length/time²다.
|
||||
기존 8개 reference point 각각에서
|
||||
|
||||
\[
|
||||
d_a=u_a-u_0,\quad H=\sum_{a=1}^7d_a\otimes G_a,
|
||||
\qquad \widehat G_a=G_a\ (a>0),\quad
|
||||
\widehat G_0=-\sum_{a=1}^7G_a.
|
||||
\]
|
||||
|
||||
모든 차·곱·합은 pair다. \(\delta H=\sum_{a=0}^7\delta u_a\otimes\widehat G_a\)가
|
||||
**실제로 평가한 상대변위 식의 미분**이다. Force/tangent에 기존 \(G_0\)를 따로 사용하면
|
||||
이 미분이 아니다. F64 cache를 exact dyadic로 보면 기존 \(\sum_aG_a=0\)은 반올림 때문에
|
||||
exact일 필요가 없다. \(\widehat G_0\) 선택은 기존 상대변위 weak form의 일관된 수치 평가이며
|
||||
잔차 projection이나 사후 힘 보정이 아니다. Pair 자체의 유한 반올림 오차는 남는다.
|
||||
\(\widehat G_0\) 생성은 local node1부터7까지 고정 순서의 paired sum과 negate다.
|
||||
수식의 실수 합과 그 pair 근사 오차를 구별하고, 임의 reduction 순서에서 저장된
|
||||
\(\sum_a\widehat G_a\)가 exact0이라고 주장하지 않는다. Node0의 미분 오차도 이 graph의
|
||||
산술 bound에 포함한다.
|
||||
|
||||
선형 동해석에서는 \(\epsilon=\operatorname{sym}H\),
|
||||
\(\sigma=\lambda\operatorname{tr}\epsilon I+2\mu\epsilon\)이고
|
||||
|
||||
\[
|
||||
U_{lin}=\sum_g[\tfrac12\lambda(\operatorname{tr}\epsilon)^2+
|
||||
\mu\epsilon:\epsilon]w_g,
|
||||
\quad f_{ai}=\sum_g\sigma_{iJ}\widehat G_{aJ}w_g,
|
||||
\quad K_{lin}=\sum_g\widehat B_g^TC\widehat B_gw_g.
|
||||
\]
|
||||
|
||||
\(\widehat B\)는 위 \(\widehat G\)로 만든 기존 engineering-shear B다.
|
||||
비선형 동해석은 \(F=I+H\)이며 tiny strain의 불필요한 I 취소를 피하는 동등식
|
||||
|
||||
\[
|
||||
E_G=\operatorname{sym}H+\tfrac12H^TH,\quad
|
||||
S=\lambda\operatorname{tr}(E_G)I+2\mu E_G,\quad P=FS,
|
||||
\]
|
||||
\[
|
||||
U=\sum_g[\tfrac12\lambda(\operatorname{tr}E_G)^2+\mu E_G:E_G]w_g,
|
||||
\qquad f_{ai}=\sum_gP_{iJ}\widehat G_{aJ}w_g.
|
||||
\]
|
||||
|
||||
\(H,E_G,S,P,F,U,f\)와 8점 recovery는 low를 보존한다. H를 만든 직후 F64로 축소하는
|
||||
경로는 이 계약을 충족하지 않는다. \(\mathbb C\)는 기본 정식화의 같은 StVK tensor이며
|
||||
|
||||
\[
|
||||
(K_{geo})_{ai,bk}=\sum_g\delta_{ik}\widehat G_{aJ}S_{LJ}
|
||||
\widehat G_{bL}w_g,
|
||||
\]
|
||||
\[
|
||||
(K_{mat})_{ai,bk}=\sum_g\widehat G_{aJ}F_{iI}\mathbb C_{IJLN}
|
||||
F_{kN}\widehat G_{bL}w_g,
|
||||
\qquad K_t=K_{mat}+K_{geo}.
|
||||
\]
|
||||
|
||||
각 식은 동일 trial·동일 계수·동일 2×2×2 적분을 사용한다. 에너지의 실수 polynomial
|
||||
미분을 pair 산술로 평가한 tangent이며 유한 반올림 함수의 미분을 주장하지 않는다.
|
||||
Zero state의 paired \(K_t=K_{lin}\)이고 geometric 항은0이다. Paired \(K_{lin}\)은 기존
|
||||
cached F64 K0와 coefficient-roundoff 수준에서 다를 수 있다. Byte identity나 별도
|
||||
rounded K0와의 exact equality를 요구하지 않는다. 차이는 실제 측정하고 기본 linear
|
||||
weak form·energy gradient·tangent 불변량으로 독립 검토한다. 대칭 강제 평균이나
|
||||
잔차 floor로 이 검토를 대신하지 않는다. Strained tangent가 SPD라고 가정하지 않는다.
|
||||
|
||||
## 형상·질량 action·복구
|
||||
|
||||
현재 절점은 실수값 \(x_a=X_a+u_{ah}+u_{al}\)이다. Whole-cell 인증의 outward-rounded
|
||||
interval은 세 항 전체를 포함한다. F64 `X+RN(u)`를 먼저 만든 뒤 singleton interval로
|
||||
바꾸지 않는다. Interval \(I(X)+I(u_h)+I(u_l)\) 또는 exact-sum expansion의 보수적
|
||||
enclosure를 사용하며 이후 determinant, Bernstein 변환·subdivision도 outward rounding한다.
|
||||
양의 lower bound를 인증하지 못하면 기존 depth10/cell budget65536에서 uncertain failure다.
|
||||
Low를 누락한 형상을 인증하거나 small low를 무조건 안전한 것으로 간주하지 않는다.
|
||||
Point \(\det F>0\)도 full tensor에서 확인하며 유한성/부호가 불확실하면 accept하지 않는다.
|
||||
|
||||
비선형 Cauchy \(\sigma=FSF^T/\det F\), Green strain, 선형 Cauchy/infinitesimal strain은
|
||||
pair로 복구한다. 8점 global tensor의 실제 shear `[11,22,33,12,13,23]`를 유지한다.
|
||||
\(M\)은 기준 형상·밀도에서 한 번 조립한 **기존 F64 matrix 그 자체**이고 변형/시간에 따라
|
||||
변하지 않는다. 모든 action \((Mz)_i=\sum_j(M_{ij},0)z_j\)는 full z와 pair product/reduction이다.
|
||||
F64 \(M\)으로 먼저 rounded high action을 계산하고 low를 별도 residual 보정으로 넣지 않는다.
|
||||
|
||||
\[
|
||||
T=\tfrac12v^TMv,\quad p=\sum_a(Mv)_a,\quad
|
||||
L_O=\sum_ax_a\times(Mv)_a,\quad \dot L_O=\sum_ax_a\times(Ma)_a.
|
||||
\]
|
||||
|
||||
Current position·momentum·reaction·work·energy balance까지 pair로 계산한다.
|
||||
\(W_{ext,n+1}=W_{ext,n}+\tfrac12(F_n+F_{n+1})^T(u_{n+1}-u_n)\),
|
||||
balance error는 기존 \(T+U-T_0-U_0-W_{ext}\)다. HHT numerical dissipation을 지우지 않는다.
|
||||
선형 current moment의 \(\sum u_a\times f_a=O(u^2)\) 해석과 TL 객관성/기준-arm identity는
|
||||
기본 정식화를 유지한다. F64 coefficient 오차와 pair 산술 오차를 독립 검사의 scale에서
|
||||
구별하고, finite-rotation 결과를 exact0으로 보정하지 않는다.
|
||||
|
||||
## HHT 전체 state와 Newton
|
||||
|
||||
Accepted \(u_n,v_n,a_n,A_n,f_n,F_n,r_n,W_{ext,n}\), predictor 및 candidate는
|
||||
low를 포함한다. 초기 \(u_0=v_0=0\), \(A_0=a_0\),
|
||||
\(M_{ff}a_{0f}=F_f(0+)-f_f(0)\)다. 초기 backend 해도 lift한 뒤 full endpoint로 검증한다.
|
||||
Constrained \(u,v,a,A\)는 항상 canonical exact0이다.
|
||||
|
||||
\[
|
||||
u_p=u_n+hv_n+h^2(\tfrac12-\beta)A_n,\qquad
|
||||
v_p=v_n+h(1-\gamma)A_n,
|
||||
\]
|
||||
\[
|
||||
A_{n+1}=(u_{n+1}-u_p)/b,\quad
|
||||
v_{n+1}=v_p+\gamma hA_{n+1},\quad
|
||||
a_{n+1}=(A_{n+1}+\alpha a_n)/c.
|
||||
\]
|
||||
|
||||
Candidate의 rates·element response·mass actions·recovery는 이 동일 전체 상태에서 평가한다.
|
||||
Physical residual은 \(r=Ma+f-F\), reaction은 constrained projection, free reaction은 exact0이다.
|
||||
다음 두 weighted 표현을 별도로 계산한다.
|
||||
|
||||
\[
|
||||
R=MA_{n+1}+c(f_{n+1}-F_{n+1})-\alpha(f_n-F_n),
|
||||
\qquad R_{eq}=c r_{n+1}-\alpha r_n,
|
||||
\]
|
||||
\[
|
||||
R-R_{eq}=M d_A,\quad d_A=A_{n+1}-c a_{n+1}+\alpha a_n,
|
||||
\qquad K_{eff}=M/b+cK_t.
|
||||
\]
|
||||
|
||||
마지막 식은 rates의 roundoff defect를 드러낸 항등식이다. Accepted old residual을0으로
|
||||
대체하지 않는다. \(R_{eq}\)를 RHS로 쓰는 경우에도 원래 weighted 식과의 일치 gate를
|
||||
통과해야 하고 tangent는 같은 weighted 표현의 \(K_{eff}\)다.
|
||||
Endpoint residual만 사용하면 그 Jacobian은 \(K_{eff}/c\)이며 서로 혼용하지 않는다.
|
||||
Backend에는 최종 조립한 paired \(K_{eff}\)와 RHS를 RN64로 전달하고 F64 보정량을 pair로
|
||||
올려 \(u\leftarrow u+\delta u\)에 누적한다. High-only 상태에서 tangent를 재계산하지 않는다.
|
||||
이 backend solve는 원래 tangent의 rounded approximation이며 full residual/physical gate를
|
||||
대체하지 않는다. Directional tangent 검사는 paired analytic derivative와 rounded backend
|
||||
matrix의 coefficient-rounding 차이를 따로 평가한다. Backend/nonfinite 실패는 rollback한다.
|
||||
|
||||
Physical criterion은 **모든 원래 free 성분**의
|
||||
\(S_i=|(Ma)_i|+|f_i|+|F_i|\), \(\max_i|r_i|/S_i\le10^{-10}\)다.
|
||||
\(S_i=0\)이면 \(r_i=0\)을 exact로 요구한다. Norm·분모·gate도 full pair다.
|
||||
Weighted identity scale은 기존 uncancelled 정의를 그대로 pair로 평가한다.
|
||||
즉 각 row의 \(\sum_j[|M_{ij}A_j|+c|M_{ij}a_j|+|\alpha M_{ij}a_{n,j}|+
|
||||
|M_{ij}d_{A,j}|]\), \(c(|f_i|+|F_i|)+|\alpha|(|f_{n,i}|+|F_{n,i}|)\),
|
||||
\(c|r_i|+|\alpha r_{n,i}|\)의 합이다. \(|R-R_{eq}|/scale\le10^{-12}\),
|
||||
zero scale은 exact-zero branch이며 finite 검사를 먼저 수행한다.
|
||||
|
||||
Fresh correction의 네 channel은
|
||||
\(\delta A=\delta u/b\), \(\delta v=\gamma h\delta A\),
|
||||
\(\delta a=\delta A/c\)에서 각각
|
||||
\(\|\delta u\|_\infty/L,h\|\delta v\|_\infty/L,
|
||||
h^2\|\delta a\|_\infty/L,h^2\|\delta A\|_\infty/L\le10^{-10}\)다.
|
||||
동일 full \(\delta u\)와 공통 계수를 쓰며 새 dummy channel은 없다.
|
||||
Update gate는 위 u/v/A 등식의 좌변과 전개된 각 우변 항의 same-unit abs 합을 scale로
|
||||
사용해 defect/scale \(\le10^{-12}\), scale0은 exact-zero다. Increment당100회 제한,
|
||||
고정 h와 기존 schedule, 빈 free의 vacuous convergence를 유지한다.
|
||||
이미 존재하는 hold/revisit 제어를 사용한다면 final gate는 모든 원래 free 성분을 검사하고
|
||||
동일 상태 판별에 전체 u pair와 mask를 포함한다. Carry·holding으로 physics state의 low를
|
||||
대체하지 않는다.
|
||||
|
||||
## Commit·observable·검증의 의미
|
||||
|
||||
Accepted/trial 복사는 모든 high/low와 이전 residual·누적 work를 보존한다. Geometry,
|
||||
recovery, finite, update/weighted identity, physical/correction gate가 모두 통과한 candidate만
|
||||
commit한다. 실패는 accepted state·predictor 원본·reference cache·기존 최종 파일을 보존한다.
|
||||
다음 증분은 published F64 배열 대신 accepted 전체 pair를 사용한다. Restart는 지원하지 않는다.
|
||||
|
||||
각 공개 F64 값은 \(\operatorname{RN}(z_h+z_l)\)이며 high만 저장한다는 가정 대신 올바른
|
||||
최종 반올림을 검증한다. Schema·shape·source identity는 기존 계약을 유지한다.
|
||||
Recovery를 rounded u에서 재계산해 published full-recovery observable을 바꾸지 않는다.
|
||||
내부 gate PASS는 published F64 u/v/a를 재입력해 같은 gate를 통과했다는 주장과 다르다.
|
||||
Self-check는 schema/identity/finite 및 내부 물리량의 올바른 RN64 serialization을 확인한다.
|
||||
로그는 내부 high+low 산술과 적용 gate를 명시한다. 출력 overflow/nonfinite는 실패다.
|
||||
|
||||
검증은 다음 반증 가능한 사례를 포함한다. 실행/통과 기록은 이 문서의 범위가 아니다.
|
||||
|
||||
- Exact dyadic/rational oracle: \(x=(1,2^{-60})\), \(y=(1,-2^{-60})\)에서
|
||||
\(x-y=2^{-59}\), \(x\,2^{60}-2^{60}=1\), binary-power division·normalization,
|
||||
cancellation·binade/tie·subnormal·overflow/zero-divisor를 검사한다. High collapse 대조는
|
||||
앞 두 항등식에서 실패해야 한다. 일반 곱/비이진 나눗셈은 실제 graph 오차 bound로 검사한다.
|
||||
- 작은 brick 및 coupled 두 Hex8: 공통 high 병진과 \(2^{-60}\) 규모의 비균일 low field로
|
||||
nonzero H/E/f/U와 이웃 element/global row 전달을 확인한다. 에너지 차분·signed directional
|
||||
tangent의 step sweep(기준 node0의 독립 perturbation 포함), paired linear–NL zero-state 일치,
|
||||
rigid translation/rotation·covariance와
|
||||
기존 잠김/warped quadrature 한계를 검사한다. High-only 대조가 같은 물리장을 만들지 못하는
|
||||
유의한 force/energy scale을 선택한다.
|
||||
- Coupled consistent M에 low velocity/acceleration을 주어 off-diagonal inertia·T·momentum 및
|
||||
current moment를 검사한다. 비영 old \(r_n\)의 weighted 항등식·네 correction·세 update 식과
|
||||
full-state oracle를 대조한다. \(-\alpha r_n\)를 생략하는 대조는 실패해야 한다.
|
||||
- Exact oracle로 \(X+u_h+u_l\)의 interval 포함을 확인하고 low가 현재 면 간격을 만드는
|
||||
작은 형상 사례를 포함한다. Positive/invalid/uncertain 구분 및 low 누락의 false certificate를
|
||||
검사한다. 불확실한 형상을 interval 대신 estimate로 승인하지 않는다.
|
||||
- Accepted low가 다음 predictor/rates에 참여하는 copy/commit 사례, 실패 trial의 rollback,
|
||||
rounded output/readback 및 geometry/backend/output 실패 보존을 검사한다. 기존 시간수렴,
|
||||
에너지·운동량·반력·외부 원본 기준도 유지한다.
|
||||
|
||||
미해결 evidence는 구현한 primitive graph의 normal/subnormal 오차 bound와 지원 범위의
|
||||
독립 검토, paired coefficient 차이의 실제 측정, 위 불변량 및 원본 endpoint 검증이다.
|
||||
추가 physics/acceptance 선택은 이 문서에서 만들지 않는다. 산술 bound나 작은 coupled 사례가
|
||||
충족되지 않으면 tolerance를 바꾸거나 더 높은 정밀도를 자동 채택하지 않고 근거를 반환한다.
|
||||
@@ -1,7 +1,8 @@
|
||||
# Hex8 동해석 내부 정밀도 변경 제안 — 미채택
|
||||
# Hex8 동해석 내부 정밀도 변경안 — 승인됨
|
||||
|
||||
이 문서는 사용자 검토용 제안이다. 현재 [PRD](PRD.md)·[정식화](formulation.md)·
|
||||
[numeric controls](numeric-controls.md)의 승인 계약을 변경하거나 구현 완료를 뜻하지 않는다.
|
||||
2026-10-09 사용자가 A를 선택해 내부 high+low 물리 상태와 Float64 출력의 반올림 의미를
|
||||
승인했다. 이 문서는 [PRD](PRD.md)·[정식화](formulation.md)·
|
||||
[numeric controls](numeric-controls.md)의 변경 근거이며, 구현 완료를 뜻하지 않는다.
|
||||
실패 근거와 검증 범위는 [lessons](lessons.md)에 기록한다.
|
||||
|
||||
## 변경이 필요한 이유
|
||||
@@ -13,7 +14,7 @@
|
||||
|
||||
갱신 중 사라진 덧셈을 다음 반복에 누적하는 carry와, 실제 변위를 high+low로 표현하는
|
||||
물리 상태는 다르다. Carry 실험의 kernel·rates·형상은 rounded high만 사용한다.
|
||||
아래 제안은 low도 물리 계산에 사용하는 별도 정밀도 계약이며, 원본 수렴을 보장하지 않는다.
|
||||
아래 승인안은 low도 물리 계산에 사용하는 별도 정밀도 계약이며, 원본 수렴을 보장하지 않는다.
|
||||
|
||||
## 제안하는 계산과 결과의 의미
|
||||
|
||||
@@ -37,8 +38,8 @@
|
||||
검증하고, 로그에 사용한 내부 산술을 명시한다. Restart는 계속 지원하지 않는다.
|
||||
Float64 직렬화의 overflow·비유한 값은 실패로 처리하며 기존 최종 파일을 보존한다.
|
||||
|
||||
현재 accepted state와 published Float64 state를 동일 계산 입력으로 취급하는 의미가
|
||||
달라지므로, 위 결과 의미와 내부 정밀도 변경을 함께 승인해야 한다.
|
||||
승인한 변경에서는 accepted state가 high+low 전체 물리 상태이며, published Float64 state는
|
||||
그 반올림 observable이다. 같은 계산 입력이라는 이전 의미를 적용하지 않는다.
|
||||
|
||||
## 구현 전에 고정할 검증
|
||||
|
||||
|
||||
@@ -12,8 +12,9 @@
|
||||
Float64 해의 부재를 증명하지 않으며, 수렴 기준·원본을 변경할 근거로 쓰지 않는다.
|
||||
- 후속 방향: [실패 근거](../hex8-structural-analysis/lessons.md)를 보존하고, 전체 물리
|
||||
상태의 high+low 계산과 Float64 출력의 반올림 의미를 정하는
|
||||
[미채택 변경안](../hex8-structural-analysis/precision-proposal.md)을 사용자와 결정한다.
|
||||
변경을 승인하기 전에는 기존 precision·acceptance 계약을 유지한다.
|
||||
[승인된 변경안](../hex8-structural-analysis/precision-proposal.md)을 구현한다.
|
||||
사용자가 2026-10-09 선택 A로 승인했다. 산술·요소의 첫 native 검사는 통과했으나
|
||||
전체 동적 state·시간수렴·원본 endpoint 검증은 남아 있다. Acceptance 기준은 유지한다.
|
||||
|
||||
## HHT shell의 시간수렴
|
||||
|
||||
|
||||
Reference in New Issue
Block a user