# Step 0: Beam Element-end Recovery ## 읽어야 할 파일 - `/AGENTS.md` - `/docs/PRD.md` - `/docs/ARCHITECTURE.md` - `/docs/ADR.md` - `/docs/formulation/timoshenko-beam-3d.md` - `/include/fesa/elements/beam/beam3d2.hpp` - `/include/fesa/model/beam_section.hpp` ## 작업 요소 양 끝 절점에서 section strain/resultant, 도심 응력과 선택 회복점 축응력을 계산한다. ```cpp struct BeamSectionResult final { double xi; NodeId end_node; std::array section_strain; std::array section_force; double centroid_sigma_xx; std::vector sigma_xx; }; [[nodiscard]] std::vector recover_beam3d2( const Beam3D2Input&, std::span element_displacement, std::span> recovery_points); ``` - component 순서는 \(N,V_y,V_z,T,M_y,M_z\)다. - `centroid_sigma_xx=N/A`; 회복점은 axial+bending \(\sigma_{xx}\)만 계산한다. - 순수 축/비틀림/각 축 굽힘/이축 굽힘, 양 끝 부호, 회복점 순서를 먼저 테스트한다. ## Acceptance Criteria ```powershell cmake --build --preset windows-debug ctest --preset windows-debug -R "BeamRecovery|CentroidStress|SectionForce" --output-on-failure ctest --preset windows-debug --output-on-failure ``` ## 검증 절차 1. hand-calculated recovery test 실패를 확인한다. 2. stiffness와 같은 frame/부호 convention을 재사용한다. 3. 도심에서 bending contribution이 0인지 확인한다. 4. 전체 테스트와 index를 갱신한다. ## 금지사항 - point shear/torsional stress를 출력하지 마라. 이유: 단면 형상 정보가 부족하다. - Abaqus column 이름을 element kernel에 넣지 마라. 이유: validation adapter 책임이다. - 절점별 내력 부호를 임의 절댓값으로 바꾸지 마라. 이유: 평형 검증을 깨뜨린다.