26#ifndef SET_FD_BOUNDARY_DEV03_HH
27#define SET_FD_BOUNDARY_DEV03_HH
34template<
typename T,
typename DESCRIPTOR,
typename MODEL,
typename SCHEME_BOUND,
typename PARAMETERS,
typename FIELD,
typename SOURCE>
38 setFdBoundary3D<T,DESCRIPTOR,MODEL,SCHEME_BOUND,PARAMETERS,FIELD,SOURCE>(sLattice, superGeometry.
getMaterialIndicator(material));
42template<
typename T,
typename DESCRIPTOR,
typename MODEL,
typename SCHEME_BOUND,
typename PARAMETERS,
typename FIELD,
typename SOURCE>
47 int _overlap = indicator->getSuperGeometry().getOverlap();
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;
54 setFdBoundary3D<T,DESCRIPTOR,MODEL,SCHEME_BOUND,PARAMETERS,FIELD,SOURCE>(sLattice.
getBlock(iC), indicator->getBlockIndicatorF(iC),includeOuterCells);
57 addPoints2CommBC(sLattice,std::forward<
decltype(indicator)>(indicator), _overlap);
64template<
typename T,
typename DESCRIPTOR,
typename MODEL,
typename SCHEME_BOUND,
typename PARAMETERS,
typename FIELD,
typename SOURCE>
69 const int margin = includeOuterCells ? 0 : 1;
71 if (blockGeometryStructure.getNeighborhoodRadius({iX, iY, iZ}) >= margin
72 && indicator(iX, iY, iZ)) {
73 std::vector<int> discreteNormal(4,0);
75 block.
get(iX, iY, iZ).template setField<descriptors::NORMAL_X>(-discreteNormal[1]);
76 block.
get(iX, iY, iZ).template setField<descriptors::NORMAL_Y>(-discreteNormal[2]);
77 block.
get(iX, iY, iZ).template setField<descriptors::NORMAL_Z>(-discreteNormal[3]);
const BlockGeometryStatistics< T, D > & getStatistics() const
Read only access to the associated block statistic.
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.
Cell< T, DESCRIPTOR > get(CellID iCell)
Get Cell interface for index iCell.
void forSpatialLocations(F f) const
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.
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 addPoints2CommBC(SuperLattice< T, DESCRIPTOR > &sLattice, FunctorPtr< SuperIndicatorF2D< T > > &&indicator, int _overlap)
Adds needed Cells to the Communicator _commBC in SuperLattice.
void setFdBoundary3D(SuperLattice< T, DESCRIPTOR > &sLattice, SuperGeometry< T, 3 > &superGeometry, int material)
Initialising the setFdBoundary3D function on the superLattice domain.
Communication after propagation.