From 1e2550b6cd5eca51b7ffbe89dd72ab7d8a4426dc Mon Sep 17 00:00:00 2001 From: Henry Weller Date: Fri, 31 May 2019 19:40:32 +0100 Subject: [PATCH] Rationalised wall function implementation to avoid complex and inconsistent coefficients All wall functions now operate collaboratively, obtaining the Cmu, kappa and E coefficients and yPlusLam from the nutWallFunction base class. Now these optional inputs need only be specified in the nut boundary condition with the k, epsilon, omega, v2 and f wall functions obtaining these values from there. This is much simpler to specify and avoids inconsistencies in the operation of the wall functions for the different turbulence fields. The code has also been rationalised and simplified avoiding unnecessary code and duplication. --- ...allBoilingWallFunctionFvPatchScalarField.C | 4 +- ...ayatillekeWallFunctionFvPatchScalarField.C | 95 ++++++-------- ...ayatillekeWallFunctionFvPatchScalarField.H | 14 +- ...allBoilingWallFunctionFvPatchScalarField.C | 38 ++++-- ...ayatillekeWallFunctionFvPatchScalarField.C | 97 +++++--------- ...ayatillekeWallFunctionFvPatchScalarField.H | 14 +- ...ayatillekeWallFunctionFvPatchScalarField.C | 95 ++++---------- ...ayatillekeWallFunctionFvPatchScalarField.H | 5 +- .../epsilonWallFunctionFvPatchScalarField.C | 99 +++----------- .../epsilonWallFunctionFvPatchScalarField.H | 34 +---- .../fWallFunctionFvPatchScalarField.C | 122 +++-------------- .../fWallFunctionFvPatchScalarField.H | 47 +------ .../kLowReWallFunctionFvPatchScalarField.C | 112 +++------------- .../kLowReWallFunctionFvPatchScalarField.H | 30 +---- .../kqRWallFunctionFvPatchField.C | 40 +----- .../kqRWallFunctionFvPatchField.H | 6 - .../nutLowReWallFunctionFvPatchScalarField.H | 1 + .../nutURoughWallFunctionFvPatchScalarField.H | 1 + ...tUSpaldingWallFunctionFvPatchScalarField.H | 1 + ...UTabulatedWallFunctionFvPatchScalarField.H | 1 + .../nutUWallFunctionFvPatchScalarField.H | 1 + .../nutWallFunctionFvPatchScalarField.H | 20 ++- .../nutkRoughWallFunctionFvPatchScalarField.H | 1 + .../nutkWallFunctionFvPatchScalarField.H | 1 + .../omegaWallFunctionFvPatchScalarField.C | 95 +++----------- .../omegaWallFunctionFvPatchScalarField.H | 32 +---- .../v2WallFunctionFvPatchScalarField.C | 124 +++--------------- .../v2WallFunctionFvPatchScalarField.H | 47 +------ tutorials/incompressible/simpleFoam/T3A/0/nut | 2 +- 29 files changed, 284 insertions(+), 895 deletions(-) diff --git a/applications/solvers/multiphase/reactingEulerFoam/derivedFvPatchFields/alphatFixedDmdtWallBoilingWallFunction/alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField.C b/applications/solvers/multiphase/reactingEulerFoam/derivedFvPatchFields/alphatFixedDmdtWallBoilingWallFunction/alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField.C index 8456d861f4..7a6e41a482 100644 --- a/applications/solvers/multiphase/reactingEulerFoam/derivedFvPatchFields/alphatFixedDmdtWallBoilingWallFunction/alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField.C +++ b/applications/solvers/multiphase/reactingEulerFoam/derivedFvPatchFields/alphatFixedDmdtWallBoilingWallFunction/alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField.C @@ -48,9 +48,7 @@ alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField relax_(1.0), fixedDmdt_(0.0), L_(0.0) -{ - checkType(); -} +{} alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField:: diff --git a/applications/solvers/multiphase/reactingEulerFoam/derivedFvPatchFields/alphatPhaseChangeJayatillekeWallFunction/alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField.C b/applications/solvers/multiphase/reactingEulerFoam/derivedFvPatchFields/alphatPhaseChangeJayatillekeWallFunction/alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField.C index 0d366a01cb..024f8c862e 100644 --- a/applications/solvers/multiphase/reactingEulerFoam/derivedFvPatchFields/alphatPhaseChangeJayatillekeWallFunction/alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField.C +++ b/applications/solvers/multiphase/reactingEulerFoam/derivedFvPatchFields/alphatPhaseChangeJayatillekeWallFunction/alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField.C @@ -24,14 +24,11 @@ License \*---------------------------------------------------------------------------*/ #include "alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField.H" -#include "fvPatchFieldMapper.H" -#include "addToRunTimeSelectionTable.H" - #include "phaseSystem.H" #include "compressibleTurbulenceModel.H" #include "ThermalDiffusivity.H" #include "PhaseCompressibleTurbulenceModel.H" -#include "wallFvPatch.H" +#include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -51,18 +48,6 @@ label alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField::maxIters_ // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -void alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField::checkType() -{ - if (!isA(patch())) - { - FatalErrorInFunction - << "Patch type for patch " << patch().name() << " must be wall\n" - << "Current patch type is " << patch().type() << nl - << exit(FatalError); - } -} - - tmp alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField::Psmooth ( @@ -76,6 +61,7 @@ alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField::Psmooth tmp alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField::yPlusTherm ( + const nutWallFunctionFvPatchScalarField& nutw, const scalarField& P, const scalarField& Prat ) const @@ -89,9 +75,10 @@ alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField::yPlusTherm for (int i=0; i + ( + turbModel.nut()().boundaryField()[patchi] + ); + + const scalar Cmu25 = pow025(nutw.Cmu()); const scalarField& y = turbModel.y()[patchi]; @@ -183,7 +176,7 @@ alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField::calcAlphat // Thermal sublayer thickness scalarField P(this->Psmooth(Prat)); - scalarField yPlusTherm(this->yPlusTherm(P, Prat)); + scalarField yPlusTherm(this->yPlusTherm(nutw, P, Prat)); tmp talphatConv(new scalarField(this->size())); scalarField& alphatConv = talphatConv.ref(); @@ -195,21 +188,31 @@ alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField::calcAlphat scalar alphaEff = 0.0; if (yPlus[facei] < yPlusTherm[facei]) { - scalar A = qDot[facei]*rhow[facei]*uTau[facei]*y[facei]; - scalar B = qDot[facei]*Pr[facei]*yPlus[facei]; - scalar C = Pr[facei]*0.5*rhow[facei]*uTau[facei]*sqr(magUp[facei]); + const scalar A = qDot[facei]*rhow[facei]*uTau[facei]*y[facei]; + + const scalar B = qDot[facei]*Pr[facei]*yPlus[facei]; + + const scalar C = + Pr[facei]*0.5*rhow[facei]*uTau[facei]*sqr(magUp[facei]); + alphaEff = A/(B + C + vSmall); } else { - scalar A = qDot[facei]*rhow[facei]*uTau[facei]*y[facei]; - scalar B = - qDot[facei]*Prt_*(1.0/kappa_*log(E_*yPlus[facei]) + P[facei]); - scalar magUc = - uTau[facei]/kappa_*log(E_*yPlusTherm[facei]) - mag(Uw[facei]); - scalar C = + const scalar A = qDot[facei]*rhow[facei]*uTau[facei]*y[facei]; + + const scalar B = + qDot[facei]*Prt_ + *(1.0/nutw.kappa()*log(nutw.E()*yPlus[facei]) + P[facei]); + + const scalar magUc = + uTau[facei]/nutw.kappa() + *log(nutw.E()*yPlusTherm[facei]) - mag(Uw[facei]); + + const scalar C = 0.5*rhow[facei]*uTau[facei] *(Prt_*sqr(magUp[facei]) + (Pr[facei] - Prt_)*sqr(magUc)); + alphaEff = A/(B + C + vSmall); } @@ -231,13 +234,8 @@ alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField ) : alphatPhaseChangeWallFunctionFvPatchScalarField(p, iF), - Prt_(0.85), - Cmu_(0.09), - kappa_(0.41), - E_(9.8) -{ - checkType(); -} + Prt_(0.85) +{} alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField:: @@ -249,10 +247,7 @@ alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField ) : alphatPhaseChangeWallFunctionFvPatchScalarField(p, iF, dict), - Prt_(dict.lookupOrDefault("Prt", 0.85)), - Cmu_(dict.lookupOrDefault("Cmu", 0.09)), - kappa_(dict.lookupOrDefault("kappa", 0.41)), - E_(dict.lookupOrDefault("E", 9.8)) + Prt_(dict.lookupOrDefault("Prt", 0.85)) {} @@ -266,10 +261,7 @@ alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField ) : alphatPhaseChangeWallFunctionFvPatchScalarField(ptf, p, iF, mapper), - Prt_(ptf.Prt_), - Cmu_(ptf.Cmu_), - kappa_(ptf.kappa_), - E_(ptf.E_) + Prt_(ptf.Prt_) {} @@ -280,10 +272,7 @@ alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField ) : alphatPhaseChangeWallFunctionFvPatchScalarField(awfpsf), - Prt_(awfpsf.Prt_), - Cmu_(awfpsf.Cmu_), - kappa_(awfpsf.kappa_), - E_(awfpsf.E_) + Prt_(awfpsf.Prt_) {} @@ -295,10 +284,7 @@ alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField ) : alphatPhaseChangeWallFunctionFvPatchScalarField(awfpsf, iF), - Prt_(awfpsf.Prt_), - Cmu_(awfpsf.Cmu_), - kappa_(awfpsf.kappa_), - E_(awfpsf.E_) + Prt_(awfpsf.Prt_) {} @@ -324,9 +310,6 @@ void alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField::write { fvPatchField::write(os); writeEntry(os, "Prt", Prt_); - writeEntry(os, "Cmu", Cmu_); - writeEntry(os, "kappa", kappa_); - writeEntry(os, "E", E_); writeEntry(os, "dmdt", dmdt_); writeEntry(os, "value", *this); } diff --git a/applications/solvers/multiphase/reactingEulerFoam/derivedFvPatchFields/alphatPhaseChangeJayatillekeWallFunction/alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField.H b/applications/solvers/multiphase/reactingEulerFoam/derivedFvPatchFields/alphatPhaseChangeJayatillekeWallFunction/alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField.H index 48f71c53ac..27521780b3 100644 --- a/applications/solvers/multiphase/reactingEulerFoam/derivedFvPatchFields/alphatPhaseChangeJayatillekeWallFunction/alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField.H +++ b/applications/solvers/multiphase/reactingEulerFoam/derivedFvPatchFields/alphatPhaseChangeJayatillekeWallFunction/alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField.H @@ -63,6 +63,7 @@ SourceFiles #define compressible_alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField_H #include "alphatPhaseChangeWallFunctionFvPatchScalarField.H" +#include "nutWallFunctionFvPatchScalarField.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -87,15 +88,6 @@ protected: //- Turbulent Prandtl number scalar Prt_; - //- Cmu coefficient - scalar Cmu_; - - //- Von Karman constant - scalar kappa_; - - //- E coefficient - scalar E_; - // Solution parameters static scalar maxExp_; @@ -105,15 +97,13 @@ protected: // Protected Member Functions - //- Check the type of the patch - void checkType(); - //- 'P' function tmp Psmooth(const scalarField& Prat) const; //- Calculate y+ at the edge of the thermal laminar sublayer tmp yPlusTherm ( + const nutWallFunctionFvPatchScalarField& nutw, const scalarField& P, const scalarField& Prat ) const; diff --git a/applications/solvers/multiphase/reactingEulerFoam/derivedFvPatchFields/alphatWallBoilingWallFunction/alphatWallBoilingWallFunctionFvPatchScalarField.C b/applications/solvers/multiphase/reactingEulerFoam/derivedFvPatchFields/alphatWallBoilingWallFunction/alphatWallBoilingWallFunctionFvPatchScalarField.C index 196b5a1654..775374f52e 100644 --- a/applications/solvers/multiphase/reactingEulerFoam/derivedFvPatchFields/alphatWallBoilingWallFunction/alphatWallBoilingWallFunctionFvPatchScalarField.C +++ b/applications/solvers/multiphase/reactingEulerFoam/derivedFvPatchFields/alphatWallBoilingWallFunction/alphatWallBoilingWallFunctionFvPatchScalarField.C @@ -24,17 +24,12 @@ License \*---------------------------------------------------------------------------*/ #include "alphatWallBoilingWallFunctionFvPatchScalarField.H" -#include "fvPatchFieldMapper.H" -#include "addToRunTimeSelectionTable.H" - #include "phaseSystem.H" #include "compressibleTurbulenceModel.H" #include "ThermalDiffusivity.H" #include "PhaseCompressibleTurbulenceModel.H" #include "saturationModel.H" -#include "wallFvPatch.H" -#include "uniformDimensionedFields.H" -#include "mathematicalConstants.H" +#include "addToRunTimeSelectionTable.H" using namespace Foam::constant::mathematical; @@ -428,9 +423,13 @@ void alphatWallBoilingWallFunctionFvPatchScalarField::updateCoeffs() ) ); - const tmp tnutw = turbModel.nut(patchi); + const nutWallFunctionFvPatchScalarField& nutw = + refCast + ( + turbModel.nut()().boundaryField()[patchi] + ); - const scalar Cmu25(pow025(Cmu_)); + const scalar Cmu25(pow025(nutw.Cmu())); const scalarField& y = turbModel.y()[patchi]; @@ -474,7 +473,7 @@ void alphatWallBoilingWallFunctionFvPatchScalarField::updateCoeffs() // Thermal sublayer thickness const scalarField P(this->Psmooth(Prat)); - const scalarField yPlusTherm(this->yPlusTherm(P, Prat)); + const scalarField yPlusTherm(this->yPlusTherm(nutw, P, Prat)); tmp tCp = liquid.thermo().Cp(); const volScalarField& Cp = tCp(); @@ -517,11 +516,24 @@ void alphatWallBoilingWallFunctionFvPatchScalarField::updateCoeffs() { // Liquid temperature at y+=250 is estimated from logarithmic // thermal wall function (Koncar, Krepper & Egorov, 2005) - const scalarField Tplus_y250(Prt_*(log(E_*250)/kappa_ + P)); + const scalarField Tplus_y250 + ( + Prt_*(log(nutw.E()*250)/nutw.kappa() + P) + ); - const scalarField Tplus(Prt_*(log(E_*yPlus)/kappa_ + P)); - scalarField Tl(Tw - (Tplus_y250/Tplus)*(Tw - Tc)); - Tl = max(Tc - 40, Tl); + const scalarField Tplus + ( + Prt_*(log(nutw.E()*yPlus)/nutw.kappa() + P) + ); + + const scalarField Tl + ( + max + ( + Tc - 40, + Tw - (Tplus_y250/Tplus)*(Tw - Tc) + ) + ); // Nucleation site density: const scalarField N diff --git a/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C index ffc3c7876f..06bd9bb6f7 100644 --- a/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C @@ -25,10 +25,7 @@ License #include "alphatJayatillekeWallFunctionFvPatchScalarField.H" #include "turbulentFluidThermoModel.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" #include "addToRunTimeSelectionTable.H" -#include "wallFvPatch.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -45,18 +42,6 @@ label alphatJayatillekeWallFunctionFvPatchScalarField::maxIters_ = 10; // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -void alphatJayatillekeWallFunctionFvPatchScalarField::checkType() -{ - if (!isA(patch())) - { - FatalErrorInFunction - << "Patch type for patch " << patch().name() << " must be wall\n" - << "Current patch type is " << patch().type() << nl - << exit(FatalError); - } -} - - scalar alphatJayatillekeWallFunctionFvPatchScalarField::Psmooth ( const scalar Prat @@ -68,6 +53,7 @@ scalar alphatJayatillekeWallFunctionFvPatchScalarField::Psmooth scalar alphatJayatillekeWallFunctionFvPatchScalarField::yPlusTherm ( + const nutWallFunctionFvPatchScalarField& nutw, const scalar P, const scalar Prat ) const @@ -76,8 +62,8 @@ scalar alphatJayatillekeWallFunctionFvPatchScalarField::yPlusTherm for (int i=0; i("Prt", 0.85)), - Cmu_(dict.lookupOrDefault("Cmu", 0.09)), - kappa_(dict.lookupOrDefault("kappa", 0.41)), - E_(dict.lookupOrDefault("E", 9.8)) -{ - checkType(); -} + Prt_(dict.lookupOrDefault("Prt", 0.85)) +{} alphatJayatillekeWallFunctionFvPatchScalarField:: @@ -159,13 +132,8 @@ alphatJayatillekeWallFunctionFvPatchScalarField ) : fixedValueFvPatchScalarField(awfpsf), - Prt_(awfpsf.Prt_), - Cmu_(awfpsf.Cmu_), - kappa_(awfpsf.kappa_), - E_(awfpsf.E_) -{ - checkType(); -} + Prt_(awfpsf.Prt_) +{} alphatJayatillekeWallFunctionFvPatchScalarField:: @@ -176,13 +144,8 @@ alphatJayatillekeWallFunctionFvPatchScalarField ) : fixedValueFvPatchScalarField(awfpsf, iF), - Prt_(awfpsf.Prt_), - Cmu_(awfpsf.Cmu_), - kappa_(awfpsf.kappa_), - E_(awfpsf.E_) -{ - checkType(); -} + Prt_(awfpsf.Prt_) +{} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // @@ -207,7 +170,13 @@ void alphatJayatillekeWallFunctionFvPatchScalarField::updateCoeffs() ) ); - const scalar Cmu25 = pow025(Cmu_); + const nutWallFunctionFvPatchScalarField& nutw = + refCast + ( + turbModel.nut()().boundaryField()[patchi] + ); + + const scalar Cmu25 = pow025(nutw.Cmu()); const scalarField& y = turbModel.y()[patchi]; @@ -253,25 +222,34 @@ void alphatJayatillekeWallFunctionFvPatchScalarField::updateCoeffs() // Thermal sublayer thickness scalar P = Psmooth(Prat); - scalar yPlusTherm = this->yPlusTherm(P, Prat); + scalar yPlusTherm = this->yPlusTherm(nutw, P, Prat); // Evaluate new effective thermal diffusivity scalar alphaEff = 0.0; if (yPlus < yPlusTherm) { - scalar A = qDot[facei]*rhow[facei]*uTau*y[facei]; - scalar B = qDot[facei]*Pr*yPlus; - scalar C = Pr*0.5*rhow[facei]*uTau*sqr(magUp[facei]); + const scalar A = qDot[facei]*rhow[facei]*uTau*y[facei]; + + const scalar B = qDot[facei]*Pr*yPlus; + + const scalar C = Pr*0.5*rhow[facei]*uTau*sqr(magUp[facei]); + alphaEff = A/(B + C + vSmall); } else { - scalar A = qDot[facei]*rhow[facei]*uTau*y[facei]; - scalar B = qDot[facei]*Prt_*(1.0/kappa_*log(E_*yPlus) + P); - scalar magUc = uTau/kappa_*log(E_*yPlusTherm) - mag(Uw[facei]); - scalar C = + const scalar A = qDot[facei]*rhow[facei]*uTau*y[facei]; + + const scalar B = + qDot[facei]*Prt_*(1.0/nutw.kappa()*log(nutw.E()*yPlus) + P); + + const scalar magUc = + uTau/nutw.kappa()*log(nutw.E()*yPlusTherm) - mag(Uw[facei]); + + const scalar C = 0.5*rhow[facei]*uTau *(Prt_*sqr(magUp[facei]) + (Pr - Prt_)*sqr(magUc)); + alphaEff = A/(B + C + vSmall); } @@ -301,9 +279,6 @@ void alphatJayatillekeWallFunctionFvPatchScalarField::write(Ostream& os) const { fvPatchField::write(os); writeEntry(os, "Prt", Prt_); - writeEntry(os, "Cmu", Cmu_); - writeEntry(os, "kappa", kappa_); - writeEntry(os, "E", E_); writeEntry(os, "value", *this); } diff --git a/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.H b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.H index 9171cec7e6..1c68ba1d1d 100644 --- a/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.H +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.H @@ -61,6 +61,7 @@ SourceFiles #define alphatJayatillekeWallFunctionFvPatchScalarField_H #include "fixedValueFvPatchFields.H" +#include "nutWallFunctionFvPatchScalarField.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -82,15 +83,6 @@ class alphatJayatillekeWallFunctionFvPatchScalarField //- Turbulent Prandtl number scalar Prt_; - //- Cmu coefficient - scalar Cmu_; - - //- Von Karman constant - scalar kappa_; - - //- E coefficient - scalar E_; - // Solution parameters @@ -101,15 +93,13 @@ class alphatJayatillekeWallFunctionFvPatchScalarField // Private Member Functions - //- Check the type of the patch - void checkType(); - //- `P' function scalar Psmooth(const scalar Prat) const; //- Calculate y+ at the edge of the thermal laminar sublayer scalar yPlusTherm ( + const nutWallFunctionFvPatchScalarField& nutw, const scalar P, const scalar Prat ) const; diff --git a/src/TurbulenceModels/incompressible/turbulentTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C index 18f5caffcf..44e36e22da 100644 --- a/src/TurbulenceModels/incompressible/turbulentTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C @@ -25,9 +25,6 @@ License #include "alphatJayatillekeWallFunctionFvPatchScalarField.H" #include "turbulenceModel.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "wallFvPatch.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -44,20 +41,6 @@ label alphatJayatillekeWallFunctionFvPatchScalarField::maxIters_ = 10; // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // -void alphatJayatillekeWallFunctionFvPatchScalarField::checkType() -{ - if (!isA(patch())) - { - FatalErrorInFunction - << "Invalid wall function specification" << nl - << " Patch type for patch " << patch().name() - << " must be wall" << nl - << " Current patch type is " << patch().type() << nl << endl - << abort(FatalError); - } -} - - scalar alphatJayatillekeWallFunctionFvPatchScalarField::Psmooth ( const scalar Prat @@ -69,6 +52,7 @@ scalar alphatJayatillekeWallFunctionFvPatchScalarField::Psmooth scalar alphatJayatillekeWallFunctionFvPatchScalarField::yPlusTherm ( + const nutWallFunctionFvPatchScalarField& nutw, const scalar P, const scalar Prat ) const @@ -77,8 +61,8 @@ scalar alphatJayatillekeWallFunctionFvPatchScalarField::yPlusTherm for (int i=0; i("Cmu", 0.09)), - kappa_(dict.lookupOrDefault("kappa", 0.41)), - E_(dict.lookupOrDefault("E", 9.8)) -{ - checkType(); -} + Prt_(readScalar(dict.lookup("Prt"))) // force read to avoid ambiguity +{} alphatJayatillekeWallFunctionFvPatchScalarField:: @@ -162,13 +131,8 @@ alphatJayatillekeWallFunctionFvPatchScalarField ) : fixedValueFvPatchScalarField(wfpsf), - Prt_(wfpsf.Prt_), - Cmu_(wfpsf.Cmu_), - kappa_(wfpsf.kappa_), - E_(wfpsf.E_) -{ - checkType(); -} + Prt_(wfpsf.Prt_) +{} alphatJayatillekeWallFunctionFvPatchScalarField:: @@ -179,13 +143,8 @@ alphatJayatillekeWallFunctionFvPatchScalarField ) : fixedValueFvPatchScalarField(wfpsf, iF), - Prt_(wfpsf.Prt_), - Cmu_(wfpsf.Cmu_), - kappa_(wfpsf.kappa_), - E_(wfpsf.E_) -{ - checkType(); -} + Prt_(wfpsf.Prt_) +{} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // @@ -210,7 +169,13 @@ void alphatJayatillekeWallFunctionFvPatchScalarField::updateCoeffs() ) ); - const scalar Cmu25 = pow(Cmu_, 0.25); + const nutWallFunctionFvPatchScalarField& nutw = + refCast + ( + turbModel.nut()().boundaryField()[patchi] + ); + + const scalar Cmu25 = pow(nutw.Cmu(), 0.25); const scalarField& y = turbModel.y()[patchi]; const tmp tnu = turbModel.nu(); const volScalarField& nu = tnu(); @@ -236,23 +201,24 @@ void alphatJayatillekeWallFunctionFvPatchScalarField::updateCoeffs() scalarField& alphatw = *this; forAll(alphatw, facei) { - label celli = patch().faceCells()[facei]; + const label celli = patch().faceCells()[facei]; - // y+ - scalar yPlus = Cmu25*sqrt(k[celli])*y[facei]/nuw[facei]; + const scalar yPlus = Cmu25*sqrt(k[celli])*y[facei]/nuw[facei]; // Molecular-to-turbulent Prandtl number ratio - scalar Prat = Pr/Prt_; + const scalar Prat = Pr/Prt_; // Thermal sublayer thickness - scalar P = Psmooth(Prat); - scalar yPlusTherm = this->yPlusTherm(P, Prat); + const scalar P = Psmooth(Prat); + const scalar yPlusTherm = this->yPlusTherm(nutw, P, Prat); // Update turbulent thermal conductivity if (yPlus > yPlusTherm) { - scalar nu = nuw[facei]; - scalar kt = nu*(yPlus/(Prt_*(log(E_*yPlus)/kappa_ + P)) - 1/Pr); + const scalar nu = nuw[facei]; + const scalar kt = + nu*(yPlus/(Prt_*(log(nutw.E()*yPlus)/nutw.kappa() + P)) - 1/Pr); + alphatw[facei] = max(0.0, kt); } else @@ -269,9 +235,6 @@ void alphatJayatillekeWallFunctionFvPatchScalarField::write(Ostream& os) const { fvPatchField::write(os); writeEntry(os, "Prt", Prt_); - writeEntry(os, "Cmu", Cmu_); - writeEntry(os, "kappa", kappa_); - writeEntry(os, "E", E_); writeEntry(os, "value", *this); } diff --git a/src/TurbulenceModels/incompressible/turbulentTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.H b/src/TurbulenceModels/incompressible/turbulentTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.H index 91ad044db7..02bb729bd8 100644 --- a/src/TurbulenceModels/incompressible/turbulentTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.H +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.H @@ -60,6 +60,7 @@ SourceFiles #define alphatJayatillekeWallFunctionFvPatchScalarField_H #include "fixedValueFvPatchFields.H" +#include "nutWallFunctionFvPatchScalarField.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -101,15 +102,13 @@ protected: // Protected member functions - //- Check the type of the patch - virtual void checkType(); - //- `P' function scalar Psmooth(const scalar Prat) const; //- Calculate y+ at the edge of the thermal laminar sublayer scalar yPlusTherm ( + const nutWallFunctionFvPatchScalarField& nutw, const scalar P, const scalar Prat ) const; diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.C b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.C index 35cbf6b942..0053ad556c 100644 --- a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.C +++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.C @@ -26,10 +26,7 @@ License #include "epsilonWallFunctionFvPatchScalarField.H" #include "nutWallFunctionFvPatchScalarField.H" #include "turbulenceModel.H" -#include "fvPatchFieldMapper.H" #include "fvMatrix.H" -#include "volFields.H" -#include "wallFvPatch.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -38,31 +35,6 @@ Foam::scalar Foam::epsilonWallFunctionFvPatchScalarField::tolerance_ = 1e-5; // * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // -void Foam::epsilonWallFunctionFvPatchScalarField::checkType() -{ - if (!isA(patch())) - { - FatalErrorInFunction - << "Invalid wall function specification" << nl - << " Patch type for patch " << patch().name() - << " must be wall" << nl - << " Current patch type is " << patch().type() << nl << endl - << abort(FatalError); - } -} - - -void Foam::epsilonWallFunctionFvPatchScalarField::writeLocalEntries -( - Ostream& os -) const -{ - writeEntry(os, "Cmu", Cmu_); - writeEntry(os, "kappa", kappa_); - writeEntry(os, "E", E_); -} - - void Foam::epsilonWallFunctionFvPatchScalarField::setMaster() { if (master_ != -1) @@ -211,24 +183,27 @@ void Foam::epsilonWallFunctionFvPatchScalarField::calculate { const label patchi = patch.index(); + const nutWallFunctionFvPatchScalarField& nutw = + refCast + ( + turbModel.nut()().boundaryField()[patchi] + ); + const scalarField& y = turbModel.y()[patchi]; - const scalar Cmu25 = pow025(Cmu_); - const scalar Cmu75 = pow(Cmu_, 0.75); - - const tmp tk = turbModel.k(); - const volScalarField& k = tk(); - const tmp tnuw = turbModel.nu(patchi); const scalarField& nuw = tnuw(); - const tmp tnutw = turbModel.nut(patchi); - const scalarField& nutw = tnutw(); + const tmp tk = turbModel.k(); + const volScalarField& k = tk(); const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi]; const scalarField magGradUw(mag(Uw.snGrad())); + const scalar Cmu25 = pow025(nutw.Cmu()); + const scalar Cmu75 = pow(nutw.Cmu(), 0.75); + // Set epsilon and G forAll(nutw, facei) { @@ -238,16 +213,17 @@ void Foam::epsilonWallFunctionFvPatchScalarField::calculate const scalar w = cornerWeights[facei]; - if (yPlus > yPlusLam_) + if (yPlus > nutw.yPlusLam()) { - epsilon0[celli] += w*Cmu75*pow(k[celli], 1.5)/(kappa_*y[facei]); + epsilon0[celli] += + w*Cmu75*pow(k[celli], 1.5)/(nutw.kappa()*y[facei]); G0[celli] += w *(nutw[facei] + nuw[facei]) *magGradUw[facei] *Cmu25*sqrt(k[celli]) - /(kappa_*y[facei]); + /(nutw.kappa()*y[facei]); } else { @@ -267,18 +243,12 @@ epsilonWallFunctionFvPatchScalarField ) : fixedValueFvPatchField(p, iF), - Cmu_(0.09), - kappa_(0.41), - E_(9.8), - yPlusLam_(nutWallFunctionFvPatchScalarField::yPlusLam(kappa_, E_)), G_(), epsilon_(), initialised_(false), master_(-1), cornerWeights_() -{ - checkType(); -} +{} Foam::epsilonWallFunctionFvPatchScalarField:: @@ -290,18 +260,12 @@ epsilonWallFunctionFvPatchScalarField ) : fixedValueFvPatchField(p, iF, dict), - Cmu_(dict.lookupOrDefault("Cmu", 0.09)), - kappa_(dict.lookupOrDefault("kappa", 0.41)), - E_(dict.lookupOrDefault("E", 9.8)), - yPlusLam_(nutWallFunctionFvPatchScalarField::yPlusLam(kappa_, E_)), G_(), epsilon_(), initialised_(false), master_(-1), cornerWeights_() { - checkType(); - // Apply zero-gradient condition on start-up this->operator==(patchInternalField()); } @@ -317,18 +281,12 @@ epsilonWallFunctionFvPatchScalarField ) : fixedValueFvPatchField(ptf, p, iF, mapper), - Cmu_(ptf.Cmu_), - kappa_(ptf.kappa_), - E_(ptf.E_), - yPlusLam_(ptf.yPlusLam_), G_(), epsilon_(), initialised_(false), master_(-1), cornerWeights_() -{ - checkType(); -} +{} Foam::epsilonWallFunctionFvPatchScalarField:: @@ -338,18 +296,12 @@ epsilonWallFunctionFvPatchScalarField ) : fixedValueFvPatchField(ewfpsf), - Cmu_(ewfpsf.Cmu_), - kappa_(ewfpsf.kappa_), - E_(ewfpsf.E_), - yPlusLam_(ewfpsf.yPlusLam_), G_(), epsilon_(), initialised_(false), master_(-1), cornerWeights_() -{ - checkType(); -} +{} Foam::epsilonWallFunctionFvPatchScalarField:: @@ -360,18 +312,12 @@ epsilonWallFunctionFvPatchScalarField ) : fixedValueFvPatchField(ewfpsf, iF), - Cmu_(ewfpsf.Cmu_), - kappa_(ewfpsf.kappa_), - E_(ewfpsf.E_), - yPlusLam_(ewfpsf.yPlusLam_), G_(), epsilon_(), initialised_(false), master_(-1), cornerWeights_() -{ - checkType(); -} +{} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // @@ -590,13 +536,6 @@ void Foam::epsilonWallFunctionFvPatchScalarField::manipulateMatrix } -void Foam::epsilonWallFunctionFvPatchScalarField::write(Ostream& os) const -{ - writeLocalEntries(os); - fixedValueFvPatchField::write(os); -} - - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.H b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.H index 6800c2868d..70a323d54b 100644 --- a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.H +++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.H @@ -40,16 +40,10 @@ Description \endvartable The model switches between laminar and turbulent functions based on the - laminar-to-turbulent y+ value derived from kappa and E. + laminar-to-turbulent y+ value derived from the kappa and E specified in the + corresponding nutWallFunction. Usage - \table - Property | Description | Required | Default value - Cmu | model coefficient | no | 0.09 - kappa | Von Karman constant | no | 0.41 - E | model coefficient | no | 9.8 - \endtable - Example of the boundary condition specification: \verbatim @@ -94,18 +88,6 @@ protected: //- Tolerance used in weighted calculations static scalar tolerance_; - //- Cmu coefficient - scalar Cmu_; - - //- Von Karman constant - scalar kappa_; - - //- E coefficient - scalar E_; - - //- y+ at the edge of the laminar sublayer - scalar yPlusLam_; - //- Local copy of turbulence G field scalarField G_; @@ -124,12 +106,6 @@ protected: // Protected Member Functions - //- Check the type of the patch - virtual void checkType(); - - //- Write local wall function variables - virtual void writeLocalEntries(Ostream&) const; - //- Set the master patch - master is responsible for updating all // wall function patches virtual void setMaster(); @@ -270,12 +246,6 @@ public: fvMatrix& matrix, const scalarField& weights ); - - - // I-O - - //- Write - virtual void write(Ostream&) const; }; diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/fWallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.C b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/fWallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.C index ccc2ed365e..5e5ad84af3 100644 --- a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/fWallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.C +++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/fWallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.C @@ -24,9 +24,8 @@ License \*---------------------------------------------------------------------------*/ #include "fWallFunctionFvPatchScalarField.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "wallFvPatch.H" +#include "nutWallFunctionFvPatchScalarField.H" +#include "turbulenceModel.H" #include "v2f.H" #include "addToRunTimeSelectionTable.H" @@ -37,47 +36,6 @@ namespace Foam namespace RASModels { -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -void fWallFunctionFvPatchScalarField::checkType() -{ - if (!isA(patch())) - { - FatalErrorInFunction - << "Invalid wall function specification" << nl - << " Patch type for patch " << patch().name() - << " must be wall" << nl - << " Current patch type is " << patch().type() << nl << endl - << abort(FatalError); - } -} - - -void fWallFunctionFvPatchScalarField::writeLocalEntries(Ostream& os) const -{ - writeEntry(os, "Cmu", Cmu_); - writeEntry(os, "kappa", kappa_); - writeEntry(os, "E", E_); -} - - -scalar fWallFunctionFvPatchScalarField::yPlusLam -( - const scalar kappa, - const scalar E -) -{ - scalar ypl = 11.0; - - for (int i=0; i<10; i++) - { - ypl = log(max(E*ypl, 1))/kappa; - } - - return ypl; -} - - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // fWallFunctionFvPatchScalarField::fWallFunctionFvPatchScalarField @@ -86,14 +44,8 @@ fWallFunctionFvPatchScalarField::fWallFunctionFvPatchScalarField const DimensionedField& iF ) : - fixedValueFvPatchField(p, iF), - Cmu_(0.09), - kappa_(0.41), - E_(9.8), - yPlusLam_(yPlusLam(kappa_, E_)) -{ - checkType(); -} + fixedValueFvPatchField(p, iF) +{} fWallFunctionFvPatchScalarField::fWallFunctionFvPatchScalarField @@ -104,14 +56,8 @@ fWallFunctionFvPatchScalarField::fWallFunctionFvPatchScalarField const fvPatchFieldMapper& mapper ) : - fixedValueFvPatchField(ptf, p, iF, mapper), - Cmu_(ptf.Cmu_), - kappa_(ptf.kappa_), - E_(ptf.E_), - yPlusLam_(ptf.yPlusLam_) -{ - checkType(); -} + fixedValueFvPatchField(ptf, p, iF, mapper) +{} fWallFunctionFvPatchScalarField::fWallFunctionFvPatchScalarField @@ -121,14 +67,8 @@ fWallFunctionFvPatchScalarField::fWallFunctionFvPatchScalarField const dictionary& dict ) : - fixedValueFvPatchField(p, iF, dict), - Cmu_(dict.lookupOrDefault("Cmu", 0.09)), - kappa_(dict.lookupOrDefault("kappa", 0.41)), - E_(dict.lookupOrDefault("E", 9.8)), - yPlusLam_(yPlusLam(kappa_, E_)) -{ - checkType(); -} + fixedValueFvPatchField(p, iF, dict) +{} fWallFunctionFvPatchScalarField::fWallFunctionFvPatchScalarField @@ -136,14 +76,8 @@ fWallFunctionFvPatchScalarField::fWallFunctionFvPatchScalarField const fWallFunctionFvPatchScalarField& v2wfpsf ) : - fixedValueFvPatchField(v2wfpsf), - Cmu_(v2wfpsf.Cmu_), - kappa_(v2wfpsf.kappa_), - E_(v2wfpsf.E_), - yPlusLam_(v2wfpsf.yPlusLam_) -{ - checkType(); -} + fixedValueFvPatchField(v2wfpsf) +{} fWallFunctionFvPatchScalarField::fWallFunctionFvPatchScalarField @@ -152,14 +86,8 @@ fWallFunctionFvPatchScalarField::fWallFunctionFvPatchScalarField const DimensionedField& iF ) : - fixedValueFvPatchField(v2wfpsf, iF), - Cmu_(v2wfpsf.Cmu_), - kappa_(v2wfpsf.kappa_), - E_(v2wfpsf.E_), - yPlusLam_(v2wfpsf.yPlusLam_) -{ - checkType(); -} + fixedValueFvPatchField(v2wfpsf, iF) +{} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // @@ -183,6 +111,12 @@ void fWallFunctionFvPatchScalarField::updateCoeffs() ); const v2fBase& v2fModel = refCast(turbModel); + const nutWallFunctionFvPatchScalarField& nutw = + refCast + ( + turbModel.nut()().boundaryField()[patchi] + ); + const scalarField& y = turbModel.y()[patchi]; const tmp tk = turbModel.k(); @@ -197,7 +131,7 @@ void fWallFunctionFvPatchScalarField::updateCoeffs() const tmp tnuw = turbModel.nu(patchi); const scalarField& nuw = tnuw(); - const scalar Cmu25 = pow025(Cmu_); + const scalar Cmu25 = pow025(nutw.Cmu()); scalarField& f = *this; @@ -210,7 +144,7 @@ void fWallFunctionFvPatchScalarField::updateCoeffs() scalar yPlus = uTau*y[facei]/nuw[facei]; - if (yPlus > yPlusLam_) + if (yPlus > nutw.yPlusLam()) { scalar N = 6.0; scalar v2c = v2[celli]; @@ -232,22 +166,6 @@ void fWallFunctionFvPatchScalarField::updateCoeffs() } -void fWallFunctionFvPatchScalarField::evaluate -( - const Pstream::commsTypes commsType -) -{ - fixedValueFvPatchField::evaluate(commsType); -} - - -void fWallFunctionFvPatchScalarField::write(Ostream& os) const -{ - writeLocalEntries(os); - fixedValueFvPatchField::write(os); -} - - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // makePatchTypeField diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/fWallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.H b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/fWallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.H index 800d22f59e..9c6abacbe2 100644 --- a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/fWallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.H +++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/fWallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.H @@ -29,16 +29,10 @@ Description function condition for low- and high Reynolds number, turbulent flow cases The model operates in two modes, based on the computed laminar-to-turbulent - switch-over y+ value derived from kappa and E. + switch-over y+ value derived from kappa and E specified in the corresponding + nutWallFunction. Usage - \table - Property | Description | Required | Default value - Cmu | model coefficient | no | 0.09 - kappa | Von Karman constant | no | 0.41 - E | model coefficient | no | 9.8 - \endtable - Example of the boundary condition specification: \verbatim @@ -75,34 +69,6 @@ class fWallFunctionFvPatchScalarField : public fixedValueFvPatchField { -protected: - - // Protected data - - //- Cmu coefficient - scalar Cmu_; - - //- Von Karman constant - scalar kappa_; - - //- E coefficient - scalar E_; - - //- Y+ at the edge of the laminar sublayer - scalar yPlusLam_; - - - // Protected Member Functions - - //- Check the type of the patch - virtual void checkType(); - - //- Write local wall function variables - virtual void writeLocalEntries(Ostream&) const; - - //- Calculate the Y+ at the edge of the laminar sublayer - scalar yPlusLam(const scalar kappa, const scalar E); - public: @@ -178,15 +144,6 @@ public: //- Update the coefficients associated with the patch field virtual void updateCoeffs(); - - //- Evaluate the patchField - virtual void evaluate(const Pstream::commsTypes); - - - // I-O - - //- Write - virtual void write(Ostream&) const; }; diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.C b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.C index f939852819..b0f209f257 100644 --- a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.C +++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.C @@ -24,50 +24,15 @@ License \*---------------------------------------------------------------------------*/ #include "kLowReWallFunctionFvPatchScalarField.H" +#include "nutWallFunctionFvPatchScalarField.H" #include "turbulenceModel.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" #include "addToRunTimeSelectionTable.H" -#include "wallFvPatch.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -void kLowReWallFunctionFvPatchScalarField::checkType() -{ - if (!isA(patch())) - { - FatalErrorInFunction - << "Invalid wall function specification" << nl - << " Patch type for patch " << patch().name() - << " must be wall" << nl - << " Current patch type is " << patch().type() << nl << endl - << abort(FatalError); - } -} - - -scalar kLowReWallFunctionFvPatchScalarField::yPlusLam -( - const scalar kappa, - const scalar E -) -{ - scalar ypl = 11.0; - - for (int i=0; i<10; i++) - { - ypl = log(max(E*ypl, 1))/kappa; - } - - return ypl; -} - - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // kLowReWallFunctionFvPatchScalarField::kLowReWallFunctionFvPatchScalarField @@ -77,14 +42,8 @@ kLowReWallFunctionFvPatchScalarField::kLowReWallFunctionFvPatchScalarField ) : fixedValueFvPatchField(p, iF), - Cmu_(0.09), - kappa_(0.41), - E_(9.8), - Ceps2_(1.9), - yPlusLam_(yPlusLam(kappa_, E_)) -{ - checkType(); -} + Ceps2_(1.9) +{} kLowReWallFunctionFvPatchScalarField::kLowReWallFunctionFvPatchScalarField @@ -96,14 +55,8 @@ kLowReWallFunctionFvPatchScalarField::kLowReWallFunctionFvPatchScalarField ) : fixedValueFvPatchField(ptf, p, iF, mapper), - Cmu_(ptf.Cmu_), - kappa_(ptf.kappa_), - E_(ptf.E_), - Ceps2_(ptf.Ceps2_), - yPlusLam_(ptf.yPlusLam_) -{ - checkType(); -} + Ceps2_(ptf.Ceps2_) +{} kLowReWallFunctionFvPatchScalarField::kLowReWallFunctionFvPatchScalarField @@ -114,14 +67,8 @@ kLowReWallFunctionFvPatchScalarField::kLowReWallFunctionFvPatchScalarField ) : fixedValueFvPatchField(p, iF, dict), - Cmu_(dict.lookupOrDefault("Cmu", 0.09)), - kappa_(dict.lookupOrDefault("kappa", 0.41)), - E_(dict.lookupOrDefault("E", 9.8)), - Ceps2_(dict.lookupOrDefault("Ceps2", 1.9)), - yPlusLam_(yPlusLam(kappa_, E_)) -{ - checkType(); -} + Ceps2_(dict.lookupOrDefault("Ceps2", 1.9)) +{} kLowReWallFunctionFvPatchScalarField::kLowReWallFunctionFvPatchScalarField @@ -130,14 +77,8 @@ kLowReWallFunctionFvPatchScalarField::kLowReWallFunctionFvPatchScalarField ) : fixedValueFvPatchField(kwfpsf), - Cmu_(kwfpsf.Cmu_), - kappa_(kwfpsf.kappa_), - E_(kwfpsf.E_), - Ceps2_(kwfpsf.Ceps2_), - yPlusLam_(kwfpsf.yPlusLam_) -{ - checkType(); -} + Ceps2_(kwfpsf.Ceps2_) +{} kLowReWallFunctionFvPatchScalarField::kLowReWallFunctionFvPatchScalarField @@ -147,14 +88,8 @@ kLowReWallFunctionFvPatchScalarField::kLowReWallFunctionFvPatchScalarField ) : fixedValueFvPatchField(kwfpsf, iF), - Cmu_(kwfpsf.Cmu_), - kappa_(kwfpsf.kappa_), - E_(kwfpsf.E_), - Ceps2_(kwfpsf.Ceps2_), - yPlusLam_(kwfpsf.yPlusLam_) -{ - checkType(); -} + Ceps2_(kwfpsf.Ceps2_) +{} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // @@ -176,6 +111,13 @@ void kLowReWallFunctionFvPatchScalarField::updateCoeffs() internalField().group() ) ); + + const nutWallFunctionFvPatchScalarField& nutw = + refCast + ( + turbModel.nut()().boundaryField()[patchi] + ); + const scalarField& y = turbModel.y()[patchi]; const tmp tk = turbModel.k(); @@ -184,7 +126,7 @@ void kLowReWallFunctionFvPatchScalarField::updateCoeffs() const tmp tnuw = turbModel.nu(patchi); const scalarField& nuw = tnuw(); - const scalar Cmu25 = pow025(Cmu_); + const scalar Cmu25 = pow025(nutw.Cmu()); scalarField& kw = *this; @@ -197,11 +139,11 @@ void kLowReWallFunctionFvPatchScalarField::updateCoeffs() scalar yPlus = uTau*y[facei]/nuw[facei]; - if (yPlus > yPlusLam_) + if (yPlus > nutw.yPlusLam()) { scalar Ck = -0.416; scalar Bk = 8.366; - kw[facei] = Ck/kappa_*log(yPlus) + Bk; + kw[facei] = Ck/nutw.kappa()*log(yPlus) + Bk; } else { @@ -222,20 +164,8 @@ void kLowReWallFunctionFvPatchScalarField::updateCoeffs() } -void kLowReWallFunctionFvPatchScalarField::evaluate -( - const Pstream::commsTypes commsType -) -{ - fixedValueFvPatchField::evaluate(commsType); -} - - void kLowReWallFunctionFvPatchScalarField::write(Ostream& os) const { - writeEntry(os, "Cmu", Cmu_); - writeEntry(os, "kappa", kappa_); - writeEntry(os, "E", E_); writeEntry(os, "Ceps2", Ceps2_); fixedValueFvPatchField::write(os); } diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.H b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.H index a8ae06a3cd..ea64ca556f 100644 --- a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.H +++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.H @@ -29,14 +29,12 @@ Description condition for low- and high-Reynolds number turbulent flow cases. The model operates in two modes, based on the computed laminar-to-turbulent - switch-over y+ value derived from kappa and E. + switch-over y+ value derived from kappa and E specified in the corresponding + nutWallFunction. Usage \table Property | Description | Required | Default value - Cmu | model coefficient | no | 0.09 - kappa | Von Karman constant | no | 0.41 - E | model coefficient | no | 9.8 Ceps2 | model coefficient | no | 1.9 \endtable @@ -78,30 +76,9 @@ protected: // Protected data - //- Cmu coefficient - scalar Cmu_; - - //- Von Karman constant - scalar kappa_; - - //- E coefficient - scalar E_; - //- Ceps2 coefficient scalar Ceps2_; - //- Y+ at the edge of the laminar sublayer - scalar yPlusLam_; - - - // Protected Member Functions - - //- Check the type of the patch - virtual void checkType(); - - //- Calculate the Y+ at the edge of the laminar sublayer - scalar yPlusLam(const scalar kappa, const scalar E); - public: @@ -178,9 +155,6 @@ public: //- Update the coefficients associated with the patch field virtual void updateCoeffs(); - //- Evaluate the patchField - virtual void evaluate(const Pstream::commsTypes); - // I-O diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.C b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.C index c8a808d6ec..ef7f2f3efb 100644 --- a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.C +++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.C @@ -24,27 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "kqRWallFunctionFvPatchField.H" -#include "fvPatchFieldMapper.H" #include "addToRunTimeSelectionTable.H" -#include "wallFvPatch.H" - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -template -void Foam::kqRWallFunctionFvPatchField::checkType() -{ - if (!isA(this->patch())) - { - FatalErrorInFunction - << "Invalid wall function specification" << nl - << " Patch type for patch " << this->patch().name() - << " must be wall" << nl - << " Current patch type is " << this->patch().type() - << nl << endl - << abort(FatalError); - } -} - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -56,9 +36,7 @@ Foam::kqRWallFunctionFvPatchField::kqRWallFunctionFvPatchField ) : zeroGradientFvPatchField(p, iF) -{ - checkType(); -} +{} template @@ -70,9 +48,7 @@ Foam::kqRWallFunctionFvPatchField::kqRWallFunctionFvPatchField ) : zeroGradientFvPatchField(p, iF, dict) -{ - checkType(); -} +{} template @@ -85,9 +61,7 @@ Foam::kqRWallFunctionFvPatchField::kqRWallFunctionFvPatchField ) : zeroGradientFvPatchField(ptf, p, iF, mapper) -{ - checkType(); -} +{} template @@ -97,9 +71,7 @@ Foam::kqRWallFunctionFvPatchField::kqRWallFunctionFvPatchField ) : zeroGradientFvPatchField(tkqrwfpf) -{ - checkType(); -} +{} template @@ -110,9 +82,7 @@ Foam::kqRWallFunctionFvPatchField::kqRWallFunctionFvPatchField ) : zeroGradientFvPatchField(tkqrwfpf, iF) -{ - checkType(); -} +{} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.H b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.H index 951bef3284..3fe4b3d0e9 100644 --- a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.H +++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.H @@ -68,12 +68,6 @@ class kqRWallFunctionFvPatchField public zeroGradientFvPatchField { - // Private Member Functions - - //- Check the type of the patch - void checkType(); - - public: //- Runtime type information diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutLowReWallFunction/nutLowReWallFunctionFvPatchScalarField.H b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutLowReWallFunction/nutLowReWallFunctionFvPatchScalarField.H index 9317f1a107..e7ec5dbad5 100644 --- a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutLowReWallFunction/nutLowReWallFunctionFvPatchScalarField.H +++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutLowReWallFunction/nutLowReWallFunctionFvPatchScalarField.H @@ -35,6 +35,7 @@ Usage { type nutLowReWallFunction; + value uniform 0; } \endverbatim diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutURoughWallFunction/nutURoughWallFunctionFvPatchScalarField.H b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutURoughWallFunction/nutURoughWallFunctionFvPatchScalarField.H index 5e40370620..36531a2298 100644 --- a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutURoughWallFunction/nutURoughWallFunctionFvPatchScalarField.H +++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutURoughWallFunction/nutURoughWallFunctionFvPatchScalarField.H @@ -44,6 +44,7 @@ Usage roughnessHeight 1e-5; roughnessConstant 0.5; roughnessFactor 1; + value uniform 0; } \endverbatim diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUSpaldingWallFunction/nutUSpaldingWallFunctionFvPatchScalarField.H b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUSpaldingWallFunction/nutUSpaldingWallFunctionFvPatchScalarField.H index 16191f73c2..7a4fcb4bfb 100644 --- a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUSpaldingWallFunction/nutUSpaldingWallFunctionFvPatchScalarField.H +++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUSpaldingWallFunction/nutUSpaldingWallFunctionFvPatchScalarField.H @@ -48,6 +48,7 @@ Usage { type nutUSpaldingWallFunction; + value uniform 0; } \endverbatim diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUTabulatedWallFunction/nutUTabulatedWallFunctionFvPatchScalarField.H b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUTabulatedWallFunction/nutUTabulatedWallFunctionFvPatchScalarField.H index 78d891a9e4..0100f1ecb0 100644 --- a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUTabulatedWallFunction/nutUTabulatedWallFunctionFvPatchScalarField.H +++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUTabulatedWallFunction/nutUTabulatedWallFunctionFvPatchScalarField.H @@ -42,6 +42,7 @@ Usage { type nutTabulatedWallFunction; uPlusTable myUPlusTable; + value uniform 0; } \endverbatim diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUWallFunction/nutUWallFunctionFvPatchScalarField.H b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUWallFunction/nutUWallFunctionFvPatchScalarField.H index 3cd38e9eea..88d9cceb6f 100644 --- a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUWallFunction/nutUWallFunctionFvPatchScalarField.H +++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUWallFunction/nutUWallFunctionFvPatchScalarField.H @@ -34,6 +34,7 @@ Usage { type nutUWallFunction; + value uniform 0; } \endverbatim diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutWallFunction/nutWallFunctionFvPatchScalarField.H b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutWallFunction/nutWallFunctionFvPatchScalarField.H index 66aa746e3f..1cd3dde7df 100644 --- a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutWallFunction/nutWallFunctionFvPatchScalarField.H +++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutWallFunction/nutWallFunctionFvPatchScalarField.H @@ -42,7 +42,7 @@ Usage { type nutWallFunction; - value uniform 0.0; + value uniform 0; } \endverbatim @@ -158,6 +158,24 @@ public: // Member functions + //- Return Cmu + scalar Cmu() const + { + return Cmu_; + } + + //- Return kappa + scalar kappa() const + { + return kappa_; + } + + //- Return E + scalar E() const + { + return E_; + } + //- Calculate the Y+ at the edge of the laminar sublayer static scalar yPlusLam(const scalar kappa, const scalar E); diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkRoughWallFunction/nutkRoughWallFunctionFvPatchScalarField.H b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkRoughWallFunction/nutkRoughWallFunctionFvPatchScalarField.H index 2938e58d46..b0b7da124b 100644 --- a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkRoughWallFunction/nutkRoughWallFunctionFvPatchScalarField.H +++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkRoughWallFunction/nutkRoughWallFunctionFvPatchScalarField.H @@ -48,6 +48,7 @@ Usage type nutkRoughWallFunction; Ks uniform 0; Cs uniform 0.5; + value uniform 0; } \endverbatim diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkWallFunction/nutkWallFunctionFvPatchScalarField.H b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkWallFunction/nutkWallFunctionFvPatchScalarField.H index 38662fd081..cb3aaf8329 100644 --- a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkWallFunction/nutkWallFunctionFvPatchScalarField.H +++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkWallFunction/nutkWallFunctionFvPatchScalarField.H @@ -34,6 +34,7 @@ Usage { type nutkWallFunction; + value uniform 0; } \endverbatim diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.C b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.C index c222005d0c..36e13ba71f 100644 --- a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.C +++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.C @@ -26,10 +26,7 @@ License #include "omegaWallFunctionFvPatchScalarField.H" #include "nutWallFunctionFvPatchScalarField.H" #include "turbulenceModel.H" -#include "fvPatchFieldMapper.H" #include "fvMatrix.H" -#include "volFields.H" -#include "wallFvPatch.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -43,30 +40,6 @@ scalar omegaWallFunctionFvPatchScalarField::tolerance_ = 1e-5; // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // -void omegaWallFunctionFvPatchScalarField::checkType() -{ - if (!isA(patch())) - { - FatalErrorInFunction - << "Invalid wall function specification" << nl - << " Patch type for patch " << patch().name() - << " must be wall" << nl - << " Current patch type is " << patch().type() << nl << endl - << abort(FatalError); - } -} - - -void omegaWallFunctionFvPatchScalarField::writeLocalEntries(Ostream& os) const -{ - writeEntry(os, "Cmu", Cmu_); - writeEntry(os, "kappa", kappa_); - writeEntry(os, "E", E_); - writeEntry(os, "beta1", beta1_); - writeEntry(os, "blended", blended_); -} - - void omegaWallFunctionFvPatchScalarField::setMaster() { if (master_ != -1) @@ -216,10 +189,13 @@ void omegaWallFunctionFvPatchScalarField::calculate { const label patchi = patch.index(); - const scalarField& y = turbModel.y()[patchi]; + const nutWallFunctionFvPatchScalarField& nutw = + refCast + ( + turbModel.nut()().boundaryField()[patchi] + ); - const scalar Cmu25 = pow025(Cmu_); - const scalar Cmu5 = sqrt(Cmu_); + const scalarField& y = turbModel.y()[patchi]; const tmp tk = turbModel.k(); const volScalarField& k = tk(); @@ -227,9 +203,6 @@ void omegaWallFunctionFvPatchScalarField::calculate const tmp tnuw = turbModel.nu(patchi); const scalarField& nuw = tnuw(); - const tmp tnutw = turbModel.nut(patchi); - const scalarField& nutw = tnutw(); - const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi]; const scalarField magGradUw(mag(Uw.snGrad())); @@ -237,6 +210,9 @@ void omegaWallFunctionFvPatchScalarField::calculate const FieldType& G = db().lookupObject(turbModel.GName()); + const scalar Cmu25 = pow025(nutw.Cmu()); + const scalar Cmu5 = sqrt(nutw.Cmu()); + // Set omega and G forAll(nutw, facei) { @@ -245,7 +221,7 @@ void omegaWallFunctionFvPatchScalarField::calculate const scalar Rey = y[facei]*sqrt(k[celli])/nuw[facei]; const scalar yPlus = Cmu25*Rey; - const scalar uPlus = (1/kappa_)*log(E_*yPlus); + const scalar uPlus = (1/nutw.kappa())*log(nutw.E()*yPlus); if (blended_) { @@ -258,7 +234,7 @@ void omegaWallFunctionFvPatchScalarField::calculate ); const scalar omegaVis = 6*nuw[facei]/(beta1_*sqr(y[facei])); - const scalar omegaLog = uStar/(Cmu5*kappa_*y[facei]); + const scalar omegaLog = uStar/(Cmu5*nutw.kappa()*y[facei]); omega0[celli] += w*(lamFrac*omegaVis + turbFrac*omegaLog); @@ -269,12 +245,12 @@ void omegaWallFunctionFvPatchScalarField::calculate + turbFrac *sqr(uStar*magGradUw[facei]*y[facei]/uPlus) - /(nuw[facei]*kappa_*yPlus) + /(nuw[facei]*nutw.kappa()*yPlus) ); } else { - if (yPlus < yPlusLam_) + if (yPlus < nutw.yPlusLam()) { const scalar omegaVis = 6*nuw[facei]/(beta1_*sqr(y[facei])); @@ -285,14 +261,14 @@ void omegaWallFunctionFvPatchScalarField::calculate else { const scalar uStar = sqrt(Cmu5*k[celli]); - const scalar omegaLog = uStar/(Cmu5*kappa_*y[facei]); + const scalar omegaLog = uStar/(Cmu5*nutw.kappa()*y[facei]); omega0[celli] += w*omegaLog; G0[celli] += w* sqr(uStar*magGradUw[facei]*y[facei]/uPlus) - /(nuw[facei]*kappa_*yPlus); + /(nuw[facei]*nutw.kappa()*yPlus); } } } @@ -308,20 +284,14 @@ omegaWallFunctionFvPatchScalarField::omegaWallFunctionFvPatchScalarField ) : fixedValueFvPatchField(p, iF), - Cmu_(0.09), - kappa_(0.41), - E_(9.8), beta1_(0.075), blended_(false), - yPlusLam_(nutWallFunctionFvPatchScalarField::yPlusLam(kappa_, E_)), G_(), omega_(), initialised_(false), master_(-1), cornerWeights_() -{ - checkType(); -} +{} omegaWallFunctionFvPatchScalarField::omegaWallFunctionFvPatchScalarField @@ -332,20 +302,14 @@ omegaWallFunctionFvPatchScalarField::omegaWallFunctionFvPatchScalarField ) : fixedValueFvPatchField(p, iF, dict), - Cmu_(dict.lookupOrDefault("Cmu", 0.09)), - kappa_(dict.lookupOrDefault("kappa", 0.41)), - E_(dict.lookupOrDefault("E", 9.8)), beta1_(dict.lookupOrDefault("beta1", 0.075)), blended_(dict.lookupOrDefault("blended", false)), - yPlusLam_(nutWallFunctionFvPatchScalarField::yPlusLam(kappa_, E_)), G_(), omega_(), initialised_(false), master_(-1), cornerWeights_() { - checkType(); - // apply zero-gradient condition on start-up this->operator==(patchInternalField()); } @@ -360,20 +324,14 @@ omegaWallFunctionFvPatchScalarField::omegaWallFunctionFvPatchScalarField ) : fixedValueFvPatchField(ptf, p, iF, mapper), - Cmu_(ptf.Cmu_), - kappa_(ptf.kappa_), - E_(ptf.E_), beta1_(ptf.beta1_), blended_(ptf.blended_), - yPlusLam_(ptf.yPlusLam_), G_(), omega_(), initialised_(false), master_(-1), cornerWeights_() -{ - checkType(); -} +{} omegaWallFunctionFvPatchScalarField::omegaWallFunctionFvPatchScalarField @@ -382,20 +340,14 @@ omegaWallFunctionFvPatchScalarField::omegaWallFunctionFvPatchScalarField ) : fixedValueFvPatchField(owfpsf), - Cmu_(owfpsf.Cmu_), - kappa_(owfpsf.kappa_), - E_(owfpsf.E_), beta1_(owfpsf.beta1_), blended_(owfpsf.blended_), - yPlusLam_(owfpsf.yPlusLam_), G_(), omega_(), initialised_(false), master_(-1), cornerWeights_() -{ - checkType(); -} +{} omegaWallFunctionFvPatchScalarField::omegaWallFunctionFvPatchScalarField @@ -405,20 +357,14 @@ omegaWallFunctionFvPatchScalarField::omegaWallFunctionFvPatchScalarField ) : fixedValueFvPatchField(owfpsf, iF), - Cmu_(owfpsf.Cmu_), - kappa_(owfpsf.kappa_), - E_(owfpsf.E_), beta1_(owfpsf.beta1_), blended_(owfpsf.blended_), - yPlusLam_(owfpsf.yPlusLam_), G_(), omega_(), initialised_(false), master_(-1), cornerWeights_() -{ - checkType(); -} +{} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // @@ -632,7 +578,8 @@ void omegaWallFunctionFvPatchScalarField::manipulateMatrix void omegaWallFunctionFvPatchScalarField::write(Ostream& os) const { - writeLocalEntries(os); + writeEntry(os, "beta1", beta1_); + writeEntry(os, "blended", blended_); fixedValueFvPatchField::write(os); } diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.H b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.H index 1554a26973..e8f5a7b66e 100644 --- a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.H +++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.H @@ -51,18 +51,16 @@ Description \endverbatim or switched between these values based on the laminar-to-turbulent y+ value - derived from kappa and E. Recent tests have shown that the standard - switching method provides more accurate results for 10 < y+ < 30 when used - with high Reynolds number wall-functions and both methods provide accurate - results when used with continuous wall-functions. Based on this the - standard switching method is used by default. + derived from kappa and E specified in the corresponding nutWallFunction. + Recent tests have shown that the standard switching method provides more + accurate results for 10 < y+ < 30 when used with high Reynolds number + wall-functions and both methods provide accurate results when used with + continuous wall-functions. Based on this the standard switching method is + used by default. Usage \table Property | Description | Required | Default value - Cmu | Model coefficient | no | 0.09 - kappa | von Karman constant | no | 0.41 - E | Model coefficient | no | 9.8 beta1 | Model coefficient | no | 0.075 blended | Blending switch | no | false \endtable @@ -111,24 +109,12 @@ protected: //- Tolerance used in weighted calculations static scalar tolerance_; - //- Cmu coefficient - scalar Cmu_; - - //- Von Karman constant - scalar kappa_; - - //- E coefficient - scalar E_; - //- beta1 coefficient scalar beta1_; //- Blending switch (defaults to false) Switch blended_; - //- y+ at the edge of the laminar sublayer - scalar yPlusLam_; - //- Local copy of turbulence G field scalarField G_; @@ -147,12 +133,6 @@ protected: // Protected Member Functions - //- Check the type of the patch - virtual void checkType(); - - //- Write local wall function variables - virtual void writeLocalEntries(Ostream&) const; - //- Set the master patch - master is responsible for updating all // wall function patches virtual void setMaster(); diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.C b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.C index acace3091f..8cf2de5a23 100644 --- a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.C +++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.C @@ -24,11 +24,9 @@ License \*---------------------------------------------------------------------------*/ #include "v2WallFunctionFvPatchScalarField.H" +#include "nutWallFunctionFvPatchScalarField.H" #include "turbulenceModel.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" #include "addToRunTimeSelectionTable.H" -#include "wallFvPatch.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -37,47 +35,6 @@ namespace Foam namespace RASModels { -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -void v2WallFunctionFvPatchScalarField::checkType() -{ - if (!isA(patch())) - { - FatalErrorInFunction - << "Invalid wall function specification" << nl - << " Patch type for patch " << patch().name() - << " must be wall" << nl - << " Current patch type is " << patch().type() << nl << endl - << abort(FatalError); - } -} - - -void v2WallFunctionFvPatchScalarField::writeLocalEntries(Ostream& os) const -{ - writeEntry(os, "Cmu", Cmu_); - writeEntry(os, "kappa", kappa_); - writeEntry(os, "E", E_); -} - - -scalar v2WallFunctionFvPatchScalarField::yPlusLam -( - const scalar kappa, - const scalar E -) -{ - scalar ypl = 11.0; - - for (int i=0; i<10; i++) - { - ypl = log(max(E*ypl, 1))/kappa; - } - - return ypl; -} - - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // v2WallFunctionFvPatchScalarField::v2WallFunctionFvPatchScalarField @@ -86,14 +43,8 @@ v2WallFunctionFvPatchScalarField::v2WallFunctionFvPatchScalarField const DimensionedField& iF ) : - fixedValueFvPatchField(p, iF), - Cmu_(0.09), - kappa_(0.41), - E_(9.8), - yPlusLam_(yPlusLam(kappa_, E_)) -{ - checkType(); -} + fixedValueFvPatchField(p, iF) +{} v2WallFunctionFvPatchScalarField::v2WallFunctionFvPatchScalarField @@ -104,14 +55,8 @@ v2WallFunctionFvPatchScalarField::v2WallFunctionFvPatchScalarField const fvPatchFieldMapper& mapper ) : - fixedValueFvPatchField(ptf, p, iF, mapper), - Cmu_(ptf.Cmu_), - kappa_(ptf.kappa_), - E_(ptf.E_), - yPlusLam_(ptf.yPlusLam_) -{ - checkType(); -} + fixedValueFvPatchField(ptf, p, iF, mapper) +{} v2WallFunctionFvPatchScalarField::v2WallFunctionFvPatchScalarField @@ -121,14 +66,8 @@ v2WallFunctionFvPatchScalarField::v2WallFunctionFvPatchScalarField const dictionary& dict ) : - fixedValueFvPatchField(p, iF, dict), - Cmu_(dict.lookupOrDefault("Cmu", 0.09)), - kappa_(dict.lookupOrDefault("kappa", 0.41)), - E_(dict.lookupOrDefault("E", 9.8)), - yPlusLam_(yPlusLam(kappa_, E_)) -{ - checkType(); -} + fixedValueFvPatchField(p, iF, dict) +{} v2WallFunctionFvPatchScalarField::v2WallFunctionFvPatchScalarField @@ -136,14 +75,8 @@ v2WallFunctionFvPatchScalarField::v2WallFunctionFvPatchScalarField const v2WallFunctionFvPatchScalarField& v2wfpsf ) : - fixedValueFvPatchField(v2wfpsf), - Cmu_(v2wfpsf.Cmu_), - kappa_(v2wfpsf.kappa_), - E_(v2wfpsf.E_), - yPlusLam_(v2wfpsf.yPlusLam_) -{ - checkType(); -} + fixedValueFvPatchField(v2wfpsf) +{} v2WallFunctionFvPatchScalarField::v2WallFunctionFvPatchScalarField @@ -152,14 +85,8 @@ v2WallFunctionFvPatchScalarField::v2WallFunctionFvPatchScalarField const DimensionedField& iF ) : - fixedValueFvPatchField(v2wfpsf, iF), - Cmu_(v2wfpsf.Cmu_), - kappa_(v2wfpsf.kappa_), - E_(v2wfpsf.E_), - yPlusLam_(v2wfpsf.yPlusLam_) -{ - checkType(); -} + fixedValueFvPatchField(v2wfpsf, iF) +{} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // @@ -181,6 +108,13 @@ void v2WallFunctionFvPatchScalarField::updateCoeffs() internalField().group() ) ); + + const nutWallFunctionFvPatchScalarField& nutw = + refCast + ( + turbModel.nut()().boundaryField()[patchi] + ); + const scalarField& y = turbModel.y()[patchi]; const tmp tk = turbModel.k(); @@ -189,7 +123,7 @@ void v2WallFunctionFvPatchScalarField::updateCoeffs() const tmp tnuw = turbModel.nu(patchi); const scalarField& nuw = tnuw(); - const scalar Cmu25 = pow025(Cmu_); + const scalar Cmu25 = pow025(nutw.Cmu()); scalarField& v2 = *this; @@ -202,11 +136,11 @@ void v2WallFunctionFvPatchScalarField::updateCoeffs() scalar yPlus = uTau*y[facei]/nuw[facei]; - if (yPlus > yPlusLam_) + if (yPlus > nutw.yPlusLam()) { scalar Cv2 = 0.193; scalar Bv2 = -0.94; - v2[facei] = Cv2/kappa_*log(yPlus) + Bv2; + v2[facei] = Cv2/nutw.kappa()*log(yPlus) + Bv2; } else { @@ -223,22 +157,6 @@ void v2WallFunctionFvPatchScalarField::updateCoeffs() } -void v2WallFunctionFvPatchScalarField::evaluate -( - const Pstream::commsTypes commsType -) -{ - fixedValueFvPatchField::evaluate(commsType); -} - - -void v2WallFunctionFvPatchScalarField::write(Ostream& os) const -{ - writeLocalEntries(os); - fixedValueFvPatchField::write(os); -} - - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // makePatchTypeField diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.H b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.H index df285d37c3..a459fa6276 100644 --- a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.H +++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.H @@ -30,17 +30,11 @@ Description cases. The model operates in two modes, based on the computed laminar-to-turbulent - switch-over y+ value derived from kappa and E. + switch-over y+ value derived from kappa and E specified in the corresponding + nutWallFunction. Usage - \table - Property | Description | Required | Default value - Cmu | model coefficient | no | 0.09 - kappa | Von Karman constant | no | 0.41 - E | model coefficient | no | 9.8 - \endtable - Example of the boundary condition specification: \verbatim @@ -77,34 +71,6 @@ class v2WallFunctionFvPatchScalarField : public fixedValueFvPatchField { -protected: - - // Protected data - - //- Cmu coefficient - scalar Cmu_; - - //- Von Karman constant - scalar kappa_; - - //- E coefficient - scalar E_; - - //- Y+ at the edge of the laminar sublayer - scalar yPlusLam_; - - - // Protected Member Functions - - //- Check the type of the patch - virtual void checkType(); - - //- Write local wall function variables - virtual void writeLocalEntries(Ostream&) const; - - //- Calculate the Y+ at the edge of the laminar sublayer - scalar yPlusLam(const scalar kappa, const scalar E); - public: @@ -180,15 +146,6 @@ public: //- Update the coefficients associated with the patch field virtual void updateCoeffs(); - - //- Evaluate the patchField - virtual void evaluate(const Pstream::commsTypes); - - - // I-O - - //- Write - virtual void write(Ostream&) const; }; diff --git a/tutorials/incompressible/simpleFoam/T3A/0/nut b/tutorials/incompressible/simpleFoam/T3A/0/nut index 59e8fdf29f..20f7727a00 100644 --- a/tutorials/incompressible/simpleFoam/T3A/0/nut +++ b/tutorials/incompressible/simpleFoam/T3A/0/nut @@ -35,7 +35,7 @@ boundaryField plate { - type fixedValue; + type nutkWallFunction; value uniform 0; }