37 template<
class BasicMomentumTransportModel>
50 template<
class BasicMomentumTransportModel>
60 template<
class BasicMomentumTransportModel>
69 min(
max(gammaIntEff_, scalar(0.1)), scalar(1))
74 template<
class BasicMomentumTransportModel>
88 /
max(375*Omega*nu*ReThetat_(),
sqr(deltaU_))
95 this->groupName(
"Fthetat"),
101 (1 -
sqr((gammaInt_() - 1.0/ce2_)/(1 - 1.0/ce2_)))
109 template<
class BasicMomentumTransportModel>
117 this->groupName(
"ReThetac"),
126 const scalar ReThetat = ReThetat_[celli];
133 + 120.656e-4*ReThetat
134 - 868.230e-6*
sqr(ReThetat)
135 + 696.506e-9*
pow3(ReThetat)
136 - 174.105e-12*
pow4(ReThetat)
138 ReThetat - 593.11 - 0.482*(ReThetat - 1870);
145 template<
class BasicMomentumTransportModel>
155 this->groupName(
"Flength"),
167 const scalar ReThetat = ReThetat_[celli];
173 - 119.270e-4*ReThetat
174 - 132.567e-6*
sqr(ReThetat);
176 else if (ReThetat < 596)
180 - 123.939e-2*ReThetat
181 + 194.548e-5*
sqr(ReThetat)
182 - 101.695e-8*
pow3(ReThetat);
184 else if (ReThetat < 1200)
186 Flength[celli] = 0.5 - 3
e-4*(ReThetat - 596);
190 Flength[celli] = 0.3188;
193 const scalar Fsublayer =
196 Flength[celli] = Flength[celli]*(1 - Fsublayer) + 40*Fsublayer;
203 template<
class BasicMomentumTransportModel>
216 this->groupName(
"ReThetat0"),
231 max(100*
sqrt((2.0/3.0)*
k[celli])/Us[celli], scalar(0.027))
246 const scalar lambda0 =
lambda;
250 const scalar Flambda =
265 (1173.51 - 589.428*Tu + 0.2196/
sqr(Tu))
271 const scalar Flambda =
286 331.50*
pow((Tu - 0.5658), -0.671)
287 *Flambda*nu[celli]/Us[celli];
290 lambda =
sqr(thetat)/nu[celli]*dUsds[celli];
295 maxIter =
max(maxIter, ++iter);
297 }
while (lambdaErr > lambdaErr_);
299 ReThetat0[celli] =
max(thetat*Us[celli]/nu[celli], scalar(20));
302 if (maxIter > maxLambdaIter_)
305 <<
"Number of lambda iterations exceeds maxLambdaIter("
306 << maxLambdaIter_ <<
')'<<
endl;
313 template<
class BasicMomentumTransportModel>
332 this->groupName(
"Fonset"),
333 max(Fonset2 - Fonset3, scalar(0))
340 template<
class BasicMomentumTransportModel>
362 ca1_(
"ca1", this->typeDict(
type), 2),
363 ca2_(
"ca2", this->typeDict(
type), 0.06),
364 ce1_(
"ce1", this->typeDict(
type), 1),
365 ce2_(
"ce2", this->typeDict(
type), 50),
366 cThetat_(
"cThetat", this->typeDict(
type), 0.03),
367 sigmaThetat_(
"sigmaThetat", this->typeDict(
type), 2),
368 lambdaErr_(this->typeDict(
type).lookupOrDefault(
"lambdaErr", 1
e-6)),
369 maxLambdaIter_(this->typeDict(
type).lookupOrDefault(
"maxLambdaIter", 10)),
376 this->groupName(
"ReThetat"),
377 this->runTime_.
name(),
389 this->groupName(
"gammaInt"),
390 this->runTime_.
name(),
402 this->groupName(
"gammaIntEff"),
403 this->runTime_.
name(),
414 template<
class BasicMomentumTransportModel>
419 ca1_.readIfPresent(this->typeDict());
420 ca2_.readIfPresent(this->typeDict());
421 ce1_.readIfPresent(this->typeDict());
422 ce2_.readIfPresent(this->typeDict());
423 sigmaThetat_.readIfPresent(this->typeDict());
424 cThetat_.readIfPresent(this->typeDict());
425 this->typeDict().readIfPresent(
"lambdaErr", lambdaErr_);
426 this->typeDict().readIfPresent(
"maxLambdaIter", maxLambdaIter_);
437 template<
class BasicMomentumTransportModel>
470 alpha()*
rho()*(cThetat_/t)*(1 - Fthetat)
480 Pthetat*ReThetat0(Us, dUsds, nu) -
fvm::Sp(Pthetat, ReThetat_)
484 ReThetatEqn.
ref().relax();
499 *ca1_*Flength(nu)*
S*
sqrt(gammaInt_()*Fonset(Rev, ReThetac, RT))
506 alpha()*
rho()*ca2_*Omega*Fturb*gammaInt_()
516 Pgamma -
fvm::Sp(ce1_*Pgamma, gammaInt_)
517 + Egamma -
fvm::Sp(ce2_*Egamma, gammaInt_)
521 gammaIntEqn.
ref().relax();
531 min(2*
max(Rev/(3.235*ReThetac) - 1, scalar(0))*Freattach, scalar(2))
535 gammaIntEff_ =
max(gammaInt_(), gammaSep);
539 template<
class BasicMomentumTransportModel>
542 if (!this->turbulence_)
548 correctReThetatGammaInt();
#define forAll(list, i)
Loop across all elements in list.
static fvModels & New(const word &name, const fvMesh &mesh)
Construct and return the named DemandDrivenMeshObject.
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
static tmp< DimensionedField< Type, GeoMesh, PrimitiveField > > New(const word &name, const GeoMesh &mesh, const dimensionSet &, const PrimitiveField< Type > &)
Return a temporary field constructed from name, mesh,.
Generic GeometricField class.
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
tmp< volScalarField::Internal > Flength(const volScalarField::Internal &nu) const
Empirical correlation that controls the length of the.
virtual tmp< volScalarField > F1(const volScalarField &CDkOmega) const
Modified form of the k-omega SST F1 function.
virtual void correct()
Solve the turbulence equations and correct the turbulence viscosity.
virtual tmp< volScalarField::Internal > epsilonByk(const volScalarField::Internal &F1, const volScalarField::Internal &F2) const
Modified form of the k-omega SST epsilon/k.
tmp< volScalarField::Internal > Fthetat(const volScalarField::Internal &Us, const volScalarField::Internal &Omega, const volScalarField::Internal &nu) const
Freestream blending-function.
kOmegaSSTLM(const alphaField &alpha, const rhoField &rho, const volVectorField &U, const surfaceScalarField &alphaRhoPhi, const surfaceScalarField &phi, const viscosity &viscosity, const word &type=typeName)
Construct from components.
void correctReThetatGammaInt()
Solve the turbulence equations and correct the turbulence viscosity.
tmp< volScalarField::Internal > ReThetac() const
Empirical correlation for critical Reynolds number where the.
virtual tmp< volScalarField::Internal > Pk(const volScalarField::Internal &G) const
Modified form of the k-omega SST k production rate.
tmp< volScalarField::Internal > Fonset(const volScalarField::Internal &Rev, const volScalarField::Internal &ReThetac, const volScalarField::Internal &RT) const
Transition onset location control function.
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.
virtual bool read()
Re-read model coefficients if they have changed.
Specialisation for RAS of the generic kOmegaSSTBase base class. For more information,...
Finite volume constraints.
bool constrain(fvMatrix< Type > &eqn) const
Apply constraints to an equation.
tmp< fvMatrix< Type > > source(const VolField< Type > &field) const
Return source for an equation.
virtual void correct()
Solve the turbulence equations and correct the turbulence viscosity.
virtual tmp< volScalarField::Internal > epsilonByk(const volScalarField::Internal &F1, const volScalarField::Internal &F2) const
Return epsilon/k which for standard RAS is betaStar*omega.
virtual tmp< volScalarField::Internal > Pk(const volScalarField::Internal &G) const
Return k production rate.
BasicMomentumTransportModel::alphaField alphaField
BasicMomentumTransportModel::rhoField rhoField
Convenience class to handle the input of constant rotational speed. Reads an omega entry with default...
A class for managing temporary objects.
void clear() const
If object pointer points to valid object:
T & ref() const
Return non-const reference or generate a fatal error.
Abstract base class for all fluid physical properties.
A class for handling words, derived from string.
Foam::fvConstraints & fvConstraints(Foam::fvConstraints::New(mesh))
Foam::fvModels & fvModels(Foam::fvModels::New(mesh))
dimensionedScalar lambda(viscosity->lookup("lambda"))
volScalarField alpha(IOobject("alpha", runTime.name(), mesh, IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE), lambda *max(Ua &U, zeroSensitivity))
#define WarningInFunction
Report a warning using Foam::Warning.
const dimensionedScalar G
Newtonian constant of gravitation.
tmp< VolField< typename outerProduct< vector, Type >::type > > grad(const SurfaceField< Type > &ssf)
tmp< fvMatrix< Type > > S(const Pair< tmp< volScalarField::Internal >> &, const VolField< Type > &)
tmp< fvMatrix< Type > > laplacian(const VolField< Type > &vf, const word &name)
tmp< fvMatrix< Type > > div(const surfaceScalarField &flux, const VolField< Type > &vf, const word &name)
tmp< fvMatrix< Type > > Sp(const volScalarField::Internal &, const VolField< Type > &)
tmp< fvMatrix< Type > > ddt(const VolField< Type > &vf)
void skew(pointPatchField< tensor > &, const pointPatchField< tensor > &)
dimensionedScalar exp(const dimensionedScalar &ds)
const dimensionSet & dimless
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Ostream & endl(Ostream &os)
Add newline and flush stream.
void pow4(LagrangianPatchField< scalar > &f, const LagrangianPatchField< scalar > &f1)
tensor Ry(const scalar &omega)
Rotational transformation tensor about the y-axis by omega radians.
tmp< DimensionedField< typename outerProduct< Type, Type >::type, GeoMesh, Field >> sqr(const DimensionedField< Type, GeoMesh, PrimitiveField > &df)
const dimensionSet & dimVelocity
dimensioned< Type > min(const DimensionedField< Type, GeoMesh, PrimitiveField > &df)
void symm(pointPatchField< tensor > &, const pointPatchField< tensor > &)
bool bound(volScalarField &, const dimensionedScalar &min)
Bound the given scalar field where it is below the specified min value.
void pow3(LagrangianPatchField< scalar > &f, const LagrangianPatchField< scalar > &f1)
word name(const LagrangianState state)
Return a string representation of a Lagrangian state enumeration.
tmp< DimensionedField< typename powProduct< Type, r >::type, GeoMesh, Field > > pow(const DimensionedField< Type, GeoMesh, PrimitiveField > &df, typename powProduct< Type, r >::type)
tmp< DimensionedField< scalar, GeoMesh, Field > > mag(const DimensionedField< Type, GeoMesh, PrimitiveField > &df)
void sqrt(LagrangianPatchField< scalar > &f, const LagrangianPatchField< scalar > &f1)
tmp< DimensionedField< scalar, GeoMesh, Field > > magSqr(const DimensionedField< Type, GeoMesh, PrimitiveField > &df)
dimensioned< Type > max(const DimensionedField< Type, GeoMesh, PrimitiveField > &df)
fileType type(const fileName &, const bool checkVariants=true, const bool followLink=true)
Return the file type: directory or file.
SolverPerformance< Type > solve(fvMatrix< Type > &, const word &)
Solve returning the solution statistics given convergence tolerance.