I/O for mesh files.
https://img.shields.io/static/v1?logo=slack&label=slack&message=chat&color=4a154b&style=flat-square
There are various mesh formats available for representing unstructured meshes. meshio can read and write all of the following and smoothly converts between them:
Abaqus, ANSYS msh, AVS-UCD, CGNS, DOLFIN XML, Exodus, FLAC3D, H5M, Kratos/MDPA, Medit, MED/Salome, Nastran (bulk data), Neuroglancer precomputed format, Gmsh (versions 2 and 4), OBJ, OFF, PERMAS, PLY, STL, TetGen .node/.ele, SVG (2D only, output only), UGRID, VTK, VTU (not raw binary data), WKT (TIN), XDMF.
Install with
pip install meshio[all]
and simply call
meshio-convert input.msh output.vtu
with any of the supported formats.
In Python, simply do
import meshio
mesh = meshio.read(
filename, # string, os.PathLike, or a buffer/open file
file_format="stl" # optional if filename is a path; inferred from extension
)
# mesh.points, mesh.cells, mesh.cells_dict, ...
# mesh.vtk.read() is also possible
to read a mesh. To write, do
points = numpy.array([
[0.0, 0.0, 0.0],
[0.0, 1.0, 0.0],
[0.0, 0.0, 1.0],
])
cells = [
("triangle", numpy.array([[0, 1, 2]]))
]
meshio.write_points_cells(
"foo.vtk",
points,
cells,
# Optionally provide extra data on points, cells, etc.
# point_data=point_data,
# cell_data=cell_data,
# field_data=field_data
)
or explicitly create a mesh object for writing
mesh = meshio.Mesh(points, cells)
meshio.write(
"foo.vtk", # str, os.PathLike, or buffer/ open file
mesh,
# file_format="vtk", # optional if first argument is a path; inferred from extension
)
# mesh.vtk.write() is also possible
For both input and output, you can optionally specify the exact file_format
(in case you would like to enforce ASCII over binary VTK, for example).
Reading and writing can also be handled directly by the Mesh
object:
m = meshio.Mesh.read(filename, "vtk") # same arguments as meshio.read
m.write("foo.vtk") # same arguments as meshio.write, besides `mesh`
The XDMF format supports time series with a shared mesh. You can write times series data using meshio with
with meshio.xdmf.TimeSeriesWriter(filename) as writer:
writer.write_points_cells(points, cells)
for t in [0.0, 0.1, 0.21]:
writer.write_data(t, point_data={"phi": data})
and read it with
with meshio.xdmf.TimeSeriesReader(filename) as reader:
points, cells = reader.read_points_cells()
for k in range(reader.num_steps):
t, point_data, cell_data = reader.read_data(k)
The comparisons here are for a tetrahedral mesh with about 400k points and 2M tetrahedra. The red lines mark the size of the mesh in memory.
meshio is available from the Python Package Index, so simply do
pip install meshio
to install.
Additional dependencies (netcdf4
, h5py
) are required for some of the output formats
and can be pulled in by
pip install meshio[all]
You can also install meshio from anaconda:
conda install -c conda-forge meshio
To run the meshio unit tests, check out this repository and type
pytest
meshio is published under the MIT license.