From ffedbafee1a7a8e44d5d8590f2c7233c586302a3 Mon Sep 17 00:00:00 2001
From: Henry Weller <http://cfd.direct>
Date: Fri, 28 Aug 2015 18:40:22 +0100
Subject: [PATCH] reactingEulerFoam/phaseSystem: Create an ordered container
 for phaseModels The previous method using a HashTable required a separate
 ordered list of names which is hard to work with and maintain.

---
 .../multiphaseMixtureThermo.H                 |  4 +-
 .../ThermoPhaseModel/ThermoPhaseModel.C       |  2 +-
 .../phaseModel/phaseModel/phaseModel.C        | 13 ++++
 .../phaseModel/phaseModel/phaseModel.H        | 36 +++++++++-
 .../phaseSystems/phaseSystem/phaseSystem.C    | 66 ++++++-------------
 .../phaseSystems/phaseSystem/phaseSystem.H    | 32 ++++-----
 .../phaseSystems/phaseSystem/phaseSystemI.H   | 14 ++++
 .../phaseSystem/phaseSystemTemplates.H        |  6 +-
 .../reactingTwoPhaseEulerFoam/createFields.H  |  1 -
 .../twoPhaseSystem/twoPhaseSystem.C           |  7 +-
 .../DictionaryBase/DictionaryBase.H           |  3 +-
 .../PtrDictionary/PtrDictionary.H             | 17 ++++-
 .../LinkedLists/accessTypes/LList/LList.H     | 33 +++++++++-
 .../LinkedLists/accessTypes/UILList/UILList.H | 53 +++++++++++++++
 .../linkTypes/DLListBase/DLListBase.H         |  3 +-
 .../containers/LinkedLists/user/DLPtrList.H   |  8 +--
 16 files changed, 214 insertions(+), 84 deletions(-)

diff --git a/applications/solvers/multiphase/compressibleMultiphaseInterFoam/multiphaseMixtureThermo/multiphaseMixtureThermo.H b/applications/solvers/multiphase/compressibleMultiphaseInterFoam/multiphaseMixtureThermo/multiphaseMixtureThermo.H
index 6d797d16c5b..a769a459144 100644
--- a/applications/solvers/multiphase/compressibleMultiphaseInterFoam/multiphaseMixtureThermo/multiphaseMixtureThermo.H
+++ b/applications/solvers/multiphase/compressibleMultiphaseInterFoam/multiphaseMixtureThermo/multiphaseMixtureThermo.H
@@ -254,14 +254,14 @@ public:
             virtual volScalarField& he()
             {
                 notImplemented("multiphaseMixtureThermo::he()");
-                return phases_[0]->thermo().he();
+                return phases_[0].thermo().he();
             }
 
             //- Enthalpy/Internal energy [J/kg]
             virtual const volScalarField& he() const
             {
                 notImplemented("multiphaseMixtureThermo::he() const");
-                return phases_[0]->thermo().he();
+                return phases_[0].thermo().he();
             }
 
             //- Enthalpy/Internal energy
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/ThermoPhaseModel/ThermoPhaseModel.C b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/ThermoPhaseModel/ThermoPhaseModel.C
index e79a9469fd5..72aef43d2af 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/ThermoPhaseModel/ThermoPhaseModel.C
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/ThermoPhaseModel/ThermoPhaseModel.C
@@ -50,7 +50,7 @@ Foam::ThermoPhaseModel<BasePhaseModel, ThermoType>::ThermoPhaseModel
     {
         thermoPtr_.set
         (
-            ThermoType::New(fluid.mesh(), phaseName).ptr()
+            ThermoType::New(fluid.mesh(), this->name()).ptr()
         );
 
         thermo_ = thermoPtr_.ptr();
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/phaseModel/phaseModel.C b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/phaseModel/phaseModel.C
index 2fbd56db2f5..b0a54fa5823 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/phaseModel/phaseModel.C
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/phaseModel/phaseModel.C
@@ -72,6 +72,13 @@ Foam::phaseModel::phaseModel
 }
 
 
+Foam::autoPtr<Foam::phaseModel> Foam::phaseModel::clone() const
+{
+    notImplemented("phaseModel::clone() const");
+    return autoPtr<phaseModel>(NULL);
+}
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
 Foam::phaseModel::~phaseModel()
@@ -86,6 +93,12 @@ const Foam::word& Foam::phaseModel::name() const
 }
 
 
+const Foam::word& Foam::phaseModel::keyword() const
+{
+    return name_;
+}
+
+
 const Foam::phaseSystem& Foam::phaseModel::fluid() const
 {
     return fluid_;
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/phaseModel/phaseModel.H b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/phaseModel/phaseModel.H
index dc1de338f84..d5e50410c53 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/phaseModel/phaseModel.H
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/phaseModel/phaseModel.H
@@ -107,9 +107,8 @@ public:
             const word& phaseName
         );
 
-
-    //- Destructor
-    virtual ~phaseModel();
+        //- Return clone
+        autoPtr<phaseModel> clone() const;
 
 
     // Selectors
@@ -120,12 +119,43 @@ public:
             const word& phaseName
         );
 
+        //- Return a pointer to a new phase created on freestore
+        //  from Istream
+        class iNew
+        {
+            const phaseSystem& fluid_;
+
+        public:
+
+            iNew
+            (
+                const phaseSystem& fluid
+            )
+            :
+                fluid_(fluid)
+            {}
+
+            autoPtr<phaseModel> operator()(Istream& is) const
+            {
+                return autoPtr<phaseModel>
+                (
+                    phaseModel::New(fluid_, word(is))
+                );
+            }
+        };
+
+
+    //- Destructor
+    virtual ~phaseModel();
+
 
     // Member Functions
 
         //- Return the name of this phase
         const word& name() const;
 
+        const word& keyword() const;
+
         //- Return the system to which this phase belongs
         const phaseSystem& fluid() const;
 
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystem.C b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystem.C
index 97f139c57cb..3c5dafdfa6d 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystem.C
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystem.C
@@ -41,31 +41,7 @@ const Foam::word Foam::phaseSystem::propertiesName("phaseProperties");
 
 // * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * * //
 
-Foam::phaseSystem::phaseModelTable
-Foam::phaseSystem::generatePhaseModels(const wordList& phaseNames) const
-{
-    phaseModelTable phaseModels;
-
-    forAllConstIter(wordList, phaseNames, phaseNameIter)
-    {
-        phaseModels.insert
-        (
-            *phaseNameIter,
-            phaseModel::New
-            (
-                *this,
-                *phaseNameIter
-            )
-        );
-    }
-
-    // normalise ?
-
-    return phaseModels;
-}
-
-
-Foam::tmp<Foam::surfaceScalarField> Foam::phaseSystem::generatePhi
+Foam::tmp<Foam::surfaceScalarField> Foam::phaseSystem::calcPhi
 (
     const phaseModelTable& phaseModels
 ) const
@@ -77,7 +53,7 @@ Foam::tmp<Foam::surfaceScalarField> Foam::phaseSystem::generatePhi
         new surfaceScalarField
         (
             "phi",
-            fvc::interpolate(phaseModelIter()())*phaseModelIter()->phi()
+            fvc::interpolate(phaseModelIter())*phaseModelIter().phi()
         )
     );
 
@@ -86,8 +62,8 @@ Foam::tmp<Foam::surfaceScalarField> Foam::phaseSystem::generatePhi
     for (; phaseModelIter != phaseModels.end(); ++ phaseModelIter)
     {
         tmpPhi() +=
-            fvc::interpolate(phaseModelIter()())
-           *phaseModelIter()->phi();
+            fvc::interpolate(phaseModelIter())
+           *phaseModelIter().phi();
     }
 
     return tmpPhi;
@@ -167,11 +143,9 @@ Foam::phaseSystem::phaseSystem
 
     mesh_(mesh),
 
-    phaseNames_(lookup("phases")),
-
-    phaseModels_(generatePhaseModels(phaseNames_)),
+    phaseModels_(lookup("phases"), phaseModel::iNew(*this)),
 
-    phi_(generatePhi(phaseModels_)),
+    phi_(calcPhi(phaseModels_)),
 
     dpdt_
     (
@@ -197,7 +171,7 @@ Foam::phaseSystem::phaseSystem
             blendingMethod::New
             (
                 iter().dict(),
-                wordList(lookup("phases"))
+                phaseModels_.toc()
             )
         );
     }
@@ -224,12 +198,12 @@ Foam::tmp<Foam::volScalarField> Foam::phaseSystem::rho() const
 
     tmp<volScalarField> tmpRho
     (
-        phaseModelIter()()*phaseModelIter()->rho()
+        phaseModelIter()*phaseModelIter().rho()
     );
 
     for (; phaseModelIter != phaseModels_.end(); ++ phaseModelIter)
     {
-        tmpRho() += phaseModelIter()()*phaseModelIter()->rho();
+        tmpRho() += phaseModelIter()*phaseModelIter().rho();
     }
 
     return tmpRho;
@@ -242,12 +216,12 @@ Foam::tmp<Foam::volVectorField> Foam::phaseSystem::U() const
 
     tmp<volVectorField> tmpU
     (
-        phaseModelIter()()*phaseModelIter()->U()
+        phaseModelIter()*phaseModelIter().U()
     );
 
     for (; phaseModelIter != phaseModels_.end(); ++ phaseModelIter)
     {
-        tmpU() += phaseModelIter()()*phaseModelIter()->U();
+        tmpU() += phaseModelIter()*phaseModelIter().U();
     }
 
     return tmpU;
@@ -292,7 +266,7 @@ void Foam::phaseSystem::correct()
 {
     forAllIter(phaseModelTable, phaseModels_, phaseModelIter)
     {
-        phaseModelIter()->correct();
+        phaseModelIter().correct();
     }
 }
 
@@ -303,15 +277,17 @@ void Foam::phaseSystem::correctKinematics()
 
     forAllIter(phaseModelTable, phaseModels_, phaseModelIter)
     {
-        phaseModelIter()->correctKinematics();
+        phaseModelIter().correctKinematics();
 
-        updateDpdt = updateDpdt || phaseModelIter()->thermo().dpdt();
+        updateDpdt = updateDpdt || phaseModelIter().thermo().dpdt();
     }
 
+    //phaseModelTable::iterator iter = phaseModels_.begin();
+
     // Update the pressure time-derivative if required
     if (updateDpdt)
     {
-        dpdt_ = fvc::ddt(phaseModels_.begin()()().thermo().p());
+        dpdt_ = fvc::ddt(phaseModels_.begin()()->thermo().p());
     }
 }
 
@@ -320,7 +296,7 @@ void Foam::phaseSystem::correctThermo()
 {
     forAllIter(phaseModelTable, phaseModels_, phaseModelIter)
     {
-        phaseModelIter()->correctThermo();
+        phaseModelIter().correctThermo();
     }
 }
 
@@ -329,7 +305,7 @@ void Foam::phaseSystem::correctTurbulence()
 {
     forAllIter(phaseModelTable, phaseModels_, phaseModelIter)
     {
-        phaseModelIter()->correctTurbulence();
+        phaseModelIter().correctTurbulence();
     }
 }
 
@@ -338,7 +314,7 @@ void Foam::phaseSystem::correctEnergyTransport()
 {
     forAllIter(phaseModelTable, phaseModels_, phaseModelIter)
     {
-        phaseModelIter()->correctEnergyTransport();
+        phaseModelIter().correctEnergyTransport();
     }
 }
 
@@ -351,7 +327,7 @@ bool Foam::phaseSystem::read()
 
         forAllIter(phaseModelTable, phaseModels_, phaseModelIter)
         {
-            readOK &= phaseModelIter()->read();
+            readOK &= phaseModelIter().read();
         }
 
         // models ...
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystem.H b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystem.H
index 8f50c5c17a5..84c69aa655c 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystem.H
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystem.H
@@ -42,6 +42,7 @@ SourceFiles
 #include "phasePair.H"
 #include "orderedPhasePair.H"
 #include "HashPtrTable.H"
+#include "PtrDictionary.H"
 
 #include "IOMRFZoneList.H"
 #include "fvIOoptionList.H"
@@ -117,15 +118,17 @@ public:
             >
             massTransferTable;
 
+        // typedef
+        //     HashTable<autoPtr<phaseModel>, word, word::hash>
+        //     phaseModelTable;
+
+        typedef PtrDictionary<phaseModel> phaseModelTable;
+
 
 protected:
 
     // Protected typedefs
 
-        typedef
-            HashTable<autoPtr<phaseModel>, word, word::hash>
-            phaseModelTable;
-
         typedef
             HashTable<dictionary, phasePairKey, phasePairKey::hash>
             dictTable;
@@ -162,9 +165,6 @@ protected:
         //- Reference to the mesh
         const fvMesh& mesh_;
 
-        //- Phase names
-        wordList phaseNames_;
-
         //- Phase models
         phaseModelTable phaseModels_;
 
@@ -198,16 +198,10 @@ protected:
 
     // Protected member functions
 
-        //- Generate the phases
-        HashTable<autoPtr<phaseModel> > generatePhaseModels
+        //- Calculate and return the mixture flux
+        tmp<surfaceScalarField> calcPhi
         (
-            const wordList& names
-        ) const;
-
-        //- Generate the mixture flux
-        tmp<surfaceScalarField> generatePhi
-        (
-            const HashTable<autoPtr<phaseModel> >& phaseModels
+            const phaseModelTable& phaseModels
         ) const;
 
         //- Generate pairs
@@ -360,6 +354,12 @@ public:
             //- Constant access the mesh
             inline const fvMesh& mesh() const;
 
+            //- Constant access the phase models
+            inline const phaseModelTable& phases() const;
+
+            //- Access the phase models
+            inline phaseModelTable& phases();
+
             //- Constant access the mixture flux
             inline const surfaceScalarField& phi() const;
 
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystemI.H b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystemI.H
index 3d7e837533a..35b61ab4516 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystemI.H
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystemI.H
@@ -31,6 +31,20 @@ inline const Foam::fvMesh& Foam::phaseSystem::mesh() const
 }
 
 
+inline const Foam::phaseSystem::phaseModelTable&
+Foam::phaseSystem::phases() const
+{
+    return phaseModels_;
+}
+
+
+inline Foam::phaseSystem::phaseModelTable&
+Foam::phaseSystem::phases()
+{
+    return phaseModels_;
+}
+
+
 inline const Foam::surfaceScalarField& Foam::phaseSystem::phi() const
 {
     return phi_;
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystemTemplates.H b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystemTemplates.H
index 48d17166123..40d96f9df7a 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystemTemplates.H
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystemTemplates.H
@@ -151,12 +151,12 @@ void Foam::phaseSystem::generatePairsAndSubModels
         HashTable<autoPtr<modelType>, phasePairKey, phasePairKey::hash>
         modelTypeTable;
 
-    forAllConstIter(wordList, phaseNames_, phaseNameIter)
+    forAllConstIter(phaseModelTable, phaseModels_, phaseModelIter)
     {
         modelTypeTable tempModels;
         generatePairsAndSubModels
         (
-            IOobject::groupName(modelName, *phaseNameIter),
+            IOobject::groupName(modelName, phaseModelIter().name()),
             tempModels
         );
 
@@ -175,7 +175,7 @@ void Foam::phaseSystem::generatePairsAndSubModels
 
             models[tempModelIter.key()].insert
             (
-                *phaseNameIter,
+                phaseModelIter().name(),
                 *tempModelIter
             );
         }
diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/createFields.H b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/createFields.H
index 30b3b0e715e..60d17c251fb 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/createFields.H
+++ b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/createFields.H
@@ -72,7 +72,6 @@ setRefCell
     pRefValue
 );
 mesh.setFluxRequired(p_rgh.name());
-mesh.setFluxRequired(alpha1.name());
 
 const IOMRFZoneList& MRF = fluid.MRF();
 fv::IOoptionList& fvOptions = fluid.fvOptions();
diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystem.C b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystem.C
index caee01b251f..50b79b5672b 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystem.C
+++ b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystem.C
@@ -57,10 +57,13 @@ Foam::twoPhaseSystem::twoPhaseSystem
 )
 :
     phaseSystem(mesh),
-    phase1_(phaseModels_[phaseNames_[0]]()),
-    phase2_(phaseModels_[phaseNames_[1]]())
+    phase1_(phaseModels_.first()),
+    phase2_(phaseModels_.last())
 {
     phase2_.volScalarField::operator=(scalar(1) - phase1_);
+
+    volScalarField& alpha1 = phase1_;
+    mesh.setFluxRequired(alpha1.name());
 }
 
 
diff --git a/src/OpenFOAM/containers/Dictionaries/DictionaryBase/DictionaryBase.H b/src/OpenFOAM/containers/Dictionaries/DictionaryBase/DictionaryBase.H
index 7d788fe4dfe..43634bc93a5 100644
--- a/src/OpenFOAM/containers/Dictionaries/DictionaryBase/DictionaryBase.H
+++ b/src/OpenFOAM/containers/Dictionaries/DictionaryBase/DictionaryBase.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
@@ -146,6 +146,7 @@ public:
             //  and annul the argument.
             void transfer(DictionaryBase<IDLListType, T>&);
 
+
     // Member operators
 
         void operator=(const DictionaryBase&);
diff --git a/src/OpenFOAM/containers/Dictionaries/PtrDictionary/PtrDictionary.H b/src/OpenFOAM/containers/Dictionaries/PtrDictionary/PtrDictionary.H
index efa739d26a2..e6d1a5f999f 100644
--- a/src/OpenFOAM/containers/Dictionaries/PtrDictionary/PtrDictionary.H
+++ b/src/OpenFOAM/containers/Dictionaries/PtrDictionary/PtrDictionary.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
@@ -73,6 +73,21 @@ public:
 
         //- Construct from Istream
         PtrDictionary(Istream&);
+
+
+    // Member operators
+
+        //- Find and return entry
+        const T& operator[](const word& key) const
+        {
+            return *DictionaryBase<DLPtrList<T>, T>::operator[](key);
+        }
+
+        //- Find and return entry
+        T& operator[](const word& key)
+        {
+            return *DictionaryBase<DLPtrList<T>, T>::operator[](key);
+        }
 };
 
 
diff --git a/src/OpenFOAM/containers/LinkedLists/accessTypes/LList/LList.H b/src/OpenFOAM/containers/LinkedLists/accessTypes/LList/LList.H
index 3e4ed069c90..e8a9ff22d4d 100644
--- a/src/OpenFOAM/containers/LinkedLists/accessTypes/LList/LList.H
+++ b/src/OpenFOAM/containers/LinkedLists/accessTypes/LList/LList.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
@@ -203,6 +203,7 @@ public:
             //  and annul the argument list.
             void transfer(LList<LListBase, T>&);
 
+
     // Member operators
 
         void operator=(const LList<LListBase, T>&);
@@ -265,6 +266,16 @@ public:
                 }
         };
 
+        inline iterator begin()
+        {
+            return LListBase::begin();
+        }
+
+        inline const iterator& end()
+        {
+            return static_cast<const iterator&>(LListBase::end());
+        }
+
 
     // STL const_iterator
 
@@ -313,6 +324,26 @@ public:
                 }
         };
 
+        inline const_iterator cbegin() const
+        {
+            return LListBase::cbegin();
+        }
+
+        inline const const_iterator& cend() const
+        {
+            return static_cast<const const_iterator&>(LListBase::cend());
+        }
+
+        inline const_iterator begin() const
+        {
+            return LListBase::begin();
+        }
+
+        inline const const_iterator& end() const
+        {
+            return static_cast<const const_iterator&>(LListBase::end());
+        }
+
 
     // IOstream operators
 
diff --git a/src/OpenFOAM/containers/LinkedLists/accessTypes/UILList/UILList.H b/src/OpenFOAM/containers/LinkedLists/accessTypes/UILList/UILList.H
index 893af004229..b2ec4c8fca4 100644
--- a/src/OpenFOAM/containers/LinkedLists/accessTypes/UILList/UILList.H
+++ b/src/OpenFOAM/containers/LinkedLists/accessTypes/UILList/UILList.H
@@ -209,6 +209,16 @@ public:
                 }
         };
 
+        inline iterator begin()
+        {
+            return LListBase::begin();
+        }
+
+        inline const iterator& end()
+        {
+            return static_cast<const iterator&>(LListBase::end());
+        }
+
 
     // STL const_iterator
 
@@ -256,6 +266,26 @@ public:
                 }
         };
 
+        inline const_iterator cbegin() const
+        {
+            return LListBase::cbegin();
+        }
+
+        inline const const_iterator& cend() const
+        {
+            return static_cast<const const_iterator&>(LListBase::cend());
+        }
+
+        inline const_iterator begin() const
+        {
+            return LListBase::begin();
+        }
+
+        inline const const_iterator& end() const
+        {
+            return static_cast<const const_iterator&>(LListBase::end());
+        }
+
 
     // STL const_reverse_iterator
 
@@ -298,6 +328,29 @@ public:
                 }
         };
 
+        inline const_reverse_iterator crbegin() const
+        {
+            return LListBase::crbegin();
+        }
+
+        inline const const_reverse_iterator& crend() const
+        {
+            return
+                static_cast<const const_reverse_iterator&>(LListBase::crend());
+        }
+
+
+        inline const_reverse_iterator rbegin() const
+        {
+            return LListBase::rbegin();
+        }
+
+        inline const const_reverse_iterator& rend() const
+        {
+            return
+                static_cast<const const_reverse_iterator&>(LListBase::rend());
+        }
+
 
     // STL member operators
 
diff --git a/src/OpenFOAM/containers/LinkedLists/linkTypes/DLListBase/DLListBase.H b/src/OpenFOAM/containers/LinkedLists/linkTypes/DLListBase/DLListBase.H
index 095e51fe1ff..0e7fc75aa80 100644
--- a/src/OpenFOAM/containers/LinkedLists/linkTypes/DLListBase/DLListBase.H
+++ b/src/OpenFOAM/containers/LinkedLists/linkTypes/DLListBase/DLListBase.H
@@ -263,6 +263,7 @@ public:
         inline const_iterator begin() const;
         inline const const_iterator& end() const;
 
+
     // STL const_reverse_iterator
 
         //- An STL-conforming const_reverse_iterator
@@ -300,6 +301,7 @@ public:
         inline const_reverse_iterator rbegin() const;
         inline const const_reverse_iterator& rend() const;
 
+
 private:
 
         //- Iterator returned by end()
@@ -310,7 +312,6 @@ private:
 
         //- const_reverse_iterator returned by end()
         static const_reverse_iterator endConstRevIter_;
-
 };
 
 
diff --git a/src/OpenFOAM/containers/LinkedLists/user/DLPtrList.H b/src/OpenFOAM/containers/LinkedLists/user/DLPtrList.H
index 6e83434125e..9793d8be9f0 100644
--- a/src/OpenFOAM/containers/LinkedLists/user/DLPtrList.H
+++ b/src/OpenFOAM/containers/LinkedLists/user/DLPtrList.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
@@ -58,12 +58,6 @@ public:
         DLPtrList()
         {}
 
-        //- Construct given initial T
-        DLPtrList(T a)
-        :
-            LPtrList<DLListBase, T>(a)
-        {}
-
         //- Construct from Istream using given Istream constructor class
         template<class INew>
         DLPtrList(Istream& is, const INew& inewt)
-- 
GitLab