diff --git a/MeshLib/Elements/TemplateElement-impl.h b/MeshLib/Elements/TemplateElement-impl.h index cba91a51bb326b423673efeec0c369ee5ed735e3..6667db0c115f927db86beb301d235e293a676974 100644 --- a/MeshLib/Elements/TemplateElement-impl.h +++ b/MeshLib/Elements/TemplateElement-impl.h @@ -22,6 +22,16 @@ TemplateElement<ELEMENT_RULE>::TemplateElement(Node* nodes[n_all_nodes], unsigne this->_content = ELEMENT_RULE::computeVolume(this->_nodes); } +template <class ELEMENT_RULE> +TemplateElement<ELEMENT_RULE>::TemplateElement(Node* nodes[n_all_nodes], std::size_t id) +: Element(id) +{ + this->_nodes = nodes; + this->_neighbors = new Element*[getNNeighbors()]; + std::fill(this->_neighbors, this->_neighbors + getNNeighbors(), nullptr); + this->_content = ELEMENT_RULE::computeVolume(this->_nodes); +} + template <class ELEMENT_RULE> TemplateElement<ELEMENT_RULE>::TemplateElement(std::array<Node*, n_all_nodes> const& nodes, unsigned value, std::size_t id) : Element(value, id) @@ -33,9 +43,20 @@ TemplateElement<ELEMENT_RULE>::TemplateElement(std::array<Node*, n_all_nodes> co this->_content = ELEMENT_RULE::computeVolume(this->_nodes); } +template <class ELEMENT_RULE> +TemplateElement<ELEMENT_RULE>::TemplateElement(std::array<Node*, n_all_nodes> const& nodes, std::size_t id) +: Element(id) +{ + this->_nodes = new Node*[n_all_nodes]; + std::copy(nodes.begin(), nodes.end(), this->_nodes); + this->_neighbors = new Element*[getNNeighbors()]; + std::fill(this->_neighbors, this->_neighbors + getNNeighbors(), nullptr); + this->_content = ELEMENT_RULE::computeVolume(this->_nodes); +} + template <class ELEMENT_RULE> TemplateElement<ELEMENT_RULE>::TemplateElement(const TemplateElement &e) -: Element(e.getValue(), e.getID()) +: Element(e.getID()) { this->_nodes = new Node*[n_all_nodes]; for (unsigned i=0; i<n_all_nodes; i++) diff --git a/MeshLib/Elements/TemplateElement.h b/MeshLib/Elements/TemplateElement.h index 9fe5b5aaf144e5f3b74e827db94569eb2021a609..bb50401f5da49ac0716dbc06705bea48aaeadeac 100644 --- a/MeshLib/Elements/TemplateElement.h +++ b/MeshLib/Elements/TemplateElement.h @@ -48,7 +48,15 @@ public: * @param value element value, e.g. material ID * @param id element id */ - TemplateElement(Node* nodes[n_all_nodes], unsigned value = 0, std::size_t id = std::numeric_limits<std::size_t>::max()); + TemplateElement(Node* nodes[n_all_nodes], unsigned value, std::size_t id); + + /** + * Constructor with an array of mesh nodes. + * + * @param nodes an array of pointers of mesh nodes which form this element + * @param id element id + */ + TemplateElement(Node* nodes[n_all_nodes], std::size_t id = std::numeric_limits<std::size_t>::max()); /** * Constructor with an array of mesh nodes @@ -57,7 +65,15 @@ public: * @param value element value, e.g. material ID * @param id element id */ - TemplateElement(std::array<Node*, n_all_nodes> const& nodes, unsigned value = 0, std::size_t id = std::numeric_limits<std::size_t>::max()); + TemplateElement(std::array<Node*, n_all_nodes> const& nodes, unsigned value, std::size_t id); + + /** + * Constructor with an array of mesh nodes + * + * @param nodes an array of pointers of mesh nodes which form this element + * @param id element id + */ + TemplateElement(std::array<Node*, n_all_nodes> const& nodes, std::size_t id = std::numeric_limits<std::size_t>::max()); /// Copy constructor TemplateElement(const TemplateElement &e);