86b740eebf
사용자 후속 결정에 따라 이번 실험을 변위 검증 통과와 실패10개 보류로 수용한다. 기존 전체 검사 FAIL/SKIP과 수치 기준을 보존한다. 전체101프레임 q/v/a/A/energy 차이와 관측 시간·outer 횟수를 추가한다. 공식 성능 조건·전체 비용·시간 정확도 미확보는 후속 과제로 남긴다. 문서만 변경: source450/reference34 hash 불변, 로컬 링크87개와 정적 검사 통과.
431 lines
29 KiB
Markdown
431 lines
29 KiB
Markdown
# 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는 하지 않았다.
|