docs: define eigen2 mass stabilization and feast formulation
This commit is contained in:
@@ -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가 소유한다.
|
||||
|
||||
@@ -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 경로 선택·커밋과 최종 결과 확인은 메인이 수행한다.
|
||||
|
||||
@@ -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 계약을 정의한다.
|
||||
- [ ] 신규 문서의 링크·계약 일관성과 변경 범위를 확인하고 단계별 변경을 커밋한다.
|
||||
|
||||
@@ -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<gL<=gU<b0`를 확보한다.
|
||||
B=0에는 dimensionless outer bracket (-1,1)을 쓸 수 있다. 이는 eigenvalue clamp가 아니다.
|
||||
Lower a0는 **항상 유지**한다. 독립 enclosure 자체가 a0보다 낮은 spectrum 부재의 근거다.
|
||||
|
||||
1. `(a0,b0)`에 성공한 count=n을 확인한다. 독립 enclosure와 total count가 불일치하면
|
||||
유한 endpoint 재시도 후 실패다. 성공한 `(a0,b0,count=n)`을 fallback으로 보존한다.
|
||||
2. 선택적 upper-prefix subdivision은 `(a0,v)`만 count한다. 유효한 성공 count c>=N이면
|
||||
safe upper=v, c<N이면 search lower=v로 이동한다. 마지막 safe interval을 보존한다.
|
||||
Count-only zero가 보장되지 않으므로 실패·미정 status를 0으로 바꾸지 않는다.
|
||||
3. Count=0에 대한 인증된 성공을 얻지 못하거나 endpoint/midpoint·budget 한계에 이르면
|
||||
최적화를 끝내고 마지막 safe interval, 최소한 total enclosing interval을 사용한다.
|
||||
별도의 empty-prefix 탐색이나 lower-bound 축소를 필수 경로로 두지 않는다.
|
||||
4. 최종 interval의 성공 count 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 `emin<emax`, `n>0`, `0<m0<=n`, SPD second matrix를 만족한다.
|
||||
Upper triangle·1-based CSR에서 sorted unique indices, terminal nnz+1, finite values를 검증한다.
|
||||
K와 identity의 pattern이 같을 필요는 없다. Vendor types와 workspace는 private backend다.
|
||||
|
||||
매 call마다 `feastinit` 후 명시 controls를 채운다. C-index `fpm[49]=1`은 CSR count를
|
||||
m0로 반환하고 flag가 0으로 reset된다. Count output m0·solve requested m0·allocated capacity를
|
||||
분리한다. CSR/SPD 검사를 켜고 subspace-only를 끈다. Zero mode에도 적용할 수 있도록
|
||||
`fpm[5]=1` trace stopping을 사용하며 residual을 독립 검증한다. `epsout`은
|
||||
`|trace_i-trace_previous|/max(|emin|,|emax|)`이며 eigenpair 상대오차가 아니다.
|
||||
|
||||
`info=1`은 certified empty count가 아니다. 넓은 interval의 isolated cluster를 놓친
|
||||
상태일 수 있다. `info=0,m0=0`의 empty-count 성공이나 count-only 작은/null scratch
|
||||
면제는 공식 문서가 보장하지 않는다. 이 설계는 보수적으로 count용 m0=n,
|
||||
x[n*n], e[n], res[n]을 준비하되 이를 vendor의 최소 workspace 의무라고 부르지 않는다.
|
||||
Count scratch는 재사용·solve 전에 해제할 수 있다. O(n²) 비용, shifted sparse fill,
|
||||
checked n*m0/nnz/index 변환 및 실제 peak memory를 후속 구현에서 검증한다.
|
||||
|
||||
Fixed initial subspace 생성법·seed·QR 순서·thread 설정·contour·loop·stopping controls는
|
||||
NR가 고정하고 evidence에 남긴다. Full capacity m0=n에서는 identity initial basis를 쓸 수 있다.
|
||||
Seed를 바꿔 통과할 때까지 반복하지 않는다. 고정 source 입력의 assembly/reduction·row·
|
||||
diagnostic 순서를 유지하되 repeated eigenvectors의 유일한 방향을 주장하지 않는다.
|
||||
|
||||
## E6. Original-global recovery와 검증식
|
||||
|
||||
복구된 `yf=C^T D^-1 phi`, `k=||Kf||F`, `m=||Mf||F`에서
|
||||
|
||||
\[
|
||||
r_f=K_fy_f-\lambda M_fy_f,\qquad
|
||||
\eta_r=\frac{\|r_f\|_2}{(k+|\lambda|m)\|y_f\|_2}. \tag{E5}
|
||||
\]
|
||||
|
||||
원 조립행렬의 **모든 original free DOF**에서 검사한다. 축소 residual만으로 복원 오류를
|
||||
숨기지 않는다. M은 항상 actual lumped다. 제약 성분의 modal residual을 reaction으로 출력하지 않는다.
|
||||
`Mf Z`, `Kf Z-Z diag(kappa)`, `P^T Z`, Cholesky reconstruction 및 constraint 복원도 검사한다.
|
||||
Nz=0이면 null 검사는 N/A이며 zero metric의 통과를 만들어내지 않는다.
|
||||
|
||||
`gi=phi_i^T M phi_i`가 finite positive일 때만 `phi_i/=sqrt(gi)`로 정규화한다.
|
||||
정규화 후 최종 phi에서 `gi=phi_i^T M phi_i`와 `yf_i=C^T D^-1 phi_i`를 다시 계산한다.
|
||||
이후 모든 residual·Gram·Rayleigh·energy 검사는 이 재계산 값만 사용한다.
|
||||
전체 c개에 대해 `Gij=phi_i^T M phi_j`, `G≈I`, Gram rank c를 검사한다.
|
||||
Rayleigh quotient `Ri=(yf_i^T Kf yf_i)/gi`와
|
||||
|
||||
\[
|
||||
\eta_{energy,i}=\frac{|y_{f,i}^TK_fy_{f,i}-\lambda_i g_i|}
|
||||
{(k+|\lambda_i|m)\|y_{f,i}\|_2^2} \tag{E6}
|
||||
\]
|
||||
|
||||
를 검사한다. 같은 단위 norm에서 symmetry·congruence error를 평가한다.
|
||||
모든 ratio는 분모>0에서만 계산하며 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를 만들지 않는다.
|
||||
@@ -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²)]`, `-1<nu<1/2`를 사용한다.
|
||||
밀도 필수 조건은 eigen에만 적용한다. 기존 지원 geometry/director·section 조건을 유지한다.
|
||||
원 node `X_i`, incident element가 공유하는 unit director `d_i`, 오른손 tangent frame
|
||||
`(a_i,b_i,d_i)`를 사용한다. Corner 순서는 `(-1,-1),(1,-1),(1,1),(-1,1)`이다.
|
||||
|
||||
\[
|
||||
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}]. \tag{M1}
|
||||
\]
|
||||
|
||||
전역 `q_i=[u_X,u_Y,u_Z,theta_X,theta_Y,theta_Z]`, `u [L]`, `theta [1]`이며
|
||||
양의 director 변화는 `theta cross d`다. `S_i=-[d_i]_cross`, `P_i=I-d_i d_i^T=S_i^T S_i`,
|
||||
`G_i=[I,zS_i]`, `H=[N_1G_1,...,N_4G_4]`에서 `v=H q_dot`이다.
|
||||
회전 physical 성분 `alpha=a_i^T theta,beta=b_i^T theta`, drilling `gamma=d_i^T theta`다.
|
||||
`S_i theta=-b_i alpha+a_i beta`, `S_i d_i=0`. 보간 director를 재정규화하지 않는다.
|
||||
|
||||
기존 [shell 정식화](../linear-static-mitc4-shell/formulation.md)의 geometry·MITC tying·
|
||||
20↔24 변환을 그대로 사용한다. Engineering strain 순서
|
||||
`[epsilon11,epsilon22,gamma12,gamma13,gamma23]`에 대해
|
||||
|
||||
\[
|
||||
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}^0=\sum_{g\in2\times2\times2}\bar B_g^TC_5\bar B_gJ_gw_g,
|
||||
\]
|
||||
\[
|
||||
K_e=T_p^TK_{20}^0T_p+T_d^T(k_{d,e}I_4)T_d. \tag{M2}
|
||||
\]
|
||||
|
||||
`T_p` maps to 4×`[uX,uY,uZ,alpha,beta]`; `T_d` maps to four gamma values.
|
||||
Plane stress `sigma33=0`, 작은 변형·무응력 원형상이다. Parent momentum balance는
|
||||
`rho u_ddot=div sigma`, 자유 traction은 0이다. MITC admissible variation의 약형은
|
||||
`integral rho delta u·u_ddot + integral delta e_bar^T C5 e_bar + delta gamma^T kd gamma=0`.
|
||||
Lumping 후 반이산 잔차 `r=M_L q_ddot+Kq`, tangent는 각각 `M_L,K`이고 harmonic
|
||||
ansatz에서 `K phi=lambda M_L phi`, `lambda=omega² [T^-2]`다.
|
||||
Shear factor `5/6`을 velocity/mass에 적용하지 않는다. 새 재료 history·감쇠·prestress·
|
||||
time integrator 또는 modal stress/reaction recovery는 없다.
|
||||
|
||||
## M2. Consistent scalar moments와 적분
|
||||
|
||||
\[
|
||||
C^{(k)}_{ij}=\int\rho N_iN_jz^kJ\,d\xi d\eta d\zeta\quad(k=0,1,2),\qquad
|
||||
(M_C)_{ij}=\begin{bmatrix}C^{(0)}_{ij}I&C^{(1)}_{ij}S_j\\
|
||||
C^{(1)}_{ij}S_i^T&C^{(2)}_{ij}S_i^TS_j\end{bmatrix}. \tag{M3}
|
||||
\]
|
||||
|
||||
`T_C=1/2 q_dot^T M_C q_dot`. 각 C는 symmetric 4×4, 차원은 `ML^k`,
|
||||
mass block 차원은 `M,ML,ML²`다. M1의 J는 각 자연좌표 차수 ≤2이고
|
||||
`Ni Nj z^k J`는 ≤`(4,4,4)`이므로 3×3×3 Gauss–Legendre로 정확 적분한다
|
||||
(roundoff 제외). 축별 point `[-sqrt(3/5),0,sqrt(3/5)]`, weight `[5/9,8/9,5/9]`다.
|
||||
증가 xi→eta→zeta, node/component와 moment 합 순서를 고정한다.
|
||||
모든 27점에서 기존 geometry predicate·finite·J>0를 검사한다. 이 검사를 전체
|
||||
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으로 출력하지 않는다.
|
||||
@@ -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 검증은 미실행으로 남긴다.
|
||||
@@ -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<m0<=n`, 구간 multiplicity count 이하의 m0는 불충분하다. Count와 solve의 m0 및
|
||||
`0<m0<=n`, 구간 multiplicity count 미만의 m0는 불충분하다. Count와 solve의 m0 및
|
||||
allocation capacity를 분리해야 한다.
|
||||
|
||||
**Fact S06:** `info=0` 성공, `1` empty warning, `2` 미수렴, `3` 작은 subspace,
|
||||
|
||||
Reference in New Issue
Block a user