docs: record field-policy validation failures and adoption limits

This commit is contained in:
KOKO\Mimi
2026-10-19 08:03:14 +09:00
parent 818046c397
commit 626f7da880
7 changed files with 221 additions and 60 deletions
+18 -10
View File
@@ -1,18 +1,20 @@
# Abaqus 수렴 허용치 조사와 FESA 대응
조사일: 2026-10-18. FESA 조사 기준: `43867d0`.
상태: 문헌·코드 조사와 승인된 후보 정책의 수식 계약이다. 구현·성능 실험 통과 보고가 아니다.
2026-10-19 실험 branch에서 공개 field 규칙을 MITC4 HHT의 실제 종료에 연결했다.
Native/CTest 전체는 각각987 PASS·10 FAIL·1 SKIP이며, 공식 후보 성능 비교는 미성립이다.
구현·물리 검증·측정의 상세 근거와 한계는 [실험 결과](results.md)에 기록했다.
승인된 후보의 시험 가능한 수식·분기 우선순위·평균 이력·로그 계약은
[외부 field 수렴 정식화](formulation-convergence.md)를 따른다. 아래는 조사 당시 코드와
공개 기본값의 비교이며, 후보 구현 완료를 뜻하지 않는다. 정식화는 2025 공개 STRICT
공개 기본값의 비교다. 현재 후보는 이 정식화를 실제 사용한다. 정식화는 2025 공개 STRICT
규칙과 비공개 부분의 명시적 FESA 대응을 구분하며 실제 2024 설정과의 동일성을 주장하지 않는다.
## 조사 결론
Abaqus/Standard의 일반 비선형 평형 기준은 잔차 비율 **0.005**, 해 보정 비율
**0.01**이다. 병진과 회전을 각각 검사한다. FESA의 현재 MITC4 HHT는 힘·모멘트
잔차와 q/v/a/A 보정량에 **1e-10**을 사용한다. 완화 실험을 검토할 근거는 있으나,
**0.01**이다. 병진과 회전을 각각 검사한다. 조사 당시 `43867d0`의 MITC4 HHT는 힘·모멘트
잔차와 q/v/a/A 보정량에 **1e-10**을 사용했다. 완화 실험을 검토할 근거는 있으나,
양쪽의 정규화와 검사 대상이 달라 숫자의 비로 정확도나 실행시간을 예측할 수 없다.
일반 기준값의 근거는 [Abaqus 공식 해석 지침의 제어값 설명][S1]이다.
@@ -146,9 +148,9 @@ Abaqus에는 수렴 실패 상태도 받아들이는 `DIRECT=NO STOP`이 있지
Explicit 안정시간 기준을 모두 열거한 문서는 아니다. 공개 문헌에서 확인하지 않은
Abaqus 내부 직접분해·pivot·rank 판정 숫자는 추측하지 않았다.
## 6. 현재 FESA 기준과 소유 위치
## 6. 조사 시점 FESA 기준과 소유 위치
| 대상 | 현재 판정 | 근거/실험 시 취급 |
| 대상 | 조사 시점 판정 | 근거/실험 시 취급 |
| --- | --- | --- |
| MITC4 비선형 정적 | 잔차·보정 상대 1e-2; 외력 또는 증분 scale=0에서 typed absolute 1e-3 | [공개 기준](../../include/fesa/analysis/nonlinear_static_control.h), [실제 분기](../../src/fesa/analysis/nonlinear_static_control.cpp); 동해석과 별도 |
| Shell HHT 외부 Newton 잔차 | 병진/회전 별 `max|r|/max(scale) <=1e-10` | [조립과 scale](../../src/fesa/analysis/hht_dynamic_assembly.cpp), [ResidualRecord](../../src/fesa/analysis/hht_reduced_procedure.cpp) |
@@ -162,20 +164,26 @@ Abaqus 내부 직접분해·pivot·rank 판정 숫자는 추측하지 않았다.
| hidden 위치/rate·rank·null | 별도 1e-10/1e-12 등의 물리·대수 검사 | [algebra](../../src/fesa/analysis/hht_dynamic_algebra.cpp), [기능 요약](../hht-implicit-dynamics/README.md); 일괄 완화 제외 |
| 선형 정적·고유치·열 | 각 기능별 독립 기준 | 이번 MITC4 동해석 실험의 자동 변경 대상 아님 |
HHT의 scale은 외력과 요소별 physical/drilling force, convective inertia 및 질량×가속도
항들의 **상쇄 전 크기**를 누적한다. Abaqus의 q̃와 동일하지 않다. 현재 보정 기준도
조사 당시 HHT의 scale은 외력과 요소별 physical/drilling force, convective inertia 및 질량×가속도
항들의 **상쇄 전 크기**를 누적한다. Abaqus의 q̃와 동일하지 않다. 당시 보정 기준도
`δq/Δq`가 아니라 특성길이·시간간격에 기반하므로 `1e-10 → 0.01`은 단순 완화 이상의
의미 변경이다. 정적은 이미 상대 1e-2이므로 Abaqus의 Rn=5e-3 채택이 숫자상 더 엄격할
수도 있다. “FESA 전체가 Abaqus보다 엄격하다”로 일반화할 수 없다.
현재 실험 후보는 이 표의 외부 종료를 field 평균·증분 대비 보정으로 교체했고 기존 strict
잔차·q/v/a/A 크기는 진단으로 보존했다. 내부 산술·frame0·전역 평형은 별도로 유지한다.
## 7. 성능 가설과 적용 전 확인
확인된 사실은 엄격한 HHT 종료 기준과, 외부 Newton 외에도 비용이 큰 내부 root·
요소 도함수·조립 경로가 존재한다는 점이다. 허용치가 실제 장시간 실행의 주원인인지는
현재 측정하지 않았다. [기존 성능 기록](../calculation-performance/README.md)의
조사 당시에는 측정하지 않았다. 이후 같은 local 근사본의 strict 공식 실행은
6350.7895521초/native0을 확보했지만, 물리 실패가 남아 공식 후보100증분은 미실행이다.
첫 증분의 호출 수 감소만으로 전체 병목이나 가속을 확정하지 않는다.
[기존 성능 기록](../calculation-performance/README.md)의
6372.325621초는 과거 source의 단일 baseline으로 최신 revision의 측정값이 아니다.
다음 실험에서 외부/내부 반복 수, 요소 평가 수, factor/solve 수, 단계별 시간과
추가 실험에서 전체 증분의 외부/내부 반복 수, 요소 평가 수, factor/solve 수, 단계별 시간과
종료를 지연시킨 채널을 함께 측정해야 한다. 내부 구속 solve가 대부분의 시간을 쓰면
외부 Newton 기준만 바꿔도 효과가 작을 수 있다. 기준을 넓혀 성공한 것과 해의 정확도가
유지된 것을 구분하고, U 비교와 별도로 V/physical a·구속·시간수렴을 확인해야 한다.
+10 -6
View File
@@ -1,9 +1,11 @@
# MITC4 HHT에 Abaqus 수렴 규칙을 적용하는 실행 계획
작성일: 2026-10-18. 조사 기준 source: 43867d0.
상태: 실제 구현·측정·검증을 위한 개정안. 이번 ready에서는 계획 문서만 수정한다.
수정안 승인 후 go는 **실제 코드 수정·빌드·FESA 실행·성능 측정·정확도 검증**을 수행한다.
이 계획의 Abaqus 외부 Newton 규칙 구현·측정은 아직 실행하지 않았다.
2026-10-19 승인된 실행 결과: 외부 field 규칙을 실제 HHT 종료에 연결하고 strict 기준 실행,
1증분 후보 진단, 두 Debug 경로 전체 검사와 별도 비교를 수행했다.
Native/CTest는 각각987 PASS·10 FAIL·1 SKIP이다. 물리 실패 분기에 따라 공식 후보100증분은
미실행이며 전체 가속·정식 채택은 미확정이다. 상세 실행 증거는 [실험 결과](results.md)에 있다.
아래는 재현할 실행 순서와 유지 조건이며, 미충족 검증을 완료로 바꾸지 않는다.
2026-10-18 후속 사용자 지시로 별도 [요소 local 근사 실험](local-kernel-experiment.md)을
먼저 적용했다. 아래 요소 수식·질량 보존 조건의 명시적 예외는 polar 1회, 회전/Jacobian
@@ -23,7 +25,7 @@ MITC4 implicit dynamics의 외부 Newton 종료에 **Abaqus/Standard 2025의 공
T1의 [외부 field 수렴 정식화](formulation-convergence.md)가 T3/T4의 수치·분기·로그 계약이다.
요소 signed total과 source occurrence 개수, current trial 평균 후보와 accepted commit,
보정/증분 chart, 비이차 검출의 명시적 FESA 대응 및 독립 oracle 경계를 이 문서에 고정했다.
이는 수식 계약 완료이며 실제 후보 구현이나 정확도 검증 완료를 뜻하지 않는다.
이 수식 계약은 실제 후보에 연결했다. 후보의 비선형 시간 정확도와 전체 물리 검증은 미완료다.
공개 규칙을 FESA의 기존 물리량에 대응하는 실험이다. 잔차는 기존 full free endpoint
E=I+fint-F, field는 병진 u와 total rotation-vector φ, 회전 flux는 generalized moment다.
@@ -110,8 +112,10 @@ Probe를 추가하더라도 공식 실행에서는 꺼져야 하며 수학 계
## 정확도·전체 회귀·실패의 처리
q/v/physical a의 마지막 두 refinement 감소·차수≥1.8, finest normalized error≤1e-4,
기존 N7 해상도 판정을 유지한다. C08b 미판정이나 일반 비선형 HHT의 energy 의미를
q/v/physical a의 마지막 두 refinement 감소·차수≥1.8과 기존 N7 해상도 판정을 유지한다.
후속 승인에 따른 관련 테스트 오차는1e-3이다. 기존 strict algebra의 finest1e-4 검사도
그대로 통과했으나 이를 실제 비선형 후보의 정확도 증거로 대신하지 않는다.
C08b 미판정이나 일반 비선형 HHT의 energy 의미를
결과에 맞춰 다시 정의하지 않는다. 기존 물리 기준을 통과하지 못하면 수치 부적합으로 보고한다.
관련 검사 후 전체 MSVC x64 Debug build와 unit/integration/reference 세 executable,
+115 -5
View File
@@ -1,8 +1,10 @@
# 외부 수렴 정책 실험 결과 — T2 기준과 T6 후보 보존
# MITC4 HHT 외부 field 수렴 정책 실험 결과
기록일: 2026-10-19. **정상 strict 기준은 확보했으나 전체 실험·물리 검증은 미완료**다.
T6 후보는 별도 1증분 개발 진단과 계측 OFF Release 실행물 보존까지 수행했다.
공식 100증분 후보 실행·reference 비교·성능 비교는 미성립이며 가속률이나 채택 가능성을 주장하지 않는다.
기록일: 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 비교·성능 비교는 미성립이며 전체 검증 완료·가속 확인·정식 채택으로 보고하지 않는다.
## 기준과 원시 증거
@@ -223,7 +225,8 @@ inertia=internal−failure, solve=RHS와 exclusive ns 합=procedure inclusive를
같은 짧은 입력의 strict ON과 후보 ON HDF5 frame0/1의 40개 numeric dataset을
shape/type/finite 및 inventory 확인 후 비교했다. 22개는 정확 byte 일치하고
frame1의18개는 달라 **정확 byte parity는 미통과**다. nodal q/v/physical a/A의
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와
@@ -257,3 +260,110 @@ Field21개와 T4 후보 종료/물리 후속 gate 및 T5 강체 oracle identity
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`는 사용하지 않았다. 후보 MITC4 100증분 결과는
앞서 설명한 수치 실패 분기로 미실행이며 strict baseline이나 1증분 결과로 대신하지 않는다.
## 판정과 다음 검증 조건
**구현됨·수치 부적합·일부 검증 미완료·공식 성능 비교 미성립**으로 판정한다.
Strict 공식 6350.7895521초, 1증분 개발 호출 수 감소, 전체 회귀 실행 사실은 서로 다른 근거다.
이를 합쳐 전체 가속이나 정식 채택 가능으로 보고하지 않는다.
다음에는 local 근사의 독립 미분/물리 정확도와 후보 후속 acceptance 실패의 원인을 분리하고,
실제 비선형 후보의 시간 정확도와 N7 판정을 확보해야 한다. 그 뒤 같은 조건의 공식 후보
100증분과 정식 HHT 비교를 수행해야 전체 speedup을 판정할 수 있다.
현재 branch와 원시 자료를 보존했으며 주 개발 branch 병합·외부 solver·release는 수행하지 않았다.