kOmegaSSTLM.C
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) 2016-2018 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 \*---------------------------------------------------------------------------*/
25 
26 #include "kOmegaSSTLM.H"
27 
28 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
29 
30 namespace Foam
31 {
32 namespace RASModels
33 {
34 
35 // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
36 
37 template<class BasicTurbulenceModel>
38 tmp<volScalarField> kOmegaSSTLM<BasicTurbulenceModel>::F1
39 (
40  const volScalarField& CDkOmega
41 ) const
42 {
43  const volScalarField Ry(this->y_*sqrt(this->k_)/this->nu());
44  const volScalarField F3(exp(-pow(Ry/120.0, 8)));
45 
46  return max(kOmegaSST<BasicTurbulenceModel>::F1(CDkOmega), F3);
47 }
48 
49 
50 template<class BasicTurbulenceModel>
52 (
54 ) const
55 {
56  return gammaIntEff_*kOmegaSST<BasicTurbulenceModel>::Pk(G);
57 }
58 
59 
60 template<class BasicTurbulenceModel>
62 (
63  const volScalarField::Internal& F1,
64  const volScalarField::Internal& F2
65 ) const
66 {
67  return
68  min(max(gammaIntEff_, scalar(0.1)), scalar(1))
70 }
71 
72 
73 template<class BasicTurbulenceModel>
75 (
76  const volScalarField::Internal& Us,
77  const volScalarField::Internal& Omega,
78  const volScalarField::Internal& nu
79 ) const
80 {
81  const volScalarField::Internal& omega = this->omega_();
82  const volScalarField::Internal& y = this->y_();
83 
84  const volScalarField::Internal delta(375*Omega*nu*ReThetat_()*y/sqr(Us));
85  const volScalarField::Internal ReOmega(sqr(y)*omega/nu);
86  const volScalarField::Internal Fwake(exp(-sqr(ReOmega/1e5)));
87 
89  (
90  IOobject::groupName("Fthetat", this->alphaRhoPhi_.group()),
91  min
92  (
93  max
94  (
95  Fwake*exp(-pow4((y/delta))),
96  (1 - sqr((gammaInt_() - 1.0/ce2_)/(1 - 1.0/ce2_)))
97  ),
98  scalar(1)
99  )
100  );
101 }
102 
103 
104 template<class BasicTurbulenceModel>
107 {
109  (
111  (
112  IOobject::groupName("ReThetac", this->alphaRhoPhi_.group()),
113  this->mesh_,
114  dimless
115  )
116  );
117  volScalarField::Internal& ReThetac = tReThetac.ref();
118 
119  forAll(ReThetac, celli)
120  {
121  const scalar ReThetat = ReThetat_[celli];
122 
123  ReThetac[celli] =
124  ReThetat <= 1870
125  ?
126  ReThetat
127  - 396.035e-2
128  + 120.656e-4*ReThetat
129  - 868.230e-6*sqr(ReThetat)
130  + 696.506e-9*pow3(ReThetat)
131  - 174.105e-12*pow4(ReThetat)
132  :
133  ReThetat - 593.11 - 0.482*(ReThetat - 1870);
134  }
135 
136  return tReThetac;
137 }
138 
139 
140 template<class BasicTurbulenceModel>
142 (
143  const volScalarField::Internal& nu
144 ) const
145 {
147  (
149  (
150  IOobject::groupName("Flength", this->alphaRhoPhi_.group()),
151  this->mesh_,
152  dimless
153  )
154  );
155  volScalarField::Internal& Flength = tFlength.ref();
156 
157  const volScalarField::Internal& omega = this->omega_();
158  const volScalarField::Internal& y = this->y_();
159 
160  forAll(ReThetat_, celli)
161  {
162  const scalar ReThetat = ReThetat_[celli];
163 
164  if (ReThetat < 400)
165  {
166  Flength[celli] =
167  398.189e-1
168  - 119.270e-4*ReThetat
169  - 132.567e-6*sqr(ReThetat);
170  }
171  else if (ReThetat < 596)
172  {
173  Flength[celli] =
174  263.404
175  - 123.939e-2*ReThetat
176  + 194.548e-5*sqr(ReThetat)
177  - 101.695e-8*pow3(ReThetat);
178  }
179  else if (ReThetat < 1200)
180  {
181  Flength[celli] = 0.5 - 3e-4*(ReThetat - 596);
182  }
183  else
184  {
185  Flength[celli] = 0.3188;
186  }
187 
188  const scalar Fsublayer =
189  exp(-sqr(sqr(y[celli])*omega[celli]/(200*nu[celli])));
190 
191  Flength[celli] = Flength[celli]*(1 - Fsublayer) + 40*Fsublayer;
192  }
193 
194  return tFlength;
195 }
196 
197 
198 template<class BasicTurbulenceModel>
200 (
201  const volScalarField::Internal& Us,
202  const volScalarField::Internal& dUsds,
203  const volScalarField::Internal& nu
204 ) const
205 {
207  (
209  (
210  IOobject::groupName("ReThetat0", this->alphaRhoPhi_.group()),
211  this->mesh_,
212  dimless
213  )
214  );
215  volScalarField::Internal& ReThetat0 = tReThetat0.ref();
216 
217  const volScalarField& k = this->k_;
218 
219  label maxIter = 0;
220 
221  forAll(ReThetat0, celli)
222  {
223  const scalar Tu
224  (
225  max(100*sqrt((2.0/3.0)*k[celli])/Us[celli], scalar(0.027))
226  );
227 
228  // Initialize lambda to zero.
229  // If lambda were cached between time-steps convergence would be faster
230  // starting from the previous time-step value.
231  scalar lambda = 0;
232 
233  scalar lambdaErr;
234  scalar thetat;
235  label iter = 0;
236 
237  do
238  {
239  // Previous iteration lambda for convergence test
240  const scalar lambda0 = lambda;
241 
242  if (Tu <= 1.3)
243  {
244  const scalar Flambda =
245  dUsds[celli] <= 0
246  ?
247  1
248  - (
249  - 12.986*lambda
250  - 123.66*sqr(lambda)
251  - 405.689*pow3(lambda)
252  )*exp(-pow(Tu/1.5, 1.5))
253  :
254  1
255  + 0.275*(1 - exp(-35*lambda))
256  *exp(-Tu/0.5);
257 
258  thetat =
259  (1173.51 - 589.428*Tu + 0.2196/sqr(Tu))
260  *Flambda*nu[celli]
261  /Us[celli];
262  }
263  else
264  {
265  const scalar Flambda =
266  dUsds[celli] <= 0
267  ?
268  1
269  - (
270  -12.986*lambda
271  -123.66*sqr(lambda)
272  -405.689*pow3(lambda)
273  )*exp(-pow(Tu/1.5, 1.5))
274  :
275  1
276  + 0.275*(1 - exp(-35*lambda))
277  *exp(-2*Tu);
278 
279  thetat =
280  331.50*pow((Tu - 0.5658), -0.671)
281  *Flambda*nu[celli]/Us[celli];
282  }
283 
284  lambda = sqr(thetat)/nu[celli]*dUsds[celli];
285  lambda = max(min(lambda, 0.1), -0.1);
286 
287  lambdaErr = mag(lambda - lambda0);
288 
289  maxIter = max(maxIter, ++iter);
290 
291  } while (lambdaErr > lambdaErr_);
292 
293  ReThetat0[celli] = max(thetat*Us[celli]/nu[celli], scalar(20));
294  }
295 
296  if (maxIter > maxLambdaIter_)
297  {
299  << "Number of lambda iterations exceeds maxLambdaIter("
300  << maxLambdaIter_ << ')'<< endl;
301  }
302 
303  return tReThetat0;
304 }
305 
306 
307 template<class BasicTurbulenceModel>
309 (
310  const volScalarField::Internal& Rev,
311  const volScalarField::Internal& ReThetac,
312  const volScalarField::Internal& RT
313 ) const
314 {
315  const volScalarField::Internal Fonset1(Rev/(2.193*ReThetac));
316 
317  const volScalarField::Internal Fonset2
318  (
319  min(max(Fonset1, pow4(Fonset1)), scalar(2))
320  );
321 
322  const volScalarField::Internal Fonset3(max(1 - pow3(RT/2.5), scalar(0)));
323 
325  (
326  IOobject::groupName("Fonset", this->alphaRhoPhi_.group()),
327  max(Fonset2 - Fonset3, scalar(0))
328  );
329 }
330 
331 
332 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
333 
334 template<class BasicTurbulenceModel>
336 (
337  const alphaField& alpha,
338  const rhoField& rho,
339  const volVectorField& U,
340  const surfaceScalarField& alphaRhoPhi,
341  const surfaceScalarField& phi,
342  const transportModel& transport,
343  const word& propertiesName,
344  const word& type
345 )
346 :
348  (
349  alpha,
350  rho,
351  U,
352  alphaRhoPhi,
353  phi,
354  transport,
355  propertiesName
356  ),
357 
358  ca1_
359  (
361  (
362  "ca1",
363  this->coeffDict_,
364  2
365  )
366  ),
367  ca2_
368  (
370  (
371  "ca2",
372  this->coeffDict_,
373  0.06
374  )
375  ),
376  ce1_
377  (
379  (
380  "ce1",
381  this->coeffDict_,
382  1
383  )
384  ),
385  ce2_
386  (
388  (
389  "ce2",
390  this->coeffDict_,
391  50
392  )
393  ),
394  cThetat_
395  (
397  (
398  "cThetat",
399  this->coeffDict_,
400  0.03
401  )
402  ),
403  sigmaThetat_
404  (
406  (
407  "sigmaThetat",
408  this->coeffDict_,
409  2
410  )
411  ),
412  lambdaErr_
413  (
414  this->coeffDict_.lookupOrDefault("lambdaErr", 1e-6)
415  ),
416  maxLambdaIter_
417  (
418  this->coeffDict_.lookupOrDefault("maxLambdaIter", 10)
419  ),
420  deltaU_("deltaU", dimVelocity, small),
421 
422  ReThetat_
423  (
424  IOobject
425  (
426  IOobject::groupName("ReThetat", alphaRhoPhi.group()),
427  this->runTime_.timeName(),
428  this->mesh_,
431  ),
432  this->mesh_
433  ),
434 
435  gammaInt_
436  (
437  IOobject
438  (
439  IOobject::groupName("gammaInt", alphaRhoPhi.group()),
440  this->runTime_.timeName(),
441  this->mesh_,
444  ),
445  this->mesh_
446  ),
447 
448  gammaIntEff_
449  (
450  IOobject
451  (
452  IOobject::groupName("gammaIntEff", alphaRhoPhi.group()),
453  this->runTime_.timeName(),
454  this->mesh_
455  ),
456  this->mesh_,
458  )
459 {}
460 
461 
462 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
463 
464 template<class BasicTurbulenceModel>
466 {
468  {
469  ca1_.readIfPresent(this->coeffDict());
470  ca2_.readIfPresent(this->coeffDict());
471  ce1_.readIfPresent(this->coeffDict());
472  ce2_.readIfPresent(this->coeffDict());
473  sigmaThetat_.readIfPresent(this->coeffDict());
474  cThetat_.readIfPresent(this->coeffDict());
475  this->coeffDict().readIfPresent("lambdaErr", lambdaErr_);
476  this->coeffDict().readIfPresent("maxLambdaIter", maxLambdaIter_);
477 
478  return true;
479  }
480  else
481  {
482  return false;
483  }
484 }
485 
486 
487 template<class BasicTurbulenceModel>
489 {
490  // Local references
491  const alphaField& alpha = this->alpha_;
492  const rhoField& rho = this->rho_;
493  const surfaceScalarField& alphaRhoPhi = this->alphaRhoPhi_;
494  const volVectorField& U = this->U_;
495  const volScalarField& k = this->k_;
496  const volScalarField& omega = this->omega_;
497  const tmp<volScalarField> tnu = this->nu();
498  const volScalarField::Internal& nu = tnu()();
499  const volScalarField::Internal& y = this->y_();
500  fv::options& fvOptions(fv::options::New(this->mesh_));
501 
502  // Fields derived from the velocity gradient
503  tmp<volTensorField> tgradU = fvc::grad(U);
504  const volScalarField::Internal Omega(sqrt(2*magSqr(skew(tgradU()()))));
505  const volScalarField::Internal S(sqrt(2*magSqr(symm(tgradU()()))));
506  const volScalarField::Internal Us(max(mag(U()), deltaU_));
507  const volScalarField::Internal dUsds((U() & (U() & tgradU()()))/sqr(Us));
508  tgradU.clear();
509 
510  const volScalarField::Internal Fthetat(this->Fthetat(Us, Omega, nu));
511 
512  {
513  const volScalarField::Internal t(500*nu/sqr(Us));
514  const volScalarField::Internal Pthetat
515  (
516  alpha()*rho()*(cThetat_/t)*(1 - Fthetat)
517  );
518 
519  // Transition onset momentum-thickness Reynolds number equation
520  tmp<fvScalarMatrix> ReThetatEqn
521  (
522  fvm::ddt(alpha, rho, ReThetat_)
523  + fvm::div(alphaRhoPhi, ReThetat_)
524  - fvm::laplacian(alpha*rho*DReThetatEff(), ReThetat_)
525  ==
526  Pthetat*ReThetat0(Us, dUsds, nu) - fvm::Sp(Pthetat, ReThetat_)
527  + fvOptions(alpha, rho, ReThetat_)
528  );
529 
530  ReThetatEqn.ref().relax();
531  fvOptions.constrain(ReThetatEqn.ref());
532  solve(ReThetatEqn);
533  fvOptions.correct(ReThetat_);
534  bound(ReThetat_, 0);
535  }
536 
537  const volScalarField::Internal ReThetac(this->ReThetac());
538  const volScalarField::Internal Rev(sqr(y)*S/nu);
539  const volScalarField::Internal RT(k()/(nu*omega()));
540 
541  {
542  const volScalarField::Internal Pgamma
543  (
544  alpha()*rho()
545  *ca1_*Flength(nu)*S*sqrt(gammaInt_()*Fonset(Rev, ReThetac, RT))
546  );
547 
548  const volScalarField::Internal Fturb(exp(-pow4(0.25*RT)));
549 
550  const volScalarField::Internal Egamma
551  (
552  alpha()*rho()*ca2_*Omega*Fturb*gammaInt_()
553  );
554 
555  // Intermittency equation
556  tmp<fvScalarMatrix> gammaIntEqn
557  (
558  fvm::ddt(alpha, rho, gammaInt_)
559  + fvm::div(alphaRhoPhi, gammaInt_)
560  - fvm::laplacian(alpha*rho*DgammaIntEff(), gammaInt_)
561  ==
562  Pgamma - fvm::Sp(ce1_*Pgamma, gammaInt_)
563  + Egamma - fvm::Sp(ce2_*Egamma, gammaInt_)
564  + fvOptions(alpha, rho, gammaInt_)
565  );
566 
567  gammaIntEqn.ref().relax();
568  fvOptions.constrain(gammaIntEqn.ref());
569  solve(gammaIntEqn);
570  fvOptions.correct(gammaInt_);
571  bound(gammaInt_, 0);
572  }
573 
574  const volScalarField::Internal Freattach(exp(-pow4(RT/20.0)));
575  const volScalarField::Internal gammaSep
576  (
577  min(2*max(Rev/(3.235*ReThetac) - 1, scalar(0))*Freattach, scalar(2))
578  *Fthetat
579  );
580 
581  gammaIntEff_ = max(gammaInt_(), gammaSep);
582 }
583 
584 
585 template<class BasicTurbulenceModel>
587 {
588  if (!this->turbulence_)
589  {
590  return;
591  }
592 
593  // Correct ReThetat and gammaInt
594  correctReThetatGammaInt();
595 
596  // Correct k and omega
598 }
599 
600 
601 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
602 
603 } // End namespace RASModels
604 } // End namespace Foam
605 
606 // ************************************************************************* //
scalar delta
tmp< GeometricField< typename outerProduct< vector, Type >::type, fvPatchField, volMesh >> grad(const GeometricField< Type, fvsPatchField, surfaceMesh > &ssf)
Definition: fvcGrad.C:52
BasicTurbulenceModel::transportModel transportModel
Definition: kOmegaSST.H:70
#define forAll(list, i)
Loop across all elements in list.
Definition: UList.H:434
static dimensioned< Type > lookupOrAddToDict(const word &, dictionary &, const dimensionSet &dims=dimless, const Type &defaultValue=pTraits< Type >::zero)
Construct from dictionary, with default value.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Definition: label.H:59
void clear() const
If object pointer points to valid object:
Definition: tmpI.H:230
fv::options & fvOptions
static tmp< DimensionedField< Type, GeoMesh > > New(const word &name, const Mesh &mesh, const dimensionSet &)
Return a temporary field constructed from name, mesh.
BasicTurbulenceModel::rhoField rhoField
Definition: kOmegaSST.H:69
surfaceScalarField & phi
virtual void correct()
Solve the turbulence equations and correct the turbulence viscosity.
tmp< volScalarField::Internal > ReThetat0(const volScalarField::Internal &Us, const volScalarField::Internal &dUsds, const volScalarField::Internal &nu) const
Return the transition onset momentum-thickness Reynolds number.
Definition: kOmegaSSTLM.C:200
dimensioned< Type > max(const dimensioned< Type > &, const dimensioned< Type > &)
kOmegaSSTLM(const alphaField &alpha, const rhoField &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: kOmegaSSTLM.C:336
dimensionedTensor skew(const dimensionedTensor &dt)
void correct(GeometricField< Type, fvPatchField, volMesh > &field)
Apply correction to field.
T & ref() const
Return non-const reference or generate a fatal error.
Definition: tmpI.H:174
dimensionedSymmTensor sqr(const dimensionedVector &dv)
dimensionedScalar sqrt(const dimensionedScalar &ds)
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:256
label k
Boltzmann constant.
tmp< fvMatrix< Type > > Sp(const volScalarField::Internal &, const GeometricField< Type, fvPatchField, volMesh > &)
Finite-volume options.
Definition: fvOptions.H:52
DimensionedField< scalar, volMesh > Internal
Type of the internal field from which this GeometricField is derived.
virtual tmp< volScalarField::Internal > epsilonByk(const volScalarField::Internal &F1, const volScalarField::Internal &F2) const
Modified form of the k-omega SST epsilon/k.
Definition: kOmegaSSTLM.C:62
tmp< volScalarField::Internal > ReThetac() const
Empirical correlation for critical Reynolds number where the.
Definition: kOmegaSSTLM.C:106
scalar y
dimensionedScalar exp(const dimensionedScalar &ds)
#define F3(B, C, D)
Definition: SHA1.C:175
A class for handling words, derived from string.
Definition: word.H:59
static word groupName(Name name, const word &group)
tmp< fvMatrix< Type > > ddt(const GeometricField< Type, fvPatchField, volMesh > &vf)
Definition: fvmDdt.C:46
virtual void correct()
Solve the turbulence equations and correct the turbulence viscosity.
Definition: kOmegaSSTLM.C:586
Specialisation for RAS of the generic kOmegaSSTBase base class. For more information, see Description of kOmegaSSTBase.H.
Definition: kOmegaSST.H:57
void constrain(fvMatrix< Type > &eqn)
Apply constraints to equation.
dimensioned< scalar > magSqr(const dimensioned< Type > &)
virtual bool read()
Re-read model coefficients if they have changed.
Definition: kOmegaSSTLM.C:465
tmp< fvMatrix< Type > > div(const surfaceScalarField &flux, const GeometricField< Type, fvPatchField, volMesh > &vf, const word &name)
Definition: fvmDiv.C:46
tmp< volScalarField::Internal > Fonset(const volScalarField::Internal &Rev, const volScalarField::Internal &ReThetac, const volScalarField::Internal &RT) const
Transition onset location control function.
Definition: kOmegaSSTLM.C:309
tmp< volScalarField::Internal > Flength(const volScalarField::Internal &nu) const
Empirical correlation that controls the length of the.
Definition: kOmegaSSTLM.C:142
dimensioned< Type > min(const dimensioned< Type > &, const dimensioned< Type > &)
virtual tmp< volScalarField::Internal > Pk(const volScalarField::Internal &G) const
Return k production rate.
tensor Ry(const scalar &omega)
Rotational transformation tensor about the y-axis by omega radians.
Definition: transform.H:95
dimensionedScalar pow(const dimensionedScalar &ds, const dimensionedScalar &expt)
dimensionedScalar pow3(const dimensionedScalar &ds)
U
Definition: pEqn.H:72
const dimensionSet dimless(0, 0, 0, 0, 0, 0, 0)
Definition: dimensionSets.H:47
volScalarField & bound(volScalarField &, const dimensionedScalar &lowerBound)
Bound the given scalar field if it has gone unbounded.
Definition: bound.C:33
#define WarningInFunction
Report a warning using Foam::Warning.
dimensionedSymmTensor symm(const dimensionedSymmTensor &dt)
dimensioned< scalar > dimensionedScalar
Dimensioned scalar obtained from generic dimensioned type.
tmp< fvMatrix< Type > > laplacian(const GeometricField< Type, fvPatchField, volMesh > &vf, const word &name)
Definition: fvmLaplacian.C:46
dimensionedScalar pow4(const dimensionedScalar &ds)
dimensionedScalar lambda(laminarTransport.lookup("lambda"))
SolverPerformance< Type > solve(fvMatrix< Type > &, const word &)
Solve returning the solution statistics given convergence tolerance.
dimensioned< scalar > mag(const dimensioned< Type > &)
void correctReThetatGammaInt()
Solve the turbulence equations and correct the turbulence viscosity.
Definition: kOmegaSSTLM.C:488
const doubleScalar e
Elementary charge.
Definition: doubleScalar.H:98
virtual tmp< volScalarField::Internal > epsilonByk(const volScalarField::Internal &F1, const volScalarField::Internal &F2) const
Return epsilon/k which for standard RAS is betaStar*omega.
volScalarField alpha(IOobject("alpha", runTime.timeName(), mesh, IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE), lambda *max(Ua &U, zeroSensitivity))
tmp< volScalarField::Internal > Fthetat(const volScalarField::Internal &Us, const volScalarField::Internal &Omega, const volScalarField::Internal &nu) const
Freestream blending-function.
Definition: kOmegaSSTLM.C:75
A class for managing temporary objects.
Definition: PtrList.H:53
static options & New(const fvMesh &mesh)
Construct fvOptions and register to datbase if not present.
Definition: fvOptions.C:101
BasicTurbulenceModel::alphaField alphaField
Definition: kOmegaSST.H:68
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
Definition: IOobject.H:92
virtual tmp< volScalarField > F1(const volScalarField &CDkOmega) const
Modified form of the k-omega SST F1 function.
Definition: kOmegaSSTLM.C:39
volScalarField & nu
Namespace for OpenFOAM.
const dimensionSet dimVelocity
virtual tmp< volScalarField::Internal > Pk(const volScalarField::Internal &G) const
Modified form of the k-omega SST k production rate.
Definition: kOmegaSSTLM.C:52