turbulenceModels/RAS/kOmegaSSTSAS/kOmegaSSTSAS: Added the k-omega-SST-SAS model
Egorov, Y., & Menter F.R. (2008).
Development and Application of SST-SAS Model in the DESIDER Project.
Advances in Hybrid RANS-LES Modelling,
Notes on Num. Fluid Mech. And Multidisciplinary Design,
Volume 97, 261-270.
This commit is contained in:
parent
913e515fef
commit
f99884de00
6 changed files with 466 additions and 26 deletions
|
|
@ -82,6 +82,9 @@ makeRASModel(kOmega);
|
|||
#include "kOmegaSST.H"
|
||||
makeRASModel(kOmegaSST);
|
||||
|
||||
#include "kOmegaSSTSAS.H"
|
||||
makeRASModel(kOmegaSSTSAS);
|
||||
|
||||
#include "v2f.H"
|
||||
makeRASModel(v2f);
|
||||
|
||||
|
|
|
|||
|
|
@ -77,6 +77,9 @@ makeRASModel(kOmega);
|
|||
#include "kOmegaSST.H"
|
||||
makeRASModel(kOmegaSST);
|
||||
|
||||
#include "kOmegaSSTSAS.H"
|
||||
makeRASModel(kOmegaSSTSAS);
|
||||
|
||||
#include "v2f.H"
|
||||
makeRASModel(v2f);
|
||||
|
||||
|
|
|
|||
|
|
@ -154,6 +154,25 @@ tmp<fvScalarMatrix> kOmegaSST<BasicTurbulenceModel>::omegaSource() const
|
|||
}
|
||||
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
tmp<fvScalarMatrix> kOmegaSST<BasicTurbulenceModel>::Qsas
|
||||
(
|
||||
const volScalarField& S2,
|
||||
const volScalarField& gamma,
|
||||
const volScalarField& beta
|
||||
) const
|
||||
{
|
||||
return tmp<fvScalarMatrix>
|
||||
(
|
||||
new fvScalarMatrix
|
||||
(
|
||||
omega_,
|
||||
dimVolume*this->rho_.dimensions()*omega_.dimensions()/dimTime
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
|
|
@ -401,37 +420,42 @@ void kOmegaSST<BasicTurbulenceModel>::correct()
|
|||
);
|
||||
|
||||
volScalarField F1(this->F1(CDkOmega));
|
||||
volScalarField rhoGammaF1(rho*gamma(F1));
|
||||
|
||||
// Turbulent frequency equation
|
||||
tmp<fvScalarMatrix> omegaEqn
|
||||
(
|
||||
fvm::ddt(alpha, rho, omega_)
|
||||
+ fvm::div(alphaRhoPhi, omega_)
|
||||
- fvm::laplacian(alpha*rho*DomegaEff(F1), omega_)
|
||||
==
|
||||
alpha*rhoGammaF1
|
||||
*min
|
||||
{
|
||||
volScalarField gamma(this->gamma(F1));
|
||||
volScalarField beta(this->beta(F1));
|
||||
|
||||
// Turbulent frequency equation
|
||||
tmp<fvScalarMatrix> omegaEqn
|
||||
(
|
||||
GbyNu,
|
||||
(c1_/a1_)*betaStar_*omega_*max(a1_*omega_, b1_*F23()*sqrt(S2))
|
||||
)
|
||||
- fvm::SuSp((2.0/3.0)*alpha*rhoGammaF1*divU, omega_)
|
||||
- fvm::Sp(alpha*rho*beta(F1)*omega_, omega_)
|
||||
- fvm::SuSp
|
||||
(
|
||||
alpha*rho*(F1 - scalar(1))*CDkOmega/omega_,
|
||||
omega_
|
||||
)
|
||||
+ omegaSource()
|
||||
);
|
||||
fvm::ddt(alpha, rho, omega_)
|
||||
+ fvm::div(alphaRhoPhi, omega_)
|
||||
- fvm::laplacian(alpha*rho*DomegaEff(F1), omega_)
|
||||
==
|
||||
alpha*rho*gamma
|
||||
*min
|
||||
(
|
||||
GbyNu,
|
||||
(c1_/a1_)*betaStar_*omega_*max(a1_*omega_, b1_*F23()*sqrt(S2))
|
||||
)
|
||||
- fvm::SuSp((2.0/3.0)*alpha*rho*gamma*divU, omega_)
|
||||
- fvm::Sp(alpha*rho*beta*omega_, omega_)
|
||||
- fvm::SuSp
|
||||
(
|
||||
alpha*rho*(F1 - scalar(1))*CDkOmega/omega_,
|
||||
omega_
|
||||
)
|
||||
+ Qsas(S2, gamma, beta)
|
||||
+ omegaSource()
|
||||
);
|
||||
|
||||
omegaEqn().relax();
|
||||
omegaEqn().relax();
|
||||
|
||||
omegaEqn().boundaryManipulate(omega_.boundaryField());
|
||||
omegaEqn().boundaryManipulate(omega_.boundaryField());
|
||||
|
||||
solve(omegaEqn);
|
||||
bound(omega_, this->omegaMin_);
|
||||
solve(omegaEqn);
|
||||
bound(omega_, this->omegaMin_);
|
||||
}
|
||||
|
||||
// Turbulent kinetic energy equation
|
||||
tmp<fvScalarMatrix> kEqn
|
||||
|
|
|
|||
|
|
@ -214,6 +214,12 @@ protected:
|
|||
virtual void correctNut();
|
||||
virtual tmp<fvScalarMatrix> kSource() const;
|
||||
virtual tmp<fvScalarMatrix> omegaSource() const;
|
||||
virtual tmp<fvScalarMatrix> Qsas
|
||||
(
|
||||
const volScalarField& S2,
|
||||
const volScalarField& gamma,
|
||||
const volScalarField& beta
|
||||
) const;
|
||||
|
||||
|
||||
public:
|
||||
|
|
|
|||
|
|
@ -0,0 +1,204 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2015 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "kOmegaSSTSAS.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace RASModels
|
||||
{
|
||||
|
||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
tmp<fvScalarMatrix> kOmegaSSTSAS<BasicTurbulenceModel>::Qsas
|
||||
(
|
||||
const volScalarField& S2,
|
||||
const volScalarField& gamma,
|
||||
const volScalarField& beta
|
||||
) const
|
||||
{
|
||||
volScalarField L
|
||||
(
|
||||
sqrt(this->k_)/(pow025(this->betaStar_)*this->omega_)
|
||||
);
|
||||
|
||||
volScalarField Lvk
|
||||
(
|
||||
max
|
||||
(
|
||||
kappa_*sqrt(S2)
|
||||
/(
|
||||
mag(fvc::laplacian(this->U_))
|
||||
+ dimensionedScalar
|
||||
(
|
||||
"ROOTVSMALL",
|
||||
dimensionSet(0, -1, -1, 0, 0),
|
||||
ROOTVSMALL
|
||||
)
|
||||
),
|
||||
Cs_*sqrt(kappa_*zeta2_/(beta/this->betaStar_ - gamma))*delta()
|
||||
)
|
||||
);
|
||||
|
||||
return fvm::Su
|
||||
(
|
||||
this->alpha_*this->rho_
|
||||
*min
|
||||
(
|
||||
max
|
||||
(
|
||||
zeta2_*kappa_*S2*sqr(L/Lvk)
|
||||
- (2*C_/sigmaPhi_)*this->k_
|
||||
*max
|
||||
(
|
||||
magSqr(fvc::grad(this->omega_))/sqr(this->omega_),
|
||||
magSqr(fvc::grad(this->k_))/sqr(this->k_)
|
||||
),
|
||||
dimensionedScalar("0", dimensionSet(0, 0, -2, 0, 0), 0)
|
||||
),
|
||||
// Limit SAS production of omega for numerical stability,
|
||||
// particularly during start-up
|
||||
this->omega_/(0.1*this->omega_.time().deltaT())
|
||||
),
|
||||
this->omega_
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
kOmegaSSTSAS<BasicTurbulenceModel>::kOmegaSSTSAS
|
||||
(
|
||||
const alphaField& alpha,
|
||||
const rhoField& rho,
|
||||
const volVectorField& U,
|
||||
const surfaceScalarField& alphaRhoPhi,
|
||||
const surfaceScalarField& phi,
|
||||
const transportModel& transport,
|
||||
const word& propertiesName,
|
||||
const word& type
|
||||
)
|
||||
:
|
||||
kOmegaSST<BasicTurbulenceModel>
|
||||
(
|
||||
alpha,
|
||||
rho,
|
||||
U,
|
||||
alphaRhoPhi,
|
||||
phi,
|
||||
transport,
|
||||
propertiesName
|
||||
),
|
||||
|
||||
Cs_
|
||||
(
|
||||
dimensioned<scalar>::lookupOrAddToDict
|
||||
(
|
||||
"Cs",
|
||||
this->coeffDict_,
|
||||
0.11
|
||||
)
|
||||
),
|
||||
kappa_
|
||||
(
|
||||
dimensioned<scalar>::lookupOrAddToDict
|
||||
(
|
||||
"kappa",
|
||||
this->coeffDict_,
|
||||
0.41
|
||||
)
|
||||
),
|
||||
zeta2_
|
||||
(
|
||||
dimensioned<scalar>::lookupOrAddToDict
|
||||
(
|
||||
"zeta2",
|
||||
this->coeffDict_,
|
||||
3.51
|
||||
)
|
||||
),
|
||||
sigmaPhi_
|
||||
(
|
||||
dimensioned<scalar>::lookupOrAddToDict
|
||||
(
|
||||
"sigmaPhi",
|
||||
this->coeffDict_,
|
||||
2.0/3.0
|
||||
)
|
||||
),
|
||||
C_
|
||||
(
|
||||
dimensioned<scalar>::lookupOrAddToDict
|
||||
(
|
||||
"C",
|
||||
this->coeffDict_,
|
||||
2
|
||||
)
|
||||
),
|
||||
|
||||
delta_
|
||||
(
|
||||
LESdelta::New
|
||||
(
|
||||
IOobject::groupName("delta", U.group()),
|
||||
*this,
|
||||
this->coeffDict_
|
||||
)
|
||||
)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
bool kOmegaSSTSAS<BasicTurbulenceModel>::read()
|
||||
{
|
||||
if (kOmegaSST<BasicTurbulenceModel>::read())
|
||||
{
|
||||
Cs_.readIfPresent(this->coeffDict());
|
||||
kappa_.readIfPresent(this->coeffDict());
|
||||
sigmaPhi_.readIfPresent(this->coeffDict());
|
||||
zeta2_.readIfPresent(this->coeffDict());
|
||||
C_.readIfPresent(this->coeffDict());
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace RASModels
|
||||
} // End namespace Foam
|
||||
|
||||
// ************************************************************************* //
|
||||
|
|
@ -0,0 +1,200 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2015 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::RASModels::kOmegaSSTSAS
|
||||
|
||||
Group
|
||||
grpLESTurbulence
|
||||
|
||||
Description
|
||||
Scale-adaptive URAS model based on the k-omega-SST RAS model.
|
||||
|
||||
References:
|
||||
\verbatim
|
||||
Egorov, Y., & Menter F.R. (2008).
|
||||
Development and Application of SST-SAS Model in the DESIDER Project.
|
||||
Advances in Hybrid RANS-LES Modelling,
|
||||
Notes on Num. Fluid Mech. And Multidisciplinary Design,
|
||||
Volume 97, 261-270.
|
||||
\endverbatim
|
||||
|
||||
The model coefficients are
|
||||
\verbatim
|
||||
kOmegaSSTSASCoeffs
|
||||
{
|
||||
// Default SST coefficients
|
||||
alphaK1 0.85;
|
||||
alphaK2 1.0;
|
||||
alphaOmega1 0.5;
|
||||
alphaOmega2 0.856;
|
||||
beta1 0.075;
|
||||
beta2 0.0828;
|
||||
betaStar 0.09;
|
||||
gamma1 5/9;
|
||||
gamma2 0.44;
|
||||
a1 0.31;
|
||||
b1 1.0;
|
||||
c1 10.0;
|
||||
F3 no;
|
||||
|
||||
// Default SAS coefficients
|
||||
Cs 0.11;
|
||||
kappa 0.41;
|
||||
zeta2 3.51;
|
||||
sigmaPhi 2.0/3.0;
|
||||
C 2;
|
||||
|
||||
// Delta must be specified for SAS e.g.
|
||||
delta cubeRootVol;
|
||||
|
||||
cubeRootVolCoeffs
|
||||
{}
|
||||
}
|
||||
\endverbatim
|
||||
|
||||
SourceFiles
|
||||
kOmegaSSTSAS.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef kOmegaSSTSAS_H
|
||||
#define kOmegaSSTSAS_H
|
||||
|
||||
#include "kOmegaSST.H"
|
||||
#include "LESdelta.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace RASModels
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class kOmegaSSTSAS Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
class kOmegaSSTSAS
|
||||
:
|
||||
public kOmegaSST<BasicTurbulenceModel>
|
||||
{
|
||||
// Private Member Functions
|
||||
|
||||
// Disallow default bitwise copy construct and assignment
|
||||
kOmegaSSTSAS(const kOmegaSSTSAS&);
|
||||
kOmegaSSTSAS& operator=(const kOmegaSSTSAS&);
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
// Protected data
|
||||
|
||||
// Model constants
|
||||
|
||||
dimensionedScalar Cs_;
|
||||
dimensionedScalar kappa_;
|
||||
dimensionedScalar zeta2_;
|
||||
dimensionedScalar sigmaPhi_;
|
||||
dimensionedScalar C_;
|
||||
|
||||
|
||||
// Fields
|
||||
|
||||
//- Run-time selectable delta model
|
||||
autoPtr<Foam::LESdelta> delta_;
|
||||
|
||||
|
||||
// Protected Member Functions
|
||||
|
||||
//- SAS omega source
|
||||
virtual tmp<fvScalarMatrix> Qsas
|
||||
(
|
||||
const volScalarField& S2,
|
||||
const volScalarField& gamma,
|
||||
const volScalarField& beta
|
||||
) const;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
typedef typename BasicTurbulenceModel::alphaField alphaField;
|
||||
typedef typename BasicTurbulenceModel::rhoField rhoField;
|
||||
typedef typename BasicTurbulenceModel::transportModel transportModel;
|
||||
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("kOmegaSSTSAS");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
kOmegaSSTSAS
|
||||
(
|
||||
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
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~kOmegaSSTSAS()
|
||||
{}
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Re-read model coefficients if they have changed
|
||||
virtual bool read();
|
||||
|
||||
//- Access function to filter width
|
||||
inline const volScalarField& delta() const
|
||||
{
|
||||
return delta_();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace RASModels
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#ifdef NoRepository
|
||||
# include "kOmegaSSTSAS.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
Loading…
Add table
Reference in a new issue