【开源有限元网格工具介绍】用meshio读取、转换网格格式

文摘   2024-07-12 17:00   广西  

在有限元分析(FEA)等科学计算领域,网格数据是核心部分之一。不同软件和工具通常使用不同的网格文件格式,这给数据的传递和处理带来了很大的不便。本文将介绍一个强大的工具——Meshio。它是一个用于读取、写入和转换多种网格文件格式的 Python 库,能够极大地简化跨平台网格数据的处理流程,让我们的工作更加高效。

什么是 Meshio?

Meshio 是一个开源的 Python 库,旨在简化网格文件格式之间的转换。无论你是处理 VTK、VTU、STL、PLY、CGNS、Abaqus 还是其他格式,Meshio 都能轻松应对。这使得在不同软件和工具之间进行数据传递变得更加方便和快捷。Meshio 可以解决各种标准格式网格之间的读取、写入和转换,包括但不限于:

  • Abaqus

  • ANSYS msh

  • DOLFIN XML

  • Exodus

  • FLAC3D

  • H5M

  • Kratos/MDPA

  • Medit

  • MED/Salome

  • Nastran (bulk data)

  • Gmsh (versions 2 and 4)

  • OFF

  • PERMAS

  • STL

  • TetGen .node/.ele

  • SVG (2D only, output only)

  • VTK

  • VTU

  • XDMF

为什么选择 Meshio?

  1. 支持多种格式:Meshio 支持众多常见的网格文件格式,几乎涵盖了所有主要的网格文件格式需求。

  2. 简单易用:Meshio 的 API 设计简洁明了,无论你是网格数据的初学者还是经验丰富的专家,都能轻松上手。

  3. 强大的社区支持:作为一个活跃的开源项目,Meshio 拥有强大的社区支持,定期更新和完善功能,确保你始终使用最先进的工具。

安装 Meshio

安装 Meshio 非常简单,只需使用 pip 命令即可:

pip install meshio[all] --user

Meshio 网格文件处理示例分析

本节将展示如何使用 Meshio 库来读取、处理和导出网格文件数据。以下是代码的详细总结和分析。

1. 网格读取

首先,导入 Meshio 库并读取一个名为 Job-2.inp 的网格文件,该文件为一L形区域的abaqus网格文件。

import meshio

msh = meshio.read("Job-2.inp")
print(msh)

meshio.read() 函数用于读取网格文件并返回一个 Meshio 对象,打印该对象可以查看网格的基本信息。

2. 获取节点信息

2.1 获取网格节点信息

通过 msh.points 获取网格的节点信息。

nodes = msh.points
nodes

msh.points 返回节点的坐标信息。

2.2 获取节点集信息

比如我们在abaqus中生成的inp文件,边界条件需要在某个节点集合下施加,这时候meshio也可以容易读取到相应的节点集信息。可以通过下面的命令查看网格文件中定义了多少个节点集合:

msh.point_sets.keys()

我的输出如下,定义了两个集合:

dict_keys(['Set-1', 'Set-2'])

同时可以看到msh.point_sets为字典类型,则可通过下面的命令获取某个具体的节点集合:

msh.point_sets.get("Set-1")

我的输出如下

array([  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
130, 131, 132, 133])

3. 单元信息

3.1 通过索引获取单元信息

使用索引访问网格中的单元信息。

cell_i = msh.cells[0]
cell_i.data
cell_i.data.shape

msh.cells 返回一个包含单元信息的列表,cell_i.data 获取该单元的详细数据,.shape 返回数据的形状。

3.2 通过单元类型获取单元信息

使用 get_cells_type() 方法按单元类型获取单元信息。

cell_tri = msh.get_cells_type("triangle")
cell_tri

msh.get_cells_type("triangle") 返回类型为三角形的单元信息。

4. 导出网格信息

4.1 直接写入

使用 meshio.write_points_cells() 函数将节点和单元信息写入新的网格文件。

meshio.write_points_cells("test.vtk", nodes, {"triangle": cell_tri})

查看网格:

ParaView中查看vtk文件

meshio.write_points_cells() 函数接受文件名、节点和单元信息,并将这些信息写入指定的文件。

4.2 转换网格格式

先创建一个新的 Meshio 对象,然后使用 meshio.write() 函数将其写入不同格式的文件。

my_cell = {"triangle": cell_tri}
new_msh = meshio.Mesh(nodes, my_cell)
meshio.write("test_2.vtu", new_msh)

meshio.Mesh() 创建一个新的 Meshio 对象,meshio.write() 函数将该对象写入指定的文件格式。

这部分代码展示了 Meshio 在网格文件处理中的基本用法,包括读取网格文件、获取节点和单元信息,以及将网格数据导出为不同的文件格式。Meshio 提供了简洁的 API,使得跨格式的网格数据处理变得十分方便

结语

Meshio 是一个强大而灵活的工具,极大地简化了网格文件格式之间的转换过程。无论你是从事科研工作还是工程项目,Meshio 都能为你提供高效的解决方案。如果你还没用过 Meshio,不妨试试看,相信它会成为你工作中的得力助手。

往期相关内容推荐:
【开源有限元网格工具Gmsh】建模脚本入门、导出Abaqus inp格式的网格文件及高阶有限元网格的设置
【开源有限元网格工具介绍】Gmsh:强大的三维有限元网格生成器

如果你还想了解更多有限元相关可以参考下面内容:

对有限元编程感兴趣的朋友也可以关注下面的文章:
【付费内容】有限元笔记-Timoshenko 梁单元刚度矩阵推导及其有限元编程实现


挨踢的土木佬
一名学习编程的土木佬,计算固体力学,以第一/通讯作者身份在IJNME、IJSS、力学学报、振动工程学报等权威期刊发表论文若干。热衷分享Python编程、数据处理和数值分析(含有限元)新知,不定期更新文章与笔记。
 最新文章