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:
@@ -15,6 +15,7 @@ Total Lagrangian–St. Venant–Kirchhoff의 energy/internal force/material+geom
|
||||
|
||||
## HEX8-ADR-002 — Constant reference consistent mass
|
||||
|
||||
**대체 이력:** 2026-10-11 HEX8-ADR-010이 질량 선택을 대체했다. 아래는 당시 승인 기록이다.
|
||||
**선택:** M은 기준 밀도와 형상의 rho NiNj I 적분이며 eigen과 linear/nonlinear HHT에 동일하게 사용한다.
|
||||
**영향:** 전역 sparse generalized K/M가 필요하다. Shell nodal whitening·null-space 처리나
|
||||
row-sum lumping을 호환 경로로 쓰지 않는다. Solid에는 회전/convective 관성이나 drilling이 없다.
|
||||
@@ -72,6 +73,7 @@ endpoint·HDF5/외부 비교·전체 회귀를 진행한다. 승인과 수렴
|
||||
|
||||
## HEX8-ADR-009 — Reference-volume 평균 Green trace energy
|
||||
|
||||
**대체 이력:** 2026-10-11 HEX8-ADR-010이 consistent M 보존 부분만 대체한다. 평균 energy 결정은 유지한다.
|
||||
**승인:** 2026-10-10 사용자는 [체적 차이와 변경안](reference-discrepancy-proposal.md)의
|
||||
B: 체적 평균 energy 도입 후 전체 재검증을 선택했다.
|
||||
**선택:** 선형·비선형 정적, unloaded frequency, 선형·비선형 HHT 모두 같은 요소 energy를
|
||||
@@ -86,3 +88,17 @@ coupling을 포함한다. 평균 determinant/Fbar/로그변형률 재료식은
|
||||
**검증:** 한 선형 private 후보의 원본 일치와 독립 변분 검토는 근거이며 production PASS가 아니다.
|
||||
새 kernel/절차·시간/공간수렴·공식 출력·필수 원본·전체 MSVC Debug 회귀를 다시 검증한다.
|
||||
기존 pointwise 구현의 통과·실패 기록은 과거 evidence로 보존하고 변경본에 승계하지 않는다.
|
||||
|
||||
## HEX8-ADR-010 — 고유치·HHT reference row-sum lumped mass
|
||||
|
||||
**승인:** 2026-10-11 사용자 “앞으로 고유치 해석과 HHT 동해석에서 질량 행렬은 lumped mass로 계산”.
|
||||
**선택:** Full reference consistent24×24 M_C를 기존8점 적분으로 계산한 후 각 row sum을
|
||||
대각에 둔 M_L을 eigen과 선형/비선형 HHT에 공통 사용한다. BC restriction 이전 요소 전체
|
||||
행 합을 계산한다. Free block만 lump하거나 warped 요소의 절점 질량을 rho*V/8로 치환하지 않는다.
|
||||
**영향:** HEX8-ADR-002 및 ADR-009의 consistent M 보존 부분만 대체한다. 평균 체적 energy,
|
||||
high+low state/force/rates/gate·HHT 계수·schedule·100회·strict gate·외부 tolerance·출력 layout은
|
||||
유지하며 metadata는 `lumped-reference`다. 관성력·T·P·L와 rates에도 같은 M_L을 사용한다.
|
||||
**검증:** 질량·대각/SPD·warped 독립 적분·Jensen·BC 전후의 차이·원래 pencil residual/Gram/count와
|
||||
HHT/반력·시간수렴·공식 readback·필수 원본5개·전체 Debug 회귀를 새로 확인한다. 기존 consistent
|
||||
PASS/FAIL 및 private 후보의 일치는 변경본 production 통과로 승계하지 않는다.
|
||||
현재 진행 상태는 [PRD](PRD.md)의 현재 checklist를 따른다.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Hex8 구조해석 작업 지침
|
||||
|
||||
Feature ID: `hex8-structural-analysis`. 사용자 승인: 2026-10-08 ready 문서 승인 및 go 실행 요청.
|
||||
개인 연구용 FESA에 reference8점 deviatoric·체적 평균 energy Hex8의 선형/기하비선형 강성·일관 질량과
|
||||
개인 연구용 FESA에 reference8점 deviatoric·체적 평균 energy Hex8의 선형/기하비선형 강성·reference row-sum lumped 질량과
|
||||
static/frequency/HHT 절차를 추가한다. 코드 존재와 기능 검증 완료를 구분한다.
|
||||
|
||||
상위 기준은 [프로젝트 지침](../../AGENTS.md), [공통 PRD](../PRD.md),
|
||||
@@ -15,6 +15,7 @@ static/frequency/HHT 절차를 추가한다. 코드 존재와 기능 검증 완
|
||||
| [io](io.md) | 입력 의미·typed 경계·공식 결과 metadata/units·진단 |
|
||||
| [numeric controls](numeric-controls.md) | 수치 scale·zero branch·tuning·독립 검사 기준 |
|
||||
| [reference model](reference-model.md) | read-only 원본 inventory·quantity/key/point/time mapping |
|
||||
| [reference mass investigation](reference-mass-investigation.md) | 원본 C3D8 질량 설정·공식 문서·K/M 분리 진단 및 채택 경계 |
|
||||
| [verification](verification.md) | 비교 도구 사용·공식 원본 비교·Python 검사 결과와 한계 |
|
||||
| [reference discrepancy proposal](reference-discrepancy-proposal.md) | 승인된 B 체적 변경안·과거 원본 불일치와 별도 선형 후보 관측 |
|
||||
| [numerical review](numerical-review.md) | 작성자와 독립된 정식화/controls 검토의 결과 |
|
||||
@@ -22,6 +23,9 @@ static/frequency/HHT 절차를 추가한다. 코드 존재와 기능 검증 완
|
||||
| [precision proposal](precision-proposal.md) | 승인된 내부 정밀도 변경안·결과 의미·구현 전 검증 범위 |
|
||||
| [precision formulation](precision-formulation.md) | HHT 전체 high+low 상태·동일 gradient 미분·산술 범위·반올림 출력 계약 |
|
||||
| [physics review](physics-review.md) | 소규모 시간수렴·반력·운동량·에너지의 독립 평가와 coverage 한계 |
|
||||
| [lumped 채택 evidence](lumped-mass-adoption.md) | 현행 질량의 원본5개·전체 회귀·test-only 후속 수정 결과 |
|
||||
| [현행 물리 평가](physics-evaluation.md) | lumped 변경본 원본 모드·수지 검토와 최종 미해결 범위 |
|
||||
| [최종 인계](final-handoff.md) | 최신 bounded 검사·기존 원본 재대조·source 동일성·성능 최적화 후 전체 검증으로 넘길 범위 |
|
||||
|
||||
메인이 문서·공유 연결·완료 판단을 소유한다. Kernel owner는 Hex8 local 계산/복구 payload와
|
||||
직접 consumer를, semantic owner는 Domain/parser/3성분 DOF/load/assembly를 소유한다.
|
||||
@@ -42,3 +46,8 @@ positive Jacobian을 보수적으로 인증하고 uncertain geometry/trial을
|
||||
평가를 거친다. 일반 승인 작업마다 승인 gate를 추가하지 않는다. Physics·영속 schema·acceptance
|
||||
변경 또는 해결되지 않은 필수 reference 충돌만 메인이 사용자에게 근거와 영향을 전달한다.
|
||||
Dev 통합·push/release는 별도 명시된 사용자 결정이다.
|
||||
|
||||
2026-10-13 현재 인계는 [최종 인계](final-handoff.md)를 따른다. 사용자는 장시간
|
||||
전체 검증을 수행하지 않도록 요청했다. 이번 관련91개·Python96개 및 저장된
|
||||
원본5개 결과 재대조를 전체 통과로 확대하지 않는다. Hex8 구현·검토·인계와
|
||||
최적화 이후의 최신 전체 통합 완료 판정은 구분한다.
|
||||
|
||||
@@ -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이지만
|
||||
|
||||
@@ -1,16 +1,39 @@
|
||||
# Hex8 구조해석
|
||||
|
||||
개인 연구용 FESA에 8절점 육면체의 선형 강성, Total Lagrangian–StVK 기하비선형
|
||||
내력·접선 강성과 기준 형상의 consistent 질량을 추가한다. 요소당 병진 자유도는24개이며
|
||||
내력·접선 강성과 기준 형상의 row-sum lumped 질량을 추가한다. 요소당 병진 자유도는24개다.
|
||||
|
||||
2026-10-11 [HEX8-ADR-010](ADR.md)이 질량 정책을 변경했다. 아래 기존 구현의 실행 결과는
|
||||
consistent M의 당시 evidence이며 lumped 변경본 재검증은 [PRD](PRD.md)의 현재 checklist를 따른다.
|
||||
|
||||
2026-10-13 현재 구현·필수 원본5개 비교·검토·인계를 마쳤다. 이번 확인은
|
||||
Debug 관련 C++91 PASS·Hex8 비교기 Python96 PASS 및 보존된 원본5개 결과의
|
||||
현재 비교기 재대조 PASS다. 새 장시간 원본 실행이나 전체 CTest는 수행하지 않았다.
|
||||
정적2·고유치의 원본 결과는 Debug, 동적2는 Release에서 생성한 기존 근거다.
|
||||
Hex8 경로의 source 동일성과 독립 검토, 성능 최적화로 넘길 범위는
|
||||
[최종 인계](final-handoff.md)에 기록했다.
|
||||
|
||||
초기 lumped 변경본의 관련38개·Python137개·전체789개의 결과와 당시 Shell
|
||||
실패는 [채택·재검증 보고서](lumped-mass-adoption.md)의 과거 이력이다.
|
||||
당시 C08b runtime 실패는 후속 승인된 초기 Newton 정책으로 해소됐고,
|
||||
ADR-018의 C09와 공식 Release C08a7도 통과했다. 최신 C08b·Shell 원본·전체
|
||||
Debug는 사용자 중단이며, 전체 검증은 성능 최적화 후 진행한다.
|
||||
FEM-REQ-HEX8-024의 최종 통합 완료 판정은 보류한다.
|
||||
선형/비선형 정적, reference lumped-mass frequency,
|
||||
선형/비선형 HHT 동해석을 typed state에서 공식 HDF5와 CLI까지 연결한다.
|
||||
|
||||
다음 단락은 변경 전 consistent mass 구현의 이력이다.
|
||||
|
||||
강성·질량·복구에2×2×2 reference 적분점을 사용한다. 2026-10-10 승인으로 deviatoric 항과
|
||||
요소 평균 infinitesimal/Green trace 체적 energy를 사용한다. 변경본 구현·내부 검증은 완료했고
|
||||
두 정적 원본의 U/RF/S 및 두 동적 원본의101-frame U 필수 비교도 PASS다.
|
||||
실제 정적·동적 원본의 독립 수치·물리 검토도 bounded PASS다. 전체787 CTest는
|
||||
784 PASS·기존 Shell FAIL2·SKIP1(native8)으로 종료했고 추가170개는 모두 PASS다.
|
||||
전체 green은 아니며 modal Value 원본은 대기 중이다. 전체 Python도 기존 collection5
|
||||
전체 green은 아니다. 2026-10-11 제공된 modal Value 원본과 실제 비교했으나
|
||||
최저10개 중7개가1% RMS 기준을 초과했다. 최대 차이는5번 고유치의20.2513%이며
|
||||
[최종 비교](verification.md#2026-10-11-제공된-고유치-원본의-최종-비교)에 근거를 기록한다.
|
||||
필수 modal 불일치가 해결되기 전 기능 검증 완료는 대기다. 전체 Python도 기존 collection5
|
||||
오류로 native2·실행0개다.
|
||||
선형/비선형 정적, consistent-mass frequency,
|
||||
선형/비선형 HHT 동해석을 typed state에서 공식 HDF5와 CLI까지 연결한다.
|
||||
|
||||
구현과 기능 검증 완료는 다르다. 원본 정적2·동적2의 필수 수치 비교, 사용자 modal Value와
|
||||
최신 전체 회귀·최종 검토가 완료 조건이다. 현재 상태는 [PRD checklist](PRD.md#현재-checklist),
|
||||
@@ -65,6 +88,10 @@ Restart는 지원하지 않는다. [정밀도 정식화](precision-formulation.m
|
||||
[원본 mapping](reference-model.md)은 case/frame/source identity·point 순서·RF projection을
|
||||
소유한다. 독립 평가의 범위는 [수치 검토](numerical-review.md)와 [물리 검토](physics-review.md),
|
||||
실패와 수정 근거는 [lessons](lessons.md)에 보존한다.
|
||||
원본 고유치 불일치의 [질량·요소 설정 조사](reference-mass-investigation.md)는 공식
|
||||
Abaqus row-sum mass 설명과 별도 K/M 분리 계산을 기록한다. Mean K+lumped M의
|
||||
수치 재현은 채택 전 연구 이력이다. 현재 [HEX8-ADR-010](ADR.md)의 production 변경본은
|
||||
[별도 새 실행](lumped-mass-adoption.md#원본-비교)으로 원본5개 비교 PASS를 확인했다.
|
||||
|
||||
## 적용 한계
|
||||
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
# Hex8 구현·검토 인계
|
||||
|
||||
2026-10-13. 사용자 요청에 따라 장시간 전체 검증을 수행하지 않고 남은
|
||||
검토·기존 결과 재대조·인계를 정리했다. Hex8 구현과 이 범위의 검증은
|
||||
확보했으며, FEM-REQ-HEX8-024의 최신 전체 통합 완료 판정은 보류다.
|
||||
현재 체크리스트는 [PRD](PRD.md#현재-checklist)에만 둔다.
|
||||
|
||||
## 이번에 확인한 근거
|
||||
|
||||
| 확인 | 결과 | 적용 범위 |
|
||||
| --- | --- | --- |
|
||||
| 구성된 MSVC x64 Debug 관련 CTest | 91/91 PASS, native0,254.64초 | Hex8 kernel·Solid static/frequency·HHT state/kinematics/dynamics/Float64 history. 전체 CTest·장시간 원본 동해석·전체 시간수렴 아님 |
|
||||
| Hex8 비교기 Python 검사 | 96 PASS, native0,38.29초 | `tests/test_compare_hex8.py`; Python 전체 suite 아님 |
|
||||
| 현재 비교기로 보존된 원본5개 결과 재대조 | 정적2·고유치·동적2 모두 native0 | 기존 성공 native/HDF5와 현재 read-only 원본을 사용한 새 비교. 새 솔버 원본 실행 아님 |
|
||||
| 기존 검증본과 source identity 대조 | production190 중180 동일,10 변경; 원본16개 모두 동일 | Hex8 및 Solid 실행·질량·복구·출력 경로는 동일. 변경10개는 Shell HHT/state/element/writer 관련이며 전체 공용 binary의 동일성은 주장하지 않음 |
|
||||
| 독립 수치·물리 인계 검토 | 해당 범위에서 새로 조치할 문제 없음 | Hex8 직접 소비 소스27개 및 기존 evidence39개의 hash 대조. 별도 질량 적분의 한 축 총질량444063.050932, 양의 nodal mass와 기존 수지 검토 확인. 최신 전체 물리 PASS 아님 |
|
||||
|
||||
이번 작업에서는 production·C++ 검사·physics·질량·입력·schema·tolerance를
|
||||
변경하지 않았다. 전체 build/CTest와 C08b 미세 grid, 장시간 원본 CLI를
|
||||
시작하지 않았다. 기존 실패·중단 기록을 PASS로 바꾸지 않았다.
|
||||
|
||||
실행 근거는 `.dryforge/hht-remediation-20261012/`의
|
||||
`hex8-handoff-bounded-debug.{native.json,raw.log}`, `hex8-handoff-python.{native.json,log}`,
|
||||
`hex8-handoff-comparisons/execution.json` 및 case별 보고서다.
|
||||
독립 검토는 같은 폴더의 `hex8-handoff-numerical-review.json`과
|
||||
`hex8-handoff-physics-review.json` 기록을 따른다. 과거 manifest에 없는
|
||||
private header는 현재 hash만 별도로 기록하며 과거 동일성 입증 범위에 넣지 않는다.
|
||||
|
||||
## 보존할 구현·물리 경계
|
||||
|
||||
Local kernel은 reference8점 deviatoric 항과 요소 평균 trace energy를 사용한다.
|
||||
선형 K와 비선형 f/Kmat/Kgeo/Kt는 같은 energy에서 유도하며, 응력·변형률은
|
||||
Gauss point identity로 반환한다. 질량은 full element consistent M의
|
||||
reference row sum을 **BC 제한 전에** 구한 대각 M이다. Eigen/HHT·관성력·
|
||||
반력·운동에너지·운동량은 같은 질량을 사용한다.
|
||||
|
||||
Solid HHT의 normalized high+low 상태와 최종 RN64 결과 의미를 유지한다.
|
||||
실패 candidate가 accepted history나 기존 최종 HDF5를 변경하지 않아야 한다.
|
||||
원본5개 비교와 기존 독립 수지·modal 검산은 검증한 모델에 한정한 근거다.
|
||||
임의 distorted mesh·큰 변형·다른 시간간격의 정확도나 전체 green을 보증하지 않는다.
|
||||
상세 물리 근거는 [물리 평가](physics-evaluation.md),
|
||||
수치 기준은 [numeric controls](numeric-controls.md)를 따른다.
|
||||
|
||||
## Shell 영향과 미검증 범위
|
||||
|
||||
초기 lumped 변경본의 C08b 회전 runtime 실패는 후속 승인된 초기 Newton
|
||||
정책에서 해소된 이력이다. 이후 ADR-018 변경본의 C09와 공식 Release
|
||||
C08a7-grid도 통과했다. 이 결과들을 과거 전체789/802 검사에 소급 합산하지 않는다.
|
||||
|
||||
최신 전체 Debug는44/856 PASS 후 사용자 중단, Release C08b도 중단됐다.
|
||||
최신 Shell 원본은99증분·t=9.9까지 accepted 로그만 있으며 현재 HDF5가 없어
|
||||
새 Abaqus 변위 비교를 수행할 수 없다. [중단 시점 비교](../hht-implicit-dynamics/interrupted-validation-comparison.md)를
|
||||
따르며 C08b·현재 Shell 원본 비교·전체 통합·독립 전체 물리 판정은 남아 있다.
|
||||
이는 Hex8 필수 원본5개 비교가 다시 실패했다는 뜻이 아니다.
|
||||
|
||||
## 성능 최적화 후 재검증으로 넘길 내용
|
||||
|
||||
사용자가 요청한 다음 순서는 성능 최적화 후 전체 검증이다. 이번 작업은
|
||||
최적화 구현을 시작하지 않았으며 느린 연산의 원인을 계측 없이 단정하지 않는다.
|
||||
먼저 같은 source/input·빌드 구성·thread 설정에서 local 계산·조립·solve·
|
||||
복구·출력 시간을 분리해 기준을 확보한다. 중복 계산 제거와 데이터 재사용은
|
||||
실제 state/operator 수명을 지켜야 한다.
|
||||
|
||||
연산 순서나 reduction을 바꾸면 수치 변경으로 다룬다. 시간간격·grid·질량·
|
||||
반복 제한·수용 기준을 줄여 성능 개선으로 보고하지 않는다. 최적화 전후
|
||||
관련 analytical/invariant·failure preservation·serial/TBB 결정론을 대조하고,
|
||||
최종 source에서 구성된 전체 MSVC Debug build/CTest와 필수 원본 비교 및
|
||||
독립 물리 검토를 다시 수행한다. 현재 bounded 결과는 그 실행을 대체하지 않는다.
|
||||
@@ -184,22 +184,33 @@ S의 isotropic 항이 요소 내 공통이어도 finite Cauchy pressure가 반
|
||||
저장 strain을 \(\operatorname{dev}E+\bar\theta I/3\)로 치환하지 않는다. Point stress는 같은 point의
|
||||
strain만으로 결정되는 이전 pointwise law가 아니라 element mean에 의존한다.
|
||||
|
||||
## Consistent mass와 generalized eigen
|
||||
## Reference row-sum lumped mass와 generalized eigen
|
||||
|
||||
\[
|
||||
M_{ai,bj}=\delta_{ij}\sum_g\rho_0N_aN_bw_g,
|
||||
\quad T={1\over2}v^TMv.
|
||||
(M_C)_{ai,bj}=\delta_{ij}\sum_g\rho_0N_aN_bw_g,
|
||||
\quad m_a=\sum_b(M_C)_{ai,bi}=\sum_g\rho_0N_aw_g,
|
||||
\quad (M_L)_{ai,bj}=\delta_{ab}\delta_{ij}m_a,
|
||||
\quad T={1\over2}v^TM_Lv.
|
||||
\]
|
||||
|
||||
M은 reference-state 상수다. Positive weights와8점 interpolation matrix의 full rank에서 SPD가
|
||||
따른다. Axis-aligned brick의 scalar block은 \(\rho V/216\)에 각 축 sign이 같으면2/다르면1인
|
||||
세 factor의 곱이다. Direction별 총합은 rho V, row sum은 rho V/8다. Production에서는 lump하지 않는다.
|
||||
세 factor의 곱이다. Direction별 총합은 rho V, row sum은 rho V/8다. 2026-10-11
|
||||
[HEX8-ADR-010](ADR.md) 승인에 따라 production은 full24×24 M_C의 행 합 M_L을 사용한다.
|
||||
행 합은 BC restriction 전에 계산한다. Warped 요소에서는 일반적으로 m_a가 같지 않다.
|
||||
Positive rho/N/weights에서 m_a>0이며 M_L은 diagonal SPD다.
|
||||
|
||||
같은 nodal v에서 `T_L−T_C=0.25*sum_g rho*w_g*sum_ab N_a*N_b*|v_a−v_b|²>=0`이다.
|
||||
따라서 M_L−M_C는 positive semidefinite이며 다음 consistent lower bound는 M_L에도
|
||||
보수적으로 유효하다. Uniform translation energy와 총질량을 보존하지만 일반 속도장의
|
||||
에너지·orbital inertia·고유치는 달라진다. Shell의 finite-rotation nodal block 방식과 구별한다.
|
||||
|
||||
8점 shape evaluation의 minimum singular value 제곱은1/27이다. Exact local quadrature에서
|
||||
\(m_{e,lower}=\rho\min_gw_g/27\)는 local M의 positive lower bound다. Global scatter·principal free
|
||||
restriction에도 active-node incidence를 고려한 lower bound가 보존된다. 예를 들어 모든 active
|
||||
node에 적어도 하나의 element가 있는 경우 min_e bound는 conservative global lower bound다.
|
||||
실제 FP matrix의 roundoff와 SPD evidence를 포함해야 하며 이 수학적 식만으로 설치 backend의
|
||||
실제 FP matrix의 기존 roundoff guard에는 full row-sum 누적/조립 graph를 포함해 검토하고
|
||||
SPD evidence를 확인해야 한다. 이 수학적 식만으로 설치 backend의
|
||||
실행을 검증했다고 주장하지 않는다.
|
||||
|
||||
무응력 원형상에서 위 새 energy의 K0를 사용해 \(K_{ff}\phi=\lambda M_{ff}\phi\)를 풀며 constrained component0으로 복구하고
|
||||
@@ -236,7 +247,7 @@ R=MA_{n+1}+(1+\alpha)(f_{n+1}-F_{n+1})-\alpha(f_n-F_n),
|
||||
\]
|
||||
|
||||
f/U/Kt는 위 평균 trace energy에서 함께 평가한다. Linear HHT는 그 zero-state K0,
|
||||
비선형 HHT는 trial의 cross-GP 전체 Hessian이다. 상수 reference consistent M·계수·고정 h·
|
||||
비선형 HHT는 trial의 cross-GP 전체 Hessian이다. M은 상수 reference lumped M_L이며 계수·고정 h·
|
||||
100회·strict physical/correction/update 판정은 변경하지 않는다.
|
||||
|
||||
이전 free endpoint가 \(Ma_n+f_n-F_n=0\)이면 R=(1+alpha)(Ma_next+f_next−F_next)다.
|
||||
@@ -245,10 +256,10 @@ Endpoint 표현을 쓰면 tangent도1/(1+alpha)로 함께 환산해야 한다. I
|
||||
Ma+f−F의 constrained projection이다. Initial u/v0에서 Mff a0=Ff(0+)−ff(0), A0=a0다.
|
||||
곡선은 endpoints에서 실제 평가하며 prescribed dynamic q/v/a/A는 exact0다.
|
||||
|
||||
Physical momenta는 interpolated current x/v를 사용해 \(p=\int\rho v\,dV_0\),
|
||||
\(L=\int x\times\rho v\,dV_0\)다.8점 consistent quadrature와 nodal mass 표현이 일치해야 한다.
|
||||
Angular-momentum rate는 \(\int x\times\rho a\,dV_0\)이며 v×v 항은0이다.
|
||||
Consistent symmetric M에서 nodal 표현의 \(\sum v_a\times(Mv)_a=0\)도 성립한다.
|
||||
Physical momenta는 current nodal x/v와 같은 reference lumped measure를 사용해
|
||||
\(p=\sum_a m_av_a\), \(L=\sum_a x_a\times m_av_a\)다.
|
||||
Rates는 \(\dot p=\sum_a m_aa_a\), \(\dot L=\sum_a x_a\times m_aa_a\)이며
|
||||
각 node에서 v×v 항은0이다. 독립 oracle도 같은 `rho*N_a*dV0` 적분을 사용한다.
|
||||
External/support moment는 같은 current 위치로 구한다. HHT 및 force trapezoid work는 frame별
|
||||
exact energy conservation을 의미하지 않는다. Wext는 endpoint force·du trapezoid 누적,
|
||||
error=T+U−T0−U0−Wext다. Alpha0 linear unforced benchmark에서는 독립 보존을 확인한다.
|
||||
|
||||
@@ -54,7 +54,11 @@ repository-conforming 이름 조정은 허용하며 physics/schema 수정은 아
|
||||
f[24], Kmat/Kgeo/Kt[24,24], strain energy와8 typed integration-point rows를 반환한다.
|
||||
Linear은 새 체적 평균 energy의 zero Hessian material=K0/geo=0,
|
||||
nonlinear은 같은 trial의 체적 평균 Green energy 미분이다. `ComputeMass()`는
|
||||
local consistent24×24 Matrix contribution이며 absent density이면 실패한다.
|
||||
full reference consistent24×24 matrix의 각 row sum을 대각에 둔 local lumped24×24
|
||||
Matrix contribution이며 absent density이면 실패한다. Row sum은 BC reduction 전에
|
||||
전체24 성분으로 계산하고 이후 실제 constraint mask로 restriction한다. Warped 요소에서
|
||||
동일한 `rho*V/8`을 모든 절점에 대신 배정하지 않는다. Eigen/HHT는 같은 reference mass를
|
||||
사용하며 시간·변형에 따라 재계산하는 current mass가 아니다.
|
||||
- Typed Solid point row는 internal element index, point ID1–8, natural/reference coordinate3,
|
||||
Cauchy stress6·infinitesimal/Green tensor strain6를 가진다. Identity/상수 coordinates를 trial마다
|
||||
다른 source row로 만들지 않는다. 저장 strain은 실제 kinematics의 strain이며 평균된
|
||||
@@ -92,6 +96,16 @@ Metadata의 추가 공개 의미는 다음과 같다.
|
||||
| `unit_system_label` | `user-consistent-unspecified` |
|
||||
| `coordinate_convention` | `global-cartesian; reference-strain; current-cauchy-stress` |
|
||||
| `component_order` | `node-major; UX,UY,UZ` |
|
||||
| `mass_formulation` | `lumped-reference`; full reference element matrix의 row-sum diagonal mass |
|
||||
|
||||
2026-10-11 사용자 승인으로 질량의 공개 의미와 `mass_formulation` 값을
|
||||
`consistent-reference`에서 `lumped-reference`로 변경한다. 입력에 질량 선택 parameter를
|
||||
추가하지 않으며 기존 CLI, schema_version=1, dataset field/shape/dtype, high+low 내부 상태의
|
||||
round-to-Float64 규칙은 유지한다. 과거 consistent 결과는 당시 evidence로 보존하며 현재
|
||||
reader/self-check/comparator는 mass identity mismatch를 tolerance 적용 전에 거부한다.
|
||||
Metadata를 바꾸어 과거 수치 결과를 새 정책의 결과로 표시하지 않는다. 이 변경만으로
|
||||
새 정책의 verification PASS를 선언하지 않으며 production readback와 원본 비교는 새
|
||||
실행 evidence가 필요하다.
|
||||
|
||||
Physical dataset은 `component_names`와 `unit_dimensions`를 UTF-8 string으로 기록한다.
|
||||
각 frame dataset에는 `frame_index:U64`, `increment_index:U64` 및 해당 `time:F64` 또는
|
||||
@@ -116,7 +130,9 @@ K0는 승인된 mean-trace energy의 zero Hessian이고 nonlinear Wg는
|
||||
`mu*dev(Eg):dev(Eg)+0.5*kappa*theta_bar^2`다. 같은 theta_bar를8점의 reference 가중치로
|
||||
계산하므로 그 합은 요소 체적 항 `0.5*kappa*V*theta_bar^2`와 같다. 기존 attribute 문자열과
|
||||
field/schema/dtype은 유지하며 새 energy 의미는 HEX8-ADR-009 및 정식화를 따른다.
|
||||
Kinetic은 `0.5*v^T*M*v`, work는 `sum(0.5*(F_old+F_new)*delta_u)`이며 initial0이다.
|
||||
Kinetic은 동일한 reference lumped M으로 계산한 `0.5*v^T*M*v`이고, eigen의
|
||||
mass normalization과 HHT의 관성력·반력·physical momentum에도 같은 M을 사용한다.
|
||||
Work는 `sum(0.5*(F_old+F_new)*delta_u)`이며 initial0이다.
|
||||
Balance error는 `T+U-T0-U0-Wext`이고 HHT numerical dissipation을0으로 보정하지 않는다.
|
||||
Constrained mask/prescribed 의미·point ordering은 model inventory에서 확인한다.
|
||||
|
||||
@@ -134,5 +150,8 @@ Quantity/key/family와 원본 준비 상태는 [reference-model](reference-model
|
||||
Static은 final factor-one source increment를 FESA final accepted frame에 대응한다. Dynamic은
|
||||
integer increment0..N과 decimal source time을 n*h에 대응한다. RF는 constrained projection,
|
||||
S는 element/IntPt와6 global Cauchy component다. 좌표는 보조검사이고 ID 추정에 쓰지 않는다.
|
||||
Modal Value는 원본이 제공되면 quantity/units/mode/step을 확인하며 최저10 eigenvalues를
|
||||
singleton families로 비교한다. Missing 원본·nonfinite/identity/completeness 오류는 미실행/실패다.
|
||||
Modal Value는 제공된 `hexa_freq.txt`의 고유치 λ(`1/time^2`)를 최저10개 mode별
|
||||
singleton families로 직접 비교한다. `Freq (cycles/time)`는 보조 열이며 변환하지 않는다.
|
||||
TXT에 없는 step field는 고정 case와 승인 입력의 sole `Step-1`에 한정해 대응한다.
|
||||
형식·hash·mode/finite 검사는 [원본 mapping](reference-model.md)을 따른다.
|
||||
Missing 원본은 미실행, nonfinite/identity/completeness 오류는 실패다.
|
||||
|
||||
@@ -0,0 +1,168 @@
|
||||
# 고유치·HHT lumped mass 채택과 재검증
|
||||
|
||||
2026-10-11 사용자가 고유치와 HHT의 질량을 lumped mass로 승인했다.
|
||||
[HEX8-ADR-010](ADR.md)과 [HHT-ADR-012](../hht-implicit-dynamics/ADR.md)의 변경본 evidence다.
|
||||
기존 consistent 구현의 통과·실패와 private 비교 연구를 현재 검증으로 승계하지 않는다.
|
||||
현재 checklist는 각 기능 PRD에 유지한다.
|
||||
|
||||
## 계산과 결과 계약
|
||||
|
||||
- MITC4 고유치의 기존 nodal block lumped mass는 유지한다.
|
||||
- MITC4 HHT는 `rho*N_i*dV0`의 절점 운동에너지에서 질량·관성력·convective 항·
|
||||
관성 접선·운동에너지·선형/각운동량과 시간 미분을 함께 계산한다. 회전 block을
|
||||
scalar diagonal로 치환하지 않는다. Geometry·moving drilling null·physical20
|
||||
SPD/rcond 검사와 HHT 계수·초기화·허용값을 유지한다.
|
||||
- Hex8은 기존 8점 적분의 전체 24×24 reference consistent matrix를 만든 뒤 각 행의
|
||||
합을 대각에 배치한다. 이후 BC를 축소한다. Warped 요소의 절점 질량은 `rho*V/8`로
|
||||
치환하지 않는다. 선형/비선형 HHT와 고유치가 같은 질량을 사용한다.
|
||||
- HDF5의 mass metadata는 Shell `nodal-lumped-kinetic`, Hex8 `lumped-reference`다.
|
||||
기존 consistent metadata는 현재 비교기가 거부한다. Schema layout·dtype와 공개 입력
|
||||
옵션은 유지한다. 원본 reference와 tolerance를 변경하지 않았다.
|
||||
|
||||
## 변경본 검사
|
||||
|
||||
Evidence는 `.dryforge/lumped-mass-adoption-20261011/`에 보존한다. Git HEAD만으로는
|
||||
아직 커밋하지 않은 변경본을 식별할 수 없으므로 실제 binary·입력·결과 hash도 기록한다.
|
||||
|
||||
| 검사 | 현재 결과 |
|
||||
| --- | --- |
|
||||
| MSVC x64 Debug 빌드 | native0; 새 production kernel·절차·writer와 unit/integration/reference executable 연결 |
|
||||
| 새 질량 관련 focused C++ | 38/38 PASS, native0 (`new-kernels.log`·`new-kernels-native.json`) |
|
||||
| HHT/Hex8 Python 비교기 | 137 PASS (`python-focused.log`) |
|
||||
| 독립 수치 검토 | 수식·조건 검사·BC 전 lumping·독립 oracle 검토 완료; 닫힌 실행 evidence와 남은 범위는 각 numerical report 참조 |
|
||||
| 전체 Debug CTest | 789개 제외 없이 자연 종료, native8: 784 PASS·4 FAIL·1 SKIP (`full-direct-summary.json`) |
|
||||
| 마지막 테스트 수정 후 Debug 재빌드·focused 검사 | build native0, discovery790. 외력 미분/pointwise 2 PASS 및 factory/overflow 2 PASS, 각각 CTest native0 |
|
||||
|
||||
Focused 검사는 Shell의 analytic mass·eigen 초기 질량 대조·warped nodal moments·Jensen·
|
||||
moving null·scaled 관성 partial/effective tangent sweep와 omission mutation, Hex8의 affine/
|
||||
warped 독립 절점 질량·BC 전 행합의 dense eigen oracle·관성 반력·독립 SDOF/MDOF 2차
|
||||
U/V/A 수렴, 공식 HDF5 readback을 포함한다. 이 통과는 C08의 시간 정확도를 대신하지 않는다.
|
||||
|
||||
초기 `focused-kernels.log` 실행은 독립 dense oracle가 constrained 열을 먼저 제거한 오류를 검출했다.
|
||||
전체 24 DOF 질량을 먼저 구성하도록 수정한 뒤 새 38개 검사를 통과했다. 이전 partial
|
||||
실행 로그와 중단 이유는 `focused-interrupted.json`에 보존했다.
|
||||
|
||||
`python scripts/execute.py`는 현재 Debug preset으로 호출했다. 기존 전체 CTest의
|
||||
16839초 기록이 runner의 1800초 deadline을 초과하며, 개별 테스트가 같은 임시 경로를
|
||||
공유하므로 CTest 병렬 실행은 선택하지 않았다. 부분 실행을 보존하고 직접
|
||||
`ctest --preset windows-msvc-ninja-debug --output-on-failure`로 제외 없이 직렬 실행한다.
|
||||
이 실행은 `MKL_NUM_THREADS=1`, `OMP_NUM_THREADS=1`, `CTEST_PARALLEL_LEVEL=1`이며
|
||||
수식·gate·허용값을 변경하지 않는다. 실행 중단을 수치 실패나 PASS로 보고하지 않는다.
|
||||
|
||||
새 C08a는 731.27초 후 FAIL로 종료했다. Finest `h=1/256`의 회전 좌표 가속도 최대
|
||||
오차는 `5.6747291e-4`로 `1e-4`를 초과하고 마지막 두 오차 비의 raw log2 값은 `1.02838`, `1.02946`으로
|
||||
요구 `1.8`보다 작다. 회전 속도/가속도의 100배 noise-separation도 충족하지 못했다.
|
||||
Noise-separation 미달로 해당 rate의 N7 시간 정확도는 INCONCLUSIVE이며 raw 차수를
|
||||
인증된 차수로 해석하지 않는다. 기존 consistent C08a와 실패 predicate는 같지만 새 질량의 수치가 달라졌으므로
|
||||
metric body 동일성을 주장하지 않는다.
|
||||
|
||||
새 C08b는 438.18초 후 `h=1/256`에서 `invalid-dynamic-rotation` 예외로 종료했다.
|
||||
완료한 `h=1/64,1/128`의 energy/L drift는 감소했지만, 나머지 세 grid와 마지막 두
|
||||
refinement의 self-difference·finest 기준은 생성되지 않았다. 기존 consistent C08b는
|
||||
다섯 grid를 완료한 뒤 정확도 기준에서 실패했으므로 이번 예외를 같은 baseline 실패로
|
||||
취급하지 않는다. 별도 Debug probe는 `h=1/256`, 증분56, Newton 반복3,
|
||||
`t=0.21875`에서 node index4의 유한한 회전 좌표
|
||||
`(0.64127523,-1.19777570,3.61620987)`가 principal chart를 벗어났음을 확인했다.
|
||||
자료는 `c08b-diagnostic/run.log`·`run-native.json`에 있다. 이 실행 당시 큰 Newton trial의
|
||||
근본 원인은 미확정이었다. 후속 [2026-10-12 원인 조사](../hht-implicit-dynamics/newton-rotation-investigation.md)는
|
||||
off-root moving-null 접선 상쇄와 두 private 해결 후보를 확인했다. 공식 C08b와 완료
|
||||
blocker는 열린 상태이며 gate 완화나 coordinate clamp로 숨기지 않는다.
|
||||
|
||||
독립 검토에서 verification-only `RigidForceRates`의 사용되지 않던 병진 미분에
|
||||
consistent 계수 `0.2/3`이 남아 있음을 발견했다. 이를 nodal mass `0.2`로 수정하고,
|
||||
독립 volume force의 5-point 시간차분과 모든 24 rows를 대조하는 검사를 추가했다.
|
||||
별도 Debug probe의 변경 전 RED는 병진 오류를 검출했고, 변경 후 미분 검사와 기존
|
||||
pointwise force/power/momentum 검사 각각 PASS였다(`force-rate-oracle/`). 이 변경은
|
||||
전체 CTest binary에 포함되지 않았으며, 종료 후 재빌드한 공식 Debug binary에서 관련 두
|
||||
검사를 다시 통과했다(`final-oracle-rebuild/ctest.log`).
|
||||
|
||||
전체 로그를 집계하면서 추가 두 FAIL을 발견했다. Factory의 기존 consistent off-diagonal
|
||||
기대값을 nodal diagonal `0.25`와 off-diagonal zero 검사로 수정했다. Overflow fixture의
|
||||
`E=3e306`은 새 mass에서 validation scale이 finite이므로, 독립 계산에 따라 local K·λ·
|
||||
spectral enclosure는 finite이면서 `||K||F+|λ|*||M||F`만 overflow하는 `E=4e306`으로
|
||||
바꿨다. Production guard·tolerance는 유지했고 두 검사 모두 공식 Debug focused CTest에서
|
||||
통과했다(`final-stale-fixtures.log`·`final-stale-fixtures-native.json`). 원문 전체 실행의
|
||||
네 FAIL을 두 FAIL로 덮어쓰거나, 마지막 discovery790개를 전체 재실행했다고 주장하지 않는다.
|
||||
|
||||
전체 실행은 9131.26초 후 자연 종료했다. 마지막 세 test source의 수정 전후 production
|
||||
190개 파일과 필수 원본16개 hash는 동일하다. 원본 두 동해석의 Debug 101 endpoints도
|
||||
각각 PASS였다. 남은 미해결은 C08a 정확도·C08b Newton trial과 기존 C04a SKIP이며
|
||||
전체 green 또는 HHT 기능 완료를 선언하지 않는다.
|
||||
|
||||
최종 test source 세 개·Debug binary·닫힌 로그의 hash와 후속 검사의 구분은
|
||||
`final-test-identities.json`에 보존한다. 초기 helper identity record의 force-only 설명에
|
||||
빠진 두 Hex8 test 수정을 별도 annotation으로 정정하고 원문 record는 유지했다.
|
||||
|
||||
## 원본 비교
|
||||
|
||||
각 원본 INP를 byte-identical 복사한 별도 경로에서 실제 CLI를 실행했다. Hex8 정적·
|
||||
고유치는 Debug, 긴 원본 동해석은 같은 production 소스의 Release다. 전체 Debug 회귀와
|
||||
reference 실행 구성을 구분한다. Private kernel override는 사용하지 않는다.
|
||||
|
||||
| 모델 | CLI / 비교 결과 |
|
||||
| --- | --- |
|
||||
| Hex8 frequency | Debug native0 / 원본 10 Value 모두 PASS. 최대 상대차 `0.0019610496%` |
|
||||
| Hex8 linear static | Debug native0 / U·RF·8점 S PASS |
|
||||
| Hex8 nonlinear static | Debug native0 / U·RF·8점 S PASS |
|
||||
| Hex8 linear dynamic | Release native0 / 전체 101-frame U PASS |
|
||||
| Hex8 nonlinear dynamic | Release native0 / 전체 101-frame U PASS |
|
||||
| MITC4 HHT | Release native0 / 전체 101-frame U PASS, UR 경고 200건 |
|
||||
|
||||
원본 고유치의 기존 consistent mass 불일치는 새 production 실행에서 해소됐다.
|
||||
원본 Value의 단위/quantity·모드 identity·행5%/RMS1% 정책은 그대로다. 독립으로
|
||||
mean-volume K와 nodal mass를 조립한 공개 10개 모드의 residual은 최대 `1.16e-17`,
|
||||
mass Gram 오차는 `1.33e-15`이며 고정 모드 성분은 exact0이다.
|
||||
[물리 검토](physics-evaluation.md)는 이러한 제한된 확인과 잔여 범위를 구분한다.
|
||||
|
||||
다섯 Hex8 원본과 Shell 원본의 닫힌 실행 증거·HDF observable·외부 비교 metric/hash를
|
||||
독립 감사했다(finding0). 자료는 `independent-closed-evidence.json`이며 실제 energy·
|
||||
force/moment·반력·운동량 ledger는 두 기능의 `lumped-mass-physics-details.json`에 둔다.
|
||||
|
||||
Release 동해석으로 대체한 중복 Debug 원본 실행은 의도적으로 중단했다. 각 `interrupted.json`
|
||||
및 raw native record를 보존하며 완료한 원본 비교로 세지 않는다. Release recorder의 folder
|
||||
label이 case에 들어간 경우 원본 record를 보존하고 실제 입력 stem에서 logical identity를
|
||||
명시적으로 유도한 `comparison-execution.json`을 별도로 사용했다.
|
||||
|
||||
Shell 원본은 변위 비교를 확인하는 coarse 시간간격의 모델이다. U 일치로 물리 가속도의
|
||||
시간 정확도·에너지 보존·C08 완료를 추론하지 않는다. 기존 C08 실패와 잔여 지원 범위는
|
||||
[HHT PRD](../hht-implicit-dynamics/PRD.md)와 [물리 검토](../hht-implicit-dynamics/physics-evaluation.md)에 유지한다.
|
||||
|
||||
## 최종 검토와 인계
|
||||
|
||||
2026-10-12 `hht_mass_probe_review`의 읽기 전용 최종 diff 검토에서 새 actionable 코드
|
||||
finding은 없었다. Hex8 frequency/HHT는 full element M을 계산한 뒤 BC를 partition하고,
|
||||
같은 assembled M을 high+low 관성 작용·endpoint 반력·운동에너지·선형/각운동량·effective
|
||||
tangent에 전달한다. Shell eigen의 기존 lumped 경로와 HHT의 새 nodal kinetic 경로,
|
||||
두 요소의 writer/self-check/comparator mass metadata 연결도 일치한다. Test-only 세 파일은
|
||||
승인된 질량 oracle와 기존 nonfinite gate를 검증한다. 이 검토에서는 실행 근거를 재사용했고
|
||||
build/test를 추가 실행하지 않았다.
|
||||
|
||||
아래 P1 판단과 인계는 초기 lumped 변경본의 실패 당시 기록이다. 후속 사용자 승인으로
|
||||
[HHT-ADR-013 초기 Newton 정책](../hht-implicit-dynamics/newton-start-policy.md)을 적용했고
|
||||
공식 C08b 5개 grid 모두 T=.25까지 회전 예외 없이 완료해 해당 runtime finding을
|
||||
닫았다. 기존 시간 정확도·P 감소 실패는 유지하며 변경본 전체802 Debug 회귀는
|
||||
native8:799 PASS·2 FAIL·1 SKIP으로 자연 종료했다. 원본 Hex8 선형/비선형 HHT의
|
||||
101-frame smoke도 PASS다. 이 후속 결과를 아래 과거789개의 통과로 소급하지 않는다.
|
||||
|
||||
**당시 완료 판정의 P1 blocker는 C08b의 새 runtime 실패였다.**
|
||||
[FEM-REQ-HEX8-024](PRD.md#fem-req-hex8-024--회귀완료-판정)는 신규/영향 검사 PASS와
|
||||
신규 physics 오류0을 요구한다. 과거 C08b는 모든 grid를 완료한 뒤 정확도 기준에서
|
||||
실패했고 현행 결과는 principal chart 예외이므로 동일 baseline 예외로 분류할 수 없다.
|
||||
Hex8 원본5개·독립 수치/물리 검토·최종 diff 검토 완료와 기능 검증 완료를 구분한다.
|
||||
|
||||
후속 owner는 다음 자료와 경계를 인계받는다.
|
||||
|
||||
- 실제 실패 검사는 `HhtShellPhysics.C08bFreeFiniteRotationPlateSelfConvergenceAndPhysicalInvariants`다.
|
||||
전체 raw는 `.dryforge/lumped-mass-adoption-20261011/full-direct.log`와
|
||||
`full-direct-summary.json`, 별도 계측은 같은 폴더의 `c08b-diagnostic/run.log`에 있다.
|
||||
Probe의 증분56·반복3·node index4는 source node label5이며 회전 norm은 약 `3.86301>π`다.
|
||||
- 다음 조사에서는 직전 accepted state와 predictor, correction, effective tangent 및
|
||||
drilling regularity를 함께 확인해 큰 Newton trial의 원인을 분리한다. Positive physical20
|
||||
mass나 원본 U 일치만으로 이 갱신의 안정성을 추론하지 않는다.
|
||||
- 기존 gate·100회 full Newton·fixed schedule·물리 질량을 유지해 구현 오류를 조사한다.
|
||||
시간 적분·회전 chart·수용 기준 변경이 필요하면 정식화와 독립 검토, 필요한 사용자
|
||||
결정이 선행되어야 한다. 좌표 clamp나 tolerance 완화로 결과를 통과시키지 않는다.
|
||||
- 수정 후 관련 검사·필수 비교·전체 Debug 회귀를 수행하고 C08a와 C04a도 별도 판정한다.
|
||||
현행 전체789개와 후속 focused4개를 합쳐 최종790개 전체 PASS로 보고하지 않는다.
|
||||
|
||||
현재 완료 checklist는 [Hex8 PRD](PRD.md#현재-checklist) 한 곳에 둔다.
|
||||
@@ -0,0 +1,262 @@
|
||||
{
|
||||
"review_date": "2026-10-12",
|
||||
"scope": "\ub2eb\ud78c lumped \uc0dd\uc0b0 HDF\uc758 \uae30\uc900 8\uc810 \ub3c5\ub9bd \ubcf5\uad6c; \uc194\ubc84 \uc7ac\uc2e4\ud589 \uc5c6\uc74c; \ub0b4\ubd80 high+low gate \ud1b5\uacfc \uc8fc\uc7a5 \uc5c6\uc74c",
|
||||
"cases": {
|
||||
"hexa_linearstatic": {
|
||||
"folder": ".dryforge\\lumped-mass-adoption-20261011\\references\\hexa_linearstatic",
|
||||
"configuration": "MSVC x64 Debug",
|
||||
"sha256": "025fe733ac4fa1017babe8c698471a17ad275a43820356de9de535cdf3ba6a20",
|
||||
"native_exit": 0,
|
||||
"metadata_mass": "lumped-reference",
|
||||
"frames": 1,
|
||||
"mass_total": 444063.05093199987,
|
||||
"maximums": {
|
||||
"fixed_U": 0,
|
||||
"free_RF": 0,
|
||||
"RF_gap": 1.7462298274040222e-10,
|
||||
"free_RN64_reconstruction": 2.696491492315545e-07,
|
||||
"strain_gap": 9.677351422380381e-20,
|
||||
"stress_gap": 1.2338205124251544e-08,
|
||||
"U_gap": 1.1368683772161603e-13,
|
||||
"force_ledger_gap": 1.978719410544727e-10,
|
||||
"force_balance_ratio": 1.4290793322311065e-13,
|
||||
"element_force_sum": 1.1641532182693481e-10,
|
||||
"element_moment_sum": 1.4551915228366852e-10,
|
||||
"element_force_ratio": 1.3028207107302464e-16,
|
||||
"element_moment_ratio": 1.42464370853327e-16,
|
||||
"center_xy_symmetry": 3.396772114885177e-10
|
||||
},
|
||||
"minimums": {
|
||||
"detF": 0.9999869380847567,
|
||||
"U": 186.35946178395668,
|
||||
"T": 0.0
|
||||
},
|
||||
"final": {
|
||||
"frame": 0,
|
||||
"time": 0.0,
|
||||
"node2_U": [
|
||||
0.001861312878526077,
|
||||
0.0018613125388488654,
|
||||
4.563818307322808e-06
|
||||
],
|
||||
"T": 0.0,
|
||||
"U": 186.35946178395668,
|
||||
"W": null,
|
||||
"defect": null,
|
||||
"support_F_sum": [
|
||||
-99999.99999931706,
|
||||
-100000.00000010608,
|
||||
-100000.00000000751
|
||||
]
|
||||
},
|
||||
"max_T": 0.0,
|
||||
"max_abs_defect": null,
|
||||
"comparison_passed": true
|
||||
},
|
||||
"hexa_nonlinearstatic": {
|
||||
"folder": ".dryforge\\lumped-mass-adoption-20261011\\references\\hexa_nonlinearstatic",
|
||||
"configuration": "MSVC x64 Debug",
|
||||
"sha256": "33ee601b4c094474f28648f3671e254e3610d9ef46f021fc0c54ae8b87579e81",
|
||||
"native_exit": 0,
|
||||
"metadata_mass": "lumped-reference",
|
||||
"frames": 10,
|
||||
"mass_total": 444063.05093199987,
|
||||
"maximums": {
|
||||
"fixed_U": 0,
|
||||
"free_RF": 0,
|
||||
"RF_gap": 2.3283064365386963e-10,
|
||||
"free_RN64_reconstruction": 35.36235751599321,
|
||||
"strain_gap": 1.079172914361182e-19,
|
||||
"stress_gap": 1.3707904145121574e-08,
|
||||
"U_gap": 1.4210854715202004e-13,
|
||||
"force_ledger_gap": 7.102585186657961e-10,
|
||||
"force_balance_ratio": 2.489950723468516e-06,
|
||||
"element_force_sum": 1.4551915228366852e-10,
|
||||
"element_moment_sum": 2.9103830456733704e-10,
|
||||
"element_force_ratio": 1.856999104988803e-16,
|
||||
"element_moment_ratio": 1.7619557460248046e-16,
|
||||
"center_xy_symmetry": 3.3990287624449667e-10
|
||||
},
|
||||
"minimums": {
|
||||
"detF": 0.9999869391442063,
|
||||
"U": 1.8636157385260317,
|
||||
"T": 0.0
|
||||
},
|
||||
"final": {
|
||||
"frame": 9,
|
||||
"time": 0.0,
|
||||
"node2_U": [
|
||||
0.0018611071696827675,
|
||||
0.0018611068297798912,
|
||||
4.358230949307811e-06
|
||||
],
|
||||
"T": 0.0,
|
||||
"U": 186.31853170879367,
|
||||
"W": null,
|
||||
"defect": null,
|
||||
"support_F_sum": [
|
||||
-100000.00455958676,
|
||||
-100000.00455951673,
|
||||
-100001.18947294424
|
||||
]
|
||||
},
|
||||
"max_T": 0.0,
|
||||
"max_abs_defect": null,
|
||||
"comparison_passed": true
|
||||
},
|
||||
"hexa_dynlinear": {
|
||||
"folder": ".dryforge\\lumped-mass-adoption-20261011\\references\\hexa_dynlinear-release",
|
||||
"configuration": "MSVC x64 Release, current production source",
|
||||
"sha256": "051f92942d056672140aea4156134452aaaf006d7e6e6adeff381163e879f325",
|
||||
"native_exit": 0,
|
||||
"metadata_mass": "lumped-reference",
|
||||
"frames": 101,
|
||||
"mass_total": 444063.05093199987,
|
||||
"maximums": {
|
||||
"fixed_U": 0,
|
||||
"free_RF": 0,
|
||||
"RF_gap": 3.4924596548080444e-10,
|
||||
"free_RN64_reconstruction": 1.1003464805980911e-07,
|
||||
"strain_gap": 9.953828270320105e-19,
|
||||
"stress_gap": 2.3102620616555214e-07,
|
||||
"U_gap": 1.1368683772161603e-13,
|
||||
"force_ledger_gap": 7.226450549069341e-10,
|
||||
"force_balance_ratio": 1.4190042506689565e-16,
|
||||
"element_force_sum": 3.2014213502407074e-10,
|
||||
"element_moment_sum": 2.9103830456733704e-10,
|
||||
"element_force_ratio": 2.1273649523223604e-16,
|
||||
"element_moment_ratio": 2.199818933208794e-16,
|
||||
"center_xy_symmetry": 3.4514411684574697e-10,
|
||||
"fixed_V": 0,
|
||||
"fixed_a": 0,
|
||||
"fixed_A": 0,
|
||||
"T_gap": 7.105427357601002e-15,
|
||||
"P_gap": 3.637978807091713e-12,
|
||||
"L_gap": 6.548361852765083e-11,
|
||||
"W_gap": 1.1368683772161603e-13,
|
||||
"defect_gap": 1.2789769243681803e-13,
|
||||
"current_moment_ledger_gap": 1.5448254373149724e-09,
|
||||
"current_internal_moment": 287.045277721086,
|
||||
"actual_current_moment_balance": 287.04527772194706,
|
||||
"current_moment_balance_ratio": 2.9064182947722226e-05
|
||||
},
|
||||
"minimums": {
|
||||
"detF": 0.9999790423308456,
|
||||
"U": 0.0,
|
||||
"T": 0.0
|
||||
},
|
||||
"final": {
|
||||
"frame": 100,
|
||||
"time": 10.0,
|
||||
"node2_U": [
|
||||
0.0018176922724947634,
|
||||
0.001817691931726987,
|
||||
4.563816808086208e-06
|
||||
],
|
||||
"T": 0.24997898188787254,
|
||||
"U": 177.74076426102997,
|
||||
"W": 256.22123629162513,
|
||||
"defect": -78.2304930487073,
|
||||
"support_F_sum": [
|
||||
-96232.31268672507,
|
||||
-96232.31259548312,
|
||||
-99999.75662111596
|
||||
]
|
||||
},
|
||||
"max_T": 51.614568684415126,
|
||||
"max_abs_defect": 78.2304930487073,
|
||||
"comparison_passed": true
|
||||
},
|
||||
"hexa_dynnonlinear": {
|
||||
"folder": ".dryforge\\lumped-mass-adoption-20261011\\references\\hexa_dynnonlinear-release",
|
||||
"configuration": "MSVC x64 Release, current production source",
|
||||
"sha256": "8730e5562c91b3c7c9e654c811d2791ab7d24fdcc62286b0b28efa7cdc5957d6",
|
||||
"native_exit": 0,
|
||||
"metadata_mass": "lumped-reference",
|
||||
"frames": 101,
|
||||
"mass_total": 444063.05093199987,
|
||||
"maximums": {
|
||||
"fixed_U": 0,
|
||||
"free_RF": 0,
|
||||
"RF_gap": 3.4924596548080444e-10,
|
||||
"free_RN64_reconstruction": 1.0344348311264184e-07,
|
||||
"strain_gap": 9.18501352178882e-19,
|
||||
"stress_gap": 2.1944288164377213e-07,
|
||||
"U_gap": 8.526512829121202e-14,
|
||||
"force_ledger_gap": 9.998437633385038e-10,
|
||||
"force_balance_ratio": 1.3976814460427568e-16,
|
||||
"element_force_sum": 2.473825588822365e-10,
|
||||
"element_moment_sum": 3.4924596548080444e-10,
|
||||
"element_force_ratio": 2.297419857405169e-16,
|
||||
"element_moment_ratio": 2.456492632639856e-16,
|
||||
"center_xy_symmetry": 3.4549370656056233e-10,
|
||||
"fixed_V": 0,
|
||||
"fixed_a": 0,
|
||||
"fixed_A": 0,
|
||||
"T_gap": 7.105427357601002e-15,
|
||||
"P_gap": 5.4569682106375694e-12,
|
||||
"L_gap": 8.003553375601768e-11,
|
||||
"W_gap": 1.7053025658242404e-13,
|
||||
"defect_gap": 1.7053025658242404e-13,
|
||||
"current_moment_ledger_gap": 1.798303914284888e-09,
|
||||
"current_internal_moment": 2.3456436792912427e-09,
|
||||
"actual_current_moment_balance": 1.6298145055770874e-09,
|
||||
"current_moment_balance_ratio": 2.7423916459990335e-16
|
||||
},
|
||||
"minimums": {
|
||||
"detF": 0.9999790435523218,
|
||||
"U": 0.0,
|
||||
"T": 0.0
|
||||
},
|
||||
"final": {
|
||||
"frame": 100,
|
||||
"time": 10.0,
|
||||
"node2_U": [
|
||||
0.0018178450958853847,
|
||||
0.0018178447552973686,
|
||||
4.365606357013274e-06
|
||||
],
|
||||
"T": 0.25133992029753627,
|
||||
"U": 177.77055436719652,
|
||||
"W": 256.2426406634893,
|
||||
"defect": -78.22074637599522,
|
||||
"support_F_sum": [
|
||||
-96263.0385934654,
|
||||
-96263.03853592947,
|
||||
-100002.93934163265
|
||||
]
|
||||
},
|
||||
"max_T": 51.61334640118332,
|
||||
"max_abs_defect": 78.22074637599522,
|
||||
"comparison_passed": true
|
||||
}
|
||||
},
|
||||
"final_verification_scope": {
|
||||
"full_789": {
|
||||
"native_exit": 8,
|
||||
"counts": {
|
||||
"pass": 784,
|
||||
"fail": 4,
|
||||
"skip": 1
|
||||
},
|
||||
"log_sha256": "47b814880ebeaf923002a52d0919703fc4e0671b298e4ba2c026c5c2ba331da6",
|
||||
"note": "\ucd5c\uc885 test-only \uc218\uc815 \uc804 raw \ud310\uc815\uc744 \ubcf4\uc874"
|
||||
},
|
||||
"final_debug_build_exit": 0,
|
||||
"final_discovery_count": 790,
|
||||
"final_790_full_executed": false,
|
||||
"final_hht_oracle_focused": {
|
||||
"native_exit": 0,
|
||||
"passed": 2
|
||||
},
|
||||
"final_hex8_stale_fixture_focused": {
|
||||
"native_exit": 0,
|
||||
"passed": 2
|
||||
},
|
||||
"final_test_manifest_sha256": "83dfab0cad81d11351c0a039161da565529f0cc7f455263088d362cfd5426446",
|
||||
"production_file_count": 190,
|
||||
"reference_file_count": 16,
|
||||
"independent_identity_mismatches": 0,
|
||||
"remaining_status": "HHT C08a/C08b OPEN; C04a SKIP; \uc804\uccb4 \ud1b5\uacfc \uc8fc\uc7a5 \uc5c6\uc74c"
|
||||
}
|
||||
}
|
||||
@@ -6,13 +6,22 @@
|
||||
|
||||
## 계산·형상 인증
|
||||
|
||||
2026-10-11 [HEX8-ADR-010](ADR.md)에 따라 M은 full reference row-sum diagonal이다.
|
||||
아래 consistent M의 완료·실패 수치는 당시 이력이다. Lumped 변경본의 필수 원본5개
|
||||
비교와 수치·물리 검토는 완료했으며 현재 범위는 [최종 인계](final-handoff.md)를 따른다.
|
||||
사용자가 유예한 최신 전체 통합 검증은 완료로 표시하지 않는다.
|
||||
Mass positivity 및 eigen search bound는 M_L−M_C>=0의 보수적 lower bound를 사용할 수
|
||||
있으나 full row-sum 누적/조립의 실제 roundoff graph와 SPD evidence도 검토해야 한다.
|
||||
BC 제한 이후 행 합으로 바꾸거나 기존 guard·수치 기준을 비교 결과에 맞춰 완화하지 않는다.
|
||||
|
||||
모든 input/파생 값/결과를 finite 검증하고 positive Jacobian·밀도·material capability를 확인한다.
|
||||
정적·고유치와 기존 계산은 Float64다. 사용자 승인 [정밀도 변경안](precision-proposal.md)에 따라
|
||||
Solid HHT의 내부 물리 상태와 힘·rates·수지·gate 계산은 normalized high+low를 사용한다.
|
||||
Float64 sparse backend와 반올림 출력은 유지하며, 전체 상태 gate를 rounded 출력만으로
|
||||
재계산한 gate PASS로 표현하지 않는다. 변경본 내부 검증과 정적2·동적2 원본 비교는
|
||||
완료했다. 전체787 회귀 실행·baseline 대조도 완료했으나 기존 FAIL2·SKIP1을 유지한다.
|
||||
Modal 비교는 원본 대기다. 실제 완료 범위는
|
||||
Consistent M 당시 Modal 원본 비교는7/10 family FAIL이었다. 현재 lumped M의
|
||||
최저10 Value는 모두 PASS이며 이 과거 실패를 소급 변경하지 않는다. 실제 완료 범위는
|
||||
[PRD checklist](PRD.md#현재-checklist)를 따른다.
|
||||
Whole-cell 인증은 outward interval coefficient bounds와
|
||||
subdivision이며 estimate-only positive 검사와 abs(det J)를 허용하지 않는다.
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# Hex8 독립 수치 검토
|
||||
|
||||
2026-10-11 질량 정책 변경: [HEX8-ADR-010](ADR.md)에 따라 현재 고유치·HHT는 lumped mass를 사용한다. 아래 consistent 질량을 전제로 한 수식 후보·검토·PASS/FAIL은 해당 시점의 이력이다. 변경본 통과로 승계하지 않으며 현재 수식은 [formulation](formulation.md), 재검증 상태는 [PRD](PRD.md)의 현재 checklist를 따른다.
|
||||
|
||||
검토 대상은 [PRD](PRD.md), [formulation](formulation.md), [numeric controls](numeric-controls.md),
|
||||
[I/O](io.md), [reference mapping](reference-model.md)이다. 2026-10-08 작성자와 독립된
|
||||
`hex8_t1_numerical` reviewer가 문서·관련 코드·원본을 대조했다. 수식에 추가 blocker는 없으나
|
||||
@@ -242,3 +244,244 @@ binary hash라고 표현하지 않는다. 감사 native0·finding0, bounded evid
|
||||
판정은 종료 evidence의 일관성·새 회귀 없음에 한정하며 전체 green·release 또는
|
||||
미제공 modal Value의 통과 판정이 아니다. 실제 원본의 독립 물리 수지 범위는
|
||||
[physics review](physics-review.md)를 따른다.
|
||||
|
||||
## 2026-10-11 제공 modal 원본의 독립 검토
|
||||
|
||||
제공된 `hexa_freq.txt`의 직접 읽기와 root 비교기 diff를 작성자와 독립적으로 검토했다.
|
||||
새 TXT parser·실제 frequency 분기·원본 raw hash/보고서 보호·mode1–10 일대일 대응·반복
|
||||
고유치 보존·유일한 source Step-1 binding·HDF5 quantity/unit/dtype/finite가 bounded PASS다.
|
||||
영향 Python native0·JUnit136 PASS(95 Hex8/41 HHT)도 closed artifact로 확인했다.
|
||||
원본14개를 포함한23개 소비 artifact의 SHA를 검토 전후 대조했고 모두 동일하다.
|
||||
독립 audit native0·finding0은 비교 코드와 증거의 일관성 판정이다.
|
||||
|
||||
실제 λ 오차와 공통 row5%/singleton RMS1%를 독립 재계산한 결과 mode3/4/5/6/7/9/10의
|
||||
7개 family FAIL을 재현했다. 최대 mode5는 원본52797 대 FESA63489.09126468376,
|
||||
relative RMS0.20251323493160142다. `Value`와 `Freq`의 각 decimal 표시 해상도 구간에서
|
||||
`f=sqrt(lambda)/(2*pi)` 관계는 일관되지만 이 보조 검토의 구간을 비교값 보정이나 tolerance로
|
||||
사용하지 않았다. 동일 mode ID의 출력 값 그대로 판정했고 frequency로 바꾸지 않았다.
|
||||
|
||||
공식 readback의24 returned pairs와 선택10개, 저장된 original-pencil verification도 확인했다.
|
||||
이는 FESA 자체 pencil의 검증량 확인이며 새 matrix 조립·eigensolve나 Gram 독립 재계산을
|
||||
수행했다고 주장하지 않는다. 원본 λ만으로 K/M 중 원인을 특정할 수 없고, 원본 mode shape·
|
||||
modal mass·실제 element/mass law 또는 operator evidence 없이 수식·질량·기준 변경을
|
||||
정당화하지 않는다. 최종 기능 완료는 필수 modal 불일치 해결까지 대기다.
|
||||
|
||||
자료는 `.harness/hex8-evidence/mean-volume/modal-final/independent-result.json`,
|
||||
`independent-native.json`, `independent-inventory.json`, `independent-audit.py`다.
|
||||
결과 JSON SHA는 `48c359cf670f9e39792cf58bbe5d7498effabcfd5789c3025904ac8562af5e99`다.
|
||||
전체 C++ 회귀는 직전 `18b36c1` 실행 기록을 참조했고 이번 새 실행으로 표현하지 않았다.
|
||||
|
||||
## 2026-10-11 원본 질량 분리 진단의 독립 검토
|
||||
|
||||
후속 [질량·요소 조사](reference-mass-investigation.md)의4way 계산을 독립 검토했다.
|
||||
Fresh engineering shear B/Cdev·체적 평균 coupling·consistent 적분과 full 행 합 lumping 뒤
|
||||
free restriction의 의미가 맞다. 저장된 두 K·두 M·고유벡터에서 같은 source mode별 오차,
|
||||
총질량과 자체 residual·Gram을 독립 재계산했다. Audit native0·finding0, 소비자료 SHA 불변이다.
|
||||
Mean K+consistent M은 실제 FESA λ를 상대차이4.57e-12로 재현하고, mean K+lumped M은
|
||||
원본10개 λ 모두 상대차이0.00196105% 이내다. 이는 질량 선택 차이를 설명하는 강한 근거다.
|
||||
원본 actual operator 직접 대조나 재조립/eigensolve를 수행했다고 주장하지 않는다.
|
||||
|
||||
진단 script의 `max_eta_r`는 infinity-norm backward residual이다. 공식 T5의
|
||||
Euclidean/Frobenius eta_r와 이름만으로 동일시하지 않으며 두 규격을 별도 재계산했다.
|
||||
후자의4조합 최댓값은3.79e-15 이하, Gram Frobenius 오차는3.36e-15 이하다.
|
||||
Private eigsh의sigma0/k10 결과는 실제 FEAST lowest-N count/completeness 인증이 아니다.
|
||||
현재 FESA mass 정책이나 실제 modal FAIL은 변경하지 않았다.
|
||||
자료는 `.harness/hex8-evidence/mean-volume/modal-mass-investigation/independent-result.json`과
|
||||
같은 폴더의 native/audit에 보존한다. 상세 원본·문서·metric·채택 경계는 위 조사 문서를 따른다.
|
||||
|
||||
## 2026-10-11 row-sum lumped production 채택의 독립 검토
|
||||
|
||||
[HEX8-ADR-010](ADR.md)에 따라 변경된 `ComputeMass`와 eigen/HHT oracle·metadata를
|
||||
읽기 전용으로 검토했다. Full reference consistent24×24를 기존8점으로 계산한 뒤
|
||||
각 전체 행 합을 대각에 저장한다. BC는 이후 procedure에서 적용되므로 구속 열의
|
||||
질량을 잃지 않는다. Positivity/finite 실패를 값 보정으로 숨기지 않으며 stiffness,
|
||||
high+low 상태·계수 lifting·HHT gate를 변경하지 않는다.
|
||||
|
||||
**HEX8-LM-NR-001 — CLOSED: dense eigen oracle의 BC 순서.** 최초 oracle는
|
||||
full_mass를 free×free loop 안에서만 채워 constrained 열을 누락했다. 독립 검토에서
|
||||
이를 지적했고, 전체24 DOF의 독립 closed-form consistent 행렬 생성→full row sum→
|
||||
free restriction으로 수정된 코드를 확인했다. 새 실행 검증은 전체 회귀 결과와 구분한다.
|
||||
수정 전 binary의 부분 실패/중단은
|
||||
`.dryforge/lumped-mass-adoption-20261011/focused-interrupted.json`에 보존한다.
|
||||
|
||||
Warped fixture의 독립 map은
|
||||
`X=(xi+.12*eta*zeta, 2*eta+.09*xi*zeta, 3*zeta+.15*xi*eta)`다. 직접 전개한
|
||||
detJ는 `6-.0135*xi²-.036*eta²-.0324*zeta²+.00324*xi*eta*zeta`로 신규 oracle와
|
||||
일치한다. rho2의 절점 질량은 `11.9454±.00024`이며 부호는 `sx*sy*sz`다.
|
||||
Ni*detJ의 축별 차수는3 이하라 기존2점 rule과 독립3점 적분이 수학적으로 일치한다.
|
||||
비균일 속도 `v_ax=a+1`에서 uniform rhoV/8 shortcut의 T와 차이는 −.00192이므로
|
||||
새 검사는 총질량만 같은 잘못된 uniform lumping도 구별한다.
|
||||
|
||||
Mass lower bound `rho*min(w)/27`는 계속 보수적으로 사용할 수 있다. 양의 shape와
|
||||
weights에서 `M_L-M_C`의 quadratic form은 절점 속도 차이 제곱의 양의 합이다.
|
||||
따라서 기존 consistent SPD lower bound는 lumped에도 유효하다. 추가 full-row 양의
|
||||
합산은 고정 순서이며 기존512eps element/assembly budget과 비교했다. 새로운 기준
|
||||
완화나 eigen upper-bound를 diagonal ratio로 대체하지 않았다. 비트 수준의 PSD나
|
||||
수학적 lower bound만으로 실제 solver 검증을 대신한다는 의미는 아니다.
|
||||
|
||||
Fresh production **MSVC x64 Debug** `hexa_freq` CLI native0와10개 Value 비교를
|
||||
독립 확인했다. 원본 TXT와 HDF5 mode1–10으로 singleton 행/RMS를 직접 재계산했으며
|
||||
공통 row5%/RMS1%로 모두 PASS다. 최대 상대 RMS는 `1.961049613524256e-5`
|
||||
(0.001961049613524256%)이다. 원본·byte 동일 입력 복사본·binary·HDF5 해시와
|
||||
`lumped-reference` metadata를 대조했고 소비 artifact SHA는 검토 전후 동일했다.
|
||||
|
||||
저장된25 returned pairs의 max eta_r/eta_norm/eta_energy는 각각
|
||||
`1.0554551422827935e-17 / 4.440892098500626e-16 / 7.476286423773325e-19`,
|
||||
eta_gram/max_eta_orth는 `4.379426909390015e-15 / 1.0729264698916552e-15`다.
|
||||
이는 저장된 original-pencil checks의 판독이며 reviewer가 production K/M을 새로
|
||||
조립하거나 eigensolve/count certification을 독립 수행한 것은 아니다.
|
||||
Bounded audit native0·finding0 자료는
|
||||
`.dryforge/lumped-mass-adoption-20261011/references/hexa_freq/independent-adoption-audit.json`이다.
|
||||
결과 HDF5 SHA는 `94a576bbfe1d5826235a6323e6d470163ed2e970c4fe6f65a86b2d65a3db7f8a`다.
|
||||
|
||||
전체 Debug/CTest와 정적2·동적2 원본의 새 종료 evidence는 아직 검토하지 않았다.
|
||||
현재 상태는 [PRD](PRD.md)의 checklist를 따른다. 이 bounded modal PASS를 동적
|
||||
시간수렴·전체 green·기능 완료로 확대하지 않으며 이전 consistent modal FAIL은
|
||||
해당 질량 선택의 이력으로 보존한다. Reviewer는 코드·테스트·상위 계약을 수정하지 않았다.
|
||||
|
||||
### 2026-10-12 종료된 검증 근거의 보완
|
||||
|
||||
수정된 dense oracle를 포함한 새8 suites/38 C++ tests의 전체 PASS/native0를 확인했다.
|
||||
Warped nodal mass·비균일 energy, full-row lumped pencil, one-free-DOF/구속 경계의
|
||||
관성 반력, 독립 scalar/3DOF brick oscillator 시간수렴 및 HDF5 readback이 포함된다.
|
||||
이 실행은 수정 전 focused binary의 부분 실패/중단을 새 결과와 분리한다.
|
||||
별도 `python-focused.log`의 pytest137 PASS도 확인했다.
|
||||
|
||||
종료된 원본 comparison의 모든 보고 scalar에서 reference-only scale, near-zero,
|
||||
row5%/RMS1%, exact-zero 분기와 최종 판정을 직접 재계산했다. U는 HDF5 source
|
||||
node/frame 값에도 대조했으며 input/native record/binary/HDF5/원본 hash와
|
||||
`lumped-reference` metadata를 확인했다. RF/S는 보고된 scalar 수치·identity/hash
|
||||
감사이며 별도 stress/reaction recovery oracle를 새로 실행했다는 뜻은 아니다.
|
||||
|
||||
| 종료된 원본 | 실행 구성 | 확인한 families/scalars | 최대 상대 RMS |
|
||||
| --- | --- | ---: | --- |
|
||||
| hexa_linearstatic | MSVC x64 Debug | 3 / 15777; U/RF/S 모두 PASS | U `9.31789815437491e-9`, RF `7.309816326722838e-9`, S `3.42593423675143e-9` |
|
||||
| hexa_nonlinearstatic | MSVC x64 Debug | 3 / 15777; U/RF/S 모두 PASS | U `2.169911561350721e-7`, RF `6.728092996221333e-6`, S `9.338899878251489e-6` |
|
||||
| hexa_freq | MSVC x64 Debug | 10 / 10; Value 모두 PASS | `1.961049613524256e-5` |
|
||||
| hexa_dynlinear | MSVC x64 Release, current production | 101 / 133926; U 모두 PASS | `3.618821318800423e-7` |
|
||||
| hexa_dynnonlinear | MSVC x64 Release, current production | 101 / 133926; U 모두 PASS | `2.1555860391237846e-6` |
|
||||
|
||||
각 CLI native0를 확인했다. Dynamic release의 raw recorder에 보존된 folder label은
|
||||
각각 `hexa_dynlinear-release`와 `hexa_dynnonlinear-release`다. Byte 동일 INP stem으로 논리 case를 연결한
|
||||
`comparison-execution.json`의 raw-record hash와 실제 command를 대조했으며 원시
|
||||
기록을 수정하거나 다른 입력으로 치환하지 않았다. Debug와 Release 검증을 혼합해
|
||||
전체 Debug 통과로 표시하지 않는다.
|
||||
|
||||
Bounded 감사 native0·finding0 자료는
|
||||
`.dryforge/lumped-mass-adoption-20261011/independent-closed-evidence.json`이다.
|
||||
필수 원본5개의 외부 비교는 위 구성에서 모두 PASS이며 새 전체 Debug/CTest는
|
||||
실행 중으로 최종 검토 대기다. 이 두 Release 동적 비교를 Debug 원본 통과로 표시하지 않는다.
|
||||
기존 `execute.py` 중단 native−1과 serial 직접 전체789 CTest의 진행 상태를 구분한다.
|
||||
현재 전체 green·시간/물리 검증 완료·기능 완료 판정은 하지 않는다.
|
||||
|
||||
후속 serial 전체 실행에서 기존 Shell C08a 시간수렴 test의 current lumped FAIL을
|
||||
확인했다. Assertion 구성5개는 baseline과 같으나 실제 metric은 변했다. Finest
|
||||
회전 가속도 error `5.6747291267426469e-4`와 두 raw order 약1.02838/1.02946은
|
||||
기존 기준 미달이며 N7 noise 분리도 미충족이다. 상세 대조는
|
||||
[HHT 독립 검토](../hht-implicit-dynamics/implementation-numerical-review.md)의
|
||||
2026-10-12 current C08a 절을 따른다. 이는 Hex8 원본5개의 bounded 외부 비교 PASS와
|
||||
구분하며 전체 회귀 green으로 승격하지 않는다. C08b 및 전체 종료는 아직 대기다.
|
||||
|
||||
Current shell C08b도 종료됐으며 **FAIL**이다. h=1/64·1/128 완료 뒤 세 번째
|
||||
h=1/256 grid에서 principal rotation 입력 gate의 runtime 예외로 중단했다.
|
||||
5 grids를 완료한 뒤 accuracy assertion이 실패했던 baseline과 다른 결과다.
|
||||
실패 Newton trial의 근본 원인은 추가 진단이 필요하며, 이것을 외부 U PASS나
|
||||
Hex8 physical mass/invariant 검사로 닫지 않는다. 종료 body/source 경로와 별도의
|
||||
unused manufactured force-rate 병진 oracle 오류는
|
||||
[HHT 독립 검토](../hht-implicit-dynamics/implementation-numerical-review.md)의
|
||||
2026-10-12 current C08b 절을 따른다. 전체789 CTest의 종료 판정은 여전히 대기다.
|
||||
|
||||
후속 HHT-LM-NR-002 병진 force-rate oracle 오류는 두 계수 수정과 private Debug
|
||||
RED(native1)/GREEN(native0)·pointwise(native0) 근거로 닫혔다. 상세와 shared 전체
|
||||
binary 재빌드 범위는 같은 HHT 독립 검토의 force-rate oracle 수정 절을 따른다.
|
||||
C08b runtime finding과 C08a 시간정확도 실패를 해소한 결과는 아니다.
|
||||
|
||||
후속 private C08b trace는 h=1/256, increment56, Newton iteration3,
|
||||
t=0.21875에서 internal node4의 finite total rotation norm
|
||||
`3.8630136368942867 rad>pi`를 직접 확인했다. 따라서 immediate principal-chart
|
||||
이탈은 확정됐으나 큰 Newton trial의 근본 원인은 미확정이다. 상세 identity와
|
||||
evidence 경계는 HHT 독립 검토의 C08b private trace 절을 따른다. 해당 finding은
|
||||
OPEN이며 source/tolerance 변경이나 추가 실행으로 전체 PASS를 주장하지 않았다.
|
||||
|
||||
### 2026-10-12 전체 실행에서 추가 발견한 두 stale fixture
|
||||
|
||||
Active serial 전체 로그에서 앞의 shell C08a/C08b 외에 test93
|
||||
`RejectsOverflowingOriginalPencilValidationScale`와 test238
|
||||
`SolidBindingPreservesThreeComponentsAndReferenceMass`의 FAIL을 확인했다.
|
||||
따라서 현재 확인한 실패는4개이며 앞의 두 shell 실패만으로 전체 결과를 요약할 수
|
||||
없다. 전체 실행은 아직 종료하지 않았고 최종 native/집계는 대기다. 기존38-case
|
||||
focused filter에는 이 두 cases가 없었으므로 당시 PASS는 해당 coverage가 아니다.
|
||||
|
||||
**HEX-LM-NR-001 — source corrected, focused execution pending: overflow fixture.**
|
||||
E=3e306, rho=2, axis half-lengths=(1,2,3), nu=.25에서 새 `M_L=12*I24`다.
|
||||
독립 tensor-polynomial K 적분과 normalized dense eigensolution으로
|
||||
`||K||F/E=9.235553192303684`, `||K||inf/E=9.755555555555556`,
|
||||
`max|Kij|/E=1.4037037037037037`, `lambda_max/E=0.6304620575193911`을 얻었다.
|
||||
`||M||F=58.78775382679627`이므로 최대 mode의 validation matrix scale은
|
||||
`46.29900142688912*E`다. 기존3e306은 이 scale도 finite여서 성공 반환이
|
||||
production guard 오류라는 근거가 없다. Consistent 당시 all-odd Walsh mode의
|
||||
overflow 가정은 채택된 lumped fixture에서 유지되지 않는다.
|
||||
|
||||
| 독립 산술량 | E=3e306 | 제안·수정한 E=4e306 |
|
||||
| --- | ---: | ---: |
|
||||
| 최대 local K entry | `4.211111111111111e306` | `5.6148148148148146e306` |
|
||||
| lambda_max | `1.8913861725581735e306` | `2.5218482300775645e306` |
|
||||
| `||K||F` | `2.770665957691105e307` | `3.6942212769214736e307` |
|
||||
| `lambda_max*||M||F` | `1.111903447037563e308` | `1.4825379293834174e308` |
|
||||
| 위 두 scale의 FP64 합 | `1.3889700428066735e308`, finite | nonfinite |
|
||||
| `||K||inf/(4/9)` | `6.585000000000001e307` | `8.780000000000002e307`, finite |
|
||||
|
||||
Matrix-scale overflow의 경계는 E 약`3.882790296678553e306`이며 raw enclosure
|
||||
division의 경계 약`8.189945944703032e306`와 분리된다. 기존 mass roundoff guard의
|
||||
작은 차감은 후보4e306의 enclosure 여유를 뒤집지 않는다. 따라서 E만4e306으로
|
||||
바꾸면 local K·lambda·enclosure를 finite로 유지하면서 기존 original-pencil
|
||||
nonfinite-scale gate를 실제 자극한다. 이는 현재 연산 순서의 intermediate
|
||||
matrix-scale overflow 검사이며 물리 eigenvalue 자체가 무한이라는 주장이 아니다.
|
||||
Owner가 E 한 값과 highest-mode 주석을 수정했다. 실제 candidate FEAST/guard 실행은
|
||||
아직 확인하지 않았고 diagnostic code·기존`1e-10`·finite gate를 바꾸지 않는다.
|
||||
|
||||
**HEX-LM-NR-002 — source corrected, focused execution pending: factory oracle.**
|
||||
단위 cube·rho2의 full-row lumping은24 diagonals 각각0.25, offdiagonals exact0,
|
||||
한 병진방향 total mass2다. 실행 body의 `M(0,3)=0`은 이 계약과 일치한다.
|
||||
기존 test의 consistent `2/54` 기대가 잔존했다. Owner는 diagonal 기존 absolute
|
||||
`1e-15`, total 기존`1e-13`을 유지하고 모든 offdiagonal을 exact0로 검사하도록
|
||||
수정했다. 비교 기준을 완화한 수정이 아니다. Factory 생성·source identity/DOF
|
||||
검사와 zero linear response도 보존된다.
|
||||
|
||||
닫힌 두 실패 body와 독립 산술/source hash 자료는
|
||||
`.dryforge/lumped-mass-adoption-20261011/independent-hex8-stale-fixture-review.json`이다.
|
||||
현재 공유 전체 binary에는 후속 test-only 수정이 반영되지 않았다. 종료 뒤 rebuild와
|
||||
focused 실행 전까지 이 두 findings의 실행 폐쇄를 주장하지 않는다. Required Hex8
|
||||
원본5개의 bounded 외부 PASS와 새 전체 회귀 FAIL/진행 상태를 구분한다.
|
||||
|
||||
### 2026-10-12 최종 종료 로그와 fixture 폐쇄
|
||||
|
||||
전체 serial MSVC x64 Debug CTest가 자연 종료했다. 원시789개 결과를 직접 재집계하고
|
||||
summary/native/hash에 대조하여 **784 PASS / 4 FAIL / 1 SKIP, native8**을 확인했다.
|
||||
Elapsed는9131.26초다. FAIL은 shell C08a, shell C08b, 위 overflow fixture,
|
||||
factory fixture이며 SKIP은 `C04aFinestReductionComparisonIsNumericallyResolved`다.
|
||||
이로써 전체 실행 대기는 종료된 **FAIL**로 갱신된다. 원래4개의 실패 body와
|
||||
skip을 삭제하거나 후속 성공으로 소급 변경하지 않는다.
|
||||
|
||||
**HEX-LM-NR-001 및 HEX-LM-NR-002 — CLOSED.** 공유 binary의 최종 rebuild native0
|
||||
이후 configured CTest에서 E=4e306 original-pencil nonfinite guard와 updated
|
||||
factory full24 diagonal/offdiagonal 검사2개가 모두 PASS/native0다.
|
||||
`final-stale-fixtures.log` 및 native 기록으로 실제 configured 실행을 확인했다.
|
||||
새 HHT force-rate derivative와 기존 pointwise oracle2개도 별도 configured
|
||||
CTest에서 PASS/native0다. 이 후속4개는 이전 shared binary의 전체789 실행과
|
||||
구분한다. 최종 discovery790을 확인했지만 **전체790은 재실행하지 않았다.**
|
||||
|
||||
전체 전후 production190 files와 original reference16 files의 동일 inventory/hash를
|
||||
대조하고 현재 파일도 전부 재해시했다. 최종 unit binary SHA는
|
||||
`4e39c8992a527366e66ea295bf4598a068ca44456fc32c1ab973d2376759c11a`이며 actual
|
||||
파일과 manifest가 일치한다. `final-oracle-identities.json`의 force-only note는
|
||||
실제3개 test TU 변경을 모두 기술하지 못한다. 원시 note를 변경하지 않고 별도
|
||||
`final-test-identities.json`이 누락을 명시 정정했으며3개 source·record hash도
|
||||
독립 확인했다. Production·원본·tolerance/gate 변경을 후속 test 수정에 섞지 않았다.
|
||||
|
||||
닫힌 전체/focused/identity 감사는
|
||||
`.dryforge/lumped-mass-adoption-20261011/independent-final-regression-review.json`이다.
|
||||
Hex8의 두 stale fixture findings는 폐쇄됐지만 HHT C08a 정확도/noise 문제와
|
||||
C08b principal-chart Newton failure는 **OPEN**이다. Final focused4 PASS를
|
||||
전체 green이나 shell 시간정확도 해결로 확대하지 않는다. Reviewer는 추가
|
||||
build/test·source 수정 없이 읽기 전용 감사와 보고서 정적 검토만 수행했다.
|
||||
|
||||
@@ -0,0 +1,122 @@
|
||||
# Hex8 lumped 질량 변경본의 물리 평가
|
||||
|
||||
검토일: 2026-10-11–12. 적용 계약은 [PRD](PRD.md), [정식화](formulation.md),
|
||||
[numeric controls](numeric-controls.md), [reference mapping](reference-model.md),
|
||||
[HEX8-ADR-010](ADR.md)이다. `$fem-physics-review`에 따라 코드·계약·원본·출력을
|
||||
변경하지 않고 현재 생성된 evidence만 검토했다. 단위는 입력 일관 단위이며 SI로 단정하지 않는다.
|
||||
|
||||
**현재 판정: 원본 5 case의 질량·모드·정적 및 HHT 관측 수지에 한정한 물리 대조 PASS.
|
||||
전체 configured Debug 회귀는 실패로 종료했으며 최종 test-only 변경 후 전체 790개는 미실행이다.
|
||||
기능 전체 통과나 release 승인이 아니다.** 과거 consistent 결과를
|
||||
lumped 변경본의 통과로 승계하지 않는다.
|
||||
|
||||
## 원본 고유치의 독립 재계산
|
||||
|
||||
현재 evidence는
|
||||
`.dryforge/lumped-mass-adoption-20261011/references/hexa_freq/`의
|
||||
`native.json`, `comparison.json`, `hexa_freq_results.h5`다. CLI는 MSVC x64 Debug이며
|
||||
native exit 0, comparator도 PASS다. HDF5 SHA-256은
|
||||
`94a576bbfe1d5826235a6323e6d470163ed2e970c4fe6f65a86b2d65a3db7f8a`다.
|
||||
원본과 실행 복사본의 raw SHA는
|
||||
`42cbcec2a8b738f8b6d2c1e13114b8840dccdde6fc3e6f8a43a3272e85d82347`로 같다.
|
||||
|
||||
저장된 기준 좌표·연결·E/ν/ρ로 Python/NumPy/SciPy에서 별도 8점 적분을 수행했다.
|
||||
선형 강성은 deviatoric 항과 `κbbᵀ/V` 체적 항으로 재조립하고, 요소별
|
||||
`m_a=Σ_g ρN_a det J₀g`를 **전체 절점에 조립한 후** 고정 자유도를 제한했다.
|
||||
생산 `ComputeMass`나 저장된 검사값을 독립 계산의 입력으로 사용하지 않았다.
|
||||
|
||||
| 검사 | 현재 계산값 | 해석 |
|
||||
| --- | --- | --- |
|
||||
| Inventory와 BC | 442 nodes, 300 elements, 고정 51 / free 1275 scalar DOFs | 원본 모델과 일치 |
|
||||
| 적분점 기준 Jacobian | `det J₀ ∈ [0.0173052408541, 0.0311031172125]` | 현재 적분점은 양수; whole-cell 인증 대체가 아님 |
|
||||
| 기준 체적·질량 | `V=56.56854152`, `ρV=444063.050932` | 한 병진 축의 총 질량과 일치; 세 축 trace를 총 질량으로 쓰지 않음 |
|
||||
| 조립 절점 질량 | `[423.377959037, 1380.99055553]` | 모두 양수이며 전체 영역의 기준 질량을 보존 |
|
||||
| 모드·강체 증상 | IDs 1–10, 모든 λ>0, 고정 좌표의 eigenvector exact 0 | 지지된 모델에서 불필요한 강체 모드 징후 없음 |
|
||||
| 독립 `max eta_r` / `max eta_energy` | `1.16389132e-17` / `4.15247286e-19` | 계약 `1e-10` 이내 |
|
||||
| 독립 mass Gram / modal norm 결함 | `1.33287771e-15` / `4.44089210e-16` | 계약 `1e-10` 이내 |
|
||||
| 원본 10 λ의 최대 상대차 | `1.96104961e-5 = 0.00196104961%`, mode 4 | 원본 singleton RMS 기준 1% 이내 |
|
||||
|
||||
직접 λ 대조는 제공 TXT의 `Value`를 사용했다. 주파수의 제곱이나 인접 모드 재매칭을
|
||||
사용하지 않았다. 저장된 returned-pair 검사에는 25개가 있으며 최대 `eta_r=1.05545514e-17`,
|
||||
전체 Gram `4.37942691e-15`다. Reviewer의 독립 벡터 재검산은 공개된 10개에 한정된다.
|
||||
최저 모드 count/search bound의 별도 수치 검토를 이 물리 검사로 대체하지 않는다.
|
||||
|
||||
## 신규 정적 2 case와 HHT 2 case의 수지 검산
|
||||
|
||||
닫힌 Debug 정적 2 case와 current production **Release** 선형/TL HHT 각각 101 frames를
|
||||
별도 8점 적분으로 재구성했다. 원본/복사본 raw bytes, native exit 0과 HDF SHA를 확인했고
|
||||
각 comparator도 PASS다. 상세 artifact SHA와 관측량은
|
||||
[lumped 계산 상세](lumped-mass-physics-details.json)에 있다.
|
||||
동적 폴더는 `references/hexa_dynlinear-release/`와 `references/hexa_dynnonlinear-release/`이며
|
||||
Debug 동적 실행으로 표시하지 않는다.
|
||||
|
||||
강성의 reference-relative derivative로 실제 infinitesimal/Green strain과
|
||||
`2μ dev(strain)+κ mean(trace)I`, TL first Piola/Cauchy stress, 내력·에너지를
|
||||
재계산했다. 동적 관측은 `T=½Σm_a|v_a|²`, `P=Σm_av_a`,
|
||||
`L=Σ(X_a+u_a)×m_av_a`, 실제 endpoint force의 trapezoid work를 사용했다.
|
||||
정적 case에는 동적 work/energy defect를 정의하지 않았다.
|
||||
|
||||
| 현재 결과 | 주요 독립 계산의 최대 차이 |
|
||||
| --- | --- |
|
||||
| 선형 정적 | RF `1.74623e-10` force, stress `1.23382e-8` force/length², U `1.13687e-13` force·length |
|
||||
| TL 정적 10 frames | RF `2.32831e-10`, stress `1.37079e-8`, U `1.42109e-13`; 동일 차원 순서 |
|
||||
| 선형 HHT 101 frames | RF `3.49246e-10`, T `7.10543e-15`, P `3.63798e-12`, L `6.54836e-11`; 각 force / force·length / mass·length/time / mass·length²/time |
|
||||
| 선형 HHT work / defect | `1.13687e-13` / `1.27898e-13` force·length |
|
||||
| 선형 HHT force balance | normalized `1.41900e-16`; 저장 free residual을 포함한 ledger 차이 `7.22645e-10` force |
|
||||
| TL HHT 101 frames | RF `3.49246e-10`, T `7.10543e-15`, P `5.45697e-12`, L `8.00355e-11`; 선형 HHT 행과 같은 차원 순서 |
|
||||
| TL HHT work / defect | 각각 `1.70530e-13` force·length |
|
||||
| TL HHT force / current moment balance | normalized `1.39768e-16` / `2.74239e-16` |
|
||||
| 요소 합력·해당 arm 모멘트 | 정적/선형/TL HHT의 상쇄 전 norm 합 대비 모두 `2.46e-16` 이하 |
|
||||
|
||||
구속 U 및 동적 V/a/A와 free RF는 exact 0이다. Positive 하중에 최종 중심 U의 세 성분이
|
||||
positive이며 거의 대칭인 원본 형상에서 x/y 차이는 `3.46e-10` length 이하이다.
|
||||
TL 정적의 실제 Gauss-point `detF≥0.999986939`이고 energy는 양수다.
|
||||
TL 정적 raw free residual 최대 `35.3624` force, 전체 force balance normalized
|
||||
`2.48995e-6`은 승인된 정적 Newton residual 계약의 관측이다. 이를 동적 strict criterion으로
|
||||
바꾸거나 exact equilibrium으로 설명하지 않는다. Stored free residual을 포함한 static ledger의
|
||||
차이는 `7.10259e-10` force 이하다.
|
||||
|
||||
선형 K의 내부 moment는 **reference arm**에서 0이다. Current arm에는
|
||||
`Σu×f_int`가 남아 선형 HHT의 실제 current moment balance 최대 `287.045278 force·length`다.
|
||||
같은 내부 current moment를 포함한 ledger 차이는 `1.54483e-9 force·length`로 일치한다.
|
||||
이를 TL 회전 불변성과 동일시하거나 0으로 강제하지 않는다.
|
||||
|
||||
선형 HHT 최종 `(T,U,W,B)`는
|
||||
`(.249978981888,177.740764261,256.221236292,−78.2304930487)`이고 최대 T는
|
||||
`51.6145686844`다. T/U는 비음수다. Alpha<0와 endpoint work에서 정확 보존이나
|
||||
매-frame 단조 감소를 요구하지 않았으며 coarse original만으로 시간 정확도를 보증하지 않는다.
|
||||
Rounded HDF state의 독립 free residual 재구성 최대 `1.10035e-7` force와 tiny 저장 residual은
|
||||
구분한다. 이 audit는 내부 high+low gate의 독립 재실행이 아니다.
|
||||
|
||||
TL HHT에서는 현재 arm의 내부 moment 최대 `2.34564e-9 force·length`, 저장 free residual을
|
||||
포함한 current moment ledger 차이 `1.79830e-9`로 회전 불변 내력과 일관된다.
|
||||
Gauss-point `detF≥0.999979043552`, T/U는 비음수다. 최종 `(T,U,W,B)`는
|
||||
`(.251339920298,177.770554367,256.242640663,−78.2207463760)`이고 최대 T는
|
||||
`51.6133464012`다. 새 TL HDF SHA-256은
|
||||
`8730e5562c91b3c7c9e654c811d2791ab7d24fdcc62286b0b28efa7cdc5957d6`다.
|
||||
큰 strain/회전·임의 distorted mesh의 정확도에 이 작은 변형 원본을 확대하지 않는다.
|
||||
|
||||
## 남은 검토와 coverage
|
||||
|
||||
외부 V/A/energy 원본이 없으므로 U CSV 통과만으로 rate·시간 정확도를 판정하지 않는다.
|
||||
|
||||
최초 focused 실행은 중단 기록(`exit -1`)이므로 전체 focused PASS로 사용하지 않는다.
|
||||
후속 `new-kernels.log`/`new-kernels-native.json`은 exit 0 / 38 tests PASS를 확인했다.
|
||||
여기에는 warped nodal 질량 적분, Jensen energy, BC 전 full mass, scalar/MDOF 시간수렴과
|
||||
readback 검사가 포함된다. 이 실행 범위를 전체 회귀·임의 warped cell 검증으로 확대하지 않는다.
|
||||
전체 Debug CTest는 native 8로 자연 종료했으며 raw **784 PASS / 4 FAIL / 1 SKIP (789개)**를
|
||||
보존했다. Shell C08a 시간수렴과 C08b의 새 chart 이탈 외의 두 실패는 이전 consistent
|
||||
off-diagonal을 요구하던 factory expectation과 lumped pencil에서는 finite인 overflow fixture다.
|
||||
Test-only 수정 후 두 검사는 `final-stale-fixtures.log`/native record에서 **2 PASS / native 0**이다.
|
||||
Factory는 diagonal nodal mass를 확인하고 overflow는 `E=4e306`에서 실제 nonfinite validation을
|
||||
검사한다. `E=3e306` 사례를 실패시키도록 production gate나 tolerance를 바꾸지 않았다.
|
||||
|
||||
같은 최종 Debug rebuild의 HHT force-rate oracle/pointwise 두 검사도 별도 PASS다.
|
||||
최종 discovery는 790개이며 **전체 790개는 재실행하지 않았다**. Raw 789개와 후속 2+2 결과를
|
||||
합쳐 새 전체 통과 수를 만들지 않는다. Production 190/reference 16 files의 현재 SHA를
|
||||
`closed-identities-after-final-regression.json`과 독립 대조해 불일치 0을 확인했으므로,
|
||||
앞의 원본 5 case 물리 대조는 유지한다. C08a/C08b OPEN 및 C04a SKIP과 이 원본 대조를 구별한다.
|
||||
새 C08b 예외를 과거 baseline의 동일 실패라고 분류하지 않으며 해당 영향과 최종 manifest는
|
||||
[Shell 물리 검토](../hht-implicit-dynamics/physics-evaluation.md)에 있다.
|
||||
전역 최신 상태는
|
||||
[PRD checklist](PRD.md)를 따른다.
|
||||
@@ -1,5 +1,7 @@
|
||||
# Hex8 high+low 동해석의 한정된 물리 검토
|
||||
|
||||
2026-10-11 질량 정책 변경: [HEX8-ADR-010](ADR.md)에 따라 현재 고유치·HHT는 lumped mass를 사용한다. 아래 consistent 질량을 전제로 한 수식 후보·검토·PASS/FAIL은 해당 시점의 이력이다. 변경본 통과로 승계하지 않으며 현재 수식은 [formulation](formulation.md), 재검증 상태는 [PRD](PRD.md)의 현재 checklist를 따른다.
|
||||
|
||||
적용 계약은 [precision formulation](precision-formulation.md)과 [PRD](PRD.md)다.
|
||||
2026-10-10 `hex8_precision_physics` reviewer가 작성자와 독립적으로 아래 닫힌 evidence와
|
||||
해석적 oracle를 검토했다. 검토 범위에서 물리 blocker는 없지만 원본 비교·전체 기능 완료의
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# Hex8 동해석 high+low 정식화
|
||||
|
||||
2026-10-11 질량 정책 변경: [HEX8-ADR-010](ADR.md)에 따라 현재 고유치·HHT는 lumped mass를 사용한다. 아래 consistent 질량을 전제로 한 수식 후보·검토·PASS/FAIL은 해당 시점의 이력이다. 변경본 통과로 승계하지 않으며 현재 수식은 [formulation](formulation.md), 재검증 상태는 [PRD](PRD.md)의 현재 checklist를 따른다.
|
||||
|
||||
적용: 사용자가 2026-10-09 선택 A로 승인한 [정밀도 제안](precision-proposal.md).
|
||||
기본 물리식·DOF·부호·적분점 순서는 [formulation](formulation.md), 판정 원본은
|
||||
[numeric-controls](numeric-controls.md), 영속 출력은 [I/O](io.md)다. 본 문서는
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# Hex8 동해석 내부 정밀도 변경안 — 승인됨
|
||||
|
||||
2026-10-11 질량 정책 변경: [HEX8-ADR-010](ADR.md)에 따라 현재 고유치·HHT는 lumped mass를 사용한다. 아래 consistent 질량을 전제로 한 수식 후보·검토·PASS/FAIL은 해당 시점의 이력이다. 변경본 통과로 승계하지 않으며 현재 수식은 [formulation](formulation.md), 재검증 상태는 [PRD](PRD.md)의 현재 checklist를 따른다.
|
||||
|
||||
2026-10-09 사용자가 A를 선택해 내부 high+low 물리 상태와 Float64 출력의 반올림 의미를
|
||||
승인했다. 이 문서는 [PRD](PRD.md)·[정식화](formulation.md)·
|
||||
[numeric controls](numeric-controls.md)의 변경 근거이며, 구현 완료를 뜻하지 않는다.
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# 정적 원본 불일치와 변경 선택지 — B 승인
|
||||
|
||||
2026-10-11 질량 정책 변경: [HEX8-ADR-010](ADR.md)에 따라 현재 고유치·HHT는 lumped mass를 사용한다. 아래 consistent 질량을 전제로 한 수식 후보·검토·PASS/FAIL은 해당 시점의 이력이다. 변경본 통과로 승계하지 않으며 현재 수식은 [formulation](formulation.md), 재검증 상태는 [PRD](PRD.md)의 현재 checklist를 따른다.
|
||||
|
||||
2026-10-10 사용자는 B: 체적 평균 energy 도입 후 전체 재검증을 승인했다.
|
||||
새 정식화는 [PRD](PRD.md)·[ADR-009](ADR.md)·[formulation](formulation.md)을 따른다.
|
||||
전체 high+low 물리 상태·원본·수치 기준은 유지한다. A는 선택되지 않았다.
|
||||
|
||||
@@ -0,0 +1,149 @@
|
||||
# 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은 유지한다.
|
||||
@@ -1,7 +1,8 @@
|
||||
# Hex8 원본과 비교 mapping
|
||||
|
||||
기준은 [PRD](PRD.md)의 FEM-REQ-HEX8-022–023와 [공통 수치 정책](../TOLERANCE.md)이다.
|
||||
Source revision은2382d3a이며 사용자 제공 `reference/hexa/`의5 INP·8 CSV를 read-only로 사용한다.
|
||||
기존 source revision은2382d3a이며 사용자 제공 `reference/hexa/`의5 INP·8 CSV와
|
||||
2026-10-11 첨부된 `hexa_freq.txt`를 read-only로 사용한다. 새 TXT의 raw SHA로 추가 원본을 식별한다.
|
||||
아래 hash는 현재 Windows working-tree raw bytes(CRLF) 기준이며 Git LF blob hash와 구분한다.
|
||||
|
||||
## 원본 inventory
|
||||
@@ -9,7 +10,7 @@ Source revision은2382d3a이며 사용자 제공 `reference/hexa/`의5 INP·8 CS
|
||||
442 nodes/300 C3D8 elements, material E=2.1e11/nu=.3/rho=7850, source Step-1이다.
|
||||
Static DIRECT h=.1/T=1의 마지막 Increment10을 비교하고 nonlinear은 NLGEOM=YES다.
|
||||
Dynamic DIRECT h=.1/T=10의 Increment0..100 전체를 비교한다. Amp-1은 `(0,0),(.1,1),(10,1)`다.
|
||||
Frequency는 original unstressed 상태의10 modes 요청이며 결과 Value는 아직 제공되지 않았다.
|
||||
Frequency는 original unstressed 상태의10 modes 요청이며 결과 Value는 `hexa_freq.txt`에 제공됐다.
|
||||
원본5개 모두 Set-1의 zero rotational BC4/5/6을 포함한다. 사용자 승인된
|
||||
[HEX8-ADR-007](ADR.md#hex8-adr-007--inactive-zero-rotational-bc의-한정된-호환-예외)에 따라
|
||||
이 행만 source warning/no-op으로 처리하며 원본과 실제3N mapping을 보존한다.
|
||||
@@ -21,6 +22,7 @@ Frequency는 original unstressed 상태의10 modes 요청이며 결과 Value는
|
||||
| `hexa_dynnonlinear.inp` | — | `1685f86f844e8020bf46e1747b949699ac9aff0d7570bd21ec95109399365ff9` |
|
||||
| `hexa_dynnonlinear_U.csv` | 44642 | `f5832a24577f54838bb49dec86a0dc9668cf43e78953f718a9d3635e0f574226` |
|
||||
| `hexa_freq.inp` | — | `42cbcec2a8b738f8b6d2c1e13114b8840dccdde6fc3e6f8a43a3272e85d82347` |
|
||||
| `hexa_freq.txt` | 10 modes | `3d2dacbee13cd2cc8d3f7c1a38210611a72de41d5e31d169e636bf40e00d4370` |
|
||||
| `hexa_linearstatic.inp` | — | `67183909c5dc962a4d4b65ffb81f7bd65b72e89a5d015c8369a8e0226347a647` |
|
||||
| `hexa_linearstatic_RF.csv` | 442 | `3e04e71ec075ffef098cf4870d77f9c400557fccb375369da8bf67cf67c1e36b` |
|
||||
| `hexa_linearstatic_S.csv` | 2400 | `8840a502b9d28a91e5685349301a56fed37d2ac62327b71304716b714db577e8` |
|
||||
@@ -40,6 +42,20 @@ Stress는300×8×6 전부 포함하며 elemental-nodal stress·절점 외삽·
|
||||
Dynamic U는101 frame 각각442×3인 독립 blocking family다. Frequency Value는 mode별 singleton이며
|
||||
MITC4 eigen scoped5% RMS 예외를 적용하지 않는다.
|
||||
|
||||
제공 TXT의 행 형식은 `Mode n: Value = lambda Freq = f (cycles/time)`다.
|
||||
`Value`는 고유치 λ(`1/time^2`)이며 HDF5 `eigen/modes.eigenvalue`와 직접 비교한다.
|
||||
`Freq`는 cycles/time의 보조 열이고 비교값으로 변환하지 않는다. 시간 단위를 SI로 추정하지 않는다.
|
||||
TXT에는 step field가 없으므로 고정 case `hexa_freq`와 hash-checked 입력의 유일한 `Step-1`에
|
||||
한정해 대응한다. 다른 모델·step을 판별하는 범용 형식으로 설명하지 않는다.
|
||||
Mode ID1–10을 일대일 대응하고 반복 고유치를 제거하거나 가까운 값으로 재매칭하지 않는다.
|
||||
빈 줄은 허용하되 잘못된 형식·mode 누락/추가/중복·비유한/음수 값·mode별 역순 Value는 실패다.
|
||||
실제 비교에서는 원본 raw SHA도 고정하며 수정한 복사본을 정상 원본으로 취급하지 않는다.
|
||||
|
||||
2026-10-11 후속 [질량·요소 설정 조사](reference-mass-investigation.md)는 Abaqus1차 요소의
|
||||
row-sum lumped 질량과 조사 당시 FESA consistent 질량의 차이를 확인했다. 동일 평균 K에
|
||||
lumped M을 사용한 별도 진단은10개 λ 모두 상대차이0.00196105% 이내였지만,
|
||||
생산 구현의 mass 계약이나 실제 modal FAIL 판정을 변경하지 않는다.
|
||||
|
||||
Key는 source case/step/frame 또는 increment/canonical instance/node 또는 element/IntPt/component다.
|
||||
CSV header whitespace만 lexical 정규화하고 duplicate/missing/extra/nonfinite required value를
|
||||
tolerance 전에 실패시킨다. `PART-1-1`과 input raw `Part-1-1`은 기존 Abaqus case 의미로 대응한다.
|
||||
@@ -64,12 +80,18 @@ PASS가 아니다. Nearest-position matching을 수행하지 않았고 어떤
|
||||
`.harness/hex8-evidence/reference-inventory.json`이며 해당 ignored evidence를 지속할 사용자 파일로
|
||||
오인하지 않는다. Formal comparator의 identity/coordinate controls는 동일 의미를 실제 tests로 검증한다.
|
||||
|
||||
## 비교 정책과 준비 대기
|
||||
## 비교 정책과 남은 검증
|
||||
|
||||
2026-10-11 [HEX8-ADR-010](ADR.md)이 reference lumped mass를 승인했다. 다음7/10 FAIL은
|
||||
consistent M의 과거 판정이며 변경본은 원본5 case와 독립 물리/시간 검증을 다시 수행한다.
|
||||
현재 metadata는 `lumped-reference`이며 과거 파일을 metadata만 바꾸어 재사용하지 않는다.
|
||||
|
||||
Common policy: reference-only S=max abs, B=.01S, near-zero error<=B, 일반 relative<=.05,
|
||||
family RMS/S<=.01, S=0 exact-zero다. 다른 quantities/units/frame을 합쳐 scale을 바꾸지 않는다.
|
||||
Frequency 원본 quantity/units/mode/step/hash는 제공 후 먼저 확인한다. 결과를 생성·추정하거나
|
||||
FESA 결과를 reference로 사용하지 않는다. 필수 원본 부재는 미실행/기능 검증 대기다.
|
||||
Frequency 원본 quantity/units/mode/step binding/hash 확인과 실제 비교를 수행했다.
|
||||
최저10개 중7개 singleton이1% RMS 기준을 초과해 기능 검증은 완료 대기다.
|
||||
상세 판정은 [최종 고유치 비교](verification.md#2026-10-11-제공된-고유치-원본의-최종-비교)에 있다.
|
||||
결과를 생성·추정하거나 FESA 결과를 reference로 사용하지 않는다. 원본 부재 시에는 미실행이다.
|
||||
|
||||
Dynamic V/A/reaction/energy의 외부 자료는 없어 independent physical/temporal 검증이 필수다.
|
||||
현재 inventory/convention 확인은 parser 실행·FESA 수치 결과 비교·기능 검증 PASS가 아니다.
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# Hex8 verification and original comparison evidence
|
||||
|
||||
2026-10-11 질량 정책 변경: [HEX8-ADR-010](ADR.md)에 따라 현재 고유치·HHT는 lumped mass를 사용한다. 아래 consistent 질량을 전제로 한 수식 후보·검토·PASS/FAIL은 해당 시점의 이력이다. 변경본 통과로 승계하지 않으며 현재 수식은 [formulation](formulation.md), 재검증 상태는 [PRD](PRD.md)의 현재 checklist를 따른다.
|
||||
|
||||
현행 필수 원본5개 비교는 모두 PASS이며 최저10 modal Value의 최대 상대차는
|
||||
`0.0019610496%`다. [변경본 검증](lumped-mass-adoption.md)에 전체789개 자연 종료와
|
||||
test-only 수정 후 재검사를 구분했다. 기존 consistent modal FAIL은 아래 이력이며
|
||||
현재 불일치가 아니다. 당시 Shell C08b runtime 실패는 후속 승인된 초기 Newton
|
||||
정책에서 해소됐다. 최신 검증과 사용자 중단, 전체 검증 유예의 범위는
|
||||
[최종 인계](final-handoff.md)를 따르며 과거 PASS/FAIL을 최신 전체 통과로 승계하지 않는다.
|
||||
|
||||
This page records the build/test evidence, comparison-only Python tool and actual
|
||||
original results. Historical pointwise results and the approved mean-volume change
|
||||
are recorded separately. It does not replace the feature PRD, numerical controls or completion
|
||||
@@ -34,7 +43,7 @@ The tool is not a solver launcher, result generator, reference repair or release
|
||||
readiness check.
|
||||
|
||||
The fixed source inventory is the [reference-model](reference-model.md) inventory:
|
||||
442 nodes, 300 C3D8 elements and 13 frozen original files. Input and CSV raw SHA256
|
||||
442 nodes, 300 C3D8 elements and 14 frozen original files, including the supplied modal TXT. Input and CSV/TXT raw SHA256
|
||||
must match the documented Windows working-tree bytes. The HDF5 metadata must
|
||||
identify the actual lexically normalized absolute scratch path and that file's FNV1a64 content
|
||||
identity; a different path with identical bytes is not silently accepted.
|
||||
@@ -73,12 +82,73 @@ row deletion or cancellation of signed errors is applied. Reports preserve each
|
||||
scalar identity/value/error/branch/pass and family scale/band/max-absolute-error,
|
||||
absolute/relative RMS, source SHA and policy.
|
||||
|
||||
The independent typed modal comparison behavior requires explicit source step,
|
||||
mode1–10, eigenvalue or frequency quantity, and matching `1/time^2` or `1/time`
|
||||
units. Each mode is a singleton using the same RMS1% policy. This is not an
|
||||
assumption about the absent original Value file's eventual CSV layout. Actual
|
||||
modal original comparison remains **NOT RUN** until a genuine reference is
|
||||
provided and its semantics and hashes are confirmed.
|
||||
The supplied modal TXT uses `Mode n: Value = lambda Freq = f (cycles/time)`.
|
||||
Value is compared directly with the HDF5 eigenvalue (`1/time^2`); Freq is finite
|
||||
auxiliary data, without conversion or assumed SI time units. The TXT has no step
|
||||
field: its fixed hexa_freq case binds to the sole Step-1 in the hash-checked input.
|
||||
Modes1–10 are matched by ID, retaining repeated eigenvalues. Each mode is a
|
||||
singleton using the same RMS1% policy. An absent TXT remains NOT RUN; malformed
|
||||
or hash-mismatched data fail prechecks. The previous consistent-mass result failed
|
||||
seven families, as recorded below; the current lumped-mass result passes all ten.
|
||||
|
||||
## 2026-10-11 제공된 고유치 원본의 최종 비교
|
||||
|
||||
사용자 제공 `reference/hexa/hexa_freq.txt`의 raw SHA256은
|
||||
`3d2dacbee13cd2cc8d3f7c1a38210611a72de41d5e31d169e636bf40e00d4370`이다.
|
||||
기존 `18b36c1` frozen CLI가 native0으로 자연 종료한 실제 공식 HDF5를 사용했다.
|
||||
HDF5 SHA는 `f6203936883df7f27e86a20311726b7e59fefa117e5f9fa67f71bdf63ec2e4cb`이며
|
||||
이번에 새 C++ solver 실행으로 표현하지 않는다. 실제 scratch 입력·결과 hash 및 closed
|
||||
CLI record,442절점·300요소·51구속·10 modes, quantity/unit/finite precheck는 PASS다.
|
||||
|
||||
```powershell
|
||||
uv run --with h5py python -B scripts/verification/compare_hex8.py `
|
||||
--case hexa_freq `
|
||||
--input .harness/hex8-evidence/mean-volume/original-cli/hexa_freq/hexa_freq.inp `
|
||||
--results .harness/hex8-evidence/mean-volume/original-cli/hexa_freq/hexa_freq_results.h5 `
|
||||
--execution-record .harness/hex8-evidence/mean-volume/original-cli/hexa_freq/native.json `
|
||||
--report .harness/hex8-evidence/mean-volume/modal-final/comparison.json
|
||||
```
|
||||
|
||||
실제 comparator native exit1, numerical FAIL이다. Mode별 singleton의 RMS/S는
|
||||
`abs(lambda_fesa-lambda_reference)/abs(lambda_reference)`이며 공통1% 기준을 적용했다.
|
||||
다음 표는 가독성을 위해 출력 자리만 줄였고 실제 판정에는 반올림 전 값을 사용한다.
|
||||
|
||||
| Mode | 원본 Value λ | FESA λ | RMS/S (%) | 판정 |
|
||||
| ---: | ---: | ---: | ---: | --- |
|
||||
| 1 | 496.28 | 497.153597379 | 0.176029 | PASS |
|
||||
| 2 | 496.28 | 497.156908818 | 0.176696 | PASS |
|
||||
| 3 | 18302 | 18519.547026780 | 1.188652 | FAIL |
|
||||
| 4 | 18302 | 18519.716390186 | 1.189577 | FAIL |
|
||||
| 5 | 52797 | 63489.091264684 | 20.251323 | FAIL |
|
||||
| 6 | 131213 | 134772.818711666 | 2.713008 | FAIL |
|
||||
| 7 | 131214 | 134773.663065696 | 2.712868 | FAIL |
|
||||
| 8 | 165943 | 166062.030100247 | 0.071730 | PASS |
|
||||
| 9 | 449258 | 470919.350201648 | 4.821584 | FAIL |
|
||||
| 10 | 449260 | 470921.678067527 | 4.821635 | FAIL |
|
||||
|
||||
10 families 중7개 RMS 실패, scalar row5% 실패는 mode5의1개다. MITC4의 scoped5%
|
||||
RMS 예외를 적용하거나 frequency로 변환하지 않았다. Source 반복 고유치를 합치거나
|
||||
값이 가까운 모드에 재매칭하지 않았다. TXT 원본은 수정하지 않았다.
|
||||
|
||||
비교기 새 동작11개의 RED 실패를 관측한 뒤 원본 TXT reader와 실제 frequency 분기를 연결했다.
|
||||
추가된 성공 경로까지12개 새 검사와 기존 영향 검사 모두 PASS다. 실제 명령은
|
||||
`uv run --with h5py --with pytest python -B -m pytest tests/test_compare_hex8.py tests/test_compare_hht_dynamic.py -q --junitxml=.harness/hex8-evidence/mean-volume/modal-final/affected.xml`,
|
||||
native0·136 PASS(95 Hex8/41 HHT)·24.52초다. Raw log·JUnit·argv/native/timestamps는
|
||||
`modal-final/affected.log`, `affected.xml`, `affected.json`에 보존했다.
|
||||
Schema fixture의 PASS/의도된 FAIL은 비교기 동작 근거이며 실제 modal 일치의 PASS가 아니다.
|
||||
|
||||
독립 read-only 감사는 native0·finding0으로 동일한7개 실패를 재현했다. 원본14개를 포함한
|
||||
소비23개 artifact의 SHA를 전후 확인했다. 이번 추가 검증의 종료 요약은
|
||||
`modal-final/closure.json`이며 과거 원본 부재 시의 `mean-volume/closure.json`과
|
||||
`comparisons/hexa_freq/comparison.json`은 당시 NOT RUN 기록으로 보존했다.
|
||||
|
||||
이번 변경은 비교기·Python 검사·문서에 한정되고 C++ 수식/질량/절차/출력은 변경하지 않았다.
|
||||
직전에 완료한 전체787 회귀는 아래 기록대로 native8·784 PASS·기존 FAIL2·SKIP1이며
|
||||
이번 Python 검사로 전체 회귀를 새로 실행한 것으로 보고하지 않는다. 전체 Python의
|
||||
기존 collection5 오류도 해결한 것으로 보고하지 않는다.
|
||||
최종 modal 수치 불일치가 남아 기능 완료는 대기다. 원인 분리와 승인 경계는
|
||||
[미해결 문제](../tracking/findings.md#hex8-제공-고유치-원본과-최저10-모드-불일치)에 기록한다.
|
||||
독립 검토의 범위와 원시 자료는 [수치 검토](numerical-review.md)를 따른다.
|
||||
|
||||
## 비교기 개발과 변경 전 pointwise 구현의 관측 이력
|
||||
|
||||
|
||||
Reference in New Issue
Block a user