# ParGeo
[**Overview**](#overview)
| [**Installation**](#installation)
| [**Basic Usage**](#basic-usage)
| [**Getting Started**](https://pargeo.readthedocs.io/en/latest/notebooks/getting-started.html)
| [**Documentation**](https://pargeo.readthedocs.io/en/latest/)
| [**Cite**](#cite)
Generate complex two-dimensional geometries for simulations based on mesh discretizations.
![ParGeo Logo](docs/_static/logo.png)
# 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](https://shapely.readthedocs.io/en/stable/reference/shapely.Polygon.html#shapely.Polygon) and [MultiPolygons](https://shapely.readthedocs.io/en/stable/reference/shapely.MultiPolygon.html#shapely.MultiPolygon) 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](https://gmsh.info).
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:
- **Create Geometries** (`pargeo.geometry`):
Create common geometries that can easly be transformed into shapely Polygons.
Following geometries are provided:
- Box
- Circle & Ellipse
- Stellar
- NStar
- Raindrop
- **Transform Geometries** (`pargeo.transform`)
Pass transforms to your domain while adding new sub-domains. The sub-domain will then be first accordingly transformed before being added to the domain.
Following transforms are provided:
- Repeat
- Periodic
- Diffeomorphism
- **Impose Constraints** (`pargeo.constraint`)
Pass constraints to the domain while adding new sub-domains. The new sub-domain is only added, if the constraints are met.
Following constraints are provided:
- DistanceConstraint
Check out the [documentation](https://pargeo.readthedocs.io/en/latest/) for more information.
## Installation
Install the latest version of ParGeo from PyPI using pip:
```bash
pip install pargeo
```
## Basic Usage
Here's a simple example of how to use ParGeo.
```python
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:
```bibtex
@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}
}
```
Raw data
{
"_id": null,
"home_page": "https://github.com/Priusds/ParGeo",
"name": "pargeo",
"maintainer": "Till Sch\u00e4fer",
"docs_url": null,
"requires_python": "<4.0,>=3.11",
"maintainer_email": "tillschaefer96@hotmail.it",
"keywords": "geometry, mesh, gmsh, composite, material, FEM, Finite Element Method",
"author": "Robert Gruhlke",
"author_email": "r.gruhlke@fu-berlin.de",
"download_url": "https://files.pythonhosted.org/packages/e0/fa/486af50f9be5592e4aaf96b203d16727ed6ad9737222b8444e24b35ebe61/pargeo-0.3.4.tar.gz",
"platform": null,
"description": "# ParGeo\n\n[**Overview**](#overview)\n| [**Installation**](#installation)\n| [**Basic Usage**](#basic-usage)\n| [**Getting Started**](https://pargeo.readthedocs.io/en/latest/notebooks/getting-started.html)\n| [**Documentation**](https://pargeo.readthedocs.io/en/latest/)\n| [**Cite**](#cite)\n\nGenerate complex two-dimensional geometries for simulations based on mesh discretizations.\n\n![ParGeo Logo](docs/_static/logo.png)\n\n# Overview\n\nWith ParGeo you can create complex _domains_, where a domain is a two-dimensional geometry which is described by a collection of shapely [Polygons](https://shapely.readthedocs.io/en/stable/reference/shapely.Polygon.html#shapely.Polygon) and [MultiPolygons](https://shapely.readthedocs.io/en/stable/reference/shapely.MultiPolygon.html#shapely.MultiPolygon) called _subdomains_.\n\nThis 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](https://gmsh.info).\n\nTo 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.\n\nFollowing features support you with the domain-generating process:\n\n- **Create Geometries** (`pargeo.geometry`): \n \n Create common geometries that can easly be transformed into shapely Polygons.\n\n Following geometries are provided:\n\n - Box\n - Circle & Ellipse\n - Stellar\n - NStar\n - Raindrop \n\n- **Transform Geometries** (`pargeo.transform`)\n\n Pass transforms to your domain while adding new sub-domains. The sub-domain will then be first accordingly transformed before being added to the domain.\n\n Following transforms are provided:\n\n - Repeat\n - Periodic\n - Diffeomorphism\n\n- **Impose Constraints** (`pargeo.constraint`)\n\n Pass constraints to the domain while adding new sub-domains. The new sub-domain is only added, if the constraints are met.\n \n Following constraints are provided:\n\n - DistanceConstraint\n\nCheck out the [documentation](https://pargeo.readthedocs.io/en/latest/) for more information.\n\n## Installation\n\nInstall the latest version of ParGeo from PyPI using pip:\n\n```bash\npip install pargeo\n``` \n\n## Basic Usage\n\nHere's a simple example of how to use ParGeo.\n\n```python\nfrom pargeo import write_mesh\nfrom pargeo.domain import Domain\nfrom pargeo.geometry import Box, Circle, Stellar\n\n# Create a domain\nbackground = Box((0, 0), (1, 1)).to_polygon()\ndomain = Domain(background)\n\n# Add some subdomains\nsubdomain = Circle((0.3, 0.5), 0.3).to_polygon(refs=50)\ndomain.add_subdomain(subdomain=subdomain, level=1)\n\nsubdomain = Circle((0.7, 0.5), 0.3).to_polygon(refs=50)\ndomain.add_subdomain(subdomain=subdomain, level=1)\n\nsubdomain = Stellar((0.5, 0.3), 0.2).to_polygon(refs=50)\ndomain.add_subdomain(subdomain=subdomain, level=2)\n\n# Plot the domain\ndomain.plot()\n\n# Mesh the domain using Gmsh and write the .MSH file\nwrite_mesh(domain, \"basic_usage\")\n```\n\n\n## Cite\n\nIf you use ParGeo in your research, please cite it. You can use the following BibTeX entry:\n\n```bibtex\n@software{Schafer_ParGeo_2024,\n author = {Gruhlke, Robert and Sch\u00e4fer, Till},\n month = feb,\n title = {{ParGeo}},\n url = {https://github.com/Priusds/ParGeo},\n version = {0.3.4},\n year = {2024}\n}\n```\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Generate complex two-dimensional geometries for simulations based on mesh discretizations.",
"version": "0.3.4",
"project_urls": {
"Documentation": "https://pargeo.readthedocs.io/en/latest/",
"Homepage": "https://github.com/Priusds/ParGeo",
"Repository": "https://github.com/Priusds/ParGeo"
},
"split_keywords": [
"geometry",
" mesh",
" gmsh",
" composite",
" material",
" fem",
" finite element method"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "48e1db1a846ede002c585d7299cef923829859c7df0cb7ac7bd71fd156258613",
"md5": "898b8d85695223a25107faefcdcaa0d2",
"sha256": "673a27feeec09375718698cd67da018218fa416e57a25828e3ca854094735d92"
},
"downloads": -1,
"filename": "pargeo-0.3.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "898b8d85695223a25107faefcdcaa0d2",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.11",
"size": 23878,
"upload_time": "2024-09-07T13:31:40",
"upload_time_iso_8601": "2024-09-07T13:31:40.780541Z",
"url": "https://files.pythonhosted.org/packages/48/e1/db1a846ede002c585d7299cef923829859c7df0cb7ac7bd71fd156258613/pargeo-0.3.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e0fa486af50f9be5592e4aaf96b203d16727ed6ad9737222b8444e24b35ebe61",
"md5": "01e49a462a04bd0cf70c3fdb0220af61",
"sha256": "ff52bec9ae1f9c53895e5befd9b9fd77297e7439f5f35c07b350455b7ac3192a"
},
"downloads": -1,
"filename": "pargeo-0.3.4.tar.gz",
"has_sig": false,
"md5_digest": "01e49a462a04bd0cf70c3fdb0220af61",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.11",
"size": 21660,
"upload_time": "2024-09-07T13:31:42",
"upload_time_iso_8601": "2024-09-07T13:31:42.075638Z",
"url": "https://files.pythonhosted.org/packages/e0/fa/486af50f9be5592e4aaf96b203d16727ed6ad9737222b8444e24b35ebe61/pargeo-0.3.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-09-07 13:31:42",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Priusds",
"github_project": "ParGeo",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "pargeo"
}