diff --git a/src/TurbulenceModels/compressible/turbulentFluidThermoModels/turbulentFluidThermoModels.C b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/turbulentFluidThermoModels.C
index 048ea5ee57..ae6604679c 100644
--- a/src/TurbulenceModels/compressible/turbulentFluidThermoModels/turbulentFluidThermoModels.C
+++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/turbulentFluidThermoModels.C
@@ -34,6 +34,8 @@ License
#include "RASModel.H"
#include "LESModel.H"
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
makeBaseTurbulenceModel
(
geometricOneField,
@@ -51,6 +53,11 @@ makeBaseTurbulenceModel
makeTemplatedTurbulenceModel \
(fluidThermothermalDiffusivity, LES, Type)
+
+// -------------------------------------------------------------------------- //
+// RAS models
+// -------------------------------------------------------------------------- //
+
#include "SpalartAllmaras.H"
makeRASModel(SpalartAllmaras);
@@ -85,12 +92,19 @@ makeRASModel(LRR);
makeRASModel(SSG);
+// -------------------------------------------------------------------------- //
+// LES models
+// -------------------------------------------------------------------------- //
+
#include "Smagorinsky.H"
makeLESModel(Smagorinsky);
#include "WALE.H"
makeLESModel(WALE);
+#include "dynamicLagrangian.H"
+makeLESModel(dynamicLagrangian);
+
#include "kEqn.H"
makeLESModel(kEqn);
diff --git a/src/TurbulenceModels/incompressible/turbulentTransportModels/turbulentTransportModels.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/turbulentTransportModels.C
index ac9c460de2..521ae9d4dd 100644
--- a/src/TurbulenceModels/incompressible/turbulentTransportModels/turbulentTransportModels.C
+++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/turbulentTransportModels.C
@@ -32,6 +32,8 @@ License
#include "RASModel.H"
#include "LESModel.H"
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
makeBaseTurbulenceModel
(
geometricOneField,
@@ -49,6 +51,11 @@ makeBaseTurbulenceModel
makeTemplatedTurbulenceModel \
(transportModelIncompressibleTurbulenceModel, LES, Type)
+
+// -------------------------------------------------------------------------- //
+// RAS models
+// -------------------------------------------------------------------------- //
+
#include "SpalartAllmaras.H"
makeRASModel(SpalartAllmaras);
@@ -80,12 +87,19 @@ makeRASModel(LRR);
makeRASModel(SSG);
+// -------------------------------------------------------------------------- //
+// LES models
+// -------------------------------------------------------------------------- //
+
#include "Smagorinsky.H"
makeLESModel(Smagorinsky);
#include "WALE.H"
makeLESModel(WALE);
+#include "dynamicLagrangian.H"
+makeLESModel(dynamicLagrangian);
+
#include "kEqn.H"
makeLESModel(kEqn);
diff --git a/src/TurbulenceModels/turbulenceModels/LES/dynamicKEqn/dynamicKEqn.H b/src/TurbulenceModels/turbulenceModels/LES/dynamicKEqn/dynamicKEqn.H
index 4c2ec87683..d9e9ef47cb 100644
--- a/src/TurbulenceModels/turbulenceModels/LES/dynamicKEqn/dynamicKEqn.H
+++ b/src/TurbulenceModels/turbulenceModels/LES/dynamicKEqn/dynamicKEqn.H
@@ -61,7 +61,6 @@ SourceFiles
#include "LESeddyViscosity.H"
#include "simpleFilter.H"
-#include "LESfilter.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/TurbulenceModels/turbulenceModels/LES/dynamicLagrangian/dynamicLagrangian.C b/src/TurbulenceModels/turbulenceModels/LES/dynamicLagrangian/dynamicLagrangian.C
new file mode 100644
index 0000000000..4e5039d994
--- /dev/null
+++ b/src/TurbulenceModels/turbulenceModels/LES/dynamicLagrangian/dynamicLagrangian.C
@@ -0,0 +1,229 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011-2015 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 .
+
+\*---------------------------------------------------------------------------*/
+
+#include "dynamicLagrangian.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace LESModels
+{
+
+// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
+
+template
+void dynamicLagrangian::correctNut
+(
+ const tmp& gradU
+)
+{
+ this->nut_ = (flm_/fmm_)*sqr(this->delta())*mag(dev(symm(gradU)));
+ this->nut_.correctBoundaryConditions();
+}
+
+
+template
+void dynamicLagrangian::correctNut()
+{
+ correctNut(fvc::grad(this->U_));
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+template
+dynamicLagrangian::dynamicLagrangian
+(
+ const alphaField& alpha,
+ const rhoField& rho,
+ const volVectorField& U,
+ const surfaceScalarField& alphaRhoPhi,
+ const surfaceScalarField& phi,
+ const transportModel& transport,
+ const word& propertiesName,
+ const word& type
+)
+:
+ LESeddyViscosity
+ (
+ type,
+ alpha,
+ rho,
+ U,
+ alphaRhoPhi,
+ phi,
+ transport,
+ propertiesName
+ ),
+
+ flm_
+ (
+ IOobject
+ (
+ IOobject::groupName("flm", this->U_.group()),
+ this->runTime_.timeName(),
+ this->mesh_,
+ IOobject::MUST_READ,
+ IOobject::AUTO_WRITE
+ ),
+ this->mesh_
+ ),
+ fmm_
+ (
+ IOobject
+ (
+ IOobject::groupName("fmm", this->U_.group()),
+ this->runTime_.timeName(),
+ this->mesh_,
+ IOobject::MUST_READ,
+ IOobject::AUTO_WRITE
+ ),
+ this->mesh_
+ ),
+ theta_
+ (
+ dimensioned::lookupOrAddToDict
+ (
+ "theta",
+ this->coeffDict_,
+ 1.5
+ )
+ ),
+
+ simpleFilter_(U.mesh()),
+ filterPtr_(LESfilter::New(U.mesh(), this->coeffDict())),
+ filter_(filterPtr_()),
+
+ flm0_("flm0", flm_.dimensions(), 0.0),
+ fmm0_("fmm0", fmm_.dimensions(), VSMALL)
+{
+ if (type == typeName)
+ {
+ correctNut();
+ this->printCoeffs(type);
+ }
+}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+template
+bool dynamicLagrangian::read()
+{
+ if (LESeddyViscosity::read())
+ {
+ filter_.read(this->coeffDict());
+ theta_.readIfPresent(this->coeffDict());
+
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+
+template
+void dynamicLagrangian::correct()
+{
+ if (!this->turbulence_)
+ {
+ return;
+ }
+
+ // Local references
+ const alphaField& alpha = this->alpha_;
+ const rhoField& rho = this->rho_;
+ const surfaceScalarField& alphaRhoPhi = this->alphaRhoPhi_;
+ const volVectorField& U = this->U_;
+ volScalarField& nut = this->nut_;
+
+ LESeddyViscosity::correct();
+
+ tmp tgradU(fvc::grad(U));
+ const volTensorField& gradU = tgradU();
+
+ volSymmTensorField S(dev(symm(gradU())));
+ volScalarField magS(mag(S));
+
+ volVectorField Uf(filter_(U));
+ volSymmTensorField Sf(dev(symm(fvc::grad(Uf))));
+ volScalarField magSf(mag(Sf));
+
+ volSymmTensorField L(dev(filter_(sqr(U)) - (sqr(filter_(U)))));
+ volSymmTensorField M
+ (
+ 2.0*sqr(this->delta())*(filter_(magS*S) - 4.0*magSf*Sf)
+ );
+
+ volScalarField invT
+ (
+ (1.0/(theta_.value()*this->delta()))*pow(flm_*fmm_, 1.0/8.0)
+ );
+
+ volScalarField LM(L && M);
+
+ fvScalarMatrix flmEqn
+ (
+ fvm::ddt(flm_)
+ + fvm::div(phi(), flm_)
+ ==
+ invT*LM
+ - fvm::Sp(invT, flm_)
+ );
+
+ flmEqn.relax();
+ flmEqn.solve();
+
+ bound(flm_, flm0_);
+
+ volScalarField MM(M && M);
+
+ fvScalarMatrix fmmEqn
+ (
+ fvm::ddt(fmm_)
+ + fvm::div(phi(), fmm_)
+ ==
+ invT*MM
+ - fvm::Sp(invT, fmm_)
+ );
+
+ fmmEqn.relax();
+ fmmEqn.solve();
+
+ bound(fmm_, fmm0_);
+
+ correctNut(gradU);
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace LESModels
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/src/TurbulenceModels/turbulenceModels/LES/dynamicLagrangian/dynamicLagrangian.H b/src/TurbulenceModels/turbulenceModels/LES/dynamicLagrangian/dynamicLagrangian.H
new file mode 100644
index 0000000000..8b20d6207d
--- /dev/null
+++ b/src/TurbulenceModels/turbulenceModels/LES/dynamicLagrangian/dynamicLagrangian.H
@@ -0,0 +1,173 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011-2015 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 .
+
+Class
+ Foam::LESModels::dynamicLagrangian
+
+Group
+ grpLESTurbulence
+
+Description
+ Dynamic SGS model with Lagrangian averaging
+
+ Reference:
+ \verbatim
+ Meneveau, C., Lund, T. S., & Cabot, W. H. (1996).
+ A Lagrangian dynamic subgrid-scale model of turbulence.
+ Journal of Fluid Mechanics, 319, 353-385.
+ \endverbatim
+
+SourceFiles
+ dynamicLagrangian.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef dynamicLagrangian_H
+#define dynamicLagrangian_H
+
+#include "LESeddyViscosity.H"
+#include "simpleFilter.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace LESModels
+{
+
+/*---------------------------------------------------------------------------*\
+ Class dynamicLagrangian Declaration
+\*---------------------------------------------------------------------------*/
+
+template
+class dynamicLagrangian
+:
+ public LESeddyViscosity
+{
+ // Private Member Functions
+
+ // Disallow default bitwise copy construct and assignment
+ dynamicLagrangian(const dynamicLagrangian&);
+ dynamicLagrangian& operator=(const dynamicLagrangian&);
+
+
+protected:
+
+ // Protected data
+
+ volScalarField flm_;
+ volScalarField fmm_;
+
+ dimensionedScalar theta_;
+
+ simpleFilter simpleFilter_;
+ autoPtr filterPtr_;
+ LESfilter& filter_;
+
+ dimensionedScalar flm0_;
+ dimensionedScalar fmm0_;
+
+
+ // Protected Member Functions
+
+ //- Update sub-grid eddy-viscosity
+ void correctNut(const tmp& gradU);
+
+ virtual void correctNut();
+
+
+public:
+
+ typedef typename BasicTurbulenceModel::alphaField alphaField;
+ typedef typename BasicTurbulenceModel::rhoField rhoField;
+ typedef typename BasicTurbulenceModel::transportModel transportModel;
+
+ //- Runtime type information
+ TypeName("dynamicLagrangian");
+
+
+ // Constructors
+
+ //- Construct from components
+ dynamicLagrangian
+ (
+ const alphaField& alpha,
+ const rhoField& rho,
+ const volVectorField& U,
+ const surfaceScalarField& alphaRhoPhi,
+ const surfaceScalarField& phi,
+ const transportModel& transport,
+ const word& propertiesName = turbulenceModel::propertiesName,
+ const word& type = typeName
+ );
+
+
+ //- Destructor
+ virtual ~dynamicLagrangian()
+ {}
+
+
+ // Member Functions
+
+ //- Read model coefficients if they have changed
+ virtual bool read();
+
+ //- Return SGS kinetic energy
+ tmp k(const tmp& gradU) const
+ {
+ return
+ pow(2.0*flm_/fmm_, 2.0/3.0)
+ * pow(this->Ce_, -2.0/3.0)
+ * sqr(this->delta())*magSqr(dev(symm(gradU)));
+ }
+
+ //- Return SGS kinetic energy
+ virtual tmp k() const
+ {
+ return k(fvc::grad(this->U_));
+ }
+
+ //- Return the effective diffusivity for k
+ tmp DkEff() const
+ {
+ return tmp
+ (
+ new volScalarField("DkEff", this->nut_ + this->nu())
+ );
+ }
+
+ //- Correct Eddy-Viscosity and related properties
+ virtual void correct();
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace LESModels
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //