8.6 KiB
MITC4 eigen 구현 및 실행 결과
- Feature:
mitc4-shell-feast-eigen2; Owner: 메인 assistant; 2026-09-09 KST. - 판정: 구현 진행분 보존, 기능 acceptance 미완료. 시간 제한으로 중지한 작업이 아니다.
- 기준: 프로젝트 지침, PRD, ADR, 정식화, 수치 controls, I/O.
- 독립 검토: 수치, S3 정적 계약, 물리.
구현된 경로
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다. 원본 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 설명에
따르면 현재 고정 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와 fullKq-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의 수치를 구현 결과에 맞춰 조용히 바꾸지 않는다. 프로젝트 지침의 Physics/지원 범위/acceptance 변경 및 미해결 필수 계약 충돌 경계에 따라 다음 재검토를 제안한다. 아래는 미승인 제안이다.
rho_B<=1e-10과 전체 c 검증을 유지하면서 FEAST 종료 제어를 재검토한다.fpm[5]=0residual stopping은 검토 후보이며, actual runtime·zero/repeated/endpoint/ 실패 controls 검증과 독립 NR 이후 채택 여부를 결정한다. Maximum loop 증가만으로 이번 원인이 해결된다고 가정하지 않는다.- S3에서 승인된 drilling 정식화·full residual reaction·공간 평형·부분 global rotation BC를 함께 만족시키는 계약을 formulation/NR로 다시 정리한다. 임의 torque 제거·평균·tolerance 완화 또는 새 unsupported 분류로 성공처럼 처리하지 않는다.
- 수정 계약이 확정되면 영향받는 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 plan22c9d44 feat: add eigen2 frequency pipeline and fail-closed validation
구현 commit은 source·test·CMake 39개 파일의 진행분이며 acceptance 완료 commit이 아니다.
이 결과 및 독립 검토 문서는 별도 docs: commit으로 보존한다. Push는 수행하지 않았다.