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

如何用Gmsh生成环形圆盘的规则四边形网格?

如何用Gmsh生成环形圆盘的结构化四边形网格

已实现的矩形四边形网格

我已成功使用Gmsh生成矩形的四边形网格,代码如下:

import gmsh
import sys

gmsh.initialize()

gmsh.model.add("t1")

lc = 1e-2
p1 = gmsh.model.geo.addPoint(0, 0, 0, lc, 1)
p2 = gmsh.model.geo.addPoint(0.02, 0, 0, lc, 2)
p3 = gmsh.model.geo.addPoint(0.02, 0.02, 0, lc, 3)
p4 = gmsh.model.geo.addPoint(0, 0.02, 0, lc, 4)

gmsh.model.geo.addLine(p1, p2, 1)
gmsh.model.geo.addLine(p2, p3, 2)
gmsh.model.geo.addLine(p3, p4, 3)
gmsh.model.geo.addLine(p4, p1, 4)
gmsh.model.geo.addCurveLoop([1, 2, 3, 4], 1)

gmsh.model.geo.addPlaneSurface([1], 1)

gmsh.model.geo.synchronize()

gmsh.option.setNumber("Mesh.MeshSizeMin", 0.001)
gmsh.option.setNumber("Mesh.MeshSizeMax", 0.003)
gmsh.model.mesh.setAlgorithm(2,1,8)
gmsh.model.mesh.generate(2)
gmsh.model.mesh.recombine()

gmsh.write("rect.stl")

if '-nopopup' not in sys.argv:
    gmsh.fltk.run()

gmsh.finalize()

生成的网格效果:
矩形四边形网格

目标网格效果

我想要生成如下所示的结构化圆盘四边形网格:
圆盘四边形网格

当前尝试的问题

我尝试用四分之一圆盘生成网格,但得到的是不规则网格,代码如下:

import gmsh
import sys

gmsh.initialize()

gmsh.model.add("t1")

lc = 1e-2
p1 = gmsh.model.geo.addPoint(0, 0, 0, lc, 1)
p2 = gmsh.model.geo.addPoint(0.02, 0, 0, lc, 3)
p3 = gmsh.model.geo.addPoint(0, 0.02, 0, lc, 2)
p4 = gmsh.model.geo.addPoint(0, 0.01, 0, lc, 5)
p5 = gmsh.model.geo.addPoint(0.01, 0, 0, lc, 4)
p6 = gmsh.model.geo.addPoint(-0.02, 0, 0, lc, 6)
p7 = gmsh.model.geo.addPoint(-0.01, 0, 0, lc, 7)
p8 = gmsh.model.geo.addPoint(0, -0.02, 0, lc, 8)
p9 = gmsh.model.geo.addPoint(0, -0.01, 0, lc, 9)

gmsh.model.geo.addCircleArc(p2, p1, p3, 1)
gmsh.model.geo.addLine(p3, p4, 2)
gmsh.model.geo.addCircleArc(p4, p1, p5, 3)
gmsh.model.geo.addLine(p5, p2, 4)
gmsh.model.geo.addCurveLoop([1, 2, 3, 4], 1)

gmsh.model.geo.addPlaneSurface([1], 1)

gmsh.model.geo.synchronize()

gmsh.option.setNumber("Mesh.MeshSizeMin", 0.001)
gmsh.model.option.setNumber("Mesh.MeshSizeMax", 0.003)
gmsh.model.mesh.setAlgorithm(2,1,8)
gmsh.model.mesh.generate(2)
gmsh.model.mesh.recombine()

gmsh.write("disc.stl")

if '-nopopup' not in sys.argv:
    gmsh.fltk.run()

gmsh.finalize()

生成的不规则网格效果:
圆盘不规则网格

解决方案

要生成目标中的结构化四边形网格,核心是保证边界曲线的节点划分对齐,使用Gmsh的Transfinite方法定义结构化网格。修改后的代码如下:

import gmsh
import sys

gmsh.initialize()
gmsh.model.add("structured_disc")

# 参数设置
inner_radius = 0.01
outer_radius = 0.02
angle_start = 0
angle_end = 90  # 四分之一圆盘
lc = 1e-2
radial_divs = 2  # 径向划分段数
angular_divs = 4  # 周向划分段数

# 创建点
p_center = gmsh.model.geo.addPoint(0, 0, 0, lc, 1)
p_outer_start = gmsh.model.geo.addPoint(outer_radius, 0, 0, lc, 2)
p_outer_end = gmsh.model.geo.addPoint(0, outer_radius, 0, lc, 3)
p_inner_start = gmsh.model.geo.addPoint(inner_radius, 0, 0, lc, 4)
p_inner_end = gmsh.model.geo.addPoint(0, inner_radius, 0, lc, 5)

# 创建曲线
# 外圆弧
outer_arc = gmsh.model.geo.addCircleArc(p_outer_start, p_center, p_outer_end, 1)
# 径向线(外端到内端)
radial_end = gmsh.model.geo.addLine(p_outer_end, p_inner_end, 2)
# 内圆弧
inner_arc = gmsh.model.geo.addCircleArc(p_inner_end, p_center, p_inner_start, 3)
# 径向线(内端到外端)
radial_start = gmsh.model.geo.addLine(p_inner_start, p_outer_start, 4)

# 创建曲线环和平面
curve_loop = gmsh.model.geo.addCurveLoop([outer_arc, radial_end, inner_arc, radial_start], 1)
surface = gmsh.model.geo.addPlaneSurface([curve_loop], 1)

# 设置Transfinite划分,确保每条曲线的节点数一致
gmsh.model.geo.mesh.setTransfiniteCurve(outer_arc, angular_divs + 1)
gmsh.model.geo.mesh.setTransfiniteCurve(radial_end, radial_divs + 1)
gmsh.model.geo.mesh.setTransfiniteCurve(inner_arc, angular_divs + 1)
gmsh.model.geo.mesh.setTransfiniteCurve(radial_start, radial_divs + 1)

# 设置结构化曲面网格,使用四边形
gmsh.model.geo.mesh.setTransfiniteSurface(surface, "Left", [p_outer_start, p_outer_end, p_inner_end, p_inner_start])

gmsh.model.geo.synchronize()

# 生成网格
gmsh.model.mesh.generate(2)

# 保存并显示
gmsh.write("structured_disc.stl")
if '-nopopup' not in sys.argv:
    gmsh.fltk.run()

gmsh.finalize()

关键说明:

  • Transfinite Curve:为每条边界曲线设置相同的节点数(段数+1),保证网格节点对齐,避免不规则三角化后重组的混乱。
  • Transfinite Surface:指定曲面的结构化网格生成方式,通过"Left"算法直接生成四边形网格,无需额外调用recombine()。
  • 参数化定义:将半径、角度、划分段数设为变量,方便快速调整网格密度和几何尺寸。

内容的提问来源于stack exchange,提问作者H.H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:37:05