From e75a5571a5943bfc735c17fc80e0a28a63c0d98c Mon Sep 17 00:00:00 2001 From: sergio Date: Fri, 17 Feb 2012 17:31:46 +0000 Subject: [PATCH] ENH: Changes to input for the PDR models --- .../dragModels/PDRDragModel/PDRDragModel.C | 2 +- .../PDRModels/dragModels/basic/basic.C | 75 ++++++++++++++++--- .../XiModels/XiEqModels/Gulder/Gulder.C | 11 ++- .../XiModels/XiEqModels/Gulder/Gulder.H | 6 ++ .../XiModels/XiEqModels/SCOPEXiEq/SCOPEXiEq.C | 9 ++- .../XiModels/XiEqModels/SCOPEXiEq/SCOPEXiEq.H | 6 ++ .../XiModels/XiEqModels/XiEqModel/XiEqModel.C | 4 +- .../XiModels/XiEqModels/XiEqModel/XiEqModel.H | 13 +--- .../constant/PDRProperties | 8 +- .../system/fvSchemes | 2 +- 10 files changed, 101 insertions(+), 35 deletions(-) diff --git a/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/PDRDragModel/PDRDragModel.C b/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/PDRDragModel/PDRDragModel.C index 3e6a2eb1eb..454c8301f2 100644 --- a/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/PDRDragModel/PDRDragModel.C +++ b/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/PDRDragModel/PDRDragModel.C @@ -81,7 +81,7 @@ bool Foam::PDRDragModel::read(const dictionary& PDRProperties) { PDRDragModelCoeffs_ = PDRProperties.subDict(type() + "Coeffs"); - PDRDragModelCoeffs_.lookup("PDRDragModel") >> on_; + PDRDragModelCoeffs_.lookup("drag") >> on_; return true; } diff --git a/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/basic/basic.C b/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/basic/basic.C index 7a8ce8bab0..3f0cad0d45 100644 --- a/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/basic/basic.C +++ b/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/basic/basic.C @@ -91,24 +91,79 @@ Foam::PDRDragModels::basic::~basic() Foam::tmp Foam::PDRDragModels::basic::Dcu() const { - const volScalarField& betav = - U_.db().lookupObject("betav"); + tmp tDragDcu + ( + new volSymmTensorField + ( + IOobject + ( + "tDragDcu", + U_.mesh().time().constant(), + U_.mesh(), + IOobject::NO_READ, + IOobject::NO_WRITE + ), + U_.mesh(), + dimensionedSymmTensor + ( + "zero", + dimMass/dimTime/pow(dimLength, 3), + pTraits::zero + ), + zeroGradientFvPatchSymmTensorField::typeName + ) + ); - return (0.5*rho_)*CR_*mag(U_) + (Csu*I)*betav*turbulence_.muEff()*sqr(Aw_); + volSymmTensorField& DragDcu = tDragDcu(); + + if (on_) + { + const volScalarField& betav = + U_.db().lookupObject("betav"); + + DragDcu = (0.5*rho_)*CR_*mag(U_) + (Csu*I)*betav*turbulence_.muEff()*sqr(Aw_); + } + + return tDragDcu; } Foam::tmp Foam::PDRDragModels::basic::Gk() const { - const volScalarField& betav = - U_.db().lookupObject("betav"); + tmp tGk + ( + new volScalarField + ( + IOobject + ( + "tGk", + U_.mesh().time().constant(), + U_.mesh(), + IOobject::NO_READ, + IOobject::NO_WRITE + ), + U_.mesh(), + dimensionedScalar("zero", dimMass/dimLength/pow(dimTime, 3), 0.0), + zeroGradientFvPatchVectorField::typeName + ) + ); - const volSymmTensorField& CT = - U_.db().lookupObject("CT"); + volScalarField& Gk = tGk(); - return - (0.5*rho_)*mag(U_)*(U_ & CT & U_) - + Csk*betav*turbulence_.muEff()*sqr(Aw_)*magSqr(U_); + if (on_) + { + const volScalarField& betav = + U_.db().lookupObject("betav"); + + const volSymmTensorField& CT = + U_.db().lookupObject("CT"); + + Gk = + (0.5*rho_)*mag(U_)*(U_ & CT & U_) + + Csk*betav*turbulence_.muEff()*sqr(Aw_)*magSqr(U_); + } + + return tGk; } diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/Gulder/Gulder.C b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/Gulder/Gulder.C index e775bf0e15..6f7a33c947 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/Gulder/Gulder.C +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/Gulder/Gulder.C @@ -50,7 +50,12 @@ Foam::XiEqModels::Gulder::Gulder : XiEqModel(XiEqProperties, thermo, turbulence, Su), XiEqCoef_(readScalar(XiEqModelCoeffs_.lookup("XiEqCoef"))), - SuMin_(0.01*Su.average()) + SuMin_(0.01*Su.average()), + uPrimeCoef_(readScalar(XiEqModelCoeffs_.lookup("uPrimeCoef"))), + subGridSchelkin_ + ( + readBool(XiEqModelCoeffs_.lookup("subGridSchelkin")) + ) {} @@ -67,9 +72,9 @@ Foam::tmp Foam::XiEqModels::Gulder::XiEq() const volScalarField up(sqrt((2.0/3.0)*turbulence_.k())); const volScalarField& epsilon = turbulence_.epsilon(); - if (subGridSchelkin()) + if (subGridSchelkin_) { - up.internalField() += calculateSchelkinEffect(); + up.internalField() += calculateSchelkinEffect(uPrimeCoef_); } volScalarField tauEta(sqrt(mag(thermo_.muu()/(thermo_.rhou()*epsilon)))); diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/Gulder/Gulder.H b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/Gulder/Gulder.H index 6752835809..4531596a3b 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/Gulder/Gulder.H +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/Gulder/Gulder.H @@ -61,6 +61,12 @@ class Gulder //- Minimum laminar burning velocity const dimensionedScalar SuMin_; + //- Schelkin effect Model constant + scalar uPrimeCoef_; + + //- Use sub-grid Schelkin effect + bool subGridSchelkin_; + // Private Member Functions diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/SCOPEXiEq/SCOPEXiEq.C b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/SCOPEXiEq/SCOPEXiEq.C index 8159f83c93..dd7922511c 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/SCOPEXiEq/SCOPEXiEq.C +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/SCOPEXiEq/SCOPEXiEq.C @@ -53,6 +53,11 @@ Foam::XiEqModels::SCOPEXiEq::SCOPEXiEq XiEqExp_(readScalar(XiEqModelCoeffs_.lookup("XiEqExp"))), lCoef_(readScalar(XiEqModelCoeffs_.lookup("lCoef"))), SuMin_(0.01*Su.average()), + uPrimeCoef_(readScalar(XiEqModelCoeffs_.lookup("uPrimeCoef"))), + subGridSchelkin_ + ( + readBool(XiEqModelCoeffs_.lookup("subGridSchelkin")) + ), MaModel ( IOdictionary @@ -84,9 +89,9 @@ Foam::tmp Foam::XiEqModels::SCOPEXiEq::XiEq() const const volScalarField& epsilon = turbulence_.epsilon(); volScalarField up(sqrt((2.0/3.0)*k)); - if (subGridSchelkin()) + if (subGridSchelkin_) { - up.internalField() += calculateSchelkinEffect(); + up.internalField() += calculateSchelkinEffect(uPrimeCoef_); } volScalarField l(lCoef_*sqrt(3.0/2.0)*up*k/epsilon); diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/SCOPEXiEq/SCOPEXiEq.H b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/SCOPEXiEq/SCOPEXiEq.H index f8a110744a..72dcd26de1 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/SCOPEXiEq/SCOPEXiEq.H +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/SCOPEXiEq/SCOPEXiEq.H @@ -70,6 +70,12 @@ class SCOPEXiEq //- Minimum Su dimensionedScalar SuMin_; + //- Schelkin effect Model constant + scalar uPrimeCoef_; + + //- Use sub-grid Schelkin effect + bool subGridSchelkin_; + //- The SCOPE laminar flame speed model used to obtain the // Marstein number. Note: the laminar flame speed need not be // obtained form the same model. diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.C b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.C index f68e72578a..2cda062b95 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.C +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.C @@ -119,7 +119,7 @@ void Foam::XiEqModel::writeFields() const } Foam::tmp -Foam::XiEqModel::calculateSchelkinEffect() const +Foam::XiEqModel::calculateSchelkinEffect(const scalar uPrimeCoef) const { const fvMesh& mesh = Su_.mesh(); @@ -188,7 +188,7 @@ Foam::XiEqModel::calculateSchelkinEffect() const const scalarField cellWidth(pow(mesh.V(), 1.0/3.0)); - const scalarField upLocal(uPrimeCoef_*sqrt((U & CT & U)*cellWidth)); + const scalarField upLocal(uPrimeCoef*sqrt((U & CT & U)*cellWidth)); const scalarField deltaUp(upLocal*(max(scalar(1.0), pow(nr, 0.5)) - 1.0)); diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.H b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.H index 196310c0ad..3f4b2d0f7c 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.H +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.H @@ -80,12 +80,6 @@ protected: // volSymmTensorField nsv_; - //- Schelkin effect Model constant - scalar uPrimeCoef_; - - //- Use sub-grid Schelkin effect - bool subGridSchelkin_; - private: @@ -162,14 +156,9 @@ public: return turbulence_.muEff(); } - //- Return state of the sub-grid Schelkin effect - bool subGridSchelkin() const - { - return subGridSchelkin_; - } //- Return the sub-grid Schelkin effect - tmp calculateSchelkinEffect() const; + tmp calculateSchelkinEffect(const scalar) const; //- Update properties from given dictionary virtual bool read(const dictionary& XiEqProperties) = 0; diff --git a/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/constant/PDRProperties b/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/constant/PDRProperties index 3e5ffb8cb0..8f02b2126d 100644 --- a/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/constant/PDRProperties +++ b/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/constant/PDRProperties @@ -50,26 +50,26 @@ instabilityCoeffs XiEqModelL { XiEqModel Gulder; - uPrimeCoef 1.0; - subGridSchelkin true; GulderCoeffs { XiEqCoef 0.62; + uPrimeCoef 1.0; + subGridSchelkin true; } } XiEqModelH { XiEqModel SCOPEXiEq; - uPrimeCoef 1.0; - subGridSchelkin true; SCOPEXiEqCoeffs { XiEqCoef 1.6; XiEqExp 0.33333; lCoef 0.336; + uPrimeCoef 1.0; + subGridSchelkin true; } } } diff --git a/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/system/fvSchemes b/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/system/fvSchemes index 7de6b2228e..e56807d8a1 100644 --- a/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/system/fvSchemes +++ b/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/system/fvSchemes @@ -60,7 +60,7 @@ laplacianSchemes laplacian(muEff,U) Gauss linear limited 0.333; laplacian(DkEff,k) Gauss linear limited 0.333; laplacian(DepsilonEff,epsilon) Gauss linear limited 0.333; - laplacian((rho*inv((((1)*A(U))+((((0.5*rho)*CR)*mag(U))+((((Csu*(1))*betav)*muEff)*sqr(Aw)))))),p) Gauss linear limited 0.333; + laplacian((rho*inv((((1)*A(U))+tDragDcu))),p) Gauss linear limited 0.333; laplacian(Db,b) Gauss linear limited 0.333; laplacian(Db,ft) Gauss linear limited 0.333; laplacian(Db,h) Gauss linear limited 0.333;