diff --git a/docs/mitc4-shell-feast-eigen2/FEATURED_AGENTS.md b/docs/mitc4-shell-feast-eigen2/FEATURED_AGENTS.md index 7977b86..5df28c2 100644 --- a/docs/mitc4-shell-feast-eigen2/FEATURED_AGENTS.md +++ b/docs/mitc4-shell-feast-eigen2/FEATURED_AGENTS.md @@ -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 경로 선택·커밋과 최종 결과 확인은 메인이 수행한다. diff --git a/docs/mitc4-shell-feast-eigen2/PRD.md b/docs/mitc4-shell-feast-eigen2/PRD.md index ba0d82c..fcd8402 100644 --- a/docs/mitc4-shell-feast-eigen2/PRD.md +++ b/docs/mitc4-shell-feast-eigen2/PRD.md @@ -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 계약을 정의한다. diff --git a/docs/mitc4-shell-feast-eigen2/research-evidence.md b/docs/mitc4-shell-feast-eigen2/research-evidence.md new file mode 100644 index 0000000..6903bde --- /dev/null +++ b/docs/mitc4-shell-feast-eigen2/research-evidence.md @@ -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=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 열람과 재사용은 없다. diff --git a/docs/mitc4-shell-feast-eigen2/research.md b/docs/mitc4-shell-feast-eigen2/research.md new file mode 100644 index 0000000..6e1e53d --- /dev/null +++ b/docs/mitc4-shell-feast-eigen2/research.md @@ -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·공통 정책도 수정하지 않았다.