diff --git a/docs/mitc4-shell-feast-eigen2/ADR.md b/docs/mitc4-shell-feast-eigen2/ADR.md index 1aeffaa..8c87ac5 100644 --- a/docs/mitc4-shell-feast-eigen2/ADR.md +++ b/docs/mitc4-shell-feast-eigen2/ADR.md @@ -46,3 +46,12 @@ - 승인 근거: “research 단계부터 io-definition 단계까지 작업을 진행”, “작업시간이 30분 이상 걸리면 작업을 중지하고 진행사항과 오래걸리는 이유를 보고”. - 영향: 기존 수식·control·schema는 새 전문 검토를 거쳐 채택 여부를 명시한다. 문서 승인과 실제 solver 검증을 구분하며 구현·reference 실행·push는 수행하지 않는다. - 제한: 2026-09-08 12:07:56 UTC부터 12:37:56 UTC까지. 제한 내 미완료 작업은 통과로 바꾸지 않고 상태·원인을 보고한다. + +## MFE2-ADR-006 — 정식화 r1의 선택과 연구 gap 처리 + +- 상태: 승인된 요구 범위 안의 formulation 선택. 독립 numerical 판정은 별도 기록한다. Owner: formulation-agent; 기록: 메인 assistant. +- 결정: [정식화](formulation.md)의 27점 consistent moments→nodal block lumping, 실제 BC 우선 analytic null 제거·nodal whitening 및 초기 physical rotary trace 평균 stabilization을 이번 수학 계약으로 선택한다. Nonlinear objective potential과 초기 scale 고정 lifecycle을 유지한다. +- 이유: 질량 유도 관계·drilling null·부분 회전 제약을 보존하고 기존 최소 대각 scale의 기저 의존성을 해결한다. 기존 유도의 채택 범위를 새 문서에 명시하며 과거 pass를 승계하지 않는다. +- FEAST: 독립 outer enclosure와 성공 total count를 기준으로 lower endpoint를 고정하고 upper-prefix 축소만 선택적으로 사용한다. 미확인 empty-count 성공에 의존하지 않으며 최적화 실패 시 마지막 확인된 구간을 사용한다. +- 근거·한계: [연구 G01/G02](research-evidence.md)에서 count-only 빈 구간 및 작은 workspace 보장이 확인되지 않았다. 보수적 workspace와 실제 runtime·memory 검증 의무를 남기며 backend 통과를 선언하지 않는다. +- 승인 경계: 기존 사용자 요구의 수학적 구체화이며 새로운 물리 범위·외부 tolerance·공개 호환성 변경은 없다. 수치 controls·검토는 NR, 영속 schema는 I/O가 소유한다. diff --git a/docs/mitc4-shell-feast-eigen2/FEATURED_AGENTS.md b/docs/mitc4-shell-feast-eigen2/FEATURED_AGENTS.md index 5df28c2..79e5165 100644 --- a/docs/mitc4-shell-feast-eigen2/FEATURED_AGENTS.md +++ b/docs/mitc4-shell-feast-eigen2/FEATURED_AGENTS.md @@ -32,5 +32,6 @@ | [requirements.md](requirements.md) | requirement-agent | 원자적 요구사항·acceptance intent·검증 matrix | | [requirements-evidence.md](requirements-evidence.md) | requirement-agent | 재사용 근거·기존 요구 대응·reference 정적 관찰·미해결 사항 | | [research.md](research.md), [research-evidence.md](research-evidence.md) | research-agent | 일차 출처·적용 판단·검증 후보·미해결 근거 | +| [formulation.md](formulation.md), [질량·stabilization](formulation-mass-stabilization.md), [eigen](formulation-eigen.md) | formulation-agent | 구현 가능한 수학 계약·기존 유도 채택 경계 | 반환은 결과·변경 파일·정적 확인·미해결 항목으로 충분하다. Git 경로 선택·커밋과 최종 결과 확인은 메인이 수행한다. diff --git a/docs/mitc4-shell-feast-eigen2/PRD.md b/docs/mitc4-shell-feast-eigen2/PRD.md index fcd8402..37f263b 100644 --- a/docs/mitc4-shell-feast-eigen2/PRD.md +++ b/docs/mitc4-shell-feast-eigen2/PRD.md @@ -63,7 +63,7 @@ solver build/test·reference 비교와 release 감사는 포함하지 않는다. - [x] 상대 링크·ID를 검사하고 커밋 대상이 새 Feature 문서 5개뿐인지 확인한다. - [x] Research: [연구](research.md)와 [근거](research-evidence.md)에 일차 출처·질량/축소/stabilization 후보 및 실제 runtime 확인이 필요한 FEAST 두 항목을 기록했다. -- [ ] Formulation: 질량·안정화·축소·고유치 해법의 구현 가능한 수학 계약을 작성한다. +- [x] Formulation: [정식화](formulation.md)에 질량·공변 stabilization·constraint-first 축소·FEAST·복구 수학 계약을 작성했다. 독립 numerical review는 별도 항목이다. - [ ] Numerical review: 독립 계산·검토로 정식화와 검증 계획의 적합성을 판단한다. - [ ] I/O definition: 입력·진단·결과 schema·reference mapping 계약을 정의한다. - [ ] 신규 문서의 링크·계약 일관성과 변경 범위를 확인하고 단계별 변경을 커밋한다. diff --git a/docs/mitc4-shell-feast-eigen2/formulation-eigen.md b/docs/mitc4-shell-feast-eigen2/formulation-eigen.md new file mode 100644 index 0000000..fe397d2 --- /dev/null +++ b/docs/mitc4-shell-feast-eigen2/formulation-eigen.md @@ -0,0 +1,199 @@ +# 구속된 lumped pencil, FEAST와 modal 복구 + +Feature `mitc4-shell-feast-eigen2`, formulation r1. [기본 보고서](formulation.md)와 +[질량·stabilization](formulation-mass-stabilization.md)의 기호를 사용한다. +Intel evidence는 [research R04/G01/G02](research-evidence.md)에 따른다. + +## E1. 실제 BC를 먼저 적용한다 + +K와 M=M_L은 같은 source scatter와 stable contribution/reduction 순서로 조립한다. +활성 shell 최대 edge 길이의 최댓값 `ell>0 [L]`을 사용하여 +`D=blockdiag_nodes(ell I3,I3)`, `q=D y`로 둔다. 이는 단위 정합 congruence다. +`Khat=D^T K D [ML²/T²]`, `Mhat=D^T M D [ML²]`이다. +실제 global homogeneous component BC의 stable free injection C에서 + +\[ +y=C y_f,\quad K_f=C^TKhat C,\quad M_f=C^TMhat C. \tag{E1} +\] + +Constrained 행은 0이며 nonzero prescribed base state는 이 procedure에서 허용하지 않는다. +Global UR3를 drilling으로 간주하거나 local 회전을 먼저 삭제한 뒤 BC를 적용하지 않는다. + +Node i의 full analytic null은 `z_i=[0;d_i]`다. 이 방향이 실제 free space 안에 있을 +필요충분조건은 **모든 constrained rotational component에 대해 해당 d_i 성분이 정확히 0**인 +것이다. 그때만 `Zi=Ci^T zi`를 null basis로 둔다. 아니면 null dimension=0이다. +Translation BC는 이 조건에 영향을 주지 않는다. 작은 비영 director 성분을 0으로 +분류하여 null을 늘리지 않는다. 거의 정렬된 partial BC의 작은 양의 mass도 보존한다. + +Node free space에서 Zi의 직교 여공간 Pi^f를 고정 component 순서와 sign/tie로 구성한다. +세 회전 free에서는 기존 tangent a_i,b_i를 쓸 수 있고 null이 없으면 Pi^f=I다. +다른 경우도 작은 orthogonal basis construction으로 같은 공간을 만든다. +수치 고유값 cutoff로 physical rank를 결정하지 않는다. 전체 block basis P,Z에서 + +\[ +[P\ Z]^T[P\ Z]=I,\quad M_fZ=0,\quad M_p=P^TM_fP\succ0. \tag{E2} +\] + +Positive dimension `n=cols(P)`, null dimension `nz=cols(Z)`이며 `n+nz=nf`다. +Node의 finite dimension이 0이어도 다른 node는 유지한다. Global n=0 또는 requested N>n은 +고유쌍 요청 실패다. 정적 해석의 유효한 0×0 Kff와 이 count 요구를 혼동하지 않는다. + +## E2. 이 shell의 정확한 massless 제거 + +공통 nodal director와 M2의 분리 때문에 `Tp z_i=0`, +`Khat z_i=kappa_i z_i`, `kappa_i=sum_{e incident i} kd,e>0`다. +E1에서 null이 실제 free space에 있는 경우에만 다음이 성립한다. + +\[ +K_fZ=Z\operatorname{diag}(\kappa_i),\quad K_{pz}=P^TK_fZ=0,\quad +K_{zz}=\operatorname{diag}(\kappa_i)\succ0,\quad K_p=P^TK_fP. \tag{E3} +\] + +Massless equation은 `Kzz z=0`이므로 finite mode의 z=0이다. 따라서 +`Kp p=lambda Mp p`는 **개선된 실제 constrained K/M의 모든 finite spectrum**을 보존한다. +Null이 없는 partial BC에는 numerical drilling stiffness가 Kp에 그대로 남는다. +이를 제거하면 다른 pencil이 된다. Roundoff 잔차의 작은 coupling을 임의로 무시하는 +것이 아니라 analytic identity로 축소하고 원 조립행렬에서 identity와 full residual을 검증한다. +불일치·conditioning 실패를 추가 DOF 삭제로 수리하지 않는다. + +일반 pencil에서는 Kzz 가역일 때 +`z=-Kzz^-1 Kzp p`, `Keff=Kpp-Kpz Kzz^-1 Kzp`가 필요하다. +예: `K=[[6,2],[2,4]],M=diag(2,0)`의 finite eigenvalue는 5/2, z=-p/2이며 +행만 삭제한 값 3은 틀리다. 이는 독립 검증 oracle이며 이번 shell production에 +일반 dense Schur fallback을 추가하라는 계약이 아니다. Singular/nonpositive Kzz, +공통 K/M null, 추가 mass null은 지원 전제 위반으로 진단한다. Pseudoinverse·epsilon +mass/stiffness를 넣지 않는다. E3를 nonlinear Hessian이나 prestress 문제로 확장하지 않는다. + +## E3. 양의 nodal mass whitening + +Mp는 node별 최대 6×6 SPD block이다. `Mp=L L^T`를 block Cholesky하면 + +\[ +A=L^{-1}K_pL^{-T},\quad p=L^{-T}x,\quad Ax=\lambda x, +\qquad \phi=D C P L^{-T}x. \tag{E4} +\] + +Global dense inverse 없이 nodal triangular solve로 congruence한다. Node topology를 +늘리지 않으며 기존 coupling마다 작은 dense block만 생긴다. `phi^T M_L phi=x^Tx`다. +FEAST에 `(A,I)`를 넘겨도 실제 physical mass는 M_L이고 unit physical mass로 바꾼 것이 아니다. +Global physical 6 DOF와 source identity를 복구하며 constrained 성분은 정확히 0이다. +Cholesky positivity·reconstruction·conditioning 검증 실패 시 mode 후보를 만들지 않는다. + +## E4. Lowest N과 FEAST의 유한 탐색 + +N은 입력의 positive integer count이며 reference는 현재 10이다. Reference Value/Freq는 +scale·bracket·subspace·coefficient 선정에 사용하지 않는다. `s=||A||inf [T^-2]`에서 +s>0이면 B=A/s다. A가 정확히 0일 때만 모델 scale +`s=min_e E_e/(rho_e ell²)>0`로 두어 B=0을 유지한다. 잘못된 scale을 1로 대체하지 않는다. +반환값은 `lambda=s mu`다. + +`ri=sum_{j!=i}|Bij|`의 Gershgorin bound에 outward accumulation 또는 증명된 +roundoff error bound를 포함하여 `gL<=spectrum(B)<=gU`를 만든다. +NR의 finite endpoint margin과 outward nextafter로 `a0=N이면 + safe upper=v, c=N을 재확인한다. Capacity는 `c<=m0<=n`이며 padding, + 탐색 중단 목표 및 유한 횟수는 NR가 고정한다. c=n이면 m0=n이다. + N번째가 반복 cluster 안이어도 cluster 일부를 강제로 잘라 count하지 않는다. +5. FEAST로 c개 전체 eigenpair를 계산·검증하고 lambda 오름차순 첫 N개를 선택한다. + 같은 eigenvalue의 multiplicity를 평균·merge·deduplicate하지 않는다. + +모든 count/solve·endpoint 재시도를 합친 유한 call budget을 NR가 고정한다. +Safe bracket으로 fallback해도 workspace 부족이나 넓은 interval의 실패 가능성은 남는다. +Allocation·integer range·미수렴·count 불일치에 bounded failure로 종료하며 다른 backend, +작은 N 또는 유효성 검사를 생략한 부분 결과로 성공하지 않는다. Endpoint 근접을 해결할 +수 없으면 실패다. 최적화 실패를 성공 count evidence로 기록하지 않는다. + +Count monotonicity·solve returned m=c·Gram rank c·모든 값의 interval 내부성과 endpoint +분리·모든 pair residual을 확인한다. Total enclosure, count, rank와 residual은 별도 evidence다. +Floating-point FEAST를 모든 conditioning에서 완전성 theorem으로 확대하지 않는다. +알려진 zero/negative/repeated/clustered spectrum, n=1, N=n, endpoint 근접 및 설치 runtime +probe가 필수 후속 연결점이다. Significant negative mode를 건너뛰어 양수 N개를 내지 않는다. + +## E5. Vendor call 경계와 재현성 + +실제 eigenpairs는 MKL `dfeast_scsrgv`의 real symmetric `(B,I)`로 계산한다. +Strict finite `emin0`, `00에서만 계산하며 numerator=denominator=0이면 해당 zero identity metric=0, +denominator=0,numerator!=0이면 실패다. Zero eigenvector 자체는 정규화 전 실패다. +임의 `max(1,scale)`·floor·zero clamp는 없다. 실제 수치 한계는 NR가 정한다. + +Lambda를 pair와 함께 stable 정렬하고 exact tie는 solver column order로 둔다. +최대 절댓값의 scaled global component가 양수가 되게 sign을 정하며 tie는 source DOF 순서다. +Gram을 맞추려고 서로 다른 eigenvalue의 vectors를 섞지 않는다. Repeated group은 동일 +mass metric의 projector로 비교하며 한 벡터의 방향을 external acceptance로 요구하지 않는다. +Mass-normalized phi_u 차원은 `M^-1/2`, phi_theta는 `M^-1/2 L^-1`이고 응답변위가 아니다. + +모든 density를 c_rho>0배 하면 두 mass는 c_rho배, lambda는 1/c_rho배, +normalized repeated eigenspace는 1/sqrt(c_rho)배와 내부 orthogonal mixing 관계다. +여섯 rigid motions와 same-physical-BC covariance는 질량·stabilization 상세의 field를 쓴다. + +Raw lambda의 부호를 보존한다. NR 기준의 significant negative는 spectrum 실패, +near-zero는 raw value를 유지한 분류다. 양수일 때만 `f=sqrt(lambda)/(2pi)`, 정확한 0이면 +f=0이고 음수에는 실수 f를 만들지 않는다. 저장 validity·schema는 I/O가 정의한다. + +## E7. Candidate와 실패 lifecycle + +Geometry/density→consistent moments→lumped→K/M assembly→실제 BC→analytic split→ +SPD whitening→count/FEAST→global 복원·전체 c개 독립 검증→N개 candidate 순서다. +검증 전 accepted state를 바꾸지 않는다. Writer는 candidate를 완성·self-check·close한 뒤 +final HDF5를 교체하고, 준비된 state 교환은 이후 실패하지 않도록 한다. 제어된 solve/ +validation/write/finalization 실패에서 이전 state·final output을 보존한다. +Live log는 별도 lifecycle이며 crash/power-loss 원자성을 새로 주장하지 않는다. +추가 nonlinear/material history나 modal stress/reaction state를 만들지 않는다. diff --git a/docs/mitc4-shell-feast-eigen2/formulation-mass-stabilization.md b/docs/mitc4-shell-feast-eigen2/formulation-mass-stabilization.md new file mode 100644 index 0000000..127541d --- /dev/null +++ b/docs/mitc4-shell-feast-eigen2/formulation-mass-stabilization.md @@ -0,0 +1,172 @@ +# 질량과 공변 numerical stabilization + +Feature `mitc4-shell-feast-eigen2`, formulation r1. [기본 보고서](formulation.md)의 적용·채택 경계를 따른다. + +## M1. 운동학과 physical stiffness + +길이·질량·시간 차원은 `L,M,T`, 두께는 `t`, 시간은 `tau`다. 일정한 `rho>0 [M/L³]`, +centered constant `t>0 [L]`, `E>0 [M/(LT²)]`, `-10를 검사한다. 이 검사를 전체 +volume injectivity theorem으로 확대하지 않는다. Stiffness의 8점 적분은 유지한다. +곡면에서는 `C1`이 비영일 수 있고 `C2=t² C0/12`는 일반식이 아니다. + +완성한 C와 M_C를 검증·보존하고 다음 row sum의 실제 원본으로 사용한다. +Mass 원본을 lumped로 덮어쓰거나 독립 mass를 별도로 만들어 derived라 부르지 않는다. + +## M3. Derived nodal block lumping과 보존 범위 + +\[ +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&h_iS_i\\h_iS_i^T&j_iP_i\end{bmatrix},\quad +M_{L,e}=\operatorname{blockdiag}_i L_i. \tag{M4} +\] + +전체 24×24 row sum 또는 diagonal scaling이 아니라 **scalar moment row sum 뒤 tensor 재구성**이다. +`L_i=integral rho Ni Gi^T Gi dV`이므로 node 간 coupling은 0, 같은 node의 6×6 coupling은 +허용한다. Incident elements는 같은 d_i를 사용하고 stable source 순서로 block을 더한다. + +\[ +q_i^TL_iq_i=m_i|u_i+(h_i/m_i)S_i\theta_i|^2+ +(j_i-h_i^2/m_i)|S_i\theta_i|^2. \tag{M5} +\] + +양의 volume measure와 thickness에 의해 `mi>0,ji>0,mi ji-hi²>0`, rank=5, +`ker Li=span([0;di])`다. 부호·finite·variance 검사를 clamp로 통과시키지 않는다. +거의 singular인 양의 mass를 rank cutoff로 제거하지 않고 conditioning 실패를 별도 진단한다. + +보존하는 양은 `sum mi=integral rho dV`, `sum hi=integral rho z dV`, +`sum ji=integral rho z² dV`, first spatial moment +`sum(mi Xi+hi di)=integral rho X dV`다. Uniform translation energy는 consistent와 같다. +`ji Pi`는 tangent rotary inertia이며 arbitrary rigid rotation의 **orbital inertia tensor**까지 +consistent와 같게 만드는 계약은 아니다. 실제 차이는 `vi=ui_dot+z Si theta_i_dot`에 대해 + +\[ +\dot q^T(M_L-M_C)\dot q=\tfrac12\int\rho\sum_{ij}N_iN_j|v_i-v_j|^2dV\ge0. \tag{M6} +\] + +서로 다른 일반 속도장의 energy·spectrum 동일성은 요구하지 않는다. +Affine rectangle 면적 A·평행 director의 독립 oracle은 + +\[ +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=t^2C^0/12, +\quad(m_i,h_i,j_i)=(\rho t A/4,0,\rho t^3 A/48). \tag{M7} +\] + +곡면 oracle는 독립 volume integration으로 C1와 변동 J까지 검사한다. + +## S1. 초기 trace 평균 선택과 공변성 + +`R_i`는 **구속 전 초기 physical** K20의 node i에 대한 2×2 tangent rotary principal block이다. + +\[ +k_{ref,e}=\frac18\sum_{i=1}^4\operatorname{tr}R_i,\qquad +k_{d,e}=10^{-3}k_{ref,e}>0. \tag{S1} +\] + +단위는 `ML²/T²`; 8개 rotary diagonal 전부를 평균한다. Translation diagonal·mass·density· +trial tangent·BC·reference 오차는 입력이 아니다. Negative/nonfinite diagonal은 실패, +exact zero는 평균에 포함, 8개 전부 zero면 positive inventory 실패다. 개별 Ri의 SPD를 +새 geometry 조건으로 요구하지 않는다. Overflow 방지 계산은 `dmax*((sum dr/dmax)/8)`이며 +고정 node1→4, alpha→beta 순서로 합한다. Underflow/nonpositive kd를 floor로 대체하지 않는다. + +Proper global rotation Q와 재생성 tangent `Ui'=Q Ui Oi`에서 +`Ri'=Oi^T Ri Oi`, `tr Ri'=tr Ri`. `S_Q=blockdiag_i(Q,Q)`이면 +`Kphys'=S_Q Kphys S_Q^T`, `Kdrill'=S_Q Kdrill S_Q^T`, `M'=S_Q M S_Q^T`이다. +Q=I인 독립 tangent basis 변경에도 성립한다. **새 geometry/frame에서 K20·kd·complete K를 +모두 다시 계산**해야 하며 이미 계산한 tensor만 회전해서는 이 선택을 검증할 수 없다. +BC가 양쪽의 지원 component subset으로 같은 물리 free space를 표현할 때 constrained +spectrum·static response의 공변성을 검증한다. 다른 BC를 같은 문제로 비교하거나 MPC를 추가하지 않는다. + +물리 rigid field는 `ui=c+Omega cross Xi`, `theta_i=Pi Omega`이며 strain=gamma=0이다. +여섯 물리 rigid modes는 양의 mass를 갖는다. Pure numerical drill `[0;di]`는 mass=0, +stiffness>0이다. Linear UR에 full spatial Omega를 넣는 field와 이 physical 대표값을 구분한다. + +## S2. 비선형 objective potential과 고정 scale + +기존 [nonlinear 정식화 §10](../nonlinear-static-newton-raphson/formulation.md)의 polar +corotation, total nodal rotation, minimal swing 및 objective `gamma_i=atan2(s_i,c_i)`를 +유지한다. S1을 초기 reference에서 한 번 계산하고 모든 trial·commit·increment·rollback에서 +그 값을 고정한다. `D kd=D² kd=0`이다. + +\[ +\Pi_d=\tfrac12 k_d\gamma^T\gamma,\quad r_d=k_dD_\gamma^T\gamma,\quad +K_d=k_d\left(D_\gamma^TD_\gamma+\sum_i\gamma_iD^2\gamma_i\right). \tag{S2} +\] + +Polar/swing/atan2의 미분과 branch validation을 생략하지 않는다. Trial마다 scale을 바꾸지 않는다. +일반 nonlinear Hessian 전체의 SPD는 주장하지 않는다. 초기에도 Dgamma는 corotation coupling을 +포함하므로 linear Td와 동일시하지 않는다. 기존 physical 선형극한, directional residual/Hessian, +objective rigid orbit·state rollback을 검증한다. 새 eigen에는 이 nonlinear state를 전달하지 않는다. +Physical strain/stress/reaction의 의미와 Newton·하중·commit 계약은 보존한다. + +## S3. 필수 partial-BC exact target + +`a=(0,1,0), b=(-4/5,0,3/5), d=(3/5,0,4/5)`, +`X=(-2a-b,2a-b,2a+b,-2a+b)`, `t=1,E=12,nu=0,rho=1`인 rectangle이다. +모든 DOF를 고정하되 node1 global URZ만 free다. Independent rotary block의 +diagonal은 `49/12,23/6`, off-diagonal은 corner에 따라 `±1/8`이다. S1에서 + +\[ +k_{ref}=95/24,\quad k_d=19/4800,\quad M_{ff}=3/50,\quad +K_{ff}=10369/7500,\quad\lambda=10369/450. \tag{S3} +\] + +Global Z축 45° 회전 뒤에도 같은 BC를 유지하고 geometry/frame부터 재계산한다. +URZ에 양의 mass가 있으므로 drill 좌표라고 삭제하면 안 된다. 이 값은 `NR-MFE-001`의 +새 식 target이며 과거 pass 재사용이 아니다. NR가 독립 재유도한다. +Static 대응 load는 node1의 tangent moment `m=(5/3)M0 b`, 다른 load=0이다. +`d·m=0,mZ=M0`; `theta1Z=M0/Kff`, full residual `r=Kq-F`다. +회전 뒤 `m'=Qm`을 사용한다. Pure global eZ moment는 drilling 성분 때문에 기존 load +계약에 부합하지 않는다. Eigen의 constrained residual을 static reaction으로 출력하지 않는다. diff --git a/docs/mitc4-shell-feast-eigen2/formulation.md b/docs/mitc4-shell-feast-eigen2/formulation.md new file mode 100644 index 0000000..1274f8e --- /dev/null +++ b/docs/mitc4-shell-feast-eigen2/formulation.md @@ -0,0 +1,66 @@ +# MITC4 질량·공변 stabilization·FEAST 정식화 + +- Feature: `mitc4-shell-feast-eigen2`; Owner: `formulation-agent`; 정식화 revision: `r1`. +- 입력: [requirements r1](requirements.md), [근거](requirements-evidence.md), [Feature ADR](ADR.md). +- 기준: [프로젝트 지침](../../AGENTS.md), [PRD](../PRD.md), [ADR-028](../ADR.md#adr-028), [ARCHITECTURE](../ARCHITECTURE.md). +- 상태: 독립 numerical review에 인계하는 수학 계약. 구현·runtime·reference 통과 선언이 아니다. + +## 선택과 적용 범위 + +원형상·무응력 단일 무감쇠 선형 고유진동을 `K phi = lambda M_L phi`로 정의한다. +실제 질량은 consistent scalar moments에서 유도한 nodal block lumped mass다. +3 병진·2 director 접평면 회전의 관성을 유지하고 numerical drilling에 인공 질량을 넣지 않는다. +실제 global 동차 BC를 먼저 적용한 뒤 analytic mass null과 free space의 정확한 교집합만 +제거한다. 양의 nodal mass를 whitening한 identity second matrix도 같은 lumped 문제다. + +기존 MITC4 물리 strain·constitutive·integration·source `S4`/`S4R` 의미를 유지한다. +Numerical scale은 초기 physical rotary diagonal 8개 trace 평균의 `10^-3`으로 선택한다. +기존 최소 양의 대각 선정과 그 식 자체의 검사를 대체한다. 개선 전 complete K와의 +동일성, consistent/lumped spectrum 동일성 또는 Abaqus 내부 절차의 동등성은 요구하지 않는다. +개선된 **실제 constrained pencil의 모든 finite spectrum 보존**은 요구한다. + +| 상세 계약 | 정의하는 내용 | 요구 번호 접미사 | +| --- | --- | --- | +| [질량·stabilization](formulation-mass-stabilization.md) | 운동학, 27점 적분, moment→lumping, 관성 불변식, scale·비선형 lifecycle, partial-BC 반례 | 002–008, 014, 024, 026–027 | +| [축소·FEAST·복구](formulation-eigen.md) | 실제 BC, analytic null, whitening, lowest N, 실패, modal residual·state | 001, 007–014, 018–019 | + +## 기존 유도의 명시 채택 경계 + +이전 Feature는 읽기 전용 유도 근거다. 아래 채택은 새 요구와의 대조 결과이며 과거 +검토의 pass, control 값, schema, execution evidence 또는 제외 portfolio의 승계가 아니다. + +| 이전 자료 | 이번 채택 | 이번에 채택하지 않는 부분 | +| --- | --- | --- | +| [mass M1–M10](../mitc4-shell-feast-eigen/formulation-mass.md) | 동일 geometry·H 보간, moments, 27점 정확성, block lumping 및 Jensen identity; 새 상세에 재기재 | 이전 revision·readiness 진술 | +| [stabilization S1–S6](../mitc4-shell-feast-eigen/formulation-stabilization.md) | trace 평균 후보를 이번 식으로 선택; 공변성, frozen objective potential, 반례 exact target | S7의 옛 reference portfolio 및 과거 해소 판정 | +| [eigen E1–E5/E8](../mitc4-shell-feast-eigen/formulation-eigen.md) | constraint-first analytic split, nodal whitening, global recovery 원리 | E6/E7의 빈 count 성공 가정·기존 수치 controls 자동 승계 | +| [verification V1–V5](../mitc4-shell-feast-eigen/formulation-verification.md) | 같은 단위의 residual/Gram·energy·covariance·density 측정량 | 기존 tolerance 값·test 수·gate·실행 portfolio | + +질량 및 trace 평균은 FESA 운동학에서 유도한 선택이다. 외부 source가 이 lumping/scale을 +지정한다고 주장하지 않는다. 최신 API 근거와 검토 한계는 [research](research.md)와 +[research evidence](research-evidence.md)에 연결한다. FEAST count의 `fpm[49]=1`과 +trace stopping의 `fpm[5]=1`은 C-index다. 빈 count interval의 `info=0,m0=0`과 작은 +scratch 허용은 보장된 vendor 계약으로 채택하지 않는다. + +## 검증 의무와 미해결 항목 + +두 질량의 독립 적분 oracle, 총 병진 질량·first moment·tangent inertia·drill null, +여섯 physical rigid modes, density scaling 및 full original-free residual/Gram을 검증한다. +`NR-MFE-001`의 `k_d=19/4800`, `lambda=10369/450`는 새 식의 exact target이며 +독립 NR가 재계산해야 한다. 좌표 변환 후 geometry·director·frame·**complete K를 재계산**하고, +같은 물리 partial BC 및 admissible tangent moment를 사용하는 정적 대응도 검사한다. +Nonlinear scale immutability·objective energy·일관 residual/Hessian·선형극한을 재검증한다. + +외부 portfolio는 오직 새 [requirements의 지정 범위](requirements.md)를 따른다. +`shell`, `shellNL`, `shellNL-eigen-meshfine`의 retained 의무와 synthetic 내부 검사를 유지한다. +제외된 네 예제는 원본·복사본·cache·과거 결과로 재사용하지 않는다. Eigen 외부 비교는 +원본 TXT의 `Value`이며 [공통 tolerance](../TOLERANCE.md)를 변경하지 않는다. + +NR가 내부 수치 기준, FEAST control·endpoint separation·bounded call budget·seed를 +독립 검토하여 고정해야 한다. 실제 설치 runtime의 count/solve·zero/cluster/full-capacity +동작과 memory는 후속 실행 evidence다. Numerical review 전 수학적 correctness를 +스스로 승인하지 않는다. I/O owner는 입력 allowlist, result schema·identity 및 실패 진단을 +정의한다. 이 문서는 신규 physical scope 또는 영속 layout을 추가하지 않는다. + +문서 작업에는 build/test를 실행하지 않는다. 링크·식·소스 경계의 정적 대조를 수행하며 +실제 solver·reference 검증은 미실행으로 남긴다. diff --git a/docs/mitc4-shell-feast-eigen2/research-evidence.md b/docs/mitc4-shell-feast-eigen2/research-evidence.md index 6903bde..ab1ee33 100644 --- a/docs/mitc4-shell-feast-eigen2/research-evidence.md +++ b/docs/mitc4-shell-feast-eigen2/research-evidence.md @@ -94,7 +94,7 @@ initial scale immutability. 과거 반례 수치·새 trace 후보 기대값은 `fpm[49]=1`은 CSR 구간 전체 고유치 수를 `m0`로 반환하고 flag를 0으로 재설정한다. `fpm[26]`은 CSR 검사, `[27]`은 B 양정치 검사이며 `[5]=1`은 trace stopping이다. **Fact S07:** `epsout=|trace_i-trace_previous|/max(|emin|,|emax|)`; -`0