用gmsh生成三角形元素并用python读取

问题描述 投票:0回答:1

我正在尝试使用 gmsh 生成三角形网格,然后使用 python 读取它,对于 python 部分我使用 meshio。但我的问题是网格元素总是作为线读取,而不是三角形。

这是我的.geo

SetFactory("OpenCASCADE");
Circle(1) = {0, 0, 0, 1, 0, 2*Pi};
Curve Loop(1) = {1};
Plane Surface(1) = {1};
Physical Curve("circle", 2) = {1};

然后我跑:

gmsh -2 circle.geo

并得到这个网格:

用这个Python代码我读取了网格:

ELEMENT_TYPES = {
    "line": 2,
    "line3": 3,
    "triangle": 3,
    "quadrangle": 4,
    "tetrahedron": 4,
    "hexahedron": 8,
    "prism": 6,
    "pyramid": 5,
}

def read(self, mesh_file: str):
    msh = meshio.read(mesh_file)

    points = msh.points
    number_of_nodes = points.shape[0]
    point_index = range(number_of_nodes)
    mesh_nodes = dict(zip(point_index, points))

    elements = []
    for cell in msh.cells:
        cell_type = cell.type
        for idx, element_nodes in enumerate(cell.data, 1):

            element_nodes_coordinates = np.array([mesh_nodes[node] for node in element_nodes])

            element = Element(
                index=idx,
                type=cell_type,
                size=ELEMENT_TYPES[cell_type],
                nodes=element_nodes,
                nodes_coordinates=element_nodes_coordinates,
            )

            elements.append(element)

但我总是得到网格类型的线(2节点元素),我需要一个3节点三角形网格。

python mesh gmsh meshio
1个回答
0
投票

我很确定这是因为您只为圆添加了一个“物理组”,它是一维曲线(而不是二维磁盘),所以您还需要将曲面添加到物理组中,否则 gmsh 将不会保存其输出中的三角形。添加这一行,我认为它会起作用:

Physical Surface("My surface") = {1};

© www.soinside.com 2019 - 2024. All rights reserved.