# 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는 수행하지 않았다.