Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

adaptmesh

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

adaptmesh

Adaptive mesh generation and refinement

  • 0.3.3
  • PyPI
  • Socket score

Maintainers
1

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 in the following paper:

@article{adaptmesh,
    title={A simple technique for unstructured mesh generation via adaptive finite elements},
    author={Gustafsson, Tom},
    volume={54},
    doi={10.23998/rm.99648},
    number={2},
    journal={Rakenteiden Mekaniikka},
    year={2021},
    pages={69--79}
}

adaptmesh ships with customized versions of the following packages:

  • tri v0.3.1.dev0 (ported to Python 3; Copyright (c) 2015 Martijn Meijers; MIT; source)
  • optimesh v0.6.3 (trimmed down version with minor changes to the edge flipping; Copyright (c) 2018-2020 Nico Schlömer; the last version with MIT; source)
  • meshplex v0.12.3 (trimmed down version with minor changes, i.e. removal of unnecessary imports; Copyright (c) 2017-2020 Nico Schlömer; the last version with MIT; source)

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.),])
                 
# m.p are the points
# m.t are the elements

Example mesh 1

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

Example mesh 2

Holes

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

Example mesh 3

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.

Example mesh 4

Licensing

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

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.3.3] - 2022-02-04

  • Fixed: Properly respect segments in the initial triangulation.

[0.3.2] - 2021-09-28

  • Fixed: Rendering of README in pypi.

[0.3.1] - 2021-09-28

  • Fixed: Support for scikit-fem>=4.

[0.3.0] - 2021-06-22

  • Fixed: Support for scikit-fem>=3. Dependency update broke the mesh refinement.

[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.

FAQs


Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc