CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM (https://www.cfd-online.com/Forums/openfoam/)
-   -   buoyantBoussinesqPisoFoam: A detailed explanation (https://www.cfd-online.com/Forums/openfoam/72027-buoyantboussinesqpisofoam-detailed-explanation.html)

vilop6 February 2, 2010 05:46

4 Attachment(s)
hi all

Thanks Mr mchurchf for the great work

i m new in openfoam i tried to use boussinesqBuoyantFoam with TransportProperties,
the solver is wrote by hjasak
first when i tried to compile this solver i got some dimension problems, so i made some changes ,the prog work but it dont converge (program aborted in less than 1s)

this is what i got

look at attached files

-> reponse.txt
-> boussinesq_1 : the solver
-> cdc_buoyantSimpleFoam ; my case solved with buoyantSimpleFoam
-> cdc : case i trie to solve

the changes i made : i multiply some euations by rho0 to adjust dimensions


best regards and thank you for your help



Attachment 2151

Attachment 2152

Attachment 2153

Attachment 2154

panda60 February 3, 2010 02:14

4 Attachment(s)
Dear all, I have strugling for using buoyantBoussinesqSimpleFoam for nearly half a month ,but don't have result. I am now doubt that if buoyantBoussinesqSimpleFoam is correct.

Now I describe my model in detail.
I have a rectangular domain, and a building was located in the domain.
wind come from inlet to outlet. the ground temperature is 318K, the air temperature is about 290K. the side and top domian I use symmetry boundary.

It seems that pressure doundary condition is very important when using buoyant solver. Then I try nearly all kinds of boundary condition for p. But all the result is not right. I am nearly crazy.

This is my model :

the following is my result:

panda60 February 3, 2010 02:32

1.The first result I get with the following pressure condition:
BUILDING
{
type zeroGradient;
}
INLET
{
type zeroGradient;
}
OUTLET
{
type fixedValue;
value uniform 0;
}
SYM_LEFT
{
type symmetryPlane;
}
SYM_RIGHT
{
type symmetryPlane;
}
SYM_TOP
{
type symmetryPlane;
}
GROUND
{
type zeroGradient;
}
GAS_INLET
{
type zeroGradient;
}

the iteration have going for more than 10000 steps,
I think ,for kEpsilon model it doesn't need so many iterations.

2.The second result I get with the buoyantPressure and totalPressure condition:
boundaryField
{
INLET
{
type buoyantPressure;
rho rhok;
value uniform 0;
}
OUTLET
{
type totalPressure;
p0 uniform 0;
U U;
phi phi;
rho rhok;
psi none;
gamma 1;
value uniform 0;
}
SYM_LEFT
{
type symmetryPlane;
}
SYM_RIGHT
{
type symmetryPlane;
}
SYM_TOP
{
type symmetryPlane;
}
GROUND
{
type buoyantPressure;
rho rhok;
value uniform 0;
}
BUILDING
{
type buoyantPressure;
rho rhok;
value uniform 0;
}
GAS_INLET
{
type buoyantPressure;
rho rhok;
value uniform 0;
}

3.The third result I get with the buoyantPressure for outlet:
boundaryField
{
INLET
{
type buoyantPressure;
rho rhok;
value uniform 0;
}
OUTLET
{
type buoyantPressure;
rho rhok;
value uniform 0;
}
SYM_LEFT
{
type symmetryPlane;
}
SYM_RIGHT
{
type symmetryPlane;
}
SYM_TOP
{
type symmetryPlane;
}
GROUND
{
type buoyantPressure;
rho rhok;
value uniform 0;
}
BUILDING
{
type buoyantPressure;
rho rhok;
value uniform 0;
}
GAS_INLET
{
type buoyantPressure;
rho rhok;
value uniform 0;
}
}

you could see, all the result is not right.
I was blamed by professor, why so easy problem you use so long time and can't get result.
Yes, It indeed an normal and easy problem when using Fluent. I don't know why it is so difficult to solve when using OpenFOAM .

Because I am already struggling this for a long time. Could anyone give me some help ?
what I should pay attation to when using buoyantBoussinesqFoam ?

what the exact meaning of buoyantPressure ? If it can be used for outlet ?
Thank you very much.

panda60 February 3, 2010 03:00

My inlet condition for U, k, epsilon and T was get from experiment, and I check ,no problem. I use upwind scheme for all the advection term.

and I think alphat file is ued for compressible flow. So for boussinesq flow it is not needed. Am I right ?

I think if some experts like Thomas Baumann , can come here give some suggestions , that would be excited.

stawrogin February 3, 2010 03:35

Dear Jiang,

did you also try a unsteady calculation (e.g. using Piso)? From my experience:
If buoyancy effects really become dominant in the flow ,the flow pattern becomes inherently transient. I think it is the same for bouyantBoussinesq and the bouyant solvers using the state equations. Maybe you can try to your cases with these solvers as well (using ideal gas instead of Boussinesq approach).

Maybe this helps.
Stawrogin

scotth2o February 3, 2010 13:20

Jiang,

I think your third pressure file should work. Note that if you are using buoyantBoussinesqPisoFoam you need to set a reference temperature in transportProperties. It's easy enough to make this quantity into a field quantity by editing the solver and recompiling. The difference between the temperature and the reference temperature can send a fluid blobs racing toward the top of the model and make the whole thing crash. In my experience there is too much variation in temperature over the scale of the PBL to just use a scalar quantity. This is why I typically use a Tref field or buoyantPisoFoam (even though it's for compressible flows).

I am interested in your temperature and U BC files. is your model heating up or cooling down? At the moment I'd just switch the model to laminar and focus on the basics.

Good Luck

Scott

mchurchf February 3, 2010 13:39

Scott,

Can you clarify what you mean by using a Tref field? Do you mean that you set Tref not at just one point, but everywhere? In that way you can set the Tref field to be stratified?

If I understand correctly, if you set Tref to be stratified and initialize T to have the same stratification, then rho_k = 1 everywhere initially, correct?

Thanks,

Matt

scotth2o February 3, 2010 14:49

That's exactly right, rhok would be zero initially but over time it won't be as blobs are displaced vertically (in this case by a building but also by terrain or turbulence) and advected to areas with a different Tref.

In the real atmosphere you get lots of buoyancy waves on a mesoscale due to stratification. I'm not convinced these things are dominate at the microscale (~100m) but they are present. My feeling is that when you turn on the turbulence a lot of these small scale wave features go away becasue TKE is larger in magnitude but I could be wrong.

Note, while I'm tossing the idea out here I haven't had a lot of luck with this modified solver. More luck than assuming a scalar Tref but I typically use buoyantPisoFoam for the atmospheric PBL. When I first started doing this I had concerns about using a compressible flow solver but from everything I've read I see no reason it won't work. I'd be interested in the groups thoughts regarding this subject (but lets not hijack this thread).

Scott

panda60 February 4, 2010 01:10

4 Attachment(s)
Dear stawrogin and scotth2o,
Thank you very much.
my inlet condition was got from experiment data, include U, T, k, epsilon.
The ground temperature is about 318K. The air temperature near ground is 295K. the air temperature in top is 282K. All these are from experiment. So in my model the air is a little heat up.
So the temperature differences is not large, dt=295-282=13K. I think this flow is dominanted by inlet velocity, not by buoyancy. The flow field only has buoyancy effect. so BuoyantBoussinesq is better than Buoyant buoyant solver.I have used field vararble TRef, but result not change so much.

This is my velocity boundary field. I use potentialFoam to initialize my velocity, and use experiment profile as inlet condition.

U
OUTLET
{
type zeroGradient;
}
SYM_LEFT
{
type symmetryPlane;
}
SYM_RIGHT
{
type symmetryPlane;
}
SYM_TOP
{
type symmetryPlane;
}
GROUND
{
type fixedValue;
value uniform (0 0 0);
}
BUILDING
{
type fixedValue;
value uniform (0 0 0);
}
GAS_INLET
{
type fixedValue;
value uniform (0 0 0.467);
}

This is my temperature file:

T
OUTLET
{
type zeroGradient;
}
SYM_LEFT
{
type symmetryPlane;
}
SYM_RIGHT
{
type symmetryPlane;
}
SYM_TOP
{
type symmetryPlane;
}
GROUND
{
type fixedValue;
value uniform 318.3;
}
BUILDING
{
type groovyBC;
valueExpression "509.51*pow(pos().z,4)-9.3428*pow(pos().z,3)+128.44*pow(pos().z,2)-51.296*pos().z +44.264+273.15";

}
GAS_INLET
{
type fixedValue;
value uniform 303.4;
}

Now I have been convinced that buoyantPressure is better for p outlet condition, because this result all the things are better, except that in the corner of the domain will have minus velocity after several steps, and then this minus velocity begin an instability to the whole field.Why this would happen ?

This is my picture for 200 steps. I think if there is not minus velocity in the domain corner, this result would be very good.

scotth2o February 4, 2010 13:11

For the ground, gas_inlet and outlet try "type inletOutlet" in the temperature file. The model will likely heat up or cool down for a few time steps before reaching a "more" steady state

While I can't remember the energy equation for buoyantBoussinesqPisoFoam in buoyantPisoFoam there is a div(alphat,grad(h) ) term which leads to fluxes of energy out of the top and the bottom. Setting T to inletOutlet seems to let these fluxes flux.

Typically I would set the top temp to inletOutlet too but I have never used the "symmetryPlane" boundary condition. How does this work at the top of the model? Is the temperature on the right side the mirror image of the T on the left?

Good Luck
Scott

panda60 February 6, 2010 10:26

Dear scotth2o,

my relaxationFactors like this, am I right ?

relaxationFactors
{
rho 0.9;
p 0.3;
U 0.7;
T 0.7;
k 0.7;
epsilon 0.7;
R 0.7;
}

panda60 February 6, 2010 10:33

And I am little confused, why equation like this ?

fvScalarMatrix TEqn
(
fvm::div(phi, T)
- fvm::Sp(fvc::div(phi), T)
- fvm::laplacian(kappaEff, T)
);


tmp<fvVectorMatrix> UEqn
(
fvm::div(phi, U)
- fvm::Sp(fvc::div(phi), U)
+ turbulence->divDevReff(U)
);

why here have the term fvm::Sp(fvc::div(phi), T) ,and fvm::Sp(fvc::div(phi), U) ?
what is the meaning of this term ?

Because buoyantBoussinesaPisoFoam doesn't have this term. Why buoyantBoussinesaSimpleFoam have this ?

scotth2o February 9, 2010 11:53

I've never changed the relaxationFactors from the default values. They seem to work fine as far as I know.

Scott


Quote:

Originally Posted by panda60 (Post 245197)
Dear scotth2o,

my relaxationFactors like this, am I right ?

relaxationFactors
{
rho 0.9;
p 0.3;
U 0.7;
T 0.7;
k 0.7;
epsilon 0.7;
R 0.7;
}


panda60 February 12, 2010 11:16

Dear all, who can tell me the meaning of alphat ?
If it is only be used for compressible flow ?
If I use buoyantBoussinesSimpleFoam , if I need it ?

Because I saw in buoyantPisoFoam, it write like this:

floor
{
type compressible::alphatWallFunction;
value uniform 0;
}

but in buoyantBoussinesqPisoFoam ,it write like this:

floor
{
type alphatWallFunction;
value uniform 0;
}.

So I think it will be used in BoussinesqFoam, but I can't find which places have used it in the solver , who can tell me ?

Because If using kEpsilon model , we should need wall function for temperature like velocity, we use nutWallFunction can activate the velocity wall function, So I think we should need a variable to activate temperature wall function ?

If ahphat can do this work ?
Thank you very much.

poplar June 11, 2010 05:29

good job! Matthew.

eqns (15)(16)(18) should be d/dt(keff*dT/dx), not keff*d2T/dx2.
cuz keff(x) is not constant.

mchurchf June 11, 2010 10:39

Poplar,

You are absolutely correct. I've updated the Wiki page on buoyantBoussinesqPisoFoam to reflect your corrections.

Thanks,

Matt

feldy77 March 28, 2011 21:57

Boundary conditions for pressure
 
Hi,
I have a general question. It is of common knowledge that there is no need for boundary conditions for pressure when solving incompressible flow in enclosures. Then, what are the supposed boundary conditions for p and p_rgh in this case. I tried to put just constant zero value and obtained some solution that looks good, but is it physical?
Thanks, Yuri

mchurchf March 29, 2011 10:01

Yuri,

If the flow is totally enclosed, you'll need to specify the pressure gradient normal to the surface. For p, static pressure, I recommend using the "buoyantPressure" boundary condition, which will set the static pressure gradient equal to (rho_k*g) dotted with the boundary surface normal, where rho_k is the Boussinesq density. For p_rgh, which is static pressure minus the hydrostatic part, also use "buoyantPressure". The "bouyantPressure" boundary condition looks at whether it is being used for p or p_rgh and applies the proper gradient. For p_rgh, it sets the gradient to -d(rho_k)/dn * g * height, where d/dn is the surface normal gradient.

See src\finiteVolume\fields\fvPatchFields\derived\buoy antPressure for details.

Matt

mugi June 17, 2011 05:27

I started with open Foam to use it for geological problems. I'm trying to get into the buoyantBoussinesqPimpleFoam solver right now. Everything is working fine but I have one question:

I like to apply a linear temperature distribution as boundary conditions for the side walls. Is it possible to apply such in a simple way in openFOAM? In the tutorial there is setHotRoom used in the ./Allrun to define the boundaries. I didn't use that right know because I wasn't able to modify something in the setHotRoom. The only setHotRoom.C are in the tutorial for buoyantPimpleFoam but if I modify that (and recompile) I get no changes if I run setHotRoom with the Boussinesq solver. That sounds strange for me... Does someone have an idea about that??

Maike.

kaifu June 21, 2011 10:41

Hi Matthew

How did u deduce eqn (20) from eqn (19)? And what about the approximation order? Is there any references? Thanks.

// Kai


All times are GMT -4. The time now is 11:58.