feat(domain-and-input-skeleton): step 1 — domain-validation

This commit is contained in:
KOKO\Mimi
2026-07-30 17:08:07 +09:00
parent 96f3f3230e
commit 5a5af9c64b
8 changed files with 1202 additions and 50 deletions
+62
View File
@@ -0,0 +1,62 @@
#include <fesa/model/domain.hpp>
#include <cstddef>
#include <stdexcept>
namespace fesa {
Domain::Domain(
std::vector<Node> nodes,
std::vector<BeamElement> beam_elements,
std::vector<IsotropicElastic> materials,
std::vector<BeamSection> sections,
std::vector<NodeSet> node_sets,
std::vector<ElementSet> element_sets,
StepDefinition step)
: nodes_{std::move(nodes)},
beam_elements_{std::move(beam_elements)},
materials_{std::move(materials)},
sections_{std::move(sections)},
node_sets_{std::move(node_sets)},
element_sets_{std::move(element_sets)},
step_{std::move(step)} {
for (std::size_t index = 0; index < nodes_.size(); ++index) {
node_indices_.emplace(nodes_[index].id.value(), index);
node_origin_indices_.emplace(origin_key(nodes_[index].origin), index);
}
for (std::size_t index = 0; index < beam_elements_.size(); ++index) {
beam_element_indices_.emplace(
beam_elements_[index].id.value(), index);
beam_element_origin_indices_.emplace(
origin_key(beam_elements_[index].origin), index);
}
for (std::size_t index = 0; index < materials_.size(); ++index) {
material_indices_.emplace(materials_[index].id.value(), index);
}
for (std::size_t index = 0; index < sections_.size(); ++index) {
section_indices_.emplace(sections_[index].id.value(), index);
}
}
const Node& Domain::node(const NodeId id) const {
const auto found = node_indices_.find(id.value());
if (found == node_indices_.end()) {
throw std::out_of_range{"Node ID is not present in the Domain."};
}
return nodes_[found->second];
}
const Node& Domain::node(const EntityOrigin& origin) const {
const auto found = node_origin_indices_.find(origin_key(origin));
if (found == node_origin_indices_.end()) {
throw std::out_of_range{
"Node origin is not present in the Domain."};
}
return nodes_[found->second];
}
Domain::OriginKey Domain::origin_key(const EntityOrigin& origin) {
return {origin.instance_name, origin.local_label};
}
} // namespace fesa