#ifndef FESA_ELEMENTS_EULER_BEAM_3D_DEFINITION_H_ #define FESA_ELEMENTS_EULER_BEAM_3D_DEFINITION_H_ #include #include #include #include "fesa/elements/element_definition.h" namespace fesa { class Domain; /// @brief Defines one two-node B33 semantic element. class EulerBeam3DDefinition final : public ElementDefinition { public: /// @brief Constructs a parser-validated semantic definition. EulerBeam3DDefinition(SourceEntityId source_id, std::array node_indices, EntityIndex material_index, EntityIndex section_index, SourceLocation location); ElementDefinitionKind Kind() const noexcept override; const SourceEntityId& SourceId() const noexcept override; std::string_view SourceElementType() const noexcept override; const std::vector& NodeIndices() const noexcept override; EntityIndex MaterialIndex() const noexcept override; EntityIndex PropertyIndex() const noexcept override; SourceEntityId source_id; std::array node_indices; EntityIndex material_index; EntityIndex section_index; SourceLocation location; private: friend class Domain; /// @brief Synchronizes the base view after parser-candidate construction. void SynchronizeNodeIndices(); std::vector node_indices_view_; }; } // namespace fesa #endif // FESA_ELEMENTS_EULER_BEAM_3D_DEFINITION_H_