docs(tolerance): 변위 검증 수용과 보류 검사 및 최종 비교 기록

사용자 후속 결정에 따라 이번 실험을 변위 검증 통과와 실패10개 보류로 수용한다.
기존 전체 검사 FAIL/SKIP과 수치 기준을 보존한다.
전체101프레임 q/v/a/A/energy 차이와 관측 시간·outer 횟수를 추가한다.
공식 성능 조건·전체 비용·시간 정확도 미확보는 후속 과제로 남긴다.
문서만 변경: source450/reference34 hash 불변, 로컬 링크87개와 정적 검사 통과.
This commit is contained in:
KOKO\Mimi
2026-10-19 17:11:49 +09:00
parent 626f7da880
commit 86b740eebf
10 changed files with 345 additions and 16 deletions
+10 -1
View File
@@ -1,9 +1,17 @@
# Abaqus 수렴 허용치 조사와 FESA 대응
2026-10-19 후속 사용자 승인으로 이번 실험은 **Abaqus 변위 검증 통과·실패10개 보류로 조건부 완료**한다.
[결정 기록](../tracking/decisions/0011-tolerance-experiment-acceptance.md)과 [최종 정리](results.md#후속-승인과-남은-단계의-완료)를 따른다.
기존 FAIL/SKIP·수치 기준은 보존하며 공식 speedup·전체 물리/시간 정확도 완료로 확대하지 않는다.
조사일: 2026-10-18. FESA 조사 기준: `43867d0`.
2026-10-19 실험 branch에서 공개 field 규칙을 MITC4 HHT의 실제 종료에 연결했다.
Native/CTest 전체는 각각987 PASS·10 FAIL·1 SKIP이며, 공식 후보 성능 비교는 미성립이다.
구현·물리 검증·측정의 상세 근거와 한계는 [실험 결과](results.md)에 기록했다.
후속 [정식 모델 변위 비교](reference-displacement-comparison.md)는 8개 모델 모두 U PASS다.
모두 Release 결과이며, 새 field 후보 100증분은 5662.144854초로 완료했다. 공식 speedup 판정과는 구분한다.
실패 10개의 [상대오차 전환 검토](relative-error-review.md)에서는 D3·drilling이 상대 `1e-3`도
넘는 것을 확인했다. 나머지 항목의 기존 정규화 검사와 실행 실패도 구분했으며 기준을 변경하지 않았다.
승인된 후보의 시험 가능한 수식·분기 우선순위·평균 이력·로그 계약은
[외부 field 수렴 정식화](formulation-convergence.md)를 따른다. 아래는 조사 당시 코드와
@@ -178,7 +186,8 @@ Abaqus 내부 직접분해·pivot·rank 판정 숫자는 추측하지 않았다.
확인된 사실은 엄격한 HHT 종료 기준과, 외부 Newton 외에도 비용이 큰 내부 root·
요소 도함수·조립 경로가 존재한다는 점이다. 허용치가 실제 장시간 실행의 주원인인지는
조사 당시에는 측정하지 않았다. 이후 같은 local 근사본의 strict 공식 실행은
6350.7895521초/native0을 확보했지만, 물리 실패가 남아 공식 후보100증분은 미실행이다.
6350.7895521초/native0을 확보했다. T6/T7에서는 물리 실패로 후보100증분을 실행하지 않았으나,
후속 사용자 요청의 변위 비교에서는 Release 후보 원본을 5662.144854초/native0으로 완료하고 U PASS를 확인했다.
첫 증분의 호출 수 감소만으로 전체 병목이나 가속을 확정하지 않는다.
[기존 성능 기록](../calculation-performance/README.md)의
6372.325621초는 과거 source의 단일 baseline으로 최신 revision의 측정값이 아니다.
@@ -1,5 +1,10 @@
# MITC4 HHT에 Abaqus 수렴 규칙을 적용하는 실행 계획
2026-10-19 후속 사용자 승인으로 이번 실험은 변위 검증 통과·실패10개 보류로 조건부 완료한다.
실제 기준·FAIL/SKIP을 변경하지 않았으며, 아래는 최초 계획과 재현 조건을 보존한 기록이다.
후속 후보100증분 U 비교와 전체 상태·관측 시간 정리는 [최종 결과](results.md#후속-승인과-남은-단계의-완료),
수용 범위는 [결정 기록](../tracking/decisions/0011-tolerance-experiment-acceptance.md)을 따른다.
작성일: 2026-10-18. 조사 기준 source: 43867d0.
2026-10-19 승인된 실행 결과: 외부 field 규칙을 실제 HHT 종료에 연결하고 strict 기준 실행,
1증분 후보 진단, 두 Debug 경로 전체 검사와 별도 비교를 수행했다.
@@ -0,0 +1,90 @@
# Reference 모델 변위 비교
비교일: 2026-10-19. 대상 source HEAD: `626f7da880001fcae2e3280e9d43a2772ce79ae6`.
정식 변위 reference가 있는 8개 모델 중 **8개 U 비교 통과**다.
이는 변위 reference 비교 결과이며, 기존 물리 검사 10개 실패의 해결이나 후보 채택을 뜻하지 않는다.
후속 사용자 승인으로 이 변위 결과를 이번 실험의 검증 통과로 수용하고 실패10개는 보류했다.
[결정과 적용 범위](../tracking/decisions/0011-tolerance-experiment-acceptance.md)를 따른다.
## 빌드와 실행 시간
최종 표는 모두 **MSVC x64 Release, 개발용 HHT probe OFF** 실행 결과다.
기존 Debug 정적 결과는 사전 확인에만 사용했고, beam·shell·shellNL은 이번에 같은 Release EXE로 새로 실행했다.
MITC4 HHT도 이번에 정식 입력의 100증분 전체를 새 작업 복사본에서 실행했다.
CLI와 정식 HHT 비교기 모두 exit 0이다. 양의 100증분 중 71개는 Newton 2회,
29개는 1회로 수렴했으며 로그의 실제 정책은 `abaqus2025-field-on-fesa-v1`이다.
Hex8 네 모델은 T7에서 실행한 Release 결과를 재사용했다. 실행 당시 report·HDF5·입력·reference hash와
현재 source/build/test/script 450개 및 runtime 9개 hash를 대조했으며 변경이 없었다.
Release 빌드 명령은 `/p:Configuration=Release /p:Platform=x64 /p:FesaHhtDevelopmentProbe=false`다.
실제 compiler 기록 102개 소스의 `/O2`, `NDEBUG`, `/MD`를 확인했다.
링커의 `/DEBUG`는 PDB 생성 옵션이며 Debug 컴파일 구성을 의미하지 않는다.
EXE SHA-256: `449196eb79efab3c62b8dac4b73c3c76e97ec76f6a77f9d80ce1ee5c8c1f0cfa`.
시간은 `perf_counter()`로 측정한 FESA CLI 프로세스의 wall time이다. 입력 읽기·조립·풀이·결과 저장을
포함하고, 빌드·비교 스크립트 실행 시간은 제외한다. 모델별 1회 실행이며 반복 측정·기준 실행과의
통제된 성능 비교가 아니므로 speedup으로 해석하지 않는다. 서로 다른 시점의 Hex8 시간도 구분했다.
## 변위 결과
RMS는 각 프레임의 U1·U2·U3 전체 비교 scalar 오차 RMS를 같은 프레임의 최대 절대 reference 변위로
나눈 값이다. 아래는 프레임별 정규화 RMS의 최댓값이며, 프레임을 합친 RMS가 아니다.
최대 절대오차는 모든 비교 프레임·절점·병진 성분에서 찾았다. 길이는 입력의 일관 단위이며
HDF5가 `user-consistent-unspecified`이므로 임의로 mm 또는 m를 붙이지 않았다.
| 모델 | 빌드 | 절점 × 프레임 | 최악 정규화 RMS (%) | 최대 절대오차 | CLI 시간 (초) | U 판정 |
| --- | --- | ---: | ---: | ---: | ---: | --- |
| cantilever beam (B33) | Release | 11 × 1 | 8.4596232e-07 | 5.33322917e-10 | 0.148 | PASS |
| shell (MITC4, 선형 정적) | Release | 49 × 1 | 0.10332757 | 1.90378535e-07 | 0.182 | PASS |
| shellNL (MITC4, 비선형 정적) | Release | 49 × 1 | 0.10332757 | 1.90378553e-07 | 1.000 | PASS |
| Hex8 선형 정적 | Release | 442 × 1 | 9.3179458e-07 | 6.09626121e-11 | 0.674 | PASS |
| Hex8 비선형 정적 | Release | 442 × 1 | 2.1699132e-05 | 9.83246600e-10 | 1.570 | PASS |
| Hex8 선형 동적 | Release | 442 × 101 | 3.6188213e-05 | 1.17034536e-09 | 57.675 | PASS |
| Hex8 비선형 동적 | Release | 442 × 101 | 0.0002155586 | 7.77901169e-09 | 114.651 | PASS |
| MITC4 HHT 비선형 동적 | Release | 9 × 101 | 0.22824245 | 3.09203705e-07 | 5662.145 | PASS |
## 최대 절대오차의 위치
Abaqus와 FESA 값은 같은 source instance·node label·성분·증분에 해당한다.
| 모델 | 증분 | 절점 | 성분 | Abaqus | FESA | 절대오차 |
| --- | ---: | ---: | --- | ---: | ---: | ---: |
| cantilever beam (B33) | 1 | 11 | U3 | -1.9047627200e-02 | -1.9047626667e-02 | 5.33322917e-10 |
| shell (MITC4, 선형 정적) | 1 | 2 | U3 | -2.3740820300e-05 | -2.3550441765e-05 | 1.90378535e-07 |
| shellNL (MITC4, 비선형 정적) | 10 | 2 | U3 | -2.3740820300e-05 | -2.3550441747e-05 | 1.90378553e-07 |
| Hex8 선형 정적 | 10 | 43 | U2 | 1.2031230100e-03 | 1.2031230710e-03 | 6.09626121e-11 |
| Hex8 비선형 정적 | 10 | 305 | U3 | 1.3131889300e-06 | 1.3122056834e-06 | 9.83246600e-10 |
| Hex8 선형 동적 | 7 | 143 | U1 | 2.0765191900e-03 | 2.0765203603e-03 | 1.17034536e-09 |
| Hex8 비선형 동적 | 30 | 8 | U2 | 1.8255165800e-03 | 1.8255088010e-03 | 7.77901169e-09 |
| MITC4 HHT 비선형 동적 | 1 | 2 | U3 | -4.9189598900e-05 | -4.8880395195e-05 | 3.09203705e-07 |
## 판정 기준과 비교 범위
- 기존 공통 reference 정책을 유지했다. 프레임별 `S=max(abs(U_reference))`, near-zero 경계 `0.01*S`다.
Near-zero 행은 절대오차 `<=0.01*S`, 그 밖의 행은 상대오차 `<=5%`, family 정규화 RMS는 `<=1%`를 모두 만족해야 한다.
`S=0`이면 정확한 0을 요구한다. Local 검사에 승인한 `1e-3`을 외부 비교 허용치로 사용하지 않았다.
- Source instance·node label·프레임을 고정해 대응하고 누락·중복·nonfinite·입력 identity를 먼저 확인했다.
beam 11절점, shell/shellNL 49절점, Hex8 442절점의 전체 U1·U2·U3를 비교했다.
- MITC4 HHT는 HDF5의 전체 729절점·101프레임과 finite/inventory를 사전 검사했지만, Abaqus CSV가 제공하는
9절점(2, 21, 22, 69, 70, 165, 309, 442, 586)의 101프레임, 총 2,727개 U scalar만 외부 값과 비교한다.
729절점 전체에 대한 Abaqus 변위 일치를 주장하지 않는다.
- shellNL 정적은 load factor 1의 accepted frame을 찾아 Abaqus 증분 10과 대응했다. HDF5 frame index 9를 증분 9로 오인하지 않았다.
- Hex8 동적과 MITC4 HHT는 초기 프레임을 포함한 101프레임이다. 정적 CSV는 최종 상태 1프레임 비교다.
- 이번 표는 병진 U만 다룬다. Shell 회전 UR은 기존 계약의 warning-only 분류를 유지한다.
MITC4 HHT의 UR 실패 family는 100개 프레임이며 warning은 200건이다.
- 고유치 모델(shell 및 Hex8)은 모드 정규화에 따라 변위 크기가 달라 절대 물리 변위 비교 대상에 넣지 않았다.
shell-thermal은 NT11 reference만 있어 변위 비교를 수행하지 않았다.
- `reference/temp`는 사용하지 않았다. 정식 자료가 없는 추가 mesh/pressure 변형을 통과로 세지 않았다.
- 원본 reference 34개 파일의 실행 전후 SHA-256이 동일했다. 원본 입력·CSV·결과를 수정하지 않았다.
## 근거 파일
- 집계 JSON: [`displacement-summary.json`](../../.build/reference-displacement/run-20261019-090831/displacement-summary.json)
- 집계 CSV: [`displacement-summary.csv`](../../.build/reference-displacement/run-20261019-090831/displacement-summary.csv)
- 성분별 상세 CSV: [`displacement-components.csv`](../../.build/reference-displacement/run-20261019-090831/displacement-components.csv)
- 빌드 확인: [`build-verification.json`](../../.build/reference-displacement/run-20261019-090831/build-verification.json)
- 새 실행 근거: [`.build/reference-displacement/run-20261019-090831`](../../.build/reference-displacement/run-20261019-090831/)
- 재사용한 Hex8 실행 근거: [T7 hex8-reference](../../.build/tolerance-experiment/go-20261018/T7/hex8-reference/)
- 기존 전체 검증과 미해결 항목: [실험 결과](results.md)
Raw evidence는 로컬 ignored `.build`에 보존했다. 이 문서 추가로 C++ 코드·수치 기준을 변경하거나 전체 검증을 다시 실행하지 않았다.
@@ -0,0 +1,99 @@
# 실패 검사 10개의 상대오차 전환 검토
검토일: 2026-10-19. 대상 제품 source는 변위 비교 당시 `626f7da`와 동일하다.
**검사 오차만 상대오차로 바꿔 통과를 확인할 수 있는 항목은 없다.**
D3 두 검사와 drilling 한 검사는 상대 기준에서도 실패하고, C08a pointwise 한 검사는
이미 정규화 오차에서 실패한다. 나머지 6개는 수치 비교 assertion에 도달하기 전에 실패한다.
테스트·production·reference 기준을 변경하지 않았다.
이후 사용자는 [변위 기준으로 이번 실험을 수용하고10개 실패를 보류](../tracking/decisions/0011-tolerance-experiment-acceptance.md)했다.
아래 상대오차 계산과 실패 사실은 보존한다.
## 검토한 상대오차 정의
사용자가 승인한 검사 tolerance `1e-3`을 상대오차에도 적용한다고 가정했다.
이는 **0.1%**이며, 외부 Abaqus 변위 비교의 family RMS 1%와 다른 기준이다.
```text
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](../../.build/tolerance-experiment/go-20261018/T7/fesa_unit_tests.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/수치: [진단 로그](../../.build/relative-review/run-20261019-134221/diagnostic.raw.txt),
[계산값·검증 JSON](../../.build/relative-review/run-20261019-134221/numeric-review.json),
[진단 XML](../../.build/relative-review/run-20261019-134221/diagnostic.xml).
첫 standalone link의 main 누락 실패와 main 추가 후 build 성공도 같은 폴더에 보존했다.
상대오차는 단위·규모가 다른 값을 비교할 때 유용하지만 이번 세 미분 검사의 오차를
0.1% 이내로 만들지는 못한다. 상대 정책을 도입한다면 물리량별 차원·norm·near-zero
처리를 먼저 정하고, 근사식과 독립 oracle의 불일치 및 실행 실패를 별도로 해결해야 한다.
+68 -7
View File
@@ -1,10 +1,17 @@
# MITC4 HHT 외부 field 수렴 정책 실험 결과
**후속 사용자 승인: 이번 실험은 변위 검증 통과·실패10개 보류로 조건부 완료한다.**
마지막 [최종 정리](#후속-승인과-남은-단계의-완료)가 현재 판정이며,
아래 최초 실험의 FAIL/SKIP·미측정 기록과 수치 기준은 그대로 보존한다.
[수용 범위와 후속 의무](../tracking/decisions/0011-tolerance-experiment-acceptance.md)를 함께 따른다.
기록일: 2026-10-19. **실제 종료 정책은 구현했으나 수치 부적합과 검증 공백이 남아 있다.**
MITC4 HHT 양의 증분은 `abaqus2025-field-on-fesa-v1`로 판정하며 `hht-log-v2`를 기록한다.
Native Debug와 CMake Debug/CTest 전체는 각각 998개 중 **987 PASS·10 FAIL·1 SKIP**이다.
Python 145개와 별도 정식 Hex8 5모델 비교는 통과했다. 공식 MITC4 후보 100증분 실행·
reference 비교·성능 비교는 미성립이며 전체 검증 완료·가속 확인·정식 채택으로 보고하지 않는다.
Python 145개와 별도 정식 Hex8 5모델 비교는 통과했다. T6/T7 당시 MITC4 후보 100증분은
미실행이었다. 후속 사용자 요청으로 Release 후보 원본을 5662.144854초에 완료하고 U 비교를 통과했다.
[8개 정식 모델 변위·빌드·시간 비교](reference-displacement-comparison.md)에 새 근거를 기록했다.
전체 검증 완료·가속 확인·정식 채택으로 보고하지 않는다.
## 기준과 원시 증거
@@ -355,15 +362,69 @@ Release EXE/PDB/7 DLL도 실행 전후 T6 manifest와 일치했다. 이 실행
정식 shellNL-meshfine·shellNL-meshfine_02·shellNL-meshfine-pressure 자료는 없다.
`_02`는 자료 부재와 전용 case identity/비교 계약 미구현이 함께 남는다. 새 필수 thermal
reference도 미제공이다. `reference/temp`는 사용하지 않았다. 후보 MITC4 100증분 결과는
앞서 설명한 수치 실패 분기로 미실행이며 strict baseline이나 1증분 결과로 대신하지 않는다.
reference도 미제공이다. `reference/temp`는 사용하지 않았다. T6/T7의 후보 MITC4 100증분은
앞서 설명한 수치 실패 분기로 미실행이었다. 후속 새 원본 실행·U 비교는 별도 변위 보고서에 기록했으며,
strict baseline이나 1증분 결과로 대신하지 않았다.
## 판정과 다음 검증 조건
## 최초 실험의 판정과 다음 검증 조건
**구현됨·수치 부적합·일부 검증 미완료·공식 성능 비교 미성립**으로 판정한다.
Strict 공식 6350.7895521초, 1증분 개발 호출 수 감소, 전체 회귀 실행 사실은 서로 다른 근거다.
이를 합쳐 전체 가속이나 정식 채택 가능으로 보고하지 않는다.
다음에는 local 근사의 독립 미분/물리 정확도와 후보 후속 acceptance 실패의 원인을 분리하고,
실제 비선형 후보의 시간 정확도와 N7 판정을 확보해야 한다. 그 뒤 같은 조건의 공식 후보
100증분과 정식 HHT 비교를 수행해야 전체 speedup을 판정할 수 있다.
실제 비선형 후보의 시간 정확도와 N7 판정을 확보해야 한다. 새 원본 U 비교와 단일 CLI 시간은
확보했지만, 같은 조건의 공식 성능 비교가 추가로 필요하며 현재 전체 speedup을 확정하지 않는다.
현재 branch와 원시 자료를 보존했으며 주 개발 branch 병합·외부 solver·release는 수행하지 않았다.
## 후속 승인과 남은 단계의 완료
2026-10-19 사용자는 Abaqus 변위 일치를 이번 실험의 검증 통과 근거로 수용하고 실패10개는
보류한 채 남은 단계를 진행하도록 승인했다. 이번 실험의 판정은 **변위 검증 통과·알려진
실패 보류로 조건부 완료**다. 실제 Native/CTest 각각987 PASS·10 FAIL·1 SKIP과 Python145 PASS를
바꾸지 않았다. Assertion·production acceptance·HHT 계수·local 근사·reference 기준도 그대로다.
앞선 [변위 비교](reference-displacement-comparison.md)는8개 모델 U PASS다. MITC4 HHT의
최악 프레임 정규화 RMS0.22824245%가1% 이내라는 근거이며, 모든 개별 scalar의 상대오차가
1% 이내라는 주장은 아니다. 9절점×101프레임 외부 비교 범위, UR100-frame/200-warning을 유지한다.
기존 두100증분 HDF5를 읽기 전용으로 비교하여 남은 전체 상태 진단을 확보했다.
729절점·676요소 identity·101프레임 schedule·dtype/shape/attribute/finite를 대조하고,
프레임당20개, 총2020개 numeric dataset을 비교했다. q/v/a/A의 병진과 회전은 단위를 분리했다.
| strict/candidate 채널 | 전체101프레임 최대 절대차 |
| --- | ---: |
| 병진 q | 2.18527724e-15 |
| 회전 q | 1.52349857e-15 |
| 병진 v | 5.05292422e-14 |
| 회전 chart rate | 3.51910590e-14 |
| 병진 physical a | 7.59479632e-12 |
| 회전 chart acceleration | 5.32315680e-12 |
| 병진 public A | 6.83806137e-12 |
| 회전 public A | 4.79310284e-12 |
| kinetic energy | 4.90274488e-13 |
| physical strain energy | 2.22044605e-14 |
| drilling energy | 1.86347248e-20 |
| external work | 2.13162821e-14 |
| energy defect | 4.83169060e-13 |
절대차의 단위는 해당 채널의 입력 일관 단위다. 이 비교는 strict/candidate 차이 진단이며
새 tolerance에 대한 합격 판정·정확 byte parity·Abaqus V/a/energy 일치가 아니다.
실제 비선형 시간 정확도·N7·물리 검사의 미해결 사실을 대신하지 않는다.
| 항목 | strict | field 후보 |
| --- | ---: | ---: |
| 기록된 Release CLI 시간(초) | 6350.7895521 | 5662.1448538 |
| 양의100증분 outer 보정 합 | 204 | 171 |
| accepted 반복 횟수 분포 | 2회96증분·3회4증분 | 1회29증분·2회71증분 |
관측 시간은688.6446983초,10.8434501% 감소했고 strict/candidate 비율은1.1216226이다.
후보 실행은 정확도 비교 목적이었고 전원·측정 격리 조건 인증이 없어 **공식 speedup으로
확정하지 않는다**. Full100 inner/요소 평가/factor/solve/RHS·단계 비용은 미측정이다.
첫 증분 개발 계수와 시간을 전체 비용으로 외삽하지 않았다. 알려진 수치 실패의 장시간 반복을
피하는 기존 계획에 따라 추가 solver 실행 없이 완료된 결과를 재사용했다.
원시 진단은 [full-state-comparison.json](../../.build/tolerance-experiment/resume-20261019-170632/full-state-comparison.json)과
[프레임 상세](../../.build/tolerance-experiment/resume-20261019-170632/full-state-frame-details.json)에 있다.
문서·읽기 전용 진단만 추가했으므로 전체 build/test를 반복하지 않았으며, 변경 없는 source와
보존된 전체 검증 evidence를 hash로 확인하고 수치·링크·정적 검사를 수행했다.
보류10개·N7·자료 부재·공식 성능 조건은 후속 과제다. 주 개발 branch 병합·push·release는 하지 않았다.