1 /*---------------------------------------------------------------------------*\
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
5 \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
7 -------------------------------------------------------------------------------
9 This file is part of OpenFOAM.
11 OpenFOAM is free software; you can redistribute it and/or modify it
12 under the terms of the GNU General Public License as published by the
13 Free Software Foundation; either version 2 of the License, or (at your
14 option) any later version.
16 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21 You should have received a copy of the GNU General Public License
22 along with OpenFOAM; if not, write to the Free Software Foundation,
23 Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 \*---------------------------------------------------------------------------*/
27 #include "LaunderSharmaKE.H"
28 #include "addToRunTimeSelectionTable.H"
30 #include "backwardsCompatibilityWallFunctions.H"
32 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
36 namespace compressible
41 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
43 defineTypeNameAndDebug(LaunderSharmaKE, 0);
44 addToRunTimeSelectionTable(RASModel, LaunderSharmaKE, dictionary);
46 // * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
48 tmp<volScalarField> LaunderSharmaKE::fMu() const
50 return exp(-3.4/sqr(scalar(1) + rho_*sqr(k_)/(mu()*epsilon_)/50.0));
54 tmp<volScalarField> LaunderSharmaKE::f2() const
58 - 0.3*exp(-min(sqr(rho_*sqr(k_)/(mu()*epsilon_)), scalar(50.0)));
62 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
64 LaunderSharmaKE::LaunderSharmaKE
66 const volScalarField& rho,
67 const volVectorField& U,
68 const surfaceScalarField& phi,
69 const basicThermo& thermophysicalModel
72 RASModel(typeName, rho, U, phi, thermophysicalModel),
76 dimensioned<scalar>::lookupOrAddToDict
85 dimensioned<scalar>::lookupOrAddToDict
94 dimensioned<scalar>::lookupOrAddToDict
103 dimensioned<scalar>::lookupOrAddToDict
112 dimensioned<scalar>::lookupOrAddToDict
121 dimensioned<scalar>::lookupOrAddToDict
130 dimensioned<scalar>::lookupOrAddToDict
164 mut_(rho_*Cmu_*fMu()*sqr(k_)/(epsilon_ + epsilonSmall_)),
176 autoCreateAlphat("alphat", mesh_)
180 alphat_.correctBoundaryConditions();
186 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
188 tmp<volSymmTensorField> LaunderSharmaKE::R() const
190 return tmp<volSymmTensorField>
192 new volSymmTensorField
202 ((2.0/3.0)*I)*k_ - (mut_/rho_)*dev(twoSymm(fvc::grad(U_))),
203 k_.boundaryField().types()
209 tmp<volSymmTensorField> LaunderSharmaKE::devRhoReff() const
211 return tmp<volSymmTensorField>
213 new volSymmTensorField
223 -muEff()*dev(twoSymm(fvc::grad(U_)))
229 tmp<fvVectorMatrix> LaunderSharmaKE::divDevRhoReff(volVectorField& U) const
233 - fvm::laplacian(muEff(), U) - fvc::div(muEff()*dev2(fvc::grad(U)().T()))
238 bool LaunderSharmaKE::read()
240 if (RASModel::read())
242 Cmu_.readIfPresent(coeffDict());
243 C1_.readIfPresent(coeffDict());
244 C2_.readIfPresent(coeffDict());
245 C3_.readIfPresent(coeffDict());
246 sigmak_.readIfPresent(coeffDict());
247 sigmaEps_.readIfPresent(coeffDict());
248 Prt_.readIfPresent(coeffDict());
259 void LaunderSharmaKE::correct()
263 // Re-calculate viscosity
264 mut_ == rho_*Cmu_*fMu()*sqr(k_)/(epsilon_ + epsilonSmall_);
266 // Re-calculate thermal diffusivity
268 alphat_.correctBoundaryConditions();
275 // Calculate parameters and coefficients for Launder-Sharma low-Reynolds
278 volScalarField E = 2.0*mu()*mut_*fvc::magSqrGradGrad(U_)/rho_;
279 volScalarField D = 2.0*mu()*magSqr(fvc::grad(sqrt(k_)))/rho_;
281 volScalarField divU = fvc::div(phi_/fvc::interpolate(rho_));
285 divU += fvc::div(mesh_.phi());
288 tmp<volTensorField> tgradU = fvc::grad(U_);
289 volScalarField G("RASModel::G", mut_*(tgradU() && dev(twoSymm(tgradU()))));
293 // Dissipation equation
295 tmp<fvScalarMatrix> epsEqn
297 fvm::ddt(rho_, epsilon_)
298 + fvm::div(phi_, epsilon_)
299 - fvm::laplacian(DepsilonEff(), epsilon_)
301 C1_*G*epsilon_/k_ + fvm::SuSp((C3_ - 2.0/3.0*C1_)*rho_*divU, epsilon_)
302 - fvm::Sp(C2_*f2()*rho_*epsilon_/k_, epsilon_)
303 //+ 0.75*1.5*flameKproduction*epsilon_/k_
309 bound(epsilon_, epsilon0_);
312 // Turbulent kinetic energy equation
314 tmp<fvScalarMatrix> kEqn
318 - fvm::laplacian(DkEff(), k_)
320 G - fvm::SuSp(2.0/3.0*rho_*divU, k_)
321 - fvm::Sp(rho_*(epsilon_ + D)/k_, k_)
330 // Re-calculate viscosity
331 mut_ == Cmu_*fMu()*rho_*sqr(k_)/(epsilon_ + epsilonSmall_);
334 // Re-calculate thermal diffusivity
336 alphat_.correctBoundaryConditions();
340 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
342 } // End namespace RASModels
343 } // End namespace compressible
344 } // End namespace Foam
346 // ************************************************************************* //