我试图用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节点的三角形网格。