24#ifndef CORE_PLATFORM_CPU_CELL_H
25#define CORE_PLATFORM_CPU_CELL_H
31template <
typename T,
typename DESCRIPTOR, Platform PLATFORM>
37template <
typename T,
typename DESCRIPTOR, Platform PLATFORM>
41template <
typename T,
typename DESCRIPTOR, Platform PLATFORM>
64 T fEq[DESCRIPTOR::q] { };
66 for (
unsigned iPop=0; iPop < DESCRIPTOR::q; ++iPop) {
67 cell[iPop] = fEq[iPop];
74 for (
unsigned iPop=0; iPop < DESCRIPTOR::q; ++iPop) {
84template <
typename T,
typename DESCRIPTOR, Platform PLATFORM>
110 template <
typename FIELD>
115 template <
typename FIELD>
120 template <
typename FIELD>
125 template <
typename FIELD>
133template <
typename T,
typename DESCRIPTOR, Platform PLATFORM>
140template <
typename T,
typename DESCRIPTOR, Platform PLATFORM>
178 template <
typename FIELD>
183 template <
typename FIELD>
188 template <
typename FIELD>
193 template <
typename FIELD>
199 return {*_lattice,
static_cast<std::size_t
>(_iCell + _lattice->
getNeighborDistance(offset))};
219 T rho, u[DESCRIPTOR::d] { };
224 getDynamics().computeAllMomenta(*
this, rho, u, pi);
240 for (
int iPop=0; iPop < descriptors::q<DESCRIPTOR>(); ++iPop) {
257template <
typename T,
typename DESCRIPTOR, Platform PLATFORM>
287 template <
typename FIELD>
292 template <
typename FIELD>
297 template <
typename FIELD>
302 template <
typename FIELD>
CellDistance getNeighborDistance(LatticeR< D > dir) const
Get 1D neighbor distance.
bool isPadding(LatticeR< D > latticeR) const
Return whether location is valid.
CellID getCellId(LatticeR< D > latticeR) const
Get 1D cell ID.
Implementation of BlockD on a concrete PLATFORM.
Implementation of BlockLattice on a concrete PLATFORM.
Cell concept for concrete block lattices on CPU platforms.
void defineAllMomenta(T rho, T *u, T *pi)
void setLatticeR(LatticeR< DESCRIPTOR::d > latticeR)
auto & getFieldComponent(unsigned iD)
void computeRhoU(T &rho, T *u)
void iniEquilibrium(T rho, T *u)
void setCellId(CellID iCell)
Cell< T, DESCRIPTOR, PLATFORM > neighbor(LatticeR< DESCRIPTOR::d > offset)
void computeAllMomenta(T &rho, T *u, T *pi)
void definePopulations(const T *f)
void defineRhoU(T rho, T *u)
Dynamics< T, DESCRIPTOR, PLATFORM > & getDynamics()
T & operator[](unsigned iPop)
void computeStress(T *pi)
Cell(ConcreteBlockLattice< T, DESCRIPTOR, PLATFORM > &lattice, std::size_t iCell=0)
void setField(const FieldD< T, DESCRIPTOR, FIELD > &v)
void iniRegularized(T rho, T *u, T *pi)
void inverseShiftRhoU(T &rho, T *u)
void setField(const FieldD< T, DESCRIPTOR, FIELD > &v)
auto & getFieldComponent(unsigned iD)
Cell< T, DESCRIPTOR, PLATFORM > neighbor(LatticeR< DESCRIPTOR::d > offset)
void setCellId(CellID iCell)
T & operator[](unsigned iPop)
PlainCell(ConcreteBlockD< T, DESCRIPTOR, PLATFORM > &lattice, std::size_t iCell=0)
Row concept for concrete non-LBM lattices on CPU platforms.
Row(ConcreteBlockD< T, DESCRIPTOR, PLATFORM > &lattice, CellID iCell=0)
auto & getFieldComponent(unsigned iD)
void setField(const FieldD< T, DESCRIPTOR, FIELD > &v)
void setCellId(CellID iCell)
Top level namespace for all of OpenLB.
std::uint32_t CellID
Type for sequential block-local cell indices.
Return value of any collision.
CPU specific field mirroring BlockDynamicsMap.
Virtual interface for dynamically-dispatched dynamics access on CPU targets.
void iniEquilibrium(Cell< T, DESCRIPTOR, PLATFORM > &cell, T rho, T *u)
virtual void defineRho(Cell< T, DESCRIPTOR, PLATFORM > &cell, T &rho)=0
virtual void inverseShiftRhoU(Cell< T, DESCRIPTOR, PLATFORM > &cell, T &rho, T *u)=0
void iniRegularized(Cell< T, DESCRIPTOR, PLATFORM > &cell, T rho, T *u, T *pi)
virtual void defineU(Cell< T, DESCRIPTOR, PLATFORM > &cell, T *u)=0
virtual void computeU(Cell< T, DESCRIPTOR, PLATFORM > &cell, T *u)=0
virtual void computeStress(Cell< T, DESCRIPTOR, PLATFORM > &cell, T &rho, T *u, T *pi)=0
virtual void defineRhoU(Cell< T, DESCRIPTOR, PLATFORM > &cell, T &rho, T *u)=0
virtual void computeRhoU(Cell< T, DESCRIPTOR, PLATFORM > &cell, T &rho, T *u)=0
virtual void defineAllMomenta(Cell< T, DESCRIPTOR, PLATFORM > &cell, T &rho, T *u, T *pi)=0
virtual void computeJ(Cell< T, DESCRIPTOR, PLATFORM > &cell, T *j)=0
virtual void computeAllMomenta(Cell< T, DESCRIPTOR, PLATFORM > &cell, T &rho, T *u, T *pi)=0
virtual T getOmegaOrFallback(T fallback)=0
virtual T computeRho(Cell< T, DESCRIPTOR, PLATFORM > &cell)=0
virtual CellStatistic< T > collide(Cell< T, DESCRIPTOR, PLATFORM > &cell)=0
virtual void computeEquilibrium(Cell< T, DESCRIPTOR, PLATFORM > &cell, T rho, T *u, T *fEq)=0
Base of a descriptor field of scalar TYPE.