Files
FESADev/docs/mitc4-shell-feast-eigen/numerical-review-cases.md
T
2026-09-06 04:27:42 +09:00

123 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MITC4 eigen 필수 verification portfolio
- Feature ID: `mitc4-shell-feast-eigen`
- Owner: `numerical-review-agent`
- Input contract revision: `r2`
- 기본 보고서: [numerical-review.md](numerical-review.md)
- 수치 기준: [controls C1~C7](numerical-review-controls.md)
아래는 Planning이 RED→observed failure→GREEN→focused/full VERIFY에 연결할 **필수
logical cases**다. C++ test 이름·파일과 final schema는 각 owner가 정한다. 새로운 reference
생성/수정 없이 synthetic test inputs는 tests의 승인 소유 경로에 둔다. Expected value를
production mass/reduction/FEAST 함수의 재호출로 만들지 않는다. 이 문서는 실행 결과가 아니다.
## P1. Mass·좌표·조립
| Case ID | 입력·독립 oracle·필수 관찰 | 판정 |
| --- | --- | --- |
| MFE-C01 | Affine rectangle `4×2`, rho=3, t=1/2, parallel unit director. M10: C0=`(rho t A/36)*[4,2,1,2;...]`, C1=0, C2=t²C0/12, node m=3, h=0, j=1/16. Full24와 physical20·각 translation energy·tangent inertia/drill null을 검사. rho×4, t×2의 C0/C2 scaling도 검사 | C2 모든 관련 scalar/matrix/rank 기준 |
| MFE-C02 | [r1 rational warped/director-varying fixture](numerical-review-evidence.md#독립-mass-oracle)의 X,d,rho,t와 exact coefficient/row/first-moment oracle. Independent coefficient integration 또는 별도 고차 direct integration을 사용. C1을 강제0, 2-point mass, flat C2 비례식 mutation은 실패해야 함. 같은 shape/J production 호출만으로 oracle 구성 금지 | C2-02~10; 기존 geometry predicate를 먼저 적용. Custom-director kernel fixture를 input explicit normals 지원으로 확대하지 않음 |
| MFE-C03 | Consistent/moment snapshot을 유지하고 row-sum→lumped 연결 검사. C1/C2의 controlled symmetric perturbation이 원 mass와 derived block에 모두 반영됨. Independent nodal `integral rho Ni Gi^T Gi` 및 고정 velocities의 pairwise Jensen work와 비교. Uniform translation, drill-only, nonuniform translation, tangent rotation을 각각 검사 | C2-02~10; nonnegative kinetic energy, zero branch 및 총질량·centroid 보존 |
| MFE-C04 | Square `[-1,1]^2`, rho=t=1, uniform m×m grid m=1,2,4, velocity `(x,0,0)`, theta=0. Direct polynomial gives `q^T MC q=4/3`, `q^T(ML-MC)q=8/(3m²)`. Independent constant velocity의 두 energy는 모두 총질량4 | Exact sequence에 C2-03/04/06. 이는 이 smooth field의 lumping error 검산이며 일반 spectrum 수렴 차수 약속 아님 |
| MFE-C05 | C01/C02의 global proper rotation과 origin translation. Q는 rational proper rotation `[[0,-1,0],[3/5,0,-4/5],[4/5,0,3/5]]`, shift=(7,-3,5). Geometry/director/frame/mass를 새로 계산. Scalar full-row lumping이 실패하는 d=(1,1,1)/sqrt3도 사용 | 두 mass congruence와 kinetic work C2-02; moment는 common Xref, drilling null 보존 |
| MFE-C06 | 공유 node·서로 다른 rho/thickness section의 shell patch. Element 순서와 source labels가 다른 입력의 대응 결과, sequential/병렬 contribution 및 stable reduction을 검사. 실제 constraints와 source indices를 독립 expected map으로 대조 | Exact structure/order/identity, C2 matrix equality. Input permutation 자체와 fixed source-order determinism을 구분 |
| MFE-C07 | rho=0/negative/NaN/Inf/missing/duplicate/unresolved/dependent, invalid t/material, inverted/degenerate/기존 미지원 geometry 및 27점 중 invalid evaluation을 각각 거부. Density가 없는 기존 static case는 허용 | Semantic/geometry/model failure, 상태·output 미반영. Mass zero 우회 금지 |
## P2. Stabilization·partial BC·정적 영향
| Case ID | 입력·독립 oracle·필수 관찰 | 판정 |
| --- | --- | --- |
| MFE-C08 | [NR-MFE-001 원 rectangle](numerical-review-evidence.md#nr-mfe-001-직접-계산-반례)와 Z45° 회전. S1을 새 frame에서 계산. Expected kd=19/4800, Mff=3/50, Kff=10369/7500, lambda=10369/450. 모든 DOF fixed, node1 URZ만 free. Old min rule은 이 case를 실패시켜야 함 | Complete K·두 mass·kd congruence C2, exact eigenvalue C3-07, 원 free residual. Full-free/clamp 대체 금지 |
| MFE-C09 | C08에 admissible moment `m=(5/3)M0 b`, M0=1, b=(-4/5,0,3/5). 각 geometry에서 load도 변환. Expected thetaZ=7500/10369. 원 full `Kq-F`의 모든 reaction 성분을 회전해 비교 | C7 static response/full residual/reaction covariance, physical moment projection<=1e-12 |
| MFE-C10 | Eight diagonal inventory `[0,0,2,4,0,6,0,4]`이면 kref=2,kd=.002. All-zero, 한 negative, NaN/Inf는 failure. DBL_MAX 근방 양성 inventory는 scaled mean이 가능한 경우 finite; subnormal kd underflow는 failure. Independent node별 tangent changes O angles=(0,pi/6,pi/4,pi/3)에서도 trace 동일 | C2-11/12; 분모8 고정, clamp/positive-only mean/min 금지 |
| MFE-C11 | Free affine element와 smooth patch의 세 rigid translation·세 tangent-projected rigid rotation. Pure drill은 별도 4개. Physical K20 rank14, consistent physical mass rank20, complete K24 rank18/nullity6; positive-space dimension20. Full massless reduction 후 six near-zero physical modes가 남음 | C2/C3 analytic rank·rigid K action·mass Gram; drill에 관성을 주거나 physical zero mode 삭제 금지 |
| MFE-C12 | 기존 nonlinear fixture에서 초기 scale=S1, trial/commit/rollback에 exact unchanged. 기존 objective gamma potential의 first/second directional variations, finite rigid motion, linear physical limit, physical recovery 제외와 reaction conversion | [기존 nonlinear 계약](../nonlinear-static-newton-raphson/numerical-review.md) 및 C7. Trial scale 재선정·nonlinear Hessian SPD·linear Td entry equality를 요구하지 않음 |
## P3. 실제 BC·mass whitening·FEAST
| Case ID | 입력·독립 oracle·필수 관찰 | 판정 |
| --- | --- | --- |
| MFE-C13 | Nodal M6 h=0,m=j=1의 manufactured block. d=(0,0,1), d=(3/5,0,4/5), d=(1,1,1)/sqrt3에 full free, URX fixed, URZ only free, all rotations fixed, drill-only free, fully constrained 조합. 조합은 Cartesian product가 아니라 지원되는 global component BC로 표현 가능한 경우만 적용하며, drill-only free는 d=(0,0,1)에서 URZ만 free이고 나머지5 DOF constrained인 경우로 한정한다(MPC 없음). Expected null은 constrained director 성분의 exact-zero 교집합. Mixed nodes에는 local finite rank0가 있어도 다른 finite node 보존 | E2 analytic dimension, C2-07~14, recovered source mask. Global n=0 또는 N>n은 failure |
| MFE-C14 | `d=(2p/(1+p²),0,(1-p²)/(1+p²))`, p=1/2000와1e-8. m=j=1,h=0; URX만 fixed, 세 translation과 URY/URZ free. 첫 case positive rank5와 conditioning pass; 두 번째는 여전히 analytic rank5이나 conditioning/Cholesky failure. p=0은 정확한 null1 | C2 rcond cutoff의 양옆 및 exact equality branch. Tiny positive mass를 rank4로 바꾸는 구현은 실패 |
| MFE-C15 | 독립 singular pencil K=[[6,2],[2,4]], M=diag(2,0)에서 finite lambda=5/2,z=-p/2. 단순 삭제의3은 오답. Production shell projection path에 nonzero Kpz 또는 nonpositive Kzz 주입 시 실패. 일반 dense Schur 기능을 구현할 필요 없음 | Original residual oracle와 E3 admissibility rejection, 임의 fallback 금지 |
| MFE-C16 | SPD nodal whitening `M=[[2,1],[1,2]]`, `K=[[6,4],[4,6]]`의 eigenvalues 2,10/3. Dense inverse 없이 congruence·복원·original-M normalization. 같은 eigenvectors에 틀린 lambda·mass variant·null coordinate/constraint를 각각 주입 | C2/C3, injected wrong pairing/mass/full residual이 실패해야 함 |
| MFE-C17 | Actual FEAST diagonal known spectra: n1 λ=2,N1; `[0,0,0,2,5,9]`에 N1/4/6; `[1,2,4,8]` N1/2/4; n4 all-zero N1/4. 요청 N은 별도 input count이고 count output과 분리 | C3/C5, lowest N/multiplicity/zero/N=n, count/guard/solve history; mock만으로 대체 금지 |
| MFE-C18 | Actual FEAST n64 spectrum: 앞40개 λ=1, 나머지 λ=2..25, N1 및N41. n4 tight spectrum `[1,1+2^-28,1+2^-27,8]`, N2. B=Q diag(lambda) Q^T의 dense-pattern test도 추가; Q는 고정 Givens(pi/6,pi/4) 곱 | C3-07/08, repeated group>N에서 c/m0가 N보다 커짐, 전체 c Gram, partial cluster merge 금지 |
| MFE-C19 | Actual backend에 `[ -2,0,3 ]`, `[ -1e-12,0,1 ]`. Backend raw negative 보존; procedure는 첫 spectrum의 유의한 음수 실패, near-zero negative는 classification·frequency-validity/raw 보존. Exact `±tau_zero*s` 및 그 양옆은 arithmetic/injection 경계 test | C3 분류와 실패 보존. 부적합 물리 K를 accepted shell이라고 주장하지 않음 |
| MFE-C20 | Density×4에서 두 M×4, λ/4, normalized vector amplitude 1/2; C08과 simple/repeated known-spectrum fixture 사용. 길이×1024, rho/1024³,E/1024,t×1024의 일관 단위 변환에서도 λ 불변 | C2/C3/C4; baseline s·same physical BC, 단위 mixing/floor 검출 |
| MFE-C21 | Endpoint=eigenvalue collision, prefix0 반환, nonmonotone count, total!=n, m!=c, info1/2/3/4/-1..-5/200..202·invalid fpm, missing/duplicate/nonfinite CSR, B-not-SPD를 각각 주입. QR rank/Gram failure·insufficient capacity·nonfinite pair·wrong residual도 주입 | C5의 정확한 retry 대상·budget/최종 failure. Error를 empty interval 또는 부분 성공으로 바꾸지 않음 |
| MFE-C22 | 실제 operator에 near endpoint/repeated cluster의 C5 history 검증과 adapter-mock count-call512/solve-call3 최대 경계, budget 직전 certified bracket fallback. Index/nnz+1/n²/n*m0 overflow 및 allocation 실패 injection | 정수 exact checks, 유한 종료, controlled failure. 큰 메모리를 실제 할당해 실패시킬 필요 없음 |
MFE-C17/18 actual FEAST case에서 bounds를 expected eigenvalues로 설정하지 않는다.
Production E6/C5 search를 실행하고 independent diagonal spectrum의 prefix count와
postsolve 결과로 history를 검증한다. Synthetic rotated pencil은 sparse CSR에 전 dense
pattern을 저장할 수 있지만 다른 eigensolver로 expected values를 계산하지 않는다.
False count/solve success가 lowest-N를 검증하지 못하는 mock도 포함해 missing low eigenpair를
Gram/residual만으로 성공시키는 경로를 잡는다.
## P4. I/O·reference·운영 closure
| Case ID | 필수 관찰 | 판정 |
| --- | --- | --- |
| MFE-C23 | 원본 input의 density/section mapping·S4/S4R common physical path·Step-2/N10·blank bounds·Lanczos/SIM/acoustic-free no-op·mass normalization. Unsupported fields, prior step/preload, nonzero BC, damping/acoustic/mixed elements는 fail-closed | I/O가 fixed syntax allowlist·진단으로 구체화. Source count와 actual FEAST count/backend 구분 |
| MFE-C24 | Source renumbering과 output self-check; logical mode/source identity·lambda dimension·actual mass/backend·candidate를 HDF5에서 복원. 기존 final hash/accepted state를 준비하고 solve/validation/write/close/replace failure 주입 | 정확한 schema는 I/O 소유. 모든 failure에서 계약 범위의 이전 state/final 보존, log는 별도 lifecycle |
| MFE-C25 | [새 eigen reference](reference-model.md) 10개 Value, 10 singleton families, comparator prechecks/1% RMS·5% row·near-zero·zero-scale inclusive 경계. Equal values의 distinct IDs와 reordered TXT는 허용, missing/extra/duplicate/NaN/Inf/wrong quantity/mass/schema는 실패 | 공통 policy 그대로, 모든 Value blocking. Actual FESA fresh binary 결과로 실행 |
| MFE-C26 | 아래 기존 linear/nonlinear static portfolio·configured 전체 regression suite·새 warning 없음. Density 없는 기존 static, source mapping·partial-BC response·Newton objective/tangent·평형·reaction·energy·rollback | C7와 기존 reference identity/policy. Old kd 수치 equality는 대체하되 다른 기준 유지 |
| MFE-C27 | RED가 변경 동작 때문에 실패했는지 확인, GREEN/focused/full MSVC x64 Debug CMake/CTest 실제 exit, actual FEAST/backend identity, fresh reference timestamps/hashes. 세 반복 구조/order/diagnostic 및 scalar 재현성 | C4, 전27개 requirement evidence 및 동일 r2 Physics/Release closure. 누락·실패·stale를 통과 처리 금지 |
기존 정적 포트폴리오의 원본 목록은
[Requirement evidence](requirements-evidence.md#필수-회귀-포트폴리오와-identity)와
[현재 nonlinear reference-model](../nonlinear-static-newton-raphson/reference-model.md)이다.
`shell`/`shellNL`/`shellNL-meshfine`의 해당 `.inp`와 같은 폴더의 원본
`<stem> displacements.csv`, nonlinear의 required review-only reactions를 그대로 사용한다.
Linear `shell-s4`와 `shell-s4-linear-limit`는 같은 input의 서로 다른 검토 역할이며
같은 fresh solve를 재사용할 수 있어도 각 identity/회귀 증거를 생략하지 않는다.
U1/U2/U3는 global length blocking, UR1/UR2/UR3는 fixed-initial global rotation-vector
warning-only이며 같은 step/accepted state·case·dimension·coordinates·impact별 공통 family다.
Nonlinear RF1/RF2/RF3와 physical spatial RM1/RM2는 기존 source-key·finite·inventory 및
error/RMS report를 유지하는 review-only다. RM3/stress는 기존 numerical gate에 넣지 않는다.
Factor-one 내부 force/moment equilibrium은 별도 blocking이고 C7를 따른다.
`shellnl-meshfine-02-s4-final`의 post-closure 역할은 그대로 유지하며 등록 suite의 해당
실행·영향 evidence를 기록한다. 과거 세 case의 closure로 소급 합치지 않는다.
Root가 관찰한 중단 baseline/단독 재현/나머지 pressure tests는 새 binary 전체 suite의
성공 evidence가 아니다. Reference 테스트의 HDF5 cache가 이전 library보다 새롭다는
이유로 옛 solve를 재사용하지 않았는지 확인하고, r2 영향을 받는 final comparison은 새 binary의
fresh solve evidence로 남긴다. Reference input/results를 수정하거나 Hook state를 조작하지 않는다.
## Requirement coverage
아래 전 행의 접두사는 `FEM-REQ-MITC4-EIGEN-`이고 모두 `must`다.
Mapping은 acceptance intent를 복제하지 않으며 [requirements](requirements.md)가 원본이다.
| Requirement suffix | 필수 cases |
| --- | --- |
| 001 | MFE-C23, MFE-C25 |
| 002 | MFE-C01, MFE-C08, MFE-C12, MFE-C23, MFE-C26 |
| 003 | MFE-C06, MFE-C07, MFE-C23 |
| 004 | MFE-C01, MFE-C02, MFE-C07 |
| 005 | MFE-C01, MFE-C02, MFE-C03 |
| 006 | MFE-C01, MFE-C03, MFE-C11, MFE-C13 |
| 007 | MFE-C06, MFE-C13, MFE-C27 |
| 008 | MFE-C08, MFE-C13, MFE-C14, MFE-C15, MFE-C16 |
| 009 | MFE-C13, MFE-C17, MFE-C18, MFE-C19, MFE-C22, MFE-C23 |
| 010 | MFE-C17, MFE-C18, MFE-C25, MFE-C27 |
| 011 | MFE-C03, MFE-C16, MFE-C17, MFE-C23, MFE-C25 |
| 012 | MFE-C14, MFE-C19, MFE-C21, MFE-C22, MFE-C24 |
| 013 | MFE-C11, MFE-C16, MFE-C17, MFE-C18, MFE-C21 |
| 014 | MFE-C01, MFE-C02, MFE-C03, MFE-C04, MFE-C05, MFE-C08, MFE-C11, MFE-C20 |
| 015 | MFE-C23, MFE-C25 |
| 016 | MFE-C07, MFE-C21, MFE-C23 |
| 017 | MFE-C24, MFE-C25 |
| 018 | MFE-C06, MFE-C13, MFE-C16, MFE-C24, MFE-C25 |
| 019 | MFE-C21, MFE-C22, MFE-C24 |
| 020 | MFE-C25, MFE-C26 |
| 021 | MFE-C25 |
| 022 | MFE-C25 |
| 023 | MFE-C27 |
| 024 | MFE-C09, MFE-C12, MFE-C26, MFE-C27 |
| 025 | MFE-C27 |
| 026 | MFE-C01, MFE-C02, MFE-C03, MFE-C04, MFE-C05 |
| 027 | MFE-C08, MFE-C09, MFE-C10, MFE-C11, MFE-C12, MFE-C26 |