feat: adopt lumped mass and reduced-coordinate shell HHT
Integrate Hex8 mass verification and fixed-null-basis shell dynamics with numerical and physics handoff evidence. Preserve interrupted reference and full-validation status; full integration validation is deferred until after performance optimization.
This commit is contained in:
@@ -1,5 +1,14 @@
|
||||
# Hex8 verification and original comparison evidence
|
||||
|
||||
2026-10-11 질량 정책 변경: [HEX8-ADR-010](ADR.md)에 따라 현재 고유치·HHT는 lumped mass를 사용한다. 아래 consistent 질량을 전제로 한 수식 후보·검토·PASS/FAIL은 해당 시점의 이력이다. 변경본 통과로 승계하지 않으며 현재 수식은 [formulation](formulation.md), 재검증 상태는 [PRD](PRD.md)의 현재 checklist를 따른다.
|
||||
|
||||
현행 필수 원본5개 비교는 모두 PASS이며 최저10 modal Value의 최대 상대차는
|
||||
`0.0019610496%`다. [변경본 검증](lumped-mass-adoption.md)에 전체789개 자연 종료와
|
||||
test-only 수정 후 재검사를 구분했다. 기존 consistent modal FAIL은 아래 이력이며
|
||||
현재 불일치가 아니다. 당시 Shell C08b runtime 실패는 후속 승인된 초기 Newton
|
||||
정책에서 해소됐다. 최신 검증과 사용자 중단, 전체 검증 유예의 범위는
|
||||
[최종 인계](final-handoff.md)를 따르며 과거 PASS/FAIL을 최신 전체 통과로 승계하지 않는다.
|
||||
|
||||
This page records the build/test evidence, comparison-only Python tool and actual
|
||||
original results. Historical pointwise results and the approved mean-volume change
|
||||
are recorded separately. It does not replace the feature PRD, numerical controls or completion
|
||||
@@ -34,7 +43,7 @@ The tool is not a solver launcher, result generator, reference repair or release
|
||||
readiness check.
|
||||
|
||||
The fixed source inventory is the [reference-model](reference-model.md) inventory:
|
||||
442 nodes, 300 C3D8 elements and 13 frozen original files. Input and CSV raw SHA256
|
||||
442 nodes, 300 C3D8 elements and 14 frozen original files, including the supplied modal TXT. Input and CSV/TXT raw SHA256
|
||||
must match the documented Windows working-tree bytes. The HDF5 metadata must
|
||||
identify the actual lexically normalized absolute scratch path and that file's FNV1a64 content
|
||||
identity; a different path with identical bytes is not silently accepted.
|
||||
@@ -73,12 +82,73 @@ row deletion or cancellation of signed errors is applied. Reports preserve each
|
||||
scalar identity/value/error/branch/pass and family scale/band/max-absolute-error,
|
||||
absolute/relative RMS, source SHA and policy.
|
||||
|
||||
The independent typed modal comparison behavior requires explicit source step,
|
||||
mode1–10, eigenvalue or frequency quantity, and matching `1/time^2` or `1/time`
|
||||
units. Each mode is a singleton using the same RMS1% policy. This is not an
|
||||
assumption about the absent original Value file's eventual CSV layout. Actual
|
||||
modal original comparison remains **NOT RUN** until a genuine reference is
|
||||
provided and its semantics and hashes are confirmed.
|
||||
The supplied modal TXT uses `Mode n: Value = lambda Freq = f (cycles/time)`.
|
||||
Value is compared directly with the HDF5 eigenvalue (`1/time^2`); Freq is finite
|
||||
auxiliary data, without conversion or assumed SI time units. The TXT has no step
|
||||
field: its fixed hexa_freq case binds to the sole Step-1 in the hash-checked input.
|
||||
Modes1–10 are matched by ID, retaining repeated eigenvalues. Each mode is a
|
||||
singleton using the same RMS1% policy. An absent TXT remains NOT RUN; malformed
|
||||
or hash-mismatched data fail prechecks. The previous consistent-mass result failed
|
||||
seven families, as recorded below; the current lumped-mass result passes all ten.
|
||||
|
||||
## 2026-10-11 제공된 고유치 원본의 최종 비교
|
||||
|
||||
사용자 제공 `reference/hexa/hexa_freq.txt`의 raw SHA256은
|
||||
`3d2dacbee13cd2cc8d3f7c1a38210611a72de41d5e31d169e636bf40e00d4370`이다.
|
||||
기존 `18b36c1` frozen CLI가 native0으로 자연 종료한 실제 공식 HDF5를 사용했다.
|
||||
HDF5 SHA는 `f6203936883df7f27e86a20311726b7e59fefa117e5f9fa67f71bdf63ec2e4cb`이며
|
||||
이번에 새 C++ solver 실행으로 표현하지 않는다. 실제 scratch 입력·결과 hash 및 closed
|
||||
CLI record,442절점·300요소·51구속·10 modes, quantity/unit/finite precheck는 PASS다.
|
||||
|
||||
```powershell
|
||||
uv run --with h5py python -B scripts/verification/compare_hex8.py `
|
||||
--case hexa_freq `
|
||||
--input .harness/hex8-evidence/mean-volume/original-cli/hexa_freq/hexa_freq.inp `
|
||||
--results .harness/hex8-evidence/mean-volume/original-cli/hexa_freq/hexa_freq_results.h5 `
|
||||
--execution-record .harness/hex8-evidence/mean-volume/original-cli/hexa_freq/native.json `
|
||||
--report .harness/hex8-evidence/mean-volume/modal-final/comparison.json
|
||||
```
|
||||
|
||||
실제 comparator native exit1, numerical FAIL이다. Mode별 singleton의 RMS/S는
|
||||
`abs(lambda_fesa-lambda_reference)/abs(lambda_reference)`이며 공통1% 기준을 적용했다.
|
||||
다음 표는 가독성을 위해 출력 자리만 줄였고 실제 판정에는 반올림 전 값을 사용한다.
|
||||
|
||||
| Mode | 원본 Value λ | FESA λ | RMS/S (%) | 판정 |
|
||||
| ---: | ---: | ---: | ---: | --- |
|
||||
| 1 | 496.28 | 497.153597379 | 0.176029 | PASS |
|
||||
| 2 | 496.28 | 497.156908818 | 0.176696 | PASS |
|
||||
| 3 | 18302 | 18519.547026780 | 1.188652 | FAIL |
|
||||
| 4 | 18302 | 18519.716390186 | 1.189577 | FAIL |
|
||||
| 5 | 52797 | 63489.091264684 | 20.251323 | FAIL |
|
||||
| 6 | 131213 | 134772.818711666 | 2.713008 | FAIL |
|
||||
| 7 | 131214 | 134773.663065696 | 2.712868 | FAIL |
|
||||
| 8 | 165943 | 166062.030100247 | 0.071730 | PASS |
|
||||
| 9 | 449258 | 470919.350201648 | 4.821584 | FAIL |
|
||||
| 10 | 449260 | 470921.678067527 | 4.821635 | FAIL |
|
||||
|
||||
10 families 중7개 RMS 실패, scalar row5% 실패는 mode5의1개다. MITC4의 scoped5%
|
||||
RMS 예외를 적용하거나 frequency로 변환하지 않았다. Source 반복 고유치를 합치거나
|
||||
값이 가까운 모드에 재매칭하지 않았다. TXT 원본은 수정하지 않았다.
|
||||
|
||||
비교기 새 동작11개의 RED 실패를 관측한 뒤 원본 TXT reader와 실제 frequency 분기를 연결했다.
|
||||
추가된 성공 경로까지12개 새 검사와 기존 영향 검사 모두 PASS다. 실제 명령은
|
||||
`uv run --with h5py --with pytest python -B -m pytest tests/test_compare_hex8.py tests/test_compare_hht_dynamic.py -q --junitxml=.harness/hex8-evidence/mean-volume/modal-final/affected.xml`,
|
||||
native0·136 PASS(95 Hex8/41 HHT)·24.52초다. Raw log·JUnit·argv/native/timestamps는
|
||||
`modal-final/affected.log`, `affected.xml`, `affected.json`에 보존했다.
|
||||
Schema fixture의 PASS/의도된 FAIL은 비교기 동작 근거이며 실제 modal 일치의 PASS가 아니다.
|
||||
|
||||
독립 read-only 감사는 native0·finding0으로 동일한7개 실패를 재현했다. 원본14개를 포함한
|
||||
소비23개 artifact의 SHA를 전후 확인했다. 이번 추가 검증의 종료 요약은
|
||||
`modal-final/closure.json`이며 과거 원본 부재 시의 `mean-volume/closure.json`과
|
||||
`comparisons/hexa_freq/comparison.json`은 당시 NOT RUN 기록으로 보존했다.
|
||||
|
||||
이번 변경은 비교기·Python 검사·문서에 한정되고 C++ 수식/질량/절차/출력은 변경하지 않았다.
|
||||
직전에 완료한 전체787 회귀는 아래 기록대로 native8·784 PASS·기존 FAIL2·SKIP1이며
|
||||
이번 Python 검사로 전체 회귀를 새로 실행한 것으로 보고하지 않는다. 전체 Python의
|
||||
기존 collection5 오류도 해결한 것으로 보고하지 않는다.
|
||||
최종 modal 수치 불일치가 남아 기능 완료는 대기다. 원인 분리와 승인 경계는
|
||||
[미해결 문제](../tracking/findings.md#hex8-제공-고유치-원본과-최저10-모드-불일치)에 기록한다.
|
||||
독립 검토의 범위와 원시 자료는 [수치 검토](numerical-review.md)를 따른다.
|
||||
|
||||
## 비교기 개발과 변경 전 pointwise 구현의 관측 이력
|
||||
|
||||
|
||||
Reference in New Issue
Block a user