Files
FESADev/docs/PRD.md
T
2026-08-09 01:35:44 +09:00

12 KiB
Raw Blame History

PRD: FESA 구조해석 솔버

목표

FESA는 Abaqus .inp keyword subset을 입력으로 받아 유한요소법 기반 구조해석을 수행하고, step/frame 단위 결과를 results.h5 HDF5로 저장하며, Abaqus reference CSV rows와 비교 가능한 C++17/MSVC 솔버를 제공한다.

이 프로젝트의 성공 기준은 단순 실행 성공이 아니다. 기능은 요구조건, 정식화, I/O 계약, C++ 테스트, reference comparison, physics sanity, release readiness를 모두 통과해야 완료된다.

사용자

  • Solver developer: C++17/MSVC/CMake/CTest 환경에서 요소, 재료, 해석 절차, solver backend를 구현한다.
  • Verification reviewer: reference artifact, tolerance, physics sanity, release readiness를 검토한다.
  • Analyst preparing Abaqus-compatible input subsets: FESA가 지원하는 제한된 .inp subset에 맞춰 입력 모델을 준비한다.
  • Codex agent workflow operator: project-local agent와 skill을 사용해 요구조건부터 release까지의 gate를 운영한다.

핵심 기능

  1. Abaqus .inp keyword subset parser와 내부 Domain semantic model 생성
  2. AnalysisModel, DofManager, AnalysisState 기반의 step별 equation system 구성
  3. 선형 정적 해석을 시작점으로 하는 Analysis procedure 계층
  4. 요소, 재료, 경계조건, 하중의 runtime-polymorphic base interface
  5. sparse matrix pattern 생성, 전역 행렬/벡터 조립, 제약조건 적용
  6. LinearSolver adapter를 통한 MKL PARDISO backend와 향후 iterative solver 확장
  7. HDF5 기반 versioned step/frame field-result 저장과 향후 history-output 확장 경계
  8. FESA HDF5 rows와 reference/<model-id>/ 아래 Abaqus reference CSV rows의 직접 비교
  9. CMake/MSVC/x64/Debug, CTest 기반 개발 검증

V0 범위

  • 선형 정적 해석 파이프라인 구현
  • 승인된 첫 end-to-end 기능: 2절점 3D EulerBernoulli beam, Abaqus TYPE=B33
  • 입력 파일당 하나의 *STEP, *STATIC
  • 절점당 자유도 [UX, UY, UZ, URX, URY, URZ]
  • 축, 두 방향 굽힘, Saint-Venant 비틀림 및 선형 등방 탄성
  • 최소 Abaqus keyword subset:
    • *HEADING
    • *PART, *END PART
    • *NODE, *ELEMENT, TYPE=B33
    • *NSET, *ELSET, including GENERATE
    • *MATERIAL
    • *ELASTIC
    • *BEAM GENERAL SECTION, SECTION=GENERAL
    • *SECTION POINTS
    • *ASSEMBLY, *END ASSEMBLY
    • *INSTANCE, *END INSTANCE
    • *BOUNDARY
    • *CLOAD
    • *STEP, *STATIC, *END STEP
  • *PREPRINT, *RESTART, *TRANSVERSE SHEAR STIFFNESS, *OUTPUT, FIELD, *OUTPUT, HISTORY, *NODE OUTPUT, *ELEMENT OUTPUT, *CONTACT OUTPUT과 그에 속한 미지원 variable data는 warning 후 no-op 처리
  • 같은 part의 여러 identity instance와 stable source label mapping
  • nonzero prescribed displacement를 포함한 free/constrained partition
  • formulation의 constant local line-load equivalent nodal vector kernel. V0 parser와 CLI는 *DLOAD를 지원하거나 이 kernel을 호출하지 않음
  • deterministic COO-to-CSR stiffness assembly
  • MKL PARDISO 기반 sparse direct solver
  • stiffness factorization과 load-vector substitution 분리
  • displacements, reactions, equilibrium end actions, section resultants, generalized results, axial S11 output
  • HDF5 result schema v0
  • fesa.exe <model.inp> --output <results.h5> CLI
  • 승인된 reference/cantilever beam/ B33 결과와 displacement, reaction, section resultant comparison; beam stress reference comparison은 N/A

기능 요구조건

ID 요구조건 Acceptance Criteria Verification Method
FESA-PRD-001 FESA는 Abaqus .inp full compatibility가 아니라 승인된 keyword subset만 지원해야 한다. 지원/미지원 keyword가 문서화되고, 미지원 keyword는 구조화된 diagnostic을 남긴다. I/O contract review, parser unit test
FESA-PRD-002 FESA는 입력 모델을 Domain으로 변환해야 한다. nodes, elements, materials, properties, sets, loads, boundary conditions, step definitions가 semantic model에 보존된다. parser integration test
FESA-PRD-003 FESA는 현재 step의 실행 view를 AnalysisModel로 구성해야 한다. active elements, loads, boundary conditions, properties/materials가 Domain 복사 없이 참조 또는 id view로 연결된다. analysis model unit test
FESA-PRD-004 FESA는 equation numbering과 constraint/free mapping을 DofManager에 집중해야 한다. Node/Element 내부에 equation id를 분산 저장하지 않는다. code review, DofManager unit test
FESA-PRD-005 FESA는 해석 중 변하는 물리량을 AnalysisState에 저장해야 한다. V0 displacement, external/internal force, residual, constrained reaction, step/frame identity와 element recovery rows가 출력에 연결되고 velocity, acceleration, temperature, iteration history는 할당하지 않는다. state unit test, integration test
FESA-PRD-006 FESA는 solver 결과를 HDF5 authoritative output results.h5로 저장해야 한다. V0 step/frame field results, metadata, diagnostics가 schema version과 함께 저장된다. HDF5 schema test
FESA-PRD-007 FESA는 Abaqus reference CSV rows와 비교 가능한 deterministic row mapping을 제공해야 한다. displacement와 reaction은 node identity, B33 section resultant는 정규화된 node station identity로 비교하고 stress reference comparison은 N/A로 기록한다. reference comparison report
FESA-PRD-008 FESA의 production C++ 변경은 테스트를 먼저 작성하고 실패를 확인한 뒤 구현해야 한다. 관련 C++ test file, RED 실패와 후속 GREEN 성공 증거가 있고 Stop의 전체 MSVC build/test가 통과한다. implementation report, Hook guardrail, CTest
FESA-PRD-009 FESA는 외부 라이브러리 API를 solver core에 직접 노출하지 않아야 한다. MKL, TBB, HDF5 의존은 adapter module에 제한된다. architecture review, dependency review
FESA-PRD-010 FESA 기능 완료는 reference comparison과 physics sanity 통과를 요구해야 한다. 수치 tolerance와 물리 검토가 모두 pass이고 known limitation이 기록된다. verification report, physics evaluation report
FESA-PRD-011 V0는 입력 파일당 하나의 linear static step과 Abaqus B33 3D Euler beam만 해석해야 한다. 단일 B33 model은 해석되고, B31과 두 번째 step은 구조화된 unsupported diagnostic으로 거부된다. parser/semantic unit test, CLI integration test
FESA-PRD-012 V0는 Part/Assembly/Instance wrapper와 source identity를 보존해야 한다. 여러 identity instance의 node/element/set label이 stable internal ID로 deterministic하게 매핑되고 transform 또는 nested assembly는 거부된다. semantic mapping unit test
FESA-PRD-013 Output-request allowlist는 해석 의미를 변경하지 않아야 한다. 승인 keyword와 variable data는 warning 후 no-op이고, allowlist 밖 model-affecting keyword는 오류이며 기본 결과는 output request와 무관하게 생성된다. parser diagnostic test, HDF5 integration test
FESA-PRD-014 선형 정적 pipeline은 stiffness factorization과 load substitution을 분리해야 한다. Kff factorization이 load vector assembly보다 먼저 수행되고, rhs=Ff-Kfc*dc substitution으로 full displacement를 복구한다. orchestration test, solver-adapter test
FESA-PRD-015 FESA는 V0 결과와 diagnostic을 안정된 외부 계약으로 출력해야 한다. CLI가 0=success, 2=usage, 3=input, 4=model, 5=solver, 6=HDF5 exit code를 사용하고 diagnostic field가 계약과 일치하며 HDF5가 displacement, reaction, end force, section resultant, generalized strain/resultant, axial S11을 포함하고 실패 시 불완전한 최종 파일을 남기지 않는다. CLI integration test, HDF5 schema/atomicity test
FESA-PRD-016 Dense와 sparse math storage 및 backend 경계를 분리해야 한다. Vector는 contiguous, Matrix는 row-major contiguous storage와 MKL CBLAS를 사용하고 SparseMatrix는 별도 0-based CSR 타입이며 MKL 타입이 public core API에 노출되지 않는다. math unit test, dependency review
FESA-PRD-017 B33 reference comparison은 component-scale 혼합 tolerance를 사용해야 한다. 모든 matched row가 abs_error <= absolute_floor + 1e-6 * reference_scale을 만족하고 missing/extra/nonfinite row는 comparison 전에 실패한다. reference comparison unit/integration test, verification report
FESA-PRD-018 승인된 B33 reference artifact는 read-only baseline으로 유지해야 한다. reference/cantilever beam/ 파일을 rename, rewrite, 보정하지 않고 exact legacy path로 읽으며 B33 element type과 expected headers를 artifact check에서 확인한다. artifact inventory, Git diff review
FESA-PRD-019 B33 beam section과 local axis를 Abaqus 의미에 맞게 매핑해야 한다. n1 -> local y, t x n1 -> local z, Iy=I11, Iz=I22, I12=0을 적용하고 nonpositive property, zero-length element, tangent-parallel guide vector를 구조화된 model diagnostic으로 거부한다. section-mapping unit test, element geometry test

비기능 요구조건

  • MSVC x64 Debug 환경에서 configure, build, CTest를 검증한다.
  • reference test 결과는 deterministic해야 한다.
  • HDF5 schema는 versioned contract로 관리한다.
  • B33 reference tolerance는 model, step/frame, quantity, component별 Abaqus scale만 사용한다.
  • 승인된 SI B33 bundle의 absolute floor는 displacement/rotation 1e-9, force/moment 1e-3이며 relative coefficient는 1e-6이다.
  • parser, solver, HDF5 writer는 실패 원인을 구조화된 diagnostic으로 보고한다.
  • oneMKL, oneTBB, HDF5는 CMake에서 명시 탐지하고 실패 원인을 분류한다.
  • 대규모 모델 성능 최적화보다 Phase 1 명확성, 테스트 가능성, 검증 traceability를 우선한다.

Acceptance Gates

  1. Requirements approved: 기능 범위, 제외 범위, 입력, 출력, tolerance, 검증 물리량이 정의되어 있다.
  2. Research evidence complete: 정식화와 benchmark 근거가 신뢰도와 한계와 함께 정리되어 있다.
  3. Formulation reviewed: 약형, shape function, B matrix, constitutive contract, 수치적분, output recovery가 검토되어 있다.
  4. I/O contract approved: Abaqus keyword subset, internal model mapping, HDF5 result contract, reference CSV comparison row contract가 승인되어 있다.
  5. Tests fail before implementation: C++/integration/reference test를 제품 코드보다 먼저 작성하고 같은 Step 안에서 RED 실패와 후속 GREEN 성공을 확인한다.
  6. CMake/CTest pass: MSVC/x64/Debug 기준 configure, build, test가 통과한다.
  7. Reference comparison pass: FESA results.h5의 displacement, reaction, section resultant rows가 승인된 B33 CSV와 documented identity 및 component-scale 혼합 tolerance 안에 있다. Beam stress comparison은 명시적 N/A다.
  8. Physics sanity pass: equilibrium, reaction consistency, displacement direction, symmetry, section-force consistency와 normalized residual이 검토되어 있다.
  9. Release readiness pass: acceptance traceability, known limitations, release notes draft가 준비되어 있다.

제외 사항

  • Abaqus full parser 호환
  • Abaqus B31/Timoshenko beam
  • 다중 analysis step과 step 간 load/BC propagation
  • instance translation/rotation, nested assembly 및 dependent/independent mesh semantics
  • I12 != 0, taper, offset, release, curved beam, warping
  • Abaqus *DLOAD 입력과 Domain distributed-load object
  • 기하·재료비선형, dynamics, contact, thermal effects
  • transverse shear stress와 torsional shear stress recovery
  • beam stress에 대한 Abaqus reference comparison
  • Abaqus, Nastran 또는 reference solver 직접 실행 자동화
  • Agent가 Abaqus reference CSV 파일을 임의 생성 또는 수정하는 작업
  • GUI 또는 postprocessor
  • Visual Studio .sln/.vcxproj 전용 MSBuild workflow
  • plasticity와 shell end-to-end 구현