# 외부 reference projection과 tolerance 적용 - Feature ID: `mitc4-shell-feast-eigen2`; Owner: `numerical-review-agent`; revision `r2` (2026-09-10 첫 구현의 외부 Value 5% 승인). - 기본 보고서: [numerical-review](numerical-review.md#numerical-review); 기준: [requirements](requirements.md#requirements), [TOLERANCE](../TOLERANCE.md). - 판정: 승인된 비교 계약 갱신. 실제 최신 판정은 [첫 구현 검토](implementation-review.md#implementation-first-version-review)에 기록한다. ## Eigen의 지정 원본과 logical identity Input은 [shellNL-eigen-meshfine.inp](../../reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine.inp), reference는 같은 폴더의 [shellNL-eigen-meshfine eigenvalues.txt](../../reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine%20eigenvalues.txt)다. 이름·내용·확장자를 보존한다. 공식 FESA 결과는 입력 lexical sibling `shellNL-eigen-meshfine_results.h5`이며 exact dataset path·metadata는 I/O 소유다. Actual backend MKL FEAST, actual mass derived nodal block lumped인 결과만 비교한다. 이번 원본 TXT 직접 읽기에서 각 행은 `Frame: Mode i: Value = ... Freq = ... (cycles/time)`였다. TXT 자체에는 step이 없다. 동일 `.inp`의 **유일한 frequency step `Step-2`**가 step authority이며 필수 count는 해당 `*FREQUENCY`의 N=10이다. Filename의 `shellNL`이나 Step-2라는 이름에서 preload를 추론하지 않는다. Source step이 유일하지 않으면 임의 step 선택으로 비교하지 않는다. Stable logical row key는 `(reference case, source step name=Step-2, modal frame=Mode i, mode index=i, logical quantity=eigenvalue, component=Value)`다. Matrix equation index나 행 위치를 identity로 쓰지 않는다. `i=1..10`의 오름차순 결과와 label로 직접 대응한다. 같은 Value를 갖는 다른 mode는 distinct identity다. 표시 precision이 같다는 이유로 exact multiplicity를 단정하거나 average/deduplicate하지 않는다. | Modal frame / mode | 원본 Value `[T^-2]` | | --- | ---: | | 1 | 219507 | | 2 | 885523 | | 3 | 885523 | | 4 | 1855340 | | 5 | 2740230 | | 6 | 2775150 | | 7 | 4149410 | | 8 | 4149410 | | 9 | 6733790 | | 10 | 6733790 | ## Family의 독립 결정 공통 정책은 같은 model/step/**frame**/logical quantity/차원/좌표/판정 영향만 한 family에 허용한다. 원본은 Mode i 각각을 frame으로 명시하므로 `eigenvalue:Step-2:Mode-i`라는 **10개 singleton family**를 정의한다. 각각 scalar invariant 좌표, 단위 차원 `T^-2`, component `Value`, `blocking`이다. 모든 mode를 한 frame으로 합치는 것은 원본 frame 의미를 삭제하며 낮은 mode의 scale을 높은 mode로 바꾸므로 채택하지 않는다. 이는 과거 singleton 결론을 자동 승계하거나 결과 오차를 본 뒤 고른 family가 아니다. 2026-09-10 사용자는 “5% 이내면 첫 구현이므로 Abaqus와의 고유치 정확도 향상은 추후에 진행하겠습니다. 구현을 마무리해주세요.”라고 승인했다. [Feature ADR](ADR.md)와 [공통 TOLERANCE의 한정 정책](../TOLERANCE.md)에 따라 `mitc4-eigen-first-implementation` profile을 이 Feature의 외부 `Value`에만 적용한다. 각 family의 S=abs(reference Value), B=.01S와 행별 relative limit .05는 유지하며 relative RMS limit을 .05로 적용한다. 이번 양의 singleton에서 RMS=relative error이므로 각 Value는 **상대오차 5% 이하(inclusive)**일 때 통과한다. 행 판정과 RMS를 각각 기록하고 profile ID·실제 RMS 한계 .05를 보고한다. Near-zero, zero-reference-scale의 exact-zero, named failure와 identity/finite 전검사는 공통 문서 그대로다. 다른 Feature·static family의 RMS .01, 이 Feature의 전체 c개 내부 검증 1e-10은 변경하지 않는다. 기존 r1의 singleton RMS1% 실패 기록은 당시 판정으로 보존한다. 이번 승인은 첫 구현의 외부 정확도 기준 변경이며 S3 해결·다른 필수 검증 면제·Abaqus 내부 알고리즘 동등성 승인이 아니다. Frequency 변환, Freq fitting, mode shapes/변위/회전/stress/reaction은 새 eigen 외부 gate가 아니다. File/dataset/component/schema 누락, wrong step/frame/quantity/backend/mass variant, missing/extra/duplicate mode, 비유한 Value 또는 FESA mandatory 수치는 tolerance **전에** 실패한다. TXT row 재정렬은 허용하되 모든 nonempty 행의 schema를 파싱하고 원본 Value를 수정하지 않는다. Required scalar Value의 finite 검사를 별도 Freq 비교로 대신하지 않는다. Freq는 schema/의미 확인용이며 수치 acceptance에 넣지 않는다. 모든 family/row/error/scale/RMS/판정의 순서는 결정적이다. ## 남는 static portfolio 아래는 [새 requirements](requirements.md#requirements)의 기존 acceptance 보존이며 eigen family와 섞지 않는다. | 역할 | 기존 원본과 비교 | | --- | --- | | `shell-s4`, `shell-s4-linear-limit` | [shell.inp](../../reference/shell/shell.inp), [shell displacements.csv](../../reference/shell/shell%20displacements.csv); 같은 fresh solve 재사용 가능하나 두 역할 evidence 구분 | | `shellnl-s4-final` | [shellNL.inp](../../reference/shellNL/shellNL.inp), [shellNL displacements.csv](../../reference/shellNL/shellNL%20displacements.csv); factor-one accepted state | | Nonlinear local reaction review | [shellNL reactions.csv](../../reference/shellNL/shellNL%20reactions.csv); RF1/2/3, physical spatial RM1/2 source-key·finite·inventory·error 보고는 review-only | Static U1/U2/U3 global length는 blocking, UR1/UR2/UR3의 기존 fixed-initial global rotation 의미는 warning-only다. 같은 case/step/frame/차원/좌표/impact별 공통 family와 source instance/node/component identity를 유지한다. Local reaction review는 내부 force/moment balance·free residual blocking을 대체하지 않으며 RM3/stress를 새 gate로 추가하지 않는다. 제외된 네 예제는 원본·복사·cache·과거 결과로도 재사용하지 않는다. 정확한 제외 목록의 권위는 requirements다. 제외 pressure 예제의 fresh 외부 coverage는 없으며 synthetic pressure kernel/하중/평형/schema/comparator는 유지한다. 이번 원본 열람은 지정 eigen 두 파일에 한정했고 static 파일은 경로 존재만 확인한다. Solver/reference pass 주장은 없다.