diff --git a/src/lagrangian/coalCombustion/coalParcel/coalParcel.C b/src/lagrangian/coalCombustion/coalParcel/coalParcel.C
index a6500c8388e3f025709dc1d5f321936d918398bb..3445afe14eb3bd32418d0f01e087a92414158d9f 100644
--- a/src/lagrangian/coalCombustion/coalParcel/coalParcel.C
+++ b/src/lagrangian/coalCombustion/coalParcel/coalParcel.C
@@ -57,6 +57,7 @@ Foam::coalParcel::coalParcel
     const label typeId,
     const scalar nParticle0,
     const scalar d0,
+    const scalar dTarget0,
     const vector& U0,
     const vector& f0,
     const vector& pi0,
@@ -78,6 +79,7 @@ Foam::coalParcel::coalParcel
         typeId,
         nParticle0,
         d0,
+        dTarget0,
         U0,
         f0,
         pi0,
diff --git a/src/lagrangian/coalCombustion/coalParcel/coalParcel.H b/src/lagrangian/coalCombustion/coalParcel/coalParcel.H
index 81f6447320c40fbde7138b7040575f56998340b4..6195de8439bb01ce34a359bac1d296c3aff3d398 100644
--- a/src/lagrangian/coalCombustion/coalParcel/coalParcel.H
+++ b/src/lagrangian/coalCombustion/coalParcel/coalParcel.H
@@ -79,6 +79,7 @@ public:
              const label typeId,
              const scalar nParticle0,
              const scalar d0,
+             const scalar dTarget0,
              const vector& U0,
              const vector& f0,
              const vector& pi0,
diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H
index ed5b5ae539b827b057c7cd12e4456c07ee95aec3..1d0a903810222341e512845b8097b661689ca990 100644
--- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H
+++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H
@@ -297,9 +297,10 @@ public:
                 //- Return refernce to the random object
                 inline Random& rndGen();
 
-                //- Return the cell occupancy information for each parcel,
-                //  non-const access, the caller is responsible for updating
-                //  it if particles are removed or created.
+                //- Return the cell occupancy information for each
+                //  parcel, non-const access, the caller is
+                //  responsible for updating it for its own purposes
+                //  if particles are removed or created.
                 inline List<DynamicList<ParcelType*> >& cellOccupancy();
 
 
diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordList.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordList.C
index aa2db0b4de6fd7b220d6b773886ea7423a803e85..4e80d16d6f63d683db81b504d7d2561fa36aa5e6 100644
--- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordList.C
+++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordList.C
@@ -300,6 +300,27 @@ Foam::CollisionRecordList<PairType, WallType>::matchPairRecord
 }
 
 
+template<class PairType, class WallType>
+bool Foam::CollisionRecordList<PairType, WallType>::checkPairRecord
+(
+    label origProcOfOther,
+    label origIdOfOther
+)
+{
+    forAll(pairRecords_, i)
+    {
+        PairCollisionRecord<PairType>& pCR = pairRecords_[i];
+
+        if (pCR.match(origProcOfOther, origIdOfOther))
+        {
+            return true;
+        }
+    }
+
+    return false;
+}
+
+
 template<class PairType, class WallType>
 Foam::WallCollisionRecord<WallType>&
 Foam::CollisionRecordList<PairType, WallType>::matchWallRecord
@@ -333,6 +354,26 @@ Foam::CollisionRecordList<PairType, WallType>::matchWallRecord
 }
 
 
+template<class PairType, class WallType>
+bool Foam::CollisionRecordList<PairType, WallType>::checkWallRecord
+(
+    const vector& pRel,
+    scalar radius
+)
+{
+    forAll(wallRecords_, i)
+    {
+        WallCollisionRecord<WallType>& wCR = wallRecords_[i];
+
+        if (wCR.match(pRel, radius))
+        {
+            return true;
+        }
+    }
+
+    return false;
+}
+
 
 template<class PairType, class WallType>
 void Foam::CollisionRecordList<PairType, WallType>::update()
diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordList.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordList.H
index 51aa29849f3f6359d6e1c7015b802479277613b8..a933b35ca02e8c68af30c4739a5d3dae44d2bd73 100644
--- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordList.H
+++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordList.H
@@ -168,6 +168,10 @@ public:
             label origIdOfOther
         );
 
+        //- Enquire if the specified record exists without modifying
+        //  its accessed status
+        bool checkPairRecord(label origProcOfOther, label origIdOfOther);
+
         //- Enquires if the position of wall impact relative to the
         //  particle centre is present in the records.  If so, return
         //  access to the WallCollisionRecord (hence the data) and
@@ -179,6 +183,10 @@ public:
             scalar radius
         );
 
+        //- Enquire if the specified record exists without modifying
+        //  its accessed status
+        bool checkWallRecord(const vector& pRel, scalar radius);
+
         //- Update the collision records, deleting any records not
         //  marked as having been accessed, then mark all records as
         //  not accessed ready for the next evaluation
diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C
index 26acc7d9e6e657b5d72cec2d3bbbd3ec97f7fefa..f6ba6aeed3a74760a53e98ae973796c438b2ef95 100644
--- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C
+++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C
@@ -225,6 +225,7 @@ Foam::KinematicParcel<ParcelType>::KinematicParcel
     typeId_(p.typeId_),
     nParticle_(p.nParticle_),
     d_(p.d_),
+    dTarget_(p.dTarget_),
     U_(p.U_),
     f_(p.f_),
     angularMomentum_(p.angularMomentum_),
diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H
index b87a1390df4fb36ab31475e7e03caa974006d3c5..4a76cb0173c634584c2f9b6ee7ce480843c8b592 100644
--- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H
+++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H
@@ -250,6 +250,9 @@ protected:
             //- Diameter [m]
             scalar d_;
 
+            //- Target diameter [m]
+            scalar dTarget_;
+
             //- Velocity of Parcel [m/s]
             vector U_;
 
@@ -347,6 +350,7 @@ public:
             const label typeId,
             const scalar nParticle0,
             const scalar d0,
+            const scalar dTarget0,
             const vector& U0,
             const vector& f0,
             const vector& angularMomentum0,
@@ -388,6 +392,9 @@ public:
             //- Return const access to diameter
             inline scalar d() const;
 
+            //- Return const access to target diameter
+            inline scalar dTarget() const;
+
             //- Return const access to velocity
             inline const vector& U() const;
 
@@ -427,6 +434,9 @@ public:
             //- Return access to diameter
             inline scalar& d();
 
+            //- Return access to target diameter
+            inline scalar& dTarget();
+
             //- Return access to velocity
             inline vector& U();
 
@@ -478,19 +488,19 @@ public:
             inline scalar volume() const;
 
             //- Particle volume for a given diameter
-            inline scalar volume(const scalar d) const;
+            inline static scalar volume(const scalar d);
 
             //- Particle projected area
             inline scalar areaP() const;
 
             //- Projected area for given diameter
-            inline scalar areaP(const scalar d) const;
+            inline static scalar areaP(const scalar d);
 
             //- Particle surface area
             inline scalar areaS() const;
 
             //- Surface area for given diameter
-            inline scalar areaS(const scalar d) const;
+            inline static scalar areaS(const scalar d);
 
             //- Reynolds number
             inline scalar Re
diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H
index a6f41647c78a0be932b5aa0c97d3d60a42e2c284..e39a9f43af0d32dc9a07b981d33c4ecd8b988e8f 100644
--- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H
+++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H
@@ -91,6 +91,7 @@ inline Foam::KinematicParcel<ParcelType>::KinematicParcel
     typeId_(owner.parcelTypeId()),
     nParticle_(0),
     d_(0.0),
+    dTarget_(0.0),
     U_(vector::zero),
     f_(vector::zero),
     angularMomentum_(vector::zero),
@@ -116,6 +117,7 @@ inline Foam::KinematicParcel<ParcelType>::KinematicParcel
     const label typeId,
     const scalar nParticle0,
     const scalar d0,
+    const scalar dTarget0,
     const vector& U0,
     const vector& f0,
     const vector& angularMomentum0,
@@ -128,6 +130,7 @@ inline Foam::KinematicParcel<ParcelType>::KinematicParcel
     typeId_(typeId),
     nParticle_(nParticle0),
     d_(d0),
+    dTarget_(dTarget0),
     U_(U0),
     f_(f0),
     angularMomentum_(angularMomentum0),
@@ -292,6 +295,13 @@ inline Foam::scalar Foam::KinematicParcel<ParcelType>::d() const
 }
 
 
+template <class ParcelType>
+inline Foam::scalar Foam::KinematicParcel<ParcelType>::dTarget() const
+{
+    return dTarget_;
+}
+
+
 template <class ParcelType>
 inline const Foam::vector& Foam::KinematicParcel<ParcelType>::U() const
 {
@@ -380,6 +390,13 @@ inline Foam::scalar& Foam::KinematicParcel<ParcelType>::d()
 }
 
 
+template <class ParcelType>
+inline Foam::scalar& Foam::KinematicParcel<ParcelType>::dTarget()
+{
+    return dTarget_;
+}
+
+
 template <class ParcelType>
 inline Foam::vector& Foam::KinematicParcel<ParcelType>::U()
 {
@@ -504,7 +521,7 @@ inline Foam::scalar Foam::KinematicParcel<ParcelType>::volume() const
 
 template <class ParcelType>
 inline Foam::scalar
-Foam::KinematicParcel<ParcelType>::volume(const scalar d) const
+Foam::KinematicParcel<ParcelType>::volume(const scalar d)
 {
     return pi/6.0*pow3(d);
 }
@@ -519,7 +536,7 @@ inline Foam::scalar Foam::KinematicParcel<ParcelType>::areaP() const
 
 template <class ParcelType>
 inline Foam::scalar
-Foam::KinematicParcel<ParcelType>::areaP(const scalar d) const
+Foam::KinematicParcel<ParcelType>::areaP(const scalar d)
 {
     return 0.25*areaS(d);
 }
@@ -534,7 +551,7 @@ inline Foam::scalar Foam::KinematicParcel<ParcelType>::areaS() const
 
 template <class ParcelType>
 inline Foam::scalar
-Foam::KinematicParcel<ParcelType>::areaS(const scalar d) const
+Foam::KinematicParcel<ParcelType>::areaS(const scalar d)
 {
     return pi*d*d;
 }
diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C
index 7660070383dd2f234dd09d93233ed70481f6f763..8f1645db60622d0fe9b053c19d49446eeb87dc7d 100644
--- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C
+++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C
@@ -37,6 +37,7 @@ Foam::string Foam::KinematicParcel<ParcelType>::propHeader =
   + " typeId"
   + " nParticle"
   + " d"
+  + " dTarget "
   + " (Ux Uy Uz)"
   + " (fx fy fz)"
   + " (angularMomentumx angularMomentumy angularMomentumz)"
@@ -68,6 +69,7 @@ Foam::KinematicParcel<ParcelType>::KinematicParcel
     typeId_(0),
     nParticle_(0.0),
     d_(0.0),
+    dTarget_(0.0),
     U_(vector::zero),
     f_(vector::zero),
     angularMomentum_(vector::zero),
@@ -88,6 +90,7 @@ Foam::KinematicParcel<ParcelType>::KinematicParcel
             typeId_ = readLabel(is);
             nParticle_ = readScalar(is);
             d_ = readScalar(is);
+            dTarget_ = readScalar(is);
             is >> U_;
             is >> f_;
             is >> angularMomentum_;
@@ -106,6 +109,7 @@ Foam::KinematicParcel<ParcelType>::KinematicParcel
               + sizeof(typeId_)
               + sizeof(nParticle_)
               + sizeof(d_)
+              + sizeof(dTarget_)
               + sizeof(U_)
               + sizeof(f_)
               + sizeof(angularMomentum_)
@@ -150,6 +154,9 @@ void Foam::KinematicParcel<ParcelType>::readFields(Cloud<ParcelType>& c)
     IOField<scalar> d(c.fieldIOobject("d", IOobject::MUST_READ));
     c.checkFieldIOobject(c, d);
 
+    IOField<scalar> dTarget(c.fieldIOobject("dTarget", IOobject::MUST_READ));
+    c.checkFieldIOobject(c, dTarget);
+
     IOField<vector> U(c.fieldIOobject("U", IOobject::MUST_READ));
     c.checkFieldIOobject(c, U);
 
@@ -234,6 +241,7 @@ void Foam::KinematicParcel<ParcelType>::readFields(Cloud<ParcelType>& c)
         p.typeId_ = typeId[i];
         p.nParticle_ = nParticle[i];
         p.d_ = d[i];
+        p.dTarget_ = dTarget[i];
         p.U_ = U[i];
         p.f_ = f[i];
         p.angularMomentum_ = angularMomentum[i];
@@ -271,6 +279,7 @@ void Foam::KinematicParcel<ParcelType>::writeFields(const Cloud<ParcelType>& c)
         np
     );
     IOField<scalar> d(c.fieldIOobject("d", IOobject::NO_READ), np);
+    IOField<scalar> dTarget(c.fieldIOobject("dTarget", IOobject::NO_READ), np);
     IOField<vector> U(c.fieldIOobject("U", IOobject::NO_READ), np);
     IOField<vector> f(c.fieldIOobject("f", IOobject::NO_READ), np);
     IOField<vector> angularMomentum
@@ -333,6 +342,7 @@ void Foam::KinematicParcel<ParcelType>::writeFields(const Cloud<ParcelType>& c)
         typeId[i] = p.typeId();
         nParticle[i] = p.nParticle();
         d[i] = p.d();
+        dTarget[i] = p.dTarget();
         U[i] = p.U();
         f[i] = p.f();
         angularMomentum[i] = p.angularMomentum();
@@ -357,6 +367,7 @@ void Foam::KinematicParcel<ParcelType>::writeFields(const Cloud<ParcelType>& c)
     typeId.write();
     nParticle.write();
     d.write();
+    dTarget.write();
     U.write();
     f.write();
     angularMomentum.write();
@@ -390,6 +401,7 @@ Foam::Ostream& Foam::operator<<
             << token::SPACE << p.typeId()
             << token::SPACE << p.nParticle()
             << token::SPACE << p.d()
+            << token::SPACE << p.dTarget()
             << token::SPACE << p.U()
             << token::SPACE << p.f()
             << token::SPACE << p.angularMomentum()
@@ -409,6 +421,7 @@ Foam::Ostream& Foam::operator<<
           + sizeof(p.typeId())
           + sizeof(p.nParticle())
           + sizeof(p.d())
+          + sizeof(p.dTarget())
           + sizeof(p.U())
           + sizeof(p.f())
           + sizeof(p.angularMomentum())
diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.H b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.H
index 3fb4ef24218b83ca9693fc72337b7bc0ac9ff799..ed0b11e88e5b478b7e682cfca45e06be153c3e6f 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.H
+++ b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.H
@@ -306,6 +306,7 @@ public:
             const label typeId,
             const scalar nParticle0,
             const scalar d0,
+            const scalar dTarget0,
             const vector& U0,
             const vector& f0,
             const vector& angularMomentum0,
diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelI.H b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelI.H
index 5899d2a6666df49a9651c3aef7b34b5df3eae75d..960a298ad7cdb1ce03f2bc9d0b133376b7dc76d4 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelI.H
+++ b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelI.H
@@ -113,6 +113,7 @@ inline Foam::ReactingMultiphaseParcel<ParcelType>::ReactingMultiphaseParcel
     const label typeId,
     const scalar nParticle0,
     const scalar d0,
+    const scalar dTarget0,
     const vector& U0,
     const vector& f0,
     const vector& angularMomentum0,
@@ -134,6 +135,7 @@ inline Foam::ReactingMultiphaseParcel<ParcelType>::ReactingMultiphaseParcel
         typeId,
         nParticle0,
         d0,
+        dTarget0,
         U0,
         f0,
         angularMomentum0,
diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H
index 415967c7c53842f40edd8885ce72a7027021bcf8..6ae15d5098ebe41cbbb03109d748002d0530cf4a 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H
+++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H
@@ -255,6 +255,7 @@ public:
             const label typeId,
             const scalar nParticle0,
             const scalar d0,
+            const scalar dTarget0,
             const vector& U0,
             const vector& f0,
             const vector& angularMomentum0,
diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H
index 39beae61cf026a0767df019e016768b66fab9304..60c1556b8f2fb641113a07e0293ac7c19f459798 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H
+++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H
@@ -98,6 +98,7 @@ inline Foam::ReactingParcel<ParcelType>::ReactingParcel
     const label typeId,
     const scalar nParticle0,
     const scalar d0,
+    const scalar dTarget0,
     const vector& U0,
     const vector& f0,
     const vector& angularMomentum0,
@@ -116,6 +117,7 @@ inline Foam::ReactingParcel<ParcelType>::ReactingParcel
         typeId,
         nParticle0,
         d0,
+        dTarget0,
         U0,
         f0,
         angularMomentum0,
diff --git a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.H b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.H
index 5632d76592b797876e9fdacd243e74db4c744c17..dc97dcba6c41e0303396b2e863976c596ac4c14c 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.H
+++ b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.H
@@ -268,6 +268,7 @@ public:
             const label typeId,
             const scalar nParticle0,
             const scalar d0,
+            const scalar dTarget0,
             const vector& U0,
             const vector& f0,
             const vector& angularMomentum0,
diff --git a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelI.H b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelI.H
index b046f142ddd3c6f168a15e104d60e07f749a463c..b728ce65cbb40c4302ea1239562615d4feb9caec 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelI.H
+++ b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelI.H
@@ -99,6 +99,7 @@ inline Foam::ThermoParcel<ParcelType>::ThermoParcel
     const label typeId,
     const scalar nParticle0,
     const scalar d0,
+    const scalar dTarget0,
     const vector& U0,
     const vector& f0,
     const vector& angularMomentum0,
@@ -116,6 +117,7 @@ inline Foam::ThermoParcel<ParcelType>::ThermoParcel
         typeId,
         nParticle0,
         d0,
+        dTarget0,
         U0,
         f0,
         angularMomentum0,
diff --git a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/basicKinematicParcel.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/basicKinematicParcel.C
index 4ec2941bf78cca58d41db4f368c29aab5a86f6ce..adc4fc409bd59ec5e933e6838ba78adbfc33abc8 100644
--- a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/basicKinematicParcel.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/basicKinematicParcel.C
@@ -67,6 +67,7 @@ Foam::basicKinematicParcel::basicKinematicParcel
     const label typeId,
     const scalar nParticle0,
     const scalar d0,
+    const scalar dTarget0,
     const vector& U0,
     const vector& f0,
     const vector& angularMomentum0,
@@ -84,6 +85,7 @@ Foam::basicKinematicParcel::basicKinematicParcel
         typeId,
         nParticle0,
         d0,
+        dTarget0,
         U0,
         f0,
         angularMomentum0,
diff --git a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/basicKinematicParcel.H b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/basicKinematicParcel.H
index 56d9cad296e9682bc4ccd2b3e30466515395b569..5fdb8777a5c2ec5b8ec4202ebf595c73519d0a6c 100644
--- a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/basicKinematicParcel.H
+++ b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/basicKinematicParcel.H
@@ -81,6 +81,7 @@ public:
             const label typeId,
             const scalar nParticle0,
             const scalar d0,
+            const scalar dTarget0,
             const vector& U0,
             const vector& f0,
             const vector& angularMomentum0,
diff --git a/src/lagrangian/intermediate/parcels/derived/basicReactingMultiphaseParcel/basicReactingMultiphaseParcel.C b/src/lagrangian/intermediate/parcels/derived/basicReactingMultiphaseParcel/basicReactingMultiphaseParcel.C
index 49e4e06ef4c56652ec775245caca7211e980d07d..748122567e9bdb30486e9f8b43bef4b187ae5823 100644
--- a/src/lagrangian/intermediate/parcels/derived/basicReactingMultiphaseParcel/basicReactingMultiphaseParcel.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicReactingMultiphaseParcel/basicReactingMultiphaseParcel.C
@@ -57,6 +57,7 @@ Foam::basicReactingMultiphaseParcel::basicReactingMultiphaseParcel
     const label typeId,
     const scalar nParticle0,
     const scalar d0,
+    const scalar dTarget0,
     const vector& U0,
     const vector& f0,
     const vector& angularMomentum0,
@@ -79,6 +80,7 @@ Foam::basicReactingMultiphaseParcel::basicReactingMultiphaseParcel
         typeId,
         nParticle0,
         d0,
+        dTarget0,
         U0,
         f0,
         angularMomentum0,
diff --git a/src/lagrangian/intermediate/parcels/derived/basicReactingMultiphaseParcel/basicReactingMultiphaseParcel.H b/src/lagrangian/intermediate/parcels/derived/basicReactingMultiphaseParcel/basicReactingMultiphaseParcel.H
index 1c9d2db2d72fcfe7035b9130e16fec262d429e21..2fa913c2299865b7bc9bc28b866de8b77e497560 100644
--- a/src/lagrangian/intermediate/parcels/derived/basicReactingMultiphaseParcel/basicReactingMultiphaseParcel.H
+++ b/src/lagrangian/intermediate/parcels/derived/basicReactingMultiphaseParcel/basicReactingMultiphaseParcel.H
@@ -82,6 +82,7 @@ public:
              const label typeId,
              const scalar nParticle0,
              const scalar d0,
+             const scalar dTarget0,
              const vector& U0,
              const vector& f0,
              const vector& angularMomentum0,
diff --git a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/basicReactingParcel.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/basicReactingParcel.C
index f60f30b552bd5ca4ecf7d05a851a6f1bf9250afe..25b0c4c26aea6ff009cfe93614f90ece1f77381f 100644
--- a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/basicReactingParcel.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/basicReactingParcel.C
@@ -57,6 +57,7 @@ Foam::basicReactingParcel::basicReactingParcel
     const label typeId,
     const scalar nParticle0,
     const scalar d0,
+    const scalar dTarget0,
     const vector& U0,
     const vector& f0,
     const vector& angularMomentum0,
@@ -75,6 +76,7 @@ Foam::basicReactingParcel::basicReactingParcel
         typeId,
         nParticle0,
         d0,
+        dTarget0,
         U0,
         f0,
         angularMomentum0,
diff --git a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/basicReactingParcel.H b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/basicReactingParcel.H
index 4329c61d9c3eff0eb02541f893c57661db7be988..49e26aadb70c6dbbbe297b54b54685e0d703ca2c 100644
--- a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/basicReactingParcel.H
+++ b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/basicReactingParcel.H
@@ -80,6 +80,7 @@ public:
             const label typeId,
             const scalar nParticle0,
             const scalar d0,
+            const scalar dTarget0,
             const vector& U0,
             const vector& f0,
             const vector& angularMomentum0,
diff --git a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.C b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.C
index b77bf79b93c65c4ac3ff1cab7dd6bdd6949e0ee0..5b5fddb1bbc4924f5c58742fddbb46642ce8c1cb 100644
--- a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.C
+++ b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.C
@@ -60,6 +60,7 @@ Foam::basicThermoParcel::basicThermoParcel
     const label typeId,
     const scalar nParticle0,
     const scalar d0,
+    const scalar dTarget0,
     const vector U0,
     const vector& f0,
     const vector& angularMomentum0,
@@ -77,6 +78,7 @@ Foam::basicThermoParcel::basicThermoParcel
         typeId,
         nParticle0,
         d0,
+        dTarget0,
         U0,
         f0,
         angularMomentum0,
diff --git a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.H b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.H
index 71614c7d9d0b7292e1eb0d8c4bf18f9999b7e072..8f3720b365f79c6da7ccc168b7f4607c29d13c5f 100644
--- a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.H
+++ b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.H
@@ -80,6 +80,7 @@ public:
             const label typeId,
             const scalar nParticle0,
             const scalar d0,
+            const scalar dTarget0,
             const vector U0,
             const vector& f0,
             const vector& angularMomentum0,
diff --git a/src/lagrangian/intermediate/parcels/include/makeParcelInjectionModels.H b/src/lagrangian/intermediate/parcels/include/makeParcelInjectionModels.H
index ea8dcd57f475f72fa3684ed1e9cbc84fdae61af0..b673d3d84cc2fd75ef476b54ed41866d6ea25f59 100644
--- a/src/lagrangian/intermediate/parcels/include/makeParcelInjectionModels.H
+++ b/src/lagrangian/intermediate/parcels/include/makeParcelInjectionModels.H
@@ -33,11 +33,13 @@ License
 #include "ConeInjection.H"
 #include "ConeInjectionMP.H"
 #include "FieldActivatedInjection.H"
+#include "InflationInjection.H"
 #include "KinematicLookupTableInjection.H"
 #include "ManualInjection.H"
 #include "NoInjection.H"
 #include "PatchInjection.H"
 
+
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 #define makeParcelInjectionModels(ParcelType)                                 \
@@ -63,6 +65,12 @@ License
         ParcelType                                                            \
     );                                                                        \
     makeInjectionModelType                                                    \
+    (                                                                         \
+        InflationInjection,                                                   \
+        KinematicCloud,                                                       \
+        ParcelType                                                            \
+    );                                                                        \
+    makeInjectionModelType                                                    \
     (                                                                         \
         KinematicLookupTableInjection,                                        \
         KinematicCloud,                                                       \
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C
index 3047f909affff8565f0de630bc1a1af0638e0a0e..438b32b2252b07350225323df1e0fe8c49c77e35 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C
@@ -36,7 +36,7 @@ Foam::label Foam::ConeInjection<CloudType>::parcelsToInject
 (
     const scalar time0,
     const scalar time1
-) const
+)
 {
     if ((time0 >= 0.0) && (time0 < duration_))
     {
@@ -54,7 +54,7 @@ Foam::scalar Foam::ConeInjection<CloudType>::volumeToInject
 (
     const scalar time0,
     const scalar time1
-) const
+)
 {
     if ((time0 >= 0.0) && (time0 < duration_))
     {
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H
index 58309fa86548a39bb1320dc10b58eae0ea0a3dbb..a9c289d6d48d44b5be1c59fba2697b6e1c661591 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H
@@ -123,14 +123,14 @@ protected:
         (
             const scalar time0,
             const scalar time1
-        ) const;
+        );
 
         //- Number of parcels to introduce over the time step relative to SOI
         scalar volumeToInject
         (
             const scalar time0,
             const scalar time1
-        ) const;
+        );
 
 
 public:
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjectionMP/ConeInjectionMP.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjectionMP/ConeInjectionMP.C
index 05cfb680a4f39d25a375164a72671b9d938ef1fd..6639c43587fc4e7fb237ac09962a53bb73b909cd 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjectionMP/ConeInjectionMP.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjectionMP/ConeInjectionMP.C
@@ -36,7 +36,7 @@ Foam::label Foam::ConeInjectionMP<CloudType>::parcelsToInject
 (
     const scalar time0,
     const scalar time1
-) const
+)
 {
     if ((time0 >= 0.0) && (time0 < duration_))
     {
@@ -63,7 +63,7 @@ Foam::scalar Foam::ConeInjectionMP<CloudType>::volumeToInject
 (
     const scalar time0,
     const scalar time1
-) const
+)
 {
     if ((time0 >= 0.0) && (time0 < duration_))
     {
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjectionMP/ConeInjectionMP.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjectionMP/ConeInjectionMP.H
index 1033defe8b5cc5e08475df68ead7d903d6bd9e07..2b0d4e8c313e5586a92fc20926fa1c58925c1c72 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjectionMP/ConeInjectionMP.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjectionMP/ConeInjectionMP.H
@@ -133,14 +133,14 @@ protected:
         (
             const scalar time0,
             const scalar time1
-        ) const;
+        );
 
         //- Number of parcels to introduce over the time step
         scalar volumeToInject
         (
             const scalar time0,
             const scalar time1
-        ) const;
+        );
 
 
 public:
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.C
index a0dae5cb34f02803d8b9fe9e326f812165704351..44cebec90388d605251285ca144b5a2cfaa20516 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.C
@@ -36,7 +36,7 @@ Foam::label Foam::FieldActivatedInjection<CloudType>::parcelsToInject
 (
     const scalar time0,
     const scalar time1
-) const
+)
 {
     if (sum(nParcelsInjected_) < nParcelsPerInjector_*positions_.size())
     {
@@ -54,7 +54,7 @@ Foam::scalar Foam::FieldActivatedInjection<CloudType>::volumeToInject
 (
     const scalar time0,
     const scalar time1
-) const
+)
 {
     if (sum(nParcelsInjected_) < nParcelsPerInjector_*positions_.size())
     {
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.H
index 282e876cc665e06f25131c4cb820622681c496f2..9acf379154d5f99162cc6744ff48fd7d711366f1 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.H
@@ -123,14 +123,14 @@ protected:
         (
             const scalar time0,
             const scalar time1
-        ) const;
+        );
 
         //- Volume of parcels to introduce over the time step relative to SOI
         scalar volumeToInject
         (
             const scalar time0,
             const scalar time1
-        ) const;
+        );
 
 
 public:
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InflationInjection/InflationInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InflationInjection/InflationInjection.C
new file mode 100644
index 0000000000000000000000000000000000000000..e1d3bd6d3ddd641d3729ec499c22b8b7c842037b
--- /dev/null
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InflationInjection/InflationInjection.C
@@ -0,0 +1,466 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 1991-2010 OpenCFD Ltd.
+     \\/     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 "InflationInjection.H"
+#include "mathematicalConstants.H"
+#include "PackedBoolList.H"
+#include "Switch.H"
+#include "cellSet.H"
+#include "ListListOps.H"
+
+using namespace Foam::constant::mathematical;
+
+// * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * * //
+
+template<class CloudType>
+Foam::label Foam::InflationInjection<CloudType>::parcelsToInject
+(
+    const scalar time0,
+    const scalar time1
+)
+{
+    const polyMesh& mesh = this->owner().mesh();
+
+    List<DynamicList<typename CloudType::parcelType*> >& cellOccupancy =
+        this->owner().cellOccupancy();
+
+    scalar gR = growthRate_().value(time1);
+
+    scalar dT = time1 - time0;
+
+    // Inflate existing particles
+
+    forAll(inflationCells_, iCI)
+    {
+        label cI = inflationCells_[iCI];
+
+        typename CloudType::parcelType* pPtr = NULL;
+
+        forAll(cellOccupancy[cI], cPI)
+        {
+            pPtr = cellOccupancy[cI][cPI];
+
+            scalar dTarget = pPtr->dTarget();
+
+            pPtr->d() = min(dTarget, pPtr->d() + gR*dT);
+        }
+    }
+
+    // Generate new particles
+
+    newParticles_.clear();
+
+    Random& rnd = this->owner().rndGen();
+
+    // Diameter factor, when splitting particles into 4, this is the
+    // factor that modifies the diameter.
+    scalar dFact = sqrt(2.0)/(sqrt(3.0) + sqrt(2.0));
+
+    if ((time0 >= 0.0) && (time0 < duration_))
+    {
+         volumeAccumulator_ +=
+             fraction_*flowRateProfile_().integrate(time0, time1);
+    }
+
+    labelHashSet cellCentresUsed;
+
+    // Loop escape counter
+    label maxIterations = max
+    (
+        1,
+        (10*volumeAccumulator_)
+       /CloudType::parcelType::volume(parcelPDF_().minValue())
+    );
+
+    label iterationNo = 0;
+
+    // Info<< "Accumulated volume to inject: "
+    //     << returnReduce(volumeAccumulator_, sumOp<scalar>()) << endl;
+
+    while (!generationCells_.empty() && volumeAccumulator_ > 0)
+    {
+        if (iterationNo > maxIterations)
+        {
+            WarningIn
+            (
+                "Foam::label "
+                "Foam::InflationInjection<CloudType>::parcelsToInject"
+                "("
+                    "const scalar time0, "
+                    "const scalar time1"
+                ")"
+            )
+                << "Maximum particle split iterations ("
+                << maxIterations << ") exceeded" << endl;
+
+            break;
+        }
+
+        label cI =
+            generationCells_[rnd.integer(0, generationCells_.size() - 1)];
+
+        // Pick a particle at random from the cell - if there are
+        // none, insert one at the cell centre.  Otherwise, split an
+        // existing particle into four new ones.
+
+        if (cellOccupancy[cI].empty())
+        {
+            if (!cellCentresUsed.found(cI))
+            {
+                scalar dNew = parcelPDF_().sample();
+
+                newParticles_.append
+                (
+                    vectorPairScalarPair
+                    (
+                        Pair<vector>(mesh.cellCentres()[cI], vector::zero),
+                        Pair<scalar>(dNew, dNew)
+                    )
+                );
+
+                volumeAccumulator_ -= CloudType::parcelType::volume(dNew);
+
+                cellCentresUsed.insert(cI);
+            }
+        }
+        else
+        {
+            label cPI = rnd.integer(0, cellOccupancy[cI].size() - 1);
+
+            // This has to be a reference to the pointer so that it
+            // can be set to NULL when the particle is deleted.
+            typename CloudType::parcelType*& pPtr = cellOccupancy[cI][cPI];
+
+            if (pPtr != NULL)
+            {
+                scalar pD = pPtr->d();
+
+                // Select bigger particles by preference
+                if ((pD/pPtr->dTarget()) < rnd.scalar01())
+                {
+                    continue;
+                }
+
+                const point& pP = pPtr->position();
+                const vector& pU = pPtr->U();
+
+                // Generate a tetrahedron of new positions with the
+                // four new spheres fitting inside the old one, where
+                // a is the diameter of the new spheres, and is
+                // related to the diameter of the enclosing sphere, A,
+                // by a = sqrt(2)*A/(sqrt(3) + sqrt(2));
+
+                // Positions around the origin, which is the
+                // tetrahedron centroid (centre of old sphere).
+
+                // x = a/sqrt(3)
+                // r = a/(2*sqrt(6))
+                // R = sqrt(3)*a/(2*sqrt(2))
+                // d = a/(2*sqrt(3))
+
+                // p0(x, 0, -r)
+                // p1(-d, a/2, -r)
+                // p2(-d, -a/2, -r)
+                // p3(0, 0, R)
+
+                scalar a = pD*dFact;
+
+                scalar x = a/sqrt(3.0);
+                scalar r = a/(2.0*sqrt(6.0));
+                scalar R = sqrt(3.0)*a/(2.0*sqrt(2.0));
+                scalar d = a/(2.0*sqrt(3.0));
+
+                scalar dNew = parcelPDF_().sample();
+                scalar volNew = CloudType::parcelType::volume(dNew);
+
+                newParticles_.append
+                (
+                    vectorPairScalarPair
+                    (
+                        Pair<vector>(vector(x, 0, -r)  + pP, pU),
+                        Pair<scalar>(a, dNew)
+                    )
+                );
+                volumeAccumulator_ -= volNew;
+
+                dNew = parcelPDF_().sample();
+                newParticles_.append
+                (
+                    vectorPairScalarPair
+                    (
+                        Pair<vector>(vector(-d, a/2, -r) + pP, pU),
+                        Pair<scalar>(a, dNew)
+                    )
+                );
+                volumeAccumulator_ -= volNew;
+
+                dNew = parcelPDF_().sample();
+                newParticles_.append
+                (
+                    vectorPairScalarPair
+                    (
+                        Pair<vector>(vector(-d, -a/2, -r) + pP, pU),
+                        Pair<scalar>(a, dNew)
+                    )
+                );
+                volumeAccumulator_ -= volNew;
+
+                dNew = parcelPDF_().sample();
+                newParticles_.append
+                (
+                    vectorPairScalarPair
+                    (
+                        Pair<vector>(vector(0, 0, R) + pP, pU),
+                        Pair<scalar>(a, dNew)
+                    )
+                );
+                volumeAccumulator_ -= volNew;
+
+                // Account for the lost volume of the particle which
+                // is to be deleted
+                volumeAccumulator_ += CloudType::parcelType::volume
+                (
+                    pPtr->dTarget()
+                );
+
+                this->owner().deleteParticle(*pPtr);
+
+                pPtr = NULL;
+            }
+        }
+
+        iterationNo++;
+    }
+
+    if (Pstream::parRun())
+    {
+        List<List<vectorPairScalarPair> > gatheredNewParticles
+        (
+            Pstream::nProcs()
+        );
+
+        gatheredNewParticles[Pstream::myProcNo()] = newParticles_;
+
+        // Gather data onto master
+        Pstream::gatherList(gatheredNewParticles);
+
+        // Combine
+        List<vectorPairScalarPair> combinedNewParticles
+        (
+            ListListOps::combine<List<vectorPairScalarPair> >
+            (
+                gatheredNewParticles,
+                accessOp<List<vectorPairScalarPair> >()
+            )
+        );
+
+        if (Pstream::master())
+        {
+            newParticles_ = combinedNewParticles;
+        }
+
+        Pstream::scatter(newParticles_);
+    }
+
+    return newParticles_.size();
+}
+
+
+template<class CloudType>
+Foam::scalar Foam::InflationInjection<CloudType>::volumeToInject
+(
+    const scalar time0,
+    const scalar time1
+)
+{
+    if ((time0 >= 0.0) && (time0 < duration_))
+    {
+        return fraction_*flowRateProfile_().integrate(time0, time1);
+    }
+    else
+    {
+        return 0.0;
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+template<class CloudType>
+Foam::InflationInjection<CloudType>::InflationInjection
+(
+    const dictionary& dict,
+    CloudType& owner
+)
+:
+    InjectionModel<CloudType>(dict, owner, typeName),
+    generationSetName_(this->coeffDict().lookup("generationCellSet")),
+    inflationSetName_(this->coeffDict().lookup("inflationCellSet")),
+    generationCells_(),
+    inflationCells_(),
+    duration_(readScalar(this->coeffDict().lookup("duration"))),
+    flowRateProfile_
+    (
+        DataEntry<scalar>::New
+        (
+            "flowRateProfile",
+            this->coeffDict()
+        )
+    ),
+    growthRate_
+    (
+        DataEntry<scalar>::New
+        (
+            "growthRate",
+            this->coeffDict()
+        )
+    ),
+    newParticles_(),
+    volumeAccumulator_(0.0),
+    fraction_(1.0),
+    parcelPDF_
+    (
+        pdfs::pdf::New
+        (
+            this->coeffDict().subDict("parcelPDF"),
+            owner.rndGen()
+        )
+    )
+{
+    cellSet generationCells(this->owner().mesh(), generationSetName_);
+
+    generationCells_ = generationCells.toc();
+
+    cellSet inflationCells(this->owner().mesh(), inflationSetName_);
+
+    // Union of cellSets
+    inflationCells |= generationCells;
+
+    inflationCells_ = inflationCells.toc();
+
+    if (Pstream::parRun())
+    {
+        scalar generationVolume = 0.0;
+
+        forAll(generationCells_, gCI)
+        {
+            label cI = generationCells_[gCI];
+
+            generationVolume += this->owner().mesh().cellVolumes()[cI];
+        }
+
+        scalar totalGenerationVolume = generationVolume;
+
+        reduce(totalGenerationVolume, sumOp<scalar>());
+
+        fraction_ = generationVolume/totalGenerationVolume;
+    }
+
+    // Set total volume/mass to inject
+    this->volumeTotal_ = fraction_*flowRateProfile_().integrate(0.0, duration_);
+    this->massTotal_ *= fraction_;
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+template<class CloudType>
+Foam::InflationInjection<CloudType>::~InflationInjection()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+template<class CloudType>
+bool Foam::InflationInjection<CloudType>::active() const
+{
+    return true;
+}
+
+
+template<class CloudType>
+Foam::scalar Foam::InflationInjection<CloudType>::timeEnd() const
+{
+    return this->SOI_ + duration_;
+}
+
+
+template<class CloudType>
+void Foam::InflationInjection<CloudType>::setPositionAndCell
+(
+    const label parcelI,
+    const label,
+    const scalar,
+    vector& position,
+    label& cellOwner,
+    label& tetFaceI,
+    label& tetPtI
+)
+{
+    position = newParticles_[parcelI].first().first();
+
+    this->findCellAtPosition
+    (
+        cellOwner,
+        tetFaceI,
+        tetPtI,
+        position,
+        false
+    );
+}
+
+
+template<class CloudType>
+void Foam::InflationInjection<CloudType>::setProperties
+(
+    const label parcelI,
+    const label,
+    const scalar,
+    typename CloudType::parcelType& parcel
+)
+{
+    parcel.U() = newParticles_[parcelI].first().second();
+
+    parcel.d() = newParticles_[parcelI].second().first();
+
+    parcel.dTarget() = newParticles_[parcelI].second().second();
+}
+
+
+template<class CloudType>
+bool Foam::InflationInjection<CloudType>::fullyDescribed() const
+{
+    return false;
+}
+
+
+template<class CloudType>
+bool Foam::InflationInjection<CloudType>::validInjection(const label)
+{
+    return true;
+}
+
+
+// ************************************************************************* //
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InflationInjection/InflationInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InflationInjection/InflationInjection.H
new file mode 100644
index 0000000000000000000000000000000000000000..70724124300621dba60e09c7a256e1aec9567af2
--- /dev/null
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InflationInjection/InflationInjection.H
@@ -0,0 +1,200 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 1991-2010 OpenCFD Ltd.
+     \\/     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/>.
+
+Class
+    Foam::InflationInjection
+
+Description
+    Inflation injection - creates new particles by splitting existing
+    particles within in a set of generation cells, then inflating them
+    to a target diameter within the generation cells and an additional
+    set of inflation cells.
+
+SourceFiles
+    InflationInjection.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef InflationInjection_H
+#define InflationInjection_H
+
+#include "InjectionModel.H"
+#include "pdf.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// Structure to hold:
+// + position = vectorPairScalarPair::first().first()
+// + velocity = vectorPairScalarPair::first().second()
+// + diameter = vectorPairScalarPair::second().first()
+// + target diameter = vectorPairScalarPair::second().second()
+// One structure to allow single operation parallel comms
+typedef Tuple2<Pair<vector>, Pair<scalar> > vectorPairScalarPair;
+
+
+/*---------------------------------------------------------------------------*\
+                      Class InflationInjection Declaration
+\*---------------------------------------------------------------------------*/
+
+template<class CloudType>
+class InflationInjection
+:
+    public InjectionModel<CloudType>
+{
+    // Private data
+
+        //- Name of cellSet for generating new particles
+        word generationSetName_;
+
+        //- Name of cellSet for inflating new particles
+        word inflationSetName_;
+
+        //- Set of cells to generate particles in
+        labelList generationCells_;
+
+        //- Set of cells to inflate particles in, includes all
+        //  generation cells
+        labelList inflationCells_;
+
+        //- Injection duration [s]
+        const scalar duration_;
+
+        //- Flow rate profile relative to SOI [m3/s]
+        const autoPtr<DataEntry<scalar> > flowRateProfile_;
+
+        //- Growth rate of particle diameters towards target [m/s]
+        const autoPtr<DataEntry<scalar> > growthRate_;
+
+        //- Positions, velocities, diameters and target diameters of
+        //  new particles after splitting
+        DynamicList<vectorPairScalarPair> newParticles_;
+
+        //- Accumulation variable to carry over volume from one injection
+        //  to the next
+        scalar volumeAccumulator_;
+
+        //- Fraction of injection controlled by this processor
+        scalar fraction_;
+
+        //- Parcel size PDF model
+        const autoPtr<pdfs::pdf> parcelPDF_;
+
+
+protected:
+
+    // Protected Member Functions
+
+        //- Number of parcels to introduce over the time step relative to SOI
+        label parcelsToInject
+        (
+            const scalar time0,
+            const scalar time1
+        );
+
+        //- Volume of parcels to introduce over the time step relative to SOI
+        scalar volumeToInject
+        (
+            const scalar time0,
+            const scalar time1
+        );
+
+
+public:
+
+    //- Runtime type information
+    TypeName("InflationInjection");
+
+
+    // Constructors
+
+        //- Construct from dictionary
+        InflationInjection
+        (
+            const dictionary& dict,
+            CloudType& owner
+        );
+
+
+    //- Destructor
+    virtual ~InflationInjection();
+
+
+    // Member Functions
+
+        //- Flag to indicate whether model activates injection model
+        bool active() const;
+
+        //- Return the end-of-injection time
+        scalar timeEnd() const;
+
+
+        // Injection geometry
+
+            //- Set the injection position and owner cell, tetFace and tetPt
+            virtual void setPositionAndCell
+            (
+                const label parcelI,
+                const label nParcels,
+                const scalar time,
+                vector& position,
+                label& cellOwner,
+                label& tetFaceI,
+                label& tetPtI
+            );
+
+            //- Set the parcel properties
+            virtual void setProperties
+            (
+                const label parcelI,
+                const label nParcels,
+                const scalar time,
+                typename CloudType::parcelType& parcel
+            );
+
+            //- Flag to identify whether model fully describes the parcel
+            virtual bool fullyDescribed() const;
+
+            //- Return flag to identify whether or not injection of parcelI is
+            //  permitted
+            virtual bool validInjection(const label parcelI);
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+#   include "InflationInjection.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C
index 9136baa60791c7a5628fe570b7eb02a4209d3d0f..5a386e4397e10a863a17b2aae75bb9f8aee9dcfd 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C
@@ -159,6 +159,8 @@ bool Foam::InjectionModel<CloudType>::findCellAtPosition
 
     reduce(procI, maxOp<label>());
 
+    // Ensure that only one processor attempts to insert this Parcel
+
     if (procI != Pstream::myProcNo())
     {
         cellI = -1;
@@ -166,11 +168,12 @@ bool Foam::InjectionModel<CloudType>::findCellAtPosition
         tetPtI = -1;
     }
 
-    // Last chance - find nearest cell and try that one
-    // - the point is probably on an edge
+    // Last chance - find nearest cell and try that one - the point is
+    // probably on an edge
     if (procI == -1)
     {
         cellI = owner_.mesh().findNearestCell(position);
+
         if (cellI >= 0)
         {
             position += SMALL*(cellCentres[cellI] - position);
@@ -428,14 +431,15 @@ void Foam::InjectionModel<CloudType>::inject(TrackData& td)
     const scalar padTime = max(0.0, SOI_ - time0_);
 
     // Introduce new parcels linearly across carrier phase timestep
-    for (label parcelI=0; parcelI<newParcels; parcelI++)
+    for (label parcelI = 0; parcelI < newParcels; parcelI++)
     {
         if (validInjection(parcelI))
         {
             // Calculate the pseudo time of injection for parcel 'parcelI'
             scalar timeInj = time0_ + padTime + deltaT*parcelI/newParcels;
 
-            // Determine the injection position and owner cell
+            // Determine the injection position and owner cell,
+            // tetFace and tetPt
             label cellI = -1;
             label tetFaceI = -1;
             label tetPtI = -1;
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H
index 542e038b4acf75525678dcddcd33c55dcfe34287..5b225c0781487a7b805a9912ef0d07ac759faf82 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H
@@ -156,14 +156,14 @@ protected:
         (
             const scalar time0,
             const scalar time1
-        ) const = 0;
+        ) = 0;
 
         //- Volume of parcels to introduce over the time step relative to SOI
         virtual scalar volumeToInject
         (
             const scalar time0,
             const scalar time1
-        ) const = 0;
+        ) = 0;
 
         //- Additional flag to identify whether or not injection of parcelI is
         //  permitted
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/KinematicLookupTableInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/KinematicLookupTableInjection.C
index 45fd5b0df6ac76df37bb87e4be43299216dcf43b..b87449f225d352beac22560726458b11baaec702 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/KinematicLookupTableInjection.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/KinematicLookupTableInjection.C
@@ -33,7 +33,7 @@ Foam::label Foam::KinematicLookupTableInjection<CloudType>::parcelsToInject
 (
     const scalar time0,
     const scalar time1
-) const
+)
 {
     if ((time0 >= 0.0) && (time0 < duration_))
     {
@@ -51,7 +51,7 @@ Foam::scalar Foam::KinematicLookupTableInjection<CloudType>::volumeToInject
 (
     const scalar time0,
     const scalar time1
-) const
+)
 {
     scalar volume = 0.0;
     if ((time0 >= 0.0) && (time0 < duration_))
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/KinematicLookupTableInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/KinematicLookupTableInjection.H
index 1692c92a0f0c7933b149348a8b94397910636a8c..ff840187f26d126f3989820ec5ce7043162ad7e0 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/KinematicLookupTableInjection.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/KinematicLookupTableInjection.H
@@ -100,14 +100,14 @@ protected:
         (
             const scalar time0,
             const scalar time1
-        ) const;
+        );
 
         //- Volume of parcels to introduce over the time step relative to SOI
         scalar volumeToInject
         (
             const scalar time0,
             const scalar time1
-        ) const;
+        );
 
 
 public:
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C
index b7e3c7022746520235a7b9df4ff276796704d958..48b156d1e2e8b70014adf7020e199d17c2567ae3 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C
@@ -37,7 +37,7 @@ Foam::label Foam::ManualInjection<CloudType>::parcelsToInject
 (
     const scalar time0,
     const scalar time1
-) const
+)
 {
     if ((0.0 >= time0) && (0.0 < time1))
     {
@@ -55,7 +55,7 @@ Foam::scalar Foam::ManualInjection<CloudType>::volumeToInject
 (
     const scalar time0,
     const scalar time1
-) const
+)
 {
     // All parcels introduced at SOI
     if ((0.0 >= time0) && (0.0 < time1))
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H
index a001f940534ff314a7f43b9142722f08ea9f6566..b4feea97441a0f974912e146914dc93ac1df3391 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H
@@ -95,14 +95,14 @@ protected:
         (
             const scalar time0,
             const scalar time1
-        ) const;
+        );
 
         //- Volume of parcels to introduce over the time step relative to SOI
         scalar volumeToInject
         (
             const scalar time0,
             const scalar time1
-        ) const;
+        );
 
 
 public:
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.C
index 6303a8f30fa623147e054133695e4f582809d51f..8391c3654b633b2b1ca6d56ae89f92aa7becda0a 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.C
@@ -33,7 +33,7 @@ Foam::label Foam::NoInjection<CloudType>::parcelsToInject
 (
     const scalar,
     const scalar
-) const
+)
 {
     return 0;
 }
@@ -44,7 +44,7 @@ Foam::scalar Foam::NoInjection<CloudType>::volumeToInject
 (
     const scalar,
     const scalar
-) const
+)
 {
     return 0.0;
 }
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.H
index d5026cc75d405ad277100a5de8220119f00fb98f..c16a9367785ff5abfb735682fc5cdec156c30beb 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.H
@@ -60,14 +60,14 @@ protected:
         (
             const scalar,
             const scalar
-        ) const;
+        );
 
         //- Volume of parcels to introduce over the time step relative to SOI
         scalar volumeToInject
         (
             const scalar,
             const scalar
-        ) const;
+        );
 
 
 public:
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.C
index 8c50cec0e095ca54f843397c207f742c8f29133c..088546930733dbc406830eb839272e56fd7a99c0 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.C
@@ -34,7 +34,7 @@ Foam::label Foam::PatchInjection<CloudType>::parcelsToInject
 (
     const scalar time0,
     const scalar time1
-) const
+)
 {
     if ((time0 >= 0.0) && (time0 < duration_))
     {
@@ -52,7 +52,7 @@ Foam::scalar Foam::PatchInjection<CloudType>::volumeToInject
 (
     const scalar time0,
     const scalar time1
-) const
+)
 {
     if ((time0 >= 0.0) && (time0 < duration_))
     {
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.H
index ee6a5edeb0a19095a37b194a66ce86c0ee0861ed..85dbb2fcb63b11e7d8bb08067e0ae8f88af2439a 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.H
@@ -101,14 +101,14 @@ protected:
         (
             const scalar time0,
             const scalar time1
-        ) const;
+        );
 
         //- Volume of parcels to introduce over the time step relative to SOI
         scalar volumeToInject
         (
             const scalar time0,
             const scalar time1
-        ) const;
+        );
 
 
 public:
diff --git a/src/lagrangian/intermediate/submodels/Reacting/InjectionModel/ReactingLookupTableInjection/ReactingLookupTableInjection.C b/src/lagrangian/intermediate/submodels/Reacting/InjectionModel/ReactingLookupTableInjection/ReactingLookupTableInjection.C
index 8ba48ca48d0752f6d06222533688acf503f6e10b..5c4b49370b1a5ec6a610120cab03006e107856ce 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/InjectionModel/ReactingLookupTableInjection/ReactingLookupTableInjection.C
+++ b/src/lagrangian/intermediate/submodels/Reacting/InjectionModel/ReactingLookupTableInjection/ReactingLookupTableInjection.C
@@ -32,7 +32,7 @@ Foam::label Foam::ReactingLookupTableInjection<CloudType>::parcelsToInject
 (
     const scalar time0,
     const scalar time1
-) const
+)
 {
     if ((time0 >= 0.0) && (time0 < duration_))
     {
@@ -50,7 +50,7 @@ Foam::scalar Foam::ReactingLookupTableInjection<CloudType>::volumeToInject
 (
     const scalar time0,
     const scalar time1
-) const
+)
 {
     scalar volume = 0.0;
     if ((time0 >= 0.0) && (time0 < duration_))
diff --git a/src/lagrangian/intermediate/submodels/Reacting/InjectionModel/ReactingLookupTableInjection/ReactingLookupTableInjection.H b/src/lagrangian/intermediate/submodels/Reacting/InjectionModel/ReactingLookupTableInjection/ReactingLookupTableInjection.H
index 88bb33005f2f6f244b657fe6632ef687fa32553b..e13169a5b75318ffe4b33d06e12dec1d9ccfde53 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/InjectionModel/ReactingLookupTableInjection/ReactingLookupTableInjection.H
+++ b/src/lagrangian/intermediate/submodels/Reacting/InjectionModel/ReactingLookupTableInjection/ReactingLookupTableInjection.H
@@ -103,14 +103,14 @@ protected:
         (
             const scalar time0,
             const scalar time1
-        ) const;
+        );
 
         //- Volume of parcels to introduce over the time step relative to SOI
         scalar volumeToInject
         (
             const scalar time0,
             const scalar time1
-        ) const;
+        );
 
 
 public:
diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/InjectionModel/ReactingMultiphaseLookupTableInjection/ReactingMultiphaseLookupTableInjection.C b/src/lagrangian/intermediate/submodels/ReactingMultiphase/InjectionModel/ReactingMultiphaseLookupTableInjection/ReactingMultiphaseLookupTableInjection.C
index a97ab2d4d89a4f32c115019d2b872359f322d882..1178b5cc33f05394a18a0cbc59a346fd19d86a5f 100644
--- a/src/lagrangian/intermediate/submodels/ReactingMultiphase/InjectionModel/ReactingMultiphaseLookupTableInjection/ReactingMultiphaseLookupTableInjection.C
+++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/InjectionModel/ReactingMultiphaseLookupTableInjection/ReactingMultiphaseLookupTableInjection.C
@@ -33,7 +33,7 @@ Foam::ReactingMultiphaseLookupTableInjection<CloudType>::parcelsToInject
 (
     const scalar time0,
     const scalar time1
-) const
+)
 {
     if ((time0 >= 0.0) && (time0 < duration_))
     {
@@ -52,7 +52,7 @@ Foam::ReactingMultiphaseLookupTableInjection<CloudType>::volumeToInject
 (
     const scalar time0,
     const scalar time1
-) const
+)
 {
     scalar volume = 0.0;
     if ((time0 >= 0.0) && (time0 < duration_))
diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/InjectionModel/ReactingMultiphaseLookupTableInjection/ReactingMultiphaseLookupTableInjection.H b/src/lagrangian/intermediate/submodels/ReactingMultiphase/InjectionModel/ReactingMultiphaseLookupTableInjection/ReactingMultiphaseLookupTableInjection.H
index 289f664550e1b9321e386d1f8582af5e8d7741ca..5b0ecae379350a54a13a1dcb58dc70337830674b 100644
--- a/src/lagrangian/intermediate/submodels/ReactingMultiphase/InjectionModel/ReactingMultiphaseLookupTableInjection/ReactingMultiphaseLookupTableInjection.H
+++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/InjectionModel/ReactingMultiphaseLookupTableInjection/ReactingMultiphaseLookupTableInjection.H
@@ -106,14 +106,14 @@ protected:
         (
             const scalar time0,
             const scalar time1
-        ) const;
+        );
 
         //- Volume of parcels to introduce over the time step relative to SOI
         scalar volumeToInject
         (
             const scalar time0,
             const scalar time1
-        ) const;
+        );
 
 
 public:
diff --git a/src/lagrangian/intermediate/submodels/Thermodynamic/InjectionModel/ThermoLookupTableInjection/ThermoLookupTableInjection.C b/src/lagrangian/intermediate/submodels/Thermodynamic/InjectionModel/ThermoLookupTableInjection/ThermoLookupTableInjection.C
index 6138a8a5f544b8ffbd8be8785a85d1996089bdbf..6d7c9aef2cbc416a824da9e538e6a6dc5258f570 100644
--- a/src/lagrangian/intermediate/submodels/Thermodynamic/InjectionModel/ThermoLookupTableInjection/ThermoLookupTableInjection.C
+++ b/src/lagrangian/intermediate/submodels/Thermodynamic/InjectionModel/ThermoLookupTableInjection/ThermoLookupTableInjection.C
@@ -33,7 +33,7 @@ Foam::label Foam::ThermoLookupTableInjection<CloudType>::parcelsToInject
 (
     const scalar time0,
     const scalar time1
-) const
+)
 {
     if ((time0 >= 0.0) && (time0 < duration_))
     {
@@ -51,7 +51,7 @@ Foam::scalar Foam::ThermoLookupTableInjection<CloudType>::volumeToInject
 (
     const scalar time0,
     const scalar time1
-) const
+)
 {
     scalar volume = 0.0;
     if ((time0 >= 0.0) && (time0 < duration_))
diff --git a/src/lagrangian/intermediate/submodels/Thermodynamic/InjectionModel/ThermoLookupTableInjection/ThermoLookupTableInjection.H b/src/lagrangian/intermediate/submodels/Thermodynamic/InjectionModel/ThermoLookupTableInjection/ThermoLookupTableInjection.H
index c66f0778f649c039f67603f7466e082402dc0e52..4fd93884b46fa6ea5afdbc9b0b4be8cc239be36f 100644
--- a/src/lagrangian/intermediate/submodels/Thermodynamic/InjectionModel/ThermoLookupTableInjection/ThermoLookupTableInjection.H
+++ b/src/lagrangian/intermediate/submodels/Thermodynamic/InjectionModel/ThermoLookupTableInjection/ThermoLookupTableInjection.H
@@ -102,14 +102,14 @@ protected:
         (
             const scalar time0,
             const scalar time1
-        ) const;
+        );
 
         //- Volume of parcels to introduce over the time step relative to SOI
         scalar volumeToInject
         (
             const scalar time0,
             const scalar time1
-        ) const;
+        );
 
 
 public: