Files
FESADev/docs/abaqus-tolerance/results.md
T
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

431 lines
29 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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모델 비교는 통과했다. T6/T7 당시 MITC4 후보 100증분은
미실행이었다. 후속 사용자 요청으로 Release 후보 원본을 5662.144854초에 완료하고 U 비교를 통과했다.
[8개 정식 모델 변위·빌드·시간 비교](reference-displacement-comparison.md)에 새 근거를 기록했다.
전체 검증 완료·가속 확인·정식 채택으로 보고하지 않는다.
## 기준과 원시 증거
측정 source는 `78cb33920742a91b4801788fbcc953d3306b0884`다.
`d7f6d0c`와 제품 source·두 빌드 설정의 diff는 exit 0이다. 원래 조사 기준
`43867d0`와 달리 사용자 승인 local kernel인 polar 1회, ExpSkew/Jacobian 3차,
질량 gate와 관련 테스트 오차 `1e-3`을 사용했다. 외부 Newton은 잔차와
q/v/a/A 보정 `1e-10`, 최대 100회인 기존 strict 경로다.
원시 자료는 **부모 작업공간**의 다음 ignored 위치에 보존했다. T2 worktree의
`.build`를 정리해도 아래 자료는 별도로 남는다.
```text
.build/tolerance-experiment/go-20261018/baseline/
source/strict-source-78cb339.zip, source-hashes.json, revision.txt
runtime/ # 공식 EXE·DLL·PDB
runtime/tests/ # 같은 Release 검사 EXE·DLL·PDB
build/ # 실제 명령·전체 로그·각 exit·선택 CMake compile 명령
run/ # 새 INP·CSV 복사본·로그·새 HDF5
execution.json, runtime-hashes.json, test-runtime-hashes.json
input-hashes-before.json, input-hashes-after.json, environment-before.json
reference-comparison.json, official-log-summary.json
development-one-increment/ # 최초 ON 진단, 보완 전
development-off-control/ # 보존된 공식 OFF EXE의 1증분 대조
development-final/ # 보완 후 최종 ON 진단·카운터 관계 검증
```
| 보존 대상 | SHA256 |
| --- | --- |
| strict source ZIP | `0B655E0257720AD9CEF31274931578FE17C4456B9988C158A61DF88D93792BED` |
| 공식 fesa.exe | `3CDB5D9D35F6AD95781044BD311ECB35C9FB121780EF81FC535434BF3515172C` |
| 정식 INP 및 공식 작업 복사 | `B8922243CA8DDFE20B1DD39F3123207F789A1A75F6B10DBB6B0BC0B5A40DFFF5` |
| 정식 변위 CSV 및 복사 | `422ECF17609E14FD119D60A3D5AF7A0D1BC4A95E0F556608A7D791E2718C56C5` |
| 새 공식 HDF5 | `55EF1FFAAE061311F3C1AE705824658B668A818D5F1F7D27BB538CA66EE4792C` |
원본 reference는 실행·수정하지 않았고 전후 hash가 같다. 기존 결과를 재사용하지 않았다.
## 계측 없는 공식 실행
`MSBuild FESA.sln /m:2 /p:Configuration=Release /p:Platform=x64`는 native exit 0이다.
VS 18.11/MSVC 14.51 x64, `/O2 /Ob2 /fp:precise /MD`, staged MKL 2026.1,
TBB 2023.1, HDF5 2.1.1, Intel runtime 2026.1을 사용했다.
기존 Hex8 검사 source의 C4334 경고 1개가 있었고 오류는 없었다.
호스트는 KOKO, Ryzen 7 5800H(8코어/16논리), 전원은 고성능이다.
관련 thread 환경변수와 PATH를 `environment-before.json`에 기록했고 변경하지 않았다.
실제 worker 수를 고정·계측한 결과는 아니다. 후보 공식 측정도 같은 환경을 사용해야 한다.
측정 중 다른 build/test/solver를 실행하지 않았다. 워밍업 없이 정확히 1회 실행했다.
| 항목 | 실제 결과 |
| --- | --- |
| 명령 | 보존된 `runtime/fesa.exe run/shellNL-dyn-meshfine.inp` |
| 입력 | dt=.1, T=10, 100증분, 729 nodes, 676 elements |
| 시작/종료 UTC | 2026-10-18 15:01:20.6895159 / 16:47:11.4199462 |
| native / wrapper exit | 0 / 0 |
| 공식 elapsed | **6350.7895521초** |
| 프로세스 CPU | 18021.3125초; elapsed와 다른 값 |
| 새 HDF5 | 126254676 bytes, schema2, 729 nodes / 101 frames |
| peak working set | 종료 후 API가 null을 반환하여 미확보 |
| 정식 비교 | comparator exit 0, 사전검사 통과, U blocking 실패 0, UR 경고 200 |
| U 최대 family relative RMS | 0.002282424502275574 |
정식 비교는 기존 9-node U blocking/UR warning 정책 그대로 수행했다.
전체 441774 변위 scalar의 identity/finite 확인 후 202 families를 평가했고
near-zero 1%, 일반 상대 5%, RMS 1%, zero-scale exact-zero를 유지했다.
Python의 로컬 uv cache를 child `PYTHONPATH`로 읽어 numpy 2.4.6/h5py 3.16.0을 사용했다.
설치·다운로드·캐시 쓰기를 하지 않았다. 실제 argv와 exit는 원시 로그에 있다.
공식 hht-log-v1에서 양의 accepted 100건, 평가 204건이며 accepted iteration 합은
**outer applied correction 204회**다. 96증분은 2회, 4증분은 3회다.
잔차가 통과했지만 보정이 실패한 평가는 27건이다. 보정 채널별 실패 평가 건수는
u의 q/v/a/A가 102/103/104/104, 회전은 100/100/102/102다.
이는 중복을 허용한 로그 채널 진단이며 배타적 실행시간이나 후보의 절약 가능 회수가 아니다.
## 별도 1증분 개발 계측
기존 4개 물리·미분 검사 실패가 남은 상태에서 동일 100증분을 장시간 반복하지 않았다.
승인된 별도 개발 입력 복사에서 T만 `.1`로 줄였고 dt=.1과 local kernel·strict 종료는 유지했다.
이 입력 SHA256은 `79D1C09FC5AFB792312F1908E13D71ABC228D98D10B438B91412A9BFA4C95A50`다.
계측은 기본 컴파일 OFF다. Native는 `/p:FesaHhtDevelopmentProbe=true`, CMake는
`-DFESA_HHT_DEVELOPMENT_PROBE=ON`으로 켜고, ON 실행에서만
`FESA_HHT_PROBE_OUTPUT=<새 sidecar 경로>`를 설정한다. 정상 OFF 객체에는 해당 환경 키가 없다.
추가 요소 평가·수치 보정·판정 완화 없이 기존 호출 앞의 계수와 serial scope의 정수 ns 타이머만 쓴다.
단일 procedure 개발 실행용이며 동시 다중 procedure 계측을 지원한다는 주장은 없다.
병렬 요소 callback은 atomic 계수만 쓰고 타이머/단계 배열은 serial thread만 수정한다.
최종 개발 실행 native exit 0, 개발 elapsed 77.5268139초다. 이는 공식 시간이 아니다.
최초 ON, OFF 대조, 보완 후 최종 ON은 모두 별도 파일로 보존했다.
| 최종 sidecar 계수 | 값과 범위 |
| --- | --- |
| outer_applied_correction / inner_applied_correction | 3 / 1; 실제 좌표 갱신만 포함 |
| assembly_calls | 14 |
| assembly_internal_evaluation | 9464 = 14×676 |
| assembly_internal_failure | 3; 대체 시작 trial 평가의 실패이며 최종 해석 실패가 아님 |
| assembly_inertia_evaluation | 9461 = 9464−3; internal 실패 뒤 생략된 관성 호출 제외 |
| constraint_internal_evaluation | 6760; cache miss의 실제 추가 EvaluateTrial만 포함 |
| logical_factor_call / logical_solve_call / logical_rhs | 1274 / 7516 / 7516 |
Solver 수는 HHT 경계 forwarding wrapper의 논리 호출이다. 실패 시도도 세며 vendor의
phase11/22/33 전체 호출수로 해석하지 않는다. inner correction도 stagnation 때문에
계산만 하고 적용하지 않은 solve는 제외하지만 logical solve에는 포함한다.
계수 관계와 공식 첫 증분의 outer 3회 일치는 `counter-check.json`에서 assert했다.
| 중복 없는 최종 단계 시간 | 초 |
| --- | ---: |
| procedure_other | 30.6919325 |
| inner_graph | 26.6134860 |
| assembly | 13.8891082 |
| outer_linear | 0.1445448 |
| physical_rates | 0.2650750 |
| factor | 5.0312963 |
| solve | 0.5715257 |
| 합계 = procedure inclusive | 77.2069685 |
각 `_exclusive_ns`는 자식 시간을 뺀 값이고 합계가 `procedure_inclusive_ns`와 정확히 같음을
assert했다. ExecuteReducedHht 경계이므로 CLI 입력·최종 HDF5 finalize·sidecar I/O를 제외한다.
요소 kernel 시간은 병렬 wall-time을 포함한 assembly 범위이며 각 요소 CPU 시간의 합이 아니다.
전체 100증분의 inner/요소/factor/solve 비용과 후반 채널 분포는 **계측하지 않았다**.
첫 증분 계수·시간을 100배하거나 후보 전체 비용으로 외삽하지 않는다.
## 정확 byte parity와 검증 한계
공식 frame0/1과 개발 결과의 40개 numeric dataset을 identity/shape/type/finite 확인 후 비교했다.
ON 최초·ON 최종·보존된 공식 OFF EXE의 짧은 입력 대조 모두 22개 dataset이 byte 일치하고
frame1의 18개 dataset은 불일치했다. **정확 byte parity는 미통과**다.
최종 ON의 q/v/physical a 최대 절대차는 각각 6.776263578034403e-21,
2.168404344971009e-19, 6.938893903907228e-18이고 energy는 8.881784197001252e-16이다.
거의 영인 값의 scalar 상대오차가 클 수 있으므로 최대 절대차만으로 통과 판정하지 않는다.
동일 보존 OFF EXE의 대조에서도 q/v/a 최대 절대차는 1.3552527156068805e-20,
3.552713678800501e-15, 5.684341886080802e-14였다. T 단축·반복 실행·기본 thread 조건·
컴파일/계측 영향을 완전히 분리하지 못했으며 원인을 하나로 단정하지 않는다.
새 parity tolerance나 floor를 도입하지 않았다. dataset별 차이 수·최대 절대/상대차·첫 위치와
원본/실제 bytes는 각 `parity-details.json`에 보존했다. NaN을 동일 처리하지 않고 finite를 요구했다.
독립 source 검토에서 산술·평가·진단 순서 변경이 없다고 확인한 사실은 실행 parity 통과와 별개다.
계측 검사는 no-op에서 2FAIL/native1을 확인한 뒤 카운트·중첩 배타 시간·solver forwarding/
실패 보존·실제 inner 1회/0회 갱신의 4개 검사를 native0으로 통과했다.
실제 inner 계수 검사는 CMake OFF operators 객체를 연결하면 1FAIL/native1, ON이면 4PASS/native0다.
Standalone 준비 중 link/include/MKL runtime 오류와 짧은 clock tick assertion 실패도 별도 보존했다.
짧은 tick은 0ns를 허용하고 scope 진입 수와 시간 분할의 exact equality를 검사한다.
Standalone에 필요한 기존 설치의 sequential DLL은 테스트 전용이며 공식 runtime에 추가하지 않았다.
Native ON CLI 최종 빌드는 exit0(경고0), CMake Release 기본 OFF의 변경 production 3개와
새 검사 객체 compile은 exit0, ON 새 검사 객체 compile도 exit0이다. source 등록을 양쪽에 맞췄다.
OFF에서는 새 검사 identity가 없고 ON에서는 4개다. 전체 CMake link/CTest나 전체 Debug 검사는
이번 T2에서 실행하지 않았고 후속 전체 회귀를 대신하지 않는다.
기존 local-kernel의 4FAIL은 [기록](local-kernel-experiment.md)을 유지하며 재실행/해결한 것으로 보고하지 않는다.
U 통과는 V/a/energy의 외부 검증이나 기존 물리 실패의 해결을 뜻하지 않는다.
T2 판정은 **기준 보존 완료·개발 진단 한정 확보·전체 검증 미완료**다.
후보 측정, 전체 100증분 개발 비용, 정확 parity 원인 분리와 필수 전체 물리/회귀 검증은 남았다.
## T6 후보 실행물과 공식 측정 미실행
T6 source는 `0c88cb24c84abc4b3561a1e7975df7a4125134f1`, branch는
`dryforge/tolerance-t6`다. 제품 source와 probe·판정 기준은 수정하지 않았다.
T4 최종 parent `dd54b0a`와 src/include/msvc 및 CMake 설정의 Git identity가 같고,
T4 manifest의 제품 source 5개와 cached probe ON CLI SHA256
`6C9264282B117A35A46C3550CAE215B096F60B46F0105B929BA9A1979EBF547F`가 일치한다.
T5는 검사와 문서만 변경했다. Source ZIP, 파일 hash, 실행물과 DLL, 실제 명령,
환경·전원 및 raw 자료는 부모 작업공간의 다음 위치에 별도 보존했다.
```text
.build/tolerance-experiment/go-20261018/
candidate/source/ # pinned source ZIP·SHA256
candidate/development-runtime/ # cached probe ON EXE·7 DLL·PDB
candidate/development-one-increment/ # 새 짧은 입력·native exit·로그·HDF5·probe
candidate/runtime/ # 새 full Native Release probe OFF 실행물
candidate/build/ # ON/OFF compile 기록·OFF 명령·raw·exit
candidate/official-input/ # 정식 INP·CSV의 새 hash 확인 복사, 미실행
T6/ # preflight·진단 script·metadata·검토 기록
```
[T5 물리 검증](physics-validation.md)의 Release153 결과는 144PASS/8FAIL/1SKIP,
native exit1이다. 독립 D3 두 검사, drilling gradient, C08 pointwise 및 strict algebra
시간 controller 네 실패와 후보 비선형 시간 정확도 R8 미충족이 남는다.
보존 strict C08 대조도 5FAIL이며 이를 후보 정확도 통과로 해석하지 않는다.
계획의 명시된 실패 분기에 따라 같은 긴 실행을 근거 없이 반복하지 않았고,
**공식 dt=.1/T=10/100증분 후보 실행은 시작하지 않았다.**
따라서 후보 공식 elapsed, strict 대비 Δ·speedup, 729 nodes/101 frames 완결 결과와
정식 9-node U blocking/UR warning reference 판정은 모두 **not-established**다.
T2 strict 공식 6350.7895521초와 아래 개발 시간을 비교하지 않는다.
## T6 초기화와 1증분 개발 진단
T2 `baseline/development-final`의 T=.1/dt=.1 입력을 새 경로에 복사했고 SHA256
`79D1C09FC5AFB792312F1908E13D71ABC228D98D10B438B91412A9BFA4C95A50`가 같다.
공식 100증분 입력과 별개다. KOKO/Ryzen 7 5800H, 고성능 전원, 기존 thread 환경과
동일 local polar1/inertia3/mass gate1e-3 및 cached MSVC Release probe ON을 사용했다.
짧은 고유 TMP/TEMP `C:/ft6d`와 새 `FESA_HHT_PROBE_OUTPUT=.../probe.txt`를 설정했다.
상속 GoogleTest 선택 환경은 제거했다. 실행 전 guard는 오래된 MSBuild PID5112를
발견해 native launch 전에 중단했다. CPU2.640625초 불변·cl/link/solver/test 부재와
T4/T5 종료 확인 후 idle worker만 제외했고 프로세스는 종료하지 않았다.
두 preflight와 근거를 T6에 보존했으며 guard 대기는 elapsed에 포함하지 않는다.
실제 native 실행은 1회다. UTC `2026-10-18T18:07:36.7511886Z`부터
`18:08:41.2302276Z`까지 **64.4754692초**, native exit0이며 새 HDF5는
2851989 bytes, frame0/1 두 frame이다. 이는 계측 ON 초기화+1증분 개발 시간이고
공식 시간·전체 비용·후반 증분 비용으로 외삽하지 않는다.
| 동일 계수 정의의 1증분 진단 | T2 strict ON | T6 candidate ON |
| --- | ---: | ---: |
| outer / inner applied correction | 3 / 1 | 2 / 1 |
| assembly calls | 14 | 12 |
| internal evaluation / failure | 9464 / 3 | 8112 / 3 |
| inertia evaluation | 9461 | 8109 |
| constraint internal evaluation | 6760 | 5408 |
| logical factor | 1274 | 1271 |
| logical solve / RHS | 7516 / 7516 | 7513 / 7513 |
실제 호출 경계와 forwarding 의미는 T2와 같다. Internal=assembly×676,
inertia=internal−failure, solve=RHS와 exclusive ns 합=procedure inclusive를
`counter-comparison.json`에서 확인했다. 내부 실패3은 대체 시작 trial의 실패이며
최종 해석 실패가 아니다. 카운터 감소를 공식 가속률로 변환하지 않는다.
같은 짧은 입력의 strict ON과 후보 ON HDF5 frame0/1의 40개 numeric dataset을
shape/type/finite 및 inventory 확인 후 비교했다. 22개는 정확 byte 일치하고
frame1의18개는 달랐다. 후보와 strict의 동일 bytes를 요구하는 합격 검사는 아니며,
정책 변경에 따른 전체 state 차이 진단이다. nodal q/v/physical a/A의
최대 절대차는 각각 `2.0328790734103208e-20`, `3.552713678800501e-15`,
`5.684341886080802e-14`, `5.684341886080802e-14`이며 energy는
`8.171241461241152e-14`다. Angular velocity/acceleration·triad·director와
force/reaction/residual·element 결과도 전체 dataset별 차이를
`state-differences.json`에 보존했다. 이는 정책 차이의 진단 숫자이며 외부 truth,
정확도 승인 또는 새 parity tolerance가 아니다. T2 ON/OFF의 기존 ULP 차이도 미해결이다.
## T6 계측 OFF Release 보존과 정적 확인
개발 진단 종료 후 VS18.11.0/MSVC14.51.36231 x64에서 전체
`MSBuild FESA.sln /m:2 /p:Configuration=Release /p:Platform=x64 /p:FesaHhtDevelopmentProbe=false`
를 실행했다. 실제 명령에는 `/verbosity:minimal`만 추가했고 native exit0이다.
기존 Hex8 검사 C4334 경고1개를 보존했으며 검사 실행을 빌드 통과로 세지 않는다.
새 OFF CLI의 SHA256은
`449196EB79EFAB3C62B8DAC4B73C3C76E97EC76F6A77F9D80CE1EE5C8C1F0CFA`,
pinned source ZIP은
`BF2D12688F778A8F9010C3FE086AA9D5E226209AAF1893AE84EBE841BF0F9C9B`다.
EXE/PDB/7개 DLL을 `candidate/runtime`에 보존했으며 DLL SHA는 T2 strict와 모두 같다.
ON/OFF solver·CLI compile tlog를 각각 보존했다. OFF solver compile에 probe define이
없고 `/O2 /Ob2 /MD /fp:precise`를 확인했으며 102개 solver 객체에
`FESA_HHT_PROBE_OUTPUT` 문자열이 없음을 검사했다.
OFF unit discovery native exit0,883개이며 ON887개에서 probe4개가 빠진 목록이다.
Field21개와 T4 후보 종료/물리 후속 gate 및 T5 강체 oracle identity가 존재한다.
이는 discovery 확인이며 unit 실행 통과가 아니다. `T6/verification.json`,
`verify-artifacts.raw.txt`, `commands.txt`에 실제 범위·exit·미실행 상태를 남겼다.
정식 INP/CSV 새 복사 hash는 각각 기존 T2의 `B8922243...DFFF5`,
`422ECF17...8C56C5`와 같고 원본 전후 hash도 같다. 공식 복사본은 실행하지 않았다.
문서 diff/링크/기록 숫자를 정적으로 검토했으며 tracked 변경은 이 문서뿐이다.
T6은 공식 장시간 성능과 reference 통과를 확정하지 못한 **DONE_WITH_CONCERNS**다.
수치 부적합 해결·기준 완화는 수행하지 않았다. T7의 전체 Native Debug·CMake CTest·
별도 Python·필수 reference 검증은 후속 범위이며 이 한정 진단이 대체하지 않는다.
## 실제 구현과 유지한 경계
수치 계약은 [field 정식화](formulation-convergence.md), 실제 물리 검증은
[물리 검증 기록](physics-validation.md)에 보존했다. Private field 계산의 독립 경계 검사
21개, 실제 종료·rollback·로그 연결 검사 11개와 강체 병진의 독립 물리 oracle 1개를 추가했다.
개발 probe 검사 4개는 별도 ON 구성에서 검증했으며 기본 OFF의 998개 등록에는 포함하지 않는다.
힘/병진과 generalized moment/total rotation-vector를 분리해 일반·zero-flux·linear·
estimated correction·nonquadratic 규칙을 실제 종료에 연결했다. 평균은 요소 signed
internal+physical inertia와 외부 source occurrence로 계산하고 accepted 증분에서 한 번 갱신한다.
실제 full endpoint 보정/증분을 사용하며 기존 q/v/a/A `1e-10` 크기는 strict 진단으로 남겼다.
`PrivateCorrectionEqual`, frame0, inner/hidden/rank, 선형·update `1e-12`, 전역 평형 `1e-8`,
기존 HDF5 schema2와 최종 파일 보호는 유지했다. 수렴 뒤 후속 검사 실패를 자동 완화하지 않는다.
출력 성공 전 accepted state를 복사해 commit을 검증하고 로그 flush 뒤 state·private history·
flux history를 함께 공개한다. 누적 frame 이력 복사 비용이 있으며 공식 후보 시간 측정 시
포함해야 한다. 이번에는 그 전체 비용을 측정하지 않았다.
2025 공개 규칙의 FESA 대응이며 비공개 Abaqus 요소·관성·회전·특성길이까지 같다는 뜻은 아니다.
2024 모델 생성 당시 실제 solver 설정도 미확인이다.
## 구성된 전체 회귀 실행
실행 revision은 `710ab39059ab73518e63968067683791a5c8b558`, 실행 증거 commit은
`818046c3975684d37ddd6bcb827099bd27652acf`다. 후자는 tracked 파일 변경 없는 실행 기록이다.
제품 source는 실제 종료 연결 revision `dd54b0a` 이후 바뀌지 않았다.
원시 자료의 기준 경로는 `.build/tolerance-experiment/go-20261018/T7/`다.
| 실행 | 실제 수 | PASS | FAIL | SKIP | native exit |
| --- | ---: | ---: | ---: | ---: | ---: |
| MSVC x64 Debug unit | 883 | 872 | 10 | 1 | 1 |
| MSVC x64 Debug integration | 72 | 72 | 0 | 0 | 0 |
| MSVC x64 Debug reference | 43 | 43 | 0 | 0 | 0 |
| CMake Debug 전체 CTest | 998 | 987 | 10 | 1 | 8 |
| 별도 Python suite | 145 | 145 | 0 | 0 | 0 |
Native 전체도 합계 998개, 987 PASS·10 FAIL·1 SKIP이다. Native build와 CMake
configure/build/discovery는 각각 exit0이다. 실제 실행 identity 998개씩을 discovery와
대조했고 누락·중복은 없었다. 실패 10개와 N7 skip의 identity도 두 경로에서 같다.
Timeout·abort·필터 제외는 없었다. 제품·검사 compile source 223개와 실행 파일 옆 DLL 7개의
SHA가 양쪽에서 일치했다. C++17·Debug CRT와 전용 Hex8 source만 AVX2인 범위도 확인했다.
Native 명시 `/fp:Precise`, CMake 명시 fp 옵션 없음은 실제 설정 관측값으로 남겼다.
실제 명령은 `commands.json`, Native 세 `fesa_*_tests.xml`, `ctest.xml`, 각
`*.raw.txt`/`*.exit.txt`, `registration-and-timeout.json`, `build-configuration-comparison.json`,
`toolchain-environment.json`으로 추적한다. Python은 기존 CP311 캐시 패키지를 쓰는
`run_cached_python.py -m pytest tests -q`로 실행했으며 `python-suite.raw.txt`에 결과가 있다.
패키지를 다운로드하거나 기본 Python의 import 실패를 전체 환경 부재로 처리하지 않았다.
Native unit 뒤 실행 보조 도구가 TMP 이름을 잘라 만든 충돌로 integration 시작 전에 중단됐다.
제품 executable은 시작되지 않았고 고유 TMP 생성만 수정해 남은 단계부터 재개했다.
이미 끝난 build/unit을 반복하지 않았으며 `driver-interruption.json`에 원인·해결을 보존했다.
검사 중 source 574개와 정식 reference 34개의 전체 inventory·SHA는 전후 동일하다.
## 실패·건너뜀과 후보 정확도 한계
| 실제 실패 묶음 | 수 | 관측과 분류 |
| --- | ---: | --- |
| DynamicRotation D3 독립 미분·80자리 anchor | 2 | 대표 오차 약0.228로 승인된 1e-3 초과 |
| ExactDrillingConstraint force gradient/Hessian | 1 | 대표 오차 약0.00329로 1e-3 초과 |
| C08a pointwise·시간 controller·C08b | 5 | hidden defect 약0.00123 및 첫 격자에서 100회 보정 소진. 보존 strict도 같은 5개 실패 |
| 실제 HHT LargeDirect·UniformTranslation | 2 | 후보 field 통과 뒤 각각 mass-null·유한회전 increment2의 triad 일관성 실패 |
마지막 두 identity의 strict 대조는 외부 보정 100회 소진이었다. 특히 strict UniformTranslation은
첫 병진에서 실패해 후보의 후속 유한회전에 도달하지 않았다. 원인이 같다고 단정하지 않는다.
전체 검사명·실패 메시지·build별 실행 identity는 `verification.json`과 XML에 있다.
사용자 승인 local polar1/inertia3/mass gate1e-3와 관련 테스트 오차1e-3을 유지했으며,
통과시키기 위한 추가 허용치·기대값 변경이나 실패 검사 삭제는 하지 않았다.
유일한 SKIP은 `HhtTemporalVerification.C04aFinestReductionComparisonIsNumericallyResolved`다.
이는 binary64/solve 해상도 때문에 비교가 미판정인 N7 항목이며 PASS가 아니다.
독립 강체 병진의 실제 후보 q/v/physical a/A·energy 검사는 통과했지만 상수 가속도 해다.
기존 strict algebra의 시간수렴 통과와 함께 실제 비선형 후보의 q/v/physical a refinement,
차수≥1.8·finest 오차·N7/물리 invariant closure를 대체하지 않는다. 이 범위는 여전히 미충족이다.
## 별도 정식 Hex8 비교와 미확보 자료
같은 최종 제품 source의 보존된 계측 OFF Release로 정식 원본의 hash 확인 새 복사본을 실행했다.
아래 5개는 모두 새 HDF5, CLI exit0, 기존 comparator exit0, precheck·실행 검증·blocking PASS다.
| 모델 | CLI exit | comparator exit |
| --- | ---: | ---: |
| hexa_linearstatic | 0 | 0 |
| hexa_nonlinearstatic | 0 | 0 |
| hexa_freq | 0 | 0 |
| hexa_dynlinear | 0 | 0 |
| hexa_dynnonlinear | 0 | 0 |
보고서·입력·HDF5 SHA는 `objective-gate.json`과 `hex8-reference/<case>/`에 있다.
Release EXE/PDB/7 DLL도 실행 전후 T6 manifest와 일치했다. 이 실행은 정확도 비교이며,
개별 elapsed를 공식 성능이나 과거 baseline 대비 speedup으로 해석하지 않는다.
기존 NT11 reference 검사는 불일치를 diagnostic으로 남기는 동작의 통과다. 외부 열 수치 일치가 아니다.
정식 shellNL-meshfine·shellNL-meshfine_02·shellNL-meshfine-pressure 자료는 없다.
`_02`는 자료 부재와 전용 case identity/비교 계약 미구현이 함께 남는다. 새 필수 thermal
reference도 미제공이다. `reference/temp`는 사용하지 않았다. T6/T7의 후보 MITC4 100증분은
앞서 설명한 수치 실패 분기로 미실행이었다. 후속 새 원본 실행·U 비교는 별도 변위 보고서에 기록했으며,
strict baseline이나 1증분 결과로 대신하지 않았다.
## 최초 실험의 판정과 다음 검증 조건
**구현됨·수치 부적합·일부 검증 미완료·공식 성능 비교 미성립**으로 판정한다.
Strict 공식 6350.7895521초, 1증분 개발 호출 수 감소, 전체 회귀 실행 사실은 서로 다른 근거다.
이를 합쳐 전체 가속이나 정식 채택 가능으로 보고하지 않는다.
다음에는 local 근사의 독립 미분/물리 정확도와 후보 후속 acceptance 실패의 원인을 분리하고,
실제 비선형 후보의 시간 정확도와 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는 하지 않았다.