Skip to content

Latest commit

 

History

History
129 lines (80 loc) · 4.84 KB

README.md

File metadata and controls

129 lines (80 loc) · 4.84 KB

HyTeG

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

Modules

TerraNeo

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

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 ( 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

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.