kkLOmega.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration | Website: https://openfoam.org
5  \\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
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
13  the Free Software Foundation, either version 3 of the License, or
14  (at your option) any later version.
15 
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
19  for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
23 
24 Class
25  Foam::incompressible::RASModels::kkLOmega
26 
27 Description
28  Low Reynolds-number k-kl-omega turbulence model for
29  incompressible flows.
30 
31  This turbulence model is described in:
32  \verbatim
33  Walters, D. K., & Cokljat, D. (2008).
34  A three-equation eddy-viscosity model for Reynolds-averaged
35  Navier–Stokes simulations of transitional flow.
36  Journal of Fluids Engineering, 130(12), 121401.
37  \endverbatim
38 
39  however the paper contains several errors which must be corrected for the
40  model to operation correctly as explained in
41 
42  \verbatim
43  Furst, J. (2013).
44  Numerical simulation of transitional flows with laminar kinetic energy.
45  Engineering MECHANICS, 20(5), 379-388.
46  \endverbatim
47 
48  All these corrections and updates are included in this implementation.
49 
50  The default model coefficients are
51  \verbatim
52  kkLOmegaCoeffs
53  {
54  A0 4.04
55  As 2.12
56  Av 6.75
57  Abp 0.6
58  Anat 200
59  Ats 200
60  CbpCrit 1.2
61  Cnc 0.1
62  CnatCrit 1250
63  Cint 0.75
64  CtsCrit 1000
65  CrNat 0.02
66  C11 3.4e-6
67  C12 1.0e-10
68  CR 0.12
69  CalphaTheta 0.035
70  Css 1.5
71  CtauL 4360
72  Cw1 0.44
73  Cw2 0.92
74  Cw3 0.3
75  CwR 1.5
76  Clambda 2.495
77  CmuStd 0.09
78  Prtheta 0.85
79  Sigmak 1
80  Sigmaw 1.17
81  }
82  \endverbatim
83 
84 SourceFiles
85  kkLOmega.C
86 
87 \*---------------------------------------------------------------------------*/
88 
89 #ifndef kkLOmega_H
90 #define kkLOmega_H
91 
93 #include "eddyViscosity.H"
94 
95 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
96 
97 namespace Foam
98 {
99 namespace incompressible
100 {
101 namespace RASModels
102 {
103 
104 /*---------------------------------------------------------------------------*\
105  Class kkLOmega Declaration
106 \*---------------------------------------------------------------------------*/
108 class kkLOmega
109 :
110  public eddyViscosity<incompressible::RASModel>
111 {
112  // Private Member Functions
113 
114  tmp<volScalarField> fv(const volScalarField& Ret) const;
115 
116  tmp<volScalarField> fINT() const;
117 
118  tmp<volScalarField> fSS(const volScalarField& omega) const;
119 
120  tmp<volScalarField> Cmu(const volScalarField& S) const;
121 
122  tmp<volScalarField> BetaTS(const volScalarField& Rew) const;
123 
124  tmp<volScalarField> fTaul
125  (
126  const volScalarField& lambdaEff,
127  const volScalarField& ktL,
128  const volScalarField& omega
129  ) const;
130 
131  tmp<volScalarField> alphaT
132  (
133  const volScalarField& lambdaEff,
134  const volScalarField& fv,
135  const volScalarField& ktS
136  ) const;
137 
138  tmp<volScalarField> fOmega
139  (
140  const volScalarField& lambdaEff,
141  const volScalarField& lambdaT
142  ) const;
143 
144  tmp<volScalarField> phiBP(const volScalarField& omega) const;
145 
146  tmp<volScalarField> phiNAT
147  (
148  const volScalarField& ReOmega,
149  const volScalarField& fNatCrit
150  ) const;
151 
152  tmp<volScalarField> D(const volScalarField& k) const;
153 
154 
155 protected:
156 
157  // Protected data
158 
159  // Model coefficients
188 
189 
190  // Fields
196 
197  //- Wall distance
198  // Note: different to wall distance in parent RASModel
199  // which is for near-wall cells only
200  const volScalarField& y_;
201 
202 
203  // Protected Member Functions
204 
205  virtual void correctNut();
206 
207 
208 public:
209 
210  //- Runtime type information
211  TypeName("kkLOmega");
212 
213 
214  // Constructors
215 
216  //- Construct from components
217  kkLOmega
218  (
219  const geometricOneField& alpha,
220  const geometricOneField& rho,
221  const volVectorField& U,
222  const surfaceScalarField& alphaRhoPhi,
223  const surfaceScalarField& phi,
224  const transportModel& transport,
225  const word& propertiesName = turbulenceModel::propertiesName,
226  const word& type = typeName
227  );
228 
229 
230  //- Destructor
231  virtual ~kkLOmega()
232  {}
233 
234 
235  // Member Functions
236 
237  //- Read RASProperties dictionary
238  virtual bool read();
239 
240  //- Return the effective diffusivity for k
241  tmp<volScalarField> DkEff(const volScalarField& alphaT) const
242  {
243  return volScalarField::New
244  (
245  "DkEff",
246  alphaT/Sigmak_ + nu()
247  );
248  }
249 
250  //- Return the effective diffusivity for omega
251  tmp<volScalarField> DomegaEff(const volScalarField& alphaT) const
252  {
253  return volScalarField::New
254  (
255  "DomegaEff",
256  alphaT/Sigmaw_ + nu()
257  );
258  }
259 
260  //- Return the laminar kinetic energy
261  virtual tmp<volScalarField> kl() const
262  {
263  return kl_;
264  }
265 
266  //- Return the turbulence kinetic energy
267  virtual tmp<volScalarField> kt() const
268  {
269  return kt_;
270  }
271 
272  //- Return the turbulence specific dissipation rate
273  virtual tmp<volScalarField> omega() const
274  {
275  return omega_;
276  }
277 
278  //- Return the total fluctuation kinetic energy
279  virtual tmp<volScalarField> k() const
280  {
281  return volScalarField::New
282  (
283  "k",
284  kt_ + kl_,
285  omega_.boundaryField().types()
286  );
287  }
288 
289  //- Return the total fluctuation kinetic energy dissipation rate
290  virtual tmp<volScalarField> epsilon() const
291  {
292  return epsilon_;
293  }
294 
295  //- Validate the turbulence fields after construction
296  // Update turbulence viscosity and other derived fields as requires
297  virtual void validate();
298 
299  //- Solve the turbulence equations and correct the turbulence viscosity
300  virtual void correct();
301 };
302 
303 
304 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
305 
306 } // End namespace RASModels
307 } // End namespace incompressible
308 } // End namespace Foam
309 
310 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
311 
312 #endif
313 
314 // ************************************************************************* //
surfaceScalarField & phi
virtual tmp< volScalarField > epsilon() const
Return the total fluctuation kinetic energy dissipation rate.
Definition: kkLOmega.H:289
const Boundary & boundaryField() const
Return const-reference to the boundary field.
virtual void correct()
Solve the turbulence equations and correct the turbulence viscosity.
Definition: kkLOmega.C:600
virtual tmp< volScalarField > omega() const
Return the turbulence specific dissipation rate.
Definition: kkLOmega.H:272
Eddy viscosity turbulence model base class.
Definition: eddyViscosity.H:49
static tmp< GeometricField< scalar, fvPatchField, volMesh > > New(const word &name, const Mesh &, const dimensionSet &, const word &patchFieldType=fvPatchField< scalar >::calculatedType())
Return a temporary field constructed from name, mesh, dimensionSet.
virtual tmp< volScalarField > kl() const
Return the laminar kinetic energy.
Definition: kkLOmega.H:260
virtual tmp< volScalarField > k() const
Return the total fluctuation kinetic energy.
Definition: kkLOmega.H:278
Low Reynolds-number k-kl-omega turbulence model for incompressible flows.
Definition: kkLOmega.H:107
A class representing the concept of a GeometricField of 1 used to avoid unnecessary manipulations for...
tmp< volScalarField > DkEff(const volScalarField &alphaT) const
Return the effective diffusivity for k.
Definition: kkLOmega.H:240
static const word propertiesName
Default name of the turbulence properties dictionary.
A class for handling words, derived from string.
Definition: word.H:59
virtual bool read()
Read RASProperties dictionary.
Definition: kkLOmega.C:554
kkLOmega(const geometricOneField &alpha, const geometricOneField &rho, const volVectorField &U, const surfaceScalarField &alphaRhoPhi, const surfaceScalarField &phi, const transportModel &transport, const word &propertiesName=turbulenceModel::propertiesName, const word &type=typeName)
Construct from components.
Definition: kkLOmega.C:223
TypeName("kkLOmega")
Runtime type information.
virtual void validate()
Validate the turbulence fields after construction.
Definition: kkLOmega.C:596
virtual tmp< volScalarField > kt() const
Return the turbulence kinetic energy.
Definition: kkLOmega.H:266
U
Definition: pEqn.H:72
Base-class for all transport models used by the incompressible turbulence models. ...
fileType type(const fileName &, const bool checkVariants=true, const bool followLink=true)
Return the file type: directory or file.
Definition: POSIX.C:488
const volScalarField & y_
Wall distance.
Definition: kkLOmega.H:199
volScalarField alpha(IOobject("alpha", runTime.timeName(), mesh, IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE), lambda *max(Ua &U, zeroSensitivity))
A class for managing temporary objects.
Definition: PtrList.H:53
tmp< volScalarField > DomegaEff(const volScalarField &alphaT) const
Return the effective diffusivity for omega.
Definition: kkLOmega.H:250
volScalarField & nu
Namespace for OpenFOAM.