149 lines
8.3 KiB
Markdown
149 lines
8.3 KiB
Markdown
# 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. 제품 목표
|
|
|
|
1. 해석 물리와 수치 계약을 코드 구조에 명확히 반영한다.
|
|
2. 작은 요소·재료·해석 기능을 기존 기능을 깨지 않고 단계적으로 추가할 수 있게 한다.
|
|
3. 동일 입력과 설정에서 재현 가능한 assembly, solve와 output을 제공한다.
|
|
4. 단위 테스트, analytical/benchmark 검증, mesh convergence, invariant와 독립 reference
|
|
비교를 결합해 correctness evidence를 축적한다.
|
|
5. 지원하지 않는 모델 의미를 조용히 근사하지 않고 명확한 진단으로 거부한다.
|
|
6. 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건
|