From ec49f93637c35c1052c6080b2015718853ab437a Mon Sep 17 00:00:00 2001 From: Henry <Henry> Date: Mon, 16 Feb 2015 09:24:01 +0000 Subject: [PATCH] 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. --- .../turbulentFluidThermoModels.C | 3 + .../turbulentTransportModels.C | 3 + .../RAS/kOmegaSST/kOmegaSST.C | 76 ++++--- .../RAS/kOmegaSST/kOmegaSST.H | 6 + .../RAS/kOmegaSSTSAS/kOmegaSSTSAS.C | 204 ++++++++++++++++++ .../RAS/kOmegaSSTSAS/kOmegaSSTSAS.H | 200 +++++++++++++++++ 6 files changed, 466 insertions(+), 26 deletions(-) create mode 100644 src/TurbulenceModels/turbulenceModels/RAS/kOmegaSSTSAS/kOmegaSSTSAS.C create mode 100644 src/TurbulenceModels/turbulenceModels/RAS/kOmegaSSTSAS/kOmegaSSTSAS.H diff --git a/src/TurbulenceModels/compressible/turbulentFluidThermoModels/turbulentFluidThermoModels.C b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/turbulentFluidThermoModels.C index ae6604679c3..d7b420f854c 100644 --- a/src/TurbulenceModels/compressible/turbulentFluidThermoModels/turbulentFluidThermoModels.C +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/turbulentFluidThermoModels.C @@ -82,6 +82,9 @@ makeRASModel(kOmega); #include "kOmegaSST.H" makeRASModel(kOmegaSST); +#include "kOmegaSSTSAS.H" +makeRASModel(kOmegaSSTSAS); + #include "v2f.H" makeRASModel(v2f); diff --git a/src/TurbulenceModels/incompressible/turbulentTransportModels/turbulentTransportModels.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/turbulentTransportModels.C index 521ae9d4dd1..1a3dc38620b 100644 --- a/src/TurbulenceModels/incompressible/turbulentTransportModels/turbulentTransportModels.C +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/turbulentTransportModels.C @@ -77,6 +77,9 @@ makeRASModel(kOmega); #include "kOmegaSST.H" makeRASModel(kOmegaSST); +#include "kOmegaSSTSAS.H" +makeRASModel(kOmegaSSTSAS); + #include "v2f.H" makeRASModel(v2f); diff --git a/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSST/kOmegaSST.C b/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSST/kOmegaSST.C index e6a020c6f96..76fd9cf0c35 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSST/kOmegaSST.C +++ b/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSST/kOmegaSST.C @@ -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 diff --git a/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSST/kOmegaSST.H b/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSST/kOmegaSST.H index b711d496869..e3a3fcd3327 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSST/kOmegaSST.H +++ b/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSST/kOmegaSST.H @@ -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: diff --git a/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSSTSAS/kOmegaSSTSAS.C b/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSSTSAS/kOmegaSSTSAS.C new file mode 100644 index 00000000000..08b3b5af432 --- /dev/null +++ b/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSSTSAS/kOmegaSSTSAS.C @@ -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 + +// ************************************************************************* // diff --git a/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSSTSAS/kOmegaSSTSAS.H b/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSSTSAS/kOmegaSSTSAS.H new file mode 100644 index 00000000000..45588790ed0 --- /dev/null +++ b/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSSTSAS/kOmegaSSTSAS.H @@ -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 + +// ************************************************************************* // -- GitLab