27#ifndef SET_LOCAL_VELOCITY_BOUNDARY_2D_HH
28#define SET_LOCAL_VELOCITY_BOUNDARY_2D_HH
35template<
typename T,
typename DESCRIPTOR,
class MixinDynamics>
38 setLocalVelocityBoundary<T,DESCRIPTOR, MixinDynamics>(sLattice, omega, superGeometry.
getMaterialIndicator(material));
42template<
typename T,
typename DESCRIPTOR,
class MixinDynamics>
47 bool includeOuterCells =
false;
48 if (indicator->getSuperGeometry().getOverlap() == 1) {
49 includeOuterCells =
true;
50 clout <<
"WARNING: overlap == 1, boundary conditions set on overlap despite unknown neighbor materials" << std::endl;
52 for (
int iCloc = 0; iCloc < sLattice.
getLoadBalancer().size(); ++iCloc) {
53 setLocalVelocityBoundary<T,DESCRIPTOR, MixinDynamics>(sLattice.
getBlock(iCloc), omega,
54 indicator->getBlockIndicatorF(iCloc), includeOuterCells);
57 addPoints2CommBC<T,DESCRIPTOR>(sLattice, std::forward<
decltype(indicator)>(indicator), _overlap);
61template<
typename T,
typename DESCRIPTOR,
class MixinDynamics>
64 using namespace boundaryhelper;
66 const int margin = includeOuterCells ? 0 : 1;
67 std::vector<int> discreteNormal(3, 0);
68 blockGeometryStructure.forSpatialLocations([&](
auto iX,
auto iY) {
69 if (blockGeometryStructure.getNeighborhoodRadius({iX, iY}) >= margin
70 && indicator(iX, iY)) {
72 discreteNormal = indicator.
getBlockGeometry().getStatistics().getType(iX, iY);
73 if (discreteNormal[0] == 0) {
74 dynamics = block.
getDynamics(PlainMixinDynamicsForDirectionOrientationMomenta<T,DESCRIPTOR,
78 else if (discreteNormal[0] == 1) {
79 dynamics = block.template getDynamics<
typename MixinDynamics::template exchange_momenta<
84 promisePostProcessorForNormal<T,DESCRIPTOR,OuterVelocityCornerProcessor2D>(
88 else if (discreteNormal[0] == 2) {
89 dynamics = block.
getDynamics(PlainMixinDynamicsForNormalMomenta<T,DESCRIPTOR,
94 dynamics->
getParameters(block).template set<descriptors::OMEGA>(omega);
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.
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.
Top level namespace for all of OpenLB.
void setLocalVelocityBoundary(SuperLattice< T, DESCRIPTOR > &sLattice, T omega, SuperGeometry< T, 2 > &superGeometry, int material)
Initialising the setLocalVelocityBoundary 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.
virtual AbstractParameters< T, DESCRIPTOR > & getParameters(BlockLattice< T, DESCRIPTOR > &block)=0
Parameters access for legacy post processors.
Communication after propagation.