From 52d83407f3ce33063f7a0cc07ec9dd173b3fe66b Mon Sep 17 00:00:00 2001 From: Henry Weller <http://cfd.direct> Date: Tue, 1 Dec 2015 10:07:00 +0000 Subject: [PATCH] TurbulenceModels: Added validate function Moved correctNut call from constructors to the new validate function to avoid problems with construction order and field availability for the calculation of nut. To ensure nut is physical and consistent with the turbulence fields the validate function should be called after the construction of the turbulence model, fvOptions and any other fields that the calculation of nut might depend on. --- .../RAS/buoyantKEpsilon/buoyantKEpsilon.C | 1 - .../RAS/LamBremhorstKE/LamBremhorstKE.C | 8 -------- .../RAS/LienCubicKE/LienCubicKE.C | 8 -------- .../RAS/LienLeschziner/LienLeschziner.C | 8 -------- .../RAS/ShihQuadraticKE/ShihQuadraticKE.C | 8 -------- .../RAS/kkLOmega/kkLOmega.C | 4 ++++ .../RAS/kkLOmega/kkLOmega.H | 4 ++++ .../RAS/qZeta/qZeta.C | 8 -------- .../phaseCompressible/LES/Niceno/NicenoKEqn.C | 3 --- .../LES/SmagorinskyZhang/SmagorinskyZhang.C | 3 --- .../LES/continuousGasKEqn/continuousGasKEqn.C | 1 - .../RAS/LaheyKEpsilon/LaheyKEpsilon.C | 3 --- .../continuousGasKEpsilon.C | 2 -- .../RAS/kOmegaSSTSato/kOmegaSSTSato.C | 2 -- .../DeardorffDiffStress/DeardorffDiffStress.C | 8 -------- .../LES/Smagorinsky/Smagorinsky.C | 8 -------- .../SpalartAllmarasDES/SpalartAllmarasDES.C | 8 -------- .../turbulenceModels/LES/WALE/WALE.C | 8 -------- .../LES/dynamicKEqn/dynamicKEqn.C | 8 -------- .../LES/dynamicLagrangian/dynamicLagrangian.C | 8 -------- .../turbulenceModels/LES/kEqn/kEqn.C | 8 -------- .../turbulenceModels/RAS/LRR/LRR.C | 8 -------- .../RAS/LaunderSharmaKE/LaunderSharmaKE.C | 8 -------- .../RAS/RNGkEpsilon/RNGkEpsilon.C | 8 -------- .../turbulenceModels/RAS/SSG/SSG.C | 8 -------- .../RAS/SpalartAllmaras/SpalartAllmaras.C | 8 -------- .../turbulenceModels/RAS/kEpsilon/kEpsilon.C | 19 ++++++++++--------- .../turbulenceModels/RAS/kOmega/kOmega.C | 8 -------- .../RAS/kOmegaSST/kOmegaSST.C | 8 -------- .../RAS/realizableKE/realizableKE.C | 8 -------- .../turbulenceModels/RAS/v2f/v2f.C | 8 -------- .../ReynoldsStress/ReynoldsStress.C | 7 +++++++ .../ReynoldsStress/ReynoldsStress.H | 4 ++++ .../eddyViscosity/eddyViscosity.C | 7 +++++++ .../eddyViscosity/eddyViscosity.H | 4 ++++ .../turbulenceModels/turbulenceModel.C | 6 +++++- .../turbulenceModels/turbulenceModel.H | 4 ++++ 37 files changed, 49 insertions(+), 193 deletions(-) diff --git a/src/TurbulenceModels/compressible/RAS/buoyantKEpsilon/buoyantKEpsilon.C b/src/TurbulenceModels/compressible/RAS/buoyantKEpsilon/buoyantKEpsilon.C index 2f7bdb16179..b78dddf2799 100644 --- a/src/TurbulenceModels/compressible/RAS/buoyantKEpsilon/buoyantKEpsilon.C +++ b/src/TurbulenceModels/compressible/RAS/buoyantKEpsilon/buoyantKEpsilon.C @@ -74,7 +74,6 @@ buoyantKEpsilon<BasicTurbulenceModel>::buoyantKEpsilon { if (type == typeName) { - kEpsilon<BasicTurbulenceModel>::correctNut(); this->printCoeffs(type); } } diff --git a/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LamBremhorstKE/LamBremhorstKE.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LamBremhorstKE/LamBremhorstKE.C index d2417a85307..245a0ff55c8 100644 --- a/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LamBremhorstKE/LamBremhorstKE.C +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LamBremhorstKE/LamBremhorstKE.C @@ -181,14 +181,6 @@ LamBremhorstKE::LamBremhorstKE if (type == typeName) { printCoeffs(type); - - // Correct nut for single-phase solvers only. - // For multiphase solvers the phase construction is not complete - // at this point. - if (isType<geometricOneField>(alpha)) - { - correctNut(); - } } } diff --git a/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienCubicKE/LienCubicKE.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienCubicKE/LienCubicKE.C index 440517134f0..cc58aabc787 100644 --- a/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienCubicKE/LienCubicKE.C +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienCubicKE/LienCubicKE.C @@ -331,14 +331,6 @@ LienCubicKE::LienCubicKE if (type == typeName) { printCoeffs(type); - - // Correct nut for single-phase solvers only. - // For multiphase solvers the phase construction is not complete - // at this point. - if (isType<geometricOneField>(alpha)) - { - correctNut(); - } } } diff --git a/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienLeschziner/LienLeschziner.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienLeschziner/LienLeschziner.C index 29b5aa0114f..0b1ec732023 100644 --- a/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienLeschziner/LienLeschziner.C +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienLeschziner/LienLeschziner.C @@ -225,14 +225,6 @@ LienLeschziner::LienLeschziner if (type == typeName) { printCoeffs(type); - - // Correct nut for single-phase solvers only. - // For multiphase solvers the phase construction is not complete - // at this point. - if (isType<geometricOneField>(alpha)) - { - correctNut(); - } } } diff --git a/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/ShihQuadraticKE/ShihQuadraticKE.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/ShihQuadraticKE/ShihQuadraticKE.C index 38dc7ab62b4..c2d22054c2d 100644 --- a/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/ShihQuadraticKE/ShihQuadraticKE.C +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/ShihQuadraticKE/ShihQuadraticKE.C @@ -223,14 +223,6 @@ ShihQuadraticKE::ShihQuadraticKE if (type == typeName) { printCoeffs(type); - - // Correct nut for single-phase solvers only. - // For multiphase solvers the phase construction is not complete - // at this point. - if (isType<geometricOneField>(alpha)) - { - correctNut(); - } } } diff --git a/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kkLOmega/kkLOmega.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kkLOmega/kkLOmega.C index cc59e63e598..58a84fc1482 100644 --- a/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kkLOmega/kkLOmega.C +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kkLOmega/kkLOmega.C @@ -593,6 +593,10 @@ bool kkLOmega::read() } +void kkLOmega::validate() +{} + + void kkLOmega::correct() { eddyViscosity<incompressible::RASModel>::correct(); diff --git a/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kkLOmega/kkLOmega.H b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kkLOmega/kkLOmega.H index 68ba3793804..53bd64e7f8a 100644 --- a/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kkLOmega/kkLOmega.H +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kkLOmega/kkLOmega.H @@ -301,6 +301,10 @@ public: return epsilon_; } + //- Validate the turbulence fields after construction + // Update turbulence viscosity and other derived fields as requires + virtual void validate(); + //- Solve the turbulence equations and correct the turbulence viscosity virtual void correct(); }; diff --git a/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/qZeta/qZeta.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/qZeta/qZeta.C index bc57fd4200e..44a5c331214 100644 --- a/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/qZeta/qZeta.C +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/qZeta/qZeta.C @@ -208,14 +208,6 @@ qZeta::qZeta if (type == typeName) { printCoeffs(type); - - // Correct nut for single-phase solvers only. - // For multiphase solvers the phase construction is not complete - // at this point. - if (isType<geometricOneField>(alpha)) - { - correctNut(); - } } } diff --git a/src/TurbulenceModels/phaseCompressible/LES/Niceno/NicenoKEqn.C b/src/TurbulenceModels/phaseCompressible/LES/Niceno/NicenoKEqn.C index 2d3ee8421b0..44eb97019b1 100644 --- a/src/TurbulenceModels/phaseCompressible/LES/Niceno/NicenoKEqn.C +++ b/src/TurbulenceModels/phaseCompressible/LES/Niceno/NicenoKEqn.C @@ -96,9 +96,6 @@ NicenoKEqn<BasicTurbulenceModel>::NicenoKEqn { if (type == typeName) { - // Cannot correct nut yet: construction of the phases is not complete - // correctNut(); - this->printCoeffs(type); } } diff --git a/src/TurbulenceModels/phaseCompressible/LES/SmagorinskyZhang/SmagorinskyZhang.C b/src/TurbulenceModels/phaseCompressible/LES/SmagorinskyZhang/SmagorinskyZhang.C index 4eb3187d953..f7bfe4fbf68 100644 --- a/src/TurbulenceModels/phaseCompressible/LES/SmagorinskyZhang/SmagorinskyZhang.C +++ b/src/TurbulenceModels/phaseCompressible/LES/SmagorinskyZhang/SmagorinskyZhang.C @@ -73,9 +73,6 @@ SmagorinskyZhang<BasicTurbulenceModel>::SmagorinskyZhang { if (type == typeName) { - // Cannot correct nut yet: construction of the phases is not complete - // correctNut(); - this->printCoeffs(type); } } diff --git a/src/TurbulenceModels/phaseCompressible/LES/continuousGasKEqn/continuousGasKEqn.C b/src/TurbulenceModels/phaseCompressible/LES/continuousGasKEqn/continuousGasKEqn.C index 6bfec32e684..00e23e7c32a 100644 --- a/src/TurbulenceModels/phaseCompressible/LES/continuousGasKEqn/continuousGasKEqn.C +++ b/src/TurbulenceModels/phaseCompressible/LES/continuousGasKEqn/continuousGasKEqn.C @@ -75,7 +75,6 @@ continuousGasKEqn<BasicTurbulenceModel>::continuousGasKEqn { if (type == typeName) { - kEqn<BasicTurbulenceModel>::correctNut(); this->printCoeffs(type); } } diff --git a/src/TurbulenceModels/phaseCompressible/RAS/LaheyKEpsilon/LaheyKEpsilon.C b/src/TurbulenceModels/phaseCompressible/RAS/LaheyKEpsilon/LaheyKEpsilon.C index c7d0d22e442..843ecc015d7 100644 --- a/src/TurbulenceModels/phaseCompressible/RAS/LaheyKEpsilon/LaheyKEpsilon.C +++ b/src/TurbulenceModels/phaseCompressible/RAS/LaheyKEpsilon/LaheyKEpsilon.C @@ -107,9 +107,6 @@ LaheyKEpsilon<BasicTurbulenceModel>::LaheyKEpsilon if (type == typeName) { this->printCoeffs(type); - - // Cannot correct nut yet: construction of the phases is not complete - // correctNut(); } } diff --git a/src/TurbulenceModels/phaseCompressible/RAS/continuousGasKEpsilon/continuousGasKEpsilon.C b/src/TurbulenceModels/phaseCompressible/RAS/continuousGasKEpsilon/continuousGasKEpsilon.C index 3f4798e515a..86d6a7f334f 100644 --- a/src/TurbulenceModels/phaseCompressible/RAS/continuousGasKEpsilon/continuousGasKEpsilon.C +++ b/src/TurbulenceModels/phaseCompressible/RAS/continuousGasKEpsilon/continuousGasKEpsilon.C @@ -89,8 +89,6 @@ continuousGasKEpsilon<BasicTurbulenceModel>::continuousGasKEpsilon { if (type == typeName) { - // Cannot correct nut yet: construction of the phases is not complete - // kEpsilon<BasicTurbulenceModel>::correctNut(); this->printCoeffs(type); } } diff --git a/src/TurbulenceModels/phaseCompressible/RAS/kOmegaSSTSato/kOmegaSSTSato.C b/src/TurbulenceModels/phaseCompressible/RAS/kOmegaSSTSato/kOmegaSSTSato.C index 7e5114d8287..76d7e4d0be1 100644 --- a/src/TurbulenceModels/phaseCompressible/RAS/kOmegaSSTSato/kOmegaSSTSato.C +++ b/src/TurbulenceModels/phaseCompressible/RAS/kOmegaSSTSato/kOmegaSSTSato.C @@ -76,8 +76,6 @@ kOmegaSSTSato<BasicTurbulenceModel>::kOmegaSSTSato { if (type == typeName) { - // Cannot correct nut yet: construction of the phases is not complete - // correctNut(); this->printCoeffs(type); } } diff --git a/src/TurbulenceModels/turbulenceModels/LES/DeardorffDiffStress/DeardorffDiffStress.C b/src/TurbulenceModels/turbulenceModels/LES/DeardorffDiffStress/DeardorffDiffStress.C index 5a00433a347..e958e933246 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/DeardorffDiffStress/DeardorffDiffStress.C +++ b/src/TurbulenceModels/turbulenceModels/LES/DeardorffDiffStress/DeardorffDiffStress.C @@ -112,14 +112,6 @@ DeardorffDiffStress<BasicTurbulenceModel>::DeardorffDiffStress { this->printCoeffs(type); this->boundNormalStress(this->R_); - - // Correct nut for single-phase solvers only. - // For multiphase solvers the phase construction is not complete - // at this point. - if (isType<geometricOneField>(alpha)) - { - correctNut(); - } } } diff --git a/src/TurbulenceModels/turbulenceModels/LES/Smagorinsky/Smagorinsky.C b/src/TurbulenceModels/turbulenceModels/LES/Smagorinsky/Smagorinsky.C index 7de1f91f1ed..9827f76063c 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/Smagorinsky/Smagorinsky.C +++ b/src/TurbulenceModels/turbulenceModels/LES/Smagorinsky/Smagorinsky.C @@ -114,14 +114,6 @@ Smagorinsky<BasicTurbulenceModel>::Smagorinsky if (type == typeName) { this->printCoeffs(type); - - // Correct nut for single-phase solvers only. - // For multiphase solvers the phase construction is not complete - // at this point. - if (isType<geometricOneField>(alpha)) - { - correctNut(); - } } } diff --git a/src/TurbulenceModels/turbulenceModels/LES/SpalartAllmarasDES/SpalartAllmarasDES.C b/src/TurbulenceModels/turbulenceModels/LES/SpalartAllmarasDES/SpalartAllmarasDES.C index fa6ddc86e3e..ed5cae80da0 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/SpalartAllmarasDES/SpalartAllmarasDES.C +++ b/src/TurbulenceModels/turbulenceModels/LES/SpalartAllmarasDES/SpalartAllmarasDES.C @@ -319,14 +319,6 @@ SpalartAllmarasDES<BasicTurbulenceModel>::SpalartAllmarasDES if (type == typeName) { this->printCoeffs(type); - - // Correct nut for single-phase solvers only. - // For multiphase solvers the phase construction is not complete - // at this point. - if (isType<geometricOneField>(alpha)) - { - correctNut(); - } } } diff --git a/src/TurbulenceModels/turbulenceModels/LES/WALE/WALE.C b/src/TurbulenceModels/turbulenceModels/LES/WALE/WALE.C index 3879d5fffe1..49a353ba1da 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/WALE/WALE.C +++ b/src/TurbulenceModels/turbulenceModels/LES/WALE/WALE.C @@ -144,14 +144,6 @@ WALE<BasicTurbulenceModel>::WALE if (type == typeName) { this->printCoeffs(type); - - // Correct nut for single-phase solvers only. - // For multiphase solvers the phase construction is not complete - // at this point. - if (isType<geometricOneField>(alpha)) - { - correctNut(); - } } } diff --git a/src/TurbulenceModels/turbulenceModels/LES/dynamicKEqn/dynamicKEqn.C b/src/TurbulenceModels/turbulenceModels/LES/dynamicKEqn/dynamicKEqn.C index 7fd40001837..ac076991e8e 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/dynamicKEqn/dynamicKEqn.C +++ b/src/TurbulenceModels/turbulenceModels/LES/dynamicKEqn/dynamicKEqn.C @@ -186,14 +186,6 @@ dynamicKEqn<BasicTurbulenceModel>::dynamicKEqn if (type == typeName) { this->printCoeffs(type); - - // Correct nut for single-phase solvers only. - // For multiphase solvers the phase construction is not complete - // at this point. - if (isType<geometricOneField>(alpha)) - { - correctNut(); - } } } diff --git a/src/TurbulenceModels/turbulenceModels/LES/dynamicLagrangian/dynamicLagrangian.C b/src/TurbulenceModels/turbulenceModels/LES/dynamicLagrangian/dynamicLagrangian.C index 7c5c403fcc8..6a6fb02b930 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/dynamicLagrangian/dynamicLagrangian.C +++ b/src/TurbulenceModels/turbulenceModels/LES/dynamicLagrangian/dynamicLagrangian.C @@ -123,14 +123,6 @@ dynamicLagrangian<BasicTurbulenceModel>::dynamicLagrangian if (type == typeName) { this->printCoeffs(type); - - // Correct nut for single-phase solvers only. - // For multiphase solvers the phase construction is not complete - // at this point. - if (isType<geometricOneField>(alpha)) - { - correctNut(); - } } } diff --git a/src/TurbulenceModels/turbulenceModels/LES/kEqn/kEqn.C b/src/TurbulenceModels/turbulenceModels/LES/kEqn/kEqn.C index c02556ea037..ef2b2b85359 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/kEqn/kEqn.C +++ b/src/TurbulenceModels/turbulenceModels/LES/kEqn/kEqn.C @@ -114,14 +114,6 @@ kEqn<BasicTurbulenceModel>::kEqn if (type == typeName) { this->printCoeffs(type); - - // Correct nut for single-phase solvers only. - // For multiphase solvers the phase construction is not complete - // at this point. - if (isType<geometricOneField>(alpha)) - { - correctNut(); - } } } diff --git a/src/TurbulenceModels/turbulenceModels/RAS/LRR/LRR.C b/src/TurbulenceModels/turbulenceModels/RAS/LRR/LRR.C index fe33923d197..2b8be527627 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/LRR/LRR.C +++ b/src/TurbulenceModels/turbulenceModels/RAS/LRR/LRR.C @@ -205,14 +205,6 @@ LRR<BasicTurbulenceModel>::LRR this->boundNormalStress(this->R_); bound(epsilon_, this->epsilonMin_); k_ = 0.5*tr(this->R_); - - // Correct nut for single-phase solvers only. - // For multiphase solvers the phase construction is not complete - // at this point. - if (isType<geometricOneField>(alpha)) - { - correctNut(); - } } } diff --git a/src/TurbulenceModels/turbulenceModels/RAS/LaunderSharmaKE/LaunderSharmaKE.C b/src/TurbulenceModels/turbulenceModels/RAS/LaunderSharmaKE/LaunderSharmaKE.C index e5ef40222a7..d3fca3307b6 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/LaunderSharmaKE/LaunderSharmaKE.C +++ b/src/TurbulenceModels/turbulenceModels/RAS/LaunderSharmaKE/LaunderSharmaKE.C @@ -205,14 +205,6 @@ LaunderSharmaKE<BasicTurbulenceModel>::LaunderSharmaKE if (type == typeName) { this->printCoeffs(type); - - // Correct nut for single-phase solvers only. - // For multiphase solvers the phase construction is not complete - // at this point. - if (isType<geometricOneField>(alpha)) - { - correctNut(); - } } } diff --git a/src/TurbulenceModels/turbulenceModels/RAS/RNGkEpsilon/RNGkEpsilon.C b/src/TurbulenceModels/turbulenceModels/RAS/RNGkEpsilon/RNGkEpsilon.C index 18d22249274..1eec3da8a91 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/RNGkEpsilon/RNGkEpsilon.C +++ b/src/TurbulenceModels/turbulenceModels/RAS/RNGkEpsilon/RNGkEpsilon.C @@ -206,14 +206,6 @@ RNGkEpsilon<BasicTurbulenceModel>::RNGkEpsilon if (type == typeName) { this->printCoeffs(type); - - // Correct nut for single-phase solvers only. - // For multiphase solvers the phase construction is not complete - // at this point. - if (isType<geometricOneField>(alpha)) - { - correctNut(); - } } } diff --git a/src/TurbulenceModels/turbulenceModels/RAS/SSG/SSG.C b/src/TurbulenceModels/turbulenceModels/RAS/SSG/SSG.C index 34798924b69..9f9cc534640 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/SSG/SSG.C +++ b/src/TurbulenceModels/turbulenceModels/RAS/SSG/SSG.C @@ -214,14 +214,6 @@ SSG<BasicTurbulenceModel>::SSG this->boundNormalStress(this->R_); bound(epsilon_, this->epsilonMin_); k_ = 0.5*tr(this->R_); - - // Correct nut for single-phase solvers only. - // For multiphase solvers the phase construction is not complete - // at this point. - if (isType<geometricOneField>(alpha)) - { - correctNut(); - } } } diff --git a/src/TurbulenceModels/turbulenceModels/RAS/SpalartAllmaras/SpalartAllmaras.C b/src/TurbulenceModels/turbulenceModels/RAS/SpalartAllmaras/SpalartAllmaras.C index 50f9a989f0b..a029db7ad39 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/SpalartAllmaras/SpalartAllmaras.C +++ b/src/TurbulenceModels/turbulenceModels/RAS/SpalartAllmaras/SpalartAllmaras.C @@ -256,14 +256,6 @@ SpalartAllmaras<BasicTurbulenceModel>::SpalartAllmaras if (type == typeName) { this->printCoeffs(type); - - // Correct nut for single-phase solvers only. - // For multiphase solvers the phase construction is not complete - // at this point. - if (isType<geometricOneField>(alpha)) - { - correctNut(); - } } } diff --git a/src/TurbulenceModels/turbulenceModels/RAS/kEpsilon/kEpsilon.C b/src/TurbulenceModels/turbulenceModels/RAS/kEpsilon/kEpsilon.C index 1deb554d1cc..75d9a3d1b84 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/kEpsilon/kEpsilon.C +++ b/src/TurbulenceModels/turbulenceModels/RAS/kEpsilon/kEpsilon.C @@ -42,6 +42,16 @@ void kEpsilon<BasicTurbulenceModel>::correctNut() this->nut_ = Cmu_*sqr(k_)/epsilon_; this->nut_.correctBoundaryConditions(); + // const_cast needed because the operators and functions of fvOptions + // are currently non-const. + fv::optionList& fvOptions = const_cast<fv::optionList&> + ( + this->mesh_.objectRegistry::template + lookupObject<fv::optionList>("fvOptions") + ); + + fvOptions.correct(this->nut_); + BasicTurbulenceModel::correctNut(); } @@ -189,14 +199,6 @@ kEpsilon<BasicTurbulenceModel>::kEpsilon if (type == typeName) { this->printCoeffs(type); - - // Correct nut for single-phase solvers only. - // For multiphase solvers the phase construction is not complete - // at this point. - if (isType<geometricOneField>(alpha)) - { - correctNut(); - } } } @@ -300,7 +302,6 @@ void kEpsilon<BasicTurbulenceModel>::correct() bound(k_, this->kMin_); correctNut(); - fvOptions.correct(nut); } diff --git a/src/TurbulenceModels/turbulenceModels/RAS/kOmega/kOmega.C b/src/TurbulenceModels/turbulenceModels/RAS/kOmega/kOmega.C index 4578b5811f7..5f5e76c03f9 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/kOmega/kOmega.C +++ b/src/TurbulenceModels/turbulenceModels/RAS/kOmega/kOmega.C @@ -148,14 +148,6 @@ kOmega<BasicTurbulenceModel>::kOmega if (type == typeName) { this->printCoeffs(type); - - // Correct nut for single-phase solvers only. - // For multiphase solvers the phase construction is not complete - // at this point. - if (isType<geometricOneField>(alpha)) - { - correctNut(); - } } } diff --git a/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSST/kOmegaSST.C b/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSST/kOmegaSST.C index f634aa65beb..223492ba888 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSST/kOmegaSST.C +++ b/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSST/kOmegaSST.C @@ -351,14 +351,6 @@ kOmegaSST<BasicTurbulenceModel>::kOmegaSST if (type == typeName) { this->printCoeffs(type); - - // Correct nut for single-phase solvers only. - // For multiphase solvers the phase construction is not complete - // at this point. - if (isType<geometricOneField>(alpha)) - { - correctNut(); - } } } diff --git a/src/TurbulenceModels/turbulenceModels/RAS/realizableKE/realizableKE.C b/src/TurbulenceModels/turbulenceModels/RAS/realizableKE/realizableKE.C index c3428a64c97..81212cb4108 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/realizableKE/realizableKE.C +++ b/src/TurbulenceModels/turbulenceModels/RAS/realizableKE/realizableKE.C @@ -227,14 +227,6 @@ realizableKE<BasicTurbulenceModel>::realizableKE if (type == typeName) { this->printCoeffs(type); - - // Correct nut for single-phase solvers only. - // For multiphase solvers the phase construction is not complete - // at this point. - if (isType<geometricOneField>(alpha)) - { - correctNut(); - } } } diff --git a/src/TurbulenceModels/turbulenceModels/RAS/v2f/v2f.C b/src/TurbulenceModels/turbulenceModels/RAS/v2f/v2f.C index 95cb209a45d..4a76ee1870a 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/v2f/v2f.C +++ b/src/TurbulenceModels/turbulenceModels/RAS/v2f/v2f.C @@ -239,14 +239,6 @@ v2f<BasicTurbulenceModel>::v2f if (type == typeName) { this->printCoeffs(type); - - // Correct nut for single-phase solvers only. - // For multiphase solvers the phase construction is not complete - // at this point. - if (isType<geometricOneField>(alpha)) - { - correctNut(); - } } } diff --git a/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.C b/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.C index 63dc8d581ee..55001003da8 100644 --- a/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.C +++ b/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.C @@ -295,6 +295,13 @@ Foam::ReynoldsStress<BasicTurbulenceModel>::divDevRhoReff } +template<class BasicTurbulenceModel> +void Foam::ReynoldsStress<BasicTurbulenceModel>::validate() +{ + correctNut(); +} + + template<class BasicTurbulenceModel> void Foam::ReynoldsStress<BasicTurbulenceModel>::correct() { diff --git a/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.H b/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.H index b27468b5a33..0beb0f5885a 100644 --- a/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.H +++ b/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.H @@ -140,6 +140,10 @@ public: volVectorField& U ) const; + //- Validate the turbulence fields after construction + // Update turbulence viscosity and other derived fields as requires + virtual void validate(); + //- Solve the turbulence equations and correct the turbulence viscosity virtual void correct() = 0; }; diff --git a/src/TurbulenceModels/turbulenceModels/eddyViscosity/eddyViscosity.C b/src/TurbulenceModels/turbulenceModels/eddyViscosity/eddyViscosity.C index 641f012bee2..82a0da7719b 100644 --- a/src/TurbulenceModels/turbulenceModels/eddyViscosity/eddyViscosity.C +++ b/src/TurbulenceModels/turbulenceModels/eddyViscosity/eddyViscosity.C @@ -121,6 +121,13 @@ Foam::eddyViscosity<BasicTurbulenceModel>::R() const } +template<class BasicTurbulenceModel> +void Foam::eddyViscosity<BasicTurbulenceModel>::validate() +{ + correctNut(); +} + + template<class BasicTurbulenceModel> void Foam::eddyViscosity<BasicTurbulenceModel>::correct() { diff --git a/src/TurbulenceModels/turbulenceModels/eddyViscosity/eddyViscosity.H b/src/TurbulenceModels/turbulenceModels/eddyViscosity/eddyViscosity.H index e46543864b5..3a26fac199d 100644 --- a/src/TurbulenceModels/turbulenceModels/eddyViscosity/eddyViscosity.H +++ b/src/TurbulenceModels/turbulenceModels/eddyViscosity/eddyViscosity.H @@ -127,6 +127,10 @@ public: //- Return the Reynolds stress tensor virtual tmp<volSymmTensorField> R() const; + //- Validate the turbulence fields after construction + // Update turbulence viscosity and other derived fields as requires + virtual void validate(); + //- Solve the turbulence equations and correct the turbulence viscosity virtual void correct() = 0; }; diff --git a/src/TurbulenceModels/turbulenceModels/turbulenceModel.C b/src/TurbulenceModels/turbulenceModels/turbulenceModel.C index 0cee0437681..58a1c34ebd0 100644 --- a/src/TurbulenceModels/turbulenceModels/turbulenceModel.C +++ b/src/TurbulenceModels/turbulenceModels/turbulenceModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -84,6 +84,10 @@ bool Foam::turbulenceModel::read() } +void Foam::turbulenceModel::validate() +{} + + void Foam::turbulenceModel::correct() { if (mesh_.changing()) diff --git a/src/TurbulenceModels/turbulenceModels/turbulenceModel.H b/src/TurbulenceModels/turbulenceModels/turbulenceModel.H index a634cedcbe5..43b848b23f0 100644 --- a/src/TurbulenceModels/turbulenceModels/turbulenceModel.H +++ b/src/TurbulenceModels/turbulenceModels/turbulenceModel.H @@ -205,6 +205,10 @@ public: //- Return the Reynolds stress tensor virtual tmp<volSymmTensorField> R() const = 0; + //- Validate the turbulence fields after construction + // Update derived fields as required + virtual void validate(); + //- Solve the turbulence equations and correct the turbulence viscosity virtual void correct() = 0; }; -- GitLab