# MITC4 HHT에 Abaqus 수렴 규칙을 적용하는 실행 계획 작성일: 2026-10-18. 조사 기준 source: 43867d0. 상태: 실제 구현·측정·검증을 위한 개정안. 이번 ready에서는 계획 문서만 수정한다. 수정안 승인 후 go는 **실제 코드 수정·빌드·FESA 실행·성능 측정·정확도 검증**을 수행한다. 이 계획의 Abaqus 외부 Newton 규칙 구현·측정은 아직 실행하지 않았다. 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 기준 후보 구현을 보류하지 않는다. 공개 규칙을 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, finest normalized error≤1e-4, 기존 N7 해상도 판정을 유지한다. 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//의 기준/후보별 위치에 보존한다. 추적 요약은 docs/abaqus-tolerance/results.md에 작성하고 HHT README·관련 contracts· tracking/status와 findings 및 필요한 결정 기록을 실제 결과에 맞춘다. 결론은 **개선 확인 / 속도 미개선 / 수치 부적합 / 검증 미완료**로 구분한다. 개선 확인에는 필수 수치 검증과 동일 조건 후보 elapsed<기준 elapsed가 모두 필요하다. 단일 표본의 개선을 통계적 보장으로 확대하지 않는다. 코드 구현 완료와 전체 검증 완료를 분리한다. 승인 후 로컬 코드·검사·빌드·FESA 실행은 이 계획의 범위이며 단계별 승인을 다시 요구하지 않는다. 외부 Abaqus·라이선스 비용·원격 전송·release·최종 병합은 제외한다. 실험 revision의 후보 적용과 주 개발 branch의 정식 기본값 채택을 구분하며 최종 병합은 사용자가 결정한다.