docs: define covariant MITC4 stabilization formulation
This commit is contained in:
@@ -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은 이 단계에서 미실행이다.
|
||||
|
||||
Reference in New Issue
Block a user