Skip to content
Permalink
Browse files
combustionModels::EDC: New Eddy Dissipation Concept (EDC) turbulent c…
…ombustion model

including support for TDAC and ISAT for efficient chemistry calculation.

Description
    Eddy Dissipation Concept (EDC) turbulent combustion model.

    This model considers that the reaction occurs in the regions of the flow
    where the dissipation of turbulence kinetic energy takes place (fine
    structures). The mass fraction of the fine structures and the mean residence
    time are provided by an energy cascade model.

    There are many versions and developments of the EDC model, 4 of which are
    currently supported in this implementation: v1981, v1996, v2005 and
    v2016.  The model variant is selected using the optional \c version entry in
    the \c EDCCoeffs dictionary, \eg

    \verbatim
        EDCCoeffs
        {
            version v2016;
        }
    \endverbatim

    The default version is \c v2015 if the \c version entry is not specified.

    Model versions and references:
    \verbatim
        Version v2005:

            Cgamma = 2.1377
            Ctau = 0.4083
            kappa = gammaL^exp1 / (1 - gammaL^exp2),

            where exp1 = 2, and exp2 = 2.

            Magnussen, B. F. (2005, June).
            The Eddy Dissipation Concept -
            A Bridge Between Science and Technology.
            In ECCOMAS thematic conference on computational combustion
            (pp. 21-24).

        Version v1981:

            Changes coefficients exp1 = 3 and exp2 = 3

            Magnussen, B. (1981, January).
            On the structure of turbulence and a generalized
            eddy dissipation concept for chemical reaction in turbulent flow.
            In 19th Aerospace Sciences Meeting (p. 42).

        Version v1996:

            Changes coefficients exp1 = 2 and exp2 = 3

            Gran, I. R., & Magnussen, B. F. (1996).
            A numerical study of a bluff-body stabilized diffusion flame.
            Part 2. Influence of combustion modeling and finite-rate chemistry.
            Combustion Science and Technology, 119(1-6), 191-217.

        Version v2016:

            Use local constants computed from the turbulent Da and Re numbers.

            Parente, A., Malik, M. R., Contino, F., Cuoci, A., & Dally, B. B.
            (2016).
            Extension of the Eddy Dissipation Concept for
            turbulence/chemistry interactions to MILD combustion.
            Fuel, 163, 98-111.
    \endverbatim

Tutorials cases provided: reactingFoam/RAS/DLR_A_LTS, reactingFoam/RAS/SandiaD_LTS.

This codes was developed and contributed by

    Zhiyi Li
    Alessandro Parente
    Francesco Contino
    from BURN Research Group

and updated and tested for release by

    Henry G. Weller
    CFD Direct Ltd.
  • Loading branch information
Henry Weller committed Mar 17, 2017
1 parent e41fdb7 commit ad825903af88ca7f83285d83ed17d7177f182730
Showing with 15,950 additions and 0 deletions.
  1. +248 −0 src/combustionModels/EDC/EDC.C
  2. +214 −0 src/combustionModels/EDC/EDC.H
  3. +61 −0 src/combustionModels/EDC/EDCs.C
  4. +1 −0 src/combustionModels/Make/files
  5. +2 −0 src/thermophysicalModels/chemistryModel/chemistryModel/TDACChemistryModel/TDACChemistryModel.C
  6. +2 −0 src/thermophysicalModels/chemistryModel/chemistryModel/TDACChemistryModel/TDACChemistryModel.H
  7. +10 −0 src/thermophysicalModels/chemistryModel/chemistryModel/TDACChemistryModel/TDACChemistryModelI.H
  8. +67 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/0/CH4
  9. +42 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/0/G
  10. +67 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/0/H2
  11. +67 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/0/H2O
  12. +67 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/0/N2
  13. +67 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/0/O2
  14. +67 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/0/T.orig
  15. +69 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/0/U
  16. +67 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/0/Ydefault
  17. +72 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/0/alphat
  18. +85 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/0/epsilon
  19. +72 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/0/k
  20. +78 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/0/nut
  21. +64 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/0/p
  22. +11 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/Allclean
  23. +23 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/Allrun
  24. +328 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/chemkin/grimech30.dat
  25. +218 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/chemkin/thermo30.dat
  26. +45 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/chemkin/transportProperties
  27. +146 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/constant/chemistryProperties
  28. +143 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/constant/chemistryProperties.test
  29. +27 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/constant/combustionProperties
  30. +21 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/constant/g
  31. +3,610 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/constant/reactionsGRI
  32. +1,390 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/constant/thermo.compressibleGasGRI
  33. +36 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/constant/thermophysicalProperties
  34. +33 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/constant/turbulenceProperties
  35. +209 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/system/blockMeshDict
  36. +48 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/system/controlDict
  37. +45 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/system/decomposeParDict
  38. +59 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/system/fvSchemes
  39. +89 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/system/fvSolution
  40. +36 −0 tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/system/setFieldsDict
  41. +69 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/0.orig/CH4
  42. +69 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/0.orig/CO
  43. +69 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/0.orig/CO2
  44. +69 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/0.orig/H
  45. +69 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/0.orig/H2
  46. +69 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/0.orig/H2O
  47. +69 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/0.orig/N2
  48. +69 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/0.orig/O
  49. +69 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/0.orig/O2
  50. +69 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/0.orig/OH
  51. +69 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/0.orig/T
  52. +70 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/0.orig/U
  53. +69 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/0.orig/Ydefault
  54. +74 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/0.orig/alphat
  55. +84 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/0.orig/epsilon
  56. +74 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/0.orig/k
  57. +78 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/0.orig/nut
  58. +67 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/0.orig/p
  59. +11 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/Allclean
  60. +36 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/Allrun
  61. +328 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/chemkin/grimech30.dat
  62. +218 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/chemkin/thermo30.dat
  63. +45 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/chemkin/transportProperties
  64. +90 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/constant/chemistryProperties
  65. +27 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/constant/combustionProperties
  66. +21 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/constant/g
  67. +210 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/constant/radiationProperties
  68. +3,610 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/constant/reactionsGRI
  69. +1,390 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/constant/thermo.compressibleGasGRI
  70. +35 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/constant/thermophysicalProperties
  71. +28 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/constant/turbulenceProperties
  72. +176 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/system/blockMeshDict
  73. +48 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/system/controlDict
  74. +45 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/system/decomposeParDict
  75. +59 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/system/fvSchemes
  76. +89 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/system/fvSolution
  77. +162 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/system/sampleDict
  78. +41 −0 tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/system/setFieldsDict
@@ -0,0 +1,248 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2017 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/

#include "EDC.H"

// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //

template<class Type>
Foam::combustionModels::EDC<Type>::EDC
(
const word& modelType,
const fvMesh& mesh,
const word& combustionProperties,
const word& phaseName
)
:
laminar<Type>(modelType, mesh, combustionProperties, phaseName),
version_
(
EDCversionNames
[
this->coeffs().lookupOrDefault
(
"version",
word(EDCversionNames[EDCdefaultVersion])
)
]
),
C1_(this->coeffs().lookupOrDefault("C1", 0.05774)),
C2_(this->coeffs().lookupOrDefault("C2", 0.5)),
Cgamma_(this->coeffs().lookupOrDefault("Cgamma", 2.1377)),
Ctau_(this->coeffs().lookupOrDefault("Ctau", 0.4083)),
exp1_(this->coeffs().lookupOrDefault("exp1", EDCexp1[int(version_)])),
exp2_(this->coeffs().lookupOrDefault("exp2", EDCexp2[int(version_)])),
kappa_
(
IOobject
(
IOobject::groupName(typeName + ":kappa", phaseName),
mesh.time().timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar("kappa", dimless, 0)
)
{}


// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //

template<class Type>
Foam::combustionModels::EDC<Type>::~EDC()
{}


// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //

template<class Type>
void Foam::combustionModels::EDC<Type>::correct()
{
if (this->active())
{
tmp<volScalarField> tepsilon(this->turbulence().epsilon());
const volScalarField& epsilon = tepsilon();

tmp<volScalarField> tmu(this->turbulence().mu());
const volScalarField& mu = tmu();

tmp<volScalarField> tk(this->turbulence().k());
const volScalarField& k = tk();

tmp<volScalarField> trho(this->rho());
const volScalarField& rho = trho();

scalarField tauStar(epsilon.size(), 0);

if (version_ == EDCversions::v2016)
{
tmp<volScalarField> ttc(this->chemistryPtr_->tc());
const volScalarField& tc = ttc();

forAll(tauStar, i)
{
const scalar nu = mu[i]/(rho[i] + SMALL);

const scalar Da =
max(min(sqrt(nu/(epsilon[i] + SMALL))/tc[i], 10), 1e-10);

const scalar ReT = sqr(k[i])/(nu*epsilon[i] + SMALL);
const scalar CtauI = min(C1_/(Da*sqrt(ReT + 1)), 2.1377);

const scalar CgammaI =
max(min(C2_*sqrt(Da*(ReT + 1)), 5), 0.4082);

const scalar gammaL =
CgammaI*pow025(nu*epsilon[i]/(sqr(k[i]) + SMALL));

tauStar[i] = CtauI*sqrt(nu/(epsilon[i] + SMALL));

if (gammaL >= 1)
{
kappa_[i] = 1;
}
else
{
kappa_[i] =
max
(
min
(
pow(gammaL, exp1_)/(1 - pow(gammaL, exp2_)),
1
),
0
);
}
}
}
else
{
forAll(tauStar, i)
{
const scalar nu = mu[i]/(rho[i] + SMALL);
const scalar gammaL =
Cgamma_*pow025(nu*epsilon[i]/(sqr(k[i]) + SMALL));

tauStar[i] = Ctau_*sqrt(nu/(epsilon[i] + SMALL));
if (gammaL >= 1)
{
kappa_[i] = 1;
}
else
{
kappa_[i] =
max
(
min
(
pow(gammaL, exp1_)/(1 - pow(gammaL, exp2_)),
1
),
0
);
}
}
}

this->chemistryPtr_->solve(tauStar);
}
}


template<class Type>
Foam::tmp<Foam::fvScalarMatrix>
Foam::combustionModels::EDC<Type>::R(volScalarField& Y) const
{
return kappa_*laminar<Type>::R(Y);
}


template<class Type>
Foam::tmp<Foam::volScalarField>
Foam::combustionModels::EDC<Type>::Qdot() const
{
tmp<volScalarField> tQdot
(
new volScalarField
(
IOobject
(
IOobject::groupName(typeName + ":Qdot", this->phaseName_),
this->mesh().time().timeName(),
this->mesh(),
IOobject::NO_READ,
IOobject::NO_WRITE,
false
),
this->mesh(),
dimensionedScalar("Qdot", dimEnergy/dimVolume/dimTime, 0)
)
);

if (this->active())
{
tQdot.ref() = kappa_*this->chemistryPtr_->Qdot();
}

return tQdot;
}


template<class Type>
bool Foam::combustionModels::EDC<Type>::read()
{
if (Type::read())
{
version_ =
(
EDCversionNames
[
this->coeffs().lookupOrDefault
(
"version",
word(EDCversionNames[EDCdefaultVersion])
)
]
);
C1_ = this->coeffs().lookupOrDefault("C1", 0.05774);
C2_ = this->coeffs().lookupOrDefault("C2", 0.5);
Cgamma_ = this->coeffs().lookupOrDefault("Cgamma", 2.1377);
Ctau_ = this->coeffs().lookupOrDefault("Ctau", 0.4083);
exp1_ = this->coeffs().lookupOrDefault("exp1", EDCexp1[int(version_)]);
exp2_ = this->coeffs().lookupOrDefault("exp2", EDCexp2[int(version_)]);

return true;
}
else
{
return false;
}
}


// ************************************************************************* //

0 comments on commit ad82590

Please sign in to comment.