Sei sulla pagina 1di 17

Calculating divDevReff -- CFD Online Discussion ... https://www.cfd-online.com/Forums/openfoam-sol...

[Sponsors]

Home
News
Forums
Wiki
Links
Jobs
Books
Events
Tools
Feeds
About
Search

Home > Forums > Software User Forums > OpenFOAM > OpenFOAM Running, Solving & CFD
Welcome, bahakumaty.
Calculating divDevReff You last visited: January 11, 2019 at 10:45
Private Messages: Unread 0, Total 0.

USER PANEL BLOGS FAQ COMMUNITY NEW POSTS UPDATED THREADS SEARCH QUICK LINKS LOG OUT

79 Likes
PAGE 1 OF 4 1 2 3 > Last »

LINKBACK THREAD TOOLS SEARCH THIS THREAD RATE THREAD DISPLAY MODES

December 11, 2008, 21:57 Hi All, I'm using simpleFoa #1

jposunz Hi All,
New Member
I'm using simpleFoam and turbFoam with k-epsilon and will be trying different turbulence models in the future.
John O\'Sullivan
Join Date: Mar 2009
Before that though, I'm trying to understand the implementation exactly.
Location: Auckland, New
Zealand I've searched a lot and I don't understand why the calculation for turbulence->divDevReff(U) is:
Posts: 7
Rep Power: 11
divDevReff(U) =
- fvm::laplacian(nuEff(), U)
- fvc::div(nuEff()*dev(fvc::grad(U)().T()))

instead of:

divDevReff(U) =
- fvm::laplacian(nuEff(), U)
- fvc::div(nuEff()*fvc::grad(U)().T())

ie. why do we take the deviatoric?

I've read several papers including Hrvoje's "A tensorial approach to computational continuum mechanics using
object-oriented techniques" and still haven't found an answer.

Is there another paper that explains the implementation?

Thanks very much


John

Like

1 of 17 2/8/19, 9:00 AM
Calculating divDevReff -- CFD Online Discussion ... https://www.cfd-online.com/Forums/openfoam-sol...

December 14, 2008, 17:48 Anyone? Or should I have been #2

jposunz Anyone? Or should I have been able to find this in the literature somewhere already?
New Member
July 16, 2009, 16:59 #3
Like
John O\'Sullivan
louisgag
Join Date: Mar 2009 Hi John,
Location: Auckland, New
Senior Member
Zealand
did you find the answer to that? If so I'd be curious to know what it is. Thanks!
Posts: 7
Rep Power: 11
-Louis

Like

Louis Gagnon
Join Date: Mar 2009
Location: Milano, Italy
Posts: 264
Rep Power: 12

November 14, 2009, 13:09 #4

jet Hi,
New Member
have you already found an answer to your question? I tried to understand this equation, too. But I failed!
Join Date: Nov 2009
Posts: 12
Rep Power: 11 Like

November 30, 2009, 22:04 #5

louisgag I think it has to do with the fact that


Senior Member
dev(fvc::grad(U)().T()))

is, at convergence, the same as

(fvc::grad(U)().T()))

Louis Gagnon for some fluids


Join Date: Mar 2009
Location: Milano, Italy
Posts: 264 -Louis
Rep Power: 12
Like

December 2, 2009, 11:39 #6

4xF fvc::div(nuEff()*dev(fvc::grad(U)().T())) and fvc::div(nuEff()*fvc::grad(U)().T()) are the same. The reason is that
New Member the missing term is the diagonal of the tensor fvc::grad(U)().T() which is the trace of fvc::grad(U)().T() which is
div(phi). For an incompressible fluid, this value is strictly zero by virtue of mass conservation.
Frank Albina
Join Date: Mar 2009
Location: Switzerland Like
Posts: 14
Rep Power: 11 Tushar@cfd, sharonyue, shang and 2 others like this.

2 of 17 2/8/19, 9:00 AM
Calculating divDevReff -- CFD Online Discussion ... https://www.cfd-online.com/Forums/openfoam-sol...

December 22, 2009, 16:45 #7

mchurchf John,
Member
I don't know if anyone has answered your question yet, but I've come across the same thing, and I have
Matthew J. Churchfield
Join Date: Nov 2009
questions about the incompressible implementation of divDevReff also. As you said, in the incompressible
Location: Boulder, Colorado, models, turbulence->divDevReff(U) is:
USA
Posts: 49 - fvm::laplacian(nuEff(), U)
Rep Power: 13
- fvc::div(nuEff()*dev(fvc::grad(U)().T()))

Shouldn't dev2 be used instead of dev? In the compressible models, that is the case as
turbulence->divDevRhoReff is:

- fvm::laplacian(muEff(), U)
- fvc::div(muEff()*dev2(fvc::grad(U)().T()))

In src\OpenFOAM\primitives\Tensor\TensorI.H, dev and dev2 are defined as dev(A) = A-1/3*I*trace(A) and


dev2(A) = A-2/3*I*trace(A).

The stress term in the incompressible momentum equation is as follows:


d/dx_j {nu_eff*[(du_i/dx_j + du_j/dx_i)-2/3*du_k/dx_k delta_ij]},

which is the same as:


d/dx_j {nu_eff*(du_i/dx_j+du_j/dx_i)} - 2/3*d/dx_i {nu_eff(du_k/dx_k)}

which is in vector notation:


laplacian(nu_eff*U)
+ div{nu_eff*transpose[grad(U)]}
- div{2/3*nu_eff*I*trace[transpose(grad(U))]}

and reduces to:


laplacian(nu_eff*U) + div{nu_eff*dev2(transpose[grad(U)])}

Notice that dev2 is here instead of dev, which agrees with the compressible coding. However, in the
incompressible coding, dev is used, which seem incorrect.

Now, the du_k/dx_k = trace[transpose(grad(U))] should be equal to zero in incompressible flow due to the
continuity equation, so it seems that it should not matter if dev or dev2 is used. However, in the PISO
algorithm, velocity may be predicted from a field that does not satisfy continuity due to initial conditions or
insufficient pressure correction, so it seems like it would be wise to keep du_k/dx_k.

I am wondering if dev2 is an addition to OpenFOAM 1.6 and the incompressible divDevReff (and divDevBeff
for LES) didn't get updated to reflect the change. Can someone with the correct knowledge please help?

Thank you,

Matt

Quote:

Originally Posted by jposunz


Hi All,

I'm using simpleFoam and turbFoam with k-epsilon and will be trying different turbulence models in
the future. Before that though, I'm trying to understand the implementation exactly.

I've searched a lot and I don't understand why the calculation for turbulence->divDevReff(U) is:

3 of 17 2/8/19, 9:00 AM
Calculating divDevReff -- CFD Online Discussion ... https://www.cfd-online.com/Forums/openfoam-sol...

divDevReff(U) =
- fvm::laplacian(nuEff(), U)
- fvc::div(nuEff()*dev(fvc::grad(U)().T()))

instead of:

divDevReff(U) =
- fvm::laplacian(nuEff(), U)
- fvc::div(nuEff()*fvc::grad(U)().T())

ie. why do we take the deviatoric?

I've read several papers including Hrvoje's "A tensorial approach to computational continuum
mechanics using object-oriented techniques" and still haven't found an answer.

Is there another paper that explains the implementation?

Thanks very much


John

Like

Tobi, xuan8908, mgg and 5 others like this.

January 2, 2010, 11:04 #8

christju Hello,
New Member In fact, I've come across the same thing and I found the same conclusion than you Matthew...
The reynolds stress tensor is defined as :
Julien Christophe
-rho u'_i u'_j = 2 mu_t S_ij - 2/3 rho k delta_ij
Join Date: Nov 2009
Posts: 4
Rep Power: 11 where k = (u'_i u'_i) /2 is the kinetic energy, and S_ij is the deviatoric part of the mean strain rate :
S_ij = 1/2 (du_i/dx_j + du_j/dx_i) - 1/3 d_uk/dx_k delta_ij

As you said Matthew, the stress term in the incompressible momentum equation is as follows:
d/dx_j {nu_eff*[(du_i/dx_j + du_j/dx_i)-2/3*du_k/dx_k delta_ij]},

And in fact, from my point of view, a 2 is missing in the implementation of turbulence->divDevReff(U) of the
incompressible model....

My other question is :
Where the term "- 2/3 rho k delta_ij" of the Reynold stress is taken into account?
Is it through a modified pressure defined as P = p/rho+2/3k and solved in the pressure equation?
And then, what is writen in the output files? this modified pressure?

If you have any idea....


Thank you in advance for your help,
Julien

Like

galap, kiddmax, dongchao yang and 2 others like this.

August 25, 2010, 00:51 #9

4 of 17 2/8/19, 9:00 AM
Calculating divDevReff -- CFD Online Discussion ... https://www.cfd-online.com/Forums/openfoam-sol...

poplar Hi,mchurchf.
New Member
The complete form of div(StressTensor)is:
pop
Join Date: Feb 2010
div(muEff()*dev(fvc::grad(U)())) + div(muEff()*dev(fvc::grad(U)().T()))
Posts: 12 So -1/3*I*trace(A) is lncluded in both dev(grad(U)) and dev(grad(U).T()),
Rep Power: 11
in fact,
laplacian(nuEff(), U) = div(muEff()*grad(U)) =div(muEff()*dev(fvc::grad(U))) + 1/3*I*trace(A)

as a result, one 1/3*I*trace(A) is addded in laplacian(nuEff(), U), so a minus one must be subtracted in the
later term.

then,dev2(A) = A-2/3*I*trace(A).

du_k/dx_k in incompressible fluids may be removed. If one retains it for correction, 1/3 or 2/3 is only a scale
factor.

Quote:

Originally Posted by mchurchf


John,

I don't know if anyone has answered your question yet, but I've come across the same thing, and I
have questions about the incompressible implementation of divDevReff also. As you said, in the
incompressible models, turbulence->divDevReff(U) is:

- fvm::laplacian(nuEff(), U)
- fvc::div(nuEff()*dev(fvc::grad(U)().T()))

Shouldn't dev2 be used instead of dev? In the compressible models, that is the case as
turbulence->divDevRhoReff is:

- fvm::laplacian(muEff(), U)
- fvc::div(muEff()*dev2(fvc::grad(U)().T()))

In src\OpenFOAM\primitives\Tensor\TensorI.H, dev and dev2 are defined as dev(A) =


A-1/3*I*trace(A) and dev2(A) = A-2/3*I*trace(A).

The stress term in the incompressible momentum equation is as follows:


d/dx_j {nu_eff*[(du_i/dx_j + du_j/dx_i)-2/3*du_k/dx_k delta_ij]},

which is the same as:


d/dx_j {nu_eff*(du_i/dx_j+du_j/dx_i)} - 2/3*d/dx_i {nu_eff(du_k/dx_k)}

which is in vector notation:


laplacian(nu_eff*U)
+ div{nu_eff*transpose[grad(U)]}
- div{2/3*nu_eff*I*trace[transpose(grad(U))]}

and reduces to:


laplacian(nu_eff*U) + div{nu_eff*dev2(transpose[grad(U)])}

Notice that dev2 is here instead of dev, which agrees with the compressible coding. However, in the
incompressible coding, dev is used, which seem incorrect.

Now, the du_k/dx_k = trace[transpose(grad(U))] should be equal to zero in incompressible flow due
to the continuity equation, so it seems that it should not matter if dev or dev2 is used. However, in
the PISO algorithm, velocity may be predicted from a field that does not satisfy continuity due to
initial conditions or insufficient pressure correction, so it seems like it would be wise to keep
du_k/dx_k.

I am wondering if dev2 is an addition to OpenFOAM 1.6 and the incompressible divDevReff (and
divDevBeff for LES) didn't get updated to reflect the change. Can someone with the correct
knowledge please help?

Thank you,

5 of 17 2/8/19, 9:00 AM
Calculating divDevReff -- CFD Online Discussion ... https://www.cfd-online.com/Forums/openfoam-sol...

Matt

Like

Tobi, sina.s, Thamali and 1 others like this.

Last edited by poplar; August 25, 2010 at 18:38.

October 13, 2010, 12:54 new nuEff() #10

T.D. Hi guys
Senior Member i need to add (implement) and use a new nuEff2(), how to do that?
where to add the new nuEff() ?
Join Date: Sep 2010
Location: France
Posts: 226 i tried but it's hard, since it was only one original "nu" defined in all the transportModels and viscosityModels,
Rep Power: 11 and is hard to change in all the files.

help please

Like

October 26, 2012, 09:14 #11

haze_1986 I am curious about this too


Senior Member
Like
Join Date: Jul 2011
Posts: 117 Last edited by haze_1986; October 27, 2012 at 07:35.
Rep Power: 9

January 25, 2013, 04:27 #12

haze_1986 Quote:
Senior Member
Originally Posted by poplar
Join Date: Jul 2011 Hi,mchurchf.
Posts: 117
Rep Power: 9
The complete form of div(StressTensor)is:
div(muEff()*dev(fvc::grad(U)())) + div(muEff()*dev(fvc::grad(U)().T()))
So -1/3*I*trace(A) is lncluded in both dev(grad(U)) and dev(grad(U).T()),

in fact,
laplacian(nuEff(), U) = div(muEff()*grad(U)) =div(muEff()*dev(fvc::grad(U))) + 1/3*I*trace(A)

as a result, one 1/3*I*trace(A) is addded in laplacian(nuEff(), U), so a minus one must be subtracted
in the later term.

then,dev2(A) = A-2/3*I*trace(A).

du_k/dx_k in incompressible fluids may be removed. If one retains it for correction, 1/3 or 2/3 is only
a scale factor.

Hi, that sounds correct, but I do not understand why for the compressible case divDevRhoReff(U), dev2 is

6 of 17 2/8/19, 9:00 AM
Calculating divDevReff -- CFD Online Discussion ... https://www.cfd-online.com/Forums/openfoam-sol...

used instead?
http://www.cfd-online.com/Forums/ope...sonicfoam.html

Like

March 31, 2014, 08:22 #13

MatzeS Hello,
New Member
although it's some time ago and several replies were posted, I still don't understand, if the implementation is
Matthias Stammen
Join Date: Oct 2010
correct...
Posts: 8
Rep Power: 10 Don't we have to use dev2() instead of dev() for the incompressible solvers (at least until convergence is
reached)?
Or did I just miss the correct reply?

Regards,
Matthias

Like

November 6, 2014, 03:31 #14

galap Quote:
Member
Originally Posted by christju
Fabian E. Hello,
Join Date: Nov 2009 In fact, I've come across the same thing and I found the same conclusion than you Matthew...
Posts: 37
Rep Power: 11 The reynolds stress tensor is defined as :
-rho u'_i u'_j = 2 mu_t S_ij - 2/3 rho k delta_ij

where k = (u'_i u'_i) /2 is the kinetic energy, and S_ij is the deviatoric part of the mean strain rate :
S_ij = 1/2 (du_i/dx_j + du_j/dx_i) - 1/3 d_uk/dx_k delta_ij

As you said Matthew, the stress term in the incompressible momentum equation is as follows:
d/dx_j {nu_eff*[(du_i/dx_j + du_j/dx_i)-2/3*du_k/dx_k delta_ij]},

And in fact, from my point of view, a 2 is missing in the implementation of turbulence->divDevReff(U)


of the incompressible model....

My other question is :
Where the term "- 2/3 rho k delta_ij" of the Reynold stress is taken into account?
Is it through a modified pressure defined as P = p/rho+2/3k and solved in the pressure equation?
And then, what is writen in the output files? this modified pressure?

If you have any idea....


Thank you in advance for your help,
Julien

Exactly reprint of my doubts. The issue in the incompressible is not the problem for me - since I am dealing
with compressible flows. There the implementation seems to be correct. But what I don't see:

Where the term "- 2/3 rho k delta_ij" of the Reynold stress is taken into account? Has anyone find the answer?

Like

7 of 17 2/8/19, 9:00 AM
Calculating divDevReff -- CFD Online Discussion ... https://www.cfd-online.com/Forums/openfoam-sol...

July 15, 2015, 15:07 divDevRhoReff and divDevReff #15

Tobi Hi all,
Super Moderator
as I read before, there are still some people who are confused about the equations and the behavior of the
implemented code. Therefore, I want to make the derivations and want to show you that the implementation is correct
for both cases. We consider compressible and incompressible fluids. Further more I only take into account laminar
flow and explain the way to get to divDevRhoReff and divDevReff.

Note: A complete derivation can be found in my public book with more hints and comparison with the c++
Tobias Holzmann code.
Join Date: Oct 2010
Location: Augsburg
Posts: 2,186 Momentum equation
Blog Entries: 6
Rep Power: 37
Lets start with the obvious momentum equation:

Due to the fact that everyone are more or less familiar with the equations, I do not mention the variables meaning. For
the further proceeding I do not consider body forces. If we have newtonian fluid the stress tensor can be expressed
as:

Some modifications and we end up with:

Combining both, and neglect all other body forces, we end up with:

Lets focus only only to the RHS (step by step):

Now it can be shown that the first term is the gradient of the pressure:

The analytic proof:

The second term at the RHS is often symboled with and stand for the viscose part of the stress tensor (normally
without the divergence symbol):

This guy is calculated by calling the function divDevRhoReff(U) or divDevReff(U). Now I will show that the
implemented functions are correct.

8 of 17 2/8/19, 9:00 AM
Calculating divDevReff -- CFD Online Discussion ... https://www.cfd-online.com/Forums/openfoam-sol...

Compressible

In compressible flow we have the full viscose stress tensor. Now I demonstrate that this term is exactly the
divDevRhoReff(U) function. Lets start to modify the equation (again step by step). But first I want to introduce the
necessary math operation. denotes an arbitary vector:

using this formula and sorting the equation, we get the following:

Thats it. If we call turbulence->divDevRhoReff() we will exactly get this equation. Using a substituion for the gradient
of the transponed velocity field, the name of the function dev2 gets clearer:

The deviatoric part of a matrix is defined as:

Now we see, that the second term include the deviatoric part of the matrix (gradU). In compressible we call the dev2
due to the fact that the factor 2 is in the trace. To proove the equation, we can check out the code in the compressible
tubulence file (laminar.C): http://foam.sourceforge.net/docs/cpp...ce.html#l00219

Code:

219 tmp<fvVectorMatrix> laminar::divDevRhoReff(volVectorField& U) const 220 {


221 return
222 (
223 - fvm::laplacian(muEff(), U)
224 - fvc::div(muEff()*dev2(T(fvc::grad(U))))
225 );
226 }

is equal to (muEff = mu for laminar):


Code:

fvm::laplacian(muEff, U)

is equal to
Code:

224 - fvc::div(muEff()*dev2(T(fvc::grad(U))))

9 of 17 2/8/19, 9:00 AM
Calculating divDevReff -- CFD Online Discussion ... https://www.cfd-online.com/Forums/openfoam-sol...

At least dev2 calculates exactly the deviatoric part. The code is here: http://foam.sourceforge.net/docs/cpp
/a08631_source.html

Code:

303 //- Return the deviatoric part of a symmetric tensor 304 template<class Cmpt>
305 inline SymmTensor<Cmpt> dev2(const SymmTensor<Cmpt>& st)
306 {
307 return st - SphericalTensor<Cmpt>::twoThirdsI*tr(st);
308 }

This is equal to:

Check or no check , I think, its obvious.

Incompressible
For incompressible fluids (devide by ) we again start with the viscous stress tensor :

Hence, the density is constant the first term (underlined) at the RHS is zero due to the mass conservation equation:

After a huge amount of mathematics we get

So there is no deviatoric part till now. But in FOAM we calculate the viscouse part of the stress tensor using
divDevReff. Now we add the hydrostatic part multiply by the viscosity and substract it again:

it follows:

The last term is zero due to mass conservation and can be removed:

We end up with:

If we substitute the transponed gradient U matrix with A:

Again we have the laplacian term and again the deviatoric part (here calcated with oneThird, so the correct definition
of dev).

10 of 17 2/8/19, 9:00 AM
Calculating divDevReff -- CFD Online Discussion ... https://www.cfd-online.com/Forums/openfoam-sol...

And this is exactly what we get here:

Code:

tmp<fvVectorMatrix> laminar::divDevReff(volVectorField& U) const


{
return
(
- fvm::laplacian(nuEff(), U)
- fvc::div(nuEff()*dev(T(fvc::grad(U))))
);
}

The code for the deviatoric part (dev()) is equal to dev2. The only difference is the factor 2/3 which is introduced by
the divergence term as shown before.

I hope everything is clear now and that there are no mistakes.


Additionally I hope it makes stuff clearer and help anybody to get a better understanding how things work.

Kind regards

Thanks to Alexander Vakhrushev for all support!

Like

makaveli_lcf, olivierG, T.D. and 46 others like this.

__________________
Keep foaming,
Tobias Holzmann

Last edited by Tobi; April 27, 2017 at 04:37. Reason: mu = nu in incompressible; Sign mistake and renamed phi to a because phi = scalar
normally

July 16, 2015, 09:10 #16

ssherman Tobi,
New Member
Thanks for the clear and concise explanation. However, in the incompressible case, there are a few places where
Join Date: Feb 2015
mass conservation can be invoked to set terms to zero, but are not. Why do we set the terms that we do to zero?
Posts: 2
Rep Power: 0
I ask because nonNewtonianIcoFoam does not compute the viscous terms through divDevReff. Instead it goes
through a couple more steps (that appear valid to me) to get to an alternate expression:
Code:

- fvm::laplacian(fluid.nu(), U) - (fvc::grad(U) & fvc::grad(fluid.nu())

Is nonNewtonianIcoFoam 'wrong'? What is the motivation for the different terms?

In the thread below, I show that the two forms yield noticeably different results for a model problem on a highly non-
Newtonian fluid.
http://www.cfd-online.com/Forums/ope...tml#post555712

Thanks,
Steve

Like

11 of 17 2/8/19, 9:00 AM
Calculating divDevReff -- CFD Online Discussion ... https://www.cfd-online.com/Forums/openfoam-sol...

July 24, 2015, 02:17 #17

Tobi Hi,
Super Moderator
why we set some term (that could be set to zero) not to zero is the way I derivated the equations (:
If we will go straight forward there is no need to do this. See below.

Like
__________________
Keep foaming,
Tobias Holzmann
Join Date: Oct 2010 Tobias Holzmann
Location: Augsburg
Posts: 2,186 Last edited by Tobi; August 6, 2015 at 04:05. Reason: Reject the formulation...
Blog Entries: 6
Rep Power: 37

August 6, 2015, 03:23 #18

Tobi Hi all,
Super Moderator
the derivation is correct but not straight forward from the beginning. If I have time I will make a PDF where
everything is straight forward. Then you can see why once we have 1/3 and the other time 2/3 and its not due
to the fact that we extend a equation (like I did in the incompressible case). Of course, like I showed it is
possible to derivate the 2/3 and 1/3 like I did but as I mentioned it is not straight forward.

Like
Tobias Holzmann
Join Date: Oct 2010 __________________
Location: Augsburg Keep foaming,
Posts: 2,186 Tobias Holzmann
Blog Entries: 6
Rep Power: 37

August 6, 2015, 03:48 #19

galap I would highly appreciate it! Thank you - good work


Member
Like
Fabian E.
Join Date: Nov 2009
Posts: 37
Tobi likes this.
Rep Power: 11

October 23,
#20
2015, 08:35

syavash Quote:
Senior
Member Originally Posted by Tobi
Hi all,
Ehsan
Asgari
Join Date: as I read before, there are still some people who are confused about the equations and the behavior of the
Apr 2010 implemented code. Therefore, I want to make the derivations and want to show you that the implementation is correct
Posts: 366

12 of 17 2/8/19, 9:00 AM
Calculating divDevReff -- CFD Online Discussion ... https://www.cfd-online.com/Forums/openfoam-sol...

Rep Power:
11 for both cases. We consider compressible and incompressible fluids. Further more I only take into account laminar
flow and explain the way to get to divDevRhoReff and divDevReff.

Momentum equation

Lets start with the obvious momentum equation:

Due to the fact that everyone are more or less familiar with the equations, I do not mention the variables meaning. For
the further proceeding I do not consider body forces. If we have newtonian fluid the stress tensor can be expressed
as:

Some modifications and we end up with:

Combining both, and neglect all other body forces, we end up with:

Lets focus only only to the RHS (step by step):

Now it can be shown that the first term is the gradient of the pressure:

The analytic proof:

The second term at the RHS is often symboled with and stand for the viscose part of the stress tensor (normally
without the divergence symbol):

This guy is calculated by calling the function divDevRhoReff(U) or divDevReff(U). Now I will show that the
implemented functions are correct.

Compressible

In compressible flow we have the full viscose stress tensor. Now I demonstrate that this term is exactly the
divDevRhoReff(U) function. Lets start to modify the equation (again step by step). But first I want to introduce the
necessary math operation. denotes an arbitary vector:

13 of 17 2/8/19, 9:00 AM
Calculating divDevReff -- CFD Online Discussion ... https://www.cfd-online.com/Forums/openfoam-sol...

using this formula and sorting the equation, we get the following:

Thats it. If we call turbulence->divDevRhoReff() we will exactly get this equation. Using a substituion for the gradient
of the transponed velocity field, the name of the function dev2 gets clearer:

The deviatoric part of a matrix is defined as:

Now we see, that the second term include the deviatoric part of the matrix (gradU). In compressible we call the dev2
due to the fact that the factor 2 is in the trace. To proove the equation, we can check out the code in the compressible
tubulence file (laminar.C): http://foam.sourceforge.net/docs/cpp...ce.html#l00219

Code:

219 tmp<fvVectorMatrix> laminar::divDevRhoReff(volVectorField& U) const 220 {


221 return
222 (
223 - fvm::laplacian(muEff(), U)
224 - fvc::div(muEff()*dev2(T(fvc::grad(U))))
225 );
226 }

is equal to (muEff = mu for laminar):


Code:

fvm::laplacian(muEff, U)

is equal to
Code:

224 - fvc::div(muEff()*dev2(T(fvc::grad(U))))

At least dev2 calculates exactly the deviatoric part. The code is here: http://foam.sourceforge.net/docs/cpp
/a08631_source.html

Code:

303 //- Return the deviatoric part of a symmetric tensor 304 template<class Cmpt>
305 inline SymmTensor<Cmpt> dev2(const SymmTensor<Cmpt>& st)
306 {

14 of 17 2/8/19, 9:00 AM
Calculating divDevReff -- CFD Online Discussion ... https://www.cfd-online.com/Forums/openfoam-sol...

307 return st - SphericalTensor<Cmpt>::twoThirdsI*tr(st);


308 }

This is equal to:

Check or no check , I think, its obvious.

Incompressible
For incompressible fluids (devide by ) we again start with the viscous stress tensor :

Hence, the density is constant the first term (underlined) at the RHS is zero due to the mass conservation equation:

After a huge amount of mathematics we get

So there is no deviatoric part till now. But in FOAM we calculate the viscouse part of the stress tensor using
divDevReff. Now we add the hydrostatic part multiply by the viscosity and substract it again:

it follows:

The last term is zero due to mass conservation and can be removed:

We end up with:

If we substitute the transponed gradient U matrix with A:

Again we have the laplacian term and again the deviatoric part (here calcated with oneThird, so the correct definition
of dev).

And this is exactly what we get here:

Code:

tmp<fvVectorMatrix> laminar::divDevReff(volVectorField& U) const


{
return

15 of 17 2/8/19, 9:00 AM
Calculating divDevReff -- CFD Online Discussion ... https://www.cfd-online.com/Forums/openfoam-sol...

(
- fvm::laplacian(nuEff(), U)
- fvc::div(nuEff()*dev(T(fvc::grad(U))))
);
}

The code for the deviatoric part (dev()) is equal to dev2. The only difference is the factor 2/3 which is introduced by
the divergence term as shown before.

I hope everything is clear now and that there are no mistakes.


Additionally I hope it makes stuff clearer and help anybody to get a better understanding how things work.

Kind regards

Thanks to Alexander Vakhrushev for all support!

Dear Tobias,

I suppose that a deviatoric tensor should be trace-free, while you have added the trace to the original tensor in the following
part:

Please correct me if I am wrong!!

Thanks,
Syavash

Like

PAGE 1 OF 4 1 2 3 > Last »

Tags Edit Tags

None

Quick Reply

16 of 17 2/8/19, 9:00 AM
Calculating divDevReff -- CFD Online Discussion ... https://www.cfd-online.com/Forums/openfoam-sol...

Quick Reply

Message:

Please click one of the Quick Reply icons in the posts above to activate Quick Reply.

Options

Quote message in reply?

Post Quick Reply Go Advanced

« Previous Thread | Next Thread »

Posting Rules

You may post new threads


You may post replies
You may post attachments
You may edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On Forum Jump
Forum Rules OpenFOAM Running, Solving & CFD Go

Similar Threads
Thread Thread Starter Forum Replies Last Post

Calculating Vorticity David CFX 28 October 29, 2017 18:02

Calculating Drag Ajay Rao FLUENT 8 February 15, 2010 09:15

what is Fluent calculating? tomek FLUENT 1 July 24, 2006 17:52

errors in calculating ustcer FLUENT 1 April 4, 2004 13:08

Calculating Coefficients shabah CFX 2 June 18, 2001 23:59

All times are GMT -5. The time now is 08:49.

Contact Us - CFD Online - Privacy Statement - Top

 
© CFD Online

17 of 17 2/8/19, 9:00 AM