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:
@@ -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이지만
|
||||
|
||||
Reference in New Issue
Block a user