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_outfor accessing populations streaming out of a cell, and
f_infor populations streaming in to a cell. Those are replaced during the code generation process according to the streaming pattern. The class
BetweenTimestepsIndexingused 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
DataHandlingdoes not work for advanced LBM streaming. The new class
SerialDataHandlingto handle periodicity correctly.
Utility: The patch introduces a few utility functions for the work with advanced streaming patterns.