pydistmesh icon indicating copy to clipboard operation
pydistmesh copied to clipboard

PyDistMesh: A Simple Mesh Generator in Python

PyDistMesh_: A Simple Mesh Generator in Python

PyDistMesh_ is a simple Python code for generating unstructured triangular and tetrahedral meshes using signed distance functions. It intends to have the same functionality as and similar interface to the MATLAB-based DistMesh_. Like DistMesh, upon which it is based, PyDistMesh is distributed under the GNU GPL_.

.. _PyDistMesh: https://github.com/bfroehle/pydistmesh .. _DistMesh: http://persson.berkeley.edu/distmesh/ .. _GNU GPL: http://www.gnu.org/copyleft/gpl.html

2-D Examples

  • Uniform Mesh on Unit Circle::

    import distmesh as dm import numpy as np fd = lambda p: np.sqrt((p**2).sum(1))-1.0 p, t = dm.distmesh2d(fd, dm.huniform, 0.2, (-1,-1,1,1))

  • Rectangle with circular hole, refined at circle boundary::

    import distmesh as dm fd = lambda p: dm.ddiff(dm.drectangle(p,-1,1,-1,1), ... dm.dcircle(p,0,0,0.5)) fh = lambda p: 0.05+0.3*dm.dcircle(p,0,0,0.5) p, t = dm.distmesh2d(fd, fh, 0.05, (-1,-1,1,1), ... [(-1,-1),(-1,1),(1,-1),(1,1)])

3-D Examples

  • 3-D Unit ball::

    import distmesh as dm import numpy as np fd = lambda p: np.sqrt((p**2).sum(1))-1.0 p, t = dm.distmeshnd(fd, dm.huniform, 0.2, (-1,-1,-1, 1,1,1))

  • Cylinder with hole::

    import distmesh as dm import numpy as np def fd10(p): ... r, z = np.sqrt(p[:,0]2 + p[:,1]2), p[:,2] ... d1, d2, d3 = r-1.0, z-1.0, -z-1.0 ... d4, d5 = np.sqrt(d12+d22), np.sqrt(d12+d32) ... d = dm.dintersect(dm.dintersect(d1, d2), d3) ... ix = (d1>0)(d2>0); d[ix] = d4[ix] ... ix = (d1>0)(d3>0); d[ix] = d5[ix] ... return dm.ddiff(d, dm.dsphere(p, 0,0,0, 0.5)) def fh10(p): ... h1 = 4*np.sqrt((p**2).sum(1))-1.0 ... return np.minimum(h1, 2.0) p, t = dm.distmeshnd(fd10, fh10, 0.1, (-1,-1,-1, 1,1,1))

Demos

For a quick demonstration, run::

$ python -m distmesh.demo2d

or::

$ python -m distmesh.demond

Dependencies

PyDistMesh is compatible with both Python 2 and Python 3. (The author has only tested it in Python 2.7 and Python 3.2). It requires several common Python packages:

  • NumPy_
  • SciPy_
  • matplotlib_ (optional)

Building the package requires a C compiler and LAPACK_. Cython_, if available, can be used to rebuild the extension module bindings.

.. _NumPy: http://numpy.scipy.org/ .. _SciPy: http://scipy.org/ .. _matplotlib: http://matplotlib.sourceforge.net/ .. _Cython: http://cython.org/ .. _LAPACK: http://www.netlib.org/lapack/

References

The DistMesh_ algorithm is described in the following two references. If you use the algorithm in a program or publication, please acknowledge its authors by adding a reference to the first paper below.

  • P.-O. Persson, G. Strang, A Simple Mesh Generator in MATLAB. SIAM Review, Volume 46 (2), pp. 329-345, June 2004 (PDF <http://persson.berkeley.edu/distmesh/persson04mesh.pdf>__)

  • P.-O. Persson, Mesh Generation for Implicit Geometries. Ph.D. thesis, Department of Mathematics, MIT, Dec 2004 (PDF <http://persson.berkeley.edu/thesis/persson-thesis-color.pdf>__)