mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
CONTRIBUTION: Turbulence - new kOmegaSST DES, DDES and IDDES model variants
- Initial code supplied by CFD Software E+F GmbH - Refactored and integrated into the new templated Turbulence structure by OpenCFD References: - kOmegaSSTDES model: Strelets, M. (2001) Detached Eddy Simulation of Massively Separated Flows, 39th AIAA Aerospace Sciences Meeting and Exhibit, Reno, NV - kOmegaSSTDDES model: Gritskevich, M.S., Garbaruk, A.V., Schuetze, J., Menter, F.R. (2011) Development of DDES and IDDES Formulations for the k-omega Shear Stress Transport Model, Flow, Turbulence and Combustion, pp. 1-19 - kOmegaSSTIDDES model: Gritskevich, M.S., Garbaruk, A.V., Schuetze, J., Menter, F.R. (2011) Development of DDES and IDDES Formulations for the k-omega Shear Stress Transport Model, Flow, Turbulence and Combustion, pp. 1-19
This commit is contained in:
@ -129,5 +129,14 @@ makeLESModel(SpalartAllmarasIDDES);
|
||||
#include "DeardorffDiffStress.H"
|
||||
makeLESModel(DeardorffDiffStress);
|
||||
|
||||
#include "kOmegaSSTDES.H"
|
||||
makeLESModel(kOmegaSSTDES);
|
||||
|
||||
#include "kOmegaSSTDDES.H"
|
||||
makeLESModel(kOmegaSSTDDES);
|
||||
|
||||
#include "kOmegaSSTIDDES.H"
|
||||
makeLESModel(kOmegaSSTIDDES);
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -121,5 +121,14 @@ makeLESModel(SpalartAllmarasIDDES);
|
||||
#include "DeardorffDiffStress.H"
|
||||
makeLESModel(DeardorffDiffStress);
|
||||
|
||||
#include "kOmegaSSTDES.H"
|
||||
makeLESModel(kOmegaSSTDES);
|
||||
|
||||
#include "kOmegaSSTDDES.H"
|
||||
makeLESModel(kOmegaSSTDDES);
|
||||
|
||||
#include "kOmegaSSTIDDES.H"
|
||||
makeLESModel(kOmegaSSTIDDES);
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -0,0 +1,173 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / 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 "kOmegaSSTDDES.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace LESModels
|
||||
{
|
||||
|
||||
// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
tmp<volScalarField> kOmegaSSTDDES<BasicTurbulenceModel>::rd
|
||||
(
|
||||
const volScalarField& nur,
|
||||
const volScalarField& magGradU
|
||||
) const
|
||||
{
|
||||
tmp<volScalarField> tr
|
||||
(
|
||||
min
|
||||
(
|
||||
nur
|
||||
/(
|
||||
max
|
||||
(
|
||||
magGradU,
|
||||
dimensionedScalar("SMALL", magGradU.dimensions(), SMALL)
|
||||
)
|
||||
*sqr(this->kappa_*this->y_)
|
||||
),
|
||||
scalar(10)
|
||||
)
|
||||
);
|
||||
tr().boundaryField() == 0.0;
|
||||
|
||||
return tr;
|
||||
}
|
||||
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
tmp<volScalarField> kOmegaSSTDDES<BasicTurbulenceModel>::fd
|
||||
(
|
||||
const volScalarField& magGradU
|
||||
) const
|
||||
{
|
||||
return 1 - tanh(pow(cd1_*rd(this->nuEff(), magGradU), cd2_));
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
tmp<volScalarField> kOmegaSSTDDES<BasicTurbulenceModel>::dTilda
|
||||
(
|
||||
const volScalarField& magGradU,
|
||||
const volScalarField& CDES
|
||||
) const
|
||||
{
|
||||
const volScalarField& k = this->k_;
|
||||
const volScalarField& omega = this->omega_;
|
||||
|
||||
const volScalarField lRAS(sqrt(k)/(this->betaStar_*omega));
|
||||
const volScalarField lLES(CDES*this->delta());
|
||||
const dimensionedScalar d0("SMALL", dimLength, SMALL);
|
||||
|
||||
return max(lRAS - fd(magGradU)*max(lRAS - lLES, d0), d0);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
kOmegaSSTDDES<BasicTurbulenceModel>::kOmegaSSTDDES
|
||||
(
|
||||
const alphaField& alpha,
|
||||
const rhoField& rho,
|
||||
const volVectorField& U,
|
||||
const surfaceScalarField& alphaRhoPhi,
|
||||
const surfaceScalarField& phi,
|
||||
const transportModel& transport,
|
||||
const word& propertiesName,
|
||||
const word& type
|
||||
)
|
||||
:
|
||||
kOmegaSSTDES<BasicTurbulenceModel>
|
||||
(
|
||||
alpha,
|
||||
rho,
|
||||
U,
|
||||
alphaRhoPhi,
|
||||
phi,
|
||||
transport,
|
||||
propertiesName,
|
||||
type
|
||||
),
|
||||
|
||||
cd1_
|
||||
(
|
||||
dimensioned<scalar>::lookupOrAddToDict
|
||||
(
|
||||
"cd1",
|
||||
this->coeffDict_,
|
||||
20
|
||||
)
|
||||
),
|
||||
cd2_
|
||||
(
|
||||
dimensioned<scalar>::lookupOrAddToDict
|
||||
(
|
||||
"cd2",
|
||||
this->coeffDict_,
|
||||
3
|
||||
)
|
||||
)
|
||||
{
|
||||
if (type == typeName)
|
||||
{
|
||||
this->printCoeffs(type);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
bool kOmegaSSTDDES<BasicTurbulenceModel>::read()
|
||||
{
|
||||
if (kOmegaSSTDES<BasicTurbulenceModel>::read())
|
||||
{
|
||||
cd1_.readIfPresent(this->coeffDict());
|
||||
cd2_.readIfPresent(this->coeffDict());
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace LESModels
|
||||
} // End namespace Foam
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,154 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / 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::LESModels::kOmegaSSTDDES
|
||||
|
||||
Group
|
||||
grpDESTurbulence
|
||||
|
||||
Description
|
||||
k-omega-SST DDES turbulence model for incompressible and compressible flows
|
||||
|
||||
Reference:
|
||||
\verbatim
|
||||
Gritskevich, M.S., Garbaruk, A.V., Schuetze, J., Menter, F.R. (2011)
|
||||
Development of DDES and IDDES Formulations for the k-omega
|
||||
Shear Stress Transport Model, Flow, Turbulence and Combustion,
|
||||
pp. 1-19
|
||||
\endverbatim
|
||||
|
||||
SourceFiles
|
||||
kOmegaSSTDDES.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef kOmegaSSTDDES_H
|
||||
#define kOmegaSSTDDES_H
|
||||
|
||||
#include "kOmegaSSTDES.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace LESModels
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class kOmegaSSTDDES Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
class kOmegaSSTDDES
|
||||
:
|
||||
public kOmegaSSTDES<BasicTurbulenceModel>
|
||||
{
|
||||
// Private Member Functions
|
||||
|
||||
tmp<volScalarField> rd
|
||||
(
|
||||
const volScalarField& nur,
|
||||
const volScalarField& magGradU
|
||||
) const;
|
||||
|
||||
tmp<volScalarField> fd(const volScalarField& magGradU) const;
|
||||
|
||||
// Disallow default bitwise copy construct and assignment
|
||||
kOmegaSSTDDES(const kOmegaSSTDDES&);
|
||||
kOmegaSSTDDES& operator=(const kOmegaSSTDDES&);
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
// Protected data
|
||||
|
||||
// Model coefficients
|
||||
|
||||
dimensionedScalar cd1_;
|
||||
dimensionedScalar cd2_;
|
||||
|
||||
|
||||
// Protected Member Functions
|
||||
|
||||
//- Length scale
|
||||
virtual tmp<volScalarField> dTilda
|
||||
(
|
||||
const volScalarField& magGradU,
|
||||
const volScalarField& CDES
|
||||
) const;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
typedef typename BasicTurbulenceModel::alphaField alphaField;
|
||||
typedef typename BasicTurbulenceModel::rhoField rhoField;
|
||||
typedef typename BasicTurbulenceModel::transportModel transportModel;
|
||||
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("kOmegaSSTDDES");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
kOmegaSSTDDES
|
||||
(
|
||||
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 ~kOmegaSSTDDES()
|
||||
{}
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Re-read model coefficients if they have changed
|
||||
virtual bool read();
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace LESModels
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
#ifdef NoRepository
|
||||
# include "kOmegaSSTDDES.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,289 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / 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 "kOmegaSSTDES.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace LESModels
|
||||
{
|
||||
|
||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
void kOmegaSSTDES<BasicTurbulenceModel>::correctNut(const volScalarField& S2)
|
||||
{
|
||||
// Correct the turbulence viscosity
|
||||
kOmegaSSTBase<DESModel<BasicTurbulenceModel> >::correctNut(S2);
|
||||
|
||||
// Correct the turbulence thermal diffusivity
|
||||
BasicTurbulenceModel::correctNut();
|
||||
}
|
||||
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
void kOmegaSSTDES<BasicTurbulenceModel>::correctNut()
|
||||
{
|
||||
correctNut(2*magSqr(symm(fvc::grad(this->U_))));
|
||||
}
|
||||
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
tmp<volScalarField> kOmegaSSTDES<BasicTurbulenceModel>::dTilda
|
||||
(
|
||||
const volScalarField& magGradU,
|
||||
const volScalarField& CDES
|
||||
) const
|
||||
{
|
||||
const volScalarField& k = this->k_;
|
||||
const volScalarField& omega = this->omega_;
|
||||
|
||||
return min(CDES*this->delta(), sqrt(k)/(this->betaStar_*omega));
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
kOmegaSSTDES<BasicTurbulenceModel>::kOmegaSSTDES
|
||||
(
|
||||
const alphaField& alpha,
|
||||
const rhoField& rho,
|
||||
const volVectorField& U,
|
||||
const surfaceScalarField& alphaRhoPhi,
|
||||
const surfaceScalarField& phi,
|
||||
const transportModel& transport,
|
||||
const word& propertiesName,
|
||||
const word& type
|
||||
)
|
||||
:
|
||||
kOmegaSSTBase<DESModel<BasicTurbulenceModel> >
|
||||
(
|
||||
type,
|
||||
alpha,
|
||||
rho,
|
||||
U,
|
||||
alphaRhoPhi,
|
||||
phi,
|
||||
transport,
|
||||
propertiesName
|
||||
),
|
||||
|
||||
kappa_
|
||||
(
|
||||
dimensioned<scalar>::lookupOrAddToDict
|
||||
(
|
||||
"kappa",
|
||||
this->coeffDict_,
|
||||
0.41
|
||||
)
|
||||
),
|
||||
CDESkom_
|
||||
(
|
||||
dimensioned<scalar>::lookupOrAddToDict
|
||||
(
|
||||
"CDESkom",
|
||||
this->coeffDict_,
|
||||
0.78
|
||||
)
|
||||
),
|
||||
CDESkeps_
|
||||
(
|
||||
dimensioned<scalar>::lookupOrAddToDict
|
||||
(
|
||||
"CDESkeps",
|
||||
this->coeffDict_,
|
||||
0.61
|
||||
)
|
||||
)
|
||||
{
|
||||
correctNut();
|
||||
|
||||
if (type == typeName)
|
||||
{
|
||||
this->printCoeffs(type);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
bool kOmegaSSTDES<BasicTurbulenceModel>::read()
|
||||
{
|
||||
if (kOmegaSSTBase<DESModel<BasicTurbulenceModel> >::read())
|
||||
{
|
||||
CDESkom_.readIfPresent(this->coeffDict());
|
||||
CDESkeps_.readIfPresent(this->coeffDict());
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
void kOmegaSSTDES<BasicTurbulenceModel>::correct()
|
||||
{
|
||||
if (!this->turbulence_)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Local references
|
||||
const alphaField& alpha = this->alpha_;
|
||||
const rhoField& rho = this->rho_;
|
||||
const surfaceScalarField& alphaRhoPhi = this->alphaRhoPhi_;
|
||||
const volVectorField& U = this->U_;
|
||||
volScalarField& k = this->k_;
|
||||
volScalarField& omega = this->omega_;
|
||||
volScalarField& nut = this->nut_;
|
||||
|
||||
DESModel<BasicTurbulenceModel>::correct();
|
||||
|
||||
volScalarField divU(fvc::div(fvc::absolute(this->phi(), U)));
|
||||
|
||||
tmp<volTensorField> tgradU = fvc::grad(U);
|
||||
volScalarField magGradU(mag(tgradU()));
|
||||
volScalarField S2(2*magSqr(symm(tgradU())));
|
||||
volScalarField GbyNu((tgradU() && dev(twoSymm(tgradU()))));
|
||||
volScalarField G(this->GName(), nut*GbyNu);
|
||||
tgradU.clear();
|
||||
|
||||
// Update omega and G at the wall
|
||||
omega.boundaryField().updateCoeffs();
|
||||
|
||||
volScalarField CDkOmega
|
||||
(
|
||||
(2*this->alphaOmega2_)*(fvc::grad(k) & fvc::grad(omega))/omega
|
||||
);
|
||||
|
||||
volScalarField F1(this->F1(CDkOmega));
|
||||
|
||||
{
|
||||
volScalarField gamma(this->gamma(F1));
|
||||
volScalarField beta(this->beta(F1));
|
||||
|
||||
// Turbulent frequency equation
|
||||
tmp<fvScalarMatrix> omegaEqn
|
||||
(
|
||||
fvm::ddt(alpha, rho, omega)
|
||||
+ fvm::div(alphaRhoPhi, omega)
|
||||
- fvm::laplacian(alpha*rho*this->DomegaEff(F1), omega)
|
||||
==
|
||||
alpha*rho*gamma*GbyNu // Using unlimited GybNu
|
||||
- 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)
|
||||
+ this->omegaSource()
|
||||
);
|
||||
|
||||
omegaEqn().relax();
|
||||
|
||||
omegaEqn().boundaryManipulate(omega.boundaryField());
|
||||
|
||||
solve(omegaEqn);
|
||||
bound(omega, this->omegaMin_);
|
||||
}
|
||||
|
||||
{
|
||||
volScalarField CDES(this->CDES(F1));
|
||||
volScalarField dTilda(this->dTilda(magGradU, CDES));
|
||||
|
||||
// Turbulent kinetic energy equation
|
||||
tmp<fvScalarMatrix> kEqn
|
||||
(
|
||||
fvm::ddt(alpha, rho, k)
|
||||
+ fvm::div(alphaRhoPhi, k)
|
||||
- fvm::laplacian(alpha*rho*this->DkEff(F1), k)
|
||||
==
|
||||
min(alpha*rho*G, (this->c1_*this->betaStar_)*alpha*rho*k*omega)
|
||||
- fvm::SuSp((2.0/3.0)*alpha*rho*divU, k)
|
||||
- fvm::Sp(alpha*rho*sqrt(k)/dTilda, k) // modified for DES
|
||||
+ this->kSource()
|
||||
);
|
||||
|
||||
kEqn().relax();
|
||||
solve(kEqn);
|
||||
bound(k, this->kMin_);
|
||||
}
|
||||
|
||||
this->correctNut(S2);
|
||||
}
|
||||
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
tmp<volScalarField> kOmegaSSTDES<BasicTurbulenceModel>::LESRegion() const
|
||||
{
|
||||
const volScalarField& k = this->k_;
|
||||
const volScalarField& omega = this->omega_;
|
||||
const volVectorField& U = this->U_;
|
||||
|
||||
const volScalarField CDkOmega
|
||||
(
|
||||
(2*this->alphaOmega2_)*(fvc::grad(k) & fvc::grad(omega))/omega
|
||||
);
|
||||
|
||||
const volScalarField F1(this->F1(CDkOmega));
|
||||
|
||||
tmp<volScalarField> tLESRegion
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"DES::LESRegion",
|
||||
this->mesh_.time().timeName(),
|
||||
this->mesh_,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
neg
|
||||
(
|
||||
dTilda
|
||||
(
|
||||
mag(fvc::grad(U)),
|
||||
F1*CDESkom_ + (1 - F1)*CDESkeps_
|
||||
)
|
||||
- sqrt(k)/(this->betaStar_*omega)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
return tLESRegion;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace LESModels
|
||||
} // End namespace Foam
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,162 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / 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::LESModels::kOmegaSSTDES
|
||||
|
||||
Group
|
||||
grpDESTurbulence
|
||||
|
||||
Description
|
||||
k-omega-SST DES turbulence model for incompressible and compressible flows
|
||||
|
||||
Reference:
|
||||
\verbatim
|
||||
Strelets, M. (2001)
|
||||
Detached Eddy Simulation of Massively Separated Flows,
|
||||
39th AIAA Aerospace Sciences Meeting and Exhibit, Reno, NV
|
||||
\endverbatim
|
||||
|
||||
SourceFiles
|
||||
kOmegaSSTDES.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef kOmegaSSTDES_H
|
||||
#define kOmegaSSTDES_H
|
||||
|
||||
#include "DESModel.H"
|
||||
#include "kOmegaSSTBase.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace LESModels
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
class kOmegaSSTDES Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
class kOmegaSSTDES
|
||||
:
|
||||
public kOmegaSSTBase<DESModel<BasicTurbulenceModel> >
|
||||
{
|
||||
// Private Member Functions
|
||||
|
||||
// Disallow default bitwise copy construct and assignment
|
||||
kOmegaSSTDES(const kOmegaSSTDES&);
|
||||
kOmegaSSTDES& operator=(const kOmegaSSTDES&);
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
// Protected data
|
||||
|
||||
// Model coefficients
|
||||
|
||||
dimensionedScalar kappa_;
|
||||
dimensionedScalar CDESkom_;
|
||||
dimensionedScalar CDESkeps_;
|
||||
|
||||
|
||||
// Protected Member Functions
|
||||
|
||||
//- Blending for CDES parameter
|
||||
virtual tmp<volScalarField> CDES(const volScalarField& F1) const
|
||||
{
|
||||
return this->blend(F1, CDESkom_, CDESkeps_);
|
||||
}
|
||||
|
||||
virtual void correctNut(const volScalarField& S2);
|
||||
virtual void correctNut();
|
||||
|
||||
//- Length scale
|
||||
virtual tmp<volScalarField> dTilda
|
||||
(
|
||||
const volScalarField& magGradU,
|
||||
const volScalarField& CDES
|
||||
) const;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
typedef typename BasicTurbulenceModel::alphaField alphaField;
|
||||
typedef typename BasicTurbulenceModel::rhoField rhoField;
|
||||
typedef typename BasicTurbulenceModel::transportModel transportModel;
|
||||
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("kOmegaSSTDES");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
kOmegaSSTDES
|
||||
(
|
||||
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 ~kOmegaSSTDES()
|
||||
{}
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Re-read model coefficients if they have changed
|
||||
virtual bool read();
|
||||
|
||||
//- Solve the turbulence equations and correct the turbulence viscosity
|
||||
virtual void correct();
|
||||
|
||||
//- Return the LES field indicator
|
||||
virtual tmp<volScalarField> LESRegion() const;
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace LESModels
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
#ifdef NoRepository
|
||||
# include "kOmegaSSTDES.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,254 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / 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 "kOmegaSSTIDDES.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace LESModels
|
||||
{
|
||||
|
||||
// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
const IDDESDelta& kOmegaSSTIDDES<BasicTurbulenceModel>::setDelta() const
|
||||
{
|
||||
if (!isA<IDDESDelta>(this->delta_()))
|
||||
{
|
||||
FatalErrorIn
|
||||
(
|
||||
"const kOmegaSSTIDDES<BasicTurbulenceModel>::setDelta() const"
|
||||
)
|
||||
<< "The delta function must be set to a " << IDDESDelta::typeName
|
||||
<< " -based model" << exit(FatalError);
|
||||
}
|
||||
|
||||
return refCast<const IDDESDelta>(this->delta_());
|
||||
}
|
||||
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
tmp<volScalarField> kOmegaSSTIDDES<BasicTurbulenceModel>::alpha() const
|
||||
{
|
||||
return max
|
||||
(
|
||||
0.25 - this->y_/static_cast<const volScalarField&>(IDDESDelta_.hmax()),
|
||||
scalar(-5)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
tmp<volScalarField> kOmegaSSTIDDES<BasicTurbulenceModel>::ft
|
||||
(
|
||||
const volScalarField& magGradU
|
||||
) const
|
||||
{
|
||||
return tanh(pow3(sqr(ct_)*rd(this->nut_, magGradU)));
|
||||
}
|
||||
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
tmp<volScalarField> kOmegaSSTIDDES<BasicTurbulenceModel>::fl
|
||||
(
|
||||
const volScalarField& magGradU
|
||||
) const
|
||||
{
|
||||
return tanh(pow(sqr(cl_)*rd(this->nu(), magGradU), 10));
|
||||
}
|
||||
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
tmp<volScalarField> kOmegaSSTIDDES<BasicTurbulenceModel>::rd
|
||||
(
|
||||
const volScalarField& nur,
|
||||
const volScalarField& magGradU
|
||||
) const
|
||||
{
|
||||
tmp<volScalarField> tr
|
||||
(
|
||||
min
|
||||
(
|
||||
nur
|
||||
/(
|
||||
max
|
||||
(
|
||||
magGradU,
|
||||
dimensionedScalar("SMALL", magGradU.dimensions(), SMALL)
|
||||
)
|
||||
*sqr(this->kappa_*this->y_)
|
||||
),
|
||||
scalar(10)
|
||||
)
|
||||
);
|
||||
tr().boundaryField() == 0.0;
|
||||
|
||||
return tr;
|
||||
}
|
||||
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
tmp<volScalarField> kOmegaSSTIDDES<BasicTurbulenceModel>::fd
|
||||
(
|
||||
const volScalarField& magGradU
|
||||
) const
|
||||
{
|
||||
return 1 - tanh(pow(cdt1_*rd(this->nuEff(), magGradU), cdt2_));
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
tmp<volScalarField> kOmegaSSTIDDES<BasicTurbulenceModel>::dTilda
|
||||
(
|
||||
const volScalarField& magGradU,
|
||||
const volScalarField& CDES
|
||||
) const
|
||||
{
|
||||
const volScalarField& k = this->k_;
|
||||
const volScalarField& omega = this->omega_;
|
||||
|
||||
const volScalarField lRAS(sqrt(k)/(this->betaStar_*omega));
|
||||
const volScalarField lLES(CDES*this->delta());
|
||||
const dimensionedScalar d0("SMALL", dimLength, SMALL);
|
||||
|
||||
const volScalarField alpha(this->alpha());
|
||||
const volScalarField expTerm(exp(sqr(alpha)));
|
||||
|
||||
tmp<volScalarField> fStep = min(2*pow(expTerm, -9.0), scalar(1));
|
||||
const volScalarField fHyb(max(1 - fd(magGradU), fStep));
|
||||
// Simplified version where fRestore = 0
|
||||
// return max(d0, fHyb*lRAS + (1 - fHyb)*lLES);
|
||||
|
||||
// Original form
|
||||
tmp<volScalarField> fHill =
|
||||
2*(pos(alpha)*pow(expTerm, -11.09) + neg(alpha)*pow(expTerm, -9.0));
|
||||
tmp<volScalarField> fAmp = 1 - max(ft(magGradU), fl(magGradU));
|
||||
tmp<volScalarField> fRestore = max(fHill - 1, scalar(0))*fAmp;
|
||||
return max(d0, fHyb*(1 + fRestore)*lRAS + (1 - fHyb)*lLES);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
kOmegaSSTIDDES<BasicTurbulenceModel>::kOmegaSSTIDDES
|
||||
(
|
||||
const alphaField& alpha,
|
||||
const rhoField& rho,
|
||||
const volVectorField& U,
|
||||
const surfaceScalarField& alphaRhoPhi,
|
||||
const surfaceScalarField& phi,
|
||||
const transportModel& transport,
|
||||
const word& propertiesName,
|
||||
const word& type
|
||||
)
|
||||
:
|
||||
kOmegaSSTDES<BasicTurbulenceModel>
|
||||
(
|
||||
alpha,
|
||||
rho,
|
||||
U,
|
||||
alphaRhoPhi,
|
||||
phi,
|
||||
transport,
|
||||
propertiesName,
|
||||
type
|
||||
),
|
||||
cdt1_
|
||||
(
|
||||
dimensioned<scalar>::lookupOrAddToDict
|
||||
(
|
||||
"cdt1",
|
||||
this->coeffDict_,
|
||||
20
|
||||
)
|
||||
),
|
||||
cdt2_
|
||||
(
|
||||
dimensioned<scalar>::lookupOrAddToDict
|
||||
(
|
||||
"cdt2",
|
||||
this->coeffDict_,
|
||||
3
|
||||
)
|
||||
),
|
||||
cl_
|
||||
(
|
||||
dimensioned<scalar>::lookupOrAddToDict
|
||||
(
|
||||
"cl",
|
||||
this->coeffDict_,
|
||||
5
|
||||
)
|
||||
),
|
||||
ct_
|
||||
(
|
||||
dimensioned<scalar>::lookupOrAddToDict
|
||||
(
|
||||
"ct",
|
||||
this->coeffDict_,
|
||||
1.87
|
||||
)
|
||||
),
|
||||
IDDESDelta_(setDelta())
|
||||
{
|
||||
if (type == typeName)
|
||||
{
|
||||
this->printCoeffs(type);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
bool kOmegaSSTIDDES<BasicTurbulenceModel>::read()
|
||||
{
|
||||
if (kOmegaSSTDES<BasicTurbulenceModel>::read())
|
||||
{
|
||||
cdt1_.readIfPresent(this->coeffDict());
|
||||
cdt2_.readIfPresent(this->coeffDict());
|
||||
cl_.readIfPresent(this->coeffDict());
|
||||
ct_.readIfPresent(this->coeffDict());
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace LESModels
|
||||
} // End namespace Foam
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,167 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / 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::LESModels::kOmegaSSTIDDES
|
||||
|
||||
Group
|
||||
grpDESTurbulence
|
||||
|
||||
Description
|
||||
k-omega-SST IDDES turbulence model for incompressible and compressible
|
||||
flows
|
||||
|
||||
Reference:
|
||||
\verbatim
|
||||
Gritskevich, M.S., Garbaruk, A.V., Schuetze, J., Menter, F.R. (2011)
|
||||
Development of DDES and IDDES Formulations for the k-omega
|
||||
Shear Stress Transport Model, Flow, Turbulence and Combustion,
|
||||
pp. 1-19
|
||||
\endverbatim
|
||||
|
||||
SourceFiles
|
||||
kOmegaSSTIDDES.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef kOmegaSSTIDDES_H
|
||||
#define kOmegaSSTIDDES_H
|
||||
|
||||
#include "kOmegaSSTDES.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace LESModels
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
class kOmegaSSTIDDES Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
template<class BasicTurbulenceModel>
|
||||
class kOmegaSSTIDDES
|
||||
:
|
||||
public kOmegaSSTDES<BasicTurbulenceModel>
|
||||
{
|
||||
// Private Member Functions
|
||||
|
||||
//- Check that the supplied delta is an IDDESDelta
|
||||
const IDDESDelta& setDelta() const;
|
||||
|
||||
tmp<volScalarField> alpha() const;
|
||||
tmp<volScalarField> ft(const volScalarField& magGradU) const;
|
||||
tmp<volScalarField> fl(const volScalarField& magGradU) const;
|
||||
|
||||
tmp<volScalarField> rd
|
||||
(
|
||||
const volScalarField& nur,
|
||||
const volScalarField& magGradU
|
||||
) const;
|
||||
|
||||
//- Delay function
|
||||
tmp<volScalarField> fd(const volScalarField& maggradU) const;
|
||||
|
||||
// Disallow default bitwise copy construct and assignment
|
||||
kOmegaSSTIDDES(const kOmegaSSTIDDES&);
|
||||
kOmegaSSTIDDES& operator=(const kOmegaSSTIDDES&);
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
// Protected data
|
||||
|
||||
// Model coefficients
|
||||
|
||||
dimensionedScalar cdt1_;
|
||||
dimensionedScalar cdt2_;
|
||||
dimensionedScalar cl_;
|
||||
dimensionedScalar ct_;
|
||||
|
||||
// Fields
|
||||
|
||||
const IDDESDelta& IDDESDelta_;
|
||||
|
||||
|
||||
//- Length scale
|
||||
virtual tmp<volScalarField> dTilda
|
||||
(
|
||||
const volScalarField& magGradU,
|
||||
const volScalarField& CDES
|
||||
) const;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
typedef typename BasicTurbulenceModel::alphaField alphaField;
|
||||
typedef typename BasicTurbulenceModel::rhoField rhoField;
|
||||
typedef typename BasicTurbulenceModel::transportModel transportModel;
|
||||
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("kOmegaSSTIDDES");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
kOmegaSSTIDDES
|
||||
(
|
||||
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 ~kOmegaSSTIDDES()
|
||||
{}
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Re-read model coefficients if they have changed
|
||||
virtual bool read();
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace LESModels
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
#ifdef NoRepository
|
||||
# include "kOmegaSSTIDDES.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -80,6 +80,17 @@ Foam::LESModel<BasicTurbulenceModel>::LESModel
|
||||
)
|
||||
),
|
||||
|
||||
omegaMin_
|
||||
(
|
||||
dimensioned<scalar>::lookupOrAddToDict
|
||||
(
|
||||
"omegaMin",
|
||||
LESDict_,
|
||||
dimless/dimTime,
|
||||
SMALL
|
||||
)
|
||||
),
|
||||
|
||||
delta_
|
||||
(
|
||||
LESdelta::New
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -78,6 +78,9 @@ protected:
|
||||
//- Lower limit of k
|
||||
dimensionedScalar kMin_;
|
||||
|
||||
//- Lower limit of omega
|
||||
dimensionedScalar omegaMin_;
|
||||
|
||||
//- Run-time selectable delta model
|
||||
autoPtr<Foam::LESdelta> delta_;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user