# Reference Model 문서 작성 가이드 이 디렉터리는 Reference Model Agent가 작성하거나 제안한 기능별 reference model 설계 문서를 보관하는 위치다. Reference Model Agent는 FESA 기능 검증에 필요한 Abaqus `.inp` 기반 테스트 모델 포트폴리오와 `references///` artifact bundle 계약을 정의한다. Agent는 Abaqus, Nastran 또는 레퍼런스 솔버를 직접 실행하지 않고, reference CSV 값을 생성하지 않으며, solver 결과 비교나 release readiness 승인도 하지 않는다. 기본 파일명은 `docs/reference-models/-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///` 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 # Reference Models ## Metadata - feature_id: - source_requirement: docs/requirements/.md - source_research: docs/research/-research.md - source_formulation: docs/formulations/-formulation.md - source_numerical_review: docs/numerical-reviews/-review.md - source_io_definition: docs/io-definitions/-io.md - status: draft | needs-user-decision | needs-reference-artifacts | ready-for-implementation-planning | blocked - owner_agent: reference-model-agent - date: ## Reference Strategy - verification_scope: - code_verification: - solution_verification: - benchmark_reference_comparison: - excluded_validation_scope: ## Model Inventory | model_id | category | purpose | status | required_artifacts | | --- | --- | --- | --- | --- | | | smoke | | draft | model.inp, metadata.json, required CSVs | | | analytical | | draft | model.inp, metadata.json, required CSVs | | | patch test | | draft | model.inp, metadata.json, required CSVs | | | benchmark | | draft | model.inp, metadata.json, required CSVs | | | regression | | draft | model.inp, metadata.json, required CSVs | | | negative/invalid-input | | draft | model.inp, metadata.json | ## Model Record ### - category: smoke | analytical | patch test | benchmark | regression | negative/invalid-input - purpose: - verified_requirements: [] - analysis_type: - element_type: - material: - boundary_conditions: - loads: - expected_physical_quantities: displacement | reaction | element force | stress | strain | energy | residual - tolerance: - source: - artifact_status: draft | needs-reference-artifacts | ready-for-implementation-planning | blocked ## Abaqus Input Requirements - input_file: references///model.inp - supported_keyword_subset: -io.md> - model_data: - history_data: - output_requests: - unsupported_keyword_policy: unsupported | ignored-with-warning | requires-user-decision ## Artifact Bundle Contract ```text references/ / / 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": "", "model_id": "", "artifact_status": "draft | needs-reference-artifacts | ready-for-implementation-planning | blocked", "abaqus_version": "", "generation_owner": "", "generation_date": "", "source_documents": ["docs/requirements/.md"], "units": "", "coordinate_system": "global Cartesian unless otherwise documented", "analysis_type": "", "element_types": [""], "material_values": {}, "boundary_condition_summary": "", "load_summary": "", "output_requests": ["U", "RF", "S", ""], "csv_schema_version": "", "tolerance_policy": "", "limitations": [""] } ``` ## 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 | | --- | --- | --- | --- | --- | --- | --- | | | | displacement | displacements.csv | | reference-comparison | draft | | | | reaction | reactions.csv | | reference-comparison | draft | | | | element force | element_forces.csv | | reference-comparison | draft | | | | stress | stresses.csv | | 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 - ### Implementation Planning Agent - ### Reference Verification Agent - ### Physics Evaluation Agent - ``` ## 품질 기준 - Reference model의 목적과 검증 대상 requirement가 명확해야 한다. - `model.inp`는 Abaqus input file이며, 기능별 supported keyword subset을 따라야 한다. - model data와 history data를 구분해야 한다. - output request와 required CSV 사이의 연결이 명확해야 한다. - `references///` 구조와 필수 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": "", "model_id": "", "artifact_status": "draft | needs-reference-artifacts | ready-for-comparison | blocked", "abaqus": { "version": "", "precision": "single | double", "command": "abaqus job= user=" }, "compiler": { "vendor": "Intel oneAPI", "name": "ifx | ifort", "version": "" }, "subroutine": { "entry_points": ["UMAT"], "source_files": [ { "path": "src/fortran/abaqus/UMAT.for", "language": "Fortran", "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.