From 184353b0e58584fad2a1133e09039018d05504fd Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Mon, 14 Nov 2016 18:18:55 +0000 Subject: [PATCH] missing embedded vertices/edges in volumes other than first, with old initial (tetgen-based) mesher --- Mesh/meshGRegion.cpp | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/Mesh/meshGRegion.cpp b/Mesh/meshGRegion.cpp index 3d5f466929..4c91f07b7b 100644 --- a/Mesh/meshGRegion.cpp +++ b/Mesh/meshGRegion.cpp @@ -530,7 +530,7 @@ void MeshDelaunayVolumeTetgen(std::vector<GRegion*> ®ions) for(unsigned int i = 0; i < regions.size(); i++) Msg::Info("Meshing volume %d (Delaunay)", regions[i]->tag()); - // put all the faces in the same model + // put all the faces in the region GRegion *gr = regions[0]; std::list<GFace*> faces = gr->faces(); @@ -547,6 +547,28 @@ void MeshDelaunayVolumeTetgen(std::vector<GRegion*> ®ions) } gr->set(allFaces); + // put all embedded edges in the same region + std::set<GEdge*> allEmbEdgesSet; + for(unsigned int i = 0; i < regions.size(); i++){ + std::list<GEdge*> e = regions[i]->embeddedEdges(); + allEmbEdgesSet.insert(e.begin(), e.end()); + } + std::list<GEdge*> allEmbEdges; + allEmbEdges.insert(allEmbEdges.end(), allEmbEdgesSet.begin(), allEmbEdgesSet.end()); + std::list<GEdge*> oldEmbEdges = gr->embeddedEdges(); + gr->embeddedEdges() = allEmbEdges; + + // put all embedded vertices in the same region + std::set<GVertex*> allEmbVerticesSet; + for(unsigned int i = 0; i < regions.size(); i++){ + std::list<GVertex*> e = regions[i]->embeddedVertices(); + allEmbVerticesSet.insert(e.begin(), e.end()); + } + std::list<GVertex*> allEmbVertices; + allEmbVertices.insert(allEmbVertices.end(), allEmbVerticesSet.begin(), allEmbVerticesSet.end()); + std::list<GVertex*> oldEmbVertices = gr->embeddedVertices(); + gr->embeddedVertices() = allEmbVertices; + // mesh with tetgen, possibly changing the mesh on boundaries (leave // this in block, so in/out are destroyed before we refine the mesh) splitQuadRecovery sqr; @@ -606,8 +628,10 @@ void MeshDelaunayVolumeTetgen(std::vector<GRegion*> ®ions) ++itf; } - // restore the initial set of faces + // restore the initial set of faces and embedded edges/vertices gr->set(faces); + gr->embeddedEdges() = oldEmbEdges; + gr->embeddedVertices() = oldEmbVertices; // FIXME: this screws up refinement of standard meshes //insertVerticesInRegion(gr,0,true); -- GitLab