Files
KOKO\Mimi 86b740eebf docs(tolerance): 변위 검증 수용과 보류 검사 및 최종 비교 기록
사용자 후속 결정에 따라 이번 실험을 변위 검증 통과와 실패10개 보류로 수용한다.
기존 전체 검사 FAIL/SKIP과 수치 기준을 보존한다.
전체101프레임 q/v/a/A/energy 차이와 관측 시간·outer 횟수를 추가한다.
공식 성능 조건·전체 비용·시간 정확도 미확보는 후속 과제로 남긴다.
문서만 변경: source450/reference34 hash 불변, 로컬 링크87개와 정적 검사 통과.
2026-10-19 17:11:49 +09:00

7.9 KiB

실패 검사 10개의 상대오차 전환 검토

검토일: 2026-10-19. 대상 제품 source는 변위 비교 당시 626f7da와 동일하다. 검사 오차만 상대오차로 바꿔 통과를 확인할 수 있는 항목은 없다. D3 두 검사와 drilling 한 검사는 상대 기준에서도 실패하고, C08a pointwise 한 검사는 이미 정규화 오차에서 실패한다. 나머지 6개는 수치 비교 assertion에 도달하기 전에 실패한다. 테스트·production·reference 기준을 변경하지 않았다. 이후 사용자는 변위 기준으로 이번 실험을 수용하고10개 실패를 보류했다. 아래 상대오차 계산과 실패 사실은 보존한다.

검토한 상대오차 정의

사용자가 승인한 검사 tolerance 1e-3을 상대오차에도 적용한다고 가정했다. 이는 **0.1%**이며, 외부 Abaqus 변위 비교의 family RMS 1%와 다른 기준이다.

reference 상대오차 = ||actual - oracle|| / ||oracle||
대칭 정규화 오차 = ||actual - oracle|| / (||actual|| + ||oracle||)
검토 상한 = 0.001

벡터는 Euclidean norm, 텐서는 Frobenius norm을 사용했다. 분모 0은 별도 exact-zero 사례로 다루며 max(1, norm) 같은 floor로 오차를 줄이지 않았다. Drilling gradient는 병진 좌표 미분과 회전 좌표 미분의 차원을 맞추기 위해 병진 열에 특성길이 2, 회전 열에 1을 곱했다. 이는 기존 같은 테스트의 Hessian 비교에 쓰는 scaling이다. 이 검토 정의는 기존 검사에 채택한 새 정책이 아니다.

10개 검사별 결론

기존 실패 identity 현재 실패 위치 상대오차 전환 검토
DynamicRotation.ThirdDerivativesMatchAllPermutationsAndInteriorSweep 독립 D3 oracle와의 norm 차이 여전히 FAIL. 유한회전 상태의 전체 D3 텐서 상대오차 31.7922%.
DynamicRotation.MatchesEightyDigitIndependentBlockExponentialAnchors 독립 고정밀 D3 anchor 3개 여전히 FAIL. 해당 방향의 상대오차 23.2126%, 100%, 31.2134%.
NonlinearMitc4Residual.ExactDrillingConstraintHasIndependentForceGradientAndHessian drilling gradient 성분 차이 여전히 FAIL. 전체 gradient 상대오차 평면 93.7766%, warped 93.8607%.
HhtShellPhysics.C08aRigidOrbitMatchesIndependentVolumeForcePowerAndMomentum hidden defect와 CompleteEquilibrium 이미 abs(defect)/scale 검사. 최대 0.123371% > 0.1%. 별도 내부 평형 실패도 남는다.
HhtShellPhysics.ReducedManufacturedControllerKeepsExactInitialOrbit h=1/64, increment 1, strict Newton 100회 소진 비교값을 얻기 전 예외. 사후 상대오차 assertion 전환으로 해결되지 않는다.
HhtShellPhysics.C08aRigidManufacturedOrbitReducedCoordinateTimeConvergence h=1/16, increment 1, strict Newton 100회 소진 동일. 시간수렴의 오차·차수 판정에 도달하지 못한다.
HhtShellPhysics.PredictorStartCompletesPreviouslyFailingLumpedFreePlateGrid h=1/256, increment 1, strict Newton 100회 소진 동일.
HhtShellPhysics.C08bFreeFiniteRotationPlateSelfConvergenceAndPhysicalInvariants h=1/64, increment 1, strict Newton 100회 소진 동일.
HhtDynamicProcedure.LargeDirectStepStartsFromAcceptedGeometry 후보 field 통과 뒤 mass/null acceptance, 결과 없음 내부 mass 검사는 이미 norm으로 정규화된 1e-12. 테스트의 HasValue()를 상대오차로 바꿀 수 없다.
HhtDynamicProcedure.UniformTranslationHasNoShellStrainAndIsDeterministicAcrossPartitions finite-rotation increment 2, triad/회전좌표 불일치, 결과 없음 내부 무차원 triad 성분 차이 1e-12에서 실패. 사후 테스트 비교의 전환 대상이 아니다.

마지막 두 검사의 gate 자체를 바꾸는 것은 production acceptance 변경이다. 이번 검토는 그 변경의 통과 여부를 측정하지 않았으며, 저장된 실패 상태에 numerator가 없는 항목의 새 상대오차나 통과를 추정하지 않았다. C08 네 controller도 이미 길이·시간 scale로 정규화한 보정과 잔차에 1e-10을 사용한다. 이를 1e-3으로 바꾸는 것은 반복 종료 규칙의 변경이며, 절대오차 비교를 상대오차로 재표현하는 작업과 구분해야 한다.

D3의 실제 분자와 분모

기존 두 D3 검사의 유한회전 상태 phi=(0.2,-0.3,0.4)에서 재계산했다. e1,e2,e3는 단위 좌표 방향, m=(1,2,-1)/sqrt(6)이다.

방향 절대 norm 차이 oracle norm reference 상대오차 대칭 정규화 오차
e1,e1,e1 0.227615922140 0.980571766913 23.2126% 11.4924%
e1,e2,e3 0.030126523605 0.030126523605 100% 100%
m,m,m 0.270116450986 0.865384981666 31.2134% 15.1900%
전체 D3 텐서, 좌표 27방향 0.575746413774 1.810965975332 31.7922% 15.8315%

e1,e2,e3 방향의 cubic D3는 0이지만 독립 oracle는 0이 아니므로 상대오차는 100%다. 전체 텐서 norm으로 묶어도 0.1%를 넘는다. 따라서 작은 성분 한 개를 나눈 결과만으로 실패한다고 결론 낸 것이 아니다. 위 anchor 절대오차는 보존 T7 XML의 실제 실패값과 일치했다.

기존 5상태×4×4×4방향의 중복 없는 320개 D3 비교에서도 절대 1e-3 실패는 64개, 순수 상대 1e-3 실패는 103개였다. 이는 기존 finite-difference 간격 7회의 반복 assertion을 제외한 진단 개수다. 작지만 0이 아닌 oracle 값에서 순수 상대오차는 오히려 더 엄격해진다. 기존 테스트의 모든 절대 검사를 일괄 상대 검사로 바꾸는 근거가 되지 않는다.

Drilling의 실제 분자와 분모

기존 테스트와 같은 flat/warped fixture에서 4절점×24열 전체 gradient를 계산했다.

fixture scaled 차이 norm scaled oracle norm reference 상대오차 대칭 정규화 오차
flat 0.030299801962 0.032310614847 93.7766% 77.8392%
warped 0.030708542429 0.032717144436 93.8607% 78.0369%

대표 성분은 actual=-0.000323196746, oracle=-0.003614547359, 차이=0.003291350613으로 성분 상대오차도 91.0584%다. 전체 norm과 대칭 분모로 계산해도 실패한다. 절대값의 단위·크기 때문에 실패한 것으로 해석할 수 없다.

근거와 실행 범위

  • 기존 10개 실패는 T7 unit XML과 현재 테스트 본문에서 확인했다.
  • 독립 작업 폴더의 진단 C++는 기존 두 요소 테스트 파일의 fixture/oracle를 include하고 실제 EvaluateDynamicRotation 및 EvaluateInternalResidualAndTangent를 호출했다. 기존 MSVC Debug solver/gtest library에 연결했으며 production library를 다시 빌드하거나 수정하지 않았다.
  • 실행 filter는 RelativeReview.*의 진단 2개뿐이다. Exit 0은 진단값 수집의 성공이며 기존 실패 테스트 10개의 통과를 의미하지 않는다. 10개 전체·전체 회귀·reference 해석을 재실행하지 않았다.
  • Source/build/test/script 450개와 solver/gtest library hash 불변을 확인했다.
  • Raw/수치: 진단 로그, 계산값·검증 JSON, 진단 XML. 첫 standalone link의 main 누락 실패와 main 추가 후 build 성공도 같은 폴더에 보존했다.

상대오차는 단위·규모가 다른 값을 비교할 때 유용하지만 이번 세 미분 검사의 오차를 0.1% 이내로 만들지는 못한다. 상대 정책을 도입한다면 물리량별 차원·norm·near-zero 처리를 먼저 정하고, 근사식과 독립 oracle의 불일치 및 실행 실패를 별도로 해결해야 한다.