PyHOPE (Python High-Order Preprocessing Environment) is an open-source Python framework for the generation of three-dimensional unstructured high-order meshes. These meshes are needed by high-order numerical methods like Discontinuous Galerkin, Spectral Element Methods, or pFEM, in order to retain their accuracy if the computational domain includes curved boundaries.
PyHOPE has been developed by the Numerics Research Group (NRG) lead by Prof. Andrea Beck at the Institute of Aerodynamics and Gas Dynamics at the University of Stuttgart, Germany.
PyHOPE is heavily inspired by [HOPR (High Order Preprocessor)](https://github.com/hopr-framework/hopr) and share the same input/output format. For more information and tutorials, please visit the [HOPR documentation](https://hopr.readthedocs.io)
This is a scientific project. If you use pyHOPE for publications or presentations in science, please support the project by citing our publications given at [numericsresearchgroup.org](https://numericsresearchgroup.org/publications.html).
# Installation
PyHOPE is built using standard Python packages. It is recommended to use a virtual environment for installation. The following commands create a virtual environment, here called `venv`, and install all required packages.
```
python -m venv venv
source venv/bin/activate
python -m pip install pyhope
```
# Usage
PyHOPE is invoked from the command line. Run parameters are read from a configuration file. The following output is obtained when running the example configuration file `tutorials/1-01-cartbox/parameter.ini`.
```
$ pyhope tutorials/1-01-cartbox/parameter.ini
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
┃ P y H O P E — Python High-Order Preprocessing Environment
┃ PyHOPE version 0.0.2
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
├─────────────────────────────────────────────
│ INIT PROGRAM...
│ nThreads │ 4 │ DEFAULT │
│ INIT PROGRAM DONE!
├─────────────────────────────────────────────
│ INIT OUTPUT...
│ ProjectName │ 1-01-cartbox │ *CUSTOM │
│ OutputFormat │ 0 [HDF5] │ *CUSTOM │
│ DebugVisu │ F │ *CUSTOM │
│ INIT OUTPUT DONE!
├─────────────────────────────────────────────
│ INIT MESH...
│ Mode │ 1 │ *CUSTOM │
│ BoundaryOrder │ 2 │ DEFAULT │
│ INIT MESH DONE!
├─────────────────────────────────────────────
│ GENERATE MESH...
├────
│ nZones │ 1 │ *CUSTOM │
├── Generating zone 1
│ Corner │ (/0.,0.,0. ,,1.,0.,0. ,,1.,1... │ *CUSTOM │
│ nElems │ (/8,8,8/) │ *CUSTOM │
│ BCIndex │ (/1,2,3,4,5,6/) │ *CUSTOM │
├────
├── Setting boundary conditions
├────
│ BoundaryName │ BC_zminus │ *CUSTOM │
│ BoundaryType │ (/4,0,0,0/) │ *CUSTOM │
│ BoundaryName │ BC_yminus │ *CUSTOM │
│ BoundaryType │ (/2,0,0,0/) │ *CUSTOM │
│ BoundaryName │ BC_xplus │ *CUSTOM │
│ BoundaryType │ (/2,0,0,0/) │ *CUSTOM │
│ BoundaryName │ BC_yplus │ *CUSTOM │
│ BoundaryType │ (/2,0,0,0/) │ *CUSTOM │
│ BoundaryName │ BC_xminus │ *CUSTOM │
│ BoundaryType │ (/2,0,0,0/) │ *CUSTOM │
│ BoundaryName │ BC_zplus │ *CUSTOM │
│ BoundaryType │ (/9,0,0,0/) │ *CUSTOM │
├────
├── Generated mesh with 512 cells
├────
│ GENERATE MESH DONE!
├─────────────────────────────────────────────
│ doSortIJK │ False │ DEFAULT │
├────
├── Sorting elements along space-filling curve
├─────────────────────────────────────────────
│ CONNECT MESH...
├─────────────────────────────────────────────
├────
│ Number of sides : 3072
│ Number of inner sides : 2688
│ Number of boundary sides : 384
│ Number of periodic sides : 0
├────
│ CONNECT MESH DONE!
├─────────────────────────────────────────────
│ CHECK JACOBIANS...
├────
│ CheckElemJacobians │ True │ DEFAULT │
│ Processing Elements |█████████████████████████████████| 512/512 [100%] in 0.0s (30004.72/s)
├────
│ Scaled Jacobians
├─────────────────
│<0.0 │ 0.00
│ 0.0-0.1 │ 0.00
│ 0.1-0.2 │ 0.00
│ 0.2-0.3 │ 0.00
│ 0.3-0.4 │ 0.00
│ 0.4-0.5 │ 0.00
│ 0.5-0.6 │ 0.00
│ 0.6-0.7 │ 0.00
│ 0.7-0.8 │ 0.00
│ 0.8-0.9 │ 0.00
│>0.9-1.0 │ ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 512.00
├─────────────────
├─────────────────────────────────────────────
│ OUTPUT MESH...
├────
│ Planar-faced Hexahedra : 512
├────
├── Writing HDF5 mesh to "1-01-cartbox_mesh.h5"
├────
│ OUTPUT MESH DONE!
┢━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
┃ PyHOPE completed in [0.18 sec]
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
Raw data
{
"_id": null,
"home_page": "https://gitlab.iag.uni-stuttgart.de/flexi/codes/pyhope",
"name": "PyHOPE",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "PyHOPE, mesh generator",
"author": "Numerics Research Group (NRG)",
"author_email": "numerics@iag.uni-stuttgart.de",
"download_url": "https://files.pythonhosted.org/packages/ca/5f/4a575bd252529c3fe76408d21f68d092bf7a774710f1f36af1d0ac844e87/pyhope-0.0.2.tar.gz",
"platform": null,
"description": "PyHOPE (Python High-Order Preprocessing Environment) is an open-source Python framework for the generation of three-dimensional unstructured high-order meshes. These meshes are needed by high-order numerical methods like Discontinuous Galerkin, Spectral Element Methods, or pFEM, in order to retain their accuracy if the computational domain includes curved boundaries.\n\nPyHOPE has been developed by the Numerics Research Group (NRG) lead by Prof. Andrea Beck at the Institute of Aerodynamics and Gas Dynamics at the University of Stuttgart, Germany.\n\nPyHOPE is heavily inspired by [HOPR (High Order Preprocessor)](https://github.com/hopr-framework/hopr) and share the same input/output format. For more information and tutorials, please visit the [HOPR documentation](https://hopr.readthedocs.io)\n\nThis is a scientific project. If you use pyHOPE for publications or presentations in science, please support the project by citing our publications given at [numericsresearchgroup.org](https://numericsresearchgroup.org/publications.html).\n\n# Installation\nPyHOPE is built using standard Python packages. It is recommended to use a virtual environment for installation. The following commands create a virtual environment, here called `venv`, and install all required packages.\n```\npython -m venv venv\nsource venv/bin/activate\npython -m pip install pyhope\n```\n\n# Usage\nPyHOPE is invoked from the command line. Run parameters are read from a configuration file. The following output is obtained when running the example configuration file `tutorials/1-01-cartbox/parameter.ini`.\n```\n$ pyhope tutorials/1-01-cartbox/parameter.ini\n\u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\u2503 P y H O P E \u2014 Python High-Order Preprocessing Environment\n\u2503 PyHOPE version 0.0.2\n\u2521\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\u2502 INIT PROGRAM...\n\u2502 nThreads \u2502 4 \u2502 DEFAULT \u2502\n\u2502 INIT PROGRAM DONE!\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\u2502 INIT OUTPUT...\n\u2502 ProjectName \u2502 1-01-cartbox \u2502 *CUSTOM \u2502\n\u2502 OutputFormat \u2502 0 [HDF5] \u2502 *CUSTOM \u2502\n\u2502 DebugVisu \u2502 F \u2502 *CUSTOM \u2502\n\u2502 INIT OUTPUT DONE!\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\u2502 INIT MESH...\n\u2502 Mode \u2502 1 \u2502 *CUSTOM \u2502\n\u2502 BoundaryOrder \u2502 2 \u2502 DEFAULT \u2502\n\u2502 INIT MESH DONE!\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\u2502 GENERATE MESH...\n\u251c\u2500\u2500\u2500\u2500\n\u2502 nZones \u2502 1 \u2502 *CUSTOM \u2502\n\u251c\u2500\u2500 Generating zone 1\n\u2502 Corner \u2502 (/0.,0.,0. ,,1.,0.,0. ,,1.,1... \u2502 *CUSTOM \u2502\n\u2502 nElems \u2502 (/8,8,8/) \u2502 *CUSTOM \u2502\n\u2502 BCIndex \u2502 (/1,2,3,4,5,6/) \u2502 *CUSTOM \u2502\n\u251c\u2500\u2500\u2500\u2500\n\u251c\u2500\u2500 Setting boundary conditions\n\u251c\u2500\u2500\u2500\u2500\n\u2502 BoundaryName \u2502 BC_zminus \u2502 *CUSTOM \u2502\n\u2502 BoundaryType \u2502 (/4,0,0,0/) \u2502 *CUSTOM \u2502\n\u2502 BoundaryName \u2502 BC_yminus \u2502 *CUSTOM \u2502\n\u2502 BoundaryType \u2502 (/2,0,0,0/) \u2502 *CUSTOM \u2502\n\u2502 BoundaryName \u2502 BC_xplus \u2502 *CUSTOM \u2502\n\u2502 BoundaryType \u2502 (/2,0,0,0/) \u2502 *CUSTOM \u2502\n\u2502 BoundaryName \u2502 BC_yplus \u2502 *CUSTOM \u2502\n\u2502 BoundaryType \u2502 (/2,0,0,0/) \u2502 *CUSTOM \u2502\n\u2502 BoundaryName \u2502 BC_xminus \u2502 *CUSTOM \u2502\n\u2502 BoundaryType \u2502 (/2,0,0,0/) \u2502 *CUSTOM \u2502\n\u2502 BoundaryName \u2502 BC_zplus \u2502 *CUSTOM \u2502\n\u2502 BoundaryType \u2502 (/9,0,0,0/) \u2502 *CUSTOM \u2502\n\u251c\u2500\u2500\u2500\u2500\n\u251c\u2500\u2500 Generated mesh with 512 cells\n\u251c\u2500\u2500\u2500\u2500\n\u2502 GENERATE MESH DONE!\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\u2502 doSortIJK \u2502 False \u2502 DEFAULT \u2502\n\u251c\u2500\u2500\u2500\u2500\n\u251c\u2500\u2500 Sorting elements along space-filling curve\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\u2502 CONNECT MESH...\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\u251c\u2500\u2500\u2500\u2500\n\u2502 Number of sides : 3072\n\u2502 Number of inner sides : 2688\n\u2502 Number of boundary sides : 384\n\u2502 Number of periodic sides : 0\n\u251c\u2500\u2500\u2500\u2500\n\u2502 CONNECT MESH DONE!\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\u2502 CHECK JACOBIANS...\n\u251c\u2500\u2500\u2500\u2500\n\u2502 CheckElemJacobians \u2502 True \u2502 DEFAULT \u2502\n\u2502 Processing Elements |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 512/512 [100%] in 0.0s (30004.72/s)\n\u251c\u2500\u2500\u2500\u2500\n\u2502 Scaled Jacobians\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\u2502<0.0 \u2502 0.00\n\u2502 0.0-0.1 \u2502 0.00\n\u2502 0.1-0.2 \u2502 0.00\n\u2502 0.2-0.3 \u2502 0.00\n\u2502 0.3-0.4 \u2502 0.00\n\u2502 0.4-0.5 \u2502 0.00\n\u2502 0.5-0.6 \u2502 0.00\n\u2502 0.6-0.7 \u2502 0.00\n\u2502 0.7-0.8 \u2502 0.00\n\u2502 0.8-0.9 \u2502 0.00\n\u2502>0.9-1.0 \u2502 \u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587\u2587 512.00\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\u2502 OUTPUT MESH...\n\u251c\u2500\u2500\u2500\u2500\n\u2502 Planar-faced Hexahedra : 512\n\u251c\u2500\u2500\u2500\u2500\n\u251c\u2500\u2500 Writing HDF5 mesh to \"1-01-cartbox_mesh.h5\"\n\u251c\u2500\u2500\u2500\u2500\n\u2502 OUTPUT MESH DONE!\n\u2522\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\u2503 PyHOPE completed in [0.18 sec]\n\u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n```\n\n",
"bugtrack_url": null,
"license": "GPL-3.0",
"summary": "Coming soon",
"version": "0.0.2",
"project_urls": {
"Homepage": "https://gitlab.iag.uni-stuttgart.de/flexi/codes/pyhope",
"Repository": "https://gitlab.iag.uni-stuttgart.de/flexi/codes/pyhope"
},
"split_keywords": [
"pyhope",
" mesh generator"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "a7cc87d5ca789a749f94edeffe2a76d55b01b91086deccc3bda3ef0b8da15652",
"md5": "adb90e691bfc58a19a5644f8c93d8355",
"sha256": "d82040865162a6c4275f119522fd57063f332831f28b823b9cd94a70eda27e38"
},
"downloads": -1,
"filename": "pyhope-0.0.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "adb90e691bfc58a19a5644f8c93d8355",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 80589,
"upload_time": "2024-11-12T10:23:17",
"upload_time_iso_8601": "2024-11-12T10:23:17.453494Z",
"url": "https://files.pythonhosted.org/packages/a7/cc/87d5ca789a749f94edeffe2a76d55b01b91086deccc3bda3ef0b8da15652/pyhope-0.0.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ca5f4a575bd252529c3fe76408d21f68d092bf7a774710f1f36af1d0ac844e87",
"md5": "c25510fe818de2455a5abd5e517652c8",
"sha256": "27663a09d08878139eb87c531cfb89f36a06a03b5368ba73a8d07ed2bdd96c93"
},
"downloads": -1,
"filename": "pyhope-0.0.2.tar.gz",
"has_sig": false,
"md5_digest": "c25510fe818de2455a5abd5e517652c8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 54799,
"upload_time": "2024-11-12T10:23:18",
"upload_time_iso_8601": "2024-11-12T10:23:18.538464Z",
"url": "https://files.pythonhosted.org/packages/ca/5f/4a575bd252529c3fe76408d21f68d092bf7a774710f1f36af1d0ac844e87/pyhope-0.0.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-12 10:23:18",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "pyhope"
}