Generated LBM Backend in waLBerla
In order to better support different targets and to better support the code generation pipeline a generated LBM backend in waLBerla should be introduced:
Data structure:
- the basic data structure (field) should be compatible with different targets and the algorithmic logic should be separated from the data structure.
- the field should know about the used target by introducing storage specification as a template.
- the communication logic should be known by the storage specification. Thus when no communication is needed a fixed non generated storage specification can be used.
Storage specification:
- holds the LBM logic (stencils, ....)
- knows the timestep
- holds the communication logic
Algorithmic logic:
- implemented in the Sweep, knows the collision, and the macroscopic getters and setters
- parameter scaling
Boundary handling:
- a boundary handling class should create the needed Index vectors etc.
- it should be possible to work with the Flag field directly