diff --git a/docs/abaqus-tolerance/README.md b/docs/abaqus-tolerance/README.md index 456325e..935046a 100644 --- a/docs/abaqus-tolerance/README.md +++ b/docs/abaqus-tolerance/README.md @@ -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의 측정값이 아니다. diff --git a/docs/abaqus-tolerance/application-plan.md b/docs/abaqus-tolerance/application-plan.md index e6889a7..3511ff4 100644 --- a/docs/abaqus-tolerance/application-plan.md +++ b/docs/abaqus-tolerance/application-plan.md @@ -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 경로 전체 검사와 별도 비교를 수행했다. diff --git a/docs/abaqus-tolerance/reference-displacement-comparison.md b/docs/abaqus-tolerance/reference-displacement-comparison.md new file mode 100644 index 0000000..4aa2437 --- /dev/null +++ b/docs/abaqus-tolerance/reference-displacement-comparison.md @@ -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++ 코드·수치 기준을 변경하거나 전체 검증을 다시 실행하지 않았다. diff --git a/docs/abaqus-tolerance/relative-error-review.md b/docs/abaqus-tolerance/relative-error-review.md new file mode 100644 index 0000000..c7267f3 --- /dev/null +++ b/docs/abaqus-tolerance/relative-error-review.md @@ -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의 불일치 및 실행 실패를 별도로 해결해야 한다. diff --git a/docs/abaqus-tolerance/results.md b/docs/abaqus-tolerance/results.md index b2fc683..92d8e13 100644 --- a/docs/abaqus-tolerance/results.md +++ b/docs/abaqus-tolerance/results.md @@ -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는 하지 않았다. diff --git a/docs/hht-implicit-dynamics/README.md b/docs/hht-implicit-dynamics/README.md index e6162c1..03faa99 100644 --- a/docs/hht-implicit-dynamics/README.md +++ b/docs/hht-implicit-dynamics/README.md @@ -2,6 +2,11 @@ ## 범위와 현재 상태 +2026-10-19 후속 사용자 승인으로 이번 수렴 규칙 실험은 **Abaqus 변위 검증 통과·실패10개 보류로 조건부 완료**한다. +[수용 범위](../tracking/decisions/0011-tolerance-experiment-acceptance.md)를 따르며, 아래 미해결 물리 검사· +N7와 실제 FAIL/SKIP은 보존한다. 전체 상태729절점·101프레임 진단과 관측 시간 비교는 +[최종 결과](../abaqus-tolerance/results.md#후속-승인과-남은-단계의-완료)에 있다. 공식 speedup은 미확정이다. + 2026-10-18 후속 사용자 지시로 polar 반복 12→1회, 관성 회전/Jacobian 급수 32→3차, 질량 대칭·null/Gram·분해 복원 검사 1e-12→1e-3의 local 근사 실험을 적용했다. 최초 엄격한 기준의 관련 요소 46개 중 5개가 실패했다. 후속 사용자 지시로 관성·접선· @@ -25,9 +30,11 @@ shell schema v2**다. 과거 consistent 질량·full-coordinate v1 근거를 변 원본을6372.325621초/native0으로 완료하고 schema v2·729nodes/101frames를 확인했다. 9-node U blocking 비교는 PASS(최대 relative RMS .0022824245), UR은 경고200건이었다. 이는 과거 baseline source의 결과다. 2026-10-19 같은 승인 local 근사본의 strict 원본을 -6350.7895521초/native0으로 완료했고 정식 U 비교는 통과했다. 현재 field 후보는 수치 실패로 -공식100증분을 실행하지 않았으며 새 원본 비교·비선형 시간수렴·전체 물리 판정과 speedup은 -미성립이다. 전체 회귀는 위 수치대로 실제 실행했으며 전체 green이 아니다. +6350.7895521초/native0으로 완료했고 정식 U 비교는 통과했다. T6/T7에서는 수치 실패로 +field 후보100증분을 실행하지 않았다. 후속 사용자 요청으로 Release 후보 원본을 +5662.144854초/native0으로 완료했고9-node/101-frame U 비교는 PASS다(최대 정규화 RMS0.22824245%). +[변위 비교 보고서](../abaqus-tolerance/reference-displacement-comparison.md)에 빌드·시간·coverage를 기록했다. +비선형 시간수렴·전체 물리 판정과 공식 speedup은 미성립이다. 전체 회귀는 위 수치대로 실제 실행했으며 전체 green이 아니다. [수렴 정책 실험 결과](../abaqus-tolerance/results.md)에 현재 근거를 보존했다. ## 채택 방법과 산술 의미 @@ -143,7 +150,7 @@ N7 read-only linear/nonlinear defect solves와 arithmetic indicator는 정책으로 해소됐고 후속 C09/C08a7 통과와 구분한다. 최신 Debug h=1/64 완료 요약의 이전 Release 일치는 전체 raw state bitwise나 전체 시간수렴 증거가 아니다. 원본 accepted residual 최대 병진1.889238010e-15·회전1.452384011e-15도 Abaqus 변위 오차가 아니다. -C08b finer-grid·현재 field 후보의 원본 HDF5 비교·전체 물리 closure가 남는다. +C08b finer-grid·현재 field 후보의 비선형 시간 정확도·전체 물리 closure가 남는다. 전체 회귀의 실제 실패와 해상도 SKIP을 과거 통과로 덮지 않는다. ## 보존한 과거 수식과 연구의 위치 diff --git a/docs/tracking/decisions/0011-tolerance-experiment-acceptance.md b/docs/tracking/decisions/0011-tolerance-experiment-acceptance.md new file mode 100644 index 0000000..ef47078 --- /dev/null +++ b/docs/tracking/decisions/0011-tolerance-experiment-acceptance.md @@ -0,0 +1,39 @@ +# MITC4 HHT 실험의 변위 기준 수용과 실패 검사 보류 + +결정일: 2026-10-19. 사용자 후속 지시로 확정했다. + +## 배경과 선택 + +사용자는 Abaqus 변위 결과의 일치를 이번 실험의 검증 통과 근거로 수용하고, +실패한 테스트는 보류한 채 남은 실행 계획을 진행하라고 지시했다. +Release 변위8모델은 기존 reference 비교 정책을 통과했고, MITC4 HHT의 최악 +프레임 정규화 RMS는0.22824245%로1% 이내다. 해당 동적 CSV의 외부 비교 범위는 +9절점×101프레임이다. 모든 성분의 개별 상대오차가1% 이내라는 의미는 아니다. + +이번 실험은 **변위 검증 통과·실패10개 보류로 조건부 완료**한다. 기존 assertion이나 +production acceptance를 완화하거나 테스트를 삭제·skip하지 않는다. 원래 전체 Native와 +CTest의987 PASS·10 FAIL·1 SKIP, 별도 Python145 PASS 기록은 그대로 보존한다. +보류할10개 identity와 상대오차 재계산 근거는 [검토 보고서](../../abaqus-tolerance/relative-error-review.md)에 있다. + +## 대안과 영향 + +기존의 전체 물리 검증 통과까지 이번 실험 종료를 막는 대안 대신, 사용자 결정에 따라 +실험을 마무리하고 정확도 문제를 후속 과제로 남긴다. D3·drilling·C08·mass/null·triad +문제가 해결됐다는 뜻은 아니다. N7 해상도 SKIP1개와 정식 fine/pressure/thermal 자료 +미확보도 별도 미완료로 남긴다. 이 결정은 이후 일반 솔버 기능의 전체 검증 의무를 바꾸지 않는다. + +전체729절점·101프레임의 strict/candidate q/v/physical a/A/energy 차이는 진단으로 확보했다. +이는 Abaqus V/a/energy 검증이나 실제 비선형 시간수렴 증거를 대신하지 않는다. +기록된 시간6350.7895521초와5662.1448538초의 차이688.6446983초(10.8434501%), +비율1.1216226은 관측 비교다. 후보 실행의 전원·측정 격리 조건 인증이 없어 공식 speedup은 +확정하지 않는다. Full100 inner/요소/factor/solve 비용도 측정하지 않았으며1증분 probe를 외삽하지 않는다. + +## 변경 경계와 후속 과제 + +제품·검사 수식과 수치 기준은 그대로 유지한다. 주 개발 branch 병합·정식 기본값 채택· +원격 push·release는 이번 결정에 포함되지 않는다. 실험 branch와 raw evidence를 보존한다. +후속 수치 수정 시에는 보류10개와 N7·시간 정확도를 다시 검증하고, 성능 인증이 필요하면 +동일 조건의 공식 측정과 전체 비용 측정을 별도 수행한다. + +실행 결과와 한계는 [결과 보고서](../../abaqus-tolerance/results.md), +변위·빌드·시간은 [변위 비교](../../abaqus-tolerance/reference-displacement-comparison.md)를 따른다. diff --git a/docs/tracking/decisions/index.md b/docs/tracking/decisions/index.md index 2ad9a1d..6ac7aed 100644 --- a/docs/tracking/decisions/index.md +++ b/docs/tracking/decisions/index.md @@ -12,3 +12,4 @@ | `0008-shell-inertia.md` | Shell eigen/HHT의 질량 영공간을 보존하고 물리 rate를 복원한다. | | `0009-hex8-numerics.md` | Mean-volume 강성·reference row-sum mass·high+low 상태를 사용한다. | | `0010-thermal-discretization.md` | 다섯 두께 온도점·consistent capacity·Backward Euler를 사용한다. | +| `0011-tolerance-experiment-acceptance.md` | 이번 MITC4 HHT 실험은 변위 검증 통과·실패10개 보류로 수용하며 실제 FAIL/SKIP과 후속 검증을 보존한다. | diff --git a/docs/tracking/findings.md b/docs/tracking/findings.md index c4367aa..9d1051f 100644 --- a/docs/tracking/findings.md +++ b/docs/tracking/findings.md @@ -1,5 +1,13 @@ # 해결되지 않은 문제 +## 이번 실험의 보류 결정 + +2026-10-19 사용자는 Abaqus U 비교를 이번 실험의 검증 통과로 수용하고 아래 실패10개를 +보류하도록 승인했다. [결정 기록](decisions/0011-tolerance-experiment-acceptance.md)을 따른다. +문제 해결이나 raw FAIL의 PASS 전환은 아니며 N7 SKIP·자료 미확보도 그대로 남는다. +전체 strict/candidate 상태 차이와 관측 시간은 추가로 확보했지만 비선형 시간 정확도·공식 성능 조건은 +후속 과제다. 이후 일반 solver 기능의 전체 검증 의무를 면제하지 않는다. + ## MITC4 local 근사 실험의 정확도 실패 - 조건·관측: 2026-10-18 사용자 지시로 polar 1회·관성 회전/Jacobian 3차·질량 검사 @@ -24,12 +32,14 @@ 분류하지 않는다. C08 strict algebra의 시간 controller4개도 첫 격자에서 실패한다. - 영향: 강체 병진 oracle와 기존 algebra 시간수렴 통과만으로 실제 비선형 후보의 q/v/physical a refinement·차수·finest 오차·N7/물리 invariant closure를 인증할 수 없다. - N7 한 항목은 해상도 SKIP이다. 공식 후보100증분·정식 HHT 비교·전체 speedup은 미성립이다. + N7 한 항목은 해상도 SKIP이다. 후속 Release 후보100증분은5662.144854초/native0으로 완료하고 + 정식9-node U 비교를 통과했으나 비선형 시간 정확도·전체 speedup은 미성립이다. - 지금 해결하지 못한 이유: 승인 local 근사본의 독립 정확도 실패가 동반되며 원인 분리가 필요하다. 정해진 근사 수식을 자동 복원하거나 유지할 hidden·triad·평형 기준을 완화해 성공시키는 것은 이번 실험의 변경 범위가 아니다. 추가 강제 보정이나 실패 frame commit도 하지 않는다. - 다음 접근: polar/inertia 근사 영향과 candidate 후속 gate 실패의 원인을 분리한다. - 유지할 물리 기준에서 실제 비선형 후보의 시간·불변량 검증을 확보한 뒤 공식100증분을 측정한다. + 유지할 물리 기준에서 실제 비선형 후보의 시간·불변량 검증을 확보한 뒤 공식 성능 비교를 수행한다. + 새 원본 U 비교의 범위와 시간은 [변위 비교](../abaqus-tolerance/reference-displacement-comparison.md)에 있다. 전체 실행·실패 identity와 strict 대조 근거는 수렴 정책 결과의 원시 기록에 보존했다. ## 개발 계측의 정확 parity와 전체 비용 미확정 diff --git a/docs/tracking/status.md b/docs/tracking/status.md index d766be9..3a4ae86 100644 --- a/docs/tracking/status.md +++ b/docs/tracking/status.md @@ -1,5 +1,11 @@ # 구현과 검증 상태 +2026-10-19 후속 사용자 결정으로 이번 MITC4 HHT 실험은 **변위 검증 통과·실패10개 보류로 조건부 완료**한다. +[수용 결정](decisions/0011-tolerance-experiment-acceptance.md)을 따르며 아래 전체 검사 raw 통계와 +N7·자료 부재·미해결 물리 문제는 보존한다. 전체 물리/시간정확도 검증 통과로 확대하지 않는다. +남은729절점·101프레임 전체 상태 진단과 outer204→171회·관측 시간688.6446983초 감소를 +[최종 결과](../abaqus-tolerance/results.md#후속-승인과-남은-단계의-완료)에 기록했다. 공식 speedup은 미확정이다. + 2026-10-19 현재 실험 branch는 polar1회·관성 회전/Jacobian3차·질량 gate와 관련 테스트 오차1e-3을 유지하며, Abaqus2025 공개 field 규칙을 MITC4 HHT의 실제 종료에 연결했다. Accepted 평균 이력과 hht-log-v2도 구현했다. Native Debug와 CMake Debug/CTest 전체는 @@ -7,7 +13,9 @@ Accepted 평균 이력과 hht-log-v2도 구현했다. Native Debug와 CMake Debu 5모델 CLI/비교기는 통과했다. Native unit883개 중10 FAIL·1 SKIP, integration72개와 reference43개는 모두 통과했다. 두 build 성공과 source/등록 identity/DLL 대조도 확보했다. 물리 실패·N7 해상도 미판정·실제 비선형 후보 시간 정확도 미완료로 전체 검증 완료는 아니다. -Strict 공식 기준6350.7895521초는 확보했으나 공식 후보100증분·speedup은 미성립이다. +Strict 공식 기준6350.7895521초를 확보했다. 후속 변위 비교 요청에서 Release 후보 원본100증분을 +5662.144854초에 완료하고 U PASS를 확인했으며 공식 speedup은 미성립이다. +정식 변위8모델의 Release 구성·실행 시간·오차는 [변위 비교](../abaqus-tolerance/reference-displacement-comparison.md)에 있다. 상세 revision·실행 증거는 [수렴 정책 실험 결과](../abaqus-tolerance/results.md)에 있다. ## 과거 통합 기준 시점 @@ -24,7 +32,7 @@ dependency 재배포 조건은 확정되지 않았다. | B33·MITC4 선형 정적 | 입력 → solve → 복구 → HDF5 | 2026-10-19 두 Debug 경로의 구성된 reference 실행·비교 포함. 일반 곡선 beam·광범위 distorted/curved shell 정확도를 뜻하지 않는다. | | MITC4 비선형 정적·압력 | Full Newton·trial/commit·정적 follower pressure | 2026-10-19 정식 coarse 모델의 기존 비교를 포함한 구성 검사 실행. RF/RM은 review-only. Fine·추가 fine·pressure 자료 부재와 추가 fine 비교 계약 부재는 남는다. | | Shell frequency | Lumped mass·실제 FEAST·null/finite 공간·전체 반환 pair 검증 | 2026-10-19 구성된 두 Debug 경로 reference 실행에 포함. 한정된 Value 10개 모드별5% 계약을 다른 고유치 비교로 확대하지 않는다. | -| Shell HHT | Reduced-coordinate·fixed-null·schema2·Abaqus2025 field 종료·log-v2 | 두 전체 경로에서 동일10 FAIL·N7 SKIP1. 실제 조기 종료·강체 oracle는 통과하나 비선형 시간 정확도와 후속 acceptance 실패는 미해결. Strict 원본 비교만 확보, 공식 후보 원본 비교는 미실행. | +| Shell HHT | Reduced-coordinate·fixed-null·schema2·Abaqus2025 field 종료·log-v2 | 두 전체 경로에서 동일10 FAIL·N7 SKIP1. 실제 조기 종료·강체 oracle는 통과하나 비선형 시간 정확도와 후속 acceptance 실패는 미해결. Strict와 후속 Release field 후보 원본의9-node U 비교를 확보했다. | | Hex8 | Mean-volume 강성·reference row-sum mass·정적/고유치/HHT·high+low | 2026-10-19 구성된 두 Debug 경로 전체 실행과 별도 Release 정식5모델의 새 HDF5·기존 비교 통과. 공식 성능 비교가 아니다. | | DS4 thermal | 5 온도점·consistent capacity·BE·flux/reaction·원자적 출력 | 2026-10-19 구성된 unit/integration/reference 실행 완료. 기존 NT11 diagnostic 불일치와 새 필수 외부 reference 부재는 남는다. | | 공통 구조·빌드 | Typed procedure/capability/outcome·private backend·Native/CMake | 2026-10-19 두 Debug build 성공, compile source223개·실행 identity998개·runtime DLL7개 일치. 수치 검증 전체 통과와 구분한다. |