8.3 KiB
8.3 KiB
Product Requirements: Structural FEM Solver Framework
1. 제품 정의
이 프로젝트는 유한요소 구조해석 솔버를 신뢰성 있게 확장할 수 있는 C++ 해석 코어와 그 개발·검증 workflow를 구축한다. 지원하는 해석, 요소, 재료와 입출력 형식은 feature별로 명시하며, 구현 여부와 검증 수준을 추적 가능한 evidence로 제공한다.
현재 repository의 제품은 agent/skill 문서 체계와 C++ 개발 Harness를 포함한 초기 framework다. 아직 C++ solver build metadata가 없으므로 특정 해석 기능이 구현되었다고 간주하지 않는다.
2. 대상 사용자
- 구조해석 알고리즘과 요소 정식화를 구현하는 solver 개발자
- 해석 결과의 수치 정확성, 물리적 타당성과 회귀를 검토하는 CAE 엔지니어
- 입력·결과 형식과 외부 reference model을 관리하는 integration 개발자
- 기능별 요구사항, 검증 evidence와 release readiness를 추적하는 maintainer
3. 제품 목표
- 해석 물리와 수치 계약을 코드 구조에 명확히 반영한다.
- 작은 요소·재료·해석 기능을 기존 기능을 깨지 않고 단계적으로 추가할 수 있게 한다.
- 동일 입력과 설정에서 재현 가능한 assembly, solve와 output을 제공한다.
- 단위 테스트, analytical/benchmark 검증, mesh convergence, invariant와 독립 reference 비교를 결합해 correctness evidence를 축적한다.
- 지원하지 않는 모델 의미를 조용히 근사하지 않고 명확한 진단으로 거부한다.
- agent가 일반적인 설계·구현·검증 결정을 자율적으로 처리하고, 제품 의미를 바꾸는 결정만 사용자에게 요청하게 한다.
4. 비목표
- 특정 상용 solver의 비공개 알고리즘을 복제하는 것
- Abaqus 전체 keyword, 모든 element/material/procedure와 bitwise 결과 호환을 약속하는 것
- 검증되지 않은 기능을 입력만 받아들이는 형태로 노출하는 것
- 하나의 sparse backend, 저장 형식 또는 운영체제를 solver core 계약으로 고정하는 것
- 모델 생성용 GUI, CAD geometry kernel, mesher 또는 범용 전후처리기를 초기 범위에 포함하는 것
- 외부 결과와 수치가 비슷하다는 사실만으로 물리·수치 정확성을 선언하는 것
5. 핵심 기능 요구사항
5.1 모델 의미
- Node, element, material, property, set, constraint, load와 analysis step을 명시적 semantic model로 표현해야 한다.
- Source label, internal identity, DOF와 equation identity를 구분해야 한다.
- 단위계, 좌표계, component 순서와 부호를 입력 및 결과 계약에 기록해야 한다.
- 잘못된 참조, 중복 identity, 비유한 값과 지원하지 않는 조합을 analysis 시작 전에 진단해야 한다.
5.2 요소 및 재료 확장
- Element formulation은 kinematics, interpolation, integration, residual/tangent, state variable과 recovery 계약을 함께 제공해야 한다.
- Material model은 committed/trial state의 lifetime과 update 실패 의미를 정의해야 한다.
- Element나 material 추가가 global assembly, parser 또는 특정 linear algebra backend의 변경을 필수로 만들지 않아야 한다.
- 각 기능은 적용 범위와 알려진 locking, hourglass, conditioning 또는 convergence 제한을 문서화해야 한다.
5.3 해석 절차
- Analysis procedure는 model validation, DOF 구성, assembly, constraint 적용, solve, convergence 판단, state commit과 result recovery 순서를 소유해야 한다.
- Linear/nonlinear, static/dynamic, eigen 또는 contact 계열 기능은 공통 이름 아래 암묵적으로 섞지 않고 feature contract로 활성화해야 한다.
- 반복해석은 residual과 correction을 구분하고 실패 시 마지막 committed state를 보존해야 한다.
5.4 입출력
- Solver core와 input/output adapter를 분리해야 한다.
- 지원 형식과 subset은 versioned contract로 공개해야 한다.
- Abaqus
.inp호환 feature를 선택한 경우 model data와 history data의 공개 의미를 보존하고, 지원 keyword와 option, validation, 미지원 동작을 명시해야 한다. - Unknown semantic construct는 기본적으로 오류이며, 결과에 영향을 주지 않는다고 계약된 항목만 warning으로 처리할 수 있다.
- 결과는 entity, step/frame, location, coordinate system, component, units와 provenance로 식별 가능해야 한다.
5.5 진단과 실패
- Parser, model, formulation, assembly, solver, convergence, recovery와 I/O 실패를 구분하는 structured diagnostic을 제공해야 한다.
- 오류에는 가능한 경우 source location 또는 semantic entity identity와 수정 가능한 설명을 포함해야 한다.
- 실패한 analysis가 부분적으로 authoritative한 결과 파일을 남겨 성공으로 오인되게 해서는 안 된다.
5.6 검증과 추적성
- 모든 필수 requirement는 verification method, acceptance criterion과 evidence에 연결되어야 한다.
- 수치 feature는 최소한 직접 kernel test와 독립적인 system/benchmark 검증을 가져야 한다.
- Reference comparison은 model 의미와 result identity를 먼저 일치시킨 뒤
docs/TOLERANCE.md에 정의된 metric을 적용해야 한다. - Reference artifact는 read-only이며 구현 결과를 맞추기 위해 수정할 수 없다.
- Release verdict는 requirement부터 physics review까지 동일 feature revision의 evidence만 사용해야 한다.
5.7 개발 자동화
- C++ 변경은 실패 test를 먼저 관찰하는 TDD workflow를 따라야 한다.
- Harness는 repository 설정에서 build system과 test command를 결정하고 shell string이 아닌 검증된 argument list를 실행해야 한다.
- 자동화는 사용자의 관련 없는 working-tree 변경을 commit하거나 삭제하지 않아야 한다.
- 실패, timeout과 미실행 검사는 성공으로 승격되지 않아야 한다.
6. 품질 속성
| 속성 | 요구사항 |
|---|---|
| Correctness | 공식화된 방정식, 독립 검증과 물리 invariant로 입증한다. |
| Determinism | 동일 platform/config/input에서 ordering과 결과 identity가 재현된다. |
| Traceability | Requirement, formulation, code, test, artifact와 verdict를 feature ID로 연결한다. |
| Extensibility | Core 변경 없이 adapter/backend를, owner 경계를 깨지 않고 physics 기능을 추가한다. |
| Diagnosability | 실패 단계, entity, 원인과 실행 evidence를 구조화해 남긴다. |
| Portability | Core C++는 vendor/OS type을 노출하지 않으며 현재 Windows/MSVC baseline을 검증한다. |
| Safety | 미지원 의미는 fail closed, artifact 갱신과 외부 변경은 명시적 권한 아래 수행한다. |
| Performance | 정확성과 재현성을 먼저 보존하고 측정된 병목에만 최적화를 적용한다. |
7. Feature 완료 조건
Feature는 다음 조건을 모두 만족할 때만 완료된다.
- 요구사항과 지원/비지원 범위가 식별 가능하다.
- formulation과 numerical review가 같은 convention을 사용한다.
- I/O 및 result identity가 versioned contract에 정의되어 있다.
- 관련 unit/integration/benchmark test가 통과한다.
- 필요한 build, reference comparison과 physics sanity check가 실제로 실행되었다.
- 알려진 제한과 미실행 검사가 release evidence에 기록되었다.
- 동일 revision의 artifact digest가 handoff chain 전체에서 일치한다.
8. 단계적 제공 원칙
초기 feature는 하나의 작은 해석 capability를 end-to-end로 완성하는 vertical slice로 선정한다. 요소 종류나 analysis family를 넓히기 전에 semantic model, deterministic assembly, diagnostic, result identity와 검증 경로를 먼저 안정화한다. 구체적인 첫 해석 기능은 요구사항 단계에서 결정하며 이 PRD가 임의로 선결정하지 않는다.
9. 성공 지표
- 필수 requirement의 verification evidence 연결률 100%
- 지원 feature의 blocking regression test 통과율 100%
- 알려지지 않은 semantic input의 silent acceptance 0건
- 관련 없는 사용자 파일을 자동화가 수정·commit한 사례 0건
- 같은 failure signature의 무한 agent 재시도 0건
- release verdict에서 미실행 검사를 통과로 표시한 사례 0건