docs: baseline MITC4 lumped-mass FEAST requirements

This commit is contained in:
KOKO\Mimi
2026-09-06 01:49:27 +09:00
parent fab168b53b
commit 29d88b4e83
6 changed files with 517 additions and 0 deletions
+46
View File
@@ -0,0 +1,46 @@
# MITC4 Shell Mass Matrix와 FEAST 고유치해석 결정 기록
- Feature ID: `mitc4-shell-feast-eigen`
- Owner: `coordinator-agent`
- Input contract revision: `r1`
기준: [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md), [프로젝트 ADR](../ADR.md),
[SOLVER_AGENT_DESIGN](../SOLVER_AGENT_DESIGN.md).
문서 목록은 [FEATURED_AGENTS.md](FEATURED_AGENTS.md), 상태 원본은 [coordination.md](coordination.md)에 있다.
## MFE-ADR-001 — 사용자 지정 backend와 reference 범위
- 상태: 사용자 요청으로 확정된 intake 범위.
- 결정 owner: user; 기록 owner: coordinator-agent.
- 결정: MITC4 질량행렬 및 고유치해석을 구현하고 고유치 계산에는 MKL FEAST를 사용한다. 지정된 `reference/shellNL-eigen-meshfine` reference에서 외부 비교는 고유치만 수행한다.
- 근거: 2026-09-06 사용자 요청; [Feature PRD 사용자 요구](PRD.md#사용자-요구).
- 영향: backend 대체, 외부 mode-shape acceptance 추가 또는 reference 변경으로 요구를 우회하지 않는다.
## MFE-ADR-002 — MITC4 질량 이산화
- 상태: 사용자 후속 요구로 확정됨; 상세 lumping 수식은 Research/Formulation 소유.
- 결정 owner: user; 선택지 검토 owner: requirement-agent; 상세 수식 owner: formulation-agent.
- 결정: `consistent mass`를 계산하고 이를 이용하여 `lumped mass`도 계산한다. 앞서 제안한 둘 중 하나의 선택이 아니라 두 계산의 연결이 사용자 요구이다.
- 근거: 2026-09-06 사용자 후속 답변 “mass matrix는 consistent mass를 계산하고 이를 이용해서 lumped mass를 계산합니다.”; [원래 질문 evidence](requirements-evidence.md#중요한-결정).
- 영향: Requirement owner는 r1에서 두 계산과 관계를 baseline에 반영한다. 실제 FEAST 질량은 후속 명시 답변으로 lumped로 확정되었으며 MFE-ADR-004를 따른다.
- 경계: 기존 비물리 drilling DOF에 인공 관성을 추가하지 않는 방향을 권고한다. FEAST generalized problem의 mass SPD 조건과 질량 없는 drilling 처리는 Research와 Formulation이 물리 spectrum 보존 근거를 제시해야 한다. 축소 수식은 이 관리문서에서 정하지 않는다.
해석 기준 상태, backend 입력 관례 및 additive 결과량은 Requirement owner의 reference와 기존 계약 evidence로 정리한다.
새로 밝혀지는 비호환 영속 계약 또는 다른 critical 선택이 있으면 별도 근거와 함께 기록한다.
## MFE-ADR-003 — Local 검증 경로와 점진적 커밋
- 상태: 사용자 요청으로 승인됨.
- 결정 owner: user; 기록 owner: coordinator-agent.
- 결정: `FESA_GTEST_SOURCE_DIR`는 `C:\git\googletest`를 사용한다. 사용자 수정 `AGENTS.md`를 커밋하고 이후 작업도 Git에 점진적으로 커밋한다.
- 근거: 2026-09-06 사용자 후속 답변; Root가 해당 GoogleTest `CMakeLists.txt` 존재를 확인했다.
- 영향: Root는 사용자 수정 `AGENTS.md`와 완료된 upstream 문서의 정확한 경로 checkpoint를 커밋한다. 구현 단계 branch·step 선택·source/phase 커밋은 기존 Harness Executor 소유를 유지한다. Remote 작업 승인은 포함하지 않는다.
## MFE-ADR-004 — FEAST에 사용하는 질량행렬
- 상태: 사용자 명시 답변으로 승인됨.
- 결정 owner: user; 대안·영향 owner: requirement-agent.
- 결정: `consistent mass -> lumped mass -> 고유치 해석` 순서로 수행하고 FEAST/reference baseline의 `M`은 derived lumped mass를 사용한다. Consistent는 lumping 원본과 내부 질량 검증 대상으로 유지한다.
- 이유와 영향: 사용자가 최종 계산 흐름과 해석 사용 질량을 직접 명시했다. 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로 구체화한다.
@@ -0,0 +1,39 @@
# MITC4 Shell Mass Matrix와 FEAST 고유치해석
- Feature ID: `mitc4-shell-feast-eigen`
- Owner: `coordinator-agent`
- Input contract revision: `r1` (requirements baseline)
- 목적: MITC4 shell의 질량행렬과 MKL FEAST 고유치해석을 입력부터 HDF5 결과와 독립 검증까지 연결한다.
- 현재 workflow 상태 원본: [coordination.md](coordination.md)
## 기준과 지역 지침
[프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md), [프로젝트 ADR](../ADR.md),
[ARCHITECTURE](../ARCHITECTURE.md), [SOLVER_AGENT_DESIGN](../SOLVER_AGENT_DESIGN.md),
[FEATURE_DOCUMENTATION](../FEATURE_DOCUMENTATION.md), [TOLERANCE](../TOLERANCE.md)를 읽기 전용으로 적용한다.
사용자는 requirements부터 release-readiness까지 9개 stage의 문서·계획·구현·local 검증을 요청했다.
중요한 physics, scope, acceptance, 비호환 public contract 결정만 사용자에게 묶어서 요청한다.
일반 문서나 stage handoff의 반복 승인은 요구하지 않는다.
Reference는 `reference/shellNL-eigen-meshfine`의 기존 경로와 내용을 그대로 사용한다.
외부 reference 비교량은 고유치만이며 mode shape를 외부 acceptance로 추가하지 않는다.
내부 수학적·물리적 검증은 별도 evidence로 요구한다. 사용자 후속 요구는 consistent mass 계산 후 이를 이용한 lumped mass 계산이다.
Actual FEAST mass는 사용자 명시 승인에 따라 derived lumped mass이다. `consistent -> lumped -> FEAST` 순서와 lumped 기준 modal 검증을 유지하고 상세 lumping 수식은 owner가 evidence와 함께 정의한다.
Specialist는 하나의 assigned stage만 수행하고 peer dispatch, workflow 전이 또는 자기 최종 승인을 하지 않는다.
각 dispatch와 Harness step은 이 폴더와 [이 문서](FEATURED_AGENTS.md), [PRD](PRD.md), [ADR](ADR.md)를 필수 입력으로 명시한다.
기본 보고서는 간결하게 작성하고 긴 상세 계약은 같은 Feature 폴더에 상대 링크로 분리한다.
Reference artifact와 공통 정책은 수정하지 않는다. 외부 solver 실행 및 push/tag/publish/deploy/package는 범위 밖이다.
## 문서 목록
| 경로 | Owner | Revision | 검토 상태 |
| --- | --- | --- | --- |
| [FEATURED_AGENTS.md](FEATURED_AGENTS.md) | coordinator-agent | r1 | 후속 요구 반영 |
| [PRD.md](PRD.md) | coordinator-agent | r1 | 사용자 요구 요약 |
| [ADR.md](ADR.md) | coordinator-agent | r1 | 후속 결정 기록 |
| [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 완료 |
아직 작성되지 않은 specialist 보고서는 목록에 승인 산출물로 등록하지 않는다.
+42
View File
@@ -0,0 +1,42 @@
# MITC4 Shell Mass Matrix와 FEAST 고유치해석 PRD
- Feature ID: `mitc4-shell-feast-eigen`
- Owner: `coordinator-agent`
- Input contract revision: `r1`
- 검토 상태: requirements r1의 26개 must 요구사항 및 사용자 최종 결정 audit 완료; requirements gate pass.
기준: [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md), [프로젝트 ADR](../ADR.md).
지역 지침과 문서 목록은 [FEATURED_AGENTS.md](FEATURED_AGENTS.md), 상태 원본은 [coordination.md](coordination.md)를 따른다.
## 사용자 요구
1. MITC4 Shell 요소의 Mass Matrix를 구현한다.
2. 고유치해석 procedure를 구현하며 고유치 계산 backend는 Intel MKL FEAST로 한다.
3. `reference/shellNL-eigen-meshfine`에 있는 모델과 결과를 검증 기준으로 사용한다.
4. 외부 reference 검증은 고유치만 비교한다.
5. Coordinator 주도 requirements부터 release-readiness까지 9개 stage를 수행하며 중요한 사안만 인터뷰·검토를 요청한다.
6. Consistent mass를 먼저 계산하고 이를 이용하여 lumped mass를 계산하며, 고유치해석에는 lumped mass를 사용한다.
7. `FESA_GTEST_SOURCE_DIR=C:\git\googletest`를 사용하고 작업 중 완료된 변경을 Git에 커밋한다.
## 범위와 acceptance
입력 semantic model, 질량행렬과 equation 구성, FEAST adapter, procedure state, HDF5 결과 및 고유치 comparison의 end-to-end 기능이 대상이다.
구체적인 질량 정식화, 해석 기준 상태, 모드 요청 의미, 출력량 및 지원 subset은 Requirement Agent가 evidence를 조사하고 후속 owner와 critical decision 절차로 고정한다.
외부 mode-shape 비교, reference 생성·수정·복원과 외부 배포는 요청된 범위에 포함되지 않는다.
MSVC x64 Debug CMake/CTest, TDD, common tolerance, failure preservation과 독립 physics 검토를 적용한다.
Requirement ID별 원본 계약과 검증 matrix는 [requirements.md](requirements.md#requirement-verification-matrix)가 소유한다.
| Requirement IDs (`FEM-REQ-MITC4-EIGEN-`) | Acceptance 요약 및 원본 계약 |
| --- | --- |
| `001`~`004` | [원형상 procedure, 기존 shell mapping, material density와 section 연결](requirements.md#requirement-verification-matrix) |
| `005`~`008` | [질량 이산화 선택, 물리 관성, 조립, massless 좌표 admissibility](requirements.md#requirement-verification-matrix) |
| `009`~`014` | [낮은 모드, multiplicity, FEAST, 실패 처리, 내부 eigenpair 및 physics evidence](requirements.md#requirement-verification-matrix) |
| `015`~`019` | [입력 subset, 진단, HDF5, source/modal identity 및 candidate 보존](requirements.md#requirement-verification-matrix) |
| `020`~`022` | [고유치-only 외부 비교, identity 사전검사 및 common tolerance](requirements.md#requirement-verification-matrix) |
| `023`~`025` | [TDD·MSVC 검증, 기존 정적 회귀 및 동일 revision의 독립 closure](requirements.md#requirement-verification-matrix) |
| `026` | [Consistent에서 lumped 유도 및 질량·관성 불변식](requirements.md#requirement-verification-matrix) |
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가 정의한다.
@@ -0,0 +1,105 @@
# MITC4 Shell Mass Matrix와 FEAST 고유치해석 coordination
- Feature ID: `mitc4-shell-feast-eigen`
- Owner: `coordinator-agent`
- Contract revision: `r1` (사용자 최종 질량 요구를 반영한 requirements baseline)
- Stage: `research`
- Outcome: `pass` (requirements gate)
- Next owner: `research-agent`
- Attempt: `0`
- Completion: 미완료
- Failure classification / retry key: `null`
- Escalation class / blocker: `null`
기준: [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md), [프로젝트 ADR](../ADR.md),
[SOLVER_AGENT_DESIGN](../SOLVER_AGENT_DESIGN.md), [FEATURE_DOCUMENTATION](../FEATURE_DOCUMENTATION.md).
문서 목록은 [FEATURED_AGENTS.md](FEATURED_AGENTS.md), 범위는 [PRD.md](PRD.md), 결정은 [ADR.md](ADR.md)를 따른다.
## Gate evidence
| Gate | Evidence | Coordinator 판정 |
| --- | --- | --- |
| 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 |
공통 문서 및 reference 파일 목록의 read-only 조사 명령은 exit code `0`으로 완료했다.
확인된 reference 파일은 `shellNL-eigen-meshfine.inp`, `shellNL-eigen-meshfine eigenvalues.txt`이며 실제 의미와 readiness는 담당 owner가 검토한다.
Root의 시작 Git 조사에서 worktree clean을 확인했다. 구현·build/test·외부 reference comparison은 아직 실행하지 않았다.
관리문서 상대 링크 검사 결과는 `4`문서, 끊긴 local link `0`, exit code `0`이며 `git diff --check`도 exit code `0`이다.
## 현재 bounded dispatch
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 선택은 변경하지 않는다.
### Requirements 이력
2026-09-06 사용자 후속 답변을 수신했다. Consistent mass를 계산하고 이를 이용한 lumped mass도 계산한다는 요구로 [MFE-ADR-002](ADR.md#mfe-adr-002--mitc4-질량-이산화)를 갱신했다.
`r1` 입력을 Requirement owner에게 반환하여 양자택일 초안과 matrix를 수정하고 actual FEAST mass/lumping 의미의 중요 미결정 여부를 확인한다.
Requirement owner는 두 mass의 계산 관계만으로 FEAST의 실제 `M`이 유일하게 결정되지 않는다고 판단했다.
[MFE-ADR-004](ADR.md#mfe-adr-004--feast에-사용하는-질량행렬)에 derived lumped 사용 권고와 consistent 사용 대안, spectrum·residual 영향 및 질문을 기록하고 Root에 전달했다.
Detailed lumping 수식은 Research/Formulation이 담당하며 현재 질문은 FEAST 사용 질량 한 건이다.
같은 날 사용자 명시 답변으로 `consistent mass -> lumped mass -> 고유치 해석` 순서와 FEAST의 lumped mass 사용이 확정되었다.
`MFE-OQ-001`과 `MFE-OQ-002`는 해소되었으며 Requirement owner에게 r1 baseline 확정과 pass 검토 요청을 전달했다.
FEAST 및 내부 modal residual/normalization/orthogonality는 사용된 lumped `M`을 기준으로 한다. 같은 선택에 대한 재질문은 하지 않는다.
아래 r0 기록은 이력이며 현재 승인을 뜻하지 않는다. r0 requirements 결정 항목은 stale이고 후속 stage 산출물은 아직 없다.
Requirement Agent는 r0 입력에서 요구사항과 검증 matrix, reference 관찰 사실 및 중요한 미결정 사항을 작성한다.
질량 정식화나 reference 해석 의미를 승인으로 추정하지 않으며 질문이 필요하면 선택지·영향·권고를 하나로 묶어 Coordinator에게 반환한다.
일반 문서·계획·local 실행은 사용자 요청으로 승인되었으며 반복적인 stage 승인을 추가하지 않는다.
Requirement owner의 중간 조사에서 단일 `Step-2`의 `nlgeom=NO, perturbation`, `*Frequency` 요청 `10`모드,
선행 정적 step·하중·preload 없음이 확인되었다. 이 관찰은 무하중 원형상 procedure 의미를 뒷받침하며 최종 requirements 보고서에서 추적한다.
`Value`와 `Freq(cycles/time)`가 별도로 있는 원본 txt는 Mode `1..10`을 포함한다. 수치 비교는 아직 수행하지 않았다.
Requirement owner는 `consistent mass`와 `nodal lumped mass`가 유한 mesh의 고유치·운동에너지 의미를 달리하는 critical 선택임을 반환했다.
[MFE-ADR-002](ADR.md#mfe-adr-002--mitc4-질량-이산화)의 권고/대안/영향을 Root에 전달하여 사용자에게 하나의 질문으로 요청한다.
Requirements 기본·상세 보고서 2개의 owner `requirement-agent`, input revision `r0`를 확인했다.
Coordinator 정적 audit: 전체 Feature `6`문서, 끊긴 local link `0`, must matrix `25`행 및 고유 ID `25`, exit code `0`.
원본 reference 2개 SHA-256이 specialist 기록과 일치했다. Requirements 초안은 질량 선택 대기를 명시하며 연구 이후 gate의 빈 보고서는 없다.
기본 보고서 SHA-256: `8d5fbcb8ba2c2bd25d736418450b1b69e7aba7a84c8370d6e2a89e4e259daa66`.
상세 보고서 SHA-256: `85ee91dd745f74cc65ef8e660227465a8fa5ad302e639a51464d0ba31f449d22`.
결정에 의존하는 baseline pass 및 다음 stage는 보류한다. 응답 수신 뒤 Requirement owner가 승인 선택을 반영하고 Coordinator가 revision과 gate를 다시 감사한다.
## 후속 실행 준비 관찰
후속 사용자 지정 `FESA_GTEST_SOURCE_DIR=C:\git\googletest`에 대해 Root가 `CMakeLists.txt` 존재를 확인했다.
Root는 다른 dependency·Harness 환경을 별도로 조사하며 완료 문서 checkpoint와 사용자 수정 `AGENTS.md` 커밋을 담당한다.
실제 implementation 실행 전 환경 준비와 configure/build/test 성공이 필요하며 아래 과거 Stop failure를 소급 변경하지 않는다.
사용자 수정 `AGENTS.md`의 경로 예시 한 줄은 Root가 `fab168b` (`docs: document local GoogleTest source path`)로 커밋했다.
Root read-only 환경 조사에서 다음 설치 경로를 확인했다. 이 목록은 설치 존재 evidence이며 configure/build/test 성공은 아니다.
| 항목 | 확인 경로 |
| --- | --- |
| GoogleTest | `C:/git/googletest` |
| MKL CMake config | `C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl` |
| TBB CMake config | `C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb` |
| HDF5 CMake config | `C:/Program Files/HDF_Group/HDF5/2.1.1/cmake` |
| Ninja executable | `C:/Program Files/Microsoft Visual Studio/18/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja/ninja.exe` |
VS `18/Community` DevShell script/dll이 존재하며 Ninja는 현재 PATH에 없다. Planning/Executor는 각 실행 subprocess의 MSVC x64 Developer 환경과 dependency 환경을 명시해야 한다.
Root는 global environment, Hook state/code를 변경하지 않았다.
현재 `.harness/config.json`은 없고 preset과 `.harness/config.example.json`은 있다.
Planning은 자동 감지 결과와 승인 MSVC preset을 대조하여 실행명령 및 Hook backend를 명시해야 한다.
`scripts/execute.py`의 preflight는 selected phase 제어 파일 외의 dirty 경로를 거부한다.
따라서 구현 실행 전에 Feature 문서 baseline과 Executor의 path-scoped Git 처리 경계를 Planning에서 구체화한다.
이 관찰은 환경 실패 판정이나 별도 사용자 승인 요청이 아니다.
Root가 전달한 자동 Stop hook configure 실패는 별도의 실제 환경 evidence로 보존한다.
실행 명령은 `C:/Program Files/CMake/bin/cmake.exe -S C:/Users/baram/orca/workspaces/FESADev/Eigen -B C:/Users/baram/orca/workspaces/FESADev/Eigen/.harness/build -A x64`, exit code `1`이며
`cmake/FesaDependencies.cmake:9`에서 `FESA_GTEST_SOURCE_DIR` 미설정을 보고했다.
Root의 read-only 원인 조사에서 현재 process의 `FESA_GTEST_SOURCE_DIR`, `MKL_DIR`, `TBB_DIR`, `HDF5_DIR`가 모두 미설정이고,
자동 감지는 `Visual Studio 18` generator를 사용하며 local config가 없어 승인 Ninja/MSVC preset과 맞지 않음이 확인되었다.
수동 Hook·CMake·CTest 재실행, config 변경 또는 Hook state 조작은 하지 않았다.
현재 requirements gate의 critical 질량 선택과 별개로 Implementation Planning에서 dependency 경로·설정된 backend를 준비하고 검증해야 한다.
이 실패를 build/test 통과로 보고하거나 현 단계의 미실행 검증을 대체하는 증거로 사용하지 않는다.
## Retry 기록
Correction 및 implementation rerun 사용 이력 없음. Transport attempt와 별도로 관리한다.
@@ -0,0 +1,159 @@
# MITC4 eigen 요구사항의 관찰 evidence와 결정
- Feature ID: `mitc4-shell-feast-eigen`
- Owner: `requirement-agent`
- Input contract revision: `r1`
- 기본 보고서: [requirements.md](requirements.md)
- 관찰일: `2026-09-06`
## 원본 reference 관찰
| Artifact | 실제 경로 | SHA-256 |
| --- | --- | --- |
| Input | [shellNL-eigen-meshfine.inp](../../reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine.inp) | `913b1abc604e62bc5f995bf5523924e17ea03925102a7bd22d39226ba0ea7339` |
| Eigenvalues | [shellNL-eigen-meshfine eigenvalues.txt](../../reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine%20eigenvalues.txt) | `20d97ca3fd51f5b956f2c1ed7565557c68f74e61e41b913748515ef43a0f7f0b` |
| 관찰 항목 | 파일에서 읽은 사실 |
| --- | --- |
| 모델 | `Part-1`, identity instance `Part-1-1`; 729 nodes, 676 `S4` elements |
| 좌표 | x/y 각각 `[-5,5]`, 모든 z=`0`; 26×26 element mesh의 사각 평판 |
| Section | line 1421 `*Shell Section, elset=Set-1, material=Material-1`; data `0.5, 5`; offset/composite 없음 |
| Material | lines 1455~1459: `Material-1`, `*Density`=`2700.`, `*Elastic`=`2.1e+11, 0.3` |
| Constraint | lines 1464~1470: `Set-2`의 DOF 1~6, 값 생략으로 homogeneous constraint |
| Procedure | lines 1475~1477: 유일한 `*Step, name=Step-2, nlgeom=NO, perturbation`; `*Frequency, eigensolver=Lanczos, sim, acoustic coupling=on, normalization=mass`; `10, , , , ,` |
| 선행 이력 | 이전 Step/Static/Initial Conditions/load 없음; 이름 `shellNL`이나 `Step-2`로 preload를 추론하지 않음 |
| 부수 요청 | `*Restart, write, frequency=0`, field/Node PRESELECT, history/Energy ALL. 모델은 acoustic element/coupling constraint를 포함하지 않음 |
| TXT | 10개 row; 각 row에 `Frame: Mode <id>: Value = <lambda> Freq = <f> (cycles/time)` |
| Identity | mode IDs는 정확히 1~10, 유일하며 누락 없음; 모든 Value/Freq finite·positive |
| 반복값 | modes `(2,3)`, `(7,8)`, `(9,10)`의 표시 Value가 각각 같음; mode identity 중복과 구분 필요 |
관찰 Value 목록은 다음과 같다. 원본 표시 정밀도를 확장·보정하지 않는다.
| Mode | Value |
| --- | ---: |
| 1 | 2.19507E+05 |
| 2 | 8.85523E+05 |
| 3 | 8.85523E+05 |
| 4 | 1.85534E+06 |
| 5 | 2.74023E+06 |
| 6 | 2.77515E+06 |
| 7 | 4.14941E+06 |
| 8 | 4.14941E+06 |
| 9 | 6.73379E+06 |
| 10 | 6.73379E+06 |
관찰값으로 `sqrt(Value)/(2*pi)`와 표시 `Freq`를 계산상 대조한 최대 상대차는
`1.6946487122851045e-05`이다. 이것은 quantity 식별을 돕는 교차 확인이며 FESA comparison이나
새 허용오차 판정이 아니다. `Value`는 `omega²`, `Freq`는 cycles/time이라는 공개 정의와
일관된다. 단위계는 원문에 지정되지 않았고 수치만 보고 SI라고 단정하지 않는다.
TXT에는 step 이름이 별도로 없지만 입력은 정확히 한 개 frequency step이며 mode identity와
Value가 완전하다. 따라서 지정 input의 유일한 `Step-2`에 결합하는 deterministic projection은
가능하다. 최종 readiness와 frame/family mapping은 NR·I/O가 소유한다. CSV가 없다는 이유로
reference를 변환하거나 새 metadata/provenance를 요구할 근거는 없다. 사용자 지정 경로를
우선하는 feature-specific artifact 선택이며 공통 reference 문서나 다른 feature 계약은 바꾸지 않는다.
## 중요한 결정
### MFE-OQ-001 — 두 질량 계산 관계: 해결
사용자는 `2026-09-06` 후속 답변에서 “mass matrix는 consistent mass를 계산하고 이를
이용해서 lumped mass를 계산합니다.”라고 명시했다. Consistent 원본 계산과 derived lumped
계산이 모두 필수이며 이전 둘 중 하나의 계산만 선택하는 초안은 대체되었다.
관련 결정은 [MFE-ADR-002](ADR.md#mfe-adr-002--mitc4-질량-이산화), 요구사항은
`FEM-REQ-MITC4-EIGEN-005`, `026`이다. Lumping 알고리즘은 사용자 지정이 없으므로
Research/Formulation이 질량 보존·물리 회전 관성·좌표 변환·drilling 경계를 명시하고 NR가 검토한다.
모든 속도장의 kinetic energy나 두 spectrum의 exact equality를 보존 조건으로 추가하지 않는다.
### MFE-OQ-002 — FEAST와 reference baseline의 질량: 해결
- 상태: **사용자 명시 결정으로 해결**.
- 관련 요구사항: `FEM-REQ-MITC4-EIGEN-008`, `011`, `013`, `017`, `020`.
- Owner: user가 사용 질량을 결정; Research/Formulation이 근거와 수식,
NR가 검증; Requirement Agent가 본 r1 baseline에 반영.
사용자는 추가 답변에서 “고유치 해석에서는 lumped mass를 사용합니다. 따라서 고유치 해석을
할 때 consistent mass -> lumped mass -> 고유치 해석 입니다”라고 명시했다.
따라서 FEAST와 authoritative reference baseline은 derived lumped mass를 사용하며
동일 lumped mass로 residual·mass normalization·orthogonality를 검증한다.
Consistent는 유도 원본과 내부 mass/energy 검증에 유지한다. Consistent eigen 해석,
두 variant의 외부 비교 및 runtime 질량 선택 API는 현재 요구가 아니다.
이 결정은 수치 tolerance 통과나 정확도 우위의 evidence를 대신하지 않는다.
Drilling은 기존 승인 shell 계약에서 비물리 안정화 좌표이다. 인공 drilling inertia를
추가하거나 두 물리 회전 관성을 생략하는 대안을 새 사용자 옵션으로 발명하지 않는다.
Massless drilling을 그대로 generalized FEAST에 넣을 수 있다는 가정도 하지 않는다.
FEAST의 SPD 조건과 shell 질량 nullspace의 양립은 Research/Formulation이 물리 spectrum과
constraints를 보존하는 방식으로 해결해야 한다. 이 문서는 elimination/projection/condensation
식을 승인하지 않으며, 새로운 물리 근사가 필수라는 evidence가 생기면 해당 owner가 반환한다.
## 질문 없이 정리한 사항
- 무하중 원형상·비감쇠 해석은 실제 단일 `*FREQUENCY`와 선행 이력 부재로 결정한다.
- `.inp`의 Lanczos는 source solver 옵션이다. 사용자가 FESA backend를 FEAST로 명시했으므로
source option을 유지해 읽되 실제 backend를 명시하는 mapping이 가능하다. Abaqus Lanczos
동작과의 동등성을 주장하지 않는다. Exact allowlist와 진단은 I/O 소유이다.
- `SIM`은 source architecture 옵션이고 acoustic-free 모델의 `ACOUSTIC COUPLING=ON`은
실제 acoustic 모델 지원 요청이 아니다. 무해한 조합만 근거와 warning 정책으로 허용한다.
- `NORMALIZATION=MASS`의 내부 modal 의미를 유지한다. 외부 mode shape 비교는 추가하지 않는다.
- TXT의 명시적인 `Value`를 직접 읽고 원본을 보존한다. Matching/family는 tolerance 전에
고정하며 repeated eigenvalue와 duplicate mode ID를 구분한다.
- 기존 HDF5 의미를 보존하는 eigen quantity 추가는 신규 기능에 필요한 I/O 정의이다.
비호환 변경이 없는 한 schema 검토를 별도 사용자 승인 질문으로 만들지 않는다.
## 공개 근거
다음은 `2026-09-06`에 확인한 1차 문서이다. 공식 syntax와 backend admissibility 확인에만
사용하며 Abaqus 내부 정식화의 추정 근거로 쓰지 않는다.
1. [Abaqus 2025 — Natural Frequency Extraction](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEANLRefMap/simaanl-c-freqextraction.htm):
`Eigenvalue Extraction`, `Initial Conditions`, `Loads`, `Output` 절. 무감쇠 eigenproblem의
`omega²`, 원형상/선행 기하비선형 상태의 구분, 각 모드 출력 의미 확인.
2. [Abaqus 2025 — *FREQUENCY](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEKEYRefMap/simakey-r-frequency.htm):
`Optional parameters`와 Lanczos data line 절. 요청수 10, blank bounds, source algorithm,
SIM/acoustic 옵션의 의미와 mass normalization 확인.
3. [Intel oneMKL 2026.0 — Extended Eigensolver Functionality](https://www.intel.com/content/www/us/en/docs/onemkl/developer-reference-c/2026-0/extended-eigensolver-functionality.html):
real symmetric generalized 문제는 `B` SPD를 요구한다. 이 조건 때문에 massless drilling을
아무 처리 없이 FEAST에 전달해서는 안 된다.
4. [Intel oneMKL 2026.0 — ?feast_scsrgv](https://www.intel.com/content/www/us/en/docs/onemkl/developer-reference-c/2026-0/feast-scsrgv-feast-hcsrgv.html):
지정 구간의 eigenpairs, subspace capacity, 결과 count와 status 의미 확인. 구간 선택·확장과
설치된 MKL 버전 검증은 후속 owner가 정의한다.
## 실행 evidence와 미실행
r0 원본 관찰과 hash는 그대로 유지했다. 아래는 당시 실행한 read-only 조사이며 이번 r1에서
reference 재조사나 변환을 수행하지 않았다. 해당 shell 명령은 exit code `0`이었다.
```powershell
Get-Content -Raw '.codex/skills/fem-requirements-baseline/SKILL.md'
Get-Content -Raw 'docs/SOLVER_AGENT_DESIGN.md'
Get-Content -Raw 'docs/FEATURE_DOCUMENTATION.md'
rg -n -i '^\*(?!\*)|density|frequency|static|step|boundary|shell section' --pcre2 'reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine.inp'
Get-Content -Tail 75 'reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine.inp'
Get-Content -Raw 'reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine eigenvalues.txt'
rg -n 'FEAST|feast|MassMatrix|Density|density|Frequency|Eigenvalue|eigenvalue' include src -g '*.[ch]*'
git status --short
```
추가 read-only `python -B -` here-script는 `pathlib`로 두 파일을 읽고 keyword별 node/element
count, 좌표 범위, regex `Mode\s+(\d+):\s+Value\s*=\s*(\S+)\s+Freq\s*=\s*(\S+)`로
mode/Value/Freq를 추출하여 finite·identity·주파수 교차 확인과 SHA-256을 계산했다.
Exit code `0`, 729 nodes / 676 elements / 10 modes였고 위 표·hash와 일치했다.
파일을 생성하거나 reference 내용을 쓰지 않았다. Source 검색에서 물리 mass/density/eigen
구현을 발견하지 못했고 nonlinear local energy 변수 `density`만 검색되었다. 이는 scoped 검색
관찰이며 제품 미지원의 최종 코드 감사는 아니다.
공통/feature/기존 MITC4·nonlinear 승인 계약을 read-only로 조사했다. 기존 보고서의 완료
표시는 이번 feature 실행 증거로 재사용하지 않는다. C++ build/test, Harness, 외부 solver와
FESA reference comparison은 요구사항 단계의 범위가 아니므로 미실행이다.
r1에서는 관리문서·owned reports·공통 agent 계약을 `Get-Content`로 읽고 사용자 수정
`AGENTS.md`의 GoogleTest 경로를 `rg -n 'GTEST|git|GoogleTest' 'AGENTS.md'`로 확인했다.
명령은 exit code `0`이었다. 실제 GoogleTest dependency 설정/build 확인은 Root·Planning
소유이며 이 문서 갱신에서 새로 실행하지 않았다. 두 사용자 결정으로 `MFE-OQ-001`과
`MFE-OQ-002`를 해결했으며 기존 25개 requirement ID를 보존하고 derived lumped 요구
`026`을 추가했다. 중요한 미결정은 없고 상세 lumping 수식·수치 기준은 후속 owner 소유이다.
변경한 경로는 기본 보고서와 이 상세 보고서 두 개뿐이며 관리문서, source, tests, phase,
공통 정책과 reference artifact는 편집하지 않았다. 정적 링크·필수 metadata·ID/matrix 검사를
완료한 명령과 결과는 Requirement Agent 반환 evidence로 함께 보고한다.
@@ -0,0 +1,126 @@
# MITC4 Shell Mass Matrix와 FEAST 고유치해석 요구사항
- Feature ID: `mitc4-shell-feast-eigen`
- Owner: `requirement-agent`
- Input contract revision: `r1`
- 검토 상태: consistent→lumped→FEAST 사용자 확정 요구 반영; requirements baseline gate 검토 요청.
- 요청 outcome: `pass`; workflow 전이와 최종 gate 판정은 Coordinator 소유.
지역 입력은 [FEATURED_AGENTS](FEATURED_AGENTS.md), [PRD](PRD.md), [ADR](ADR.md)이다.
[프로젝트 지침](../../AGENTS.md), [제품 요구사항](../PRD.md),
[ARCHITECTURE](../ARCHITECTURE.md), [공통 ADR](../ADR.md),
[TOLERANCE](../TOLERANCE.md), [agent 계약](../SOLVER_AGENT_DESIGN.md),
[문서 소유권](../FEATURE_DOCUMENTATION.md)을 적용한다.
Reference 관찰, 원문 경로·hash, 중요한 결정의 대안과 명령 evidence는
[requirements-evidence.md](requirements-evidence.md)에 둔다.
## 핵심 결과와 범위
지정된 reference는 이름에 `shellNL`이 있지만 선행 정적 해석 없이 원형상에서 수행하는
단일 무감쇠 선형 고유진동 해석이다. `Step-2`에서 10개 모드를 요청하고 모든 외곽 절점의
DOF 1~6을 고정한다. 기존 TXT에는 고유치 `Value`와 주파수 `Freq`가 분리되어 있으며
Mode 1~10을 일대일 식별할 수 있다. 파일 형식 때문에 CSV를 새로 만들지 않는다.
사용자 후속 요구로 consistent mass를 먼저 계산하고 이를 이용하여 lumped mass를 계산한 뒤
FEAST 고유치해석에 lumped mass를 사용한다. 이 계산 흐름과 reference baseline이 확정되었다.
나머지는 명시된 사용자 요구, 실제 reference와 기존 승인된 shell 계약에서 도출한다.
- 원형상·무응력 상태의 단일 `*FREQUENCY` procedure, homogeneous essential constraints,
실수 무감쇠 고유치와 이에 대응하는 내부 modal vectors.
- 기존 MITC4의 막·굽힘·횡전단, 단일층 균질 등방성 탄성, centered constant-thickness
section, geometry-derived director, source `S4`/`S4R`와 전역 6 DOF 의미를 재사용한다.
- 활성 재료마다 양의 유한한 일정 체적 밀도를 해석 모델에 연결한다. 질량은 병진과
director 접평면의 두 물리 회전 관성을 나타내며 drilling을 물리 관성으로 승격하지 않는다.
- Consistent mass와 그 행렬에서 유도한 lumped mass를 모두 계산·검증한다. Lumping 방식과
좌표/회전 block 처리는 Research/Formulation이 정의하며 두 spectrum의 동일성을 요구하지 않는다.
- FEAST, modal residual·mass normalization·orthogonality와 외부 고유치 비교는 동일한
derived lumped mass를 기준으로 한다. Consistent는 계산 원본과 내부 질량 검증에 유지한다.
- Mode count를 지정하는 최소 입력 subset과 MKL FEAST 실행을 end-to-end로 연결한다.
Reference의 blank frequency bounds·shift·Lanczos control fields를 그대로 처리한다.
- 공식 HDF5에 식별 가능한 고유치 결과를 기록하고 내부 modal correctness 증거를 남긴다.
외부 acceptance는 지정 reference의 고유치만 사용한다.
제외: prestress/선행 nonlinear state 전달, 다중 step, initial stress, geometric stiffness의
새 의미, 재료비선형, 감쇠·복소 고유치, 좌굴, 강제진동·시간적분, acoustic coupling,
혼합 beam/solid/shell 모델, concentrated/nonstructural mass, composite/offset/variable
thickness, 기존 미지원 shell geometry, residual modes 및 modal stress/reaction recovery.
사용자가 지정하지 않은 Lanczos/AMS 대체 backend, reference 생성·수정·복원과 외부 배포도 제외한다.
별도 frequency interval/shift 사용자 기능은 현재 최소 subset에 포함하지 않는다.
## 의미·단위·소유권
| 항목 | 요구되는 의미와 경계 |
| --- | --- |
| 질량 입력 | `rho`: mass/length³; `t`: length. 단위계는 사용자 일관 단위이며 SI 추론·자동 변환 없음 |
| 질량/관성 | 병진 질량 차원 mass, 회전 관성 mass·length²; 혼합 DOF block의 차원은 Formulation이 명시 |
| 고유치 | `lambda = omega²`, 차원 1/time²; 좌표계에 불변인 scalar, cycle frequency와 별개 |
| 주파수 | `f = sqrt(lambda)/(2*pi)`, cycles/time; 양의 고유치에서 의미 확인용 파생량이며 외부 비교 대체량 아님 |
| 모드 | Scalar mode identity와 global DOF/modal vector identity 분리; 진폭은 응답변위가 아닌 normalization convention |
| 모델과 equation | Domain은 density·section·step 정의, AnalysisModel은 non-owning view, DofManager는 DOF·equation·pattern 소유 |
| procedure/backend | Eigen procedure는 자체 state·solve·검증·commit 소유; FEAST vendor 타입과 자원은 private adapter 소유 |
| 결과 | Results는 물리량·identity, I/O Definition은 additive HDF5 schema·modal evidence projection과 진단 소유 |
요구사항은 stiffness/질량 조립식, massless drilling 처리식, FEAST 탐색 구간·subspace 및
solver parameter를 선결정하지 않는다. 특히 기존 선형 정적 `Run()`에 eigen 분기를 누적하거나
정적 reaction 의미를 modal 결과로 재사용해서는 안 된다.
## Requirement Verification Matrix
모든 행은 `must`이고 acceptance는 해당 행의 요구와 검증 조건을 모두 만족하는 것이다.
출처 `U`는 [Feature PRD](PRD.md)의 사용자 요구, `R`은 [관찰 evidence](requirements-evidence.md),
`P`는 위 공통 기준, `L`은 [기존 MITC4 요구사항](../linear-static-mitc4-shell/requirements.md)과
[정식화](../linear-static-mitc4-shell/formulation.md), `N`은
[기존 nonlinear I/O](../nonlinear-static-newton-raphson/io.md)의 공통 경로·failure 계약을 뜻한다.
`NR`은 Numerical Review를 뜻하며 numerical threshold/metric/family 결정은 NR 소유이다.
아래에서 “승인 기준”은 구현 전에 해당 owner가 명시해 gate를 통과해야 하며 실행 결과로 조정하지 않는다.
| Requirement ID | Shall statement | 측정 가능한 acceptance / verification method | 출처·후속 owner |
| --- | --- | --- | --- |
| FEM-REQ-MITC4-EIGEN-001 | 솔버는 선행 상태 없는 원형상 무응력 모델의 단일 무감쇠 선형 고유진동 procedure를 실행해야 한다. | 지정 reference가 한 frequency step으로 선택되고 static/nonlinear preload 경로를 호출하지 않음; procedure 통합 테스트 | U, R, P; Formulation, I/O |
| FEM-REQ-MITC4-EIGEN-002 | `S4`와 `S4R`는 기존의 동일한 FESA MITC4 물리 kernel·director·전역 6 DOF 의미를 유지해야 한다. | 동일 모델의 source type만 변경한 경우 같은 질량·고유치 경로와 별도 source metadata; mapping/kernel 테스트 | L; Formulation, I/O |
| FEM-REQ-MITC4-EIGEN-003 | 모든 활성 shell의 밀도는 해당 section이 참조하는 material에서 하나의 finite `rho > 0`로 결정되어야 한다. | 여러 material의 올바른 연결 및 missing/duplicate/unresolved/nonpositive/nonfinite/dependent density 거부; semantic 양성·음성 테스트 | U, R, P; I/O |
| FEM-REQ-MITC4-EIGEN-004 | 질량 계산은 기존 shell의 유효한 geometry·director와 양의 centered constant thickness를 사용해야 한다. | 기존 geometry/material/section 검증 재사용과 서로 다른 두께·밀도 연결 테스트; 부적합 요소를 질량 zero로 우회하지 않음 | L, P; Formulation, I/O |
| FEM-REQ-MITC4-EIGEN-005 | 솔버는 MITC4 보간에 일관된 consistent mass를 계산하고 derived lumped mass 계산의 원본으로 제공해야 한다. | 독립 consistent mass/kinetic-energy oracle와 일치하고 같은 geometry/material/section의 consistent 결과가 Requirement 026의 입력임을 확인; 원본을 lumping으로 덮어쓰지 않음 | U r1, P; Research, Formulation, NR |
| FEM-REQ-MITC4-EIGEN-006 | 질량은 3개 병진 및 2개 director-tangent 회전의 물리 관성을 포함하고 numerical drilling에 물리 관성을 부여하지 않아야 한다. | Rigid translation의 총질량, 회전 관성·kinetic energy, director-parallel null action을 독립 검사; NR의 scale-aware 기준 | L, P; Research, Formulation, NR |
| FEM-REQ-MITC4-EIGEN-007 | 질량·강성은 동일한 physical DOF와 constraint 의미로 결정적으로 조립되어야 한다. | Scatter/source order, 대칭 구조, sequential/병렬 reduction 및 constrained motion 검증; 행렬 및 재실행 테스트 | P, L; Formulation, Planning |
| FEM-REQ-MITC4-EIGEN-008 | Massless numerical 좌표 처리는 FEAST의 admissible matrix 조건을 만족시키면서 선택된 질량의 유한 물리 spectrum을 보존해야 한다. | Formulation의 좌표 처리 전후 spectrum·경계조건 보존과 admissibility 검사 통과; consistent→lumped의 spectrum 동일성을 뜻하지 않음. 임의 mass floor, diagonal epsilon, eigenvalue clamp 금지 | P, L, R; Research, Formulation, NR |
| FEM-REQ-MITC4-EIGEN-009 | Mode-count 요청은 물리 spectrum의 낮은 순서에서 지정 개수의 고유쌍을 계산해야 한다. | Reference는 10개; 작은 독립 spectrum에서 첫 N개·multiplicity·zero rigid-mode case·요청수 초과/빈 물리계의 명시적 실패 확인. 부적합 음수 spectrum을 양수화하지 않음 | U, R; Formulation, NR, I/O |
| FEM-REQ-MITC4-EIGEN-010 | 고유치 결과는 오름차순의 고유한 mode identity를 가지고 반복 고유값의 multiplicity를 보존해야 한다. | Repeated/clustered spectrum에서 row 수·순위·identity 및 재현성 확인; 같은 eigenvalue 값은 duplicate identity 오류가 아님 | R, P; NR, I/O |
| FEM-REQ-MITC4-EIGEN-011 | 실제 고유치 계산은 consistent mass에서 유도한 lumped mass를 MKL FEAST에 사용해야 한다. | Consistent→lumped→FEAST 연결과 real adapter의 질량 입력·backend identity 확인; source Lanczos가 backend를 변경하지 않고 consistent나 다른 질량으로 reference에 맞추지 않음 | U r1; Research, Formulation, Planning |
| FEM-REQ-MITC4-EIGEN-012 | FEAST 실패·미수렴·불충분 모드·비유한 eigenpair를 성공 결과로 반영해서는 안 된다. | 각 failure injection에서 안정된 diagnostic과 불완전 result 미공개 확인; bounded termination 테스트 | P; Formulation, I/O, Planning |
| FEM-REQ-MITC4-EIGEN-013 | 성공 eigenpair는 FEAST에서 사용한 동일 lumped mass로 modal residual·mass normalization·orthogonality 검증을 통과해야 한다. | 내부 modal vectors로 독립 residual/Gram 검사를 수행하고 잘못된 mass variant·eigenvector·mode pairing을 검출; NR가 threshold·scale 고정 | U r1, P, R; Formulation, NR, Physics |
| FEM-REQ-MITC4-EIGEN-014 | 두 질량 계산과 선택된 질량의 eigen 해석은 symmetry, kinetic-energy, coordinate invariance, rigid-body 및 density scaling evidence를 제공해야 한다. | 각 질량의 독립 oracle·invariant suite와 작은 analytical/manufactured case 통과; 선택된 spectrum의 density scaling 검사. Lumping이 모든 속도장의 consistent energy를 그대로 보존한다고 가정하지 않음; NR가 기준 확정 | U r1, P, L; Research, Formulation, NR, Physics |
| FEM-REQ-MITC4-EIGEN-015 | 지정 `.inp`의 `*FREQUENCY` 요청과 부수 옵션은 보존된 입력에서 명시적으로 mapping되어야 한다. | 원본 파일 변경 없이 실행; requested count와 mass normalization 유지; Lanczos/SIM 옵션의 FESA 처리 및 acoustic-free 모델에서 `ACOUSTIC COUPLING=ON`의 무해성/진단을 I/O에 명시 | U, R, P; Research, I/O |
| FEM-REQ-MITC4-EIGEN-016 | 승인 subset 밖의 모델·절차·옵션은 의미를 삭제하거나 근사해 실행하지 않고 진단해야 한다. | Exclusion inventory의 양성/음성 테스트; acoustic 요소, preload, damping, 비영 prescribed base state, 미지원 frequency fields 등의 silent no-op 없음 | P, R; I/O, Planning |
| FEM-REQ-MITC4-EIGEN-017 | 공식 HDF5는 source step·mode identity와 고유치의 물리량·단위·실제 backend·사용 질량 variant를 식별할 수 있어야 한다. | 입력 sibling `<stem>_results.h5`에서 10개 reference 대응 고유치와 선택 질량을 복원; additive schema/self-check 테스트. Mode-vector 영속 projection 필요성·layout은 I/O 소유 | U, P, N; I/O |
| FEM-REQ-MITC4-EIGEN-018 | 내부 modal vectors는 global physical DOF·source identity와 연결되고 외부 mode-shape acceptance로 사용되지 않아야 한다. | Constraint 복원·source renumbering·mass normalization과 내부 verification evidence 재현; 비교기가 vector reference 파일을 요구하지 않음 | U, P; Formulation, NR, I/O |
| FEM-REQ-MITC4-EIGEN-019 | State와 final HDF5는 검증된 candidate만 반영하고 제어된 실패에서 기존 유효 결과를 보존해야 한다. | Solve·validation·writer/finalization 실패 후 이전 state/final hash 보존; live log는 기존 `<stem>_log.txt` 독립 lifecycle 유지 | P, N; Formulation, I/O, Planning |
| FEM-REQ-MITC4-EIGEN-020 | 외부 검증은 지정 원본 TXT의 `Value` 고유치만 derived lumped mass로 계산한 FESA HDF5 고유치와 비교해야 한다. | 같은 지정 `.inp`, 기존 TXT 경로 그대로 사용; Mode 1~10 포함. 두 질량 중 결과가 가까운 쪽을 사후 선택하지 않음. `Freq`, 변위·회전·stress·reaction·mode shape를 추가 외부 gate로 사용하지 않음 | U r1, R; NR, I/O |
| FEM-REQ-MITC4-EIGEN-021 | 비교기는 required identity의 missing/extra/duplicate/nonfinite와 quantity/schema 오류를 tolerance 전에 거부해야 한다. | 행 재정렬은 같은 mapping, mode label 중복·누락·추가·비유한 `Value`는 실패; 같은 값의 다른 mode는 허용; comparator 음성 테스트 | P, R; NR, I/O, Planning |
| FEM-REQ-MITC4-EIGEN-022 | 외부 고유치 acceptance는 공통 `docs/TOLERANCE.md`의 scale·row·RMS·zero-scale 정책을 적용해야 한다. | NR가 mode/frame identity·family·blocking 분류를 고정하고 승인된 모든 고유치 비교 통과; frequency로 대체하거나 tolerance를 조정하지 않음 | U, P; NR, I/O |
| FEM-REQ-MITC4-EIGEN-023 | 새로운 동작은 관찰된 RED 이후 구현하고 MSVC x64 Debug CMake/CTest에서 검증해야 한다. | 대응 C++ tests, RED/GREEN/focused/full evidence, 새 warning 없음, 실제 FEAST runtime/reference evidence. 사용자 지정 `FESA_GTEST_SOURCE_DIR=C:\git\googletest`를 검증 환경에 사용 | U r1, P; Planning, Implementation |
| FEM-REQ-MITC4-EIGEN-024 | 기존 선형·비선형 정적 procedure의 입력·출력·수치 계약을 보존해야 한다. | 승인된 회귀 suite와 영향받은 reference 검증; 기존 model에 density가 없다고 정적 해석을 새로 거부하지 않음 | P, L, N; Planning, Implementation |
| FEM-REQ-MITC4-EIGEN-025 | 완료 판정은 동일 revision의 implementation·독립 physics·release evidence를 요구해야 한다. | Requirement 전 행에 evidence 연결, 필수 미실행/실패/stale 항목 0, 내부 readiness와 외부 release 권한 구분 | U, P; Coordinator, Physics, Release |
| FEM-REQ-MITC4-EIGEN-026 | 솔버는 계산된 consistent mass에서 lumped mass를 유도하고 승인된 질량·관성 보존 계약을 검증해야 한다. | 유도 관계·독립 lumping oracle·총 병진 질량 보존, 차원/대칭성/물리 kinetic-energy 비음성, 물리 회전 관성과 drilling nullspace 의미 검사. Lumping 수식·좌표 block 처리·정확한 관성 불변식과 threshold는 Formulation/NR가 고정 | U r1, P, L; Research, Formulation, NR |
## 결정과 handoff
`MFE-OQ-001`은 사용자 후속 결정으로 해결되었다. Consistent를 계산하고 이로부터 lumped를
계산하므로 두 계산은 모두 필수다. 기존 양자택일 요구는 대체되었다.
`MFE-OQ-002`도 사용자 명시 결정으로 해결되었다. **Consistent→lumped→FEAST** 흐름을
사용하며 external eigenvalue baseline과 내부 residual·normalization·orthogonality는
동일 lumped mass에 대응한다. [사용자 결정 근거](requirements-evidence.md#중요한-결정)를 따른다.
현재 requirements의 중요한 미결정은 없다.
Research/Formulation은 consistent→lumped 유도 및 각 관성 불변식, lumped 질량과 massless drilling, supported global
constraints의 양립, 실제 FEAST admissibility와 낮은 모드 추출의 완전성을 다룬다.
NR는 independent physics portfolio와 모든 수치 기준, TXT readiness, mode/frame/family mapping을
확정한다. 특히 각 mode가 별도 Abaqus frame인 사실을 공통 family 규칙과 함께 검토한다.
I/O는 필요한 최소 syntax, no-op/diagnostic, source/result identity와 additive output을 정의한다.
기존 영속 계약의 비호환 변경이나 새로운 물리 근사가 필요한 경우만 다시 critical로 반환한다.
사용자는 작업 중 Git 커밋을 승인했다. Root가 사용자 수정 `AGENTS.md`와 완료 문서 checkpoint를,
Harness Executor가 기존 계약에 따라 구현·phase 커밋을 소유하며 이 specialist는 커밋하지 않는다.
이번 산출물은 문서 요구사항과 read-only evidence 조사이다. 구현·CMake·CTest·Harness·외부
solver·수치 reference comparison은 수행하지 않았으며 통과로 보고하지 않는다.