Hi,
Is it possible to modify “boussinesqThermal2d” example in Palabos, to make one of the walls (top wall) adiabatic?
If it is, can someone send/post me that example code.
Best regards,
Hi,
Is it possible to modify “boussinesqThermal2d” example in Palabos, to make one of the walls (top wall) adiabatic?
If it is, can someone send/post me that example code.
Best regards,
Hi,
Adiabatic walls are implemented in Palabos, according to the following idea: the wall implements a boundary condition for the temperature, but the value of the temperature to be imposed on the wall is copied from the nearest neighbor at each iteration. The effect of this is to have a zero temperature gradient along the wall normal, which means, an adiabatic wall.
Use it with care, though, because this boundary condition has not yet been tested very thoroughly. In particular, it doesn’t seem to be very stable, numerically, at high Rayleigh number. If you use it, it would actually be great if you could share your observations with us.
Here’s how to add an adiabatic wall in a 3D code:
// The lattice of the navier-stokes solver
MultiBlockLattice3D<T, NSDESCRIPTOR> nsLattice (
nx,ny,nz,new NSDYNAMICS<T, NSDESCRIPTOR>(nsOmega) );
// The lattice of the temperature solver
MultiBlockLattice3D<T, ADESCRIPTOR> adLattice (
nx,ny,nz,new ADYNAMICS<T, ADESCRIPTOR>(adOmega) );
// .. at this place, create the coupling between temperature and fluid, as usual.
OnLatticeBoundaryCondition3D<T,NSDESCRIPTOR>*
nsBoundaryCondition = createLocalBoundaryCondition3D<T,NSDESCRIPTOR>();
OnLatticeAdvectionDiffusionBoundaryCondition3D<T,ADESCRIPTOR>*
adBoundaryCondition = createLocalAdvectionDiffusionBoundaryCondition3D<T,ADESCRIPTOR>();
// All outer walls of the rectangular domain shall implement a velocity condition for
// the fluid, and a fixed temperature condition for the temperature.
nsBoundaryCondition -> setVelocityConditionOnBlockBoundaries(nsLattice);
adBoundaryCondition -> setTemperatureConditionOnBlockBoundaries(adLattice);
// On one selected plane (the x-z plane at y=0), turn the temperature condition
// into an adiabatic condition.
Box3D adiabaticWall(0, nx-1, 0, 0, 1, nz-2);
xint processorLevelBC = 1;
integrateProcessingFunctional (
new FlatAdiabaticBoundaryFunctional3D<T,ADESCRIPTOR,1,-1>,
adiabaticWall, adLattice, processorLevelBC );
A few comments:
Currently, this method is only implemented for flat walls, and not for angles and corners (it wouldn’t be difficult to extend, though). This means that if you have two walls with a common angle, where one wall has a temperature condition and the other wall an adiabatic condition, then you should use the temperature condition on the nodes which are sitting right in the angle, not the adiabatic condition.
The processorLevelBC thing is a bit technical. This is a constant which you should always chose to be 1. What it means is that the data processor which copies the temperature value from the nearest neighbor to the boundary condition must be executed after MPI communication, because otherwise the temperature value which is being read might be undefined.
In the <T,ADESCRIPTOR,1,-1> template parameters, the i[/i] part means: “the wall is oriented in negative (-1) y-direction (1)”. It is important not to make a mistake here, because Palabos needs this information in order to find the location of the neighbor node from which the temperature is copied. The i[/i] notation is based on the same philosophy as the 1N notation, as it is used to instantiate manually velocity boundary conditions, and as it is documented in this section of the user’s guide: http://www.lbmethod.org/palabos/documentation.userguide/boundary-conditions.html#interior-and-exterior-boundaries