24 const std::size_t nNodes(nodes.size());
25 std::vector<Node*> new_nodes;
26 new_nodes.reserve(nNodes);
27 for (std::size_t k = 0; k < nNodes; ++k)
29 new_nodes.push_back(
new Node(nodes[k]->getCoords(), new_nodes.size()));
35 std::vector<Element*>
const& elements,
36 std::vector<Node*>
const& new_nodes,
37 std::vector<std::size_t>
const*
const node_id_map)
39 std::vector<Element*> new_elements;
40 new_elements.reserve(elements.size());
41 std::transform(elements.begin(), elements.end(),
42 std::back_inserter(new_elements),
43 [&new_nodes, &node_id_map](
auto const& element)
44 { return copyElement(element, new_nodes, node_id_map); });
52 const std::vector<Node*>& nodes,
53 std::vector<std::size_t>
const*
const id_map)
56 auto** new_nodes =
new Node*[number_of_element_nodes];
59 for (
unsigned i = 0; i < number_of_element_nodes; ++i)
61 new_nodes[i] = nodes[(*id_map)[element->
getNode(i)->
getID()]];
66 for (
unsigned i = 0; i < number_of_element_nodes; ++i)
71 return new E(new_nodes);
75 const std::vector<Node*>& nodes,
76 std::vector<std::size_t>
const*
const id_map)
78 switch (element->getCellType())
81 return copyElement<Line>(element, nodes, id_map);
83 return copyElement<Line3>(element, nodes, id_map);
85 return copyElement<Tri>(element, nodes, id_map);
87 return copyElement<Tri6>(element, nodes, id_map);
89 return copyElement<Quad>(element, nodes, id_map);
91 return copyElement<Quad8>(element, nodes, id_map);
93 return copyElement<Quad9>(element, nodes, id_map);
95 return copyElement<Tet>(element, nodes, id_map);
97 return copyElement<Tet10>(element, nodes, id_map);
99 return copyElement<Hex>(element, nodes, id_map);
101 return copyElement<Hex20>(element, nodes, id_map);
103 return copyElement<Pyramid>(element, nodes, id_map);
105 return copyElement<Pyramid13>(element, nodes, id_map);
107 return copyElement<Prism>(element, nodes, id_map);
109 return copyElement<Prism15>(element, nodes, id_map);
112 ERR(
"Error: Unknown cell type.");
120 std::vector<Element*> cloned_elements;
121 cloned_elements.reserve(elements.size());
122 std::transform(begin(elements), end(elements),
123 std::back_inserter(cloned_elements),
125 return cloned_elements;
Definition of Duplicate functions.
void ERR(char const *fmt, Args const &... args)
Definition of the Mesh class.
std::size_t getID() const
virtual const Node * getNode(unsigned idx) const =0
virtual unsigned getNumberOfNodes() const =0
virtual Element * clone() const =0
std::vector< Node * > copyNodeVector(const std::vector< Node * > &nodes)
Creates a deep copy of a Node vector.
Element * copyElement(Element const *const element, const std::vector< Node * > &nodes, std::vector< std::size_t > const *const id_map)
std::vector< Element * > copyElementVector(std::vector< Element * > const &elements, std::vector< Node * > const &new_nodes, std::vector< std::size_t > const *const node_id_map)
std::vector< Element * > cloneElements(std::vector< Element * > const &elements)
Clones a vector of elements using the Element::clone() function.