Gmsh Python代码网格尺寸细到粗平滑过渡设置问题咨询
Gmsh网格尺寸平滑过渡配置问题
我通过Gmsh Python API构建了包含多段堆叠圆柱及一个内部圆柱的模型,目标是设置网格尺寸字段,实现内部圆柱周围从细网格到粗网格的平滑过渡。当前使用Distance和Threshold字段时,仅能观察到DistMin参数的效果,DistMax对网格无任何影响。我也尝试过其他网格尺寸字段,但不清楚如何通过Extend字段实现渐变效果,推测可能是字段选择错误或参数配置不当。
以下是我的Python代码:
import gmsh import sys gmsh.initialize() gmsh.model.add("converted_geo") gmsh.model.occ.addCylinder(0.0, 0.0, 35.0, 0.0, 0.0, 30.0, 9.0, tag=1) gmsh.model.occ.addCylinder(0.0, 0.0, 0.0, 0.0, 0.0, 20.0, 120.0, tag=2) gmsh.model.occ.addCylinder(0.0, 0.0, 20.0, 0.0, 0.0, 15.0, 120.0, tag=3) gmsh.model.occ.addCylinder(0.0, 0.0, 35.0, 0.0, 0.0, 15.0, 120.0, tag=4) gmsh.model.occ.addCylinder(0.0, 0.0, -20.0, 0.0, 0.0, 20.0, 120.0, tag=5) gmsh.model.occ.synchronize() # Boolean Fragments v1 = gmsh.model.occ.fragment([(3, 2)], [(3, 5)]) v2 = gmsh.model.occ.fragment([(3, 3)], [(3, 1), (3, 4)]) v3 = gmsh.model.occ.fragment([(3, 5)], [(3, 2)]) v4 = gmsh.model.occ.fragment([(3, 8)], [(3, 6), (3, 7), (3, 3)]) # Add final large cylinder gmsh.model.occ.addCylinder(0.0, 0.0, 50.0, 0.0, 0.0, 120.0, 120.0, tag=9) gmsh.model.occ.synchronize() # Final Boolean Fragment v5 = gmsh.model.occ.fragment([(3, 9)], [(3, 2), (3, 3), (3, 5), (3, 6), (3, 7), (3, 8)]) gmsh.model.occ.synchronize() # Mesh size settings gmsh.option.setNumber("Mesh.MeshSizeFromPoints", 0) gmsh.option.setNumber("Mesh.MeshSizeFromCurvature", 0) gmsh.option.setNumber("Mesh.MeshSizeExtendFromBoundary", 0) gmsh.option.setNumber("Mesh.MeshSizeMax", 5.0) gmsh.option.setNumber("Mesh.MeshSizeMin", 0.25) # Mesh fields gmsh.model.mesh.field.add("Distance", 1) gmsh.model.mesh.field.setNumbers(1, "FacesList", [18,19,20,21]) gmsh.model.mesh.field.setNumber(1, "Sampling", 20) gmsh.model.mesh.field.add("Threshold", 2) gmsh.model.mesh.field.setNumber(2, "InField", 1) gmsh.model.mesh.field.setNumber(2, "SizeMin", 1) gmsh.model.mesh.field.setNumber(2, "SizeMax", 20) gmsh.model.mesh.field.setNumber(2, "DistMin", 20) gmsh.model.mesh.field.setNumber(2, "DistMax", 250) box_meshsize = gmsh.model.mesh.field.add("Box", 3) gmsh.model.mesh.field.setNumber(box_meshsize, "VIn", 1) gmsh.model.mesh.field.setNumber(box_meshsize, "VOut", 10) gmsh.model.mesh.field.setNumber(box_meshsize, "XMin", -25) gmsh.model.mesh.field.setNumber(box_meshsize, "XMax", 60) gmsh.model.mesh.field.setNumber(box_meshsize, "YMin", -25) gmsh.model.mesh.field.setNumber(box_meshsize, "YMax", 25) gmsh.model.mesh.field.setNumber(box_meshsize, "ZMin", 20) gmsh.model.mesh.field.setNumber(box_meshsize, "ZMax", 100) gmsh.model.mesh.field.add("MathEval", 6) gmsh.model.mesh.field.setString(6, "F", "1 + 0.01*sqrt(x*x + y*y + (z - 50)*(z - 50))") #gmsh.model.mesh.field.setAsBackgroundMesh(6) gmsh.model.mesh.field.add("Min", 5) gmsh.model.mesh.field.setNumbers(5, "FieldsList", [2]) gmsh.model.mesh.field.setAsBackgroundMesh(5) # Generate mesh gmsh.model.occ.synchronize() gmsh.model.mesh.generate(3) # Optional: Save gmsh.write(r"C:\Users\Shari\Documents\neshsize_test.msh")
补充效果说明:
- 仅使用Distance字段的网格效果
- 使用Extend字段的网格效果
内容的提问来源于stack exchange,提问作者Shari Klotzkin
相关产品推荐
相关产品推荐

