• Stars
    star
    1,855
  • Rank 24,799 (Top 0.5 %)
  • Language
    Python
  • License
    MIT License
  • Created almost 9 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

πŸ•ΈοΈ input/output for many mesh formats

meshio

I/O for mesh files.

PyPi Version Anaconda Cloud Packaging status PyPI pyversions DOI GitHub stars Downloads

Discord

gh-actions codecov LGTM Code style: black

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 (.inp), ANSYS msh (.msh), AVS-UCD (.avs), CGNS (.cgns), DOLFIN XML (.xml), Exodus (.e, .exo), FLAC3D (.f3grid), H5M (.h5m), Kratos/MDPA (.mdpa), Medit (.mesh, .meshb), MED/Salome (.med), Nastran (bulk data, .bdf, .fem, .nas), Netgen (.vol, .vol.gz), Neuroglancer precomputed format, Gmsh (format versions 2.2, 4.0, and 4.1, .msh), OBJ (.obj), OFF (.off), PERMAS (.post, .post.gz, .dato, .dato.gz), PLY (.ply), STL (.stl), Tecplot .dat, TetGen .node/.ele, SVG (2D output only) (.svg), SU2 (.su2), UGRID (.ugrid), VTK (.vtk), VTU (.vtu), WKT (TIN) (.wkt), XDMF (.xdmf, .xmf).

(Here's a little survey on which formats are actually used.)

Install with one of

pip install meshio[all]
conda install -c conda-forge meshio

([all] pulls in all optional dependencies. By default, meshio only uses numpy.) You can then use the command-line tool

meshio convert    input.msh output.vtk   # convert between two formats

meshio info       input.xdmf             # show some info about the mesh

meshio compress   input.vtu              # compress the mesh file
meshio decompress input.vtu              # decompress the mesh file

meshio binary     input.msh              # convert to binary format
meshio ascii      input.msh              # convert to ASCII format

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
    # see meshio-convert -h for all possible formats
)
# mesh.points, mesh.cells, mesh.cells_dict, ...

# mesh.vtk.read() is also possible

to read a mesh. To write, do

import meshio

# two triangles and one quad
points = [
    [0.0, 0.0],
    [1.0, 0.0],
    [0.0, 1.0],
    [1.0, 1.0],
    [2.0, 0.0],
    [2.0, 1.0],
]
cells = [
    ("triangle", [[0, 1, 2], [1, 3, 2]]),
    ("quad", [[1, 4, 5, 3]]),
]

mesh = meshio.Mesh(
    points,
    cells,
    # Optionally provide extra data on points, cells, etc.
    point_data={"T": [0.3, -1.2, 0.5, 0.7, 0.0, -3.0]},
    # Each item in cell data must match the cells array
    cell_data={"a": [[0.1, 0.2], [0.4]]},
)
mesh.write(
    "foo.vtk",  # str, os.PathLike, or buffer/open file
    # file_format="vtk",  # optional if first argument is a path; inferred from extension
)

# Alternative with the same options
meshio.write_points_cells("foo.vtk", points, cells)

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).

Time series

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)

ParaView plugin

gmsh paraview

*A Gmsh file opened with ParaView.*

If you have downloaded a binary version of ParaView, you may proceed as follows.

  • Install meshio for the Python major version that ParaView uses (check pvpython --version)
  • Open ParaView
  • Find the file paraview-meshio-plugin.py of your meshio installation (on Linux: ~/.local/share/paraview-5.9/plugins/) and load it under Tools / Manage Plugins / Load New
  • Optional: Activate Auto Load

You can now open all meshio-supported files in ParaView.

Performance comparison

The comparisons here are for a triangular mesh with about 900k points and 1.8M triangles. The red lines mark the size of the mesh in memory.

File sizes

file size

I/O speed

performance

Maximum memory usage

memory usage

Installation

meshio is available from the Python Package Index, so simply run

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

Testing

To run the meshio unit tests, check out this repository and type

tox

License

meshio is published under the MIT license.

More Repositories

1

tikzplotlib

πŸ“Š Save matplotlib figures as TikZ/PGFplots for smooth integration into LaTeX.
Python
2,350
star
2

tiptop

πŸ–₯️ Command-line system monitoring
Python
1,695
star
3

perfplot

πŸ“ˆ Performance analysis for Python snippets
Python
1,323
star
4

tuna

🐟 Python profile viewer
Python
1,311
star
5

awesome-scientific-computing

😎 Curated list of awesome software for numerical analysis and scientific computing
Python
1,275
star
6

pygmsh

πŸ•ΈοΈ Gmsh for Python
Python
822
star
7

matplotx

πŸ“Š More styles and useful extensions for Matplotlib
Python
774
star
8

termplotlib

πŸ“ˆ Plotting on the command line
Python
655
star
9

colorio

🌈 Tools for color research
TeX
320
star
10

stressberry

Stress tests for the Raspberry Pi πŸ˜…
Python
310
star
11

github-trends

πŸ“ˆ GitHub star history plots
256
star
12

dufte

πŸ“ˆ Minimalistic Matplotlib style
Python
214
star
13

deadlink

πŸ’€ Checks and fixes URLs in code and documentation.
Python
160
star
14

cplot

🌈 Plot complex functions
Python
147
star
15

termtables

πŸ–₯️ Pretty tables in the terminal
Python
97
star
16

pytest-codeblocks

πŸ“„ Test code blocks in your READMEs
Python
92
star
17

xhub

Extend GitHub pages with math, graphs etc.
JavaScript
91
star
18

action-cached-lfs-checkout

GitHub checkout action with LFS files pulled from cache
Just
85
star
19

ua-beamer

A LaTeX beamer theme for the University of Antwerp
TeX
75
star
20

pipdate

Small pip update helpers.
Python
72
star
21

matlab-guidelines

Guidelines for writing clean and fast code in MATLAB
TeX
65
star
22

spectro

🎡 Audio file analysis
Python
47
star
23

tablign

Aligns columns in your ASCII tables on the command line or in vim.
Python
43
star
24

pyfoobar

Python project template/scaffold and best practices
Python
41
star
25

betterspy

πŸ‘€ Visualization for SciPy sparse matrices.
Python
39
star
26

color-data

🌈 Collected experimental data for color research
Python
39
star
27

stackoverflow-trends

πŸ“ˆ StackOverflow trends
35
star
28

maelstrom

Numerical simulation of magnetohydrodynamics.
Python
35
star
29

purple-pi

πŸ’œ LaTeX math wherever you want
JavaScript
31
star
30

stackoverflow-card

JavaScript
29
star
31

markdown-math-acid-test

Showcase GitHub math bugs
25
star
32

fontman

Manage and update your installed fonts.
Python
21
star
33

tau

The better pi
Python
20
star
34

scipyx

SciPy fixes and extensions
Python
18
star
35

pyfma

Fused multiply-add (with a single rounding) for Python.
Python
18
star
36

epicycler

Create epicycle animations.
Python
15
star
37

gitfaces

Fetch contributor avatars for a GitHub repository
Python
15
star
38

python-vs-cpp

C++
13
star
39

fjson

Python JSON writer with formatted floats
Python
13
star
40

identinum

Identify exact expression for decimal.
Python
9
star
41

mikado

Friendly solver interfaces for Trilinos.
C++
8
star
42

materials

Density, magnetic permeability etc. for a range of materials.
Python
8
star
43

note-on-cam16

Algorithmic improvements for the CIECAM02 and CAM16 color appearence models
TeX
8
star
44

matheon-html5-template

Matheon HTML5 presentation template
JavaScript
8
star
45

flow

Navier-Stokes and heat equation with FEniCS.
Python
5
star
46

nosh

A numerical solver for nonlinear SchrΓΆdinger equations
C++
4
star
47

tex-font-errors-cheatsheet

Cheat sheet(s) for decoding the meaning of TeX font errors
3
star
48

rhino

Python
3
star
49

vandermonde

πŸ“ Tools for working with Vandermonde matrices, e.g., BjΓΆrck-Pereyra.
Python
3
star
50

keygen_licensing_tools

Tools for license valididation with Keygen.sh
Python
3
star
51

plm

Python
2
star
52

corona-charts

Corona data and charts, updated automatically
Python
2
star
53

math-test

2
star
54

github-mathml-test

2
star
55

parabolic

Time stepping methods for parabolic problems.
Python
2
star
56

sippp

Fortran library for the solution of singularly perturbed parabolic problems
Fortran
2
star
57

nschloe.github.io

Ruby
2
star
58

hanoi-material

Class material for nonlinear optimization at Hanoi Autumn School 2013
MATLAB
2
star
59

talk-python-scientific

Python in Scientific Computation
JavaScript
2
star
60

trilinos-tutorial

C++
1
star
61

tspsolve

Solution algorithms for the travelling salesman problem.
Python
1
star
62

launchpadtools

Tools for submitting packages to Ubuntu Launchpad
Python
1
star
63

nschloe

about me
1
star