  Programming current supercomputers efficiently is a challenging task.
Multiple levels of parallelism on the core, on the compute node, and between
nodes need to be exploited to make full use of the system. Heterogeneous
hardware architectures with accelerators further complicate the development
process. waLBerla addresses these challenges by providing the user with highly
efficient building blocks for developing simulations on block-structured grids.
The block-structured domain partitioning is flexible enough to handle complex
geometries, while the structured grid within each block allows for highly
efficient implementations of stencil-based algorithms. We present several
example applications realized with waLBerla, ranging from lattice Boltzmann
methods to rigid particle simulations. Most importantly, these methods can be
coupled together, enabling multiphysics simulations. The framework uses
meta-programming techniques to generate highly efficient code for CPUs and GPUs
from a symbolic method formulation. To ensure software quality and performance
portability, a continuous integration toolchain automatically runs an extensive
test suite encompassing multiple compilers, hardware architectures, and
software configurations.
