docs: baseline mitc4 shell feast eigen2 requirements

This commit is contained in:
KOKO\Mimi
2026-09-08 01:41:34 +09:00
parent 7f70cb2aa7
commit 3e8ca1b995
5 changed files with 406 additions and 0 deletions
+40
View File
@@ -0,0 +1,40 @@
# MITC4 Shell Mass·FEAST Eigen 2 결정 기록
- Feature ID: `mitc4-shell-feast-eigen2`
- Owner: 메인 assistant
- Requirement baseline revision: `r1`
기준: [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md),
[공통 ADR](../ADR.md#adr-028). 사용자 요청·현재 checklist는 [PRD](PRD.md),
지역 지침·소유권은 [FEATURED_AGENTS](FEATURED_AGENTS.md)를 따른다.
## MFE2-ADR-001 — 새로운 requirement baseline과 작업 범위
- 상태: 사용자 명시 요청, 2026-09-08.
- 결정: `mitc4-shell-feast-eigen2`를 새 Feature ID로 사용하고 requirement 단계만 수행한다. 변경 문서는 이 폴더에 작성하며 완성된 변경을 경로별로 커밋한다.
- 근거: “mitc4-shell-feast-eigen2 라는 이름으로 처음 requirement 작업부터 시작”, “requirement 단계만 진행”, “변경사항들을 깃에 커밋”.
- 영향: 새 요구 ID·r1을 작성한다. 기존 Feature·phase의 미커밋 변경과 실패 이력은 보존하고 research 이후 작업·push는 이번 범위에 포함하지 않는다.
- 이유: 요구사항을 현재 운영 기준에서 다시 검토하면서 기존 작업과 결과를 혼동하지 않기 위함이다.
## MFE2-ADR-002 — 기존 명시 사용자 요구의 적용
- 상태: 기존 명시 사용자 결정의 재시작 기준으로서 기록. 새로운 수학·schema 승인 아님.
- 결정: consistent→lumped→FEAST, 입력의 mode count, 고유치 Value-only 외부 비교, 좌표 공변적 stabilization 개선 및 영향받는 static/eigen 재검증, reference/temp 제외의 의미를 새 요구사항에 반영한다.
- 근거: 기존 [ADR](../mitc4-shell-feast-eigen/ADR.md)의 MFE-ADR-001·002·004·005·007·013 및 [requirements](../mitc4-shell-feast-eigen/requirements.md) r3. 기존 ADR에는 질량 사용·개선 범위·제외에 관한 사용자 답변이 명시되어 있다.
- 영향: 알려진 사용자 결정을 다시 양자택일 질문으로 만들지 않는다. 기존 formulation/NR/I/O의 상세 수식·control·영속 식별자를 자동 채택하거나 통과로 표시하지 않는다.
- 한계: 일부 기존 r3 문서는 현재 worktree의 미커밋 자료다. 필요한 요구의 실제 의미와 제외 목록은 새 requirements에 독립적으로 명시하고 이전 HEAD에 동일 내용이 있다고 주장하지 않는다.
## MFE2-ADR-003 — 참고 자료와 새 evidence의 경계
- 상태: 현행 프로젝트 기준을 적용한 문서 작성 결정.
- 결정: 기존 요구사항·근거는 요구 정의의 입력, research/formulation/NR/I/O 문서는 후속 검토 후보로 구분한다. 기존 implementation/environment/recovery/coordination/phase는 역사적 진단 자료다.
- 이유: 유용한 연구·반례를 재사용하되 과거 gate와 환경 통과를 새 Feature의 검증으로 오인하지 않게 한다.
- 영향: 새 정식화의 채택·수치 기준·source/result mapping은 후속 전문 작업이 필요할 때 정의한다. 이 요구사항 단계는 solver 구현·FEAST 실행·reference 비교·환경 준비 통과를 선언하지 않는다.
- 보존: reference artifact와 `docs/TOLERANCE.md`는 읽기 전용이다. 제외 예제의 재사용이나 comparison tolerance 완화로 알려진 문제를 숨기지 않는다.
## MFE2-ADR-004 — 현행 운영 방식과 요구사항 완료
- 상태: [ADR-028](../ADR.md#adr-028) 적용.
- 결정: 메인이 관리 문서·검토·커밋을 맡고 Requirement specialist는 할당된 요구사항 문서만 작성한다. 상태는 PRD checklist에만 둔다.
- 영향: 고정 9단계 dispatch, 별도 planning/correction/release profile, 자동 Git·hook, phase payload·retry budget을 새 요구사항으로 복원하지 않는다.
- 검증: 문서·ID·출처·링크·scope의 정적 확인을 수행한다. 실제 동작 검증 의무와 기존 명시 감사 요구의 보존은 문서 작성과 별개이며 이번에는 실행하지 않는다.
@@ -0,0 +1,34 @@
# MITC4 Shell Mass·FEAST Eigen 2 작업 지침
- Feature ID: `mitc4-shell-feast-eigen2`
- Owner: 메인 assistant
- Requirement baseline revision: `r1`
- 현재 작업: requirement 단계만. Research·formulation·I/O 설계·구현·실행 검증은 이번 요청에 포함하지 않는다.
- 목적: 기존 작업의 유용한 요구·근거를 검토하여 MITC4 질량행렬과 FEAST 고유진동 해석의 새 요구사항 baseline을 작성한다.
- 현재 checklist: [PRD](PRD.md#현재-checklist).
기준: [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md),
[공통 ADR](../ADR.md#adr-028), [ARCHITECTURE](../ARCHITECTURE.md),
[Feature 문서 관리](../FEATURE_DOCUMENTATION.md), [TOLERANCE](../TOLERANCE.md).
## 지역 지침
- 기존 `docs/mitc4-shell-feast-eigen/`의 현재 worktree 문서는 읽기 전용 참고 자료다. 일부 r3 기록은 미커밋 상태이므로 HEAD의 내용과 동일하다고 가정하지 않는다.
- 기존 명시 사용자 요구와 물리·검증 의도는 출처를 연결하여 정리한다. 과거 agent stage, phase 상태, 수치 검토 통과와 환경 복구 기록은 새 작업의 승인·실행 evidence가 아니다.
- 새 요구사항은 `FEM-REQ-MITC4-EIGEN2-###` ID를 사용한다. 기존 ID는 추적용 대응 관계에만 남긴다.
- Requirement는 관찰 가능한 동작·범위·검증 의도를 소유한다. 특정 lumping/축소 수식, FEAST parameter, HDF5 layout, 수치 threshold는 새로 결정하지 않는다.
- `reference/temp` 예제는 원본·옛 경로·복사본·cache를 통해서도 검증에 사용하지 않는다. 제외 목록은 requirements의 원본 정의를 따른다.
- 변경은 할당된 이 폴더의 문서로 제한한다. 기존 Feature·phase·source·test·config·reference는 수정하지 않는다.
- 이번 요구사항 정리의 완료는 solver 기능 완료가 아니다. 명시적으로 제외된 후속 작업을 진행하거나 빈 후속 보고서를 만들지 않는다.
## 문서 목록과 소유권
| 문서 | Owner | 역할 |
| --- | --- | --- |
| [FEATURED_AGENTS.md](FEATURED_AGENTS.md) | 메인 assistant | Feature 지역 지침·문서 목록 |
| [PRD.md](PRD.md) | 메인 assistant | 사용자 요청·범위 요약·현재 checklist |
| [ADR.md](ADR.md) | 메인 assistant | 새 작업의 결정·기존 자료 적용 경계 |
| [requirements.md](requirements.md) | requirement-agent | 원자적 요구사항·acceptance intent·검증 matrix |
| [requirements-evidence.md](requirements-evidence.md) | requirement-agent | 재사용 근거·기존 요구 대응·reference 정적 관찰·미해결 사항 |
반환은 결과·변경 파일·정적 확인·미해결 항목으로 충분하다. Git 경로 선택·커밋과 최종 결과 확인은 메인이 수행한다.
+61
View File
@@ -0,0 +1,61 @@
# MITC4 Shell Mass·FEAST Eigen 2 PRD
- Feature ID: `mitc4-shell-feast-eigen2`
- Owner: 메인 assistant
- Requirement baseline revision: `r1`
- 상태: requirement baseline r1 작성 및 정적 확인 완료. 이번 요청의 범위는 requirement 단계까지이며 solver 구현·실행 검증은 미실행이다.
기준: [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md),
[공통 ADR](../ADR.md#adr-028). 지역 지침은 [FEATURED_AGENTS](FEATURED_AGENTS.md),
결정 근거는 [Feature ADR](ADR.md)을 따른다.
## 사용자 요청과 적용 범위
2026-09-08 사용자는 기존 작업을 `mitc4-shell-feast-eigen2`라는 이름으로 requirement부터
다시 시작하고, 기존 `docs/mitc4-shell-feast-eigen/`의 유용한 문서를 참고하며 작업 중
변경사항을 Git에 커밋하도록 요청했다. 이어 **모든 단계를 진행하지 말고 requirement
단계만 진행**하도록 범위를 명시했다.
이번 산출물은 요구사항·acceptance intent와 검증 의도다. 이후의 research, 정식화 채택,
독립 numerical review, I/O 설계, 구현 계획·코드, build/test·reference 비교와 release
감사는 수행하지 않는다. 별도 coordinator나 phase 상태기계를 만들지 않는다.
## 솔버 기능의 요구 범위 요약
기존 사용자 결정에 기록된 다음 의미를 새 요구사항의 출발점으로 사용한다.
승계 근거와 후속 전문 판단 경계는 [ADR](ADR.md)에 기록한다.
1. MITC4 shell consistent mass를 계산하고 그 결과로부터 lumped mass를 유도한다.
2. 실제 무감쇠 선형 고유진동 해석은 derived lumped mass와 Intel MKL FEAST를 사용한다.
3. 원형상·무응력 상태와 승인된 shell/constraint 범위를 대상으로 하며, requested mode count는 `.inp`의 `*FREQUENCY`에서 얻는다.
4. 지정 `reference/shellNL-eigen-meshfine`의 기존 입력·고유치 TXT를 보존하고 외부 eigen 비교는 `Value`만 사용한다. Mode shape는 내부 검증 대상이며 외부 acceptance를 추가하지 않는다.
5. 좌표 공변적인 numerical drilling stabilization 개선과 영향받는 기존 선형·비선형 정적 및 새 eigen 검증을 포함한다. 기존 물리 kernel·source identity·output 의미·공통 tolerance는 보존한다.
6. `reference/temp`로 제외된 예제는 검증에 사용하지 않는다. 남는 정적 회귀와 내부 물리 검증 의무를 명시한다.
지속할 상세 계약이 필요하므로 요구사항과 verification matrix 원본은
[requirements.md](requirements.md)에 둔다. 이 PRD에는 수식·threshold·schema를 중복 정의하지 않는다.
## Acceptance 요약과 원본
아래 ID는 `FEM-REQ-MITC4-EIGEN2-` prefix를 생략하며 링크는 상세 matrix의 원본을 가리킨다.
| 영역 | Requirement IDs | 요구되는 결과와 검증 의도 |
| --- | --- | --- |
| 입력·물리 범위 | [001~004, 015~016](requirements.md#requirement-verification-matrix) | 밀도·section·geometry·boundary·mode 요청의 의미를 보존하고 미지원 조합을 명확히 진단 |
| 질량·stabilization | [005~008, 014, 026~027](requirements.md#requirement-verification-matrix) | 두 질량의 유도 관계, 물리 관성·drilling null, 대칭성·에너지·좌표 공변성 검증 |
| FEAST·modal evidence | [009~013](requirements.md#requirement-verification-matrix) | 실제 backend, 낮은 N개·multiplicity, 동일 사용 질량의 residual·normalization·orthogonality 및 실패 보존 |
| 결과·reference | [017~022](requirements.md#requirement-verification-matrix) | HDF5 source/mode identity, Value-only 대응, completeness·finite 사전검사와 공통 tolerance |
| 회귀·완료 | [023~025](requirements.md#requirement-verification-matrix) | 제외 예제를 사용하지 않는 남은 static·내부 물리 검증, 필요한 실제 실행 evidence와 미실행의 구분 |
각 영역의 원자적 ID·검증 방법·출처는 requirements 및 [근거 문서](requirements-evidence.md)를 따른다.
과거 문서의 `pass`, 362/352 test count나 stage 완료를 이 baseline의 실행 결과로 사용하지 않는다.
## 현재 checklist
- [x] 새 Feature ID·작업 브랜치와 requirement-only 범위를 설정한다.
- [x] 기존 자료의 참고·승계·후속 재검토 경계를 정한다.
- [x] Requirement specialist가 새 요구사항·verification matrix와 근거를 작성한다.
- [x] 메인이 사용자 요구 coverage, 전문 owner 경계와 미해결 사항을 정적으로 확인한다.
- [x] 상대 링크·ID를 검사하고 커밋 대상이 새 Feature 문서 5개뿐인지 확인한다.
이번 checklist의 완료는 요구사항 작업의 완료만 뜻한다. 다음 단계는 자동으로 시작하지 않는다.
@@ -0,0 +1,129 @@
# 요구사항 근거와 적용 경계
- Feature ID: `mitc4-shell-feast-eigen2`
- Requirement baseline revision: `r1`
- Owner: `requirement-agent`
- 작성일: `2026-09-08`
- 원본: [requirements.md](requirements.md), 현재 작업: [PRD](PRD.md).
기준은 [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md),
[ADR-028](../ADR.md#adr-028), [새 Feature ADR](ADR.md)이다. 이 문서는 근거와 미실행을
구분하며 새 수학·구현 acceptance 승인이나 solver readiness 판정이 아니다.
## 근거의 종류와 재사용
| 근거 | 재사용하는 내용 | 이번 기준선으로 가져오지 않는 것 |
| --- | --- | --- |
| 2026-09-08 사용자 요청과 [새 PRD](PRD.md) | 새 Feature 이름, requirement부터 재시작, 유용한 기존 자료 참고, 작업 중 commit; 최종 지시로 requirement 단계만 수행 | Research 이후 실행 권한·전체 단계 자동 진행·push 권한 |
| [기존 ADR](../mitc4-shell-feast-eigen/ADR.md)의 MFE-ADR-001/002/004/005 | MKL FEAST, consistent→derived lumped→eigen, 지정 reference의 Value-only, 입력의 mode count 권위 | Mass variant 선택 API, 다른 backend, 외부 mode-shape acceptance |
| 같은 ADR의 MFE-ADR-007 | 좌표 공변적 stabilization 개선 및 영향받는 static/eigen 검증의 명시 사용자 승인 | 특정 trace 공식 또는 기존 NR pass의 자동 채택 |
| 같은 ADR의 MFE-ADR-013 | reference/temp 네 예제와 옛 경로·복사·cache 검증 제외 | 과거 14개 blob·이동 commit·검사 수를 이번 재확인으로 보고 |
| [기존 requirements r3](../mitc4-shell-feast-eigen/requirements.md), [기존 evidence r3](../mitc4-shell-feast-eigen/requirements-evidence.md) | 27개 관찰 의무, 단위·identity·실패·남는 static/internal portfolio, 알려진 partial-BC 반례 | 기존 revision의 수식·threshold·영속 문자열이 새 Feature에 자동 승인되었다는 문구 |
| 기존 [research evidence](../mitc4-shell-feast-eigen/research-evidence.md), [formulation](../mitc4-shell-feast-eigen/formulation.md), [NR](../mitc4-shell-feast-eigen/numerical-review.md), [I/O](../mitc4-shell-feast-eigen/io.md) | 후속 전문 작업에서 필요한 근거·후보·반례를 찾을 위치 | 이번에 새로 조사·검토·검증한 evidence라는 주장 |
| 기존 [PRD 사용자 요구](../mitc4-shell-feast-eigen/PRD.md#사용자-요구) | 명시 release-readiness 감사 요청의 이력 보존 | 옛 고정 9-stage 순회, Hook·phase 상태·중복 수동/자동 실행의 복원 |
기존 r3 요구 문서는 **현재 worktree의 미커밋 자료**를 읽었다. 링크는 그 작업 자료를
가리키며 과거 HEAD/commit에 동일 내용이 있다고 가정하지 않는다. 과거 공개 문헌 조사도
기존 evidence에 기록된 당시 이력으로만 참조한다. 이번 작업은 외부 문헌 조사·정식화 유도·
독립 수치 검토를 수행하지 않았다.
기존 `NR-MFE-001`은 같은 물리 partial rotation BC에서 좌표를 회전하고 stiffness를
재계산할 때 나타난 반례다. 기존 evidence의 numerical 값은 재계산하지 않았다. `014/027`은
알려진 사례를 검증에서 배제하지 않는 의도를 승계한다. 이전 행렬을 단순 기저변환하는
검사만으로 geometry부터 재계산한 complete K의 공변성 검사를 대체하지 않는다.
기존 linear 요구 `FESA-REQ-LSMITC4-034/056`과
[nonlinear formulation §10.3](../nonlinear-static-newton-raphson/formulation.md#103-fixed-scale-and-potential)의
scale 선정 부분이 영향 대상이며 다른 물리·lifecycle 의미를 교체하지 않는다.
## 기존 ID와 새 ID 대응
기존 열은 prefix `FEM-REQ-MITC4-EIGEN-`, 새 열은 prefix
`FEM-REQ-MITC4-EIGEN2-`를 생략한다. 27개 ID를 1:1로 대응하며 아래 요약은
요구사항 본문의 acceptance를 대신하지 않는다.
| 기존 suffix | 새 suffix | 보존하는 관찰 의무·변경 경계 |
| --- | --- | --- |
| `001` | `001` | 원형상·무응력 단일 무감쇠 procedure |
| `002` | `002` | S4/S4R의 기존 물리 의미와 stabilization 개선 분리 |
| `003` | `003` | Material/section의 양의 유한 밀도 연결과 진단 |
| `004` | `004` | 기존 geometry/director/thickness 유효성 |
| `005` | `005` | Consistent mass의 계산·독립 oracle·lumping 원본 |
| `006` | `006` | 물리 병진/회전 관성과 drilling null |
| `007` | `007` | 같은 DOF/constraint·결정적 조립 |
| `008` | `008` | 실제 partial BC에서 유한 spectrum 보존·FEAST admissibility |
| `009` | `009` | 입력 요청의 낮은 N개·zero modes·불가능 요청 진단 |
| `010` | `010` | 오름차순 mode identity·multiplicity |
| `011` | `011` | Derived lumped mass로 실제 MKL FEAST 실행 |
| `012` | `012` | Backend 실패·미수렴·불완전 모드의 성공 반영 금지 |
| `013` | `013` | 같은 lumped M의 residual·normalization·orthogonality |
| `014` | `014` | 두 mass와 complete K/eigen의 물리·좌표 불변식 |
| `015` | `015` | 원본 Frequency 및 부수 옵션의 명시적 의미 처리 |
| `016` | `016` | 미지원 모델·옵션의 silent no-op 거부 |
| `017` | `017` | HDF5 quantity·단위·source/mode/backend/mass 식별 |
| `018` | `018` | 내부 modal vectors와 source/physical DOF 대응 |
| `019` | `019` | 검증 candidate 반영과 state/final output 실패 보존 |
| `020` | `020` | 지정 eigen TXT Value-only 외부 비교 |
| `021` | `021` | Tolerance 전 identity/quantity/schema/finite 검사 |
| `022` | `022` | 공통 tolerance 유지; family는 후속 NR/I/O 정의 |
| `023` | `023` | 현행 behavior tests·관련 검사·완료 시 전체검증; 고정 RED/중복 실행 삭제 |
| `024` | `024` | 남는 shell/shellNL 및 내부 static 회귀·밀도 없는 static 유지 |
| `025` | `025` | 메인의 evidence 추적 완료 판단·필수 독립 검증; 고정 stage 삭제·감사 요청 이력 보존 |
| `026` | `026` | Consistent에서 유도한 lumped의 질량·관성 보존 검사 |
| `027` | `027` | 좌표 공변적 비물리 stabilization 및 partial-BC 정적/eigen 검증 |
## 현재 원본의 정적 관찰
아래는 메인이 `2026-09-08` 전달한 read-only 관찰이다. Python `pathlib`·regex·finite
검사와 keyword inventory는 exit `0`이었고 solver 실행은 아니다. Requirement owner는
원본을 다시 읽거나 hash·산술 검사를 반복하지 않았다. 과거 hash를 현재 확인값으로 옮기지 않는다.
| 대상 | 메인이 확인한 현재 사실 |
| --- | --- |
| `reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine.inp` | 729 nodes, 676 S4 elements; density `2700.`, shell section `0.5, 5` |
| Step/BC | 한 `*Step, name=Step-2, nlgeom=NO, perturbation`; `Set-2` DOF 1~6의 homogeneous boundary 행 |
| Frequency | `eigensolver=Lanczos, sim, acoustic coupling=on, normalization=mass`; data `10, , , , ,` |
| `shellNL-eigen-meshfine eigenvalues.txt` | Mode IDs 1~10, finite Value, 중복 mode ID 없음 |
| Value 순서 | `219507, 885523, 885523, 1855340, 2740230, 2775150, 4149410, 4149410, 6733790, 6733790` |
| 표시값 반복 | `(2,3)`, `(7,8)`, `(9,10)`에서 같은 표시 Value; 이것만으로 실제 spectral multiplicity를 판정하지 않음 |
| 남는 static artifact | `rg --files`로 `reference/shell`·`reference/shellNL` 각각 inp 및 displacements/reactions/stresses CSV 존재 확인; 내용·수치 통과 확인은 아님 |
TXT의 표시 Value는 보정하지 않는다. 단위계는 수치 크기로 추론하지 않는다. 기존 관찰은
선행 static/load가 없는 단일 frequency 모델과 TXT의 분리된 Value/Freq를 기록한다.
입력의 유일한 step과 TXT mode를 연결할 수 있다는 것은 요구 정리를 위한 관찰이며,
comparison readiness·HDF5 projection·frame/family의 최종 정의는 후속 NR/I/O 책임이다.
`reference/temp` 원본은 이번에 읽거나 실행하지 않았다. 네 제외 예제와 남는 coverage의
원본은 [requirements](requirements.md#사용자-제외-예제)이며 과거 검사 개수나 cache로
현재 실행 검증을 대체하지 않는다.
## 후속 전문 판단과 사용자 결정 경계
아래는 requirement 작성의 blocker가 아니라 후속 작업이 필요할 때 구체화할 사항이다.
이번 요청으로 그 작업을 시작하지 않는다.
| 후속 owner | 필요한 판단·고정 경계 |
| --- | --- |
| Formulation | Consistent→lumped 유도, 정확한 관성 불변식·좌표 block, massless drilling과 실제 global BC의 유한 spectrum 보존, FEAST admissibility, 낮은 N개 완전성. 특정 quadrature·row-sum·projection/whitening 공식은 자동 채택하지 않음 |
| Formulation·NR | 공변 stabilization과 기존 nonlinear 초기 고정 scale lifecycle의 정합, partial-BC 반례·대응 static response 및 개선된 pencil 재검증. 기존 trace scale 공식·NR pass를 새 승인으로 간주하지 않음 |
| NR | 독립 내부 oracle·scale/threshold·검증 충분성·FEAST controls 검토. 외부 eigen Value는 blocking acceptance이며 비교 family는 공통 TOLERANCE의 같은 model/step/frame/quantity/차원/좌표/판정 영향 규칙 안에서 정의; 과거 singleton family 판정을 자동 채택하지 않음 |
| I/O | 최소 syntax/무해 옵션/진단, source step·mode·modal vector 의미와 HDF5 projection. Exact layout·영속 contract/stabilization 문자열은 이번에 고정하지 않음; 기존 public 호환성 보존 |
| 메인·Implementation·Physics | 실제 retained test 선택과 실행 evidence·독립 물리 판단. 옛 362/352 수, 미실행·실패·stale를 통과로 소급하지 않으며 명시 감사 요청은 후속 범위와 함께 관리 |
질량 흐름·backend·입력 count·Value-only·stabilization 개선·제외 목록은 기존 명시 결정으로
해결되어 재질문하지 않는다. 현재 추가 사용자 결정이 필요한 material conflict는 발견하지
않았다. 후속 증거가 새 물리 근사·지원 축소·공개 호환성/영속 schema의 비호환 변경 또는
acceptance 변경을 필요로 할 때만 근거와 함께 메인에게 반환한다. Reference 변경이나
공통 tolerance 완화로 충돌을 해소하지 않는다.
## 정적 확인과 미실행
Requirement owner는 `Get-Content`·`rg`로 할당 관리문서, 기존 r3 요구·근거, 관련 사용자
ADR와 프로젝트 PRD/ARCHITECTURE/ADR-028/TOLERANCE 절을 읽었다. 명령 exit `0`.
`python -B -X utf8 -` 문서 작성 및 정적 검사는 exit `0`으로 27개 새 matrix ID의 유일성·연속성,
27개 old→new 대응과 상대 파일 링크 존재를 확인했다. 수정 대상은 할당된 두 문서이며
checklist는 PRD 한 곳에서 관리한다.
C++·FEAST·CMake/CTest·Harness·pytest·외부 solver·reference 수치 비교·독립 numerical/physics
review·release-readiness는 requirement-only 요청 때문에 미실행이다. 문서 완료는 이 검사의
통과나 새 수학·구현 acceptance 승인을 뜻하지 않는다. Source·test·공통 정책·기존 Feature·
phase·reference와 Git 작업은 변경하지 않았다.
@@ -0,0 +1,142 @@
# MITC4 질량행렬·FEAST eigen 요구사항
- Feature ID: `mitc4-shell-feast-eigen2`
- Requirement baseline revision: `r1`
- Owner: `requirement-agent`
- 상태: 요구사항 기준선 작성. 구현·수치 검증 또는 readiness 통과 기록이 아니다.
기준: [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md),
[ADR-028](../ADR.md#adr-028), [ARCHITECTURE](../ARCHITECTURE.md),
[TOLERANCE](../TOLERANCE.md). 현재 작업·checklist는 [PRD](PRD.md),
소유권은 [FEATURED_AGENTS](FEATURED_AGENTS.md), 결정은 [ADR](ADR.md)을 따른다.
근거 구분·기존 ID 대응·미결정은 [requirements-evidence](requirements-evidence.md)에 둔다.
## 범위와 해석 의미
Consistent mass를 계산하고 그 결과로부터 lumped mass를 유도하며 실제 무감쇠 선형
고유진동 해석은 **derived lumped mass와 MKL FEAST**를 사용한다. 같은 lumped mass를
modal residual·normalization·orthogonality와 외부 고유치 비교의 기준으로 사용한다.
Consistent와 lumped의 모든 속도장 energy 또는 spectrum 동일성은 요구하지 않는다.
원형상·무응력 상태의 단일 `*FREQUENCY`, homogeneous essential constraints와 기존
지원 partial rotation BC를 대상으로 한다. 기존 MITC4의 막·굽힘·횡전단, 단일층 균질
등방성 탄성, centered constant-thickness section, geometry-derived director, source
`S4`/`S4R`, 전역 6 DOF 의미를 유지한다. FESA는 독립 솔버이며 Abaqus 내부 정식화·적분·
stabilization·결과 생성의 동등성을 주장하지 않는다.
좌표 공변적인 numerical drilling stabilization 개선 및 영향받는 선형·비선형 정적/eigen
재검증은 범위에 포함한다. 기존 basis-dependent scale 선정과 그 공식 자체의 검사만
대체 대상이다. 물리 kernel·지원 BC·physical recovery·source identity와 결과 의미는
보존한다. Nonlinear objective drilling potential, 초기 reference에서 scale을 고정하는
lifecycle, 일관 residual/Hessian 의미도 유지한다. 상세 대체 공식은 이 문서에서 채택하지 않는다.
| 물리량 | 단위·좌표·identity 의미 |
| --- | --- |
| `rho`, thickness | mass/length³, length; 양의 유한한 일정 값, 사용자 일관 단위계이며 SI 추론·자동 변환 없음 |
| 병진 질량·회전 관성 | mass, mass·length²; 3 병진과 director 접평면 2 물리 회전, drilling은 물리 관성 없음 |
| 고유치 `lambda` | `omega²`, 1/time², 좌표계 불변 scalar; 원본 `Value`와 직접 비교 |
| 주파수 `f` | 양의 lambda에서 `sqrt(lambda)/(2*pi)`, cycles/time; 의미 확인용 파생량이며 외부 acceptance 대체량 아님 |
| Modal vector | Global physical DOF와 source instance/node/component에 연결; 진폭은 정규화된 모드이며 응답변위가 아님 |
| 결과 identity | Source step·mode와 scalar quantity를 식별; equation index·row 위치·source label을 혼동하지 않음 |
제외: 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.
별도 frequency interval/shift 사용자 기능, Lanczos/AMS 대체 backend, reference
생성·수정·복원과 외부 배포도 제외한다. Eigen 기능의 밀도 필수 조건을 기존 static에 확대하지 않는다.
## Requirement verification matrix
각 행은 하나의 관찰 의무이며 acceptance는 해당 요구와 검증 조건을 충족하는 것이다.
현재 요청은 이 의무를 정의하는 **requirement 단계만** 수행한다. 아래 검증은 후속 솔버
작업의 의도이며 이번에 실행하지 않는다. 구체적인 수식·내부 수치 기준·FEAST controls와
I/O layout은 후속 전문 owner가 필요한 시점에 정의한다. 외부 tolerance는 공통 정책을 따른다.
출처: `U`=[새 Feature ADR](ADR.md)의 기존 명시 사용자 결정 적용,
`R`=[근거 문서](requirements-evidence.md)의 reference 관찰,
`P`=위 프로젝트 기준, `L`=[기존 shell 요구](../linear-static-mitc4-shell/requirements.md),
`N`=[기존 nonlinear I/O](../nonlinear-static-newton-raphson/io.md)의 공통 경로·실패 의미.
`Formulation`, `NR`, `I/O`, `Implementation`, `Physics`는 전문 책임이며 고정 호출 단계가 아니다.
각 행은 [기존 r3](../mitc4-shell-feast-eigen/requirements.md)의 같은 번호에 대응한다.
| Requirement ID | Shall statement | 측정 가능한 acceptance / verification method | 출처·후속 owner |
| --- | --- | --- | --- |
| FEM-REQ-MITC4-EIGEN2-001 | 솔버는 선행 상태 없는 원형상 무응력 모델의 단일 무감쇠 선형 고유진동 procedure를 실행해야 한다. | 지정 reference가 한 frequency step으로 선택되고 static/nonlinear preload 경로를 호출하지 않음; procedure 통합 테스트 | U, R, P; Formulation, I/O |
| FEM-REQ-MITC4-EIGEN2-002 | `S4`와 `S4R`는 기존 FESA MITC4 물리 kernel·director·전역 6 DOF 의미를 유지하고 numerical stabilization만 Requirement 027에 따라 개선해야 한다. | Physical contribution·mapping·recovery 의미 보존, source type만 다른 모델은 같은 mass·개선된 stiffness/eigen 경로와 별도 source metadata; 개선 전 전체 K의 수치 동일성을 요구하지 않음 | U, L; Formulation, I/O |
| FEM-REQ-MITC4-EIGEN2-003 | 모든 활성 shell의 밀도는 해당 section이 참조하는 material에서 하나의 finite `rho > 0`로 결정되어야 한다. | 여러 material의 올바른 연결 및 missing/duplicate/unresolved/nonpositive/nonfinite/dependent density 거부; semantic 양성·음성 테스트 | U, R, P; I/O |
| FEM-REQ-MITC4-EIGEN2-004 | 질량 계산은 기존 shell의 유효한 geometry·director와 양의 centered constant thickness를 사용해야 한다. | 기존 geometry/material/section 검증 재사용과 서로 다른 두께·밀도 연결 테스트; 부적합 요소를 질량 zero로 우회하지 않음 | L, P; Formulation, I/O |
| FEM-REQ-MITC4-EIGEN2-005 | 솔버는 MITC4 보간에 일관된 consistent mass를 계산하고 derived lumped mass 계산의 원본으로 제공해야 한다. | 독립 consistent mass/kinetic-energy oracle와 일치하고 같은 geometry/material/section의 consistent 결과가 Requirement 026의 입력임을 확인; 원본을 lumping으로 덮어쓰지 않음 | U, P; Formulation, NR |
| FEM-REQ-MITC4-EIGEN2-006 | 질량은 3개 병진 및 2개 director-tangent 회전의 물리 관성을 포함하고 numerical drilling에 물리 관성을 부여하지 않아야 한다. | Rigid translation의 총질량, 회전 관성·kinetic energy, director-parallel null action을 독립 검사; NR의 scale-aware 기준 | L, P; Formulation, NR |
| FEM-REQ-MITC4-EIGEN2-007 | 질량·강성은 동일한 physical DOF와 constraint 의미로 결정적으로 조립되어야 한다. | Scatter/source order, 대칭 구조, sequential/병렬 reduction 및 constrained motion 검증; 행렬 및 재실행 테스트 | P, L; Formulation, Implementation |
| FEM-REQ-MITC4-EIGEN2-008 | Massless numerical 좌표 처리는 개선된 stabilization과 lumped mass에 실제 global BC를 적용한 원 pencil의 유한 spectrum을 보존하며 FEAST admissibility를 만족해야 한다. | 지원 partial BC를 포함해 축소 전후 spectrum·constraint·원 free DOF residual 검증; 개선 전 K와의 spectrum 동일성 또는 consistent→lumped 동일성을 요구하지 않음. 인공 mass·임의 cutoff·clamp 금지 | U, P, L; Formulation, NR |
| FEM-REQ-MITC4-EIGEN2-009 | Mode-count 요청은 물리 spectrum의 낮은 순서에서 지정 개수의 고유쌍을 계산해야 한다. | Reference는 10개; 작은 독립 spectrum에서 첫 N개·multiplicity·zero rigid-mode case·요청수 초과/빈 물리계의 명시적 실패 확인. 부적합 음수 spectrum을 양수화하지 않음 | U, R; Formulation, NR, I/O |
| FEM-REQ-MITC4-EIGEN2-010 | 고유치 결과는 오름차순의 고유한 mode identity를 가지고 반복 고유값의 multiplicity를 보존해야 한다. | Repeated/clustered spectrum에서 row 수·순위·identity 및 재현성 확인; 같은 eigenvalue 값은 duplicate identity 오류가 아님 | R, P; NR, I/O |
| FEM-REQ-MITC4-EIGEN2-011 | 실제 고유치 계산은 consistent mass에서 유도한 lumped mass를 MKL FEAST에 사용해야 한다. | Consistent→lumped→FEAST 연결과 real adapter의 질량 입력·backend identity 확인; source Lanczos가 backend를 변경하지 않고 consistent나 다른 질량으로 reference에 맞추지 않음 | U; Formulation, Implementation |
| FEM-REQ-MITC4-EIGEN2-012 | FEAST 실패·미수렴·불충분 모드·비유한 eigenpair를 성공 결과로 반영해서는 안 된다. | 각 failure injection에서 안정된 diagnostic과 불완전 result 미공개 확인; bounded termination 테스트 | P; Formulation, I/O, Implementation |
| FEM-REQ-MITC4-EIGEN2-013 | 성공 eigenpair는 FEAST에서 사용한 동일 lumped mass로 modal residual·mass normalization·orthogonality 검증을 통과해야 한다. | 내부 modal vectors로 독립 residual/Gram 검사를 수행하고 잘못된 mass variant·eigenvector·mode pairing을 검출; NR가 내부 기준·scale 정의 | U, P, R; Formulation, NR, Physics |
| FEM-REQ-MITC4-EIGEN2-014 | 두 질량과 개선된 stabilized eigen 해석은 symmetry, kinetic-energy, coordinate invariance, rigid-body 및 density scaling 검증을 통과해야 한다. | 독립 mass oracle·invariants 및 동일 물리 BC를 보존하는 지원 partial-rotation 사례에서 재계산한 complete K와 eigen spectrum의 좌표 검증 필수. NR-MFE-001 반례를 필수 통과 사례로 포함하며 full-free/full-clamp만으로 대체하지 않음; density scaling 및 각 mass 고유 energy oracle 유지; NR가 내부 기준 정의 | U, P, L; Formulation, NR, Physics |
| FEM-REQ-MITC4-EIGEN2-015 | 지정 `.inp`의 `*FREQUENCY` 요청과 부수 옵션은 보존된 입력에서 명시적으로 mapping되어야 한다. | 원본 파일 변경 없이 실행; requested count와 mass normalization 유지; Lanczos/SIM 옵션의 FESA 처리 및 acoustic-free 모델에서 `ACOUSTIC COUPLING=ON`의 무해성/진단을 I/O에 명시 | U, R, P; I/O |
| FEM-REQ-MITC4-EIGEN2-016 | 승인 subset 밖의 모델·절차·옵션은 의미를 삭제하거나 근사해 실행하지 않고 진단해야 한다. | Exclusion inventory의 양성/음성 테스트; acoustic 요소, preload, damping, 비영 prescribed base state, 미지원 frequency fields 등의 silent no-op 없음 | P, R; I/O, Implementation |
| FEM-REQ-MITC4-EIGEN2-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-EIGEN2-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-EIGEN2-019 | State와 final HDF5는 검증된 candidate만 반영하고 제어된 실패에서 기존 유효 결과를 보존해야 한다. | Solve·validation·writer/finalization 실패 후 이전 state/final hash 보존; live log는 기존 `<stem>_log.txt` 독립 lifecycle 유지 | P, N; Formulation, I/O, Implementation |
| FEM-REQ-MITC4-EIGEN2-020 | 새 eigen 외부 검증은 지정 원본 TXT의 `Value`만 derived lumped mass로 계산한 FESA HDF5 고유치와 비교해야 한다. | 같은 지정 `.inp`·TXT, Mode 1~10 포함; mass variant 사후 선택 금지. Eigen `Freq`·변위·회전·stress·reaction·mode shape 외부 gate를 추가하지 않음. 승인된 기존 static 회귀는 별도 Requirement 024의 기존 계약 사용 | U, R; NR, I/O |
| FEM-REQ-MITC4-EIGEN2-021 | 비교기는 required identity의 missing/extra/duplicate/nonfinite와 quantity/schema 오류를 tolerance 전에 거부해야 한다. | 행 재정렬은 같은 mapping, mode label 중복·누락·추가·비유한 `Value`는 실패; 같은 값의 다른 mode는 허용; comparator 음성 테스트 | P, R; NR, I/O, Implementation |
| FEM-REQ-MITC4-EIGEN2-022 | 외부 고유치 acceptance는 공통 `docs/TOLERANCE.md`의 scale·row·RMS·zero-scale 정책을 적용해야 한다. | NR/I/O가 공통 정책의 같은 step/frame 규칙 안에서 mode identity·family를 정의하고 모든 요청 Value의 blocking 비교 통과; frequency로 대체하거나 tolerance를 조정하지 않음 | U, P; NR, I/O |
| FEM-REQ-MITC4-EIGEN2-023 | 변경 동작은 의미 있는 테스트와 구성된 MSVC x64 Debug CMake/CTest 검증으로 확인해야 한다. | 가능한 버그 재현, 변경 중 관련 검사, 기능 완료 시 전체 build/test와 필수 reference 비교 1회; 새 warning 없음과 실제 FEAST runtime evidence. 아래 제외 예제 사용 0건 및 남은 필수 coverage와 실행 identity 대조; 형식적 RED·수동/자동 중복 실행을 요구하지 않음 | U, P; Implementation |
| FEM-REQ-MITC4-EIGEN2-024 | 기존 선형·비선형 정적해석은 승인된 stabilization 개선 외의 입력·출력·물리 의미를 보존하고 영향받는 correctness·reference 회귀를 통과해야 한다. | 아래 portfolio의 `shell`·`shellNL` 및 linear-limit 역할을 fresh solve로 검증하고 기존 comparison identity·판정 정책 유지; tangent/선형극한/평형·reaction/energy/state 검증. 제외 예제는 복사본·cache로도 재사용하지 않음. 개선 전 bitwise equality를 요구하지 않고 density 없는 기존 정적 모델도 유지 | U, P, L, N; Formulation, NR, Implementation, Physics |
| FEM-REQ-MITC4-EIGEN2-025 | 솔버 기능 완료 판단은 적용 계약과 모든 필수 검증 evidence를 추적하여 내려야 한다. | 각 요구와 독립 numerical review·analytical/invariant·필요한 physics/reference evidence 연결; 필수 실패·미실행·stale를 통과로 집계하지 않음. 사용자 제외·과거 결과·현재 실행 구분; 기존 명시 감사 요청은 아래 범위 경계대로 보존 | U, P; 메인, NR, Physics |
| FEM-REQ-MITC4-EIGEN2-026 | 솔버는 계산된 consistent mass에서 lumped mass를 유도하고 승인된 질량·관성 보존 계약을 검증해야 한다. | 유도 관계·독립 lumping oracle·총 병진 질량 보존, 차원/대칭성/물리 kinetic-energy 비음성, 물리 회전 관성과 drilling nullspace 의미 검사. Lumping 수식·좌표 block 처리·정확한 관성 불변식과 threshold는 Formulation/NR가 고정 | U, P, L; Formulation, NR |
| FEM-REQ-MITC4-EIGEN2-027 | 개선된 numerical drilling stabilization은 같은 물리 모델의 좌표·접평면 기저 선택에 공변적이고 기존 비물리 역할을 유지해야 한다. | 독립 재계산한 stabilization/complete K의 congruence, finite·대칭·양의 numerical stabilization, 물리 rigid modes 보존, physical recovery 제외 및 결정론 검증. Partial BC의 NR-MFE-001과 대응 정적 response를 필수 통과시키며 기존 static의 동일 scale 사용 경로도 정합 검증; 수식·threshold는 Formulation/NR 소유 | U, L; Formulation, NR, Implementation, Physics |
## 지정 reference와 남는 검증 범위
Eigen input은 `reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine.inp`, 외부 reference는
같은 폴더의 `shellNL-eigen-meshfine eigenvalues.txt`를 그대로 사용한다. 입력의
`*FREQUENCY`가 requested count의 권위이며 현재 `N=10`이다. TXT `Mode 1~10`의 `Value`만
비교한다. 이름 `shellNL`·`Step-2`로 preload를 추정하지 않는다. TXT를 CSV로 변환하거나
canonical 이름·보조 metadata·provenance를 새 readiness 조건으로 요구하지 않는다.
Source의 blank bounds/shift/control fields, Lanczos/SIM 및 acoustic-free 모델 옵션은
최소 subset의 의미와 진단으로 다뤄야 하며 정확한 allowlist는 I/O 책임이다.
| 남는 대상 | 필수 관찰·비교 의미 |
| --- | --- |
| `reference/shell/shell.inp` + `shell displacements.csv` | Linear `shell-s4` 및 `shell-s4-linear-limit` 역할. Source instance/node/component와 해당 static step/frame, global U1/U2/U3 blocking·UR1/UR2/UR3 warning-only. 같은 fresh solve를 사용해도 두 역할의 evidence를 유지 |
| `reference/shellNL/shellNL.inp` + `shellNL displacements.csv` | `shellnl-s4-final`의 factor-one accepted state와 source identity; U blocking·UR warning-only, 기존 좌표 의미 유지 |
| `reference/shellNL/shellNL reactions.csv` | Local RF1/RF2/RF3와 physical spatial RM1/RM2의 source-key·finite·inventory·error 보고는 review-only 유지; RM3/stress를 새 numerical gate로 추가하지 않음 |
| Element·linear static 내부 검사 | Kernel/patch·rigid mode·physical recovery·partition/full residual·reaction·energy·source mapping; 같은 물리 BC/loads를 유지하는 좌표 변환에서 complete K와 partial-BC static response |
| Nonlinear 내부 검사 | 선형극한·tangent consistency·objectivity·factor-one 전역 force/moment balance·free residual·commit/rollback; Newton·convergence·하중·reaction 의미 유지 |
| 새 eigen 내부 검사 | 두 mass의 독립 oracle·질량/관성·drilling null·density scaling·rigid modes, 실제 constraints·finite spectrum·modal residual/Gram·순위/multiplicity·실패 보존; 알려진 `NR-MFE-001` partial-BC 반례를 포함한 좌표 검증 |
| 기타 기존 coverage | Pressure synthetic kernel/하중/평형·schema/comparator 및 무관한 beam 등 회귀 유지. 제외된 복합 시험에 남은 모델 검사가 섞여 있으면 retained fixture/evidence로 해당 관찰을 보존 |
모든 외부 수치 비교는 [TOLERANCE](../TOLERANCE.md)를 적용한다. 회귀는 개선 전 숫자의
bitwise equality가 아니라 승인된 물리·identity·공통 정책으로 판단한다. 내부 평형 acceptance와
reaction의 local distribution 검토는 별개다. 알려진 partial-BC 반례를 full-free/full-clamp
사례만으로 대체하거나 실패 수치를 기대값으로 재생성해 정당화하지 않는다.
## 사용자 제외 예제
다음 네 예제는 `reference/temp/` 아래 원본뿐 아니라 옛 경로, 복사 input, cached HDF5·log·
추출 결과를 통한 검증에서도 제외한다. 원본 열람·artifact audit·solve·비교·복원 또는
새 fixture로 위장한 재사용을 하지 않는다. 과거 기록은 이력이며 현재 성공 evidence가 아니다.
| 제외 예제 | 제외되는 외부 coverage |
| --- | --- |
| `shellNL-meshfine` | Fine static solve·변위 비교·reaction review |
| `shellNL-meshfine-pressure` | 해당 pressure 예제의 artifact audit·solve·결과 비교 |
| `shellNL-meshfine_02` | 별도 post-closure 예제의 검증 |
| `shellNL-dyn-meshfine` | 해당 예제의 검증 |
`reference/shellNL-eigen-meshfine`는 이 목록에 포함되지 않는다. 제외는 지원 기능과 내부
물리 검증 의무 삭제를 뜻하지 않는다. Pressure 예제에 대한 fresh 외부 coverage 부재는
명시적으로 보고한다. 과거 test 수 `362/352`를 새 완료 조건으로 사용하지 않고 실제 남은
의무·선택·실행·사용자 제외를 구분한다.
## 이번 완료와 후속 판단의 경계
이번 완료는 요구·출처·coverage·링크의 정적 확인까지다. 구현/FEAST/build/test/reference,
독립 numerical/physics review와 release-readiness는 미실행이다. 기존 명시 release-readiness
감사 요청은 후속 요구 기록으로 보존하되 이번 요청의 실행 범위나 모든 기능의 고정 단계
의무로 확대하지 않는다. 메인이 필요한 후속 전문 작업과 evidence를 판단한다.
공통 문서·기존 Feature·source·test·reference는 읽기 전용이며 Git은 메인이 소유한다.