thermal fluid and conjugate heat transfer
OpenLB – Open Source Lattice Boltzmann Code › Forums › on OpenLB › General Topics › thermal fluid and conjugate heat transfer
- This topic has 9 replies, 2 voices, and was last updated 7 years, 7 months ago by happyday.
-
AuthorPosts
-
February 17, 2017 at 10:16 am #1894happydayMember
Hi,i am working on heat transfer in a walking beam type reheat furnace by LBM.I have some questions about openlb which i can not find answer in user guide and examples.
a)How can i set thermal fluid?Can i do it by setting a heat source ?
b)If i want to write some codes for conjugate heat transfer (solid and fluid),where should i insert them ?write a new dynamic ?February 17, 2017 at 1:03 pm #2537mgaedtkeKeymasterHello happyday,
Have a look for the thermal2d or thermal3d example cases. You can see the thermal dynamics coupled via the boussinesq approximation already set up in order to simulate the raighley benard convection.
This model is not capable of simulating internal heat sources so far, but by applying certain boundary conditions you can simulate heat input to the system.
I did some test with conjugated heat transfer by simply defining another material number with another thermal dynamics using a different diffusion coefficient than the fluid. If you are interested in this setup I can send you some more details.
Best, Max
February 20, 2017 at 12:19 am #2539happydayMemberQuote:Quote from mgaedtke on February 17, 2017, 13:03
Hello happyday,Have a look for the thermal2d or thermal3d example cases. You can see the thermal dynamics coupled via the boussinesq approximation already set up in order to simulate the raighley benard convection.
This model is not capable of simulating internal heat sources so far, but by applying certain boundary conditions you can simulate heat input to the system.
I did some test with conjugated heat transfer by simply defining another material number with another thermal dynamics using a different diffusion coefficient than the fluid. If you are interested in this setup I can send you some more details.
Best, Max
Thank you Max,I will read the code of the thermal2d or thermal3d carefully,and I would appreciate it if you send the details for me 🙂 .Here is my Gmail:gaobo3698741@gmail.com.
Best Gao
March 1, 2017 at 4:52 pm #2543mgaedtkeKeymasterHello happyday,
for the different temperature boundaries:
First you assign a constant temperature boundary condition to your material number:
Code:TboundaryCondition.addTemperatureBoundary(superGeometry, 3, Tomega);For that material number you define a specific temperature by setting the rho value:
Code:AnalyticalConst2D<T,T> Cold(Tcold);
…
ADlattice.defineRho(superGeometry, 3, Cold);Here Tcold is the dimensionless Temperature = (T – T_lowest) / (T_highest – T_lowest), so usually the colder one will be 0 and the highest 1.
For conjugated heat transfer you define two AD dynamics, one for the fluid, one for the solid:
Code:AdvectionDiffusionRLBdynamics<T, TDESCRIPTOR> TbulkDynamics (
converter.getOmegaT(),
instances::getAdvectionDiffusionBulkMomenta<T,TDESCRIPTOR>()
);AdvectionDiffusionRLBdynamics<T, TDESCRIPTOR> TbulkDynamicsSolid (
converter[code]Code:Solid.getOmegaT(),
instances::getAdvectionDiffusionBulkMomenta<T,TDESCRIPTOR>()
);[/code]You can see that there are different omegas from different converters, so there have to be two converters as well, or you calculate the omega directly in the code as seen in example bifurication3d/eulerEuler:
Code:T omegaAD = 1. / (4. * ( diffusion * (converter.getDeltaT()/(converter.getDeltaX()*converter.getDeltaX()))
* (1./(converter.getCharU()*converter.getCharL())) ) + 0.5);After that you can assign your fluid and solid dynamics to material numbers defined in the geometry (here: 5 = fluid, 6 = solid):
Code:ADlattice.defineDynamics(superGeometry, 5, &advectionDiffusionBulkDynamics);
ADlattice.defineDynamics(superGeometry, 6, &advectionDiffusionBulkDynamicsSolid);
…
NSlattice.defineDynamics(superGeometry, 5, &bulkDynamics);
NSlattice.defineDynamics(superGeometry, 6, &instances::getNoDynamics<T, NSDESCRIPTOR>());You need a boundary condition for the velocity field at the fluid/solid interface, but no boundary condition for the temperature field is needed here (as the temperature is allowed in both regions 5 and 6):
Code:NSboundaryCondition.addVelocityBoundary(superGeometry, 5, NSomega);It’s a bit hacky but as it seems it works. Please make sure to validate this method before acuatlly using it!
I hope i could help you and happy coding,
MaxMarch 4, 2017 at 10:29 am #2545happydayMemberThink you Max,
You save a lot time for me,I would add this in my codes.In recent days,I almost finish my coding,and I find it is difficult for me to set up boundary values.
Well,I konw the T is the dimensionless Temperature = (T – T_lowest) / (T_highest – T_lowest), so usually the colder one will be 0 and the highest 1.but how can I set T_highest and T_lowest ?Are they physical parameters?And how about the different values of thermal conductivity in fluid and solid?In the function in AdvectionDiffusionUnitLB:getKappa=sqrt((T)1/(getPr()*getRa()))*getDeltaT()/(getDeltaX()*getDeltaX()),it seems there is no difference between fluid and solid.
Parameters are connected in lattice world ,and it is not easy to converter physical parameters to lattice parameters especially for my research which has 6 different speed and temperature boundary inlets.I use LBconverter<T> converter1 and AdvectionDiffusionUnitLB<T,NSDESCRIPTOR,TDESCRIPTOR> converter at same time. LBconverter for
converting lattice velocity to physical velocity and AdvectionDiffusionUnitLB for temperature.Is it okey?I am looking forward to your earlier advise.
Best Gao
March 8, 2017 at 1:18 am #2550mgaedtkeKeymasterHey Gao,
apparently, the converter of version 1.0 is not capable of converting physical temperatures. I worked on a new converter capabale of that for quite some time and it will hopefully be published soon with the next release version. Until then, I fear you have to do it your self directly in your application’s code.
Using several converters is okay. I do that too for example in order to have different kappas for solid and fluid.
I hope, i helped you,
Best, MaxMarch 8, 2017 at 2:45 am #2541happydayMemberHolle Max,
Thanks for your working for next release version! I hope it comes soon.For now,how can i do it in my code?I just know the dimensionless Temperature = (T – T_lowest) / (T_highest – T_lowest).Yes, I find my lack of theoretical knowledge,and in recent days, I am reading the book The Lattice Boltzmann Method Principles and Practice
Best,Gao
March 8, 2017 at 1:02 pm #2548mgaedtkeKeymasterHello Gao,
how about this:
Code:double T_cold = 273.15;
double T_hot = 274.15;double latticeTemperature(double physTemperature) {
return (physTemperature – T_cold) / (T_hot – T_cold);
}This is untested but you should be able to achieve the conversion with something like it very easily.
Best, Max
March 9, 2017 at 2:48 am #2552happydayMemberHi Max,
I got it,you save a lot time for me,thanks.
Best,Gao
March 9, 2017 at 3:50 am #2553happydayMemberHi Max,
In olb::AdvectionDiffusionUnitLB< T, NSLattice, ADLattice >::getTcold ( ) const,ithe temperature is dimensionless Temperature? I do some test in example thermal3d with Thot=1000 Tcold=288.15,it seems it works well.
Best Gao
-
AuthorPosts
- You must be logged in to reply to this topic.