Age | Commit message (Collapse) | Author |
|
An interesting extension of the AA pattern. The main advantage of this is
that updating pointers in a control structure is much more elegant than
duplicating all function implementations as is required by the normal AA
pattern. For more details see [1].
Only works for the SOA layout.
On a pure memory access level this pattern is equivalent to the AA pattern.
The difference is how the memory locations are calculated (by pointer swap
& shift or by different indexing functions for odd and even time steps).
[1]: "An auto-vectorization friendly parallel lattice Boltzmann streaming
scheme for direct addressing" by Mohrhard et al. (2019)
|
|
Note that special care has to be taken to provide ghost cells around
active cells so the algorithm has somewhere to stream to and from.
This is also the case for the AB pattern but there they only have to
be equilibrilized once instead of after every other time step.
Even when such an equilibrilization is performed there is still a
potential bug as inbound populations at the outer boundary are never
streamed to (this is not a problem for AB using pull-only streaming).
A vectorizable solution may require direction-specific ghost cell
equilibrization.
|
|
|
|
|
|
This paves the way for dropping in other LBM collision models.
As a side benefit the default momenta calulcation is now fully inlined where possible.
|
|
|
|
|
|
|
|
Selection of the desired templates is possible via a new `functions` parameter.
|
|
|
|
|
|
Still thinking how various collision models (BGK, MRT and so on) may be
nicely abstracted in this setting.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|