
[Sponsors] 
March 27, 2014, 11:50 
Modify turbulence kEpsilon for incompressible multiphase

#1 
New Member
Francisco FELIS
Join Date: Oct 2013
Location: Montpellier, France
Posts: 3
Rep Power: 3 
Hello to everyone.
I'm trying to build a modify version of the incompressible kEpsilon turbulence introducing a variable density formulation for the transport equations to describe a two phase mean flow (air+water). I'am using the twoLiquidMixingFoam as a base and I have created my personalized kepsilon model from the incompressible part. My idea is to change the ddt(k) with ddt(rho, k) and add other source terms also as a function of "rho". I'm rather new to this, but until now every problem that I have encountered I have managed to solve it by reading, reading and reading... until now: I couldn't find a way to inherit the volScalarField rho and surfaceScalarField rhoPhi to the kEpsilon class. Is there any efficient way to do that? Here is what I want: To go from this: Code:
fvm::ddt(k_) + fvm::div(phi_, k_)  fvm::laplacian(DkEff(), k_) == G  fvm::Sp(epsilon_/k_, k_) Code:
fvm::ddt(rho_, k_) + fvm::div(rhoPhi_, k_)  fvm::laplacian(rho_*DkEff(), k_) == rho*G  fvm::Sp(rho*epsilon_/k_, k_) I would really appreciate your help!  Francisco 

March 31, 2014, 12:02 

#2 
Senior Member
Kyle Mooney
Join Date: Jul 2009
Location: Amherst, MA USA  San Diego, CA USA
Posts: 285
Rep Power: 9 
Hi Francisco,
A few things: 1. When you mention inheriting a field, what you probably want to do is use a object registry lookup. Its an extremely powerful and easy thing that makes OpenFOAM super cool. If you wanted to pull in the density field, as long as its declared as a regIOobject, you can do this: Code:
volScalarField& rho = mesh().lookupObject<volScalarField>("rho") 2. Compressible turbulence models already assume a non uniform density so that might be a better place to start then the incompressible turbulence classes. 3. This whole conversation might be moot because foam 2.3 has a multiphase kEp model . http://www.openfoam.org/version2.3.0/multiphase.php Cheers! Kyle 

April 1, 2014, 06:10 

#3 
New Member
Francisco FELIS
Join Date: Oct 2013
Location: Montpellier, France
Posts: 3
Rep Power: 3 
Hello Kyle,
Thanks for your answer. Effectively I looked also into the incompressible side of the Turbulence model constructor, however, It seemed more simple to add "rho" than modify the thermophysical part to work along the Multiphase transport one. I've started also to look into the 2.3 version and the new universal turbulence models for multiphase, however I don't feel myself so "strong" in OpenFOAM for using it yet... For now, I've tried the Mesh lookup method that you mentioned and it didn't work. Here is the output: Code:
rhokEpsilon.C:144:33: error: ‘mesh’ was not declared in this scope volScalarField& rho_ = mesh().lookupObject<volScalarField>("rho"); Code:
k_ ( IOobject ( "k", runTime_.timeName(), mesh_, IOobject::NO_READ, IOobject::AUTO_WRITE ), autoCreateK("k", mesh_) ), Code:
rhokEpsilon::rhokEpsilon ( const volVectorField& U, // hoping to add rho somewhere here const surfaceScalarField& phi, transportModel& transport, const word& turbulenceModelName, const word& modelName ) : RASModel(modelName, U, phi, transport, turbulenceModelName), So, to my understanding, it seems a little more complicated... Do you have any other inside on a way to call rho into the KEpsilon class ? Many thanks in advance. Francisco 

April 1, 2014, 07:07 

#4 
Senior Member
Alexey Matveichev
Join Date: Aug 2011
Location: Nancy, France
Posts: 1,132
Rep Power: 20 
Hi,
as kEpsilon is a child of RASModel class, which in turn is a child of trubulenceModel class it has mesh_ property. So your call should be Code:
const volScalarField& rho = mesh_.lookupObject<volScalarField>("rho"); Code:
const volScalarField& rho = U_.mesh().lookupObject<volScalarField>("rho"); 

April 1, 2014, 10:36 

#5 
New Member
Francisco FELIS
Join Date: Oct 2013
Location: Montpellier, France
Posts: 3
Rep Power: 3 
Hello Alexey,
Thanks, it works like a charm! So, finally, what I've done was to change the transport model for k and epsilon to a variable density formulation, which I think is more real when the difference between rho1 and rho2 is important. Here is the final code: 1) change in the production term of k: Do you think that this form of the variable density boussinesq is good? (rho is added at the end into the equations) Code:
volScalarField G ( GName(), (((2.0/3.0)*I)*k_  2.0*nut_*(symm(fvc::grad(U_))(1.0/3.0)*I*(fvc::div(U_)))) && fvc::grad(U_) ); Code:
const volScalarField& rho_ = mesh_.lookupObject<volScalarField>("rho"); const surfaceScalarField& rhoPhi_ = mesh_.lookupObject<surfaceScalarField>("rhoPhi"); Code:
// Dissipation equation tmp<fvScalarMatrix> epsEqn ( fvm::ddt(rho_, epsilon_) + fvm::div(rhoPhi_, epsilon_)  fvm::laplacian(rho_*DepsilonEff(), epsilon_) == C1_*rho_*G*epsilon_/k_  fvm::Sp(C2_*rho_*epsilon_/k_, epsilon_) ); // Turbulent kinetic energy equation tmp<fvScalarMatrix> kEqn ( fvm::ddt(rho_, k_) + fvm::div(rhoPhi_, k_)  fvm::laplacian(rho_*DkEff(), k_) == rho_*G  fvm::Sp(rho_*epsilon_/k_, k_) ); Many thanks to everyone.  Francisco 

Tags 
kepsilon, multiphase flow, turbulence models 
Thread Tools  
Display Modes  


Similar Threads  
Thread  Thread Starter  Forum  Replies  Last Post 
multiphase turbulence  nikhil r  Main CFD Forum  0  October 5, 2013 01:36 
Discussion: Reason of Turbulence!!  Wen Long  Main CFD Forum  3  May 15, 2009 09:52 
Turbulence boundary values  lego  Main CFD Forum  0  October 24, 2002 13:47 
Is turbulence disripable by chaos?  Matthias  Main CFD Forum  9  March 27, 2001 13:04 
turbulence modeling questions  llowen  Main CFD Forum  3  September 11, 1998 04:24 