Integrate Hex8 mass verification and fixed-null-basis shell dynamics with numerical and physics handoff evidence. Preserve interrupted reference and full-validation status; full integration validation is deferred until after performance optimization.
13 KiB
고유치·HHT lumped mass 채택과 재검증
2026-10-11 사용자가 고유치와 HHT의 질량을 lumped mass로 승인했다. HEX8-ADR-010과 HHT-ADR-012의 변경본 evidence다. 기존 consistent 구현의 통과·실패와 private 비교 연구를 현재 검증으로 승계하지 않는다. 현재 checklist는 각 기능 PRD에 유지한다.
계산과 결과 계약
- MITC4 고유치의 기존 nodal block lumped mass는 유지한다.
- MITC4 HHT는
rho*N_i*dV0의 절점 운동에너지에서 질량·관성력·convective 항· 관성 접선·운동에너지·선형/각운동량과 시간 미분을 함께 계산한다. 회전 block을 scalar diagonal로 치환하지 않는다. Geometry·moving drilling null·physical20 SPD/rcond 검사와 HHT 계수·초기화·허용값을 유지한다. - Hex8은 기존 8점 적분의 전체 24×24 reference consistent matrix를 만든 뒤 각 행의
합을 대각에 배치한다. 이후 BC를 축소한다. Warped 요소의 절점 질량은
rho*V/8로 치환하지 않는다. 선형/비선형 HHT와 고유치가 같은 질량을 사용한다. - HDF5의 mass metadata는 Shell
nodal-lumped-kinetic, Hex8lumped-reference다. 기존 consistent metadata는 현재 비교기가 거부한다. Schema layout·dtype와 공개 입력 옵션은 유지한다. 원본 reference와 tolerance를 변경하지 않았다.
변경본 검사
Evidence는 .dryforge/lumped-mass-adoption-20261011/에 보존한다. Git HEAD만으로는
아직 커밋하지 않은 변경본을 식별할 수 없으므로 실제 binary·입력·결과 hash도 기록한다.
| 검사 | 현재 결과 |
|---|---|
| MSVC x64 Debug 빌드 | native0; 새 production kernel·절차·writer와 unit/integration/reference executable 연결 |
| 새 질량 관련 focused C++ | 38/38 PASS, native0 (new-kernels.log·new-kernels-native.json) |
| HHT/Hex8 Python 비교기 | 137 PASS (python-focused.log) |
| 독립 수치 검토 | 수식·조건 검사·BC 전 lumping·독립 oracle 검토 완료; 닫힌 실행 evidence와 남은 범위는 각 numerical report 참조 |
| 전체 Debug CTest | 789개 제외 없이 자연 종료, native8: 784 PASS·4 FAIL·1 SKIP (full-direct-summary.json) |
| 마지막 테스트 수정 후 Debug 재빌드·focused 검사 | build native0, discovery790. 외력 미분/pointwise 2 PASS 및 factory/overflow 2 PASS, 각각 CTest native0 |
Focused 검사는 Shell의 analytic mass·eigen 초기 질량 대조·warped nodal moments·Jensen· moving null·scaled 관성 partial/effective tangent sweep와 omission mutation, Hex8의 affine/ warped 독립 절점 질량·BC 전 행합의 dense eigen oracle·관성 반력·독립 SDOF/MDOF 2차 U/V/A 수렴, 공식 HDF5 readback을 포함한다. 이 통과는 C08의 시간 정확도를 대신하지 않는다.
초기 focused-kernels.log 실행은 독립 dense oracle가 constrained 열을 먼저 제거한 오류를 검출했다.
전체 24 DOF 질량을 먼저 구성하도록 수정한 뒤 새 38개 검사를 통과했다. 이전 partial
실행 로그와 중단 이유는 focused-interrupted.json에 보존했다.
python scripts/execute.py는 현재 Debug preset으로 호출했다. 기존 전체 CTest의
16839초 기록이 runner의 1800초 deadline을 초과하며, 개별 테스트가 같은 임시 경로를
공유하므로 CTest 병렬 실행은 선택하지 않았다. 부분 실행을 보존하고 직접
ctest --preset windows-msvc-ninja-debug --output-on-failure로 제외 없이 직렬 실행한다.
이 실행은 MKL_NUM_THREADS=1, OMP_NUM_THREADS=1, CTEST_PARALLEL_LEVEL=1이며
수식·gate·허용값을 변경하지 않는다. 실행 중단을 수치 실패나 PASS로 보고하지 않는다.
새 C08a는 731.27초 후 FAIL로 종료했다. Finest h=1/256의 회전 좌표 가속도 최대
오차는 5.6747291e-4로 1e-4를 초과하고 마지막 두 오차 비의 raw log2 값은 1.02838, 1.02946으로
요구 1.8보다 작다. 회전 속도/가속도의 100배 noise-separation도 충족하지 못했다.
Noise-separation 미달로 해당 rate의 N7 시간 정확도는 INCONCLUSIVE이며 raw 차수를
인증된 차수로 해석하지 않는다. 기존 consistent C08a와 실패 predicate는 같지만 새 질량의 수치가 달라졌으므로
metric body 동일성을 주장하지 않는다.
새 C08b는 438.18초 후 h=1/256에서 invalid-dynamic-rotation 예외로 종료했다.
완료한 h=1/64,1/128의 energy/L drift는 감소했지만, 나머지 세 grid와 마지막 두
refinement의 self-difference·finest 기준은 생성되지 않았다. 기존 consistent C08b는
다섯 grid를 완료한 뒤 정확도 기준에서 실패했으므로 이번 예외를 같은 baseline 실패로
취급하지 않는다. 별도 Debug probe는 h=1/256, 증분56, Newton 반복3,
t=0.21875에서 node index4의 유한한 회전 좌표
(0.64127523,-1.19777570,3.61620987)가 principal chart를 벗어났음을 확인했다.
자료는 c08b-diagnostic/run.log·run-native.json에 있다. 이 실행 당시 큰 Newton trial의
근본 원인은 미확정이었다. 후속 2026-10-12 원인 조사는
off-root moving-null 접선 상쇄와 두 private 해결 후보를 확인했다. 공식 C08b와 완료
blocker는 열린 상태이며 gate 완화나 coordinate clamp로 숨기지 않는다.
독립 검토에서 verification-only RigidForceRates의 사용되지 않던 병진 미분에
consistent 계수 0.2/3이 남아 있음을 발견했다. 이를 nodal mass 0.2로 수정하고,
독립 volume force의 5-point 시간차분과 모든 24 rows를 대조하는 검사를 추가했다.
별도 Debug probe의 변경 전 RED는 병진 오류를 검출했고, 변경 후 미분 검사와 기존
pointwise force/power/momentum 검사 각각 PASS였다(force-rate-oracle/). 이 변경은
전체 CTest binary에 포함되지 않았으며, 종료 후 재빌드한 공식 Debug binary에서 관련 두
검사를 다시 통과했다(final-oracle-rebuild/ctest.log).
전체 로그를 집계하면서 추가 두 FAIL을 발견했다. Factory의 기존 consistent off-diagonal
기대값을 nodal diagonal 0.25와 off-diagonal zero 검사로 수정했다. Overflow fixture의
E=3e306은 새 mass에서 validation scale이 finite이므로, 독립 계산에 따라 local K·λ·
spectral enclosure는 finite이면서 ||K||F+|λ|*||M||F만 overflow하는 E=4e306으로
바꿨다. Production guard·tolerance는 유지했고 두 검사 모두 공식 Debug focused CTest에서
통과했다(final-stale-fixtures.log·final-stale-fixtures-native.json). 원문 전체 실행의
네 FAIL을 두 FAIL로 덮어쓰거나, 마지막 discovery790개를 전체 재실행했다고 주장하지 않는다.
전체 실행은 9131.26초 후 자연 종료했다. 마지막 세 test source의 수정 전후 production 190개 파일과 필수 원본16개 hash는 동일하다. 원본 두 동해석의 Debug 101 endpoints도 각각 PASS였다. 남은 미해결은 C08a 정확도·C08b Newton trial과 기존 C04a SKIP이며 전체 green 또는 HHT 기능 완료를 선언하지 않는다.
최종 test source 세 개·Debug binary·닫힌 로그의 hash와 후속 검사의 구분은
final-test-identities.json에 보존한다. 초기 helper identity record의 force-only 설명에
빠진 두 Hex8 test 수정을 별도 annotation으로 정정하고 원문 record는 유지했다.
원본 비교
각 원본 INP를 byte-identical 복사한 별도 경로에서 실제 CLI를 실행했다. Hex8 정적· 고유치는 Debug, 긴 원본 동해석은 같은 production 소스의 Release다. 전체 Debug 회귀와 reference 실행 구성을 구분한다. Private kernel override는 사용하지 않는다.
| 모델 | CLI / 비교 결과 |
|---|---|
| Hex8 frequency | Debug native0 / 원본 10 Value 모두 PASS. 최대 상대차 0.0019610496% |
| Hex8 linear static | Debug native0 / U·RF·8점 S PASS |
| Hex8 nonlinear static | Debug native0 / U·RF·8점 S PASS |
| Hex8 linear dynamic | Release native0 / 전체 101-frame U PASS |
| Hex8 nonlinear dynamic | Release native0 / 전체 101-frame U PASS |
| MITC4 HHT | Release native0 / 전체 101-frame U PASS, UR 경고 200건 |
원본 고유치의 기존 consistent mass 불일치는 새 production 실행에서 해소됐다.
원본 Value의 단위/quantity·모드 identity·행5%/RMS1% 정책은 그대로다. 독립으로
mean-volume K와 nodal mass를 조립한 공개 10개 모드의 residual은 최대 1.16e-17,
mass Gram 오차는 1.33e-15이며 고정 모드 성분은 exact0이다.
물리 검토는 이러한 제한된 확인과 잔여 범위를 구분한다.
다섯 Hex8 원본과 Shell 원본의 닫힌 실행 증거·HDF observable·외부 비교 metric/hash를
독립 감사했다(finding0). 자료는 independent-closed-evidence.json이며 실제 energy·
force/moment·반력·운동량 ledger는 두 기능의 lumped-mass-physics-details.json에 둔다.
Release 동해석으로 대체한 중복 Debug 원본 실행은 의도적으로 중단했다. 각 interrupted.json
및 raw native record를 보존하며 완료한 원본 비교로 세지 않는다. Release recorder의 folder
label이 case에 들어간 경우 원본 record를 보존하고 실제 입력 stem에서 logical identity를
명시적으로 유도한 comparison-execution.json을 별도로 사용했다.
Shell 원본은 변위 비교를 확인하는 coarse 시간간격의 모델이다. U 일치로 물리 가속도의 시간 정확도·에너지 보존·C08 완료를 추론하지 않는다. 기존 C08 실패와 잔여 지원 범위는 HHT PRD와 물리 검토에 유지한다.
최종 검토와 인계
2026-10-12 hht_mass_probe_review의 읽기 전용 최종 diff 검토에서 새 actionable 코드
finding은 없었다. Hex8 frequency/HHT는 full element M을 계산한 뒤 BC를 partition하고,
같은 assembled M을 high+low 관성 작용·endpoint 반력·운동에너지·선형/각운동량·effective
tangent에 전달한다. Shell eigen의 기존 lumped 경로와 HHT의 새 nodal kinetic 경로,
두 요소의 writer/self-check/comparator mass metadata 연결도 일치한다. Test-only 세 파일은
승인된 질량 oracle와 기존 nonfinite gate를 검증한다. 이 검토에서는 실행 근거를 재사용했고
build/test를 추가 실행하지 않았다.
아래 P1 판단과 인계는 초기 lumped 변경본의 실패 당시 기록이다. 후속 사용자 승인으로 HHT-ADR-013 초기 Newton 정책을 적용했고 공식 C08b 5개 grid 모두 T=.25까지 회전 예외 없이 완료해 해당 runtime finding을 닫았다. 기존 시간 정확도·P 감소 실패는 유지하며 변경본 전체802 Debug 회귀는 native8:799 PASS·2 FAIL·1 SKIP으로 자연 종료했다. 원본 Hex8 선형/비선형 HHT의 101-frame smoke도 PASS다. 이 후속 결과를 아래 과거789개의 통과로 소급하지 않는다.
당시 완료 판정의 P1 blocker는 C08b의 새 runtime 실패였다. FEM-REQ-HEX8-024는 신규/영향 검사 PASS와 신규 physics 오류0을 요구한다. 과거 C08b는 모든 grid를 완료한 뒤 정확도 기준에서 실패했고 현행 결과는 principal chart 예외이므로 동일 baseline 예외로 분류할 수 없다. Hex8 원본5개·독립 수치/물리 검토·최종 diff 검토 완료와 기능 검증 완료를 구분한다.
후속 owner는 다음 자료와 경계를 인계받는다.
- 실제 실패 검사는
HhtShellPhysics.C08bFreeFiniteRotationPlateSelfConvergenceAndPhysicalInvariants다. 전체 raw는.dryforge/lumped-mass-adoption-20261011/full-direct.log와full-direct-summary.json, 별도 계측은 같은 폴더의c08b-diagnostic/run.log에 있다. Probe의 증분56·반복3·node index4는 source node label5이며 회전 norm은 약3.86301>π다. - 다음 조사에서는 직전 accepted state와 predictor, correction, effective tangent 및 drilling regularity를 함께 확인해 큰 Newton trial의 원인을 분리한다. Positive physical20 mass나 원본 U 일치만으로 이 갱신의 안정성을 추론하지 않는다.
- 기존 gate·100회 full Newton·fixed schedule·물리 질량을 유지해 구현 오류를 조사한다. 시간 적분·회전 chart·수용 기준 변경이 필요하면 정식화와 독립 검토, 필요한 사용자 결정이 선행되어야 한다. 좌표 clamp나 tolerance 완화로 결과를 통과시키지 않는다.
- 수정 후 관련 검사·필수 비교·전체 Debug 회귀를 수행하고 C08a와 C04a도 별도 판정한다. 현행 전체789개와 후속 focused4개를 합쳐 최종790개 전체 PASS로 보고하지 않는다.
현재 완료 checklist는 Hex8 PRD 한 곳에 둔다.