86b740eebf
사용자 후속 결정에 따라 이번 실험을 변위 검증 통과와 실패10개 보류로 수용한다. 기존 전체 검사 FAIL/SKIP과 수치 기준을 보존한다. 전체101프레임 q/v/a/A/energy 차이와 관측 시간·outer 횟수를 추가한다. 공식 성능 조건·전체 비용·시간 정확도 미확보는 후속 과제로 남긴다. 문서만 변경: source450/reference34 hash 불변, 로컬 링크87개와 정적 검사 통과.
154 lines
12 KiB
Markdown
154 lines
12 KiB
Markdown
# 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 경로 전체 검사와 별도 비교를 수행했다.
|
|
Native/CTest는 각각987 PASS·10 FAIL·1 SKIP이다. 물리 실패 분기에 따라 공식 후보100증분은
|
|
미실행이며 전체 가속·정식 채택은 미확정이다. 상세 실행 증거는 [실험 결과](results.md)에 있다.
|
|
아래는 재현할 실행 순서와 유지 조건이며, 미충족 검증을 완료로 바꾸지 않는다.
|
|
|
|
2026-10-18 후속 사용자 지시로 별도 [요소 local 근사 실험](local-kernel-experiment.md)을
|
|
먼저 적용했다. 아래 요소 수식·질량 보존 조건의 명시적 예외는 polar 1회, 회전/Jacobian
|
|
3차 급수, 질량 검사 1e-3이다. 후속 지시로 관련 관성·접선·HHT 물리 테스트 오차도
|
|
1e-3으로 완화했지만 기존 시간수렴 차수·실제 해석 controller는 유지했다.
|
|
이는 Abaqus 기본값이 아니며 정적 비선형 MITC4에도
|
|
polar 변경이 공유된다. 외부 수렴 규칙의 효과를 분리하려면 strict/candidate 양쪽에 같은
|
|
local kernel을 사용하고 원래 43867d0 기준과의 차이도 별도로 기록해야 한다.
|
|
|
|
## 목표와 확정한 방식
|
|
|
|
MITC4 implicit dynamics의 외부 Newton 종료에 **Abaqus/Standard 2025의 공개 STRICT field
|
|
수렴 규칙**을 적용한다. 숫자만 바꾸거나 기존 strict 종료를 계속 사용하는 방식으로 축소하지 않는다.
|
|
근거는 [조사 보고서](README.md)다. 2024 생성 INP의 실제 solver 설정 미확인은 별도 한계로
|
|
기록하며, 그 로그가 없다는 이유로 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다.
|
|
요소의 total internal+physical inertia flux와 외부 source contribution을 평균에 사용하고
|
|
상쇄 전 개별 항 합인 기존 residual_scale과 혼동하지 않는다. 미소 field 변환의 특성길이는
|
|
기존 ReferenceLength의 초기 shell 최대 edge 길이에 대응한다.
|
|
Abaqus의 비공개 요소·관성·회전 처리와 내부 특성길이까지 같다고 보장하지 않는다.
|
|
|
|
대상은 MITC4 HHT 양의 증분이다. 정적·Hex8·열·고유치의 tolerance, 요소 수식·질량·HHT 적분식,
|
|
시간간격 dt=0.1/T=10/100증분 및 기존 최대100 correction은 유지한다.
|
|
|
|
## 변경하는 판정과 유지하는 검사
|
|
|
|
| 변경하는 부분 | 유지하는 부분 |
|
|
| --- | --- |
|
|
| 외부 Newton 잔차·보정의 종료 판정 | frame0 초기 일관성 |
|
|
| 힘·모멘트 평균과 accepted 증분 이력 | 내부 graph/hidden constraint·rank/null |
|
|
| 일반·zero·linear·추정 보정·비이차 수렴 분기 | 선형 backward error1e-12·update1e-12·pair/rounding |
|
|
| q/φ의 증분 대비 보정으로 종료 | PrivateCorrectionEqual·physical rate 복원 |
|
|
| 기존 q/v/a/A1e-10 크기는 strict 비교 진단 | 전역 힘·모멘트 평형 각각1e-8·finite·영 구속 |
|
|
| 의미가 달라지는 후보 로그 hht-log-v2 | CLI·지원 INP·HDF5 schema2·최종 결과 보호 |
|
|
|
|
Rn=.005, Cn=.01, Rp=.02, ε=1e-5, Cε=.001, Rl=1e-8,
|
|
Cf=1, εl=1e-5, εd=1e-8, IP=9와 첫 step q̃0=.01을 사용한다.
|
|
힘/모멘트별 일반 규칙과 예외를 함께 구현한다. 보정의 분모는 predictor 차이가 아니라
|
|
직전 accepted endpoint부터 현재 trial까지의 증분이다.
|
|
|
|
평균 후보는 현재 trial에서 다시 계산하고, 모든 acceptance가 끝난 증분에서 한 번 commit한다.
|
|
외부 field 수렴 후에도 유지 검사가 실패하면 정상 결과를 공개하지 않는다. 자동 완화,
|
|
숨은 strict 재시도·polishing, 기존 HDF5 재사용으로 성공을 만들지 않는다.
|
|
회전 전용 correction의 기존 strict 선택 자격은 유지하고 후보 field pass와 혼용하지 않는다.
|
|
|
|
## 실제 실행 순서와 완료 증거
|
|
|
|
| 순서 | 실제 작업과 주요 대상 | 완료 증거 |
|
|
| --- | --- | --- |
|
|
| T1 | 공개 규칙·FESA 대응·분기 시점 고정. formulation-convergence.md 작성 | 수식/분기/단위/차이와 독립 수치 검토 |
|
|
| T2 | strict source·Release 실행물·DLL 보존, 기준 실행과 개발 계측 | hash·native exit·새 결과·U비교·elapsed·비용 기록 |
|
|
| T3 | analysis-private field 수렴 계산과 평균 이력 구현 | 독립 oracle의 경계·예외·rollback 단위 검사 |
|
|
| T4 | HHT 실제 종료·accepted 이력·로그 연결 | 실제 조기 종료·후속 검사·최종 파일 보호·v2 reader 검사 |
|
|
| T5 | 실제 후보 경로의 물리·시간 정확도 검사 | q/v/physical a·hidden·회전·C08a/C08b·기존 N7 판정 |
|
|
| T6 | 후보 Release 공식 측정·개발 계측·정식 HHT 비교 | 기준과 같은 조건의 elapsed/반복/비용·새 HDF5·비교 결과 |
|
|
| T7 | 전체 직접 MSVC Debug·CMake/CTest·Python·필수 reference | 전체 discovery/실행 identity·exit·raw/XML·비교 증거 |
|
|
| T8 | 결과와 한계·채택 판단 문서 갱신 | results.md와 관련 README/contracts/status/findings의 근거 일치 |
|
|
|
|
순서는 T1→T2→T3→T4→T5→T6→T7→T8이다. 코드 의미 변경 전에 기준을 보존하고,
|
|
측정 중 다른 build/test를 실행하지 않도록 직렬 수행한다. 새 source/test는 직접 MSVC와
|
|
CMake의 명시적 목록에 함께 등록한다. 같은 source·build tree를 여러 담당자가 동시에 수정하지 않는다.
|
|
|
|
## 코드와 검사 범위
|
|
|
|
핵심 변경 위치는 src/fesa/analysis의 hht_dynamic_assembly.cpp,
|
|
hht_reduced_procedure.cpp와 관련 private 선언, 필요 시 hht_reduced_operators.cpp다.
|
|
새 field 계산은 hht_field_convergence.h/.cpp 등의 최소 private 단위로 둔다.
|
|
로그 변경은 공개 newton_iteration_log.h와 대응 구현·검사·contracts에 함께 반영한다.
|
|
범용 runtime tolerance 설정이나 새 CLI option, *CONTROLS parser는 추가하지 않는다.
|
|
|
|
단위 검사는 상쇄되는 요소 flux, 비활성 영역, 비균일 절점 연결, 첫 평균,
|
|
분모0/NaN/Inf, 경계의 아래/같음/위, zero-flux·선형·추정·비이차 분기, 이력 commit/rollback을 포함한다.
|
|
통합 검사는 판정량 출력만 달라진 구현을 걸러낼 수 있도록 실제 후보 종료를 확인한다.
|
|
CorrectionRecord에서 strict 크기 gate를 분리하면서 PrivateCorrectionEqual까지 없애지 않도록 검사한다.
|
|
|
|
hht_reduced_shell_test.cpp, hht_dynamic_procedure_test.cpp,
|
|
hht_time_integration_test.cpp, hht_temporal_verification_test.cpp,
|
|
hht_shell_physics_test.cpp, hht_energy_verification_test.cpp와 state/writer 검사를 수행한다.
|
|
기존 strict 상수를 사용하는 algebra fixture와 실제 후보 production 경로의 검증을 구분한다.
|
|
|
|
## 성능 측정 방법
|
|
|
|
공식 elapsed는 계측 없는 baseline/candidate Release 실행을 같은 host·최적화/산술 옵션·
|
|
runtime·thread·전원 조건에서 각각1회 측정한다. Process 시작 직전부터 정상 종료·최종 HDF5
|
|
공개까지를 포함하며 build·입력 복사·비교는 제외한다. 동일한 개발 probe를 적용한 별도 실행으로
|
|
outer/inner correction, 요소 평가, factor/solve/RHS 수와 중복 없는 단계 시간을 수집한다.
|
|
Probe를 추가하더라도 공식 실행에서는 꺼져야 하며 수학 계산·평가 횟수를 바꾸지 않는다.
|
|
|
|
결과는 elapsed, Δ초, 변화율, baseline/candidate speedup과 정확도를 함께 제시한다.
|
|
과거6372초·계측 CPU sample 합·여러 실행 중 최솟값을 공식 baseline으로 사용하지 않는다.
|
|
기존100초 목표는 참고이며 이번 실험이 그 달성을 약속하는 것은 아니다.
|
|
|
|
정식 reference/shellNL-dyn-meshfine의 hash 확인 새 작업 복사본에서 실행한다.
|
|
전체729-node/101-frame schema·identity를 먼저 확인한 뒤 기존9-node U blocking/UR warning-only
|
|
비교를 수행한다. Near-zero1%·일반 행5%·RMS1%·zero-scale exact-zero를 유지한다.
|
|
후보/기준 전체 q/v/a/energy 차이는 별도 진단이며, CSV에 없는 V/a/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,
|
|
보조 CMake/CTest 전체 및 별도 Python suite를 실제 실행한다. 환경·명령은
|
|
[solver-core](../solver-core/README.md#빌드와-직접-검사)를 따른다. 짧고 고유한 TMP/TEMP,
|
|
raw/XML과 discovery를 보존하고 상속 filter/sharding을 제거한다.
|
|
|
|
정식 fine·추가 fine·pressure 등 자료가 없으면 미완료다. _02의 전용 비교 계약 미구현도 구분한다.
|
|
reference/temp로 대체하거나 fixture 기대값을 완화·삭제하지 않는다. Skip·중단·발견0건은 PASS가 아니다.
|
|
기준에서도 재현되는 실패와 후보가 만든 실패를 구분한다. 범위 안 결함은 수정·재검증하고,
|
|
유지하기로 한 물리·acceptance 변경이 필요하면 근거와 영향을 보고한다.
|
|
|
|
실패 때문에 완결 HDF5가 없으면 성공 실행시간 비교나 reference PASS는 성립하지 않는다.
|
|
입증된 같은 수치 실패의 긴 실행을 새 근거 없이 반복하지 않는다. 가능한 독립 검사와
|
|
결과/한계 기록은 수행하되 실행하지 못한 단계를 전체 완료로 표시하지 않는다.
|
|
|
|
## 산출물·판정과 실행 권한
|
|
|
|
원시 실행물·DLL·stdout/stderr·XML·HDF5·비교 JSON·환경/입력 hash·elapsed는
|
|
.build/tolerance-experiment/<run-id>/의 기준/후보별 위치에 보존한다.
|
|
추적 요약은 docs/abaqus-tolerance/results.md에 작성하고 HHT README·관련 contracts·
|
|
tracking/status와 findings 및 필요한 결정 기록을 실제 결과에 맞춘다.
|
|
|
|
결론은 **개선 확인 / 속도 미개선 / 수치 부적합 / 검증 미완료**로 구분한다.
|
|
개선 확인에는 필수 수치 검증과 동일 조건 후보 elapsed<기준 elapsed가 모두 필요하다.
|
|
단일 표본의 개선을 통계적 보장으로 확대하지 않는다. 코드 구현 완료와 전체 검증 완료를 분리한다.
|
|
|
|
승인 후 로컬 코드·검사·빌드·FESA 실행은 이 계획의 범위이며 단계별 승인을 다시 요구하지 않는다.
|
|
외부 Abaqus·라이선스 비용·원격 전송·release·최종 병합은 제외한다.
|
|
실험 revision의 후보 적용과 주 개발 branch의 정식 기본값 채택을 구분하며 최종 병합은 사용자가 결정한다.
|