chore: remove retired workflow and historical material
This commit is contained in:
@@ -1,104 +0,0 @@
|
||||
# Hex8 기능 결정 기록
|
||||
|
||||
Feature ID: `hex8-structural-analysis`. 상태: 사용자 승인된 구현 계약.
|
||||
기준: [프로젝트 지침](../../AGENTS.md), [공통 PRD](../PRD.md), [공통 ADR](../ADR.md).
|
||||
상세 행동은 [PRD](PRD.md), 수식은 [formulation](formulation.md)을 따른다.
|
||||
아래 결정은 ready 인터뷰 및 최종 승인 뒤 go 실행 요청으로 확정했다. 구현/검증 통과를 의미하지 않는다.
|
||||
|
||||
## HEX8-ADR-001 — Full-integration TL–StVK
|
||||
|
||||
**선택:** 8절점 일반 등매개 육면체, 3개 병진 DOF,2×2×2 전체 Gauss 적분,
|
||||
Total Lagrangian–St. Venant–Kirchhoff의 energy/internal force/material+geometric tangent.
|
||||
**이유와 영향:** 큰 회전·작은 elastic strain을 대상으로 같은 energy의 미분 일관성을 검증한다.
|
||||
이 최초 선택의 pointwise 체적 항은 이후 HEX8-ADR-009로 대체됐다. Hourglass/hybrid/incompatible mode는 범위 밖이다. 굽힘/체적 잠김과
|
||||
거의 비압축성 conditioning 한계를 공개한다. Abaqus C3D8 내부 처리와 동일하다고 주장하지 않는다.
|
||||
|
||||
## 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이 없다.
|
||||
|
||||
## HEX8-ADR-003 — End-to-end Solid-only 절차
|
||||
|
||||
**선택:** Linear/nonlinear static, 원형상 unloaded frequency, linear/nonlinear HHT와 공식 HDF5를 연결한다.
|
||||
Nodal force와 static 영/비영 prescribed displacement만 지원하며 mixed Beam/Shell/Solid·pressure/
|
||||
body force·prestressed modes는 제외한다. Dynamic은 initial q/v0, fixed zero BC·fixed step이다.
|
||||
**영향:** Model/DOF/state/writer에 Solid의3성분 분기가 필요하며 dummy6성분 결과로 대체하지 않는다.
|
||||
|
||||
## HEX8-ADR-004 — Reference ramp와 integration-point stress
|
||||
|
||||
**선택:** 제공된 dynamic 원본에 필요한 TABULAR/STEP TIME/RELATIVE piecewise-linear CLOAD
|
||||
amplitude를 지원한다. 사용자 최종 답변 `1A, 2B 적분점 응력 결과로 수정했습니다.`에 따라
|
||||
수정된 static S의8점6성분을 필수 비교한다. Static/BC amplitude·비영 초기 상태는 추가하지 않는다.
|
||||
**영향:** 곡선별 source load block을 보존하고 endpoint/initial force를 평가한다. Point key는
|
||||
element/IntPt/component이며 elemental-nodal stress·평균·외삽으로 바꾸지 않는다.
|
||||
|
||||
## HEX8-ADR-005 — 독립 검증과 필수 외부 비교
|
||||
|
||||
**선택:** 분석/불변량·독립 numerical/physics 검토·실제 전체 Debug 회귀 및 승인 원본 비교를 결합한다.
|
||||
**영향:** 공통 row5%/RMS1%를 유지한다. MITC4 eigen RMS5% scoped exception은 적용하지 않는다.
|
||||
원본 frequency Value 부재는 필수 비교 미실행이며 기능 검증 완료 대기다. 제공된4개 응답 case와
|
||||
독립 eigen 검증은 진행한다. 기존 HHT baseline FAIL/SKIP을 신규 문제와 구분하며 전체 green을 주장하지 않는다.
|
||||
|
||||
## HEX8-ADR-006 — 기존 프로젝트와 소유권 유지
|
||||
|
||||
**선택:** Absent local marker에도 사용자 선택 A에 따라 기존 AGENTS/docs 맥락을 유지한다.
|
||||
**영향:** Foundation과 공통 요구/결정을 재작성하지 않는다. Feature 문서는 자체 계약과 필요한
|
||||
handoff/evidence만 소유한다. Shared CMake/factory와 prepared/HDF5 연결에 단일 writer를 둔다.
|
||||
Failed candidate/출력 실패에서 accepted history와 기존 final HDF5를 보존한다.
|
||||
|
||||
## HEX8-ADR-007 — Inactive zero rotational BC의 한정된 호환 예외
|
||||
|
||||
**승인:** 2026-10-09 사용자는 필수 원본의 zero DOF4–6 경계와 strict 거부 계약 충돌에 대해
|
||||
A(영 회전 경계만 경고/no-op으로 수용)를 선택했다. 독립 검토 HEX8-NR-001의 해결이다.
|
||||
**선택:** Solid-only supported displacement BC의 exact-zero DOF4–6(생략0 포함)만 source/location
|
||||
warning/no-op으로 수용한다. Mixed1–6 range의1–3은 적용하고4–6만 경고한다.
|
||||
**영향:** 실제 DOF·constraint·state/output은3성분이다. 비영 회전 BC·모든 회전 CLOAD,
|
||||
DOF범위 밖이나 의미 있는 미지원 BC 옵션은 계속 거부한다. 원본을 수정·preprocess하지 않는다.
|
||||
Parser에서 경고·translational 적용·회전 equation 부재·거부 경계를 행동 테스트로 확인한다.
|
||||
|
||||
## HEX8-ADR-008 — High+low 내부 물리 상태와 Float64 observable
|
||||
|
||||
**승인:** 2026-10-09 사용자는 제한된 단일·두 좌표 및 보상 가산 관찰 실패 이후
|
||||
A([내부 정밀도 변경안](precision-proposal.md))를 선택했다.
|
||||
**선택:** Solid HHT 내부 상태·predictor·힘·rates·수지·gate에 normalized high+low를
|
||||
일관되게 사용하고 accepted history/rollback도 전체 상태를 보존한다. 기존 Float64
|
||||
backend와 HDF5 field/shape/dtype은 유지하되 공식 값은 전체 물리량의 반올림 observable이다.
|
||||
**영향:** 기존 Si/exact-zero·strict gate·HHT 계수·기준 M·고정 h/schedule·100회와 외부
|
||||
tolerance는 유지한다. Kernel/geometry에 low를 전달하지 않는 update carry와 구분한다.
|
||||
작은 독립 산술/Hex8·시간수렴·상태 보존 검증과 긍정적 실제 실행 이후 필수 원본101개
|
||||
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를
|
||||
사용한다. Reference 8점 가중치와 실제 infinitesimal/Green strain의 deviatoric 항을 유지하고,
|
||||
체적 항을 `kappa*V*theta_bar^2/2`, `theta_bar=sum(w*trace(strain))/V`로 정의한다.
|
||||
내력과 Kmat/Kgeo/Kt는 이 energy의 일관 미분이며 체적 tangent는 서로 다른 Gauss 점의
|
||||
coupling을 포함한다. 평균 determinant/Fbar/로그변형률 재료식은 채택하지 않는다.
|
||||
**영향:** ADR-001의 pointwise 체적 energy/구성식과 그 강성을 대체한다. 실제 strain을
|
||||
출력하고 응력은 요소 평균에 의존하는 law로 복구한다. Reference consistent M·HHT 식·
|
||||
고정 schedule·100회·strict gate·전체 pair 상태·반올림 observable·공식 field/schema와
|
||||
원본·수치 기준은 유지한다. 새 solver 선택 옵션이나 원본 diagnostic 전환은 추가하지 않는다.
|
||||
**검증:** 한 선형 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,53 +0,0 @@
|
||||
# Hex8 구조해석 작업 지침
|
||||
|
||||
Feature ID: `hex8-structural-analysis`. 사용자 승인: 2026-10-08 ready 문서 승인 및 go 실행 요청.
|
||||
개인 연구용 FESA에 reference8점 deviatoric·체적 평균 energy Hex8의 선형/기하비선형 강성·reference row-sum lumped 질량과
|
||||
static/frequency/HHT 절차를 추가한다. 코드 존재와 기능 검증 완료를 구분한다.
|
||||
|
||||
상위 기준은 [프로젝트 지침](../../AGENTS.md), [공통 PRD](../PRD.md),
|
||||
[공통 ADR](../ADR.md), [기능 문서 관리](../FEATURE_DOCUMENTATION.md)다.
|
||||
현재 요구와 유일한 checklist는 [PRD](PRD.md), 선택 이력은 [ADR](ADR.md)에 있다.
|
||||
|
||||
| 문서 | 책임·용도 |
|
||||
| --- | --- |
|
||||
| [README](README.md) | 개발 목적·CLI 사용·다른 기능의 참조점·적용 한계 |
|
||||
| [formulation](formulation.md) | 3D local 계산, energy/force/tangent, mass·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 검토의 결과 |
|
||||
| [lessons](lessons.md) | 정밀도 손실·수렴 실패와 수정의 근거 및 재사용할 주의점 |
|
||||
| [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를 소유한다.
|
||||
Static/eigen/dynamic owner는 별도 Solid state와 executor를 소유한다. 중앙 prepared/result/CLI/
|
||||
HDF5 dispatch는 한 owner가 연결하고, 공용 CMake/factory 등록은 메인이 병합 후 처리한다.
|
||||
다른 owner의 변경을 revert하거나 중앙 파일에 병행 writer를 추가하지 않는다.
|
||||
|
||||
이 기능은 Solid-only·3N이다. Shell의6N/drilling/null/회전 state나 nodal mass reduction을
|
||||
사용하지 않는다. 요소 행렬은24×24, output은 N×3와 E×8×6이다. Geometry는 cell 전체의
|
||||
positive Jacobian을 보수적으로 인증하고 uncertain geometry/trial을 명시적으로 실패시킨다.
|
||||
절점 순서와 IntPt 순서를 구분하며 tensor shear와 engineering shear를 혼용하지 않는다.
|
||||
|
||||
원본 `reference/hexa/`는 read-only다. 외부 tolerance를 완화하거나 reference를 생성·보정하지
|
||||
않는다. Frequency 원본 modal Value가 없는 동안 구현은 계속할 수 있으나 전체 기능 검증은
|
||||
완료하지 않는다. 동적 reference는101 frame 전체 U, 정적은 U/constrained RF/Gauss Cauchy S가 필수다.
|
||||
|
||||
새 정식화와 구현 수치 변경은 독립 numerical review를, 실제 결과는 필요한 독립 physics
|
||||
평가를 거친다. 일반 승인 작업마다 승인 gate를 추가하지 않는다. Physics·영속 schema·acceptance
|
||||
변경 또는 해결되지 않은 필수 reference 충돌만 메인이 사용자에게 근거와 영향을 전달한다.
|
||||
Dev 통합·push/release는 별도 명시된 사용자 결정이다.
|
||||
|
||||
2026-10-13 현재 인계는 [최종 인계](final-handoff.md)를 따른다. 사용자는 장시간
|
||||
전체 검증을 수행하지 않도록 요청했다. 이번 관련91개·Python96개 및 저장된
|
||||
원본5개 결과 재대조를 전체 통과로 확대하지 않는다. Hex8 구현·검토·인계와
|
||||
최적화 이후의 최신 전체 통합 완료 판정은 구분한다.
|
||||
@@ -1,532 +0,0 @@
|
||||
# Hex8 구조해석 제품 요구사항
|
||||
|
||||
Feature ID: `hex8-structural-analysis`. 작성일: 2026-10-08. 상태: 구현·필수 원본5개 비교·검토·인계 완료; 사용자 요청으로 장시간 전체 검증을 유예하여 최종 통합 완료 판정 보류.
|
||||
기준 저장소: `dev`, `2382d3af7ef335bef216d963540f2e9bd2befd68`.
|
||||
|
||||
## 목적과 선택 이유
|
||||
|
||||
개인 연구용 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)를 따른다. 2026-10-11 승인 [ADR-010](ADR.md)에 따라 full reference element M의 행 합 대각 질량을
|
||||
고유치와 동해석 모두에 사용한다. 허용값이나 안정화로 계산 결과를 맞추지 않는다.
|
||||
일반 등매개 육면체를 지원하며 체적 projection의 안정성·conditioning 및 남은 굽힘 잠김 한계를 검증·공개한다.
|
||||
|
||||
초기 합의의 일정 동하중에 더해, 제공된 reference의 ramp를 처리하도록 구간별 선형
|
||||
집중력 amplitude를 포함한다. 지정 변위의 시간 변화나 비영 초기 변위·속도까지 확대하지 않는다.
|
||||
|
||||
상위 기준: [공통 요구](../PRD.md), [구조](../ARCHITECTURE.md),
|
||||
[외부 계약](../contracts.md), [수치 정책](../TOLERANCE.md),
|
||||
[기능 기록](../FEATURE_DOCUMENTATION.md). 기존 상세 계약을 구현 편의로 덮어쓰지 않는다.
|
||||
|
||||
지역 지침과 문서 목록은 [FEATURED_AGENTS](FEATURED_AGENTS.md), 결정은 [ADR](ADR.md),
|
||||
상세 유도는 [formulation](formulation.md), 입력/내부 API는 [io](io.md), 수치 controls는
|
||||
[numeric-controls](numeric-controls.md), 원본 mapping은 [reference-model](reference-model.md)을 따른다.
|
||||
|
||||
## 요구사항과 계산 계약
|
||||
|
||||
### FEM-REQ-HEX8-001 — 지원 해석과 모델
|
||||
|
||||
육면체 단독 모델에서 선형 정적, 기하비선형 정적, 원형상·무응력 선형 frequency,
|
||||
선형 및 기하비선형 HHT 동해석을 지원한다. 한 입력에 단일 step·단일 procedure이며
|
||||
기존 Part/identity Instance·target/set subset을 재사용한다. 혼합 Beam/Shell/Solid 모델은 거부한다.
|
||||
서로 다른 유효한 영역에 재료를 배정할 수 있지만 한 요소 내부의 재료는 균질하다.
|
||||
|
||||
### FEM-REQ-HEX8-002 — 요소·형상·순서
|
||||
|
||||
Source `C3D8`을 FESA Hex8로 연결하고 source 표기·instance·element/node label을 보존한다.
|
||||
`C3D8R`, `C3D8I`, `C3D8H`, 20절점 요소를 alias로 수용하지 않는다. 요소는 서로 다른
|
||||
8개 절점과 병진 `[UX,UY,UZ]`를 가지며 local 행렬은 node-major 24×24다.
|
||||
|
||||
자연 좌표 절점 순서는 다음과 같다.
|
||||
|
||||
| 절점 | ξ | η | ζ |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| 1 | -1 | -1 | -1 |
|
||||
| 2 | +1 | -1 | -1 |
|
||||
| 3 | +1 | +1 | -1 |
|
||||
| 4 | -1 | +1 | -1 |
|
||||
| 5 | -1 | -1 | +1 |
|
||||
| 6 | +1 | -1 | +1 |
|
||||
| 7 | +1 | +1 | +1 |
|
||||
| 8 | -1 | +1 | +1 |
|
||||
|
||||
\(N_a=(1+\xi_a\xi)(1+\eta_a\eta)(1+\zeta_a\zeta)/8\),
|
||||
\(X=\sum N_aX_a\), \(u=\sum N_au_a\). J0의 column은 자연 좌표에 대한 X 미분이다.
|
||||
\(G_a=\nabla_XN_a=J_0^{-T}\nabla_\xi N_a\)를 사용한다.
|
||||
뒤틀린 면·기울어진 모서리를 허용한다. 비유한·중복/퇴화 절점, 반전·접힌 형상은 거부한다.
|
||||
유효성은 자연 cell의 양의 Jacobian을 확인하는 보수적 검증으로 정의하고, 적분점만 양수인
|
||||
접힌 cell을 정상으로 선언하지 않는다. 양성을 판정하지 못한 형상은 명시적 진단으로 거부한다.
|
||||
현재 형상의 반전도 trial 실패다. `abs(det J)`·절점 재배열·epsilon 보정은 금지한다.
|
||||
|
||||
### FEM-REQ-HEX8-003 — 재료와 단위
|
||||
|
||||
상수 등방성 탄성 \(E>0,-1<\nu<0.5\)와 기준 밀도 \(\rho_0>0\)를 사용한다.
|
||||
모든 값과 파생 shear/bulk 실행 계수는 finite여야 한다. 밀도는 고유치·동해석에서 필수이며 정적
|
||||
입력의 양의 density는 보존하되 강성에 사용하지 않는다. 입력 일관 단위를 유지한다.
|
||||
\(\mu=E/[2(1+\nu)]\), \(\kappa=E/[3(1-2\nu)]\)다. 두 실행 계수는 finite·positive여야 한다.
|
||||
거의 비압축성인 입력을 다른 재료식으로 바꾸지 않으며 잠김과 conditioning을 구분해 보고한다.
|
||||
|
||||
### FEM-REQ-HEX8-004 — 적분 규칙
|
||||
|
||||
강성·내력·접선·질량·에너지에 동일한 2×2×2 Gauss 규칙을 사용한다.
|
||||
각 축은 ±1/√3, weight=1이며 volume weight는 det J0다. 출력 point ID는
|
||||
`1:---, 2:+--, 3:-+-, 4:++-, 5:--+, 6:+-+, 7:-++, 8:+++` 순서다.
|
||||
절점 순서와 적분점 순서를 혼동하지 않는다. 모든 평균과 deviatoric 항은 이8점의 reference
|
||||
체적 가중치로 계산한다. 체적 항은 요소 평균 trace energy이며 pointwise8점 체적 항이나
|
||||
중심점 단일 적분으로 바꾸지 않는다. One-point reduced element·hourglass 항은 없다.
|
||||
일반 뒤틀린 요소에서 8점 질량이나 비선형 적분이 연속체 적분과 항상 exact하다고 주장하지 않는다.
|
||||
높은 차수 적분 oracle는 정확도·한계의 검사이며 production 규칙의 자동 변경이 아니다.
|
||||
|
||||
### FEM-REQ-HEX8-005 — 선형 강성
|
||||
|
||||
미소변형률 \(\epsilon_g=\operatorname{sym}\nabla_Xu\), \(V=\sum_gw_g\),
|
||||
\(\bar\theta=\sum_gw_g\operatorname{tr}\epsilon_g/V\),
|
||||
\(\sigma_g=2\mu\operatorname{dev}\epsilon_g+\kappa\bar\theta I\)다.
|
||||
공학 전단 벡터 순서는 `[ε11,ε22,ε33,2ε12,2ε13,2ε23]`, 응력은
|
||||
`[S11,S22,S33,S12,S13,S23]`다. 선형 energy는
|
||||
\(U=\sum_gw_g\mu\operatorname{dev}\epsilon_g:\operatorname{dev}\epsilon_g+\kappa V\bar\theta^2/2\)다.
|
||||
\(K_0=\partial^2U/\partial u^2\), \(f_{int}=K_0u\)이며 weighted divergence vector의
|
||||
외적 \(\kappa bb^T/V\)로 서로 다른 point의 체적 coupling을 포함한다.
|
||||
대칭성·6개 강체 영모드·상수 변형률 patch·단위와 scale을 독립 검증한다.
|
||||
|
||||
### FEM-REQ-HEX8-006 — 비선형 내력과 접선
|
||||
|
||||
기준 형상에서 \(F=I+\sum_a u_a\otimes G_a\),
|
||||
\(E_{Gg}=(F_g^TF_g-I)/2\), \(\bar\theta=\sum_gw_g\operatorname{tr}E_{Gg}/V\)와
|
||||
\(U=\sum_gw_g\mu\operatorname{dev}E_{Gg}:\operatorname{dev}E_{Gg}+\kappa V\bar\theta^2/2\),
|
||||
\(S_g=2\mu\operatorname{dev}E_{Gg}+\kappa\bar\theta I\), \(P_g=F_gS_g\)다.
|
||||
\(f_{ai}=\sum_g P_{iJ}G_{aJ}\det J_{0g}\)와 같은 에너지의 일관 미분
|
||||
\(K_t=K_{mat}+K_{geo}\)를 반환한다.
|
||||
|
||||
\[
|
||||
Z_g^{ai}=\operatorname{sym}(F_g^T(e_i\otimes G_{ag})),\quad
|
||||
b_{ai}=\sum_gw_g(F_gG_{ag})_i,
|
||||
\]
|
||||
\[
|
||||
(K_{mat})_{ai,bk}=2\mu\sum_gw_g\operatorname{dev}Z_g^{ai}:\operatorname{dev}Z_g^{bk}
|
||||
+\kappa b_{ai}b_{bk}/V,\quad
|
||||
(K_{geo})_{ai,bk}=\delta_{ik}\sum_gw_gG_{ag}^TS_gG_{bg}.
|
||||
\]
|
||||
|
||||
F64와 paired 경로 모두 실제 relative kinematics의 같은 derivative인 Ghat를 사용한다.
|
||||
평균 trace의 미분을 유지하고 point-local 기존 C로 체적 tangent를 대체하지 않는다. Kgeo만으로 전체 비선형 강성을
|
||||
대체하지 않는다. 내부 API는 두 항과 합, 내력·에너지·복구량을 구별한다. 같은 trial에서
|
||||
계산하며 유한차분 접선을 production 계산으로 사용하지 않는다. 강체 유한회전의 zero
|
||||
strain/energy, 에너지 gradient·내력 tangent, 좌표 공변성, 선형극한을 검사한다.
|
||||
|
||||
### FEM-REQ-HEX8-007 — Reference row-sum lumped 질량
|
||||
|
||||
\((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 관성은 없다.
|
||||
고유치와 동해석은 같은 전역 lumped M을 사용한다. 행 합은 BC restriction 전에 계산하며
|
||||
M_C의 free block만 행 합하거나 warped 요소를 rho*V/8로 대체하지 않는다.
|
||||
대칭 양정성·각 병진 방향 총질량·좌표 회전·독립 적분을 검증한다. 전역 행렬은 sparse로 조립한다.
|
||||
|
||||
### FEM-REQ-HEX8-008 — 경계와 집중력
|
||||
|
||||
실제 `*BOUNDARY`와 `*CLOAD` 성분은 DOF1–3이다. Solid-only 입력 호환 예외로
|
||||
지원 displacement `*BOUNDARY`의 DOF4–6 exact-zero(생략된0 포함)만 source/location을
|
||||
남기는 명시적 warning/no-op으로 수용한다. 범위1–6은1–3을 적용하고4–6만 경고한다.
|
||||
회전 equation·constraint·state는 만들지 않는다. 비영 회전 BC, DOF4–6 CLOAD(값0 포함),
|
||||
DOF1–6 밖의 경계와 의미 있는 미지원 BC 옵션은 계속 거부한다.
|
||||
정적은 영/비영 지정 변위를 지원하고, 선형은 \(K_{ff}u_f=F_f-K_{fc}u_c\)다.
|
||||
비선형 정적에서는 지정 값과 외력을 같은 load factor로 증가시켜 이전 accepted 상태에서
|
||||
Newton을 수행한다. 동해석은 고정 exact-zero 경계만 지원한다. 동일 resolved node/DOF의
|
||||
집중력은 source 순서로 합산한다. 모든 자유도가 constrained인 유효한 모델은 empty free
|
||||
system으로 처리한다. 미구속 자유 강체의 정적 특이성은 질량·임의 고정점으로 보정하지 않는다.
|
||||
|
||||
### FEM-REQ-HEX8-009 — 동하중 amplitude
|
||||
|
||||
육면체 dynamic에서 모델-level `*AMPLITUDE, NAME=...`의 TABULAR, STEP TIME,
|
||||
VALUE=RELATIVE만 지원한다. 각 선택자는 생략 시 이 값이며 명시된 동일 값도 허용한다.
|
||||
유일한 이름과 한 개 이상 finite `(t,A)` pair, `t>=0`·strictly increasing 시간을 요구한다.
|
||||
한 row의 여러 pair와 여러 data row를 허용한다. Knot은 원 값, 내부는 구간별 선형 보간,
|
||||
범위 밖은 첫/마지막 값 유지다. Unresolved/duplicate 이름, 같은 시간, 역순·홀수 항목,
|
||||
nonfinite, 다른 정의·시간 기준·값 종류·smoothing 옵션은 명시적 실패다.
|
||||
|
||||
`*CLOAD, AMPLITUDE=name`의 \(F(t)=A(t)F_{base}\)를 source 순서로 합산한다.
|
||||
각 load block의 curve를 보존하며 서로 다른 curve를 미리 하나의 base force로 합치지 않는다.
|
||||
Amplitude 없는 CLOAD는 `0+`부터 일정 하중이다. 표의 첫 시간/값을 강제로 0으로 만들지 않는다.
|
||||
현재 reference Amp-1은 `(0,0),(0.1,1),(10,1)`이다. 지정 변위 amplitude와 static amplitude,
|
||||
TOTAL TIME·SMOOTH STEP·주기 하중·물리적 damping은 이번 범위가 아니다.
|
||||
|
||||
### FEM-REQ-HEX8-010 — 공개 입력과 CLI
|
||||
|
||||
기존 lexical/source identity를 재사용하고 `*SOLID SECTION, ELSET=..., MATERIAL=...`와
|
||||
생략 또는 blank data row를 허용한다. Thickness/plane stress/axisymmetric 의미를 추가하지 않는다.
|
||||
`*STATIC`과 `*STATIC, DIRECT`의 고정 증분 subset을 지원한다. DIRECT의 `h,T`가 양수이며
|
||||
`N*h==T`, `N<=INC`를 만족해야 한다. 일반 STATIC의 기존 load-factor subset도 유지한다.
|
||||
`*FREQUENCY`의 mode 수가 권위이며 Lanczos/SIM source 옵션은 실제 MKL FEAST와 구별한다.
|
||||
`*DYNAMIC, DIRECT`는 `NLGEOM=NO` 또는 `YES`, 고정 h/T와 INC를 지원한다.
|
||||
Static/frequency/dynamic 각각의 기존 무해한 출력 요청 subset 및 제공 원본의 PRESELECT 요청을
|
||||
명시적으로 검증한다. Output no-op이 필수 결과의 삭제·선택 기능이 되지 않는다.
|
||||
기존 CLI 입력·lexical sibling 결과/로그 경로·exit category를 유지한다.
|
||||
|
||||
### FEM-REQ-HEX8-011 — 소유권과 전역 조립
|
||||
|
||||
Domain은 의미·재료/section·topology·amplitude를, DofManager는 3N full/free mapping과
|
||||
scatter/pattern을, element는 local 계산을, analysis는 state/trial/commit을 소유한다.
|
||||
공유 sparse 직접 쓰기 없이 source 순서의 결정적 누적을 유지한다. 6N Shell layout이나
|
||||
회전 영공간에 Hex8을 끼워 넣지 않는다. 사용되지 않는 절점·잘못된 scatter는 fail-closed다.
|
||||
|
||||
내부 C++ API의 행동 계약은 다음과 같다. 구체적인 class/method 이름은 구현 계획의 영역이다.
|
||||
|
||||
| 연산 | 입력·출력과 불변량 |
|
||||
| --- | --- |
|
||||
| 요소 생성 | 검증된 source topology·기준 좌표·재료로 immutable 요소 생성; 실패는 기존 Result/Status |
|
||||
| 선형 평가 | K0[24,24]·M[24,24], 주어진 u[24]의 f[24]·W·8점 복구량 |
|
||||
| 비선형 trial 평가 | u[24]에서 f[24], Kmat/Kgeo/Kt[24,24], W, 8점 Cauchy/Green tensor; 호출이 accepted state를 변경하지 않음 |
|
||||
| 조립·절차 실행 | Domain과 3N DOF mapping으로 sparse K/M 및 검증된 procedure별 결과; source 순서 유지 |
|
||||
| 기록 | 완결된 accepted 결과만 받는 Solid writer; 검증 실패 시 기존 final 파일 보존 |
|
||||
|
||||
길이·성분 불일치와 nonfinite trial을 실패로 반환하며 vendor handle/type은 공개 API에 노출하지 않는다.
|
||||
|
||||
### FEM-REQ-HEX8-012 — 선형 정적
|
||||
|
||||
Kff solve 후 prescribed 값을 정확히 복구하고 full residual `K0u-F`를 계산한다.
|
||||
Constrained 성분은 반력, free 성분은 평형 잔차이며 서로 별도 dataset으로 보존한다.
|
||||
완료 load factor의 결과를 frame0으로 저장한다. 빈 free solve와 solver 실패를 구별한다.
|
||||
|
||||
### FEM-REQ-HEX8-013 — 비선형 정적
|
||||
|
||||
Accepted 증분별 q·내외력·응력·에너지와 convergence evidence를 보존한다. Newton은
|
||||
\(f_{int}(u)-F\)의 free residual과 일관 tangent를 사용한다. 불안정 tangent를 SPD라고
|
||||
가정하지 않는다. Recovery까지 검증한 candidate만 accept하며 실패 증분은 공개하지 않는다.
|
||||
현재 일반 Newton controls를 재사용할 때 물리 3성분·force/length 단위에 맞는 적용을 검토한다.
|
||||
회전·모멘트의 dummy channel은 만들지 않는다. 초기 tuning default는 기존 정적 기준의
|
||||
force residual/translation correction 상대 `1e-2`, scale0 absolute `1e-3`의 해당 입력
|
||||
force/length 단위, 증분당 최대100 iteration이다. 분모·분자·branch·단위·판정을 남긴다.
|
||||
내부 solver tuning 조정은 독립 검토와 재검증을 기록하며 외부 acceptance를 바꾸지 않는다.
|
||||
|
||||
### FEM-REQ-HEX8-014 — 일반화 고유치
|
||||
|
||||
실제 동차 경계 적용 후 \(K_{ff}\phi=\omega^2M_{ff}\phi\)의 최저 N 모드를 구한다.
|
||||
반복 고유치를 제거하지 않고 실제 3N 공간으로 복구해 mass-normalize한다. 해석 출력에는
|
||||
lambda, frequency, mode vector와 residual/Gram evidence를 구별한다. 음수값을 abs/clamp하지 않는다.
|
||||
강체 모드·cluster 경계·모드 누락·empty free/과도한 N을 검증한다.
|
||||
\(\|K\phi-\lambda M\phi\|/[(\|K\|+|\lambda|\|M\|)\|\phi\|]\),
|
||||
\(|\phi^TM\phi-1|\)와 mass Gram 오차는 `1e-10` 이하를 요구하며 zero denominator는
|
||||
exact-zero 분기로 처리한다. 모든 backend 반환 pair를 검증한 뒤 공개 N을 선택한다.
|
||||
Shell 전용 nodal whitening을 일관 M에 적용하지 않는다. 실제 generalized-SPD sparse
|
||||
FEAST 또는 일관 문제를 정확히 보존하는 변환을 사용한다. Sparse pencil을 바꿔 수렴시키지 않는다.
|
||||
|
||||
### FEM-REQ-HEX8-015 — HHT 동해석
|
||||
|
||||
초기 q/v=0, constrained q/v/a/A=0이다. \(M_{ff}a_{0f}=F_f(0+)-f_{int,f}(0)\),
|
||||
\(A_0=a_0\)로 초기화한다. Amplitude가 0이면 그 초기 힘을 그대로 사용한다.
|
||||
공개 계수는 기존 HHT의 `alpha=-0.05`, `beta=0.275625`, `gamma=0.55`다.
|
||||
Predictor/Newmark 갱신은 auxiliary A를 사용하고
|
||||
\(A_{n+1}=(1+\alpha)a_{n+1}-\alpha a_n\)로 physical a와 구별한다.
|
||||
|
||||
\[
|
||||
R=M A_{n+1}+(1+\alpha)(f_{n+1}-F(t_{n+1}))-\alpha(f_n-F(t_n)),
|
||||
\quad K_{eff}=M/(\beta h^2)+(1+\alpha)K_t.
|
||||
\]
|
||||
|
||||
이 weighted residual은 이전 physical endpoint 평형을 포함하며, 같은 관계로 환산한
|
||||
endpoint 잔차를 쓰는 것도 동등성 검증을 전제로 허용한다. 서로 다른 표현의 tangent와
|
||||
reaction을 혼용하지 않는다. Amplitude는 실제 각 endpoint에서 평가하고 한 step의 힘을
|
||||
고정해두거나 잘못된 시간에서 한 번만 평가하지 않는다. 질량은 상수이므로 Shell의
|
||||
회전 chart·moving-null·convective 관성은 이 절차에 없다. 선형은 K0, 비선형은 Kt를 사용한다.
|
||||
물리 반력은 constrained \(Ma+f_{int}-F(t)\), free endpoint residual은 별도 evidence다.
|
||||
초기부터 마지막까지 `n=0..N`, `time=double(n)*h`, exact schedule `N*h==T`를 유지한다.
|
||||
마지막 증분 축소·adaptive time·restart는 지원하지 않는다.
|
||||
동적 초기 tuning default는 기존 HHT의 normalized residual/correction `1e-10`,
|
||||
Newmark update 일치 `1e-12`, 증분당 최대100 iteration이다. Force 잔차의 scale은
|
||||
같은 endpoint의 uncancelled inertia/internal/external force로 만들며 scale0은 exact-zero다.
|
||||
Correction은 기준 형상의 양의 길이 L로 u를, L/h와 L/h²로 v와 physical/auxiliary a를
|
||||
정규화해 각각 확인한다. 회전 channel을 복제하거나 잔차를 보정한 뒤 accept하지 않는다.
|
||||
|
||||
### FEM-REQ-HEX8-016 — 응력·변형률 복구
|
||||
|
||||
8개 적분점에서 선형 global Cauchy stress·미소변형률, 비선형
|
||||
\(\sigma=FSF^T/\det F\)와 기준 global Green–Lagrange strain을 복구한다.
|
||||
Tensor strain 성분은 `[11,22,33,12,13,23]`의 실제 shear이며 B 계산용 engineering shear와
|
||||
구별한다. 적분점 평균·절점 외삽·nodal smoothing을 하지 않는다. Cauchy stress와 PK2를
|
||||
같은 이름으로 저장하지 않는다. 기본 공식 응력은 Cauchy다. Frequency의
|
||||
mode vector를 물리 응답 변위/응력으로 복구하지 않는다.
|
||||
|
||||
### FEM-REQ-HEX8-017 — HDF5 계약
|
||||
|
||||
새 형식은 `/metadata`의 `feature_id=hex8-structural-analysis`, `schema_version=1`과
|
||||
`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=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],
|
||||
free0/constrained1이다. 다음 mandatory compound field 순서와 dtype을 사용한다.
|
||||
U64/U8/F64는 각각 unsigned 64/8-bit integer와 Float64 little-endian이며 문자열은 UTF-8다.
|
||||
|
||||
| model 경로 | field 순서·dtype |
|
||||
| --- | --- |
|
||||
| `/model/nodes` | `internal_node_id:U64, instance_name:string, source_label:string, coordinates:F64[3]` |
|
||||
| `/model/elements` | `internal_element_id:U64, instance_name:string, source_label:string, source_element_type:string, internal_formulation:string, node_internal_ids:U64[8], solid_section_internal_id:U64, material_internal_id:U64` |
|
||||
| `/model/solid/materials` | `internal_material_id:U64, name:string, youngs_modulus:F64, poisson_ratio:F64, density_present:U8, density:F64` |
|
||||
| `/model/solid/sections` | `internal_section_id:U64, source_file:string, source_line:U64, source_elset:string, material_internal_id:U64` |
|
||||
| `/model/solid_integration_points` | `internal_element_id:U64, point_id:U8, natural_coordinates:F64[3], reference_coordinates:F64[3]` |
|
||||
|
||||
Internal ID는 각 inventory의 zero-based index이고 point ID는1–8이다. 요소는 Domain 선언 순서,
|
||||
integration-point row는 element-major/point-major다. `density_present`는0/1이고 부재 시
|
||||
`density=0`은 저장 placeholder이며 해석 밀도로 사용하지 않는다. 필수 밀도 절차에서는 부재를
|
||||
writer 이전에 거부한다. 원본 positive density가 있는 정적 모델은 이를 그대로 기록한다.
|
||||
|
||||
| 경로 또는 frame 상대 경로 | shape / 의미 |
|
||||
| --- | --- |
|
||||
| `/steps/Step-1/accepted_frames` | 아래 정의한 비선형 정적/동적 compound table |
|
||||
| `/steps/Step-1/frames/<n>/nodal/displacement` | [N,3], U1/U2/U3 |
|
||||
| `nodal/reaction` / `nodal/residual` | 각각 [N,3], 반력은 free exact0, residual은 full endpoint/static residual |
|
||||
| `solid/stress` / `solid/strain` | [E,8,6], point 순서·global frame·Cauchy 또는 Green/infinitesimal 의미 attribute |
|
||||
| `global/strain_energy` | scalar; accepted physical elastic energy |
|
||||
| 동적 `nodal/velocity`, `acceleration`, `algorithmic_acceleration` | 각각 [N,3], V·physical a·auxiliary A |
|
||||
| 동적 `global/kinetic_energy`, `external_work`, `energy_balance_error` | scalar; 서로 다른 양, 계산 정의 attribute |
|
||||
| 동적 `global/linear_momentum`, `angular_momentum` | [3], global O=(0,0,0) 기준 |
|
||||
| `/steps/Step-1/eigen/modes`, `frequencies`, `vectors` | 아래 정의한 mode records, frequency subset, F64[Nmode,Nnode,3] mass-normalized vector |
|
||||
|
||||
위 `Step-1`은 기존 storage step key이고 source step 이름은 metadata에 별도 보존한다.
|
||||
모든 물리 배열·scalar는 F64다. Accepted table은 아래 field를 정확히 이 순서로 가진다.
|
||||
|
||||
- 비선형 정적: `frame_index:U64, increment_index:U64, load_factor:F64, iteration_count:U64, is_factor_one:U8`.
|
||||
- 동적: `frame_index:U64, increment_index:U64, time:F64, iteration_count:U64, is_initial:U8`.
|
||||
|
||||
Flag는0/1이다. Static linear에는 accepted table이 없다. 비선형 정적 frame0은 첫 accepted
|
||||
증분이고 baseline factor0은 공개 frame이 아니다. Dynamic은 frame=increment=n,
|
||||
initial의 iteration_count=0이며 이후 값은 실제 accepted Newton/선형 solve 횟수다.
|
||||
Final-static flag는 마지막 factor1 frame에만1이다.
|
||||
|
||||
Eigen `modes`는 `mode_id:U64, eigenvalue:F64, classification:U8, cluster_id:U64`,
|
||||
`frequencies`는 `mode_id:U64, frequency:F64`다. Mode/cluster ID는1부터 증가하며 mode는
|
||||
lambda 오름차순이다. Classification 집합은0=rigid-near-zero, 1=positive다. 검증된 near-zero
|
||||
음수 lambda도 원 값으로 남기고 frequency row를 만들지 않으며 유의한 음수는 solver failure다.
|
||||
Nonnegative lambda에만 `frequency=sqrt(lambda)/(2*pi)`를 기록한다. 초기 tuning default는
|
||||
`lambda_scale=max_i(abs(Kff_ii)/Mff_ii)`에서 `abs(lambda/lambda_scale)<=1e-9`를 near-zero,
|
||||
인접 normalized gap `>1e-8`을 새 cluster로 분류한다. 양의 M diagonal과 finite positive
|
||||
lambda_scale을 확인한다. 이 scale은 FEAST interval의 스펙트럼 상한으로 주장하지 않는다.
|
||||
기능 numeric-controls에 scale·설정·독립 검증을 기록하고 저장 lambda를 보정하지 않는다.
|
||||
`/steps/Step-1/eigen/verification/pairs`는 backend가 반환한 모든 검증 pair의 table이며
|
||||
`sorted_rank:U64, solver_column:U64, eigenvalue:F64, modal_mass:F64, rayleigh_quotient:F64, eta_r:F64, eta_norm:F64, eta_energy:F64`다.
|
||||
Backend column은0-based, rank는1-based다. 같은 verification group의 `eta_gram`,
|
||||
`max_eta_orth`는 F64 scalar다. Backend 고유 trace는 기존 공개 의미로 추가 기록할 수 있으나
|
||||
필수 original K/M 검증량을 다른 operator의 잔차로 대체하지 않는다.
|
||||
|
||||
Static frame0은 완료 결과, nonlinear static frame은 accepted 증분, dynamic frame0은 initial이다.
|
||||
Frequency에는 static/dynamic frame dataset을 요구하지 않는다. 각 결과에 component_names,
|
||||
unit dimensions, coordinate/location, step/frame/time 또는 load_factor 의미를 명시한다.
|
||||
Self-check는 위 dtype/field 순서·shape·identity·flag·finite·frame schedule와 accepted 값의
|
||||
readback 일치를 검증한다. 기능 I/O 문서는 이 계약을 상세화하며 다른 field 집합으로 바꾸지 않는다.
|
||||
기존 Beam/Shell/Thermal 파일의 required dataset이나 schema를 바꾸지 않는다.
|
||||
Full/element matrix dump는 공식 결과에 포함하지 않는다.
|
||||
|
||||
### FEM-REQ-HEX8-018 — 물리 수지와 에너지
|
||||
|
||||
정적은 힘·모멘트 평형, 동적은 운동량 변화율과 applied/support 힘·모멘트를 검사한다.
|
||||
Consistent M으로 \(T=v^TMv/2\), \(U=\sum W_g\det J_{0g}\)를 계산한다.
|
||||
외력 일은 endpoint force와 displacement increment의 trapezoid 누적이며 초기0,
|
||||
`energy_balance_error=T+U-T0-U0-Wext`다. 현재 BC는 동적 exact0여서 support work=0이다.
|
||||
HHT의 알고리즘 소산과 quadrature에 따른 work 오차를 설명하며 각 frame exact conservation을
|
||||
강제하지 않는다. Alpha0 내부 검사에서는 선형 무하중 보존을 독립 확인한다.
|
||||
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 — 실패와 진단
|
||||
|
||||
미지원 physics/옵션, geometry/trial 반전, 비유한 값, singular/invalid matrix, 수렴 실패,
|
||||
backend resource 실패를 source/entity와 함께 명시적으로 보고한다. Invalid model과
|
||||
solver failure, output failure를 기존 category로 구분한다. 실패 candidate는 마지막
|
||||
accepted state/history와 기존 final HDF5를 변경하지 않는다. Write·readback·close·atomic
|
||||
replace 실패를 검사한다. 로그 보존과 final 결과 보존은 서로 다른 계약이다.
|
||||
|
||||
### FEM-REQ-HEX8-020 — 결정론
|
||||
|
||||
Serial/parallel local 계산에서 source identity·equation/scatter·ordered reduction·결과 row와
|
||||
진단 순서를 재현한다. 같은 수치 설정에서 반복 실행 결과를 검증한다. Modal sign은
|
||||
최대 절대 성분의 최초 source-order index를 양수로 고정한다. 반복 고유값의 벡터별 일치는
|
||||
외부 비교하지 않으며 해당 공간의 mass Gram·residual·subspace 불변량으로 검증한다.
|
||||
|
||||
## 검증과 완료 조건
|
||||
|
||||
### FEM-REQ-HEX8-021 — 독립 수치·물리 검증
|
||||
|
||||
정식화·numeric controls를 독립 검토한 뒤 의미 있는 local/integration 검사를 수행한다.
|
||||
검사 oracle는 production 식·assembly를 단순 복제하지 않는다. 최소 사례는 다음과 같다.
|
||||
|
||||
1. 정육면체의 독립 정확 적분 K/M, 다항 patch, 6 rigid modes, total mass·scale·좌표변환.
|
||||
2. 비대칭 왜곡·뒤틀린 요소의 Jacobian, folded/inverted/degenerate 및 비유한 입력.
|
||||
3. 유한 rigid rotation과 strained-then-rotated 상태, 에너지 gradient·tangent directional
|
||||
difference의 step sweep, Kmat/Kgeo 분리와 zero-state Kt=K0.
|
||||
4. 비영 BC·전체 구속·static singular 모델·성공/실패 state와 HDF5 보존.
|
||||
5. 실제 generalized K/M 고유쌍의 독립 dense 작은 모델 oracle, density scaling,
|
||||
clustered/rigid modes·최저 N·original-free residual/Gram.
|
||||
6. 선형 oscillator의 해석해 및 alpha0, amplitude knot 전/정확/후·초기 a·서로 다른 curve,
|
||||
비선형 constant-mass 제조해의 전체 u/v/physical a 시간수렴.
|
||||
7. 실제 Hex8 mesh의 h/h2/h4 응답·가속도·힘/모멘트/에너지 수지, 큰 회전과 작은 strain,
|
||||
spatial mesh refinement·full-integration 잠김 한계, serial/parallel 결정론.
|
||||
|
||||
내부 zero/noise scale과 conditioning 기준은 수식·정밀도·oracle에 근거한 기능별
|
||||
numeric controls로 정하고 독립 검토한다. 외부 5%/1%를 내부 정확성 기준으로 사용하지 않는다.
|
||||
시간수렴은 변위만 맞는 사례로 대신하지 않으며 유의한 오차 구간과 미분량 차수를 함께 판정한다.
|
||||
|
||||
### FEM-REQ-HEX8-022 — 필수 reference
|
||||
|
||||
2026-10-08 확인된 원본은 `reference/hexa/`다. 모두 read-only다.
|
||||
|
||||
| case | 입력 | 결과·필수 family |
|
||||
| --- | --- | --- |
|
||||
| 선형 정적 | `hexa_linearstatic.inp` | `_U.csv`, `_RF.csv`, `_S.csv`: 완료 frame의 U1–3, constrained RF1–3, Cauchy S 6성분 |
|
||||
| 비선형 정적 | `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` | 사용자 제공 `hexa_freq.txt`의 최저10 modal Value(고유치 λ)를 비교 |
|
||||
|
||||
현재 inventory는 442 nodes, 300 elements다. 정적 U/RF 각442행, 수정된 정적 S 각2400행의
|
||||
`IntPt=1..8`, 동적 U 각각44642행이다. 기존 elemental-nodal 응력 CSV의 위치 계약을
|
||||
사용하지 않는다. 동적 V/A·reaction/energy reference는 없으므로 독립 검증이 필수다.
|
||||
필요한 고유치 원본이 없으면 그 비교는 미실행이고 전체 기능 완료도 대기다.
|
||||
원본 추가 전이라도 독립 구현·검증 작업은 계속할 수 있다.
|
||||
|
||||
### FEM-REQ-HEX8-023 — 비교 identity와 수치 정책
|
||||
|
||||
Nodal key는 case/source step/increment/instance/node/component, stress key는
|
||||
case/source step/frame/instance/element/IntPt/component다. CSV header의 공백은 lexical
|
||||
정규화하되 source row를 삭제·평균하거나 nonfinite를 보정하지 않는다. 좌표와 point convention은
|
||||
원본 precision을 고려한 보조 검증이며 nearest-position matching으로 ID를 추정하지 않는다.
|
||||
Dynamic은 integer increment로 대응한 뒤 각 source decimal time과 binary64 n*h schedule을
|
||||
검증한다. Static은 마지막 factor-one frame에 대응하고 storage frame 번호가 같다고 가정하지 않는다.
|
||||
|
||||
정적 U-global·RF-global·S-global은 서로 다른 blocking family, 동적 U-global은 frame별
|
||||
blocking family다. RF는 원본 전체442행 inventory를 먼저 확인한 뒤 실제 constrained components를
|
||||
투영한다. Free RF를 FESA free residual로 비교하지 않는다. S는 각 case/frame의 300×8×6을
|
||||
포함한다. Modal Value는 mode별 singleton blocking family이며 외부 mode-shape 비교는 비목표다.
|
||||
Missing/extra/duplicate/identity/nonfinite 오류는 tolerance 이전 실패다.
|
||||
공통 정책의 S=max|reference|, B=.01S, 일반 row relative≤.05, family RMS/S≤.01,
|
||||
S=0 exact-zero를 적용한다. MITC4 eigen의 RMS5% 예외는 육면체에 적용하지 않는다.
|
||||
Source C3D8의 입력 호환성과 Abaqus 내부 integration/constitutive/time-algorithm 동등성은
|
||||
서로 다르다. 불일치 시 정식화·reference identity·절차를 조사하며 acceptance를 임의 완화하지 않는다.
|
||||
|
||||
### FEM-REQ-HEX8-024 — 회귀·완료 판정
|
||||
|
||||
구현 완료 시 실제 설정의 MSVC x64 Debug 전체 build/CTest와 필수 reference 비교,
|
||||
독립 수치·물리 검토가 필요하다. 최신 source revision·명령·native exit·metric·hash를 기록한다.
|
||||
모든 신규/영향 검사 PASS, 모든 필수 reference PASS, 미해결 신규 physics 오류0이 완료 조건이다.
|
||||
기존 HHT C08 두 FAIL·C04a SKIP의 과거 기록은 baseline으로 직접 재확인하고, 동일하다면
|
||||
기존 미해결로 별도 보고한다. 전체 suite를 green이라 부르거나 제외 실행으로 대체하지 않는다.
|
||||
기존 오류를 새 오류와 섞거나 현재 작업의 성공을 위해 Shell/Thermal 수식·policy를 변경하지 않는다.
|
||||
Reference·필수 실행이 대기라면 구현/내부 검증 완료와 기능 검증 완료를 분리한다.
|
||||
|
||||
## 범위 밖
|
||||
|
||||
20절점·tetra·wedge·hybrid/incompatible/reduced 요소, lumped 선택 API, 큰 strain용 다른
|
||||
재료·소성·contact·물리 damping·압력·중력·체적력·시간변화 BC·비영 초기 q/v,
|
||||
mixed mesh·Shell–Solid 연결·prestressed modes·좌굴·다중 step/restart·adaptive/explicit dynamics,
|
||||
열-구조 연성·matrix dump·외부 배포·release-readiness는 포함하지 않는다.
|
||||
|
||||
## 방법과 자료의 한계
|
||||
|
||||
평균 Green trace energy는 선택한 탄성 regime의 FESA 모델이며 Abaqus `*ELASTIC, NLGEOM=YES`의
|
||||
평균 J/Fbar·유한변형 재료 알고리즘과 동일하다고 주장하지 않는다. 선형 체적 평균 일치를
|
||||
비선형 동등성으로 승계하지 않는다. 제공 결과의 일치만으로 다른 regime을 보증하지 않는다.
|
||||
|
||||
Amplitude의 step-time·상대 값·선형 보간·끝 값 유지 의미는
|
||||
[Abaqus 공식 설명](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEPRCRefMap/simaprc-c-amplitude.htm)을 따른다.
|
||||
Generalized sparse FEAST의 공개 진입점은
|
||||
[Intel 공식 문서](https://www.intel.com/content/www/us/en/docs/onemkl/developer-reference-c/2026-0/feast-scsrgv-feast-hcsrgv.html)에서 확인했다.
|
||||
이는 설치 runtime·빈 interval·workspace·정식화 검증 evidence를 대신하지 않는다.
|
||||
|
||||
## 현재 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로 승계하지 않는다.
|
||||
|
||||
2026-10-09 사용자 A 승인은 [내부 정밀도 변경안](precision-proposal.md)의 전체 high+low
|
||||
물리 상태와 Float64 반올림 observable을 FEM-REQ-HEX8-015·017–020에 적용한다.
|
||||
HHT 식·기준 consistent M·입력·고정 schedule·100회·Si/exact-zero·원래 strict gate 및
|
||||
외부 tolerance는 유지한다. 아래 구현·검증 checklist는 이 승인만으로 완료되지 않는다.
|
||||
|
||||
- [x] 승인된 체적 평균 수식·입출력·numeric controls·원본 mapping 정리 및 독립 numerical review 완료
|
||||
- [x] 체적 평균 Hex8 K0/consistent M/비선형 f/Kmat/Kgeo/Kt·형상·복구 kernel 검증
|
||||
- [x] Solid Domain/parser/3N DOF/ordered assembly/amplitude 검증
|
||||
- [x] 체적 평균 선형·비선형 정적 accepted state/반력/잔차 내부 검증
|
||||
- [x] 체적 평균 generalized consistent-mass frequency·최저 N·original-pencil 내부 검증
|
||||
- [x] 체적 평균 선형·비선형 HHT u/v/physical a·시간수렴·수지 내부 검증
|
||||
- [x] 체적 평균 공식 HDF5/CLI/self-check/실패 final 보존 내부 검증
|
||||
- [x] 정적2·동적2 원본 필수 family 비교 PASS
|
||||
- [ ] 사용자 원본 최저10 modal Value 필수 비교 PASS — 원본 제공 완료, 7/10 family FAIL
|
||||
- [x] 최신 전체 MSVC Debug build/CTest·기존 baseline 대조 완료
|
||||
- [ ] 최종 필수 고유치 불일치 해결 및 independent numerical/physics blocker0·범위/한계/evidence 완료
|
||||
|
||||
체적 평균 구현은 frozen `b2abd739`를 root `18b36c1`로 연결했다. 작성자 관련150/150,
|
||||
시간수렴3 GTests/4물리 사례 및 최종 실제 재컴파일3/3은 native build/CTest0/0이다.
|
||||
모든 u/v/physical a 관측 차수는1.98022 이상으로 기존1.8 기준을 충족했다. 독립 numerical와
|
||||
작은 사례 physics 검토는 해당 범위의 bounded PASS다. Root 연결 후 kernel·frequency·
|
||||
공식 출력 관련65/65도 native build/CTest0/0이다. 새로운 다섯 원본 CLI는 모두 native0으로
|
||||
자연 종료했다. 제외 없는 전체787 CTest도 자연 종료했으며 native8,
|
||||
784 PASS·기존 Shell FAIL2·SKIP1이다. 기존617개를 보존했고 추가170개는 모두 PASS다.
|
||||
새 예외는0이며 전체 green은 아니다. 두 기존 실패의 metric body는 baseline과 동일하고,
|
||||
SKIP은 보존된 상세 출력이 없어 이름·상태의 동일성만 확인했다.
|
||||
새 선형·비선형 정적 원본의 U1326/RF51/S14400은 각각 필수 비교 native0으로 PASS했다.
|
||||
새 고유치 공식 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 수치 불일치와 기존 회귀 예외는 이 통과로 없어지지 않는다.
|
||||
|
||||
공간수렴 증거는 실제 두 축을 세분화한 지정 굽힘장 에너지다. 평형 cantilever는 길이
|
||||
방향만 세분화하고 두께/폭은2요소로 고정한 tip 추세이며 평형해의 공간차수 증거가 아니다.
|
||||
정규 brick rank와 검증한 warped 사례를 모든 admissible warped cell로 확대하지 않는다.
|
||||
|
||||
Local kernel과 입력·3N mapping은 독립 검토 및 연결 후 관련180개 검사를 통과했다.
|
||||
정적 구현 `a34466f`의 관련98개와 고유치 구현 `0e07b4d`의 관련48개 검사가 각각
|
||||
native CTest exit0이며 독립 수치 검토를 통과했다. 두 정적 원본과442절점 고유치 원본은
|
||||
직접 API로 실행했지만 원본 결과값 비교를 수행한 것은 아니다. 연결 source `28be39f`의
|
||||
전체 MSVC Debug build는 exit0이며 이 build 자체를 전체 CTest 통과로 해석하지 않는다.
|
||||
과거 단일 Float64 구현 `f661864`는 관련76개 검사와 독립 수치 검토를 통과했지만,
|
||||
두 동적 원본의 세 번째 증분에서 strict gate를 만족하지 못했다. 이 실패는
|
||||
[lessons](lessons.md)에 보존하며 현재 방식의 결과와 구분한다.
|
||||
승인된 전체 high+low 구현 `c49cae4`는 소규모32/32 및 별도 성공한 LIN/TL·SDOF/MDOF
|
||||
시간수렴 사례와 독립 numerical/physics 검토를 확보했다. Root 연결 후 관련49/49와
|
||||
추가 직렬/TBB low 일치1/1 검사도 native build/CTest0/0이다. 두 원본의 초기 상태와
|
||||
증분1–3은 unchanged schedule로 관측했고, 원래 모든 free 성분의 전체 pair 물리 gate를
|
||||
독립 재계산했다. 이 관측은 네 번째 증분 전에 종료했으며 전체101 endpoint 완료가 아니다.
|
||||
상세 범위와 한계는 [수치 검토](numerical-review.md), [물리 검토](physics-review.md)에 있다.
|
||||
공식 결과 연결은 `e2c3c5b`에 통합했다. 작성자 행동본의 관련101/101과 public header만
|
||||
보완한 후속본의5절차 API/schema1/1이 native build/CTest0/0이며, 독립 수치·I/O 검토에서
|
||||
요청 밖 modal pair의 입력 검증 누락을 보완하고 잔여 finding0을 확인했다. 메인 연결 후
|
||||
실제 CLI·HDF5·full-pair RN64·실패 final 보존 관련17/17도 native build/CTest0/0이다.
|
||||
이 범위의 완료와 외부 비교·최신 전체 회귀는 구분한다. 실행 방법은 [README](README.md),
|
||||
세부 근거와 한계는 [수치 검토](numerical-review.md)에 있다.
|
||||
다음은 원본 frequency 결과가 제공되기 전 pointwise 구현의 비교 이력이다.
|
||||
비교기 `317fe5c`는 원본 identity·schema·finite·허용오차·원본 덮어쓰기 보호의 독립 검토와
|
||||
관련124/124 Python 검사(native0)를 통과했다. Root 연결 후 같은 관련124/124도 native0이며
|
||||
정적 수치 실패와 modal NOT RUN을 재현했다. 두 정적 원본은 실제 CLI native0이지만
|
||||
U/RF/S 필수 비교는 모두 FAIL이다. 고유치 공식 readback은 검사했으나 원본 Value 부재로
|
||||
비교는 NOT RUN이다. [verification](verification.md)의 metric과
|
||||
[승인된 변경 근거](reference-discrepancy-proposal.md)를 구분한다. 별도 선형 Python 후보의
|
||||
수치 일치는 현재 구현의 PASS가 아니다. Source `1eb9cdd`의 전체 build는 native0이고
|
||||
제외 없는780개 CTest는 native8,777 PASS·2 FAIL·1 SKIP으로 종료됐다. 추가163개는 모두
|
||||
PASS이며 기존 예외3개의 이름·status·metric body가 baseline과 동일하다. 전체 green은 아니다.
|
||||
기존 pointwise 구현의 두 동적 원본도 native0으로101 endpoint를 완료했다. 이는 새 체적
|
||||
평균 energy의 결과가 아니며 변경본의 검증은 위 checklist에 따라 다시 수행한다.
|
||||
@@ -1,68 +0,0 @@
|
||||
# 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 결과는 그 실행을 대체하지 않는다.
|
||||
@@ -1,157 +0,0 @@
|
||||
# Hex8 입출력과 내부 전달 계약
|
||||
|
||||
권위 있는 field/enum/shape·지원 입력·진단/실패 의미는 [PRD](PRD.md)의
|
||||
FEM-REQ-HEX8-008–011,016–020,022–023다. Public CLI·path/lease/exit는
|
||||
[공통 계약](../contracts.md), tolerance는 [TOLERANCE](../TOLERANCE.md)를 따른다.
|
||||
이 문서는 그 계약을 구현 경계까지 상세화한다. Physics 선택은 [ADR](ADR.md)를 따른다.
|
||||
|
||||
## Source 입력과 실패 경계
|
||||
|
||||
Solid HHT의 [승인된 high+low 계산](precision-proposal.md)은 내부 전체 물리 상태를
|
||||
accepted history와 다음 trial에 유지한다. 공식 HDF5의 기존 field·shape·Float64 dtype은
|
||||
변경하지 않으며 값은 전체 물리량의 round-to-Float64 observable이다. Self-check는
|
||||
직렬화가 그 반올림과 일치하는지 확인한다. 내부 gate PASS를 rounded 배열 자체의
|
||||
동일 gate PASS로 해석하지 않는다. 로그에 내부 산술을 명시하고 직렬화 비유한 값·
|
||||
overflow는 실패로 처리해 기존 final을 보존한다. Restart는 지원하지 않는다.
|
||||
|
||||
기존 single Part/identity Instance/set/target subset을 재사용하고 source spelling/location/
|
||||
instance/label과 internal index를 구분한다. C3D8의8 distinct nodes와 SOLID SECTION의 elset/
|
||||
material 연결, constant E/nu 및 procedure별 density capability를 검증한다. Blank section row는
|
||||
허용하되 thickness/material orientation·다른 solid type를 default로 흡수하지 않는다.
|
||||
|
||||
실제 BC/CLOAD 성분은 DOF1–3이다. 사용자 승인된 호환 예외로 supported displacement BC의
|
||||
exact-zero DOF4–6(생략0 포함)만 source/location warning/no-op으로 처리한다. Mixed1–6 range는
|
||||
1–3을 적용하고4–6만 경고하며 회전 equation/state를 만들지 않는다. 비영 회전 BC와 모든
|
||||
회전 CLOAD는 거부하고 unsupported BC 옵션·DOF범위 밖 의미를 이 예외로 수용하지 않는다.
|
||||
Static 비영 prescribed는 absolute target이며 nonlinear의
|
||||
factor가 force/target 모두에 적용된다. Frequency는 homogeneous BC, dynamic은 exact-zero BC와
|
||||
initial q/v0만 허용한다. Unused node·mixed element·alias element·unknown set/material/source
|
||||
identity·bad density/geometry·unsupported meaningful keyword는 model/input failure다.
|
||||
|
||||
TABULAR amplitude는 canonical name uniqueness를 검증하며 raw name/location을 보존한다.
|
||||
TIME=STEP TIME/VALUE=RELATIVE/DEFINITION=TABULAR의 생략 default와 명시 동일 값만 지원한다.
|
||||
One/many rows의 pair를 flatten해 finite time>=0/strict increasing/value finite를 검사한다.
|
||||
Knot 원 값·linear interpolation·end hold를 사용한다. Curve 없는 CLOAD는 initial0+부터 constant다.
|
||||
다른 curve를 사용하는 load block은 미리 하나의 base vector로 합치지 않는다. Static/BC amplitude,
|
||||
TOTAL TIME/SMOOTH STEP/smoothing option을 fail-closed로 거부한다.
|
||||
|
||||
STATIC DIRECT는 h/T/INC의 fixed schedule을 지원하며 nonlinear load factor는 n*h/T다.
|
||||
기존 일반 STATIC fixed-factor subset도 유지한다. DYNAMIC DIRECT h/T/INC는 integer n과
|
||||
binary64 n*h로 대응한다. FREQUENCY의 N은 source mode request이며 LANCZOS/SIM option 표기와
|
||||
실제 generalized MKL FEAST를 metadata/diagnostic에서 구분한다. Provided PRESELECT/무해한
|
||||
output/restart 요청은 명시된 no-op이고 required 공식 결과를 삭제하는 selector가 아니다.
|
||||
|
||||
## T2/T3와 이후 절차의 typed 경계
|
||||
|
||||
다음 class/method 이름은 구현 계획용 초기 interface다. 같은 행동/배열 크기·소유권을 유지하는
|
||||
repository-conforming 이름 조정은 허용하며 physics/schema 수정은 아니다.
|
||||
|
||||
- `Hex8Element`는 기존 Element interface의 linear `ComputeStiffness`와 `Recover`를 제공한다.
|
||||
Create 입력은 internal element index, source/local layout, 기준 좌표8×3, 기존 isotropic
|
||||
elastic material와 optional density다. 생성은 Solid Domain/section 정의 대신 이 local
|
||||
입력에 의존한다. Layout은8 source-order nodes×UX/UY/UZ다.
|
||||
- Explicit `EvaluateLinear(u)`/`EvaluateNonlinear(u)`는 immutable element의 local u[24]를 받아
|
||||
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()`는
|
||||
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이며 평균된
|
||||
대체 strain이 아니다. 응력은 같은 point의 deviatoric strain과 요소 전체의 reference-volume
|
||||
평균 trace에 의존한다. 비선형은 PK2를 실제 F/J로 Cauchy 변환하며 평균 Cauchy pressure를
|
||||
가정하지 않는다. Generic recovery variant의 Solid payload는 별도 type이다.
|
||||
- Semantic Domain은 Solid element/section/material/density·amplitude 정의를 소유한다.
|
||||
DOF profile은 `kSolidStructural`에 해당하는3-component 구조이며 `FullDof`, free/constrained,
|
||||
generic `ElementScatter`, sparse pattern의 기존 공개 의미를 유지한다. 동작별 node component
|
||||
count를 조회해6으로 고정된 loops를 Solid branch에서 제거한다.
|
||||
- Matrix assembly는 local layout+24×24 contribution의 stable ordered reduction이다. Mass/stiffness
|
||||
storage는 같은 full-space pattern이며 free restriction은 실제 constraint mask를 사용한다.
|
||||
Runtime factory 연결은 Domain material/coords를 Hex8 Create에 전달하는 단일 owner가 수행한다.
|
||||
- Static/eigen/dynamic executor는 procedure별 typed outcome/state를 반환한다. Accepted frames는
|
||||
source identity·3N physical arrays·8점 result·physical scalars와 validation evidence를 소유한다.
|
||||
Eigen은 modes/vector/all-pair check/Gram을 소유하고 static displacement frame으로 위장하지 않는다.
|
||||
- Trial은 accepted history의 독립 값이며 invalid geometry/finite/recovery/iteration failure는
|
||||
commit하지 않는다. Static force/correction·dynamic force/rate channels의 raw norm/scale/branch/
|
||||
unit/pass와 increment/iteration을 기록한다. 필요한 failure evidence는 Status/로그까지 전달한다.
|
||||
Shared Shell4-channel logger에 dummy rotation/moment convergence를 만들지 않는다.
|
||||
- Central prepared outcome·writer/CLI 연결은 T7의 한 owner다. Vendor objects는 private adapter에
|
||||
두고 공개 Matrix/Vector/Result/Status 경계를 유지한다.
|
||||
|
||||
## HDF5 metadata와 결과 attribute
|
||||
|
||||
Model/accepted/eigen compound field 집합과 순서·dtype는 PRD017 그대로다. New Solid schema1과
|
||||
procedure/element/integration/mass attributes로 식별하고 기존 file contract는 유지한다.
|
||||
Required strings는 UTF-8, numeric은 explicit little-endian U64/U8/F64다.
|
||||
Metadata의 추가 공개 의미는 다음과 같다.
|
||||
|
||||
| attribute | 값/의미 |
|
||||
| --- | --- |
|
||||
| `source_input_identity` | 실제 읽은 원본 byte identity; 기존 공통 hashing 의미 |
|
||||
| `source_step_name` | 입력 raw step 이름; storage key Step-1과 별도 |
|
||||
| `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` 또는
|
||||
`load_factor:F64`, `coordinate_system=global-cartesian`, 필요한 `location`을 붙인다.
|
||||
Result array의 leading node/element inventory와 component list를 self-check한다.
|
||||
|
||||
| quantity | component_names / unit_dimensions / 필요한 의미 |
|
||||
| --- | --- |
|
||||
| displacement | `U1,U2,U3` / `length` |
|
||||
| reaction/residual | `RF1,RF2,RF3` 또는 `R1,R2,R3` / `force`; reaction은 constrained projection |
|
||||
| stress | `S11,S22,S33,S12,S13,S23` / `force/length^2`; `stress_measure=cauchy`, `location=integration-point` |
|
||||
| strain | `E11,E22,E33,E12,E13,E23` / `dimensionless`; `strain_measure=infinitesimal` 또는 `green-lagrange`, `shear_convention=tensor` |
|
||||
| velocity | `V1,V2,V3` / `length/time` |
|
||||
| physical/algorithmic acceleration | `A1,A2,A3` / `length/time^2`; 각각 `acceleration_kind=physical`/`algorithmic` |
|
||||
| strain/kinetic energy, work, balance error | `scalar` / `force*length`; 각 계산 정의를 별도 `definition` attribute로 기록 |
|
||||
| linear/angular momentum | `P1,P2,P3` 또는 `L1,L2,L3` / `mass*length/time` 또는 `mass*length^2/time`; angular origin은 global0 |
|
||||
| lambda/frequency | `eigenvalue` 또는 `frequency` / `1/time^2` 또는 `1/time`; 서로 다른 eigen table field |
|
||||
| mode vectors | `UX,UY,UZ` / `mass-normalized`; `normalization=phi^T*M*phi=1` |
|
||||
|
||||
Strain-energy definition은 linear `0.5*u^T*K0*u`, nonlinear `sum(W*detJ0)`다.
|
||||
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은 동일한 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에서 확인한다.
|
||||
|
||||
## 출력 candidate와 self-check
|
||||
|
||||
Writer는 완결된 accepted state만 받는다. Dtype/정확한 compound member/order·shape·source
|
||||
IDs·finite·flags·frame/increment/time/factor·physical3 component·eigen norm/검증량을 확인한다.
|
||||
Write 후 readback 값을 candidate와 대조하고 close까지 성공한 뒤 atomic replace한다.
|
||||
잘못된 payload, 임시 write/readback/close/replace 실패에서 기존 final HDF5를 보존한다.
|
||||
File 존재와 이번 실행 성공은 별개이며 CLI native exit와 stored source identity를 확인한다.
|
||||
|
||||
## Comparison projection
|
||||
|
||||
Quantity/key/family와 원본 준비 상태는 [reference-model](reference-model.md)에 있다.
|
||||
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는 제공된 `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 오류는 실패다.
|
||||
@@ -1,309 +0,0 @@
|
||||
# Hex8 계산 정밀도와 검증에서 확인한 점
|
||||
|
||||
현재 완료 여부는 [PRD](PRD.md)의 checklist가 소유한다. 아래 기록은
|
||||
[정식화](formulation.md)와 [수치 기준](numeric-controls.md)을 바꾸지 않고
|
||||
계산 정밀도를 개선한 근거다. 내부 검사 통과와 원본 동적 모델의 수렴은 구분한다.
|
||||
|
||||
## 작은 변형률에서 단위행렬을 빼지 않는다
|
||||
|
||||
`E=(F^T F-I)/2`를 그대로 계산하면 작은 변형률에서 유효 숫자를 잃는다.
|
||||
`H=grad(u)`로부터 `E=sym(H)+H^T H/2`를 계산하면 같은 Green 변형률을
|
||||
단위행렬 차감 없이 구한다. StVK 재료식, 에너지, Cauchy 응력과 접선은 유지한다.
|
||||
|
||||
탄성계수 `2.1e11`, Poisson 비 `0.3`인 직육면체의 signed affine stretch
|
||||
`±1e-10`, `±1e-8`에서 독립 응력·에너지·면 traction 적분으로 기존 오류를
|
||||
재현했다. 수정 `7d191036`은 요소 검사 27개와 독립 수치 검토를 통과했다.
|
||||
비선형 동적 원본의 첫 증분 잔차 비율은 약 `1.42e-5`에서 `6.02e-10`으로
|
||||
줄었지만, 승인된 `1e-10` 기준은 여전히 충족하지 못했다.
|
||||
|
||||
## 곱셈, 합산, 변위 차감의 오차를 각각 보존한다
|
||||
|
||||
강체 병진을 제거한 상대변위로 내력을 계산해도 큰 항들이 상쇄되는 행에서는
|
||||
계산 순서의 영향이 남는다. 원본 선형 동적 사례의 두 요소 행에서 local 곱의
|
||||
절댓값 합은 각각 약 `3.63e6`이었고, FMA 곱셈 잔여와 보상 합산으로 복구한
|
||||
내력 차이의 합은 `8.20e-10`이었다. 당시 전체 잔차 `9.06e-10`과 같은 크기였다.
|
||||
|
||||
수정 `c50e68e`는 캐시된 K0를 그대로 두고 상대변위와의 곱셈·합산을 보상한다.
|
||||
수정 `8153796`은 절점 변위 기울기 및 비선형 `sum(w*P*G)`에도 같은 보상을
|
||||
적용한다. 각각 관련 검사 60개와 독립 수치 검토를 통과했으나 동적 원본은 실패했다.
|
||||
기울기·내력·에너지·접선은 같은 trial의 물리식을 사용한다.
|
||||
|
||||
작은 절점 변위의 갱신은 입력 double에서 표현 가능해도, 더 큰 기준 절점 변위를
|
||||
뺀 상대변위에서는 소실될 수 있다. 수정 `8ccd1b2`는 TwoDiff로 차감의 잔여를
|
||||
보존하고, 상대변위의 두 부분을 내력·기울기·선형 에너지 계산에 함께 사용한다.
|
||||
독립 정확 유리수 검산의 유한 차이 125,039쌍에서 불일치가 없었고, 관련 native
|
||||
검사 60개와 독립 수치 검토도 통과했다. 이 검산은 native solver 검증을 대체하지
|
||||
않으며, 입력 자체의 반올림으로 잃은 값을 복원한다는 의미도 아니다.
|
||||
|
||||
## 수렴 정체와 허용치 변경을 구분한다
|
||||
|
||||
위 수정 후 선형 동적 원본은 첫 증분을 5회 solve, 잔차 비율 `9.54e-11`로
|
||||
수용했다. 두 번째 증분은 100회에서 `1.01993e-10`으로 실패했다. 실패 좌표의
|
||||
직전 적용 보정량은 약 `-0.496 ULP`여서 저장된 변위를 바꾸지 못했다.
|
||||
100회 종료 지점에서는 다음 solve를 하지 않으므로 이 값으로 다음 Newton 갱신을 추론하지 않는다.
|
||||
비선형 원본도 첫 증분에서 약 `1.35e-10`으로 실패했다.
|
||||
|
||||
이는 전체 원본 검증 완료의 근거가 아니다. 물리 잔차의 component별 원래 Si,
|
||||
correction, update 및 max100 기준을 유지하면서 표현 가능한 변위에서 추가
|
||||
정제가 가능한지 확인해야 한다. 예측 잔차는 trial 선택에만 사용할 수 있고,
|
||||
수용은 실제 rates·형상·내력·복구·모든 free 성분의 원래 판정으로 수행해야 한다.
|
||||
원본·허용치를 보정하거나 실패한 candidate를 accepted history에 넣지 않는다.
|
||||
|
||||
## 잔차 점수만으로 Newton 갱신의 정체를 판단하지 않는다
|
||||
|
||||
각 trial의 `abs(r_i)/Si`는 최종 수렴 판정에 사용하지만, 그 최대값이 증가했다고
|
||||
갱신이 정체된 것은 아니다. 작은 강체 운동 사례에서 한 성분의 잔차는 약
|
||||
`9.88e-24`에서 `3.17e-25`로 줄었으나 Si가 더 빠르게 줄어 비율은 증가했다.
|
||||
이 갱신을 한 좌표의 ULP 정제로 대체한 구현은 기존 축·하중 크기 회귀에서 실패했다.
|
||||
현재 failing 성분의 Si를 고정한 별도 점수도 다른 축의 유효한 갱신을 가로막았다.
|
||||
|
||||
완전한 변위가 반복되더라도 다음 반복의 정제 대상 자유도가 바뀌면 계산은 더
|
||||
진행될 수 있다. 따라서 정체의 근거에는 실제 변위와 정제 대상의 변화가 모두
|
||||
필요하며, 잔차 점수의 왕복만으로 전체 상태의 반복을 추론하지 않는다.
|
||||
최종 수용에서는 여전히 실제 모든 free 성분의 원래 Si와 수렴 기준을 검사한다.
|
||||
변위와 직전 solve mask만 비교한 수정 `1063abc`는 관련74개 검사를 통과했지만
|
||||
두 동적 원본은 세 번째 증분100회에서 실패했다. 선형 잔차 비율은 `2.10874e-8`,
|
||||
비선형은 `9.99819e-8`이었다. 이 실패 행의 전체 내력 보상 합산 차이는0이고,
|
||||
관성력 보상 차이는 약 `1e-17`이므로 해당 실패를 합산 오차만으로 설명하지 못한다.
|
||||
|
||||
동일 구현에 동작을 바꾸지 않는 계측을 추가하고 실제 반복 상태를 저장했다.
|
||||
선형은 다음 반복14의 상태가 진입11과, 비선형은20이18과 정확히 같았다.
|
||||
전체 변위1326개·진입 시 holding mask1275개·incoming correction metric4개의
|
||||
유한 값이 모두 일치했고 그 구간의 실제 ULP 이동은0건이었다. 기존 두 상태
|
||||
판별은 false였으며 prospective physical gate도 FAIL이었다. 독립 검토가 계측과
|
||||
원시 배열을 대조했고, 독립 Python 검산은 exit0이었다. 진단 실행 두 건은 각각
|
||||
native exit1로 자연 종료했으며 원본 solver PASS의 증거가 아니다.
|
||||
|
||||
고정 증분에서 이전 accepted state·M·하중·predictor가 고정되고 fresh solve와
|
||||
탄성 local recovery가 결정적일 때, 재현되는 반복 상태는 전체 변위·reactivation 전
|
||||
holding mask·incoming correction4개다. 다음 상태는 실제 fresh Newton 변위·freeze 후
|
||||
mask·fresh correction4개로 비교해야 한다. History는 증분 시작과 실제 ULP 적용 후
|
||||
초기화하고, physical FAIL 및 finite correction PASS 진입만 보관한다. Prospective
|
||||
physical PASS는 정상 Newton 경로를 유지한다. 이 한정된 판별 수정 `b394ae7`은 관련75개
|
||||
검사와 독립 코드 검토를 통과했다. 7개 판별 조건을 각각 제거한 behavior mutation도
|
||||
native build0/CTest8로 실패를 검출했다. 기존 수렴 기준·100회 제한·최종 수용은 유지한다.
|
||||
|
||||
동일 immutable binary의 두 원본 실행은 여전히 세 번째 증분100회에서 native exit1로
|
||||
실패했다. 선형은419.360초, 잔차 비율 `7.21125e-9`, 비선형은431.045초,
|
||||
`1.27770e-8`이었다. 선형95번째 반복의 ULP 이동은 실제 점수를 `7.21125e-9`에서
|
||||
`4.66385e-9`로 낮췄으나 뒤의 정상 Newton 갱신에서 다시 증가했다. 이는 각 정제의
|
||||
국소 감소가 전체 갱신 과정의 진전을 보장하지 않는다는 증거이며, 전체 변위가 같은
|
||||
상태로 복귀했다는 증거는 아니다. 비선형의 잔차 점수 왕복도 전체 상태 반복의 증거가 아니다.
|
||||
|
||||
Incoming correction4개의 실제 수치는 정상 Newton의 rates·tangent·rhs에 사용하지 않으며,
|
||||
유한 값과 PASS 여부가 수용에 쓰인다. 추가 계측에서 선형 진입20→다음23, 비선형72→80은
|
||||
각각 같은 순수 Newton 구간의 전체1326개 변위·1275개 mask가 정확히 같았으나 correction
|
||||
숫자4개는 달랐다. 모두 finite/PASS이고 prospective physical FAIL이었으며 기존 판별은
|
||||
false였다. 선형 진입23→다음30은 실제 ULP 이동을 사이에 두고 변위·mask·correction
|
||||
숫자까지 같았지만 history 초기화로 판별하지 못해 정상 Newton이 적용되는 경로였다.
|
||||
독립 검토와 원시 배열 Python 검산 exit0으로 두 조건의 영향을 확인했다. 비선형에서
|
||||
ULP를 사이에 둔 복귀는 입증하지 않았으며 전체 혼합 알고리즘의 주기 반복도 주장하지 않는다.
|
||||
|
||||
수정 `f661864`는 고정 증분 전체의 적격 실패 진입을 유지하고, 실제 변위·mask와 각각의
|
||||
finite correction PASS로 동등성을 판별한다. Correction 숫자의 차이는 진단으로 유지한다.
|
||||
관련76개 검사는 native build/CTest0이며 독립 검토를 통과했다. 실제 Hex8 사례의
|
||||
history 초기화 재삽입은 두 번째 증분100회 실패를 만들었다. 숫자 일치 재삽입은
|
||||
두 helper 검사의 assertion 실패를 만들었다. 올바른 원본을 복원하고 실제 object를
|
||||
재컴파일한 뒤 최종 회귀를 수행했다.
|
||||
이 재현은 질량이 지배적인 작은 문제의 제어흐름 검사이며 원본 conditioning 해결의 증거가
|
||||
아니다. 원래 gates·100회 제한은 유지한다.
|
||||
|
||||
동일 immutable binary의 원본101개 endpoint 검사 두 건은 다시 세 번째 증분100회에서
|
||||
native exit1로 자연 종료했다. 선형408.202초의 잔차 비율은 `1.7773871030665027e-8`,
|
||||
비선형416.052초는 `8.7357210799572219e-9`다. 최신 실패 행의 전체 내력 보상 합산 차이는
|
||||
0이고 관성력 차이는 약 `1e-17`이다. 최종 다섯 반복에서 전체 변위와 mask는 계속 바뀌므로
|
||||
잔차 점수만으로 정확한 전체 상태 반복을 추론하지 않는다. 새 판별의 내부 검증과 실제 원본
|
||||
수렴은 구분해야 하며, 원본 conditioning·local 계산 또는 결합 좌표의 표현 가능성을 더
|
||||
분석해야 한다. 실패한 state를 통합 완료나 reference PASS로 표시하지 않는다.
|
||||
|
||||
추가 원시 proof와 검산은 로컬 `.harness/hex8-evidence/t6-independent-semantic/`에,
|
||||
수정·mutation·최종 회귀 로그는 별도 구현의
|
||||
`.harness/build-ninja-msvc-debug/hex8-evidence/t6/`에 보존한다. 선형 진단은 닫힌 proof 검토
|
||||
후 명시적으로 중단했고 비선형 진단은 native exit1로 자연 종료했다. 둘 다 solver PASS가 아니다.
|
||||
|
||||
재현 가능한 원시 tuple 검산과 SHA256은 로컬 evidence
|
||||
`.harness/hex8-evidence/t6-independent-tuple/check-v3.py` 및 `v3-check-result.json`에
|
||||
보존했다. 원시 진단과 native 실패 로그는 별도 구현의
|
||||
`.harness/build-ninja-msvc-debug/hex8-evidence/t6/tuple-trace3/`에 있다.
|
||||
|
||||
명령·native exit·실패 로그는 해당 source와 함께 보존한다. 최종 통합 및 외부 비교
|
||||
결과는 이후 verification 기록에서 이 개발 중 실패와 구분한다.
|
||||
|
||||
## 고정한 실패 상태에서 산술 오차와 갱신 소실을 구분한다
|
||||
|
||||
`f661864`의 terminal 상태를 관찰하는 별도 실행은 원래 계산식을 그대로 두고 각300개
|
||||
reference cache·native response와 전체 state/M/Kt를 저장했다. 두 실행은 native exit1로
|
||||
자연 종료했으며 원래 출력한 수치 trace와 일치했다. 계측은 byte 단위로 복원하고 재빌드했다.
|
||||
원래 실행은 full terminal 변위를 저장하지 않았으므로 두 실행의 전체 변위 일치를 주장하지
|
||||
않는다. 수집한 local 변위/scatter·전역 내력·M*a/M*A·r/Si는 모두 정확히 재조립됐고,
|
||||
독립 Fraction 검산 두 건은 Python exit0이며 다른 검토자가 원시 계수로 재계산했다.
|
||||
|
||||
이 검산은 관찰한 binary64 계수를 고정한 정확한 다항식 계산이다. 이상적인 geometry나
|
||||
원본 solver 동등성, 표현 가능한 해의 존재/부재를 증명하지 않는다. 선형 cached K dot의
|
||||
실행 오차는 `+5.82e-13`으로 해당 행의 허용 잔차 `1.49e-11`보다 작았다. Cached G로
|
||||
operator를 다시 구성하면 내력이 `-3.78e-10` 달라지지만 잔차는 여전히 `2.27e-9`다.
|
||||
비선형의 고정밀 내력은 `+5.52e-11` 달라져 잔차를 `4.11e-10`에서 `4.66e-10`으로
|
||||
키웠다. H의 high/low collapse 오차는 존재하지만 이 실패를 산술 정밀도만으로 해결할
|
||||
근거는 없다. Operator 형성 차이와 runtime dot 오차를 혼동해 force만 교체하지 않는다.
|
||||
|
||||
저장한 PRE holding mask를 현재 물리 기준으로 reactivate한 뒤, 같은 순서의 rounded
|
||||
Keff와 old residual을 포함한 weighted RHS를 별도 SuperLU로 풀었다. 정확한 방정식 잔차
|
||||
비율은 두 건 모두 약 `2e-16`이다. 선형102개 active 보정은 모두 저장된 변위를 바꾸지
|
||||
못했고, 비선형81개에서는9개 변위가 바뀌고 실패 좌표71개 보정이 소실됐다. 이는 독립
|
||||
backsolve의 관측이며 production PARDISO의 현재 fresh 방향이나 actual trial PASS가 아니다.
|
||||
직전 적용 보정량과 이번 fresh 방향을 구분해야 한다.
|
||||
|
||||
Weighted R=0의 physical target은 `alpha*r_old/(1+alpha)`다. 비선형 실패 행에서 이 값의
|
||||
크기 `2.60e-11`은 현재 허용 잔차 `4.70e-12`보다 크다. 현재 최종 조건은 weighted R=0을
|
||||
요구하지 않으므로 이것만으로 계약 충돌이나 수치적 불가능성을 선언하지 않는다. Old residual을
|
||||
버리거나 물리 가속도를 다른 정의로 바꾸는 근거도 아니다. 다음 후보는 실제 native
|
||||
rates·geometry·모든 원래 Si·update·weighted identity로 검증해야 한다.
|
||||
|
||||
같은 고정 상태의 native replay는 실제 Hex8 kernel·rates·하중과 저장 CSR을 사용했다.
|
||||
먼저17자리 십진 문자열로 저장한 값을 Float64로 복원하고, 재계산한 전체 변위·속도·
|
||||
두 가속도 배열 및 predictor·하중·내력·관성력·r/Si·최대 점수가 저장 값과 정확히
|
||||
일치하는지 확인했다. 저장 CSR의 재생이며 독립적인 M/Kt 재조립 검증은 아니다.
|
||||
RF는 저장되지 않았으므로 constrained residual/free0의 파생 identity만 확인했다.
|
||||
TEMP 검사는 원래 파일과 byte 단위로 복원하고 실제 object를 재컴파일했다.
|
||||
|
||||
Native PARDISO의 현재 fresh solve도 선형102개 보정이 모두 변위를 바꾸지 못했다.
|
||||
비선형은81개 active 좌표에서9개 변위가 바뀌고71개 실패 좌표의 보정이 소실됐으며,
|
||||
최대 잔차 비율은 `8.73572e-9`에서 `1.27770e-8`로 커졌다. 정확 산술로 예측한 상위8개
|
||||
단일 ULP 후보를 각각 실제 계산한 최선 비율은 선형 `4.75888e-9`, 비선형 `6.73857e-9`다.
|
||||
두 fresh Newton 및16개 ULP trial 모두 원래 physical limit `1e-10`에 실패했다.
|
||||
다른 update·weighted identity·correction·geometry 검사는 통과했다. Native exit0인 두
|
||||
replay 검사는 관측 재현 검사의 성공이며 원본 수렴이나 accepted history의 성공이 아니다.
|
||||
단일 이웃의 실패만으로 여러 좌표를 함께 움직이는 해의 부재를 추론하지 않는다.
|
||||
|
||||
기존에 실제 평가한 최선 단일 이웃에서 Newton/history 없이 단일 ULP 정제를 이어가는
|
||||
별도 관찰은 최대100회 추가 이동으로 제한했다. 먼저4회·24회 관찰과 겹치는 전체 trial
|
||||
배열을 정확히 재현했다.
|
||||
선형은77회 개선 후 `5.25815e-10`에서 남은 예측 개선3개가 실제로는 모두 같은 최대값을
|
||||
만들었다. 비선형은38회 개선 후 `9.85274e-10`에서 남은 예측 개선1개가 실제 최대값을
|
||||
키워 거절됐다. 두 경우 모두 physical FAIL이며 다른 gates는 PASS다. 마지막 cursor에서
|
||||
각각2547개·2549개 실제 단일 방향은 검사하지 않았으므로 모든 단일 이웃의 정체를
|
||||
증명하지 않는다.
|
||||
진단의100회 이동과 production의100회 Newton solve는 다른 수량이다. 이 관찰은
|
||||
accepted frame·다음 fresh solve·전체101개 endpoint의 검증도 아니다.
|
||||
|
||||
최대 비율이 줄어도 실패한 행 수는 늘 수 있다. 마지막 실패 행 수는 선형162개,
|
||||
비선형132개였다. 최대값의 엄격한 감소만으로 모든 행의 최종 평형을 보장하지 않는다.
|
||||
두 정체 상태에서 모든 원래 free 좌표의 ±1 ULP를 정수 변수로 둔 별도 minimax 예측은
|
||||
각20초 후 timeout이었다. 관찰 script의 Python exit0과 최적화 종료 상태를 구분한다.
|
||||
반환 후보의 정확 산술 잔차 비율은 `2.84e-8`·`5.62e-8`로 현재 상태보다 컸다.
|
||||
검증된 zero-change 후보가 주는 목적값 상한을 추가한 각각20초의 후속 예측도 timeout이며
|
||||
정수 후보를 얻지 못했다. 상한은 기존 rounded surrogate 최적해를 보존하지만 solver에
|
||||
초기 후보를 전달하는 warm start는 아니다. 이 결과를 native 후보 통과나 표현 가능한
|
||||
해의 부재로 해석하지 않는다. 최적화 도구는 로컬 진단에서만 사용했고 production은
|
||||
변경하지 않았다.
|
||||
|
||||
두 좌표를 함께 ±1 ULP 이동하는 별도 예측은 마지막 단일 정제 상태에서 시작했다.
|
||||
최대 잔차 행의 M 또는 Kt 구조적 support에 적어도 한 좌표가 연결되는 조합을 검사했다.
|
||||
선형313236개·비선형210588개의 Float64 affine 예측을 완료했고, 상위8개씩은
|
||||
고정 계수의 정확 산술로 Ma·내력·새 Si를 다시 계산했다. 이 support 제한은 affine
|
||||
예측에 대한 것이며 실제 비선형/반올림 계산의 모든 두 좌표 이웃을 포함한다는 뜻은 아니다.
|
||||
최선 예측은 각각 `5.23348e-10`·`9.75010e-10`으로 현재 최대값보다 작지만 여전히
|
||||
원래 기준 `1e-10`을 초과했다.
|
||||
|
||||
이16개 후보를 각각 같은 변경하지 않은 cursor에서 실제 kernel·rates로 평가했다.
|
||||
선형8개는 최대값 `5.25815e-10`이 그대로였고, 비선형은 모두 현재 `9.85274e-10`보다
|
||||
커졌다. 모든 후보의 실제 변위 변경은 서로 다른 원래 free 두 좌표의 한 ULP로
|
||||
확인됐으며 physical FAIL, 다른 gates PASS였다. 전체 배열·r/Si·원시64개 artifact의
|
||||
SHA를 별도 검산한 Python exit는0이다. 두 native 관측 검사의 exit0은 평가와 재현의
|
||||
성공이며 후보 개선이나 원본 동해석 수렴의 성공이 아니다. Cursor는 이동하지 않았고
|
||||
다음 fresh solve·accepted history는 실행하지 않았다. 예측 개선을 실제 개선으로
|
||||
대체하거나 이16개 실패로 모든 표현 가능한 해의 부재를 주장하지 않는다.
|
||||
|
||||
Increment-local 보상 가산은 물리 상태를 단일 Float64 변위로 유지하면서 덧셈의 소실량만
|
||||
다음 Newton 갱신에 누적하는 별도 관찰이었다. 같은 최선 cursor에서 plain/carry 각각
|
||||
12회씩, 선형·비선형 총48회 fresh solve를 수행했다. 두 경로 모두 원래1275개 free
|
||||
방정식 전체를 풀고 실제 current Kt를 재조립했으며 old residual과 모든 기존 gates를 유지했다.
|
||||
Production의 principal refinement·history·ULP 탐색은 이 비교에 포함하지 않았다.
|
||||
|
||||
첫 Kt/Keff/RHS·fresh 방향·전체 물리 배열은 두 경로에서 정확히 같았다. 이후 carry는
|
||||
실제로 다른 변위 경로를 만들었지만 모든48개 physical 판정은 FAIL이었다. 최종 비율은
|
||||
선형 plain/carry `3.14971e-8`/`3.14508e-8`, 비선형 `4.43049e-8`/`1.54565e-7`로,
|
||||
둘 다 시작 cursor보다 컸다. 다른 gates는 모두 통과했다. Native exit0의 두 관측 검사는
|
||||
수렴 성공이 아니며, 독립 Python 검산 exit0은 원시201개 SHA·carry 산술·연산/경로·r/Si와
|
||||
게이트를 검증한 것이다. TEMP source는 실행 전 복원하고 실제 object를 재컴파일했다.
|
||||
이 결과는 production carry 도입이나 반복 횟수 확대를 뒷받침하지 않는다.
|
||||
|
||||
이 진단 종료 시점에는 low를 물리 변위로 사용하는 변경안을 채택하지 않았다.
|
||||
이후 사용자가 2026-10-09 선택 A로 [내부 정밀도 변경안](precision-proposal.md)을 승인했다.
|
||||
단순 carry와 구분해 전체 계산 상태를 high+low로 유지하고 Float64는 반올림 observable로
|
||||
출력한다. 기존 실패 evidence는 새 방식의 통과 증거가 아니며 물리 기준·원본은 유지한다.
|
||||
|
||||
원시 capture·정확 산술·backsolve·이웃 예측·native replay의 재현 자료와 독립 raw 검산은
|
||||
로컬 `.harness/hex8-evidence/t6-independent-frozen/`에 보존한다. 기능 checklist는
|
||||
그대로 미완료다.
|
||||
|
||||
## 승인된 전체 high+low 요소의 첫 검증
|
||||
|
||||
2026-10-09 승인 A 후, low를 누락하는 대조 kernel에서 실제 요소 assertion3개가 실패했다.
|
||||
전체 pair로 H/Green strain/응력/힘/에너지/접선을 계산한 kernel은 native build0/CTest0이다.
|
||||
원래 요소27개와 새 검사17개의 최종 묶음44/44가 통과했고, quarter-turn 작은 전단의 힘
|
||||
covariance와 독립 exact-dyadic primitive oracle을 포함한다. Native 산술6/6은 RN/FTZ/DAZ
|
||||
실행 전제와 normal high에 최소 subnormal FMA error가 붙는 경계까지 확인했다.
|
||||
|
||||
동적 선형과 비선형은 같은 상대변위 gradient의 미분을 사용한다. 기존 rounded K0를 새 힘에
|
||||
혼합하지 않는다. 기준 절점0의 signed 방향 차분은 접선·에너지 gradient와 일치했고,
|
||||
두 brick의 공유 면 힘, linear/NL zero-state Hessian 및 low만 남은 현재 셀의 ±폭을 검사했다.
|
||||
중앙 에너지 차분의 StVK cubic 오차는 step²로 감소한다. 이를 exact 미분값으로 간주해
|
||||
과도한 test bound를 적용했던 실패를 구분하고 분석적 truncation bound를 적용했다.
|
||||
|
||||
큰 반복 비용을 줄이기 위해 선형 Hessian은 같은 paired zero-state graph의 결과를
|
||||
immutable cache로 보관한다. Cache 생성 실패는 기존 Float64 Create 지원을 거부하지 않는다.
|
||||
변형·실패 trial 후에도 high/low Hessian은 같고 힘·에너지·복구와 비선형 접선은 같은 전체
|
||||
trial에서 계산한다. 독립 reviewer가 이 캐시와 native44/44의 원시 로그도 확인했다.
|
||||
|
||||
독립 numerical reviewer는 실제 shared arithmetic·kernel·geometry의 한정된 범위를 PASS로
|
||||
판정했다. 재현 로그는 `.harness/hex8-evidence/precision/`에 보존한다. 이 결과는 동적 전체
|
||||
상태·시간수렴·원본 endpoint·공식 출력의 완료를 뜻하지 않는다. 현재 checklist는 미완료다.
|
||||
|
||||
## 전체 상태의 제한적 원본 관측과 연결
|
||||
|
||||
전체 high+low T6 `c49cae4`는 원래 시간 간격·INC를 바꾸지 않고 두 원본의 초기 상태와
|
||||
증분1–3을 accept했다. Test-only typed stop으로 다음 증분 전에 종료해 prefix 상태를
|
||||
관측했으며 native0·2/2를 전체 원본 완료로 보고하지 않는다. 메인이 전체 pair·full M/Mff,
|
||||
모든1275 free r/Si·zero branch·HHT update·weighted old-r·실제 solve 보정을 exact Fraction으로
|
||||
검산했다. 물리 비율 최대값은 선형3.12680e-20, 비선형1.3043731e-16이다.
|
||||
|
||||
Root 연결의 related49/49와 두 brick의 LIN/TL 전체 low 직렬/TBB 일치1/1은 native0이다.
|
||||
최초 broad filter가 긴 전체 원본 smoke를 함께 선택한 실행은 의도적으로 중단했고
|
||||
CTest exit−1로 보존했다. 완료하지 않은 실행을 수렴 실패로 해석하거나 현재 PASS에 합산하지
|
||||
않는다. 공식 출력·101 endpoint·원본 비교·전체 회귀는 후속 검증이다.
|
||||
|
||||
## 점 수와 체적 정식화를 구분하기
|
||||
|
||||
실제 두 정적 원본은 CLI/schema 성공 뒤 U/RF/Gauss S가 모두 외부 기준에 실패했다.
|
||||
Source identity와 point mapping을 확인하고 독립 표준 full8 조립/solve·회복을 대조한
|
||||
결과 현재 구현은 승인된 수식과 일치했다. 같은8점이라는 이유로 Abaqus C3D8의 체적
|
||||
처리까지 같다고 가정하면 차이를 입력 오류나 rounding으로 잘못 분류할 수 있다.
|
||||
전체 요소의 원본 변위·응력을 사용한 hydro/dev 분리와 reference-volume 평균의 별도
|
||||
energy/Hessian 후보가 차이를 설명하는 근거다. Stress만 평균화하거나 tolerance를 늘리는
|
||||
수정은 energy/force/tangent 계약을 깨거나 실제 모델 차이를 숨긴다.
|
||||
후보의 선형 수치 관찰과 production·비선형·동적 PASS를 분리해야 한다.
|
||||
실제 metric과 변경 근거는 [verification](verification.md)·[변경안](reference-discrepancy-proposal.md)에 있다.
|
||||
사용자는 이후2026-10-10 B로 체적 평균 energy 도입과 전체 재검증을 승인했다. 이전 실패와
|
||||
후보의 일치를 보존하며 변경본의 내력·접선·절차·원본 검증 결과와 구분한다.
|
||||
|
||||
비교 도구의 `--references` 변경은 원본 보호 기준을 좁히지 않아야 한다. Report와
|
||||
source/result의 hardlink·symlink alias도 보호하고, 잘못된 HDF rank는 failed precheck로
|
||||
기록해야 한다. Source path는 writer와 같은 lexical 정규화를 사용하며 물리적 symlink
|
||||
대상으로 identity를 바꾸지 않는다. 이 세 문제는 안전한 behavior RED와 최종124개 검사로 확인했다.
|
||||
|
||||
## 체적 평균 energy의 독립 oracle와 실패 해석
|
||||
|
||||
첫 weighted warped fixture는 weighted/unweighted 평균의 차이가 거의 없어 판별력이
|
||||
부족했다. 형상과 비균일 변위를 수정한 oracle는 이전 pointwise 구현에서7/7 실패하고
|
||||
새 식에서 통과했다. 독립 검증 fixture 자체의 실패를 production 수식 오류로 단정하지
|
||||
않고, 실제 weighted 평균과 cross-GP Hessian을 판별하는지 먼저 확인한다.
|
||||
|
||||
중앙 차분 step sweep에서는 가장 작은 step에서 오차가 계속 줄어드는 경우도 있다.
|
||||
최솟값이 반드시 중간 step에 있어야 한다는 가정은 정확한 접선을 실패시킬 수 있다.
|
||||
Analytical energy 미분과 차분 오차·절단항을 함께 확인한다. 이전 실패 로그와 수정 후
|
||||
150개 검사 및 시간수렴 기록은 [verification](verification.md)에 구분해 보존했다.
|
||||
|
||||
고정 두께1요소의 길이 refinement는 mean-bulk discretization의 continuum bias를
|
||||
없애지 않는다. 두 축 지정 굽힘장 energy의 수렴과 고정 두께/폭 cantilever tip 추세를
|
||||
서로 다른 증거로 기록한다. 두 결과를 평형해의 동일 공간차수 증거로 합치지 않는다.
|
||||
@@ -1,168 +0,0 @@
|
||||
# 고유치·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) 한 곳에 둔다.
|
||||
@@ -1,262 +0,0 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
}
|
||||
@@ -1,150 +0,0 @@
|
||||
# Hex8 numeric controls
|
||||
|
||||
행동/외부 acceptance 원본은 [PRD](PRD.md), 식은 [formulation](formulation.md)이다.
|
||||
여기의 내부 tuning default는 독립 numerical review와 영향 재검증을 기록해 조정할 수 있다.
|
||||
외부 [common-reference-tolerance](../TOLERANCE.md) 및 승인 physics/schema는 변경하지 않는다.
|
||||
|
||||
## 계산·형상 인증
|
||||
|
||||
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을 유지한다.
|
||||
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)를 허용하지 않는다.
|
||||
Depth default10, 처리한 cell budget default65536이며 uncertain 시 fail-closed다. 이 값은
|
||||
resource/precision tuning이고 accepted geometry의 positive 조건을 완화하는 tolerance가 아니다.
|
||||
현재 Xa+ua를 인증할 때 addition uncertainty도 포함한다. Failed trial은 immutable cache를 보존한다.
|
||||
|
||||
## 체적 평균 energy의 실행 계수와 누적
|
||||
|
||||
2026-10-10 승인된 B는 reference weights의 순서0..7을 유지해 V와 weighted trace를 누적한다.
|
||||
Mu는 `E/(2*(1+nu))`, kappa는 `E/(3*(1-2*nu))`를 Float64로 직접 계산·finite positive
|
||||
검증한다. Kappa의 exact-real identity인 `lambda+2*mu/3`를 실행값으로 빼기/더하기해
|
||||
nu→−1의 큰 계수 취소로 bulk를 잃지 않는다. E/3을 먼저 계산하는 재배열은 실행 계수
|
||||
계약이 아니다. Overflow/underflow로 supported positive 계수를 만들 수 없으면 실패하며
|
||||
clamp·임의 material bound를 추가하지 않는다.
|
||||
|
||||
같은 저장된 F64 mu/kappa/weights/gradient를 paired 경로에 exact lift한다. V·mean trace·
|
||||
dev strain·cross-point bulk outer product·energy/force/Kt/recovery의 pair를 중간에 F64로
|
||||
접지 않는다. F64와 pair 모두 실제 relative kinematics의 동일 derivative를 사용한다.
|
||||
Ghat의 partition sum만으로 finite rotation의 exact-zero를 보장하지 않으며 기하 완전성과
|
||||
coefficient/graph roundoff를 분리해 검증한다. 새로운 수식 검증은 weighted mean vs center,
|
||||
signed energy/force/tangent sweep, extra-null/conditioning 및 low-only bulk 응답을 포함한다.
|
||||
기존 Newton·형상·시간수렴·수지 기준과 외부 비교 tolerance는 유지한다.
|
||||
|
||||
## 정적 Newton
|
||||
|
||||
Force residual numerator는 free residual infinity norm이다. 기존
|
||||
`nonlinear_static_control.cpp::EvaluateResidualChannel`과 같이 free external infinity norm이
|
||||
exact0이면 denominator=0의 absolute branch를 선택한다. External이 nonzero이면 같은 trial의
|
||||
free internal/external infinity norm maximum을 relative denominator로 사용한다.
|
||||
Translation correction numerator는 fresh free correction infinity norm, scale은 현재 증분의
|
||||
free translation increment infinity norm이다. 기존 force/translation norm·branch 의미를 유지한다.
|
||||
순수 prescribed 변위 문제에서 fint_free 자체를 denominator로 사용해 residual ratio가 항상1이
|
||||
되게 만들지 않는다. Nonfinite/크기 불일치는 branch와 관계없이 실패다.
|
||||
Relative branch limit1e-2, exact-zero scale branch absolute1e-3의 force 또는 length 단위다.
|
||||
Max iteration100/increment가 default다. Moment/rotation dummy channel은 없다.
|
||||
Raw norms·branch·threshold unit·iteration·passed를 기록한다. 수렴은 recovery/geometry까지
|
||||
검증한 candidate에만 적용하며 normalized residual만 수정해 accept하지 않는다.
|
||||
|
||||
## 동적 Newton와 update
|
||||
|
||||
Residual은 physical free endpoint에서 평가한다. Componentwise uncancelled scale
|
||||
Si=|(Ma)i|+|finti|+|Fi|, normalized metric은 max_i(|ri|/Si)다. Si=0은 ri=0을 요구하며
|
||||
그 외의 zero branch는 failure다. Internal cancellation으로 작은 residual이 나온 것만 평가하지 않는다.
|
||||
Weighted residual을 사용할 때도 physical endpoint와 동일한 scale/판정을 함께 기록한다.
|
||||
|
||||
L은 reference nodal bounding-box 대각 길이로 finite positive다. Correction u/L, h·dv/L,
|
||||
h²·da/L, h²·dA/L를 모두 확인한다. Residual/correction limit1e-10, update equality1e-12,
|
||||
max iteration100이 default다. Update scale은 동일 단위의 uncancelled formula term 합이며 scale0은
|
||||
exact-zero다. 빈 free vector는 vacuous convergence이며 required prescribed/recovery validation은 유지한다.
|
||||
|
||||
### 이전 Float64 구현의 내부 정제 기록
|
||||
|
||||
검토된 별도 동적 구현 `f661864`는 위 판정을 유지하며 다음 정제를 사용한다.
|
||||
관련76개 검사와 독립 코드 검토는 통과했지만 두 동적 원본은 세 번째 증분에서 실패했다.
|
||||
이전 구현 `b394ae7`의 원본 실패와 변경 근거는 [lessons](lessons.md)에 기록한다.
|
||||
아래는 이전 경로의 검토 기록이며 새 paired 경로의 실행 지침이 아니다.
|
||||
새 경로는 [precision formulation](precision-formulation.md)의 전체 상태 Newton을 적용하고,
|
||||
모든 원래 free 성분을 푼다. 이전 holding/history/ULP 탐색을 자동으로 이식하지 않는다.
|
||||
|
||||
물리 잔차가 통과한 좌표에서 sub-ULP 갱신 소실이 발생하면, 물리 잔차와 각 좌표의
|
||||
fresh correction4개가 모두 통과한 좌표를 hold한다. 다음 반복부터 원래 effective tangent의
|
||||
나머지 principal block을 푼다.
|
||||
Holding은 새 BC나 equation 제거가 아니다. 다음 반복에서 해당 성분이 원래 물리 기준을
|
||||
실패하면 즉시 다시 solve에 포함한다. 최종 판정은 항상 모든 원래 free 성분을 사용한다.
|
||||
|
||||
정체 판별은 잔차 최대 점수의 증가 대신 이미 실패한 Newton 진입 상태로의 복귀를 사용한다.
|
||||
진입 tuple은 전체3N 변위·reactivation 전 holding mask·incoming correction4개다.
|
||||
Physical FAIL 및 finite correction4개가 각각 PASS인 진입만 저장한다. 실제 다음 Newton의
|
||||
전체 변위·freeze 후 mask가 정확히 같고 fresh correction4개도 각각 finite/PASS이면
|
||||
동등한 실패 상태로 판별한다. Correction 숫자의 차이는 진단으로 남기지만 동일성을 요구하지
|
||||
않는다. 숫자 자체는 정상 Newton의 rates·tangent·rhs에 사용되지 않는다는 검토에 근거한다.
|
||||
고정 증분의 M·하중·이전 accepted state·predictor 및 결정적인 fresh solve/탄성 local
|
||||
recovery가 전제다. History는 증분 시작에만 초기화하고 실제 ULP 이동 후에도 유지한다.
|
||||
Prospective physical PASS, correction FAIL 또는 새로운 전체 변위/mask는 정상 Newton을
|
||||
유지한다. 별도 history cap이나 threshold는 없으며 기존100회 제한으로 기록 수가 제한된다.
|
||||
이는 알려진 실패 상태의 재방문을 감지해 내부 정제를 시도하는 선택이며 전체 알고리즘의
|
||||
수렴 보장은 아니다. 실제로 개선하는 이웃이 없으면 기존 Newton 경로를 유지한다.
|
||||
|
||||
재현이 확인된 경우에만 각 free 좌표의 양·음 방향 한 ULP 이웃을 예측한다.
|
||||
물리 관성력 변화는 `M*delta_u/((1+alpha)*beta*h^2)`, 내력 변화는 `Kt*delta_u`로
|
||||
분리하여 모든 free 성분의 예측 Si를 계산한다. 유한하며 원래 최대 점수를 줄이는 이웃을
|
||||
점수·source DOF 순서로 검사하고 방향 tie는 음 방향을 먼저 둔다. 예측 성공은 수용이 아니다.
|
||||
각 trial은 같은 원래 candidate에서 실제 rates·형상·내력·모든 원래 Si·update·weighted
|
||||
identity를 재계산한다. 앞의 trial이 개선하지 못해도 이후 후보를 검사하며 evaluator 실패는
|
||||
그대로 실패다. 실제 전체 최대 점수의 엄격 감소를 확인한 이동만 local candidate에 반영한다.
|
||||
이동량의 correction4개를 기록하고 다음 정상 반복에서 모든 원래 최종 조건을 다시 검사한다.
|
||||
원래100회 제한을 유지하며 별도 residual floor·clamp·projection을 두지 않는다.
|
||||
|
||||
## Eigen 검증과 분류
|
||||
|
||||
Vector norm은 Euclidean, matrix norm은 Frobenius로 original free pencil을 평가한다.
|
||||
eta_r=||Kphi−lambda Mphi||/((||K||F+|lambda|||M||F)||phi||2),
|
||||
eta_norm=|phiᵀMphi−1|,
|
||||
eta_energy=|phiᵀKphi−lambda phiᵀMphi|/((||K||F+|lambda|||M||F)||phi||2²)다.
|
||||
Zero denominator는 numerator exact0이면0, 아니면 failure다. All returned-pair limits는1e-10.
|
||||
eta_gram은 ||PhiᵀM Phi−I||F, max_eta_orth는 normalized off-diagonal maximum이고 limit1e-10다.
|
||||
|
||||
분류 scale=max_i |Kii|/Mii는 finite positive여야 하며 default normalized near-zero1e-9,
|
||||
인접 cluster gap1e-8이다. 유의한 negative lambda는 실패한다. Near-zero negative는 원 값으로
|
||||
남기고 frequency를 만들지 않는다. 이 분류 scale은 FEAST interval upper bound가 아니다.
|
||||
실제 search/count·SPD/roundoff budget은 backend 연결에서 검증하며 최저 N 보장 근거를 기록한다.
|
||||
|
||||
## 독립 local/temporal 검사의 수치 기준
|
||||
|
||||
Zero 기대량에는 임의 absolute floor 대신 same-unit uncancelled term scale 또는 수식에 따른
|
||||
strain/force/energy scale을 사용한다. Initial invariant budget은 double eps와 연산 길이·geometry
|
||||
condition 추정에 비례하는512 eps scale이다. Scale0은 exact-zero다. Conditioning 때문에 budget이
|
||||
물리 결함을 가릴 정도로 커지면 검사를 통과시키지 않고 모델/검사 유효 범위를 보고한다.
|
||||
|
||||
Directional difference는 signed direction과 h sweep으로 truncation/roundoff 구간을 확인한다.
|
||||
기본 목표는 유의한 nonzero oracle scale에 대해 gradient/tangent 최적 구간 relative1e-7 이하다.
|
||||
한 h에서 가까운 값만 고르지 않고 예상 error curve·analytic affine 사례·zero-state linear limit를
|
||||
함께 확인한다. 필요 budget 수정은 oracle conditioning과 independent review evidence로 설명한다.
|
||||
|
||||
HHT temporal case는 analytic/manufactured u/v/physical a를 각각 평가한다. Smooth forcing 구간의
|
||||
기본 목표는 h/h2/h4에서 observed order1.8 이상이며 noise floor에 가까운 quantity는 다른 유의한
|
||||
case/time/step 범위로 검사한다. Knot를 가로지른 비매끄러운 forcing을 smooth-order 증거로 쓰지 않는다.
|
||||
Spatial refinement·locking은 수렴 경향과 적용 한계의 검사이며 reference tolerance를 재정의하지 않는다.
|
||||
|
||||
## 원본 비교
|
||||
|
||||
Reference-only S/B, row5%, RMS1%, exact-zero는 common policy를 따른다. Identity/finite/completeness
|
||||
오류를 tolerance로 처리하지 않는다. Stress point 좌표는 출력 precision에 따른 auxiliary convention
|
||||
검사이며 ID matching은 element/IntPt다. Input/CSV raw SHA는 현재 working-tree byte 기준이며
|
||||
Git LF blob과 Windows CRLF bytes를 혼동하지 않는다. 실제 읽은 원본 byte identity를 evidence에 남긴다.
|
||||
@@ -1,487 +0,0 @@
|
||||
# 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는 없으나
|
||||
필수 원본/입력 계약 충돌은2026-10-09 사용자 선택 A로 해소했다. 구현 전 문서 blocker0이며
|
||||
실제 solver 수치 PASS가 아니다.
|
||||
|
||||
## 2026-10-09 — 승인된 high+low의 한정된 검토
|
||||
|
||||
`hex8_t5_numerical_spec` reviewer가 [precision formulation](precision-formulation.md)과
|
||||
실제 shared arithmetic·paired kernel·geometry를 독립 검토했다. Canonical zero와 scalar
|
||||
−0 lifting의 두 결함은 수정했고 native fixture로 검증했다. 동일 상대변위 gradient의 chain
|
||||
rule, isotropic material Hessian·geometric 항·Cauchy 복구와 full X+high+low interval은
|
||||
일관된다. 산술의 실제 graph bound와 exact-dyadic 기대값을 별도로 검토했으며 native6/6
|
||||
산술 검사 로그를 확인했다. 해당 범위 bounded PASS이며 새 actionable finding은 없다.
|
||||
일반 correctly-rounded106-bit 보장이나 T6 전체 state/시간수렴/원본 PASS가 아니다.
|
||||
T6 consumer·backend·worker 경계와 rollback은 해당 구현이 고정된 후 별도 검토한다.
|
||||
이후 같은 reviewer가 optional immutable paired-linear Hessian cache를 검토했다.
|
||||
동일 graph·선형 force/energy/recovery·비선형 trial Hessian·기존 F64 Create 지원을 유지하며
|
||||
native44/44 원시 로그를 확인했다. 이 캐시 변경도 bounded PASS다.
|
||||
|
||||
## 2026-10-10 — 전체 동적 상태와 원본 세 증분의 제한적 검토
|
||||
|
||||
동일 독립 reviewer가 고정된 T6 `c49cae4`의 predictor/rates, 기준 M의 전체 pair 작용,
|
||||
ordered force/tangent 누적, full residual·scale, 실제 old residual을 포함한 weighted 식,
|
||||
fresh solve와 실제 상태 변경의 네 보정 채널, backend/worker 이후 실행 전제 검사,
|
||||
accepted low의 복사·검증·rollback을 검토했다. 원시73개 inventory와 owned/shared source,
|
||||
binary·patch의 hash를 확인했고 해당 consumer 범위 bounded PASS, actionable finding0이다.
|
||||
Current32/32 검사와 과거 temporal4/5 실행의 성공 사례를 구분한다.
|
||||
|
||||
이후 변경하지 않은 두 원본의 초기 상태와 증분1–3을 관측했다. 원래 h=0.1,T=10,INC=100,
|
||||
1326 full/1275 free/51 constrained를 유지하고, 네 번째 증분 local 계산 전 test-only 예외로
|
||||
종료했다. 관측 native0·2/2는 이 종료 조건의 성공이며 전체 해석 완료가 아니다.
|
||||
메인은51개 raw artifact의 hash/크기를 확인한 뒤 두 binary64 성분을 exact dyadic Fraction으로
|
||||
읽어 모든 상태의 normalization, 실제 Mff의 full M restriction, 원래 모든 free 성분의
|
||||
물리 r/Si와 exact-zero, HHT 세 update 식과 weighted old-r 항등식을 독립 재계산했다.
|
||||
|
||||
Exact CSR M 작용으로 재계산한 물리 비율의 최댓값은 선형3.12680e-20,
|
||||
비선형1.3043731e-16으로 승인1e-10 이내다. Update·weighted identity는1e-12 이내이며
|
||||
초기1275개 free row는 모두 exact0이다. 실제 PARDISO 보정의 선형6회·비선형9회 기록으로
|
||||
Newton 시작값인 이전 accepted u부터 최종 u를 재구성하고, fresh/observed 네 보정 채널도
|
||||
각각 확인했다. 비선형 최대 보정 비율1.01046e-13은 승인1e-10 이내다.
|
||||
|
||||
Storage graph 대조의 별도 절대 오차 budget과 물리 gate를 혼동하지 않는다. Exact M 작용과
|
||||
저장된 pair Ma의 상대 차이는 최대2.88e-32였다. Strict physical gate에 floor를 추가하거나
|
||||
high만으로 full 상태를 대신하지 않았다. 재현 자료는 로컬
|
||||
`.harness/hex8-evidence/precision/{prefix3-frozen,prefix-independent.json,check_prefix.py}`다.
|
||||
Root 연결 후 관련49/49 검사의 native build/CTest는0/0이다. 이어 두 brick의 LIN/TL 직렬·TBB
|
||||
전체 low 필드 일치와 실제 nonzero low를 확인한 focused1/1 검사도0/0이다.
|
||||
최초 넓은 filter가 전체 원본 smoke를 선택해 중단한 실행은 CTest exit−1로 보존하며
|
||||
수렴 실패 또는 통과로 해석하지 않는다. 전체101 endpoint·공식 HDF5·원본 비교는 아직 없다.
|
||||
동일 독립 reviewer가 메인의 Fraction checker 전체를 정적으로 검토하고 frozen51개 자료에
|
||||
읽기 전용으로 재실행해 결과가 정확히 같음을 확인했다. Oracle 수식 오류는 발견하지 않았고
|
||||
source-prefix bounded PASS를 반환했다. 저장값 비교의2^-90 budget을 모든 범위의 primitive
|
||||
graph/106-bit 정확도 보장으로 확대하지 않는다. 이 검산은 accepted 상태와 실제 반환 du를
|
||||
확인하며 중간 각 solve의 Kt/Keff·RHS 방정식 잔차를 별도로 증명한 것은 아니다.
|
||||
|
||||
## 공식 결과·prepared/CLI 연결의 독립 검토
|
||||
|
||||
작성자 행동본 `9144eef`와 public header 직접 include·Doxygen만 보완한 후속본 `63cfdd0`을
|
||||
독립 reviewer가 검토했다. Typed Solid static/frequency/dynamic outcome, 실제5절차 dispatch,
|
||||
source warning, static 실제2채널·dynamic scalar 로그와 로그 실패 우선순위를 확인했다.
|
||||
HDF5 field·dtype/endian/UTF-8·shape·source identity·units, 전체 pair 검증 이후 RN64 출력,
|
||||
callback 이후 산술 환경, 실제 writer/reader checked-close·readback·atomic replace와 기존
|
||||
final 보존을 확인했다. Rounded 배열에서 물리 gate를 다시 계산하지 않는다.
|
||||
|
||||
요청 mode 뒤의 backend pair에는 차원 상한·정렬·유의 음수 lambda 검증이 빠져 있었다.
|
||||
전체 pair 수를 free 차원 이하로 제한하고 T5와 같은 `lambda/scale>=-1e-9` 정책을 적용했다.
|
||||
실제3-free/request1 API 결과에서 요청 밖 row를 음수·역순·차원 초과로 각각 변형해
|
||||
서로 다른 거부 원인과 기존 final byte 보존을 확인했다. Raw near-zero 음수를0으로
|
||||
바꾸거나 그 frequency를 생성하지 않는다. 이 finding은 해소됐으며 잔여 actionable finding0이다.
|
||||
|
||||
행동본의 실제 native build/CTest는0/0, 관련101/101 PASS·112.60s다. Header-only 후속본은
|
||||
전체 configured 대상 recompile0 및5절차 API/schema1/1 PASS·9.88s이며101개를 후속본에서
|
||||
다시 실행한 것으로 보고하지 않는다. 메인 `e2c3c5b`는 같은13개 owned blob과4개 CMake
|
||||
등록을 연결했고 관련17/17을 native build/CTest0/0·72.95s로 확인했다.
|
||||
원시114개 SHA/크기와 source13개 committed blob/snapshot 일치를 reviewer와 메인이 각각
|
||||
확인했다. 로컬 자료는 `.harness/hex8-evidence/{t7-output-frozen,t7-integrated}/`다.
|
||||
이 판정은 T7의 bounded PASS다. 전체780개 CTest·공식 원본 CLI 수치 비교·기능 완료와
|
||||
release PASS를 뜻하지 않는다.
|
||||
|
||||
## HEX8-NR-001 — 영 회전 경계와 필수 원본 충돌
|
||||
|
||||
검토 당시 PRD008/I/O는 BC/CLOAD DOF4–6을 값0이어도 거부했다. 그러나 모든 필수 INP에
|
||||
`Set-1, 4, 4`, `Set-1, 5, 5`, `Set-1, 6, 6`의 생략된 영 지정값이 있다.
|
||||
Static2/frequency는794–796행, dynamic2는796–798행이다. Read-only 원본을 그대로
|
||||
사용하면5개 모두 input failure이므로 end-to-end integration/필수 비교를 진행할 수 없다.
|
||||
|
||||
원본의 영 회전 BC만 warning/no-op으로 수용하는 입력 호환 예외와, strict 거부를 유지하고
|
||||
사용자가 원본을 수정하는 두 대안을 제시했다. 2026-10-09 사용자는 A를 승인했다.
|
||||
PRD008/I/O를 zero rotational displacement BC만 source warning/no-op으로 수용하는 한정된
|
||||
호환 예외로 수정했다. 비영 회전 BC·모든 회전 CLOAD는 계속 거부하고 원본을 보존한다.
|
||||
따라서 문서 blocker는 해소됐으며 구현에서 경고·실제3N·거부 경계를 테스트해야 한다.
|
||||
동일 독립 reviewer가 승인된 수정 부분만 bounded recheck했고 `blockers: []`를 반환했다.
|
||||
정적 읽기 확인 exit0이며 수식 재검토·code 변경·solver 실행은 하지 않았다.
|
||||
|
||||
## 독립 검토에서 정리한 내용
|
||||
|
||||
초기 static convergence 문서의 max(internal_free,external_free) branch는 prescribed-only에서
|
||||
residual=internal_free라 ratio1을 만들어 수렴을 막을 수 있었다. Draft를 기존
|
||||
`EvaluateResidualChannel`의 external_free exact0 absolute branch로 수정했다. Reviewer는 수정 후
|
||||
기존 source219–246과의 일치를 확인했다. 승인 physics/schema/external acceptance는 바꾸지 않았다.
|
||||
|
||||
Reviewer의 독립 표준-library 산술 확인은 exit0이며 TL tangent relative 최적 오차 약4.59e-11,
|
||||
Bernstein27 재구성 최대오차7.77e-16, mass Walsh 최소 모드값.03703703703703707≈1/27,
|
||||
scalar HHT u/v/physical a 관측 차수 약2.00/1.98–1.99/2.00이었다. 초기 NumPy 계산은 모듈
|
||||
부재로 exit1이었고 표준-library 계산으로 대체했다. 문서/코드/원본 읽기 명령은 exit0,
|
||||
glob discovery 검색 하나는 exit1이었다. File edit/build/test/external solver 실행은 하지 않았다.
|
||||
이 숫자는 문서 식의 독립 산술 확인이며 production kernel/backend/mesh 검증 evidence가 아니다.
|
||||
|
||||
TL energy/Hessian·engineering/tensor shear, degree(2,2,2) Jacobian 인증, mass SPD와 real/FP bound
|
||||
구분, original generalized K/M·최저 N, HHT a/A·weighted/endpoint tangent·초기 force/physical
|
||||
reaction, typed/HDF5·failed accepted 보존에는 문서 수식의 추가 blocker가 없었다.
|
||||
|
||||
검토해야 할 주요 위험은 다음과 같다.
|
||||
|
||||
- J0의 column/gradient 변환과 point3/4·7/8 순서; det J polynomial Bernstein 변환과 outward
|
||||
interval/subdivision이 whole-cell 양성을 보증하는지, uncertain/resource failure가 보수적인지.
|
||||
- TL energy variation에서 material/geometric tangent의 index와 work conjugacy,
|
||||
rigid rotation/strain objectivity·zero-state 선형극한과 unaveraged Cauchy/Green recovery.
|
||||
- 8점 consistent M의 SPD·총질량·reference 상수성·local spectral bound와 실제 sparse pencil
|
||||
roundoff/control의 구분; Shell null/nodal whitening 미사용 및 lowest-N count 검증.
|
||||
- HHT auxiliary/physical acceleration·weighted/endpoint residual의 동등 조건·tangent scale,
|
||||
initialization/amplitude endpoints·physical reaction·u/v/a 시간수렴과 numerical dissipation.
|
||||
- Static/Newton의 approved defaults·force/length 단위·zero-scale branch, internal oracle budget과
|
||||
외부 reference acceptance 분리, geometry/finite/recovery 이후 atomic state/output commit.
|
||||
- Original required U/RF/Gauss S·dynamic101 frame projection·frequency 미제공 상태를 정확히
|
||||
구분하는지. Coordinate sanity 확인을 stress/reference correctness로 승격하지 않는지.
|
||||
|
||||
이 risk는 이후 실제 interval primitive/subdivision·brick/warped oracle·tangent step sweep·
|
||||
generalized runtime/count·prescribed-only state·HHT mesh 시간수렴·formal HDF5/reference 사전검사로
|
||||
검증해야 한다. 아직 실행하지 않은 solver build/test/reference를 PASS로 적지 않는다.
|
||||
|
||||
## T8 비교기 독립 검토와 실제 원본 불일치
|
||||
|
||||
Frozen author `0b93c0c59cf64db44003ebe5217a4efb8307a8ba`는 bounded PASS,
|
||||
추가 actionable code finding0이다. Root 연결은 `317fe5c`다. Reviewer는 별도로 네 owned
|
||||
LF commit blob/current/snapshot과 manifest·65 raw artifact의 hash/size, 양 checkout의
|
||||
원본13 SHA를 확인했다. Actual stdout/JUnit에서124/124(Hex8 83·기존 HHT 41),
|
||||
failure/error/skip0·native0·81.41s를 확인했다. 일부 초기 로그의 count가 원시 stdout으로
|
||||
증명되지 않았던 한계는 최종 raw closure로 해결했으며 과거 native 기록은 유지한다.
|
||||
|
||||
실제 발견하고 behavior RED 후 수정한 사항은 alternate reference 선택 시 기본 원본을
|
||||
report로 덮어쓸 수 있던 보호 누락, scalar modal pair의 rank 검사 전 IndexError,
|
||||
`..` lexical path가 같은 scratch의 C++ source identity와 달라지던 문제다.
|
||||
Default/selected reference·input/result/record와 symlink/hardlink alias 보호, Dataset/1D
|
||||
검사, C++와 같은 lexical 절대경로 정규화와 targeted5 regressions를 확인했다.
|
||||
|
||||
두 정적 공식 HDF5는 source/schema/model/point/frame/finite precheck PASS·CLI native0이나
|
||||
세 수치 family FAIL이다. Reviewer의 독립 standard full8 조립·회복·반력/에너지와 정식
|
||||
비교 metric이 일치했다. Frequency 공식 readback의 precheck와 missing Value NOT RUN을
|
||||
분리한다. Whole configured Python은 기존 collection5 오류로 native2·실행0개이며 PASS가 아니다.
|
||||
실제 수치는 [verification](verification.md), 물리 모델 차이는
|
||||
[변경 근거](reference-discrepancy-proposal.md)에 있다. 그 변경안의 energy 미분과 선형
|
||||
후보 배열의 independent K/S/energy·U/RF/S 수치 관측도 검토했지만 production 채택이나
|
||||
비선형·동해석 일치 검증은 아니다. 전체 CTest와 남은 동적 원본은 이 bounded 판정 밖이다.
|
||||
|
||||
Root 보존 자료는 로컬 `.harness/hex8-evidence/t8-comparator-frozen/`, 독립 full8 원시
|
||||
재현은 `t8-independent-full8-audit/`, 후보 계산/수식은 `t8-reference-law-investigation/`다.
|
||||
|
||||
## 2026-10-10 체적 평균 energy 변경 전 실행 종료와 수식 검토
|
||||
|
||||
이후 두 frozen API 원본은 unchanged101 endpoint를 자연 종료(native0)했고, 다섯 공식
|
||||
CLI도 native0으로 종료했다. 두 동적 공식 HDF5의101-frame precheck는 PASS이나 외부 U는
|
||||
각각88/101 family FAIL이다. 전체780 CTest는 native8:777 PASS·2 FAIL·1 SKIP이며,
|
||||
추가163개는 모두 PASS이고 기존 예외의 status·metric body가 동일하다. 상세 raw 경로와
|
||||
실패 수치는 [verification](verification.md)에 있다. 이 종료 결과는 이전 pointwise 식의
|
||||
evidence이며 승인된 변경본의 numerical PASS가 아니다.
|
||||
|
||||
사용자 B 승인 후 reference-volume 평균 Green trace energy의 독립 정적 수학 검토에서
|
||||
내력·전체 Hessian, cross-GP `kappa*b*b^T/V` 및 `S*:delta²E` 기하항의 일관성을 확인했다.
|
||||
직접 F64 mu/kappa를 검증하고 pair로 lift하며, relative kinematics와 같은 Ghat derivative를
|
||||
쓰는 선택을 확인했다. 이전 affine 응답과의 수학적 일치는 동일 mu/kappa/Ghat 전제다.
|
||||
실제 rounded cache의 affine completeness와 partition sum을 혼동하지 않는다.
|
||||
Nonuniform trace·warped weighted mean·node0 방향 미분·LINE/TL zero Hessian·low-only bulk
|
||||
응답·material 경계·새 spatial/temporal evidence는 변경 구현에서 검증해야 한다.
|
||||
|
||||
## 체적 평균 구현의 독립 검토
|
||||
|
||||
Frozen `b2abd739`의8개 변경 source/current snapshot/commit blob과141개 종료된 raw
|
||||
artifact의 hash·size를 독립 대조했다. 두 pass의 weighted trace, node0 상대변위와
|
||||
동일 Ghat derivative, cross-GP bulk Hessian, `S*` 기하항 및 actual strain의 Cauchy
|
||||
복구가 승인된 energy와 일치한다. Paired 계산은 같은 연산에서 low 성분을 보존하고
|
||||
직접 F64 mu/kappa의 동일 lift를 사용한다. LINE zero cache도 같은 Hessian이다.
|
||||
|
||||
이전 식에서 실패하는 corrected7-oracle RED와 변경본150/150, 시간수렴4물리 사례,
|
||||
최종 실제 재컴파일3/3의 native 기록 및 소스 전후 SHA를 확인했다. 최소 u/v/physical a
|
||||
관측 차수1.98022가 기존 기준1.8을 충족한다. 판정은 이 구현·내부 evidence에 한정한
|
||||
bounded PASS, 잔여 actionable finding0이다. Root 연결 `18b36c1`의 실제 재컴파일
|
||||
관련65/65도 native0이다. 전체 CTest·원본 비교의 실제 종료 결과는 [verification](verification.md)을 따른다.
|
||||
|
||||
공간수렴은 두 축을 실제로 세분화한 지정 굽힘장의 energy다. 고정 두께/폭2요소의
|
||||
평형 cantilever 길이 refinement는 tip 추세와 locking 관찰이며 평형해 공간차수를
|
||||
입증하지 않는다. Brick rank18과 검증된 warped cell은 모든 admissible warped cell의
|
||||
영공간 보증이 아니다. 원본 modal Value 부재나 기존 전체 회귀 예외는 이 bounded
|
||||
검토로 없어지지 않는다. 원시 자료는 작성자 worktree의
|
||||
`.harness/hex8-evidence/mean-volume/frozen-b2abd73/`와 관련 종료 evidence에 있다.
|
||||
|
||||
새로 종료한 실제 정적·고유치 실행의 별도 evidence audit에서도 finding0이다. Imported
|
||||
8개 source가 frozen commit과 같고 root kernel object가 실제 재컴파일됐으며 frozen/current
|
||||
실행 파일 SHA도 동일하다. 원본13개 및66개 소비 artifact의 전후 SHA를 확인했다.
|
||||
HDF 실제 배열과 원본 CSV로 정적 보고서의 모든 행·near-zero/relative 분기·오차·RMS를
|
||||
다시 계산했으며 U1326/RF51/S14400의 실패0과 양쪽 비교 native0을 확인했다. 전체
|
||||
RF442행의 identity·finite·free RF exact0도 대조했다. Frequency missing Value의
|
||||
native2·NOT RUN, root65 검사 native0, 새 전체 Python collection5/native2를 정확히
|
||||
구분했다. 자료는 `.harness/hex8-evidence/mean-volume/final-evidence-audit-static-frequency/`다.
|
||||
이 evidence audit은 당시 미종료였던 동적·전체787 검사의 판정이 아니며, 이후 종료 감사와 구분한다.
|
||||
|
||||
이후 자연 종료한 새 선형 동적 원본도 별도 read-only evidence audit에서 bounded PASS,
|
||||
finding0이다. CLI/comparator native0, HDF SHA와 원본13 SHA, frozen executable 및31개
|
||||
소비 artifact의 전후 SHA를 확인했다. 원본44642개 node row, HDF101×442×3 및 비교
|
||||
보고서133926개 scalar가 정확히 대응하며 누락·중복·비유한 값은0이다. Increment0–100,
|
||||
CSV decimal time와 HDF `double(n)*h`를 구분해 확인하고 모든 행의 오차·분기·기준·RMS를
|
||||
재계산했다. 초기 exact-zero family의 relative RMS null은 실패나 누락이 아니다.
|
||||
101개 family PASS·실패 행0과 [verification](verification.md)의 수치가 일치한다.
|
||||
자료는 `.harness/hex8-evidence/mean-volume/final-evidence-audit-dynlinear/`다.
|
||||
비선형 동적·전체787 및 동적 물리 수지는 이 수치 비교 감사 밖이다.
|
||||
|
||||
비선형 동적 원본의 종료 evidence도 별도 read-only audit에서 bounded PASS,
|
||||
finding0이다. 45개 소비 artifact의 전후 SHA와 원본13개 보존, CLI/comparator native0을
|
||||
확인했다. 모든101 frame·133926 scalar의 시간·identity·finite·오차 분기·기준·RMS를
|
||||
독립 재계산했으며 누락·중복·실패 행은0이다. 최대 상대 RMS는
|
||||
0.003133373067174733, 최대 절대 오차는1.3397499223151595e-5이며 초기 exact-zero의
|
||||
relative RMS null도 확인했다. 다섯 원본 CLI와 queue wrapper의 native0 및 source 전후
|
||||
동일성을 확인했다. 자료는
|
||||
`.harness/hex8-evidence/mean-volume/final-evidence-audit-dynnonlinear/`다.
|
||||
전체787의 종료 판정과 비선형 동적 물리 수지는 이 감사에 포함되지 않는다.
|
||||
|
||||
## 변경본 전체 회귀 종료의 독립 감사
|
||||
|
||||
실제 unfiltered 전체787 CTest의 종료 raw/native·discovery 및 baseline617개를 별도
|
||||
read-only 감사했다. configure/build/discovery는 native0, CTest는 native8이며
|
||||
784 PASS·기존 Shell FAIL2·C04a SKIP1이다. 이름·기존 상대순서·각 discovery와 실행
|
||||
ordinal·status를 대조했고 추가170개 모두 PASS·뜻밖 예외0을 확인했다. 두 실패의
|
||||
전체 출력은 elapsed-ms 표기만 제외해 정확히 같아 실패 내용과 metric도 동일하다.
|
||||
SKIP 상세 출력은 baseline에 없어 NOT VERIFIED다. 소비22개 artifact SHA를 전후
|
||||
대조했고 실제 세 테스트 실행 파일의 중간 관측·종료 SHA도 동일하다. 이를 실행 전
|
||||
binary hash라고 표현하지 않는다. 감사 native0·finding0, bounded evidence PASS다.
|
||||
|
||||
원시 자료는 `.harness/hex8-evidence/mean-volume/final-evidence-audit-full/`에 있다.
|
||||
판정은 종료 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 수정 없이 읽기 전용 감사와 보고서 정적 검토만 수행했다.
|
||||
@@ -1,122 +0,0 @@
|
||||
# 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,197 +0,0 @@
|
||||
# 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는 없지만 원본 비교·전체 기능 완료의
|
||||
판정은 아니다. 현재 checklist는 PRD에만 둔다.
|
||||
|
||||
## 확인한 결과와 계산
|
||||
|
||||
| 범위 | 독립 근거·결과 |
|
||||
| --- | --- |
|
||||
| 강체 병진·축·scale | 단위 brick의 밀도2에서 총질량2, mass row sum0.25다. 절점당 힘0.25는 a=1을 준다. 세 축×세 하중 크기의 실제 모든 endpoint 검사 PASS |
|
||||
| 관성 반력 | 독립 consistent M의 constrained coupling과 Q=Ma+f−F를 대조한다. All-constrained Fy=7에서 Qy=−7, a=0, W=0 검사 PASS |
|
||||
| 독립 oscillator | m=2/27, Kii=8/3, Kij=0.8의 해석적 모드 분해로 u/v/physical a를 대조한다. SDOF와 MDOF의 최소 관측 차수는1.98637·1.96518로 기준1.8 이상 |
|
||||
| 두 brick의 LIN/TL | 모든 u/v/physical a의 관측 차수는 대략2다. 제조 TL의 최종 회전49.7727°, Green principal strain0.00697372, detF1.02099395는 유한회전·작은 strain 범위다 |
|
||||
| 운동량·모멘트 | 독립 brick 질량 적분으로 T/p/pdot/L/Ldot와 symmetric M의 Σv×Mv=0을 검사한다. 자유 잔차를 포함한 수지와 LIN/TL의 서로 다른 reference/current arm 의미를 확인 |
|
||||
| 에너지·한계 | alpha0의 trapezoid work와 무하중 tail 에너지 보존, 무하중 exact rest 검사 PASS. Full-integration 굽힘 locking의 큰 coarse-mesh 오차는 적용 한계로 유지 |
|
||||
|
||||
제조하중은 production K/M/quadrature를 호출하지 않는 polynomial brick 적분이다.
|
||||
각 refinement의 HHT endpoint에 동일한 매끄러운 함수 값을 공급한 시간수렴 증거이며,
|
||||
일반 비매끄러운 tabular amplitude의 수렴 보장은 아니다. 위 TL strain/stress/energy의
|
||||
해석적 sanity 계산 자체를 실제 point 출력의 수치 비교 PASS라고 표현하지 않는다.
|
||||
|
||||
## Evidence의 시점과 제한
|
||||
|
||||
Frozen T6 source는 `c49cae499d8b965fdaa74bca9792f65f18843ec7`, shared kernel은
|
||||
`e878379`다. Current affected native build/CTest exit0/0,32/32 PASS다. 처음 uncached
|
||||
temporal 실행은4/5 PASS·CTest exit8이며 실패는 이전 principal trace assertion이었다.
|
||||
그 실행의 실제 LIN/TL·독립 SDOF/MDOF 시간수렴 양성 결과를 current32개에서 다시 실행한
|
||||
것으로 표현하지 않는다. Current의 이전 두 실패는 Float64 shadow와 initial mass record 수의
|
||||
진단 assertion을 수정한 것이며 physics acceptance 완화가 아님을 frozen diff로 확인했다.
|
||||
|
||||
원시 로그·73개 inventory·source/binary hash는 로컬
|
||||
`.harness/hex8-evidence/precision/t6-frozen-c49cae4/`에 보존한다. 메인이73개 raw와
|
||||
owned/shared source·원본 두 INP·binary·patch hash를 대조했다. Reviewer는 관련22개 raw와
|
||||
7개 owned source·patch를 별도로 대조했다.
|
||||
|
||||
첫32개 검토 이후 원본 prefix의 전체 pair를 아래와 같이 별도 재계산했다. 전체101 endpoint·
|
||||
필수 reference 비교는 아직 없다. Rounded observable 불변량 검사와 전체 pair의 production
|
||||
gate 통과를 구분한다. Alpha−0.05의 장시간 에너지, warped dynamic mesh,
|
||||
near-incompressibility 및 큰 strain StVK 적용은 이번 evidence로 보증하지 않는다.
|
||||
|
||||
## 원본 초기 상태와 세 증분의 독립 물리 계산
|
||||
|
||||
변경하지 않은 LIN/TL 두 원본의 초기 상태와 증분1–3에 대해 reviewer가 모든 high+low를
|
||||
exact Fraction으로 읽었다. 기준 CSR M·reference X·실제 full force를 사용해 T/W/balance,
|
||||
p/pdot/L/Ldot, reference/current/free-residual moments와 global force/moment 수지를
|
||||
총240개 대조했다. 실제 pair Add의 discarded-tail bound를 전파한 별도 절대 graph budget
|
||||
내였으며 재생 graph의 high/low도240/240 일치했다. 구속 u/v/a/A와 support work는 exact0다.
|
||||
Source442절점·300연결·51구속·하중·원래 h/T/INC와 test-only 관측 종료 조건도 대조했다.
|
||||
선형 U와 독립0.5uᵀf의 최대 절대차는1.30e-29였다.
|
||||
|
||||
Captured F64 M의 ordered coefficient에는7752개의 비대칭 entry가 있고
|
||||
최대|Mij−Mji|=2.84217e-14다. 이에 따른 exact Σv×Mv의 작은 비영 값은512eps same-unit
|
||||
coefficient-roundoff budget 이내이며 이 비대칭으로 정확히 설명된다. Pair 산술 오류와
|
||||
계수 오차를 구분하고 M을 대칭화하거나 모멘트를0으로 보정하지 않는다. Ldot=x×Ma는
|
||||
같은 endpoint의 계약 observable로 확인했다. LIN의 current internal moment는 O(u²)로
|
||||
비영이며 TL의 reference moment도 별도0 기대량이 아니다.
|
||||
|
||||
Alpha−0.05의 frame별 energy balance는 관측량이지 exact conservation gate가 아니다.
|
||||
Prefix에서 나타난 balance와 진동에 따른 trapezoid work 감소를 그대로 보존한다.
|
||||
이 범위에서 물리 blocker는 없다. 재현 자료는 로컬
|
||||
`.harness/hex8-evidence/precision/physics-prefix-review/`와 `prefix3-frozen/`다.
|
||||
직접 읽어 고정한 기준 Ga(a>0)·wg·Lamé 계수와 전체 pair 상대변위로 LIN/StVK energy
|
||||
polynomial도 독립 계산했다. 양쪽4개 frame의 U는 모두 실제 graph bound 이내이고
|
||||
high/low 재생값도 일치했다. LIN/TL 최대 절대차는1.19926e-29/2.96343e-30,
|
||||
최대 graph bound는1.98236e-28/2.04184e-28이다. 모든 적분점의 detF는 대략
|
||||
[0.999980558,1.000019725], strain 최대 성분은 약2.4105e-5로 이번 작은 변형률 범위에 있다.
|
||||
독립 polynomial oracle에서 구한 strain/Cauchy stress의 RN64는230400개 공개 성분과
|
||||
일치했다. Point tensor low는 capture하지 않았으므로 full-pair tensor 저장 검증은 아니다.
|
||||
이 검사는 적분점의 확인이며 전체 cell 양성 인증의 독립 재검증을 대신하지 않는다.
|
||||
Reviewer의 최종 판정은 frame0–3에 한정한 물리 PASS, blocker0이다. 별도 cache raw42개의
|
||||
hash와 크기는 메인이 대조하고 `reference-cache-frozen/`에 보존했다.
|
||||
|
||||
## 실제 선형 정적 원본의 독립 평형과 구성식 대조
|
||||
|
||||
공식 CLI 결과 `e2c3c5b`를 기존 원본 형상·BC·하중으로 별도 standard full8 조립/solve했다.
|
||||
Native 변위와 독립 해의 상대 최대차1.75e-11, 자유 잔차/하중5.15e-12,
|
||||
구속 RF 최대차4.07e-10 force, stress 최대차4.01e-7 stress-unit,
|
||||
strain 최대차1.51e-18이다. Energy178.762694318679와0.5F·u178.762694317263은
|
||||
상대차 약7.92e-12다. Force·reference-arm moment와 free RF exact0도 별도로 관찰했다.
|
||||
이는 정적 해의 독립 물리 진단이며512eps 동적 invariant gate 통과를 새로 주장하는 것이 아니다.
|
||||
|
||||
원본 CSV 변위를 같은 승인된 full8 K에 대입한 자유 잔차 최대값은87147.6514 force,
|
||||
0.5u·Ku와0.5F·u의 상대차는 약4.72%다. 원본이 다른 체적 모델을 쓰는 경우 이 대입은
|
||||
그 모델의 평형 검사가 아니므로 원본 오류로 단정하지 않는다. 요소 평균 trace를 사용한
|
||||
별도 선형 energy 후보는 U/RF/S와 매우 일치했다. 원본·현재 구현·후보 계산의 scope를
|
||||
[변경안](reference-discrepancy-proposal.md)에서 분리한다. 이 조사로 현재 필수 비교 FAIL,
|
||||
후보 비선형·고유치·동해석 미검증이나 원본 Value 부재를 없애지 않는다.
|
||||
|
||||
원시 재현 script/stdout/JSON·native exit와7파일 전후 SHA는 로컬
|
||||
`.harness/hex8-evidence/t8-independent-full8-audit/`에 있다. Solver 재실행 없이 기존
|
||||
결과를 재분석했으며 production/reference를 수정하지 않았다.
|
||||
|
||||
## 2026-10-10 변경 전 실행 종료와 후속 물리 검증
|
||||
|
||||
이후 pointwise 구현의 두 API 원본과 두 공식 동적 CLI는101 endpoint/frame을 자연 종료했다.
|
||||
이는 앞선 frame0–3 독립 물리 검토의 범위를101개로 자동 확대하지 않는다. 공식 원본 U
|
||||
비교는 두 경우 모두88/101 family FAIL이며, 실행·정밀도 gate·외부 일치를 구분한다.
|
||||
완료된 전체780 CTest에서도 기존 Shell 시간수렴 실패2개와 SKIP1개가 그대로다.
|
||||
상세 종료 결과는 [verification](verification.md)에 있다.
|
||||
|
||||
사용자 B가 승인한 체적 평균 energy는 다섯 절차에 적용하며 변경본의 평형·수지·시간 및
|
||||
공간수렴을 다시 확인한다. 두께를 한 요소로 고정한 bending refinement에서는 평균 trace
|
||||
항 때문에 이전 pointwise continuum에 대한 bias가 남을 수 있다. 그 discrete limit 관찰을
|
||||
실제 두께/길이 공간수렴으로 보고하거나 기준을 새 limit로 바꿔 continuum PASS라 하지 않는다.
|
||||
선형 원본에 맞춘 별도 후보와 수식 검토는 변경본 물리 검증을 대신하지 않는다.
|
||||
|
||||
## 체적 평균 변경본의 실제 정적 원본 물리 대조
|
||||
|
||||
Root `18b36c1`의 새 공식 HDF5를 별도 산술로 재구성했다. Solver 재실행·추가 solve
|
||||
없이 원본 geometry·하중·BC와8개 reference 가중치에서 동일 mean energy의 구성식,
|
||||
element force·moment 및 전역 full residual을 계산했다. 두 원본 비교의 전 row PASS는
|
||||
[verification](verification.md)에 있으며 여기의 물리 판정 범위와 구분한다.
|
||||
|
||||
선형300개 요소의 실제 strain·stress 최대차는1.23937e-18/1.91798e-7이고 구속 RF
|
||||
최대차1.746e-10 force다. Native energy186.35946178395656과 독립 energy의 상대차는
|
||||
6.10e-16, `0.5F·u`와의 상대차는8.408e-13이다. 자유 잔차 최대2.604e-7 force를
|
||||
포함한 전역 ledger의 force/reference moment 잔여는7.493e-11/1.352e-10 이하다.
|
||||
Local force/moment의 uncancelled 비율은2.45e-16/4.24e-16 이하다. 실제 trace의
|
||||
요소 내 분포를 보존하면서 동일 요소 hydro stress는 평균 trace 식과 일치한다.
|
||||
|
||||
비선형10개 frame의300개 요소를 모두 재구성했다. Actual Green·Cauchy 최대차는
|
||||
9.17972e-20/1.33878e-8 stress-unit이고 native/독립 energy의 상대차는9.42e-16
|
||||
이하다. 최종 native energy186.3185317087937이다. PK2 hydro 항은 요소별 평균이며
|
||||
actual Cauchy hydro는 F/J mapping 때문에 요소 내 변한다. Actual Green을 평균
|
||||
strain으로 치환하지 않았다. Local force/current moment 비율은2.28e-16/6.75e-16
|
||||
이하이고 전역 free residual을 포함한 ledger 잔여는3.12724e-10 force/
|
||||
6.46502e-10 force·length 이하다.
|
||||
|
||||
비선형 최종 free residual 최대35.3467066284 force는0이 아니다. 독립 재구성과의
|
||||
최대차는2.24691e-9 force다. 승인된 static 로그의 최종 비율은
|
||||
35.3467/100017=.000353407이고10개 frame 모두 기존.01 기준 이하(최대.00353023)다.
|
||||
총 F+RF 및 current moment의 비영 결함은 이 free residual로 설명된다. 따라서 판정은
|
||||
기존 static acceptance 내 구성식·평형 ledger의 bounded PASS이며 exact equilibrium
|
||||
통과가 아니다. 비선형의 `0.5F·u`는 진단값이며 energy identity로 사용하지 않는다.
|
||||
|
||||
Source/reference/input-copy/HDF/native/comparison 로그의 전후 SHA와 independent
|
||||
script·native0·JSON·raw 배열은 로컬 `.harness/hex8-evidence/mean-volume/`의
|
||||
`physics-linear/`, `physics-nonlinear/`에 보존했다. 작은 사례의 내부 시간수렴·수지
|
||||
검토와 실제 두 정적 원본의 판정은 새 전체 동적 이력이나 modal 외부 비교를 대신하지 않는다.
|
||||
|
||||
## 체적 평균 변경본의 실제 선형 동적101 endpoint 대조
|
||||
|
||||
새 LINE dynamic HDF5의101개 endpoint를 독립 재구성했다. Source/time/amplitude·
|
||||
model/schema/point identity 및 initial exact0·구속 U/V/a/A와 free RF exact0을 확인했다.
|
||||
Actual stress/infinitesimal strain 최대차는4.44961e-7/2.30790e-18이다. 별도의 상대변위 H
|
||||
표현에서도 회복값이 일치한다. 기준 geometry의 consistent M을 모든 frame에 고정 사용하고
|
||||
별도8점 직접 적분의 kinetic energy·linear/current angular momentum과도 대조했다.
|
||||
Native strain/kinetic energy 최대차1.13687e-13/2.13163e-14 force·length,
|
||||
endpoint work와 balance error 최대차는 각각2.27374e-13이다.
|
||||
|
||||
공개 α=-.05,β=.275625,γ=.55의 RN64 상태 갱신 결함 비율은2.060e-16 이하이고 이전
|
||||
physical force를 포함한 weighted identity도 대조했다. Stored free residual 최대
|
||||
6.20169e-19와 RN64 state로 재구성한 최대1.10905e-7 force는 다른 관측이다. 후자의
|
||||
cancellation/계수 반올림을 내부 high+low gate 실패나 통과의 근거로 사용하지 않는다.
|
||||
Physical RF는 `Ma+f-F`의 constrained projection과 일치한다. 전체 force ledger 차이는
|
||||
5.76479e-10 force 이하다. 선형 K0의 현재 arm 모멘트는 일반적으로 `Σu×f` 때문에
|
||||
비영이며 최대287.099763335 force·length다. 이를 포함한 moment ledger 차이는
|
||||
3.42095e-9 force·length 이하다.
|
||||
|
||||
최종 U178.92766323729418,T.27177166481189713,W257.34360955254886에서
|
||||
`B=T+U-T0-U0-W=-78.14417465044276` force·length다. 첫 증분 B는+1.8941761591671697이다.
|
||||
이 α와 endpoint trapezoid work에서 exact/단조 energy conservation을 요구하거나
|
||||
관측값을 보정하지 않는다. 판정은 실제101 endpoint의 구성식·질량·상태 갱신·물리
|
||||
observable 계약에 한정한 bounded PASS다. 이 원본에는 외부 U CSV만 있으므로 stress/RF
|
||||
재구성을 외부 stress/RF 비교 통과로 보고하지 않는다. 임의 step의 시간 정확성·비선형
|
||||
원본·전체 기능은 별도 범위다. Solver 재실행 없이 원본/copy/HDF/log의 SHA를 보존했고
|
||||
자료는 `.harness/hex8-evidence/mean-volume/physics-dynlinear/`에 있다.
|
||||
|
||||
## 체적 평균 변경본의 실제 비선형 동적101 endpoint 대조
|
||||
|
||||
새 TL dynamic의 모든101 endpoint·300개 요소를 독립 계산한 결과도 bounded physics
|
||||
PASS다. Actual Green·mean-law PK2/P/Cauchy·내력·에너지와 고정 reference M의 kinetic
|
||||
energy·운동량·현재 angular momentum·RF·잔차·HHT 갱신을 대조했다. 응력/actual Green
|
||||
최대차는2.08300e-7 force/length² 및8.46980e-19, strain/kinetic energy 최대차는
|
||||
1.13687e-13/1.42109e-14 force·length다. 별도8점 질량 직접 적분도 일치했다.
|
||||
입력·복사본·HDF·native/comparison/log/UCSV의 전후 SHA를 보존했고 두 독립 계산은
|
||||
native0이다. 자료는 `.harness/hex8-evidence/mean-volume/physics-dynnonlinear/`다.
|
||||
|
||||
Actual Green trace의 요소 내 spread 최대1.84387e-5를 보존했다. PK2 isotropic part의
|
||||
point spread6.98492e-10과 Cauchy hydro spread53.12235는 F/J mapping으로 구별된다.
|
||||
관측 Gauss-point detF는.9999790347721854…1.0000212541790632이며 whole-cell
|
||||
certificate를 다시 증명한 것은 아니다. Stored free residual 최대4.42274e-12와 RN64
|
||||
재구성 최대9.96777e-8 force를 구분한다. 반올림 HDF로 strict paired gate의 통과나
|
||||
실패를 판정하지 않는다. Physical RF 최대차3.49246e-10 force, 전체 force/current
|
||||
moment ledger 차이8.18364e-10 force/2.47995e-9 force·length다. TL 내부 current moment
|
||||
최대2.60364e-9는 기준 arm과 `Σu×f`의 상쇄를 확인하며 LINE의 현재 모멘트와 구별된다.
|
||||
|
||||
최종 U178.96011630302056,T.2729454262030376,W257.36751015513966에서
|
||||
B=-78.13444842591608 force·length이며 첫 증분 B는+1.8903734544186321이다.
|
||||
Work/balance 최대차는1.70530e-13/2.13163e-13이다. Exact conservation·매 frame 단조
|
||||
감소·비선형 `U=.5Fᵀu`는 주장하지 않는다. 이 판정은 실제 원본의 구성식·질량·상태
|
||||
갱신·물리 observable에 한정한다. 외부 RF/S 비교, 임의 step 시간차수, arbitrary warped
|
||||
cell, 큰 변형 안정성 및 전체 기능 PASS는 범위 밖이다.
|
||||
@@ -1,59 +0,0 @@
|
||||
# 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)의 변경 근거이며, 구현 완료를 뜻하지 않는다.
|
||||
실패 근거와 검증 범위는 [lessons](lessons.md)에 기록한다.
|
||||
|
||||
## 변경이 필요한 이유
|
||||
|
||||
현재 production은 단일 Float64 물리 상태를 사용한다. 두 동적 원본은 세 번째 증분의
|
||||
100회 제한에서 componentwise physical residual 기준을 만족하지 못했다. Fresh Newton
|
||||
보정이 저장된 변위를 바꾸지 못하는 경우를 실제 실행과 독립 검산으로 확인했다.
|
||||
제한된 단일·두 좌표 탐색의 실패는 표현 가능한 해의 부재를 증명하지 않는다.
|
||||
|
||||
갱신 중 사라진 덧셈을 다음 반복에 누적하는 carry와, 실제 변위를 high+low로 표현하는
|
||||
물리 상태는 다르다. Carry 실험의 kernel·rates·형상은 rounded high만 사용한다.
|
||||
아래 승인안은 low도 물리 계산에 사용하는 별도 정밀도 계약이며, 원본 수렴을 보장하지 않는다.
|
||||
|
||||
## 제안하는 계산과 결과의 의미
|
||||
|
||||
- 내부 변위·속도·physical a·auxiliary A와 predictor를 두 Float64 값의 합으로 표현한다.
|
||||
Low를 유지한 candidate와 accepted endpoint를 복사하고 다음 증분에도 전달한다.
|
||||
연산별 반올림 오차·비유한 값·정규화 조건을 정의하고 독립 검증한다.
|
||||
재방문 판별의 동일 상태 비교에는 low를 포함한다.
|
||||
- Hex8의 상대 변위·H/E/S/P·내력·에너지·응력과 tangent는 같은 전체 상태를 사용한다.
|
||||
형상 인증도 전체 상태를 포함하는 보수적 경계를 사용한다. Kernel 직전이나 H를 만든
|
||||
직후 low를 버리는 구현은 이 제안을 충족하지 않는다.
|
||||
- 기준 consistent M과 material/geometry 입력은 기존 정의를 유지한다. 관성력·weighted
|
||||
residual·old residual·reaction·수지·수정량·update 판정도 같은 전체 상태로 계산한다.
|
||||
Sparse factorization은 기존 Float64 backend를 사용하되, 보정량을 전체 상태에 누적한다.
|
||||
Rounded tangent와 전체 상태 residual 사이의 일관성을 별도로 검증한다.
|
||||
- HHT 계수·고정 h·exact schedule·100회 제한, 모든 원래 free 성분의 Si·exact-zero branch,
|
||||
residual/correction `1e-10` 및 update/weighted identity `1e-12`를 유지한다.
|
||||
Low를 사후 residual 보정이나 평형 projection으로 만들지 않는다.
|
||||
- HDF5의 field·shape·Float64 dtype은 유지한다. 각 값은 내부 물리량을 Float64로 반올림한
|
||||
observable이다. 내부 전체 상태의 gate PASS를 HDF5 배열만으로 같은 식을 재계산한
|
||||
gate PASS로 표현하지 않는다. Self-check는 내부 값의 올바른 직렬화와 기존 schema·identity를
|
||||
검증하고, 로그에 사용한 내부 산술을 명시한다. Restart는 계속 지원하지 않는다.
|
||||
Float64 직렬화의 overflow·비유한 값은 실패로 처리하며 기존 최종 파일을 보존한다.
|
||||
|
||||
승인한 변경에서는 accepted state가 high+low 전체 물리 상태이며, published Float64 state는
|
||||
그 반올림 observable이다. 같은 계산 입력이라는 이전 의미를 적용하지 않는다.
|
||||
|
||||
## 구현 전에 고정할 검증
|
||||
|
||||
1. 독립 정확 산술 oracle과 binary-power 사례로 덧셈·곱셈·나눗셈·low 보존 및 유한 범위를
|
||||
검증한다. 단일 Float64로 collapse하는 대조 구현이 실패하는 의미 있는 사례를 포함한다.
|
||||
2. 작은 coupled Hex8 사례에서 low가 실제 변형률·힘·관성력에 전달되는지 확인한다.
|
||||
에너지 미분·tangent·객관성·형상 인증·비영 old residual의 HHT identity와 네 수정량
|
||||
channel을 검증한다. 승인한 low를 제외한 다른 상태에서 gate를 계산하지 않는다.
|
||||
3. Accepted/trial 복사와 실패 rollback, geometry/backend 실패, 원래 범위의 시간수렴·
|
||||
에너지·운동량·반력을 검증한다. 정적·고유치의 기존 계산을 불필요하게 변경하지 않는다.
|
||||
4. 제한된 실제 동적 실행에서 개선 근거를 얻고 독립 검토한 후, 원본 두 건의101개 endpoint와
|
||||
공식 HDF5/외부 비교·전체 회귀를 수행한다. 외부 row5%/RMS1% 기준과 원본은 유지한다.
|
||||
|
||||
작은 사례에서 개선을 입증하지 못하면 추가 정밀도 확대를 자동으로 반복하지 않는다.
|
||||
다음 접근과 계약 영향을 사용자에게 다시 제시한다.
|
||||
@@ -1,108 +0,0 @@
|
||||
# 정적 원본 불일치와 변경 선택지 — 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는 선택되지 않았다.
|
||||
이 문서는 변경 근거와 승인 범위를 보존한다. 아래 공식 결과와 private 후보는 변경 전
|
||||
pointwise 구현의 불일치 조사이며 변경본 production PASS가 아니다. 실제 비교 기록은
|
||||
[verification](verification.md)에 있다.
|
||||
|
||||
## 확인한 차이
|
||||
|
||||
선형·비선형 정적 원본의 CLI는 native exit0으로 종료했다. Byte-identical scratch input,
|
||||
원본13개의 SHA, source step/factor1,442절점·300요소·51구속, source IntPt1–8,
|
||||
형식·좌표·tensor·finite 검사도 통과했다. 두 경우 모두 U/RF/S가 공통 RMS1%를 초과했다.
|
||||
|
||||
| 실제 공식 결과 | U RMS/S | constrained RF RMS/S | S RMS/S |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| 선형 정적 | 0.01673952 | 0.06818893 | 0.04270903 |
|
||||
| 비선형 정적 | 0.01673779 | 0.06818993 | 0.04270851 |
|
||||
|
||||
선형 독립 표준 full8 조립·solve는 현재 변위와 상대 최대차1.75e-11로 일치했다.
|
||||
같은 식의 응력 복구 최대차는4.01e-7 stress-unit, 자유 잔차/하중은5.15e-12다.
|
||||
반력·일과 에너지를 별도로 대조했으며 source mapping 오류는 발견하지 않았다.
|
||||
원본 변위를 같은 표준 full8 식에 대입하면 자유 평형 잔차가 크다. 이는 원본이 다른
|
||||
체적 처리 모델과 일관될 수 있다는 관찰이며 원본이 잘못됐다는 판정은 아니다.
|
||||
|
||||
원본 변위에서 점별 deviatoric strain은 유지하고 체적 trace만 요소의 reference-volume
|
||||
가중 평균으로 계산하면 원본 응력의 최대차가 약1.054e6에서44.15 stress-unit으로 줄었다.
|
||||
[Abaqus 공개 Theory Guide](https://docs.software.vt.edu/abaqusv2025/English/SIMACAETHERefMap/simathe-c-solidisoquadhex.htm)는
|
||||
fully integrated 8절점 요소의 체적 항 평균화를 설명한다. 점 수8만으로 승인된 비수정
|
||||
pointwise full8 식과의 동등성을 추론할 수 없다. 읽은 공개 자료는2025이며 원본 CAE2024의
|
||||
정확한 revision이나 ODB 출력 precision을 확인한 것은 아니다.
|
||||
|
||||
## 선택 A — 현재 정식화 유지와 별도 reference
|
||||
|
||||
현재 energy/force/tangent/recovery·consistent mass·절차를 유지한다. 동일한 비수정
|
||||
8점 규칙·구성식·하중·구속·복구량 의미를 명시한 독립 reference를 별도 경로에 준비한다.
|
||||
FESA 결과를 reference로 복사하거나 기존 원본을 변경하지 않는다.
|
||||
|
||||
필수 reference 지위를 바꾸면 비교 계약 변경이 필요하다. 현재 불일치 원본을 diagnostic으로 보존하고
|
||||
새 자료를 필수 reference로 지정할지, 현재 필수 지위를 유지해 완료를 계속 보류할지
|
||||
사용자가 결정한다. 새 자료의 경로·quantity·시점·단위·hash와 독립성을 확인하기 전에는
|
||||
필수 비교 PASS가 아니다. 외부 solver 실행이나 reference 생성은 별도의 명시 범위다.
|
||||
|
||||
## 선택 B — Green strain 체적 평균 energy 도입
|
||||
|
||||
8개 reference Gauss 점과 그 가중치 w_g, 실제 F_g·Green strain E_g를 유지하고
|
||||
체적 energy만 다음 요소 전체 항으로 정의한다. mu와 kappa는 기존 shear·bulk 계수다.
|
||||
|
||||
```text
|
||||
V = sum_g(w_g), theta_bar = sum_g(w_g * trace(E_g)) / V
|
||||
U* = sum_g(w_g * mu * dev(E_g):dev(E_g)) + kappa * V * theta_bar^2 / 2
|
||||
S*_g = 2*mu*dev(E_g) + kappa*theta_bar*I
|
||||
P*_g = F_g*S*_g, Cauchy_sigma_g = F_g*S*_g*transpose(F_g)/det(F_g)
|
||||
f = dU*/du, Kt = d²U*/du²
|
||||
```
|
||||
|
||||
체적 항의 material Hessian은 서로 다른 Gauss 점의 coupling을 포함한다. 방향 p/q에
|
||||
대해 Z_g[p]=sym(F_g^T D_g[p]), D_g[p]=sum_a(p_a tensor G_ag)라 두면 체적 항은
|
||||
`(kappa/V)*sum_g(w_g*trace(Z_g[p]))*sum_h(w_h*trace(Z_h[q]))`다.
|
||||
Paired 경로의 G_ag는 [precision formulation](precision-formulation.md)의 동일 Ghat derivative다.
|
||||
Deviatoric material 항과 S*의 geometric 항도 같은 energy에서 미분한다. Stress만
|
||||
평균화하거나 기존 point-local tangent를 그대로 쓰면 이 energy의 내력·접선이 아니다.
|
||||
|
||||
선형은 같은 energy의 zero-state Hessian을 쓴다. 비선형은 TL·실제 Green strain을
|
||||
유지하고 새 energy의 내력·Kmat/Kgeo/Kt를 쓴다. 실제 Green strain을 출력하되 stress는
|
||||
같은 point strain만의 기존 StVK law가 아닌 요소 평균에 의존한다는 의미를 명시한다.
|
||||
Reference consistent M과 기존 HHT·strict gate·100회 제한·Float64 결과 반올림 의미는 유지한다.
|
||||
평균·내력·접선·복구의 paired 경로까지 변경해야 하며 eigen과 두 HHT의 강성도 달라진다.
|
||||
|
||||
후보 B의 **선형 한 사례만** private NumPy/SciPy로 독립 조립·solve했다. 실제 원본
|
||||
구속·하중과 unchanged reference-only row5%/RMS1% 정책을 사용한 수치 관찰이다.
|
||||
|
||||
| 후보 선형 계산 | row 실패/전체 | RMS/S | 최대 절대차 |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| U | 0/1326 | 9.317914e-9 | 6.096814e-11 length |
|
||||
| constrained RF | 0/51 | 7.309763e-9 | 0.01474826 force |
|
||||
| S | 0/14400 | 3.425947e-9 | 0.1224464 stress |
|
||||
|
||||
관찰한300 local matrix의 numerical rank는18,1275 free matrix의 numerical rank는1275이며
|
||||
Cholesky가 성공했다. Rank는 spectral threshold를 사용한 관찰이다.
|
||||
후보 평형·에너지·독립 stress→force를 대조했다. 이는 production 구현·공식 HDF5 비교나
|
||||
모든 형상의 안정성 증명이 아니다. 비선형·고유치·동해석의 원본 일치는 아직 입증하지 않았다.
|
||||
|
||||
이 모델은 평균 Green trace를 사용하며 공개 finite Fbar와 다르다. Fbar의 평균 determinant,
|
||||
수정 F와 dev 구성식까지 재현하려면 별도의 선택·변분·paired 산술·복구량 계약이 필요하다.
|
||||
공개 Abaqus 유한변형 알고리즘의 동등성을 이 선형 결과로 주장하지 않는다.
|
||||
|
||||
## 변경 후 필요한 검증과 결정 경계
|
||||
|
||||
B를 선택하면 static/frequency/LIN·TL HHT 전체에 동일 energy를 적용하는 범위와 복구량
|
||||
의미를 feature 계약에 기록한 뒤 구현한다. Independent U→f→Kt 방향 미분, cross-GP 항,
|
||||
distorted patch·6 rigid modes·큰 회전 객관성, extra-null/conditioning·공간수렴,
|
||||
consistent M·반력·work/energy·운동량, 모든 low 전달·rollback·시간수렴을 검증해야 한다.
|
||||
모든 원본을 새 구현으로 다시 비교하고 최신 전체 MSVC Debug 회귀를 수행한다.
|
||||
이미 종료된 현행 구현의 evidence를 변경본의 PASS로 재사용하지 않는다.
|
||||
|
||||
A/B 어느 선택도 원본·tolerance를 보정하지 않는다. 공개 Fbar 자체를 목표로 하려면
|
||||
별도 정식화 조사를 선택해야 한다. 고유치 원본 Value 부재와 기존 Shell 회귀 문제도 별개로 남는다.
|
||||
Physics 변경 B는 승인됐으며 필수 reference 지위는 유지한다. 승인만으로 변경본 검증을 완료하지 않는다.
|
||||
|
||||
원시 독립 표준 full8 audit는 로컬 `.harness/hex8-evidence/t8-independent-full8-audit/`,
|
||||
체적 조사·후보 수식·한 번의 선형 계산과 SHA는
|
||||
`.harness/hex8-evidence/t8-reference-law-investigation/`에 보존했다.
|
||||
독립 numerical review는 후보 energy의 first/second variation과 한 선형 후보의
|
||||
cross-GP K·응력·에너지·수치 정책 관측을 확인했다. 후보 채택·production 검증은 아니다.
|
||||
@@ -1,149 +0,0 @@
|
||||
# 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,97 +0,0 @@
|
||||
# Hex8 원본과 비교 mapping
|
||||
|
||||
기준은 [PRD](PRD.md)의 FEM-REQ-HEX8-022–023와 [공통 수치 정책](../TOLERANCE.md)이다.
|
||||
기존 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
|
||||
|
||||
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는 `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을 보존한다.
|
||||
|
||||
| 원본 | CSV rows | SHA-256 raw |
|
||||
| --- | ---: | --- |
|
||||
| `hexa_dynlinear.inp` | — | `f8db81b8ea56b689ab0ad892e6a84b7c6a0162c9d3ff95328ea99722f3de078e` |
|
||||
| `hexa_dynlinear_U.csv` | 44642 | `623c20489e8cc18d23fa1728563ce5a26059f321861514ef8569e3d204ef6cb5` |
|
||||
| `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` |
|
||||
| `hexa_linearstatic_U.csv` | 442 | `1ff49aea3ec601cfd796d6a2fb6a4f91be3fc3de9426cdf3744d981216d4bd5f` |
|
||||
| `hexa_nonlinearstatic.inp` | — | `7858254025b96c6bfe3fb6498605ecf9c473425c2bc3593f5fbdc6902fd7c6cb` |
|
||||
| `hexa_nonlinearstatic_RF.csv` | 442 | `3ba67a4fb75b2ce3edee13d35b2ea66ac7d52fc16e612c086ed1122a834fee7b` |
|
||||
| `hexa_nonlinearstatic_S.csv` | 2400 | `a8866a730f0d65b1e3921d504d255b72158b4a2b9ee30fc691712d94982b07ba` |
|
||||
| `hexa_nonlinearstatic_U.csv` | 442 | `bd6c2fe2b2bb2ffb0bc2ea52f67513c3967a396b5707bbebc9533fde7be25ac6` |
|
||||
|
||||
## Quantity와 identity
|
||||
|
||||
Static은 U1/U2/U3의 U-global, RF1/RF2/RF3 constrained projection의 RF-global,
|
||||
integration-point Cauchy S11/S22/S33/S12/S13/S23의 S-global을 각각 독립 blocking family로 비교한다.
|
||||
U/RF는442-row 전체 inventory를 먼저 확인하고,
|
||||
RF만 실제 constrained components로 투영한다. Free Abaqus RF와 FESA free residual을 비교하지 않는다.
|
||||
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 의미로 대응한다.
|
||||
FESA storage Step-1/frame0과 source name/Increment10의 서로 다른 의미를 유지한다.
|
||||
Dynamic은 integer increment로 match 후 source decimal time과 binary64 n*h를 대조한다.
|
||||
Original coordinate는 reference 위치이며 nonlinear current 위치로 바꾸어 맞추지 않는다.
|
||||
|
||||
## Integration point convention의 보조 확인
|
||||
|
||||
Natural node 순서는 `---,+--,++-,-+-,--+,+-+,+++,-++`, IntPt 순서는
|
||||
`---,+--,-+-,++-,--+,+-+,-++,+++`다. 뒤의3/4·7/8을 node 순서와 혼동하지 않는다.
|
||||
전체300×8 point에서 고정 element/IntPt key로 입력 shape의 기준 위치를 계산해 CSV X/Y/Z와
|
||||
대조했다. 선형/비선형 S 모두 최대 absolute coordinate difference는
|
||||
`[1.4328052233558708e-7,1.4747179877261374e-7,2.4956611142101792e-6]`이었다.
|
||||
|
||||
이 보조 확인의 budget은 coordinate 성분의 uncancelled shape sum에16×float32 eps를 곱했다.
|
||||
모든 point에서 maximum budget ratio=.112265였다. 이는 단정밀도 수준의 원본 출력 해상도를
|
||||
기준으로 한 convention sanity check이며 실제 원본 precision metadata의 증명이나 stress값의
|
||||
PASS가 아니다. Nearest-position matching을 수행하지 않았고 어떤 좌표/ID/값도 수정하지 않았다.
|
||||
|
||||
명령은 `python .dryforge/inspect-reference.py`, native exit0이었다. 로컬 raw 보고서는
|
||||
`.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 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,338 +0,0 @@
|
||||
# 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
|
||||
checklist. The comparator reads official rounded Float64 quantities; it does not
|
||||
recompute the internal high+low solver acceptance gates from those observables.
|
||||
|
||||
## Entry point and identities
|
||||
|
||||
`uv run --with h5py --with pytest python scripts/verification/compare_hex8.py`
|
||||
requires `--case`, the actual scratch `--input`, official `--results`, and
|
||||
`--report`. `--references` defaults to `reference/hexa`. The optional
|
||||
`--execution-record` consumes a closed native CLI record; it never executes its
|
||||
command. A supplied record must have native exit0, unchanged original/copy byte
|
||||
identities, and the exact input and result hashes. Without that record the report
|
||||
explicitly certifies file comparison only, not successful solver execution.
|
||||
|
||||
For example, after a real original run has naturally completed:
|
||||
|
||||
```powershell
|
||||
uv run --with h5py --with pytest python scripts/verification/compare_hex8.py `
|
||||
--case hexa_linearstatic --input <scratch>/hexa_linearstatic.inp `
|
||||
--results <scratch>/hexa_linearstatic_results.h5 `
|
||||
--execution-record <scratch>/native.json --report <evidence>/comparison.json
|
||||
```
|
||||
|
||||
The report path may not overwrite an input, reference, execution record or result.
|
||||
Authoritative repository originals remain protected even with alternate copied
|
||||
references; existing symlink/junction and hardlink aliases are also checked.
|
||||
Exit0 means the declared comparison passes; exit1 means a numerical family fails;
|
||||
exit2 means an identity/schema/finite/precondition error or missing modal reference.
|
||||
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 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.
|
||||
|
||||
Complete CSV identities are checked before any physical values are converted.
|
||||
Complete required Solid model/frame/physical schemas, UTF-8 attributes and explicit
|
||||
LE F64/U64/U8 widths are then checked. Result arrays join the source node or
|
||||
source element/point labels through their internal ID maps; CSV row order is not
|
||||
an identity. Physical values, including nonprojected RF rows and unused exported
|
||||
CSV derived quantities, must be finite before tolerance evaluation.
|
||||
|
||||
Static reference increment10 maps to the completed load-factor1 frame, independent
|
||||
of its HDF5 storage frame index. RF validates all442 source rows before projecting
|
||||
the actual51 constrained scalar components. It never compares free RF with free
|
||||
residual. Stress compares all300×8×6 unaveraged global Cauchy components. Fixed
|
||||
IntPt1–8 conventions are checked without nearest-coordinate remapping. Point
|
||||
coordinates are auxiliary: CSV coordinate errors use the approved
|
||||
`16*float32-eps*sum(abs(Na*Xa_axis))` source-resolution budget; the scalar stress
|
||||
policy is unchanged.
|
||||
|
||||
Dynamic comparisons require exactly101 accepted frames. Integer increment0–100
|
||||
is matched first, source decimal time must equal n/10, and each stored time must
|
||||
be binary64 `n*0.1`. Each frame's1326 U scalars form a separate blocking family.
|
||||
There is no interpolation, nearest-time matching, scale sharing between frames,
|
||||
rotation family or acceleration/energy reference claim.
|
||||
|
||||
## Common numerical policy
|
||||
|
||||
Every static case has independent U-global, constrained RF-global and S-global
|
||||
blocking families. Every dynamic frame has its own U-global blocking family.
|
||||
For each family, only reference values define S=max(abs(reference)) and B=.01S.
|
||||
Rows with abs(reference)<=B require absolute error<=B; other rows require relative
|
||||
error<=.05. All-row RMS/S must also be<=.01. Boundaries are inclusive, and S=0
|
||||
requires every actual value to be exactly0. No absolute floor, denominator clamp,
|
||||
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 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 구현의 관측 이력
|
||||
|
||||
The initial seven behavior assertions failed before implementation (pytest native
|
||||
exit1). The first expanded suite passed63/63 with native exit0. Those tests include
|
||||
original-sized independently declared HDF5 schema fixtures and reference values;
|
||||
they are comparator behavior fixtures, not actual FESA source validation evidence.
|
||||
The affected Hex8 plus legacy HHT comparator suite passed119/119 (native exit0,
|
||||
62.51s) before independent review fixes. Those bounded fixes were reproduced by
|
||||
safe behavior RED tests and the five targeted regressions then passed5/5. Final affected checks after all three independent findings were corrected passed
|
||||
124/124 with native exit0 (81.41s), with raw stdout and JUnit retained under
|
||||
`.harness/hex8-evidence/t8/final-affected/`. The preliminary whole `uv ... pytest -q` attempt and the separate exact
|
||||
configured `uv run --with h5py --with pytest python -B -m pytest -v -rs`
|
||||
(`docs/operations.md:87`, adding h5py) both stopped during collection with native
|
||||
exit2 and five legacy operational import errors (`msvc_harness` and removed `scripts.hooks`). It is not a whole-suite PASS;
|
||||
no tests were excluded and no retired orchestration was restored.
|
||||
|
||||
Actual official linear-static and nonlinear-static results passed source,
|
||||
model, schema, point, finite and frame prechecks and failed all three numerical
|
||||
families. Their closed CLI evidence records both have native exit0 and matching
|
||||
original/copy/result hashes; their comparator commands have native exit1.
|
||||
These are genuine comparison failures under the unchanged policy, not reader
|
||||
precheck failures or solver native execution failures. Frequency official readback
|
||||
passes its prechecks; its comparator exits2 with `not-run`, not PASS.
|
||||
|
||||
| Case / blocking quantity | Scalars | Failing rows | S | Maximum absolute error | RMS/S |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: |
|
||||
| linear static U | 1326 | 79 | .00186131289 | .00007588175038730229 | .016739519723527385 |
|
||||
| linear static RF | 51 | 34 | 513497.094 | 78630.61640144575 | .06818892528188494 |
|
||||
| linear static S | 14400 | 7783 | 3430145 | 982855.3871926877 | .04270903417463437 |
|
||||
| nonlinear static U | 1326 | 79 | .00186110672 | .00007586510202476195 | .016737790679783753 |
|
||||
| nonlinear static RF | 51 | 34 | 513445.594 | 78623.61011241788 | .0681899286018377 |
|
||||
| nonlinear static S | 14400 | 7782 | 3429817.75 | 982753.151651503 | .04270850513087158 |
|
||||
|
||||
Official result SHA256 values are
|
||||
`3ef92c35ea83ddb4d11437ff87ef15eca7dac179d378eda19570abae579b09d0` (linear),
|
||||
`0095ebf2d360a8bd8a71212af0dd500ed611a56540a173a39d9c8d88d8e05bbf` (nonlinear),
|
||||
and `0ec4d2b09250bab17a8532228cd34a312518c04023076f971e929b387031c6b3` (frequency).
|
||||
Scratch inputs are retained under
|
||||
`.harness/hex8-evidence/t8-original-cli/<case>/<case>.inp`.
|
||||
Root preserved each exact command, closed native exit and full row report under
|
||||
`.harness/hex8-evidence/t8-comparator-frozen/official-comparisons/<case>/`.
|
||||
The command records identify the actual scratch input, original reference directory,
|
||||
HDF5 and closed native CLI record consumed. The frozen author revision
|
||||
`0b93c0c59cf64db44003ebe5217a4efb8307a8ba` passed independent bounded review
|
||||
and was integrated as `317fe5c`. Root and reviewer separately verified four owned
|
||||
source blobs/snapshots, 65 closed raw artifacts and all13 unchanged source hashes.
|
||||
The raw affected stdout/JUnit certifies124 tests (Hex8 83, legacy HHT 41), zero
|
||||
failures/errors/skips and native0. This review certifies the comparator behavior
|
||||
and evidence, not numerical agreement with the originals. Naturally completed
|
||||
dynamic originals and whole-feature validation are tracked separately.
|
||||
|
||||
After integration, the root affected suite also passed124/124 with native0
|
||||
(70.92s). Root comparison-only commands consumed the same naturally closed official
|
||||
results and again returned static native1 with the same failed family metrics and
|
||||
frequency native2 (`not-run`). These commands and raw stdout/JUnit/row reports are
|
||||
retained under `.harness/hex8-evidence/t8-integrated/`. No original solver case was
|
||||
rerun to perform these comparisons.
|
||||
|
||||
| Actual original | Closed pointwise baseline comparison state (before approved B) |
|
||||
| --- | --- |
|
||||
| `hexa_linearstatic` | Full precheck PASS; U/RF/S numerical FAIL (comparator native1) |
|
||||
| `hexa_nonlinearstatic` | Full precheck PASS; U/RF/S numerical FAIL (comparator native1) |
|
||||
| `hexa_dynlinear` | CLI native0,101-frame precheck PASS;88/101 U families FAIL (comparator native1), maximum RMS/S .08163737360707901 |
|
||||
| `hexa_dynnonlinear` | CLI native0,101-frame precheck PASS;88/101 U families FAIL (comparator native1), maximum RMS/S .08160653291688992 |
|
||||
| `hexa_freq` | Official HDF5 precheck PASS; modal Value absent, actual comparison NOT RUN (native2) |
|
||||
|
||||
Full MSVC build/CTest, original CLI orchestration, independent numerical/physics
|
||||
investigation of the reference conflict and whole-feature completion are root-owned
|
||||
and are not inferred from this Python implementation or its fixture tests.
|
||||
|
||||
The two actual dynamic CLI runs closed naturally with all101 frames before the
|
||||
2026-10-10 energy change. Each comparison consumed all101 original increments,
|
||||
1326 scalars per increment and44642 original node rows. Failed scalar-row totals
|
||||
were74098 (linear) and73974 (nonlinear); maximum absolute errors were
|
||||
.0003979358365926728 and.00039786754005028237. Full commands, native records,
|
||||
source/result hashes and row reports are preserved under
|
||||
`.harness/hex8-evidence/t8-dynamic-closure/<case>/`. The separately frozen API
|
||||
`c49cae4` also naturally completed both101-endpoint strict-gate checks with native0;
|
||||
it did not itself write official HDF5 or establish original agreement.
|
||||
|
||||
The closed pointwise source `1eb9cdd` full MSVC Debug build exited0. Its unfiltered
|
||||
780-test CTest exited8:777 PASS,2 FAIL,1 SKIP, with all163 added tests PASS.
|
||||
The baseline exception names, statuses and raw metric bodies matched exactly:
|
||||
`HhtShellPhysics.C08aRigidManufacturedOrbitFullCoordinateTimeConvergence`,
|
||||
`HhtShellPhysics.C08bFreeFiniteRotationPlateSelfConvergenceAndPhysicalInvariants`,
|
||||
and `HhtTemporalVerification.C04aFinestReductionComparisonIsNumericallyResolved`.
|
||||
Raw records and the independent closure summary are retained under
|
||||
`.harness/hex8-evidence/t9-full-current/`. This is not a whole-suite PASS.
|
||||
|
||||
Approved B replaces the pointwise bulk energy and requires new validation of all
|
||||
five procedures. None of the historical native, internal or reference outcomes
|
||||
above is a validation result for the mean-volume implementation. Originals,
|
||||
tolerances, strict gates and comparator contracts remain unchanged.
|
||||
|
||||
## 2026-10-10 체적 평균 energy 구현과 현재 재검증
|
||||
|
||||
Frozen 작성자 `b2abd739`를 root `18b36c1`에 연결했다. 두 pass로 reference-volume
|
||||
가중 trace 평균을 계산하고 같은 energy에서 내력·전체 Hessian·복구 응력을 구한다.
|
||||
Cross-GP bulk 항과 `S*:delta²E` 기하항을 함께 유지한다. LINE의 K0는 같은 식의
|
||||
영변위 Hessian이다. 질량·HHT·strict gate·원본·I/O·허용오차는 변경하지 않았다.
|
||||
|
||||
수정한 weighted warped oracle를 이전 구현에 대입한7개 검사는 모두 실패했다.
|
||||
변경본 작성자 관련150/150, 시간수렴3 GTests의4물리 사례, 최종 실제 재컴파일3/3은
|
||||
각각 native build/CTest0/0이다. u/v/physical a의 최소 관측 차수1.98022는 기존1.8
|
||||
기준을 충족한다. Root 실제 재컴파일 후 관련65/65도 native0이다. 정규 brick의 rank,
|
||||
두 축 지정 굽힘장 에너지 수렴과 고정 두께 cantilever tip 추세는 서로 다른 증거다.
|
||||
상세 범위는 [수치 검토](numerical-review.md)와 [물리 검토](physics-review.md)에 있다.
|
||||
|
||||
새 공식 CLI는 frozen executable과 byte-identical scratch INP를 사용한다. 아래 두
|
||||
정적 해석은 자연 종료 native0이며, 변경 없는 공식 비교기도 각각 native0이다.
|
||||
Source/model/schema/point/frame/finite 사전검사와 각 family의 모든 row가 통과했다.
|
||||
|
||||
| 원본 / blocking quantity | Scalars | Failing rows | Maximum absolute error | RMS/S |
|
||||
| --- | ---: | ---: | ---: | ---: |
|
||||
| linear static U | 1326 | 0 | 6.096370478748947e-11 | 9.317898154374918e-9 |
|
||||
| linear static RF | 51 | 0 | .014746726665180176 | 7.3098163267228364e-9 |
|
||||
| linear static S | 14400 | 0 | .12245691940188408 | 3.425934236751431e-9 |
|
||||
| nonlinear static U | 1326 | 0 | 9.832466303596647e-10 | 2.169911561350724e-7 |
|
||||
| nonlinear static RF | 51 | 0 | 12.826179522729944 | 6.728092996221331e-6 |
|
||||
| nonlinear static S | 14400 | 0 | 93.34994950843975 | 9.338899878251489e-6 |
|
||||
|
||||
새 HDF5 SHA256은 linear `023769e50d05226ef8defe87e29bc9046fbdd5071783007ebb39a49fd9d7d617`,
|
||||
nonlinear `2acb3471c7799597d554d4d9ee224e8c611522866808f38b2b2c202e0f98a4bd`다.
|
||||
Frequency CLI도 native0으로 종료했고 공식 readback 사전검사는 PASS다. 새 결과 SHA는
|
||||
`f6203936883df7f27e86a20311726b7e59fefa117e5f9fa67f71bdf63ec2e4cb`다.
|
||||
원본 modal Value 부재로 비교는 native2·NOT RUN이며 수치 통과가 아니다.
|
||||
|
||||
새 선형 동적 CLI가 native0으로 자연 종료했고101-frame 사전검사와101개 U family가
|
||||
모두 PASS다(비교 native0). 총133926개 scalar의 실패 행은0개다. 초기 exact-zero family를
|
||||
포함하며100개 nonzero-scale family의 최대 RMS/S는.0031316511389477947,
|
||||
전체 최대 absolute error는1.3395048822648645e-5다. 마지막 RMS/S는.001392775677333779다.
|
||||
Actual HDF SHA는 `5476c557bc8e1c0a1e8b57a1cc8d763eb822a47e27aa2b2723fcbdc2246f9b40`다.
|
||||
이 외부 변위 비교는 rounded HDF만으로 내부 high+low strict gate를 재계산한 검사가 아니다.
|
||||
|
||||
새 비선형 동적 CLI도 native0으로 자연 종료했고101-frame 사전검사 및101개 U family가
|
||||
모두 PASS다(비교 native0). 총133926개 scalar의 실패 행은0개다. 초기 exact-zero와
|
||||
100개 nonzero-scale family를 구분했으며 최대 RMS/S는.003133373067174733,
|
||||
전체 최대 absolute error는1.3397499223151595e-5, 마지막 RMS/S는.0013958914416137816이다.
|
||||
Actual HDF SHA는 `023b4558a28f8d9365f6b11346a6cb4a5d2faafa68607c5c56bbf226fe816210`다.
|
||||
다섯 새 공식 CLI queue는 wrapper0으로 자연 종료했고 원본13개 SHA를 보존했다.
|
||||
독립 검토의 범위는 해당 수치·물리 검토 문서를 따른다.
|
||||
|
||||
제외 없는 전체787 CTest는2026-10-11 자연 종료했다. MSVC x64 Debug configure/build는
|
||||
native0/0이며 CTest는 native8:784 PASS·2 FAIL·1 SKIP이다. 기존617개가 모두 유지됐고
|
||||
추가170개는 모두 PASS이며 새 예외는0이다. 두 기존 Shell 실패의 수치 로그20/30줄은
|
||||
baseline과 정확히 같다. SKIP은 이름·상태가 동일하지만 output-on-failure raw에 상세
|
||||
본문이 없어 그 metric 검증은 NOT VERIFIED다. 전체 green으로 보고하지 않는다.
|
||||
정확한 CLI/비교 명령·native record·
|
||||
원본/copy/result SHA·전 row report는 로컬 `.harness/hex8-evidence/mean-volume/`의
|
||||
`original-cli/`, `comparisons/`, `integrated-focused/`, `full/`에 보존한다.
|
||||
|
||||
동일 revision에서 전체 Python 명령
|
||||
`uv run --with h5py --with pytest python -B -m pytest -v -rs`도 다시 실행했다.
|
||||
기존 `msvc_harness`·제거된 `scripts.hooks` import의 collection5 오류로 native2,
|
||||
실행0개다. `.harness/hex8-evidence/mean-volume/python-full/`의 native 기록을 따른다.
|
||||
기존 실패를 제외하거나 폐기된 절차를 복원하지 않았으며 전체 Python PASS가 아니다.
|
||||
|
||||
## 2026-10-11 전체 재검증 종료 기록
|
||||
|
||||
전체 C++ 검증은 설치된 MSVC x64와 dependency 환경에서 아래 preset backend 명령을
|
||||
제외 없이 실행했다. `.harness/config.json`이 없고 generic runner는30분 deadline을
|
||||
사용하므로 수시간의 전체 실행은 직접 backend로 완료했다. `scripts/execute.py`의 별도
|
||||
실행 성공을 주장하지 않는다. 실제 argv·시각·native 종료 코드는 `full/`에 보존했다.
|
||||
|
||||
```powershell
|
||||
cmake --preset windows-msvc-ninja-debug
|
||||
cmake --build --preset windows-msvc-ninja-debug
|
||||
ctest --preset windows-msvc-ninja-debug --show-only=json-v1
|
||||
ctest --preset windows-msvc-ninja-debug --output-on-failure
|
||||
```
|
||||
|
||||
전체 실제 시간은16839.26초다. 기존 실패는
|
||||
`HhtShellPhysics.C08aRigidManufacturedOrbitFullCoordinateTimeConvergence` 및
|
||||
`HhtShellPhysics.C08bFreeFiniteRotationPlateSelfConvergenceAndPhysicalInvariants`,
|
||||
SKIP은 `HhtTemporalVerification.C04aFinestReductionComparisonIsNumericallyResolved`다.
|
||||
기존617개와 새170개의 discovery·실행 ordinal·status 및 종료 artifact SHA 대조는
|
||||
`full/independent-closure-summary.json`에 있다. 다섯 CLI·네 실제 원본 비교·modal NOT RUN·
|
||||
Python collection 오류와 원본13개/frozen binaries 보존을 함께 기록한 최종 자료는
|
||||
`.harness/hex8-evidence/mean-volume/closure.json`이다. 독립 감사와 실제 원본 물리 복구의
|
||||
bounded 판정·한계는 [수치 검토](numerical-review.md), [물리 검토](physics-review.md)를 따른다.
|
||||
|
||||
종료 후 독립 전체 evidence 감사도 native0·finding0이다. 별도22개 artifact SHA와
|
||||
세 실제 테스트 실행 파일의 중간 관측/종료 SHA, 모든 discovery/실행 행과 기존 상대
|
||||
순서·status를 대조했다. 자료는 `final-evidence-audit-full/`에 있다. 두 실패 출력은
|
||||
elapsed-ms 표기만 제외해 정확히 동일하다. 이 감사 PASS는 CTest native8이나 modal
|
||||
NOT RUN을 통과로 재분류하지 않는다.
|
||||
Reference in New Issue
Block a user