From 2cc96ad7f4a27f86ee6974e7b31e34609d1aa104 Mon Sep 17 00:00:00 2001 From: Andrew Heather <> Date: Wed, 10 Aug 2022 14:16:05 +0100 Subject: [PATCH] INT: Integration of Upstream CFD's grey-area sigma into kOmegaSST models - Initial code supplied by Marian Fuchs, Upstream CFD GmbH - Code cleaned/refactored/integrated by OpenCFD --- .../Base/kOmegaSST/kOmegaSSTBase.C | 26 +++-- .../Base/kOmegaSST/kOmegaSSTBase.H | 11 ++- .../DES/kOmegaSSTDDES/kOmegaSSTDDES.C | 99 +++++++++++++++++-- .../DES/kOmegaSSTDDES/kOmegaSSTDDES.H | 32 +++++- .../DES/kOmegaSSTDES/kOmegaSSTDES.C | 7 +- 5 files changed, 156 insertions(+), 19 deletions(-) diff --git a/src/TurbulenceModels/turbulenceModels/Base/kOmegaSST/kOmegaSSTBase.C b/src/TurbulenceModels/turbulenceModels/Base/kOmegaSST/kOmegaSSTBase.C index 1c3febac0e..9bee486c38 100644 --- a/src/TurbulenceModels/turbulenceModels/Base/kOmegaSST/kOmegaSSTBase.C +++ b/src/TurbulenceModels/turbulenceModels/Base/kOmegaSST/kOmegaSSTBase.C @@ -6,7 +6,8 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2015 OpenFOAM Foundation - Copyright (C) 2016-2020 OpenCFD Ltd. + Copyright (C) 2016-2022 OpenCFD Ltd. + Copyright (C) 2022 Upstream CFD GmbH ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -164,6 +165,22 @@ tmp kOmegaSSTBase::epsilonByk } +template +tmp kOmegaSSTBase::GbyNu0 +( + const volTensorField& gradU, + const volScalarField& F1, + const volScalarField& S2 +) const +{ + return tmp::New + ( + IOobject::scopedName(this->type(), "GbyNu"), + gradU() && dev(twoSymm(gradU())) + ); +} + + template tmp kOmegaSSTBase::GbyNu ( @@ -510,13 +527,8 @@ void kOmegaSSTBase::correct() tmp tgradU = fvc::grad(U); volScalarField S2(this->S2(F1, tgradU())); - volScalarField::Internal GbyNu0 - ( - this->type() + ":GbyNu", - (tgradU() && dev(twoSymm(tgradU()))) - ); + volScalarField::Internal GbyNu0(this->GbyNu0(tgradU(), F1, S2)); volScalarField::Internal G(this->GName(), nut*GbyNu0); - tgradU.clear(); // Update omega and G at the wall omega_.boundaryFieldRef().updateCoeffs(); diff --git a/src/TurbulenceModels/turbulenceModels/Base/kOmegaSST/kOmegaSSTBase.H b/src/TurbulenceModels/turbulenceModels/Base/kOmegaSST/kOmegaSSTBase.H index cfdf33af82..4833b51257 100644 --- a/src/TurbulenceModels/turbulenceModels/Base/kOmegaSST/kOmegaSSTBase.H +++ b/src/TurbulenceModels/turbulenceModels/Base/kOmegaSST/kOmegaSSTBase.H @@ -6,7 +6,8 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2017-2021 OpenCFD Ltd. + Copyright (C) 2017-2022 OpenCFD Ltd. + Copyright (C) 2022 Upstream CFD GmbH ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -273,6 +274,14 @@ protected: const volTensorField& gradU ) const; + //- Return (G/nu)_0 + virtual tmp GbyNu0 + ( + const volTensorField& gradU, + const volScalarField& F1, + const volScalarField& S2 + ) const; + //- Return G/nu virtual tmp GbyNu ( diff --git a/src/TurbulenceModels/turbulenceModels/DES/kOmegaSSTDDES/kOmegaSSTDDES.C b/src/TurbulenceModels/turbulenceModels/DES/kOmegaSSTDDES/kOmegaSSTDDES.C index 7ab2b4d474..85360269ea 100644 --- a/src/TurbulenceModels/turbulenceModels/DES/kOmegaSSTDDES/kOmegaSSTDDES.C +++ b/src/TurbulenceModels/turbulenceModels/DES/kOmegaSSTDDES/kOmegaSSTDDES.C @@ -6,7 +6,8 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2015 OpenFOAM Foundation - Copyright (C) 2016-2020 OpenCFD Ltd. + Copyright (C) 2016-2022 OpenCFD Ltd. + Copyright (C) 2022 Upstream CFD GmbH ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -49,6 +50,35 @@ tmp kOmegaSSTDDES::fd // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // +template +tmp kOmegaSSTDDES::S2 +( + const volScalarField& F1, + const volTensorField& gradU +) const +{ + tmp tS2 = + this->kOmegaSSTDES::S2(F1, gradU); + + if (useSigma_) + { + volScalarField& S2 = tS2.ref(); + const volScalarField CDES(this->CDES(F1)); + const volScalarField& k = this->k_; + const volScalarField& omega = this->omega_; + const volScalarField Ssigma(this->Ssigma(gradU)); + S2 -= + ( + fd(mag(gradU)) + *pos(sqrt(k)/(this->betaStar_*omega) - CDES*this->delta()) + *(S2 - sqr(Ssigma)) + ); + } + + return tS2; +} + + template tmp kOmegaSSTDDES::dTilda ( @@ -75,6 +105,45 @@ tmp kOmegaSSTDDES::dTilda ); } +template +tmp kOmegaSSTDDES::GbyNu0 +( + const volTensorField& gradU, + const volScalarField& F1, + const volScalarField& S2 +) const +{ + tmp tGbyNu0 = + this->kOmegaSSTDES::GbyNu0(gradU, F1, S2); + + if (useSigma_) + { + volScalarField::Internal& GbyNu0 = tGbyNu0.ref(); + const volScalarField::Internal CDES(this->CDES(F1)()()); + const volScalarField::Internal& k = this->k_(); + const volScalarField::Internal& omega = this->omega_(); + + GbyNu0 -= + fd(mag(gradU))()() + *pos(sqrt(k)/(this->betaStar_*omega) - CDES*this->delta()()) + *(GbyNu0 - S2); + } + + return tGbyNu0; +} + + +template +tmp kOmegaSSTDDES::GbyNu +( + const volScalarField::Internal& GbyNu0, + const volScalarField::Internal& F2, + const volScalarField::Internal& S2 +) const +{ + return GbyNu0; // Unlimited +} + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -103,14 +172,30 @@ kOmegaSSTDDES::kOmegaSSTDDES type ), + useSigma_ + ( + Switch::getOrAddToDict + ( + "useSigma", + this->coeffDict_, + false + ) + ), Cd1_ ( - dimensioned::getOrAddToDict - ( - "Cd1", - this->coeffDict_, - 20 - ) + useSigma_ ? + dimensioned::getOrAddToDict + ( + "Cd1Sigma", + this->coeffDict_, + 22 + ) + : dimensioned::getOrAddToDict + ( + "Cd1", + this->coeffDict_, + 20 + ) ), Cd2_ ( diff --git a/src/TurbulenceModels/turbulenceModels/DES/kOmegaSSTDDES/kOmegaSSTDDES.H b/src/TurbulenceModels/turbulenceModels/DES/kOmegaSSTDDES/kOmegaSSTDDES.H index c84a0f49df..6a6369121f 100644 --- a/src/TurbulenceModels/turbulenceModels/DES/kOmegaSSTDDES/kOmegaSSTDDES.H +++ b/src/TurbulenceModels/turbulenceModels/DES/kOmegaSSTDDES/kOmegaSSTDDES.H @@ -6,7 +6,8 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2015 OpenFOAM Foundation - Copyright (C) 2019 OpenCFD Ltd. + Copyright (C) 2019, 2022 OpenCFD Ltd. + Copyright (C) 2022 Upstream CFD GmbH ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -46,8 +47,8 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef kOmegaSSTDDES_H -#define kOmegaSSTDDES_H +#ifndef Foam_kOmegaSSTDDES_H +#define Foam_kOmegaSSTDDES_H #include "kOmegaSSTDES.H" @@ -82,6 +83,9 @@ protected: // Protected data + //- Switch to activate grey-area enhanced sigma-DDES + Switch useSigma_; + // Model coefficients dimensionedScalar Cd1_; @@ -90,6 +94,13 @@ protected: // Protected Member Functions + //- Return square of strain rate + virtual tmp S2 + ( + const volScalarField& F1, + const volTensorField& gradU + ) const; + //- Length scale virtual tmp dTilda ( @@ -97,6 +108,21 @@ protected: const volScalarField& CDES ) const; + //- Return (G/nu)_0 + virtual tmp GbyNu0 + ( + const volTensorField& gradU, + const volScalarField& F1, + const volScalarField& S2 + ) const; + + //- Return G/nu + virtual tmp GbyNu + ( + const volScalarField::Internal& GbyNu0, + const volScalarField::Internal& F2, + const volScalarField::Internal& S2 + ) const; public: diff --git a/src/TurbulenceModels/turbulenceModels/DES/kOmegaSSTDES/kOmegaSSTDES.C b/src/TurbulenceModels/turbulenceModels/DES/kOmegaSSTDES/kOmegaSSTDES.C index 0d4939975a..e6fa1d9f83 100644 --- a/src/TurbulenceModels/turbulenceModels/DES/kOmegaSSTDES/kOmegaSSTDES.C +++ b/src/TurbulenceModels/turbulenceModels/DES/kOmegaSSTDES/kOmegaSSTDES.C @@ -6,7 +6,8 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2015 OpenFOAM Foundation - Copyright (C) 2016-2020 OpenCFD Ltd. + Copyright (C) 2016-2022 OpenCFD Ltd. + Copyright (C) 2022 Upstream CFD GmbH ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -167,6 +168,10 @@ kOmegaSSTDES::kOmegaSSTDES ) ) { + // Note: Ctrans coeff is model specific; for k-w = 60 + this->Ctrans_ = + dimensioned::getOrAddToDict("Ctrans", this->coeffDict_, 60.0); + if (type == typeName) { this->printCoeffs(type);