26#ifndef SET_SLIP_BOUNDARY_WITH_DYNAMICS_2D_HH
27#define SET_SLIP_BOUNDARY_WITH_DYNAMICS_2D_HH
33template<
typename T,
typename DESCRIPTOR,
class MixinDynamics>
36 setSlipBoundaryWithDynamics<T,DESCRIPTOR,MixinDynamics>(sLattice, omega, superGeometry.
getMaterialIndicator(material));
40template<
typename T,
typename DESCRIPTOR,
class MixinDynamics>
43 bool includeOuterCells =
false;
44 int _overlap = indicator->getSuperGeometry().getOverlap();
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 setSlipBoundaryWithDynamics<T,DESCRIPTOR,MixinDynamics>(sLattice.
getBlock(iCloc), omega,
52 indicator->getBlockIndicatorF(iCloc), includeOuterCells);
56 addPoints2CommBC<T,DESCRIPTOR>(sLattice, std::forward<
decltype(indicator)>(indicator), _overlap);
60template<
typename T,
typename DESCRIPTOR,
class MixinDynamics>
63 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)) {
73 discreteNormal = indicator.
getBlockGeometry().getStatistics().getType(iX, iY);
74 if (discreteNormal[0] == 0) {
76 dynamics = block.
getDynamics(MixinDynamicsExchangeDirectionOrientationMomenta<T,DESCRIPTOR,
81 else if (discreteNormal[0] == 1) {
83 dynamics = block.template getDynamics<
typename MixinDynamics::template exchange_momenta<
88 else if (discreteNormal[0] == 2) {
90 dynamics = block.
getDynamics(PlainMixinDynamicsForNormalMomenta<T,DESCRIPTOR,
93 postProcessor =
nullptr;
95 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 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 setSlipBoundaryWithDynamics(SuperLattice< T, DESCRIPTOR > &sLattice, T omega, SuperGeometry< T, 2 > &superGeometry, int material)
Initialising the setSlipBoundaryWithDynamics function on the superLattice domain Interpolated Boundar...
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.