docs: define covariant MITC4 stabilization formulation

This commit is contained in:
KOKO\Mimi
2026-09-06 04:01:47 +09:00
parent b99a5e5309
commit 4d303839c2
9 changed files with 417 additions and 48 deletions
@@ -2,10 +2,11 @@
- Feature ID: `mitc4-shell-feast-eigen`
- Owner: `formulation-agent`
- Input contract revision: `r1`
- Input contract revision: `r2`
- 기본 보고서: [formulation.md](formulation.md)
[질량 식 M1~M10](formulation-mass.md), [축소·복원 식 E1~E8](formulation-eigen.md)의
[질량 식 M1~M10](formulation-mass.md), [축소·복원 식 E1~E8](formulation-eigen.md),
[개선된 scale·공변성 S1~S8](formulation-stabilization.md)의
기호를 사용한다. 이 문서는 측정량과 zero branch를 정의하며 수치 acceptance 값과
필수 benchmark 선정은 Numerical Review가 독립 검토하여 고정한다.
외부 기준의 수치는 [TOLERANCE](../TOLERANCE.md)를 그대로 적용한다.
@@ -126,16 +127,24 @@ mass Gram rank로 여섯 물리 움직임의 independence를 확인한다.
Physical rigid zero eigenvalues는 finite mass 모드이고 E2의 massless drilling과 다르다.
Clamped reference에 여섯 zero mode를 요구하지 않는다.
Global rigid coordinate rotation에서 두 질량과 **physical stiffness**의 congruence 및
E1~E6 spectrum 불변성을 검사한다. Free rotation 3개 또는 rotation 3개 전체 고정의
node로 이루어진 사례는 finite 공간의 drilling 항이 0이므로 이 검증에 적합하다.
기존 `kd=min(physical tangent diagonals)*10^-3`는 선택한 tangent basis에 의존할 수 있다.
따라서 재계산한 kd까지 임의 회전에서 동일 scalar라 가정하거나 부분 회전 BC에 남는
stabilization의 좌표 불변성을 새로 주장하지 않는다. 같은 kd를 유지한 단순 tensor
변환이면 complete K도 congruent하지만 별도 geometry에서 kd를 재선정한 경우와 다르다.
기존 stabilization 의미를 유지하는 한계이며 coefficient를 바꾸지 않는다.
Rotation 후 이전 global component BC를 그대로 두고 같은 문제라고 주장하거나
새 MPC 입력 기능을 추가하지 않는다.
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](formulation-stabilization.md#s6-nr-mfe-001의-새-algebraic-target과-정적-대응)의
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를 유지하면
@@ -172,7 +181,8 @@ NR가 구현 전에 결정해야 할 항목은 다음과 같다.
| FEAST control | Contour points/precision exponent/refinement bound, finite count/endpoint/solve retry budget |
| Endpoint safety | Operator scale와 ULP, count monotonicity, enclosing total n, solve/count 및 full-rank Gram |
| Independent test portfolio | 평판 M10, warped/director-varying M5~M9, 비축정렬/부분 BC/E5 오류 case, FEAST known spectra, density/rigid/좌표 tests |
| External reference | 원본 input+TXT Value, mode/frame identity와 singleton 여부, common family 및 blocking 판정 |
| 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
@@ -187,10 +197,14 @@ Case의 구체적 목록·숫자는 NR가 정하고 Planning이 tests와 TDD ste
Frequency 재계산, mode shape correlation이나 다른 mass variant의 더 가까운 결과 선택으로
이를 대체하지 않는다. Mode/frame은 NR/I/O가 common same-frame family 규칙에 맞춰
정의하고 missing/extra/duplicate/nonfinite를 tolerance 전에 거부한다.
[r1 reference-model](reference-model.md)의 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
@@ -220,3 +234,65 @@ stage/commit 또는 타 owner 수정은 하지 않았다.
검사점 밖의 전역 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/M5~M10 및 FEAST E6~E8, 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`이었다.
```powershell
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 판정을 대체하지 않는다.
```powershell
@'
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은 이 단계에서 미실행이다.