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 the HyTeG and the waLBerla source code:
$ git clone --recurse-submodules https://i10git.cs.fau.de/hyteg/hyteg.git
--recurse-submodules
will automatically initialize and clone walberla as a submodule.
$ 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
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
The framework is built on top of the core of the waLBerla framework and therefore requires the its source code to be cloned.
Required:
- the waLBerla source code (waLBerla GitLab repository)
- Boost
- CMake
- a C++14 compliant compiler (e.g. gcc, clang, Intel or MSVC)
Optional:
-
Eigen for some linear algebra operations
Eigen is automatically cloned as a git submodule. Therefore to activate Eigen, simply set the cmake variable
HYTEG_BUILD_WITH_EIGEN
toON
, e.g. via:$ cmake ../hyteg -DHYTEG_BUILD_WITH_EIGEN=ON
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
-
PETSc for efficient coarse grid solvers
-
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.