#pragma once #include #include #include #include #include #include #include #include #include #include namespace fesa { struct Beam3D2Input final { std::array coordinates; std::array node_ids; IsotropicElastic material; BeamSection section; }; struct BeamSectionResult final { double xi; NodeId end_node; std::array section_strain; std::array section_force; double centroid_sigma_xx; std::vector sigma_xx; }; struct Beam3D2Contribution final { Matrix12 local_stiffness; Matrix12 global_stiffness; BeamFrame frame; }; struct BeamKernelResult final { std::optional contribution; std::vector diagnostics; }; [[nodiscard]] BeamKernelResult compute_beam3d2( const Beam3D2Input& input); [[nodiscard]] std::vector recover_beam3d2( const Beam3D2Input& input, std::span element_displacement, std::span> recovery_points); } // namespace fesa