Hi,
I’m working on thermal convection-diffusion simulation with Boussinesq approximation following the example rayleighBenard3D.
I tried to set BCs like this:
//for velocity, fix velocity = latticeU for inlet, pressure zero-gradient for outlet, bounceback for other walls.
OnLatticeBoundaryCondition3D<T, NSDESCRIPTOR> *nsBC = createInterpBoundaryCondition3D<T, NSDESCRIPTOR>();
nsBC.setVelocityConditionOnBlockBoundaries(nsLattice, inletBox, boundary::dirichlet);
nsBC.addPressureBoundary0P(outletBox, nsLattice, boundary::dirichlet);
setBoundaryVelocity(nsLattice, inletBox, Array<T, 3>(latticeU, 0., 0.));
defineDynamics(nsLattice, roofBox, new plb::BounceBack<T, NSDESCRIPTOR>);
defineDynamics(nsLattice, groundBox, new plb::BounceBack<T, NSDESCRIPTOR>);
defineDynamics(nsLattice, leftsideBox, new plb::BounceBack<T, NSDESCRIPTOR>);
defineDynamics(nsLattice, rightsideBox, new plb::BounceBack<T, NSDESCRIPTOR>);
defineDynamics(nsLattice, frontsideBox, new plb::BounceBack<T, NSDESCRIPTOR>);
defineDynamics(nsLattice, backsideBox, new plb::BounceBack<T, NSDESCRIPTOR>);
setBoundaryVelocity(nsLattice, nsLattice.getBoundingBox(), Array<T, 3>(0, 0, 0));
initializeAtEquilibrium(nsLattice, nsLattice.getBoundingBox(), 1.0, Array<T, 3>(0, 0, 0));//for temperature, temperature zero-gradient for outlet and frontside and backside, fix temperature for inlet and other walls. OnLatticeAdvectionDiffusionBoundaryCondition3D<T, ADDESCRIPTOR> *adBC = createLocalAdvectionDiffusionBoundaryCondition3D<T, ADDESCRIPTOR>(); adBC.setTemperatureConditionOnBlockBoundaries(adLattice, inletBox, boundary::dirichlet ); adBC.setTemperatureConditionOnBlockBoundaries(adLattice, outletBox, boundary::neumann); adBC.setTemperatureConditionOnBlockBoundaries(adLattice, roofBox, boundary::dirichlet); adBC.setTemperatureConditionOnBlockBoundaries(adLattice, groundBox, boundary::dirichlet); adBC.setTemperatureConditionOnBlockBoundaries(adLattice, leftsideBox, boundary::dirichlet); adBC.setTemperatureConditionOnBlockBoundaries(adLattice, rightsideBox, boundary::dirichlet); adBC.setTemperatureConditionOnBlockBoundaries(adLattice, frontsideBox, boundary::neumann); adBC.setTemperatureConditionOnBlockBoundaries(adLattice, backsideBox, boundary::neumann); setBoundaryDensity(adLattice, adLattice.getBoundingBox(), 15.0); initializeAtEquilibrium(adLattice, adLattice.getBoundingBox(), 15.0, Array<T, 3>(0, 0, 0)); setBoundaryDensity(adLattice, leftsideBox, 15.0); setBoundaryDensity(adLattice, rightsideBox, 15.0); setBoundaryDensity(adLattice, inletBox, 15.0); setBoundaryDensity(adLattice, roofBox, 15.0); setBoundaryDensity(adLattice, groundBox, 35.0);
I found that the velocity BCs worked well, but the temperature, the Neumann BCs did not work, it was always 1, which is the default value. It was not calculated based on the adjacent grids. Does the Neumann BC work for the advection lattice? Or should I do some specific setting?
By the way, the lattice was setting like:
#define NSDESCRIPTOR descriptors::ForcedMRTD3Q19Descriptor
#define ADDESCRIPTOR descriptors::AdvectionDiffusionD3Q7DescriptorMultiBlockLattice3D<T, NSDESCRIPTOR> *nsLattice = new MultiBlockLattice3D<T, NSDESCRIPTOR>(nx, ny, nz, new GuoExternalForceSmagorinskyMRTdynamics<T, NSDESCRIPTOR>(parameters.getSolventOmega(), smagoConst));
MultiBlockLattice3D<T, ADDESCRIPTOR> *adLattice = new MultiBlockLattice3D<T, ADDESCRIPTOR>(nx, ny, nz,new AdvectionDiffusionBGKdynamics<T, ADDESCRIPTOR>(parameters.getTemperatureOmega()));
best wishes,
steed188