MENU

pygmsh的网格生成记录(1):geo模块完成网格划分

• December 23, 2022 • Read: 2814 • Finitie Element Method Theory,Python

geo模块

pygmsh中的geo模块,是最基本的几何生成方法,在这个模块中,Geometry这个类会被在最开始就建立,生成一个几何对象实例,这个对象可以是任意的,具体的几何形状可以通过类的方法进行生成,比如多边形用add_polygon()这个方法,圆可以用add_circle()方法。当然,也可以从最基本的点开始生成,在点的基础上生成线(这个线可以是直线,也可以是曲线或者贝塞尔曲线)。

geo模块中,在二维几何对象的基础上,可以进行一些简单的拉伸,旋转、扭转等操作,从而生成三维对象。

import pygmsh

with pygmsh.geo.Geometry() as geom:
    geom.add_polygon(
        [
            [0.0, 0.0],
            [1.0, -0.2],
            [1.1, 1.2],
            [0.1, 0.7],
        ],
        mesh_size=0.1,
    )
    mesh = geom.generate_mesh()
with pygmsh.geo.Geometry() as geom:
    geom.add_circle([0.0, 0.0], 1.0, mesh_size=0.2)
    mesh = geom.generate_mesh()

mesh对象的操作

geom对象的generate_mesh()方法能够进行几何模型的网格划分,划分后会返回一个结果,这个结果这里就先称之为mesh。mesh中包含了节点坐标,单元的节点组成等等信息,当然node和element是最关心的数据。当然python是一种完全的面向对象的编程语言,这里的mesh实际上也是一种类,他的属性,以及它的方法都被用于体现表征数据信息。查看网格节点的坐标可以用points属性,但是网格单元组成的信息,并不是被封装为属性,似乎是一个更为复杂的结构体,mesh.cells是一个meshio对象,mesh.cells_dict["triangle"]可以用于查看三角单元的信息。

mesh.points  # 获取节点坐标

mesh.cells_dict["triangle"]  # 获取单元节点组成

由于mesh是meshio中的对象,它可以方便的输出为vtk文件,采用write方法即可完成。

mesh.write("xxx.vtk")

输出的vtk文件,可以直接采用paraview打开查看。

paraview1
paraview2

Archives Tip
QR Code for this page
Tipping QR Code
Leave a Comment

已有 1 条评论
  1. ydl ydl

    您好 请问您了解pygmsh支持导入模型文件的网格划分吗