diff --git a/src/mesh/meshGFaceOptimize.cpp b/src/mesh/meshGFaceOptimize.cpp index 4ac1cfcd14abad6d94beb0baaf54d32b3aa6e295..523860ebb10982ba145fc48e1b28c181e1fc4c51 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"); } }