docs: record eigen2 research evidence and backend gaps

This commit is contained in:
KOKO\Mimi
2026-09-08 21:16:50 +09:00
parent be5c0e5777
commit 72e38d0505
4 changed files with 193 additions and 1 deletions
@@ -31,5 +31,6 @@
| [ADR.md](ADR.md) | 메인 assistant | 새 작업의 결정·기존 자료 적용 경계 |
| [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 | 일차 출처·적용 판단·검증 후보·미해결 근거 |
반환은 결과·변경 파일·정적 확인·미해결 항목으로 충분하다. Git 경로 선택·커밋과 최종 결과 확인은 메인이 수행한다.
+1 -1
View File
@@ -62,7 +62,7 @@ solver build/test·reference 비교와 release 감사는 포함하지 않는다.
- [x] 메인이 사용자 요구 coverage, 전문 owner 경계와 미해결 사항을 정적으로 확인한다.
- [x] 상대 링크·ID를 검사하고 커밋 대상이 새 Feature 문서 5개뿐인지 확인한다.
- [ ] Research: 기존 근거의 적용 범위와 부족한 이론·backend 근거를 확인한다.
- [x] Research: [연구](research.md)와 [근거](research-evidence.md)에 일차 출처·질량/축소/stabilization 후보 및 실제 runtime 확인이 필요한 FEAST 두 항목을 기록했다.
- [ ] Formulation: 질량·안정화·축소·고유치 해법의 구현 가능한 수학 계약을 작성한다.
- [ ] Numerical review: 독립 계산·검토로 정식화와 검증 계획의 적합성을 판단한다.
- [ ] I/O definition: 입력·진단·결과 schema·reference mapping 계약을 정의한다.
@@ -0,0 +1,156 @@
# 연구 근거·검증 후보·미해결 항목
- Feature ID: `mitc4-shell-feast-eigen2`
- Owner: `research-agent`
- Input baseline: `requirements r1`
- Web access date: `2026-09-08`
- Main report: [research.md](research.md)
`Fact`는 이번 원문 확인, `Inference`는 수학적 적용 판단, `Candidate`는 후속 채택 후보,
`Gap`은 아직 확인하지 못한 사항이다. 수식·threshold·schema의 최종 계약을 정하지 않는다.
## 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-mass.md), [eigen](../mitc4-shell-feast-eigen/formulation-eigen.md), [stabilization](../mitc4-shell-feast-eigen/formulation-stabilization.md), [연구](../mitc4-shell-feast-eigen/research-evidence.md) | 현재 worktree의 후보 유도·과거 근거 locator. 이번 독립 검증 또는 승인으로 간주하지 않음. |
| P02 | [요구사항](requirements.md), [요구 근거](requirements-evidence.md), [기존 nonlinear §10.3](../nonlinear-static-newton-raphson/formulation.md#103-fixed-scale-and-potential), [TOLERANCE](../TOLERANCE.md) | 요구·frozen lifecycle·acceptance 경계. 경험적 통과의 근거가 아님. |
## 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가 확정한다.
## 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로 성공 처리하지 않는다.
## 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 후보 기대값은 이번에 재계산하지 않았다.
## 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 소유다.
## 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-evidence.md)의 선행 정적 관찰이다.
**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을 정의한다.
## 정적 확인·미실행
원 논문·공식 웹 문서 접근과 위 지정 원본 두 파일의 읽기는 수행했다. 연구 문서의 상대
파일 링크 존재와 UTF-8 replacement 문자 부재를 Python으로 검사했고 exit `0`이었다.
기존 문서·reference·코드·threshold·schema를 수정하지 않았다.
이번 산출물은 두 연구 문서뿐이며 Git은 메인이 소유한다. Build/test·FEAST runtime·외부 solver·
reference 비교·독립 NR/Physics는 연구 범위 밖으로 미실행이다. Configured vault 요청이 없어
`fem-theory-query`를 사용하지 않았다. 제외 예제의 원본·복사·cache 열람과 재사용은 없다.
+35
View File
@@ -0,0 +1,35 @@
# MITC4 질량·FEAST 연구 결과
- Feature ID: `mitc4-shell-feast-eigen2`
- Owner: `research-agent`
- Input baseline: `requirements r1`
- Research date: `2026-09-08`
- Status: `evidence collected; formulation/verification pending`
[요구사항](requirements.md)과 [요구 근거](requirements-evidence.md)에 대한 연구다.
현재 후속 작업 권한은 메인이 전달한 최신 사용자 지시를 따르며, 요구 문서의 과거
requirement-only 완료 기록을 이번 연구의 실행 제한으로 해석하지 않는다.
기준은 [프로젝트 지침](../../AGENTS.md), [PRD](../PRD.md),
[ARCHITECTURE](../ARCHITECTURE.md), [ADR-028](../ADR.md#adr-028)이다.
출처별 locator·조건·검증 후보·gap은 [상세 근거](research-evidence.md)에 기록했다.
| 질문 / 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·공통 정책도 수정하지 않았다.