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
- DOLFIN XML
- Exodus
- H5M
- Kratos/MDPA
- Medit
- MED/Salome
- Gmsh (versions 2 and 4)
- OFF
- PERMAS
- STL
- SVG (2D only, output only)
- VTK
- VTU
- XDMF
Simply call
meshio-convert input.msh output.vtu
with any of the supported formats.
In Python, simply call
import meshio
mesh = meshio.read(filename) # optionally specify file_format
# mesh.points, mesh.cells, ...
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", mesh)
For both input and output, you can optionally specify the exact file_format
(in case you would like to enforce binary over ASCII VTK, for example).
The XDMF format supports time series with a shared mesh. You can write times series data using meshio with
writer = meshio.XdmfTimeSeriesWriter(filename)
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
reader = meshio.XdmfTimeSeriesReader(filename)
points, cells = reader.read_points_cells()
for k in range(reader.num_steps):
t, point_data, cell_data = reader.read_data(k)
meshio is available from the Python Package Index, so simply type
pip install -U meshio
to install or upgrade.
Additional dependencies (netcdf4
, h5py
and lxml
) are required for some of the output formats and can be pulled in by:
pip install -U meshio[all]
To run the meshio unit tests, check out this repository and type
pytest
meshio is published under the MIT license.