PyGmsh学习笔记¶
约 56 个字 76 行代码 2 张图片 预计阅读时间 1 分钟
绘制高阶单元¶
三角形高阶单元¶
import pygmsh
import pyvista as pv
import meshio
def meshGenerator():
with pygmsh.geo.Geometry() as geom:
geom.add_circle(
[0.0, 0.0, 0.0],
1.0,
mesh_size=0.3,
)
mesh = geom.generate_mesh(order=2)
return mesh
mesh = meshGenerator()
meshio_mesh = meshio.Mesh(points=mesh.points, cells=[("triangle6", mesh.cells_dict['triangle6'])])
plotter = pv.Plotter()
darg = dict(
show_edges=False,
)
plotter.add_mesh(meshio_mesh, **darg)
plotter.add_points(meshio_mesh.points, color='red', point_size=15, render_points_as_spheres=True)
for cell in meshio_mesh.cells_dict['triangle6']:
# 每个单元数组包含形成三角形的点索引
# 高阶三角形单元顺序:0-3-1-4-2-5-0(连接三角形的角点和边中点)
triangle_points = meshio_mesh.points[cell]
boundary_order = [0, 3, 1, 4, 2, 5, 0]
points_for_lines = triangle_points[boundary_order]
# 绘制边界线
plotter.add_lines(points_for_lines, color='blue', width=3, connected=True)
plotter.show()
四边形高阶单元(Q9)¶
import pygmsh
import pyvista as pv
import meshio
def meshGenerator():
with pygmsh.geo.Geometry() as geom:
rectangle = geom.add_rectangle(0, 5, 0, 5, 0.0, 0.8)
geom.set_recombined_surfaces([rectangle.surface])
mesh = geom.generate_mesh(order=2)
return mesh
mesh = meshGenerator()
meshio_mesh = meshio.Mesh(points=mesh.points, cells=[("quad9", mesh.cells_dict['quad9'])])
plotter = pv.Plotter()
darg = dict(
show_edges=False,
)
plotter.add_mesh(meshio_mesh, **darg)
plotter.add_points(meshio_mesh.points, color='red', point_size=15, render_points_as_spheres=True)
for cell in meshio_mesh.cells_dict['quad9']:
# 每个单元数组包含形成三角形的点索引
# 高阶四边形单元顺序 0-4-1-5-2-6-3-7-0
triangle_points = meshio_mesh.points[cell]
boundary_order = [0, 4, 1, 5, 2, 6, 3, 7, 0]
points_for_lines = triangle_points[boundary_order]
# 绘制边界线
plotter.add_lines(points_for_lines, color='blue', width=3, connected=True)
plotter.view_xy()
plotter.show()