Skip to main content

Adaptive mesh generation and refinement

Project description

adaptmesh

PyPI PyPI - License ci DOI

Create triangular meshes by the adaptive process.

The user feeds in a polygon and a low quality mesh is created. Then the low quality mesh gets improved by adaptive finite elements and mesh smoothing. The approach is detailed here.

Installation

pip install adaptmesh

Dependencies

  • numpy
  • scipy
  • matplotlib
  • scikit-fem

Examples

The mesh generator is called through the function adaptmesh.triangulate.

Square with default settings

from adaptmesh import triangulate

m = triangulate([(0., 0.),
                 (1., 0.),
                 (1., 1.),
                 (0., 1.),])

img

Non-convex shape

from adaptmesh import triangulate

m = triangulate([(0.0, 0.0),
                 (1.1, 0.0),
                 (1.2, 0.5),
                 (0.7, 0.6),
                 (2.0, 1.0),
                 (1.0, 2.0),
                 (0.5, 1.5),], quality=0.95)  # default: 0.9

img

Holes

m = triangulate([(0., 0.),
                 (1., 0.),
                 (1., 1.),
                 (0., 1.),],
                holes=[[(.25, .25),
                        (.75, .25),
                        (.75, .75),
                        (.25, .75)]])

img

Subdomains

m1 = triangulate([(0., 0.),
                  (1., 0.),
                  (.7, 1.),
                  (0., 1.),],
                 split=[(1, 8),
                        (2, 6)],
                 quality=0.91)

m2 = triangulate([(0., 2.),
                  (2., 2.),
                  (2., 0.),
                  (1., 0.),
                  (.7, 1.),
                  (0., 1.)],
                 split=[(3, 8),
                        (4, 6)],
                 quality=0.91)

m = m1 + m2

Multiple meshes can be joined to emulate subdomains. However, the nodes must match. Above, segments are splitted to facilitate the matching, e.g., [(1, 8), (2, 6)] means that the second and the third segments are split using eight and six equispaced extra nodes, respectively.

img

Licensing

The main source code of adaptmesh is distributed under the MIT License.

adaptmesh ships with customized versions of the following packages:

  • tri v0.3.1.dev0 (ported to Python 3; MIT)
  • optimesh v0.6.2 (trimmed down version with minor changes to the edge flipping; the last version with MIT)
  • meshplex v0.12.3 (trimmed down version with minor changes, i.e. removal of unnecessary imports; the last version with MIT)

The licenses of the included packages can be found also in LICENSE.md and the respective subdirectories, i.e. ./adaptmesh/*/LICENSE. See LICENSE.md for more information.

Changelog

Unreleased

[0.2.0] - 2021-01-20

  • Added: keyword argument split of triangulate allows further splitting the provided segments. This is useful because the segment endpoints are always preserved in the final mesh.
  • Added: keyword argument holes of triangulate allows specifying additional polygonal areas inside the domain that will be free of triangles in the final mesh.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

adaptmesh-0.2.0.tar.gz (43.4 kB view hashes)

Uploaded Source

Built Distribution

adaptmesh-0.2.0-py3-none-any.whl (46.1 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page