This patch extends lbmpy's support for advanced streaming patterns. In particular, the Push-Collide-Stream, AA-Pattern and Esoteric Twist are considered.
Boundary Handling: The LBM boundary implementations are overhauled completely. A new framework for defining and generating boundary kernels is introduced, which makes the symbolic definition independent of the streaming pattern. Boundaries can now be defined symbolically using the proxy fields f_out
for accessing populations streaming out of a cell, and f_in
for populations streaming in to a cell. Those are replaced during the code generation process according to the streaming pattern. The class BetweenTimestepsIndexing
used herein can also be used to generate other kernels that run on the PDF-field in-between collision steps.
Periodicity Handling: The build-in periodicity synchronization of pystencil's DataHandling
does not work for advanced LBM streaming. The new class LBMPeriodicityHandling
extends the SerialDataHandling
to handle periodicity correctly.
Utility: The patch introduces a few utility functions for the work with advanced streaming patterns.