From ab21b8d5a022b89093789cf8f80f11e88b5ec74f Mon Sep 17 00:00:00 2001 From: Ping He Date: Thu, 6 May 2021 20:20:43 -0400 Subject: [PATCH] Added kOmega and kOmegaSSTLM models (#135) * Removed unused variables for SSTLM. * Added the kOmega and kOmegaSSTLM models. Primal working and adjoint not tested. --- dafoam/pyDAFoam.py | 4 + .../DAModel/DATurbulenceModel/DAkOmega.C | 646 ++++++++ .../DAModel/DATurbulenceModel/DAkOmega.H | 150 ++ .../DAModel/DATurbulenceModel/DAkOmegaSST.C | 32 - .../DAModel/DATurbulenceModel/DAkOmegaSST.H | 4 - .../DAModel/DATurbulenceModel/DAkOmegaSSTLM.C | 1303 +++++++++++++++++ .../DAModel/DATurbulenceModel/DAkOmegaSSTLM.H | 304 ++++ src/adjoint/Make/files_Compressible | 2 + src/adjoint/Make/files_Incompressible | 2 + 9 files changed, 2411 insertions(+), 36 deletions(-) create mode 100755 src/adjoint/DAModel/DATurbulenceModel/DAkOmega.C create mode 100755 src/adjoint/DAModel/DATurbulenceModel/DAkOmega.H create mode 100755 src/adjoint/DAModel/DATurbulenceModel/DAkOmegaSSTLM.C create mode 100755 src/adjoint/DAModel/DATurbulenceModel/DAkOmegaSSTLM.H diff --git a/dafoam/pyDAFoam.py b/dafoam/pyDAFoam.py index 071a8d0d..e8d40fcd 100755 --- a/dafoam/pyDAFoam.py +++ b/dafoam/pyDAFoam.py @@ -369,6 +369,10 @@ class DAOPTION(object): "omegaMin": 1e-16, "epsilonMax": 1e16, "epsilonMin": 1e-16, + "ReThetatMax": 1e16, + "ReThetatMin": 1e-16, + "gammaIntMax": 1e16, + "gammaIntMin": 1e-16, } ## Whether to perform multipoint optimization. diff --git a/src/adjoint/DAModel/DATurbulenceModel/DAkOmega.C b/src/adjoint/DAModel/DATurbulenceModel/DAkOmega.C new file mode 100755 index 00000000..89e7e20c --- /dev/null +++ b/src/adjoint/DAModel/DATurbulenceModel/DAkOmega.C @@ -0,0 +1,646 @@ +/*---------------------------------------------------------------------------*\ + + DAFoam : Discrete Adjoint with OpenFOAM + Version : v2 + +\*---------------------------------------------------------------------------*/ + +#include "DAkOmega.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +defineTypeNameAndDebug(DAkOmega, 0); +addToRunTimeSelectionTable(DATurbulenceModel, DAkOmega, dictionary); +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +DAkOmega::DAkOmega( + const word modelType, + const fvMesh& mesh, + const DAOption& daOption) + : DATurbulenceModel(modelType, mesh, daOption), + // kOmega parameters + Cmu_(dimensioned::lookupOrAddToDict( + "betaStar", + this->coeffDict_, + 0.09)), + beta_(dimensioned::lookupOrAddToDict( + "beta", + this->coeffDict_, + 0.072)), + gamma_(dimensioned::lookupOrAddToDict( + "gamma", + this->coeffDict_, + 0.52)), + alphaK_(dimensioned::lookupOrAddToDict( + "alphaK", + this->coeffDict_, + 0.5)), + alphaOmega_(dimensioned::lookupOrAddToDict( + "alphaOmega", + this->coeffDict_, + 0.5)), + // Augmented variables + omega_(const_cast( + mesh_.thisDb().lookupObject("omega"))), + omegaRes_( + IOobject( + "omegaRes", + mesh.time().timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE), + mesh, +#ifdef CompressibleFlow + dimensionedScalar("omegaRes", dimensionSet(1, -3, -2, 0, 0, 0, 0), 0.0), +#endif +#ifdef IncompressibleFlow + dimensionedScalar("omegaRes", dimensionSet(0, 0, -2, 0, 0, 0, 0), 0.0), +#endif + zeroGradientFvPatchField::typeName), + omegaResPartDeriv_( + IOobject( + "omegaResPartDeriv", + mesh.time().timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE), + omegaRes_), + k_( + const_cast( + mesh_.thisDb().lookupObject("k"))), + kRes_( + IOobject( + "kRes", + mesh.time().timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE), + mesh, +#ifdef CompressibleFlow + dimensionedScalar("kRes", dimensionSet(1, -1, -3, 0, 0, 0, 0), 0.0), +#endif +#ifdef IncompressibleFlow + dimensionedScalar("kRes", dimensionSet(0, 2, -3, 0, 0, 0, 0), 0.0), +#endif + zeroGradientFvPatchField::typeName), + kResPartDeriv_( + IOobject( + "kResPartDeriv", + mesh.time().timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE), + kRes_) +{ + + // initialize printInterval_ we need to check whether it is a steady state + // or unsteady primal solver + IOdictionary fvSchemes( + IOobject( + "fvSchemes", + mesh.time().system(), + mesh, + IOobject::MUST_READ, + IOobject::NO_WRITE, + false)); + word ddtScheme = word(fvSchemes.subDict("ddtSchemes").lookup("default")); + if (ddtScheme == "steadyState") + { + printInterval_ = + daOption.getAllOptions().lookupOrDefault