docs(tolerance): 변위 검증 수용과 보류 검사 및 최종 비교 기록
사용자 후속 결정에 따라 이번 실험을 변위 검증 통과와 실패10개 보류로 수용한다. 기존 전체 검사 FAIL/SKIP과 수치 기준을 보존한다. 전체101프레임 q/v/a/A/energy 차이와 관측 시간·outer 횟수를 추가한다. 공식 성능 조건·전체 비용·시간 정확도 미확보는 후속 과제로 남긴다. 문서만 변경: source450/reference34 hash 불변, 로컬 링크87개와 정적 검사 통과.
This commit is contained in:
@@ -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++ 코드·수치 기준을 변경하거나 전체 검증을 다시 실행하지 않았다.
|
||||
Reference in New Issue
Block a user