initial commit
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
# Abaqus User Subroutine Agent Design
|
||||
|
||||
## Purpose
|
||||
|
||||
This document maps the project agents and skills to the Abaqus User Subroutine development process. The working language is Fortran with Intel oneAPI Fortran, and Abaqus execution remains opt-in.
|
||||
|
||||
## Abaqus User Subroutine development process
|
||||
|
||||
1. Subroutine requirements analysis
|
||||
2. Books, papers, and research evidence
|
||||
3. Finite element formulation for implementation
|
||||
4. Subroutine input/output parameter definition
|
||||
5. TDD test model design
|
||||
6. Fortran code implementation
|
||||
7. Subroutine validation
|
||||
|
||||
## Agent Mapping
|
||||
|
||||
| Process step | Primary agents | Primary skills |
|
||||
| --- | --- | --- |
|
||||
| 1. Subroutine requirements analysis | Requirement Agent, Coordinator Agent | `abaqus-subroutine-requirements` |
|
||||
| 2. Books, papers, and research evidence | Research Agent | `abaqus-subroutine-research`, `fem-theory-query` |
|
||||
| 3. Finite element formulation for implementation | Formulation Agent, Numerical Review Agent | `abaqus-subroutine-formulation`, `abaqus-subroutine-numerical-review` |
|
||||
| 4. Subroutine input/output parameter definition | I/O Definition Agent | `abaqus-subroutine-interface` |
|
||||
| 5. TDD test model design | Reference Model Agent, Implementation Planning Agent | `abaqus-subroutine-test-models` |
|
||||
| 6. Fortran code implementation | Implementation Planning Agent, Implementation Agent, Correction Agent | `abaqus-fortran-tdd` |
|
||||
| 7. Subroutine validation | Build/Test Executor Agent, Reference Verification Agent, Physics Evaluation Agent, Release Agent | `abaqus-subroutine-validation`, `abaqus-subroutine-physics-sanity`, `abaqus-subroutine-readiness` |
|
||||
|
||||
## Gates
|
||||
|
||||
- Requirements gate: every must requirement has measurable acceptance criteria and verification method.
|
||||
- Research gate: source-backed facts are separated from inference and applicability limits are explicit.
|
||||
- Formulation gate: stress update, consistent tangent, state variables, and numerical risks are documented.
|
||||
- Interface gate: Abaqus ABI arguments, update responsibilities, tensor ordering, units, and CSV extraction schemas are explicit.
|
||||
- Test model gate: no-Abaqus tests and reference artifact contracts are defined before implementation.
|
||||
- Implementation gate: Fortran production changes follow RED -> GREEN -> VERIFY and pass no-Abaqus validation.
|
||||
- Validation gate: reference artifacts include `.inp`, source hash, Abaqus version, compiler version, msg/dat/log tail, and extracted CSV evidence before comparison.
|
||||
|
||||
## Validation Defaults
|
||||
|
||||
- Default no-Abaqus path: `python scripts/validate_fortran.py`.
|
||||
- Reference artifact contract check: `python scripts/validate_reference_artifacts.py`.
|
||||
- Workspace gate: `python scripts/validate_workspace.py`.
|
||||
- Abaqus execution: only through `HARNESS_ABAQUS_VALIDATION=run` with explicit validation commands.
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
# Architecture Decision Records
|
||||
|
||||
## 철학
|
||||
Harness는 현재 프로젝트의 실제 기술 스택을 반영해야 한다. C++/MSVC 프로젝트에서 npm, Next.js, TypeScript test naming을 기본값으로 두면 agent prompt와 hook policy가 잘못된 구현을 유도한다.
|
||||
|
||||
---
|
||||
|
||||
### ADR-001: C++ 전용 Harness
|
||||
**결정**: Harness scaffold는 C++/MSVC 전용으로 운영한다. JavaScript/TypeScript fallback은 유지하지 않는다.
|
||||
|
||||
**이유**: FESA 개발 환경은 MSVC 기반 C++이다. 언어별 fallback을 남기면 validation, TDD guard, acceptance criteria가 흐려진다.
|
||||
|
||||
**트레이드오프**: 같은 Harness scaffold를 JS/TS 프로젝트에 재사용할 수 없다. 필요하면 별도 template이나 language registry를 새 ADR로 설계한다.
|
||||
|
||||
### ADR-002: CMake/MSVC/x64/Debug 기본 검증
|
||||
**결정**: 기본 workspace validation은 CMake, Visual Studio 17 2022 generator, x64 platform, Debug config, CTest로 수행한다.
|
||||
|
||||
**이유**: MSVC 환경에서 CMake/CTest는 source tree가 복원되거나 새 C++ project가 추가될 때 가장 일관된 build/test entry point다.
|
||||
|
||||
**트레이드오프**: Visual Studio solution-only project는 기본 지원하지 않는다. 명시적으로 필요하면 `HARNESS_VALIDATION_COMMANDS`로 override한다.
|
||||
|
||||
### ADR-003: 엄격한 C++ TDD Guard
|
||||
**결정**: C++ production file 변경은 관련 C++ test file이 없으면 차단한다.
|
||||
|
||||
**이유**: Harness의 핵심 목적은 agent가 검증 없는 C++ 변경을 만들지 않도록 하는 것이다. Header 중심 C++ 구조에서도 module 또는 basename 기반 테스트 존재를 확인한다.
|
||||
|
||||
**트레이드오프**: 초기 scaffolding 작업에서 guard가 엄격하게 느껴질 수 있다. 문서, CMake 설정, Harness metadata는 guard 대상에서 제외한다.
|
||||
|
||||
### ADR-004: Harness 자체 테스트 우선
|
||||
**결정**: commit hook은 먼저 Python Harness self-test를 실행한 뒤 workspace validation을 실행한다.
|
||||
|
||||
**이유**: 현재 저장소에는 C++ source tree가 없을 수 있다. Harness가 스스로 검증 가능해야 이후 phase generation과 source restoration을 안전하게 진행할 수 있다.
|
||||
|
||||
**트레이드오프**: commit 시간이 조금 늘어난다. 대신 hook/validation regressions를 빠르게 잡는다.
|
||||
|
||||
### ADR-005: Fortran Abaqus UserSubroutine 확장
|
||||
**결정**: Abaqus UserSubroutine 구현 언어는 Fortran으로 둔다. 기본 validation은 no-Abaqus mode를 유지하고, Intel oneAPI Fortran kernel/fake-driver tests와 reference artifact metadata validation을 수행한다.
|
||||
|
||||
**이유**: Abaqus UserSubroutine은 Abaqus runtime, license, compiler integration에 의존한다. 기본 hook이나 workspace validation에서 Abaqus job을 자동 실행하면 개발 환경과 license 상태에 따라 재현성이 떨어진다. 계산 kernel과 Abaqus ABI wrapper를 분리하면 no-Abaqus 환경에서도 TDD를 유지할 수 있다.
|
||||
|
||||
**트레이드오프**: no-Abaqus validation은 Abaqus symbol resolution, include compatibility, actual job execution을 완전히 보장하지 않는다. 해당 검증은 `HARNESS_ABAQUS_VALIDATION=run`으로 명시한 환경에서만 수행한다.
|
||||
@@ -0,0 +1,75 @@
|
||||
# 아키텍처
|
||||
|
||||
## 목표
|
||||
이 저장소의 현재 책임은 C++/MSVC 프로젝트를 위한 Codex Harness scaffold를 제공하는 것이다. Harness는 phase execution, edit guard, commit validation, workspace validation을 분리해서 관리한다.
|
||||
|
||||
## 디렉토리 구조
|
||||
```text
|
||||
.codex/
|
||||
├── hooks/ # Codex hook scripts
|
||||
└── skills/ # Harness planning/review instructions
|
||||
docs/ # Project and Harness guidance
|
||||
scripts/
|
||||
├── execute.py # Phase step executor
|
||||
├── validate_workspace.py
|
||||
└── test_*.py # Harness self-tests
|
||||
phases/ # Optional generated phase plans
|
||||
```
|
||||
|
||||
## 데이터 흐름
|
||||
```text
|
||||
User-approved task
|
||||
-> Harness phase files under phases/
|
||||
-> scripts/execute.py injects AGENTS.md and docs/*.md
|
||||
-> Codex executes one step at a time
|
||||
-> step updates phases/{phase}/index.json
|
||||
-> validation runs through scripts/validate_workspace.py
|
||||
```
|
||||
|
||||
## Hook 흐름
|
||||
```text
|
||||
apply_patch/Edit/Write
|
||||
-> .codex/hooks/tdd-guard.py
|
||||
-> C++ production changes require related tests
|
||||
|
||||
git commit command
|
||||
-> .codex/hooks/pre_commit_checks.py
|
||||
-> Python Harness self-tests
|
||||
-> scripts/validate_workspace.py
|
||||
```
|
||||
|
||||
## Validation 흐름
|
||||
```text
|
||||
HARNESS_VALIDATION_COMMANDS set
|
||||
-> run exact commands
|
||||
|
||||
Always, unless HARNESS_VALIDATION_COMMANDS overrides:
|
||||
-> scripts/validate_reference_artifacts.py
|
||||
-> scripts/validate_fortran.py
|
||||
|
||||
CMakePresets.json has msvc-debug configure preset
|
||||
-> cmake --preset msvc-debug
|
||||
-> cmake --build preset binary dir --config Debug
|
||||
-> ctest --test-dir preset binary dir -C Debug
|
||||
|
||||
CMakeLists.txt exists
|
||||
-> cmake -S . -B build/msvc-debug -G "Visual Studio 17 2022" -A x64
|
||||
-> cmake --build build/msvc-debug --config Debug
|
||||
-> ctest --test-dir build/msvc-debug --output-on-failure -C Debug
|
||||
|
||||
No CMake project
|
||||
-> print guidance and exit successfully
|
||||
|
||||
HARNESS_ABAQUS_VALIDATION=detect
|
||||
-> report Abaqus executable discovery only
|
||||
|
||||
HARNESS_ABAQUS_VALIDATION=run
|
||||
-> run HARNESS_ABAQUS_VALIDATION_COMMANDS only
|
||||
-> never generate reference CSVs
|
||||
```
|
||||
|
||||
## Abaqus UserSubroutine 확장
|
||||
|
||||
Fortran Abaqus UserSubroutine 개발은 thin Abaqus ABI wrapper와 no-Abaqus kernel/fake-driver tests를 분리한다.
|
||||
기본 workspace validation은 Abaqus를 실행하지 않으며, Intel oneAPI Fortran compiler가 감지되고 `tests/fortran/manifest.json`이 있을 때만 Fortran compile/run tests를 수행한다.
|
||||
Stored reference artifacts under `references/<feature-id>/<model-id>/` are read-only and validated through metadata, source hashes, log tails, and declared CSV files.
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
# PRD: C++/MSVC Harness
|
||||
|
||||
## 목표
|
||||
Codex Harness가 C++/MSVC 프로젝트에서 phase planning, TDD guard, commit validation, workspace validation을 일관되게 수행하게 한다.
|
||||
|
||||
## 사용자
|
||||
- Windows/MSVC 기반 C++ 개발자
|
||||
- Harness phase를 작성하고 실행하는 Codex agent
|
||||
- Harness 결과를 검토하는 reviewer
|
||||
|
||||
## 핵심 기능
|
||||
1. CMake/MSVC/x64/Debug 기반 workspace validation
|
||||
2. C++ source/header 변경에 대한 엄격한 TDD guard
|
||||
3. npm 없이 Python self-test와 CMake/CTest 검증을 수행하는 pre-commit hook
|
||||
4. C++ 프로젝트에 맞는 Harness workflow/review prompt
|
||||
5. CMake project가 아직 없어도 Harness 자체 테스트가 가능한 no-op validation path
|
||||
6. Fortran Abaqus UserSubroutine source 변경에 대한 no-Abaqus TDD guard
|
||||
7. Intel oneAPI Fortran 기반 kernel/fake-driver validation
|
||||
8. Abaqus 실행 opt-in validation과 reference artifact metadata validation
|
||||
|
||||
## 제외 사항
|
||||
- 이전 FESA solver source tree 복원
|
||||
- JavaScript/TypeScript fallback 유지
|
||||
- Abaqus reference artifact 생성 또는 solver reference 비교 구현
|
||||
- Visual Studio `.sln`/`.vcxproj` 전용 MSBuild workflow
|
||||
- 기본 validation에서 Abaqus job 자동 실행
|
||||
@@ -0,0 +1,365 @@
|
||||
# 구조해석 솔버 개발 Agent 구성안
|
||||
|
||||
## 목적
|
||||
이 문서는 Abaqus, Nastran과 같은 유한요소법 기반 구조해석 솔버를 개발하기 위한 AI Agent 운영 구성을 정의한다.
|
||||
|
||||
이번 구성안은 ALL-FEM 논문의 구조를 확장하거나 재사용하는 계획이 아니다. 논문은 Agent 설계를 위한 참고 자료로만 사용하며, 본 프로젝트는 C++/MSVC 기반 독립 솔버 개발 워크플로우를 따른다.
|
||||
|
||||
## 설계 원칙
|
||||
- 기능 요구조건, 이론 정식화, 코드 구현, 검증, 배포 역할을 분리한다.
|
||||
- 실행 가능성만으로 성공을 판단하지 않고, 레퍼런스 결과와 물리량을 비교해 기능 완료를 판정한다.
|
||||
- 테스트는 구현 전에 준비한다. 개발 대상 솔버 테스트와 레퍼런스 솔버 결과 비교 테스트를 함께 사용한다.
|
||||
- Abaqus나 Nastran을 Agent가 직접 실행하지 않는다. `references/`에 저장된 입력 파일과 레퍼런스 CSV 결과를 검증 기준으로 사용한다.
|
||||
- 기본 개발 환경은 C++17 이상, MSVC, CMake, CTest이다.
|
||||
- 모든 기능은 tolerance 기준을 명시하고, 기준을 만족할 때만 배포 후보가 된다.
|
||||
|
||||
## 전체 Agent 구성
|
||||
|
||||
### Coordinator Agent
|
||||
전체 개발 흐름을 관리하는 상위 조정 Agent이다.
|
||||
|
||||
책임:
|
||||
- 기능 개발 요청을 단계별 작업으로 분해한다.
|
||||
- 각 Agent의 산출물을 연결하고 누락된 결정을 추적한다.
|
||||
- 요구조건, 정식화, 테스트, 구현, 검증, 배포 단계의 진행 상태를 관리한다.
|
||||
- 실패 시 어떤 Agent로 되돌릴지 결정한다.
|
||||
|
||||
주요 산출물:
|
||||
- 기능별 개발 계획
|
||||
- 단계별 승인 상태
|
||||
- 실패 원인과 재작업 지시
|
||||
|
||||
### Requirement Agent
|
||||
솔버 기능 요구조건을 정의하는 Agent이다.
|
||||
|
||||
책임:
|
||||
- 해석 기능의 범위, 입력, 출력, 제약조건을 정의한다.
|
||||
- 대상 요소, 재료 모델, 경계조건, 하중 조건, 해석 타입을 명확히 한다.
|
||||
- 검증해야 할 물리량과 tolerance 기준을 정한다.
|
||||
|
||||
주요 산출물:
|
||||
- 기능 요구조건 문서
|
||||
- acceptance criteria
|
||||
- 검증 물리량 목록
|
||||
|
||||
예시 검증 물리량:
|
||||
- 절점 변위
|
||||
- 반력
|
||||
- 요소 내력
|
||||
- 응력
|
||||
- 변형률
|
||||
- 에너지 또는 잔차 기준
|
||||
|
||||
### Research Agent
|
||||
책, 논문, 매뉴얼, 공개 benchmark를 조사하는 Agent이다.
|
||||
|
||||
책임:
|
||||
- 유한요소 정식화에 필요한 이론 자료를 수집한다.
|
||||
- 요소별 benchmark와 patch test 사례를 찾는다.
|
||||
- Abaqus/Nastran 결과와 비교할 수 있는 공개 예제 또는 문헌 해를 조사한다.
|
||||
- 자료의 신뢰도와 적용 범위를 평가한다.
|
||||
|
||||
주요 산출물:
|
||||
- 연구자료 요약
|
||||
- 공식, 가정, 한계 정리
|
||||
- benchmark 후보 목록
|
||||
|
||||
### Formulation Agent
|
||||
코드 구현을 위한 유한요소 정식화를 작성하는 Agent이다.
|
||||
|
||||
책임:
|
||||
- 약형, 형상함수, B matrix, constitutive matrix, 수치적분, 요소 강성 행렬을 정의한다.
|
||||
- 자유도 배치, 좌표계, 단위계, 부호 규약을 명확히 한다.
|
||||
- 선형/비선형, 정적/동적, small/large deformation 여부를 구분한다.
|
||||
- 구현 가능한 알고리즘 형태로 정식화를 정리한다.
|
||||
|
||||
주요 산출물:
|
||||
- 요소별 정식화 문서
|
||||
- 알고리즘 의사코드
|
||||
- 수치적분 규칙
|
||||
- edge case와 singular case 목록
|
||||
|
||||
### Numerical Review Agent
|
||||
정식화와 수치 알고리즘을 독립 검토하는 Agent이다.
|
||||
|
||||
책임:
|
||||
- 수식의 차원, 부호, 좌표 변환, 적분 규칙을 검토한다.
|
||||
- rigid body mode, patch test, symmetry, positive definiteness 등 기본 수치 조건을 확인한다.
|
||||
- locking, hourglass mode, ill-conditioning 같은 위험을 식별한다.
|
||||
- 구현 전 정식화 오류를 줄인다.
|
||||
|
||||
주요 산출물:
|
||||
- 정식화 리뷰 결과
|
||||
- 수치 위험 목록
|
||||
- 추가 테스트 요구사항
|
||||
|
||||
### I/O Definition Agent
|
||||
솔버 입력과 출력 데이터 구조를 정의하는 Agent이다.
|
||||
|
||||
책임:
|
||||
- mesh, node, element, material, section, boundary condition, load, step 입력 형식을 정의한다.
|
||||
- 출력 CSV 또는 result file schema를 정의한다.
|
||||
- Abaqus input file과 내부 입력 모델 사이의 대응 관계를 정리한다.
|
||||
- 결과 비교를 위해 레퍼런스 CSV와 구현 솔버 출력의 컬럼 규약을 맞춘다.
|
||||
|
||||
주요 산출물:
|
||||
- 입력 데이터 schema
|
||||
- 출력 데이터 schema
|
||||
- 결과 비교용 CSV schema
|
||||
- 단위와 좌표계 규약
|
||||
|
||||
### Reference Model Agent
|
||||
TDD와 검증에 사용할 테스트 모델을 준비하는 Agent이다.
|
||||
|
||||
책임:
|
||||
- 개발 대상 기능을 검증할 최소 모델, benchmark 모델, 회귀 모델을 설계한다.
|
||||
- `references/`에 보관할 Abaqus input file과 Abaqus 결과 CSV 요구사항을 정의한다.
|
||||
- 레퍼런스 결과에 포함될 물리량과 tolerance를 명시한다.
|
||||
- 테스트 모델이 요구조건을 실제로 검증하는지 확인한다.
|
||||
|
||||
중요 제약:
|
||||
- Agent는 Abaqus를 직접 실행하지 않는다.
|
||||
- Abaqus 해석 결과는 사람이 생성하거나 별도 승인된 절차로 생성해 `references/`에 저장한다.
|
||||
- Agent는 저장된 reference artifact만 사용해 비교한다.
|
||||
|
||||
권장 reference 구조:
|
||||
```text
|
||||
references/
|
||||
<feature-name>/
|
||||
model.inp
|
||||
metadata.json
|
||||
displacements.csv
|
||||
reactions.csv
|
||||
element_forces.csv
|
||||
stresses.csv
|
||||
```
|
||||
|
||||
### Implementation Planning Agent
|
||||
코드 구현 전에 작업 단위와 테스트 순서를 설계하는 Agent이다.
|
||||
|
||||
책임:
|
||||
- 요구조건과 정식화를 C++ 구현 작업으로 분해한다.
|
||||
- 먼저 작성할 단위 테스트, 통합 테스트, 레퍼런스 비교 테스트를 정의한다.
|
||||
- 기존 architecture와 ownership boundary에 맞춰 변경 파일을 제한한다.
|
||||
- 구현 Agent가 따라야 할 acceptance criteria를 제공한다.
|
||||
|
||||
주요 산출물:
|
||||
- 구현 계획
|
||||
- 테스트 우선순위
|
||||
- 변경 파일 후보
|
||||
- acceptance checklist
|
||||
|
||||
### Implementation Agent
|
||||
C++ 코드를 구현하는 Agent이다.
|
||||
|
||||
책임:
|
||||
- 테스트를 먼저 작성하고 실패를 확인한다.
|
||||
- 정식화와 I/O schema에 맞춰 최소 구현을 작성한다.
|
||||
- C++17 이상, MSVC, CMake, CTest 환경에서 동작하도록 구현한다.
|
||||
- 불필요한 일반화나 speculative abstraction을 피한다.
|
||||
|
||||
주요 산출물:
|
||||
- C++ source/header 변경
|
||||
- 테스트 코드
|
||||
- CMake/CTest 변경
|
||||
|
||||
### Build/Test Executor Agent
|
||||
빌드와 테스트를 실행하는 Agent이다.
|
||||
|
||||
책임:
|
||||
- Harness validation을 실행한다.
|
||||
- MSVC x64 Debug CMake configure/build/CTest 결과를 수집한다.
|
||||
- 실패 로그를 요약하고 Correction Agent에 전달한다.
|
||||
|
||||
기본 검증 명령:
|
||||
```powershell
|
||||
python scripts/validate_workspace.py
|
||||
```
|
||||
|
||||
검증 대상:
|
||||
- CMake configure
|
||||
- MSVC Debug build
|
||||
- CTest
|
||||
- Harness self-test
|
||||
|
||||
### Correction Agent
|
||||
빌드, 테스트, 런타임 실패를 수정하는 Agent이다.
|
||||
|
||||
책임:
|
||||
- 실패 로그를 원인별로 분류한다.
|
||||
- 컴파일 오류, 링크 오류, 테스트 실패, 결과 비교 실패를 구분한다.
|
||||
- 최소 수정으로 실패를 해결한다.
|
||||
- 같은 실패가 반복되면 Coordinator Agent에 차단 상태를 보고한다.
|
||||
|
||||
주요 산출물:
|
||||
- 수정 패치
|
||||
- 실패 원인 요약
|
||||
- 재검증 요청
|
||||
|
||||
### Reference Verification Agent
|
||||
구현 솔버 결과와 저장된 레퍼런스 결과를 비교하는 Agent이다.
|
||||
|
||||
책임:
|
||||
- 구현 솔버 결과 CSV와 `references/`의 Abaqus CSV를 비교한다.
|
||||
- 절점 변위, 반력, 요소 내력, 응력의 tolerance 만족 여부를 평가한다.
|
||||
- absolute tolerance, relative tolerance, norm-based tolerance를 구분해 적용한다.
|
||||
- 결과 차이가 tolerance 밖이면 원인 후보를 분류한다.
|
||||
|
||||
주요 산출물:
|
||||
- reference comparison report
|
||||
- 실패한 물리량과 위치
|
||||
- 최대 오차, 평균 오차, norm 오차
|
||||
|
||||
### Physics Evaluation Agent
|
||||
수치 결과가 물리적으로 타당한지 검토하는 Agent이다.
|
||||
|
||||
책임:
|
||||
- 레퍼런스와 수치적으로 비슷해도 물리적으로 이상한 결과가 있는지 확인한다.
|
||||
- 변위 방향, 반력 평형, 응력 집중, 대칭 조건, rigid body mode를 검토한다.
|
||||
- 테스트 모델이 기능을 충분히 검증하지 못하면 추가 모델을 요구한다.
|
||||
|
||||
주요 산출물:
|
||||
- 물리 검토 결과
|
||||
- 추가 검증 모델 요구사항
|
||||
- release 가능 여부 의견
|
||||
|
||||
### Release Agent
|
||||
기능 배포 준비를 담당하는 Agent이다.
|
||||
|
||||
책임:
|
||||
- 요구조건, 테스트, 레퍼런스 비교, 물리 검토가 모두 통과했는지 확인한다.
|
||||
- 기능 문서와 release note를 정리한다.
|
||||
- 알려진 제한사항과 tolerance 기준을 기록한다.
|
||||
|
||||
주요 산출물:
|
||||
- release checklist
|
||||
- 기능 문서
|
||||
- known limitations
|
||||
|
||||
## 개발 프로세스 매핑
|
||||
|
||||
| 개발 과정 | 담당 Agent | 필수 산출물 |
|
||||
| --- | --- | --- |
|
||||
| 1. 솔버 기능 요구조건 정의 | Requirement Agent | 요구조건, acceptance criteria |
|
||||
| 2. 연구자료 조사 | Research Agent | 자료 요약, benchmark 후보 |
|
||||
| 3. 유한요소 정식화 | Formulation Agent, Numerical Review Agent | 정식화 문서, 리뷰 결과 |
|
||||
| 4. 입출력 데이터 정의 | I/O Definition Agent | 입력/출력 schema |
|
||||
| 5. TDD 테스트모델 작성 | Reference Model Agent, Implementation Planning Agent | 테스트 모델, reference artifact 요구사항 |
|
||||
| 6. 코드 구현 | Implementation Agent | C++ 코드, 테스트 |
|
||||
| 7. 레퍼런스 결과 비교 검증 | Reference Verification Agent, Physics Evaluation Agent | 비교 리포트, 물리 검토 |
|
||||
| 8. tolerance 만족 시 완료 | Coordinator Agent | 기능 완료 승인 |
|
||||
| 9. 기능 배포 | Release Agent | release checklist, 문서 |
|
||||
|
||||
## 표준 작업 흐름
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A["기능 요청"] --> B["Requirement Agent"]
|
||||
B --> C["Research Agent"]
|
||||
C --> D["Formulation Agent"]
|
||||
D --> E["Numerical Review Agent"]
|
||||
E --> F["I/O Definition Agent"]
|
||||
F --> G["Reference Model Agent"]
|
||||
G --> H["Implementation Planning Agent"]
|
||||
H --> I["Implementation Agent"]
|
||||
I --> J["Build/Test Executor Agent"]
|
||||
J --> K{"빌드/테스트 통과?"}
|
||||
K -- "아니오" --> L["Correction Agent"]
|
||||
L --> I
|
||||
K -- "예" --> M["Reference Verification Agent"]
|
||||
M --> N{"tolerance 만족?"}
|
||||
N -- "아니오" --> O["Physics Evaluation Agent"]
|
||||
O --> L
|
||||
N -- "예" --> P["Physics Evaluation Agent"]
|
||||
P --> Q{"물리 검토 통과?"}
|
||||
Q -- "아니오" --> L
|
||||
Q -- "예" --> R["Release Agent"]
|
||||
```
|
||||
|
||||
## 검증 Gate
|
||||
|
||||
### Gate 1: 요구조건 승인
|
||||
통과 조건:
|
||||
- 대상 기능과 제외 범위가 명확하다.
|
||||
- 입력, 출력, tolerance, 검증 물리량이 정의되어 있다.
|
||||
- 레퍼런스 비교 방식이 정해져 있다.
|
||||
|
||||
### Gate 2: 정식화 승인
|
||||
통과 조건:
|
||||
- 요소 정식화와 수치적분 규칙이 문서화되어 있다.
|
||||
- 좌표계, 자유도, 부호 규약이 명확하다.
|
||||
- Numerical Review Agent가 주요 수치 위험을 검토했다.
|
||||
|
||||
### Gate 3: 테스트 준비 승인
|
||||
통과 조건:
|
||||
- 구현 전 실패해야 하는 테스트가 정의되어 있다.
|
||||
- `references/` artifact 요구사항이 명확하다.
|
||||
- 최소 모델, benchmark 모델, 회귀 모델의 목적이 구분되어 있다.
|
||||
|
||||
### Gate 4: 구현 검증
|
||||
통과 조건:
|
||||
- CMake/MSVC/CTest validation이 통과한다.
|
||||
- 단위 테스트와 통합 테스트가 통과한다.
|
||||
- Harness TDD guard를 만족한다.
|
||||
|
||||
### Gate 5: 레퍼런스 검증
|
||||
통과 조건:
|
||||
- 저장된 Abaqus CSV 결과와 구현 솔버 결과가 tolerance 안에 있다.
|
||||
- 절점 변위, 반력, 요소 내력, 응력 비교 결과가 리포트로 남아 있다.
|
||||
- 실패한 물리량이 없거나 승인된 known limitation으로 기록되어 있다.
|
||||
|
||||
### Gate 6: 배포 승인
|
||||
통과 조건:
|
||||
- 요구조건의 acceptance criteria가 모두 만족된다.
|
||||
- 문서와 release note가 준비되어 있다.
|
||||
- 남은 제한사항이 명확히 기록되어 있다.
|
||||
|
||||
## Reference CSV 비교 기준
|
||||
|
||||
권장 비교 방식:
|
||||
- scalar 값: absolute tolerance와 relative tolerance를 함께 적용한다.
|
||||
- vector 값: component-wise 비교와 norm 비교를 함께 기록한다.
|
||||
- stress tensor: component-wise 비교를 기본으로 하고, 필요한 경우 principal stress 또는 von Mises stress를 추가 비교한다.
|
||||
- 반력: 전체 하중 평형과 개별 구속 자유도 반력을 모두 확인한다.
|
||||
|
||||
권장 리포트 항목:
|
||||
- model name
|
||||
- compared quantity
|
||||
- number of compared rows
|
||||
- maximum absolute error
|
||||
- maximum relative error
|
||||
- RMS error
|
||||
- worst node or element id
|
||||
- pass/fail
|
||||
|
||||
## 반복 실패 처리
|
||||
|
||||
반복 실패가 발생하면 Correction Agent가 무한 수정 루프를 계속하지 않는다. 다음 중 하나로 분류해 Coordinator Agent에 보고한다.
|
||||
|
||||
- 요구조건 불명확
|
||||
- 정식화 오류 가능성
|
||||
- reference artifact 오류 가능성
|
||||
- I/O schema 불일치
|
||||
- 구현 결함
|
||||
- tolerance 기준 부적절
|
||||
- 테스트 모델이 기능을 과도하게 또는 불충분하게 검증함
|
||||
|
||||
Coordinator Agent는 분류 결과에 따라 Requirement, Formulation, I/O Definition, Reference Model, Implementation Agent 중 적절한 단계로 되돌린다.
|
||||
|
||||
## 초기 적용 우선순위
|
||||
|
||||
1. 선형 정적 해석의 최소 골격
|
||||
2. 1D truss 또는 bar element
|
||||
3. 2D plane stress/plane strain element
|
||||
4. 3D solid element
|
||||
5. material model 확장
|
||||
6. nonlinear 또는 dynamic analysis 확장
|
||||
|
||||
각 단계는 요구조건, 정식화, 테스트모델, 구현, 레퍼런스 비교, 배포 Gate를 독립적으로 통과해야 한다.
|
||||
|
||||
## 운영 메모
|
||||
|
||||
- Agent 산출물은 가능한 한 문서, 테스트, 비교 리포트 형태로 남긴다.
|
||||
- 사람이 생성한 Abaqus reference artifact의 출처와 생성 조건을 `metadata.json`에 기록한다.
|
||||
- reference artifact가 바뀌면 기능 구현 변경과 같은 수준으로 검토한다.
|
||||
- 기능 완료 판정은 코드 실행 성공이 아니라 reference validation과 physics evaluation 통과를 기준으로 한다.
|
||||
@@ -0,0 +1,181 @@
|
||||
# FESA Solver Skill Rebuild Plan
|
||||
|
||||
## 목적
|
||||
|
||||
이 문서는 FESA 유한요소 기반 구조해석 솔버 개발에 사용할 project-local Codex skill 구성을 정의한다.
|
||||
|
||||
Agent는 역할과 책임 단위이고, skill은 여러 Agent가 반복적으로 사용하는 절차와 검증 도구 단위다. 따라서 skill은 Agent와 1:1로 대응하지 않는다. 대신 요구조건, 연구, 정식화, I/O 계약, reference model, C++ TDD 구현, reference 비교, 물리 검토, release readiness처럼 솔버 개발 과정에서 반복되는 작업 흐름을 기준으로 구성한다.
|
||||
|
||||
## 설계 원칙
|
||||
|
||||
- Skill은 `.codex/skills/<skill-name>/SKILL.md`에 둔다.
|
||||
- 각 skill은 필수 frontmatter `name`, `description`과 UI metadata `agents/openai.yaml`을 가진다.
|
||||
- Skill 본문은 agent TOML의 역할 설명을 반복하지 않고, 입력, 절차, 산출물, 금지사항, 품질 gate, handoff를 정의한다.
|
||||
- Skill은 `AGENTS.md`와 `docs/SOLVER_AGENT_DESIGN.md`를 공통 상위 기준으로 읽는다.
|
||||
- Abaqus, Nastran 또는 reference solver 실행은 skill 범위에 포함하지 않는다.
|
||||
- Reference CSV 생성 또는 수정은 skill 범위에 포함하지 않는다.
|
||||
- C++ 구현 관련 skill은 C++17 이상, MSVC, CMake, CTest, TDD 원칙을 따른다.
|
||||
- 기본 workspace validation 명령은 `python scripts/validate_workspace.py`이다.
|
||||
|
||||
## Skill 구성
|
||||
|
||||
| Skill | 적용 개발 과정 | 주요 사용자 Agent | 대표 산출물 |
|
||||
| --- | --- | --- | --- |
|
||||
| `fesa-requirements-baseline` | 1. 솔버 기능 요구조건 정의 | Requirement Agent, Coordinator Agent | `docs/requirements/<feature-id>.md` |
|
||||
| `fesa-research-evidence` | 2. 책, 논문 등 연구자료 조사 | Research Agent, Formulation Agent | `docs/research/<feature-id>-research.md` |
|
||||
| `fesa-formulation-spec` | 3. 코드 구현을 위한 유한요소 정식화 | Formulation Agent, Implementation Planning Agent | `docs/formulations/<feature-id>-formulation.md` |
|
||||
| `fesa-numerical-review` | 3. 정식화 독립 수치 검토 | Numerical Review Agent, Coordinator Agent | `docs/numerical-reviews/<feature-id>-review.md` |
|
||||
| `fesa-io-contract` | 4. 솔버 입출력 데이터 정의 | I/O Definition Agent, Reference Verification Agent | `docs/io-definitions/<feature-id>-io.md` |
|
||||
| `fesa-reference-models` | 5. TDD/reference 테스트모델 작성 | Reference Model Agent, Implementation Planning Agent | `docs/reference-models/<feature-id>-reference-models.md` |
|
||||
| `fesa-cpp-msvc-tdd` | 6. 코드 구현 및 build/test correction | Implementation Planning Agent, Implementation Agent, Build/Test Executor Agent, Correction Agent | implementation plan/report, build/test report, correction report |
|
||||
| `fesa-reference-comparison` | 7. reference solver 결과와 구현 solver 결과 비교 | Reference Verification Agent | `docs/reference-verifications/<feature-id>-reference-verification.md` |
|
||||
| `fesa-physics-sanity` | 8. tolerance 통과 후 물리 타당성 검토 | Physics Evaluation Agent | `docs/physics-evaluations/<feature-id>-physics-evaluation.md` |
|
||||
| `fesa-release-readiness` | 9. 솔버 기능 배포 준비 | Release Agent, Coordinator Agent | `docs/releases/<feature-id>-release.md` |
|
||||
|
||||
## 개발 과정별 사용 예
|
||||
|
||||
예시 기능: `linear-truss-1d`
|
||||
|
||||
1. Requirement Agent는 `fesa-requirements-baseline`을 사용해 기능 범위, 제외 범위, 입력, 출력, 검증 물리량, tolerance, `Requirement Verification Matrix`를 작성한다.
|
||||
2. Research Agent는 `fesa-research-evidence`를 사용해 truss/bar element 이론, benchmark 후보, source reliability, applicability limits를 정리한다.
|
||||
3. Formulation Agent는 `fesa-formulation-spec`을 사용해 strong form, weak form, shape functions, B matrix, element stiffness, output recovery를 정리한다.
|
||||
4. Numerical Review Agent는 `fesa-numerical-review`를 사용해 rigid body modes, patch test, stiffness symmetry, Jacobian, locking 위험을 검토하고 `pass-for-implementation-planning` 여부를 판단한다.
|
||||
5. I/O Definition Agent는 `fesa-io-contract`를 사용해 지원할 Abaqus `.inp` keyword subset과 `displacements.csv`, `reactions.csv`, `element_forces.csv`, `stresses.csv` schema를 정의한다.
|
||||
6. Reference Model Agent는 `fesa-reference-models`를 사용해 `references/linear-truss-1d/<model-id>/` artifact bundle 계약과 coverage matrix를 작성한다.
|
||||
7. Implementation Planning Agent와 Implementation Agent는 `fesa-cpp-msvc-tdd`를 사용해 테스트 작성, 실패 확인, 최소 구현, CMake/CTest 등록, validation을 수행한다.
|
||||
8. Reference Verification Agent는 `fesa-reference-comparison`을 사용해 구현 solver CSV와 저장된 reference CSV를 tolerance 기준으로 비교한다.
|
||||
9. Physics Evaluation Agent는 `fesa-physics-sanity`를 사용해 global equilibrium, reaction consistency, displacement direction, symmetry, model coverage를 검토한다.
|
||||
10. Release Agent는 `fesa-release-readiness`를 사용해 gate evidence, acceptance traceability, known limitations, release notes draft를 작성한다.
|
||||
|
||||
## Skill별 핵심 계약
|
||||
|
||||
### `fesa-requirements-baseline`
|
||||
|
||||
- 기능 요청을 검증 가능한 요구조건 baseline으로 만든다.
|
||||
- `shall` 문장과 `FESA-REQ-<FEATURE>-###` id를 사용한다.
|
||||
- 모든 `must` 요구조건은 verification method와 acceptance criteria를 가져야 한다.
|
||||
- FEM 정식화, C++ 구현, reference CSV 생성, release readiness 판단은 하지 않는다.
|
||||
|
||||
### `fesa-research-evidence`
|
||||
|
||||
- 연구 질문, source inventory, source reliability tier, benchmark 후보를 정리한다.
|
||||
- 검증된 사실과 추론을 분리한다.
|
||||
- source gap은 open issue로 남긴다.
|
||||
- FEM 정식화 확정이나 reference value 생성을 하지 않는다.
|
||||
|
||||
### `fesa-formulation-spec`
|
||||
|
||||
- strong form, weak form, discretization, kinematics, constitutive contract, element equations를 구분해 작성한다.
|
||||
- Jacobian, derivative transform, numerical integration, output recovery, numerical risks를 명시한다.
|
||||
- C++ API, parser, file ownership은 설계하지 않는다.
|
||||
- Numerical Review Agent 검토 전 최종 승인 상태로 두지 않는다.
|
||||
|
||||
### `fesa-numerical-review`
|
||||
|
||||
- 정식화를 수치 알고리즘 계약으로 독립 검토한다.
|
||||
- dimensions, signs, DOF ordering, coordinate transforms, Jacobian, integration rule, stiffness symmetry, rigid body modes, patch test, hourglass, locking을 확인한다.
|
||||
- `pass-for-implementation-planning`은 구현 계획 가능 상태만 의미한다.
|
||||
- 정식화 문서를 직접 수정하지 않는다.
|
||||
|
||||
### `fesa-io-contract`
|
||||
|
||||
- FESA solver input이 지원할 Abaqus `.inp` subset을 정의한다.
|
||||
- model data와 history data를 구분한다.
|
||||
- 내부 semantic model 계약과 output/CSV schema를 정의한다.
|
||||
- parser 구현이나 full Abaqus compatibility claim은 하지 않는다.
|
||||
|
||||
### `fesa-reference-models`
|
||||
|
||||
- smoke, analytical, patch test, benchmark, regression, negative/invalid-input 모델을 구분한다.
|
||||
- `references/<feature-id>/<model-id>/` artifact bundle 계약을 정의한다.
|
||||
- `model.inp`, `metadata.json`, `displacements.csv`, `reactions.csv`, `element_forces.csv`, `stresses.csv`를 기준 artifact로 둔다.
|
||||
- Reference CSV가 없으면 완료 상태가 아니라 `needs-reference-artifacts`로 둔다.
|
||||
|
||||
### `fesa-cpp-msvc-tdd`
|
||||
|
||||
- C++ 구현을 `RED -> GREEN -> VERIFY` 순서로 수행한다.
|
||||
- C++ production 변경에는 관련 C++ test file이 있어야 한다.
|
||||
- 기본 검증 명령:
|
||||
|
||||
```powershell
|
||||
python -m unittest discover -s scripts -p "test_*.py"
|
||||
python scripts/validate_workspace.py
|
||||
ctest -C Debug -R <feature-or-label>
|
||||
```
|
||||
|
||||
- 실패는 `configure | compile | link | test | reference-comparison | harness | environment | upstream-contract`로 분류한다.
|
||||
- 요구조건, 정식화, I/O 계약, reference artifact, tolerance policy를 바꾸지 않는다.
|
||||
|
||||
### `fesa-reference-comparison`
|
||||
|
||||
- `ARTIFACT CHECK -> COMPARE -> CLASSIFY -> REPORT` 순서로 수행한다.
|
||||
- `metadata.json`, schema version, units, coordinate system, step/frame identity, ID matching, output location, tolerance source를 확인한다.
|
||||
- max absolute error, max relative error, RMS error, norm error, missing rows, extra rows를 보고한다.
|
||||
- Reference pass는 physics validation이나 release readiness를 의미하지 않는다.
|
||||
|
||||
### `fesa-physics-sanity`
|
||||
|
||||
- Reference comparison 통과 후 물리 타당성을 검토한다.
|
||||
- global equilibrium, reaction consistency, displacement direction, symmetry, element force balance, stress/strain sanity, rigid body mode, model coverage를 확인한다.
|
||||
- 문서화된 물리 기대값이 없으면 pass를 선언하지 않는다.
|
||||
- `pass-for-release-agent`는 Release Agent 검토 가능 상태만 의미한다.
|
||||
|
||||
### `fesa-release-readiness`
|
||||
|
||||
- `GATE AUDIT -> TRACEABILITY CHECK -> RELEASE DOCUMENTATION -> RELEASE VERDICT` 순서로 수행한다.
|
||||
- `pass-for-reference-verification`, `pass-for-physics-evaluation`, `pass-for-release-agent` evidence를 요구한다.
|
||||
- Known Limitations와 Release Notes Draft를 작성한다.
|
||||
- 사용자 명시 요청 없이 publish, deploy, package, tag, commit, external release를 수행하지 않는다.
|
||||
|
||||
## Agent와 Skill 관계
|
||||
|
||||
| Agent | 주로 사용하는 Skill |
|
||||
| --- | --- |
|
||||
| Coordinator Agent | `fesa-requirements-baseline`, `fesa-reference-models`, `fesa-release-readiness` |
|
||||
| Requirement Agent | `fesa-requirements-baseline` |
|
||||
| Research Agent | `fesa-research-evidence` |
|
||||
| Formulation Agent | `fesa-formulation-spec` |
|
||||
| Numerical Review Agent | `fesa-numerical-review` |
|
||||
| I/O Definition Agent | `fesa-io-contract` |
|
||||
| Reference Model Agent | `fesa-reference-models` |
|
||||
| Implementation Planning Agent | `fesa-formulation-spec`, `fesa-reference-models`, `fesa-cpp-msvc-tdd` |
|
||||
| Implementation Agent | `fesa-cpp-msvc-tdd` |
|
||||
| Build/Test Executor Agent | `fesa-cpp-msvc-tdd` |
|
||||
| Correction Agent | `fesa-cpp-msvc-tdd` |
|
||||
| Reference Verification Agent | `fesa-reference-comparison`, `fesa-io-contract` |
|
||||
| Physics Evaluation Agent | `fesa-physics-sanity` |
|
||||
| Release Agent | `fesa-release-readiness` |
|
||||
|
||||
## 검증 기준
|
||||
|
||||
Skill 구성 검증은 `scripts/test_fesa_solver_skills.py`가 담당한다.
|
||||
|
||||
검증 항목:
|
||||
|
||||
- 10개 solver skill의 `SKILL.md` 존재 여부
|
||||
- YAML frontmatter의 `name`, `description`
|
||||
- 공통 섹션: `Inputs`, `Workflow`, `Output Contract`, `Boundaries`, `Quality Gate`, `Handoff`
|
||||
- `AGENTS.md`와 `docs/SOLVER_AGENT_DESIGN.md` 참조
|
||||
- skill-specific 핵심 문구와 산출물 경로
|
||||
- `agents/openai.yaml` UI metadata
|
||||
- 이 문서가 아니라 실제 skill 파일이 기준이 되도록 `docs/SOLVER_SKILL_DESIGN.md`에 대한 skill 본문 참조 금지
|
||||
|
||||
검증 명령:
|
||||
|
||||
```powershell
|
||||
python -m unittest discover -s scripts -p "test_*.py"
|
||||
python scripts/validate_workspace.py
|
||||
```
|
||||
|
||||
Skill 구조 검증:
|
||||
|
||||
```powershell
|
||||
python C:\Users\user\.codex\skills\.system\skill-creator\scripts\quick_validate.py .codex\skills\<skill-name>
|
||||
```
|
||||
|
||||
## v1 범위
|
||||
|
||||
- v1은 `SKILL.md`와 `agents/openai.yaml`만 포함한다.
|
||||
- 별도 `scripts/`, `references/`, `assets/`는 만들지 않는다.
|
||||
- 반복 사용 중 절차가 안정화되면 deterministic comparison script, reference artifact template, report template 같은 resource를 별도 후속 작업으로 분리한다.
|
||||
- 이 문서는 skill 구성을 설명하는 계획 문서이며, 실제 실행 지침의 source of truth는 각 `.codex/skills/<skill-name>/SKILL.md`이다.
|
||||
@@ -0,0 +1,157 @@
|
||||
# Build/Test Report 문서 작성 가이드
|
||||
|
||||
이 디렉터리는 Build/Test Executor Agent가 작성하거나 제안하는 기능별 build/test 실행 리포트를 보관하는 위치다.
|
||||
|
||||
Build/Test Executor Agent는 Implementation Agent 이후 독립적으로 C++/MSVC/CMake/CTest 검증을 실행하고, 실패를 분류해 다음 agent로 handoff한다. 이 agent는 source code, tests, CMake files, requirements, formulations, I/O contracts, reference artifacts, tolerance policies를 수정하지 않는다. build artifacts와 test outputs는 `build/` 아래 생성될 수 있다.
|
||||
|
||||
기본 문서명은 `docs/build-test-reports/<feature-id>-build-test.md` 형식을 사용한다.
|
||||
|
||||
## Build/Test Executor Agent 역할
|
||||
|
||||
수행한다:
|
||||
- `python scripts/validate_workspace.py`를 기본 검증 명령으로 실행한다.
|
||||
- implementation plan/report에 명시된 경우 harness self-test와 feature-specific CTest를 실행한다.
|
||||
- `HARNESS_VALIDATION_COMMANDS`, `CMakePresets.json`의 `msvc-debug`, 기본 CMake/MSVC x64 Debug 경로 중 어떤 검증 경로가 사용되었는지 기록한다.
|
||||
- configure, compile, link, test, reference-comparison, harness, environment, upstream-contract 실패를 구분한다.
|
||||
- command, exit code, duration, stdout/stderr tail, failed test name을 요약한다.
|
||||
- 실패 원인에 따라 Implementation Agent, Correction Agent, Reference Verification Agent, Implementation Planning Agent 중 handoff 대상을 제안한다.
|
||||
|
||||
수행하지 않는다:
|
||||
- source code를 수정하지 않는다.
|
||||
- tests를 수정하지 않는다.
|
||||
- CMake files를 수정하지 않는다.
|
||||
- requirements, formulations, I/O contracts, reference artifacts, tolerance policies를 수정하지 않는다.
|
||||
- Abaqus, Nastran 또는 reference solver를 실행하지 않는다.
|
||||
- reference CSV를 생성하지 않는다.
|
||||
- release readiness, reference tolerance success, physics validation success를 승인하지 않는다.
|
||||
- 최종 reference verification report를 작성하지 않는다.
|
||||
|
||||
## 실행 순서
|
||||
|
||||
기본 순서는 implementation plan/report에 따라 다음 중 필요한 항목만 실행한다.
|
||||
|
||||
```powershell
|
||||
python -m unittest discover -s scripts -p "test_*.py"
|
||||
python scripts/validate_fortran.py
|
||||
python scripts/validate_reference_artifacts.py
|
||||
ctest -C Debug -R <feature-or-label>
|
||||
python scripts/validate_workspace.py
|
||||
```
|
||||
|
||||
`scripts/validate_workspace.py`의 command discovery 우선순위는 다음과 같다.
|
||||
|
||||
1. `HARNESS_VALIDATION_COMMANDS`
|
||||
2. `CMakePresets.json`의 `msvc-debug`
|
||||
3. 기본 CMake/MSVC x64 Debug 명령
|
||||
4. `CMakeLists.txt`가 없고 override도 없으면 안내 메시지와 함께 성공 종료
|
||||
|
||||
For Abaqus UserSubroutine work, workspace validation also supports:
|
||||
|
||||
- `HARNESS_FORTRAN_VALIDATION=off|detect|auto|compile`
|
||||
- `HARNESS_FORTRAN_COMPILER=auto|ifx|ifort`
|
||||
- `HARNESS_ONEAPI_VARS_BAT=<path>`
|
||||
- `HARNESS_ABAQUS_VALIDATION=off|detect|run`
|
||||
- `HARNESS_ABAQUS_COMMAND=<path-or-name>`
|
||||
- `HARNESS_ABAQUS_VALIDATION_COMMANDS=<newline commands>`
|
||||
- `HARNESS_ABAQUS_USE_ONEAPI_ENV=auto|on|off`
|
||||
|
||||
Default validation does not run Abaqus jobs. Abaqus execution is valid only when `HARNESS_ABAQUS_VALIDATION=run` and explicit commands are provided.
|
||||
|
||||
기본 CMake/MSVC x64 Debug 명령은 다음과 같다.
|
||||
|
||||
```powershell
|
||||
cmake -S . -B build/msvc-debug -G "Visual Studio 17 2022" -A x64
|
||||
cmake --build build/msvc-debug --config Debug
|
||||
ctest --test-dir build/msvc-debug --output-on-failure -C Debug
|
||||
```
|
||||
|
||||
## 문서 템플릿
|
||||
|
||||
```markdown
|
||||
# <feature title> Build/Test Report
|
||||
|
||||
## Metadata
|
||||
- feature_id: <feature-id>
|
||||
- source_implementation_report: <path or N/A>
|
||||
- source_implementation_plan: docs/implementation-plans/<feature-id>-implementation-plan.md
|
||||
- status: pass-for-reference-verification | needs-correction | needs-environment-fix | needs-upstream-decision | blocked
|
||||
- owner_agent: build-test-executor-agent
|
||||
- date: <YYYY-MM-DD>
|
||||
|
||||
## Execution Environment
|
||||
- os: <OS and version>
|
||||
- generator: Visual Studio 17 2022 | <observed generator>
|
||||
- platform: x64 | <observed platform>
|
||||
- config: Debug | <observed config>
|
||||
- build_dir: build/msvc-debug | <observed build dir>
|
||||
- active_override_env_vars: HARNESS_VALIDATION_COMMANDS | HARNESS_CMAKE_GENERATOR | HARNESS_CMAKE_PLATFORM | HARNESS_CMAKE_CONFIG | HARNESS_BUILD_DIR | none
|
||||
- command_discovery_path: HARNESS_VALIDATION_COMMANDS | CMakePresets.json msvc-debug | default CMake/MSVC x64 Debug | no-CMake informational success
|
||||
|
||||
## Command Log Summary
|
||||
|
||||
| order | command | exit_code | duration | stdout_stderr_tail |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 1 | python -m unittest discover -s scripts -p "test_*.py" | <code> | <duration> | <tail summary> |
|
||||
| 2 | ctest -C Debug -R <feature-or-label> | <code> | <duration> | <tail summary> |
|
||||
| 3 | python scripts/validate_workspace.py | <code> | <duration> | <tail summary> |
|
||||
|
||||
## Validation Results
|
||||
|
||||
| validation_stage | result | evidence |
|
||||
| --- | --- | --- |
|
||||
| harness self-test | pass | fail | skipped | <summary> |
|
||||
| configure | pass | fail | skipped | <summary> |
|
||||
| build | pass | fail | skipped | <summary> |
|
||||
| CTest | pass | fail | skipped | <summary> |
|
||||
| feature-specific tests | pass | fail | skipped | <summary> |
|
||||
|
||||
## Failure Classification
|
||||
|
||||
- classification: configure | compile | link | test | reference-comparison | harness | environment | upstream-contract | N/A
|
||||
- primary_failure: <short reason>
|
||||
- first_failed_command: <command or N/A>
|
||||
- evidence_tail: <short excerpt or summary>
|
||||
|
||||
## Failed Test Inventory
|
||||
|
||||
| test_name | label | command | failure_summary |
|
||||
| --- | --- | --- | --- |
|
||||
| <test name> | <label or N/A> | <command> | <summary> |
|
||||
|
||||
## Handoff Recommendation
|
||||
|
||||
| target_agent | reason | required_input |
|
||||
| --- | --- | --- |
|
||||
| Implementation Agent | <when implementation-owned failure is found> | <command log and failing test> |
|
||||
| Correction Agent | <when focused repair/rollback is needed> | <failure classification and changed files from implementation report> |
|
||||
| Reference Verification Agent | <when build/test passes and reference comparison report is next> | <passing command evidence> |
|
||||
| Implementation Planning Agent | <when plan/test contract is incomplete> | <missing or contradictory plan item> |
|
||||
|
||||
## No-Change Assertion
|
||||
- source_files_modified: false
|
||||
- test_files_modified: false
|
||||
- cmake_files_modified: false
|
||||
- reference_artifacts_modified: false
|
||||
- notes: <observed no-change evidence or exception>
|
||||
|
||||
## Open Issues
|
||||
- <environment gap, missing CMake preset, missing reference artifact, repeated failure, or upstream-contract issue>
|
||||
```
|
||||
|
||||
## 상태 값
|
||||
|
||||
- `pass-for-reference-verification`: build/test 검증이 통과해 Reference Verification Agent로 넘길 수 있다.
|
||||
- `needs-correction`: compile, link, ordinary test, implementation-owned failure가 있어 Correction Agent 또는 Implementation Agent 작업이 필요하다.
|
||||
- `needs-environment-fix`: MSVC, CMake generator, Python, path, permission 등 로컬 환경 문제로 검증이 막혔다.
|
||||
- `needs-upstream-decision`: implementation plan, requirements, formulation, I/O, reference artifact, tolerance policy가 불완전하거나 충돌한다.
|
||||
- `blocked`: 반복 실패 또는 외부 조건 때문에 사용자나 Coordinator Agent 결정 없이는 진행할 수 없다.
|
||||
|
||||
## 품질 기준
|
||||
|
||||
- 모든 실행 명령과 exit code를 기록해야 한다.
|
||||
- 실패 로그는 전체 원문을 복제하지 않고 마지막 핵심 구간과 실패 원인을 요약한다.
|
||||
- configure, compile, link, test, reference-comparison, harness, environment, upstream-contract 실패를 구분한다.
|
||||
- no-CMake 상황은 `scripts/validate_workspace.py` 정책대로 안내 메시지와 성공 종료로 기록한다.
|
||||
- 성공 판정은 build/test 통과까지만 의미한다.
|
||||
- reference tolerance, physics validation, release readiness는 판정하지 않는다.
|
||||
- upstream 계약 문제는 Implementation Agent에 임의 수정으로 넘기지 않고 적절한 upstream agent로 handoff한다.
|
||||
@@ -0,0 +1,189 @@
|
||||
# Coordination Report 문서 작성 가이드
|
||||
|
||||
이 디렉터리는 Coordinator Agent가 작성하거나 제안하는 기능별 workflow coordination report를 보관하는 위치다.
|
||||
|
||||
Coordinator Agent는 FESA solver 기능 개발의 전체 lifecycle에서 gate evidence, handoff, rework loop, blocker, user decision을 관리한다. 이 Agent는 specialist agent의 기술 판정을 대체하지 않고, 다음 agent가 어떤 입력으로 무엇을 산출해야 하는지 명확히 기록한다.
|
||||
|
||||
기본 문서명은 `docs/coordination/<feature-id>-coordination.md` 형식을 사용한다.
|
||||
|
||||
## Coordinator Agent 역할
|
||||
|
||||
수행한다:
|
||||
- feature request를 `feature_id`, target capability, initial priority, expected first agent로 분류한다.
|
||||
- existing docs/reports/artifacts를 읽고 workflow state를 audit한다.
|
||||
- gate별 source evidence, missing evidence, contradictory evidence를 inventory로 만든다.
|
||||
- 다음 agent handoff package를 작성한다.
|
||||
- repeated failure와 blocker를 추적하고 escalation target을 정한다.
|
||||
- final workflow closure를 기록한다.
|
||||
|
||||
수행하지 않는다:
|
||||
- source code를 수정하지 않는다.
|
||||
- tests를 수정하지 않는다.
|
||||
- CMake files 또는 build configuration을 수정하지 않는다.
|
||||
- build/test validation을 실행하지 않는다.
|
||||
- reference comparison을 실행하지 않는다.
|
||||
- physics evaluation을 실행하지 않는다.
|
||||
- requirements, formulations, I/O contracts, numerical review reports를 수정하지 않는다.
|
||||
- reference artifacts 또는 tolerance policies를 수정하지 않는다.
|
||||
- Abaqus, Nastran 또는 reference solver를 실행하지 않는다.
|
||||
- reference CSV를 생성하지 않는다.
|
||||
- subagents를 자동 spawn하지 않는다.
|
||||
- release readiness를 독립적으로 승인하지 않는다.
|
||||
|
||||
## 실행 순서
|
||||
|
||||
Coordinator Agent는 다음 순서를 따른다.
|
||||
|
||||
```text
|
||||
INTAKE -> STATE AUDIT -> GATE DECISION -> HANDOFF PACKAGE -> STATUS REPORT
|
||||
```
|
||||
|
||||
`STATE AUDIT`에서는 다음 evidence를 확인한다.
|
||||
|
||||
- Requirement Agent output
|
||||
- Research Agent output
|
||||
- Formulation Agent output
|
||||
- Numerical Review Agent output
|
||||
- I/O Definition Agent output
|
||||
- Reference Model Agent output
|
||||
- Implementation Planning Agent output
|
||||
- Implementation Agent report
|
||||
- Build/Test Executor Agent report
|
||||
- Correction Agent report
|
||||
- Reference Verification Agent report
|
||||
- Physics Evaluation Agent report
|
||||
- Release Agent report
|
||||
- validation command evidence: `python scripts/validate_workspace.py`
|
||||
|
||||
## 문서 템플릿
|
||||
|
||||
```markdown
|
||||
# <feature title> Coordination Report
|
||||
|
||||
## Metadata
|
||||
- feature_id: <feature-id>
|
||||
- status: intake | needs-requirements | needs-research | needs-formulation | needs-numerical-review | needs-io-definition | needs-reference-model | needs-implementation-plan | ready-for-implementation | needs-build-test | needs-correction | needs-reference-verification | needs-physics-evaluation | needs-release | ready-for-release | completed | needs-user-decision | blocked
|
||||
- owner_agent: coordinator-agent
|
||||
- date: <YYYY-MM-DD>
|
||||
- source_docs: <docs/reports used>
|
||||
|
||||
## Feature Request Summary
|
||||
- requested_feature: <short summary>
|
||||
- current_goal: <current coordination goal>
|
||||
- included_scope: <included scope>
|
||||
- excluded_scope: <excluded scope>
|
||||
- priority: <initial priority>
|
||||
|
||||
## Current Workflow State
|
||||
|
||||
| item | value | notes |
|
||||
| --- | --- | --- |
|
||||
| current_gate | <gate> | <notes> |
|
||||
| completed_outputs | <outputs> | <notes> |
|
||||
| missing_outputs | <outputs> | <notes> |
|
||||
| active_blockers | <blockers> | <notes> |
|
||||
| next_eligible_gate | <gate> | <notes> |
|
||||
|
||||
## Gate Evidence Inventory
|
||||
|
||||
| gate | owning_agent | expected_evidence | observed_evidence | status | notes |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| requirements | Requirement Agent | docs/requirements/<feature-id>.md | <path/status> | pass | fail | missing | <notes> |
|
||||
| research | Research Agent | docs/research/<feature-id>-research.md | <path/status> | pass | fail | missing | <notes> |
|
||||
| formulation | Formulation Agent | docs/formulations/<feature-id>-formulation.md | <path/status> | pass | fail | missing | <notes> |
|
||||
| numerical_review | Numerical Review Agent | docs/numerical-reviews/<feature-id>-review.md | <path/status> | pass | fail | missing | <notes> |
|
||||
| io_definition | I/O Definition Agent | docs/io-definitions/<feature-id>-io.md | <path/status> | pass | fail | missing | <notes> |
|
||||
| reference_model | Reference Model Agent | docs/reference-models/<feature-id>-reference-models.md | <path/status> | pass | fail | missing | <notes> |
|
||||
| implementation_planning | Implementation Planning Agent | docs/implementation-plans/<feature-id>-implementation-plan.md | <path/status> | pass | fail | missing | <notes> |
|
||||
| implementation | Implementation Agent | implementation report | <path/status> | pass | fail | missing | <notes> |
|
||||
| build_test | Build/Test Executor Agent | pass-for-reference-verification | <path/status> | pass | fail | missing | <notes> |
|
||||
| correction | Correction Agent | correction report when needed | <path/status> | pass | fail | missing | <notes> |
|
||||
| reference_verification | Reference Verification Agent | pass-for-physics-evaluation | <path/status> | pass | fail | missing | <notes> |
|
||||
| physics_evaluation | Physics Evaluation Agent | pass-for-release-agent | <path/status> | pass | fail | missing | <notes> |
|
||||
| release | Release Agent | ready-for-release | <path/status> | pass | fail | missing | <notes> |
|
||||
|
||||
## Decision Log
|
||||
|
||||
| date | decision_type | decision | source_evidence | rationale |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| <YYYY-MM-DD> | gate transition | blocker | user decision | rework decision | <decision> | <path/status> | <reason> |
|
||||
|
||||
## Next Agent Handoff
|
||||
|
||||
| field | value |
|
||||
| --- | --- |
|
||||
| target_agent | <agent name> |
|
||||
| reason | <why this agent is next> |
|
||||
| required_inputs | <docs/reports/artifacts> |
|
||||
| expected_output | <expected report or artifact contract> |
|
||||
| acceptance_gate | <status or gate required after handoff> |
|
||||
| stop_condition | <when the agent should stop and hand back> |
|
||||
| missing_evidence | <missing inputs or decisions> |
|
||||
|
||||
## Traceability Snapshot
|
||||
|
||||
| requirement_id | gate | report | artifact | status | current_disposition |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| <req-id> | <gate> | <report path> | <artifact path> | <status> | <released | deferred | blocked | pending> |
|
||||
|
||||
## Risk and Blocker Register
|
||||
|
||||
| risk_or_blocker | category | owner | status | next_action |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| <issue> | upstream ambiguity | repeated failure | reference artifact gap | environment blocker | <agent/user> | open | mitigated | blocked | <action> |
|
||||
|
||||
## Rework Loop Control
|
||||
|
||||
| failure_classification | correction_attempt_count | escalation_target | stop_condition | notes |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| <classification> | <count> | <agent/user> | <condition> | <notes> |
|
||||
|
||||
## No-Change Assertion
|
||||
- source_files_modified: false
|
||||
- test_files_modified: false
|
||||
- cmake_files_modified: false
|
||||
- reference_artifacts_modified: false
|
||||
- tolerance_policies_modified: false
|
||||
- notes: <observed no-change evidence or exception>
|
||||
|
||||
## Open Issues
|
||||
- <unresolved user decision, missing evidence, contradictory report, or blocked transition>
|
||||
```
|
||||
|
||||
## 상태 값
|
||||
|
||||
- `intake`: 기능 요청은 들어왔지만 첫 handoff가 완료되지 않았다.
|
||||
- `needs-requirements`: Requirement Agent가 요구조건을 정의하거나 수정해야 한다.
|
||||
- `needs-research`: Research Agent가 source-backed research evidence를 제공하거나 수정해야 한다.
|
||||
- `needs-formulation`: Formulation Agent가 FEM 정식화를 작성하거나 수정해야 한다.
|
||||
- `needs-numerical-review`: Numerical Review Agent가 정식화를 검토하거나 재검토해야 한다.
|
||||
- `needs-io-definition`: I/O Definition Agent가 Abaqus input/output 계약을 정의하거나 수정해야 한다.
|
||||
- `needs-reference-model`: Reference Model Agent가 reference model artifacts를 정의하거나 수정해야 한다.
|
||||
- `needs-implementation-plan`: Implementation Planning Agent가 TDD implementation plan을 작성하거나 수정해야 한다.
|
||||
- `ready-for-implementation`: implementation plan이 준비되었고 downstream 구현을 막는 upstream gate가 없다.
|
||||
- `needs-build-test`: 구현 이후 독립 Build/Test Executor 검증이 필요하다.
|
||||
- `needs-correction`: implementation-owned failure가 있어 Correction Agent가 필요하다.
|
||||
- `needs-reference-verification`: Build/Test evidence가 `pass-for-reference-verification`이다.
|
||||
- `needs-physics-evaluation`: Reference Verification report가 `pass-for-physics-evaluation`이다.
|
||||
- `needs-release`: Physics Evaluation report가 `pass-for-release-agent`이다.
|
||||
- `ready-for-release`: Release Agent report가 `ready-for-release`이고 final closure 기록이 필요하다.
|
||||
- `completed`: Release Agent report가 `ready-for-release`이고 Coordinator가 final workflow closure를 기록했다.
|
||||
- `needs-user-decision`: 사용자 또는 project decision 없이는 안전하게 진행할 수 없다.
|
||||
- `blocked`: 사용자 결정, 환경 변경, upstream correction 없이는 진행할 수 없다.
|
||||
|
||||
## Handoff 원칙
|
||||
|
||||
- 다음 단계 handoff는 source evidence, missing evidence, expected output, acceptance gate, stop condition을 포함해야 한다.
|
||||
- specialist agent가 소유한 기술 판정을 Coordinator가 대체하지 않는다.
|
||||
- `ready-for-implementation`은 Implementation Planning report가 `ready-for-implementation`일 때만 가능하다.
|
||||
- `needs-reference-verification`은 Build/Test evidence가 `pass-for-reference-verification`일 때만 가능하다.
|
||||
- `needs-physics-evaluation`은 Reference Verification report가 `pass-for-physics-evaluation`일 때만 가능하다.
|
||||
- `needs-release`는 Physics Evaluation report가 `pass-for-release-agent`일 때만 가능하다.
|
||||
- `completed`는 Release Agent report가 `ready-for-release`이고 final workflow closure가 기록된 경우에만 가능하다.
|
||||
- 동일 failure classification이 두 번 이상 반복되거나 upstream 계약 변경이 필요하면 `needs-user-decision` 또는 `blocked`로 전환한다.
|
||||
|
||||
## 검증 기준
|
||||
|
||||
- Coordinator Agent config와 문서 템플릿 검증은 Python unittest로 수행한다.
|
||||
- workspace 검증은 `python scripts/validate_workspace.py`를 사용한다.
|
||||
- 현재 repository에 CMake 프로젝트가 없으면 harness 정책에 따라 no-CMake validation 경로가 성공으로 기록될 수 있다.
|
||||
@@ -0,0 +1,153 @@
|
||||
# Correction Report 문서 작성 가이드
|
||||
|
||||
이 디렉터리는 Correction Agent가 작성하거나 제안하는 기능별 correction report를 보관하는 위치다.
|
||||
|
||||
Correction Agent는 Build/Test Executor Agent, Reference Verification Agent, Physics Evaluation Agent가 전달한 실패를 triage하고, implementation-owned failure만 최소 수정으로 복구한다. 이 agent는 source, header, test, CMake 수정은 수행할 수 있지만 requirements, formulations, I/O contracts, reference artifacts, tolerance policies는 수정하지 않는다.
|
||||
|
||||
기본 문서명은 `docs/corrections/<feature-id>-correction.md` 형식을 사용한다.
|
||||
|
||||
## Correction Agent 역할
|
||||
|
||||
수행한다:
|
||||
- 실패 로그와 implementation report를 읽고 failure classification을 먼저 확정한다.
|
||||
- configure, compile, link, test, reference-comparison, harness, environment, upstream-contract 실패를 구분한다.
|
||||
- implementation-owned failure에 한해 source/header/test/CMake를 최소 수정한다.
|
||||
- 수정 후 targeted command를 먼저 실행하고 `python scripts/validate_workspace.py`를 실행한다.
|
||||
- harness, hook, agent config 관련 수정에서는 `python -m unittest discover -s scripts -p "test_*.py"`도 실행한다.
|
||||
- 반복 실패 또는 upstream 계약 문제를 Coordinator Agent나 관련 upstream agent로 handoff한다.
|
||||
|
||||
수행하지 않는다:
|
||||
- requirements를 수정하지 않는다.
|
||||
- formulations를 수정하지 않는다.
|
||||
- I/O contracts를 수정하지 않는다.
|
||||
- numerical review reports를 수정하지 않는다.
|
||||
- reference artifacts를 수정하지 않는다.
|
||||
- tolerance policies를 수정하지 않는다.
|
||||
- Abaqus, Nastran 또는 reference solver를 실행하지 않는다.
|
||||
- reference CSV를 생성하지 않는다.
|
||||
- release readiness, reference tolerance success, physics validation success를 승인하지 않는다.
|
||||
- 최종 reference verification report 또는 physics validation report를 작성하지 않는다.
|
||||
|
||||
## 실행 순서
|
||||
|
||||
Correction Agent는 항상 다음 순서를 따른다.
|
||||
|
||||
```text
|
||||
TRIAGE -> MINIMAL FIX -> VERIFY -> REPORT
|
||||
```
|
||||
|
||||
기본 검증 명령은 다음과 같다.
|
||||
|
||||
```powershell
|
||||
<targeted command that reproduced the failure>
|
||||
python scripts/validate_workspace.py
|
||||
python -m unittest discover -s scripts -p "test_*.py"
|
||||
```
|
||||
|
||||
`python -m unittest discover -s scripts -p "test_*.py"`는 harness, hook, agent config, Python validation behavior가 correction 범위에 포함될 때 실행한다.
|
||||
|
||||
## Failure Classification
|
||||
|
||||
- `configure`: CMake configure, preset, generator, cache setup 실패
|
||||
- `compile`: C++ compilation 실패
|
||||
- `link`: linker, symbol resolution, target dependency 실패
|
||||
- `test`: CTest, unit, integration, parser/I/O, ordinary regression test 실패
|
||||
- `reference-comparison`: 저장된 reference artifact와 deterministic comparison 실패
|
||||
- `harness`: Python harness self-test, TDD guard, hook, validation script 실패
|
||||
- `environment`: MSVC, CMake, Python, path, permission, generator, local dependency 문제
|
||||
- `upstream-contract`: requirements, formulation, I/O, reference artifact, tolerance, implementation plan 불일치 또는 누락
|
||||
|
||||
## 문서 템플릿
|
||||
|
||||
```markdown
|
||||
# <feature title> Correction Report
|
||||
|
||||
## Metadata
|
||||
- feature_id: <feature-id>
|
||||
- source_failure_report: docs/build-test-reports/<feature-id>-build-test.md | <reference/physics report path>
|
||||
- source_implementation_report: <path or N/A>
|
||||
- source_implementation_plan: docs/implementation-plans/<feature-id>-implementation-plan.md
|
||||
- status: corrected-for-build-test | corrected-for-reference-verification | needs-build-test-rerun | needs-environment-fix | needs-upstream-decision | blocked
|
||||
- owner_agent: correction-agent
|
||||
- date: <YYYY-MM-DD>
|
||||
|
||||
## Failure Triage
|
||||
- classification: configure | compile | link | test | reference-comparison | harness | environment | upstream-contract
|
||||
- first_failed_command: <command>
|
||||
- failed_target_or_test: <target, test, label, or N/A>
|
||||
- evidence_tail: <short relevant tail, not full log>
|
||||
- triage_decision: implementation-owned | environment-owned | upstream-owned | blocked
|
||||
|
||||
## Root Cause Summary
|
||||
- root_cause_type: implementation defect | test defect | CMake registration issue | environment issue | upstream-contract issue
|
||||
- summary: <short explanation>
|
||||
- why_minimal_fix_is_allowed: <contract or failure evidence>
|
||||
|
||||
## Correction Scope
|
||||
|
||||
| file | change_type | reason | in_scope |
|
||||
| --- | --- | --- | --- |
|
||||
| include/fesa/<module>/<file>.hpp | source/header | <reason> | true |
|
||||
| src/<module>/<file>.cpp | source | <reason> | true |
|
||||
| tests/<module>/<file>_test.cpp | test | <reason> | true |
|
||||
| CMakeLists.txt | CMake | <reason> | true |
|
||||
|
||||
Excluded files:
|
||||
- requirements: unchanged
|
||||
- formulations: unchanged
|
||||
- I/O contracts: unchanged
|
||||
- reference artifacts: unchanged
|
||||
- tolerance policies: unchanged
|
||||
|
||||
## Verification Evidence
|
||||
|
||||
| order | command | exit_code | result | evidence |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 1 | <targeted command> | <code> | pass | fail | <summary> |
|
||||
| 2 | python scripts/validate_workspace.py | <code> | pass | fail | <summary> |
|
||||
| 3 | python -m unittest discover -s scripts -p "test_*.py" | <code or skipped> | pass | fail | skipped | <summary> |
|
||||
|
||||
## Traceability
|
||||
|
||||
| requirement_id | task_id | test_id | failing_command | corrected_file | acceptance_criterion |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| <req-id or N/A> | <task-id or N/A> | <test-id or N/A> | <command> | <file> | <criterion> |
|
||||
|
||||
## Handoff Recommendation
|
||||
|
||||
| target_agent | reason | required_input |
|
||||
| --- | --- | --- |
|
||||
| Build/Test Executor Agent | <independent full validation required> | <commands and correction summary> |
|
||||
| Reference Verification Agent | <reference comparison rerun required> | <corrected-for-reference-verification evidence> |
|
||||
| Physics Evaluation Agent | <physics sanity rerun required> | <corrected solver behavior evidence> |
|
||||
| Implementation Agent | <new implementation task required> | <unfixed implementation gap> |
|
||||
| upstream agent | <contract issue> | <required upstream decision> |
|
||||
| Coordinator Agent | <repeated failure or blocked state> | <classification history and stop condition> |
|
||||
|
||||
## Stop Condition
|
||||
- repeated_failure: true | false
|
||||
- upstream_ambiguity: true | false
|
||||
- reference_artifact_gap: true | false
|
||||
- environment_blocker: true | false
|
||||
- next_required_decision: <decision or N/A>
|
||||
```
|
||||
|
||||
## 상태 값
|
||||
|
||||
- `corrected-for-build-test`: correction이 Build/Test Executor Agent 재실행 단계로 넘어갈 수 있다.
|
||||
- `corrected-for-reference-verification`: correction이 Reference Verification Agent 재실행 단계로 넘어갈 수 있다.
|
||||
- `needs-build-test-rerun`: targeted correction은 통과했지만 독립 build/test 재실행이 필요하다.
|
||||
- `needs-environment-fix`: 로컬 toolchain, generator, Python, path, permission 문제가 correction 또는 verification을 막는다.
|
||||
- `needs-upstream-decision`: upstream contract, reference artifact, tolerance, formulation ambiguity가 안전한 수정을 막는다.
|
||||
- `blocked`: 사용자 또는 Coordinator Agent 결정 없이는 안전하게 진행할 수 없다.
|
||||
|
||||
## 품질 기준
|
||||
|
||||
- 수정 전 failure classification을 기록해야 한다.
|
||||
- 모든 변경은 실패 로그 또는 implementation plan acceptance criterion에 trace되어야 한다.
|
||||
- production C++ 수정에는 관련 테스트 또는 기존 실패 테스트가 있어야 한다.
|
||||
- requirements, formulations, I/O contracts, reference artifacts, tolerance policies는 수정하지 않는다.
|
||||
- 실패 로그는 전체 원문을 복제하지 않고 핵심 tail과 원인 요약만 기록한다.
|
||||
- 동일 classification이 두 번 반복되면 Coordinator Agent 또는 관련 upstream agent로 handoff한다.
|
||||
- 성공 판정은 correction verification까지만 의미한다.
|
||||
- release readiness, reference tolerance success, physics validation success는 판정하지 않는다.
|
||||
@@ -0,0 +1,148 @@
|
||||
# 정식화 문서 작성 가이드
|
||||
|
||||
이 디렉터리는 Formulation Agent가 작성하거나 제안한 기능별 유한요소 정식화 문서를 보관하는 위치다.
|
||||
|
||||
기본 파일명은 `docs/formulations/<feature-id>-formulation.md` 형식을 사용한다. 각 문서는 Requirement Agent의 요구조건과 Research Agent의 연구 브리프를 입력으로 받아 Implementation Planning Agent와 Implementation Agent가 사용할 수 있는 수학/알고리즘 계약을 제공해야 한다.
|
||||
|
||||
## Formulation Agent 역할
|
||||
|
||||
Formulation Agent는 구현 가능한 FEM 정식화 문서를 작성한다.
|
||||
|
||||
수행한다:
|
||||
- strong form, weak form, discretization을 정리한다.
|
||||
- shape functions, `B` matrix 또는 kinematic operator를 정의한다.
|
||||
- constitutive contract, element residual/internal force, stiffness/tangent matrix를 정리한다.
|
||||
- numerical integration, mapping, Jacobian 규칙을 명시한다.
|
||||
- output recovery, algorithm pseudocode, edge case, numerical risk를 정리한다.
|
||||
- Numerical Review Agent가 검토할 handoff 항목을 남긴다.
|
||||
|
||||
수행하지 않는다:
|
||||
- C++ 코드를 구현하지 않는다.
|
||||
- C++ API나 파일 구조를 설계하지 않는다.
|
||||
- Abaqus, Nastran 또는 레퍼런스 솔버를 직접 실행하지 않는다.
|
||||
- reference CSV 결과를 생성하지 않는다.
|
||||
- release readiness를 승인하지 않는다.
|
||||
- Numerical Review Agent 검토 전 정식화를 최종 승인하지 않는다.
|
||||
|
||||
## 문서 템플릿
|
||||
|
||||
```markdown
|
||||
# <feature title> Formulation
|
||||
|
||||
## Metadata
|
||||
- feature_id: <feature-id>
|
||||
- source_requirement: docs/requirements/<feature-id>.md
|
||||
- source_research: docs/research/<feature-id>-research.md
|
||||
- status: draft | needs-research | ready-for-numerical-review
|
||||
- owner_agent: formulation-agent
|
||||
- date: <YYYY-MM-DD>
|
||||
|
||||
## Scope and Assumptions
|
||||
- analysis_type: linear static | nonlinear static | modal | dynamic | other
|
||||
- element_type: <target element>
|
||||
- deformation: small | large | TBD
|
||||
- linearity: linear | nonlinear | TBD
|
||||
- material_model_boundary: <scope>
|
||||
- coordinate_system: <global/local coordinates>
|
||||
- units: <unit system>
|
||||
|
||||
## Primary Variables and DOFs
|
||||
- nodal_variables: <variables>
|
||||
- dof_ordering: <ordering>
|
||||
- sign_convention: <convention>
|
||||
- constrained_free_dof_assumptions: <assumptions>
|
||||
|
||||
## Strong Form and Boundary Conditions
|
||||
- governing_equation: <equation>
|
||||
- dirichlet_boundary: <essential BC>
|
||||
- neumann_boundary: <natural BC>
|
||||
- natural_boundary_terms: <terms>
|
||||
|
||||
## Weak or Variational Form
|
||||
- test_functions: <definition>
|
||||
- integration_by_parts: <steps>
|
||||
- internal_virtual_work: <expression>
|
||||
- external_virtual_work: <expression>
|
||||
|
||||
## Discretization
|
||||
- interpolation: <field interpolation>
|
||||
- shape_functions: <shape functions>
|
||||
- partition_of_unity_check: <expected check>
|
||||
- kronecker_delta_check: <expected check>
|
||||
- nodal_layout: <layout>
|
||||
|
||||
## Kinematics
|
||||
- strain_displacement_relation: <relation>
|
||||
- B_matrix_or_kinematic_operator: <definition>
|
||||
- deformation_gradient: <definition or N/A>
|
||||
- strain_measure: <definition or N/A>
|
||||
|
||||
## Constitutive Contract
|
||||
- elasticity_matrix_or_stress_update: <contract>
|
||||
- material_state_variables: <variables or N/A>
|
||||
- assumptions_and_constraints: <assumptions>
|
||||
|
||||
## Element Equations
|
||||
- internal_force_or_residual: <expression>
|
||||
- external_force: <expression>
|
||||
- stiffness_or_tangent_matrix: <expression>
|
||||
- mass_or_damping: <required expression or N/A>
|
||||
- vector_matrix_dimensions: <dimensions>
|
||||
|
||||
## Mapping and Numerical Integration
|
||||
- reference_coordinates: <coordinates>
|
||||
- isoparametric_mapping: <mapping>
|
||||
- jacobian: <definition>
|
||||
- determinant_checks: <validity checks>
|
||||
- gauss_points_and_weights: <rule>
|
||||
- integration_policy: full | reduced | selective | analytical | TBD
|
||||
|
||||
## Output Recovery
|
||||
- displacement: <location and convention>
|
||||
- reaction: <calculation>
|
||||
- element_force: <calculation>
|
||||
- strain: <location and recovery>
|
||||
- stress: <location and recovery>
|
||||
- nodal_extrapolation: <policy or N/A>
|
||||
|
||||
## Algorithm Pseudocode
|
||||
```text
|
||||
math-level element routine and assembly flow only
|
||||
no C++ signatures, class names, or file paths
|
||||
```
|
||||
|
||||
## Numerical Risks
|
||||
- rigid_body_modes: <risk/check>
|
||||
- patch_test: <expected test>
|
||||
- symmetry: <expected property>
|
||||
- positive_definiteness: <expected property>
|
||||
- hourglass: <risk or N/A>
|
||||
- shear_locking: <risk or N/A>
|
||||
- volumetric_locking: <risk or N/A>
|
||||
- distortion: <risk/check>
|
||||
- singular_jacobian: <risk/check>
|
||||
|
||||
## Open Issues and Downstream Handoff
|
||||
|
||||
### Numerical Review Agent
|
||||
- <derivations, assumptions, numerical risks, open issues>
|
||||
|
||||
### I/O Definition Agent
|
||||
- <required inputs, outputs, units, coordinate conventions, output locations>
|
||||
|
||||
### Reference Model Agent
|
||||
- <benchmarkable quantities, patch test needs, expected invariants, edge cases>
|
||||
|
||||
### Implementation Planning Agent
|
||||
- <math-level pseudocode, acceptance-relevant quantities, tests to write first>
|
||||
```
|
||||
|
||||
## 품질 기준
|
||||
|
||||
- 요구조건과 연구 브리프에 없는 값을 임의로 확정하지 않는다.
|
||||
- strong form, weak form, discretization, kinematics, constitutive contract, element equations를 구분한다.
|
||||
- shape functions는 가능한 경우 partition of unity와 Kronecker delta 검사를 포함한다.
|
||||
- numerical integration은 integration point, weight, 적분 대상, full/reduced/selective 정책을 포함한다.
|
||||
- mapping은 reference coordinates, Jacobian, determinant validity check를 포함한다.
|
||||
- output recovery는 nodal, element-level, integration-point 위치를 구분한다.
|
||||
- numerical risk는 rigid body modes, patch test, hourglass, locking, Jacobian 문제를 명시한다.
|
||||
@@ -0,0 +1,140 @@
|
||||
# Implementation Plan 문서 작성 가이드
|
||||
|
||||
이 디렉터리는 Implementation Planning Agent가 작성하거나 제안한 기능별 구현계획 문서를 보관하는 위치다.
|
||||
|
||||
Implementation Planning Agent는 승인된 요구조건, 연구 브리프, 정식화, 수치 리뷰, I/O 정의, reference model 계약을 C++/MSVC 구현 전 TDD 작업계획으로 변환한다. Agent는 코드, 테스트, CMake 파일을 작성하지 않고, Abaqus/Nastran을 실행하지 않으며, reference CSV 생성이나 solver 결과 비교, release readiness 승인도 하지 않는다.
|
||||
|
||||
기본 파일명은 `docs/implementation-plans/<feature-id>-implementation-plan.md` 형식을 사용한다. 각 문서는 Implementation Agent가 먼저 작성해야 할 실패 테스트, 최소 구현 순서, CMake/CTest 등록 계획, acceptance traceability를 제공해야 한다.
|
||||
|
||||
## Implementation Planning Agent 역할
|
||||
|
||||
수행한다:
|
||||
- upstream 문서가 구현 계획에 충분한지 Readiness Check를 수행한다.
|
||||
- 요구조건과 정식화를 작은 Work Breakdown task로 나눈다.
|
||||
- unit, integration, parser/I/O, reference-comparison 테스트를 TDD 순서로 정렬한다.
|
||||
- CMake/CTest target, `add_test`, label, `ctest -C Debug` 검증 계획을 정의한다.
|
||||
- candidate source/header/test/CMake 파일과 ownership boundary를 제안한다.
|
||||
- requirement, task, test, reference model, acceptance criterion을 Acceptance Traceability Matrix로 연결한다.
|
||||
- `python scripts/validate_workspace.py`를 포함한 validation command를 명시한다.
|
||||
|
||||
수행하지 않는다:
|
||||
- C++ 코드를 구현하지 않는다.
|
||||
- 테스트 파일을 작성하지 않는다.
|
||||
- CMake 파일을 수정하지 않는다.
|
||||
- CMake/CTest를 실행하지 않는다.
|
||||
- Abaqus, Nastran 또는 레퍼런스 솔버를 직접 실행하지 않는다.
|
||||
- reference CSV를 생성하지 않는다.
|
||||
- solver 결과를 비교하지 않는다.
|
||||
- release readiness를 승인하지 않는다.
|
||||
- C++ API, class name, storage layout, file ownership을 확정하지 않는다.
|
||||
|
||||
## 문서 템플릿
|
||||
|
||||
```markdown
|
||||
# <feature title> Implementation Plan
|
||||
|
||||
## Metadata
|
||||
- feature_id: <feature-id>
|
||||
- source_requirement: docs/requirements/<feature-id>.md
|
||||
- source_research: docs/research/<feature-id>-research.md
|
||||
- source_formulation: docs/formulations/<feature-id>-formulation.md
|
||||
- source_numerical_review: docs/numerical-reviews/<feature-id>-review.md
|
||||
- source_io_definition: docs/io-definitions/<feature-id>-io.md
|
||||
- source_reference_models: docs/reference-models/<feature-id>-reference-models.md
|
||||
- status: draft | needs-upstream-decision | ready-for-implementation | blocked
|
||||
- owner_agent: implementation-planning-agent
|
||||
- date: <YYYY-MM-DD>
|
||||
|
||||
## Readiness Check
|
||||
|
||||
| input | required_status | observed_status | decision |
|
||||
| --- | --- | --- | --- |
|
||||
| requirement | approved or sufficient draft | <status> | proceed | needs-upstream-decision | blocked |
|
||||
| formulation | pass-for-implementation-planning or sufficient draft | <status> | proceed | needs-upstream-decision | blocked |
|
||||
| numerical_review | pass-for-implementation-planning | <status> | proceed | needs-upstream-decision | blocked |
|
||||
| io_definition | ready-for-implementation-planning or sufficient draft | <status> | proceed | needs-upstream-decision | blocked |
|
||||
| reference_models | ready-for-implementation-planning or planned artifacts | <status> | proceed | needs-upstream-decision | blocked |
|
||||
|
||||
## Implementation Scope
|
||||
- included_behavior: <behavior to implement>
|
||||
- excluded_behavior: <behavior explicitly out of scope>
|
||||
- non_goals: <items not to design or implement in this phase>
|
||||
|
||||
## Work Breakdown
|
||||
|
||||
| task_id | order | purpose | upstream_trace | depends_on | expected_test_first |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| TASK-001 | 1 | <small implementation task> | <requirement/formulation/io/reference id> | none | TEST-001 |
|
||||
|
||||
## TDD Test Plan
|
||||
|
||||
| test_id | order | test_type | red_condition | green_condition | linked_task | command |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| TEST-001 | 1 | unit | test fails because behavior is missing | test passes after minimal implementation | TASK-001 | ctest -C Debug -R <test-name> |
|
||||
| TEST-002 | 2 | integration | integrated path fails before implementation | integrated path passes | TASK-002 | ctest -C Debug -R <test-name> |
|
||||
| TEST-003 | 3 | parser/I/O | Abaqus .inp case is not accepted or mapped | input maps to expected semantic model | TASK-003 | ctest -C Debug -R <test-name> |
|
||||
| TEST-004 | 4 | reference-comparison | solver CSV comparison fails before implementation | comparison is within planned tolerance | TASK-004 | ctest -C Debug -R <test-name> |
|
||||
|
||||
## CMake/CTest Plan
|
||||
- target_candidates: <library/test executable targets>
|
||||
- add_test_needs: <CTest registration needs>
|
||||
- labels: unit | integration | reference | parser | io
|
||||
- msvc_config: Debug
|
||||
- expected_feature_command: ctest -C Debug -R <feature-or-label>
|
||||
- workspace_validation: python scripts/validate_workspace.py
|
||||
|
||||
## Candidate Files and Ownership
|
||||
|
||||
| file_candidate | purpose | owner_boundary | notes |
|
||||
| --- | --- | --- | --- |
|
||||
| include/fesa/<module>/<candidate>.hpp | <candidate public header role> | candidate only, not final API | <notes> |
|
||||
| src/<module>/<candidate>.cpp | <candidate implementation role> | candidate only, not final API | <notes> |
|
||||
| tests/<module>/<candidate>_test.cpp | <test role> | required before production change | <notes> |
|
||||
| CMakeLists.txt | <target/test registration role> | candidate only | <notes> |
|
||||
|
||||
## Data Flow Contract
|
||||
1. Abaqus `.inp` input follows docs/io-definitions/<feature-id>-io.md.
|
||||
2. Parser/I/O path maps model data and history data into the internal semantic model.
|
||||
3. Solver path produces displacement, reaction, element force, stress, or feature-specific result CSV.
|
||||
4. Reference comparison tests compare solver CSV against `references/<feature-id>/<model-id>/` artifacts.
|
||||
|
||||
## Acceptance Traceability Matrix
|
||||
|
||||
| requirement_id | task_id | test_id | reference_model_id | acceptance_criterion | status |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| <req-id> | TASK-001 | TEST-001 | <model-id or N/A> | <criterion> | draft |
|
||||
|
||||
## Validation Commands
|
||||
```powershell
|
||||
python -m unittest discover -s scripts -p "test_*.py"
|
||||
python scripts/validate_workspace.py
|
||||
ctest -C Debug -R <feature-or-label>
|
||||
```
|
||||
|
||||
## Risks and Downstream Handoff
|
||||
|
||||
### Implementation Agent
|
||||
- <task order, tests to write first, candidate files, acceptance criteria>
|
||||
|
||||
### Build/Test Executor Agent
|
||||
- <validation commands, expected CTest labels, feature-specific commands>
|
||||
|
||||
### Correction Agent
|
||||
- <likely failure classifications and upstream rollback guidance>
|
||||
|
||||
### Reference Verification Agent
|
||||
- <planned CSV comparison tests, reference model ids, tolerance mapping, ID matching assumptions>
|
||||
|
||||
## Open Issues
|
||||
- <requirement, formulation, I/O, reference artifact, tolerance, or architecture issue>
|
||||
```
|
||||
|
||||
## 품질 기준
|
||||
|
||||
- 모든 `must` requirement는 최소 하나의 task와 test에 연결되어야 한다.
|
||||
- C++ production 변경마다 선행 테스트 파일 또는 테스트 추가 계획이 있어야 한다.
|
||||
- reference artifact가 필요한 기능은 `references/<feature-id>/<model-id>/`와 CSV 비교 테스트 계획을 가져야 한다.
|
||||
- CMake/CTest 계획은 MSVC x64 Debug 검증 경로와 호환되어야 한다.
|
||||
- 구현 계획은 테스트 작성, 실패 확인, 최소 구현, validation 순서를 명시해야 한다.
|
||||
- upstream 문서가 불완전하면 값을 임의로 채우지 않고 `needs-upstream-decision` 또는 `blocked`로 표시한다.
|
||||
- release 완료나 reference tolerance 통과 판정은 하지 않는다.
|
||||
@@ -0,0 +1,180 @@
|
||||
# I/O 정의 문서 작성 가이드
|
||||
|
||||
이 디렉터리는 I/O Definition Agent가 작성하거나 제안한 기능별 입출력 정의 문서를 보관하는 위치다.
|
||||
|
||||
FESA 솔버의 입력 파일은 Abaqus input file이다. 다만 초기 FESA는 Abaqus 전체 문법 호환을 목표로 하지 않고, 기능별로 지원할 Abaqus keyword subset과 내부 모델 매핑을 명확히 정의한다.
|
||||
|
||||
기본 파일명은 `docs/io-definitions/<feature-id>-io.md` 형식을 사용한다. 각 문서는 Requirement Agent, Formulation Agent, Numerical Review Agent의 산출물을 입력으로 받아 Abaqus `.inp` 입력 계약과 결과 CSV schema를 정의해야 한다.
|
||||
|
||||
## I/O Definition Agent 역할
|
||||
|
||||
I/O Definition Agent는 Abaqus input file subset, 내부 solver model mapping, output request mapping, comparison CSV schema를 정의한다.
|
||||
|
||||
수행한다:
|
||||
- 기능별 supported Abaqus keyword subset을 정의한다.
|
||||
- unsupported, ignored-with-warning, requires-user-decision keyword 정책을 정의한다.
|
||||
- model data와 history data를 내부 solver 개념으로 매핑한다.
|
||||
- node, element, set, material, section, boundary condition, load, step, output request의 의미 계약을 정의한다.
|
||||
- `displacements.csv`, `reactions.csv`, `element_forces.csv`, `stresses.csv` schema를 정의한다.
|
||||
|
||||
수행하지 않는다:
|
||||
- parser를 구현하지 않는다.
|
||||
- C++ API나 파일 구조를 설계하지 않는다.
|
||||
- Abaqus, Nastran 또는 레퍼런스 솔버를 직접 실행하지 않는다.
|
||||
- reference CSV 결과를 생성하지 않는다.
|
||||
- solver 결과와 reference 결과를 비교하지 않는다.
|
||||
- release readiness를 승인하지 않는다.
|
||||
- 명시적으로 정의되지 않은 Abaqus full compatibility를 주장하지 않는다.
|
||||
|
||||
## 문서 템플릿
|
||||
|
||||
```markdown
|
||||
# <feature title> I/O Definition
|
||||
|
||||
## Metadata
|
||||
- feature_id: <feature-id>
|
||||
- source_requirement: docs/requirements/<feature-id>.md
|
||||
- source_formulation: docs/formulations/<feature-id>-formulation.md
|
||||
- source_numerical_review: docs/numerical-reviews/<feature-id>-review.md
|
||||
- source_research: docs/research/<feature-id>-research.md
|
||||
- status: draft | needs-user-decision | ready-for-implementation-planning
|
||||
- owner_agent: io-definition-agent
|
||||
- date: <YYYY-MM-DD>
|
||||
|
||||
## Abaqus Input Scope
|
||||
- input_format: Abaqus input file (`.inp`)
|
||||
- abaqus_documentation_source: <version/source URL>
|
||||
- compatibility_disclaimer: FESA supports only the keyword subset defined in this document.
|
||||
|
||||
| keyword | support_status | level | required_parameters | mapped_internal_concept | notes |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| *HEADING | supported | model | N/A | model title | optional |
|
||||
| *INCLUDE | supported | model/history | INPUT | include file | path policy required |
|
||||
| *NODE | supported | model | N/A | node label and coordinates | |
|
||||
| *NSET | supported | model | NSET | node set | sorted/unsorted policy required |
|
||||
| *ELEMENT | supported | model | TYPE | element label, type, connectivity | |
|
||||
| *ELSET | supported | model | ELSET | element set | |
|
||||
| *MATERIAL | supported | model | NAME | material | |
|
||||
| *ELASTIC | supported | model | N/A or TYPE | elastic material data | |
|
||||
| <section keyword> | supported | model | ELSET, MATERIAL | section assignment | e.g. *SOLID SECTION |
|
||||
| *BOUNDARY | supported | model/history | N/A | boundary condition | |
|
||||
| *CLOAD | supported | history | N/A | concentrated load | feature-dependent |
|
||||
| *DLOAD | supported | history | N/A | distributed load | feature-dependent |
|
||||
| *STEP | supported | history | N/A | analysis step | |
|
||||
| <procedure keyword> | supported | history | N/A | analysis procedure | e.g. *STATIC |
|
||||
| *OUTPUT | supported | history | N/A | output request root | |
|
||||
| *NODE OUTPUT | supported | history | N/A | nodal output request | |
|
||||
| *ELEMENT OUTPUT | supported | history | N/A | element output request | |
|
||||
|
||||
## Syntax Policy
|
||||
- case_insensitivity: <policy>
|
||||
- comma_separated_fields: <policy>
|
||||
- comment_lines: lines beginning with `**`
|
||||
- keyword_continuation: <policy>
|
||||
- include_files: <relative path policy>
|
||||
- labels: <case/quote/name policy>
|
||||
- line_length_limit: <policy>
|
||||
- ascii_assumption: <policy>
|
||||
- empty_data_fields: <policy>
|
||||
|
||||
## Model Data Mapping
|
||||
- nodes: <node label, coordinate dimension, coordinate system>
|
||||
- elements: <element label, element type, connectivity>
|
||||
- node_sets: <set name, sorted/unsorted, expansion rules>
|
||||
- element_sets: <set name, expansion rules>
|
||||
- material: <material name and data>
|
||||
- section: <section assignment>
|
||||
- coordinates: <global/local coordinate conventions>
|
||||
- units: <unit system policy>
|
||||
|
||||
## History Data Mapping
|
||||
- steps: <step naming and order>
|
||||
- procedure: <analysis procedure keyword mapping>
|
||||
- boundary_conditions: <boundary condition mapping>
|
||||
- loads: <load keyword mapping>
|
||||
- output_requests: <node/element output mapping>
|
||||
|
||||
## Internal Model Contract
|
||||
- node_label: <semantic contract>
|
||||
- element_label: <semantic contract>
|
||||
- element_type: <semantic contract>
|
||||
- connectivity: <semantic contract>
|
||||
- set_membership: <semantic contract>
|
||||
- material: <semantic contract>
|
||||
- section: <semantic contract>
|
||||
- boundary_condition: <semantic contract>
|
||||
- load: <semantic contract>
|
||||
- step: <semantic contract>
|
||||
- output_request: <semantic contract>
|
||||
|
||||
## Output and CSV Schemas
|
||||
|
||||
### displacements.csv
|
||||
| column | type | description |
|
||||
| --- | --- | --- |
|
||||
| step | string | step name or index |
|
||||
| frame | integer | frame or increment id |
|
||||
| node_id | integer/string | Abaqus node label |
|
||||
| ux | float | displacement component |
|
||||
| uy | float | displacement component or 0/N/A |
|
||||
| uz | float | displacement component or 0/N/A |
|
||||
|
||||
### reactions.csv
|
||||
| column | type | description |
|
||||
| --- | --- | --- |
|
||||
| step | string | step name or index |
|
||||
| frame | integer | frame or increment id |
|
||||
| node_id | integer/string | Abaqus node label |
|
||||
| rfx | float | reaction component |
|
||||
| rfy | float | reaction component or 0/N/A |
|
||||
| rfz | float | reaction component or 0/N/A |
|
||||
|
||||
### element_forces.csv
|
||||
| column | type | description |
|
||||
| --- | --- | --- |
|
||||
| step | string | step name or index |
|
||||
| frame | integer | frame or increment id |
|
||||
| element_id | integer/string | Abaqus element label |
|
||||
| location | string | element/nodal/integration_point location |
|
||||
| component | string | force component name |
|
||||
| value | float | component value |
|
||||
|
||||
### stresses.csv
|
||||
| column | type | description |
|
||||
| --- | --- | --- |
|
||||
| step | string | step name or index |
|
||||
| frame | integer | frame or increment id |
|
||||
| element_id | integer/string | Abaqus element label |
|
||||
| integration_point | integer/string | integration point id or N/A |
|
||||
| component | string | stress component name |
|
||||
| value | float | stress value |
|
||||
|
||||
## Validation Rules
|
||||
- required_fields: <required input fields>
|
||||
- duplicate_labels: <policy>
|
||||
- missing_references: <policy>
|
||||
- unsupported_keywords: unsupported | ignored-with-warning | requires-user-decision
|
||||
- set_expansion: <policy>
|
||||
- coordinate_conventions: <policy>
|
||||
- output_quantity_availability: <policy>
|
||||
|
||||
## Open Issues and Downstream Handoff
|
||||
|
||||
### Reference Model Agent
|
||||
- <Abaqus input examples and reference artifact schema needs>
|
||||
|
||||
### Implementation Planning Agent
|
||||
- <parser acceptance cases, unsupported keyword diagnostics, CSV writer tests>
|
||||
|
||||
### Reference Verification Agent
|
||||
- <CSV schemas, ID matching rules, units, coordinate conventions, tolerance-relevant fields>
|
||||
```
|
||||
|
||||
## 품질 기준
|
||||
|
||||
- 입력 파일은 Abaqus `.inp`임을 명시해야 한다.
|
||||
- Abaqus full compatibility를 주장하지 않고 기능별 supported keyword subset을 명시해야 한다.
|
||||
- model data와 history data의 매핑을 구분해야 한다.
|
||||
- unsupported keyword 처리 정책을 명확히 해야 한다.
|
||||
- 내부 모델 계약은 semantic fields로 작성하고 C++ class/function/API를 확정하지 않는다.
|
||||
- CSV schema는 column name, ID field, component naming, coordinate system, units, step/frame identity, quantity location을 포함해야 한다.
|
||||
@@ -0,0 +1,102 @@
|
||||
# 수치 검토 리포트 작성 가이드
|
||||
|
||||
이 디렉터리는 Numerical Review Agent가 작성하거나 제안한 기능별 수치 검토 리포트를 보관하는 위치다.
|
||||
|
||||
기본 파일명은 `docs/numerical-reviews/<feature-id>-review.md` 형식을 사용한다. 각 리포트는 Formulation Agent의 정식화 문서를 독립 검토해, 구현 계획 단계로 넘겨도 되는지 판단한다.
|
||||
|
||||
## Numerical Review Agent 역할
|
||||
|
||||
Numerical Review Agent는 정식화의 수학적 일관성, 수치 안정성 위험, 검증 준비 상태를 검토한다.
|
||||
|
||||
수행한다:
|
||||
- 수식의 차원, 부호, 좌표 변환, 적분 규칙을 검토한다.
|
||||
- `B` matrix 또는 kinematic operator, constitutive contract, element equation을 검토한다.
|
||||
- rigid body modes, patch test, symmetry, positive definiteness를 확인한다.
|
||||
- hourglass, shear locking, volumetric locking, distortion, singular Jacobian, conditioning 위험을 식별한다.
|
||||
- 구현 계획 전에 필요한 정식화 수정, 연구 보강, reference model 요구사항을 작성한다.
|
||||
|
||||
수행하지 않는다:
|
||||
- C++ 코드를 구현하지 않는다.
|
||||
- 정식화 문서를 직접 수정하지 않는다.
|
||||
- C++ API나 파일 구조를 설계하지 않는다.
|
||||
- Abaqus, Nastran 또는 레퍼런스 솔버를 직접 실행하지 않는다.
|
||||
- reference CSV 결과를 생성하지 않는다.
|
||||
- release readiness를 승인하지 않는다.
|
||||
- 레퍼런스 결과와 구현 솔버 결과의 일치 여부를 판정하지 않는다.
|
||||
|
||||
## 문서 템플릿
|
||||
|
||||
```markdown
|
||||
# <feature title> Numerical Review
|
||||
|
||||
## Metadata
|
||||
- feature_id: <feature-id>
|
||||
- source_formulation: docs/formulations/<feature-id>-formulation.md
|
||||
- status: pass-for-implementation-planning | needs-formulation-revision | needs-research | needs-reference-model | blocked
|
||||
- owner_agent: numerical-review-agent
|
||||
- date: <YYYY-MM-DD>
|
||||
|
||||
## Review Verdict
|
||||
- verdict: pass-for-implementation-planning | needs-formulation-revision | needs-research | needs-reference-model | blocked
|
||||
- reason: <판정 이유>
|
||||
|
||||
## Critical Findings
|
||||
- <구현 전 반드시 수정할 수식 또는 수치 결함>
|
||||
|
||||
## Numerical Risk Assessment
|
||||
- rigid_body_modes: <check/risk>
|
||||
- patch_test: <check/risk>
|
||||
- symmetry: <check/risk>
|
||||
- positive_definiteness: <check/risk>
|
||||
- hourglass: <check/risk or N/A>
|
||||
- shear_locking: <check/risk or N/A>
|
||||
- volumetric_locking: <check/risk or N/A>
|
||||
- distortion: <check/risk>
|
||||
- singular_jacobian: <check/risk>
|
||||
- conditioning: <check/risk>
|
||||
- convergence: <check/risk or N/A>
|
||||
|
||||
## Consistency Checks
|
||||
- units: <pass/fail/TBD>
|
||||
- dimensions: <pass/fail/TBD>
|
||||
- signs: <pass/fail/TBD>
|
||||
- dof_ordering: <pass/fail/TBD>
|
||||
- coordinate_transforms: <pass/fail/TBD>
|
||||
- matrix_vector_dimensions: <pass/fail/TBD>
|
||||
- integration_weights: <pass/fail/TBD>
|
||||
- output_locations: <pass/fail/TBD>
|
||||
|
||||
## Verification Readiness
|
||||
- unit_tests: <필요한 단위 테스트>
|
||||
- patch_tests: <필요한 patch test>
|
||||
- mms_or_mes: <MMS/MES 후보 또는 N/A>
|
||||
- benchmark_reference_comparison: <필요한 benchmark/reference 비교>
|
||||
- missing_evidence: <누락된 검증 근거>
|
||||
|
||||
## Required Revisions
|
||||
|
||||
### Formulation Agent
|
||||
- <정식화 수정 지시>
|
||||
|
||||
### Research Agent
|
||||
- <연구 보강 지시>
|
||||
|
||||
### Reference Model Agent
|
||||
- <reference model 또는 artifact 요구사항>
|
||||
|
||||
## Downstream Handoff
|
||||
|
||||
### Implementation Planning Agent
|
||||
- <테스트와 acceptance criteria로 변환할 항목>
|
||||
|
||||
### Reference Model Agent
|
||||
- <테스트 모델로 변환할 항목>
|
||||
```
|
||||
|
||||
## 품질 기준
|
||||
|
||||
- 확인된 결함, 위험, open question을 구분해야 한다.
|
||||
- `pass-for-implementation-planning`은 구현 계획으로 넘겨도 된다는 뜻이며 기능 완료나 release 승인이 아니다.
|
||||
- 정식화 문서를 직접 수정하지 않고 필요한 수정을 명확히 지시해야 한다.
|
||||
- 모든 검토는 dimension, sign, DOF ordering, coordinate transform, Jacobian, integration weight, element equation, output recovery를 포함해야 한다.
|
||||
- numerical risk는 rigid body modes, patch test, symmetry, positive definiteness, hourglass, locking, singular Jacobian, conditioning을 포함해야 한다.
|
||||
@@ -0,0 +1,164 @@
|
||||
# Physics Evaluation Report 문서 작성 가이드
|
||||
|
||||
이 디렉터리는 Physics Evaluation Agent가 작성하거나 제안하는 기능별 physics evaluation report를 보관하는 위치다.
|
||||
|
||||
Physics Evaluation Agent는 Reference Verification Agent가 `pass-for-physics-evaluation`으로 넘긴 결과에 대해 물리적 타당성을 검토한다. 이 agent는 reference tolerance를 다시 판정하지 않고, 평형, 반력 부호/합력, 변위 방향, 대칭성, 요소내력/응력 위치, rigid body mode 징후, energy/residual sanity, 테스트 모델 coverage를 검토한다.
|
||||
|
||||
기본 문서명은 `docs/physics-evaluations/<feature-id>-physics-evaluation.md` 형식을 사용한다.
|
||||
|
||||
## Physics Evaluation Agent 역할
|
||||
|
||||
수행한다:
|
||||
- Reference Verification report가 `pass-for-physics-evaluation`인지 확인한다.
|
||||
- documented physical expectation이 있는 항목만 pass/fail로 판정한다.
|
||||
- global equilibrium, reaction consistency, displacement direction, symmetry, element force balance, stress/strain sanity, rigid body mode, energy/residual, model coverage를 검토한다.
|
||||
- 물리 검토 실패를 equilibrium-failure, reaction-inconsistency, displacement-direction-failure, symmetry-failure, stress-location-failure, element-force-inconsistency, rigid-body-mode-suspected, nonfinite-result, model-coverage-gap, upstream-contract, environment로 분류한다.
|
||||
- 실패 원인에 따라 Correction Agent, Reference Model Agent, Formulation Agent, I/O Definition Agent, Coordinator Agent로 handoff한다.
|
||||
- 모든 물리 검토가 문서화된 기대값을 만족하면 Release Agent로 handoff한다.
|
||||
|
||||
수행하지 않는다:
|
||||
- source code를 수정하지 않는다.
|
||||
- tests를 수정하지 않는다.
|
||||
- CMake files를 수정하지 않는다.
|
||||
- requirements, formulations, I/O contracts, reference model contracts를 수정하지 않는다.
|
||||
- reference artifacts 또는 tolerance policies를 수정하지 않는다.
|
||||
- Abaqus, Nastran 또는 reference solver를 실행하지 않는다.
|
||||
- reference CSV를 생성하지 않는다.
|
||||
- reference tolerance를 다시 판정하지 않는다.
|
||||
- release readiness를 승인하지 않는다.
|
||||
- release notes 또는 final release checklist를 작성하지 않는다.
|
||||
|
||||
## 실행 순서
|
||||
|
||||
Physics Evaluation Agent는 다음 순서를 따른다.
|
||||
|
||||
```text
|
||||
EVIDENCE CHECK -> PHYSICS CHECKS -> CLASSIFY -> REPORT
|
||||
```
|
||||
|
||||
`EVIDENCE CHECK`에서 다음 항목을 확인한다.
|
||||
|
||||
- Reference Verification report status가 `pass-for-physics-evaluation`인지 여부
|
||||
- checked solver/reference CSVs
|
||||
- compared quantities
|
||||
- model purpose
|
||||
- documented physical expectations
|
||||
- sign convention
|
||||
- units and coordinate system
|
||||
- output location and component naming
|
||||
|
||||
## Physics Checks
|
||||
|
||||
- `global equilibrium`: 적용 하중, 반력, sign convention이 문서화된 경우 전체 힘/모멘트 평형을 검토한다.
|
||||
- `reaction consistency`: constrained DOF와 reaction component가 경계조건과 일관적인지 검토한다.
|
||||
- `displacement direction`: 하중 방향, 구속조건, 예상 변형 모드와 변위 부호/방향이 맞는지 검토한다.
|
||||
- `symmetry`: symmetry, antisymmetry, expected zero component가 모델 목적과 일치하는지 검토한다.
|
||||
- `element force balance`: element internal force와 외력/반력의 균형 또는 부호 일관성을 검토한다.
|
||||
- `stress/strain`: stress/strain 부호, component, coordinate system, output location이 모델 expectation과 일치하는지 검토한다.
|
||||
- `rigid body mode`: 불완전 구속, 비정상적으로 큰 변위, near-zero stiffness 징후를 검토한다.
|
||||
- `energy/residual`: energy_or_residual.csv 또는 residual output이 있을 때 energy balance, residual trend, convergence sanity를 검토한다.
|
||||
- `model coverage`: reference model이 claimed feature를 충분히 검증하는지 검토한다.
|
||||
|
||||
## Failure Classification
|
||||
|
||||
- `equilibrium-failure`: 전체 하중-반력 또는 모멘트 평형이 기대와 다르다.
|
||||
- `reaction-inconsistency`: constrained DOF reaction이 boundary condition 또는 load path와 일관되지 않다.
|
||||
- `displacement-direction-failure`: 변위 방향 또는 부호가 하중/구속조건과 물리적으로 맞지 않다.
|
||||
- `symmetry-failure`: expected symmetry, antisymmetry, zero component가 깨졌다.
|
||||
- `stress-location-failure`: stress/strain output location 또는 component 해석이 물리 expectation과 맞지 않다.
|
||||
- `element-force-inconsistency`: element internal force balance 또는 sign이 일관되지 않다.
|
||||
- `rigid-body-mode-suspected`: rigid body mode 또는 under-constrained model 징후가 있다.
|
||||
- `nonfinite-result`: NaN 또는 infinite value가 있다.
|
||||
- `model-coverage-gap`: reference model이 기능을 충분히 검증하지 못한다.
|
||||
- `upstream-contract`: physical expectation, sign convention, unit, coordinate, output location 계약이 누락 또는 충돌한다.
|
||||
- `environment`: 로컬 실행/읽기 환경 문제로 평가가 불가능하다.
|
||||
|
||||
## 문서 템플릿
|
||||
|
||||
```markdown
|
||||
# <feature title> Physics Evaluation Report
|
||||
|
||||
## Metadata
|
||||
- feature_id: <feature-id>
|
||||
- source_reference_verification_report: docs/reference-verifications/<feature-id>-reference-verification.md
|
||||
- source_reference_model: docs/reference-models/<feature-id>-reference-models.md
|
||||
- source_requirement: docs/requirements/<feature-id>.md
|
||||
- source_formulation: docs/formulations/<feature-id>-formulation.md
|
||||
- status: pass-for-release-agent | needs-correction | needs-reference-model | needs-formulation-review | needs-io-decision | needs-upstream-decision | blocked
|
||||
- owner_agent: physics-evaluation-agent
|
||||
- date: <YYYY-MM-DD>
|
||||
|
||||
## Input Evidence
|
||||
|
||||
| evidence | path_or_source | status | notes |
|
||||
| --- | --- | --- | --- |
|
||||
| reference_verification | docs/reference-verifications/<feature-id>-reference-verification.md | pass-for-physics-evaluation | <summary> |
|
||||
| solver_results | <solver CSV path> | present | missing | <summary> |
|
||||
| reference_results | references/<feature-id>/<model-id>/ | present | missing | <summary> |
|
||||
| model_purpose | docs/reference-models/<feature-id>-reference-models.md | documented | missing | <summary> |
|
||||
| physical_expectations | <source docs> | documented | missing | <summary> |
|
||||
|
||||
## Physics Checks
|
||||
|
||||
| check | documented_expectation | observed_evidence | verdict | classification |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| global equilibrium | <expected force/moment balance> | <observed> | pass | fail | skipped | equilibrium-failure |
|
||||
| reaction consistency | <expected reaction behavior> | <observed> | pass | fail | skipped | reaction-inconsistency |
|
||||
| displacement direction | <expected direction/sign> | <observed> | pass | fail | skipped | displacement-direction-failure |
|
||||
| symmetry | <expected symmetry/zero components> | <observed> | pass | fail | skipped | symmetry-failure |
|
||||
| element force balance | <expected element force relation> | <observed> | pass | fail | skipped | element-force-inconsistency |
|
||||
| stress/strain sanity | <expected sign/location/component> | <observed> | pass | fail | skipped | stress-location-failure |
|
||||
| rigid body mode | <expected constrained behavior> | <observed> | pass | fail | skipped | rigid-body-mode-suspected |
|
||||
| energy/residual | <expected energy/residual sanity> | <observed> | pass | fail | skipped | upstream-contract |
|
||||
| model coverage | <claimed feature coverage> | <observed> | pass | fail | skipped | model-coverage-gap |
|
||||
|
||||
## Failure Classification
|
||||
- classification: equilibrium-failure | reaction-inconsistency | displacement-direction-failure | symmetry-failure | stress-location-failure | element-force-inconsistency | rigid-body-mode-suspected | nonfinite-result | model-coverage-gap | upstream-contract | environment | N/A
|
||||
- primary_failure: <short summary>
|
||||
- evidence: <short relevant evidence>
|
||||
|
||||
## Evaluation Verdict
|
||||
- verdict: pass-for-release-agent | needs-correction | needs-reference-model | needs-formulation-review | needs-io-decision | needs-upstream-decision | blocked
|
||||
- reason: <short reason>
|
||||
|
||||
## Handoff Recommendation
|
||||
|
||||
| target_agent | reason | required_input |
|
||||
| --- | --- | --- |
|
||||
| Correction Agent | <implementation-owned physical failure> | <failed check and evidence> |
|
||||
| Reference Model Agent | <model coverage or missing physical expectation issue> | <coverage gap> |
|
||||
| Formulation Agent | <formulation or sign convention issue> | <failed physics check> |
|
||||
| I/O Definition Agent | <output location/component/unit/coordinate ambiguity> | <contract gap> |
|
||||
| Coordinator Agent | <blocked or repeated ambiguity> | <classification and open issue> |
|
||||
| Release Agent | <all documented physics checks passed> | <evaluation report> |
|
||||
|
||||
## No-Change Assertion
|
||||
- source_files_modified: false
|
||||
- test_files_modified: false
|
||||
- cmake_files_modified: false
|
||||
- reference_artifacts_modified: false
|
||||
- tolerance_policies_modified: false
|
||||
- notes: <observed no-change evidence or exception>
|
||||
|
||||
## Open Issues
|
||||
- <missing physical expectation, incomplete model coverage, contradictory sign convention, or unavailable energy/residual evidence>
|
||||
```
|
||||
|
||||
## 상태 값
|
||||
|
||||
- `pass-for-release-agent`: documented physics checks가 통과했고 Release Agent가 release readiness를 평가할 수 있다.
|
||||
- `needs-correction`: implementation-owned physical failure가 있어 Correction Agent가 필요하다.
|
||||
- `needs-reference-model`: reference model coverage가 부족하거나 추가 physical expectation이 필요하다.
|
||||
- `needs-formulation-review`: formulation 또는 numerical review 재검토가 필요하다.
|
||||
- `needs-io-decision`: output location, component naming, sign convention, unit, coordinate mapping이 evaluation을 막는다.
|
||||
- `needs-upstream-decision`: physical expectation, sign convention, model purpose, acceptance criterion이 누락 또는 충돌한다.
|
||||
- `blocked`: 사용자 또는 Coordinator Agent 결정 없이는 안전하게 진행할 수 없다.
|
||||
|
||||
## 품질 기준
|
||||
|
||||
- Reference Verification report가 `pass-for-physics-evaluation`이 아니면 physics pass를 판정하지 않는다.
|
||||
- documented expectation이 없는 항목은 pass/fail로 판정하지 않고 `skipped`, `needs-upstream-decision`, 또는 `needs-reference-model`로 둔다.
|
||||
- 평형 검토는 적용 하중, 반력, element/internal force sign convention이 문서화된 경우에만 수행한다.
|
||||
- stress/strain 검토는 output location, component naming, coordinate system, units가 정의된 경우에만 수행한다.
|
||||
- pass는 Release Agent로 넘길 수 있다는 뜻이며 release readiness 승인이 아니다.
|
||||
- reference artifacts와 tolerance policies는 수정하지 않는다.
|
||||
@@ -0,0 +1,251 @@
|
||||
# Reference Model 문서 작성 가이드
|
||||
|
||||
이 디렉터리는 Reference Model Agent가 작성하거나 제안한 기능별 reference model 설계 문서를 보관하는 위치다.
|
||||
|
||||
Reference Model Agent는 FESA 기능 검증에 필요한 Abaqus `.inp` 기반 테스트 모델 포트폴리오와 `references/<feature-id>/<model-id>/` artifact bundle 계약을 정의한다. Agent는 Abaqus, Nastran 또는 레퍼런스 솔버를 직접 실행하지 않고, reference CSV 값을 생성하지 않으며, solver 결과 비교나 release readiness 승인도 하지 않는다.
|
||||
|
||||
기본 파일명은 `docs/reference-models/<feature-id>-reference-models.md` 형식을 사용한다. 각 문서는 요구조건, 연구 브리프, 정식화, 수치 리뷰, I/O 정의를 입력으로 받아 구현 전에 준비해야 할 테스트 모델과 reference artifact 요구사항을 정의해야 한다.
|
||||
|
||||
## Reference Model Agent 역할
|
||||
|
||||
수행한다:
|
||||
- 기능별 reference model portfolio를 smoke, analytical, patch test, benchmark, regression, negative/invalid-input model로 구분한다.
|
||||
- `model.inp`가 I/O Definition Agent의 supported Abaqus keyword subset 안에 있는지 확인한다.
|
||||
- `references/<feature-id>/<model-id>/` artifact bundle 구조와 필수 파일을 정의한다.
|
||||
- `metadata.json` provenance, 단위, 좌표계, Abaqus version/source, output request, tolerance 정책을 정의한다.
|
||||
- `displacements.csv`, `reactions.csv`, `element_forces.csv`, `stresses.csv` 요구사항을 정의한다.
|
||||
- requirement와 model, compared quantity, tolerance, artifact status를 연결하는 Coverage Matrix를 작성한다.
|
||||
|
||||
수행하지 않는다:
|
||||
- C++ 코드를 구현하지 않는다.
|
||||
- parser를 구현하지 않는다.
|
||||
- C++ API나 파일 구조를 설계하지 않는다.
|
||||
- Abaqus, Nastran 또는 레퍼런스 솔버를 직접 실행하지 않는다.
|
||||
- reference CSV를 생성하지 않는다.
|
||||
- solver 결과를 비교하지 않는다.
|
||||
- release readiness를 승인하지 않는다.
|
||||
- reference 값, tolerance, Abaqus compatibility를 임의로 만들지 않는다.
|
||||
|
||||
## 문서 템플릿
|
||||
|
||||
```markdown
|
||||
# <feature title> Reference Models
|
||||
|
||||
## Metadata
|
||||
- feature_id: <feature-id>
|
||||
- source_requirement: docs/requirements/<feature-id>.md
|
||||
- source_research: docs/research/<feature-id>-research.md
|
||||
- source_formulation: docs/formulations/<feature-id>-formulation.md
|
||||
- source_numerical_review: docs/numerical-reviews/<feature-id>-review.md
|
||||
- source_io_definition: docs/io-definitions/<feature-id>-io.md
|
||||
- status: draft | needs-user-decision | needs-reference-artifacts | ready-for-implementation-planning | blocked
|
||||
- owner_agent: reference-model-agent
|
||||
- date: <YYYY-MM-DD>
|
||||
|
||||
## Reference Strategy
|
||||
- verification_scope: <feature verification purpose>
|
||||
- code_verification: <unit/math-level checks supported by this portfolio>
|
||||
- solution_verification: <mesh, convergence, patch, or analytical checks>
|
||||
- benchmark_reference_comparison: <Abaqus/NAFEMS/NASA/paper-derived comparison plan>
|
||||
- excluded_validation_scope: <physical experiment validation excluded unless explicitly available>
|
||||
|
||||
## Model Inventory
|
||||
|
||||
| model_id | category | purpose | status | required_artifacts |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| <model-id> | smoke | <basic parser/solve path> | draft | model.inp, metadata.json, required CSVs |
|
||||
| <model-id> | analytical | <closed-form comparison> | draft | model.inp, metadata.json, required CSVs |
|
||||
| <model-id> | patch test | <element consistency check> | draft | model.inp, metadata.json, required CSVs |
|
||||
| <model-id> | benchmark | <trusted benchmark comparison> | draft | model.inp, metadata.json, required CSVs |
|
||||
| <model-id> | regression | <known defect guard> | draft | model.inp, metadata.json, required CSVs |
|
||||
| <model-id> | negative/invalid-input | <unsupported keyword or invalid model diagnostic> | draft | model.inp, metadata.json |
|
||||
|
||||
## Model Record
|
||||
|
||||
### <model-id>
|
||||
- category: smoke | analytical | patch test | benchmark | regression | negative/invalid-input
|
||||
- purpose: <what this model proves>
|
||||
- verified_requirements: [<requirement-id>]
|
||||
- analysis_type: <linear static | nonlinear static | modal | other>
|
||||
- element_type: <Abaqus element type and FESA feature element>
|
||||
- material: <material model and values>
|
||||
- boundary_conditions: <BC summary>
|
||||
- loads: <load summary>
|
||||
- expected_physical_quantities: displacement | reaction | element force | stress | strain | energy | residual
|
||||
- tolerance: <absolute/relative/norm policy or needs-user-decision>
|
||||
- source: <user | analytical | Abaqus Verification Guide | Abaqus Benchmarks Guide | NAFEMS | NASA/FEMCI | paper>
|
||||
- artifact_status: draft | needs-reference-artifacts | ready-for-implementation-planning | blocked
|
||||
|
||||
## Abaqus Input Requirements
|
||||
- input_file: references/<feature-id>/<model-id>/model.inp
|
||||
- supported_keyword_subset: <keywords from docs/io-definitions/<feature-id>-io.md>
|
||||
- model_data: <nodes, elements, sets, material, section, coordinates, units>
|
||||
- history_data: <step, procedure, boundary conditions, loads, output requests>
|
||||
- output_requests: <requests needed to populate reference CSV files>
|
||||
- unsupported_keyword_policy: unsupported | ignored-with-warning | requires-user-decision
|
||||
|
||||
## Artifact Bundle Contract
|
||||
|
||||
```text
|
||||
references/
|
||||
<feature-id>/
|
||||
<model-id>/
|
||||
model.inp
|
||||
metadata.json
|
||||
displacements.csv
|
||||
reactions.csv
|
||||
element_forces.csv
|
||||
stresses.csv
|
||||
README.md
|
||||
```
|
||||
|
||||
Required files:
|
||||
- `model.inp`: Abaqus input file for the reference model.
|
||||
- `metadata.json`: provenance and model contract metadata.
|
||||
- `displacements.csv`: nodal displacement reference results.
|
||||
- `reactions.csv`: nodal reaction force reference results.
|
||||
- `element_forces.csv`: element internal force reference results.
|
||||
- `stresses.csv`: stress reference results.
|
||||
- `README.md`: short description, generation notes, and limitations.
|
||||
|
||||
Optional files:
|
||||
- `strains.csv`: strain reference results when required.
|
||||
- `energy_or_residual.csv`: energy, residual, or convergence reference results when required.
|
||||
- `notes.md`: manual review notes.
|
||||
|
||||
## Metadata JSON Contract
|
||||
|
||||
```json
|
||||
{
|
||||
"feature_id": "<feature-id>",
|
||||
"model_id": "<model-id>",
|
||||
"artifact_status": "draft | needs-reference-artifacts | ready-for-implementation-planning | blocked",
|
||||
"abaqus_version": "<version or needs-user-decision>",
|
||||
"generation_owner": "<person/procedure>",
|
||||
"generation_date": "<YYYY-MM-DD>",
|
||||
"source_documents": ["docs/requirements/<feature-id>.md"],
|
||||
"units": "<unit system>",
|
||||
"coordinate_system": "global Cartesian unless otherwise documented",
|
||||
"analysis_type": "<analysis type>",
|
||||
"element_types": ["<Abaqus element type>"],
|
||||
"material_values": {},
|
||||
"boundary_condition_summary": "<summary>",
|
||||
"load_summary": "<summary>",
|
||||
"output_requests": ["U", "RF", "S", "<feature-specific quantities>"],
|
||||
"csv_schema_version": "<version>",
|
||||
"tolerance_policy": "<absolute/relative/norm policy>",
|
||||
"limitations": ["<known limitation>"]
|
||||
}
|
||||
```
|
||||
|
||||
## Reference CSV Requirements
|
||||
|
||||
### displacements.csv
|
||||
- Required when nodal displacement is a verification quantity.
|
||||
- Must include step/frame identity, node id, displacement components, coordinate system, and units.
|
||||
|
||||
### reactions.csv
|
||||
- Required when constrained DOF reactions or global equilibrium are verification quantities.
|
||||
- Must include step/frame identity, node id, reaction components, coordinate system, and units.
|
||||
|
||||
### element_forces.csv
|
||||
- Required when element internal force is a verification quantity.
|
||||
- Must include step/frame identity, element id, output location, component, value, and units.
|
||||
|
||||
### stresses.csv
|
||||
- Required when stress is a verification quantity.
|
||||
- Must include step/frame identity, element id, integration point or recovery location, component, value, coordinate system, and units.
|
||||
|
||||
### Optional CSVs
|
||||
- `strains.csv`: required when strain is part of the acceptance criteria.
|
||||
- `energy_or_residual.csv`: required when energy balance, residual, or convergence data is part of the acceptance criteria.
|
||||
|
||||
## Coverage Matrix
|
||||
|
||||
| requirement_id | model_id | compared_quantity | artifact_file | tolerance | verification_method | status |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| <req-id> | <model-id> | displacement | displacements.csv | <policy> | reference-comparison | draft |
|
||||
| <req-id> | <model-id> | reaction | reactions.csv | <policy> | reference-comparison | draft |
|
||||
| <req-id> | <model-id> | element force | element_forces.csv | <policy> | reference-comparison | draft |
|
||||
| <req-id> | <model-id> | stress | stresses.csv | <policy> | reference-comparison | draft |
|
||||
|
||||
## Artifact Acceptance Checklist
|
||||
- 모든 `must` requirement가 최소 하나의 `model_id`와 `compared_quantity`에 연결되어 있다.
|
||||
- `model.inp`가 기능별 supported Abaqus keyword subset을 벗어나지 않는다.
|
||||
- `metadata.json`에 provenance, Abaqus version/source, units, coordinate system, tolerance, CSV schema version이 기록되어 있다.
|
||||
- 필수 CSV 파일이 존재하거나, 기능상 불필요한 파일은 명확한 reason과 함께 제외되어 있다.
|
||||
- output request가 필요한 CSV 물리량을 생성할 수 있도록 정의되어 있다.
|
||||
- reference CSV가 없으면 status는 `needs-reference-artifacts`다.
|
||||
- tolerance, source, units, coordinate system이 불명확하면 status는 `needs-user-decision`이다.
|
||||
|
||||
## Open Issues and Downstream Handoff
|
||||
|
||||
### I/O Definition Agent
|
||||
- <supported keyword, output request, CSV schema clarification>
|
||||
|
||||
### Implementation Planning Agent
|
||||
- <tests that should fail before implementation, model order, acceptance criteria>
|
||||
|
||||
### Reference Verification Agent
|
||||
- <CSV schema, ID matching, units, coordinate conventions, output locations, tolerance mapping>
|
||||
|
||||
### Physics Evaluation Agent
|
||||
- <equilibrium, symmetry, displacement direction, stress location, rigid body mode, load path sanity checks>
|
||||
```
|
||||
|
||||
## 품질 기준
|
||||
|
||||
- Reference model의 목적과 검증 대상 requirement가 명확해야 한다.
|
||||
- `model.inp`는 Abaqus input file이며, 기능별 supported keyword subset을 따라야 한다.
|
||||
- model data와 history data를 구분해야 한다.
|
||||
- output request와 required CSV 사이의 연결이 명확해야 한다.
|
||||
- `references/<feature-id>/<model-id>/` 구조와 필수 artifact가 명시되어야 한다.
|
||||
- `metadata.json`에는 provenance, Abaqus version/source, units, coordinate system, tolerance, CSV schema version이 포함되어야 한다.
|
||||
- reference CSV가 없으면 완료 상태가 아니라 `needs-reference-artifacts` 상태로 둔다.
|
||||
- 모든 `must` requirement는 Coverage Matrix에서 model, compared quantity, tolerance, verification method로 추적되어야 한다.
|
||||
|
||||
## Abaqus UserSubroutine artifact metadata v1
|
||||
|
||||
For Fortran Abaqus UserSubroutine work, each stored artifact bundle may include `metadata.json` with:
|
||||
|
||||
```json
|
||||
{
|
||||
"schema_version": "abaqus-user-subroutine-artifact-v1",
|
||||
"feature_id": "<feature-id>",
|
||||
"model_id": "<model-id>",
|
||||
"artifact_status": "draft | needs-reference-artifacts | ready-for-comparison | blocked",
|
||||
"abaqus": {
|
||||
"version": "<Abaqus version>",
|
||||
"precision": "single | double",
|
||||
"command": "abaqus job=<job> user=<subroutine>"
|
||||
},
|
||||
"compiler": {
|
||||
"vendor": "Intel oneAPI",
|
||||
"name": "ifx | ifort",
|
||||
"version": "<compiler version>"
|
||||
},
|
||||
"subroutine": {
|
||||
"entry_points": ["UMAT"],
|
||||
"source_files": [
|
||||
{
|
||||
"path": "src/fortran/abaqus/UMAT.for",
|
||||
"language": "Fortran",
|
||||
"sha256": "<source sha256>"
|
||||
}
|
||||
]
|
||||
},
|
||||
"input_file": "model.inp",
|
||||
"outputs": {
|
||||
"tails": {
|
||||
"msg": "job.msg.tail.txt",
|
||||
"dat": "job.dat.tail.txt",
|
||||
"log": "job.log.tail.txt"
|
||||
},
|
||||
"csv": {
|
||||
"stresses": "stresses.csv"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
`artifact_status=ready-for-comparison` means `scripts/validate_reference_artifacts.py` must find all declared files and confirm source SHA-256 values. Agents must not generate or edit the declared reference CSVs unless an explicit reference-artifact phase authorizes that work.
|
||||
@@ -0,0 +1,168 @@
|
||||
# Reference Verification Report 문서 작성 가이드
|
||||
|
||||
이 디렉터리는 Reference Verification Agent가 작성하거나 제안하는 기능별 reference comparison report를 보관하는 위치다.
|
||||
|
||||
Reference Verification Agent는 Build/Test Executor Agent 통과 후 generated solver result CSV와 stored Abaqus reference CSV artifacts를 tolerance 기준으로 비교한다. 이 agent는 comparison과 report만 수행하며, source code, tests, CMake files, requirements, formulations, I/O contracts, reference artifacts, tolerance policies를 수정하지 않는다.
|
||||
|
||||
기본 문서명은 `docs/reference-verifications/<feature-id>-reference-verification.md` 형식을 사용한다.
|
||||
|
||||
## Reference Verification Agent 역할
|
||||
|
||||
수행한다:
|
||||
- `references/<feature-id>/<model-id>/` artifact bundle과 generated solver result CSV를 확인한다.
|
||||
- `metadata.json`, schema version, units, coordinate system, step/frame identity, node/element IDs, output location, tolerance source를 확인한다.
|
||||
- `displacements.csv`, `reactions.csv`, `element_forces.csv`, `stresses.csv`를 기본 비교 대상으로 삼는다.
|
||||
- upstream 문서가 요구할 때만 `strains.csv`, `energy_or_residual.csv`를 추가 비교한다.
|
||||
- max absolute error, max relative error, RMS error, norm error, worst node/element/component, missing rows, extra rows, pass/fail을 보고한다.
|
||||
- 실패를 missing-reference-artifact, missing-solver-output, schema-mismatch, id-mismatch, unit-or-coordinate-mismatch, tolerance-failure, nonfinite-result, upstream-contract, environment로 분류한다.
|
||||
|
||||
수행하지 않는다:
|
||||
- source code를 수정하지 않는다.
|
||||
- tests를 수정하지 않는다.
|
||||
- CMake files를 수정하지 않는다.
|
||||
- requirements, formulations, I/O contracts, reference model contracts를 수정하지 않는다.
|
||||
- reference artifacts 또는 tolerance policies를 수정하지 않는다.
|
||||
- Abaqus, Nastran 또는 reference solver를 실행하지 않는다.
|
||||
- reference CSV를 생성하지 않는다.
|
||||
- solver output CSV를 tolerance에 맞추기 위해 보정하지 않는다.
|
||||
- physics validation success 또는 release readiness를 승인하지 않는다.
|
||||
|
||||
## 실행 순서
|
||||
|
||||
Reference Verification Agent는 항상 다음 순서를 따른다.
|
||||
|
||||
```text
|
||||
ARTIFACT CHECK -> COMPARE -> CLASSIFY -> REPORT
|
||||
```
|
||||
|
||||
`ARTIFACT CHECK`에서 다음 항목이 없으면 비교를 시작하지 않는다.
|
||||
|
||||
- `metadata.json`
|
||||
- required reference CSV files
|
||||
- generated solver result CSV files
|
||||
- schema version
|
||||
- units
|
||||
- coordinate system
|
||||
- step/frame identity
|
||||
- node/element ID matching rule
|
||||
- output location
|
||||
- tolerance policy
|
||||
|
||||
## 비교 대상
|
||||
|
||||
기본 비교 대상:
|
||||
- `displacements.csv`: nodal displacement
|
||||
- `reactions.csv`: nodal reaction force
|
||||
- `element_forces.csv`: element internal force
|
||||
- `stresses.csv`: element stress
|
||||
|
||||
선택 비교 대상:
|
||||
- `strains.csv`: strain이 acceptance criteria에 포함된 경우
|
||||
- `energy_or_residual.csv`: energy, residual, convergence quantity가 acceptance criteria에 포함된 경우
|
||||
|
||||
## Failure Classification
|
||||
|
||||
- `missing-reference-artifact`: required stored reference file 또는 provenance가 없다.
|
||||
- `missing-solver-output`: generated solver result CSV 또는 comparison command가 없다.
|
||||
- `schema-mismatch`: reference CSV와 solver CSV column/schema가 다르다.
|
||||
- `id-mismatch`: node id, element id, step/frame, integration point, component matching이 실패했다.
|
||||
- `unit-or-coordinate-mismatch`: units 또는 coordinate system이 비교 가능하지 않다.
|
||||
- `tolerance-failure`: schema와 matching은 유효하지만 error가 tolerance를 초과했다.
|
||||
- `nonfinite-result`: NaN 또는 infinite value가 발견됐다.
|
||||
- `upstream-contract`: tolerance, schema, units, output location, ID matching policy가 누락 또는 충돌한다.
|
||||
- `environment`: 로컬 실행 환경 문제로 비교가 불가능하다.
|
||||
|
||||
## 문서 템플릿
|
||||
|
||||
```markdown
|
||||
# <feature title> Reference Verification Report
|
||||
|
||||
## Metadata
|
||||
- feature_id: <feature-id>
|
||||
- source_build_test_report: docs/build-test-reports/<feature-id>-build-test.md
|
||||
- source_reference_models: docs/reference-models/<feature-id>-reference-models.md
|
||||
- source_io_definition: docs/io-definitions/<feature-id>-io.md
|
||||
- source_implementation_report: <path or N/A>
|
||||
- status: pass-for-physics-evaluation | needs-correction | needs-reference-artifacts | needs-solver-results | needs-upstream-decision | blocked
|
||||
- owner_agent: reference-verification-agent
|
||||
- date: <YYYY-MM-DD>
|
||||
|
||||
## Artifact Inventory
|
||||
|
||||
| item | path | status | notes |
|
||||
| --- | --- | --- | --- |
|
||||
| reference_bundle | references/<feature-id>/<model-id>/ | present | missing | <notes> |
|
||||
| metadata | references/<feature-id>/<model-id>/metadata.json | present | missing | <provenance summary> |
|
||||
| reference_displacements | references/<feature-id>/<model-id>/displacements.csv | present | missing | <notes> |
|
||||
| reference_reactions | references/<feature-id>/<model-id>/reactions.csv | present | missing | <notes> |
|
||||
| reference_element_forces | references/<feature-id>/<model-id>/element_forces.csv | present | missing | <notes> |
|
||||
| reference_stresses | references/<feature-id>/<model-id>/stresses.csv | present | missing | <notes> |
|
||||
| solver_outputs | <solver output directory> | present | missing | <notes> |
|
||||
|
||||
## Comparison Contract
|
||||
- schema_version: <version>
|
||||
- id_matching: node_id | element_id | step/frame | integration_point | component
|
||||
- units: <unit system>
|
||||
- coordinate_system: <global/local convention>
|
||||
- output_location: nodal | element | integration_point | centroid | recovery_location
|
||||
- component_naming: <component naming policy>
|
||||
- tolerance_source: <requirement/reference model/I/O document>
|
||||
- tolerance_policy: absolute | relative | norm-based | combined
|
||||
- zero_reference_policy: <policy or N/A>
|
||||
|
||||
## Quantity Results
|
||||
|
||||
| quantity | model_id | artifact_file | compared_rows | missing_rows | extra_rows | max_abs_error | max_rel_error | rms_error | norm_error | worst_id | worst_component | result |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| displacement | <model-id> | displacements.csv | <n> | <n> | <n> | <value> | <value> | <value> | <value or N/A> | <node id> | <component> | pass | fail |
|
||||
| reaction | <model-id> | reactions.csv | <n> | <n> | <n> | <value> | <value> | <value> | <value or N/A> | <node id> | <component> | pass | fail |
|
||||
| element force | <model-id> | element_forces.csv | <n> | <n> | <n> | <value> | <value> | <value> | <value or N/A> | <element id> | <component> | pass | fail |
|
||||
| stress | <model-id> | stresses.csv | <n> | <n> | <n> | <value> | <value> | <value> | <value or N/A> | <element/ip id> | <component> | pass | fail |
|
||||
|
||||
## Failure Classification
|
||||
- classification: missing-reference-artifact | missing-solver-output | schema-mismatch | id-mismatch | unit-or-coordinate-mismatch | tolerance-failure | nonfinite-result | upstream-contract | environment | N/A
|
||||
- primary_failure: <short summary>
|
||||
- evidence: <short relevant excerpt or computed metric>
|
||||
|
||||
## Handoff Recommendation
|
||||
|
||||
| target_agent | reason | required_input |
|
||||
| --- | --- | --- |
|
||||
| Correction Agent | <implementation-owned mismatch or nonfinite result> | <comparison metrics and failing quantity> |
|
||||
| Reference Model Agent | <missing or invalid reference artifact/provenance> | <artifact inventory> |
|
||||
| I/O Definition Agent | <schema, units, coordinate, output location mismatch> | <contract mismatch> |
|
||||
| Physics Evaluation Agent | <reference comparisons passed> | <quantity results and report> |
|
||||
| Coordinator Agent | <blocked or repeated ambiguity> | <classification and open issue> |
|
||||
|
||||
## No-Change Assertion
|
||||
- source_files_modified: false
|
||||
- test_files_modified: false
|
||||
- cmake_files_modified: false
|
||||
- reference_artifacts_modified: false
|
||||
- tolerance_policies_modified: false
|
||||
- notes: <observed no-change evidence or exception>
|
||||
|
||||
## Open Issues
|
||||
- <missing solver outputs, missing reference artifacts, schema gaps, tolerance gaps, or repeated comparison failures>
|
||||
```
|
||||
|
||||
## 상태 값
|
||||
|
||||
- `pass-for-physics-evaluation`: required reference comparisons가 모두 통과했고 Physics Evaluation Agent로 넘길 수 있다.
|
||||
- `needs-correction`: implementation-owned solver result mismatch 또는 nonfinite result가 있다.
|
||||
- `needs-reference-artifacts`: required reference artifact 또는 provenance가 누락됐다.
|
||||
- `needs-solver-results`: generated solver result CSV 또는 comparison command가 없다.
|
||||
- `needs-upstream-decision`: schema, tolerance, units, coordinate system, output location, ID matching policy가 누락 또는 충돌한다.
|
||||
- `blocked`: 사용자 또는 Coordinator Agent 결정 없이는 안전하게 진행할 수 없다.
|
||||
|
||||
## 품질 기준
|
||||
|
||||
- 모든 `must` requirement의 reference-comparison 항목은 model id, compared quantity, artifact file, tolerance에 trace되어야 한다.
|
||||
- reference artifact는 읽기 전용이다. `model.inp`, `metadata.json`, reference CSV를 수정하지 않는다.
|
||||
- solver output CSV는 비교 입력일 뿐이며 tolerance에 맞추기 위해 후처리 보정하지 않는다.
|
||||
- stress/strain은 element id, integration point 또는 recovery location, component naming이 일치할 때만 비교한다.
|
||||
- nodal displacement/reaction은 node id, DOF/component, coordinate system, unit이 일치할 때만 비교한다.
|
||||
- missing rows와 extra rows를 숨기지 않고 보고한다.
|
||||
- NaN 또는 infinite value는 `nonfinite-result`로 분류한다.
|
||||
- pass는 reference tolerance 통과만 의미한다.
|
||||
- physics validation과 release readiness는 각각 Physics Evaluation Agent와 Release Agent가 판정한다.
|
||||
@@ -0,0 +1,171 @@
|
||||
# Release Report 문서 작성 가이드
|
||||
|
||||
이 디렉터리는 Release Agent가 작성하거나 제안하는 기능별 release readiness report를 보관하는 위치다.
|
||||
|
||||
Release Agent는 Physics Evaluation Agent가 `pass-for-release-agent`로 넘긴 기능에 대해 최종 gate evidence를 감사한다. 이 Agent는 source code, tests, CMake, upstream 계약, reference artifacts, tolerance policies를 수정하지 않는다. 또한 Abaqus/Nastran 실행, reference CSV 생성, 외부 publish/deploy/package/tag/commit 작업을 수행하지 않는다.
|
||||
|
||||
기본 문서명은 `docs/releases/<feature-id>-release.md` 형식을 사용한다.
|
||||
|
||||
## Release Agent 역할
|
||||
|
||||
수행한다:
|
||||
- upstream gate report가 같은 `feature_id`를 대상으로 하는지 확인한다.
|
||||
- Build/Test report의 `pass-for-reference-verification` 상태를 확인한다.
|
||||
- Reference Verification report의 `pass-for-physics-evaluation` 상태를 확인한다.
|
||||
- Physics Evaluation report의 `pass-for-release-agent` 상태를 확인한다.
|
||||
- 모든 `must` requirement가 acceptance criterion, test/reference evidence, release scope에 trace되는지 확인한다.
|
||||
- known limitations, deferred issues, unsupported Abaqus keyword, accepted risks를 release note에 기록한다.
|
||||
- release checklist와 Release Notes Draft를 작성한다.
|
||||
|
||||
수행하지 않는다:
|
||||
- source code를 수정하지 않는다.
|
||||
- tests를 수정하지 않는다.
|
||||
- CMake files 또는 build configuration을 수정하지 않는다.
|
||||
- requirements, formulations, I/O contracts, numerical review reports, reference verification reports, physics evaluation reports를 수정하지 않는다.
|
||||
- reference artifacts 또는 tolerance policies를 수정하지 않는다.
|
||||
- Abaqus, Nastran 또는 reference solver를 실행하지 않는다.
|
||||
- reference CSV를 생성하지 않는다.
|
||||
- 실패하거나 누락된 upstream gate를 우회하지 않는다.
|
||||
- 사용자 명시 요청 없이 publish, deploy, package, tag, commit, external release를 수행하지 않는다.
|
||||
|
||||
## 실행 순서
|
||||
|
||||
Release Agent는 다음 순서를 따른다.
|
||||
|
||||
```text
|
||||
GATE AUDIT -> TRACEABILITY CHECK -> RELEASE DOCUMENTATION -> RELEASE VERDICT
|
||||
```
|
||||
|
||||
`GATE AUDIT`에서는 다음 evidence를 확인한다.
|
||||
|
||||
- Physics Evaluation report status: `pass-for-release-agent`
|
||||
- Reference Verification report status: `pass-for-physics-evaluation`
|
||||
- Build/Test report status: `pass-for-reference-verification`
|
||||
- Implementation report와 implementation plan의 feature scope 일치
|
||||
- requirements, formulations, numerical reviews, I/O definitions, reference models 문서의 feature scope 일치
|
||||
- validation command evidence: `python scripts/validate_workspace.py`
|
||||
|
||||
## 문서 템플릿
|
||||
|
||||
```markdown
|
||||
# <feature title> Release Report
|
||||
|
||||
## Metadata
|
||||
- feature_id: <feature-id>
|
||||
- source_requirement: docs/requirements/<feature-id>.md
|
||||
- source_formulation: docs/formulations/<feature-id>-formulation.md
|
||||
- source_numerical_review: docs/numerical-reviews/<feature-id>-review.md
|
||||
- source_io_definition: docs/io-definitions/<feature-id>-io.md
|
||||
- source_reference_model: docs/reference-models/<feature-id>-reference-models.md
|
||||
- source_implementation_plan: docs/implementation-plans/<feature-id>-implementation-plan.md
|
||||
- source_build_test_report: docs/build-test-reports/<feature-id>-build-test.md
|
||||
- source_reference_verification_report: docs/reference-verifications/<feature-id>-reference-verification.md
|
||||
- source_physics_evaluation_report: docs/physics-evaluations/<feature-id>-physics-evaluation.md
|
||||
- status: ready-for-release | needs-correction | needs-reference-verification | needs-physics-evaluation | needs-documentation | needs-upstream-decision | blocked
|
||||
- owner_agent: release-agent
|
||||
- date: <YYYY-MM-DD>
|
||||
|
||||
## Release Scope
|
||||
|
||||
| item | included | excluded | notes |
|
||||
| --- | --- | --- | --- |
|
||||
| analysis_type | <supported analysis> | <unsupported analysis> | <notes> |
|
||||
| element_type | <supported elements> | <unsupported elements> | <notes> |
|
||||
| material_model | <supported materials> | <unsupported materials> | <notes> |
|
||||
| Abaqus input subset | <supported keywords> | <unsupported keywords> | <notes> |
|
||||
| output_quantities | <supported outputs> | <unsupported outputs> | <notes> |
|
||||
|
||||
## Gate Evidence Inventory
|
||||
|
||||
| gate | source | expected_status | observed_status | verdict |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| requirements | docs/requirements/<feature-id>.md | approved or release-ready | <status> | pass | fail | missing |
|
||||
| formulation | docs/formulations/<feature-id>-formulation.md | reviewed | <status> | pass | fail | missing |
|
||||
| numerical_review | docs/numerical-reviews/<feature-id>-review.md | pass-for-implementation-planning | <status> | pass | fail | missing |
|
||||
| io_definition | docs/io-definitions/<feature-id>-io.md | ready | <status> | pass | fail | missing |
|
||||
| reference_model | docs/reference-models/<feature-id>-reference-models.md | ready or artifacts present | <status> | pass | fail | missing |
|
||||
| implementation | <implementation report> | implemented | <status> | pass | fail | missing |
|
||||
| build_test | docs/build-test-reports/<feature-id>-build-test.md | pass-for-reference-verification | <status> | pass | fail | missing |
|
||||
| reference_verification | docs/reference-verifications/<feature-id>-reference-verification.md | pass-for-physics-evaluation | <status> | pass | fail | missing |
|
||||
| physics_evaluation | docs/physics-evaluations/<feature-id>-physics-evaluation.md | pass-for-release-agent | <status> | pass | fail | missing |
|
||||
|
||||
## Acceptance Traceability
|
||||
|
||||
| requirement_id | acceptance_criterion | test_id | reference_model_id | verification_report | release_disposition |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| <req-id> | <criterion> | <test-id> | <model-id> | <report path> | released | deferred | blocked |
|
||||
|
||||
## Validation Evidence
|
||||
|
||||
| command_or_report | expected | observed | notes |
|
||||
| --- | --- | --- | --- |
|
||||
| python scripts/validate_workspace.py | pass | <result> | <summary> |
|
||||
| CMake/MSVC/CTest | pass | <result> | <summary> |
|
||||
| reference verification | pass-for-physics-evaluation | <status> | <summary> |
|
||||
| physics evaluation | pass-for-release-agent | <status> | <summary> |
|
||||
|
||||
## Known Limitations
|
||||
|
||||
| limitation | category | user_impact | disposition |
|
||||
| --- | --- | --- | --- |
|
||||
| <unsupported Abaqus keyword or solver scope limit> | input | physics | numerical | output | <impact> | documented | deferred | blocker |
|
||||
|
||||
## Release Notes Draft
|
||||
|
||||
### Feature Summary
|
||||
- <user-facing summary>
|
||||
|
||||
### Verification Scope
|
||||
- <validated analysis, element, material, I/O, reference model scope>
|
||||
|
||||
### Main Limitations
|
||||
- <known limitation>
|
||||
|
||||
### Artifacts
|
||||
- <release report, reference bundle, verification report paths>
|
||||
|
||||
## Release Verdict
|
||||
- verdict: ready-for-release | needs-correction | needs-reference-verification | needs-physics-evaluation | needs-documentation | needs-upstream-decision | blocked
|
||||
- reason: <short reason>
|
||||
|
||||
## Handoff Recommendation
|
||||
|
||||
| target_agent | reason | required_input |
|
||||
| --- | --- | --- |
|
||||
| Coordinator Agent | <release decision or blocked issue> | <summary> |
|
||||
| Correction Agent | <implementation-owned release blocker> | <failure evidence> |
|
||||
| Reference Verification Agent | <missing or failed reference comparison> | <artifact and report gap> |
|
||||
| Physics Evaluation Agent | <missing or failed physics evaluation> | <reference verification evidence> |
|
||||
| Requirement Agent | <requirement or acceptance gap> | <open decision> |
|
||||
| I/O Definition Agent | <I/O scope or Abaqus keyword limitation gap> | <contract gap> |
|
||||
| Reference Model Agent | <reference artifact or coverage gap> | <model gap> |
|
||||
|
||||
## No-Change Assertion
|
||||
- source_files_modified: false
|
||||
- test_files_modified: false
|
||||
- cmake_files_modified: false
|
||||
- reference_artifacts_modified: false
|
||||
- tolerance_policies_modified: false
|
||||
- notes: <observed no-change evidence or exception>
|
||||
|
||||
## Open Issues
|
||||
- <missing evidence, contradictory upstream report, unresolved defect, incomplete reference artifact, or documentation gap>
|
||||
```
|
||||
|
||||
## 상태 값
|
||||
|
||||
- `ready-for-release`: required gate가 모두 통과했고, 모든 `must` requirement traceability와 known limitations 문서화가 완료되었다.
|
||||
- `needs-correction`: implementation-owned defect 또는 unresolved test/build/reference/physics issue가 있어 Correction Agent가 필요하다.
|
||||
- `needs-reference-verification`: reference verification report가 없거나 `pass-for-physics-evaluation`이 아니다.
|
||||
- `needs-physics-evaluation`: physics evaluation report가 없거나 `pass-for-release-agent`가 아니다.
|
||||
- `needs-documentation`: gate evidence는 통과했지만 release scope, known limitations, release notes, traceability 문서가 불완전하다.
|
||||
- `needs-upstream-decision`: requirement, tolerance, reference artifact, I/O, acceptance evidence가 누락되었거나 상충한다.
|
||||
- `blocked`: 사용자 또는 Coordinator Agent 결정 없이는 안전하게 진행할 수 없다.
|
||||
|
||||
## 품질 기준
|
||||
|
||||
- `ready-for-release`는 Build/Test, Reference Verification, Physics Evaluation gate evidence가 모두 present and passing일 때만 사용할 수 있다.
|
||||
- 모든 `must` requirement는 acceptance criterion, test/reference evidence, release scope에 trace되어야 한다.
|
||||
- known limitations와 deferred/open issue는 Release Notes Draft에 명확히 기록되어야 한다.
|
||||
- missing evidence, contradictory upstream reports, unresolved defects, incomplete reference artifacts는 release pass가 아니라 적절한 `needs-*` 상태로 분류한다.
|
||||
- 이 문서는 FESA 내부 feature release readiness 판정을 위한 것이며, 외부 publish/deploy/package/tag/commit 자동화는 포함하지 않는다.
|
||||
@@ -0,0 +1,119 @@
|
||||
# 요구조건 문서 작성 가이드
|
||||
|
||||
이 디렉터리는 Requirement Agent가 작성하거나 제안한 기능별 요구조건 문서를 보관하는 위치다.
|
||||
|
||||
기본 파일명은 `docs/requirements/<feature-id>.md` 형식을 사용한다. 각 문서는 구현 전에 작성되며, Formulation Agent, I/O Definition Agent, Reference Model Agent, Implementation Planning Agent가 이어받을 수 있는 검증 가능한 baseline이어야 한다.
|
||||
|
||||
## Requirement Agent 역할
|
||||
|
||||
Requirement Agent는 솔버 기능 요청을 검증 가능한 요구조건으로 바꾼다.
|
||||
|
||||
수행한다:
|
||||
- 기능 범위, 제외 범위, 입력, 출력, 제약조건을 정의한다.
|
||||
- 해석 타입, 대상 요소, 자유도, 재료 모델, 경계조건, 하중 조건을 명확히 한다.
|
||||
- 절점 변위, 반력, 요소 내력, 응력 등 검증 물리량을 정한다.
|
||||
- tolerance와 reference artifact 요구사항을 기록한다.
|
||||
- Requirement Verification Matrix를 작성한다.
|
||||
|
||||
수행하지 않는다:
|
||||
- C++ 코드를 구현하지 않는다.
|
||||
- 유한요소 정식화를 확정하지 않는다.
|
||||
- C++ API나 파일 구조를 설계하지 않는다.
|
||||
- Abaqus, Nastran 또는 레퍼런스 솔버를 직접 실행하지 않는다.
|
||||
- reference CSV 결과를 생성하지 않는다.
|
||||
- 기능 완료 여부를 승인하지 않는다.
|
||||
|
||||
## 문서 템플릿
|
||||
|
||||
```markdown
|
||||
# <feature title> Requirements
|
||||
|
||||
## Metadata
|
||||
- feature_id: <feature-id>
|
||||
- title: <title>
|
||||
- status: draft | needs-user-decision | approved
|
||||
- owner_agent: requirement-agent
|
||||
- date: <YYYY-MM-DD>
|
||||
|
||||
## Purpose
|
||||
<기능 목적과 사용자/개발자 관점의 기대 동작>
|
||||
|
||||
## In Scope
|
||||
- <포함 범위>
|
||||
|
||||
## Out Of Scope
|
||||
- <제외 범위>
|
||||
|
||||
## Analysis Definition
|
||||
- analysis_type: linear static | nonlinear static | modal | other
|
||||
- elements: <대상 요소>
|
||||
- dofs: <자유도>
|
||||
- material_model: <재료 모델>
|
||||
- boundary_conditions: <경계조건>
|
||||
- loads: <하중 조건>
|
||||
- coordinate_system: <좌표계>
|
||||
- units: <단위계>
|
||||
|
||||
## Input Requirements
|
||||
- <입력 요구조건>
|
||||
|
||||
## Output Requirements
|
||||
- <출력 요구조건>
|
||||
|
||||
## Verification Quantities
|
||||
- nodal_displacement: required | not-applicable
|
||||
- reaction: required | not-applicable
|
||||
- element_internal_force: required | not-applicable
|
||||
- stress: required | not-applicable
|
||||
- strain: required | not-applicable
|
||||
- energy_or_residual: required | not-applicable
|
||||
|
||||
## Tolerance Policy
|
||||
- absolute_tolerance: <value or TBD>
|
||||
- relative_tolerance: <value or TBD>
|
||||
- norm_based_tolerance: <value or TBD>
|
||||
|
||||
## Reference Artifact Requirements
|
||||
Expected location: `references/<feature-id>/`
|
||||
|
||||
- `model.inp`: required | not-applicable
|
||||
- `metadata.json`: required
|
||||
- `displacements.csv`: required | not-applicable
|
||||
- `reactions.csv`: required | not-applicable
|
||||
- `element_forces.csv`: required | not-applicable
|
||||
- `stresses.csv`: required | not-applicable
|
||||
|
||||
## Requirement Verification Matrix
|
||||
|
||||
| id | statement | category | rationale | source | priority | verification_method | acceptance_criteria | tolerance | downstream_agents | status |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| FESA-REQ-<FEATURE>-001 | The FESA solver shall ... | functional | ... | user | must | reference-comparison | ... | ... | Reference Model Agent; Implementation Planning Agent | draft |
|
||||
|
||||
## Open Questions
|
||||
- <미확정 값 또는 사용자 결정 필요 사항>
|
||||
|
||||
## Downstream Handoff
|
||||
|
||||
### Research Agent
|
||||
- <조사할 이론, 논문, benchmark, 표준>
|
||||
|
||||
### Formulation Agent
|
||||
- <정식화 단계에 넘길 해석 타입, 요소, 재료, 자유도, 출력 물리량 계약>
|
||||
|
||||
### I/O Definition Agent
|
||||
- <입력/출력 schema 요구조건>
|
||||
|
||||
### Reference Model Agent
|
||||
- <필요한 references/<feature-id>/ artifact 목록>
|
||||
|
||||
### Implementation Planning Agent
|
||||
- <먼저 작성할 테스트와 acceptance criteria>
|
||||
```
|
||||
|
||||
## 품질 기준
|
||||
|
||||
- 모든 `must` 요구조건은 검증 방법과 acceptance criteria를 가져야 한다.
|
||||
- 모든 수치 요구조건은 단위, 좌표계, tolerance 또는 `TBD with owner`를 가져야 한다.
|
||||
- reference 비교가 필요한 요구조건은 필요한 CSV artifact를 명시해야 한다.
|
||||
- "빠르게", "정확하게", "Abaqus처럼" 같은 문장은 검증 가능한 기준으로 바꾸거나 open question으로 남겨야 한다.
|
||||
- 구현 방법, 정식화 세부식, C++ API는 이 문서에서 확정하지 않는다.
|
||||
@@ -0,0 +1,108 @@
|
||||
# 연구 브리프 작성 가이드
|
||||
|
||||
이 디렉터리는 Research Agent가 작성하거나 제안한 기능별 연구 브리프를 보관하는 위치다.
|
||||
|
||||
기본 파일명은 `docs/research/<feature-id>-research.md` 형식을 사용한다. 각 브리프는 Requirement Agent의 요구조건을 입력으로 받아 Formulation Agent, Numerical Review Agent, Reference Model Agent, Implementation Planning Agent가 사용할 수 있는 근거 자료를 제공해야 한다.
|
||||
|
||||
## Research Agent 역할
|
||||
|
||||
Research Agent는 FEM 이론, benchmark, verification reference, solver manual, 논문 자료를 조사한다.
|
||||
|
||||
수행한다:
|
||||
- 기능 요구조건과 관련된 이론 자료를 조사한다.
|
||||
- 요소별 benchmark, patch test, MMS, MES, convergence study 후보를 찾는다.
|
||||
- Abaqus/Nastran 결과와 비교 가능한 공개 benchmark 또는 문헌 해를 정리한다.
|
||||
- 자료의 신뢰도, 적용 범위, 한계, 상충 여부를 평가한다.
|
||||
- downstream agent가 사용할 수 있도록 출처와 근거를 추적 가능하게 남긴다.
|
||||
|
||||
수행하지 않는다:
|
||||
- C++ 코드를 구현하지 않는다.
|
||||
- 유한요소 정식화를 확정하지 않는다.
|
||||
- C++ API나 파일 구조를 설계하지 않는다.
|
||||
- Abaqus, Nastran 또는 레퍼런스 솔버를 직접 실행하지 않는다.
|
||||
- reference CSV 결과를 생성하지 않는다.
|
||||
- 기능 완료 여부를 승인하지 않는다.
|
||||
|
||||
## Source Reliability Tier
|
||||
|
||||
| tier | source type | examples | use |
|
||||
| --- | --- | --- | --- |
|
||||
| Tier 1 | 공식 표준, 공식 solver manual, 공식 benchmark, 공공기관 자료 | ASME V&V 10, Abaqus Verification Guide, Abaqus Benchmarks Guide, NAFEMS benchmarks, NASA FEMCI, official solver manuals | 우선 근거 |
|
||||
| Tier 2 | peer-reviewed paper, reproducible arXiv preprint, textbook | MMS/MES 논문, finite element textbook | 이론/검증 후보 |
|
||||
| Tier 3 | vendor example, university course note, technical blog | 공개 강의노트, 기술 블로그 | 보조 근거 |
|
||||
| Reject | forum answer, LLM summary, unsourced page, illegal PDF mirror, citation 없는 wiki성 문서 | forum, mirror PDF, 출처 없는 요약 | primary evidence로 사용 금지 |
|
||||
|
||||
## 문서 템플릿
|
||||
|
||||
```markdown
|
||||
# <feature title> Research Brief
|
||||
|
||||
## Metadata
|
||||
- feature_id: <feature-id>
|
||||
- source_requirement: docs/requirements/<feature-id>.md
|
||||
- status: draft | needs-user-decision | ready-for-formulation
|
||||
- owner_agent: research-agent
|
||||
- date: <YYYY-MM-DD>
|
||||
|
||||
## Research Questions
|
||||
- <Requirement Agent 또는 사용자가 넘긴 조사 질문>
|
||||
|
||||
## Source Inventory
|
||||
|
||||
| source_type | title | author_or_org | URL_or_DOI | access_date | reliability_tier | notes |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| standard | ASME V&V 10 | ASME | <URL> | <YYYY-MM-DD> | Tier 1 | VVUQ framework |
|
||||
|
||||
## Extracted Facts
|
||||
- <정식화에 필요한 사실, benchmark 조건, 검증 물리량, 재료/좌표/단위 가정>
|
||||
|
||||
## Candidate Benchmarks
|
||||
|
||||
| benchmark_id | source | benchmark_type | physics | target_quantities | artifact_needs | applicability |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| <id> | <source title> | analytical \| NAFEMS \| Abaqus Verification/Benchmark \| NASA/FEMCI \| paper-derived | <physics> | <targets> | <needed artifacts> | <limits> |
|
||||
|
||||
## Verification Relevance
|
||||
- code_verification: <관련성>
|
||||
- solution_verification: <관련성>
|
||||
- validation: <관련성>
|
||||
- reference_comparison: <관련성>
|
||||
|
||||
## Applicability Limits
|
||||
- linear_or_nonlinear: <scope>
|
||||
- deformation: small | large | TBD
|
||||
- element_type: <scope>
|
||||
- material_model: <scope>
|
||||
- geometry: <scope>
|
||||
- boundary_conditions: <scope>
|
||||
- loads: <scope>
|
||||
- coordinate_system: <scope>
|
||||
- units: <scope>
|
||||
|
||||
## Open Issues
|
||||
- <근거 부족, 상충 자료, 유료/비공개 자료, 사용자 결정 필요 사항>
|
||||
|
||||
## Downstream Handoff
|
||||
|
||||
### Formulation Agent
|
||||
- <이론 사실, governing assumptions, candidate equations, unresolved formulation questions>
|
||||
|
||||
### Numerical Review Agent
|
||||
- <수치 위험, convergence expectations, patch test/MMS/MES evidence, source disagreements>
|
||||
|
||||
### Reference Model Agent
|
||||
- <benchmark candidates, required reference artifacts, target quantities, source limitations>
|
||||
|
||||
### Implementation Planning Agent
|
||||
- <verification scenarios and testable acceptance evidence>
|
||||
```
|
||||
|
||||
## 품질 기준
|
||||
|
||||
- 모든 외부 근거는 source metadata와 reliability tier를 가져야 한다.
|
||||
- verified fact와 inference를 구분해야 한다.
|
||||
- benchmark 후보는 target quantity와 applicability limit을 가져야 한다.
|
||||
- Abaqus Benchmarks Guide와 Abaqus Verification Guide의 용도를 구분해야 한다.
|
||||
- NAFEMS benchmark는 independent standard test와 target value 후보로 기록해야 한다.
|
||||
- MMS/MES 자료는 code verification 후보로 기록하되 정식화 확정으로 취급하지 않는다.
|
||||
- 사용 불가능하거나 유료/비공개인 자료는 Open Issues에 남겨야 한다.
|
||||
@@ -0,0 +1,187 @@
|
||||
# Abaqus User Subroutines Research Brief
|
||||
|
||||
## Metadata
|
||||
- feature_id: abaqus-user-subroutines
|
||||
- source_requirement: N/A
|
||||
- status: draft
|
||||
- owner_agent: research-agent
|
||||
- date: 2026-06-08
|
||||
|
||||
## Research Questions
|
||||
- Abaqus User Subroutine은 어떤 해석 기능을 확장하며, Standard와 Explicit에서 어떤 subroutine family로 나뉘는가?
|
||||
- User subroutine 개발 시 고정해야 할 ABI, include, 입력 파일, 상태변수, debug, compile/link 계약은 무엇인가?
|
||||
- UMAT, VUMAT, UEL, VUEL, USDFLD/VUSDFLD, UVARM, UEXTERNALDB/VEXTERNALDB 중 FESA harness에 우선 반영해야 할 개발/검증 패턴은 무엇인가?
|
||||
- 현재 C++/MSVC/CMake/CTest 중심 harness를 Abaqus user subroutine 개발에 맞추려면 어떤 gate와 artifact 계약이 필요해지는가?
|
||||
|
||||
## Source Inventory
|
||||
|
||||
| source_type | title | author_or_org | URL_or_DOI | access_date | reliability_tier | notes |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| vendor manual mirror | Abaqus Analysis User's Guide 18.1.1, User subroutines: overview | Dassault Systemes SIMULIA, mirrored by University of Colorado | https://ceae-server.colorado.edu/v2016/books/usb/pt04ch18s01aus106.html | 2026-06-08 | Tier 1, version-specific mirror | Core lifecycle, include, execution, debugging, state variable, vectorization, parallelization rules. |
|
||||
| vendor manual mirror | Abaqus User Subroutines Reference Guide A.1, User subroutines index | Dassault Systemes SIMULIA, mirrored by University of Colorado | https://ceae-server.colorado.edu/v2016/books/sub/ap01s01.html | 2026-06-08 | Tier 1, version-specific mirror | Categorizes Standard, Explicit, CFD user subroutines by function. |
|
||||
| vendor manual mirror | Abaqus User Subroutines Reference Guide A.2, User subroutine functions listing | Dassault Systemes SIMULIA, mirrored by University of Colorado | https://ceae-server.colorado.edu/v2016/books/sub/ap01s02.html | 2026-06-08 | Tier 1, version-specific mirror | Defines one-line purpose for each user subroutine. |
|
||||
| vendor manual mirror | Abaqus Analysis User's Guide 26.7.1, User-defined mechanical material behavior | Dassault Systemes SIMULIA, mirrored by University of Colorado | https://ceae-server.colorado.edu/v2016/books/usb/pt05ch26s07abm69.html | 2026-06-08 | Tier 1, version-specific mirror | UMAT/VUMAT material behavior, stress/strain conventions, material constants, state variables, deletion, hourglass/shear caveats. |
|
||||
| vendor manual mirror | Abaqus User Subroutines Reference Guide 1.1.44, UMAT | Dassault Systemes SIMULIA, mirrored by University of Colorado | https://ceae-server.colorado.edu/v2016/books/sub/ch01s01asb44.html | 2026-06-08 | Tier 1, version-specific mirror | Standard user material interface; source page had slow/scripted HTML but search/open snippets exposed key warnings and variables. |
|
||||
| vendor manual mirror | Abaqus User Subroutines Reference Guide 1.2.22, VUMAT | Dassault Systemes SIMULIA, mirrored by University of Colorado | https://ceae-server.colorado.edu/v2016/books/sub/ch01s02asb22.html | 2026-06-08 | Tier 1, version-specific mirror | Explicit vectorized user material interface. |
|
||||
| vendor manual mirror | Abaqus User Subroutines Reference Guide 1.1.28, UEL | Dassault Systemes SIMULIA, mirrored by University of Colorado | https://ceae-server.colorado.edu/v2016/books/sub/ch01s01asb28.html | 2026-06-08 | Tier 1, version-specific mirror | Standard user element interface and LFLAGS procedure contract. |
|
||||
| vendor manual mirror | Abaqus Analysis User's Guide 3.2.18, Making user-defined executables and subroutines | Dassault Systemes SIMULIA, mirrored by University of Colorado | https://ceae-server.colorado.edu/v2016/books/usb/pt01ch03s02abx18.html | 2026-06-08 | Tier 1, version-specific mirror | `abaqus make`, compile/link environment parameters, shared library deployment. |
|
||||
| vendor manual mirror | Abaqus User Subroutines Reference Guide 2.1.15, Terminating an analysis | Dassault Systemes SIMULIA, mirrored by University of Colorado | https://ceae-server.colorado.edu/v2016/books/sub/ch02s01abu15.html | 2026-06-08 | Tier 1, version-specific mirror | `XIT` and `XPLB_EXIT` instead of Fortran `STOP`. |
|
||||
| vendor manual mirror | Abaqus User Subroutines Reference Guide 2.1.22, Ensuring thread safety | Dassault Systemes SIMULIA, mirrored by University of Colorado | https://ceae-server.colorado.edu/v2016/books/sub/ch02s01abu22.html | 2026-06-08 | Tier 1, version-specific mirror | Mutex/thread-safety guidance for common blocks, files, and shared resources. |
|
||||
| vendor manual mirror | Abaqus User Subroutines Reference Guide 2.1.23, Allocatable arrays | Dassault Systemes SIMULIA, mirrored by University of Colorado | https://ceae-server.colorado.edu/v2016/books/sub/ch02s01abu23.html | 2026-06-08 | Tier 1, version-specific mirror | Thread-local/global arrays as safer alternatives to common blocks and save variables. |
|
||||
| public code repository | davidmorinNTNU/ABAQUS_subroutines | David Morin, NTNU | https://github.com/davidmorinNTNU/ABAQUS_subroutines | 2026-06-08 | Tier 3 example repository | Fortran examples for UVARM, USDFLD/VUSDFLD, UHARD/VUHARD, UMAT/VUMAT, UEXTERNALDB/VEXTERNALDB. README states examples were checked in Abaqus 2019 double precision with Intel ifort 16.0.8 but are not guaranteed bug-free or validated. |
|
||||
|
||||
## Extracted Facts
|
||||
|
||||
### Scope and execution model
|
||||
|
||||
- Abaqus user subroutines extend features where normal data input is too restrictive. They can be written in C, C++, or Fortran and are supplied at analysis execution time with `abaqus job=job-name user={source-file | object-file}` or through Abaqus/CAE's user subroutine file field.
|
||||
- User subroutines are not saved to restart files. A restarted run must include the subroutine again and may include a revised one.
|
||||
- User subroutines cannot call one another directly. They can call Abaqus-provided utility routines where supported.
|
||||
- Fortran user subroutines must include `aba_param.inc` for Standard or `vaba_param.inc` for Explicit as the first statement after the argument list. C/C++ user subroutines must include `aba_for_c.h`, use Abaqus Fortran-callable naming conventions, and pass arguments by reference.
|
||||
- User code must only define variables listed by the subroutine documentation as variables to be defined. Rewriting information-only variables has unpredictable effects.
|
||||
- The command `abaqus make` can build user postprocessing executables and user subroutine object/shared libraries. The relevant environment parameters include `compile_cpp`, `compile_fortran`, `link_exe`, and `link_sl`. Prebuilt user subroutine shared libraries can be found through `usub_lib_dir`.
|
||||
|
||||
### Development and debugging constraints
|
||||
|
||||
- Abaqus recommends thorough testing on small examples before production use. The manual specifically emphasizes small models where the user subroutine is the only complicated part.
|
||||
- Debug output can be written to Abaqus-owned units: Standard `.msg` through unit 7, Standard `.dat` or Explicit `.log` through unit 6. Those units must not be opened by user code. Other user files should use allowed unit ranges and full paths because Abaqus uses scratch directories.
|
||||
- `ABA_PARALLEL_DEBUG` can increase verbosity and expose compile/link/debug information.
|
||||
- Use `XIT` in Standard and `XPLB_EXIT` in Explicit instead of `STOP` so Abaqus closes analysis files properly.
|
||||
- Large arrays should not live on the stack. Native allocatable arrays or Abaqus allocatable-array utilities should be used for large or persistent data.
|
||||
- Parallel jobs are allowed, but common blocks, common files, global arrays, and shared resources must be guarded for thread safety. Abaqus provides mutex utilities and local/global allocatable array utilities.
|
||||
|
||||
### Model identity and data conventions
|
||||
|
||||
- Coordinates passed to user subroutines are generally global assembly coordinates unless a specific interface says otherwise.
|
||||
- Node and element numbers passed into user subroutines are Abaqus internal global numbers. `GETPARTINFO`/`VGETPARTINFO` and `GETINTERNAL`/`VGETINTERNAL` are available when original part instance names and local numbers are needed, but their use is not free.
|
||||
- Set and surface names passed into user subroutines are uppercase and, for assemblies, prefixed by assembly and part instance names.
|
||||
- Solution-dependent state variables are allocated differently depending on the subroutine family. Common material subroutines usually use `*DEPVAR`; UEL uses `*USER ELEMENT, VARIABLES=...`; contact/interface subroutines use their own option-specific `DEPVAR` contracts.
|
||||
- State variable output is available through `SDV`/`SDVn` for supported material/integration-point cases.
|
||||
|
||||
### Standard vs Explicit API shape
|
||||
|
||||
- Abaqus/Standard subroutines are generally scalar per material point, element, node, or contact point. Standard material/element/interface subroutines are often called twice in the first iteration of an increment to form initial stiffness and once in later iterations, with extra calls in some dynamic procedures.
|
||||
- Abaqus/Explicit subroutines use a vector interface: blocks of data for `nblock` material points are passed to routines such as VUMAT. `vaba_param.inc` defines `maxblk` for dimensioning temporary arrays.
|
||||
- Abaqus/Explicit has single and double precision executables. The precision is determined by the executable and `vaba_param.inc`; user code should follow Abaqus precision conventions instead of hard-coding incompatible types.
|
||||
|
||||
### UMAT and VUMAT
|
||||
|
||||
- User-defined mechanical behavior is implemented through UMAT for Abaqus/Standard and VUMAT for Abaqus/Explicit. This interface allows arbitrary mechanical constitutive models but is explicitly not a routine exercise.
|
||||
- UMAT and VUMAT operate on Cauchy stress components. VUMAT quantities are expressed in a corotational coordinate system at the material point, and Abaqus uses the Green-Naghdi stress rate in VUMAT; built-in Explicit materials may use different objective stress rates.
|
||||
- Mechanical material constants are supplied through `*USER MATERIAL`. Abaqus/Explicit also requires `*DENSITY`.
|
||||
- In Standard, UMAT must return updated stress, updated state variables, and the material Jacobian `DDSDDE`. The Jacobian strongly controls Newton convergence and computational efficiency. If the Jacobian is nonsymmetric, `UNSYMM` should be requested.
|
||||
- In Explicit, VUMAT receives blocks of points and must return `stressNew` and `stateNew`; it can also update internal and inelastic energy arrays.
|
||||
- Element deletion can be controlled by a state variable with `*DEPVAR, DELETE=...`; deleted material points carry no stress and cannot be reactivated.
|
||||
- For reduced-integration, beam, shell, and transverse-shear cases, user material behavior may require explicit hourglass or transverse shear stiffness choices because Abaqus may not be able to infer them from user material data.
|
||||
- Hybrid element behavior with UMAT has special total/incremental/incompressible formulations. Nearly incompressible hyperelastic user materials can converge poorly if the wrong hybrid formulation is used.
|
||||
|
||||
### UEL and VUEL
|
||||
|
||||
- UEL defines an Abaqus/Standard user element. The core interface includes `RHS`, `AMATRX`, `SVARS`, `ENERGY`, element-level DOF counts, properties, coordinates, displacements, velocities/accelerations as relevant, time, step/increment, and flags.
|
||||
- `LFLAGS` drives what the UEL must compute. For normal implicit time incrementation, UEL must define residual vector `RHS` and Jacobian/stiffness matrix `AMATRX`; other flag values request stiffness-only, damping-only, mass-only, residual-only, initial acceleration, or perturbation output contributions.
|
||||
- UEL examples in the manual include a two-node structural user element behaving as a linear truss, with `*USER ELEMENT`, `*ELEMENT`, and `*UEL PROPERTY` input contracts. This is a strong candidate for a first reproducible artifact pattern if the project targets user elements.
|
||||
- VUEL is the Explicit user element analogue, but this investigation did not yet drill into its detailed interface. It should be treated as a separate research item before implementation planning.
|
||||
|
||||
### Other relevant subroutine families
|
||||
|
||||
- `USDFLD`/`VUSDFLD`: redefine field variables at material points; useful for field-dependent material behavior and damage/softening controls.
|
||||
- `UFIELD`/`VUFIELD`: define predefined field variables, often nodal or field-level before interpolation.
|
||||
- `UVARM`: generate custom element output in Standard; useful for exposing derived variables from existing material state.
|
||||
- `UEXTERNALDB`/`VEXTERNALDB`: manage external databases, files, cross-subroutine data exchange, or coupling with external programs at key analysis points.
|
||||
- `UHARD`/`VUHARD`: define hardening/yield surface size behavior without replacing the full material update.
|
||||
- `ORIENT`: define material/local directions.
|
||||
- `DLOAD`/`VDLOAD`, `DISP`/`VDISP`, `UAMP`/`VUAMP`: load, motion, and amplitude customization.
|
||||
- `UINTER`/`VUINTER`/`VUINTERACTION`, `FRIC`/`VFRIC`: contact/interface behavior customization.
|
||||
|
||||
### Observed public example repository patterns
|
||||
|
||||
- The NTNU repository contains examples for UVARM, USDFLD/VUSDFLD, UHARD/VUHARD, UMAT/VUMAT, UEXTERNALDB/VEXTERNALDB, plus a Modified Johnson-Cook example combining VUHARD and VUSDFLD.
|
||||
- Each example folder generally contains a Fortran subroutine, Abaqus input files, post-processing Python scripts, plotting scripts, and a PDF describing the subroutine, input file structure, and results.
|
||||
- The V_UMAT folder includes paired Standard/Explicit material examples: `UMAT.f`, `UMAT_MODEL.f`, `VUMAT.f`, `VUMAT_SHELL.f`, Standard/Explicit `.inp` files, post-processing scripts, plotting scripts, and a talk PDF.
|
||||
- The V_USDFLD folder contains Standard and Explicit field-variable variants and both patch and two-element post-processing scripts.
|
||||
- The repository README cautions that the examples were checked but may not be bug-free and are not necessarily validation-quality. Therefore this repository is useful as a development-pattern source, not as acceptance evidence.
|
||||
|
||||
## Candidate Benchmarks and Verification Artifacts
|
||||
|
||||
| benchmark_id | source | benchmark_type | physics | target_quantities | artifact_needs | applicability |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| umat-single-element-elastic | Abaqus manuals, inferred from single-element testing guidance | smoke / analytical | Standard user material | stress, `DDSDDE`, state variables, convergence behavior | one-element `.inp`, user material constants, expected analytical stress/Jacobian CSV, `.msg` summary | Best first harness target for UMAT ABI and constitutive update tests. |
|
||||
| vumat-single-element-elastic | Abaqus manuals, inferred from single-element testing guidance | smoke / analytical | Explicit vectorized user material | `stressNew`, `stateNew`, energy arrays, stable explicit response | one-element Explicit `.inp`, density, expected stress history CSV | Tests `nblock` loop and tensor ordering/precision assumptions. |
|
||||
| umat-vs-built-in-linear-elastic | Abaqus material docs and UMAT/VUMAT contract | regression / reference comparison | Standard Cauchy stress update | stress, strain, SDV, reaction/displacement if run through Abaqus | built-in and UMAT `.inp` pair, reference CSVs from approved Abaqus run | Requires user-generated Abaqus artifacts; not generated by agents. |
|
||||
| vumat-vs-built-in-linear-elastic | Abaqus material docs and VUMAT contract | regression / reference comparison | Explicit user material | stress, strain, internal energy, displacement/reaction | built-in and VUMAT `.inp` pair, reference CSVs | Must control objective-rate and tensor-ordering assumptions. |
|
||||
| uel-two-node-truss | Abaqus UEL manual example | analytical / user element | Standard user element | element residual, stiffness, nodal displacement, reaction, energy | `*USER ELEMENT` truss `.inp`, UEL source, expected truss analytical CSV | Strong first UEL target; maps cleanly to existing FESA truss/bar solver ideas. |
|
||||
| usdfld-field-update | NTNU V_USDFLD examples plus Abaqus field-variable docs | regression / patch | Field-dependent material data | field values, SDV, stress changes driven by field | Standard/Explicit `.inp`, field/SDV CSVs, post scripts | Example repository useful for structure; official acceptance must come from controlled reference artifacts. |
|
||||
| uexternaldb-file-exchange | Abaqus overview and NTNU V_UEXTERNALDB examples | integration / harness | External file/database lifecycle | call order, file creation, increment/step metadata | `.inp`, user subroutine, expected external log file schema | Useful for harnessing file I/O and thread-safety policy. |
|
||||
|
||||
## Verification Relevance
|
||||
|
||||
- code_verification: High. UMAT/VUMAT/UEL logic can be unit-tested outside Abaqus if constitutive kernels or element kernels are factored away from the Abaqus ABI wrapper.
|
||||
- solution_verification: High but artifact-dependent. Abaqus runs must be performed by a human or approved external process and stored as reference artifacts.
|
||||
- validation: Out of scope for this first research pass. Public examples and single-element checks do not validate physical material models against experiments.
|
||||
- reference_comparison: High. The current FESA reference-comparison pattern can be adapted to compare approved Abaqus `.odb`-extracted CSVs, `.dat`/`.msg` summaries, and post-processing outputs.
|
||||
|
||||
## Applicability Limits
|
||||
|
||||
- The main manual sources are Abaqus 2016 mirrors. Interface details must be rechecked against the target installed Abaqus version before implementation.
|
||||
- Official Dassault documentation may require customer access; the accessible sources here are university mirrors of the 2016 manuals.
|
||||
- This research does not approve any specific material model, element formulation, stress integration algorithm, or tangent derivation.
|
||||
- This research does not create, modify, or validate reference CSVs.
|
||||
- This research does not run Abaqus, compile Fortran, or test compiler/linker compatibility.
|
||||
- The project harness currently assumes C++17/MSVC/CMake/CTest. Abaqus user subroutine development will likely require a new or extended validation path for Fortran/C/C++ source plus `abaqus job=... user=...` and/or `abaqus make`, guarded by environment detection.
|
||||
- The NTNU examples are useful for repository layout and one/two-element workflows, but their README explicitly limits their verification/validation claims.
|
||||
|
||||
## Implications for This Project Harness
|
||||
|
||||
- The project should not simply rename the existing C++ solver harness. Abaqus user subroutine development has a different execution boundary: source is compiled and linked by the Abaqus execution procedure, not by CMake alone.
|
||||
- A pragmatic architecture is to split each subroutine into:
|
||||
- a thin Abaqus ABI wrapper matching the exact manual signature;
|
||||
- a testable kernel for constitutive update, field update, element residual/tangent, or external database behavior;
|
||||
- small Abaqus `.inp` reference models and approved CSV/log artifacts.
|
||||
- The current TDD guard should be extended or complemented for Fortran/C/C++ Abaqus source. For production subroutine changes, require either:
|
||||
- a kernel unit test, or
|
||||
- an Abaqus artifact comparison test, or
|
||||
- both for UMAT/VUMAT/UEL.
|
||||
- Workspace validation should gain explicit modes:
|
||||
- no-Abaqus mode: run Python harness tests and pure kernel tests only;
|
||||
- Abaqus-available mode: run compile/link smoke tests and selected `abaqus job=... user=...` reference cases;
|
||||
- artifact-comparison mode: compare stored solver output CSV/log artifacts without rerunning Abaqus.
|
||||
- Reference artifact contracts should include `.inp`, user subroutine source version/hash, Abaqus version, compiler version, precision, command line, `.msg`/`.dat`/`.log` tail, extracted CSVs, and post-processing script provenance.
|
||||
- For UMAT/VUMAT, the first implementation gate should focus on a simple elastic or J2 plastic single-element model before complex material laws.
|
||||
- For UEL, the first implementation gate should focus on a two-node truss/bar element because it has analytical residual/stiffness checks and aligns with the existing FESA solver roadmap.
|
||||
|
||||
## Downstream Handoff
|
||||
|
||||
### Requirement Agent
|
||||
- Decide the primary target: UMAT, VUMAT, UEL/VUEL, field subroutines, output subroutines, or external database routines.
|
||||
- Record target Abaqus version, operating system, compiler/toolchain, and whether Abaqus is available for local validation.
|
||||
- Define whether the project will develop Fortran-first subroutines, C/C++ subroutines, or Fortran ABI wrappers over C++ kernels.
|
||||
|
||||
### I/O Definition Agent
|
||||
- Define supported Abaqus input keyword subset for each target subroutine family:
|
||||
- UMAT/VUMAT: `*MATERIAL`, `*USER MATERIAL`, `*DEPVAR`, `*DENSITY`, output requests.
|
||||
- UEL: `*USER ELEMENT`, `*UEL PROPERTY`, `*ELEMENT`, output requests.
|
||||
- USDFLD/VUSDFLD: `*FIELD`, `*DEPVAR`, material field dependency contracts.
|
||||
- Define CSV schemas for stress, strain, state variables, element residual/stiffness summaries, displacement, reaction, energy, and call-log/debug outputs.
|
||||
|
||||
### Reference Model Agent
|
||||
- Start with one-element UMAT/VUMAT and two-node UEL truss models.
|
||||
- Require metadata for Abaqus version, compiler version, precision, command, input deck, source hash, and extraction script.
|
||||
- Treat all generated Abaqus outputs as read-only reference artifacts after approval.
|
||||
|
||||
### Implementation Planning Agent
|
||||
- Plan RED tests around pure kernels first, then ABI wrapper compile smoke, then Abaqus artifact comparison if Abaqus is available.
|
||||
- Require targeted tests for tensor component ordering, state variable allocation, material constant parsing, element deletion flags, and `DDSDDE` symmetry/unsymmetry policy.
|
||||
- Preserve no-Abaqus validation path so the repository remains testable without commercial solver access.
|
||||
|
||||
### Numerical Review Agent
|
||||
- For UMAT, review stress update algorithm, objective rates, state integration, consistent tangent, symmetry, and hybrid/incompressible assumptions.
|
||||
- For VUMAT, review corotational frame assumptions, vectorization loop, stable explicit response, energy accounting, and deleted material point behavior.
|
||||
- For UEL, review residual sign convention, tangent consistency, mass/damping/stiffness contributions, `LFLAGS` branching, and energy terms.
|
||||
|
||||
## Open Issues
|
||||
|
||||
- Target Abaqus version is not yet specified. The cited manuals are Abaqus 2016.
|
||||
- Target implementation language is not yet specified. Abaqus supports Fortran, C, and C++, but most public examples and legacy workflows are Fortran-first.
|
||||
- Windows compiler compatibility is not yet specified. Abaqus, Visual Studio, Intel Fortran/oneAPI, and MSVC versions must be aligned.
|
||||
- It is not yet clear whether local Abaqus execution is available in this workspace. The current harness should keep a no-Abaqus path.
|
||||
- The project needs a license policy for third-party example code before copying or adapting code from public repositories.
|
||||
Reference in New Issue
Block a user