[FEM]implement Gmsh mesh property "MeshSizeFromCurvature"

This commit is contained in:
UR-0
2021-03-07 11:41:31 +01:00
committed by Bernd Hahnebach
parent d1ce9c4c9d
commit de9329a6c1
3 changed files with 20 additions and 3 deletions

View File

@@ -708,11 +708,17 @@ class GmshTools():
geo.write("Mesh.CharacteristicLengthMin = " + str(0) + ";\n")
else:
geo.write("Mesh.CharacteristicLengthMin = " + str(self.clmin) + ";\n")
if hasattr(self.mesh_obj, "MeshSizeFromCurvature"):
geo.write(
"Mesh.MeshSizeFromCurvature = " + str(self.mesh_obj.MeshSizeFromCurvature) +
"; // number of elements per 2*pi radians, 0 to deactivate\n"
)
geo.write("\n")
if hasattr(self.mesh_obj, "RecombineAll") and self.mesh_obj.RecombineAll is True:
geo.write("// other mesh options\n")
geo.write("Mesh.RecombineAll = 1;\n")
geo.write("\n")
geo.write("// optimize the mesh\n")
# Gmsh tetra optimizer
if hasattr(self.mesh_obj, "OptimizeStd") and self.mesh_obj.OptimizeStd is True:
@@ -727,15 +733,16 @@ class GmshTools():
# higher order mesh optimizing
if hasattr(self.mesh_obj, "HighOrderOptimize") and self.mesh_obj.HighOrderOptimize is True:
geo.write(
"Mesh.HighOrderOptimize = 1; // for more HighOrderOptimize "
"Mesh.HighOrderOptimize = 1; // for more HighOrderOptimize "
"parameter check http://gmsh.info/doc/texinfo/gmsh.html\n"
)
else:
geo.write(
"Mesh.HighOrderOptimize = 0; // for more HighOrderOptimize "
"Mesh.HighOrderOptimize = 0; // for more HighOrderOptimize "
"parameter check http://gmsh.info/doc/texinfo/gmsh.html\n"
)
geo.write("\n")
geo.write("// mesh order\n")
geo.write("Mesh.ElementOrder = " + self.order + ";\n")
if self.order == "2":

View File

@@ -212,6 +212,15 @@ class MeshGmsh(base_fempythonobject.BaseFemPythonObject):
# https://forum.freecadweb.org/viewtopic.php?t=41738
# https://forum.freecadweb.org/viewtopic.php?f=18&t=45260&start=20#p389494
if not hasattr(obj, "MeshSizeFromCurvature"):
obj.addProperty(
"App::PropertyIntegerConstraint",
"MeshSizeFromCurvature",
"FEM Gmsh Mesh Params",
"number of elements per 2*pi radians, 0 to deactivate"
)
obj.MeshSizeFromCurvature = (12, 0, 10000, 1)
if not hasattr(obj, "Algorithm2D"):
obj.addProperty(
"App::PropertyEnumeration",

View File

@@ -14,11 +14,12 @@ Physical Volume("Solid1") = {1};
// min, max Characteristic Length
Mesh.CharacteristicLengthMax = 1e+22;
Mesh.CharacteristicLengthMin = 8.0;
Mesh.MeshSizeFromCurvature = 12; // number of elements per 2*pi radians, 0 to deactivate
// optimize the mesh
Mesh.Optimize = 1;
Mesh.OptimizeNetgen = 0;
Mesh.HighOrderOptimize = 0; // for more HighOrderOptimize parameter check http://gmsh.info/doc/texinfo/gmsh.html
Mesh.HighOrderOptimize = 0; // for more HighOrderOptimize parameter check http://gmsh.info/doc/texinfo/gmsh.html
// mesh order
Mesh.ElementOrder = 2;