代码之家  ›  专栏  ›  技术社区  ›  efirvida

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

  •  0
  • efirvida  · 技术社区  · 3 年前

    我试图用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
    

    然后得到这个网格:

    enter image description here

    有了这个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节点的三角形网格。

    0 回复  |  直到 3 年前