26#ifndef SET_RTLBMDIFFUSECONST_TEMPERATURE_BOUNDARY_3D_HH
27#define SET_RTLBMDIFFUSECONST_TEMPERATURE_BOUNDARY_3D_HH
34template<
typename T,
typename DESCRIPTOR>
37 setRtlbmDiffuseConstTemperatureBoundary<T,DESCRIPTOR>(sLattice, omega, superGeometry.
getMaterialIndicator(material));
41template<
typename T,
typename DESCRIPTOR>
45 OstreamManager clout(std::cout,
"setRtlbmDiffuseConstTemperatureBoundary");
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 setRtlbmDiffuseConstTemperatureBoundary<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) {
107 else if (discreteNormal[0] == 1) {
108 dynamics = _block.
getDynamics(NormalDynamicsForPlainMomenta<T,DESCRIPTOR,
113 else if (discreteNormal[0] == 3) {
114 dynamics = _block.
getDynamics(NormalSpecialDynamicsForPlainMomenta<T,DESCRIPTOR,
119 dynamics->
getParameters(_block).template set<descriptors::OMEGA>(omega);
120 setBoundary(_block, iX,iY,iZ, dynamics, postProcessor);
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 directions on flat walls.
Defines incoming directions on corner boundaries.
Defines incoming directions on edge boundaries.
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 setRtlbmDiffuseConstTemperatureBoundary(SuperLattice< T, DESCRIPTOR > &sLattice, T omega, SuperGeometry< T, 3 > &superGeometry, int material)
Initialising the setRtlbmDiffuseConstTemperatureBoundary 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.