27#ifndef SET_ROBIN_BOUNDARY_3D_HH
28#define SET_ROBIN_BOUNDARY_3D_HH
38template<
typename T,
typename DESCRIPTOR,
typename MixinDynamics>
41 setRobinBoundary<T,DESCRIPTOR,MixinDynamics>(sLattice, omega, superGeometry.
getMaterialIndicator(material));
45template<
typename T,
typename DESCRIPTOR,
typename MixinDynamics>
49 bool includeOuterCells =
false;
50 bool useOtherStrategy =
false;
51 if (indicator->getSuperGeometry().getOverlap() == 1) {
52 includeOuterCells =
true;
53 clout <<
"WARNING: overlap == 1, boundary conditions set on overlap despite unknown neighbor materials" << std::endl;
55 for (
int iCloc = 0; iCloc < sLattice.
getLoadBalancer().size(); iCloc++) {
56 setRobinBoundary<T,DESCRIPTOR,MixinDynamics>(sLattice.
getBlock(iCloc), indicator->getBlockIndicatorF(iCloc), omega, includeOuterCells, useOtherStrategy);
62template<
typename T,
typename DESCRIPTOR,
typename MixinDynamics>
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)) {
72 discreteNormal = blockGeometryStructure.getStatistics().getType(iX, iY, iZ);
75 if(discreteNormal[0] == 0){
76 if(!useOtherStrategy){
79 promisePostProcessorForNormal<T, DESCRIPTOR, robinBoundaryLatticePostProcessor3D>(
80 Vector <int,3> (discreteNormal.data()+1)
86 promisePostProcessorForNormal<T, DESCRIPTOR, robinBoundaryLatticePostProcessor3Dother>(
87 Vector <int,3> (discreteNormal.data()+1)
91 dynamics = _block.template getDynamics<AdvectionDiffusionBGKdynamics<T,DESCRIPTOR>>();
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
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 setRobinBoundary(SuperLattice< T, DESCRIPTOR > &sLattice, T omega, SuperGeometry< T, 3 > &superGeometry, int material)
Initialising the setRobinBoundary function on the superLattice domain This is an AdvectionDiffusionBo...
void setBoundary(BlockLattice< T, DESCRIPTOR > &block, int iX, int iY, Dynamics< T, DESCRIPTOR > *dynamics, PostProcessorGenerator2D< T, DESCRIPTOR > *postProcessor)
Interface for per-cell dynamics.
Communication after propagation.