From 8e8e160ec7b25ced1581549ba7feb546a7cb267c Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@uliege.be> Date: Sun, 20 Feb 2022 17:00:17 +0100 Subject: [PATCH] topological improvement is not thread-safe --- src/mesh/meshGFaceOptimize.cpp | 38 +++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/mesh/meshGFaceOptimize.cpp b/src/mesh/meshGFaceOptimize.cpp index 4ac1cfcd14..523860ebb1 100644 --- a/src/mesh/meshGFaceOptimize.cpp +++ b/src/mesh/meshGFaceOptimize.cpp @@ -1327,24 +1327,28 @@ void recombineIntoQuads(GFace *gf, bool blossom, int topologicalOptiPasses, if(debug) gf->model()->writeMSH("recombine_2smoothed.msh"); } - if(topologicalOptiPasses > 0) { - if(!_isModelOkForTopologicalOpti(gf->model())) { - Msg::Info( - "Skipping topological optimization - mesh topology is not complete"); - } - else { - int iter = 0, nbTwoQuadNodes = 1, nbDiamonds = 1; - while(nbTwoQuadNodes || nbDiamonds) { - Msg::Debug("Topological optimization of quad mesh: pass %d", iter); - nbTwoQuadNodes = removeTwoQuadsNodes(gf); - // removeDiamonds uses the parametrization or searches for closest point - nbDiamonds = haveParam ? removeDiamonds(gf) : 0; - if(haveParam && nodeRepositioning) - RelocateVertices(gf, CTX::instance()->mesh.nbSmoothing); - iter++; - if(iter > topologicalOptiPasses) break; +// FIXME: not thread-safe +#pragma omp critical + { + if(topologicalOptiPasses > 0) { + if(!_isModelOkForTopologicalOpti(gf->model())) { + Msg::Info + ("Skipping topological optimization - mesh topology is not complete"); + } + else { + int iter = 0, nbTwoQuadNodes = 1, nbDiamonds = 1; + while(nbTwoQuadNodes || nbDiamonds) { + Msg::Debug("Topological optimization of quad mesh: pass %d", iter); + nbTwoQuadNodes = removeTwoQuadsNodes(gf); + // removeDiamonds uses the parametrization or searches for closest point + nbDiamonds = haveParam ? removeDiamonds(gf) : 0; + if(haveParam && nodeRepositioning) + RelocateVertices(gf, CTX::instance()->mesh.nbSmoothing); + iter++; + if(iter > topologicalOptiPasses) break; + } + if(debug) gf->model()->writeMSH("recombine_3topo.msh"); } - if(debug) gf->model()->writeMSH("recombine_3topo.msh"); } } -- GitLab