81 lines
3.5 KiB
C++
81 lines
3.5 KiB
C++
#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/ShellProperty.hpp"
|
|
|
|
#include <cstddef>
|
|
#include <memory>
|
|
#include <string>
|
|
#include <unordered_map>
|
|
#include <vector>
|
|
|
|
namespace fesa::core {
|
|
|
|
class Domain {
|
|
public:
|
|
void addNode(Node node);
|
|
void addElement(std::unique_ptr<fesa::element::Element> element);
|
|
void addMaterial(std::unique_ptr<fesa::material::Material> material);
|
|
void addShellProperty(fesa::property::ShellProperty property);
|
|
void addNodeSet(std::string name, std::vector<NodeId> node_ids);
|
|
void addElementSet(std::string name, std::vector<ElementId> element_ids);
|
|
std::size_t addBoundaryCondition(std::unique_ptr<fesa::boundary::BoundaryCondition> boundary);
|
|
std::size_t addLoad(std::unique_ptr<fesa::load::Load> 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::ShellProperty* findShellProperty(PropertyId id) const noexcept;
|
|
const fesa::property::ShellProperty& shellProperty(PropertyId id) const;
|
|
std::size_t shellPropertyCount() const noexcept;
|
|
|
|
const std::vector<NodeId>* findNodeSet(const std::string& name) const noexcept;
|
|
const std::vector<NodeId>& nodeSet(const std::string& name) const;
|
|
std::size_t nodeSetCount() const noexcept;
|
|
|
|
const std::vector<ElementId>* findElementSet(const std::string& name) const noexcept;
|
|
const std::vector<ElementId>& 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<NodeId, Node> nodes_;
|
|
std::unordered_map<ElementId, std::unique_ptr<fesa::element::Element>> elements_;
|
|
std::unordered_map<MaterialId, std::unique_ptr<fesa::material::Material>> materials_;
|
|
std::unordered_map<PropertyId, fesa::property::ShellProperty> shell_properties_;
|
|
std::unordered_map<std::string, std::vector<NodeId>> node_sets_;
|
|
std::unordered_map<std::string, std::vector<ElementId>> element_sets_;
|
|
std::vector<std::unique_ptr<fesa::boundary::BoundaryCondition>> boundary_conditions_;
|
|
std::vector<std::unique_ptr<fesa::load::Load>> loads_;
|
|
std::unordered_map<StepId, LinearStaticStepDefinition> steps_;
|
|
};
|
|
|
|
} // namespace fesa::core
|