From a7c13ff3786620e943c855a9a99b767f7088fcde Mon Sep 17 00:00:00 2001 From: "KOKO\\Mimi" Date: Sun, 6 Sep 2026 02:08:19 +0900 Subject: [PATCH] docs: record MITC4 mass and FEAST research evidence --- docs/mitc4-shell-feast-eigen/ADR.md | 8 + .../FEATURED_AGENTS.md | 2 + docs/mitc4-shell-feast-eigen/PRD.md | 4 +- docs/mitc4-shell-feast-eigen/coordination.md | 21 +- .../research-evidence.md | 301 ++++++++++++++++++ docs/mitc4-shell-feast-eigen/research.md | 83 +++++ 6 files changed, 415 insertions(+), 4 deletions(-) create mode 100644 docs/mitc4-shell-feast-eigen/research-evidence.md create mode 100644 docs/mitc4-shell-feast-eigen/research.md diff --git a/docs/mitc4-shell-feast-eigen/ADR.md b/docs/mitc4-shell-feast-eigen/ADR.md index d2eca44..bfa2f24 100644 --- a/docs/mitc4-shell-feast-eigen/ADR.md +++ b/docs/mitc4-shell-feast-eigen/ADR.md @@ -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·누락 검증을 충족하기 위한 내부 처리이다. 새 입력 설정 기능을 추가하지 않는다. diff --git a/docs/mitc4-shell-feast-eigen/FEATURED_AGENTS.md b/docs/mitc4-shell-feast-eigen/FEATURED_AGENTS.md index ce4c4ec..14f1d5d 100644 --- a/docs/mitc4-shell-feast-eigen/FEATURED_AGENTS.md +++ b/docs/mitc4-shell-feast-eigen/FEATURED_AGENTS.md @@ -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 보고서는 목록에 승인 산출물로 등록하지 않는다. diff --git a/docs/mitc4-shell-feast-eigen/PRD.md b/docs/mitc4-shell-feast-eigen/PRD.md index 1c1669d..3202354 100644 --- a/docs/mitc4-shell-feast-eigen/PRD.md +++ b/docs/mitc4-shell-feast-eigen/PRD.md @@ -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)에 있으며 최종 수식·수치 기준의 승인을 대신하지 않는다. diff --git a/docs/mitc4-shell-feast-eigen/coordination.md b/docs/mitc4-shell-feast-eigen/coordination.md index 076f965..542564b 100644 --- a/docs/mitc4-shell-feast-eigen/coordination.md +++ b/docs/mitc4-shell-feast-eigen/coordination.md @@ -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 이력 diff --git a/docs/mitc4-shell-feast-eigen/research-evidence.md b/docs/mitc4-shell-feast-eigen/research-evidence.md new file mode 100644 index 0000000..24f3c16 --- /dev/null +++ b/docs/mitc4-shell-feast-eigen/research-evidence.md @@ -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=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