Skip to content

Commit 195dfbe

Browse files
author
Henry Weller
committed
MomentumTransportModels::k-omega model: Improved omega bounding using nutMaxCoeff
Omega lower limit bounding is now based on a maximum turbulence viscosity nut rather than a minimum omega value which improves stability and robustness of the k-omega models in case of numerical boundedness problems. The maximum nut value is calculated by multiplying the laminar viscosity by nutMaxCoeff which defaults to 1e5 but can be set by the user in the momentumTransport dictionary.
1 parent b1c6ddb commit 195dfbe

File tree

13 files changed

+81
-74
lines changed

13 files changed

+81
-74
lines changed

applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,6 @@ int main(int argc, char *argv[])
195195
refCast<const incompressible::RASModel>(turbulence());
196196

197197
omega = (1 - mask)*omega + mask*ce0*sqrt(k)/(Cmu*min(y, ybl));
198-
bound(omega, rasModel.omegaMin());
199198

200199
// Do not correct BC - G set by the wall-functions is not available
201200
// omega.correctBoundaryConditions();

src/MomentumTransportModels/incompressible/RAS/kkLOmega/kkLOmega.C

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -492,6 +492,16 @@ kkLOmega::kkLOmega
492492
1.17
493493
)
494494
),
495+
omegaMin_
496+
(
497+
dimensioned<scalar>::lookupOrAddToDict
498+
(
499+
"omegaMin",
500+
coeffDict_,
501+
dimless/dimTime,
502+
small
503+
)
504+
),
495505
kt_
496506
(
497507
IOobject
@@ -536,12 +546,13 @@ kkLOmega::kkLOmega
536546
runTime_.name(),
537547
mesh_
538548
),
539-
kt_*max(omega_, omegaMin_) + D(kl_) + D(kt_)
549+
kt_*omega_
540550
)
541551
{
542552
bound(kt_, kMin_);
543553
bound(kl_, kMin_);
544554
bound(omega_, omegaMin_);
555+
epsilon_ = kt_*omega_ + D(kl_) + D(kt_);
545556

546557
if (type == typeName)
547558
{
@@ -751,9 +762,11 @@ void kkLOmega::correct()
751762
solve(ktEqn);
752763
bound(kt_, kMin_);
753764

765+
754766
// Update total fluctuation kinetic energy dissipation rate
755767
epsilon_ = kt_*omega_ + Dl + Dt;
756768

769+
757770
// Re-calculate turbulent viscosity
758771
nut_ = nuts + nutl;
759772
nut_.correctBoundaryConditions();

src/MomentumTransportModels/incompressible/RAS/kkLOmega/kkLOmega.H

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,9 @@ protected:
192192
dimensionedScalar Sigmak_;
193193
dimensionedScalar Sigmaw_;
194194

195+
//- Lower limit for omega
196+
dimensionedScalar omegaMin_;
197+
195198

196199
// Fields
197200

src/MomentumTransportModels/momentumTransportModels/Base/kOmegaSST/kOmegaSSTBase.C

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,17 @@ namespace Foam
3636

3737
// * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * * //
3838

39+
template<class MomentumTransportModel, class BasicMomentumTransportModel>
40+
void
41+
kOmegaSST<MomentumTransportModel, BasicMomentumTransportModel>::boundOmega()
42+
{
43+
omega_ = max(omega_, k_/(this->nutMaxCoeff_*this->nu()));
44+
}
45+
46+
3947
template<class MomentumTransportModel, class BasicMomentumTransportModel>
4048
tmp<volScalarField>
41-
kOmegaSST<MomentumTransportModel, BasicMomentumTransportModel>::kOmegaSST::F1
49+
kOmegaSST<MomentumTransportModel, BasicMomentumTransportModel>::F1
4250
(
4351
const volScalarField& CDkOmega
4452
) const
@@ -68,8 +76,7 @@ kOmegaSST<MomentumTransportModel, BasicMomentumTransportModel>::kOmegaSST::F1
6876

6977
template<class MomentumTransportModel, class BasicMomentumTransportModel>
7078
tmp<volScalarField>
71-
kOmegaSST<MomentumTransportModel, BasicMomentumTransportModel>::kOmegaSST::
72-
F2() const
79+
kOmegaSST<MomentumTransportModel, BasicMomentumTransportModel>::F2() const
7380
{
7481
tmp<volScalarField> arg2 = min
7582
(
@@ -86,8 +93,7 @@ F2() const
8693

8794
template<class MomentumTransportModel, class BasicMomentumTransportModel>
8895
tmp<volScalarField>
89-
kOmegaSST<MomentumTransportModel, BasicMomentumTransportModel>::kOmegaSST::
90-
F3() const
96+
kOmegaSST<MomentumTransportModel, BasicMomentumTransportModel>::F3() const
9197
{
9298
tmp<volScalarField> arg3 = min
9399
(
@@ -100,8 +106,7 @@ F3() const
100106

101107
template<class MomentumTransportModel, class BasicMomentumTransportModel>
102108
tmp<volScalarField>
103-
kOmegaSST<MomentumTransportModel, BasicMomentumTransportModel>::kOmegaSST::
104-
F23() const
109+
kOmegaSST<MomentumTransportModel, BasicMomentumTransportModel>::F23() const
105110
{
106111
tmp<volScalarField> f23(F2());
107112

@@ -127,8 +132,6 @@ void kOmegaSST<MomentumTransportModel, BasicMomentumTransportModel>::correctNut
127132
}
128133

129134

130-
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
131-
132135
template<class MomentumTransportModel, class BasicMomentumTransportModel>
133136
void kOmegaSST<MomentumTransportModel, BasicMomentumTransportModel>::
134137
correctNut()
@@ -380,7 +383,7 @@ kOmegaSST<MomentumTransportModel, BasicMomentumTransportModel>::kOmegaSST
380383
)
381384
{
382385
bound(k_, this->kMin_);
383-
bound(omega_, this->omegaMin_);
386+
boundOmega();
384387
}
385388

386389

@@ -493,7 +496,7 @@ void kOmegaSST<MomentumTransportModel, BasicMomentumTransportModel>::correct()
493496
omegaEqn.ref().boundaryManipulate(omega_.boundaryFieldRef());
494497
solve(omegaEqn);
495498
fvConstraints.constrain(omega_);
496-
bound(omega_, this->omegaMin_);
499+
boundOmega();
497500
}
498501

499502
// Turbulent kinetic energy equation
@@ -515,6 +518,7 @@ void kOmegaSST<MomentumTransportModel, BasicMomentumTransportModel>::correct()
515518
solve(kEqn);
516519
fvConstraints.constrain(k_);
517520
bound(k_, this->kMin_);
521+
boundOmega();
518522

519523
correctNut(S2, F23);
520524
}

src/MomentumTransportModels/momentumTransportModels/Base/kOmegaSST/kOmegaSSTBase.H

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,9 @@ protected:
200200
return blend(F1, gamma1_, gamma2_);
201201
}
202202

203+
//- Bound omega
204+
void boundOmega();
205+
203206
virtual void correctNut
204207
(
205208
const volScalarField& S2,

src/MomentumTransportModels/momentumTransportModels/LES/LESModel/LESModel.C

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,14 @@ Foam::LESModel<BasicMomentumTransportModel>::LESModel
7979
)
8080
),
8181

82-
omegaMin_
82+
nutMaxCoeff_
8383
(
8484
dimensioned<scalar>::lookupOrAddToDict
8585
(
86-
"omegaMin",
86+
"nutMaxCoeff",
8787
LESDict_,
88-
dimless/dimTime,
89-
small
88+
dimless,
89+
1e5
9090
)
9191
),
9292

@@ -192,6 +192,7 @@ bool Foam::LESModel<BasicMomentumTransportModel>::read()
192192
delta_().read(LESDict_);
193193

194194
kMin_.readIfPresent(LESDict_);
195+
nutMaxCoeff_.readIfPresent(LESDict_);
195196

196197
return true;
197198
}

src/MomentumTransportModels/momentumTransportModels/LES/LESModel/LESModel.H

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ protected:
8282
//- Lower limit of k
8383
dimensionedScalar kMin_;
8484

85-
//- Lower limit for omega
86-
dimensionedScalar omegaMin_;
85+
//- Upper limit coefficient for nut
86+
dimensionedScalar nutMaxCoeff_;
8787

8888
//- Run-time selectable generalised Newtonian viscosity model
8989
autoPtr<laminarModels::generalisedNewtonianViscosityModel>
@@ -176,18 +176,6 @@ public:
176176
return coeffDict_;
177177
}
178178

179-
//- Return the lower allowable limit for k (default: small)
180-
const dimensionedScalar& kMin() const
181-
{
182-
return kMin_;
183-
}
184-
185-
//- Allow kMin to be changed
186-
dimensionedScalar& kMin()
187-
{
188-
return kMin_;
189-
}
190-
191179
//- Access function to filter width
192180
inline const volScalarField& delta() const
193181
{

src/MomentumTransportModels/momentumTransportModels/RAS/RASModel/RASModel.C

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -79,17 +79,6 @@ Foam::RASModel<BasicMomentumTransportModel>::RASModel
7979
)
8080
),
8181

82-
omegaMin_
83-
(
84-
dimensioned<scalar>::lookupOrAddToDict
85-
(
86-
"omegaMin",
87-
RASDict_,
88-
dimless/dimTime,
89-
small
90-
)
91-
),
92-
9382
nutMaxCoeff_
9483
(
9584
dimensioned<scalar>::lookupOrAddToDict
@@ -191,7 +180,7 @@ bool Foam::RASModel<BasicMomentumTransportModel>::read()
191180
coeffDict_ <<= RASDict_.optionalSubDict(type() + "Coeffs");
192181

193182
kMin_.readIfPresent(RASDict_);
194-
omegaMin_.readIfPresent(RASDict_);
183+
nutMaxCoeff_.readIfPresent(RASDict_);
195184

196185
return true;
197186
}

src/MomentumTransportModels/momentumTransportModels/RAS/RASModel/RASModel.H

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,6 @@ protected:
7575
//- Lower limit of k
7676
dimensionedScalar kMin_;
7777

78-
//- Lower limit for omega
79-
dimensionedScalar omegaMin_;
80-
8178
//- Upper limit coefficient for nut
8279
dimensionedScalar nutMaxCoeff_;
8380

@@ -163,30 +160,6 @@ public:
163160
//- Read model coefficients if they have changed
164161
virtual bool read();
165162

166-
//- Return the lower allowable limit for k (default: small)
167-
const dimensionedScalar& kMin() const
168-
{
169-
return kMin_;
170-
}
171-
172-
//- Return the lower allowable limit for omega (default: small)
173-
const dimensionedScalar& omegaMin() const
174-
{
175-
return omegaMin_;
176-
}
177-
178-
//- Allow kMin to be changed
179-
dimensionedScalar& kMin()
180-
{
181-
return kMin_;
182-
}
183-
184-
//- Allow omegaMin to be changed
185-
dimensionedScalar& omegaMin()
186-
{
187-
return omegaMin_;
188-
}
189-
190163
//- Const access to the coefficients dictionary
191164
virtual const dictionary& coeffDict() const
192165
{

src/MomentumTransportModels/momentumTransportModels/RAS/kOmega/kOmega.C

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,13 @@ namespace RASModels
3737

3838
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
3939

40+
template<class BasicMomentumTransportModel>
41+
void kOmega<BasicMomentumTransportModel>::boundOmega()
42+
{
43+
omega_ = max(omega_, k_/(this->nutMaxCoeff_*this->nu()));
44+
}
45+
46+
4047
template<class BasicMomentumTransportModel>
4148
void kOmega<BasicMomentumTransportModel>::correctNut()
4249
{
@@ -172,7 +179,7 @@ kOmega<BasicMomentumTransportModel>::kOmega
172179
)
173180
{
174181
bound(k_, this->kMin_);
175-
bound(omega_, this->omegaMin_);
182+
boundOmega();
176183

177184
if (type == typeName)
178185
{
@@ -260,7 +267,7 @@ void kOmega<BasicMomentumTransportModel>::correct()
260267
omegaEqn.ref().boundaryManipulate(omega_.boundaryFieldRef());
261268
solve(omegaEqn);
262269
fvConstraints.constrain(omega_);
263-
bound(omega_, this->omegaMin_);
270+
boundOmega();
264271

265272

266273
// Turbulent kinetic energy equation
@@ -282,6 +289,7 @@ void kOmega<BasicMomentumTransportModel>::correct()
282289
solve(kEqn);
283290
fvConstraints.constrain(k_);
284291
bound(k_, this->kMin_);
292+
boundOmega();
285293

286294
correctNut();
287295
}

0 commit comments

Comments
 (0)