65 using namespace boundaryhelper;
67 const int margin = includeOuterCells ? 0 : 1;
68 std::vector<int> discreteNormal(4,0);
69 blockGeometryStructure.forSpatialLocations([&](
auto iX,
auto iY,
auto iZ) {
70 if (blockGeometryStructure.getNeighborhoodRadius({iX, iY, iZ}) >= margin
71 && indicator(iX, iY, iZ)) {
73 discreteNormal = indicator.
getBlockGeometry().getStatistics().getType(iX, iY, iZ);
74 if (discreteNormal[0] == 0) {
76 if (discreteNormal[1] != 0 && discreteNormal[1] == -1) {
77 dynamics = _block.template getDynamics<
ZouHeDynamics<T,DESCRIPTOR, MixinDynamics,
81 else if (discreteNormal[1] != 0 && discreteNormal[1] == 1) {
82 dynamics = _block.template getDynamics<
ZouHeDynamics<T,DESCRIPTOR, MixinDynamics,
86 else if (discreteNormal[2] != 0 && discreteNormal[2] == -1) {
87 dynamics = _block.template getDynamics<
ZouHeDynamics<T,DESCRIPTOR, MixinDynamics,
91 else if (discreteNormal[2] != 0 && discreteNormal[2] == 1) {
92 dynamics = _block.template getDynamics<
ZouHeDynamics<T,DESCRIPTOR, MixinDynamics,
96 else if (discreteNormal[3] != 0 && discreteNormal[3] == -1) {
97 dynamics = _block.template getDynamics<
ZouHeDynamics<T,DESCRIPTOR, MixinDynamics,
101 else if (discreteNormal[3] != 0 && discreteNormal[3] == 1) {
102 dynamics = _block.template getDynamics<
ZouHeDynamics<T,DESCRIPTOR, MixinDynamics,
108 else if (discreteNormal[0] == 1) {
109 dynamics = _block.template getDynamics<
typename MixinDynamics::template exchange_momenta<
114 promisePostProcessorForNormal<T,DESCRIPTOR,OuterVelocityCornerProcessor3D>(
118 else if (discreteNormal[0] == 2) {
119 dynamics = _block.
getDynamics(PlainMixinDynamicsForNormalMomenta<T,DESCRIPTOR,
124 else if (discreteNormal[0] == 3) {
125 dynamics = _block.template getDynamics<
typename MixinDynamics::template exchange_momenta<
130 promisePostProcessorForNormalSpecial<T,DESCRIPTOR,OuterVelocityEdgeProcessor3D>(
134 else if (discreteNormal[0] == 4) {
135 dynamics = _block.
getDynamics(PlainMixinDynamicsForNormalSpecialMomenta<T,DESCRIPTOR,
139 dynamics->
getParameters(_block).template set<descriptors::OMEGA>(omega);
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.
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)
Communication after propagation.