26#ifndef SET_RTLBMDIFFUSE_TEMPERATURE_BOUNDARY_3D_HH
27#define SET_RTLBMDIFFUSE_TEMPERATURE_BOUNDARY_3D_HH
34template<
typename T,
typename DESCRIPTOR>
37 setRtlbmDiffuseTemperatureBoundary<T,DESCRIPTOR>(sLattice, omega, superGeometry.
getMaterialIndicator(material));
41template<
typename T,
typename DESCRIPTOR>
45 OstreamManager clout(std::cout,
"setRtlbmDiffuseTemperatureBoundary");
46 bool includeOuterCells =
false;
47 if (indicator->getSuperGeometry().getOverlap() == 1) {
48 includeOuterCells =
true;
49 clout <<
"WARNING: overlap == 1, boundary conditions set on overlap despite unknown neighbor materials" << std::endl;
51 for (
int iCloc = 0; iCloc < sLattice.
getLoadBalancer().size(); iCloc++) {
52 setRtlbmDiffuseTemperatureBoundary<T,DESCRIPTOR>(sLattice.
getBlock(iCloc),
53 indicator->getBlockIndicatorF(iCloc), omega, includeOuterCells);
56 addPoints2CommBC(sLattice, std::forward<
decltype(indicator)>(indicator), _overlap);
61template<
typename T,
typename DESCRIPTOR>
63 bool includeOuterCells)
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)) {
74 discreteNormal = blockGeometryStructure.getStatistics().getType(iX, iY, iZ);
75 if (discreteNormal[0] == 0) {
76 if (discreteNormal[1] != 0 && discreteNormal[1] == -1) {
81 else if (discreteNormal[1] != 0 && discreteNormal[1] == 1) {
86 else if (discreteNormal[2] != 0 && discreteNormal[2] == -1) {
91 else if (discreteNormal[2] != 0 && discreteNormal[2] == 1) {
96 else if (discreteNormal[3] != 0 && discreteNormal[3] == -1) {
101 else if (discreteNormal[3] != 0 && discreteNormal[3] == 1) {
106 setBoundary(_block, iX,iY,iZ, dynamics, postProcessor);
108 else if (discreteNormal[0] == 1) {
109 dynamics = _block.
getDynamics(NormalDynamicsForPlainMomenta<T,DESCRIPTOR,
113 setBoundary(_block, iX,iY,iZ, dynamics, postProcessor);
115 else if (discreteNormal[0] == 3) {
116 dynamics = _block.
getDynamics(NormalSpecialDynamicsForPlainMomenta<T,DESCRIPTOR,
120 setBoundary(_block, iX,iY,iZ, dynamics, postProcessor);
122 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 Dynamics< T, DESCRIPTOR > * getDynamics(DynamicsPromise< T, DESCRIPTOR > &&)=0
Return pointer to dynamics yielded by promise.
Smart pointer for managing the various ways of passing functors around.
class for marking output with some text
Defines incoming (axis parallel) directions on flat walls.
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.
Tuple< FixedDensity, FixedVelocityMomentumGeneric, ZeroStress, DefineSeparately > EquilibriumBoundaryTuple
Velocity and density are stored in external fields.
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 setRtlbmDiffuseTemperatureBoundary(SuperLattice< T, DESCRIPTOR > &sLattice, T omega, SuperGeometry< T, 3 > &superGeometry, int material)
Initialising the setRtlbmDiffuseTemperatureBoundary 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.