GITSHOHOKU / meshplex

Compute interesting points, areas, and volumes in triangular and tetrahedral meshes.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

meshplex

Fast tools for simplex meshes.

PyPi Version PyPI pyversions GitHub stars PyPi downloads

Documentation Status

gh-actions codecov LGTM Code style: black

Compute all sorts of interesting points, areas, and volumes in triangular and tetrahedral meshes, with a focus on efficiency. Useful in many contexts, e.g., finite-element and finite-volume computations.

meshplex is used in optimesh and pyfvm.

Quickstart

For triangular and tetrahedral meshes, meshplex can compute the following data:

import numpy
import meshplex

# create a simple MeshTri instance
points = numpy.array([[0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [0.0, 1.0, 0.0]])
cells = numpy.array([[0, 1, 2]])
mesh = meshplex.MeshTri(points, cells)
# or read it from a file
# mesh = meshplex.read("pacman.vtk")

# triangle volumes
print(mesh.cell_volumes)

# circumcenters, centroids, incenters
print(mesh.cell_circumcenters)
print(mesh.cell_centroids)
print(mesh.cell_incenters)

# circumradius, inradius, cell quality, angles
print(mesh.cell_circumradius)
print(mesh.cell_inradius)
print(mesh.q_radius_ratio)  # d * inradius / circumradius (min 0, max 1)
print(mesh.angles)

# control volumes, centroids
print(mesh.control_volumes)
print(mesh.control_volume_centroids)

# covolume/edge length ratios
print(mesh.ce_ratios)

# flip edges until the mesh is Delaunay
mesh.flip_until_delaunay()

# show the mesh
mesh.show()

For triangular meshes, meshplex also has some mesh manipulation routines:

mesh.flip_until_delaunay()  # flips edges until the mesh is Delaunay
mesh.remove_cells([0, 2, ...])  # removes some cells

For a documentation of all classes and functions, see readthedocs.

(For mesh creation, check out this list).

Plotting

Triangles

import meshplex

mesh = meshplex.read("pacman-optimized.vtk")
mesh.show(
    # show_coedges=True,
    # control_volume_centroid_color=None,
    # mesh_color="k",
    # nondelaunay_edge_color=None,
    # boundary_edge_color=None,
    # comesh_color=(0.8, 0.8, 0.8),
    show_axes=False,
)

Tetrahedra

import numpy
import meshplex

# Generate tetrahedron
points = (
    numpy.array(
        [
            [1.0, 0.0, -1.0 / numpy.sqrt(8)],
            [-0.5, +numpy.sqrt(3.0) / 2.0, -1.0 / numpy.sqrt(8)],
            [-0.5, -numpy.sqrt(3.0) / 2.0, -1.0 / numpy.sqrt(8)],
            [0.0, 0.0, numpy.sqrt(2.0) - 1.0 / numpy.sqrt(8)],
        ]
    )
    / numpy.sqrt(3.0)
)
cells = [[0, 1, 2, 3]]

# Create mesh object
mesh = meshplex.MeshTetra(points, cells)

# Plot cell 0 with control volume boundaries
mesh.show_cell(
    0,
    # barycenter_rgba=(1, 0, 0, 1.0),
    # circumcenter_rgba=(0.1, 0.1, 0.1, 1.0),
    # circumsphere_rgba=(0, 1, 0, 1.0),
    # incenter_rgba=(1, 0, 1, 1.0),
    # insphere_rgba=(1, 0, 1, 1.0),
    # face_circumcenter_rgba=(0, 0, 1, 1.0),
    control_volume_boundaries_rgba=(1.0, 0.0, 0.0, 1.0),
    line_width=3.0,
)

Installation

meshplex is available from the Python Package Index, so simply type

pip install meshplex

to install.

Testing

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

pytest

License

This software is published under the GPLv3 license.

About

Compute interesting points, areas, and volumes in triangular and tetrahedral meshes.

License:GNU General Public License v3.0


Languages

Language:Python 99.5%Language:Makefile 0.5%