diff --git a/MeshLib/Elements/Element.cpp b/MeshLib/Elements/Element.cpp index 87165e7a6c7d8384345191a43bebe89899579a79..a8572c56414295b49e0cd7917363f116ad5a3588 100644 --- a/MeshLib/Elements/Element.cpp +++ b/MeshLib/Elements/Element.cpp @@ -52,12 +52,13 @@ bool Element::addNeighbor(Element* e) const unsigned eNodes (e->getNNodes()); const Node* const* e_nodes = e->getNodes(); unsigned count(0); + const unsigned dim (this->getDimension()); for (unsigned i(0); i<nNodes; i++) for (unsigned j(0); j<eNodes; j++) if (_nodes[i] == e_nodes[j]) //std::cout << _nodes[i]->getID() << " == " << e_nodes[j]->getID() << std::endl; // increment shared nodes counter and check if enough nodes are similar to be sure e is a neighbour of this - if ((++count)>=this->getDimension()) + if ((++count)>=dim) { _neighbors[n]=e; return true; diff --git a/MeshLib/Mesh.cpp b/MeshLib/Mesh.cpp index 03701131dd27d829639b5df39388d876854d286b..a8bdfd13f287e9b818d53cf02a1ae04cef9c8580 100644 --- a/MeshLib/Mesh.cpp +++ b/MeshLib/Mesh.cpp @@ -112,34 +112,24 @@ void Mesh::setNeighborInformationForElements() { // create vector with all elements connected to current element (includes lots of doubles!) std::vector<Element*> neighbors; - const size_t nNodes (_elements[m]->getNNodes()); + Element *const element (_elements[m]); + const size_t nNodes (element->getNNodes()); for (unsigned n(0); n<nNodes; n++) { - const std::vector<Element*> conn_elems (_elements[m]->getNode(n)->getElements()); + std::vector<Element*> const& conn_elems ((element->getNode(n)->getElements())); neighbors.insert(neighbors.end(), conn_elems.begin(), conn_elems.end()); } - + const unsigned nNeighbors ( neighbors.size() ); - /*std::vector<bool> done (nNeighbors, false); - // mark off the element itself - for (unsigned j(0); j<nNeighbors; j++) - if (neighbors[j] == _elements[m]) - done[j] = true; - */ + // check if connected element is indeed a neighbour and mark all doubles of that element as 'done' for (unsigned i(0); i<nNeighbors; i++) - //if (!done[i]) + { + if (element->addNeighbor(neighbors[i])) { - if (_elements[m]->addNeighbor(neighbors[i])) - { - neighbors[i]->addNeighbor(_elements[m]); - }/* - for (unsigned j(0); j<nNeighbors; j++) - if (!done[j] && (neighbors[j] == neighbors[i])) - done[j] = true; - */ - + neighbors[i]->addNeighbor(element); } + } } } diff --git a/MeshLib/Node.h b/MeshLib/Node.h index 0514b963d87ca20e0fc2fee2d2ef4d9512cf8d17..07362e911ba23fc7b3f19defe81b977ad32222c9 100644 --- a/MeshLib/Node.h +++ b/MeshLib/Node.h @@ -48,7 +48,7 @@ public: const Element* getElement(unsigned idx) const { return _elements[idx]; }; /// Get all elements the node is part of. - const std::vector<Element*> getElements() const { return _elements; }; + const std::vector<Element*>& getElements() const { return _elements; }; /// Get number of elements the node is part of. size_t getNElements() const { return _elements.size(); }; diff --git a/SimpleTests/MeshTests/CollapseMeshNodes.cpp b/SimpleTests/MeshTests/CollapseMeshNodes.cpp index add35350f6107dc262927a32c074434913c4cf1a..5fcbf1f9d9b672848898aaad9cd8c9716619f5ae 100644 --- a/SimpleTests/MeshTests/CollapseMeshNodes.cpp +++ b/SimpleTests/MeshTests/CollapseMeshNodes.cpp @@ -17,7 +17,6 @@ // BaseLib/logog #include "logog.hpp" - // MeshLib #include "Node.h" #include "Elements/Element.h"