diff --git a/Common/CommandLine.cpp b/Common/CommandLine.cpp index 4ed07b1e088043ced537a185f0c6cb76e4c1f83b..ab81e39ddfc82e28fcd98cf0d09b43507c353e04 100644 --- a/Common/CommandLine.cpp +++ b/Common/CommandLine.cpp @@ -69,9 +69,10 @@ void PrintUsage(const char *name) Msg::Direct(" -numsubedges Set the number of subdivisions when displaying high order elements"); Msg::Direct(" -algo string Select mesh algorithm (meshadapt, del2d, front2d, del3d, front3d)"); Msg::Direct(" -smooth int Set number of mesh smoothing steps"); - Msg::Direct(" -optimize[_netgen] Optimize quality of tetrahedral elements"); Msg::Direct(" -order int Set mesh order (1, ..., 5)"); + Msg::Direct(" -optimize[_netgen] Optimize quality of tetrahedral elements"); Msg::Direct(" -optimize_hom Optimize higher order meshes (in 2D)"); + Msg::Direct(" -optimize_lloyd Optimize 2D meshes using Lloyd algorithm"); Msg::Direct(" -clscale float Set characteristic length scaling factor"); Msg::Direct(" -clmin float Set minimum characteristic length"); Msg::Direct(" -clmax float Set maximum characteristic length"); @@ -227,6 +228,14 @@ void GetOptions(int argc, char *argv[]) CTX::instance()->mesh.optimizeNetgen = 1; i++; } + else if(!strcmp(argv[i] + 1, "optimize_hom")) { + i++; + opt_mesh_smooth_internal_edges(0, GMSH_SET, 1); + } + else if(!strcmp(argv[i] + 1, "optimize_lloyd")) { + i++; + CTX::instance()->mesh.optimizeLloyd = 1; + } else if(!strcmp(argv[i] + 1, "nopopup")) { CTX::instance()->noPopup = 1; i++; @@ -443,10 +452,6 @@ void GetOptions(int argc, char *argv[]) else Msg::Fatal("Missing argument"); } - else if(!strcmp(argv[i] + 1, "optimize_hom")) { - i++; - opt_mesh_smooth_internal_edges(0, GMSH_SET, 1); - } else if(!strcmp(argv[i] + 1, "format") || !strcmp(argv[i] + 1, "f")) { i++; if(argv[i]) { diff --git a/Common/Context.cpp b/Common/Context.cpp index 26b21abfd51e1a6b4868d780ad728b6c253eec03..0906ce556cca1c7183dbf088e8e15fcec1a5cdc1 100644 --- a/Common/Context.cpp +++ b/Common/Context.cpp @@ -80,6 +80,7 @@ CTX::CTX() numWindows = numTiles = 1; deltaFontSize = 0; recentFiles.resize(5); + mesh.optimizeLloyd = 0; } CTX *CTX::_instance = 0; diff --git a/Common/Context.h b/Common/Context.h index 0658b032cb046d1c5f8eb98b3eaf9ed342736361..45c61735ea4b7b6a17bb1237cb15d60b1668c390 100644 --- a/Common/Context.h +++ b/Common/Context.h @@ -17,8 +17,8 @@ struct contextMeshOptions { int draw, changed, light, lightTwoSide, lightLines, pointType; int points, lines, triangles, quadrangles, tetrahedra, hexahedra, prisms, pyramids; int surfacesEdges, surfacesFaces, volumesEdges, volumesFaces, numSubEdges; - int pointsNum, linesNum, surfacesNum, volumesNum; - int optimize, optimizeNetgen, refineSteps, qualityType, labelType, remove4triangles; + int pointsNum, linesNum, surfacesNum, volumesNum, qualityType, labelType; + int optimize, optimizeNetgen, optimizeLloyd, refineSteps, remove4triangles; double normals, tangents, explode, angleSmoothNormals, allowSwapEdgeAngle; double mshFileVersion, mshFilePartitioned, labelFrequency, pointSize, lineWidth; double qualityInf, qualitySup, radiusInf, radiusSup; diff --git a/Mesh/Generator.cpp b/Mesh/Generator.cpp index d80371fd3834ec398a219605ccf59c465708d75e..7728ca5a792f4438a6664f15345eba91b30d4106 100644 --- a/Mesh/Generator.cpp +++ b/Mesh/Generator.cpp @@ -419,16 +419,14 @@ static void Mesh2D(GModel *m) std::for_each(classFaces.begin(), classFaces.end(), meshGFace()); std::for_each(compFaces.begin(), compFaces.end(), meshGFace()); - //lloyd optimization - if (CTX::instance()->mesh.optimize > 0 ){ + // lloyd optimization + if (CTX::instance()->mesh.optimizeLloyd){ for(GModel::fiter it = m->firstFace(); it != m->lastFace(); ++it){ GFace *gf = *it; int recombine = gf->meshAttributes.recombine; Msg::Info("Lloyd optimization for face %d", gf->tag()); - gf->lloyd(40,recombine); - - if(recombine) recombineIntoQuads(gf); - + gf->lloyd(40, recombine); + if(recombine) recombineIntoQuads(gf); } } diff --git a/Mesh/meshGFace.cpp b/Mesh/meshGFace.cpp index 158f6df89599c736ec4afdd7189c58998d09845f..e20c319fb853be716e9de16316d354af41a19fa4 100644 --- a/Mesh/meshGFace.cpp +++ b/Mesh/meshGFace.cpp @@ -674,9 +674,8 @@ static bool meshGenerator(GFace *gf, int RECUR_ITER, // delete the mesh delete m; - if(gf->meshAttributes.recombine && CTX::instance()->mesh.optimize == 0){ - recombineIntoQuads(gf); - } + if(gf->meshAttributes.recombine && !CTX::instance()->mesh.optimizeLloyd) + recombineIntoQuads(gf); computeElementShapes(gf, gf->meshStatistics.worst_element_shape, gf->meshStatistics.average_element_shape, @@ -1218,8 +1217,8 @@ static bool meshGeneratorPeriodic(GFace *gf, bool debug = true) // delete the mesh delete m; - if(gf->meshAttributes.recombine && CTX::instance()->mesh.optimize == 0) - recombineIntoQuads(gf); + if(gf->meshAttributes.recombine && !CTX::instance()->mesh.optimizeLloyd) + recombineIntoQuads(gf); computeElementShapes(gf, gf->meshStatistics.worst_element_shape, gf->meshStatistics.average_element_shape,