Priusds / ParGeo

Generate complex two-dimensional geometries for simulations based on mesh discretizations.
https://pypi.org/project/pargeo/
MIT License
2 stars 1 forks source link
discretization finite-element-methods geometry gmsh mesh

ParGeo

Overview | Installation | Basic Usage | Getting Started | Documentation | Cite

Generate complex two-dimensional geometries for simulations based on mesh discretizations.

ParGeo Logo

Overview

With ParGeo you can create complex domains, where a domain is a two-dimensional geometry which is described by a collection of shapely Polygons and MultiPolygons called subdomains.

This domain could then be used for mesh generation, to further perform 2D mesh based simulations, like the Finite Element Methods (FEM). We provide mesh generating functionalities based on Gmsh.

To generate the desired domain you will use the pargeo.domain.Domain class and sequentially add subdomains. Each subdomain is associated with a visibility level. The visibility level is an integer, and subdomains with a higher visibility level will cover those with a lower one and be merged with those having the same one.

Following features support you with the domain-generating process:

Check out the documentation for more information.

Installation

Install the latest version of ParGeo from PyPI using pip:

pip install pargeo

Basic Usage

Here's a simple example of how to use ParGeo.

from pargeo import write_mesh
from pargeo.domain import Domain
from pargeo.geometry import Box, Circle, Stellar

# Create a domain
background = Box((0, 0), (1, 1)).to_polygon()
domain = Domain(background)

# Add some subdomains
subdomain = Circle((0.3, 0.5), 0.3).to_polygon(refs=50)
domain.add_subdomain(subdomain=subdomain, level=1)

subdomain = Circle((0.7, 0.5), 0.3).to_polygon(refs=50)
domain.add_subdomain(subdomain=subdomain, level=1)

subdomain = Stellar((0.5, 0.3), 0.2).to_polygon(refs=50)
domain.add_subdomain(subdomain=subdomain, level=2)

# Plot the domain
domain.plot()

# Mesh the domain using Gmsh and write the .MSH file
write_mesh(domain, "basic_usage")

Cite

If you use ParGeo in your research, please cite it. You can use the following BibTeX entry:

@software{Schafer_ParGeo_2024,
    author = {Gruhlke, Robert and Schäfer, Till},
    month = feb,
    title = {{ParGeo}},
    url = {https://github.com/Priusds/ParGeo},
    version = {0.3.4},
    year = {2024}
}