Commit f99884de authored by Henry's avatar Henry
Browse files

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.
parent 913e515f
......@@ -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
(
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
{
volScalarField gamma(this->gamma(F1));
volScalarField beta(this->beta(F1));
// Turbulent frequency equation
tmp<fvScalarMatrix> omegaEqn
(
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:
......
/*---------------------------------------------------------------------------*\
========= |
\\ / 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
// ************************************************************************* //
/*---------------------------------------------------------------------------*\
========= |
\\ / 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
// ************************************************************************* //
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment