Files
FESADev/docs/mitc4-shell-feast-eigen/formulation-verification.md
T
2026-09-06 02:33:45 +09:00

14 KiB

질량과 modal candidate의 검증식 및 Numerical Review 인계

  • Feature ID: mitc4-shell-feast-eigen
  • Owner: formulation-agent
  • Input contract revision: r1
  • 기본 보고서: formulation.md

질량 식 M1~M10, 축소·복원 식 E1~E8의 기호를 사용한다. 이 문서는 측정량과 zero branch를 정의하며 수치 acceptance 값과 필수 benchmark 선정은 Numerical Review가 독립 검토하여 고정한다. 외부 기준의 수치는 TOLERANCE를 그대로 적용한다.

V1. 공통 scale과 zero branch

행렬·벡터 norm을 계산하기 전에 E1의 길이 congruence를 적용한다. 질량은 모두 ML², stiffness는 ML²/T² 단위가 된 행렬에서 norm을 계산한다. Element-only oracle에서는 ell=Le를 사용하고 assembled 비교에는 동일 global ell을 사용한다. Norm과 sum-of-squares는 overflow/underflow를 피하는 scaled accumulation을 사용한다. 입력/행렬/각 eigenpair가 finite인지 먼저 검사한다.

이 문서의 모든 ratio a/b는 b>0에서만 계산한다. a=b=0이면 해당 항등식의 zero-case metric은 0이다. b=0,a!=0이면 named zero-scale failure이며 무한값/NaN metric으로 성공 결과를 만들지 않는다. max(1,b), arbitrary floor 또는 zero clamp는 없다.

대칭성은 eta_sym(Q)=||Q-Q^T||F/||Q||F이다. Diagonal copy로 생성한 symmetry와 독립 quadratic-work 검증은 구분한다. Cross-basis equality R=S는 ||R-S||F/(||R||F+||S||F)로 측정한다. Mass/stiffness를 같은 norm의 분모에 직접 더하지 않고 필요한 lambda나 시간 scale을 곱한다.

V2. 질량, rank와 보존 검증

  • M10의 entrywise scalar oracle와 M_C quadratic form을 독립 적분과 비교한다. 계수·부호/두께 차수가 같은지를 component별 확인한 뒤 전체 norm을 사용한다.
  • M5에서 구성한 M_C와 원본 moment, M6의 row-sum 결과, M7의 independent direct integration을 따로 비교한다. 변조한 C(1)/C(2)가 lumped 결과 및 검증에 반영되는지 확인하여 두 mass 계산이 끊긴 우회 경로를 잡는다.
  • Mass original과 derived 모두 d_i 방향의 null action을 검사한다. Element/global scaled matrix에서 eta_null=||Mhat z||2/(||Mhat||F ||z||2)를 쓴다. Lumped는 M8의 양의 두 항 및 physical positive-space Cholesky로 rank5를 검증한다. Consistent physical 20-coordinate matrix도 positive여야 한다. 잘못된 quadrature에 의한 추가 hourglass/null mass를 허용하지 않는다.
  • mi>0, ji>0, zi=hi/mi, vi=ji/mi-zi²>0를 검사한다. vi/ell², |hi|/sqrt(mi ji)는 dimensionless conditioning evidence다. 양의 vi를 낮은 rank로 바꾸는 기준을 두지 않는다. Direct centered integral integral rho Ni (z-zi)² dV와 ji-hi²/mi의 일치는 cancellation을 드러낸다.
  • Scaled node positive mass의 Cholesky reconstruction error와 reciprocal condition estimate를 기록한다. 후자는 작은 block inverse action의 norm으로 계산할 수 있다. 물리 positive/null rank는 E2로 정하고 ill-conditioning은 별도 실패다.
  • 총 질량은 uniform translation의 q^TMq/|u|², geometry 적분의 m=sum mi를 비교한다. Spatial centroid는 M5의 scalar moment로 얻은 sum(mi Xi+hi di)와 독립 integral rho X dV를 비교한다. 좌표 원점으로 인한 cancellation을 피하려면 한 source node Xref를 공통 원점으로 잡고 first moment 차이를 m ell로 나눈다.
  • M9의 Delta=q_dot^T(M_L-M_C)q_dot와 nonnegative pairwise integral을 독립 비교한다. Scale은 q_dot^T M_L q_dot + q_dot^T M_C q_dot이며 zero motion/null-only field는 별도 zero branch다. Arbitrary velocity에서 equality를 요구하지 않는다.

V3. Reduction과 full modal residual

y_f=C^T D^-1 phi, k=||Kf||F, m=||Mf||F라 두면

[ r_f=K_f y_f-\lambda M_f y_f,\qquad \eta_r=\frac{|r_f|_2}{(k+|\lambda|m)|y_f|_2}. \tag{V1} ]

이것이 모든 원 free DOF의 inertia/elastic force balance다. 물리 공간에 project한 residual만으로 drilling/null 복원 오류를 놓치지 않는다. Kf y_f 및 Mf y_f를 solve에 사용한 축소 matrix를 재사용하지 않고 원 조립값에서 검산한다. Mf는 actual lumped이며 consistent로 바꾸면 잘못된 metric이다. lambda=0에서도 k>0이면 유효한 denominator가 있다. Kf=0,lambda=0은 zero branch, zero eigenvector는 normalization 이전부터 실패다.

Whitened solve의 추가 metric은 eta_w=||A x-lambda x||2 / ((||A||F+|lambda|)||x||2)다. Backend res/epsout, eta_w, eta_r은 서로 다른 evidence다. E3의 identity도 다음으로 검산한다.

[ \eta_{KZ}=\frac{|K_fZ-Z\operatorname{diag}(\kappa)|_F} {|K_f|_F|Z|_F+|Z\operatorname{diag}(\kappa)|F},\quad \eta{MZ}=\frac{|M_fZ|_F}{|M_f|_F|Z|F},\quad \eta{PZ}=|P^TZ|_F. \tag{V2} ]

nz=0이면 V2는 적용 대상 없음으로 기록한다. M8/E3의 analytic proof가 먼저이고 V2 threshold만으로 새로운 nullspace를 발견하거나 coupling을 생략하지 않는다. Kzz positivity와 n/nz/nf를 source node별 예상 null 여부와 연결한다. Constraint metric은 ||(I-CC^T)D^-1 phi||2/||D^-1 phi||2이며 source에 복원한 constrained components 자체도 exact zero를 확인한다.

V4. Mass normalization, Gram, energy와 Rayleigh

각 mode의 generalized mass g_i=phi_i^T M phi_i=y_i^T Mf y_i는 finite, strictly positive여야 한다. phi_i <- phi_i/sqrt(g_i)로 normalization한 뒤 재계산한다. 계산된 전체 c개 column에 대해

[ G_{ij}=\phi_i^T M\phi_j,\quad \eta_{norm,i}=|G_{ii}-1|,\quad \eta_{orth,ij}=\frac{|G_{ij}|}{\sqrt{G_{ii}G_{jj}}}\ (i\ne j),\quad \eta_G=\frac{|G-I|_F}{\sqrt c}. \tag{V3} ]

Column pairing과 linear independence를 확인하며 FEAST의 c와 N을 구분한다. 부족한 rank를 같은 vector 복사로 채우면 V3에서 실패한다.

[ h_i=y_i^TK_fy_i,\quad R_i=h_i/g_i,\qquad \eta_{energy,i}=\frac{|h_i-\lambda_i g_i|} {(k+|\lambda_i|m)|y_i|_2^2}. \tag{V4} ]

R_i [T^-2]는 Rayleigh quotient다. V4는 eigenvalue가 0인 경우에도 쓸 수 있고 |R_i-lambda_i|/|lambda_i|만을 강제하지 않는다. 단위 modal amplitude에서 elastic energy는 h_i/2, peak kinetic energy는 lambda_i g_i/2다. Physical/drilling 분해가 필요한 내부 검산에서는 h_phys+h_drill=h_i를 확인하되 별도의 drilling-energy acceptance나 output quantity를 추가하지 않는다.

V5. Rigid mode, coordinate 및 density 불변식

Free valid shell/patch의 rigid fields는 u_i=c+Omega cross Xi, theta_i=(I-di di^T)Omega이다. 그 span에는 세 병진과 세 회전이 있다. 각 vector의 scaled K action을 ||Khat y||2/(||Khat||F ||y||2)로 검증하고 mass Gram rank로 여섯 물리 움직임의 independence를 확인한다. Omega의 full normal 성분을 UR에 넣어 drilling energy를 자극한 field는 이 테스트가 아니다. Physical rigid zero eigenvalues는 finite mass 모드이고 E2의 massless drilling과 다르다. Clamped reference에 여섯 zero mode를 요구하지 않는다.

Global rigid coordinate rotation에서 두 질량과 physical stiffness의 congruence 및 E1~E6 spectrum 불변성을 검사한다. Free rotation 3개 또는 rotation 3개 전체 고정의 node로 이루어진 사례는 finite 공간의 drilling 항이 0이므로 이 검증에 적합하다. 기존 kd=min(physical tangent diagonals)*10^-3는 선택한 tangent basis에 의존할 수 있다. 따라서 재계산한 kd까지 임의 회전에서 동일 scalar라 가정하거나 부분 회전 BC에 남는 stabilization의 좌표 불변성을 새로 주장하지 않는다. 같은 kd를 유지한 단순 tensor 변환이면 complete K도 congruent하지만 별도 geometry에서 kd를 재선정한 경우와 다르다. 기존 stabilization 의미를 유지하는 한계이며 coefficient를 바꾸지 않는다. Rotation 후 이전 global component BC를 그대로 두고 같은 문제라고 주장하거나 새 MPC 입력 기능을 추가하지 않는다.

모든 density를 동일 c_rho>0로 바꾸고 geometry/material stiffness/BC를 유지하면

[ M_C'=c_\rho M_C,\quad M_L'=c_\rho M_L,\quad \lambda_i'=\lambda_i/c_\rho,\quad \Phi'=\Phi Q/\sqrt{c_\rho}. \tag{V5} ]

단일 simple eigenvalue에서는 Q가 sign이고 repeated group에서는 orthogonal mixing이다. Eigenvalue scaling error는 |c_rho lambda_i'-lambda_i|/s로 측정한다 (s는 baseline E6 operator time scale). Group vector 비교는 U=L^T P^T C^T D^-1 Phi, U'=L^T P^T C^T D^-1(sqrt(c_rho) Phi')로 정의한 projector 차이 ||UU^T-U'U'^T||F/sqrt(2r)를 사용한다. r은 group dimension이다. Dense projector를 구성하지 않고 orthonormal U/U'의 cross-Gram으로 같은 norm을 계산할 수 있다. Arbitrary clustered-but-distinct vectors를 회전하여 다른 eigenpairs로 만들지 않는다.

V6. Lowest N, cluster, near-zero와 오류 판정 소유권

E6 count/solve history는 각 (a,b), prefix empty evidence, status, count, m0, returned m, loop/epsout, bounds source와 final selected ranks를 보존한다. 모든 returned pair에 interval separation을 검사하고 requested N개만 검사하지 않는다. Near-zero/negative 분류 scale은 s 또는 그와 동등한 E6 operator scale이며 reference 최소값이나 arbitrary absolute frequency가 아니다. Raw lambda는 바꾸지 않는다.

NR가 구현 전에 결정해야 할 항목은 다음과 같다.

대상 수치값/필수 검사 소유권과 필요한 scale
Matrix symmetry, moment/oracle/centroid/M9 V1/V2의 same-unit norm, total mass 및 m ell; roundoff/독립 적분 오차 분리
Null/orthogonal basis, KZ/MZ, mass conditioning M8/E2 analytic rank, V2 및 작은 positive block condition; near-null 삭제 금지
Residual, Gram, energy, rigid modes V1~V4, V5 K-action; machine precision·차원·conditioning 근거
Near-zero/negative/cluster 분류 `
FEAST control Contour points/precision exponent/refinement bound, finite count/endpoint/solve retry budget
Endpoint safety Operator scale와 ULP, count monotonicity, enclosing total n, solve/count 및 full-rank Gram
Independent test portfolio 평판 M10, warped/director-varying M5~M9, 비축정렬/부분 BC/E5 오류 case, FEAST known spectra, density/rigid/좌표 tests
External reference 원본 input+TXT Value, mode/frame identity와 singleton 여부, common family 및 blocking 판정

Small independent pencil은 손으로 대각화 가능한 값을 사용하고 동일 production mass/reduction/eigensolver를 기대값 계산에 호출하지 않는다. API wrapper의 injected status 검사와 실제 FEAST runtime known-spectrum 검사는 모두 필요하다. Size1, N=n, repeated group>N, tight cluster, zero/negative, empty interval, insufficient subspace, count collision, unresolved conditioning 및 allocation/index failure가 해당 공식 계약을 검증한다. Case의 구체적 목록·숫자는 NR가 정하고 Planning이 tests와 TDD steps에 연결한다.

외부 비교는 지정 원본 input과 원본 TXT의 Value만 사용한다. lambda [T^-2], source Step-2, mode 1..10이 의미적 대응이다. Frequency 재계산, mode shape correlation이나 다른 mass variant의 더 가까운 결과 선택으로 이를 대체하지 않는다. Mode/frame은 NR/I/O가 common same-frame family 규칙에 맞춰 정의하고 missing/extra/duplicate/nonfinite를 tolerance 전에 거부한다. Schema 경로/저장 field/public diagnostic 이름은 I/O owner의 계약이다.

V7. 실행 evidence와 남는 위험

Formulation 단계에서는 승인 문서와 실제 source를 read-only로 대조하고 자체 수식을 전개했다. 다음 입력은 변경하지 않았다: requirements/research, 관리문서, source/tests/build, Harness, 공통 tolerance 및 원본 reference. External solver, CMake/CTest, Harness, FEAST runtime, numerical reference comparison은 실행하지 않았다. 이 문서는 수치 통과 evidence가 아니다.

Get-Content, scoped rg로 M4의 변환·stabilization과 공통 nodal frame 전달을 확인했다. 한 scoped rg 호출은 존재하지 않는 runtime_element_factory.cpp와 PowerShell literal glob 경로 때문에 exit 1이었다. rg --files/rg -n ... src/fesa로 실제 element_factory.cpp, shell_geometry.cpp를 찾아 재조회했고 exit 0이었다. Intel parameter/API/status의 공식 문서를 2026-09-06 다시 열어 count 의미, endpoint/count failure와 m0 capacity를 확인했다(E7의 URL 및 research S05~S07).

Get-FileHash는 exit 0이며 원본 SHA-256은 upstream과 같다. Input: 913b1abc604e62bc5f995bf5523924e17ea03925102a7bd22d39226ba0ea7339. TXT: 20d97ca3fd51f5b956f2c1ed7565557c68f74e61e41b913748515ef43a0f7f0b.

Owned 4개 문서를 python -B - read-only here-script(pathlib, re, urllib.parse.unquote)로 정적 검사했다. Owner/Feature/revision, 26개 requirement coverage, 상대 링크 실재, trailing whitespace/final newline, display-math delimiter와 언어 혼입을 검사했다. Exit 0, documents 4, local links 38, requirements 26, issues 0이다. git diff --check도 exit 0이며 Coordinator 소유 coordination.md의 LF/CRLF warning만 출력되었다. 새 untracked owned 문서의 whitespace는 위 Python 검사로 별도 확인했다. git status --short에서 owned 4개와 타 owner coordination 변경을 구분했으며 stage/commit 또는 타 owner 수정은 하지 않았다.

잔여 위험은 매우 얇은 shell/거의 정렬된 부분 BC의 mass conditioning, geometry quadrature 검사점 밖의 전역 injectivity 한계, floating-point FEAST count/endpoint와 repeated subspace, count scratch 및 shifted factorization memory다. NR가 위 metric·수치 기준·case를 고정하고 Implementation이 실제 설치 backend와 reference evidence를 제시해야 해소된다.