HyTeG (Hybrid Tetrahedral Grids) is a C++ framework for large scale high performance finite element simulations based on (but not limited to) geometric multigrid.
Build instructions
To build HyTeG, clone via:
$ git clone --recurse-submodules https://i10git.cs.fau.de/hyteg/hyteg.git
The option --recurse-submodules
is required and will automatically initialize and clone
waLBerla as a submodule.
Create a build directory and invoke cmake:
$ mkdir hyteg-build
$ cd hyteg-build
$ cmake ../hyteg
CMake will then produce Makefiles for the included tests and applications. To build and run an application (e.g. a multigrid benchmark setting) invoke:
hyteg-build $ cd apps/MultigridStudies
hyteg-build/apps/MultigridStudies $ make
hyteg-build/apps/MultigridStudies $ ./MultigridStudies
... or for a parallel run:
hyteg-build/apps/MultigridStudies $ mpirun -np 4 ./MultigridStudies
Documentation
The Doxygen documentation provides some basic tutorials for example applications.
If you are interested in more background information you may either have a look at
-
our article The HyTeG finite-element software framework for scalable multigrid solvers - please cite this if you use the software
@article{doi:10.1080/17445760.2018.1506453, author = {Nils Kohl and Dominik Thönnes and Daniel Drzisga and Dominik Bartuschat and Ulrich Rüde}, title = {The {HyTeG} finite-element software framework for scalable multigrid solvers}, journal = {International Journal of Parallel, Emergent and Distributed Systems}, volume = {34}, number = {5}, pages = {477-496}, year = {2019}, publisher = {Taylor & Francis}, doi = {10.1080/17445760.2018.1506453} }
-
the TerraNeo web page providing information and publications regarding the related research project
-
our article TerraNeo—Mantle Convection Beyond a Trillion Degrees of Freedom summarizing recent achievements during the TerraNeo project
Dependencies
The framework is built on top of the core of the waLBerla framework. Its repository is included via git submodule. So just clone with
$ git clone --recurse-submodules https://i10git.cs.fau.de/hyteg/hyteg.git
as written above, to set up waLBerla automatically.
Required:
- CMake
- a C++17 compliant compiler (e.g. gcc, clang, Intel or MSVC)
Optional:
-
Eigen for some linear algebra operations
Eigen is, (like waLBerla) automatically cloned as a git submodule.
CMake will automatically find the Eigen submodule, there is no need to specify a path or to download Eigen at all.
-
MPI (e.g. OpenMPI) for parallel runs
-
ParMETIS for high-quality load balancing
Notes
Code Style
To keep our code consistently formatted, we use ClangFormat.
There is a .clang-format
file located in the root directory where all the formatting rules are documented.
The rules can be automatically applied by using:
clang-format -i $FileName
CCache
Due to the large amount of generated files it is advisable to activate ccache. To do so use the CMake setting
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
See also this StackOverflow answer.
Acknowledgements
Artwork by Manuel Weimann.