Thomas Zeiser (RRZE); motivated by joint work of the International Lattice Boltzmann Development Consortium (ILBDC).
OpenACC directives added by Mathew Colgrove from SPEC OMP2012 360.ilbdc
The benchmark kernel is geared to the collision-propagation routine of an advanced 3-D lattice Boltzmann flow solver using a two-relaxation-time (TRT-type) collision operator for the D3Q19 model. The benchmark kernel is not a complete flow solver.
Lattice Boltzmann flow solvers use a velocity-discrete Boltzmann equation and discretize space and time in such a way that an explicit (finite difference) numerical scheme with Euler forward time-stepping is obtained. The resulting fluid mechanical results satisfy the incompressible athermal Navier-Stokes equations with second order accuracy.
The specific data structures of the benchmark kernel use a list-based "sparse" data representation resulting in indirect data access patterns. However, especially for flow in porous media or blood flow simulations, such data structures are highly beneficial to efficiently recover the complex geometries.
All input data is provided by the file "input.par" which must be located in the current working directory at execution time.
GX, GY, GZ : domain size; a domain of 100 x 100 x 100 will result
in approx. 400 MB memory footprint
GEONME : activate exactly one of the sample lines; i.e. one must start without ! at the beginning of the line; see Makefile or sample for possible values
MAX_RUNTIME : maximum runtime in seconds
MAX_ITERAT : maximum number of iterations
The code stops when either MAX_RUNTIME or MAX_ITERAT is reached. This is disabled for the benchmark. The test data set is a 100x100x100 grid, the train data set is a 150x150x150 grid and the reference data set is a 500x300x300 grid.
The output line "true FluidMLUPS" gives the performance; the higher the better. This has been disabled for the SPEC benchmark. Several values are output and checked for correctness.