124 lines
8.6 KiB
Markdown
124 lines
8.6 KiB
Markdown
# MITC4 eigen 구현 및 실행 결과
|
||
|
||
- Feature: `mitc4-shell-feast-eigen2`; Owner: 메인 assistant; 2026-09-09 KST.
|
||
- 판정: **구현 진행분 보존, 기능 acceptance 미완료**. 시간 제한으로 중지한 작업이 아니다.
|
||
- 기준: [프로젝트 지침](../../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).
|
||
|
||
## 구현된 경로
|
||
|
||
`DENSITY/FREQUENCY` 입력과 source Step-2/N → 별도 Frequency Domain/step →
|
||
27점 consistent moments와 derived nodal lumped mass → 실제 global BC 우선 null/positive
|
||
분해 → nodal Cholesky whitening과 sparse congruence → 실제 MKL FEAST → 전체 c개 검증 →
|
||
N개 mass-normalized global vectors와 scalar → additive eigen HDF5와 closed-file self-check를 연결했다.
|
||
Prepared analysis와 application은 frequency를 독립 procedure/state/writer로 dispatch한다.
|
||
|
||
초기 drilling scale은 physical rotary 8개 diagonal의 zero를 포함한 평균으로 바꿨다.
|
||
기존 nonlinear trial/commit 상태 코드는 변경하지 않았다. 성공·실패 때 source identity를 보존하고,
|
||
실패한 solve/validation/candidate로 기존 최종 HDF5를 교체하지 않는다.
|
||
TXT comparator는 `Value`만 비교하며 같은 값의 별도 mode ID를 유지한다.
|
||
|
||
## 실행 evidence
|
||
|
||
개인 설정의 `mfe-workspace-msvc-ninja-debug` preset, CMake/MSVC x64 Debug,
|
||
MKL 2026.1 ILP64를 사용했다. 설치 경로·개인 preset은 커밋하지 않는다.
|
||
|
||
| 실행 | 결과와 의미 |
|
||
| --- | --- |
|
||
| `cmake --build --preset mfe-workspace-msvc-ninja-debug --target fesa_unit_tests fesa_integration_tests fesa_reference_tests` | exit 0, `/W4 /WX` 빌드 |
|
||
| 초기 `python scripts/execute.py` | exit 1, 392개 중 387 통과·5 실패. 입력 회귀 4개와 원본 eigen 1개 |
|
||
| 입력·FEAST·procedure·writer focused CTest | 수정 후 41/41 통과, exit 0. 기존 입력 4개 회귀 포함 |
|
||
| 수정된 Householder/count 이후 원본 eigen + FEAST focused CTest | 8/9 통과, 원본 eigen 실패, exit 1 |
|
||
| 최종 `python scripts/execute.py` | build exit 0, runner exit 1 / CTest exit 8. **395개 중 394 통과·원본 eigen 1개 실패**, 155.31초. Unit 320개, integration 42개, reference 33개 |
|
||
|
||
최종 전체 실행 로그는 `.harness/eigen2-full-run.log`, CTest 상세는
|
||
`.harness/eigen2-full-ctest.log`에 남긴다. 생성 로그·결과는 source와 함께 커밋하지 않는다.
|
||
Test discovery의 CMake 4.4 POST_BUILD 임시 JSON 충돌을 확인해 세 target을 `PRE_TEST`로
|
||
변경했다. 초기 392개 CTest name/실행 binary 대응을 실제 `--gtest_list_tests`와 대조했고
|
||
누락·중복·다른 binary로의 등록이 없었다. 이후 추가한 3개를 포함한 최종 395개도 같은 방법으로 확인했다.
|
||
|
||
HDF5의 duplicate model node ID가 self-check를 통과하는 실패를 재현한 뒤 source/model
|
||
compound member의 정확한 type/value readback을 추가했다. 수정된 검사에서 같은 변조는 거부됐다.
|
||
NaN vector, 불일치 scalar/cluster/constraint, 악화된 residual/rcond/Gram의 candidate 거부와
|
||
이전 최종 파일의 byte 보존도 확인했다. 이 검사는 실제 물리 residual 계산을 대신하지 않는다.
|
||
|
||
## 원본 eigen의 차단 결과
|
||
|
||
실행한 파일은 [원본 INP](../../reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine.inp)다.
|
||
원본 INP/TXT의 실행 전후 bytes를 비교해 보존했다. 제외된 예제의 원본·복사본·cache는 사용하지 않았다.
|
||
|
||
| 관찰 | 실제 값 |
|
||
| --- | ---: |
|
||
| node / element | 729 / 676 |
|
||
| full / free / null / finite DOF | 4374 / 3750 / 625 / 3125 |
|
||
| 요청 N / 계산 c / m0 | 10 / 22 / 33 |
|
||
| 총 backend 호출 / 마지막 solve ordinal | 26 / 25 |
|
||
| FEAST info / loop | 0 / 4 |
|
||
| 실패 solver column | 20, 즉 계산된 21번째 모드 |
|
||
| mu | 4.81673637615627741e-03 |
|
||
| full CSR rho_B | 1.48674481038207483e-10 |
|
||
| FEAST가 받은 upper 대칭 행렬의 rho_B | 1.48674481542089335e-10 |
|
||
| full/upper action 차이 norm | 1.38724134018909290e-17 |
|
||
| backend res / epsout | 7.75636151025973760e-10 / 2.82488401287762986e-14 |
|
||
|
||
`rho_B<=1e-10`은 전체 c개에 적용된다. 요청한 10개 밖의 모드라는 이유로 생략하지 않았다.
|
||
초기 Householder의 cancellation을 수정하고 positive R·relative pivot·Gram를 확인한 뒤에도
|
||
실패가 재현됐다. 물리 모드 복원 전에 실패하며 upper/full 차이로 설명되지 않는다.
|
||
FEAST의 `info=0`이나 trace stopping은 별도 residual 기준 통과가 아니다.
|
||
[Intel parameter 설명](https://www.intel.com/content/www/us/en/docs/onemkl/developer-reference-c/2026-0/extended-eigensolver-input-parameters.html)에
|
||
따르면 현재 고정 `fpm[5]=1`은 trace stopping이며, 이번 4회 종료는 maximum20 소진이 아니다.
|
||
|
||
따라서 원본 모델의 **성공 HDF5 및 10개 Value의 외부 tolerance 비교는 미완료**다.
|
||
기존/복사 결과를 가져와 fresh 통과로 바꾸지 않았고 tolerance·seed·FEAST controls를 바꾸지 않았다.
|
||
|
||
## 유지 회귀와 남은 검증 범위
|
||
|
||
Retained shell/shellNL/linear-limit의 fresh 변위 reference, force/moment/free residual,
|
||
Newton tangent/objectivity/energy/rollback와 pressure synthetic 검사는 초기 전체 실행에서 통과했다.
|
||
수치 비교 통과는 아래 물리 문제를 덮지 않는다.
|
||
|
||
- **S3 상위 계약 충돌:** direct pencil의 `lambda=10369/450`,
|
||
`thetaZ=7500/10369`와 full `Kq-F`의 회전 공변성은 통과했다. 그러나 public static 실행은
|
||
drilling에 의한 정확한 미평형 모멘트 때문에 실패한다. 별도 재현 테스트의 성공은 이 실패를
|
||
올바르게 검출했다는 뜻이며, 지원 범위의 정적 해석 성공이 아니다.
|
||
- **기존 PE-IMP-01:** nonlinear 굽힘 단면력 복구가 stress 적분과 불일치한다.
|
||
`t=0.5`에서 약 2배이며 해당 nonlinear source는 HEAD 대비 변경되지 않았다.
|
||
물리 보고서에 근거와 기존 구현 owner를 남겼다. 현재 작업에서 별도 수식 수정은 하지 않았다.
|
||
- Mass flat/warped scalar oracle, row moments, Jensen energy, m1/2/4 mesh work,
|
||
partial-BC complete K/ML, rigid modes, off-diagonal whitening, near-aligned conditioning,
|
||
rho×4 및 length×1024 단위 변환, actual FEAST known/zero/repeated/close-Givens spectra는 검사했다.
|
||
**27개 case의 모든 세부 관찰을 완료했다고 주장하지 않는다.**
|
||
- 특히 E2-C02의 모든 warped Ck 독립 적분, C03 perturbation 전파, C05 rational Q+shift와
|
||
full-row-sum mutation, C06 이종 section 공유 node mass assembly, C21/22의 vendor-status/
|
||
budget/allocation 실패 주입 전체, C24의 close/replace 실패 주입 전체는 추가 evidence가 필요하다.
|
||
|
||
## 사용자 결정이 필요한 후속 작업
|
||
|
||
현재 요구·정식화·NR·I/O의 수치를 구현 결과에 맞춰 조용히 바꾸지 않는다.
|
||
[프로젝트 지침](../../AGENTS.md)의 Physics/지원 범위/acceptance 변경 및 미해결 필수 계약 충돌
|
||
경계에 따라 다음 재검토를 제안한다. 아래는 **미승인 제안**이다.
|
||
|
||
1. `rho_B<=1e-10`과 전체 c 검증을 유지하면서 FEAST 종료 제어를 재검토한다.
|
||
`fpm[5]=0` residual stopping은 검토 후보이며, actual runtime·zero/repeated/endpoint/
|
||
실패 controls 검증과 독립 NR 이후 채택 여부를 결정한다. Maximum loop 증가만으로
|
||
이번 원인이 해결된다고 가정하지 않는다.
|
||
2. S3에서 승인된 drilling 정식화·full residual reaction·공간 평형·부분 global rotation BC를
|
||
함께 만족시키는 계약을 formulation/NR로 다시 정리한다. 임의 torque 제거·평균·tolerance
|
||
완화 또는 새 unsupported 분류로 성공처럼 처리하지 않는다.
|
||
3. 수정 계약이 확정되면 영향받는 mass-null reduction/정적·비선형/eigen 검증과 위 미완료
|
||
case들을 완성하고 원본 HDF5→Value 비교 및 전체 검증을 다시 수행한다.
|
||
|
||
기존 Feature/phase의 사용자 변경 16개는 시작 시 raw Git object hash와 동일했다.
|
||
공통 AGENTS/PRD/ADR, reference INP/TXT/CSV와 개인 build 설정은 커밋 범위에서 제외한다.
|
||
|
||
## Git 기록
|
||
|
||
- `e74ac24 docs: record eigen2 implementation scope and verification plan`
|
||
- `22c9d44 feat: add eigen2 frequency pipeline and fail-closed validation`
|
||
|
||
구현 commit은 source·test·CMake 39개 파일의 진행분이며 acceptance 완료 commit이 아니다.
|
||
이 결과 및 독립 검토 문서는 별도 `docs:` commit으로 보존한다. Push는 수행하지 않았다.
|