# Step 2: Linear Static Analysis ## 읽어야 할 파일 - `/AGENTS.md` - `/docs/PRD.md` - `/docs/ARCHITECTURE.md` - `/docs/ADR.md` - `/include/fesa/model/domain.hpp` - `/include/fesa/fem/dof_manager.hpp` - `/include/fesa/assembly/` - `/include/fesa/constraints/` - `/include/fesa/solvers/linear/` - `/include/fesa/results/result_database.hpp` ## 작업 기존 production 모듈을 조율하는 `LinearStaticAnalysis` lifecycle을 구현한다. ```cpp struct AnalysisRunResult final { bool succeeded; std::optional results; std::vector diagnostics; }; class LinearStaticAnalysis final { public: [[nodiscard]] AnalysisRunResult run(const Domain&) const; }; ``` - parser나 HDF5를 호출하지 않고 이미 검증된 Domain을 입력받는다. - DofManager, pattern/assembly, BC elimination, PARDISO, full reconstruction, reaction recovery, nodal ResultDatabase 순서로 실행한다. - hand-check 가능한 한 요소 Domain으로 변위, 반력, residual을 먼저 테스트한다. ## Acceptance Criteria ```powershell cmake --build --preset windows-debug ctest --preset windows-debug -R "LinearStaticAnalysis|StaticEquilibrium" --output-on-failure ctest --preset windows-debug --output-on-failure ``` ## 검증 절차 1. analysis test가 연결 누락으로 실패하는 것을 확인한다. 2. orchestration만 구현하고 수치 kernel을 복제하지 않는다. 3. \(Ku-f-r\) 평형과 finite result를 검사한다. 4. 전체 테스트와 index를 갱신한다. ## 금지사항 - CLI option parsing을 analysis에 넣지 마라. 이유: application 경계를 깨뜨린다. - nonlinear loop나 여러 step을 추가하지 마라. 이유: Phase 1 범위 밖이다. - test-only solver 경로를 만들지 마라. 이유: production pipeline을 검증해야 한다.