Files
FESADev/docs/hex8-structural-analysis/lessons.md
T

53 lines
3.6 KiB
Markdown

# Hex8 계산 정밀도와 검증에서 확인한 점
현재 완료 여부는 [PRD](PRD.md)의 checklist가 소유한다. 아래 기록은
[정식화](formulation.md)와 [수치 기준](numeric-controls.md)을 바꾸지 않고
계산 정밀도를 개선한 근거다. 내부 검사 통과와 원본 동적 모델의 수렴은 구분한다.
## 작은 변형률에서 단위행렬을 빼지 않는다
`E=(F^T F-I)/2`를 그대로 계산하면 작은 변형률에서 유효 숫자를 잃는다.
`H=grad(u)`로부터 `E=sym(H)+H^T H/2`를 계산하면 같은 Green 변형률을
단위행렬 차감 없이 구한다. StVK 재료식, 에너지, Cauchy 응력과 접선은 유지한다.
탄성계수 `2.1e11`, Poisson 비 `0.3`인 직육면체의 signed affine stretch
`±1e-10`, `±1e-8`에서 독립 응력·에너지·면 traction 적분으로 기존 오류를
재현했다. 수정 `7d191036`은 요소 검사 27개와 독립 수치 검토를 통과했다.
비선형 동적 원본의 첫 증분 잔차 비율은 약 `1.42e-5`에서 `6.02e-10`으로
줄었지만, 승인된 `1e-10` 기준은 여전히 충족하지 못했다.
## 곱셈, 합산, 변위 차감의 오차를 각각 보존한다
강체 병진을 제거한 상대변위로 내력을 계산해도 큰 항들이 상쇄되는 행에서는
계산 순서의 영향이 남는다. 원본 선형 동적 사례의 두 요소 행에서 local 곱의
절댓값 합은 각각 약 `3.63e6`이었고, FMA 곱셈 잔여와 보상 합산으로 복구한
내력 차이의 합은 `8.20e-10`이었다. 당시 전체 잔차 `9.06e-10`과 같은 크기였다.
수정 `c50e68e`는 캐시된 K0를 그대로 두고 상대변위와의 곱셈·합산을 보상한다.
수정 `8153796`은 절점 변위 기울기 및 비선형 `sum(w*P*G)`에도 같은 보상을
적용한다. 각각 관련 검사 60개와 독립 수치 검토를 통과했으나 동적 원본은 실패했다.
기울기·내력·에너지·접선은 같은 trial의 물리식을 사용한다.
작은 절점 변위의 갱신은 입력 double에서 표현 가능해도, 더 큰 기준 절점 변위를
뺀 상대변위에서는 소실될 수 있다. 수정 `8ccd1b2`는 TwoDiff로 차감의 잔여를
보존하고, 상대변위의 두 부분을 내력·기울기·선형 에너지 계산에 함께 사용한다.
독립 정확 유리수 검산의 유한 차이 125,039쌍에서 불일치가 없었고, 관련 native
검사 60개와 독립 수치 검토도 통과했다. 이 검산은 native solver 검증을 대체하지
않으며, 입력 자체의 반올림으로 잃은 값을 복원한다는 의미도 아니다.
## 수렴 정체와 허용치 변경을 구분한다
위 수정 후 선형 동적 원본은 첫 증분을 5회 solve, 잔차 비율 `9.54e-11`로
수용했다. 두 번째 증분은 100회에서 `1.01993e-10`으로 실패했다. 실패 좌표의
fresh correction은 약 `-0.496 ULP`여서 저장된 변위를 바꾸지 못했다.
비선형 원본도 첫 증분에서 약 `1.35e-10`으로 실패했다.
이는 전체 원본 검증 완료의 근거가 아니다. 물리 잔차의 component별 원래 Si,
correction, update 및 max100 기준을 유지하면서 표현 가능한 변위에서 추가
정제가 가능한지 확인해야 한다. 예측 잔차는 trial 선택에만 사용할 수 있고,
수용은 실제 rates·형상·내력·복구·모든 free 성분의 원래 판정으로 수행해야 한다.
원본·허용치를 보정하거나 실패한 candidate를 accepted history에 넣지 않는다.
명령·native exit·실패 로그는 해당 source와 함께 보존한다. 최종 통합 및 외부 비교
결과는 이후 verification 기록에서 이 개발 중 실패와 구분한다.