A Simple Mesh Generator in Python

## Project description

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.

## 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(d1**2+d2**2), np.sqrt(d1**2+d3**2)
...     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:

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

## Project details

This version 1.2 1.1

Uploaded source