eaa5cbeb21
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.
159 lines
10 KiB
Markdown
159 lines
10 KiB
Markdown
# MITC4 HHT consistent/lumped 질량 비교 실험
|
||
|
||
2026-10-11 사용자의 질량만 변경한 비교 요청에 따른 private 실험이다.
|
||
기존 [질량 결정](ADR.md)과 [관성 정식화](formulation-inertia.md)의 consistent
|
||
kinetic mass 기본값은 유지한다. Abaqus S4의 내부 질량행렬을 추출하거나 그 회전
|
||
관성 구현을 재현한 실험은 아니다.
|
||
|
||
## 방법과 변경 경계
|
||
|
||
원본 `reference/shellNL-dyn-meshfine/shellNL-dyn-meshfine.inp`의 byte 동일 복사본을
|
||
두 별도 출력 경로에서 해석한다. 729 nodes/676 S4, thickness=.5, rho=2700,
|
||
E=2.1e11, nu=.3, 중심 node2의 각 병진 방향 하중 -100000, 외곽 104 nodes의
|
||
6 DOF 고정, NLGEOM 및 HHT 계수와 `dt=.1`, 종료 시간10을 유지한다.
|
||
|
||
Consistent는 production source를 그대로 사용한다. Lumped는 관성 상세의 비교식
|
||
`T_L=1/2 Σ_i ∫rho N_i |v_ui+z Dd_i v_phi_i|² dV0`을 private kernel에 적용한다.
|
||
Reference geometry/Jacobian과 current geometry 검사는 유지하고, kinetic
|
||
interpolation만 각 절점으로 옮긴다. 질량뿐 아니라 해당 kinetic energy의 관성력,
|
||
convective force, 위치·속도 접선, 에너지와 운동량 회복까지 같은 measure로 계산한다.
|
||
일반 24×24 행렬을 단순 대각화하거나 drilling에 질량을 추가하지 않는다.
|
||
|
||
두 실행 파일은 같은 source revision과 같은 새 MSVC Release library를 사용한다.
|
||
Lumped 실행 파일만 관성 object와 결과 writer object를 먼저 링크한다. Writer의
|
||
mass metadata/self-check는 `research-nodal-lumped-kinetic`으로 명시한다.
|
||
Stiffness, HHT update, residual, 초기화·수렴 기준, 하중, 모델, 회전 운동학과
|
||
나머지 recovery는 동일하다. Production source/API/CLI와 reference 원본은 수정하지 않는다.
|
||
|
||
## 요소 단위 검산
|
||
|
||
아래 결과는 MSVC Debug private probe의 제한된 smoke 진단이다. 기존 N5 또는
|
||
C08 acceptance 통과로 분류하지 않는다. Rectangle .2 thickness, density1에서
|
||
기존 eigen 요소의 consistent/lumped 24×24 행렬과 초기 질량을 직접 대조했다.
|
||
|
||
| 검사 | Consistent | Lumped |
|
||
| --- | ---: | ---: |
|
||
| 기존 mass oracle 최대 절대차 | 3.46945e-18 | 5.55112e-17 |
|
||
| 절점 간 mass block 최대 절대값 | .0444444 | exact0 |
|
||
| 방향별 총 병진 질량 | .8 | .8 |
|
||
| uniform translation kinetic energy | 1.6 | 1.6 |
|
||
| 동일 비균일 q/v의 kinetic energy | .0648590621 | .0802553965 |
|
||
| `I−Ma−c` 최대 절대차 | 1.38778e-17 | 6.93889e-18 |
|
||
| 병진 force 합과 momentum rate 최대 절대차 | 1.38778e-17 | 5.55112e-17 |
|
||
|
||
비영 q/v/a에서 central difference로 관성력 위치·속도 접선을, kinetic energy의
|
||
시간 방향 미분으로 `v·I=dT/dt`를 대조했다. Step1e-3~1e-6의 raw 절대오차는
|
||
약3.1e-11 이하이고 각 probe native exit0이다. 이는 기존 scaled N5 계약의
|
||
검사와 구분한다. Warped geometry, objectivity, 전체 angular-momentum 평형과
|
||
시간수렴을 이 smoke로 입증하지 않는다. 독립 numerical reviewer가 식·patch와
|
||
probe 결과에서 오류를 발견하지 않았으며 같은 coverage 한계를 확인했다.
|
||
|
||
## 원본 모델 비교 결과
|
||
|
||
전체 100증분 결과를 확보한 뒤 원본 CSV의 승인된 row/RMS/near-zero 정책으로
|
||
U/UR을 비교한다. Lumped용 private comparator는 기대하는 mass metadata만
|
||
실험 이름으로 바꾸고 identity·finite·frame·tolerance 검사는 유지한다.
|
||
Lumped의 통과 여부는 연구 관측이며 기존 consistent 지원 계약의 acceptance로
|
||
분류하지 않는다. V/A·공간 각속도/각가속도·에너지는 Abaqus CSV에 없어 두 FESA
|
||
해석 사이의 진단으로 구분한다.
|
||
|
||
두 private CLI가 모두 100 increments/101 frames를 완료했다. Native exit는 각각0,
|
||
실행 시간은 consistent1116.70초/lumped1117.08초였다. 분석 script도 native exit0이며
|
||
729-node identity, frame/time, metadata와 필요한 양의 finite 검사를 통과했다.
|
||
원본 INP/CSV, production inertia/writer/comparator와 기존 Debug library의 before/after
|
||
SHA256은 동일하다. 공통 source revision은 `ede137c6b40192f7e7c2647ec16765ce29c8239e`다.
|
||
|
||
| 원본 CSV 비교·동적 진단 | Consistent | Lumped |
|
||
| --- | ---: | ---: |
|
||
| U blocking comparison | PASS; 0 failures | PASS; 0 failures |
|
||
| Frame별 U family 상대 RMS의 최댓값 | .227058974% | .228242450% |
|
||
| Frame별 UR family 상대 RMS의 최댓값 | 2.53311382% | 2.53460488% |
|
||
| UR warning 건수 | 200 | 200 |
|
||
| 중심 node2 초기 병진 가속도; 각1–3방향 | −1502.222173 | −500.7407241 |
|
||
| 최대 병진 속도 절대값; 전체 nodes/frames | 1.387005688 | .4644038863 |
|
||
| 최대 운동에너지 | 191.6142090 | 64.12476142 |
|
||
| 최종 운동에너지 | .0002844432611 | .00009319202462 |
|
||
| 최대 energy defect 절대값 | 190.2255716 | 62.73624080 |
|
||
| 최종 energy defect | −1.398427506 | −1.398618759 |
|
||
| 중심 node2 최종 U3 | −2.563681542e-5 | −2.563676875e-5 |
|
||
|
||
외부 CSV의 U/UR 비교는 승인된9개 선택 절점의101 frames이다. 729-node 전체
|
||
이력 비교와 혼동하지 않는다. 단위는 일관된 입력의 L/F/T를 따르며 acceleration=L/T², velocity=L/T,
|
||
energy=F·L이다. SI 단위라고 단정하지 않는다. UR은 기존 정책의 warning-only이며,
|
||
V/A와 energy의 값에는 이번 실험을 위한 새 acceptance threshold를 적용하지 않았다.
|
||
|
||
두 해석 사이의 전체729 nodes×101 frames×3 components의 동일 양에 대해
|
||
`||L−C||₂/||C||₂`를 계산했다. 이것은 reference family RMS와 다른 private 진단이다.
|
||
|
||
| 양 | 전체 이력의 상대 L2 차이 |
|
||
| --- | ---: |
|
||
| 병진 변위 U | .0226059033% |
|
||
| 회전 좌표 UR | .0223918588% |
|
||
| 병진 속도 V | 76.3639464% |
|
||
| 병진 물리 가속도 A | 76.3762180% |
|
||
| 회전 좌표 속도 PHIDOT | 54.2689255% |
|
||
| 회전 좌표 가속도 PHIDDOT | 54.2811291% |
|
||
|
||
Frame0을 제외한 병진 가속도 이력의 상대 차이도76.3762009%여서 초기 가속도 한
|
||
frame만의 차이는 아니다. U의 최대 절대차는1.30297458e-8 L이다. 두 mass의 U
|
||
reference RMS 차이는 .001183476 percentage points이며, 양쪽 모두 같은 정책을
|
||
통과한다. 이 원본의 U 비교는 두 질량 선택을 판별하는 데 민감하지 않다는 관측이다.
|
||
속도·가속도·운동에너지까지 같다고 확대할 수 없고, 회전 관성 차이의 상쇄가 원인이라고
|
||
판별한 결과도 아니다. 병진 mass coupling만으로도 초기 가속도 분포가 달라진다.
|
||
특히 이 centered flat shell의 frame0은 q=v=0이며, 두께의 first moment와
|
||
병진–회전 mass coupling은0이다. 이때 속도의 제곱에 비례하는 convective 항도0이므로,
|
||
중심 초기 병진 가속도의 약3배 차이는 병진 mass 분포·절점 간 coupling의 영향이다.
|
||
이를 회전 관성항의 상쇄로 설명할 필요는 없다.
|
||
|
||
최대 T가 consistent 쪽에서 더 크더라도 같은 q/v에서의 `T_L>=T_C`와 모순되지
|
||
않는다. 전체 해석에서는 두 질량 방식의 q/v 자체가 달라진다. Coarse dt에서 시간
|
||
이산화·수치 감쇠가 U 차이를 가릴 수 있다는 가설은 이 관측과 양립하지만, 이를
|
||
원인으로 확정하려면 같은 두 질량으로 시간 refinement를 수행해야 한다.
|
||
|
||
결과 HDF5 SHA256:
|
||
|
||
- Consistent: `fe0ea4bddca18a23c55c3c7880aaa377fd0ff13b964c1d4f70ddefad5995d5d9`.
|
||
- Lumped: `b6253edae92ab73201d089795d274709d1f0cccce759a753b24712c7b6d9c3ea`.
|
||
|
||
공통 Release library SHA256:
|
||
`1dc5d33417ce905e501cd56bbbb21262d1c8b856394a23e2c798e200cbcdfa31`.
|
||
|
||
독립 numerical reviewer는 comparator를 호출하지 않고 원본 CSV의202 families/
|
||
5454 scalar values를 재계산하여 두 report의 원값·error·row 판정과 RMS를 확인했다.
|
||
HDF5의101×729 전체 이력·초기값·에너지 요약, source/input/library/exe SHA와 공통
|
||
metadata를 별도로 확인했고 finding은 없었다. 실제 독립 실행 native exit0이며
|
||
`independent-review-result.json` SHA256은
|
||
`b33d2019cb553f848fafdb2906dd540d2109982ec322b6b7d5b279721c22a20c`다.
|
||
Energy identity의 재계산은 저장량 사이의 일관성 검사이며 독립 volume kinetic
|
||
적분이나 정확한 에너지 보존·시간수렴을 새로 입증한 것은 아니다.
|
||
|
||
## 실행·재현과 한계
|
||
|
||
Private 생성·실행·결과 경로는 저장소 기준
|
||
`.dryforge/hht-mass-comparison-20261011/`이다. `prepare.py`는 원본 source/reference
|
||
hash와 byte 동일 입력 복사본을 보존한다. `build.ps1`/`build-probe.ps1`은 Debug
|
||
요소 probe를, `build-optimized.ps1`은 공통 Release library와 paired CLI를 만든다.
|
||
각 variant의 CLI에 그 variant의 복사 INP를 전달하고 `analyze.py`를 h5py/NumPy
|
||
환경에서 실행한다. `result.json`, 두 `reference-comparison.json`, `probe.json`,
|
||
native exit 기록과 before/after hash가 실제 evidence다.
|
||
|
||
Debug 원본 모델 실행은 각각 초기 동적 평형까지만 확보한 뒤 runtime 때문에 중단했다.
|
||
각 native exit -1은 중단 기록이며 PASS가 아니다. 최초 private writer link의 HDF5
|
||
DLL macro 누락은 수정했다; 초기 link 실패는 tool 실행 기록에 있으며 log 파일은
|
||
후속 link 실행으로 덮어쓰여 별도 raw 파일로 남지 않았다. Probe의 index/Vector3
|
||
API 오류는 수정 전 실패 로그로 별도 보존한다.
|
||
초기 분석 script의 source label을 정수로 직접 비교한 오류는 HDF5의 문자열 label을
|
||
명시적으로 해석하도록 수정했고, 수정 전 native1/log와 수정 후 native0을 구분해 보존했다.
|
||
공통 Release source build 및 두 private CLI build는 native exit0이다.
|
||
|
||
이 실험은 production 수정이나 기능 완료 작업이 아니며 전체 MSVC Debug/CTest를
|
||
새로 실행하지 않았다. 기존 C08 시간수렴 실패는 유지한다. `dt/T1≈7.4567`인 성긴
|
||
원본 시간간격에서의 외부 U 비교를, 시간 정확도·큰 회전 관성 또는 질량 정책의
|
||
동등성으로 확대하지 않는다. Source/reference와 기존 Debug library의 hash 보존을
|
||
확인하며 reference 원본·tolerance·공개 mass 정책을 결과에 맞춰 변경하지 않는다.
|
||
|
||
|
||
## 2026-10-11 후속 질량 정책 승인
|
||
|
||
사용자는 고유치·HHT lumped mass 채택을 명시 승인했다([HHT-ADR-012](ADR.md)). 위 조사와 private 비교는 채택 전 원문 기록이며 production 검증으로 승계하지 않는다. 현재 채택 수식은 [formulation](formulation.md), 변경본 재검증 상태는 [PRD](PRD.md)의 현재 checklist를 따른다. 원본 reference·허용값·HHT 계수와 출력 layout은 유지한다.
|