Files
FESADev/docs/hex8-structural-analysis/reference-mass-investigation.md
T
KOKO\Mimi eaa5cbeb21 feat: adopt lumped mass and reduced-coordinate shell HHT
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.
2026-10-13 16:57:19 +09:00

150 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Hex8 원본 질량·요소 설정 조사
2026-10-11 사용자가 제공한 고유치 결과의 불일치를 조사했다. 원본 입력에서 확인한 사실,
공식 문서의 동작 설명, 별도 수치 재현을 구분한다. 이 문서는 질량 정식화 채택이나 승인
변경이 아니다. 현재 요구와 완료 판정은 [PRD](PRD.md), 실제 생산 결과의 FAIL은
[verification](verification.md#2026-10-11-제공된-고유치-원본의-최종-비교)에 유지한다.
## 결론과 증거의 범위
**현재 FESA의 consistent 질량과 Abaqus 1차 요소의 row-sum lumped 질량 차이가
이번 고유치 불일치의 주된 원인이라는 강한 근거를 확보했다.**
승인된 평균 체적 강성을 유지하고 질량만 row-sum lumped로 바꾼 별도 계산에서
최저10개 고유치가 모두 원본과 상대차이0.00196105% 이하로 일치했다.
같은 계산의 consistent 질량은 실제 FESA 고유치를 상대차이4.57e-12 이하로 재현했다.
이는 공식 문서와 동일 입력의 통제된 수치 재현에 기반한 판단이다. 원본 Abaqus 실행의
실제 K/M 계수를 직접 확보한 것은 아니며 private 내부 알고리즘 전체의 동등성 증명이 아니다.
Production 수식·질량·reference·tolerance는 수정하지 않았다. 별도 계산의 일치를
현재 FESA의 필수 modal 비교 PASS로 승격하지 않는다.
## 입력에서 직접 확인한 설정
원본은 [hexa_freq.inp](../../reference/hexa/hexa_freq.inp)이며 raw SHA는
[원본 inventory](reference-model.md)에 있다. 파일의 전체 keyword를 확인했다.
| 항목 | 원본 설정 | 의미·확인 범위 |
| --- | --- | --- |
| 생성기 표기 | Abaqus/CAE Learning Edition 2024 | 입력 작성 도구 표기이며 실제 실행 solver 버전 증명은 아님 |
| 요소 | `*ELEMENT, TYPE=C3D8`,300개 | 8절점 선형 brick; `C3D8R`, `C3D8I`, `C3D8H`가 아님 |
| 절점·자유도 | 442절점, 병진1–3 | 구속51성분, free1275성분; 회전 zero BC는 승인된 inactive no-op |
| Section | `*SOLID SECTION, ELSET=Set-1, MATERIAL=Material-1` | 모든300개에 같은 solid material 연결; 별도 section controls 없음 |
| 재료 | `*ELASTIC`: E=2.1e11, nu=.3 | 상수 등방성 탄성 |
| 밀도 | `*DENSITY`:7850 | 단위계는 user-consistent-unspecified; SI라고 별도 확정하지 않음 |
| Step | 유일한 `Step-1`, `NLGEOM=NO, PERTURBATION` | 선행 general step·initial stress 없는 원형상 frequency |
| Eigensolver | `LANCZOS, SIM` | 최저10 modes 요청; 별도 frequency range/shift 입력 없음 |
| Normalization | `NORMALIZATION=MASS` | 고유벡터의 generalized mass를1로 정규화하는 설정 |
| Acoustic coupling | `ACOUSTIC COUPLING=ON` | acoustic/ASI/tie 요소가 없는 이 입력에서 연성 모델을 추가하지 않음 |
| 추가 질량 | 관련 keyword 없음 | point mass·rotary inertia·nonstructural mass·mass scaling·matrix input 정의 없음 |
`NORMALIZATION=MASS`는 consistent mass 선택 옵션이 아니다. 공식
[*FREQUENCY 문서](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEKEYRefMap/simakey-r-frequency.htm)의
Normalization 절은 실제 사용하는 구조 질량행렬에 대해 고유벡터 크기를 정규화한다고 설명한다.
고유벡터에 상수를 곱하는 것과 질량행렬을 변경하는 것은 서로 다른 동작이다.
## 공식 문서의 요소·질량 동작
[Solid isoparametric quadrilaterals and hexahedra](https://docs.software.vt.edu/abaqusv2025/English/SIMACAETHERefMap/simathe-c-solidisoquadhex.htm)의
Fully integrated first-order 절은 Gauss point의 체적변화를 요소 평균으로 대체하는
selective reduced integration을 설명한다. 따라서 C3D8의 full integration이라는 이름을
체적 항까지 수정 없는 pointwise `BᵀCB`로 해석하면 안 된다.
현재 FESA는 승인된8점 deviatoric+평균 trace 체적 energy를 사용한다. 이번 조사에서
강성을 새로 변경하지 않았으며, 유한변형에서 Abaqus의 평균 J/Fbar 처리와 평균 Green
trace 모델 전체가 같다는 결론도 내리지 않는다.
[Implicit dynamic analysis](https://docs.software.vt.edu/abaqusv2025/English/SIMACAETHERefMap/simathe-c-dynamics.htm)의
질량 정의 다음 문단은 Abaqus의1차 요소가 대각 lumped 질량을 사용하며 consistent
행렬의 각 행 합을 대각에 모으는 방법이라고 명시한다. 이 설명은 자연진동수 수치 실험도
직접 언급한다. 앞의 C3D8 입력은 이1차 요소에 해당한다. 문서상의 질량 관계는 다음과 같다.
\[
(M_C)_{ai,bj}=\delta_{ij}\int_{V_0}\rho_0N_aN_b\,dV_0,
\qquad (M_L)_{ii}=\sum_j(M_C)_{ij},\qquad (M_L)_{ij}=0\ (i\ne j).
\]
현재 FESA는 `M_C`를 사용하고 문서상 Abaqus 1차 요소 동작은 `M_L`이다.
같은 총질량이라도 off-diagonal 관성 coupling이 달라지므로 각 모드의 고유치 차이가
일정 비율일 필요는 없다. `NORMALIZATION=MASS`와 이 차이를 혼동하지 않는다.
인용한 공식 문서는2025판이다. 2024판 해당 URL은403으로 본문을 확보하지 못했다.
따라서2024 실행의 내부 계수까지 확인했다는 의미로 쓰지 않는다. 다만 아래 실제 원본
고유치 재현은 문서 설명과 일관된다.
## 같은 모델에서 K/M 차이를 분리한 계산
원본442절점·300요소·밀도·BC51성분을 그대로 읽고3N 행렬을 별도로 조립했다.
강성 두 종류와 질량 두 종류의 조합을 비교했다. 강성은 평균 infinitesimal trace 또는
pointwise 체적 항, 질량은8점 consistent 또는 그 full 행 합 lumped다.
Lumping은 **구속 열을 제거하기 전 full 행렬에서 수행**하고, 그 뒤 같은 free1275공간으로
제한한다. 구속을 먼저 제거한 Mff의 행 합은 원래 구속 절점의 기여를 잃으므로 사용하지 않는다.
Python/SciPy sparse generalized eigensolve로 최저10개를 구했다. 같은 입력·node ordering,
고정 시작벡터와 sigma0 shift-invert를 사용하며 반복 고유치를 제거하지 않았다.
원본 Value=λ를 그대로 mode별 비교하고 공통1% RMS/row5%를 유지했다.
| 별도 계산 조합 | 최대 고유치 상대차이 (%) | 1% 기준 내 modes |
| --- | ---: | ---: |
| 평균 trace K + consistent M | 20.2513234932 | 3/10 |
| 평균 trace K + row-sum lumped M | **0.0019610496** | **10/10** |
| Pointwise 체적 K + consistent M | 20.2513359080 | 1/10 |
| Pointwise 체적 K + row-sum lumped M | 4.3745703299 | 2/10 |
전체 모드를 확인했으며 대표 변화는 다음과 같다. 표의 출력 자리만 줄이고 실제 비교에는
반올림 전 값을 사용했다.
| Mode | 원본 λ | 평균 K + consistent M | 평균 K + lumped M |
| ---: | ---: | ---: | ---: |
| 1 | 496.28 | 497.153597 | 496.281253 |
| 2 | 496.28 | 497.156909 | 496.284560 |
| 3 | 18302 | 18519.547027 | 18302.192012 |
| 4 | 18302 | 18519.716390 | 18302.358911 |
| 5 | 52797 | 63489.091265 | **52796.905642** |
| 6 | 131213 | 134772.818712 | 131212.943849 |
| 7 | 131214 | 134773.663066 | 131213.797734 |
| 8 | 165943 | 166062.030100 | 165943.347547 |
| 9 | 449258 | 470919.350202 | 449257.575005 |
| 10 | 449260 | 470921.678068 | 449259.777928 |
Reference volume=56.56854152, total mass=444063.050932이며 consistent/lumped의
각 병진 방향 총질량도 같았다.4조합의 최대 infinity-norm backward residual은
2.43e-14 이하, mass Gram 오차는2.11e-15 이하다. 진단 JSON의 `max_eta_r`라는 field는
이 infinity-norm metric이며 승인된 T5 Euclidean/Frobenius eta_r와 구분한다.
원본14개 파일의 전후SHA도 동일하다. 이는 별도 계산의 수치 정합성과 원본 보존 근거이며
FESA 구현을 변경·재실행한 근거가 아니다. Private eigsh 계산은 실제 FEAST의
lowest-N count certification을 수행하지 않았으므로 공식 고유치 절차 검증을 대신하지 않는다.
## 원시 자료와 채택 전 과제
실제 명령은 `uv run --with h5py --with scipy python -B .dryforge/investigate_hex8_modal_mass.py`,
native exit0으로 자연 종료했다. Script·stdout·argv/native/timestamps는 로컬
`.dryforge/investigate_hex8_modal_mass.py`, `hex8-modal-mass.log`, `hex8-modal-mass-native.json`에 있다.
행렬·고유벡터·10개 모드의 전체 metric은
`.harness/hex8-evidence/mean-volume/modal-mass-investigation/result.json`과 인접npz에 보존했다.
원시 자료는 ignored 진단 evidence이며 공식 출력이나 사용자 원본이 아니다.
별도 reviewer가 script의 engineering shear·Gauss gradient·체적 평균 coupling·mass 조립과
full-row-sum 뒤 BC restriction을 검토했다. 저장된 K/M/고유벡터에서 eigen residual·mass Gram·
10개 source 오차와 baseline의 실제 FESA 재현을 독립 재계산해 audit native0·finding0을 확인했다.
Euclidean/Frobenius eta_r의4조합 최댓값은3.79e-15 이하, Gram Frobenius 오차는3.36e-15 이하다.
소비 자료의 전후SHA도 동일했다. 원시 독립 자료는 같은 폴더의 `independent-result.json`,
`independent-native.json`, `independent-audit.py`다. 결과 SHA는
`6dab2a7e7d7bb1a3d4a71fdb240fe00e552242c77ef0781a01a92cf00ee8b159`다.
이 bounded 검토는 production 채택·실제 FEAST count certification·외부 전체 검증이 아니다.
추가 직접 확인에는 실제 Abaqus 실행 버전·job 진단과 mode vectors 또는 operator evidence가
도움이 된다. [*MATRIX GENERATE 문서](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEKEYRefMap/simakey-r-matrixgenerate.htm)는
`MASS`/`MASS=CONSISTENT`로 consistent 행렬을 생성한다고 설명하므로, export된 M을
무조건 frequency의 lumped M과 동일시하지 않는다. 원본 모델이나 외부 solver를 이번 조사에서
실행·변경하지 않았다.
FEM-REQ-HEX8-007과 HEX8-ADR-002는 eigen/HHT 공통 consistent M을 요구하고 lumping을 금지한다.
이번 진단으로 그 계약은 변경되지 않는다. Frequency만 silent lumping으로 바꾸는 것도 계약 변경이다.
채택 판단에서는 공통 mass 방침과 입력·결과 metadata의 의미를 먼저 결정하고, 질량 불변량,
original-pencil, 정적·동적을 포함한 필요한 회귀와 reference 비교를 재확인해야 한다.
과거 동적 U 일치만으로 두 mass 행렬이 같다고 추론하지 않는다.
## 2026-10-11 후속 질량 정책 승인
사용자는 고유치·HHT lumped mass 채택을 명시 승인했다([HEX8-ADR-010](ADR.md)). 위 조사와 private 비교는 채택 전 원문 기록이며 production 검증으로 승계하지 않는다. 현재 채택 수식은 [formulation](formulation.md), 변경본 재검증 상태는 [PRD](PRD.md)의 현재 checklist를 따른다. 원본 reference·허용값·HHT 계수와 출력 layout은 유지한다.