27#ifndef SET_ZOUHE_VELOCITY_BOUNDARY_2D_HH
28#define SET_ZOUHE_VELOCITY_BOUNDARY_2D_HH
34template<
typename T,
typename DESCRIPTOR,
class MixinDynamics>
37 setZouHeVelocityBoundary<T,DESCRIPTOR, MixinDynamics>(sLattice, omega, superGeometry.
getMaterialIndicator(material));
40template<
typename T,
typename DESCRIPTOR,
class MixinDynamics>
45 bool includeOuterCells =
false;
46 if (indicator->getSuperGeometry().getOverlap() == 1) {
47 includeOuterCells =
true;
48 clout <<
"WARNING: overlap == 1, boundary conditions set on overlap despite unknown neighbor materials" << std::endl;
50 for (
int iCloc = 0; iCloc < sLattice.
getLoadBalancer().size(); ++iCloc) {
51 setZouHeVelocityBoundary<T,DESCRIPTOR, MixinDynamics>(sLattice.
getBlock(iCloc), omega,
52 indicator->getBlockIndicatorF(iCloc), includeOuterCells);
55 addPoints2CommBC<T,DESCRIPTOR>(sLattice, std::forward<
decltype(indicator)>(indicator), _overlap);
61template<
typename T,
typename DESCRIPTOR,
class MixinDynamics>
64 using namespace boundaryhelper;
67 const int margin = includeOuterCells ? 0 : 1;
73 int x1 = blockGeometryStructure.
getNx()-1 -margin;
74 int y1 = blockGeometryStructure.getNy()-1 -margin;
75 std::vector<int> discreteNormal(3, 0);
76 for (
int iX = x0; iX <= x1; ++iX) {
77 for (
int iY = y0; iY <= y1; ++iY) {
79 if (indicator(iX, iY)) {
81 if (discreteNormal[0] == 0) {
83 dynamics = block.
getDynamics(DirectionOrientationMixinDynamicsForDirectionOrientationMomenta<T,DESCRIPTOR,
87 else if (discreteNormal[0] == 1) {
89 dynamics = block.template getDynamics<
typename MixinDynamics::template exchange_momenta<
94 promisePostProcessorForNormal<T,DESCRIPTOR,OuterVelocityCornerProcessor2D>(
98 else if (discreteNormal[0] == 2) {
99 dynamics = block.
getDynamics(PlainMixinDynamicsForNormalMomenta<T,DESCRIPTOR,
const BlockGeometryStatistics< T, D > & getStatistics() const
Read only access to the associated block statistic.
Base block indicator functor (discrete)
BlockGeometry< T, 2 > & getBlockGeometry()
Get underlying block geometry structure.
Platform-abstracted block lattice for external access and inter-block interaction.
virtual void addPostProcessor(std::type_index stage, LatticeR< DESCRIPTOR::d > latticeR, PostProcessorPromise< T, DESCRIPTOR > &&promise)=0
Schedule post processor for application to latticeR in stage.
virtual Dynamics< T, DESCRIPTOR > * getDynamics(DynamicsPromise< T, DESCRIPTOR > &&)=0
Return pointer to dynamics yielded by promise.
int getNx() const
Read only access to block width.
Regularized BGK collision followed by any other Dynamics.
Smart pointer for managing the various ways of passing functors around.
class for marking output with some text
Representation of a statistic for a parallel 2D geometry.
std::unique_ptr< SuperIndicatorF< T, D > > getMaterialIndicator(std::vector< int > &&materials)
Returns a material indicator using the given vector of materials.
Super class maintaining block lattices for a cuboid decomposition.
BlockLattice< T, DESCRIPTOR > & getBlock(int locC)
Return BlockLattice with local index locC.
LoadBalancer< T > & getLoadBalancer()
Read and write access to the load balancer.
Implementation of Zou-He boundary condition following the paper from Zou and He.
Top level namespace for all of OpenLB.
void setZouHeVelocityBoundary(SuperLattice< T, DESCRIPTOR > &sLattice, T omega, SuperGeometry< T, 2 > &superGeometry, int material)
Initialising the setZouHeVelocityBoundary function on the superLattice domain.
void setBoundary(BlockLattice< T, DESCRIPTOR > &block, int iX, int iY, Dynamics< T, DESCRIPTOR > *dynamics, PostProcessorGenerator2D< T, DESCRIPTOR > *postProcessor)
Interface for per-cell dynamics.
Communication after propagation.