212 lines
18 KiB
Markdown
212 lines
18 KiB
Markdown
# MITC4 eigen 연구와 근거
|
||
|
||
이 연구 기록의 후보·runtime gap은 조사 당시 상태다. 최종 채택식은 [정식화](formulation.md),
|
||
FEAST residual stopping과 비교 정책의 승인 변경은 [ADR](ADR.md), 실제 실행 범위는
|
||
[구현 검증](implementation-verification.md)을 따른다. 조사 시점의 trace stopping을 현재 설정으로 읽지 않는다.
|
||
|
||
|
||
|
||
<a id="research"></a>
|
||
|
||
<a id="research--mitc4-질량feast-연구-결과"></a>
|
||
## MITC4 질량·FEAST 연구 결과
|
||
|
||
- Feature ID: `mitc4-shell-feast-eigen2`
|
||
- Input baseline: `requirements r1`
|
||
- Research date: `2026-09-08`
|
||
- Status: `research evidence complete`; 현재 후속 작업 상태는 [PRD](PRD.md)의 checklist를 따른다.
|
||
|
||
[요구사항](requirements.md#requirements)과 [요구 근거](requirements.md#requirements-evidence)에 대한 연구다.
|
||
현재 후속 작업 권한은 메인이 전달한 최신 사용자 지시를 따르며, 요구 문서의 과거
|
||
requirement-only 완료 기록을 이번 연구의 실행 제한으로 해석하지 않는다.
|
||
기준은 [프로젝트 지침](../../AGENTS.md), [PRD](../PRD.md),
|
||
[ARCHITECTURE](../ARCHITECTURE.md), [ADR-028](../ADR.md#adr-028)이다.
|
||
출처별 locator·조건·검증 후보·gap은 [상세 근거](research.md#research-evidence)에 기록했다.
|
||
|
||
| 질문 / Requirement suffix | 결론과 인계 |
|
||
| --- | --- |
|
||
| Physical mass, consistent→lumped / 005,006,026 | MITC4 director 운동학에서 kinetic energy로 consistent mass를 유도할 수 있다. Scalar thickness moments를 consistent 계산에서 보존하고 node block으로 lumping하는 후보는 좌표 공변성과 drilling null을 설명한다. Global component row-sum은 부적합하다. 곡면의 first moment와 관성 보존 범위는 Formulation이 증명한다. |
|
||
| Partial BC와 FEAST SPD / 007,008,014 | 실제 global BC를 먼저 적용한 질량의 nullspace가 대상이다. UR3 일괄 제거는 성립하지 않는다. Massless Schur 제거의 정확성은 null block 가역성이 조건이며, FESA의 decoupling은 개선 K 구조에서 별도 증명이 필요하다. |
|
||
| Covariant drilling / 024,027 | 초기 physical rotational block의 trace는 접평면 기저 변경의 불변량이다. Trace 평균은 단순한 후보이나 채택은 Formulation 책임이다. Nonlinear scale은 초기값을 고정해야 기존 potential의 일관 미분을 유지한다. |
|
||
| Lowest N·multiplicity / 009–013 | FEAST는 구간 해법이다. SPD 변환·구간 밖 하한·count/solve 일치·독립 residual/Gram을 결합해야 최저 N 누락을 방지한다. 반복 고유값을 값으로 deduplicate하지 않는다. |
|
||
| Intel 세부 위험 / 012 | 공식 C `fpm[49]=1` count와 `fpm[5]=1` trace는 확인했다. Count-only 빈 구간의 `info=0,m0=0` 보장과 축소 workspace는 문서에 명시되지 않아 runtime 검증 gap으로 남는다. |
|
||
| 원본 syntax·Value-only / 015,020–022 | 지정 원본은 `10, , , , ,`이며 TXT Mode 1~10의 Value를 보존한다. Lanczos/SIM은 FESA FEAST backend 선택 근거가 아니다. 최종 allowlist·HDF5·comparison family는 I/O·NR 소유다. |
|
||
|
||
기존 feature의 연구·질량·eigen·stabilization 문서는 **연구 당시 worktree의 read-only 후보**로
|
||
읽었다. 과거 수식·NR 판정·runtime 결과를 이번 승인이나 새 통과로 가져오지 않았다.
|
||
특히 과거 singleton mode family는 연구 결론이 아니며 [공통 tolerance](../TOLERANCE.md)에
|
||
대해 NR가 새로 판단해야 한다.
|
||
|
||
검증 후보는 평판 다항 적분, 곡면 독립 kinetic energy, 실제 partial BC의 원 pencil 복원,
|
||
`NR-MFE-001` geometry 재계산과 대응 정적 response, frozen nonlinear 미분,
|
||
작은 zero/repeated/clustered spectrum, 지정 원본 Value 비교다. 세부는 상세 근거를 따른다.
|
||
이번에는 문헌·원본 syntax·문서 링크의 정적 확인만 수행했다. Solver, FEAST runtime,
|
||
build/test, reference 수치 비교와 독립 NR/Physics는 실행하지 않았다.
|
||
제외된 네 예제의 원본·복사·cache는 읽거나 사용하지 않았고 reference·공통 정책도 수정하지 않았다.
|
||
|
||
<a id="research-evidence"></a>
|
||
|
||
<a id="research-evidence--연구-근거검증-후보미해결-항목"></a>
|
||
## 연구 근거·검증 후보·미해결 항목
|
||
|
||
- Feature ID: `mitc4-shell-feast-eigen2`
|
||
- Input baseline: `requirements r1`
|
||
- Web access date: `2026-09-08`
|
||
- Main report: [research.md](research.md#research)
|
||
|
||
`Fact`는 이번 원문 확인, `Inference`는 수학적 적용 판단, `Candidate`는 후속 채택 후보,
|
||
`Gap`은 아직 확인하지 못한 사항이다. 수식·threshold·schema의 최종 계약을 정하지 않는다.
|
||
|
||
<a id="research-evidence--source-inventory"></a>
|
||
### Source inventory
|
||
|
||
| ID | Source / stable locator | 적용과 한계 |
|
||
| --- | --- | --- |
|
||
| S01 | Dvorkin & Bathe (1984), Engineering Computations 1, 77–88, DOI `10.1108/eb023562`, [author PDF](https://web.mit.edu/kjb/www/Publications_Prior_to_1998/A_Continuum_Mechanics_Based_Four-Node_Shell_Element_for_General_Nonlinear_Analysis.pdf), Eqs.(1),(2), p.81 및 Fig.7 vibration examples | Director 운동학·5 DOF·rigid mode의 원 연구. 곡면 lumping 또는 Abaqus 내부 알고리즘의 근거가 아님. |
|
||
| S02 | Voet, Sande & Buffa (2023), CMAME 410,116033, DOI `10.1016/j.cma.2023.116033`, [author preprint v2](https://arxiv.org/html/2212.03614v2), Definition 3.7, Remark 3.8 | Scalar/일반 행렬 lumping 이론. 절댓값 row-sum theorem을 shell drilling-null 보존으로 확대하지 않음. |
|
||
| S03 | Bathe & Wilson (1973), IJNME 6,213–226, DOI `10.1002/nme.1620060207`, [author PDF](https://web.mit.edu/kjb/www/Publications_Prior_to_1998/Solution_Methods_for_Eigenvalue_Problems_in_Structural_Mechanics.pdf), `STATIC CONDENSATION`, Eqs.(9)–(13) | Massless 제거·fill 증가. Massive DOF의 근사 condensation과 구분. |
|
||
| S04 | Intel oneMKL C Developer Reference, URL edition `2026-0`, page date `2026-04-28`, [Extended Eigensolver Functionality](https://www.intel.com/content/www/us/en/docs/onemkl/developer-reference-c/2026-0/extended-eigensolver-functionality.html), generalized problem | Real symmetric generalized 문제의 SPD B 조건. 설치 runtime 일치 확인은 아님. |
|
||
| S05 | 같은 edition, [Input Parameters](https://www.intel.com/content/www/us/en/docs/onemkl/developer-reference-c/2026-0/extended-eigensolver-input-parameters.html), C-indexed `fpm[5]`, `[26]`, `[27]`, `[49]` | Count·trace·matrix checks. Standalone FEAST 또는 Fortran index와 혼동 금지. |
|
||
| S06 | 같은 edition, [Output Details](https://www.intel.com/content/www/us/en/docs/onemkl/developer-reference-c/2026-0/extended-eigensolver-output-details.html), `info` table 및 마지막 remark | 실패·empty warning·endpoint와 isolated cluster 위험. Count-empty 특수 성공 보장 문구 없음. |
|
||
| S07 | 같은 edition, [feast_scsrgv/feast_hcsrgv](https://www.intel.com/content/www/us/en/docs/onemkl/developer-reference-c/2026-0/feast-scsrgv-feast-hcsrgv.html), `m0`, `x`, `epsout`, `m`, CSR parameters | Signature·capacity·endpoint-scaled trace. Count-only 작은/null workspace 보장 문구 없음. |
|
||
| S08 | Abaqus 2025 [FREQUENCY](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEKEYRefMap/simakey-r-frequency.htm), optional parameters와 Lanczos data line | 공개 count·bound·normalization·SIM·acoustic syntax만 사용. FESA 내부 질량/해법의 동등성은 주장하지 않음. |
|
||
| P01 | [기존 mass](../mitc4-shell-feast-eigen/formulation.md#formulation-mass), [eigen](../mitc4-shell-feast-eigen/formulation.md#formulation-eigen), [stabilization](../mitc4-shell-feast-eigen/formulation.md#formulation-stabilization), [연구](../mitc4-shell-feast-eigen/research.md#research-evidence) | 연구 당시 worktree의 후보 유도·과거 근거 locator. 이번 독립 검증 또는 승인으로 간주하지 않음. |
|
||
| P02 | [요구사항](requirements.md#requirements), [요구 근거](requirements.md#requirements-evidence), [기존 nonlinear §10.3](../nonlinear-static-newton-raphson/formulation.md#103-fixed-scale-and-potential), [TOLERANCE](../TOLERANCE.md) | 요구·frozen lifecycle·acceptance 경계. 경험적 통과의 근거가 아님. |
|
||
|
||
<a id="research-evidence--r01--질량과-lumping"></a>
|
||
### R01 — 질량과 lumping
|
||
|
||
**Fact S01:** 입자 변위는 nodal translation과 두 director rotation으로 보간한다.
|
||
논문은 전역 3회전 표현으로 변환 가능함을 설명하고 여섯 rigid modes를 확인한다.
|
||
**Inference:** `v=sum Ni(ui_dot+z*(theta_i_dot cross di))`,
|
||
`T=1/2 integral rho |v|² dV`이면 `M_C=integral rho H^T H dV`이며
|
||
director-parallel rotation은 질량 null이다. MITC assumed shear는 strain 보간이므로
|
||
질량에 shear correction을 추가할 근거가 없다.
|
||
|
||
**Fact S02:** 일반 행렬의 absolute-row-sum과 nonnegative 행렬의 보통 row-sum은
|
||
구분된다. **Inference:** global rotary `P=I-dd^T`에 component row-sum을 적용하면
|
||
좌표 공변성·null을 잃는다. `d=(1,1,1)/sqrt(3)`에서는 `P*ones=0`이나 rank(P)=2다.
|
||
Translation/rotation의 무차별 행 합은 질량·질량×길이·질량×길이² 차원도 섞는다.
|
||
|
||
**Candidate P01 재검토:** Consistent 계산의 `Ck_ij=integral rho Ni Nj z^k dV`,
|
||
`k=0,1,2`를 보존하고 scalar row-sum을 node별 tensor block으로 재구성한다.
|
||
`sum Nj=1`, `Ni>=0`에서 node energy는 `integral rho Ni |Gi(z) qi_dot|² dV`이므로
|
||
양의 measure에서 비음성과 drilling null을 설명한다. Centered section이라도 곡면 J의
|
||
두께 의존성 때문에 first moment가 남을 수 있다. Flat parallel director에서만
|
||
rotary factor `t²/12`와 zero translation–rotation coupling이 직접 성립한다.
|
||
일반 orbital inertia·모든 velocity energy·consistent spectrum 동일성을 요구하지 않는다.
|
||
|
||
**검증 후보:** 직사각형 면적 A의 scalar mass는 `rho*t*A/36` 곱하기
|
||
`[[4,2,1,2],[2,4,2,1],[1,2,4,2],[2,1,2,4]]`인 직접 다항 적분 oracle;
|
||
회전 scalar 배율은 `t²/12`. 곡면은 production H/J를 재호출하지 않는 독립 velocity 적분,
|
||
node block positivity·moment 관계·두 mass의 좌표 congruence·density scaling을 검사한다.
|
||
Quadrature 차수·정확 관성 보존 범위는 Formulation/NR가 확정한다.
|
||
|
||
<a id="research-evidence--r02--실제-bc와-massless-reduction"></a>
|
||
### R02 — 실제 BC와 massless reduction
|
||
|
||
**Fact S03:** Mass가 `diag(Mp,0)`이고 massless stiffness `Kzz`가 가역이면
|
||
`Kr=Kpp-Kpz*Kzz^-1*Kzp`, `z=-Kzz^-1*Kzp*p`가 massless 방정식의 정확한 제거다.
|
||
Dense fill 가능성이 있다. **Inference:** 실제 global BC의 free injection C를 먼저
|
||
적용하여 `Mf=C^T M_L C`, `Kf=C^T K C`에서 positive/null 공간을 찾아야 한다.
|
||
기울어진 director와 partial rotation BC에서는 원래 drill 방향이 free 공간에 들어가지
|
||
않아 rotary free block이 SPD가 될 수 있다. UR3 또는 node당 1 DOF 일괄 삭제는 틀리다.
|
||
|
||
**Candidate:** 공통 nodal director, physical K의 drill null, positive scalar numerical
|
||
drilling 구조에서 `Kf Z=Z D`, `D>0`를 증명하면 `Kpz=0`인 sparse projection을 쓸 수 있다.
|
||
이 증명은 개선된 constrained pencil 대상이며 partial BC에 남는 stabilization을 지우지 않는다.
|
||
Nonlinear tangent 또는 prestressed 문제에 확장하지 않는다.
|
||
|
||
**검증 후보:** 비축정렬 director의 partial BC, null 없음/있음, 0 physical rank,
|
||
request>rank, `Kpz!=0`의 작은 manufactured pencil, 원 free residual 및 constraint 복원.
|
||
공통 K/M nullspace는 임의 pseudoinverse로 성공 처리하지 않는다.
|
||
|
||
<a id="research-evidence--r03--공변-stabilization과-frozen-nonlinear-scale"></a>
|
||
### R03 — 공변 stabilization과 frozen nonlinear scale
|
||
|
||
**Inference:** Orthogonal tangent basis 변경에서 `Ri'=Oi^T Ri Oi`이면
|
||
`trace(Ri')=trace(Ri)`다. 개별 대각값의 최솟값은 불변량이 아니다.
|
||
**Candidate:** 초기 physical rotational blocks의 trace 평균은 force×length 차원이며
|
||
PSD physical K에 비영 회전 강성이 있으면 양수다. Trace 양수만으로 전체 PSD를 입증하지는
|
||
못한다. 정확 집계·계수·유효성 판단은 Formulation 책임이며 reference tuning은 근거가 없다.
|
||
|
||
**Inference P02:** `Pi_d=kd*gamma^T gamma/2`에서 initial kd를 고정하면
|
||
`Dkd=D²kd=0`이고 기존 residual/Hessian 구조를 유지한다. Trial에서 재선정하면 추가 미분항이
|
||
필요하다. Objective gamma와 invariant initial kd가 모두 필요하며, positive kd만으로
|
||
일반 nonlinear Hessian의 SPD가 따르지 않는다.
|
||
|
||
**검증 후보:** Geometry부터 complete K·director·scale을 독립 재계산하는 좌표 회전,
|
||
node별 tangent 변경, 지원 partial BC `NR-MFE-001`와 같은 물리 load의 static response,
|
||
rigid physical motion·physical recovery 제외, nonlinear objective potential의 1·2차 미분과
|
||
initial scale immutability. 과거 반례 수치·새 trace 후보 기대값은 이번에 재계산하지 않았다.
|
||
|
||
<a id="research-evidence--r04--feast-countcompleteness의-확인과-gap"></a>
|
||
### R04 — FEAST count·completeness의 확인과 gap
|
||
|
||
**Fact S04/S05:** Generalized real symmetric 문제의 B는 SPD다. C-index
|
||
`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 및
|
||
allocation capacity를 분리해야 한다.
|
||
|
||
**Fact S06:** `info=0` 성공, `1` empty warning, `2` 미수렴, `3` 작은 subspace,
|
||
`4` subspace-only, `-4` B not SPD, `-5` count 오류이며 끝점이 고유치에 근접할 수 있다.
|
||
`emin>=emax`는 오류다. 매우 넓은 구간의 고립 cluster를 놓쳐 `info=1`일 수 있다.
|
||
따라서 빈 반환이나 작은 residual만으로 낮은 mode가 없음을 증명하지 못한다.
|
||
|
||
**Candidate:** SPD whitening 뒤 차원 일관적인 spectral lower bound와 bounded count
|
||
search를 연결하고, 구간 count와 solve row 수·Gram rank를 일치시킨 후 낮은 N개를 취한다.
|
||
N번째가 repeated cluster 안이면 내부 solve는 cluster 전체를 포함하고 외부 N개 identity는
|
||
count 요청을 따른다. 벡터 기저의 비유일성과 scalar multiplicity를 구분한다.
|
||
Zero modes를 양수 시작 구간으로 제외하거나 negative 값을 clamp하지 않는다.
|
||
|
||
**Gap G01:** 공식 표는 count-only empty case의 `info=0,m0=0`을 명시 보장하지 않는다.
|
||
성공 status와 count=0만 인정하는 guard는 fail-closed 후보지만, 이를 실제 runtime이 반환하여
|
||
전체 search가 진행되는지는 설치 oneMKL의 empty/occupied/endpoint 근접 probe가 필요하다.
|
||
`info=1`을 검증 없이 trusted zero count로 승격하지 않는다.
|
||
전체 spectrum 밖임을 독립 bound로 확보한 enclosing interval에서 성공 count가 n이면
|
||
전체 bracket의 완전성 근거가 된다. 선택적 empty-prefix 축소가 불가능해도 이 bracket을
|
||
유지하는 후보가 있으며, 비용·종료 조건과 채택은 Formulation이 판단한다.
|
||
|
||
**Gap G02:** Count-only의 작은/null x/e/res allocation 면제는 확인하지 못했다.
|
||
`m0=n`, `x[n*n]` 보수 allocation은 기존 후보이지 공식 최소 workspace 의무가 아니다.
|
||
설치 header/runtime와 memory·integer overflow를 구현 시 확인한다. 이 조사에서는 설치
|
||
runtime version·실행·peak memory를 측정하지 않았다.
|
||
|
||
**검증 후보:** 손으로 알려진 diagonal 및 직교 변환 SPD pencil의 첫 N개,
|
||
zero/negative/repeated/clustered/empty spectrum, N=rank, endpoint 근접, count/solve mismatch,
|
||
미수렴·allocation 실패, 원 lumped M residual·normalization·Gram. FEAST status만으로
|
||
physics/completeness를 통과 처리하지 않는다. 세부 bound·budget·threshold는 Formulation/NR 소유다.
|
||
|
||
<a id="research-evidence--r05--지정-원본과-공개-입력-의미"></a>
|
||
### R05 — 지정 원본과 공개 입력 의미
|
||
|
||
**이번 직접 정적 관찰:**
|
||
`reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine.inp`의 끝부분은
|
||
`*Step, name=Step-2, nlgeom=NO, perturbation`,
|
||
`*Frequency, eigensolver=Lanczos, sim, acoustic coupling=on, normalization=mass`,
|
||
`10, , , , ,` 및 Set-2 DOF 1~6 boundary 행이다. 같은 폴더의
|
||
`shellNL-eigen-meshfine eigenvalues.txt`는 Mode 1~10, Value와 별도 Freq를 표시한다.
|
||
Value 반복 표시는 2/3, 7/8, 9/10에 있으며 표시 precision만으로 exact degeneracy를 단정하지 않는다.
|
||
전체 keyword inventory·node count는 [요구 근거](requirements.md#requirements-evidence)의 선행 정적 관찰이다.
|
||
|
||
**Fact S08:** Lanczos 첫 data field는 requested count, 다음 두 field는 cycles/time의
|
||
frequency bounds이며 blank는 해당 bound 미설정을 뜻한다. Shift와 controls도 별도 field다.
|
||
**Inference/인계:** FESA의 FEAST backend와 source Lanczos/SIM을 분리하고 acoustic-free
|
||
옵션의 처리·warning 및 비영 unsupported field 거부를 I/O가 명시한다. 공개 Abaqus syntax는
|
||
FESA mass/stabilization 내부 동등성의 근거가 아니다.
|
||
|
||
Value-only·공통 tolerance는 사용자 계약이다. Freq 변환·TXT 보정·CSV 복제·외부 mode-shape
|
||
gate를 추가하지 않는다. NR가 family를 새로 검토하고 I/O가 source step/mode projection을 정의한다.
|
||
|
||
<a id="research-evidence--정적-확인미실행"></a>
|
||
### 정적 확인·미실행
|
||
|
||
원 논문·공식 웹 문서 접근과 위 지정 원본 두 파일의 읽기는 수행했다. 연구 문서의 상대
|
||
파일 링크 존재와 UTF-8 replacement 문자 부재를 Python으로 검사했고 exit `0`이었다.
|
||
기존 문서·reference·코드·threshold·schema를 수정하지 않았다.
|
||
이번 산출물은 두 연구 문서뿐이며 Git은 메인이 소유한다. Build/test·FEAST runtime·외부 solver·
|
||
reference 비교·독립 NR/Physics는 연구 범위 밖으로 미실행이다. Configured vault 요청이 없어
|
||
`fem-theory-query`를 사용하지 않았다. 제외 예제의 원본·복사·cache 열람과 재사용은 없다.
|