template<typename LatticeModel_T, typename FlagField_T>
class walberla::pe_coupling::CurvedQuadratic< LatticeModel_T, FlagField_T >
Quadratic boundary handling for moving obstacles.
This boundary condition implements the MR1 scheme from Ginzburg et al. - "Two-Relaxation-Time Lattice Boltzmann Scheme: About Parametrization, Velocity, Pressure and Mixed Boundary Conditions" (2008) References to equations and tables in the code documentation are contained in this paper.
It uses two additional cells in inverse direction of the boundary handling for a quadratic interpolation. It additionally needs the pre-collision values of the PDFs for the error correction which are to be provided via the field pdfFieldPreCollision. This requires the LBM sweep to be explicitly split into stream and collide to have the following form: copy PDFs to extra field - collision - boundary handling - stream
In case not enough cells are available, two fall back solutions are available: If only one additional cell is available, the scheme is replaced by the MGYLI scheme. If no additional cell is available, the scheme is replaced by the MGYLI scheme in one-point form.
Note: The implementation could be changed if two ghost layers were used which is however omitted for efficiency reasons.
|
| CurvedQuadratic (const BoundaryUID &boundaryUID, const FlagUID &uid, PDFField_T *const pdfField, const FlagField_T *const flagField, BodyField_T *const bodyField, const flag_t domain, const StructuredBlockStorage &blockStorage, const IBlock &block, PDFField_T *const pdfFieldPreCollision) |
|
void | pushFlags (std::vector< FlagUID > &uids) const |
|
void | beforeBoundaryTreatment () const |
|
void | afterBoundaryTreatment () const |
|
template<typename Buffer_T > |
void | packCell (Buffer_T &, const cell_idx_t, const cell_idx_t, const cell_idx_t) const |
|
template<typename Buffer_T > |
void | registerCell (Buffer_T &, const flag_t, const cell_idx_t, const cell_idx_t, const cell_idx_t) |
|
void | registerCell (const flag_t, const cell_idx_t, const cell_idx_t, const cell_idx_t, const BoundaryConfiguration &) |
|
void | registerCells (const flag_t, const CellInterval &, const BoundaryConfiguration &) |
|
template<typename CellIterator > |
void | registerCells (const flag_t, const CellIterator &, const CellIterator &, const BoundaryConfiguration &) |
|
void | unregisterCell (const flag_t, const cell_idx_t, const cell_idx_t, const cell_idx_t) const |
|
void | treatDirection (const cell_idx_t x, const cell_idx_t y, const cell_idx_t z, const stencil::Direction dir, const cell_idx_t nx, const cell_idx_t ny, const cell_idx_t nz, const flag_t mask) |
|
| Boundary (const BoundaryUID &boundaryUID) |
|
void | setMask (const flag_t mask) |
|
flag_t | getMask () const |
|
const BoundaryUID & | getUID () const |
|