You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 09:14:55