27#ifndef SET_LOCAL_PRESSURE_BOUNDARY_2D_HH
28#define SET_LOCAL_PRESSURE_BOUNDARY_2D_HH
35template<
typename T,
typename DESCRIPTOR,
class MixinDynamics>
38 setLocalPressureBoundary<T,DESCRIPTOR, MixinDynamics>(sLattice, omega, superGeometry.
getMaterialIndicator(material));
42template<
typename T,
typename DESCRIPTOR,
class MixinDynamics>
46 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 setLocalPressureBoundary<T,DESCRIPTOR, MixinDynamics>(sLattice.
getBlock(iCloc),omega,
54 indicator->getBlockIndicatorF(iCloc), includeOuterCells);
57 addPoints2CommBC(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)) {
73 discreteNormal = indicator.
getBlockGeometry().getStatistics().getType(iX, iY);
74 if (discreteNormal[0] == 0) {
75 dynamics = block.
getDynamics(PlainMixinDynamicsForDirectionOrientationMomenta<T,DESCRIPTOR,
79 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 addPoints2CommBC(SuperLattice< T, DESCRIPTOR > &sLattice, FunctorPtr< SuperIndicatorF2D< T > > &&indicator, int _overlap)
Adds needed Cells to the Communicator _commBC in SuperLattice.
void setLocalPressureBoundary(SuperLattice< T, DESCRIPTOR > &sLattice, T omega, SuperGeometry< T, 2 > &superGeometry, int material)
Initialising the setLocalPressureBoundary function on the superLattice domain Local Boundaries use th...
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.