Advanced Streaming Extensions
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, andf_in
for populations streaming in to a cell. Those are replaced during the code generation process according to the streaming pattern. The classBetweenTimestepsIndexing
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 classLBMPeriodicityHandling
extends theSerialDataHandling
to handle periodicity correctly. -
Utility: The patch introduces a few utility functions for the work with advanced streaming patterns.