About LES+RayleighBernard flow
OpenLB – Open Source Lattice Boltzmann Code › Forums › on OpenLB › General Topics › About LES+RayleighBernard flow
- This topic has 2 replies, 2 voices, and was last updated 5 days, 4 hours ago by steed188.
-
AuthorPosts
-
August 6, 2022 at 7:01 pm #6759steed188Participant
Hi, I’m trying a high Reynolds non-isothermal flow using LES + Boussinesq approximation,
I learned the RayleighBernard example case. I think two parts should be modified compared to the example:
1. the advection lattice descriptor is modified to SmagorinskyAdvectionDiffusionD3Q7Descriptor;
2. the coupling part should be modified” to “SmagorinskyBoussinesqCouplingGenerator3D”.I don’t know whether this is right. So I made the following code. But it does not work. The simulation has been divergent.
//——————————————————————–
typedef ForcedMRTD3Q19Descriptor NSDESCRIPTOR;
typedef SmagorinskyAdvectionDiffusionD3Q7Descriptor ADDESCRIPTOR;//—————————–Define lattices—————————
SuperLattice<T, ADDESCRIPTOR> adLattice(superGeometry); // temperature lattice
SuperLattice<T, NSDESCRIPTOR> nsLattice(superGeometry); // fluid latticeT adOmega = converter.getLatticeThermalRelaxationFrequency();
T nsOmega = converter.getLatticeRelaxationFrequency();//———————-Dynamics and boundary conditions————————-
nsLattice.defineDynamics<SmagorinskyForcedMRTdynamics>(superGeometry, 1);
nsLattice.setParameter<collision::LES::Smagorinsky>(cSmago);
……
adLattice.defineDynamics<AdvectionDiffusionBGKdynamics>(allIndicator);
……
adLattice.setParameter<descriptors::OMEGA>(adOmega);
nsLattice.setParameter<descriptors::OMEGA>(nsOmega);//———————-Coupling parts————————-
std::vector<T> dir{0.0, 0.0, 1.0};
T boussinesqForcePrefactor = 9.81 / converter.getConversionFactorVelocity() * converter.getConversionFactorTime() * converter.getCharPhysTemperatureDifference() * converter.getPhysThermalExpansionCoefficient();T smagoPrefactor = cSmago * cSmago * descriptors::invCs2<T, NSDESCRIPTOR>() * descriptors::invCs2<T, NSDESCRIPTOR>() * 2 * util::sqrt(2);
SmagorinskyBoussinesqCouplingGenerator3D<T, NSDESCRIPTOR> SmagoCoupling(0, converter.getLatticeLength(lx), 0, converter.getLatticeLength(ly), 0, converter.getLatticeLength(lz), boussinesqForcePrefactor, converter.getLatticeTemperature((Thot – Tcold)/2.0), Thot – Tcold, dir, PrSGS, smagoPrefactor);
nsLattice.addLatticeCoupling(SmagoCoupling, adLattice);
……//———————Collide and stream parts————————
adLattice.collideAndStream();
nsLattice.collideAndStream();
nsLattice.executeCoupling();
//———————————————————————–August 8, 2022 at 10:34 am #6760mathiasKeymasterI think smagoPrefactor should be around 0.14. For more details https://publikationen.bibliothek.kit.edu/1000126904 . Best Mathias
August 12, 2022 at 4:19 pm #6771steed188ParticipantOh, thank you mathias.
Do you mean that smagoPrefactor in SmagorinskyBoussinesqCouplingGenerator3D is actually the smagorinsky constant, while not smagoPrefactor = cSmago * cSmago * descriptors::invCs2<T, NSDESCRIPTOR>() * descriptors::invCs2<T, NSDESCRIPTOR>() * 2 * util::sqrt(2)?
By the way, I’m also confused about two parameters deltaTemp and T0 in SmagorinskyBoussinesqCouplingGenerator3D. Should deltaTemp always be 1, meaning I have to normalize the T_high and T_low to 1 and 0? Can I just use the real temperature (like deltaTemp=20℃)? and what is T0? The RayleighBernard example gives the low temperature. Should it always be so? Or is it just a reference temperature that I can set, such as (T_high – T_low)/2?
-
AuthorPosts
- You must be logged in to reply to this topic.