#pragma once #include "fesa/boundary/BoundaryCondition.hpp" #include "fesa/core/ModelTypes.hpp" #include "fesa/core/Node.hpp" #include "fesa/core/StepDefinition.hpp" #include "fesa/element/Element.hpp" #include "fesa/load/Load.hpp" #include "fesa/material/Material.hpp" #include "fesa/property/Property.hpp" #include "fesa/property/ShellProperty.hpp" #include #include #include #include #include namespace fesa::core { class Domain { public: void addNode(Node node); void addElement(std::unique_ptr element); void addMaterial(std::unique_ptr material); void addProperty(std::unique_ptr property); void addShellProperty(std::unique_ptr property); void addNodeSet(std::string name, std::vector node_ids); void addElementSet(std::string name, std::vector element_ids); std::size_t addBoundaryCondition(std::unique_ptr boundary); std::size_t addLoad(std::unique_ptr load); void addStep(LinearStaticStepDefinition step); const Node* findNode(NodeId id) const noexcept; const Node& node(NodeId id) const; std::size_t nodeCount() const noexcept; const fesa::element::Element* findElement(ElementId id) const noexcept; const fesa::element::Element& element(ElementId id) const; std::size_t elementCount() const noexcept; const fesa::material::Material* findMaterial(MaterialId id) const noexcept; const fesa::material::Material& material(MaterialId id) const; std::size_t materialCount() const noexcept; const fesa::property::Property* findProperty(PropertyId id) const noexcept; const fesa::property::Property& property(PropertyId id) const; std::size_t propertyCount() const noexcept; const fesa::property::ShellProperty* findShellProperty(PropertyId id) const noexcept; const fesa::property::ShellProperty& shellProperty(PropertyId id) const; std::size_t shellPropertyCount() const noexcept; const std::vector* findNodeSet(const std::string& name) const noexcept; const std::vector& nodeSet(const std::string& name) const; std::size_t nodeSetCount() const noexcept; const std::vector* findElementSet(const std::string& name) const noexcept; const std::vector& elementSet(const std::string& name) const; std::size_t elementSetCount() const noexcept; const fesa::boundary::BoundaryCondition* findBoundaryCondition(std::size_t index) const noexcept; const fesa::boundary::BoundaryCondition& boundaryCondition(std::size_t index) const; std::size_t boundaryConditionCount() const noexcept; const fesa::load::Load* findLoad(std::size_t index) const noexcept; const fesa::load::Load& load(std::size_t index) const; std::size_t loadCount() const noexcept; const LinearStaticStepDefinition* findStep(StepId id) const noexcept; const LinearStaticStepDefinition& step(StepId id) const; std::size_t stepCount() const noexcept; private: std::unordered_map nodes_; std::unordered_map> elements_; std::unordered_map> materials_; std::unordered_map> properties_; std::unordered_map> node_sets_; std::unordered_map> element_sets_; std::vector> boundary_conditions_; std::vector> loads_; std::unordered_map steps_; }; } // namespace fesa::core