From e8c50c356fd37eb9213c065efb7b02e6a63ca87b Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@uliege.be> Date: Tue, 28 Jun 2022 11:43:07 +0200 Subject: [PATCH] don't allocate embedded edges container if not necessary (cf. #1987) --- src/mesh/meshGRegionDelaunayInsertion.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/mesh/meshGRegionDelaunayInsertion.cpp b/src/mesh/meshGRegionDelaunayInsertion.cpp index f0ea5672c1..eb6b31db77 100644 --- a/src/mesh/meshGRegionDelaunayInsertion.cpp +++ b/src/mesh/meshGRegionDelaunayInsertion.cpp @@ -80,7 +80,7 @@ struct edgeContainerB { std::size_t _size, _size_obj; edgeContainerB(std::size_t N = 1000000) - : _hash(N), _size(0), _size_obj(sizeof(MEdge)) + : _hash(N > 0 ? N : 1), _size(0), _size_obj(sizeof(MEdge)) { } @@ -1350,9 +1350,15 @@ void insertVerticesInRegion(GRegion *gr, int maxIter, (*it)->setNeigh(2, nullptr); (*it)->setNeigh(3, nullptr); } - // store all embedded faces + // store all embedded edges and faces std::set<MFace, MFaceLessThan> allEmbeddedFaces; - edgeContainerB allEmbeddedEdges; + std::size_t N = 0; + for(auto it = gr->model()->firstRegion(); it != gr->model()->lastRegion(); + ++it) { + for(auto e : (*it)->embeddedEdges()) + N += e->getNumMeshElements(); + } + edgeContainerB allEmbeddedEdges(N); for(auto it = gr->model()->firstRegion(); it != gr->model()->lastRegion(); ++it) { createAllEmbeddedFaces((*it), allEmbeddedFaces); -- GitLab