diff --git a/applications/solvers/lagrangian/DPMFoam/MPPICFoam/Make/options b/applications/solvers/lagrangian/DPMFoam/MPPICFoam/Make/options
index 948df098..4a0c3a56 100644
--- a/applications/solvers/lagrangian/DPMFoam/MPPICFoam/Make/options
+++ b/applications/solvers/lagrangian/DPMFoam/MPPICFoam/Make/options
@@ -22,6 +22,7 @@ EXE_LIBS = \
-lmeshTools \
-llagrangian \
-llagrangianIntermediate \
+ -llagrangianTurbulentSubModels \
-lthermophysicalFunctions \
-lspecie \
-lradiationModels \
diff --git a/applications/solvers/lagrangian/DPMFoam/Make/options b/applications/solvers/lagrangian/DPMFoam/Make/options
index e9524dfc..83684e57 100644
--- a/applications/solvers/lagrangian/DPMFoam/Make/options
+++ b/applications/solvers/lagrangian/DPMFoam/Make/options
@@ -21,6 +21,7 @@ EXE_LIBS = \
-lmeshTools \
-llagrangian \
-llagrangianIntermediate \
+ -llagrangianTurbulentSubModels \
-lthermophysicalFunctions \
-lspecie \
-lradiationModels \
diff --git a/src/lagrangian/Allwmake b/src/lagrangian/Allwmake
index 5310b3c8..104d3723 100755
--- a/src/lagrangian/Allwmake
+++ b/src/lagrangian/Allwmake
@@ -8,6 +8,7 @@ wmake $makeType basic
wmake $makeType solidParticle
wmake $makeType intermediate
wmake $makeType turbulence
+wmake $makeType Turbulence
wmake $makeType spray
wmake $makeType dsmc
wmake $makeType coalCombustion
diff --git a/src/lagrangian/Turbulence/Make/files b/src/lagrangian/Turbulence/Make/files
new file mode 100644
index 00000000..72a84068
--- /dev/null
+++ b/src/lagrangian/Turbulence/Make/files
@@ -0,0 +1,10 @@
+PARCELS=parcels
+DERIVEDPARCELS=$(PARCELS)/derived
+
+KINEMATICCOLLIDINGPARCEL=$(DERIVEDPARCELS)/basicKinematicCollidingParcel
+$(KINEMATICCOLLIDINGPARCEL)/makeBasicKinematicCollidingParcelSubmodels.C
+
+KINEMATICMPPICPARCEL=$(DERIVEDPARCELS)/basicKinematicMPPICParcel
+$(KINEMATICMPPICPARCEL)/makeBasicKinematicMPPICParcelSubmodels.C
+
+LIB = $(FOAM_LIBBIN)/liblagrangianTurbulentSubModels
diff --git a/src/lagrangian/Turbulence/Make/options b/src/lagrangian/Turbulence/Make/options
new file mode 100644
index 00000000..504394bf
--- /dev/null
+++ b/src/lagrangian/Turbulence/Make/options
@@ -0,0 +1,45 @@
+EXE_INC = \
+ -I$(LIB_SRC)/finiteVolume/lnInclude \
+ -I$(LIB_SRC)/meshTools/lnInclude \
+ -I$(LIB_SRC)/lagrangian/basic/lnInclude \
+ -I$(LIB_SRC)/lagrangian/intermediate/lnInclude \
+ -I$(LIB_SRC)/lagrangian/distributionModels/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/properties/liquidProperties/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/properties/liquidMixtureProperties/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/properties/solidProperties/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/properties/solidMixtureProperties/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/SLGThermo/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/radiationModels/lnInclude \
+ -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
+ -I$(LIB_SRC)/transportModels \
+ -I$(LIB_SRC)/regionModels/regionModel/lnInclude \
+ -I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \
+ -I$(LIB_SRC)/dynamicFvMesh/lnInclude \
+ -I$(LIB_SRC)/sampling/lnInclude
+
+LIB_LIBS = \
+ -lfiniteVolume \
+ -lmeshTools \
+ -llagrangian \
+ -llagrangianIntermediate \
+ -ldistributionModels \
+ -lspecie \
+ -lfluidThermophysicalModels \
+ -lliquidProperties \
+ -lliquidMixtureProperties \
+ -lsolidProperties \
+ -lsolidMixtureProperties \
+ -lreactionThermophysicalModels \
+ -lSLGThermo \
+ -lradiationModels \
+ -lturbulenceModels \
+ -lincompressibleTurbulenceModels \
+ -lcompressibleTurbulenceModels \
+ -lincompressibleTransportModels \
+ -lregionModels \
+ -lsurfaceFilmModels \
+ -ldynamicFvMesh \
+ -lsampling
diff --git a/src/lagrangian/Turbulence/parcels/derived/basicKinematicCollidingParcel/makeBasicKinematicCollidingParcelSubmodels.C b/src/lagrangian/Turbulence/parcels/derived/basicKinematicCollidingParcel/makeBasicKinematicCollidingParcelSubmodels.C
new file mode 100644
index 00000000..c0d2f76c
--- /dev/null
+++ b/src/lagrangian/Turbulence/parcels/derived/basicKinematicCollidingParcel/makeBasicKinematicCollidingParcelSubmodels.C
@@ -0,0 +1,37 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011-2014 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 "basicKinematicCollidingCloud.H"
+#include "makeParcelTurbulenceDispersionModels.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ makeParcelTurbulenceDispersionModels(basicKinematicCollidingCloud);
+}
+
+
+// ************************************************************************* //
diff --git a/src/lagrangian/Turbulence/parcels/derived/basicKinematicMPPICParcel/makeBasicKinematicMPPICParcelSubmodels.C b/src/lagrangian/Turbulence/parcels/derived/basicKinematicMPPICParcel/makeBasicKinematicMPPICParcelSubmodels.C
new file mode 100644
index 00000000..60ed0310
--- /dev/null
+++ b/src/lagrangian/Turbulence/parcels/derived/basicKinematicMPPICParcel/makeBasicKinematicMPPICParcelSubmodels.C
@@ -0,0 +1,37 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011-2014 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 "basicKinematicMPPICCloud.H"
+#include "makeParcelTurbulenceDispersionModels.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ makeParcelTurbulenceDispersionModels(basicKinematicMPPICCloud);
+}
+
+
+// ************************************************************************* //
diff --git a/src/lagrangian/Turbulence/parcels/include/makeParcelTurbulenceDispersionModels.H b/src/lagrangian/Turbulence/parcels/include/makeParcelTurbulenceDispersionModels.H
new file mode 100644
index 00000000..d2428ba4
--- /dev/null
+++ b/src/lagrangian/Turbulence/parcels/include/makeParcelTurbulenceDispersionModels.H
@@ -0,0 +1,53 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011-2014 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 .
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef makeParcelTurbulenceDispersionModels_h
+#define makeParcelTurbulenceDispersionModels_h
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "GradientDispersionRAS.H"
+#include "StochasticDispersionRAS.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#define makeParcelTurbulenceDispersionModels(CloudType) \
+ \
+ typedef CloudType::kinematicCloudType kinematicCloudType; \
+ defineNamedTemplateTypeNameAndDebug \
+ ( \
+ DispersionRASModel, \
+ 0 \
+ ); \
+ \
+ makeDispersionModelType(GradientDispersionRAS, CloudType); \
+ makeDispersionModelType(StochasticDispersionRAS, CloudType); \
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C
new file mode 100644
index 00000000..43b1b366
--- /dev/null
+++ b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C
@@ -0,0 +1,201 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011-2014 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 "DispersionRASModel.H"
+#include "demandDrivenData.H"
+#include "turbulenceModel.H"
+
+// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
+
+template
+Foam::tmp
+Foam::DispersionRASModel::kModel() const
+{
+ const objectRegistry& obr = this->owner().mesh();
+ const word turbName =
+ IOobject::groupName
+ (
+ turbulenceModel::propertiesName,
+ this->owner().U().group()
+ );
+
+ if (obr.foundObject(turbName))
+ {
+ const turbulenceModel& model =
+ obr.lookupObject(turbName);
+ return model.k();
+ }
+ else
+ {
+ FatalErrorIn
+ (
+ "Foam::tmp"
+ "Foam::DispersionRASModel::kModel() const"
+ )
+ << "Turbulence model not found in mesh database" << nl
+ << "Database objects include: " << obr.sortedToc()
+ << abort(FatalError);
+
+ return tmp(NULL);
+ }
+}
+
+
+template
+Foam::tmp
+Foam::DispersionRASModel::epsilonModel() const
+{
+ const objectRegistry& obr = this->owner().mesh();
+ const word turbName =
+ IOobject::groupName
+ (
+ turbulenceModel::propertiesName,
+ this->owner().U().group()
+ );
+
+ if (obr.foundObject(turbName))
+ {
+ const turbulenceModel& model =
+ obr.lookupObject(turbName);
+ return model.epsilon();
+ }
+ else
+ {
+ FatalErrorIn
+ (
+ "Foam::tmp"
+ "Foam::DispersionRASModel::epsilonModel() const"
+ )
+ << "Turbulence model not found in mesh database" << nl
+ << "Database objects include: " << obr.sortedToc()
+ << abort(FatalError);
+
+ return tmp(NULL);
+ }
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+template
+Foam::DispersionRASModel::DispersionRASModel
+(
+ const dictionary&,
+ CloudType& owner
+)
+:
+ DispersionModel(owner),
+ kPtr_(NULL),
+ ownK_(false),
+ epsilonPtr_(NULL),
+ ownEpsilon_(false)
+{}
+
+
+template
+Foam::DispersionRASModel::DispersionRASModel
+(
+ DispersionRASModel& dm
+)
+:
+ DispersionModel(dm),
+ kPtr_(dm.kPtr_),
+ ownK_(dm.ownK_),
+ epsilonPtr_(dm.epsilonPtr_),
+ ownEpsilon_(dm.ownEpsilon_)
+{
+ dm.ownK_ = false;
+ dm.ownEpsilon_ = false;
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
+
+template
+Foam::DispersionRASModel::~DispersionRASModel()
+{
+ cacheFields(false);
+}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+template
+void Foam::DispersionRASModel::cacheFields(const bool store)
+{
+ if (store)
+ {
+ tmp tk = this->kModel();
+ if (tk.isTmp())
+ {
+ kPtr_ = tk.ptr();
+ ownK_ = true;
+ }
+ else
+ {
+ kPtr_ = tk.operator->();
+ ownK_ = false;
+ }
+
+ tmp tepsilon = this->epsilonModel();
+ if (tepsilon.isTmp())
+ {
+ epsilonPtr_ = tepsilon.ptr();
+ ownEpsilon_ = true;
+ }
+ else
+ {
+ epsilonPtr_ = tepsilon.operator->();
+ ownEpsilon_ = false;
+ }
+ }
+ else
+ {
+ if (ownK_ && kPtr_)
+ {
+ deleteDemandDrivenData(kPtr_);
+ ownK_ = false;
+ }
+ if (ownEpsilon_ && epsilonPtr_)
+ {
+ deleteDemandDrivenData(epsilonPtr_);
+ ownEpsilon_ = false;
+ }
+ }
+}
+
+
+template
+void Foam::DispersionRASModel::write(Ostream& os) const
+{
+ DispersionModel::write(os);
+
+ os.writeKeyword("ownK") << ownK_ << token::END_STATEMENT << endl;
+ os.writeKeyword("ownEpsilon") << ownEpsilon_ << token::END_STATEMENT
+ << endl;
+}
+
+
+// ************************************************************************* //
diff --git a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H
new file mode 100644
index 00000000..84967663
--- /dev/null
+++ b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H
@@ -0,0 +1,135 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011-2014 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::DispersionRASModel
+
+Description
+ Base class for particle dispersion models based on RAS turbulence.
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef DispersionRASModel_H
+#define DispersionRASModel_H
+
+#include "DispersionModel.H"
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+ Class DispersionRASModel Declaration
+\*---------------------------------------------------------------------------*/
+
+template
+class DispersionRASModel
+:
+ public DispersionModel
+{
+protected:
+
+ // Protected data
+
+ // Locally cached turbulence fields
+
+ //- Turbulence k
+ const volScalarField* kPtr_;
+
+ //- Take ownership of the k field
+ bool ownK_;
+
+ //- Turbulence epsilon
+ const volScalarField* epsilonPtr_;
+
+ //- Take ownership of the epsilon field
+ bool ownEpsilon_;
+
+
+ // Protected Functions
+
+ //- Return the k field from the turbulence model
+ tmp kModel() const;
+
+ //- Return the epsilon field from the turbulence model
+ tmp epsilonModel() const;
+
+
+public:
+
+ //- Runtime type information
+ TypeName("dispersionRASModel");
+
+
+ // Constructors
+
+ //- Construct from components
+ DispersionRASModel(const dictionary& dict, CloudType& owner);
+
+ //- Construct copy
+ DispersionRASModel(DispersionRASModel& dm);
+
+ //- Construct and return a clone
+ virtual autoPtr > clone()
+ {
+ return autoPtr >
+ (
+ new DispersionRASModel(*this)
+ );
+ }
+
+
+ //- Destructor
+ virtual ~DispersionRASModel();
+
+
+ // Member Functions
+
+ //- Cache carrier fields
+ virtual void cacheFields(const bool store);
+
+
+ // I-O
+
+ //- Write
+ virtual void write(Ostream& os) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+# include "DispersionRASModel.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C
new file mode 100644
index 00000000..06fa810a
--- /dev/null
+++ b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C
@@ -0,0 +1,169 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011-2014 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 "GradientDispersionRAS.H"
+#include "demandDrivenData.H"
+#include "fvcGrad.H"
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+template
+Foam::GradientDispersionRAS::GradientDispersionRAS
+(
+ const dictionary& dict,
+ CloudType& owner
+)
+:
+ DispersionRASModel(dict, owner),
+ gradkPtr_(NULL),
+ ownGradK_(false)
+{}
+
+
+template
+Foam::GradientDispersionRAS::GradientDispersionRAS
+(
+ GradientDispersionRAS& dm
+)
+:
+ DispersionRASModel(dm),
+ gradkPtr_(dm.gradkPtr_),
+ ownGradK_(dm.ownGradK_)
+{
+ dm.ownGradK_ = false;
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
+
+template
+Foam::GradientDispersionRAS::~GradientDispersionRAS()
+{
+ cacheFields(false);
+}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+template
+void Foam::GradientDispersionRAS::cacheFields(const bool store)
+{
+ DispersionRASModel::cacheFields(store);
+
+ if (store)
+ {
+ gradkPtr_ = fvc::grad(*this->kPtr_).ptr();
+ ownGradK_ = true;
+ }
+ else
+ {
+ if (ownGradK_)
+ {
+ deleteDemandDrivenData(gradkPtr_);
+ gradkPtr_ = NULL;
+ ownGradK_ = false;
+ }
+ }
+}
+
+
+template
+Foam::vector Foam::GradientDispersionRAS::update
+(
+ const scalar dt,
+ const label cellI,
+ const vector& U,
+ const vector& Uc,
+ vector& UTurb,
+ scalar& tTurb
+)
+{
+ cachedRandom& rnd = this->owner().rndGen();
+
+ const scalar cps = 0.16432;
+
+ const scalar k = this->kPtr_->internalField()[cellI];
+ const scalar epsilon =
+ this->epsilonPtr_->internalField()[cellI] + ROOTVSMALL;
+ const vector& gradk = this->gradkPtr_->internalField()[cellI];
+
+ const scalar UrelMag = mag(U - Uc - UTurb);
+
+ const scalar tTurbLoc =
+ min(k/epsilon, cps*pow(k, 1.5)/epsilon/(UrelMag + SMALL));
+
+
+ // Parcel is perturbed by the turbulence
+ if (dt < tTurbLoc)
+ {
+ tTurb += dt;
+
+ if (tTurb > tTurbLoc)
+ {
+ tTurb = 0.0;
+
+ scalar sigma = sqrt(2.0*k/3.0);
+ vector dir = -gradk/(mag(gradk) + SMALL);
+
+ // Numerical Recipes... Ch. 7. Random Numbers...
+ scalar x1 = 0.0;
+ scalar x2 = 0.0;
+ scalar rsq = 10.0;
+ while ((rsq > 1.0) || (rsq == 0.0))
+ {
+ x1 = 2.0*rnd.sample01() - 1.0;
+ x2 = 2.0*rnd.sample01() - 1.0;
+ rsq = x1*x1 + x2*x2;
+ }
+
+ scalar fac = sqrt(-2.0*log(rsq)/rsq);
+
+ // In 2D calculations the -grad(k) is always
+ // away from the axis of symmetry
+ // This creates a 'hole' in the spray and to
+ // prevent this we let x1 be both negative/positive
+ if (this->owner().mesh().nSolutionD() == 2)
+ {
+ fac *= x1;
+ }
+ else
+ {
+ fac *= mag(x1);
+ }
+
+ UTurb = sigma*fac*dir;
+ }
+ }
+ else
+ {
+ tTurb = GREAT;
+ UTurb = vector::zero;
+ }
+
+ return Uc + UTurb;
+}
+
+
+// ************************************************************************* //
diff --git a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H
new file mode 100644
index 00000000..b9ccfac5
--- /dev/null
+++ b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H
@@ -0,0 +1,126 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011-2014 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::GradientDispersionRAS
+
+Description
+ The velocity is perturbed in the direction of -grad(k), with a
+ Gaussian random number distribution with variance sigma.
+ where sigma is defined below
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef GradientDispersionRAS_H
+#define GradientDispersionRAS_H
+
+#include "DispersionRASModel.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+ Class GradientDispersionRAS Declaration
+\*---------------------------------------------------------------------------*/
+
+template
+class GradientDispersionRAS
+:
+ public DispersionRASModel
+{
+protected:
+
+ // Protected data
+
+ // Locally cached turbulence fields
+
+ //- Gradient of k
+ const volVectorField* gradkPtr_;
+
+ //- Take ownership of the grad(k)
+ bool ownGradK_;
+
+
+public:
+
+ //- Runtime type information
+ TypeName("gradientDispersionRAS");
+
+
+ // Constructors
+
+ //- Construct from components
+ GradientDispersionRAS(const dictionary& dict, CloudType& owner);
+
+ //- Construct copy
+ GradientDispersionRAS(GradientDispersionRAS& dm);
+
+ //- Construct and return a clone
+ virtual autoPtr > clone()
+ {
+ return autoPtr >
+ (
+ new GradientDispersionRAS(*this)
+ );
+ }
+
+
+ //- Destructor
+ virtual ~GradientDispersionRAS();
+
+
+ // Member Functions
+
+ //- Cache carrier fields
+ virtual void cacheFields(const bool store);
+
+ //- Update (disperse particles)
+ virtual vector update
+ (
+ const scalar dt,
+ const label cellI,
+ const vector& U,
+ const vector& Uc,
+ vector& UTurb,
+ scalar& tTurb
+ );
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+# include "GradientDispersionRAS.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C
new file mode 100644
index 00000000..badebbc1
--- /dev/null
+++ b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C
@@ -0,0 +1,127 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011-2014 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 "StochasticDispersionRAS.H"
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+template
+Foam::StochasticDispersionRAS::StochasticDispersionRAS
+(
+ const dictionary& dict,
+ CloudType& owner
+)
+:
+ DispersionRASModel(dict, owner)
+{}
+
+
+template
+Foam::StochasticDispersionRAS::StochasticDispersionRAS
+(
+ StochasticDispersionRAS& dm
+)
+:
+ DispersionRASModel(dm)
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
+
+template
+Foam::StochasticDispersionRAS::~StochasticDispersionRAS()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+template
+Foam::vector Foam::StochasticDispersionRAS::update
+(
+ const scalar dt,
+ const label cellI,
+ const vector& U,
+ const vector& Uc,
+ vector& UTurb,
+ scalar& tTurb
+)
+{
+ cachedRandom& rnd = this->owner().rndGen();
+
+ const scalar cps = 0.16432;
+
+ const scalar k = this->kPtr_->internalField()[cellI];
+ const scalar epsilon =
+ this->epsilonPtr_->internalField()[cellI] + ROOTVSMALL;
+
+ const scalar UrelMag = mag(U - Uc - UTurb);
+
+ const scalar tTurbLoc =
+ min(k/epsilon, cps*pow(k, 1.5)/epsilon/(UrelMag + SMALL));
+
+
+ // Parcel is perturbed by the turbulence
+ if (dt < tTurbLoc)
+ {
+ tTurb += dt;
+
+ if (tTurb > tTurbLoc)
+ {
+ tTurb = 0.0;
+
+ scalar sigma = sqrt(2.0*k/3.0);
+ vector dir = 2.0*rnd.sample01() - vector::one;
+ dir /= mag(dir) + SMALL;
+
+ // Numerical Recipes... Ch. 7. Random Numbers...
+ scalar x1 = 0.0;
+ scalar x2 = 0.0;
+ scalar rsq = 10.0;
+ while ((rsq > 1.0) || (rsq == 0.0))
+ {
+ x1 = 2.0*rnd.sample01() - 1.0;
+ x2 = 2.0*rnd.sample01() - 1.0;
+ rsq = x1*x1 + x2*x2;
+ }
+
+ scalar fac = sqrt(-2.0*log(rsq)/rsq);
+
+ fac *= mag(x1);
+
+ UTurb = sigma*fac*dir;
+
+ }
+ }
+ else
+ {
+ tTurb = GREAT;
+ UTurb = vector::zero;
+ }
+
+ return Uc + UTurb;
+}
+
+
+// ************************************************************************* //
diff --git a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H
new file mode 100644
index 00000000..d1c87d04
--- /dev/null
+++ b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H
@@ -0,0 +1,110 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011-2014 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::StochasticDispersionRAS
+
+Description
+ The velocity is perturbed in random direction, with a
+ Gaussian random number distribution with variance sigma.
+ where sigma is defined below
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef StochasticDispersionRAS_H
+#define StochasticDispersionRAS_H
+
+#include "DispersionRASModel.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+ Class StochasticDispersionRAS Declaration
+\*---------------------------------------------------------------------------*/
+
+template
+class StochasticDispersionRAS
+:
+ public DispersionRASModel
+{
+public:
+
+ //- Runtime type information
+ TypeName("stochasticDispersionRAS");
+
+
+ // Constructors
+
+ //- Construct from components
+ StochasticDispersionRAS(const dictionary& dict, CloudType& owner);
+
+ //- Construct copy
+ StochasticDispersionRAS(StochasticDispersionRAS& dm);
+
+ //- Construct and return a clone
+ virtual autoPtr > clone()
+ {
+ return autoPtr >
+ (
+ new StochasticDispersionRAS(*this)
+ );
+ }
+
+
+ //- Destructor
+ virtual ~StochasticDispersionRAS();
+
+
+ // Member Functions
+
+ //- Update (disperse particles)
+ virtual vector update
+ (
+ const scalar dt,
+ const label cellI,
+ const vector& U,
+ const vector& Uc,
+ vector& UTurb,
+ scalar& tTurb
+ );
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+# include "StochasticDispersionRAS.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //