# 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은 유지한다.