From 600d8dca274284085a218ac5bbe84a868d441981 Mon Sep 17 00:00:00 2001
From: Henry <Henry>
Date: Fri, 6 Mar 2015 18:14:18 +0000
Subject: [PATCH] lagrangian: Replace dummy "notImplemented" functions with
 abstract functions making base classes abstract Make clone functions const
 and abstract in abstract base classes Change copy constructors to take const
 argument Make private data mutable where necessary

---
 .../DispersionRASModel/DispersionRASModel.C   |   2 +-
 .../DispersionRASModel/DispersionRASModel.H   |  10 +-
 .../GradientDispersionRAS.C                   |   4 +-
 .../GradientDispersionRAS.H                   |   6 +-
 .../StochasticDispersionRAS.C                 |   4 +-
 .../StochasticDispersionRAS.H                 |   6 +-
 .../distributionModel/distributionModel.C     |  49 +------
 .../distributionModel/distributionModel.H     |  15 +--
 .../IntegrationScheme/IntegrationScheme.C     |  34 +----
 .../IntegrationScheme/IntegrationScheme.H     |  12 +-
 .../CollisionModel/CollisionModel.C           |  37 +----
 .../CollisionModel/CollisionModel.H           |  16 +--
 .../CollisionModel/NoCollision/NoCollision.C  |   4 +-
 .../CollisionModel/NoCollision/NoCollision.H  |   6 +-
 .../PairCollision/PairCollision.C             |   8 +-
 .../PairCollision/PairCollision.H             |   6 +-
 .../DispersionModel/DispersionModel.C         |  34 +----
 .../DispersionModel/DispersionModel.H         |  12 +-
 .../NoDispersion/NoDispersion.C               |   4 +-
 .../NoDispersion/NoDispersion.H               |   6 +-
 .../InjectionModel/InjectionModel.C           | 126 ------------------
 .../InjectionModel/InjectionModel.H           |  22 ++-
 .../kinematicParcelInjectionData.H            |  97 +++++++-------
 .../StochasticCollisionModel.C                |  14 +-
 .../StochasticCollisionModel.H                |  10 +-
 .../SurfaceFilmModel/SurfaceFilmModel.C       |  24 +---
 .../SurfaceFilmModel/SurfaceFilmModel.H       |  10 +-
 .../CompositionModel/CompositionModel.C       |  49 -------
 .../CompositionModel/CompositionModel.H       |  16 +--
 .../NoComposition/NoComposition.C             |  33 ++++-
 .../NoComposition/NoComposition.H             |  25 +++-
 .../SingleMixtureFraction.C                   |  27 +---
 .../SingleMixtureFraction.H                   |  29 +---
 .../SinglePhaseMixture/SinglePhaseMixture.C   |  42 +-----
 .../SinglePhaseMixture/SinglePhaseMixture.H   |  29 +---
 .../reactingParcelInjectionData.H             |  66 ++-------
 .../DevolatilisationModel.C                   |  36 +----
 .../DevolatilisationModel.H                   |  10 +-
 .../NoDevolatilisation/NoDevolatilisation.C   |   4 +-
 .../NoDevolatilisation/NoDevolatilisation.H   |   4 +-
 .../reactingMultiphaseParcelInjectionData.H   |  66 ++-------
 .../SurfaceReactionModel.C                    |  53 +-------
 .../SurfaceReactionModel.H                    |  10 +-
 .../HeatTransferModel/HeatTransferModel.C     |  24 +---
 .../HeatTransferModel/HeatTransferModel.H     |  10 +-
 .../thermoParcelInjectionData.H               |  66 ++-------
 .../ThermoSurfaceFilm/ThermoSurfaceFilm.H     |   4 +-
 .../AtomizationModel/AtomizationModel.C       |  69 +---------
 .../AtomizationModel/AtomizationModel.H       |  18 +--
 .../BreakupModel/BreakupModel/BreakupModel.C  |  62 +--------
 .../BreakupModel/BreakupModel/BreakupModel.H  |  10 +-
 .../DispersionRASModel/DispersionRASModel.C   |   2 +-
 .../DispersionRASModel/DispersionRASModel.H   |  27 ++--
 .../GradientDispersionRAS.C                   |   4 +-
 .../GradientDispersionRAS.H                   |   8 +-
 .../StochasticDispersionRAS.C                 |   4 +-
 .../StochasticDispersionRAS.H                 |   6 +-
 57 files changed, 284 insertions(+), 1107 deletions(-)

diff --git a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C
index 80aa0221310..a5f090cc154 100644
--- a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C
+++ b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C
@@ -117,7 +117,7 @@ Foam::DispersionRASModel<CloudType>::DispersionRASModel
 template<class CloudType>
 Foam::DispersionRASModel<CloudType>::DispersionRASModel
 (
-    DispersionRASModel<CloudType>& dm
+    const DispersionRASModel<CloudType>& dm
 )
 :
     DispersionModel<CloudType>(dm),
diff --git a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H
index 8496766376c..a80775549a9 100644
--- a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H
+++ b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -59,13 +59,13 @@ protected:
             const volScalarField* kPtr_;
 
             //- Take ownership of the k field
-            bool ownK_;
+            mutable bool ownK_;
 
             //- Turbulence epsilon
             const volScalarField* epsilonPtr_;
 
             //- Take ownership of the epsilon field
-            bool ownEpsilon_;
+            mutable bool ownEpsilon_;
 
 
     // Protected Functions
@@ -89,10 +89,10 @@ public:
         DispersionRASModel(const dictionary& dict, CloudType& owner);
 
         //- Construct copy
-        DispersionRASModel(DispersionRASModel<CloudType>& dm);
+        DispersionRASModel(const DispersionRASModel<CloudType>& dm);
 
         //- Construct and return a clone
-        virtual autoPtr<DispersionModel<CloudType> > clone()
+        virtual autoPtr<DispersionModel<CloudType> > clone() const
         {
             return autoPtr<DispersionModel<CloudType> >
             (
diff --git a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C
index 06fa810ac99..1b7b3c19511 100644
--- a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C
+++ b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -45,7 +45,7 @@ Foam::GradientDispersionRAS<CloudType>::GradientDispersionRAS
 template<class CloudType>
 Foam::GradientDispersionRAS<CloudType>::GradientDispersionRAS
 (
-    GradientDispersionRAS<CloudType>& dm
+    const GradientDispersionRAS<CloudType>& dm
 )
 :
     DispersionRASModel<CloudType>(dm),
diff --git a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H
index b9ccfac5190..829c8fcfd3d 100644
--- a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H
+++ b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -75,10 +75,10 @@ public:
         GradientDispersionRAS(const dictionary& dict, CloudType& owner);
 
         //- Construct copy
-        GradientDispersionRAS(GradientDispersionRAS<CloudType>& dm);
+        GradientDispersionRAS(const GradientDispersionRAS<CloudType>& dm);
 
         //- Construct and return a clone
-        virtual autoPtr<DispersionModel<CloudType> > clone()
+        virtual autoPtr<DispersionModel<CloudType> > clone() const
         {
             return autoPtr<DispersionModel<CloudType> >
             (
diff --git a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C
index badebbc110d..e5586285053 100644
--- a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C
+++ b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -41,7 +41,7 @@ Foam::StochasticDispersionRAS<CloudType>::StochasticDispersionRAS
 template<class CloudType>
 Foam::StochasticDispersionRAS<CloudType>::StochasticDispersionRAS
 (
-    StochasticDispersionRAS<CloudType>& dm
+    const StochasticDispersionRAS<CloudType>& dm
 )
 :
     DispersionRASModel<CloudType>(dm)
diff --git a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H
index d1c87d0485a..fe6acc7ae00 100644
--- a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H
+++ b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -62,10 +62,10 @@ public:
         StochasticDispersionRAS(const dictionary& dict, CloudType& owner);
 
         //- Construct copy
-        StochasticDispersionRAS(StochasticDispersionRAS<CloudType>& dm);
+        StochasticDispersionRAS(const StochasticDispersionRAS<CloudType>& dm);
 
         //- Construct and return a clone
-        virtual autoPtr<DispersionModel<CloudType> > clone()
+        virtual autoPtr<DispersionModel<CloudType> > clone() const
         {
             return autoPtr<DispersionModel<CloudType> >
             (
diff --git a/src/lagrangian/distributionModels/distributionModel/distributionModel.C b/src/lagrangian/distributionModels/distributionModel/distributionModel.C
index 83772fc77bd..c04856d3aed 100644
--- a/src/lagrangian/distributionModels/distributionModel/distributionModel.C
+++ b/src/lagrangian/distributionModels/distributionModel/distributionModel.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -36,6 +36,7 @@ namespace Foam
     }
 }
 
+
 // * * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * //
 
 void Foam::distributionModels::distributionModel::check() const
@@ -89,50 +90,4 @@ Foam::distributionModels::distributionModel::~distributionModel()
 {}
 
 
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-Foam::scalar Foam::distributionModels::distributionModel::sample() const
-{
-    notImplemented
-    (
-        "Foam::scalar "
-        "Foam::distributionModels::distributionModel::sample() const"
-    );
-    return 0.0;
-}
-
-
-Foam::scalar Foam::distributionModels::distributionModel::minValue() const
-{
-    notImplemented
-    (
-        "Foam::scalar "
-        "Foam::distributionModels::distributionModel::minValue() const"
-    );
-    return 0.0;
-}
-
-
-Foam::scalar Foam::distributionModels::distributionModel::maxValue() const
-{
-    notImplemented
-    (
-        "Foam::scalar "
-        "Foam::distributionModels::distributionModel::maxValue() const"
-    );
-    return 0.0;
-}
-
-
-Foam::scalar Foam::distributionModels::distributionModel::meanValue() const
-{
-    notImplemented
-    (
-        "Foam::scalar "
-        "Foam::distributionModels::distributionModel::meanValue() const"
-    );
-    return 0.0;
-}
-
-
 // ************************************************************************* //
diff --git a/src/lagrangian/distributionModels/distributionModel/distributionModel.H b/src/lagrangian/distributionModels/distributionModel/distributionModel.H
index efc7f2b1add..fe5e8765449 100644
--- a/src/lagrangian/distributionModels/distributionModel/distributionModel.H
+++ b/src/lagrangian/distributionModels/distributionModel/distributionModel.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -121,10 +121,7 @@ public:
         distributionModel(const distributionModel& p);
 
         //- Construct and return a clone
-        virtual autoPtr<distributionModel> clone() const
-        {
-            return autoPtr<distributionModel>(new distributionModel(*this));
-        }
+        virtual autoPtr<distributionModel> clone() const = 0;
 
 
     //- Selector
@@ -142,16 +139,16 @@ public:
     // Member Functions
 
         //- Sample the distributionModel
-        virtual scalar sample() const;
+        virtual scalar sample() const = 0;
 
         //- Return the minimum value
-        virtual scalar minValue() const;
+        virtual scalar minValue() const = 0;
 
         //- Return the maximum value
-        virtual scalar maxValue() const;
+        virtual scalar maxValue() const = 0;
 
         //- Return the maximum value
-        virtual scalar meanValue() const;
+        virtual scalar meanValue() const = 0;
 };
 
 
diff --git a/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.C b/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.C
index 1fa257a56f4..50d05a2ee31 100644
--- a/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.C
+++ b/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -54,38 +54,6 @@ Foam::IntegrationScheme<Type>::~IntegrationScheme()
 {}
 
 
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-template<class Type>
-typename Foam::IntegrationScheme<Type>::integrationResult
-Foam::IntegrationScheme<Type>::integrate
-(
-    const Type& phi,
-    const scalar dt,
-    const Type& alphaBeta,
-    const scalar beta
-) const
-{
-    notImplemented
-    (
-        "Foam::IntegrationScheme<Type>::integrationResult"
-        "Foam::IntegrationScheme<Type>::integrate"
-        "("
-            "const Type&, "
-            "const scalar, "
-            "const Type&, "
-            "const scalar"
-        ") const"
-    );
-
-    typename IntegrationScheme<Type>::integrationResult retValue;
-    retValue.average() = pTraits<Type>::zero;
-    retValue.value() = pTraits<Type>::zero;
-
-    return retValue;
-}
-
-
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 #include "IntegrationSchemeNew.C"
diff --git a/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.H b/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.H
index 068f7e8c861..836371dcdda 100644
--- a/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.H
+++ b/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -154,13 +154,7 @@ public:
         IntegrationScheme(const IntegrationScheme& is);
 
         //- Construct and return clone
-        virtual autoPtr<IntegrationScheme<Type> > clone() const
-        {
-            return autoPtr<IntegrationScheme<Type> >
-            (
-                new IntegrationScheme<Type>(*this)
-            );
-        }
+        virtual autoPtr<IntegrationScheme<Type> > clone() const = 0;
 
 
     // Selectors
@@ -186,7 +180,7 @@ public:
             const scalar dt,
             const Type& alphaBeta,
             const scalar beta
-        ) const;
+        ) const = 0;
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/CollisionModel/CollisionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/CollisionModel/CollisionModel.C
index 865f359cf43..1294e352358 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/CollisionModel/CollisionModel.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/CollisionModel/CollisionModel.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -47,7 +47,10 @@ Foam::CollisionModel<CloudType>::CollisionModel
 
 
 template<class CloudType>
-Foam::CollisionModel<CloudType>::CollisionModel(CollisionModel<CloudType>& cm)
+Foam::CollisionModel<CloudType>::CollisionModel
+(
+    const CollisionModel<CloudType>& cm
+)
 :
     CloudSubModelBase<CloudType>(cm)
 {}
@@ -60,36 +63,6 @@ Foam::CollisionModel<CloudType>::~CollisionModel()
 {}
 
 
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-template<class CloudType>
-Foam::label Foam::CollisionModel<CloudType>::nSubCycles() const
-{
-    notImplemented
-    (
-        "Foam::label Foam::CollisionModel<CloudType>::nSubCycles() const"
-    );
-    return 0;
-}
-
-
-template<class CloudType>
-bool Foam::CollisionModel<CloudType>::controlsWallInteraction() const
-{
-    notImplemented
-    (
-        "bool Foam::CollisionModel<CloudType>::controlsWallInteraction()"
-    );
-    return false;
-}
-
-template<class CloudType>
-void Foam::CollisionModel<CloudType>::collide()
-{
-    notImplemented("void Foam::CollisionModel<CloudType>::collide()");
-}
-
-
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 #include "CollisionModelNew.C"
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/CollisionModel/CollisionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/CollisionModel/CollisionModel.H
index ff92ce44c87..9134745f62c 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/CollisionModel/CollisionModel.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/CollisionModel/CollisionModel.H
@@ -94,16 +94,10 @@ public:
         );
 
         //- Construct copy
-        CollisionModel(CollisionModel<CloudType>& cm);
+        CollisionModel(const CollisionModel<CloudType>& cm);
 
         //- Construct and return a clone
-        virtual autoPtr<CollisionModel<CloudType> > clone()
-        {
-            return autoPtr<CollisionModel<CloudType> >
-            (
-                new CollisionModel<CloudType>(*this)
-            );
-        }
+        virtual autoPtr<CollisionModel<CloudType> > clone() const = 0;
 
 
     //- Destructor
@@ -122,14 +116,14 @@ public:
 
         //- Return the number of times to subcycle the current
         //  timestep to meet the criteria of the collision model
-        virtual label nSubCycles() const;
+        virtual label nSubCycles() const = 0;
 
         //- Indicates whether model determines wall collisions or not,
         //  used to determine what value to use for wallImpactDistance
-        virtual bool controlsWallInteraction() const;
+        virtual bool controlsWallInteraction() const = 0;
 
         // Collision function
-        virtual void collide();
+        virtual void collide() = 0;
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/NoCollision/NoCollision.C b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/NoCollision/NoCollision.C
index 48f213e0052..98ba1969572 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/NoCollision/NoCollision.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/NoCollision/NoCollision.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -41,7 +41,7 @@ Foam::NoCollision<CloudType>::NoCollision
 template<class CloudType>
 Foam::NoCollision<CloudType>::NoCollision
 (
-    NoCollision<CloudType>& cm
+    const NoCollision<CloudType>& cm
 )
 :
     CollisionModel<CloudType>(cm)
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/NoCollision/NoCollision.H b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/NoCollision/NoCollision.H
index b31c4b9f606..95b029f6d8e 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/NoCollision/NoCollision.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/NoCollision/NoCollision.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -64,10 +64,10 @@ public:
         NoCollision(const dictionary& dict, CloudType& owner);
 
         //- Construct copy
-        NoCollision(NoCollision<CloudType>& cm);
+        NoCollision(const NoCollision<CloudType>& cm);
 
         //- Construct and return a clone
-        virtual autoPtr<CollisionModel<CloudType> > clone()
+        virtual autoPtr<CollisionModel<CloudType> > clone() const
         {
             return autoPtr<CollisionModel<CloudType> >
             (
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.C b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.C
index 47c952db9e4..9a5e1994166 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -597,13 +597,17 @@ Foam::PairCollision<CloudType>::PairCollision
 
 
 template<class CloudType>
-Foam::PairCollision<CloudType>::PairCollision(PairCollision<CloudType>& cm)
+Foam::PairCollision<CloudType>::PairCollision
+(
+    const PairCollision<CloudType>& cm
+)
 :
     CollisionModel<CloudType>(cm),
     pairModel_(NULL),
     wallModel_(NULL),
     il_(cm.owner().mesh())
 {
+    // Need to clone to PairModel and WallModel
     notImplemented
     (
         "Foam::PairCollision<CloudType>::PairCollision"
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.H b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.H
index 638619c58af..d17e0af9c71 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -151,10 +151,10 @@ public:
         PairCollision(const dictionary& dict, CloudType& owner);
 
         //- Construct copy
-        PairCollision(PairCollision<CloudType>& cm);
+        PairCollision(const PairCollision<CloudType>& cm);
 
         //- Construct and return a clone
-        virtual autoPtr<CollisionModel<CloudType> > clone()
+        virtual autoPtr<CollisionModel<CloudType> > clone() const
         {
             return autoPtr<CollisionModel<CloudType> >
             (
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.C
index 3f6288aa186..64508504a26 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -49,7 +49,7 @@ Foam::DispersionModel<CloudType>::DispersionModel
 template<class CloudType>
 Foam::DispersionModel<CloudType>::DispersionModel
 (
-    DispersionModel<CloudType>& dm
+    const DispersionModel<CloudType>& dm
 )
 :
     CloudSubModelBase<CloudType>(dm)
@@ -63,36 +63,6 @@ Foam::DispersionModel<CloudType>::~DispersionModel()
 {}
 
 
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-template<class CloudType>
-Foam::vector Foam::DispersionModel<CloudType>::update
-(
-    const scalar,
-    const label,
-    const vector&,
-    const vector& Uc,
-    vector&,
-    scalar&
-)
-{
-    notImplemented
-    (
-        "Foam::vector Foam::DispersionModel<CloudType>::update"
-        "("
-            "const scalar, "
-            "const label, "
-            "const vector&, "
-            "const vector&, "
-            "vector&, "
-            "scalar&"
-        ")"
-    );
-
-    return Uc;
-}
-
-
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 #include "DispersionModelNew.C"
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.H
index 7e85e0eb26e..1af0caeb511 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.H
@@ -85,16 +85,10 @@ public:
         );
 
         //- Construct copy
-        DispersionModel(DispersionModel<CloudType>& dm);
+        DispersionModel(const DispersionModel<CloudType>& dm);
 
         //- Construct and return a clone
-        virtual autoPtr<DispersionModel<CloudType> > clone()
-        {
-            return autoPtr<DispersionModel<CloudType> >
-            (
-                new DispersionModel<CloudType>(*this)
-            );
-        }
+        virtual autoPtr<DispersionModel<CloudType> > clone() const = 0;
 
 
     //- Destructor
@@ -120,7 +114,7 @@ public:
             const vector& Uc,
             vector& UTurb,
             scalar& tTurb
-        );
+        ) = 0;
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.C b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.C
index 49e4ab25fcd..eec313925fb 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -35,7 +35,7 @@ Foam::NoDispersion<CloudType>::NoDispersion(const dictionary&, CloudType& owner)
 
 
 template<class CloudType>
-Foam::NoDispersion<CloudType>::NoDispersion(NoDispersion<CloudType>& dm)
+Foam::NoDispersion<CloudType>::NoDispersion(const NoDispersion<CloudType>& dm)
 :
     DispersionModel<CloudType>(dm.owner_)
 {}
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.H b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.H
index bb879e1afec..887c1b02f96 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -60,10 +60,10 @@ public:
         NoDispersion(const dictionary& dict, CloudType& owner);
 
         //- Construct copy
-        NoDispersion(NoDispersion<CloudType>& dm);
+        NoDispersion(const NoDispersion<CloudType>& dm);
 
         //- Construct and return a clone
-        virtual autoPtr<DispersionModel<CloudType> > clone()
+        virtual autoPtr<DispersionModel<CloudType> > clone() const
         {
             return autoPtr<DispersionModel<CloudType> >
             (
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C
index ef82846c8b1..5be9e15ebfd 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C
@@ -32,18 +32,6 @@ using namespace Foam::constant::mathematical;
 
 // * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * * * //
 
-template<class CloudType>
-bool Foam::InjectionModel<CloudType>::validInjection(const label parcelI)
-{
-    notImplemented
-    (
-        "bool Foam::InjectionModel<CloudType>::validInjection(const label)"
-    );
-
-    return false;
-}
-
-
 template<class CloudType>
 bool Foam::InjectionModel<CloudType>::prepareForNextTimeStep
 (
@@ -419,58 +407,6 @@ void Foam::InjectionModel<CloudType>::updateMesh()
 }
 
 
-template<class CloudType>
-Foam::scalar Foam::InjectionModel<CloudType>::timeEnd() const
-{
-    notImplemented
-    (
-        "Foam::scalar Foam::InjectionModel<CloudType>::timeEnd() const"
-    );
-
-    return 0.0;
-}
-
-
-template<class CloudType>
-Foam::label Foam::InjectionModel<CloudType>::parcelsToInject
-(
-    const scalar time0,
-    const scalar time1
-)
-{
-    notImplemented
-    (
-        "Foam::label Foam::InjectionModel<CloudType>::parcelsToInject"
-        "("
-            "const scalar, "
-            "const scalar"
-        ")"
-    );
-
-    return 0;
-}
-
-
-template<class CloudType>
-Foam::scalar Foam::InjectionModel<CloudType>::volumeToInject
-(
-    const scalar time0,
-    const scalar time1
-)
-{
-    notImplemented
-    (
-        "Foam::scalar Foam::InjectionModel<CloudType>::volumeToInject"
-        "("
-            "const scalar, "
-            "const scalar"
-        ")"
-    );
-
-    return 0.0;
-}
-
-
 template<class CloudType>
 Foam::scalar Foam::InjectionModel<CloudType>::averageParcelMass()
 {
@@ -710,68 +646,6 @@ void Foam::InjectionModel<CloudType>::injectSteadyState
 }
 
 
-template<class CloudType>
-void Foam::InjectionModel<CloudType>::setPositionAndCell
-(
-    const label parcelI,
-    const label nParcels,
-    const scalar time,
-    vector& position,
-    label& cellOwner,
-    label& tetFaceI,
-    label& tetPtI
-)
-{
-    notImplemented
-    (
-        "void Foam::InjectionModel<CloudType>::setPositionAndCell"
-        "("
-            "const label, "
-            "const label, "
-            "const scalar, "
-            "vector&, "
-            "label&, "
-            "label&, "
-            "label&"
-        ")"
-    );
-}
-
-
-template<class CloudType>
-void Foam::InjectionModel<CloudType>::setProperties
-(
-    const label parcelI,
-    const label nParcels,
-    const scalar time,
-    typename CloudType::parcelType& parcel
-)
-{
-    notImplemented
-    (
-        "void Foam::InjectionModel<CloudType>::setProperties"
-        "("
-            "const label, "
-            "const label, "
-            "const scalar, "
-            "typename CloudType::parcelType&"
-        ")"
-    );
-}
-
-
-template<class CloudType>
-bool Foam::InjectionModel<CloudType>::fullyDescribed() const
-{
-    notImplemented
-    (
-        "bool Foam::InjectionModel<CloudType>::fullyDescribed() const"
-    );
-
-    return false;
-}
-
-
 template<class CloudType>
 void Foam::InjectionModel<CloudType>::info(Ostream& os)
 {
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H
index b44039633c5..b570a6bf4ab 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H
@@ -143,7 +143,7 @@ protected:
 
         //- Additional flag to identify whether or not injection of parcelI is
         //  permitted
-        virtual bool validInjection(const label parcelI);
+        virtual bool validInjection(const label parcelI) = 0;
 
         //- Determine properties for next time step/injection interval
         virtual bool prepareForNextTimeStep
@@ -220,13 +220,7 @@ public:
         InjectionModel(const InjectionModel<CloudType>& im);
 
         //- Construct and return a clone
-        virtual autoPtr<InjectionModel<CloudType> > clone() const
-        {
-            return autoPtr<InjectionModel<CloudType> >
-            (
-                new InjectionModel<CloudType>(*this)
-            );
-        }
+        virtual autoPtr<InjectionModel<CloudType> > clone() const = 0;
 
 
     //- Destructor
@@ -275,21 +269,21 @@ public:
             inline scalar massInjected() const;
 
             //- Return the end-of-injection time
-            virtual scalar timeEnd() const;
+            virtual scalar timeEnd() const = 0;
 
             //- Number of parcels to introduce relative to SOI
             virtual label parcelsToInject
             (
                 const scalar time0,
                 const scalar time1
-            );
+            ) = 0;
 
             //- Volume of parcels to introduce relative to SOI
             virtual scalar volumeToInject
             (
                 const scalar time0,
                 const scalar time1
-            );
+            ) = 0;
 
             //- Return the average parcel mass over the injection period
             virtual scalar averageParcelMass();
@@ -327,7 +321,7 @@ public:
                 label& cellOwner,
                 label& tetFaceI,
                 label& tetPtI
-            );
+            ) = 0;
 
             //- Set the parcel properties
             virtual void setProperties
@@ -336,10 +330,10 @@ public:
                 const label nParcels,
                 const scalar time,
                 parcelType& parcel
-            );
+            ) = 0;
 
             //- Flag to identify whether model fully describes the parcel
-            virtual bool fullyDescribed() const;
+            virtual bool fullyDescribed() const = 0;
 
 
         // I-O
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/kinematicParcelInjectionData.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/kinematicParcelInjectionData.H
index 977d6e24e80..ee76e3b806a 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/kinematicParcelInjectionData.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/kinematicParcelInjectionData.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -144,59 +144,60 @@ public:
         inline scalar& mDot();
 
 
-    // I-O
-
-        // Friend Operators
+    // Friend Operators
 
-            friend bool operator==
-            (
-                const kinematicParcelInjectionData& a,
-                const kinematicParcelInjectionData& b
-            )
-            {
-                notImplemented
-                (
-                    "operator=="
-                    "("
-                        "const kinematicParcelInjectionData&, "
-                        "const kinematicParcelInjectionData&"
-                    ")"
-                );
-
-                return false;
-            }
-
-            friend bool operator!=
+        friend bool operator==
+        (
+            const kinematicParcelInjectionData& a,
+            const kinematicParcelInjectionData& b
+        )
+        {
+            notImplemented
             (
-                const kinematicParcelInjectionData& a,
-                const kinematicParcelInjectionData& b
-            )
-            {
-                notImplemented
-                (
-                    "operator=="
-                    "("
-                        "const kinematicParcelInjectionData&, "
-                        "const kinematicParcelInjectionData&"
-                    ")"
-                );
-
-                return false;
-            }
-
-            //- Ostream operator
-            friend Ostream& operator<<
-            (
-                Ostream& os,
-                const kinematicParcelInjectionData& data
+                "operator=="
+                "("
+                    "const kinematicParcelInjectionData&, "
+                    "const kinematicParcelInjectionData&"
+                ")"
             );
 
-            //- Istream operator
-            friend Istream& operator>>
+            return false;
+        }
+
+        friend bool operator!=
+        (
+            const kinematicParcelInjectionData& a,
+            const kinematicParcelInjectionData& b
+        )
+        {
+            notImplemented
             (
-                Istream& is,
-                kinematicParcelInjectionData& data
+                "operator=="
+                "("
+                    "const kinematicParcelInjectionData&, "
+                    "const kinematicParcelInjectionData&"
+                ")"
             );
+
+            return false;
+        }
+
+
+    // I-O
+
+        //- Ostream operator
+        friend Ostream& operator<<
+        (
+            Ostream& os,
+            const kinematicParcelInjectionData& data
+        );
+
+        //- Istream operator
+        friend Istream& operator>>
+        (
+            Istream& is,
+            kinematicParcelInjectionData& data
+        );
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/StochasticCollision/StochasticCollisionModel/StochasticCollisionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/StochasticCollision/StochasticCollisionModel/StochasticCollisionModel.C
index 550e1212193..0ed36fac1bb 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/StochasticCollision/StochasticCollisionModel/StochasticCollisionModel.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/StochasticCollision/StochasticCollisionModel/StochasticCollisionModel.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -25,18 +25,6 @@ License
 
 #include "StochasticCollisionModel.H"
 
-// * * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * //
-
-template<class CloudType>
-void Foam::StochasticCollisionModel<CloudType>::collide(const scalar dt)
-{
-    notImplemented
-    (
-        "void Foam::NoStochasticCollision<CloudType>::collide(const scalar)"
-    );
-}
-
-
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
 template<class CloudType>
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/StochasticCollision/StochasticCollisionModel/StochasticCollisionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/StochasticCollision/StochasticCollisionModel/StochasticCollisionModel.H
index 823a458aee7..140c9d310d2 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/StochasticCollision/StochasticCollisionModel/StochasticCollisionModel.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/StochasticCollision/StochasticCollisionModel/StochasticCollisionModel.H
@@ -58,7 +58,7 @@ class StochasticCollisionModel
 protected:
 
     //- Main collision routine
-    virtual void collide(const scalar dt);
+    virtual void collide(const scalar dt) = 0;
 
 
 public:
@@ -97,13 +97,7 @@ public:
         StochasticCollisionModel(const StochasticCollisionModel<CloudType>& cm);
 
         //- Construct and return a clone
-        virtual autoPtr<StochasticCollisionModel<CloudType> > clone() const
-        {
-            return autoPtr<StochasticCollisionModel<CloudType> >
-            (
-                new StochasticCollisionModel<CloudType>(*this)
-            );
-        }
+        virtual autoPtr<StochasticCollisionModel<CloudType> > clone() const = 0;
 
 
     //- Destructor
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.C b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.C
index 51272f3560e..d2dbb92d6c5 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -99,28 +99,6 @@ Foam::SurfaceFilmModel<CloudType>::~SurfaceFilmModel()
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-template<class CloudType>
-bool Foam::SurfaceFilmModel<CloudType>::transferParcel
-(
-    parcelType& p,
-    const polyPatch& pp,
-    bool& keepParticle
-)
-{
-    notImplemented
-    (
-        "bool Foam::SurfaceFilmModel<CloudType>::transferParcel"
-        "("
-            "parcelType&, "
-            "const polyPatch&, "
-            "bool&"
-        ")"
-    );
-
-    return false;
-}
-
-
 template<class CloudType>
 template<class TrackData>
 void Foam::SurfaceFilmModel<CloudType>::inject(TrackData& td)
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.H b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.H
index 65a25069284..4f93dde5274 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.H
@@ -161,13 +161,7 @@ public:
         SurfaceFilmModel(const SurfaceFilmModel<CloudType>& sfm);
 
         //- Construct and return a clone
-        virtual autoPtr<SurfaceFilmModel<CloudType> > clone() const
-        {
-            return autoPtr<SurfaceFilmModel<CloudType> >
-            (
-                new SurfaceFilmModel<CloudType>(*this)
-            );
-        }
+        virtual autoPtr<SurfaceFilmModel<CloudType> > clone() const = 0;
 
 
     //- Destructor
@@ -215,7 +209,7 @@ public:
                 parcelType& p,
                 const polyPatch& pp,
                 bool& keepParticle
-            );
+            ) = 0;
 
             //- Inject parcels into the cloud
             template<class TrackData>
diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.C b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.C
index f18ad8bb5a5..7cb6e81bf68 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.C
+++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.C
@@ -298,55 +298,6 @@ Foam::scalarField Foam::CompositionModel<CloudType>::X
 }
 
 
-template<class CloudType>
-const Foam::scalarField& Foam::CompositionModel<CloudType>::YMixture0() const
-{
-    notImplemented
-    (
-        "const scalarField& Foam::CompositionModel<CloudType>::YMixture0() "
-        "const"
-    );
-
-    return scalarField::null();
-}
-
-
-template<class CloudType>
-Foam::label Foam::CompositionModel<CloudType>::idGas() const
-{
-    notImplemented
-    (
-        "Foam::label Foam::CompositionModel<CloudType>::idGas() const"
-    );
-
-    return -1;
-}
-
-
-template<class CloudType>
-Foam::label Foam::CompositionModel<CloudType>::idLiquid() const
-{
-    notImplemented
-    (
-        "Foam::label Foam::CompositionModel<CloudType>::idLiquid() const"
-    );
-
-    return -1;
-}
-
-
-template<class CloudType>
-Foam::label Foam::CompositionModel<CloudType>::idSolid() const
-{
-    notImplemented
-    (
-        "Foam::label Foam::CompositionModel<CloudType>::idSolid() const"
-    );
-
-    return -1;
-}
-
-
 template<class CloudType>
 Foam::scalar Foam::CompositionModel<CloudType>::H
 (
diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H
index 7938b702c4d..b57da79fde1 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H
+++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H
@@ -107,13 +107,7 @@ public:
         CompositionModel(const CompositionModel<CloudType>& cm);
 
         //- Construct and return a clone
-        virtual autoPtr<CompositionModel<CloudType> > clone() const
-        {
-            return autoPtr<CompositionModel<CloudType> >
-            (
-                new CompositionModel<CloudType>(*this)
-            );
-        }
+        virtual autoPtr<CompositionModel<CloudType> > clone() const = 0;
 
 
     //- Destructor
@@ -201,19 +195,19 @@ public:
 
                 //- Return the list of mixture mass fractions
                 //  If only 1 phase, return component fractions of that phase
-                virtual const scalarField& YMixture0() const;
+                virtual const scalarField& YMixture0() const = 0;
 
                 // Indices of gas, liquid and solid phases in phase properties
                 // list - returns -1 if not applicable
 
                     //- Gas id
-                    virtual label idGas() const;
+                    virtual label idGas() const = 0;
 
                     //- Liquid id
-                    virtual label idLiquid() const;
+                    virtual label idLiquid() const = 0;
 
                     //- Solid id
-                    virtual label idSolid() const;
+                    virtual label idSolid() const = 0;
 
 
         // Evaluation
diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/NoComposition/NoComposition.C b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/NoComposition/NoComposition.C
index 5327feacd0a..e80a061c6c7 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/NoComposition/NoComposition.C
+++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/NoComposition/NoComposition.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -55,5 +55,34 @@ Foam::NoComposition<CloudType>::~NoComposition()
 {}
 
 
-// ************************************************************************* //
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+template<class CloudType>
+const Foam::scalarField& Foam::NoComposition<CloudType>::YMixture0() const
+{
+    return scalarField::null();
+}
+
+
+template<class CloudType>
+Foam::label Foam::NoComposition<CloudType>::idGas() const
+{
+    return -1;
+}
+
 
+template<class CloudType>
+Foam::label Foam::NoComposition<CloudType>::idLiquid() const
+{
+    return -1;
+}
+
+
+template<class CloudType>
+Foam::label Foam::NoComposition<CloudType>::idSolid() const
+{
+    return -1;
+}
+
+
+// ************************************************************************* //
diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/NoComposition/NoComposition.H b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/NoComposition/NoComposition.H
index 3ee6b1b0ae0..716352dc74f 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/NoComposition/NoComposition.H
+++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/NoComposition/NoComposition.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -78,6 +78,29 @@ public:
 
     //- Destructor
     virtual ~NoComposition();
+
+
+    // Member Functions
+
+        // Access
+
+            // Mixture properties
+
+                //- Return the list of mixture mass fractions
+                //  If only 1 phase, return component fractions of that phase
+                virtual const scalarField& YMixture0() const;
+
+                // Indices of gas, liquid and solid phases in phase properties
+                // list
+
+                    //- Gas id
+                    virtual label idGas() const;
+
+                    //- Liquid id
+                    virtual label idLiquid() const;
+
+                    //- Solid id
+                    virtual label idSolid() const;
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.C b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.C
index e30594c3059..3209c04fa51 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.C
+++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -158,30 +158,6 @@ Foam::SingleMixtureFraction<CloudType>::~SingleMixtureFraction()
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-template<class CloudType>
-const Foam::scalarField&
-Foam::SingleMixtureFraction<CloudType>::YGas0() const
-{
-    return this->phaseProps()[idGas_].Y();
-}
-
-
-template<class CloudType>
-const Foam::scalarField&
-Foam::SingleMixtureFraction<CloudType>::YLiquid0() const
-{
-    return this->phaseProps()[idLiquid_].Y();
-}
-
-
-template<class CloudType>
-const Foam::scalarField&
-Foam::SingleMixtureFraction<CloudType>::YSolid0() const
-{
-    return this->phaseProps()[idSolid_].Y();
-}
-
-
 template<class CloudType>
 const Foam::scalarField&
 Foam::SingleMixtureFraction<CloudType>::YMixture0() const
@@ -212,4 +188,3 @@ Foam::label Foam::SingleMixtureFraction<CloudType>::idSolid() const
 
 
 // ************************************************************************* //
-
diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.H b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.H
index 1bdc130ab7e..1f2e1f8104d 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.H
+++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -110,33 +110,6 @@ public:
 
         // Access
 
-            // Gas properties
-
-                //- Return the list of gas mass fractions
-                const scalarField& YGas0() const;
-
-                //- Return the total gas mass fraction
-                scalar YGasTot0() const;
-
-
-            // Liquid properties
-
-                //- Return the list of liquid mass fractions
-                const scalarField& YLiquid0() const;
-
-                //- Return the total liquid mass fraction
-                scalar YLiquidTot0() const;
-
-
-            // Solid properties
-
-                //- Return the list of solid mass fractions
-                const scalarField& YSolid0() const;
-
-                //- Return the total solid mass fraction
-                scalar YSolidTot0() const;
-
-
             // Mixture properties
 
                 //- Return the list of mixture mass fractions
diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SinglePhaseMixture/SinglePhaseMixture.C b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SinglePhaseMixture/SinglePhaseMixture.C
index d80de18e590..1fe61169cb8 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SinglePhaseMixture/SinglePhaseMixture.C
+++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SinglePhaseMixture/SinglePhaseMixture.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -113,45 +113,6 @@ Foam::SinglePhaseMixture<CloudType>::~SinglePhaseMixture()
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-template<class CloudType>
-const Foam::scalarField&
-Foam::SinglePhaseMixture<CloudType>::YGas0() const
-{
-    notImplemented
-    (
-        "const Foam::scalarField& "
-        "Foam::SinglePhaseMixture<CloudType>::YGas0() const"
-    );
-    return this->phaseProps()[0].Y();
-}
-
-
-template<class CloudType>
-const Foam::scalarField&
-Foam::SinglePhaseMixture<CloudType>::YLiquid0() const
-{
-    notImplemented
-    (
-        "const Foam::scalarField& "
-        "Foam::SinglePhaseMixture<CloudType>::YLiquid0() const"
-    );
-    return this->phaseProps()[0].Y();
-}
-
-
-template<class CloudType>
-const Foam::scalarField&
-Foam::SinglePhaseMixture<CloudType>::YSolid0() const
-{
-    notImplemented
-    (
-        "const Foam::scalarField& "
-        "Foam::SinglePhaseMixture<CloudType>::YSolid0() const"
-    );
-    return this->phaseProps()[0].Y();
-}
-
-
 template<class CloudType>
 const Foam::scalarField&
 Foam::SinglePhaseMixture<CloudType>::YMixture0() const
@@ -182,4 +143,3 @@ Foam::label Foam::SinglePhaseMixture<CloudType>::idSolid() const
 
 
 // ************************************************************************* //
-
diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SinglePhaseMixture/SinglePhaseMixture.H b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SinglePhaseMixture/SinglePhaseMixture.H
index ed9b78f6d6f..239384cfb2a 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SinglePhaseMixture/SinglePhaseMixture.H
+++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SinglePhaseMixture/SinglePhaseMixture.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -104,33 +104,6 @@ public:
 
         // Access
 
-            // Gas properties
-
-                //- Return the list of gas mass fractions
-                const scalarField& YGas0() const;
-
-                //- Return the total gas mass fraction
-                scalar YGasTot0() const;
-
-
-            // Liquid properties
-
-                //- Return the list of liquid mass fractions
-                const scalarField& YLiquid0() const;
-
-                //- Return the total liquid mass fraction
-                scalar YLiquidTot0() const;
-
-
-            // Solid properties
-
-                //- Return the list of solid mass fractions
-                const scalarField& YSolid0() const;
-
-                //- Return the total solid mass fraction
-                scalar YSolidTot0() const;
-
-
             // Mixture properties
 
                 //- Return the list of mixture mass fractions
diff --git a/src/lagrangian/intermediate/submodels/Reacting/InjectionModel/ReactingLookupTableInjection/reactingParcelInjectionData.H b/src/lagrangian/intermediate/submodels/Reacting/InjectionModel/ReactingLookupTableInjection/reactingParcelInjectionData.H
index c1174a4e8f6..af582909dca 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/InjectionModel/ReactingLookupTableInjection/reactingParcelInjectionData.H
+++ b/src/lagrangian/intermediate/submodels/Reacting/InjectionModel/ReactingLookupTableInjection/reactingParcelInjectionData.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -111,57 +111,19 @@ public:
 
     // I-O
 
-        // Friend Operators
-
-            friend bool operator==
-            (
-                const reactingParcelInjectionData& a,
-                const reactingParcelInjectionData& b
-            )
-            {
-                notImplemented
-                (
-                    "operator=="
-                    "("
-                        "const reactingParcelInjectionData&, "
-                        "const reactingParcelInjectionData&"
-                    ")"
-                );
-
-                return false;
-            }
-
-            friend bool operator!=
-            (
-                const reactingParcelInjectionData& a,
-                const reactingParcelInjectionData& b
-            )
-            {
-                notImplemented
-                (
-                    "operator=="
-                    "("
-                        "const reactingParcelInjectionData&, "
-                        "const reactingParcelInjectionData&"
-                    ")"
-                );
-
-                return false;
-            }
-
-            //- Ostream operator
-            friend Ostream& operator<<
-            (
-                Ostream& os,
-                const reactingParcelInjectionData& data
-            );
-
-            //- Istream operator
-            friend Istream& operator>>
-            (
-                Istream& is,
-                reactingParcelInjectionData& data
-            );
+        //- Ostream operator
+        friend Ostream& operator<<
+        (
+            Ostream& os,
+            const reactingParcelInjectionData& data
+        );
+
+        //- Istream operator
+        friend Istream& operator>>
+        (
+            Istream& is,
+            reactingParcelInjectionData& data
+        );
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.C b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.C
index 3ea746b8849..7d388ce119c 100644
--- a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.C
+++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -71,40 +71,6 @@ Foam::DevolatilisationModel<CloudType>::~DevolatilisationModel()
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-template<class CloudType>
-void Foam::DevolatilisationModel<CloudType>::calculate
-(
-    const scalar,
-    const scalar,
-    const scalar,
-    const scalar,
-    const scalar,
-    const scalarField&,
-    const scalarField&,
-    const scalarField&,
-    label&,
-    scalarField&
-) const
-{
-    notImplemented
-    (
-        "void Foam::DevolatilisationModel<CloudType>::calculate"
-        "("
-            "const scalar, "
-            "const scalar, "
-            "const scalar, "
-            "const scalar, "
-            "const scalar, "
-            "const scalarField&, "
-            "const scalarField&, "
-            "const scalarField&, "
-            "label&, "
-            "scalarField&"
-        ") const"
-    );
-}
-
-
 template<class CloudType>
 void Foam::DevolatilisationModel<CloudType>::addToDevolatilisationMass
 (
diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.H b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.H
index 41d0403cdd7..334d757b92a 100644
--- a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.H
+++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.H
@@ -99,13 +99,7 @@ public:
         DevolatilisationModel(const DevolatilisationModel<CloudType>& dm);
 
         //- Construct and return a clone
-        virtual autoPtr<DevolatilisationModel<CloudType> > clone() const
-        {
-            return autoPtr<DevolatilisationModel<CloudType> >
-            (
-                new DevolatilisationModel<CloudType>(*this)
-            );
-        }
+        virtual autoPtr<DevolatilisationModel<CloudType> > clone() const = 0;
 
 
     //- Destructor
@@ -135,7 +129,7 @@ public:
             const scalarField& YSolidEff,
             label& canCombust,
             scalarField& dMassDV
-        ) const;
+        ) const = 0;
 
         //- Add to devolatilisation mass
         void addToDevolatilisationMass(const scalar dMass);
diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/NoDevolatilisation/NoDevolatilisation.C b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/NoDevolatilisation/NoDevolatilisation.C
index 238cb4a02ed..1665c224c88 100644
--- a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/NoDevolatilisation/NoDevolatilisation.C
+++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/NoDevolatilisation/NoDevolatilisation.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -75,7 +75,7 @@ void Foam::NoDevolatilisation<CloudType>::calculate
     const scalarField&,
     const scalarField&,
     const scalarField&,
-    bool& canCombust,
+    label& canCombust,
     scalarField&
 ) const
 {
diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/NoDevolatilisation/NoDevolatilisation.H b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/NoDevolatilisation/NoDevolatilisation.H
index b3a617ba868..dab9b47dab1 100644
--- a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/NoDevolatilisation/NoDevolatilisation.H
+++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/NoDevolatilisation/NoDevolatilisation.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -92,7 +92,7 @@ public:
             const scalarField& YGasEff,
             const scalarField& YLiquidEff,
             const scalarField& YSolidEff,
-            bool& canCombust,
+            label& canCombust,
             scalarField& dMassDV
         ) const;
 };
diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/InjectionModel/ReactingMultiphaseLookupTableInjection/reactingMultiphaseParcelInjectionData.H b/src/lagrangian/intermediate/submodels/ReactingMultiphase/InjectionModel/ReactingMultiphaseLookupTableInjection/reactingMultiphaseParcelInjectionData.H
index 4875a68d1f6..43c7eacf466 100644
--- a/src/lagrangian/intermediate/submodels/ReactingMultiphase/InjectionModel/ReactingMultiphaseLookupTableInjection/reactingMultiphaseParcelInjectionData.H
+++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/InjectionModel/ReactingMultiphaseLookupTableInjection/reactingMultiphaseParcelInjectionData.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -128,57 +128,19 @@ public:
 
     // I-O
 
-        // Friend Operators
-
-            friend bool operator==
-            (
-                const reactingMultiphaseParcelInjectionData& a,
-                const reactingMultiphaseParcelInjectionData& b
-            )
-            {
-                notImplemented
-                (
-                    "operator=="
-                    "("
-                        "const reactingMultiphaseParcelInjectionData&, "
-                        "const reactingMultiphaseParcelInjectionData&"
-                    ")"
-                );
-
-                return false;
-            }
-
-            friend bool operator!=
-            (
-                const reactingMultiphaseParcelInjectionData& a,
-                const reactingMultiphaseParcelInjectionData& b
-            )
-            {
-                notImplemented
-                (
-                    "operator=="
-                    "("
-                        "const reactingMultiphaseParcelInjectionData&, "
-                        "const reactingMultiphaseParcelInjectionData&"
-                    ")"
-                );
-
-                return false;
-            }
-
-            //- Ostream operator
-            friend Ostream& operator<<
-            (
-                Ostream& os,
-                const reactingMultiphaseParcelInjectionData& data
-            );
-
-            //- Istream operator
-            friend Istream& operator>>
-            (
-                Istream& is,
-                reactingMultiphaseParcelInjectionData& data
-            );
+        //- Ostream operator
+        friend Ostream& operator<<
+        (
+            Ostream& os,
+            const reactingMultiphaseParcelInjectionData& data
+        );
+
+        //- Istream operator
+        friend Istream& operator>>
+        (
+            Istream& is,
+            reactingMultiphaseParcelInjectionData& data
+        );
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.C b/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.C
index 3beee0747fd..5a890c7b638 100644
--- a/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.C
+++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -71,56 +71,6 @@ Foam::SurfaceReactionModel<CloudType>::~SurfaceReactionModel()
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-template<class CloudType>
-Foam::scalar Foam::SurfaceReactionModel<CloudType>::calculate
-(
-    const scalar,
-    const label,
-    const scalar,
-    const scalar,
-    const scalar,
-    const scalar,
-    const scalar,
-    const scalar,
-    const scalarField&,
-    const scalarField&,
-    const scalarField&,
-    const scalarField&,
-    const scalar,
-    scalarField&,
-    scalarField&,
-    scalarField&,
-    scalarField&
-) const
-{
-    notImplemented
-    (
-        "Foam::scalar Foam::SurfaceReactionModel<CloudType>::calculate"
-        "("
-            "const scalar, "
-            "const label, "
-            "const scalar, "
-            "const scalar, "
-            "const scalar, "
-            "const scalar, "
-            "const scalar, "
-            "const scalar, "
-            "const scalarField&, "
-            "const scalarField&, "
-            "const scalarField&, "
-            "const scalarField&, "
-            "const scalar, "
-            "scalarField&, "
-            "scalarField&, "
-            "scalarField&, "
-            "scalarField&"
-        ") const"
-    );
-
-    return 0.0;
-}
-
-
 template<class CloudType>
 void Foam::SurfaceReactionModel<CloudType>::addToSurfaceReactionMass
 (
@@ -152,4 +102,3 @@ void Foam::SurfaceReactionModel<CloudType>::info(Ostream& os)
 #include "SurfaceReactionModelNew.C"
 
 // ************************************************************************* //
-
diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.H b/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.H
index 54892c4ba7d..a490a243238 100644
--- a/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.H
+++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.H
@@ -101,13 +101,7 @@ public:
         SurfaceReactionModel(const SurfaceReactionModel<CloudType>& srm);
 
         //- Construct and return a clone
-        virtual autoPtr<SurfaceReactionModel<CloudType> > clone() const
-        {
-            return autoPtr<SurfaceReactionModel<CloudType> >
-            (
-                new SurfaceReactionModel<CloudType>(*this)
-            );
-        }
+        virtual autoPtr<SurfaceReactionModel<CloudType> > clone() const = 0;
 
 
     //- Destructor
@@ -145,7 +139,7 @@ public:
             scalarField& dMassLiquid,
             scalarField& dMassSolid,
             scalarField& dMassSRCarrier
-        ) const;
+        ) const = 0;
 
         //- Add to devolatilisation mass
         void addToSurfaceReactionMass(const scalar dMass);
diff --git a/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/HeatTransferModel.C b/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/HeatTransferModel.C
index 2f7dfbc0e0c..a3119cb266b 100644
--- a/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/HeatTransferModel.C
+++ b/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/HeatTransferModel.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -75,26 +75,6 @@ const Foam::Switch& Foam::HeatTransferModel<CloudType>::BirdCorrection() const
 }
 
 
-template<class CloudType>
-Foam::scalar Foam::HeatTransferModel<CloudType>::Nu
-(
-    const scalar Re,
-    const scalar Pr
-) const
-{
-    notImplemented
-    (
-        "Foam::scalar Foam::HeatTransferModel<CloudType>::Nu"
-        "("
-            "const scalar, "
-            "const scalar"
-        ") const"
-    );
-
-    return 0.0;
-}
-
-
 template<class CloudType>
 Foam::scalar Foam::HeatTransferModel<CloudType>::htc
 (
@@ -126,6 +106,4 @@ Foam::scalar Foam::HeatTransferModel<CloudType>::htc
 
 #include "HeatTransferModelNew.C"
 
-
 // ************************************************************************* //
-
diff --git a/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/HeatTransferModel.H b/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/HeatTransferModel.H
index 70500e7e58d..b2dc21c5282 100644
--- a/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/HeatTransferModel.H
+++ b/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/HeatTransferModel.H
@@ -97,13 +97,7 @@ public:
         HeatTransferModel(const HeatTransferModel<CloudType>& htm);
 
         //- Construct and return a clone
-        virtual autoPtr<HeatTransferModel<CloudType> > clone() const
-        {
-            return autoPtr<HeatTransferModel<CloudType> >
-            (
-                new HeatTransferModel<CloudType>(*this)
-            );
-        }
+        virtual autoPtr<HeatTransferModel<CloudType> > clone() const = 0;
 
 
     //- Destructor
@@ -133,7 +127,7 @@ public:
             (
                 const scalar Re,
                 const scalar Pr
-            ) const;
+            ) const = 0;
 
             //- Return heat transfer coefficient
             virtual scalar htc
diff --git a/src/lagrangian/intermediate/submodels/Thermodynamic/InjectionModel/ThermoLookupTableInjection/thermoParcelInjectionData.H b/src/lagrangian/intermediate/submodels/Thermodynamic/InjectionModel/ThermoLookupTableInjection/thermoParcelInjectionData.H
index 98f8170becc..84df957be46 100644
--- a/src/lagrangian/intermediate/submodels/Thermodynamic/InjectionModel/ThermoLookupTableInjection/thermoParcelInjectionData.H
+++ b/src/lagrangian/intermediate/submodels/Thermodynamic/InjectionModel/ThermoLookupTableInjection/thermoParcelInjectionData.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -119,57 +119,19 @@ public:
 
     // I-O
 
-        // Friend Operators
-
-            friend bool operator==
-            (
-                const thermoParcelInjectionData& a,
-                const thermoParcelInjectionData& b
-            )
-            {
-                notImplemented
-                (
-                    "operator=="
-                    "("
-                        "const thermoParcelInjectionData&, "
-                        "const thermoParcelInjectionData&"
-                    ")"
-                );
-
-                return false;
-            }
-
-            friend bool operator!=
-            (
-                const thermoParcelInjectionData& a,
-                const thermoParcelInjectionData& b
-            )
-            {
-                notImplemented
-                (
-                    "operator=="
-                    "("
-                        "const thermoParcelInjectionData&, "
-                        "const thermoParcelInjectionData&"
-                    ")"
-                );
-
-                return false;
-            }
-
-            //- Ostream operator
-            friend Ostream& operator<<
-            (
-                Ostream& os,
-                const thermoParcelInjectionData& data
-            );
-
-            //- Istream operator
-            friend Istream& operator>>
-            (
-                Istream& is,
-                thermoParcelInjectionData& data
-            );
+        //- Ostream operator
+        friend Ostream& operator<<
+        (
+            Ostream& os,
+            const thermoParcelInjectionData& data
+        );
+
+        //- Istream operator
+        friend Istream& operator>>
+        (
+            Istream& is,
+            thermoParcelInjectionData& data
+        );
 };
 
 
diff --git a/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.H b/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.H
index 7b0bd547d6d..dd434f1b36e 100644
--- a/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.H
+++ b/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -254,7 +254,7 @@ public:
         ThermoSurfaceFilm(const ThermoSurfaceFilm<CloudType>& sfm);
 
         //- Construct and return a clone using supplied owner cloud
-        virtual autoPtr<SurfaceFilmModel<CloudType> > clone()
+        virtual autoPtr<SurfaceFilmModel<CloudType> > clone() const
         {
             return autoPtr<SurfaceFilmModel<CloudType> >
             (
diff --git a/src/lagrangian/spray/submodels/AtomizationModel/AtomizationModel/AtomizationModel.C b/src/lagrangian/spray/submodels/AtomizationModel/AtomizationModel/AtomizationModel.C
index d406b6bd29d..36ebedd639c 100644
--- a/src/lagrangian/spray/submodels/AtomizationModel/AtomizationModel/AtomizationModel.C
+++ b/src/lagrangian/spray/submodels/AtomizationModel/AtomizationModel/AtomizationModel.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -68,19 +68,6 @@ Foam::AtomizationModel<CloudType>::~AtomizationModel()
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-template<class CloudType>
-Foam::scalar Foam::AtomizationModel<CloudType>::initLiquidCore() const
-{
-    notImplemented
-    (
-        "Foam::scalar "
-        "Foam::AtomizationModel<CloudType>::initLiquidCore() const"
-    );
-
-    return 0.0;
-}
-
-
 template<class CloudType>
 Foam::scalar Foam::AtomizationModel<CloudType>::Taverage
 (
@@ -92,62 +79,8 @@ Foam::scalar Foam::AtomizationModel<CloudType>::Taverage
 }
 
 
-template<class CloudType>
-bool Foam::AtomizationModel<CloudType>::calcChi() const
-{
-    notImplemented("bool Foam::AtomizationModel<CloudType>::calcChi()");
-
-    return false;
-}
-
-
-template<class CloudType>
-void Foam::AtomizationModel<CloudType>::update
-(
-    const scalar dt,
-    scalar& d,
-    scalar& liquidCore,
-    scalar& tc,
-    const scalar rho,
-    const scalar mu,
-    const scalar sigma,
-    const scalar volFlowRate,
-    const scalar rhoAv,
-    const scalar Urel,
-    const vector& pos,
-    const vector& injectionPos,
-    const scalar pAmbient,
-    const scalar chi,
-    cachedRandom& rndGen
-) const
-{
-    notImplemented
-    (
-        "void Foam::AtomizationModel<CloudType>::update"
-        "("
-            "const scalar, "
-            "scalar&, "
-            "scalar&, "
-            "scalar&, "
-            "const scalar, "
-            "const scalar, "
-            "const scalar, "
-            "const scalar, "
-            "const scalar, "
-            "const scalar, "
-            "const vector&, "
-            "const vector&, "
-            "const scalar, "
-            "const scalar, "
-            "cachedRandom&"
-        ") const"
-    );
-}
-
-
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 #include "AtomizationModelNew.C"
 
 // ************************************************************************* //
-
diff --git a/src/lagrangian/spray/submodels/AtomizationModel/AtomizationModel/AtomizationModel.H b/src/lagrangian/spray/submodels/AtomizationModel/AtomizationModel/AtomizationModel.H
index c344b2b5902..d0e8ecacbfd 100644
--- a/src/lagrangian/spray/submodels/AtomizationModel/AtomizationModel/AtomizationModel.H
+++ b/src/lagrangian/spray/submodels/AtomizationModel/AtomizationModel/AtomizationModel.H
@@ -91,13 +91,7 @@ public:
         AtomizationModel(const AtomizationModel<CloudType>& am);
 
         //- Construct and return a clone
-        virtual autoPtr<AtomizationModel<CloudType> > clone() const
-        {
-            return autoPtr<AtomizationModel<CloudType> >
-            (
-                new AtomizationModel<CloudType>(*this)
-            );
-        }
+        virtual autoPtr<AtomizationModel<CloudType> > clone() const = 0;
 
 
     //- Destructor
@@ -114,14 +108,14 @@ public:
 
     // Member Functions
 
-        //- Initial value of liquidCore
-        virtual scalar initLiquidCore() const;
-
         //- Average temperature calculation
         scalar Taverage(const scalar& Tliq, const scalar& Tc) const;
 
+        //- Initial value of liquidCore
+        virtual scalar initLiquidCore() const = 0;
+
         //- Flag to indicate if chi needs to be calculated
-        virtual bool calcChi() const;
+        virtual bool calcChi() const = 0;
 
         virtual void update
         (
@@ -140,7 +134,7 @@ public:
             const scalar pAmbient,
             const scalar chi,
             cachedRandom& rndGen
-        ) const;
+        ) const = 0;
 };
 
 
diff --git a/src/lagrangian/spray/submodels/BreakupModel/BreakupModel/BreakupModel.C b/src/lagrangian/spray/submodels/BreakupModel/BreakupModel/BreakupModel.C
index 60047fd32fd..ff89670dc61 100644
--- a/src/lagrangian/spray/submodels/BreakupModel/BreakupModel/BreakupModel.C
+++ b/src/lagrangian/spray/submodels/BreakupModel/BreakupModel/BreakupModel.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -94,66 +94,6 @@ Foam::BreakupModel<CloudType>::~BreakupModel()
 {}
 
 
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-template<class CloudType>
-bool Foam::BreakupModel<CloudType>::update
-(
-    const scalar dt,
-    const vector& g,
-    scalar& d,
-    scalar& tc,
-    scalar& ms,
-    scalar& nParticle,
-    scalar& KHindex,
-    scalar& y,
-    scalar& yDot,
-    const scalar d0,
-    const scalar rho,
-    const scalar mu,
-    const scalar sigma,
-    const vector& U,
-    const scalar rhoc,
-    const scalar muc,
-    const vector& Urel,
-    const scalar Urmag,
-    const scalar tMom,
-    scalar& dChild,
-    scalar& massChild
-)
-{
-    notImplemented
-    (
-        "bool Foam::BreakupModel<CloudType>::update"
-        "("
-            "const scalar, "
-            "const vector&, "
-            "scalar&, "
-            "scalar&, "
-            "scalar&, "
-            "scalar&, "
-            "scalar&, "
-            "scalar&, "
-            "scalar&, "
-            "const scalar, "
-            "const scalar, "
-            "const scalar, "
-            "const scalar, "
-            "const vector&, "
-            "const scalar, "
-            "const scalar, "
-            "const vector&, "
-            "const scalar, "
-            "const scalar, "
-            "scalar&, "
-            "scalar&"
-        ");"
-    );
-
-    return false;
-}
-
-
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 #include "BreakupModelNew.C"
diff --git a/src/lagrangian/spray/submodels/BreakupModel/BreakupModel/BreakupModel.H b/src/lagrangian/spray/submodels/BreakupModel/BreakupModel/BreakupModel.H
index d0f57e7d56e..6300a8fcfa5 100644
--- a/src/lagrangian/spray/submodels/BreakupModel/BreakupModel/BreakupModel.H
+++ b/src/lagrangian/spray/submodels/BreakupModel/BreakupModel/BreakupModel.H
@@ -106,13 +106,7 @@ public:
         BreakupModel(const BreakupModel<CloudType>& bum);
 
         //- Construct and return a clone
-        virtual autoPtr<BreakupModel<CloudType> > clone() const
-        {
-            return autoPtr<BreakupModel<CloudType> >
-            (
-                new BreakupModel<CloudType>(*this)
-            );
-        }
+        virtual autoPtr<BreakupModel<CloudType> > clone() const = 0;
 
 
     //- Destructor
@@ -187,7 +181,7 @@ public:
             const scalar tMom,
             scalar& dChild,
             scalar& massChild
-        );
+        ) = 0;
 };
 
 
diff --git a/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C b/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C
index cb314e5af97..e34759e3ed1 100644
--- a/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C
+++ b/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C
@@ -120,7 +120,7 @@ Foam::DispersionRASModel<CloudType>::DispersionRASModel
 template<class CloudType>
 Foam::DispersionRASModel<CloudType>::DispersionRASModel
 (
-    DispersionRASModel<CloudType>& dm
+    const DispersionRASModel<CloudType>& dm
 )
 :
     DispersionModel<CloudType>(dm),
diff --git a/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H b/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H
index c105035c21a..278192e5062 100644
--- a/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H
+++ b/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -59,13 +59,13 @@ protected:
             const volScalarField* kPtr_;
 
             //- Take ownership of the k field
-            bool ownK_;
+            mutable bool ownK_;
 
             //- Turbulence epsilon
             const volScalarField* epsilonPtr_;
 
             //- Take ownership of the epsilon field
-            bool ownEpsilon_;
+            mutable bool ownEpsilon_;
 
 
     // Protected Functions
@@ -89,16 +89,10 @@ public:
         DispersionRASModel(const dictionary& dict, CloudType& owner);
 
         //- Construct copy
-        DispersionRASModel(DispersionRASModel<CloudType>& dm);
+        DispersionRASModel(const DispersionRASModel<CloudType>& dm);
 
         //- Construct and return a clone
-        virtual autoPtr<DispersionModel<CloudType> > clone()
-        {
-            return autoPtr<DispersionModel<CloudType> >
-            (
-                new DispersionRASModel<CloudType>(*this)
-            );
-        }
+        virtual autoPtr<DispersionModel<CloudType> > clone() const = 0;
 
 
     //- Destructor
@@ -107,6 +101,17 @@ public:
 
     // Member Functions
 
+        //- Update (disperse particles)
+        virtual vector update
+        (
+            const scalar dt,
+            const label cellI,
+            const vector& U,
+            const vector& Uc,
+            vector& UTurb,
+            scalar& tTurb
+        ) = 0;
+
         //- Cache carrier fields
         virtual void cacheFields(const bool store);
 
diff --git a/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C b/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C
index 06fa810ac99..1b7b3c19511 100644
--- a/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C
+++ b/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -45,7 +45,7 @@ Foam::GradientDispersionRAS<CloudType>::GradientDispersionRAS
 template<class CloudType>
 Foam::GradientDispersionRAS<CloudType>::GradientDispersionRAS
 (
-    GradientDispersionRAS<CloudType>& dm
+    const GradientDispersionRAS<CloudType>& dm
 )
 :
     DispersionRASModel<CloudType>(dm),
diff --git a/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H b/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H
index c00db907c92..c48025d41b7 100644
--- a/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H
+++ b/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -60,7 +60,7 @@ protected:
             const volVectorField* gradkPtr_;
 
             //- Take ownership of the grad(k)
-            bool ownGradK_;
+            mutable bool ownGradK_;
 
 
 public:
@@ -75,10 +75,10 @@ public:
         GradientDispersionRAS(const dictionary& dict, CloudType& owner);
 
         //- Construct copy
-        GradientDispersionRAS(GradientDispersionRAS<CloudType>& dm);
+        GradientDispersionRAS(const GradientDispersionRAS<CloudType>& dm);
 
         //- Construct and return a clone
-        virtual autoPtr<DispersionModel<CloudType> > clone()
+        virtual autoPtr<DispersionModel<CloudType> > clone() const
         {
             return autoPtr<DispersionModel<CloudType> >
             (
diff --git a/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C b/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C
index d3c6c5b739b..e5586285053 100644
--- a/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C
+++ b/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -41,7 +41,7 @@ Foam::StochasticDispersionRAS<CloudType>::StochasticDispersionRAS
 template<class CloudType>
 Foam::StochasticDispersionRAS<CloudType>::StochasticDispersionRAS
 (
-    StochasticDispersionRAS<CloudType>& dm
+    const StochasticDispersionRAS<CloudType>& dm
 )
 :
     DispersionRASModel<CloudType>(dm)
diff --git a/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H b/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H
index 5707690233c..fe6acc7ae00 100644
--- a/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H
+++ b/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -62,10 +62,10 @@ public:
         StochasticDispersionRAS(const dictionary& dict, CloudType& owner);
 
         //- Construct copy
-        StochasticDispersionRAS(StochasticDispersionRAS<CloudType>& dm);
+        StochasticDispersionRAS(const StochasticDispersionRAS<CloudType>& dm);
 
         //- Construct and return a clone
-        virtual autoPtr<DispersionModel<CloudType> > clone()
+        virtual autoPtr<DispersionModel<CloudType> > clone() const
         {
             return autoPtr<DispersionModel<CloudType> >
             (
-- 
GitLab