fix: use residual stopping for FEAST eigenanalysis
This commit is contained in:
@@ -1,12 +1,81 @@
|
||||
# MITC4 eigen 구현 및 실행 결과
|
||||
|
||||
- Feature: `mitc4-shell-feast-eigen2`; Owner: 메인 assistant; 2026-09-09 KST.
|
||||
- 판정: **구현 진행분 보존, 기능 acceptance 미완료**. 시간 제한으로 중지한 작업이 아니다.
|
||||
- Feature: `mitc4-shell-feast-eigen2`; Owner: 메인 assistant; 갱신 2026-09-10 KST.
|
||||
- 현재 판정: **FEAST 잔차 초과 해소, 외부 Value 비교와 기능 acceptance 미완료**.
|
||||
아래 2026-09-10 결과가 최신이며 2026-09-09 trace 실행은 당시 evidence로 보존한다.
|
||||
- 기준: [프로젝트 지침](../../AGENTS.md), [PRD](PRD.md), [ADR](ADR.md),
|
||||
[정식화](formulation.md), [수치 controls](numerical-review-controls.md), [I/O](io.md).
|
||||
- 독립 검토: [수치](implementation-numerical-review.md),
|
||||
[S3 정적 계약](implementation-numerical-review-s3-static.md),
|
||||
[물리](implementation-physics-review.md).
|
||||
[물리](implementation-physics-review.md), [FEAST 종료 변경](implementation-feast-residual-review.md).
|
||||
|
||||
## 2026-09-10 FEAST residual stopping 변경 결과
|
||||
|
||||
[ADR-011](ADR.md#mfe2-adr-011--feast-residual-stopping과-s3-후속-분리)의 사용자 승인에 따라 backend의 C-index
|
||||
`fpm[5]`만 `1→0`으로 변경하고 HDF5 writer의 실제 control 검증도 `0`으로 맞췄다.
|
||||
`fpm[2]=12`, `[3]=20`, seed/thread/구간/capacity/실패 정책과 모든 독립 tolerance는 유지했다.
|
||||
S3, K/M·질량 축소·회복 수식, reference artifact는 변경하지 않았다.
|
||||
|
||||
새 테스트는 실제 backend snapshot과 저장한 HDF5의 `[5]=0`을 확인하고 trace 값으로
|
||||
변조한 candidate를 거부하면서 기존 최종 파일을 보존하는지 검사한다. 변경 전 `[5]=1`
|
||||
때문에 두 검사가 실패한 뒤 최소 source 수정으로 통과했다.
|
||||
|
||||
| 실행 | 결과 |
|
||||
| --- | --- |
|
||||
| 변경 전 backend/HDF5 focused CTest | 2/2 실패, `[5]=1` 확인. `.harness/feast-residual-red.log` |
|
||||
| MSVC x64 Debug 3개 test target build | exit0, 새 compiler warning 없음 |
|
||||
| 변경 후 backend/writer/원본 reference focused CTest | 12개 중 11 통과, exit1. 영·혼합 영·반복·근접 고유값, thread 복원, control readback/변조 거부 통과. 원본은 해석 성공 후 외부 Value 비교에서 실패 |
|
||||
| `python scripts/execute.py` | build 성공, runner exit1 / CTest exit8. **395개 중 394 통과**, 원본 Value reference 1개 실패. 178.42초; unit320, integration42, reference33 |
|
||||
| 공식 HDF5 read-only 추출 | 전체 c개 metric과 실제 controls·backend call·10개 Value를 확인. Focused와 full 실행의 modes/vectors/eigenpair_checks/base_fpm dataset bytes 동일 |
|
||||
|
||||
전체 실행은 `.harness/feast-residual-full-run.log`, 상세 CTest는
|
||||
`.harness/feast-residual-full-ctest.log`, focused는 `.harness/feast-residual-focused.log`다.
|
||||
Read-only 추출 스크립트와 JSON은 최종적으로 ignored build directory에 보관했다.
|
||||
재현 명령은 `uv run --with h5py python .harness/build-ninja-msvc-debug/extract_feast_residual.py`이며,
|
||||
그 directory의 `feast-residual-metrics.json`과 `feast-residual-full-metrics.json`이 각 실행의 기록이다.
|
||||
개인 환경·추출 스크립트·기계 생성 로그/결과는 커밋하지 않는다. 이 작업에서 Python Harness suite는 실행하지 않았다.
|
||||
|
||||
원본 [결과 HDF5](../../reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine_results.h5)는
|
||||
이번 실제 해석이 새로 생성한 공식 sibling output이다. 생성과 closed-file self-check는 성공했고,
|
||||
기존 외부 INP/TXT의 실행 전후 bytes는 reference test에서 보존을 확인했다.
|
||||
|
||||
| Metric | 새 결과 |
|
||||
| --- | ---: |
|
||||
| 요청 N / 계산 c / m0 | 10 / 22 / 33 |
|
||||
| Count / solve calls | 25 / 1 |
|
||||
| FEAST info / loop | 0 / 6 (기존 trace는 4회) |
|
||||
| 전체 c 최대 rho_B | `1.605467212112365e-13` |
|
||||
| 최대 original-free eta_r / whitened eta_w | `9.981033437726324e-15` / `7.315529163435965e-15` |
|
||||
| eta_gram / max_eta_orth | `1.3777964580680282e-15` / `1.6958335496991244e-15` |
|
||||
| 최대 backend_res | `8.280018892001454e-13` |
|
||||
| epsout (trace 변화 진단량) | `2.4227135616446226e-17` |
|
||||
|
||||
전체 22개는 각각 독립 `1e-10` 기준을 통과한다. 기존 실패 column20의
|
||||
`rho_B=1.48674481038207483e-10` 대비 같은 column의 잔차가 약926배 감소했다.
|
||||
기존 trace 진단에서 추출한 첫10개 Value 대비 새 Value의 최대 상대 변화는 약`2.74e-14`다.
|
||||
따라서 이 개선은 고유쌍의 대수적 잔차 개선이며 외부 reference와의 일치를 보장하지 않는다.
|
||||
|
||||
| Mode | FESA Value (표시 반올림) | Abaqus Value | 상대오차 / singleton RMS (%) |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| 1 | 218267.149475 | 219507 | 0.564834 |
|
||||
| 2 | 873571.591115 | 885523 | 1.349644 |
|
||||
| 3 | 873571.591115 | 885523 | 1.349644 |
|
||||
| 4 | 1816890.360227 | 1855340 | 2.072377 |
|
||||
| 5 | 2669030.373076 | 2740230 | 2.598308 |
|
||||
| 6 | 2703557.194039 | 2775150 | 2.579781 |
|
||||
| 7 | 4013818.213002 | 4149410 | 3.267737 |
|
||||
| 8 | 4013818.213002 | 4149410 | 3.267737 |
|
||||
| 9 | 6446840.913563 | 6733790 | 4.261331 |
|
||||
| 10 | 6446840.913563 | 6733790 | 4.261331 |
|
||||
|
||||
모드별 singleton family와 [공통 tolerance](../TOLERANCE.md)를 그대로 적용했다.
|
||||
모든 행은 상대오차5% 이내지만 Mode2–10은 RMS1%를 초과하여 blocking FAIL이다.
|
||||
이는 이전에는 residual 실패 때문에 도달하지 못했던 비교 결과다. 원인은 이번 변경에서
|
||||
확정하지 않았으며 질량·drilling 정식화나 tolerance를 결과에 맞춰 수정하지 않았다.
|
||||
독립 수치 검토는 이번 종료 제어 변경을 PASS로 판단했으나 외부 acceptance는 FAIL로 구분했다.
|
||||
S3의 알려진 실패와 아래 기존 세부 coverage 제한도 남는다.
|
||||
|
||||
## 2026-09-09 trace stopping 구현 이력
|
||||
|
||||
## 구현된 경로
|
||||
|
||||
@@ -95,11 +164,12 @@ Newton tangent/objectivity/energy/rollback와 pressure synthetic 검사는 초
|
||||
full-row-sum mutation, C06 이종 section 공유 node mass assembly, C21/22의 vendor-status/
|
||||
budget/allocation 실패 주입 전체, C24의 close/replace 실패 주입 전체는 추가 evidence가 필요하다.
|
||||
|
||||
## 사용자 결정이 필요한 후속 작업
|
||||
## 2026-09-09 당시 후속 제안
|
||||
|
||||
현재 요구·정식화·NR·I/O의 수치를 구현 결과에 맞춰 조용히 바꾸지 않는다.
|
||||
[프로젝트 지침](../../AGENTS.md)의 Physics/지원 범위/acceptance 변경 및 미해결 필수 계약 충돌
|
||||
경계에 따라 다음 재검토를 제안한다. 아래는 **미승인 제안**이다.
|
||||
경계에 따라 다음 재검토를 제안했다. 당시에는 **미승인 제안**이었으며,
|
||||
이후 1번의 residual stopping만 ADR-011로 승인·실행했다. 2번 S3는 사용자 요청으로 후속 검토한다.
|
||||
|
||||
1. `rho_B<=1e-10`과 전체 c 검증을 유지하면서 FEAST 종료 제어를 재검토한다.
|
||||
`fpm[5]=0` residual stopping은 검토 후보이며, actual runtime·zero/repeated/endpoint/
|
||||
|
||||
Reference in New Issue
Block a user