HyTeG (Hybrid Tetrahedral Grids) is a C++ framework for large scale high performance finite element simulations based on (but not limited to) geometric multigrid.
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
TerraNeo is a module of HyTeG that is providing functionality for running mantle convection models from Geodynamics. As this is a specialised application, the module is not build by default. In order to compile the corresponding sources, tests and apps (re)run CMake with the following option
-DHYTEG_TERRANEO_MODULE=yes
Please note that the module depends on Boost library, which is a header-only library.
CMake will search for installed Boost libraries. Should these not be found, you can tell it to download them also by setting
-DHYTEG_DOWNLOAD_BOOST=yes
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
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 ( version >= 3.20 )
-
a C++17 compliant compiler (e.g. gcc, clang, Intel or MSVC)
-
Eigen for some linear algebra operations
Eigen (like waLBerla) is 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.
Optional:
- MPI (e.g. OpenMPI) for parallel runs
- ADIOS2 for efficient parallel I/O (CMake option
-DHYTEG_BUILD_WITH_ADIOS2=yes
) - PETSc for efficient coarse grid solvers (CMake option
-DHYTEG_BUILD_WITH_PETSC=yes
) - Trilinos for efficient coarse grid solvers (CMake option
-DHYTEG_BUILD_WITH_TRILINOS=yes
) - ParMETIS for high-quality load balancing
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
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.
Artwork by Manuel Weimann.