8.8 KiB
Hex8 numeric controls
행동/외부 acceptance 원본은 PRD, 식은 formulation이다. 여기의 내부 tuning default는 독립 numerical review와 영향 재검증을 기록해 조정할 수 있다. 외부 common-reference-tolerance 및 승인 physics/schema는 변경하지 않는다.
계산·형상 인증
모든 input/파생 값/결과를 finite 검증하고 positive Jacobian·밀도·material capability를 확인한다. Production 계산 precision은 Float64다. 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가 아니다. 현재 Xa+ua를 인증할 때 addition uncertainty도 포함한다. Failed trial은 immutable cache를 보존한다.
정적 Newton
Force residual numerator는 free residual infinity norm이다. 기존
nonlinear_static_control.cpp::EvaluateResidualChannel과 같이 free external infinity norm이
exact0이면 denominator=0의 absolute branch를 선택한다. External이 nonzero이면 같은 trial의
free internal/external infinity norm maximum을 relative denominator로 사용한다.
Translation correction numerator는 fresh free correction infinity norm, scale은 현재 증분의
free translation increment infinity norm이다. 기존 force/translation norm·branch 의미를 유지한다.
순수 prescribed 변위 문제에서 fint_free 자체를 denominator로 사용해 residual ratio가 항상1이
되게 만들지 않는다. Nonfinite/크기 불일치는 branch와 관계없이 실패다.
Relative branch limit1e-2, exact-zero scale branch absolute1e-3의 force 또는 length 단위다.
Max iteration100/increment가 default다. Moment/rotation dummy channel은 없다.
Raw norms·branch·threshold unit·iteration·passed를 기록한다. 수렴은 recovery/geometry까지
검증한 candidate에만 적용하며 normalized residual만 수정해 accept하지 않는다.
동적 Newton와 update
Residual은 physical free endpoint에서 평가한다. Componentwise uncancelled scale Si=|(Ma)i|+|finti|+|Fi|, normalized metric은 max_i(|ri|/Si)다. Si=0은 ri=0을 요구하며 그 외의 zero branch는 failure다. Internal cancellation으로 작은 residual이 나온 것만 평가하지 않는다. Weighted residual을 사용할 때도 physical endpoint와 동일한 scale/판정을 함께 기록한다.
L은 reference nodal bounding-box 대각 길이로 finite positive다. Correction u/L, h·dv/L, h²·da/L, h²·dA/L를 모두 확인한다. Residual/correction limit1e-10, update equality1e-12, max iteration100이 default다. Update scale은 동일 단위의 uncancelled formula term 합이며 scale0은 exact-zero다. 빈 free vector는 vacuous convergence이며 required prescribed/recovery validation은 유지한다.
표현 가능한 변위에서의 내부 정제
검토된 별도 동적 구현 f661864는 위 판정을 유지하며 다음 정제를 사용한다.
관련76개 검사와 독립 코드 검토는 통과했고 두 동적 원본의 새 실행은 진행 중이다.
이전 구현 b394ae7의 원본 실패와 변경 근거는 lessons에 기록한다.
물리 잔차가 통과한 좌표에서 sub-ULP 갱신 소실이 발생하면, 물리 잔차와 각 좌표의 fresh correction4개가 모두 통과한 좌표를 hold한다. 다음 반복부터 원래 effective tangent의 나머지 principal block을 푼다. Holding은 새 BC나 equation 제거가 아니다. 다음 반복에서 해당 성분이 원래 물리 기준을 실패하면 즉시 다시 solve에 포함한다. 최종 판정은 항상 모든 원래 free 성분을 사용한다.
정체 판별은 잔차 최대 점수의 증가 대신 이미 실패한 Newton 진입 상태로의 복귀를 사용한다. 진입 tuple은 전체3N 변위·reactivation 전 holding mask·incoming correction4개다. Physical FAIL 및 finite correction4개가 각각 PASS인 진입만 저장한다. 실제 다음 Newton의 전체 변위·freeze 후 mask가 정확히 같고 fresh correction4개도 각각 finite/PASS이면 동등한 실패 상태로 판별한다. Correction 숫자의 차이는 진단으로 남기지만 동일성을 요구하지 않는다. 숫자 자체는 정상 Newton의 rates·tangent·rhs에 사용되지 않는다는 검토에 근거한다. 고정 증분의 M·하중·이전 accepted state·predictor 및 결정적인 fresh solve/탄성 local recovery가 전제다. History는 증분 시작에만 초기화하고 실제 ULP 이동 후에도 유지한다. Prospective physical PASS, correction FAIL 또는 새로운 전체 변위/mask는 정상 Newton을 유지한다. 별도 history cap이나 threshold는 없으며 기존100회 제한으로 기록 수가 제한된다. 이는 알려진 실패 상태의 재방문을 감지해 내부 정제를 시도하는 선택이며 전체 알고리즘의 수렴 보장은 아니다. 실제로 개선하는 이웃이 없으면 기존 Newton 경로를 유지한다.
재현이 확인된 경우에만 각 free 좌표의 양·음 방향 한 ULP 이웃을 예측한다.
물리 관성력 변화는 M*delta_u/((1+alpha)*beta*h^2), 내력 변화는 Kt*delta_u로
분리하여 모든 free 성분의 예측 Si를 계산한다. 유한하며 원래 최대 점수를 줄이는 이웃을
점수·source DOF 순서로 검사하고 방향 tie는 음 방향을 먼저 둔다. 예측 성공은 수용이 아니다.
각 trial은 같은 원래 candidate에서 실제 rates·형상·내력·모든 원래 Si·update·weighted
identity를 재계산한다. 앞의 trial이 개선하지 못해도 이후 후보를 검사하며 evaluator 실패는
그대로 실패다. 실제 전체 최대 점수의 엄격 감소를 확인한 이동만 local candidate에 반영한다.
이동량의 correction4개를 기록하고 다음 정상 반복에서 모든 원래 최종 조건을 다시 검사한다.
원래100회 제한을 유지하며 별도 residual floor·clamp·projection을 두지 않는다.
Eigen 검증과 분류
Vector norm은 Euclidean, matrix norm은 Frobenius로 original free pencil을 평가한다. eta_r=||Kphi−lambda Mphi||/((||K||F+|lambda|||M||F)||phi||2), eta_norm=|phiᵀMphi−1|, eta_energy=|phiᵀKphi−lambda phiᵀMphi|/((||K||F+|lambda|||M||F)||phi||2²)다. Zero denominator는 numerator exact0이면0, 아니면 failure다. All returned-pair limits는1e-10. eta_gram은 ||PhiᵀM Phi−I||F, max_eta_orth는 normalized off-diagonal maximum이고 limit1e-10다.
분류 scale=max_i |Kii|/Mii는 finite positive여야 하며 default normalized near-zero1e-9, 인접 cluster gap1e-8이다. 유의한 negative lambda는 실패한다. Near-zero negative는 원 값으로 남기고 frequency를 만들지 않는다. 이 분류 scale은 FEAST interval upper bound가 아니다. 실제 search/count·SPD/roundoff budget은 backend 연결에서 검증하며 최저 N 보장 근거를 기록한다.
독립 local/temporal 검사의 수치 기준
Zero 기대량에는 임의 absolute floor 대신 same-unit uncancelled term scale 또는 수식에 따른 strain/force/energy scale을 사용한다. Initial invariant budget은 double eps와 연산 길이·geometry condition 추정에 비례하는512 eps scale이다. Scale0은 exact-zero다. Conditioning 때문에 budget이 물리 결함을 가릴 정도로 커지면 검사를 통과시키지 않고 모델/검사 유효 범위를 보고한다.
Directional difference는 signed direction과 h sweep으로 truncation/roundoff 구간을 확인한다. 기본 목표는 유의한 nonzero oracle scale에 대해 gradient/tangent 최적 구간 relative1e-7 이하다. 한 h에서 가까운 값만 고르지 않고 예상 error curve·analytic affine 사례·zero-state linear limit를 함께 확인한다. 필요 budget 수정은 oracle conditioning과 independent review evidence로 설명한다.
HHT temporal case는 analytic/manufactured u/v/physical a를 각각 평가한다. Smooth forcing 구간의 기본 목표는 h/h2/h4에서 observed order1.8 이상이며 noise floor에 가까운 quantity는 다른 유의한 case/time/step 범위로 검사한다. Knot를 가로지른 비매끄러운 forcing을 smooth-order 증거로 쓰지 않는다. Spatial refinement·locking은 수렴 경향과 적용 한계의 검사이며 reference tolerance를 재정의하지 않는다.
원본 비교
Reference-only S/B, row5%, RMS1%, exact-zero는 common policy를 따른다. Identity/finite/completeness 오류를 tolerance로 처리하지 않는다. Stress point 좌표는 출력 precision에 따른 auxiliary convention 검사이며 ID matching은 element/IntPt다. Input/CSV raw SHA는 현재 working-tree byte 기준이며 Git LF blob과 Windows CRLF bytes를 혼동하지 않는다. 실제 읽은 원본 byte identity를 evidence에 남긴다.