Files
2026-10-18 14:32:55 +09:00

75 KiB
Raw Permalink Blame History

MITC4 질량·축소·stabilization 유도 근거

이 폴더는 이전 MFE baseline의 유도·반례 근거다. 현재 구현 계약은 eigen2이며 채택·비채택 범위는 그 정식화에서 명시한다. 아래 과거 controls·reference portfolio·pass를 자동 승계하지 않는다. 아래 준비 상태·owner 인계와 옛 source 문서명도 작성 당시 이력이며 원문은 Git 이력에서 확인한다.

MITC4 질량행렬과 FEAST 고유치 정식화

  • Feature ID: mitc4-shell-feast-eigen
  • Input contract revision: r2
  • 요청 outcome: pass; 다음 owner: numerical-review-agent.
  • 상태: 독립 numerical review 요청이며 자기 승인이나 workflow 전이가 아니다.

필수 입력은 FEATURED_AGENTS, PRD, ADR, requirements, requirements evidence, research, research evidence이다. 프로젝트 지침, 프로젝트 PRD, ARCHITECTURE, 공통 ADR, TOLERANCE, agent 계약, 문서 소유권을 적용했다.

핵심 계약

  1. 기존 원형상 MITC4 운동학·physical stiffness·director·global 6 DOF 의미를 유지한다. Physical 3 translation/2 tangent rotation의 consistent mass와 구성 scalar moments를 같은 Jacobian으로 계산한다. Trilinear mapping의 mass integrand는 각 축 최대 4차이므로 mass는 3×3×3 Gauss로 충분하며 곡면의 odd-thickness coupling을 유지한다. 식과 단위·strong/weak form: mass M1~M5.
  2. 계산된 consistent moment를 row-sum하여 global nodal 6×6 block lumped mass를 만든다. 총 병진 질량·spatial centroid·할당된 thickness moments를 보존하고 drilling은 정확한 null이다. 일반 운동에너지 차이는 nonnegative Jensen identity로 명시한다. 보존/근사 범위와 독립 평판 oracle: mass M6~M10.
  3. 실제 homogeneous global constraints를 먼저 적용한다. Free space에 완전히 포함된 director null만 분리한다. 개선된 nodal stabilization에서도 Kpz=0, Kzz>0임을 입증하여 finite spectrum을 nodal projection으로 보존하며 부분 BC에 남는 stabilization은 유지한다. Sparse block whitening, rank 예외와 global 복원: eigen E1~E5.
  4. Actual FEAST mass와 모든 modal 검증은 derived lumped다. .inp의 N을 유지하고 finite enclosure·prefix count·cluster capacity·count/solve 일치와 독립 eigenpair 검증을 결합한다. Endpoint/conditioning 한계를 count theorem으로 과장하지 않는다. Backend 경계와 bounded search, 상태 보존: eigen E6~E8.
  5. 사용자 승인 r2의 numerical scale은 초기 physical K20의 여덟 접평면 회전 대각의 평균 k_ref=sum_i tr(R_i)/8, k_d=10^-3 k_ref로 고정한다. Zero diagonal을 포함한 전체 inventory를 사용하며 접평면 기저·전역 좌표에 불변이다. 선형/eigen의 nodal drill map과 nonlinear의 objective potential·초기 고정 lifecycle은 각각 유지한다. 양의 inventory, 재계산 공변성, rigid modes, 반례의 exact target과 적용 경계는 stabilization S1~S7에 있다.

Requirement coverage

아래 ID는 모두 FEM-REQ-MITC4-EIGEN- 접두사다. Requirements matrix의 acceptance 원본을 복제하지 않으며 formulation의 기여와 다음 owner를 구분한다.

IDs 정식화/검증 연결 후속 확인
001, 002, 004 mass M1~M4, stabilization S1/S2: 원형상, physical kernel·director·재료·기하 보존, numerical scale 교체 NR, I/O
003 mass M1/M5: 양의 일정 rho와 section별 연결 전제 I/O semantic validation
005, 006, 026 mass M5~M10, verification V2: consistent→lumped, coupling, positivity/null, 보존/근사 NR independent oracle
007, 008 eigen E1~E5, stabilization S4, verification V3: 실제 BC 뒤 개선된 pencil 보존, stable assembly/복원 NR rank/conditioning
009, 010, 011, 012 eigen E6~E8, verification V6: 낮은 N, multiplicity, 실제 FEAST, 유한 실패 NR numerical controls, real runtime
013, 014, 018 verification V1~V5, stabilization S3/S6: lumped 검증과 complete K/지원 partial BC 재계산 공변성 NR, Physics
015, 016 mass M2 및 eigen E1/E6: 무감쇠 단일 procedure·동차 BC·input N authority I/O exact syntax/no-op/exclusion
017, 019 eigen E8: lambda/normalization 의미, source identity, candidate/final 보존 I/O additive schema/failure
020, 021, 022 verification V6: 지정 TXT Value-only, identity 사전검사/common tolerance NR family, I/O mapping
023, 024, 025 stabilization S5/S7, verification V8: 기존 linear/nonlinear scale 적용·correctness/reference 재검증 Planning TDD/MSVC/회귀, Physics/Release closure
027 stabilization S1~S7: 단일 공변 scale·positive/null/rigid 역할과 기존 고정식 대체 경계 NR 독립 검토, Implementation/Physics

Evidence와 handoff

실제 linear의 kd 선정 및 nonlinear 생성 시 초기 계수 전달·저장 경로를 대조했다. r1의 mass M5M10, FEAST E6E8, full residual·transaction 수식과 NR의 독립 mass oracle 근거를 영향 확인 후 보존한다. 원본 reference hash는 r1 관찰 이력이며 재조회하지 않았다. 출처·명령·미실행은 verification V7/V8에 있다. Source/reference/upstream을 편집하지 않았고 수치 실행 결과를 통과로 보고하지 않는다.

현재 새 physics/scope/compatibility 선택이나 사용자 미결정은 없다. r2 수식은 NR-MFE-001에 대한 algebraic target을 제공하며 그 반례의 독립 해소 판정이나 runtime 통과를 주장하지 않는다. Numerical Review는 verification V6의 dimensionless metric, zero branch, analytic rank와 finite algorithm을 독립 검토하여 threshold, FEAST control/budget, 필수 benchmark 및 reference mode/frame family를 고정한다. I/O는 영속 schema를 정의한다. 이번 formulation stage는 완결된 수학 계약을 NR에 인계하며, 실제 구현 진입에 필요한 전체 계약 bundle은 NR의 수치 기준과 후속 I/O/planning 이후 완성된다. Count의 floating-point 한계, near-null conditioning, shifted sparse fill와 보수적 count scratch 비용은 아직 실제 runtime evidence가 필요하다. Release readiness를 주장하지 않는다.

MITC4 consistent mass와 nodal block lumping 유도

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

근거는 research evidence의 S01, S02, P01, R01R03이다. 아래 유도는 FESA의 승인된 운동학에 대한 것이며 Abaqus 내부 질량과의 동등성 주장이 아니다. r2는 M4의 numerical scale만 S1로 대체한다. M1/M2 및 M5M10의 질량·quadrature·moment·lumping 식은 영향 확인 후 보존했다.

M1. 변수, 원형상과 운동학

길이·질량·시간 차원을 각각 L, M, T라 한다. 각 element는 원형상 좌표 X_i [L], 기존 patch에서 얻은 공통 unit nodal director d_i, 일정한 centered thickness t>0 [L], section의 material에서 결정된 일정 density rho>0 [M/L³]를 사용한다. E>0 [M/(LT²)], -1<nu<0.5와 기존 단일층 등방성 plane-stress 재료를 유지한다. 모든 입력 및 중간 결과는 finite여야 한다. 여기의 t는 두께이며 시간은 tau로 쓴다.

자연 좌표는 (xi,eta,zeta) in [-1,1]^3, source node 순서는 (-1,-1),(1,-1),(1,1),(-1,1)이다. 다음 형상함수와 실제 volume mapping을 사용한다.

[ N_i=\tfrac14(1+\xi_i\xi)(1+\eta_i\eta),\quad z=t\zeta/2,\quad X=\sum_iN_i(X_i+z d_i),\quad J=\det[X_{,\xi},X_{,\eta},X_{,\zeta}], \quad dV=J,d\xi d\eta d\zeta. \tag{M1} ]

sum Ni=1, Ni>=0이다. Interpolated director를 normalization하여 M1의 geometry를 변경하지 않는다. 기존 kernel의 EvaluateGeometry와 같은 Jacobian 및 부호를 사용한다. 기존 정식화의 §§35, 811이 director 생성, tangent frame (a_i,b_i,d_i), 기하 허용 조건과 MITC strain을 소유한다.

전역 nodal 좌표는 q_i=[u_X,u_Y,u_Z,theta_X,theta_Y,theta_Z]^T이다. u [L], theta [1]이고 양의 director 변화는 theta cross d이다. 다음 map을 정의한다.

[ S_i=-[d_i]_\times,\quad P_i=I-d_i d_i^T=S_i^TS_i,\quad G_i(z)=[I_3\ \ zS_i],\quad H=[N_1G_1\ \cdots\ N_4G_4]. \tag{M2} ]

따라서 입자 변위/속도는 u(X)=Hq, v(X)=H q_dot이다. Physical nodal coordinates [u_X,u_Y,u_Z,alpha,beta]에서 회전 열은 [-z b_i, z a_i]이다. alpha=a_i^T theta, beta=b_i^T theta, gamma=d_i^T theta이며 S_i d_i=0이다. 20↔24 변환은 기존 PhysicalTransformation20/DrillingTransformation4 그대로이다. MITC assumed shear와 5/6 shear factor는 strain/stiffness에만 작용한다. 속도 보간과 질량에 이 factor를 적용하지 않는다.

M2. Strong/weak form과 기존 stiffness

원형상·무응력 상태의 소변형 무감쇠 자유진동에 대해 continuum parent는 rho u_ddot = div sigma, sigma=C_ps:epsilon, sigma_33=0이다. 자유 표면·자유 edge의 generalized traction은 0이고 essential data는 동차 global DOF 제약이다. 허용한 thickness 운동학과 MITC projection에 제한한 약형은

[ \int_{\Omega_0}\rho,\delta u^T\ddot u,dV+ \int_{\Omega_0}\delta\bar e^T C_5\bar e,dV+ \delta\gamma^T K_d\gamma=0. \tag{M3} ]

원형상 physical elastic Hessian과 quadrature는 기존 stiffness 계약을 유지한다.

[ C_5=\operatorname{diag}\left( \frac{E}{1-\nu^2}\begin{bmatrix}1&\nu&0\\nu&1&0\0&0&(1-\nu)/2\end{bmatrix}, \frac56\frac{E}{2(1+\nu)}I_2\right), \quad K_{20}=\sum_{g\in2\times2\times2}\bar B_g^TC_5\bar B_gJ_gw_g, ] [ K_e=T_p^TK_{20}T_p+T_d^T(k_d I_4)T_d,\quad k_d=10^{-3}k_{ref,e}. \tag{M4} ]

bar e=[epsilon11,epsilon22,gamma12,gamma13,gamma23]이다. k_ref,e는 r2 scale S1으로 계산한다. 기존 정식화 §12의 physical kernel·변환· drilling map은 유지하고 옛 최소 대각 scale만 사용자 승인 범위에서 대체한다. 이 유도 작성 당시 source는 옛 scale을 사용했다. 현재 source의 채택식과 구현 검증은 eigen2 정식화와 구현 검증을 따른다. Drilling energy는 수치 stabilization이며 물리 strain/stress가 아니다. K_e q_e는 내부 elastic generalized force, M_L,e q_ddot,e는 inertia다. 최종 반이산식은 M_L q_ddot + Kq=0이다. Harmonic ansatz q(phi,tau)=phi cos(omega tau)에서 Kphi=lambda M_L phi, lambda=omega² [T^-2]를 얻는다. 새 constitutive/history state, geometric stiffness, damping, preload, nonlinear tangent, time integrator 또는 modal stress/reaction recovery는 없다.

M3. Consistent matrix와 충분한 quadrature

T_C=1/2 integral rho |H q_dot|² dV에서

[ C^{(k)}{ij}=\int{\Omega_0}\rho N_iN_j z^k dV\quad(k=0,1,2), \qquad (M_C){ij}=\begin{bmatrix} C^{(0)}{ij}I_3&C^{(1)}{ij}S_j\ C^{(1)}{ij}S_i^T&C^{(2)}_{ij}S_i^TS_j \end{bmatrix}. \tag{M5} ]

세 scalar moment matrix는 각각 symmetric 4×4이다. 차원은 C(k) [M L^k], mass의 uu/u-theta/theta-theta block은 각각 M/ML/ML²이다. M_C [24×24]는 global block 형식이며 20 physical mass의 congruence와 동일하다. 원본 M_C와 그것을 구성한 C(0..2)를 완성·검증한 후 lumping 입력으로 사용한다. Global consistent sparse matrix를 eigen solve에 조립할 필요는 없지만 계산 원본을 lumped 결과로 덮어쓰거나 별도의 mass를 생성한 뒤 consistent에서 유도했다고 부르지 않는다.

M1은 각 자연 좌표에 최대 1차이다. Jacobian의 세 열의 최대 다항 차수는 각각 (0,1,1), (1,0,1), (1,1,0)이므로 determinant의 성분별 최대 차수는 (2,2,2)다. Ni Nj z^k J의 차수는 최대 (4,4,k+2), 즉 (4,4,4)이다. 따라서 질량에는 3×3×3 Gauss–Legendre를 사용한다. 각 축의 points는 [-sqrt(3/5),0,+sqrt(3/5)], weights는 [5/9,8/9,5/9]이다. 3-point rule의 5차 정확성으로 M5의 모든 항을 이 geometry에서 정확 적분한다 (floating-point roundoff 제외). 추가 density/thickness 변화를 가정한 결론이 아니다.

Loop 순서는 증가하는 xi, 그 안의 eta, 가장 안의 zeta, 이후 i<=j, k=0,1,2로 고정하고 대칭 항을 복사한다. Mass 계산의 27개 실제 평가점에서도 기존 geometry predicate를 적용한다. J<=0, nonfinite frame/basis 등의 실패를 weight 절댓값, 점 생략이나 flat replacement로 수리하지 않는다. 기존 stiffness 8-point 경로는 변경하지 않는다. 이 검사는 27점에서의 positivity를 보장하며 volume 모든 위치의 injectivity에 대한 새 theorem이나 기존 warp/curvature 범위의 확대를 주장하지 않는다.

왜곡된 flat element라도 같은 식을 쓴다. 서로 다른 director가 있으면 J(zeta)의 1차 항 때문에 C(1)이 0이 아닐 수 있다. Centered section만을 이유로 coupling을 버리거나 C(2)=t² C(0)/12를 일반식으로 사용하지 않는다.

M4. 계산된 consistent moment에서 nodal block 유도

각 node의 세 row sum과 질량 block을 정의한다.

[ m_i=\sum_j C^{(0)}{ij},\quad h_i=\sum_j C^{(1)}{ij},\quad j_i=\sum_j C^{(2)}{ij},\qquad L_i=\begin{bmatrix}m_iI_3&h_iS_i\h_iS_i^T&j_iP_i\end{bmatrix}, \quad M{L,e}=\operatorname{blockdiag}(L_1,L_2,L_3,L_4). \tag{M6} ]

이는 scalar moment row sum 후 tensor로 재구성하는 nodal block lumping이다. Global 전체 행의 합, absolute row sum, diagonal scaling 또는 nodal quadrature와 혼용하지 않는다. 같은 source node의 incident element block은 기존 source element 순서로 합한다. 공통 d_i 때문에 조립 후에도 M6 형태다. Local와 global에서 diagonal이 아닌 6×6 coupling은 허용한 lumped mass의 일부다.

sum Nj=1을 M5에 대입하면 정확히

[ (m_i,h_i,j_i)=\int\rho N_i(1,z,z^2)dV,\quad L_i=\int\rho N_i G_i(z)^TG_i(z)dV. \tag{M7} ]

m_i>0, j_i>0, m_i j_i-h_i²>0이다. 마지막 부등식은 양의 measure에 대해 z가 상수가 아닌 점(양의 두께 및 서로 다른 thickness Gauss점)과 strict Cauchy–Schwarz에서 따른다. 이를 이용하면

[ q_i^TL_iq_i=m_i\left|u_i+\frac{h_i}{m_i}S_i\theta_i\right|^2+ \left(j_i-\frac{h_i^2}{m_i}\right)|S_i\theta_i|^2. \tag{M8} ]

따라서 L_i의 rank는 5, null은 정확히 [0;d_i]의 span이다. zbar_i=h_i/m_i [L], j_i-h_i²/m_i [ML²]는 node에 할당된 thickness measure의 centroid와 central tangent inertia다. 음/영 variance나 nonfinite를 clamp하지 않고 mass 검증 실패로 처리한다. 모든 노드에 최소 한 활성 shell이 연결되어야 한다.

M6의 유도 연결은 C(k) 원본→row sum→block reconstruction으로 추적한다. 동시에 M7을 독립 직접 적분하여 두 결과의 일치를 검증할 수 있다. 서로 다른 nodal frame의 rotary component를 직접 더하지 않는다.

M5. 보존되는 양과 근사되는 양

모든 등식은 동일 원형상·density와 quadrature measure에 관한 것이다.

  1. 총 병진 질량 m=sum mi=integral rho dV 및 모든 uniform translation의 kinetic energy가 consistent와 정확히 같다. 각 방향의 total mass가 m이며 trace(Muu)를 총 질량이라고 정의하지 않는다.
  2. Thickness scalar moment는 sum hi=integral rho z dV, sum ji=integral rho z² dV다. 각 nodal tangent tensor는 ji Pi이고 drilling inertia는 0이다. 이는 물리 director의 회전 관성 정의이며 모든 rigid rotation의 전체 tensor를 consistent와 같게 만드는 계약은 아니다.
  3. Lumping measure의 위치를 x_i(z)=X_i+z d_i로 보면 spatial first moment sum_i(mi Xi+hi di)=integral rho X dV이므로 center of mass가 보존된다. Node의 Xi에만 mi를 놓고 hi di를 누락하면 곡면에서 이 등식이 깨진다.
  4. v_i(z)=u_dot_i+z S_i theta_dot_i에 대해 Jensen identity가 다음을 준다.

[ \dot q^T(M_L-M_C)\dot q= \frac12\int\rho\sum_{i,j}N_iN_j|v_i-v_j|^2dV\ \ge0. \tag{M9} ]

두 kinetic energy의 차이는 M9의 절반이다. Equality는 positive-weight point마다 모든 v_i가 같을 때 성립한다. 일반 속도장 및 rigid angular motion의 orbital inertia는 달라질 수 있으며 lumped 값이 그 quadratic form에서 작아지지 않는다. Rigid spatial rotation은 u_i=Omega cross Xi, theta_i=Pi Omega로 재현된다. 이때 M9는 nodal 위치 분산으로 생기는 angular-inertia 차이를 정확히 설명한다. 두 spectrum의 동일성, arbitrary mesh의 특정 수렴 차수 또는 Abaqus lumping 동등성을 acceptance로 요구하지 않는다. Smooth refinement에서 차이가 감소하는지는 독립 evidence다.

Proper orthogonal global rotation Q에 대해 D_Q=blockdiag(Q,Q)를 두면 S(Qd)=Q S(d) Q^T, L'_i=D_Q L_i D_Q^T이며 consistent에도 같은 congruence가 성립한다. 이는 tangent basis 선택과 독립적이다. Constraint도 같은 물리 공간으로 변환한 경우에만 spectrum의 좌표 불변성을 비교한다.

M6. 직접 적분 가능한 평판 oracle

평행 director와 affine 직사각형 면적 A에서는

[ C^{(0)}=\frac{\rho t A}{36} \begin{bmatrix}4&2&1&2\2&4&2&1\1&2&4&2\2&1&2&4\end{bmatrix}, \quad C^{(1)}=0,\quad C^{(2)}=\frac{t^2}{12}C^{(0)}. \tag{M10} ]

각 node는 mi=rho t A/4, hi=0, ji=rho t³ A/48이다. 이는 production quadrature를 호출하지 않고 다항 적분으로 얻는 oracle다. 곡면에서는 M5~M9와 independent volume integration을 사용한다. 두께 t 변경 시 stiffness와 rotary inertia는 다른 차수로 변하므로 전체 spectrum에 하나의 thickness power law를 강제하지 않는다.

좌표 공변적인 drilling scale과 적용 경계

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

승인 근거는 MFE-ADR-007, FEM-REQ-MITC4-EIGEN-002/008/014/024/027 및 기존 계약 대체 범위다. 연구 R07의 후보에서 아래 하나를 선택한다. 식 S1~S8은 FESA 계약에 대한 유도이며 외부 solver의 stabilization과 동일하다는 주장이 아니다.

S1. 초기 physical trace로 고정하는 단일 scale

M4의 원형상 physical matrix를 K20^0라 한다. 각 source node i의 local physical 순서는 [uX,uY,uZ,alpha,beta]이고, R_i [2×2]는 그 matrix에서 alpha,beta에 해당하는 principal block이다. 두 회전은 orthonormal tangent basis의 무차원 성분이다. Element별로

[ k_{ref,e}=\frac18\sum_{i=1}^4\operatorname{tr}R_i, \qquad k_{d,e}=\eta_d k_{ref,e},\qquad \eta_d=10^{-3}, \qquad K_d^l=k_{d,e}I_4. \tag{S1} ]

k_ref,k_d,R_i의 단위는 force·length=ML²/T²다. Translation 대각, lumped/consistent mass, density, constrained tangent, trial tangent 또는 reference 오차는 이 식의 입력이 아니다. 초기 physical K의 여덟 회전 대각 전체를 평균하며 양수인 항만 선별해 분모를 바꾸지 않는다. 기존 coefficient 10^-3와 네 node에 같은 scalar를 쓰는 numerical 역할을 유지한다. 새 사용자 parameter·coefficient sweep·reference tuning은 없다.

Trace 평균은 모든 방향의 회전 강성을 사용하면서 eigenvalue subtraction과 positive nodal-block 선별을 피한다. 최소 spectral 값도 불변량이지만 이번 scale에 필요하지 않은 작은 고유값 conditioning 문제를 추가한다. 이는 R07 후보의 단순성에 따른 선택이며, LAPACK이 FESA의 평균 규칙을 제안한다는 뜻이 아니다. 작은 고유값의 상쇄 한계는 LAPACK DLAEV2 원문, Further Details에 있다.

S2. Positive inventory, 유효 geometry와 계산 순서

기존 승인 geometry·director·section·material 검증을 먼저 적용한다. 기존 8개 stiffness 점에서 J_g>0,w_g>0, t>0,E>0,-1<nu<0.5이면 C5≻0이고 M4에 의해

[ d_r=(K_{20}^0)_{rr} =\sum_g J_gw_g|C_5^{1/2}\bar B_g e_r|^2\ge0, \quad r=(\alpha_1,\beta_1,\ldots,\alpha_4,\beta_4). \tag{S2} ]

따라서 S1이 양수인 필요충분조건은 이 여덟 값 중 적어도 하나가 양수인 것이다. 이는 기존 요구 034/036의 유효 physical rotation inventory 조건과 같다. 개별 R_i가 모두 PD여야 한다는 새 조건은 없다. Exact zero diagonal/block도 합에 포함하므로 기존 허용 geometry를 선별해 줄이지 않는다. 유효 geometry는 noncollinear midsurface를 가지며, 기존 physical kernel의 non-rigid positivity 계약상 translation 0인 비영 tangent-rotation field 전체가 zero-energy일 수 없다. 그 field가 rigid라면 모든 node에서 c+Omega×X_i=0이므로 noncollinearity에서 Omega=c=0이다. 이것이 기존 물리 rank 조건과 양의 inventory의 연결이다. Geometry predicate만으로 모든 왜곡 element의 rank를 검증했다고 주장하지 않고 기존 physical rank/patch 검증을 유지한다.

계산·실패 순서는 다음으로 고정한다.

  1. 기존 순서의 quadrature로 초기 K20^0를 완성하고 모든 항의 finiteness를 확인한다. Node1→4, 각 node의 alpha→beta 순서로 정확히 여덟 d_r를 읽는다.
  2. Negative diagonal은 S2와 불일치하는 numerical stiffness failure다. Zero는 허용한다. Nonfinite/negative를 생략·절댓값·0으로 보정하지 않는다. Physical symmetry/PSD의 독립 검증을 양의 trace 하나로 대체하지 않는다.
  3. d_max=max_r d_r를 구한다. d_max=0이면 빈 positive inventory failure다. 그 외에는 고정된 순서의 안정된 합으로 k_ref=d_max*((sum_r(d_r/d_max))/8)을 평가한다. 이는 S1의 동치 계산이며 임의 floor가 아니다. Exact 산술에서 괄호는 [1/8,1]이므로 유한한 최댓값보다 큰 중간 trace를 만들 필요가 없다.
  4. k_ref와 k_d=10^-3 k_ref가 각각 finite·strictly positive인지 확인한다. Underflow로 0, overflow 또는 invalid가 되면 실패하고 최소 양수로 대체하지 않는다. 안정된 합도 연산 불능을 감추지 않으며 수치 기준·conditioning은 NR가 고정한다.
  5. Source element/node 순서의 기존 reduction으로 조립한다. 임의의 좌표 회전에 대한 bitwise equality와 고정 입력·reduction 순서의 결정론은 구분한다. 전자는 NR의 정규화 congruence 기준을 만족해야 하며 기준 밖 실패를 floating-point라는 말로 수용하지 않는다.

Mass나 geometry rank cutoff를 새로 만들지 않는다. 유효한 positive stiffness라도 표현 범위를 넘는 경우의 numerical failure는 지원 geometry 종류를 축소하는 대체 규칙이 아니다.

S3. 독립 재계산한 complete K와 제약의 공변성

U_i=[a_i b_i], G∈SO(3)를 전역 좌표 회전이라 하자. 새 geometry에서 tangent를 독립 생성하면 U_i'=G U_i O_i, d_i'=Gd_i인 orthogonal O_i가 존재한다. 오른손 frame끼리는 O_i∈SO(2)다. 각 node의 physical 좌표 변환을 A_i=diag(G,O_i^T), 전체 A=blockdiag(A_i), global 24 DOF 변환을 S_G=blockdiag_i(G,G)라 두면 q20'=A q20, q24'=S_G q24다.

MITC strain은 같은 물리 tensor를 보간하고 isotropic C5의 quadratic work와 J는 회전에 불변이다. 따라서 물리 운동학으로 독립 재계산한 K20'^0=A K20^0 A^T이며

[ R_i'=O_i^T R_i O_i,\quad \operatorname{tr}R_i'=\operatorname{tr}R_i, \quad k_{d,e}'=k_{d,e},\quad T_p'S_G=A T_p,\quad T_d'S_G=T_d. \tag{S3} ]

이 등식을 M4에 대입하면

[ K_{phys,e}'=S_G K_{phys,e}S_G^T,\quad K_{drill,e}'=S_G K_{drill,e}S_G^T,\quad K_e'=S_G K_e S_G^T. \tag{S4} ]

G=I인 독립 node별 tangent basis 변경에도 같다. Element의 local strain frame이 재생성되더라도 isotropic work는 같다. Frame 생성 tie로 basis가 달라지는 것도 포함한다. 이미 계산한 old K에 S를 곱하는 검사만으로 S3를 검증할 수 없다. 새 geometry·frame에서 physical K와 S1을 다시 계산해야 한다. Translation of origin도 geometry derivatives, K 및 M를 바꾸지 않는다. Mirror reflection·source connectivity reversal은 이 SO(3) 증명의 대상이 아니다.

전체 model의 block rotation을 S라 하면 stable assembly 뒤 K'=S K S^T, M'=S M S^T다. E1의 ell은 회전에 불변이고 D와 S는 commute한다. 같은 물리 free space를 나타내는 C,C'에는 SC=C'W인 orthogonal W가 있어

[ K_f'=W K_f W^T,\quad M_f'=W M_f W^T, \quad y_f'=W y_f,\quad\lambda'=\lambda. \tag{S5} ]

이는 supported partial rotation BC에도 적용된다. 비교 대상 양쪽의 같은 물리 subspace가 현재 component BC로 표현되어야 한다. 임의 회전 뒤 BC component를 그대로 유지하여 다른 문제를 비교하거나 새 MPC 기능을 요구하지 않는다. NR-MFE-001의 global Z축 회전은 그 URZ free space를 유지하므로 필수 사례다. Complete K 안의 partial-BC stabilization을 삭제하거나 acceptance를 full-free/full-clamp로 한정하지 않는다.

Static load도 F'=SF, prescribed displacement도 같은 물리량으로 변환하면 기존 partition/effective RHS의 해와 full residual/reaction이 함께 변환한다. Unique free 해의 경우 q'=Sq, r'=Sr, physical strain energy는 불변이다. S5는 eigen 근사식이 아니라 개선된 실제 constrained K/M의 congruence다.

S4. Linear rigid modes와 massless drilling의 다른 의미

Linear/eigen 물리 rigid field는 u_i=c+Omega×X_i, theta_i=(I-d_i d_i^T)Omega다. M2에 넣으면 입자 변위는 c+Omega×X이고 물리 strain 및 T_d q가 모두 0이다. 따라서 S1의 양수 값과 관계없이 K_e q=0이다. 비퇴화 shell의 여섯 물리 rigid motions는 positive lumped mass를 가진다. 기존 physical non-rigid positivity와 함께 complete free element의 nullity가 여섯이라는 검증을 유지한다.

반면 한 node의 pure numerical drill z_i=[0;d_i]는 T_p z_i=0, M z_i=0이고 numerical stiffness만 양수다. Physical recovery에는 strain/stress/resultant를 만들지 않는다. Full spatial Omega를 linear UR에 넣어 numerical drill까지 가진 field는 위 five-DOF rigid 대표값과 다르다. 이 구분은 기존 물리 계약이며 새 eigen rigid acceptance의 축소가 아니다.

S1에서 모든 element의 k_d,e>0이고 nodal director가 incident element 사이에 공통이므로 E3/E4의 K_f Z=Z diag(sum_e k_d,e), Kzz≻0, Kpz=0가 그대로 성립한다. E2의 실제 global BC와 null의 교집합을 먼저 구한다. Finite mode의 null coefficient는 0이며 positive 공간으로의 투영은 개선된 원 pencil의 모든 finite spectrum을 보존한다. Null이 없는 partial BC에는 개선된 drilling term이 finite 공간에 남는다. 이 항을 제거하거나 옛 spectrum과 같게 조정하지 않는다. Consistent→lumped의 spectrum equality는 별개로 요구하지 않는다.

S5. Nonlinear objective potential와 초기 고정 lifecycle

기존 nonlinear §10.1~10.4의 polar element corotation R_e, total nodal rotation R_i, minimal swing S_ei 및 gamma_i=atan2(s_gamma,i,c_gamma,i)를 그대로 사용한다. 초기 reference physical K20만으로 S1을 한 번 계산하고 모든 trial/commit/increment/iteration 및 rollback 동안 같은 scalar를 쓴다. State-dependent scale·trial 재선정·기존 objective gamma의 교체는 승인 범위 밖이다.

[ Dk_{d,e}=D^2k_{d,e}=0,\quad \Pi_d^e=\tfrac12 k_{d,e}\gamma^T\gamma,\quad r_d^e=k_{d,e}D_\gamma^T\gamma, ] [ K_d^e=k_{d,e}\left(D_\gamma^TD_\gamma+ \sum_i\gamma_i H_i^\gamma\right),\qquad D_\gamma=D\gamma,\quad H_i^\gamma=D^2\gamma_i. \tag{S6} ]

모든 polar/swing/rotation/atan2 미분과 branch validation은 기존 계약을 유지한다. Positive k_d는 potential 비음성과 pure-drill 양의 작용을 뜻한다. 일반 nonlinear Hessian은 sum gamma_i H_i 때문에 모든 상태에서 SPD라는 결론이 없다. 초기 gamma=0에서도 D_gamma에는 corotation coupling이 있으므로 이를 linear T_d와 동일시하지 않는다. 기존 pure-drill directional quadratic form과 physical 선형극한·Newton tangent consistency를 각자의 계약대로 재검증하며 complete nonlinear Hessian의 모든 entry가 linear M4와 같다고 요구하지 않는다.

같은 물리 nonlinear 상태를 G로 표현하면 모든 rotation tensor와 initial director가 conjugation/rotation되고 scalar gamma는 같다. Initial S1도 같으므로 potential은 불변이다. Work-conjugate Cartesian perturbation에 대해 chain rule로 residual과 tangent의 공변성이 따른다. Superposed finite rigid motion에서는 기존 R_e^+=R R_e, R_i^+=R R_i에 의해 gamma가 같고, stress-free rigid state에는 gamma=0·physical strain=0이다. 따라서 finite rigid motion의 영에너지 및 objective rigid orbit를 따른 변분 검증을 유지한다. S4의 linear tangent-projected UR field를 nonlinear total triad 회전에 대신 넣지 않는다.

현재 nonlinear 생성 경로의 NonlinearMitc4Shell::Create는 초기 linear Stiffness()의 drilling_stiffness를 받아 저장한다. 이 경계에서 S1의 같은 값을 사용해야 한다. 물리 strain/material, exact external moment work, Newton/line-search/cutback, accepted state 및 physical output은 기존 계약이다. S4/E3 projection은 이 nonlinear Hessian·preload·prestressed eigen으로 확장하지 않는다.

S6. NR-MFE-001의 새 algebraic target과 정적 대응

NR 소유 반례의 독립 적분 block을 입력 근거로 사용한다. 그 geometry·source BC·material 및 옛 실패 이력은 보존한다. 각 corner에서 R_aa=49/12, R_bb=23/6, R_ab=±1/8이므로

[ k_{ref}=95/24,\quad k_d=19/4800,\quad M_{ff}=3/50,\quad K_{ff}=10369/7500,\quad \lambda=10369/450=23.042222\ldots . \tag{S7} ]

Global Z축 45° 회전 뒤 재생성한 tangent basis에서도 trace는 95/12이므로 같은 식이다. 이는 production/FEAST 실행 결과가 아닌 r2 formula의 exact target이다. 독립 재계산과 runtime에서 반례가 해소되는지는 NR/Implementation이 각각 검증한다.

정적 대응에는 node1에 m=(5/3)M0 b, 다른 load는 0을 사용한다. 여기서 b=(-4/5,0,3/5)와 M0는 finite 비영 moment amplitude [force·length]다. d·m=0, mZ=M0이므로 기존 physical moment admissibility를 지킨다. 단순 m=M0 eZ는 drilling 성분을 가져 기존 load 계약을 위반하므로 사용하지 않는다. 같은 모든 DOF 고정, node1 URZ만 free에서

[ \theta_{1Z}=\frac{M0}{K_{ff}},\quad q_{constrained}=0,\quad r=Kq-F. \tag{S8} ]

회전된 input에서는 m'=Gm을 component load로 주고, mZ'=M0와 같은 BC를 유지한다. Supported component BC/load만으로 thetaZ, complete response·full reaction의 공변성을 검증할 수 있다. Physical recovery와 numerical contribution의 의미는 합치지 않는다.

S7. 대체·보존 범위와 필수 verification

기존 linear FESA-REQ-LSMITC4-034, 056의 최소 positive diagonal 선정·그 공식 검증만 S1/S2로 대체한다. 기존 036의 invalid positive inventory 의미는 S2로 유지한다. Nonlinear §10.3은 초기 scale 식만 대체하고 §10.1/10.2/10.4 및 frozen lifecycle은 유지한다. 기존 feature 문서·과거 실패 evidence를 소급 수정하지 않는다.

필수 수학 검증은 S1 직접 평균/단위/zero inventory·잘못된 finite/sign 처리, 독립 node별 tangent 재생성과 global geometry 회전의 S3/S4, S7/S8의 supported partial BC, physical six rigid modes와 pure drilling rank/separation, E3의 KZ/MZ/Kpz/Kzz 및 원 free residual이다. Nonlinear은 같은 초기 scale·immutability, objective rigid motion, exact first/second directional derivatives·물리 선형극한·정적 평형/reaction/energy·rollback을 기존 계약으로 재검증한다. Density 없는 기존 static 모델도 계속 유효하다.

실행해야 하는 기존 shell, shellNL, shellNL-meshfine 및 linear-limit closure portfolio와 후속 meshfine-02 이력의 구분, source identity, U blocking/UR warning-only, reaction review-only는 requirements evidence의 단일 portfolio를 따른다. 새 eigen 외부 비교는 지정 input/TXT의 10개 Value만 사용한다. Static reference를 eigen mode-shape gate로 추가하거나 기존 static 회귀를 Value-only를 이유로 삭제하지 않는다. Numerical threshold·필수 case 구체화·FEAST control/budget/seed와 독립 반례 해소 판정은 NR, TDD/runtime/reference 실행은 Implementation, 독립 물리 판단은 Physics 소유다.

제약 후 질량 공간, 유한 spectrum과 FEAST

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

질량 유도 M1~M10, research evidence의 S03~S08, P01, R03/R04/R07를 적용한다. 아래 reduction은 r2 scale로 개선된 원형상 stabilized stiffness와 derived lumped mass의 pencil에 정확히 대응한다. 기존 nonlinear trial tangent와는 별개다.

E1. 조립, 단위 scaling과 실제 global 제약

Element gather A_e를 stable source node/component 순서로 정의하면 K=sum A_e^T K_e A_e, M=sum A_e^T M_L,e A_e이다. 이하 M은 항상 lumped이다. Element contribution→stable COO key→고정 순서 reduction으로 두 행렬을 조립한다. Lumped nodal block이므로 M의 node 간 block은 0이다. Worker는 global storage를 동시에 갱신하지 않는다. Source identity와 equation index는 다른 번호다.

혼합 단위를 가진 6 DOF를 그대로 Euclidean norm으로 합하지 않는다. 활성 shell의 기존 최대 edge 길이들 중 최대값 ell>0 [L]을 characteristic length로 선택하고 D=blockdiag(ell I3,I3)를 node마다 둔다. q=D y에서 y는 무차원, Khat=D^T K D [ML²/T²], Mhat=D^T M D [ML²]이다. 이는 congruence이며 physics와 lambda를 변경하지 않는다.

원 global homogeneous BC의 free injection을 C라 한다. 고정 DOF의 행은 0, free DOF의 행은 하나의 1이며 free 순서는 DofManager의 stable 순서다.

[ y=C y_f,\qquad K_f=C^TKhat C,\qquad M_f=C^TMhat C. \tag{E1} ]

Nonzero prescribed base state는 이 procedure의 입력 오류다. 먼저 local 회전을 임의 삭제한 뒤 global BC를 적용하지 않는다. 특히 global UR3와 drilling은 같지 않다.

E2. Null/positive basis를 node마다 결정

각 active node의 원 질량 null은 M8로부터 z_i=[0;d_i] 한 방향이다. 따라서 node별 실제 free 좌표에서 null이 존재하는 필요충분조건은 constrained rotational component마다 해당 d_i 성분이 정확히 0인 것이다. 그때 Z_i=C_i^T z_i는 unit null vector이며 otherwise null dimension은 0이다. Translation constraint는 이 판정에 영향을 주지 않는다. 모든 회전이 고정이면 null도 없다.

이 판정은 analytic nullspace와 실제 입력 BC의 교집합이다. 작은 nonzero constrained director 성분을 임계값으로 0으로 바꾸지 않는다. 거의 정렬된 경우 작은 양의 physical mass가 남을 수 있으며 이를 보존한다. Numerical conditioning 검증을 통과하지 못하면 명시적 실패로 처리하고 free DOF를 추가 삭제하지 않는다.

각 node에서 Z_i의 Euclidean 직교 여공간 basis를 P_i^f라 한다. 회전 3개가 free이면 기존 tangent basis (a_i,b_i)를 사용할 수 있다. Free 회전 2개 안에 null이 있으면 그 평면에서 d_i에 수직인 단위벡터 하나, 회전 1개가 null이면 positive 회전 basis는 없다. Free translation axis는 그대로 유지한다. Null이 없으면 P_i^f=I다. Source component 순서, basis sign/tie는 고정한다. Householder 등 동등한 작은 orthogonal construction을 쓸 수 있으나 physical rank를 수치 eigenvalue cutoff로 정하지 않는다.

[ P=\operatorname{blockdiag}(P_i^f),\quad Z=\operatorname{blockdiag}(Z_i),\quad [P\ Z]^T[P\ Z]=I,\quad M_p=P^TM_fP\succ0,\quad M_fZ=0. \tag{E2} ]

여기서 P_i^f와 M2의 tangent projector는 서로 다른 기호다. 실제 positive dimension n=cols(P), null dimension nz=cols(Z)이다. Reference의 full clamped flat mesh에서는 625개 interior node, nf=3750, nz=625, n=3125가 예상된다. 실제 assembly와 rank evidence로 확인한다.

E3. 개선된 stiffness에서 decoupling의 정확한 증명

공통 node director는 shell geometry가 한 번 정의하고 ElementFactory::CreateShell이 node identity로 각 element에 전달한다. MITC4 kernel의 PhysicalTransformation20, DrillingTransformation4, Stiffness에서 M4의 구조를 확인했다. 옛 계수만 S1/S2로 대체하며 모든 incident element의 k_d,e는 finite positive다. Physical kernel과 공통 director·nodal drill map은 그대로다.

한 node에만 [0;d_i]가 있는 full vector z_i에 대해 T_p A_e z_i=0이다. Drilling 부분은 해당 node에만 작용하므로

[ Khat z_i=\kappa_i z_i,\qquad \kappa_i=\sum_{e\ni i}k_{d,e}>0,\qquad K_f Z=Z\operatorname{diag}(\kappa_i). \tag{E3} ]

마지막 등식은 E2에서 z_i가 실제로 free space에 있을 때 성립한다. 따라서

[ K_{pz}=P^TK_fZ=0,\quad K_{zz}=Z^TK_fZ=\operatorname{diag}(\kappa_i)\succ0, \quad K_p=P^TK_fP,\qquad K_p p=\lambda M_p p. \tag{E4} ]

Finite mode의 massless 성분은 z=0이다. 이 projection은 arbitrary small coupling을 버리는 근사가 아니라 승인된 physical/drilling separation의 항등식이다. Null이 없는 부분 제약 node에서는 P=I이고 개선된 drilling contribution이 K_p에 그대로 남는다. 이를 빼면 원 constrained stabilized pencil을 바꾸므로 금지한다. 여기서 원 pencil은 r2의 실제 BC 적용 후 K/M이다. 옛 K와 새 K의 spectrum 동일성은 요구하지 않는다. S3의 complete K 공변성은 이 partial-BC contribution까지 포함한다.

실제 floating-point matrix와 basis의 M_f Z, K_fZ-Z diag(kappa), P^T Z를 별도 evidence로 남긴다. 증명된 analytic null만 구조적으로 제거하고 계산된 tiny coupling을 근거 없이 threshold로 버리지 않는다. 이 항등식의 roundoff 검증 및 복원 후 full free residual이 NR 기준을 넘으면 assembly/director/conditioning 실패로 중단한다. 추가 massless mode를 찾아 제거하거나 개선된 K를 재조정하지 않는다. S5의 nonlinear Hessian에는 corotation coupling이 있으므로 E3/E4를 모든 nonlinear 상태, preload 또는 prestressed eigenproblem에 적용하지 않는다.

E4. 일반 Schur 식과 비정상 rank의 의미

E3의 구조가 없는 일반 symmetric pencil을 비교하면, Kzz가 가역일 때만

[ z=-K_{zz}^{-1}K_{zp}p,\quad (K_{pp}-K_{pz}K_{zz}^{-1}K_{zp})p=\lambda M_p p. \tag{E5} ]

이는 massless row를 푼 정확한 elimination이며 massive DOF의 근사 Guyan reduction이 아니다. 예를 들어 K=[[6,2],[2,4]], M=diag(2,0)이면 lambda=5/2, z=-p/2이다. 첫 행만 남기는 lambda=3은 잘못이다. E5는 independent small-pencil 검산과 잘못된 projection을 잡는 기준이다. 이 Feature의 production shell 경로에는 E3이 적용되므로 일반 dense Schur 구현을 요구하지 않는다. E3과 불일치하는 input을 E5로 자동 fallback하여 승인 geometry 문제를 숨기지 않는다.

  • nz=0: null 처리 없이 실제 constrained Kf,Mf의 문제다.
  • Local positive rank 0: 모든 free DOF가 null이면 해당 node의 finite 좌표는 없고 양의 Kzz에 의해 그 free coordinate는 0으로 복원한다. Fully constrained node도 finite 좌표 0개다. 다른 node의 유효 finite 좌표는 계속 보존한다.
  • Global n=0 또는 N>n: 요청 모드가 존재할 수 없으므로 명시적 model/solve 실패다. 정적 해석의 유효 0×0 Kff 계약과 이 양의 mode-count 요구를 혼동하지 않는다.
  • 예상 Kzz가 singular/nonpositive이거나 활성 node에 mass contribution이 없음: 유효 shell의 E3 전제가 깨진 것이다. Common K/M null이면 임의 lambda에 대한 indeterminate direction이며 ordinary finite eigenmode가 아니다. 제거하거나 pseudoinverse, stiffness/mass epsilon으로 정규화하지 않고 진단한다.
  • 일반 indefinite Kzz의 singular/nonzero Kpz case는 descriptor-pencil의 추가 constraint를 요구한다. 이번 positive stabilized shell과 다른 문제이며 자동 해석하지 않는다.

E5. SPD whitening, 복원과 sparsity

M_p는 node별 최대 6×6 SPD block이다. 각 block을 Cholesky하여 M_p=L L^T를 얻고 다음을 정의한다.

[ A=L^{-1}K_pL^{-T},\quad p=L^{-T}x,\quad A x=\lambda I x,\quad \phi=D C P L^{-T}x. \tag{E6} ]

Inverse를 dense global matrix로 만들지 않고 작은 block triangular solve로 congruence를 구성한다. phi는 source node의 global 6 DOF로 복원되고 constrained entries는 정확히 0이다. phi^T M phi=x^T x다. Identity mass를 전달하는 E6도 실제 lumped mass에서 얻은 generalized SPD 문제다. Consistent mass 또는 인공 unit physical mass로 바꾼 것이 아니다.

Projection/whitening은 node 간 topology를 늘리지 않는다. 기존 node coupling마다 작은 dense block만 생기며 전체 O(n²) Schur matrix와 dense inverse를 피한다. Sparse shifted FEAST factorization 자체의 fill은 별도 존재한다. Full M_C는 element별 24×24와 세 4×4 moment로 검증할 수 있고 global dense consistent matrix는 불필요하다. Allocation/nnz/factorization memory 실패는 불완전 모드의 성공이 아니라 명시적 failure다.

E6. 유한 search interval과 요청 개수

요청 N은 .inp *FREQUENCY의 양의 정수이며 현재 reference는 10이다. Reference Value/Freq/행수는 interval, scale, count 또는 parameter 선정에 사용하지 않는다.

먼저 s=||A||inf [T^-2]를 안정된 합으로 계산한다. s>0이면 B=A/s로 두고, 반환값은 lambda=s mu다. A=0이면 s=min_e E_e/(rho_e ell²)>0라는 모델 유래 time scale을 사용하며 B=0이다. 이 zero-matrix case도 N개의 0 모드를 FEAST에서 계산·검증한다. Invalid/underflow/overflow scale을 임의 1로 바꾸지 않는다.

각 행의 off-diagonal absolute sum을 r_i라 하면 Gershgorin에 의해 min_i(Bii-ri)<=mu<=max_i(Bii+ri)다. 안정된 directed-outward accumulation 또는 동등하게 증명된 roundoff bound를 포함하여 finite enclosure [gL,gU]를 만든다. B=0에서는 알고리즘용 dimensionless enclosure [-1,1]을 사용한다. Nonzero B의 endpoint margin은 NR가 정할 dimensionless coefficient와 ||B||inf 및 endpoint ULP로 결정하고, outward nextafter를 적용해 a0<gL<=gU<b0를 확보한다. 이는 물리 mass/eigenvalue floor나 zero clamp가 아니다.

CSR count c(a,b)는 endpoint가 분리된 interval에 대해 Intel fpm[49]=1이 반환한 count와 status다. c(a0,b0)=n을 먼저 확인한다. 다음은 finite search의 결정적 규칙이다.

  1. 모든 count는 원 enclosing lower bound a0부터의 prefix count로 평가한다. lo=a0의 알려진 prefix count는 0, hi=b0의 count는 n이다. Upper search에서 midpoint v의 count가 N 미만이면 lo=v, 아니면 hi=v로 둔다. 성공한 hi와 count를 항상 보존한다. N<=count<=min(n,2N+8)인 upper endpoint를 얻으면 이 최적화를 끝낼 수 있다. 이는 workspace 목표이며 N의 변경이나 mode cap이 아니다.
  2. Cluster 때문에 목표 count로 줄일 수 없어도 count>=N인 마지막 safe upper를 쓴다. Representable midpoint가 없거나 NR endpoint separation 폭에 도달하면 subdivision을 끝낸다. 경계에 있는 반복 고유치의 일부만 count하도록 tolerance를 조정하지 않는다.
  3. 불필요하게 먼 lower bound를 줄이기 위해 a=a0, 위에서 얻은 b=hi로 시작한다. v=(a+b)/2의 prefix count가 0이면 a=v로 이동하고, 양수이면 이 하한 축소를 끝낸다. 따라서 (a0,a)의 empty-prefix evidence를 잃지 않는다. 아주 작은 고립 cluster에서 넓은 구간이 검색 실패를 유발하는 Intel의 경고를 이 과정과 후검증으로 다룬다.
  4. 최종 (a,b)에서 다시 count하여 c>=N이고 알려진 prefix와 일치함을 확인한다. Capacity는 m0=min(n,max(c+8,ceil(3c/2)))로 한다. c=n이면 m0=n이다. Checked integer arithmetic을 쓰며 큰 multiplicity도 전체 count를 수용한다.
  5. Solve 성공 후 모든 c개를 독립 검증하고 정렬하여 첫 N개를 결과 candidate에 넣는다. 같은 eigenvalue의 multiplicity를 지우거나 평균내지 않는다. N번째가 repeated/cluster의 내부에 있으면 내부 계산 group은 보존하고 출력 row는 정확히 N개다.

Midpoint·endpoint 이동은 overflow-safe하게 수행한다. NR는 count-call budget, endpoint separation coefficient와 perturbation 횟수를 구현 전에 고정한다. Budget은 각 search 및 endpoint 재시도까지 포함하는 유한 정수다. -5 등의 endpoint 실패 시 기록된 bracket 안에서 NR가 정한 간격으로 양옆의 endpoint 후보를 순서대로 평가하며, 성공한 prefix/count evidence 없이는 bracket을 갱신하지 않는다. 마지막 valid bracket이 없거나 count monotonicity/total count가 맞지 않으면 실패다. Search 최적화 budget에 도달하면 이미 검증된 enclosing bracket을 쓸 수 있으나 실패한 count를 성공으로 바꾸지 않는다.

Postsolve에서는 returned m=c, finite paired vectors/values, Gram rank, interval 내부 및 endpoints와의 separation을 확인한다. Endpoint에 너무 가깝거나 info=1/2/3, count/solve mismatch이면 NR가 정한 유한 회수 안에서 safe bracket 확대·재count·capacity 확대만 허용한다. 매번 count/solve history를 보존한다. 그 뒤에도 불일치하면 실패하고 부분 모드 또는 다른 eigensolver로 fallback하지 않는다. Formulation은 이 수학적 알고리즘을 NR에 인계한다. 구현 진입 bundle은 다음 stage가 수치값·budget을 고정한 뒤 완성된다.

Full enclosing bound, empty-prefix, interval count와 solve-count/Gram 검증은 낮은 N개의 누락을 탐지하는 서로 다른 evidence다. Intel의 documented total count를 모든 conditioning, endpoint 및 floating-point 상황의 completeness theorem으로 확대하지 않는다. 독립 known-spectrum의 zero/negative/cluster/repeated/size1/request=n case와 실제 설치 runtime 검증이 필수 연결점이며 선택 및 수치 기준은 NR가 소유한다.

E7. FEAST 경계와 deterministic 실행

Actual eigenpairs는 dfeast_scsrgv로 E6의 (A,I) 또는 E6에서 동일하게 scale한 (B,I)를 풀어 구한다. Real symmetric, SPD second matrix, n>0, 0<m0<=n, strict finite emin<emax를 만족한다. uplo=U로 A와 identity mass의 각 CSR을 전달하며 row/column 증가 순서, duplicate-free, 1-based row pointer, terminal nnz+1을 검증한다. 두 pattern이 같을 필요는 없다. MKL_INT, n, nnz+1, column index와 n*m0*sizeof(double)의 변환/곱은 checked다. FEAST vendor type과 scratch resource는 private backend에만 있다.

Call마다 feastinit한 128-entry parameter 배열에서 이번 call의 설정을 채운다. CSR check, SPD check를 켜고 subspace-only mode는 끈다. Zero mode에도 적용할 수 있도록 trace stopping을 사용하고 독립 residual을 반드시 후검증한다. epsout만으로 pass하지 않는다. Contour points, stopping exponent, finite loop bound는 NR가 정한다. User initial subspace를 선택하고 고정 seed/명시된 integer generator 및 고정 QR 순서로 full-column-rank 초기 공간을 만든다. m0=n에서는 identity를 쓴다. Initial guess가 모든 eigenspace와 충분히 overlap한다는 보장은 없으므로 count/solve/Gram 검증으로 부족한 projection을 검출한다. Seed를 바꾸며 통과할 때까지 반복하지 않는다. Backend의 thread/재현 설정과 seed는 실행 evidence에 기록한다. 동일 source 입력의 sparse structure, reduction, row 및 diagnostic 순서는 고정하며 repeated mode의 개별 벡터 방향은 수학적으로 유일하지 않다는 제한을 유지한다.

Solve는 e,res의 m0 entries와 column-major x[n*m0]를 준비하며 첫 m columns만 소비한다. Count call의 m0는 output count로 overwrite되므로 solve 요청수/실제 allocation capacity와 분리한다. 설치 API가 count-only workspace의 작은 용량을 명시하지 않은 경우 보수적으로 count scratch는 m0=n, x[n*n]까지 준비하고 count 단계 사이에 재사용한다. Solve 전 해제할 수 있다. Reference n=3125에서 이 scratch는 약 78.1 MB (74.5 MiB)이고 10모드의 실제 solve subspace는 이보다 작다. Count용 보수적 allocation은 dense Schur와 별개지만 O(n²) memory 비용이므로 Planning/Implementation이 peak 및 shifted sparse factorization fill을 측정한다. Allocation 실패 시 N을 줄이지 않는다.

Intel 근거: API/storage/capacity, C-index parameter와 count, status/endpoint/고립 cluster 주의. 2026-09-06 확인. info=0 이외의 빈 interval, 미수렴, subspace 부족, count/inner solver, allocation 또는 SPD 실패는 status와 stage를 보존하여 진단한다. Count success는 eigenpair success가 아니며, caller의 count authority는 끝까지 .inp다.

E8. Mode identity, normalization과 상태

모든 returned eigenpair를 lambda 오름차순으로 함께 정렬한다. Equal lambda의 tie는 original solver column order로 안정 정렬한다. Near-equal 값을 평균하거나 merge하지 않는다. 양의 modal mass로 column별 normalize하고, 가장 큰 absolute scaled global component의 sign이 양수가 되도록 한다(source DOF 순서로 tie 결정). 서로 다른 eigenvalues의 벡터를 Gram 보정 목적으로 임의 혼합하지 않는다. Failed orthogonality는 solve/validation 실패다. 정확한 repeated eigenspace의 다른 orthonormal basis는 같은 해이고 mode-shape external matching은 없다. Density scaling/좌표 테스트는 repeated group의 projector로 비교한다.

Normalized phi^T M phi=1의 수치 convention에서 phi_u의 차원은 M^-1/2, phi_theta는 M^-1/2 L^-1이고 modal amplitude가 M^1/2 L를 가진다. Mode vector는 실제 응답 변위가 아니다. Scalar lambda [T^-2]와 source step/mode identity를 분리하고 internal node/equation number를 source label로 노출하지 않는다.

원형상·density 검증→consistent/moment 검증→lumped 검증→K/M 조립→실제 BC→E2E6 admissibility→E6E7 FEAST→global 복원/독립 검증→candidate 결과 순서다. 반환 lambda는 부호를 보존한다. NR 기준상 유의한 음수는 불안정/invalid spectrum 실패, near-zero는 분류와 raw value를 함께 유지하며 0으로 clamp하지 않는다. 양수에서만 f=sqrt(lambda)/(2pi)를 파생한다. 정확한 0은 f=0이고 작은 음수에는 실수 frequency를 만들지 않는다. 이 validity의 저장 방식은 I/O owner가 정한다.

N개 검증이 끝나기 전에 accepted state를 바꾸지 않는다. 검증된 candidate HDF5를 완성·검증·close한 뒤 final replacement를 수행하고 성공 뒤 준비된 state를 교환한다. Replacement 이후 state 교환은 실패하지 않도록 준비한다. 제어된 solve/validation/write/ finalization failure에서 이전 accepted state와 기존 final HDF5를 보존한다. Crash/power loss까지 원자성을 새로 주장하지 않는다. Live log lifecycle은 별도다. Modal residual의 constrained 성분을 static reaction으로 출력하지 않는다.

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

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

질량 식 M1~M10, 축소·복원 식 E1~E8, 개선된 scale·공변성 S1~S8의 기호를 사용한다. 이 문서는 측정량과 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과 독립 node별 tangent 재생성에서 두 질량, physical/numerical contribution 및 complete stiffness의 congruence와 E1~E6 spectrum 불변성을 검사한다. S1의 scale을 새 geometry/frame에서 다시 계산하여 S3/S4를 검증한다. 고정된 tensor에 회전행렬만 곱하는 검사로 대체하지 않는다. Norm은 V1의 same-unit congruence ratio, scalar scale은 |kd'-kd|/(|kd'|+|kd|)다. Spectrum은 같은 operator time scale s로 |lambda_i'-lambda_i|/s를 측정하며 repeated 그룹은 아래 projector를 쓴다.

같은 물리 BC가 양쪽에서 지원되는 partial rotation BC를 포함하고, S6의 NR-MFE-001 geometry/45° 회전 및 대응 정적 response/reaction을 필수 통과 사례로 둔다. Full-free/full-clamp만으로 대체하거나 반례를 warning-only로 내리지 않는다. Partial BC에 남는 개선된 stabilization도 포함하며 기존 K와 새 K의 값이 같을 필요는 없다. Rotation 후 다른 물리 component BC를 같은 문제로 비교하거나 새 MPC 입력을 추가하지 않는다.

Nonlinear rigid motion은 기존 total triad의 finite rotation과 objective gamma를 사용한다. S5의 potential/residual/Hessian을 검증하며 위 linear tangent-projected UR field 및 massless projection을 nonlinear 상태에 적용하지 않는다. 개선 전 scale 공식만을 기대한 기존 검사는 S1로 갱신하고 나머지 rigid/patch/physical positivity acceptance는 보존한다.

모든 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
r2 stabilization/static S1~S8의 positivity/재계산 공변성·partial BC eigen/static, nonlinear 고정 scale·exact variation과 기존 static portfolio
External reference r1 NR의 원본 input+TXT 10개 Value·singleton family·모두 blocking 논리 계약을 r2 영향 확인 후 유지

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 전에 거부한다. r1 reference-model의 10개 singleton family·모두 blocking 계약과 공통 정책에 따른 실효 mode별 1%는 보존할 근거다. Formulation이 이를 재선택하지 않으며 r2 영향 재확인은 NR 소유다. V1~V6의 내부 수치 기준은 아직 NR에서 최종 고정하지 않았다. Schema 경로/저장 field/public diagnostic 이름은 I/O owner의 계약이다.

V7. 실행 evidence와 남는 위험

이 절의 명령·hash·4문서 검사는 r1 이력이다. r2 갱신 evidence는 V8에 둔다. 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를 제시해야 해소된다.

V8. r2 영향 확인과 bounded evidence

r2에서는 M4의 scale, E3의 개선된 pencil 명시, V5의 complete K/partial-BC coverage와 정적 회귀 연결을 갱신했다. Mass M1/M2/M5M10 및 FEAST E6E8, V1~V4의 검증식은 numerical scale 선정과 독립이거나 동일 개선된 K를 대입하는 식이므로 보존한다. r1 NR의 curved rational mass oracle·27점 degree 결과, count/trace API 근거와 reference identity는 읽고 재사용 범위를 확인했으며 새 실행 결과로 바꾸지 않았다.

Get-Content와 scoped rg로 r2 승인 요구/연구·기존 선형 요구 034/036/038/056, nonlinear §10.1~10.4 및 아래 실제 source를 대조했다. 이 조회는 exit 0이었다.

rg -n 'PhysicalTransformation20|DrillingTransformation4|drilling_reference|drilling_stiffness' src/fesa/elements/mitc4_shell.cpp
rg -n 'drilling|Drilling|Stiffness\(' src/fesa/elements -g '*nonlinear*'

처음 nonlinear source 검색에 literal src/fesa/elements/*nonlinear*를 사용한 호출은 PowerShell 경로 오류를 출력했다. 해당 검색을 위 -g 방식으로 고쳐 exit 0을 확인했다. 원본 reference 및 기존 NR mass oracle/옛 반례를 다시 실행하지 않았다. 2026-09-06 web open으로 S1의 LAPACK 공식 문서상 작은 eigenvalue 상쇄 경고를 확인했다. Configured vault grounding 요청이 없으므로 fem-theory-query는 별도 적용하지 않았다.

다음은 NR의 R block을 사용해 새 scale 식의 exact arithmetic만 확인한 명령이다. Production source prototype, C++ test, FEAST 또는 독립 NR 판정을 대체하지 않는다.

@'
from fractions import Fraction as F
aa,bb=F(49,12),F(23,6)
base=[]; rotated=[]
for ab in [F(1,8),-F(1,8),F(1,8),-F(1,8)]:
    base.extend([aa,bb])
    rotated.extend([(25*aa+16*bb+40*ab)/41,
                    (16*aa+25*bb-40*ab)/41])
ref=sum(base)/8
assert ref == sum(rotated)/8 == F(95,24)
kd=ref/1000
mass=F(3,50)
stiffness=F(9,25)*bb+F(16,25)*kd
assert kd == F(19,4800)
assert stiffness == F(10369,7500)
assert stiffness/mass == F(10369,450)
assert F(3,5)*(-F(4,3))+F(4,5) == 0  # d dot (5b/3)
print('k_ref=',ref,'k_d=',kd,'Mff=',mass,'Kff=',stiffness,
      'lambda=',stiffness/mass,'theta_per_unit_moment=',1/stiffness)
'@ | python -B -

실제 위 here-script를 문서에서 추출해 python -B -로 실행했다. Exit 0, k_ref=95/24, k_d=19/4800, Mff=3/50, Kff=10369/7500, lambda=10369/450, 단위 moment 응답 7500/10369를 얻었다. Owned 5개 문서의 metadata·27 requirement coverage·57개 상대 경로·whitespace·final newline· display-math delimiter·언어 혼입을 read-only Python으로 검사했고 exit 0, issues 0이었다. git diff --check도 exit 0; LF/CRLF 안내만 있었으며 compiler warning 검증과는 별개다. Stage/commit은 하지 않았고 git status --short의 Coordinator 변경은 보존했다.

이 exact 식에 수치 tolerance를 추가하지 않는다. NR가 S1~S8을 독립 검토하고 V6의 내부 기준· FEAST budget/seed·mandatory matrix를 완성해야 한다. Implementation은 승인된 기존 static portfolio와 새 eigen Value-only 비교의 실제 TDD/runtime evidence를 생성해야 한다. Source/tests/build/phase/Hook/reference/Git 및 다른 owner 문서를 편집하지 않았다. CMake/CTest·Harness·FEAST·외부 solver·reference numerical comparison은 이 단계에서 미실행이다.