Meaning of "fvc::div(phi)"
Hi Foamers,
When I look at pEqn.C in the "twoPhaseEulerFoam" solver, I don't really understand the following codes. ....... for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix pEqn ( fvm::laplacian(Dp, p) == fvc::div(phi) ); ..... Speaking of div(phi), divergence of any scalar is zero mathematically. Divergence reduce the order rank of maxtrix. For an example, let's say, velcotiy vector u=(ux, uy) div(u)=ux/dx + uy/dy ---> scalar quantity But, scalar phi=phi(x,y) div(phi)=0 So what is the meaning of div(phi) and what's a mathematical formulation for the term in openfoam? |
Hi Kim,
This problem happens to me in the same time!http://www.cfd-online.com/Forums/ope...-equation.html Did you find a solution? |
Isn't phi simply the mass flux rho*U*A ? check this
HTML Code:
http://openfoamwiki.net/index.php/Uguide_table_of_fields HTML Code:
http://openfoamwiki.net/index.php/Main_FAQ#What_is_the_field_phi_that_the_solver_is_writing Cheers, Felipe |
Hi Felipre,
Thanks for your prompt reply, Quote:
|
No, because U is the cell centre value, and the divergence is obtained from the face values, i.e. phi.
|
Hi Bernhard,
Could you explain more? |
Can you be more specific?
|
The book are correct, but http://www.cfd-online.com/Forums/vbL...5ac33fb3-1.gif is valid without a mesh. If you integrate this equation over a control volume, this converts to a summation over the faces of the velocity times the area ( http://en.wikipedia.org/wiki/Divergence_theorem ). phi is nothing less then the velocity at the face (times the density and the face area).
|
Quote:
For incompressible flow, you have Plug this into continuity And you get |
Quote:
I know this, but phi is a scalar, what is div(scalar)..... Felipe. Yeah, you are right~ |
Quote:
|
|
You apply the divergence theorem.
You can't integrate face values over a volume as you are posting. The difference between a volScalarField and a surfaceScalarField, is that for a volScalarField, there is a value stored per control volume or cell. For a surfaceScalarField there is a value stored per face. You can of course interpolate from the one to the other, but this is only accurate to some order. |
Quote:
Does it mean fvc::div(phi)=0 equals to sum(phi)=0 in OpenFOAM? Why doesnt it use sum(phi)=0 instead. At last,I think I need to clear my head. Thanks for you patience. Really thankful.:) |
1 Attachment(s)
Im still confused!!!!!!
div(u)=0 I know its meaning. 1) If via continuity, we have div(phi)=0, then we make an intergration on this equation like this: [LaTeX Error: Syntax error] Is this weird? |
Yes, this is extremely weird. phi only lives in the discretized domain on faces of cells. The is no way you can do a volume integral over such a variable.
Do you know how to derive the equation ? You can do this using a mass-micro-balanse. This has not yet anything to do with a mesh, but if you understand this, it is easily translated. |
Quote:
Code:
fvScalarMatrix pEqn Anyway thanks bro. BTW, the unit of fvc::div(u) and fvc::div(phi) is the same: Code:
fvc::div(HbyA):dimensions [0 0 -1 0 0 0 0]; |
Take into account that mathematical and OpenFOAM's languages are different.
Originally, mathematical divergence is vector operation that gives you source or sink at a point. When you use finite volume method to discretize differential equation, you get linear form of diff. equation and volumes to store discrete variables. That's why in order to get divergence you should firstly compute fluxes at volume faces. In OF there are two ways to compute divergence: 1) take fvc::div( of volVectorField ). You can see in sources, it calls for fvc::surfaceIntegrate ( volVectorField & mesh.Sf() ). 2) make first step manually (i.e. phi = U&mesh.Sf()) and call for fvc::div( surfaceScalarField phi ). Again, OF will make fvc::surfaceIntegrate ( surfaceScalarField ). Mathematically div(scalar phi) has no sense. Because you think of variables as continuous fields, but in OF variables are discrete fields. You are partially right, there is no "SUM", but "surfaceIntegrate" called by OF to compute div. And again, phi = U & mesh.Sf(). div(phi) = div(U) = div(U&mesh.Sf()). That's why you get same dimensions. |
Quote:
1. volVectorField U; fvc::div(U); 2. volVectorField U; phi = U & mesh.Sf(); fvc::div(phi); So these two functions are the same rite? fvc::div(u)=fvc::div(phi). Looks like div() has been overloaded. I make a testify: Code:
fvc::div(HbyA)dimensions [0 0 -1 0 0 0 0]; |
Hi all
I have only the question why divU = fvc::div(phi) When we see in the prof. Jasak's PhD in Eqn. 3.15 we have that: divU = sum(S.Uf)/Vp where Vp is a volume of the cell. So why in the code we don't have to do division by the cell volume? |
Quote:
How did you find out these numerical values? i am very new to OF. so my question might appear as silly. But, please do reply. Thanks in advance!! |
Quote:
|
Quote:
|
Quote:
I mean, how can we calculate and display those values? |
Quote:
2. However, I am still confused that why fvc::div(U) = fvc::div(phi) ? Isn't the phi = U*A? |
Display value of fvc::div(HbyA)
Quote:
Code:
volScalarField rAU(1.0/UEqn.A()); Code:
FOAM FATAL IO ERROR: Code:
divSchemes |
add this
Code:
div(HbyA) Gauss upwind; you have the typo "HybA" instead of "HbyA" |
Quote:
Code:
divSchemes Code:
fvc::div(HbyA): |
Hi
I want to write below equation to foam-extend 4.0 https://uupload.ir/files/ybl_untitled.jpg I thought to use Quote:
Thanks. |
Quote:
In your equation, does not grad p, It should be lapacian(p). You can try: Quote:
|
Quote:
you wrote something in fvSchemes |
Quote:
I want to use fractional-step projection method. https://uupload.ir/files/rij7_untitled.jpg the index "p" and n+1 is not matter. they are predicted velocity and next time step, respectively. my mistake may be comparison delta_t with delta_p in Eq. 10.:rolleyes: |
I am trying to write a new Particle Dispersion Model in OpenFOAM. The model requires the divergence of the Reynolds stress tensor. I am able to read the Reynolds stress tensor into the model and am able to perform the fvc::div operation.
My doubt is if this approach is correct. I tried fvc::div(U) in the same way and it gave really high values (O(1)) which are not correct because the simulation has converged and the fvc::div(U) should be a small value (O(1e-3)). So now I have doubts if fvc::div(R) is giving the right values. I have the phi variable too which I think is U*surfaceArea. I computed div(phi, U) and div(phi), and both gave small values in O(1e-3). Should I be using phi to compute the divergence of R? I am getting an error if I use fvc::div(phi,R). What is the difference between using div(R) and div(phi,R)? |
Hi Sai,
Have you found any clue, I found a similar problem. fvc::div(U) has a much greater value than fvc::div(phi) but they have the same dimension! Thanks |
Hi Kagen816.
It seems that div(phi) is correct if you want to verify the continuity equation. phi corresponds to the flux, while U is the cell centre value of velocity. Divergence needs to be calculated at the faces. But I am not sure how this applies to other variables. I am still looking at div(R), where R is the Reynolds Stress. |
All times are GMT -4. The time now is 10:13. |