feat: adopt lumped mass and reduced-coordinate shell HHT

Integrate Hex8 mass verification and fixed-null-basis shell dynamics with numerical and physics handoff evidence. Preserve interrupted reference and full-validation status; full integration validation is deferred until after performance optimization.
This commit is contained in:
KOKO\Mimi
2026-10-13 16:57:19 +09:00
parent ede137c6b4
commit eaa5cbeb21
110 changed files with 15274 additions and 971 deletions
+77 -7
View File
@@ -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 구현의 관측 이력