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.
This commit is contained in:
KOKO\Mimi
2026-10-13 16:57:19 +09:00
parent ede137c6b4
commit eaa5cbeb21
110 changed files with 15274 additions and 971 deletions
+35 -15
View File
@@ -1,19 +1,19 @@
# Hex8 구조해석 제품 요구사항
Feature ID: `hex8-structural-analysis`. 작성일: 2026-10-08. 상태: 사용자 승인된 구현 계약; 검증 완료 대기.
Feature ID: `hex8-structural-analysis`. 작성일: 2026-10-08. 상태: 구현·필수 원본5개 비교·검토·인계 완료; 사용자 요청으로 장시간 전체 검증을 유예하여 최종 통합 완료 판정 보류.
기준 저장소: `dev`, `2382d3af7ef335bef216d963540f2e9bd2befd68`.
## 목적과 선택 이유
개인 연구용 FESA에 8절점 육면체의 선형 강성, 기하비선형 내력·접선 강성, 일관 질량을
개인 연구용 FESA에 8절점 육면체의 선형 강성, 기하비선형 내력·접선 강성, reference row-sum lumped 질량을
구현하고 입력부터 정적·고유치·동해석과 HDF5 결과까지 연결한다. 요소 행렬 계산만으로
완료하지 않는다. 기존 프로젝트를 유지하며 새 프로젝트 기준을 재작성하지 않는다.
첫 구현은 큰 회전·작은 탄성 변형률을 대상으로 한다. 전체 8점 적분과 Total Lagrangian
St. Venant–Kirchhoff의 deviatoric 항과 요소 평균 Green trace 체적 energy를 선택해
에너지·내력·접선의 일관성을 독립 검증한다. 2026-10-10 사용자 B 승인으로 최초 pointwise
체적 항을 대체했으며 [ADR-009](ADR.md)를 따른다. 일관 질량은
고유치와 동해석 모두에 사용한다. 집중 질량이나 안정화로 계산 결과를 맞추지 않는다.
체적 항을 대체했으며 [ADR-009](ADR.md)를 따른다. 2026-10-11 승인 [ADR-010](ADR.md)에 따라 full reference element M의 행 합 대각 질량을
고유치와 동해석 모두에 사용한다. 허용값이나 안정화로 계산 결과를 맞추지 않는다.
일반 등매개 육면체를 지원하며 체적 projection의 안정성·conditioning 및 남은 굽힘 잠김 한계를 검증·공개한다.
초기 합의의 일정 동하중에 더해, 제공된 reference의 ramp를 처리하도록 구간별 선형
@@ -119,11 +119,13 @@ F64와 paired 경로 모두 실제 relative kinematics의 같은 derivative인 G
계산하며 유한차분 접선을 production 계산으로 사용하지 않는다. 강체 유한회전의 zero
strain/energy, 에너지 gradient·내력 tangent, 좌표 공변성, 선형극한을 검사한다.
### FEM-REQ-HEX8-007 — 일관 질량
### FEM-REQ-HEX8-007 — Reference row-sum lumped 질량
\((M_e)_{ai,bj}=\delta_{ij}\sum_g\rho_0N_aN_b\det J_{0g}\)를 사용한다.
\((M_C)_{ai,bj}=\delta_{ij}\sum_g\rho_0N_aN_b\det J_{0g}\)를 먼저 full24×24로 계산하고,
\((M_L)_{ai,bj}=\delta_{ab}\delta_{ij}\sum_c(M_C)_{ai,ci}\)를 사용한다.
기준 형상과 밀도로 정해져 변형·시간에 따라 바뀌지 않으며 회전 자유도·drilling 관성은 없다.
고유치와 동해석은 같은 전역 일관 M을 사용한다. Row-sum lumping·nodal block 치환은 금지한다.
고유치와 동해석은 같은 전역 lumped M을 사용한다. 행 합은 BC restriction 전에 계산하며
M_C의 free block만 행 합하거나 warped 요소를 rho*V/8로 대체하지 않는다.
대칭 양정성·각 병진 방향 총질량·좌표 회전·독립 적분을 검증한다. 전역 행렬은 sparse로 조립한다.
### FEM-REQ-HEX8-008 — 경계와 집중력
@@ -256,7 +258,7 @@ mode vector를 물리 응답 변위/응력으로 복구하지 않는다.
`analysis_procedure`로 식별한다. 값 집합은 `linear-static`, `nonlinear-static-full-newton`,
`linear-frequency`, `hht-linear-dynamics`, `hht-nonlinear-dynamics`다.
`element_formulation=FESA-Hex8`, `integration_rule=gauss-2x2x2`,
`mass_formulation=consistent-reference`, source step 이름·입력 byte identity·단위 의미를 보존한다.
`mass_formulation=lumped-reference`, source step 이름·입력 byte identity·단위 의미를 보존한다.
Model row의 source instance/label은 기존 model identity 의미를 유지하되 Solid topology/section
분기를 추가한다. Node row는 Domain 선언 순서다. `/model/nodal_constraint_mask`는 U8[N,3],
@@ -330,7 +332,8 @@ Consistent M으로 \(T=v^TMv/2\), \(U=\sum W_g\det J_{0g}\)를 계산한다.
`energy_balance_error=T+U-T0-U0-Wext`다. 현재 BC는 동적 exact0여서 support work=0이다.
HHT의 알고리즘 소산과 quadrature에 따른 work 오차를 설명하며 각 frame exact conservation을
강제하지 않는다. Alpha0 내부 검사에서는 선형 무하중 보존을 독립 확인한다.
Moment와 angular momentum은 현재 위치와 consistent interpolation의 kinetic 식으로 평가한다.
Moment와 angular momentum은 현재 절점 위치와 reference lumped M의 kinetic measure로 평가한다.
T=0.5*v^T*M_L*v, P=sum(m_a*v_a), L=sum(x_a×m_a*v_a) 및 rates를 같은 measure로 계산한다.
### FEM-REQ-HEX8-019 — 실패와 진단
@@ -380,7 +383,7 @@ numeric controls로 정하고 독립 검토한다. 외부 5%/1%를 내부 정확
| 비선형 정적 | `hexa_nonlinearstatic.inp` | 동일 suffix: 완료 load-factor frame의 U·RF·적분점 Cauchy S |
| 선형 동적 | `hexa_dynlinear.inp` | `hexa_dynlinear_U.csv`: initial 포함 101 frame U1–3 전체 |
| 비선형 동적 | `hexa_dynnonlinear.inp` | `hexa_dynnonlinear_U.csv`: initial 포함 101 frame U1–3 전체 |
| Frequency | `hexa_freq.inp` | 원본 modal Value 결과 아직 없음. 사용자 준비 자료로 최저10 modes를 비교해야 함 |
| Frequency | `hexa_freq.inp` | 사용자 제공 `hexa_freq.txt`의 최저10 modal Value(고유치 λ)를 비교 |
현재 inventory는 442 nodes, 300 elements다. 정적 U/RF 각442행, 수정된 정적 S 각2400행의
`IntPt=1..8`, 동적 U 각각44642행이다. 기존 elemental-nodal 응력 CSV의 위치 계약을
@@ -438,6 +441,21 @@ Generalized sparse FEAST의 공개 진입점은
## 현재 checklist
- [x] 2026-10-11 HEX8-ADR-010의 full reference row-sum M: BC 이전 행 합·warped oracle·질량/에너지·고유치/HHT/출력 검증.
- [x] Lumped 변경본 독립 numerical/physics 검토와 필수 원본5 case 재검증. [채택 evidence](lumped-mass-adoption.md): 정적2·고유치 Debug, 동적2 production Release.
- [x] Lumped 변경본 전체 MSVC Debug CTest의 자연 종료·판정: 789개 native8(784 PASS·4 FAIL·1 SKIP). Stale factory/overflow test 수정 후 공식 focused 2 PASS; C08a 정확도·C08b 새 회전 예외 및 C04a SKIP은 미해결로 구분. [채택 evidence](lumped-mass-adoption.md).
- [x] 필수 최저10 modal Value 불일치 해결: 변경본 Debug 실행·원본 비교 모두 native0, 최대 상대차 `0.0019610496%`. 기존 consistent의7/10 FAIL은 아래 과거 이력으로 보존한다.
- [x] 최종 변경 diff의 독립 검토와 후속 개발 인계: 공용 mass consumer·BC partition·관성/반력·출력 metadata 연결에 새 코드 finding0. [최종 검토와 인계](lumped-mass-adoption.md#최종-검토와-인계)에 완료 경계와 C08b 후속 조사 조건을 기록했다.
- [x] 2026-10-13 장시간 전체 검증을 제외한 후속 확인·인계: 현재 Debug 관련91 PASS·Python96 PASS·보존된 원본5개 재비교 PASS. [최종 인계](final-handoff.md)에 source 동일성·독립 검토·최적화 이후 검증 범위를 구분했다.
- [ ] FEM-REQ-HEX8-024 최종 완료 판정: 과거 C08b runtime FAIL은 후속 승인된 초기 Newton 정책에서 해소됐고 ADR-018의 C09·공식 Release C08a7도 통과했다. 최신 C08b·Shell 원본·전체 Debug는 사용자 중단이며 전체 검증은 성능 최적화 후 수행한다. 기존 전체802의799 PASS·C08 정확도 FAIL2·C04a SKIP1 이력은 보존하고 최신 source의 전체 통과로 승계하지 않는다. [최종 인계](final-handoff.md)를 따른다.
## 이전 구현의 검증 이력
이하 체크박스는 해당 시점의 수행·미완료 기록이며 현재 checklist가 아니다.
기존 modal FAIL을 새 질량의10개 PASS로 소급 변경하지 않는다.
아래 체적 평균 구현의 기존 체크와 수치는 consistent M 당시 이력이며 lumped 변경본 통과로 승계하지 않는다.
2026-10-10 사용자 B 승인은 HEX8-ADR-009의 체적 평균 energy를 다섯 절차에 적용하고
전체 재검증하는 변경이다. 아래 관련 항목은 변경본에서 다시 확인한다. 이어지는 이전
pointwise 구현의 실행 기록은 과거 evidence이며 변경본 PASS로 승계하지 않는다.
@@ -455,9 +473,9 @@ HHT 식·기준 consistent M·입력·고정 schedule·100회·Si/exact-zero·
- [x] 체적 평균 선형·비선형 HHT u/v/physical a·시간수렴·수지 내부 검증
- [x] 체적 평균 공식 HDF5/CLI/self-check/실패 final 보존 내부 검증
- [x] 정적2·동적2 원본 필수 family 비교 PASS
- [ ] 사용자 원본 최저10 modal Value 제공 및 필수 비교 PASS
- [ ] 사용자 원본 최저10 modal Value 필수 비교 PASS — 원본 제공 완료, 7/10 family FAIL
- [x] 최신 전체 MSVC Debug build/CTest·기존 baseline 대조 완료
- [x] Independent numerical/physics blocker0·범위/한계/evidence 기록 완료
- [ ] 최종 필수 고유치 불일치 해결 및 independent numerical/physics blocker0·범위/한계/evidence 완료
체적 평균 구현은 frozen `b2abd739`를 root `18b36c1`로 연결했다. 작성자 관련150/150,
시간수렴3 GTests/4물리 사례 및 최종 실제 재컴파일3/3은 native build/CTest0/0이다.
@@ -469,10 +487,12 @@ HHT 식·기준 consistent M·입력·고정 schedule·100회·Si/exact-zero·
새 예외는0이며 전체 green은 아니다. 두 기존 실패의 metric body는 baseline과 동일하고,
SKIP은 보존된 상세 출력이 없어 이름·상태의 동일성만 확인했다.
새 선형·비선형 정적 원본의 U1326/RF51/S14400은 각각 필수 비교 native0으로 PASS했다.
새 고유치 공식 readback은 precheck PASS이나 modal Value 부재로 비교 native2·NOT RUN이다.
새 고유치 공식 readback은 precheck PASS다. 2026-10-11 제공된 TXT의 최저10 Value를
실제 비교한 결과 native1·7/10 family FAIL이다. 원본 부재로 native2·NOT RUN이었던
이전 기록은 과거 evidence로 보존한다. [최종 비교](verification.md#2026-10-11-제공된-고유치-원본의-최종-비교)를 따른다.
새 두 동적 원본도 각각101개 U family 비교 native0·실패 행0개다. 두 동적 원본의 수치·물리
독립 검토도 실제101 endpoint에 한정한 bounded PASS다. 전체 Python은 기존 import의
collection5 오류/native2·실행0개다. Modal 비교 부재와 기존 회귀 예외는 이 통과로 없어지지 않는다.
collection5 오류/native2·실행0개다. Modal 수치 불일치와 기존 회귀 예외는 이 통과로 없어지지 않는다.
공간수렴 증거는 실제 두 축을 세분화한 지정 굽힘장 에너지다. 평형 cantilever는 길이
방향만 세분화하고 두께/폭은2요소로 고정한 tip 추세이며 평형해의 공간차수 증거가 아니다.
@@ -498,7 +518,7 @@ native CTest exit0이며 독립 수치 검토를 통과했다. 두 정적 원본
실제 CLI·HDF5·full-pair RN64·실패 final 보존 관련17/17도 native build/CTest0/0이다.
이 범위의 완료와 외부 비교·최신 전체 회귀는 구분한다. 실행 방법은 [README](README.md),
세부 근거와 한계는 [수치 검토](numerical-review.md)에 있다.
원본 frequency 결과 부재는 구현 진행을 막지 않지만 기능 검증 완료를 막는다.
다음은 원본 frequency 결과가 제공되기 전 pointwise 구현의 비교 이력이다.
비교기 `317fe5c`는 원본 identity·schema·finite·허용오차·원본 덮어쓰기 보호의 독립 검토와
관련124/124 Python 검사(native0)를 통과했다. Root 연결 후 같은 관련124/124도 native0이며
정적 수치 실패와 modal NOT RUN을 재현했다. 두 정적 원본은 실제 CLI native0이지만