docs: record MITC4 mass and FEAST research evidence

This commit is contained in:
KOKO\Mimi
2026-09-06 02:08:19 +09:00
parent 29d88b4e83
commit a7c13ff378
6 changed files with 415 additions and 4 deletions
+8
View File
@@ -44,3 +44,11 @@
- 이유와 영향: 사용자가 최종 계산 흐름과 해석 사용 질량을 직접 명시했다. Modal residual, normalization 및 orthogonality의 기준 `M`도 실제 사용한 lumped mass이다.
- 근거: 2026-09-06 사용자 답변 “고유치 해석에서는 lumped mass를 사용합니다. 따라서 고유치 해석을 할 때 consistent mass -> lumped mass -> 고유치 해석 입니다”; [Requirement owner r1 결정 evidence](requirements-evidence.md#중요한-결정)의 `MFE-OQ-002`를 해소한다.
- 경계: 두 mass variant 외부 비교 또는 사용자 선택 API를 추가 요구하지 않는다. Lumping 수식은 Research/Formulation이 계약과 evidence로 구체화한다.
## MFE-ADR-005 — 요청 고유치 개수의 입력 권위
- 상태: 사용자 명시 확인; 기존 r1 요구사항의 의미 유지.
- 결정 owner: user; 기록 owner: coordinator-agent.
- 결정: 고유치 개수는 `.inp`의 `*FREQUENCY` data를 사용한다. 지정 input의 요청은 `10`개이며 reference 행수나 FEAST 내부 count 추정으로 요청 개수를 역추론하지 않는다.
- 근거: 2026-09-06 사용자 답변 “inp 파일의 고유치 개수를 사용합니다”; [r1 FEM-REQ-MITC4-EIGEN-009/015](requirements.md#requirement-verification-matrix).
- 영향: 기존 mode-count 의미의 확인이므로 contract revision은 `r1`을 유지한다. FEAST interval/subspace는 입력 요청의 낮은 N개와 multiplicity·누락 검증을 충족하기 위한 내부 처리이다. 새 입력 설정 기능을 추가하지 않는다.
@@ -35,5 +35,7 @@ Reference artifact와 공통 정책은 수정하지 않는다. 외부 solver 실
| [coordination.md](coordination.md) | coordinator-agent | r1 | workflow 상태 원본 |
| [requirements.md](requirements.md) | requirement-agent | r1 | Coordinator gate pass; 26개 must 요구사항 |
| [requirements-evidence.md](requirements-evidence.md) | requirement-agent | r1 | 원본 관찰·결정·정적 evidence audit 완료 |
| [research.md](research.md) | research-agent | r1 | Coordinator gate pass; primary source coverage |
| [research-evidence.md](research-evidence.md) | research-agent | r1 | 수식 후보·API·한계·verification 근거 audit 완료 |
아직 작성되지 않은 specialist 보고서는 목록에 승인 산출물로 등록하지 않는다.
+3 -1
View File
@@ -3,7 +3,7 @@
- Feature ID: `mitc4-shell-feast-eigen`
- Owner: `coordinator-agent`
- Input contract revision: `r1`
- 검토 상태: requirements r1의 26개 must 요구사항 및 사용자 최종 결정 audit 완료; requirements gate pass.
- 검토 상태: requirements 및 research r1 gate pass; 구현용 정식화 준비.
기준: [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md), [프로젝트 ADR](../ADR.md).
지역 지침과 문서 목록은 [FEATURED_AGENTS.md](FEATURED_AGENTS.md), 상태 원본은 [coordination.md](coordination.md)를 따른다.
@@ -17,6 +17,7 @@
5. Coordinator 주도 requirements부터 release-readiness까지 9개 stage를 수행하며 중요한 사안만 인터뷰·검토를 요청한다.
6. Consistent mass를 먼저 계산하고 이를 이용하여 lumped mass를 계산하며, 고유치해석에는 lumped mass를 사용한다.
7. `FESA_GTEST_SOURCE_DIR=C:\git\googletest`를 사용하고 작업 중 완료된 변경을 Git에 커밋한다.
8. 고유치 개수는 `.inp`의 `*FREQUENCY` data를 사용한다. 지정 모델의 요청은 `10`개이다.
## 범위와 acceptance
@@ -40,3 +41,4 @@ Reference는 선행 preload 없는 단일 frequency step의 10모드이며 상
[requirements evidence](requirements-evidence.md#원본-reference-관찰)에 있다.
두 질량 계산의 연결에 관한 [MFE-ADR-002](ADR.md#mfe-adr-002--mitc4-질량-이산화)는 사용자 후속 요구로 확정되었다.
실제 FEAST mass는 [MFE-ADR-004](ADR.md#mfe-adr-004--feast에-사용하는-질량행렬)에 따라 lumped로 승인되었다. 상세 lumping 수식은 Research/Formulation owner가 정의한다.
Primary-source 근거와 적용 한계는 [research](research.md), 상세 근거는 [research-evidence](research-evidence.md)에 있으며 최종 수식·수치 기준의 승인을 대신하지 않는다.
+18 -3
View File
@@ -3,9 +3,9 @@
- Feature ID: `mitc4-shell-feast-eigen`
- Owner: `coordinator-agent`
- Contract revision: `r1` (사용자 최종 질량 요구를 반영한 requirements baseline)
- Stage: `research`
- Outcome: `pass` (requirements gate)
- Next owner: `research-agent`
- Stage: `formulation`
- Outcome: `pass` (research gate)
- Next owner: `formulation-agent`
- Attempt: `0`
- Completion: 미완료
- Failure classification / retry key: `null`
@@ -22,6 +22,7 @@
| intake | 사용자 요청, 공통 운영 계약 및 관리문서 4개 생성 | pass |
| requirements r0 초안 | [requirements](requirements.md), [관찰·결정 evidence](requirements-evidence.md) | needs-user-decision; 질량 선택 미승인으로 baseline pass 보류 |
| requirements r1 | [requirements](requirements.md), [관찰·결정 evidence](requirements-evidence.md), MFE-ADR-002/004 사용자 명시 결정 | pass; 26개 must와 owner/revision/hash 검증, 미결정 0 |
| research r1 | [research](research.md), [primary-source 상세 근거](research-evidence.md) | pass; primary source 11개 그룹·프로젝트 근거2개, 26개 requirement coverage 및 API 보장 한계 확인 |
공통 문서 및 reference 파일 목록의 read-only 조사 명령은 exit code `0`으로 완료했다.
확인된 reference 파일은 `shellNL-eigen-meshfine.inp`, `shellNL-eigen-meshfine eigenvalues.txt`이며 실제 의미와 readiness는 담당 owner가 검토한다.
@@ -30,12 +31,26 @@ Root의 시작 Git 조사에서 worktree clean을 확인했다. 구현·build/te
## 현재 bounded dispatch
Research owner의 r1 `pass` 반환을 Coordinator가 감사하여 formulation으로 전이한다.
연구 기본/상세 문서의 owner, r1, source locators, Fact/Derivation/Candidate 구분, 실제 명령 exit code 및 미실행 항목을 확인했다.
연구 문서 SHA-256: `research.md` = `c044031f844798f32bedc95fd998c181f965fbac00c3ed8f594a48d0164b8956`,
`research-evidence.md` = `aa7cf3be8c3858a9358ca2bd3d117ca0e85a6a0d42c1b439bd812f4ee3d3120f`.
Coordinator local-link audit은 Feature 8문서/끊긴 링크0, exit code `0`; `git diff --check`도 exit code `0`이다.
설치 header와 공식 count 기능 존재는 runtime 또는 완전성의 자동 통과 증거가 아니다. 실제 API의 수치적 한계, endpoint/count 실패, 독립 작은 spectrum 검증이 연구 보고서에 기록되었다.
Formulation owner는 approved MITC4 geometry에 대한 consistent 적분, derived block lumping·물리 관성·massless drilling/constraints,
FEAST의 낮은 N개 계산·복원·실패 보존 및 modal evidence 식을 구현 가능한 계약으로 작성한다. 최종 numerical/reference acceptance는 다음 NR가 독립 검토한다.
### Research 및 baseline 이력
Requirement owner의 최종 r1 `pass` 반환을 Coordinator가 감사하여 requirements gate를 통과시키고 research로 전이한다.
현재 SHA-256은 `requirements.md`: `1ebe65f231e49ffc15a9a1985dcdbbb7e6fc47b9e1ddb5a76f2c2489e5982690`,
`requirements-evidence.md`: `2241ef8dacc7e07d40c731667e202bd9c104ae43b1a5f6eab4530a6831fea918`이다.
Coordinator 정적 audit은 Feature 6문서, 끊긴 local link 0, must rows/unique IDs `26/26`, exit code `0`; `git diff --check` exit code `0`이다.
Research owner는 승인된 consistent→lumped→FEAST, 물리 관성·massless drilling·제약·최저 모드 완전성 및 독립 verification의 primary-source evidence를 수집한다.
연구 계약은 다음 stage의 수식을 대신 승인하지 않는다. Reference 비교량, tolerance 및 사용자 mass 선택은 변경하지 않는다.
요구조건 checkpoint는 Root가 `29d88b4` (`docs: baseline MITC4 lumped-mass FEAST requirements`)로 6개 exact paths를 커밋했고 이후 clean을 확인했다.
사용자가 “inp 파일의 고유치 개수를 사용합니다”라고 확인했다. 기존 r1의 `FEM-REQ-MITC4-EIGEN-009/015`와 일치하므로 [MFE-ADR-005](ADR.md#mfe-adr-005--요청-고유치-개수의-입력-권위)에 설명을 기록하고 r1을 유지한다.
Research와 후속 Formulation/NR은 FEAST interval count 기능의 exact guarantee와 stochastic estimate를 구분하고 공식 API가 보장하는 범위를 넘는 completeness 주장을 하지 않는다.
### Requirements 이력
@@ -0,0 +1,301 @@
# MITC4 질량·FEAST 근거와 downstream 검증 후보
- Feature ID: `mitc4-shell-feast-eigen`
- Owner: `research-agent`
- Input contract revision: `r1`
- 기본 보고서: [research.md](research.md)
- Web access date: `2026-09-06`
`Fact`는 출처에서 확인한 내용, `Derivation/Inference`는 그 근거를 승인된 FESA에 적용한
연구 판단, `Candidate`는 Formulation/NR가 확정할 항목이다. 이 문서는 최종 수식·API·schema·
tolerance나 benchmark acceptance를 승인하지 않는다.
## Source inventory
모든 외부 source는 원 논문 또는 공식 문서다. `P`는 프로젝트 계약이며 독립 검증 근거가 아니다.
공식 Abaqus 자료는 공개 입력·출력 의미만 설명한다.
| ID | Source identity / stable locator | 신뢰도·적용·한계 |
| --- | --- | --- |
| S01 | Dvorkin & Bathe, *A Continuum Mechanics Based Four-Node Shell Element for General Non-linear Analysis*, Engineering Computations 1 (1984), 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), Eq.(1),(2), Eq.(25) 직후 및 Fig.7/Tables 3–4; [local transcription](../reference-papers/MITC4/AContinuumMechanicsBasedFourNodeShell/AContinuumMechanicsBasedFourNodeShell_001.md) | 1차 운동학·5 DOF·consistent-mass vibration 예제. Local OCR의 도표값은 검증 없이 acceptance 값으로 채택하지 않음. 비선형·가변두께 범위를 새로 허용하지 않음 |
| S02 | Voet, Sande & Buffa, *A mathematical theory for mass lumping and its generalization with applications to isogeometric analysis*, CMAME 410 (2023), 116033, DOI `10.1016/j.cma.2023.116033`; [author preprint v2](https://arxiv.org/html/2212.03614v2), §1, Definition 3.7, Remark 3.8, Lemma 3.19, §3.3 | 원 연구의 row-sum·positivity·Loewner 근거. 일반 scalar algebra를 회전 tensor에 그대로 옮기는 것은 입증되지 않음 |
| S03 | Bathe & Wilson, *Solution methods for eigenvalue problems in structural mechanics*, IJNME 6 (1973), 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); [publisher record](https://onlinelibrary.wiley.com/doi/pdf/10.1002/nme.1620060207) | 원 연구의 massless elimination과 fill/storage 한계. 임의 massive DOF를 제거하는 근사 Guyan reduction의 정확성을 주장하지 않음 |
| S04 | Intel oneMKL C Developer Reference, 2026.0 URL edition, 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` 및 sparse interface 설명 | 공식 admissibility·PARDISO 사용. 설치 runtime와 같은 version string이라는 가정 없음 |
| S05 | 같은 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), `Syntax`, `Input/Output Parameters`; [Matrix Storage](https://www.intel.com/content/www/us/en/docs/onemkl/developer-reference-c/2026-0/matrix-storage.html) | 공식 signature·storage·capacity·결과 의미. `emin≤emax` 본문은 S07의 strict validation과 함께 읽음 |
| S06 | 같은 edition, [Extended Eigensolver 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` 표 | 공식 count/check/iteration 옵션. Standalone FEAST 다른 버전의 fpm 번호를 대입하지 않음 |
| S07 | 같은 edition, [Extended Eigensolver Output Details](https://www.intel.com/content/www/us/en/docs/onemkl/developer-reference-c/2026-0/extended-eigensolver-output-details.html), return-code 표와 `info=1` 주의 | 공식 오류·구간 폭·endpoint 위험. Warning은 Feature 성공으로 자동 승격하지 않음 |
| S08 | E. Polizzi, *Density-Matrix-Based Algorithm for Solving Eigenvalue Problems*, Physical Review B 79 (2009), 115112, DOI `10.1103/PhysRevB.79.115112`; [author preprint](https://arxiv.org/pdf/0901.2665), §II.A Eqs.(6)–(9), §II.B | 원 FEAST의 contour/Rayleigh–Ritz와 B-orthonormality. MKL 옵션·상태 정의는 S05–S07 우선 |
| S09 | Abaqus 2025 [*FREQUENCY](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEKEYRefMap/simakey-r-frequency.htm), `Optional parameters`, Lanczos data line | 공식 count·bounds·SIM·normalization·acoustic semantics. FESA가 source Lanczos를 구현한다는 근거가 아님 |
| S10 | Abaqus 2025 [Natural Frequency Extraction](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEANLRefMap/simaanl-c-freqextraction.htm), `Eigenvalue Extraction`, `Normalization`, `Initial Conditions`, `Output` | 공식 `omega²`·generalized mass·base state. Abaqus 내부 질량 정식화에 대한 추론 금지 |
| S11 | Abaqus 2025 [OdbFrame object](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEKERRefMap/simaker-c-odbframepyc.htm), modal constructor와 members; [Mode Domain Output](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEOUTRefMap/simaout-c-dboutput-frequency.htm), `Controlling Output Frequency in a Mode Domain Analysis` | 공식 mode/frame 의미. TXT에 없는 step을 임의 생성하는 권한이 아님 |
| P01 | [기존 MITC4 formulation](../linear-static-mitc4-shell/formulation.md), §§5,8,9,12,17; [실제 kernel](../../src/fesa/elements/mitc4_shell.cpp), `PhysicalTransformation20`, `DrillingTransformation4`, `EvaluateStiffness`, `GeometryAt`; [ARCHITECTURE](../ARCHITECTURE.md) | 현재 FESA 기하·부호·stabilization·소유권 계약. Legacy research의 오래된 tolerance/승인 절차는 이번 계약에 재사용하지 않음 |
| P02 | [requirements r1](requirements.md), [원본 reference evidence](requirements-evidence.md), [공통 TOLERANCE](../TOLERANCE.md), [ADR](ADR.md) | 승인된 사용자 흐름과 acceptance boundary. 수치 통과 자체의 evidence가 아님 |
Hinton–Rock–Zienkiewicz (1976), DOI `10.1002/eqe.4290040305`의
[publisher abstract](https://onlinelibrary.wiley.com/doi/10.1002/eqe.4290040305)는 확인했으나
본문을 확보하지 않아 HRZ의 shell-specific 수식을 근거로 채택하지 않았다.
NASA SP-160은 optional plate benchmark 탐색에서 발견했으나 이번 포트폴리오는 S01 및
직접 검산 가능한 oracle로 충분하므로 필수 artifact나 새 acceptance 요구로 추가하지 않았다.
Configured FEM vault는 이번 요청의 지정 evidence source가 아니며, 기존 wiki/연구 요약은
탐색에만 참고하고 핵심 주장을 위 1차 source에 연결했다.
## R01 — Consistent physical mass와 적분
**Fact, S01/P01:** 기존 보간은 `u = sum Ni(ui + z*(theta_i cross d_i))`,
`z=t*zeta/2`이며 director-parallel rotation은 입자 속도에 기여하지 않는다.
원 논문의 elastic example은 surface `2×2`, thickness 2-point Gauss 및 consistent-mass
주파수 분석을 사용한다. 이는 임의 geometry의 mass 적분이 정확하다는 증명은 아니다.
**Derivation:** `T=1/2 integral rho*|u_dot|² dV`에서 `M_C=integral rho*H^T H dV`가
따른다. Geometry는 기존 `X=sum Ni(Xi+z*di)`와 같은 `J=det(dX/dnatural)`를 사용한다.
양의 quadrature weight·density·유효 J에서는 대칭 PSD와 drilling null action이 직접 따른다.
MITC의 assumed shear는 strain 보간이므로 velocity 보간을 바꾸거나 shear factor `5/6`를
물리 질량에 곱하는 이유가 되지 않는다.
**평판 oracle:** 평행 director·centered flat section이면 병진 scalar block은
`rho*t*integral Ni*Nj dA`, rotary block은 `rho*t³/12*integral Ni*Nj dA`와 tangent
변환의 곱이며 translation–rotation coupling은 0이다. 축정렬 직사각형 면적 A에서는
scalar consistent block이 `rho*t*A/36`에 다음 행렬을 곱한 것과 같다.
```text
4 2 1 2
2 4 2 1
1 2 4 2
2 1 2 4
```
Rotary oracle의 scalar 배율은 위 병진 배율의 `t²/12`다. 이는 bilinear 형상함수의 직접
다항식 적분 결과이며 구현 함수를 다시 호출하는 테스트와 구분한다.
**Candidate/한계:** 곡면에서는 J가 zeta에 의존하여 odd thickness moment와
translation–rotation coupling이 남을 수 있다. Centered section만으로 이를 0으로 두지 않는다.
현재 trilinear geometry의 J 및 H 다항식 차수를 확인해 충분한 적분을 선택할 수 있다.
보수적인 tensor-product 3-point 후보는 각 좌표의 degree≤4 mass integrand를 적분하지만,
정확한 차수·기하 검증 위치·채택 quadrature는 Formulation/NR가 증명한다. 기존 stiffness
quadrature나 기존 geometry 허용 범위를 연구 단계에서 변경하지 않는다.
## R02 — Consistent에서 유도하는 좌표 일관적 lumping
**Fact, S02:** Row-sum, nodal quadrature, diagonal scaling은 일반적으로 서로 다른 근사다.
Nonnegative partition of unity는 scalar row-sum의 positivity를 설명한다. 논문의
absolute-row-sum operator는 일반 행렬의 positivity를 확보하지만 물리 total mass나
회전 nullspace를 보존하는 shell-specific theorem은 아니다.
**Derivation — 피해야 할 적용:** global rotary tensor는 `I-di*di^T`와 다른 director
사이의 cross block을 포함한다. Scalar `diag(M*ones)`는 좌표 회전과 commute하지 않는다.
예를 들어 단위 director `d=(1,1,1)/sqrt(3)`의 `P=I-dd^T`는 `P*ones=0`이지만
rank는 2다. Row-sum은 두 물리 관성을 모두 없애며 absolute row-sum은 drilling에
관성을 더한다. 혼합 translation/rotation 행의 무차별 합은 단위도 섞는다.
**Candidate — scalar moment를 통한 node block:** Consistent의 구성 moment
`Ck_ij=integral rho*Ni*Nj*z^k dV`, `k=0,1,2`를 식별하고 해당 물리 scalar moment에서
row-sum한 뒤 각 node의 director tangent tensor로 재구성하는 방법을 검토할 수 있다.
이는 consistent 결과와의 유도 관계를 증명해야 하며, 별도 unrelated diagonal을 생성하는
우회 경로로 쓰지 않는다. Full consistent block에서 moment를 추출하거나 계산 중 동일
moment를 보존하는 구체적 방식은 Formulation 소유다.
`sum Nj=1` 때문에 이 후보는 node별 `integral rho*Ni*Gi(z)^T Gi(z) dV` 형태로
설명된다. 여기서 `Gi(z)`는 그 node의 병진과 director 변화로 particle velocity를 만드는
map이다. 따라서 양의 measure에서 physical block PSD, director nullspace, tensor
congruence와 총 병진 질량 보존을 독립적으로 검산할 수 있다. Flat case에서는
`m_i=sum_j C0_ij`, 두 tangent inertia `m_i*t²/12`, drilling 0으로 단순화된다.
**한계:** 곡면의 nodal rotational frames를 component별로 직접 더하지 않는다.
Node block은 global 좌표에서 diagonal일 필요가 없다. Translation–rotation moment를
보존하면 6×6 block에 coupling이 있을 수 있다. 이 후보의 positivity와 각 inertia/centroid
보존 관계는 Formulation에서 완성하고 NR가 독립 검토해야 한다. Uniform translation
energy는 보존하지만 일반 회전의 orbital inertia 및 모든 속도장의 consistent energy는
보존한다고 가정하지 않는다. 물리 node velocity의 convexity로 설명 가능한 에너지 차이와
refinement 거동을 검증 후보로 삼을 수 있으며, Abaqus 내부 lumping 동일성을 주장하지 않는다.
## R03 — Massless 좌표, 제약과 유한 spectrum
**Fact, S03:** Massless 좌표를 분리하여 mass가 `diag(Mp,0)`, `Mp` SPD이고 대응
강성 `Kzz`가 가역이면 `Kr=Kpp-Kpz*Kzz^-1*Kzp`와 `Mp`의 문제로 축소하며,
massless 성분은 `z=-Kzz^-1*Kzp*p`로 복원한다. 이 경우 정적 제거는 massless row의
정확한 식이다. 축소 stiffness는 일반적으로 dense가 될 수 있다.
**Inference, P01에 적용:** 먼저 원래 global homogeneous BC의 free injection C로
`Kf=C^T K C`, `Mf=C^T M_L C`를 만들고, 그 공간에서 positive/null basis를 정의한다.
Director가 global axis와 기울어져 있으면 `UR3=drill`은 성립하지 않는다. 일부 global
회전을 고정한 node에서는 원래 drill 방향 전체가 free space에 들어가지 않을 수 있으므로
실제 `Mf`가 full rank가 될 수 있다. 이때 물리 질량이 있는 자유도를 제거해서는 안 된다.
P01의 공통 nodal director와 `Kphys=Tphys^T K20 Tphys`,
`Kdrill=Td^T kd I Td` 때문에 massless 방향의 decoupling을 algebraically 증명할
가능성이 있다. 증명된 경우 node별 작은 basis로 projection하여 sparsity를 유지할 수 있다.
단순히 coupling을 작다고 버리는 것은 그 증명이 아니다. Partial global constraints로
finite space에 남는 기존 stabilization contribution도 보존한다. 새 massless 처리는
**기존 constrained stabilized K와 선택된 lumped M의 finite spectrum**에 대한 동등성이다.
Unstabilized 다른 shell formulation이나 consistent spectrum과의 동등성이 아니다.
**Candidate 검증:** 비축정렬 director, partially constrained rotation, constraint-free
shell의 6 physical rigid motions, `Kpz!=0`인 작은 manufactured pencil로 축소/복원과
full free residual을 확인한다. Physical rigid rotation의 nodal UR은 기존 계약의 tangent
projection을 사용한다. Null block이 비가역인 경우 generic inverse/pseudoinverse로
우회하지 않는다. 공통 K/M nullspace는 regular finite-spectrum 문제와 구분해 진단한다.
물리 rank 0, request>rank, nullspace가 없는 경우를 각각 정의한다.
일반 dense basis/Schur를 채택하면 `O(n²)` storage와 factorization fill을 평가해야 한다.
Reference의 25×25 interior nodes는 flat full clamp에서 free DOF 3750,
massive physical dimension 3125로 예상되며, 3125² double 한 행렬만 약 78.1 MB다.
이는 topology에 따른 계산 추정이고 실제 rank/runtime 측정이 아니다. FEAST workspace와
complex shifted factorization을 더해야 하므로 한 행렬 크기로 memory feasibility를 주장하지 않는다.
## R04 — oneMKL FEAST API와 completeness 근거
**설치 관찰:** `mkl/2026.1/include/mkl_solvers_ee.h` lines 33,87에 `feastinit`,
`dfeast_scsrgv`가 있다. `mkl_version.h`는 major `2026`, minor `0`, update `1`,
build date `20260612`, `INTEL_MKL_VERSION=20260100`이다. Directory `2026.1`과
header version 표기를 임의로 통일하지 않는다. 실제 linked runtime는 Implementation이 기록한다.
`mkl_types.h`의 `MKL_INT`는 LP64에서 `int`, `MKL_ILP64`에서 64-bit다. N, nnz+1,
row/column index와 N×m0 allocation을 checked conversion해야 하며 vendor type은 adapter 내부다.
**Fact, S04/S05:** Real symmetric generalized `A*x=lambda*B*x`에서 B는 SPD여야 한다.
`dfeast_scsrgv`는 A/B 각각 values·row pointer·column index를 받으며 같은 storage family를
사용한다. `uplo=U/L/F`, `n>0`, `0<m0<=n`, `m0>=interval multiplicity count`다.
`fpm`은 128개 `MKL_INT`; `e/res`는 m0, eigenvectors는 N×m0의 column storage로
준비하고 첫 m columns만 소비한다. Documented CSR은 row pointer terminal `nnz+1`인
1-based convention으로 대응한다. A/B sparsity pattern은 같을 필요가 없다. 내부 0-based
CSR을 인덱스 변환 없이 넘기지 않는다. `epsout`은 trace 변화량이고 개별 residual을 대신하지 않는다.
**Fact, S06 — C index 표:**
| Parameter | 문서 의미 / 연구 적용 |
| --- | --- |
| `feastinit(fpm)` | 호출 전 초기화; 다른 FEAST 배포판의 설정 배열을 복사하지 않음 |
| `fpm[1]` | contour points; 허용된 값만 사용 |
| `fpm[2]`, `[3]` | double precision stopping exponent, refinement loop bound; 값은 NR/계약에서 고정 |
| `fpm[4]` | 0=generated initial subspace, 1=user subspace; 재현성과 projection rank 검증 필요 |
| `fpm[5]` | 0=residual stopping, 1=trace stopping; zero mode는 독립 scale-aware residual 필수 |
| `fpm[13]` | 1은 한 contour의 subspace만 반환; 완료 eigenpairs로 소비하지 않음 |
| `fpm[26]`, `[27]` | CSR validity, B SPD check 옵션 |
| `fpm[49]` | CSR interval eigenvalue count를 m0에 반환하고 flag를 0으로 재설정; count와 solve는 구분 |
| `fpm[63]` 및 `[64..127]` | PARDISO user iparm 적용 여부 및 매핑; 후반부는 output도 되므로 call 간 변경 고려 |
**Fact, S07:** `info=0` successful; `1` empty interval/검색 실패 가능,
`2` nonconvergence, `3` insufficient subspace, `4` subspace-only이다.
`-1/-2` allocation/inner solver, `-3/-4` reduced solver/B-not-SPD,
`-5` count failure(구간 끝이 eigenvalue 또는 근접할 수 있음), `200/201/202`는
interval/subspace/N 오류다. `100+i`는 `fpm[i-1]` 오류다.
S05 본문은 `emin<=emax`로 쓰지만 명시적인 `200` 검증은 `emin>=emax`를 거부하므로
실제 계약은 strict `emin<emax`로 설정할 수 있다. 이것은 사용자 physics 결정이 아니다.
매우 넓은 구간 안의 작은 cluster를 놓칠 수 있다는 공식 주의가 있으므로 빈 반환을 곧
없는 spectrum으로 단정하지 않는다.
**Candidate bounded policy rationale:** SPD reduction/whitening 뒤 차원이 일관된 spectral
bound(예: 대칭 표준 문제의 Gershgorin bound)를 유도하면 전체 spectrum 밖의 유한 하한과
상한을 얻을 수 있다. Reference 값이나 hardcoded frequency로 구간을 정하지 않는다.
Zero를 포함하는 하한을 두고 interval count를 통해 낮은 순서의 requested N을 덮는 상한을
찾되, endpoint collision·overflow·count/solve mismatch와 시도 수를 제한한다. Count가
cluster 전체를 포함하면 m0가 requested N보다 커질 수 있으며 반드시 multiplicity를
수용한다. Sort 후 필요한 첫 N을 출력하더라도 원래 계산 multiplicity와 pairing을 유지한다.
`m0=N`이 충분하다는 가정, 매번 상한만 무한히 늘리는 정책, count 성공을 eigenpair 성공으로
취급하는 정책은 근거가 없다. Final bounds·성장/축소·cluster tie·subspace/seed·실패 정책은
Formulation/NR 소유이고 small N 및 N=physical rank도 FEAST 실제 runtime로 검증한다.
Intel S06은 `fpm[49]` 결과를 total number로 기술하며 stochastic estimate라고 설명하지
않는다. 그렇더라도 이 문서만으로 floating-point inertia/count의 모든 조건에서의 정확성이나
전체 algorithm의 completeness를 증명했다고 주장하지 않는다. S07의 endpoint/count 실패와
작은 독립 spectrum 검증을 유지한다. 다른 standalone FEAST 버전의 stochastic-count
옵션과 혼동하지 않는다. 요청 N의 외부 authority는 사용자 확정대로 `.inp` data이며
내부 count는 interval/subspace를 정하는 evidence다. TXT 행수나 count로 N을 바꾸거나
새 사용자 interval/count API를 만들지 않는다.
**Fact, S08 / 적용:** FEAST의 Rayleigh–Ritz 식은 B-orthonormal reduced vectors에서
`X^T B X=I`를 준다. 내부 벡터는 같은 lumped M으로 검증한다. Repeated eigenspace의
개별 방향과 sign은 유일하지 않으므로 vector component exact equality를 acceptance로
추가하지 않는다. Count/completeness와 residual/Gram은 서로 대체하지 않는다.
## R05 — Reference의 관찰 가능한 의미와 family
**Fact, S09/S10:** `*FREQUENCY`의 첫 값은 requested count다. Lanczos data line의
blank min/max는 별도 bound를 지정하지 않으며, 뒤 shift와 block controls의 공란을 0 입력으로
오인하지 않는다. `SIM`은 source architecture 설정이고 `NORMALIZATION=MASS`는
generalized mass 1이다. Acoustic coupling ON은 acoustic/structural coupled model에
작용한다. 적용 대상 acoustic 요소·ASI·coupling이 없는 현재 input의 옵션은 무해하게
mapping할 근거가 있으며, 실제 acoustic 모델은 승인 subset 밖이다.
**Inference/P02:** 알고리즘 지정의 FESA 해석은 source Lanczos 보존 + actual backend
FEAST이다. SIM을 FESA backend 기능으로 주장하지 않고 명시된 무해한 조합만 I/O가
진단 정책으로 고정한다. 원본의 output/restart 요청을 읽을 때에도 새 modal stress/reaction
지원으로 확대하지 않는다. 실제 prior step, preload, damping, nonzero prescribed state를
삭제하여 현재 subset처럼 실행하는 근거는 없다.
**Fact/관찰:** S10은 `lambda=omega²`와 cycles/time frequency를 구분한다. S11은
modal frame의 mode member와 mode-domain output을 정의한다. 원본 TXT는 `Frame: Mode`
1~10과 Value를 포함하고 input에는 단일 `Step-2`만 있다. 따라서 unique step + source
mode mapping이 가능하며 Freq 반올림으로 Value를 다시 계산하지 않는다.
**NR handoff:** 공통 TOLERANCE는 같은 step/frame만 family로 묶는다. 원본에 각각의 modal
frame이 있는 점을 유지하여 mode별 scalar family를 정의하는 방향을 검토한다. 단일 HDF5
table에 저장했다는 이유로 다른 source mode/frame을 하나의 family로 모으지 않는다.
Singleton family에서는 공통 RMS 규칙도 그대로 적용하며 scalar라는 이유로 생략하지 않는다.
최종 family 이름·identity·blocking 및 exact mapping은 NR/I/O가 고정한다.
Repeated Value는 서로 다른 mode identity로 보존하며 source missing/extra/duplicate/nonfinite
검사 후 공통 정책을 적용한다. Displayed repeated 값으로 실제 exact degeneracy를 단정하거나
mode shape matching으로 외부 acceptance를 넓히지 않는다.
## R06 — 독립 verification portfolio 후보
각 case의 필수 여부·수치 기준은 NR가 정한다. External reference는 지정 Value 10개뿐이다.
| Candidate | 잡아내는 오류 / 독립 기대값 | 한계 |
| --- | --- | --- |
| 직사각형 single-element mass | R01 polynomial oracle, 3 translations total `rho*A*t`, 2 rotary inertia, null drilling | 곡면 적분·semantic 연결은 검증하지 않음 |
| 곡면/왜곡 요소의 independent velocity integration | 직접 particle kinetic energy와 consistent quadratic form, R02 derived relation/양의 node block | 동일 production H/J 코드를 재호출하는 oracle는 독립성이 부족 |
| Rigid/coordinate tests | 기존 tangent rigid motion의 zero stiffness, 회전된 geometry/director/motion의 energy congruence; eigenvalue invariant | global component BC도 같은 물리 제약으로 변환할 수 있는 case를 선택; 허용되지 않은 일반 MPC를 추가하지 않음 |
| Density scaling | 두 mass가 density 배율 c에 비례, 선택된 eigenvalues가 1/c, mass-normalized vector magnitude가 1/sqrt(c) | 다른 density field의 material mapping은 별도 양성/음성 test |
| 작은 manufactured singular pencil | R03 식을 손으로 계산하여 exact finite eigenvalues·복원 residual, partial global constraint와 rank case | Element/mass 조립 correctness는 별도 검증 |
| 작은 diagonal/rotated SPD pencil | FEAST N=1/2, repeated/clustered/zero/negative case, request=rank, count/m0/interval edge 및 실패 진단 | 직접 hand matrix는 전체 procedure/reference를 대신하지 않음 |
| Modal residual / Gram / energy | Free-space `Kphi-lambda*M_L*phi`, `Phi^T*M_L*Phi=I`, `phi^T*K*phi=lambda`와 constraint 복원 | 작은 residual만으로 최저 모드 completeness를 보장하지 못함 |
| Simply-supported plate analytical limit | S01 Fig.7/Table4의 plate frequency 사례 또는 `lambda=(D/(rho*t))*((m*pi/a)^2+(n*pi/b)^2)^2`의 thin-plate Navier limit | 마지막 식은 직접 thin-plate PDE로 유도·검산할 후보; rotary/shear를 포함한 유한 두께 shell의 exact oracle로 쓰지 않음 |
| 지정 clamped plate reference | 원본 `.inp`와 TXT Value의 순서·multiplicity·family 비교; square-symmetry cluster 진단 | 비교만으로 mass·mode shape·drilling·내부 알고리즘의 correctness를 주장하지 못함 |
Modal physics는 무하중 정적 `Kphi=0`나 정적 reaction balance를 모든 eigenvector에
요구하지 않는다. Inertia와 elastic restoring force의 균형인 free residual을 검사한다.
Dimensional translation/rotation 차이는 Formulation의 congruent scaling으로 처리하고
zero mode의 residual denominator와 rank threshold는 NR가 정한다. 두께 변경에서는
membrane, bending, shear, rotary inertia가 서로 다르게 변하므로 density처럼 모든 mode에
단일 thickness power law를 강제하지 않는다.
## 실행 evidence와 미실행
Read-only `Get-Content`, scoped `rg`, `Get-FileHash`로 필수 공통/Feature/기존 MITC4
문서, 실제 kernel과 원본 두 reference 파일을 읽었다. 해당 읽기·hash 명령은 exit `0`이다.
아래는 핵심 재현 진입점이다.
```powershell
Get-Content -Raw '.codex/skills/fem-research-evidence/SKILL.md'
Get-Content -Raw 'docs/mitc4-shell-feast-eigen/requirements.md'
rg -n 'PhysicalTransformation20|DrillingTransformation4|drilling_stiffness' 'src/fesa/elements/mitc4_shell.cpp'
Get-Content 'reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine.inp' -Tail 52
Get-Content -Raw 'reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine eigenvalues.txt'
Get-FileHash 'reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine.inp','reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine eigenvalues.txt'
```
SHA-256은 input `913b1abc604e62bc5f995bf5523924e17ea03925102a7bd22d39226ba0ea7339`,
TXT `20d97ca3fd51f5b956f2c1ed7565557c68f74e61e41b913748515ef43a0f7f0b`로 P02와 같다.
설치 include에서 `rg`로 위 R04의 declarations/version/type을 확인했다. 별도
`rg -n 'MKL_INTERFACE|MKL_ILP64|lp64' cmake CMakeLists.txt`는 no-match exit `1`이며
linked ABI를 판정한 것이 아니다. Numpy/pypdf/fitz 탐색은 exit `0`, 모두 미설치였고
설치·수치 실험·외부 solver를 수행하지 않았다.
Web `search_query/open/find`로 S01–S11을 조사했다. S03 PDF는 초기 검색·열기에서
`STATIC CONDENSATION`과 Eqs.(9)–(13) 텍스트를 얻었으나 후속 부분 열기는 timeout이
발생했다. S01의 수식은 보존된 원문 transcription과 현재 승인 계약도 대조했다.
S02 author HTML, S04–S07 Intel 본문, S08 author PDF, S09–S11 공식 문서는 접근했다.
NASA PDF/일부 publisher/feastinit 개별 URL 접근 실패를 필수 근거로 사용하지 않았다.
한 차례 tool orchestration의 quote syntax 오류는 도구 실행 전 실패했으며 수정 후 검색을
수행했다. 이런 접근 실패를 구현 또는 reference comparison 성공으로 기록하지 않는다.
Owned 두 문서의 metadata/상대 링크/requirement coverage를 read-only Python here-script
(`python -B -`, `pathlib`, `re`, `urllib.parse.unquote`)로 검사했다. Exit `0`,
documents `2`, local links `21`, requirement coverage `26`, issues `0`이다.
`git diff --check`는 exit `0`이며 다른 owner의 관리문서 LF/CRLF 경고가 출력되었다.
신규 untracked 연구 문서는 별도 Python 정적 검사로 trailing whitespace·final newline·상대
링크를 확인했다. Exit `0`, files `2`, local links `21`, issues `0`이다. `git status --short`에서
연구 두 파일과 Coordinator 관리문서 변경을 구분했으며 관련 없는 파일을 수정하거나 stage하지 않았다.
CMake/CTest, Harness, FEAST runtime와 numerical reference comparison은 이
연구 단계의 범위가 아니므로 미실행이다. Source/tests/build/phase/upstream/tolerance/reference는
편집하지 않았으며 다른 owner의 변경을 되돌리지 않았다.
+83
View File
@@ -0,0 +1,83 @@
# MITC4 질량과 FEAST 고유치해석 연구
- Feature ID: `mitc4-shell-feast-eigen`
- Owner: `research-agent`
- Input contract revision: `r1`
- 조사일 / web access date: `2026-09-06`
- 요청 outcome: `pass`; 다음 owner: `formulation-agent`. 최종 gate와 전이는 Coordinator 소유이다.
입력은 [FEATURED_AGENTS](FEATURED_AGENTS.md), [PRD](PRD.md), [ADR](ADR.md),
[requirements r1](requirements.md), [reference 관찰](requirements-evidence.md)이다.
[프로젝트 PRD](../PRD.md), [ARCHITECTURE](../ARCHITECTURE.md), [공통 ADR](../ADR.md),
[TOLERANCE](../TOLERANCE.md), [agent 계약](../SOLVER_AGENT_DESIGN.md),
[문서 소유권](../FEATURE_DOCUMENTATION.md)을 적용한다.
Source inventory, locator, API evidence, 유도 후보와 검증 한계는
[research-evidence.md](research-evidence.md)에 둔다.
## 핵심 결과
1. 원 MITC4의 director 운동학에서 kinetic energy를 적분하면 병진 및 두 접평면 회전의
consistent mass를 구성할 수 있다. 원 논문은 consistent mass를 사용한 주파수 예제도
포함한다. Drilling은 이 보간의 nullspace다. 평판의 `rho*t`, `rho*t^3/12` 분리는
좋은 독립 oracle지만, 곡면의 thickness-dependent Jacobian까지 대체하는 일반식은 아니다.
근거: 상세 문서 `S01`, `R01`.
2. Consistent에서 얻은 물리 질량 moment를 node block으로 lumping하는 방향은
nonnegative partition of unity와 tensor 변환으로 설명할 수 있다. 전역 scalar
row-sum 또는 절댓값 row-sum을 회전 block에 그대로 적용하면 좌표 불변성과 drilling
nullspace를 잃을 수 있다. Lumping이 consistent의 모든 kinetic energy 또는 spectrum을
보존한다는 주장은 하지 않는다. 근거: `S02`, `R02`의 사실/유도 구분.
3. Homogeneous global constraint를 적용한 실제 질량의 positive/null space에서 massless
좌표를 처리해야 한다. Massless block의 강성이 가역이면 Schur complement는 선택된
lumped 질량의 유한 spectrum을 정확히 보존한다. `UR3`를 무조건 삭제하거나 인공
drilling mass를 더할 근거는 없다. 기존 공통 nodal director와 안정화 구조로 decoupling을
증명하면 일반적인 dense condensation을 피할 여지가 있다. 근거: `S03`, `R03`.
4. 설치된 oneMKL header에서 `feastinit`, `dfeast_scsrgv`를 확인했다. 공식 generalized
FEAST는 mass SPD를 요구하고 CSR interval count `fpm[49]`를 제공한다. 이 기능과
사전 spectral bound를 이용하면 bounded interval 정책의 completeness evidence를
구성할 수 있다. `info=0`만으로 최저 요청 모드가 모두 있다는 결론은 부족하다.
근거: `S04`~`S08`, `R04`.
5. Reference의 Lanczos/SIM은 source 옵션이고 FESA backend는 승인된 FEAST이다.
Acoustic-free 모델에서만 `ACOUSTIC COUPLING=ON`을 무해하게 대응할 근거가 있다.
`NORMALIZATION=MASS`는 실제 사용된 lumped 질량에서 유지한다. TXT의 각 mode는
modal frame identity에 대응하므로 family는 공통 same-frame 규칙과 함께 확정해야 한다.
근거: `S09`~`S11`, `R05`.
사용자 후속 확정대로 요청 mode 개수의 authority는 `.inp`의 `*FREQUENCY` data다.
현재 값은 10이며 reference row 수나 FEAST 내부 count로 요청수를 추론하지 않는다.
## Requirement coverage
ID는 모두 `FEM-REQ-MITC4-EIGEN-` 접두사를 가진다. 연구 외 행도 owner를 명시해 누락과
완료를 구분한다. 아래 표는 requirements matrix를 대체하지 않는다.
| IDs | 필요한 근거와 적용 범위 | 후속 owner |
| --- | --- | --- |
| `001`, `015`, `016` | `S09`, `S10`, `R05`: 무감쇠 원형상 procedure와 관찰 가능한 옵션; fail-closed exact allowlist | Formulation, I/O |
| `002`, `004` | `S01`, `P01`, `R01`: 기존 director/geometry/5-to-6 DOF 의미 보존 | Formulation |
| `003` | `S01`, `R01`: 질량의 양의 density 의존성; syntax·material 연결은 I/O 검증 대상 | I/O |
| `005`, `006`, `026` | `S01`, `S02`, `R01`, `R02`: consistent→lumped 유도 후보, 물리 rotary inertia, drilling nullspace | Formulation, NR |
| `007`, `008` | `S03`, `P01`, `R03`: constraint congruence·유한 spectrum 보존; 결정적 조립은 프로젝트 계약 | Formulation, Planning |
| `009`, `010`, `011`, `012` | `S04`~`S08`, `R04`: 실제 FEAST·count·capacity·정수/storage·failure·반복/영 모드 완전성 | Formulation, NR, Planning |
| `013`, `014`, `018` | `S01`, `S03`, `S08`, `R06`: 같은 lumped M의 residual/Gram·불변식·독립 oracle | Formulation, NR, Physics |
| `017`, `019` | `S10`, `S11`, `P01`: quantity/source identity 및 candidate 보존. 영속 schema는 연구에서 정의하지 않음 | I/O |
| `020`, `021`, `022` | `S10`, `S11`, `P02`, `R05`: Value-only, mode/frame, multiplicity; 정책 변경 없음 | NR, I/O |
| `023`, `024`, `025` | `P01`, `P02`: TDD·MSVC·정적 회귀·closure는 연구 외 실행 evidence; 설치 header만 조사 | Planning, Implementation, Physics, Release |
## Handoff와 제한
중요한 사용자 미결정이나 authoritative conflict는 발견하지 않았다. 승인된
**consistent → lumped → FEAST**는 고정이며 질량 방식 재선택이나 tolerance 변경을 제안하지 않는다.
다음 항목은 연구 누락이 아니라 해당 stage에서 확정할 계약이다.
- Formulation: `R01`~`R03`의 질량 적분·좌표 block lumping·보존 범위·constraint/nullspace
축소와 복원, `R04`의 finite interval/count/termination policy를 수식으로 확정한다.
- NR: 적분 정확도·rank/작은 차원·mass SPD·scaled modal residual/Gram 및
`R06` portfolio의 기준, reference mode/frame/family와 blocking 판정을 확정한다.
- I/O: 원본 `.inp` 옵션의 최소 mapping·진단, density와 결과 schema·source identity를 확정한다.
- Planning/Implementation: FEAST count·zero/cluster·small-N 실제 runtime와 integer/storage
변환을 검증한다. Header의 존재는 runtime 통과 evidence가 아니다.
이번 stage에서는 연구 문서 두 개만 작성했다. 원본 reference hash는 requirements evidence와
일치한다. Read-only 조사, web 접근, 정적 검사 명령과 결과는 상세 문서 끝에 있다.
C++ build/test, Harness, 외부 solver와 FESA reference 수치 비교는 stage 범위 밖이므로
미실행이며 통과로 보고하지 않는다.