pydistmesh
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>
__)