27#ifndef SET_INTERPOLATED_PRESSURE_BOUNDARY_HH
28#define SET_INTERPOLATED_PRESSURE_BOUNDARY_HH
35template<
typename T,
typename DESCRIPTOR,
class MixinDynamics>
39 setInterpolatedPressureBoundary<T,DESCRIPTOR,MixinDynamics>(sLattice, omega, superGeometry.
getMaterialIndicator(material));
43template<
typename T,
typename DESCRIPTOR,
typename MixinDynamics>
46 OstreamManager clout(std::cout,
"setInterpolatedPressureBoundary");
48 bool includeOuterCells =
false;
49 if (indicator->getSuperGeometry().getOverlap() == 1) {
50 includeOuterCells =
true;
51 clout <<
"WARNING: overlap == 1, boundary conditions set on overlap despite unknown neighbor materials" << std::endl;
55 setInterpolatedPressureBoundary<T,DESCRIPTOR,MixinDynamics>(sLattice.
getBlock(iC), omega, indicator->getBlockIndicatorF(iC),
59 addPoints2CommBC(sLattice, std::forward<
decltype(indicator)>(indicator), _overlap);
65template<
typename T,
typename DESCRIPTOR,
typename MixinDynamics>
69 const int margin = includeOuterCells ? 0 : 1;
70 std::vector<int> discreteNormal(4,0);
71 blockGeometryStructure.forSpatialLocations([&](
auto iX,
auto iY,
auto iZ) {
72 if (blockGeometryStructure.getNeighborhoodRadius({iX, iY, iZ}) >= margin
73 && indicator(iX, iY, iZ)) {
75 discreteNormal = blockGeometryStructure.getStatistics().getType(iX, iY, iZ);
77 if (discreteNormal[0] == 0) {
78 if (discreteNormal[1] != 0 && discreteNormal[1] == -1) {
79 dynamics = _block.template getDynamics<
typename MixinDynamics::template exchange_momenta<
86 else if (discreteNormal[1] != 0 && discreteNormal[1] == 1) {
87 dynamics = _block.template getDynamics<
typename MixinDynamics::template exchange_momenta<
94 else if (discreteNormal[2] != 0 && discreteNormal[2] == -1) {
95 dynamics = _block.template getDynamics<
typename MixinDynamics::template exchange_momenta<
102 else if (discreteNormal[2] != 0 && discreteNormal[2] == 1) {
103 dynamics = _block.template getDynamics<
typename MixinDynamics::template exchange_momenta<
110 else if (discreteNormal[3] != 0 && discreteNormal[3] == -1) {
111 dynamics = _block.template getDynamics<
typename MixinDynamics::template exchange_momenta<
118 else if (discreteNormal[3] != 0 && discreteNormal[3] == 1) {
119 dynamics = _block.template getDynamics<
typename MixinDynamics::template exchange_momenta<
127 std::cout <<
"Discrete Normal is not valid for interpolated pressure boundary!" << std::endl;
133 std::cout <<
"Discrete Normal is not valid for interpolated pressure boundary!" << std::endl;
137 dynamics->
getParameters(_block).template set<descriptors::OMEGA>(omega);
Base block indicator functor.
BlockGeometry< T, 3 > & 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.
Smart pointer for managing the various ways of passing functors around.
class for marking output with some text
This class computes the skordos BC on a plane wall in 3D but with a limited number of terms added to ...
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.
Base indicator functor (discrete)
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 setInterpolatedPressureBoundary(SuperLattice< T, DESCRIPTOR > &sLattice, T omega, SuperGeometry< T, 2 > &superGeometry, int material)
Initialising the setInterpolatedPressureBoundary function on the superLattice domain Interpolated Bou...
void addPoints2CommBC(SuperLattice< T, DESCRIPTOR > &sLattice, FunctorPtr< SuperIndicatorF2D< T > > &&indicator, int _overlap)
Adds needed Cells to the Communicator _commBC in SuperLattice.
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.