From a20caaa2affd3fa8bd0aad15e01c6605dc29c9f9 Mon Sep 17 00:00:00 2001
From: mattijs <mattijs>
Date: Fri, 22 Jul 2011 10:34:34 +0100
Subject: [PATCH] ENH:molecule: reverted to old molecule.

Removed MoleculeCloud, controllers, monoatomic, polyatomic molecules
---
 .../Templates/MoleculeCloud/MoleculeCloud.C   | 1265 -----------------
 .../Templates/MoleculeCloud/MoleculeCloud.H   |  252 ----
 .../Templates/MoleculeCloud/MoleculeCloudI.H  |  416 ------
 .../baseClasses/moleculeCloud/moleculeCloud.C |   48 -
 .../baseClasses/moleculeCloud/moleculeCloud.H |   83 --
 .../derived/monoatomicCloud/monoatomicCloud.H |   52 -
 .../derived/polyatomicCloud/polyatomicCloud.H |   52 -
 .../basic/controllers/controllers.C           |  573 --------
 .../basic/controllers/controllers.H           |  163 ---
 .../basic/controllers/controllersI.H          |   64 -
 .../basic/fluxController/fluxController.C     |  524 -------
 .../basic/fluxController/fluxController.H     |  272 ----
 .../basic/stateController/stateController.C   |  490 -------
 .../basic/stateController/stateController.H   |  270 ----
 .../molecules/constPropSite/constPropSite.C   |  114 --
 .../molecules/constPropSite/constPropSite.H   |  185 ---
 .../molecules/constPropSite/constPropSiteI.H  |  139 --
 .../molecules/monoatomic/monoatomic.C         |  199 ---
 .../molecules/monoatomic/monoatomic.H         |  418 ------
 .../molecules/monoatomic/monoatomicI.H        |  328 -----
 .../molecules/monoatomic/monoatomicIO.C       |  305 ----
 .../molecules/polyatomic/polyatomic.C         |  320 -----
 .../molecules/polyatomic/polyatomic.H         |  483 -------
 .../molecules/polyatomic/polyatomicI.H        |  653 ---------
 .../molecules/polyatomic/polyatomicIO.C       |  414 ------
 25 files changed, 8082 deletions(-)
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/clouds/Templates/MoleculeCloud/MoleculeCloud.C
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/clouds/Templates/MoleculeCloud/MoleculeCloud.H
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/clouds/Templates/MoleculeCloud/MoleculeCloudI.H
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/clouds/baseClasses/moleculeCloud/moleculeCloud.C
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/clouds/baseClasses/moleculeCloud/moleculeCloud.H
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/clouds/derived/monoatomicCloud/monoatomicCloud.H
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/clouds/derived/polyatomicCloud/polyatomicCloud.H
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/controllers/basic/controllers/controllers.C
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/controllers/basic/controllers/controllers.H
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/controllers/basic/controllers/controllersI.H
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/controllers/basic/fluxController/fluxController.C
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/controllers/basic/fluxController/fluxController.H
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/controllers/basic/stateController/stateController.C
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/controllers/basic/stateController/stateController.H
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/molecules/constPropSite/constPropSite.C
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/molecules/constPropSite/constPropSite.H
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/molecules/constPropSite/constPropSiteI.H
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/molecules/monoatomic/monoatomic.C
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/molecules/monoatomic/monoatomic.H
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/molecules/monoatomic/monoatomicI.H
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/molecules/monoatomic/monoatomicIO.C
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/molecules/polyatomic/polyatomic.C
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/molecules/polyatomic/polyatomic.H
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/molecules/polyatomic/polyatomicI.H
 delete mode 100644 src/lagrangian/molecularDynamics/molecule/molecules/polyatomic/polyatomicIO.C

diff --git a/src/lagrangian/molecularDynamics/molecule/clouds/Templates/MoleculeCloud/MoleculeCloud.C b/src/lagrangian/molecularDynamics/molecule/clouds/Templates/MoleculeCloud/MoleculeCloud.C
deleted file mode 100644
index c6d54036f7e..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/clouds/Templates/MoleculeCloud/MoleculeCloud.C
+++ /dev/null
@@ -1,1265 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2008-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-\*----------------------------------------------------------------------------*/
-
-#include "MoleculeCloud.H"
-#include "fvMesh.H"
-#include "mathematicalConstants.H"
-
-using namespace Foam::constant::mathematical;
-
-
-// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
-
-template<class MoleculeType>
-void Foam::MoleculeCloud<MoleculeType>::buildConstProps()
-{
-    const List<word>& idList(pot_.idList());
-
-    constPropList_.setSize(idList.size());
-
-    const List<word>& siteIdList(pot_.siteIdList());
-
-    IOdictionary molPropertiesDict
-    (
-        IOobject
-        (
-            this->name() + "Properties",
-            mesh_.time().constant(),
-            mesh_,
-            IOobject::MUST_READ_IF_MODIFIED,
-            IOobject::NO_WRITE,
-            false
-        )
-    );
-
-    Info<< nl << "Reading " << molPropertiesDict.name() << endl;
-
-    forAll(idList, i)
-    {
-        const word& id = idList[i];
-
-        const dictionary& molDict(molPropertiesDict.subDict(id));
-
-        List<word> siteIdNames = molDict.lookup("siteIds");
-
-        List<label> siteIds(siteIdNames.size());
-
-        forAll(siteIdNames, sI)
-        {
-            const word& siteId = siteIdNames[sI];
-
-            siteIds[sI] = findIndex(siteIdList, siteId);
-
-            if (siteIds[sI] == -1)
-            {
-                FatalErrorIn
-                (
-                    "void Foam::MoleculeCloud<MoleculeType>::buildConstProps()"
-                )
-                    << siteId << " site not found."
-                    << nl << abort(FatalError);
-            }
-        }
-
-        constPropList_[i] = typename MoleculeType::constantProperties
-        (
-            molDict,
-            siteIds
-        );
-    }
-}
-
-
-template<class MoleculeType>
-void Foam::MoleculeCloud<MoleculeType>::setSiteSizesAndPositions()
-{
-    forAllIter(typename MoleculeCloud<MoleculeType>, *this, mol)
-    {
-        const typename MoleculeType::constantProperties& cP
-        (
-            constProps(mol().id())
-        );
-
-        mol().setSiteSizes(cP.nSites());
-
-        mol().setSitePositions(cP);
-    }
-}
-
-
-template<class MoleculeType>
-void Foam::MoleculeCloud<MoleculeType>::buildCellOccupancy()
-{
-    forAll(cellOccupancy_, cO)
-    {
-        cellOccupancy_[cO].clear();
-    }
-
-    forAllIter(typename MoleculeCloud<MoleculeType>, *this, mol)
-    {
-        cellOccupancy_[mol().cell()].append(&mol());
-    }
-
-    forAll(cellOccupancy_, cO)
-    {
-        cellOccupancy_[cO].shrink();
-    }
-}
-
-
-template<class MoleculeType>
-void Foam::MoleculeCloud<MoleculeType>::calculatePairForce()
-{
-    PstreamBuffers pBufs(Pstream::nonBlocking);
-
-    // Start sending referred data
-    il_.sendReferredData(cellOccupancy(), pBufs);
-
-    MoleculeType* molI = NULL;
-    MoleculeType* molJ = NULL;
-
-    {
-        // Real-Real interactions
-
-        const labelListList& dil = il_.dil();
-
-        forAll(dil, d)
-        {
-            forAll(cellOccupancy_[d],cellIMols)
-            {
-                molI = cellOccupancy_[d][cellIMols];
-
-                forAll(dil[d], interactingCells)
-                {
-                    List<MoleculeType*> cellJ =
-                        cellOccupancy_[dil[d][interactingCells]];
-
-                    forAll(cellJ, cellJMols)
-                    {
-                        molJ = cellJ[cellJMols];
-
-                        evaluatePair(*molI, *molJ);
-                    }
-                }
-
-                forAll(cellOccupancy_[d], cellIOtherMols)
-                {
-                    molJ = cellOccupancy_[d][cellIOtherMols];
-
-                    if (molJ > molI)
-                    {
-                        evaluatePair(*molI, *molJ);
-                    }
-                }
-            }
-        }
-    }
-
-    // Receive referred data
-    il_.receiveReferredData(pBufs);
-
-    {
-        // Real-Referred interactions
-
-        const labelListList& ril = il_.ril();
-
-        List<IDLList<MoleculeType> >& referredMols = il_.referredParticles();
-
-        forAll(ril, r)
-        {
-            const List<label>& realCells = ril[r];
-
-            IDLList<MoleculeType>& refMols = referredMols[r];
-
-            forAllIter
-            (
-                typename IDLList<MoleculeType>,
-                refMols,
-                refMol
-            )
-            {
-                forAll(realCells, rC)
-                {
-                    List<MoleculeType*> cellI = cellOccupancy_[realCells[rC]];
-
-                    forAll(cellI, cellIMols)
-                    {
-                        molI = cellI[cellIMols];
-
-                        evaluatePair(*molI, refMol());
-                    }
-                }
-            }
-        }
-    }
-}
-
-
-template<class MoleculeType>
-void Foam::MoleculeCloud<MoleculeType>::calculateTetherForce()
-{
-    const tetherPotentialList& tetherPot(pot_.tetherPotentials());
-
-    forAllIter(typename MoleculeCloud<MoleculeType>, *this, mol)
-    {
-        if (mol().tethered())
-        {
-            vector rIT = mol().position() - mol().specialPosition();
-
-            label idI = mol().id();
-
-            scalar massI = constProps(idI).mass();
-
-            vector fIT = tetherPot.force(idI, rIT);
-
-            mol().a() += fIT/massI;
-
-            mol().potentialEnergy() += tetherPot.energy(idI, rIT);
-
-            // What to do here?
-            // mol().rf() += rIT*fIT;
-        }
-    }
-}
-
-
-template<class MoleculeType>
-void Foam::MoleculeCloud<MoleculeType>::calculateExternalForce()
-{
-    forAllIter(typename MoleculeCloud<MoleculeType>, *this, mol)
-    {
-        mol().a() += pot_.gravity();
-    }
-}
-
-
-template<class MoleculeType>
-void Foam::MoleculeCloud<MoleculeType>::removeHighEnergyOverlaps()
-{
-    Info<< nl << "Removing high energy overlaps, limit = "
-        << pot_.potentialEnergyLimit()
-        << nl << "Removal order:";
-
-    forAll(pot_.removalOrder(), rO)
-    {
-        Info<< ' ' << pot_.idList()[pot_.removalOrder()[rO]];
-    }
-
-    Info<< nl ;
-
-    label initialSize = this->size();
-
-    buildCellOccupancy();
-
-    // Real-Real interaction
-
-    MoleculeType* molI = NULL;
-    MoleculeType* molJ = NULL;
-
-    {
-        DynamicList<MoleculeType*> molsToDelete;
-
-        const labelListList& dil(il_.dil());
-
-        forAll(dil, d)
-        {
-            forAll(cellOccupancy_[d], cellIMols)
-            {
-                molI = cellOccupancy_[d][cellIMols];
-
-                forAll(dil[d], interactingCells)
-                {
-                    List<MoleculeType*> cellJ =
-                        cellOccupancy_[dil[d][interactingCells]];
-
-                    forAll(cellJ, cellJMols)
-                    {
-                        molJ = cellJ[cellJMols];
-
-                        if (evaluatePotentialLimit(*molI, *molJ))
-                        {
-                            label idI = molI->id();
-
-                            label idJ = molJ->id();
-
-                            if
-                            (
-                                idI == idJ
-                             || findIndex(pot_.removalOrder(), idJ)
-                              < findIndex(pot_.removalOrder(), idI)
-                            )
-                            {
-                                if (findIndex(molsToDelete, molJ) == -1)
-                                {
-                                    molsToDelete.append(molJ);
-                                }
-                            }
-                            else if (findIndex(molsToDelete, molI) == -1)
-                            {
-                                molsToDelete.append(molI);
-                            }
-                        }
-                    }
-                }
-
-                forAll(cellOccupancy_[d], cellIOtherMols)
-                {
-                    molJ = cellOccupancy_[d][cellIOtherMols];
-
-                    if (molJ > molI)
-                    {
-                        if (evaluatePotentialLimit(*molI, *molJ))
-                        {
-                            label idI = molI->id();
-
-                            label idJ = molJ->id();
-
-                            if
-                            (
-                                idI == idJ
-                             || findIndex(pot_.removalOrder(), idJ)
-                              < findIndex(pot_.removalOrder(), idI)
-                            )
-                            {
-                                if (findIndex(molsToDelete, molJ) == -1)
-                                {
-                                    molsToDelete.append(molJ);
-                                }
-                            }
-                            else if (findIndex(molsToDelete, molI) == -1)
-                            {
-                                molsToDelete.append(molI);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        forAll(molsToDelete, mTD)
-        {
-            deleteParticle(*(molsToDelete[mTD]));
-        }
-    }
-
-    buildCellOccupancy();
-
-    PstreamBuffers pBufs(Pstream::nonBlocking);
-
-    // Start sending referred data
-    il_.sendReferredData(cellOccupancy(), pBufs);
-
-        // Receive referred data
-    il_.receiveReferredData(pBufs);
-
-    // Real-Referred interaction
-
-    {
-        DynamicList<MoleculeType*> molsToDelete;
-
-        const labelListList& ril(il_.ril());
-
-        List<IDLList<MoleculeType> >& referredMols = il_.referredParticles();
-
-        forAll(ril, r)
-        {
-            IDLList<MoleculeType>& refMols = referredMols[r];
-
-            forAllIter
-            (
-                typename IDLList<MoleculeType>,
-                refMols,
-                refMol
-            )
-            {
-                molJ = &refMol();
-
-                const List<label>& realCells = ril[r];
-
-                forAll(realCells, rC)
-                {
-                    label cellI = realCells[rC];
-
-                    List<MoleculeType*> cellIMols = cellOccupancy_[cellI];
-
-                    forAll(cellIMols, cIM)
-                    {
-                        molI = cellIMols[cIM];
-
-                        if (evaluatePotentialLimit(*molI, *molJ))
-                        {
-                            label idI = molI->id();
-
-                            label idJ = molJ->id();
-
-                            if
-                            (
-                                findIndex(pot_.removalOrder(), idI)
-                              < findIndex(pot_.removalOrder(), idJ)
-                            )
-                            {
-                                if (findIndex(molsToDelete, molI) == -1)
-                                {
-                                    molsToDelete.append(molI);
-                                }
-                            }
-                            else if
-                            (
-                                findIndex(pot_.removalOrder(), idI)
-                             == findIndex(pot_.removalOrder(), idJ)
-                            )
-                            {
-                                // Remove one of the molecules
-                                // arbitrarily, assuring that a
-                                // consistent decision is made for
-                                // both real-referred pairs.
-
-                                if (molI->origId() > molJ->origId())
-                                {
-                                    if (findIndex(molsToDelete, molI) == -1)
-                                    {
-                                        molsToDelete.append(molI);
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        forAll(molsToDelete, mTD)
-        {
-            deleteParticle(*(molsToDelete[mTD]));
-        }
-    }
-
-    buildCellOccupancy();
-
-    // Start sending referred data
-    il_.sendReferredData(cellOccupancy(), pBufs);
-
-    // Receive referred data
-    il_.receiveReferredData(pBufs);
-
-    label molsRemoved = initialSize - this->size();
-
-    if (Pstream::parRun())
-    {
-        reduce(molsRemoved, sumOp<label>());
-    }
-
-    Info<< tab << molsRemoved << " molecules removed" << endl;
-}
-
-
-template<class MoleculeType>
-void Foam::MoleculeCloud<MoleculeType>::initialiseMolecules
-(
-    const dictionary& mdInitialiseDict
-)
-{
-    Info<< nl
-        << "Initialising molecules in each zone specified in "
-        << mdInitialiseDict.name()
-        << endl;
-
-    const cellZoneMesh& cellZones = mesh_.cellZones();
-
-    if (!cellZones.size())
-    {
-        FatalErrorIn
-        (
-            "void Foam::MoleculeCloud<MoleculeType>::initialiseMolecules"
-        )
-            << "No cellZones found in the mesh."
-            << abort(FatalError);
-    }
-
-    forAll(cellZones, z)
-    {
-        const cellZone& zone(cellZones[z]);
-
-        if (zone.size())
-        {
-            if (!mdInitialiseDict.found(zone.name()))
-            {
-                Info<< "No specification subDictionary for zone "
-                    << zone.name() << " found, skipping." << endl;
-            }
-            else
-            {
-                const dictionary& zoneDict =
-                    mdInitialiseDict.subDict(zone.name());
-
-                const scalar temperature
-                (
-                    readScalar(zoneDict.lookup("temperature"))
-                );
-
-                const vector bulkVelocity(zoneDict.lookup("bulkVelocity"));
-
-                List<word> latticeIds
-                (
-                    zoneDict.lookup("latticeIds")
-                );
-
-                List<vector> latticePositions
-                (
-                    zoneDict.lookup("latticePositions")
-                );
-
-                if (latticeIds.size() != latticePositions.size())
-                {
-                    FatalErrorIn
-                    (
-                        "Foam::MoleculeCloud<MoleculeType>::initialiseMolecules"
-                    )
-                        << "latticeIds and latticePositions must be the same "
-                        << " size." << nl
-                        << abort(FatalError);
-                }
-
-                diagTensor latticeCellShape
-                (
-                    zoneDict.lookup("latticeCellShape")
-                );
-
-                scalar latticeCellScale = 0.0;
-
-                if (zoneDict.found("numberDensity"))
-                {
-                    scalar numberDensity = readScalar
-                    (
-                        zoneDict.lookup("numberDensity")
-                    );
-
-                    if (numberDensity < VSMALL)
-                    {
-                        WarningIn
-                        (
-                            "MoleculeCloud<MoleculeType>::initialiseMolecules"
-                        )
-                            << "numberDensity too small, not filling zone "
-                            << zone.name() << endl;
-
-                        continue;
-                    }
-
-                    latticeCellScale = pow
-                    (
-                        latticeIds.size()/(det(latticeCellShape)*numberDensity),
-                        (1.0/3.0)
-                    );
-                }
-                else if (zoneDict.found("massDensity"))
-                {
-                    scalar unitCellMass = 0.0;
-
-                    forAll(latticeIds, i)
-                    {
-                        label id = findIndex(pot_.idList(), latticeIds[i]);
-
-                        const typename MoleculeType::constantProperties& cP
-                        (
-                            constProps(id)
-                        );
-
-                        unitCellMass += cP.mass();
-                    }
-
-                    scalar massDensity = readScalar
-                    (
-                        zoneDict.lookup("massDensity")
-                    );
-
-                    if (massDensity < VSMALL)
-                    {
-                        WarningIn
-                        (
-                            "MoleculeCloud<MoleculeType>::initialiseMolecules"
-                        )
-                            << "massDensity too small, not filling zone "
-                            << zone.name() << endl;
-
-                        continue;
-                    }
-
-                    latticeCellScale = pow
-                    (
-                        unitCellMass/(det(latticeCellShape)*massDensity),
-                        (1.0/3.0)
-                    );
-                }
-                else
-                {
-                    FatalErrorIn
-                    (
-                        "Foam::MoleculeCloud<MoleculeType>::initialiseMolecules"
-                    )
-                        << "massDensity or numberDensity not specified " << nl
-                        << abort(FatalError);
-                }
-
-                latticeCellShape *= latticeCellScale;
-
-                vector anchor(zoneDict.lookup("anchor"));
-
-                bool tethered = false;
-
-                if (zoneDict.found("tetherSiteIds"))
-                {
-                    tethered = bool
-                    (
-                        List<word>(zoneDict.lookup("tetherSiteIds")).size()
-                    );
-                }
-
-                const vector orientationAngles
-                (
-                    zoneDict.lookup("orientationAngles")
-                );
-
-                scalar phi(orientationAngles.x()*pi/180.0);
-
-                scalar theta(orientationAngles.y()*pi/180.0);
-
-                scalar psi(orientationAngles.z()*pi/180.0);
-
-                const tensor R
-                (
-                    cos(psi)*cos(phi) - cos(theta)*sin(phi)*sin(psi),
-                    cos(psi)*sin(phi) + cos(theta)*cos(phi)*sin(psi),
-                    sin(psi)*sin(theta),
-                    - sin(psi)*cos(phi) - cos(theta)*sin(phi)*cos(psi),
-                    - sin(psi)*sin(phi) + cos(theta)*cos(phi)*cos(psi),
-                    cos(psi)*sin(theta),
-                    sin(theta)*sin(phi),
-                    - sin(theta)*cos(phi),
-                    cos(theta)
-                );
-
-                // Find the optimal anchor position.  Finding the approximate
-                // mid-point of the zone of cells and snapping to the nearest
-                // lattice location.
-
-                vector zoneMin = VGREAT*vector::one;
-
-                vector zoneMax = -VGREAT*vector::one;
-
-                forAll(zone, cell)
-                {
-                    const point cellCentre = mesh_.cellCentres()[zone[cell]];
-
-                    if (cellCentre.x() > zoneMax.x())
-                    {
-                        zoneMax.x() = cellCentre.x();
-                    }
-                    if (cellCentre.x() < zoneMin.x())
-                    {
-                        zoneMin.x() = cellCentre.x();
-                    }
-                    if (cellCentre.y() > zoneMax.y())
-                    {
-                        zoneMax.y() = cellCentre.y();
-                    }
-                    if (cellCentre.y() < zoneMin.y())
-                    {
-                        zoneMin.y() = cellCentre.y();
-                    }
-                    if (cellCentre.z() > zoneMax.z())
-                    {
-                        zoneMax.z() = cellCentre.z();
-                    }
-                    if (cellCentre.z() < zoneMin.z())
-                    {
-                        zoneMin.z() = cellCentre.z();
-                    }
-                }
-
-                point zoneMid = 0.5*(zoneMin + zoneMax);
-
-                point latticeMid = inv(latticeCellShape) & (R.T()
-                & (zoneMid - anchor));
-
-                point latticeAnchor
-                (
-                    label(latticeMid.x() + 0.5*sign(latticeMid.x())),
-                    label(latticeMid.y() + 0.5*sign(latticeMid.y())),
-                    label(latticeMid.z() + 0.5*sign(latticeMid.z()))
-                );
-
-                anchor += (R & (latticeCellShape & latticeAnchor));
-
-                // Continue trying to place molecule as long as at
-                // least one molecule is placed in each iteration.
-                // The "|| totalZoneMols == 0" condition means that the
-                // algorithm will continue if the origin is outside the
-                // zone.
-
-                label n = 0;
-
-                label totalZoneMols = 0;
-
-                label molsPlacedThisIteration = 0;
-
-                while
-                (
-                    molsPlacedThisIteration != 0
-                 || totalZoneMols == 0
-                )
-                {
-                    label sizeBeforeIteration = this->size();
-
-                    bool partOfLayerInBounds = false;
-
-                    if (n == 0)
-                    {
-                        // Special treatment is required for the first position,
-                        // i.e. iteration zero.
-
-                        labelVector unitCellLatticePosition(0,0,0);
-
-                        forAll(latticePositions, p)
-                        {
-                            label id = findIndex(pot_.idList(), latticeIds[p]);
-
-                            const vector& latticePosition =
-                                vector
-                                (
-                                    unitCellLatticePosition.x(),
-                                    unitCellLatticePosition.y(),
-                                    unitCellLatticePosition.z()
-                                )
-                              + latticePositions[p];
-
-                            point globalPosition =
-                                anchor
-                              + (R & (latticeCellShape & latticePosition));
-
-                            partOfLayerInBounds = mesh_.bounds().contains
-                            (
-                                globalPosition
-                            );
-
-                            label cell = -1;
-                            label tetFace = -1;
-                            label tetPt = -1;
-
-                            mesh_.findCellFacePt
-                            (
-                                globalPosition,
-                                cell,
-                                tetFace,
-                                tetPt
-                            );
-
-                            if (findIndex(zone, cell) != -1)
-                            {
-                                createMolecule
-                                (
-                                    globalPosition,
-                                    cell,
-                                    tetFace,
-                                    tetPt,
-                                    id,
-                                    tethered,
-                                    temperature,
-                                    bulkVelocity
-                                );
-                            }
-                        }
-                    }
-                    else
-                    {
-                        // Place top and bottom caps.
-
-                        labelVector unitCellLatticePosition(0,0,0);
-
-                        for
-                        (
-                            unitCellLatticePosition.z() = -n;
-                            unitCellLatticePosition.z() <= n;
-                            unitCellLatticePosition.z() += 2*n
-                        )
-                        {
-                            for
-                            (
-                                unitCellLatticePosition.y() = -n;
-                                unitCellLatticePosition.y() <= n;
-                                unitCellLatticePosition.y()++
-                            )
-                            {
-                                for
-                                (
-                                    unitCellLatticePosition.x() = -n;
-                                    unitCellLatticePosition.x() <= n;
-                                    unitCellLatticePosition.x()++
-                                )
-                                {
-                                    forAll(latticePositions, p)
-                                    {
-                                        label id = findIndex
-                                        (
-                                            pot_.idList(),
-                                            latticeIds[p]
-                                        );
-
-                                        const vector& latticePosition =
-                                            vector
-                                            (
-                                                unitCellLatticePosition.x(),
-                                                unitCellLatticePosition.y(),
-                                                unitCellLatticePosition.z()
-                                            )
-                                          + latticePositions[p];
-
-                                        point globalPosition =
-                                            anchor
-                                          + (
-                                                R
-                                              & (
-                                                    latticeCellShape
-                                                  & latticePosition
-                                                )
-                                            );
-
-                                        partOfLayerInBounds =
-                                            mesh_.bounds().contains
-                                            (
-                                                globalPosition
-                                            );
-
-                                        label cell = -1;
-                                        label tetFace = -1;
-                                        label tetPt = -1;
-
-                                        mesh_.findCellFacePt
-                                        (
-                                            globalPosition,
-                                            cell,
-                                            tetFace,
-                                            tetPt
-                                        );
-
-                                        if (findIndex(zone, cell) != -1)
-                                        {
-                                            createMolecule
-                                            (
-                                                globalPosition,
-                                                cell,
-                                                tetFace,
-                                                tetPt,
-                                                id,
-                                                tethered,
-                                                temperature,
-                                                bulkVelocity
-                                            );
-                                        }
-                                    }
-                                }
-                            }
-                        }
-
-                        for
-                        (
-                            unitCellLatticePosition.z() = -(n-1);
-                            unitCellLatticePosition.z() <= (n-1);
-                            unitCellLatticePosition.z()++
-                        )
-                        {
-                            for (label iR = 0; iR <= 2*n -1; iR++)
-                            {
-                                unitCellLatticePosition.x() = n;
-
-                                unitCellLatticePosition.y() = -n + (iR + 1);
-
-                                for (label iK = 0; iK < 4; iK++)
-                                {
-                                    forAll(latticePositions, p)
-                                    {
-                                        label id = findIndex
-                                        (
-                                            pot_.idList(),
-                                            latticeIds[p]
-                                        );
-
-                                        const vector& latticePosition =
-                                            vector
-                                            (
-                                                unitCellLatticePosition.x(),
-                                                unitCellLatticePosition.y(),
-                                                unitCellLatticePosition.z()
-                                            )
-                                          + latticePositions[p];
-
-                                        point globalPosition =
-                                            anchor
-                                          + (
-                                                R
-                                              & (
-                                                   latticeCellShape
-                                                 & latticePosition
-                                                )
-                                            );
-
-                                        partOfLayerInBounds =
-                                            mesh_.bounds().contains
-                                            (
-                                                globalPosition
-                                            );
-
-                                        label cell = -1;
-                                        label tetFace = -1;
-                                        label tetPt = -1;
-
-                                        mesh_.findCellFacePt
-                                        (
-                                            globalPosition,
-                                            cell,
-                                            tetFace,
-                                            tetPt
-                                        );
-
-                                        if (findIndex(zone, cell) != -1)
-                                        {
-                                            createMolecule
-                                            (
-                                                globalPosition,
-                                                cell,
-                                                tetFace,
-                                                tetPt,
-                                                id,
-                                                tethered,
-                                                temperature,
-                                                bulkVelocity
-                                            );
-                                        }
-                                    }
-
-                                    unitCellLatticePosition =
-                                        labelVector
-                                        (
-                                          - unitCellLatticePosition.y(),
-                                            unitCellLatticePosition.x(),
-                                            unitCellLatticePosition.z()
-                                        );
-                                }
-                            }
-                        }
-                    }
-
-                    if
-                    (
-                        totalZoneMols == 0
-                     && !partOfLayerInBounds
-                    )
-                    {
-                        WarningIn
-                        (
-                            "Foam::MoleculeCloud<MoleculeType>::"
-                            "initialiseMolecules()"
-                        )
-                            << "A whole layer of unit cells was placed "
-                            << "outside the bounds of the mesh, but no "
-                            << "molecules have been placed in zone '"
-                            << zone.name()
-                            << "'.  This is likely to be because the zone "
-                            << "has few cells ("
-                            << zone.size()
-                            << " in this case) and no lattice position "
-                            << "fell inside them.  "
-                            << "Aborting filling this zone."
-                            << endl;
-
-                        break;
-                    }
-
-                    molsPlacedThisIteration =
-                        this->size() - sizeBeforeIteration;
-
-                    totalZoneMols += molsPlacedThisIteration;
-
-                    n++;
-                }
-            }
-        }
-    }
-}
-
-
-template<class MoleculeType>
-void Foam::MoleculeCloud<MoleculeType>::createMolecule
-(
-    const point& position,
-    label cell,
-    label tetFace,
-    label tetPt,
-    label id,
-    bool tethered,
-    scalar temperature,
-    const vector& bulkVelocity
-)
-{
-    if (cell == -1)
-    {
-        mesh_.findCellFacePt(position, cell, tetFace, tetPt);
-    }
-
-    if (cell == -1)
-    {
-        FatalErrorIn("Foam::MoleculeCloud<MoleculeType>::createMolecule")
-            << "Position specified does not correspond to a mesh cell." << nl
-            << abort(FatalError);
-    }
-
-    point specialPosition(vector::zero);
-
-    label special = 0;
-
-    if (tethered)
-    {
-        specialPosition = position;
-
-        special = MoleculeType::SPECIAL_TETHERED;
-    }
-
-    const typename MoleculeType::constantProperties& cP(constProps(id));
-
-    typename MoleculeType::trackingData td
-    (
-        *this,
-        MoleculeType::trackingData::tpAccess
-    );
-
-    addParticle
-    (
-        new MoleculeType
-        (
-            mesh_,
-            position,
-            cell,
-            tetFace,
-            tetPt,
-            temperature,
-            bulkVelocity,
-            specialPosition,
-            cP,
-            td,
-            special,
-            id
-        )
-    );
-}
-
-
-template<class MoleculeType>
-Foam::label Foam::MoleculeCloud<MoleculeType>::nSites() const
-{
-    label n = 0;
-
-    forAllConstIter(typename MoleculeCloud<MoleculeType>, *this, mol)
-    {
-        n += constProps(mol().id()).nSites();
-    }
-
-    return n;
-}
-
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-template<class MoleculeType>
-Foam::MoleculeCloud<MoleculeType>::MoleculeCloud
-(
-    const word& cloudName,
-    const polyMesh& mesh,
-    const potential& pot,
-    bool readFields
-)
-:
-    Cloud<MoleculeType>(mesh, cloudName, false),
-    moleculeCloud(),
-    mesh_(mesh),
-    pot_(pot),
-    cellOccupancy_(mesh_.nCells()),
-    il_(mesh_, pot_.pairPotentials().rCutMax(), false),
-    constPropList_(),
-    rndGen_(label(971501) + 1526*Pstream::myProcNo())
-{
-    if (readFields)
-    {
-        MoleculeType::readFields(*this);
-    }
-
-    buildConstProps();
-
-    setSiteSizesAndPositions();
-
-    removeHighEnergyOverlaps();
-
-    calculateForce();
-}
-
-
-template<class MoleculeType>
-Foam::MoleculeCloud<MoleculeType>::MoleculeCloud
-(
-    const word& cloudName,
-    const polyMesh& mesh,
-    const potential& pot,
-    const dictionary& mdInitialiseDict,
-    bool readFields
-)
-:
-    Cloud<MoleculeType>(mesh, cloudName, false),
-    moleculeCloud(),
-    mesh_(mesh),
-    pot_(pot),
-    il_(mesh_),
-    constPropList_(),
-    rndGen_(label(971501) + 1526*Pstream::myProcNo())
-{
-    if (readFields)
-    {
-        MoleculeType::readFields(*this);
-    }
-
-    this->clear();
-
-    buildConstProps();
-
-    initialiseMolecules(mdInitialiseDict);
-}
-
-
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-template<class MoleculeType>
-void Foam::MoleculeCloud<MoleculeType>::evolve()
-{
-    typename MoleculeType::trackingData td0
-    (
-        *this,
-        MoleculeType::trackingData::tpFirstVelocityHalfStep
-    );
-    Cloud<MoleculeType>::move(td0, mesh_.time().deltaTValue());
-
-    typename MoleculeType::trackingData td1
-    (
-        *this,
-        MoleculeType::trackingData::tpLinearTrack
-    );
-    Cloud<MoleculeType>::move(td1, mesh_.time().deltaTValue());
-
-    typename MoleculeType::trackingData td2
-    (
-        *this,
-        MoleculeType::trackingData::tpRotationalTrack
-    );
-    Cloud<MoleculeType>::move(td2, mesh_.time().deltaTValue());
-
-    calculateForce();
-
-    typename MoleculeType::trackingData td3
-    (
-        *this,
-        MoleculeType::trackingData::tpSecondVelocityHalfStep
-    );
-    Cloud<MoleculeType>::move(td3, mesh_.time().deltaTValue());
-
-    info();
-}
-
-
-template<class MoleculeType>
-void Foam::MoleculeCloud<MoleculeType>::calculateForce()
-{
-    buildCellOccupancy();
-
-    // Set accumulated quantities to zero
-    forAllIter(typename MoleculeCloud<MoleculeType>, *this, mol)
-    {
-        mol().siteForces() = vector::zero;
-
-        mol().potentialEnergy() = 0.0;
-
-        mol().rf() = tensor::zero;
-    }
-
-    calculatePairForce();
-
-    calculateTetherForce();
-
-    calculateExternalForce();
-}
-
-
-template<class MoleculeType>
-void Foam::MoleculeCloud<MoleculeType>::info()
-{
-    // Calculates and prints the mean momentum and energy in the system
-    // and the number of molecules.
-
-    typename MoleculeType::trackingData td
-    (
-        *this,
-        MoleculeType::trackingData::tpAccess
-    );
-
-    MoleculeType::info(td);
-}
-
-
-template<class MoleculeType>
-void Foam::MoleculeCloud<MoleculeType>::writeXYZ(const fileName& fName) const
-{
-    OFstream os(fName);
-
-    os  << nSites() << nl
-        << "MoleculeCloud<MoleculeType> site positions in angstroms" << nl;
-
-    forAllConstIter(typename MoleculeCloud<MoleculeType>, *this, mol)
-    {
-        const typename MoleculeType::constantProperties& cP
-        (
-            constProps(mol().id())
-        );
-
-        forAll(mol().sitePositions(), i)
-        {
-            const point& sP = mol().sitePositions()[i];
-
-            os  << pot_.siteIdList()[cP.sites()[i].siteId()]
-                << ' ' << sP.x()*1e10
-                << ' ' << sP.y()*1e10
-                << ' ' << sP.z()*1e10
-                << nl;
-        }
-    }
-}
-
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/clouds/Templates/MoleculeCloud/MoleculeCloud.H b/src/lagrangian/molecularDynamics/molecule/clouds/Templates/MoleculeCloud/MoleculeCloud.H
deleted file mode 100644
index 38c912a17da..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/clouds/Templates/MoleculeCloud/MoleculeCloud.H
+++ /dev/null
@@ -1,252 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2008-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-Class
-    Foam::MoleculeCloud
-
-Description
-
-SourceFiles
-    MoleculeCloudI.H
-    MoleculeCloud.C
-
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef MoleculeCloud_H
-#define MoleculeCloud_H
-
-#include "Cloud.H"
-#include "moleculeCloud.H"
-#include "IOdictionary.H"
-#include "potential.H"
-#include "InteractionLists.H"
-#include "labelVector.H"
-#include "Random.H"
-#include "fileName.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-
-/*---------------------------------------------------------------------------*\
-                       Class MoleculeCloud Declaration
-\*---------------------------------------------------------------------------*/
-
-template<class MoleculeType>
-class MoleculeCloud
-:
-    public Cloud<MoleculeType>,
-    public moleculeCloud
-{
-
-private:
-
-    // Private data
-
-        //-
-        const polyMesh& mesh_;
-
-        //-
-        const potential& pot_;
-
-        //-
-        List<DynamicList<MoleculeType*> > cellOccupancy_;
-
-        //-
-        InteractionLists<MoleculeType> il_;
-
-        //-
-        List<typename MoleculeType::constantProperties> constPropList_;
-
-        //-
-        Random rndGen_;
-
-
-    // Private Member Functions
-
-        //-
-        void buildConstProps();
-
-        //-
-        void setSiteSizesAndPositions();
-
-        //- Determine which molecules are in which cells
-        void buildCellOccupancy();
-
-        //-
-        void calculatePairForce();
-
-        //-
-        inline void evaluatePair
-        (
-            MoleculeType& molI,
-            MoleculeType& molJ
-        );
-
-        //-
-        inline bool evaluatePotentialLimit
-        (
-            MoleculeType& molI,
-            MoleculeType& molJ
-        ) const;
-
-        //-
-        void calculateTetherForce();
-
-        //-
-        void calculateExternalForce();
-
-        //-
-        void removeHighEnergyOverlaps();
-
-        //-
-        void initialiseMolecules(const dictionary& mdInitialiseDict);
-
-        //-
-        void createMolecule
-        (
-            const point& position,
-            label cell,
-            label tetFace,
-            label tetPt,
-            label id,
-            bool tethered,
-            scalar temperature,
-            const vector& bulkVelocity
-        );
-
-        //-
-        label nSites() const;
-
-        //- Disallow default bitwise copy construct
-        MoleculeCloud(const MoleculeCloud&);
-
-        //- Disallow default bitwise assignment
-        void operator=(const MoleculeCloud&);
-
-
-public:
-
-    // Constructors
-
-        //- Construct given mesh and potential references
-        MoleculeCloud
-        (
-            const word& cloudName,
-            const polyMesh& mesh,
-            const potential& pot,
-            bool readFields = true
-        );
-
-        //- Construct given mesh, potential and mdInitialiseDict
-        MoleculeCloud
-        (
-            const word& cloudName,
-            const polyMesh& mesh,
-            const potential& pot,
-            const dictionary& mdInitialiseDict,
-            bool readFields = true
-        );
-
-
-    // Member Functions
-
-        //- Evolve the molecules (move, calculate forces, control state etc)
-        void evolve();
-
-        //-
-        void calculateForce();
-
-        //- Print cloud information
-        void info();
-
-
-        // Access
-
-            //-
-            inline const polyMesh& mesh() const;
-
-            //-
-            inline const potential& pot() const;
-
-            //-
-            inline const List<DynamicList<MoleculeType*> >&
-            cellOccupancy() const;
-
-            //-
-            inline const InteractionLists<MoleculeType>& il() const;
-
-            //-
-            inline const List<typename MoleculeType::constantProperties>
-            constProps() const;
-
-            //-
-            inline const typename MoleculeType::constantProperties&
-            constProps(label id) const;
-
-            //-
-            inline Random& rndGen();
-
-            //-
-            inline vector equipartitionLinearVelocity
-            (
-                scalar temperature,
-                scalar mass
-            );
-
-            //-
-            inline vector equipartitionAngularMomentum
-            (
-                scalar temperature,
-                const typename MoleculeType::constantProperties& cP
-            );
-
-
-    // Member Operators
-
-        //- Write molecule sites in XYZ format
-        void writeXYZ(const fileName& fName) const;
-};
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace Foam
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#include "MoleculeCloudI.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#ifdef NoRepository
-#   include "MoleculeCloud.C"
-#endif
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/clouds/Templates/MoleculeCloud/MoleculeCloudI.H b/src/lagrangian/molecularDynamics/molecule/clouds/Templates/MoleculeCloud/MoleculeCloudI.H
deleted file mode 100644
index 42c506024f7..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/clouds/Templates/MoleculeCloud/MoleculeCloudI.H
+++ /dev/null
@@ -1,416 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2008-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-\*---------------------------------------------------------------------------*/
-
-#include "constants.H"
-
-using namespace Foam::constant;
-
-// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
-
-template<class MoleculeType>
-inline void Foam::MoleculeCloud<MoleculeType>::evaluatePair
-(
-    MoleculeType& molI,
-    MoleculeType& molJ
-)
-{
-    const pairPotentialList& pairPot = pot_.pairPotentials();
-
-    const pairPotential& electrostatic = pairPot.electrostatic();
-
-    label idI = molI.id();
-
-    label idJ = molJ.id();
-
-    const typename MoleculeType::constantProperties& constPropI
-    (
-        constProps(idI)
-    );
-
-    const typename MoleculeType::constantProperties& constPropJ
-    (
-        constProps(idJ)
-    );
-
-    forAll(constPropI.pairPotSites(), pI)
-    {
-        label sI = constPropI.pairPotSites()[pI];
-
-        label idsI = constPropI.sites()[sI].siteId();
-
-        forAll(constPropJ.pairPotSites(), pJ)
-        {
-            label sJ = constPropJ.pairPotSites()[pJ];
-
-            label idsJ = constPropJ.sites()[sJ].siteId();
-
-            vector rsIsJ =
-                molI.sitePositions()[sI] - molJ.sitePositions()[sJ];
-
-            scalar rsIsJMagSq = magSqr(rsIsJ);
-
-            if (pairPot.rCutSqr(idsI, idsJ, rsIsJMagSq))
-            {
-                scalar rsIsJMag = mag(rsIsJ);
-
-                vector fsIsJ =
-                (rsIsJ/rsIsJMag)
-               *pairPot.force(idsI, idsJ, rsIsJMag);
-
-                molI.siteForces()[sI] += fsIsJ;
-
-                molJ.siteForces()[sJ] += -fsIsJ;
-
-                scalar potentialEnergy
-                (
-                    pairPot.energy(idsI, idsJ, rsIsJMag)
-                );
-
-                molI.potentialEnergy() += 0.5*potentialEnergy;
-
-                molJ.potentialEnergy() += 0.5*potentialEnergy;
-
-                vector rIJ = molI.position() - molJ.position();
-
-                tensor virialContribution =
-                (rsIsJ*fsIsJ)*(rsIsJ & rIJ)/rsIsJMagSq;
-
-                molI.rf() += virialContribution;
-
-                molJ.rf() += virialContribution;
-            }
-        }
-    }
-
-
-    forAll(constPropI.electrostaticSites(), pI)
-    {
-        label sI = constPropI.electrostaticSites()[pI];
-
-        forAll(constPropJ.electrostaticSites(), pJ)
-        {
-            label sJ = constPropJ.electrostaticSites()[pJ];
-
-            vector rsIsJ =
-                molI.sitePositions()[sI] - molJ.sitePositions()[sJ];
-
-            scalar rsIsJMagSq = magSqr(rsIsJ);
-
-            if (rsIsJMagSq <= electrostatic.rCutSqr())
-            {
-                scalar rsIsJMag = mag(rsIsJ);
-
-                scalar chargeI = constPropI.sites()[sI].siteCharge();
-
-                scalar chargeJ = constPropJ.sites()[sJ].siteCharge();
-
-                vector fsIsJ =
-                    (rsIsJ/rsIsJMag)
-                   *chargeI*chargeJ*electrostatic.force(rsIsJMag);
-
-                molI.siteForces()[sI] += fsIsJ;
-
-                molJ.siteForces()[sJ] += -fsIsJ;
-
-                scalar potentialEnergy =
-                    chargeI*chargeJ
-                   *electrostatic.energy(rsIsJMag);
-
-                molI.potentialEnergy() += 0.5*potentialEnergy;
-
-                molJ.potentialEnergy() += 0.5*potentialEnergy;
-
-                vector rIJ = molI.position() - molJ.position();
-
-                tensor virialContribution =
-                    (rsIsJ*fsIsJ)*(rsIsJ & rIJ)/rsIsJMagSq;
-
-                molI.rf() += virialContribution;
-
-                molJ.rf() += virialContribution;
-            }
-        }
-    }
-}
-
-
-template<class MoleculeType>
-inline bool Foam::MoleculeCloud<MoleculeType>::evaluatePotentialLimit
-(
-    MoleculeType& molI,
-    MoleculeType& molJ
-) const
-{
-    const pairPotentialList& pairPot = pot_.pairPotentials();
-
-    const pairPotential& electrostatic = pairPot.electrostatic();
-
-    label idI = molI.id();
-
-    label idJ = molJ.id();
-
-    const typename MoleculeType::constantProperties& constPropI
-    (
-        constProps(idI)
-    );
-
-    const typename MoleculeType::constantProperties& constPropJ
-    (
-        constProps(idJ)
-    );
-
-    forAll(constPropI.pairPotSites(), pI)
-    {
-        label sI = constPropI.pairPotSites()[pI];
-
-        label idsI = constPropI.sites()[sI].siteId();
-
-        forAll(constPropJ.pairPotSites(), pJ)
-        {
-            label sJ = constPropJ.pairPotSites()[pJ];
-
-            label idsJ = constPropJ.sites()[sJ].siteId();
-
-            vector rsIsJ =
-                molI.sitePositions()[sI] - molJ.sitePositions()[sJ];
-
-            scalar rsIsJMagSq = magSqr(rsIsJ);
-
-            if (pairPot.rCutSqr(idsI, idsJ, rsIsJMagSq))
-            {
-                scalar rsIsJMag = mag(rsIsJ);
-
-                // Guard against pairPot.energy being evaluated
-                // if rIJMag < SMALL. A floating point exception will
-                // happen otherwise.
-
-                if (rsIsJMag < SMALL)
-                {
-                    WarningIn
-                    (
-                        "MoleculeCloud<MoleculeType>::"
-                        "removeHighEnergyOverlaps()"
-                    )
-                        << "Molecule site pair closer than "
-                        << SMALL
-                        << ": mag separation = " << rsIsJMag
-                        << ". These may have been placed on top of each"
-                        << " other by a rounding error in mdInitialise in"
-                        << " parallel or a block filled with moleculess"
-                        << " twice. Removing one of the molecules."
-                        << endl;
-
-                    return true;
-                }
-
-                // Guard against pairPot.energy being evaluated if rIJMag <
-                // rMin.  A tabulation lookup error will occur otherwise.
-
-                if (rsIsJMag < pairPot.rMin(idsI, idsJ))
-                {
-                    return true;
-                }
-
-                if
-                (
-                    mag(pairPot.energy(idsI, idsJ, rsIsJMag))
-                  > pot_.potentialEnergyLimit()
-                )
-                {
-                    return true;
-                };
-            }
-        }
-    }
-
-    forAll(constPropI.electrostaticSites(), pI)
-    {
-        label sI = constPropI.electrostaticSites()[pI];
-
-        forAll(constPropJ.electrostaticSites(), pJ)
-        {
-            label sJ = constPropJ.electrostaticSites()[pJ];
-
-            vector rsIsJ =
-                molI.sitePositions()[sI] - molJ.sitePositions()[sJ];
-
-            scalar rsIsJMagSq = magSqr(rsIsJ);
-
-            if (pairPot.rCutMaxSqr(rsIsJMagSq))
-            {
-                scalar rsIsJMag = mag(rsIsJ);
-
-                // Guard against pairPot.energy being evaluated
-                // if rIJMag < SMALL. A floating point exception will
-                // happen otherwise.
-
-                if (rsIsJMag < SMALL)
-                {
-                    WarningIn
-                    (
-                        "MoleculeCloud<MoleculeType>::"
-                        "removeHighEnergyOverlaps()"
-                    )
-                        << "Molecule site pair closer than "
-                        << SMALL
-                        << ": mag separation = " << rsIsJMag
-                        << ". These may have been placed on top of each"
-                        << " other by a rounding error in mdInitialise in"
-                        << " parallel or a block filled with molecules"
-                        << " twice. Removing one of the molecules."
-                        << endl;
-
-                    return true;
-                }
-
-                if (rsIsJMag < electrostatic.rMin())
-                {
-                    return true;
-                }
-
-                scalar chargeI = constPropI.sites()[sI].siteCharge();
-
-                scalar chargeJ = constPropJ.sites()[sJ].siteCharge();
-
-                if
-                (
-                    mag(chargeI*chargeJ*electrostatic.energy(rsIsJMag))
-                  > pot_.potentialEnergyLimit()
-                )
-                {
-                    return true;
-                };
-            }
-        }
-    }
-
-    return false;
-}
-
-
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-template<class MoleculeType>
-inline const Foam::polyMesh& Foam::MoleculeCloud<MoleculeType>::mesh() const
-{
-    return mesh_;
-}
-
-
-template<class MoleculeType>
-inline const Foam::potential& Foam::MoleculeCloud<MoleculeType>::pot() const
-{
-    return pot_;
-}
-
-
-template<class MoleculeType>
-inline const Foam::List<Foam::DynamicList<MoleculeType*> >&
-Foam::MoleculeCloud<MoleculeType>::cellOccupancy() const
-{
-    return cellOccupancy_;
-}
-
-
-template<class MoleculeType>
-inline const Foam::InteractionLists<MoleculeType>&
-Foam::MoleculeCloud<MoleculeType>::il() const
-{
-    return il_;
-}
-
-
-template<class MoleculeType>
-inline const Foam::List<typename MoleculeType::constantProperties>
-Foam::MoleculeCloud<MoleculeType>::constProps() const
-{
-    return constPropList_;
-}
-
-
-template<class MoleculeType>
-inline const typename MoleculeType::constantProperties&
-Foam::MoleculeCloud<MoleculeType>::constProps(label id) const
-{
-    return constPropList_[id];
-}
-
-
-template<class MoleculeType>
-inline Foam::Random& Foam::MoleculeCloud<MoleculeType>::rndGen()
-{
-    return rndGen_;
-}
-
-
-template<class MoleculeType>
-inline Foam::vector
-Foam::MoleculeCloud<MoleculeType>::equipartitionLinearVelocity
-(
-    scalar temperature,
-    scalar mass
-)
-{
-    return sqrt(physicoChemical::k.value()*temperature/mass)*vector
-    (
-        rndGen_.GaussNormal(),
-        rndGen_.GaussNormal(),
-        rndGen_.GaussNormal()
-    );
-}
-
-
-template<class MoleculeType>
-inline Foam::vector
-Foam::MoleculeCloud<MoleculeType>::equipartitionAngularMomentum
-(
-    scalar temperature,
-    const typename MoleculeType::constantProperties& cP
-)
-{
-    scalar sqrtKbT = sqrt(physicoChemical::k.value()*temperature);
-
-    if (cP.linearMolecule())
-    {
-        return sqrtKbT*vector
-        (
-            0.0,
-            sqrt(cP.momentOfInertia().yy())*rndGen_.GaussNormal(),
-            sqrt(cP.momentOfInertia().zz())*rndGen_.GaussNormal()
-        );
-    }
-    else
-    {
-        return sqrtKbT*vector
-        (
-            sqrt(cP.momentOfInertia().xx())*rndGen_.GaussNormal(),
-            sqrt(cP.momentOfInertia().yy())*rndGen_.GaussNormal(),
-            sqrt(cP.momentOfInertia().zz())*rndGen_.GaussNormal()
-        );
-    }
-}
-
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/clouds/baseClasses/moleculeCloud/moleculeCloud.C b/src/lagrangian/molecularDynamics/molecule/clouds/baseClasses/moleculeCloud/moleculeCloud.C
deleted file mode 100644
index 4fda04df7d5..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/clouds/baseClasses/moleculeCloud/moleculeCloud.C
+++ /dev/null
@@ -1,48 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-\*---------------------------------------------------------------------------*/
-
-#include "moleculeCloud.H"
-
-// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
-
-namespace Foam
-{
-    defineTypeNameAndDebug(moleculeCloud, 0);
-}
-
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-Foam::moleculeCloud::moleculeCloud()
-{}
-
-
-// * * * * * * * * * * * * * * * *  Destructors  * * * * * * * * * * * * * * //
-
-Foam::moleculeCloud::~moleculeCloud()
-{}
-
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/clouds/baseClasses/moleculeCloud/moleculeCloud.H b/src/lagrangian/molecularDynamics/molecule/clouds/baseClasses/moleculeCloud/moleculeCloud.H
deleted file mode 100644
index c6ba2096d36..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/clouds/baseClasses/moleculeCloud/moleculeCloud.H
+++ /dev/null
@@ -1,83 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-Class
-    Foam::moleculeCloud
-
-Description
-    Virtual abstract base class for templated moleculeCloud
-
-SourceFiles
-    moleculeCloud.C
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef moleculeCloud_H
-#define moleculeCloud_H
-
-#include "volFields.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-
-/*---------------------------------------------------------------------------*\
-                       Class moleculeCloud Declaration
-\*---------------------------------------------------------------------------*/
-
-class moleculeCloud
-{
-    // Private Member Functions
-
-        //- Disallow default bitwise copy construct
-        moleculeCloud(const moleculeCloud&);
-
-        //- Disallow default bitwise assignment
-        void operator=(const moleculeCloud&);
-
-
-public:
-
-    //- Runtime type information
-    TypeName("moleculeCloud");
-
-    // Constructors
-
-        //- Null constructor
-        moleculeCloud();
-
-    //- Destructor
-    virtual ~moleculeCloud();
-};
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace Foam
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/clouds/derived/monoatomicCloud/monoatomicCloud.H b/src/lagrangian/molecularDynamics/molecule/clouds/derived/monoatomicCloud/monoatomicCloud.H
deleted file mode 100644
index 727bfe226e8..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/clouds/derived/monoatomicCloud/monoatomicCloud.H
+++ /dev/null
@@ -1,52 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-Class
-    Foam::monoatomicCloud
-
-Description
-    Cloud class to simulate monoatomic molecules
-
-SourceFiles
-    monoatomicCloud.C
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef monoatomicCloud_H
-#define monoatomicCloud_H
-
-#include "MoleculeCloud.H"
-#include "monoatomic.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-    typedef MoleculeCloud<monoatomic> monoatomicCloud;
-}
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/clouds/derived/polyatomicCloud/polyatomicCloud.H b/src/lagrangian/molecularDynamics/molecule/clouds/derived/polyatomicCloud/polyatomicCloud.H
deleted file mode 100644
index bb902fe3a4d..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/clouds/derived/polyatomicCloud/polyatomicCloud.H
+++ /dev/null
@@ -1,52 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-Class
-    Foam::polyatomicCloud
-
-Description
-    Cloud class to simulate polyatomic molecules
-
-SourceFiles
-    polyatomicCloud.C
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef polyatomicCloud_H
-#define polyatomicCloud_H
-
-#include "MoleculeCloud.H"
-#include "polyatomic.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-    typedef MoleculeCloud<polyatomic> polyatomicCloud;
-}
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/controllers/basic/controllers/controllers.C b/src/lagrangian/molecularDynamics/molecule/controllers/basic/controllers/controllers.C
deleted file mode 100644
index f0bad336ee1..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/controllers/basic/controllers/controllers.C
+++ /dev/null
@@ -1,573 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-\*---------------------------------------------------------------------------*/
-
-#include "controllers.H"
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-Foam::controllers::controllers
-(
-    const polyMesh& mesh
-)
-:
-    time_(mesh.time()),
-    controllersDict_
-    (
-        IOobject
-        (
-            "controllersDict",
-            time_.system(),
-            mesh,
-            IOobject::NO_READ,
-            IOobject::NO_WRITE
-        )
-    ),
-    stateControllersList_(),
-    sCNames_(),
-    sCIds_(),
-    sCFixedPathNames_(),
-    stateControllers_(),
-    fluxControllersList_(),
-    fCNames_(),
-    fCIds_(),
-    fCFixedPathNames_(),
-    fluxControllers_()
-{}
-
-
-Foam::controllers::controllers
-(
-    const polyMesh& mesh,
-    polyatomicCloud& cloud
-)
-:
-    time_(mesh.time()),
-    controllersDict_
-    (
-        IOobject
-        (
-            "controllersDict",
-            time_.system(),
-            mesh,
-            IOobject::MUST_READ,
-            IOobject::NO_WRITE
-        )
-    ),
-    stateControllersList_(controllersDict_.lookup("stateControllers")),
-    sCNames_(stateControllersList_.size()),
-    sCIds_(stateControllersList_.size()),
-    sCFixedPathNames_(stateControllersList_.size()),
-    stateControllers_(stateControllersList_.size()),
-    fluxControllersList_(controllersDict_.lookup("fluxControllers")),
-    fCNames_(fluxControllersList_.size()),
-    fCIds_(fluxControllersList_.size()),
-    fCFixedPathNames_(fluxControllersList_.size()),
-    fluxControllers_(fluxControllersList_.size())
-{
-
-    Info << nl << "Creating controllers" << nl << endl;
-
-    // state controllers
-
-    if (!stateControllers_.empty())
-    {
-        forAll(stateControllers_, sC)
-        {
-            const entry& controllersI = stateControllersList_[sC];
-
-            const dictionary& controllersIDict = controllersI.dict();
-
-            stateControllers_[sC] = autoPtr<stateController>
-            (
-                stateController::New(time_, cloud, controllersIDict)
-            );
-
-            sCNames_[sC] = stateControllers_[sC]->type();
-
-            sCIds_[sC] = sC;
-        }
-    }
-
-    //- flux controllers
-
-    if (!fluxControllers_.empty())
-    {
-        forAll(fluxControllers_, fC)
-        {
-            const entry& controllersI = fluxControllersList_[fC];
-
-            const dictionary& controllersIDict = controllersI.dict();
-
-            fluxControllers_[fC] = autoPtr<fluxController>
-            (
-                fluxController::New(time_, cloud, controllersIDict)
-            );
-
-            fCNames_[fC] = fluxControllers_[fC]->type();
-            fCIds_[fC] = fC;
-        }
-    }
-
-    // creating directories for state controllers
-    if (!nStateControllers_.empty())
-    {
-        // case/controllers
-        fileName controllersPath(time_.path()/"controllers");
-
-        if (!isDir(controllersPath))
-        {
-            mkDir(controllersPath);
-        }
-
-        // case/controllers/<cloudName>
-        fileName controllersPath(controllersPath/cloud.name());
-
-        if (!isDir(controllersPath))
-        {
-            mkDir(controllersPath);
-        }
-
-        // case/controllers/<cloudName>/stateControllers
-        fileName stateControllersPath(controllersPath/"stateControllers");
-
-        if (!isDir(stateControllersPath))
-        {
-            mkDir(stateControllersPath);
-        }
-
-        forAll(stateControllers_, sC)
-        {
-            if (stateControllers_[sC]->writeInCase())
-            {
-                // case/controllers/<cloudName>/
-                //     stateControllers/<stateControllerModel>
-                fileName stateControllerPath(stateControllersPath/sCNames_[sC]);
-
-                if (!isDir(stateControllerPath))
-                {
-                    mkDir(stateControllerPath);
-                }
-
-                const word& regionName = stateControllers_[sC]->regionName();
-
-                // case/controllers/<cloudName>/
-                //     stateControllers/<stateControllerModel>/<cellZoneName>
-                fileName zonePath(stateControllerPath/regionName);
-
-                if (!isDir(zonePath))
-                {
-                    mkDir(zonePath);
-                }
-
-                sCFixedPathNames_[sC] = zonePath;
-            }
-        }
-    }
-
-    // creating directories for flux controllers
-    if (nFluxControllers_ > 0)
-    {
-        // case/controllers
-        fileName controllersPath(time_.path()/"controllers");
-
-        if ( !isDir(controllersPath) )
-        {
-            mkDir(controllersPath);
-        }
-
-        // case/controllers/<cloudName>
-        fileName controllersPath(time_.path()/cloud.name());
-
-        if ( !isDir(controllersPath) )
-        {
-            mkDir(controllersPath);
-        }
-
-        // case/controllers/<cloudName>/fluxControllers
-        fileName fluxControllersPath(controllersPath/"fluxControllers");
-
-        if (!isDir(fluxControllersPath))
-        {
-            mkDir(fluxControllersPath);
-        }
-
-        forAll(fluxControllers_, fC)
-        {
-            if (fluxControllers_[fC]->writeInCase())
-            {
-                // case/controllers/<cloudName>/
-                //    fluxControllers/<fluxControllerModel>
-                fileName fluxControllerPath(fluxControllersPath/fCNames_[fC]);
-
-                if (!isDir(fluxControllerPath))
-                {
-                    mkDir(fluxControllerPath);
-                }
-
-                const word& regionName = fluxControllers_[fC]->regionName();
-
-                // case/controllers/<cloudName>/
-                //    fluxControllers/<fluxControllerModel>/<faceZoneName>
-                fileName zonePath(fluxControllerPath/regionName);
-
-                if (!isDir(zonePath))
-                {
-                    mkDir(zonePath);
-                }
-
-                fCFixedPathNames_[fC] = zonePath;
-            }
-        }
-    }
-}
-
-
-// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
-
-controllers::~controllers()
-{}
-
-
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-void controllers::initialConfig()
-{
-    forAll(stateControllers_, sC)
-    {
-        stateControllers_[sC]->initialConfiguration();
-    }
-
-    forAll(fluxControllers_, fC)
-    {
-        fluxControllers_[fC]->initialConfiguration();
-    }
-}
-
-
-void controllers::updateTimeInfo()
-{
-    forAll(stateControllers_, sC)
-    {
-        stateControllers_[sC]->updateTime();
-    }
-
-    forAll(fluxControllers_, fC)
-    {
-        fluxControllers_[fC]->updateTime();
-    }
-}
-
-
-void controllers::controlState()
-{
-    forAll(stateControllers_, sC)
-    {
-        stateControllers_[sC]->controlMols();
-    }
-}
-
-
-void controllers::controlVelocitiesI()
-{
-    forAll(stateControllers_, sC)
-    {
-        stateControllers_[sC]->controlMolsBeg();
-    }
-}
-
-void controllers::controlVelocitiesII()
-{
-    forAll(stateControllers_, sC)
-    {
-        stateControllers_[sC]->controlMolsEnd();
-    }
-}
-
-
-void  controllers::controlPriorToForces()
-{
-    forAll(stateControllers_, sC)
-    {
-        stateControllers_[sC]->controlBeforeForces();
-    }
-}
-
-
-void controllers::calculateStateProps()
-{
-    forAll(stateControllers_, sC)
-    {
-        stateControllers_[sC]->calculateProperties();
-    }
-
-    forAll(fluxControllers_, fC)
-    {
-        fluxControllers_[fC]->calculateProperties();
-    }
-}
-
-
-void controllers::outputStateResults()
-{
-    const Time& runTime = time_;
-
-    if (runTime.outputTime())
-    {
-        // creating a set of directories in the current time directory
-        {
-            List<fileName> timePathNames(sCFixedPathNames_.size());
-
-            if (nStateControllers_ > 0)
-            {
-                if (Pstream::master())
-                {
-                    // case/<timeDir>/uniform
-                    fileName uniformTimePath
-                    (
-                        runTime.path()/runTime.timeName()/"uniform"
-                    );
-
-                    if (!isDir(uniformTimePath))
-                    {
-                        mkDir(uniformTimePath);
-                    }
-
-                    if (!stateControllers_.empty())
-                    {
-                        // case/<timeDir>/uniform/controllers
-                        fileName controllersTimePath
-                        (
-                            uniformTimePath/"controllers"
-                        );
-
-                        if (!isDir(controllersTimePath))
-                        {
-                            mkDir(controllersTimePath);
-                        }
-
-                        // case/<timeDir>/uniform/controllers/<cloudName>
-                        fileName cloudTimePath
-                        (
-                            controllersTimePath/cloud.name()
-                        );
-
-                        if (!isDir(cloudTimePath))
-                        {
-                            mkDir(cloudTimePath);
-                        }
-
-                        // case/<timeDir>/uniform/controllers/<cloudName>/
-                        fileName stateControllersTimePath
-                        (
-                            cloudTimePath/"stateControllers"
-                        );
-
-                        if (!isDir(stateControllersTimePath))
-                        {
-                            mkDir(stateControllersTimePath);
-                        }
-
-                        forAll(stateControllers_, sC)
-                        {
-                            if (stateControllers_[sC]->writeInTimeDir())
-                            {
-                                // case/<timeDir>/uniform/controllers/
-                                //     <cloudName>/<stateControllerModel>
-                                fileName sCTimePath
-                                (
-                                    stateControllersTimePath/sCNames_[sC]
-                                );
-
-                                if (!isDir(sCTimePath))
-                                {
-                                    mkDir(sCTimePath);
-                                }
-
-                                // Creating directory for different zones but
-                                // of the same model
-                                const word& regionName =
-                                    stateControllers_[sC]->regionName();
-
-                                // case/<timeDir>/uniform/controllers/
-                                //    <cloudName>/<stateControllerModel>/
-                                //    <cellZoneName>
-                                fileName zoneTimePath(sCTimePath/regionName);
-
-                                if (!isDir(zoneTimePath))
-                                {
-                                    mkDir(zoneTimePath);
-                                }
-
-                                timePathNames[sC] = zoneTimePath;
-                            }
-                        }
-                    }
-                }
-            }
-
-            // write out data
-            forAll(stateControllers_, sC)
-            {
-                stateControllers_[sC]->output
-                (
-                    sCFixedPathNames_[sC],
-                    timePathNames[sC]
-                );
-            }
-        }
-
-        {
-            List<fileName> timePathNames(fCFixedPathNames_.size());
-
-            if (nFluxControllers_ > 0)
-            {
-                if (Pstream::master())
-                {
-                    // case/<timeDir>/uniform
-                    fileName uniformTimePath
-                    (
-                        runTime.path()/runTime.timeName()/"uniform"
-                    );
-
-                    if (!isDir(uniformTimePath))
-                    {
-                        mkDir(uniformTimePath);
-                    }
-
-                    if (!fluxControllers_.empty())
-                    {
-                        // case/<timeDir>/uniform/controllers
-                        fileName controllersTimePath
-                        (
-                            uniformTimePath/"controllers"
-                        );
-
-                        if (!isDir(controllersTimePath))
-                        {
-                            mkDir(controllersTimePath);
-                        }
-
-                        // case/<timeDir>/uniform/controllers/<cloudName>
-                        fileName cloudTimePath
-                        (
-                            controllersTimePath/cloud.name()
-                        );
-
-                        if (!isDir(cloudTimePath))
-                        {
-                            mkDir(cloudTimePath);
-                        }
-
-                        // case/<timeDir>/uniform/fluxControllers
-                        fileName controllersTimePath
-                        (
-                            cloudTimePath/"fluxControllers"
-                        );
-
-                        if (!isDir(controllersTimePath))
-                        {
-                            mkDir(controllersTimePath);
-                        }
-
-                        forAll(fluxControllers_, fC)
-                        {
-                            if (stateControllers_[fC]->writeInTimeDir())
-                            {
-                                // case/<timeDir>/uniform/controllers/
-                                //     <cloudName>/<fluxControllerModel>
-                                fileName fCTimePath
-                                (
-                                    controllersTimePath/fCNames_[fC]
-                                );
-
-                                if (!isDir(fCTimePath))
-                                {
-                                    mkDir(fCTimePath);
-                                }
-
-                                const word& regionName =
-                                    fluxControllers_[fC]->regionName();
-
-                                // case/<timeDir>/uniform/controllers/
-                                //     <cloudName>/<fluxControllerModel>/
-                                //     <faceZoneName>
-                                fileName zoneTimePath(fCTimePath/regionName);
-
-                                if (!isDir(zoneTimePath))
-                                {
-                                    mkDir(zoneTimePath);
-                                }
-
-                                timePathNames[fC] = zoneTimePath;
-                            }
-                        }
-                    }
-                }
-            }
-
-            // write out data
-            forAll(fluxControllers_, fC)
-            {
-                fluxControllers_[fC]->output
-                (
-                    fCFixedPathNames_[fC],
-                    timePathNames[fC]
-                );
-            }
-        }
-
-        // Re-read dictionaries for modified properties (run-time selection)
-        {
-            stateControllersList_.clear();
-
-            stateControllersList_ = controllersDict_.lookup("stateControllers");
-
-            forAll(stateControllers_, sC)
-            {
-                const entry& controllersI = stateControllersList_[sC];
-                const dictionary& controllersIDict = controllersI.dict();
-
-                stateControllers_[sC]->updateProperties(controllersIDict);
-            }
-        }
-
-        {
-            fluxControllersList_.clear();
-
-            fluxControllersList_ = controllersDict_.lookup("fluxControllers");
-
-            forAll(fluxControllers_, fC)
-            {
-                const entry& controllersI = fluxControllersList_[fC];
-                const dictionary& controllersIDict = controllersI.dict();
-
-                fluxControllers_[fC]->updateProperties(controllersIDict);
-            }
-        }
-    }
-}
-
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/controllers/basic/controllers/controllers.H b/src/lagrangian/molecularDynamics/molecule/controllers/basic/controllers/controllers.H
deleted file mode 100644
index 22e9ca7cca1..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/controllers/basic/controllers/controllers.H
+++ /dev/null
@@ -1,163 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2008-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-Class
-
-    controllers
-
-Description
-
-    Stores all the information for the controllers models defined within
-    the controllersDict, and selects & builds the models automatically.
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef controllers_H
-#define controllers_H
-
-#include "List.H"
-#include "IOdictionary.H"
-#include "autoPtr.H"
-#include "polyMesh.H"
-#include "timeData.H"
-#include "stateController.H"
-#include "fluxController.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-
-/*---------------------------------------------------------------------------*\
-                        Class controllers Declaration
-\*---------------------------------------------------------------------------*/
-
-class controllers
-{
-    // Private data
-
-        Time& time_;
-
-        //- The entire dictionary (containing multiple subDictionaries)
-        IOdictionary controllersDict_;
-
-        //- state controllers
-        PtrList<entry> stateControllersList_;
-        List<word> sCNames_;
-        List<label> sCIds_;
-        List<fileName> sCFixedPathNames_;
-        List< autoPtr<stateController> > stateControllers_;
-
-        //- flux controllers
-        PtrList<entry> fluxControllersList_;
-        List<word> fCNames_;
-        List<label> fCIds_;
-        List<fileName> fCFixedPathNames_;
-        List< autoPtr<fluxController> > fluxControllers_;
-
-
-public:
-
-    // Constructors
-
-        //- Null Constructor
-        controllers
-        (
-            const polyMesh& mesh
-        );
-
-        //- Constructor for with cloud
-        controllers
-        (
-            const polyMesh& mesh,
-            polyatomicCloud& cloud
-        );
-
-    //- Destructor
-    ~controllers();
-
-    // Member Functions
-
-        //- Initial configuration call this function after the polyatomicCloud
-        //  is completely initialised
-        void initialConfig();
-
-        //- this function is to be called at the beginning of the MD time-step.
-        //  since we have placed a non-referenced time-data class in the
-        //  state-controller class.
-        void updateTimeInfo();
-
-        //- control molecular state -- call this after the intermolecular force
-        //  calulation
-        void controlState();
-
-        //-
-        void controlVelocitiesI();
-
-        //-
-        void controlVelocitiesII();
-
-        //-
-        void controlPriorToForces();
-
-        //- calculate properties -- call this at the end of the MD time-step.
-        void calculateStateProps();
-
-        //- output -- call this function at the end of the MD time-step
-        void outputStateResults();
-
-        // Access
-
-            //-
-            inline List< autoPtr<stateController> >& stateControllers();
-
-            //-
-            inline const List< autoPtr<stateController> >&
-            stateControllers() const;
-
-            //-
-            inline List< autoPtr<fluxController> >& fluxControllers();
-
-            //-
-            inline const List< autoPtr<fluxController> >&
-            fluxControllers() const;
-
-            //-
-            inline const List<word>& stateControllersNames() const;
-
-};
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace Foam
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#include "controllersI.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/controllers/basic/controllers/controllersI.H b/src/lagrangian/molecularDynamics/molecule/controllers/basic/controllers/controllersI.H
deleted file mode 100644
index 66c10f07840..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/controllers/basic/controllers/controllersI.H
+++ /dev/null
@@ -1,64 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-\*---------------------------------------------------------------------------*/
-
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-Foam::List<Foam::autoPtr<Foam::stateController> >&
-Foam::controllers::stateControllers()
-{
-    return stateControllers_;
-}
-
-
-const Foam::List<Foam::autoPtr<Foam::stateController> >&
-Foam::controllers::stateControllers() const
-{
-    return stateControllers_;
-}
-
-
-Foam::List<Foam::autoPtr<Foam::fluxController> >&
-Foam::controllers::fluxControllers()
-{
-    return fluxControllers_;
-}
-
-
-const Foam::List< autoPtr<fluxController> >&
-Foam::controllers::fluxControllers() const
-{
-    return fluxControllers_;
-}
-
-
-const Foam::List<Foam::word>& Foam::controllers::stateControllersNames() const
-{
-    return sCNames_;
-}
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace Foam
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/controllers/basic/fluxController/fluxController.C b/src/lagrangian/molecularDynamics/molecule/controllers/basic/fluxController/fluxController.C
deleted file mode 100644
index 711b6617588..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/controllers/basic/fluxController/fluxController.C
+++ /dev/null
@@ -1,524 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-\*---------------------------------------------------------------------------*/
-
-#include "waterFluxController.H"
-#include "IFstream.H"
-#include "graph.H"
-#include "polyatomicCloud.H"
-
-namespace Foam
-{
-
-// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
-
-defineTypeNameAndDebug(waterFluxController, 0);
-
-defineRunTimeSelectionTable(waterFluxController, dictionary);
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-// Construct from components
-waterFluxController::waterFluxController
-(
-    Time& t,
-    polyatomicCloud& cloud,
-    const dictionary& dict
-)
-:
-    mesh_(refCast<const fvMesh>(cloud.mesh())),
-    cloud_(cloud),
-    rndGen_(clock::getTime()),
-    controllerDict_(dict.subDict("controllerProperties")),
-    timeDict_(controllerDict_.subDict("timeProperties")),
-    time_(t, timeDict_),
-    regionName_(controllerDict_.lookup("zoneName")),
-    regionId_(-1),
-    zoneSurfaceArea_(0.0),
-    internalFaces_(),
-    processorFaces_(),
-    control_(true),
-    readStateFromFile_(true),
-    singleValueController_(false),
-    density_(0.0),
-    velocity_(vector::zero),
-    temperature_(0.0),
-    pressure_(0.0),
-    strainRate_(tensor::zero),
-    tempGradient_(vector::zero),
-    fieldController_(false),
-    densities_(),
-    velocities_(),
-    temperatures_(),
-    pressures_(),
-    writeInTimeDir_(true),
-    writeInCase_(true)
-{
-    const faceZoneMesh& faceZones = mesh_.faceZones();
-    regionId_ = faceZones.findZoneID(regionName_);
-
-    if (regionId_ == -1)
-    {
-        FatalErrorIn("waterFluxController::waterFluxController()")
-        << "Cannot find region (faceZone): " << regionName_ << nl << "in: "
-        << t.time().system()/"controllersDict"
-        << exit(FatalError);
-    }
-
-    control_ = Switch(controllerDict_.lookup("controlSwitch"));
-    readStateFromFile_ = Switch(controllerDict_.lookup("readStateFromFile"));
-
-    setFacesInfo();
-}
-
-
-// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * //
-
-autoPtr<waterFluxController> waterFluxController::New
-(
-    Time& t,
-    polyatomicCloud& cloud,
-    const dictionary& dict
-)
-{
-    word waterFluxControllerName
-    (
-        dict.lookup("fluxControllerModel")
-    );
-
-    Info<< "Selecting fluxController "
-         << waterFluxControllerName << endl;
-
-    dictionaryConstructorTable::iterator cstrIter =
-        dictionaryConstructorTablePtr_->find(waterFluxControllerName);
-
-    if (cstrIter == dictionaryConstructorTablePtr_->end())
-    {
-        FatalError
-            << "waterFluxController::New(const dictionary&) : " << endl
-            << "    unknown waterFluxController type "
-            << waterFluxControllerName
-            << ", constructor not in hash table" << endl << endl
-            << "    Valid injector types are :" << endl;
-        Info<< dictionaryConstructorTablePtr_->toc() << abort(FatalError);
-    }
-
-    return autoPtr<waterFluxController>
-        (
-                cstrIter()(t, cloud, dict)
-        );
-}
-
-
-// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
-
-waterFluxController::~waterFluxController()
-{}
-
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-// void waterFluxController::updateTime()
-// {
-//     time_++;
-//
-//     const scalar& t = time_.time().timeOutputValue();
-//
-//     if ((t - initialTime_) < timePeriod_)
-//     {
-//         time_.controlTimeInterval().endTime() = false;
-// //         control_ = false;
-//     }
-//     else
-//     {
-// //         control_ = true;
-//     }
-// }
-
-
-void waterFluxController::setFacesInfo()
-{
-    const labelList& faces = controlZone();
-
-    if (Pstream::parRun())
-    {
-        DynamicList<label> processorFaces(0);
-
-        forAll(mesh_.boundaryMesh(), patchI)
-        {
-            const polyPatch& patch = mesh_.boundaryMesh()[patchI];
-
-            if (isA<processorPolyPatch>(patch))
-            {
-                for (label p = 0; p < patch.size(); p++)
-                {
-                    label patchFaceI = p + patch.start();
-                    label faceId = findIndex (faces, patchFaceI);
-
-                    if (faceId != -1)
-                    {
-                        processorFaces.append(patchFaceI);
-                    }
-                }
-            }
-        }
-
-        processorFaces.shrink();
-
-        processorFaces_.setSize(processorFaces.size(), -1);
-
-        forAll(processorFaces, f)
-        {
-            processorFaces_[f] = processorFaces[f];
-        }
-
-        label nInternalFaces = faces.size() - processorFaces.size();
-        internalFaces_.setSize(nInternalFaces, -1);
-
-        label counter = 0;
-
-        forAll(faces, f)
-        {
-            const label& faceI = faces[f];
-
-            if (findIndex(processorFaces, faceI) == -1)
-            {
-                internalFaces_[counter] = faceI;
-                counter++;
-            }
-        }
-
-//         Pout << "processorFaces: " << processorFaces_ << endl;
-//         Pout << "internalFaces: " << internalFaces_ << endl;
-
-        forAll(internalFaces_, f)
-        {
-            const label& faceI = internalFaces_[f];
-            zoneSurfaceArea_ += mag(mesh_.faceAreas()[faceI]);
-        }
-
-        // faces on a zone located on a processor cut belong to both processors
-        // (hence the 0.5)
-
-        forAll(processorFaces_, f)
-        {
-            const label& faceI = processorFaces_[f];
-            zoneSurfaceArea_ += 0.5*mag(mesh_.faceAreas()[faceI]);
-        }
-
-
-        if (Pstream::parRun())
-        {
-            for (int p = 0; p < Pstream::nProcs(); p++)
-            {
-                if (p != Pstream::myProcNo())
-                {
-                    const int proc = p;
-                    {
-                        OPstream toNeighbour(Pstream::blocking, proc);
-                        toNeighbour << zoneSurfaceArea_;
-                    }
-                }
-            }
-
-            //- receiving
-            for (int p = 0; p < Pstream::nProcs(); p++)
-            {
-                if (p != Pstream::myProcNo())
-                {
-                    scalar zoneSurfaceAreaProc;
-
-                    const int proc = p;
-                    {
-                        IPstream fromNeighbour(Pstream::blocking, proc);
-                        fromNeighbour >> zoneSurfaceAreaProc;
-                    }
-
-                    zoneSurfaceArea_ += zoneSurfaceAreaProc;
-                }
-            }
-        }
-    }
-    else
-    {
-        forAll(faces, f)
-        {
-            const label& faceI = faces[f];
-
-            zoneSurfaceArea_ += mag(mesh_.faceAreas()[faceI]);
-        }
-    }
-}
-
-
-
-void waterFluxController::updateTime()
-{
-    time_++;
-
-//     const scalar& t = time_.time().timeOutputValue();
-//
-//     if ((t - initialTime_) < timePeriod_)
-//     {
-//         time_.controlTimeInterval().endTime() = false;
-// //         control_ = false;
-//     }
-//     else
-//     {
-// //         control_ = true;
-//     }
-}
-
-void waterFluxController::updateFluxControllerProperties
-(
-    const dictionary& newDict
-)
-{
-    controllerDict_ = newDict.subDict("controllerProperties");
-
-    //- you can reset the controlling zone from here. This essentially
-    //  means that the coupling zone can infact move arbitrarily. To make
-    //  this happen we probably need to devise a technique for automatically
-    //  changing the cellZone else where, and then calling this function to
-    //  reset the controlling zone in which the controller operates in.
-
-    if (controllerDict_.found("controlSwitch"))
-    {
-        control_ = Switch(controllerDict_.lookup("controlSwitch"));
-    }
-
-    if (controllerDict_.found("readStateFromFile"))
-    {
-        readStateFromFile_ = Switch
-        (
-            controllerDict_.lookup("readStateFromFile")
-        );
-    }
-}
-
-const labelList& waterFluxController::controlZone() const
-{
-    return mesh_.faceZones()[regionId_];
-}
-
-label waterFluxController::isFaceOnControlZone(const label& faceI)
-{
-    const label f = findIndex(controlZone(), faceI);
-
-    return f;
-}
-
-const word& waterFluxController::regionName() const
-{
-    return regionName_;
-}
-
-const scalar& waterFluxController::density() const
-{
-    return density_;
-}
-
-scalar& waterFluxController::density()
-{
-    return density_;
-}
-
-const vector& waterFluxController::velocity() const
-{
-    return velocity_;
-}
-
-vector& waterFluxController::velocity()
-{
-    return velocity_;
-}
-
-const scalar& waterFluxController::temperature() const
-{
-    return temperature_;
-}
-
-scalar& waterFluxController::temperature()
-{
-    return temperature_;
-}
-
-const scalar& waterFluxController::pressure() const
-{
-    return pressure_;
-}
-
-scalar& waterFluxController::pressure()
-{
-    return pressure_;
-}
-
-const tensor& waterFluxController::strainRate() const
-{
-    return strainRate_;
-}
-
-tensor& waterFluxController::strainRate()
-{
-    return strainRate_;
-}
-
-const vector& waterFluxController::tempGradient() const
-{
-    return tempGradient_;
-}
-
-vector& waterFluxController::tempGradient()
-{
-    return tempGradient_;
-}
-
-
-const scalarField& waterFluxController::densityField() const
-{
-    return densities_;
-}
-
-scalarField& waterFluxController::densityField()
-{
-    return densities_;
-}
-
-const vectorField& waterFluxController::velocityField() const
-{
-    return velocities_;
-}
-vectorField& waterFluxController::velocityField()
-{
-    return velocities_;
-}
-
-const scalarField& waterFluxController::temperatureField() const
-{
-    return temperatures_;
-}
-
-scalarField& waterFluxController::temperatureField()
-{
-    return temperatures_;
-}
-
-const scalarField& waterFluxController::pressureField() const
-{
-    return pressures_;
-}
-
-scalarField& waterFluxController::pressureField()
-{
-    return pressures_;
-}
-
-
-const bool& waterFluxController::singleValueController() const
-{
-    return singleValueController_;
-}
-
-bool& waterFluxController::singleValueController()
-{
-    return singleValueController_;
-}
-
-const bool& waterFluxController::fieldController() const
-{
-    return fieldController_;
-}
-
-bool& waterFluxController::fieldController()
-{
-    return fieldController_;
-}
-
-
-const bool& waterFluxController::writeInTimeDir() const
-{
-    return writeInTimeDir_;
-}
-
-const bool& waterFluxController::writeInCase() const
-{
-    return writeInCase_;
-}
-
-
-// const scalar waterFluxController::avReqDensity() const
-// {
-//     scalar totalDensity = 0.0;
-//
-//     forAll(densities_, c)
-//     {
-//         totalDensity += densities_[c];
-//     }
-//
-//     if (cells_.size() > 0)
-//     {
-//         totalDensity /= scalar(cells_.size());
-//     }
-//
-//     return totalDensity;
-// }
-//
-// const vector waterFluxController::avReqVelocity() const
-// {
-//     vector totalVel = vector::zero;
-//
-//     forAll(velocities_, c)
-//     {
-//         totalVel += velocities_[c];
-//     }
-//
-//     if (cells_.size() > 0)
-//     {
-//         totalVel /= scalar(cells_.size());
-//     }
-//
-//     return totalVel;
-// }
-//
-// const scalar waterFluxController::avReqTemperature() const
-// {
-//     scalar totalTemp = 0.0;
-//
-//     forAll(densities_, c)
-//     {
-//         totalTemp += temperatures_[c];
-//     }
-//
-//     if (cells_.size() > 0)
-//     {
-//         totalTemp /= scalar(cells_.size());
-//     }
-//
-//     return totalTemp;
-// }
-
-
-
-} // End namespace Foam
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/controllers/basic/fluxController/fluxController.H b/src/lagrangian/molecularDynamics/molecule/controllers/basic/fluxController/fluxController.H
deleted file mode 100644
index 9b8a3752772..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/controllers/basic/fluxController/fluxController.H
+++ /dev/null
@@ -1,272 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2008-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-Class
-    waterFluxController
-
-Description
-
-SourceFiles
-    waterFluxControllerI.H
-    waterFluxController.C
-    waterFluxControllerIO.C
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef waterFluxController_H
-#define waterFluxController_H
-
-#include "IOdictionary.H"
-#include "Time.H"
-#include "autoPtr.H"
-#include "runTimeSelectionTables.H"
-#include "vector.H"
-#include "volFields.H"
-#include "Random.H"
-#include "polyatomic.H"
-#include "timeData.H"
-#include "writeTimeData.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-
-/*---------------------------------------------------------------------------*\
-                           Class waterFluxController Declaration
-\*---------------------------------------------------------------------------*/
-
-class waterFluxController
-{
-
-protected:
-
-    // Protected data
-
-//         Time& time_;
-
-        const fvMesh& mesh_;
-
-        polyatomicCloud& cloud_;
-
-        Random rndGen_;
-
-        //- subDictionary containing the properties
-        dictionary controllerDict_;
-
-
-        dictionary timeDict_;
-
-        timeData time_;
-
-        //- name of face zone
-        word regionName_;
-        label regionId_;
-//         labelList faces_;
-
-        scalar zoneSurfaceArea_;
-
-        labelList internalFaces_;
-        labelList processorFaces_;
-
-        bool control_;
-        bool readStateFromFile_;
-
-        //- set all the properties below from model if required
-
-            bool singleValueController_;
-
-            // target values
-            scalar density_;
-            vector velocity_;
-            scalar temperature_;
-            scalar pressure_;
-
-            tensor strainRate_;
-            vector tempGradient_;
-
-            bool fieldController_;
-
-            //- targeted fields
-            scalarField densities_;
-            vectorField velocities_;
-            scalarField temperatures_;
-            scalarField pressures_;
-
-            bool writeInTimeDir_;
-            bool writeInCase_;
-
-
-
-
-    // Private Member Functions
-
-        void setFacesInfo();
-
-
-public:
-
-    //- Runtime type information
-    TypeName("waterFluxController");
-
-    // Declare runtime constructor selection table
-        declareRunTimeSelectionTable
-        (
-            autoPtr,
-            waterFluxController,
-            dictionary,
-            (
-                Time& t,
-                polyatomicCloud& cloud,
-                const dictionary& dict
-            ),
-            (t, cloud, dict)
-        );
-
-    // Constructors
-
-        //- Construct from components
-        waterFluxController
-        (
-                        Time& t,
-            polyatomicCloud& cloud,
-            const dictionary& dict
-        );
-
-
-    // Selectors
-
-        static autoPtr<waterFluxController> New
-        (
-                        Time& t,
-            polyatomicCloud& cloud,
-            const dictionary& dict
-        );
-
-
-    // Destructor
-
-        virtual ~waterFluxController();
-
-
-    // Member Functions
-
-        void updateTime();
-
-        //- create an initial configuration
-        virtual void initialConfiguration() = 0;
-
-
-        //- calculate any required properties
-        virtual void calculateProperties() = 0;
-
-
-        //- control the polyatomic from the tracking function
-        virtual void controlMol
-        (
-            polyatomic& mol,
-            polyatomic::trackData& td
-        ) = 0;
-
-        //- output data
-        virtual void output
-        (
-            const fileName& fixedPathName,
-            const fileName& timePath
-        ) = 0;
-
-
-        //- E. update properties from a modified dictionary
-        virtual void updateProperties(const dictionary&) = 0;
-
-
-        void updateFluxControllerProperties(const dictionary&);
-
-        // Access
-
-            //- return the control zone cells
-            const labelList& controlZone() const;
-
-
-            label isFaceOnControlZone(const label& faceI);
-
-            //- return the control zone name
-            const word& regionName() const;
-
-           //- return the targeted values
-            const scalar& density() const;
-            scalar& density();
-
-            const vector& velocity() const;
-            vector& velocity();
-
-            const scalar& temperature() const;
-            scalar& temperature();
-
-            const scalar& pressure() const;
-            scalar& pressure();
-
-            const tensor& strainRate() const;
-            tensor& strainRate();
-
-            const vector& tempGradient() const;
-            vector& tempGradient();
-
-            //- return the targeted fields
-            const scalarField& densityField() const;
-            scalarField& densityField();
-
-            const vectorField& velocityField() const;
-            vectorField& velocityField();
-
-            const scalarField& temperatureField() const;
-            scalarField& temperatureField();
-
-            const scalarField& pressureField() const;
-            scalarField& pressureField();
-
-
-            const bool& singleValueController() const;
-            bool& singleValueController();
-
-            const bool& fieldController() const;
-            bool& fieldController();
-
-            const bool& writeInTimeDir() const;
-            const bool& writeInCase() const;
-
-//             const scalar avReqDensity() const;
-//             const vector avReqVelocity() const;
-//             const scalar avReqTemperature() const;
-};
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace Foam
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/controllers/basic/stateController/stateController.C b/src/lagrangian/molecularDynamics/molecule/controllers/basic/stateController/stateController.C
deleted file mode 100644
index b98aa126a3e..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/controllers/basic/stateController/stateController.C
+++ /dev/null
@@ -1,490 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-\*---------------------------------------------------------------------------*/
-
-#include "stateController.H"
-#include "IFstream.H"
-#include "polyatomicCloud.H"
-
-// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
-
-namespace Foam
-{
-
-defineTypeNameAndDebug(stateController, 0);
-
-defineRunTimeSelectionTable(stateController, dictionary);
-
-}
-
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-Foam::stateController::stateController
-(
-    polyatomicCloud& cloud,
-    const dictionary& dict
-)
-:
-    mesh_(refCast<const fvMesh>(cloud.mesh())),
-    cloud_(cloud),
-    rndGen_(clock::getTime()),
-    controllerDict_(dict.subDict("controllerProperties")),
-    timeDict_(controllerDict_.subDict("timeProperties")),
-    time_(mesh_.time(), timeDict_),
-    timePeriod_(readScalar(timeDict_.lookup("initialTimePeriod"))), //temp
-    initialTime_(time_.time().startTime().value()),
-    regionName_(controllerDict_.lookup("zoneName")),
-    regionId_(-1),
-    control_(true),
-    readStateFromFile_(true),
-    singleValueController_(false),
-    density_(0.0),
-    velocity_(vector::zero),
-    temperature_(0.0),
-    pressure_(0.0),
-    strainRate_(tensor::zero),
-    tempGradient_(vector::zero),
-    fieldController_(false),
-    densities_(),
-    velocities_(),
-    temperatures_(),
-    pressures_(),
-    writeInTimeDir_(true),
-    writeInCase_(true)
-{
-    const cellZoneMesh& cellZones = mesh_.cellZones();
-
-    regionId_ = cellZones.findZoneID(regionName_);
-
-    if (regionId_ == -1)
-    {
-        FatalErrorIn("stateController::stateController()")
-            << "Cannot find region: " << regionName_ << nl << "in: "
-            << time_.time().system()/"controllersDict"
-            << exit(FatalError);
-    }
-
-    control_ = Switch(controllerDict_.lookup("controlSwitch"));
-
-    readStateFromFile_ = Switch(controllerDict_.lookup("readStateFromFile"));
-
-    const scalar& avTimeInterval = time_.averageTimeInterval().deltaT();
-
-    if ((timePeriod_ < avTimeInterval) && (timePeriod_ > 0.0))
-    {
-        timePeriod_ = avTimeInterval;
-    }
-}
-
-
-// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * //
-
-Foam::autoPtr<Foam::stateController> Foam::stateController::New
-(
-    polyatomicCloud& cloud,
-    const dictionary& dict
-)
-{
-    word stateControllerName
-    (
-        dict.lookup("stateControllerModel")
-    );
-
-    Info<< "Selecting stateController "
-         << stateControllerName << endl;
-
-    dictionaryConstructorTable::iterator cstrIter =
-        dictionaryConstructorTablePtr_->find(stateControllerName);
-
-    if (cstrIter == dictionaryConstructorTablePtr_->end())
-    {
-        FatalError
-            << "stateController::New(const dictionary&) : " << endl
-            << "    unknown stateController type "
-            << stateControllerName
-            << ", constructor not in hash table" << endl << endl
-            << "    Valid types are :" << endl;
-        Info<< dictionaryConstructorTablePtr_->toc() << abort(FatalError);
-    }
-
-    return autoPtr<stateController>
-    (
-        cstrIter()(cloud, dict)
-    );
-}
-
-
-// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
-
-Foam::stateController::~stateController()
-{}
-
-
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-void Foam::stateController::updateTime()
-{
-    time_++;
-
-    const scalar& t = time_.time().timeOutputValue();
-
-    if ((t - initialTime_) < timePeriod_)
-    {
-        time_.controlTimeInterval().endTime() = false;
-    }
-}
-
-
-void Foam::stateController::updateStateControllerProperties
-(
-    const dictionary& newDict
-)
-{
-    controllerDict_ = newDict.subDict("controllerProperties");
-
-    if (controllerDict_.found("controlSwitch"))
-    {
-        control_ = Switch(controllerDict_.lookup("controlSwitch"));
-    }
-
-    if (controllerDict_.found("readStateFromFile"))
-    {
-        readStateFromFile_ = Switch
-        (
-            controllerDict_.lookup("readStateFromFile")
-        );
-    }
-
-    timeDict_ = controllerDict_.subDict("timeProperties");
-
-    if (timeDict_.found("resetAtOutput"))
-    {
-        time_.resetFieldsAtOutput() = Switch(timeDict_.lookup("resetAtOutput"));
-    }
-}
-
-
-const Foam::labelList& Foam::stateController::controlZone() const
-{
-    return mesh_.cellZones()[regionId_];
-}
-
-const Foam::word& Foam::stateController::regionName() const
-{
-    return regionName_;
-}
-
-
-Foam::scalar Foam::stateController::density() const
-{
-    return density_;
-}
-
-
-Foam::scalar& Foam::stateController::density()
-{
-    return density_;
-}
-
-
-const Foam::vector& Foam::stateController::velocity() const
-{
-    return velocity_;
-}
-
-
-Foam::vector& Foam::stateController::velocity()
-{
-    return velocity_;
-}
-
-
-Foam::scalar Foam::stateController::temperature() const
-{
-    return temperature_;
-}
-
-
-Foam::scalar& Foam::stateController::temperature()
-{
-    return temperature_;
-}
-
-const Foam::scalar& Foam::stateController::pressure() const
-{
-    return pressure_;
-}
-
-
-Foam::scalar& Foam::stateController::pressure()
-{
-    return pressure_;
-}
-
-
-const Foam::tensor& Foam::stateController::strainRate() const
-{
-    return strainRate_;
-}
-
-
-Foam::tensor& Foam::stateController::strainRate()
-{
-    return strainRate_;
-}
-
-
-const Foam::vector& Foam::stateController::tempGradient() const
-{
-    return tempGradient_;
-}
-
-
-Foam::vector& Foam::stateController::tempGradient()
-{
-    return tempGradient_;
-}
-
-
-const Foam::scalarField& Foam::stateController::densityField() const
-{
-    return densities_;
-}
-
-Foam::scalarField& Foam::stateController::densityField()
-{
-    return densities_;
-}
-
-
-const Foam::vectorField& Foam::stateController::velocityField() const
-{
-    return velocities_;
-}
-
-
-Foam::vectorField& Foam::stateController::velocityField()
-{
-    return velocities_;
-}
-
-
-const Foam::scalarField& Foam::stateController::temperatureField() const
-{
-    return temperatures_;
-}
-
-
-Foam::scalarField& Foam::stateController::temperatureField()
-{
-    return temperatures_;
-}
-
-
-const Foam::scalarField& Foam::stateController::pressureField() const
-{
-    return pressures_;
-}
-
-
-Foam::scalarField& Foam::stateController::pressureField()
-{
-    return pressures_;
-}
-
-
-bool Foam::stateController::singleValueController() const
-{
-    return singleValueController_;
-}
-
-
-bool& Foam::stateController::singleValueController()
-{
-    return singleValueController_;
-}
-
-
-bool Foam::stateController::fieldController() const
-{
-    return fieldController_;
-}
-
-
-bool& Foam::stateController::fieldController()
-{
-    return fieldController_;
-}
-
-
-bool Foam::stateController::writeInTimeDir() const
-{
-    return writeInTimeDir_;
-}
-
-
-bool Foam::stateController::writeInCase() const
-{
-    return writeInCase_;
-}
-
-
-Foam::scalar Foam::stateController::avReqDensity()
-{
-    scalar totalDensity = 0.0;
-
-    if (singleValueController_)
-    {
-        totalDensity = density_;
-    }
-    else if (fieldController_)
-    {
-        label controlCells = controlZone().size();
-
-        forAll(densities_, c)
-        {
-            totalDensity += densities_[c];
-        }
-
-        if (Pstream::parRun())
-        {
-            reduce(totalDensity, sumOp<scalar>());
-
-            reduce(controlCells, sumOp<label>());
-        }
-
-        if (controlCells > 0)
-        {
-            totalDensity /= scalar(controlCells);
-        }
-    }
-
-    return totalDensity;
-}
-
-
-Foam::vector Foam::stateController::avReqVelocity()
-{
-    vector totalVel = vector::zero;
-
-    if (singleValueController_)
-    {
-        totalVel = velocity_;
-    }
-    else if (fieldController_)
-    {
-        label controlCells = controlZone().size();
-
-        forAll(velocities_, c)
-        {
-            totalVel += velocities_[c];
-        }
-
-        if (Pstream::parRun())
-        {
-            reduce(totalVel, sumOp<vector>());
-
-            reduce(controlCells, sumOp<label>());
-        }
-
-        if (controlCells > 0)
-        {
-            totalVel /= scalar(controlCells);
-        }
-    }
-
-    return totalVel;
-}
-
-
-Foam::scalar Foam::stateController::avReqTemperature()
-{
-    scalar totalTemp = 0.0;
-
-    if (singleValueController_)
-    {
-        totalTemp = temperature_;
-    }
-    else if (fieldController_)
-    {
-        label controlCells = controlZone().size();
-
-        forAll(temperatures_, c)
-        {
-            totalTemp += temperatures_[c];
-        }
-
-        if (Pstream::parRun())
-        {
-            reduce(totalTemp, sumOp<scalar>());
-
-            reduce(controlCells, sumOp<label>());
-        }
-
-        if (controlCells > 0)
-        {
-            totalTemp /= scalar(controlCells);
-        }
-    }
-
-    return totalTemp;
-}
-
-
-Foam::scalar Foam::stateController::avReqPressure()
-{
-    scalar totalPressure = 0.0;
-
-    if (singleValueController_)
-    {
-        totalPressure = pressure_;
-    }
-    else if (fieldController_)
-    {
-        label controlCells = controlZone().size();
-
-        forAll(pressures_, c)
-        {
-            totalPressure += pressures_[c];
-        }
-
-        if (Pstream::parRun())
-        {
-            reduce(totalPressure, sumOp<scalar>());
-
-            reduce(controlCells, sumOp<label>());
-        }
-
-        if (controlCells > 0)
-        {
-            totalPressure /= scalar(controlCells);
-        }
-    }
-
-    return totalPressure;
-}
-
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/controllers/basic/stateController/stateController.H b/src/lagrangian/molecularDynamics/molecule/controllers/basic/stateController/stateController.H
deleted file mode 100644
index 3e142c3962e..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/controllers/basic/stateController/stateController.H
+++ /dev/null
@@ -1,270 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-Class
-    stateController
-
-Description
-
-    Basic/abstract class of a state controller
-
-SourceFiles
-    stateControllerI.H
-    stateController.C
-    stateControllerIO.C
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef stateController_H
-#define stateController_H
-
-#include "IOdictionary.H"
-#include "autoPtr.H"
-#include "runTimeSelectionTables.H"
-#include "vector.H"
-#include "volFields.H"
-#include "Random.H"
-#include "polyatomic.H"
-#include "timeData.H"
-#include "writeTimeData.H"
-#include "selectIds.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-
-/*---------------------------------------------------------------------------*\
-                      Class stateController Declaration
-\*---------------------------------------------------------------------------*/
-
-class stateController
-{
-
-protected:
-
-    // Protected data
-
-        //-
-        const fvMesh& mesh_;
-
-        //-
-        polyatomicCloud& cloud_;
-
-        //-
-        Random rndGen_;
-
-        //- subDictionary containing the properties
-        dictionary controllerDict_;
-
-        //-
-        dictionary timeDict_;
-
-        //-
-        timeData time_;
-
-        //-
-        scalar timePeriod_;
-
-        //-
-        scalar initialTime_;
-
-        //- name of control zone
-        word regionName_;
-
-        //-
-        label regionId_;
-
-        //-
-        bool control_;
-
-        //-
-        bool readStateFromFile_;
-
-        //- set all the properties below from model if required
-
-            //-
-            bool singleValueController_;
-
-            //- target values
-            scalar density_;
-            vector velocity_;
-            scalar temperature_;
-            scalar pressure_;
-            tensor strainRate_;
-            vector tempGradient_;
-
-            //- set this in model
-            bool fieldController_;
-
-            //- targeted fields
-            scalarField densities_;
-            vectorField velocities_;
-            scalarField temperatures_;
-            scalarField pressures_;
-
-            // set these in model
-            bool writeInTimeDir_;
-            bool writeInCase_;
-
-
-public:
-
-    //- Runtime type information
-    TypeName("stateController");
-
-    //- Declare runtime constructor selection table
-        declareRunTimeSelectionTable
-        (
-            autoPtr,
-            stateController,
-            dictionary,
-            (
-                polyatomicCloud& cloud,
-                const dictionary& dict
-            ),
-            (t, cloud, dict)
-        );
-
-    // Constructors
-
-        //- Construct from components
-        stateController
-        (
-            polyatomicCloud& cloud,
-            const dictionary& dict
-        );
-
-
-    // Selectors
-
-        static autoPtr<stateController> New
-        (
-            polyatomicCloud& cloud,
-            const dictionary& dict
-        );
-
-
-    // Destructor
-
-        virtual ~stateController();
-
-
-    // Member Functions
-
-
-        void updateTime();
-
-        //- create an initial configuration
-        virtual void initialConfiguration() = 0;
-
-        //- calculate any required properties
-        virtual void calculateProperties() = 0;
-
-        //- control molecules at different stages of the integration time-step
-        virtual void controlMolsBeg() = 0;
-
-        virtual void controlBeforeForces() = 0;
-
-        virtual void controlMols() = 0;
-
-        virtual void controlMolsEnd() = 0;
-
-
-        //- output data
-        virtual void output
-        (
-            const fileName& fixedPathName,
-            const fileName& timePath
-        ) = 0;
-
-        //- update properties from a modified dictionary
-        virtual void updateProperties(const dictionary&) = 0;
-
-        void updateStateControllerProperties(const dictionary&);
-
-        // Access
-
-            //- return the control zone cells
-            const labelList& controlZone() const;
-
-            //- return the control zone name
-            const word& regionName() const;
-
-            //- return the targeted fields
-            scalar density() const;
-            scalar& density();
-
-            const vector& velocity() const;
-            vector& velocity();
-
-            scalar temperature() const;
-            scalar& temperature();
-
-            scalar pressure() const;
-            scalar& pressure();
-
-            const tensor& strainRate() const;
-            tensor& strainRate();
-
-            const vector& tempGradient() const;
-            vector& tempGradient();
-
-            //- return the targeted fields
-            const scalarField& densityField() const;
-            scalarField& densityField();
-
-            const vectorField& velocityField() const;
-            vectorField& velocityField();
-
-            const scalarField& temperatureField() const;
-            scalarField& temperatureField();
-
-            const scalarField& pressureField() const;
-            scalarField& pressureField();
-
-            bool singleValueController() const;
-            bool& singleValueController();
-
-            bool fieldController() const;
-            bool& fieldController();
-
-            bool writeInTimeDir() const;
-            bool writeInCase() const;
-
-            scalar avReqDensity();
-            vector avReqVelocity();
-            scalar avReqTemperature();
-            scalar avReqPressure();
-};
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace Foam
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/molecules/constPropSite/constPropSite.C b/src/lagrangian/molecularDynamics/molecule/molecules/constPropSite/constPropSite.C
deleted file mode 100644
index 08ea263dd6b..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/molecules/constPropSite/constPropSite.C
+++ /dev/null
@@ -1,114 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-\*---------------------------------------------------------------------------*/
-
-#include "constPropSite.H"
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-Foam::constPropSite::constPropSite()
-:
-    siteReferencePosition_(vector::zero),
-    siteMass_(0.0),
-    siteCharge_(0.0),
-    siteId_(0),
-    name_(),
-    pairPotentialSite_(false),
-    electrostaticSite_(false)
-{}
-
-
-Foam::constPropSite::constPropSite
-(
-    const vector& siteReferencePosition,
-    const scalar& siteMass,
-    const scalar& siteCharge,
-    const label& siteId,
-    const word& name,
-    const bool& pairPotentialSite,
-    const bool& electrostaticSite
-)
-:
-    siteReferencePosition_(siteReferencePosition),
-    siteMass_(siteMass),
-    siteCharge_(siteCharge),
-    siteId_(siteId),
-    name_(name),
-    pairPotentialSite_(pairPotentialSite),
-    electrostaticSite_(electrostaticSite)
-{}
-
-
-// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
-
-Foam::constPropSite::~constPropSite()
-{}
-
-
-// * * * * * * * * * * * * * * * IOstream Operators  * * * * * * * * * * * * //
-
-Foam::Istream& Foam::operator>>(Istream& is, constPropSite& cPS)
-{
-    is  >> cPS.siteReferencePosition_
-        >> cPS.siteMass_
-        >> cPS.siteCharge_
-        >> cPS.siteId_
-        >> cPS.name_
-        >> cPS.pairPotentialSite_
-        >> cPS.electrostaticSite_;
-
-    // Check state of Istream
-    is.check
-    (
-        "Foam::Istream& Foam::operator>>"
-        "(Foam::Istream&, Foam::constPropSite&)"
-    );
-
-    return is;
-}
-
-
-Foam::Ostream& Foam::operator<<(Ostream& os, const constPropSite& cPS)
-{
-
-    os  << token::SPACE << cPS.siteReferencePosition()
-        << token::SPACE << cPS.siteMass()
-        << token::SPACE << cPS.siteCharge()
-        << token::SPACE << cPS.siteId()
-        << token::SPACE << cPS.name()
-        << token::SPACE << cPS.pairPotentialSite()
-        << token::SPACE << cPS.electrostaticSite();
-
-    // Check state of Ostream
-    os.check
-    (
-        "Foam::Ostream& Foam::operator<<(Foam::Ostream&, "
-        "const Foam::constPropSite&)"
-    );
-
-    return os;
-}
-
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/molecules/constPropSite/constPropSite.H b/src/lagrangian/molecularDynamics/molecule/molecules/constPropSite/constPropSite.H
deleted file mode 100644
index 910c0ccaef4..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/molecules/constPropSite/constPropSite.H
+++ /dev/null
@@ -1,185 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-Class
-
-
-Description
-
-
-SourceFiles
-    constPropSiteI.H
-    constPropSite.C
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef constPropSite_H
-#define constPropSite_H
-
-#include "vector.H"
-#include "IOstreams.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-
-// Forward declaration of classes
-class Istream;
-class Ostream;
-
-// Forward declaration of friend functions and operators
-class constPropSite;
-Istream& operator>>(Istream&, constPropSite&);
-Ostream& operator<<(Ostream&, const constPropSite&);
-
-
-/*---------------------------------------------------------------------------*\
-                         Class constPropSite Declaration
-\*---------------------------------------------------------------------------*/
-
-class constPropSite
-{
-    // Private data
-
-        //-
-        vector siteReferencePosition_;
-
-        //-
-        scalar siteMass_;
-
-        //-
-        scalar siteCharge_;
-
-        //-
-        label siteId_;
-
-        //-
-        word name_;
-
-        //-
-        bool pairPotentialSite_;
-
-        //-
-        bool electrostaticSite_;
-
-
-public:
-
-    // Constructors
-
-        //- Construct null
-        constPropSite();
-
-        //- Construct from components
-        constPropSite
-        (
-            const vector& siteReferencePosition,
-            const scalar& siteMass,
-            const scalar& siteCharge,
-            const label& siteId,
-            const word& name,
-            const bool& pairPotentialSite,
-            const bool& electrostaticSite
-        );
-
-
-    // Selectors
-
-    // Destructor
-
-        ~constPropSite();
-
-    // Member Functions
-
-        // Access
-
-            //-
-            inline const vector& siteReferencePosition() const;
-
-            //-
-            inline vector& siteReferencePosition();
-
-            //-
-            inline const scalar& siteMass() const;
-
-            //-
-            inline scalar& siteMass();
-
-            //-
-            inline const scalar& siteCharge() const;
-
-            //-
-            inline scalar& siteCharge();
-
-            //-
-            inline const label& siteId() const;
-
-            //-
-            inline label& siteId();
-
-            //-
-            inline const word& name() const;
-
-            //-
-            inline word& name();
-
-            //-
-            inline const bool& pairPotentialSite() const;
-
-            //-
-            inline bool& pairPotentialSite();
-
-            //-
-            inline const bool& electrostaticSite() const;
-
-            //-
-            inline bool& electrostaticSite();
-
-
-    // Member Operators
-
-        inline bool operator==(const constPropSite&) const;
-        inline bool operator!=(const constPropSite&) const;
-
-
-    // IOstream Operators
-
-        friend Istream& operator>>(Istream&, constPropSite&);
-        friend Ostream& operator<<(Ostream&, const constPropSite&);
-};
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace Foam
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#include "constPropSiteI.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/molecules/constPropSite/constPropSiteI.H b/src/lagrangian/molecularDynamics/molecule/molecules/constPropSite/constPropSiteI.H
deleted file mode 100644
index 9c648c94c8b..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/molecules/constPropSite/constPropSiteI.H
+++ /dev/null
@@ -1,139 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-\*---------------------------------------------------------------------------*/
-
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-inline const Foam::vector& Foam::constPropSite::siteReferencePosition() const
-{
-    return siteReferencePosition_;
-}
-
-
-inline Foam::vector& Foam::constPropSite::siteReferencePosition()
-{
-    return siteReferencePosition_;
-}
-
-
-inline const Foam::scalar& Foam::constPropSite::siteMass() const
-{
-    return siteMass_;
-}
-
-
-inline Foam::scalar& Foam::constPropSite::siteMass()
-{
-    return siteMass_;
-}
-
-
-inline const Foam::scalar& Foam::constPropSite::siteCharge() const
-{
-    return siteCharge_;
-}
-
-
-inline Foam::scalar& Foam::constPropSite::siteCharge()
-{
-    return siteCharge_;
-}
-
-
-inline const Foam::label& Foam::constPropSite::siteId() const
-{
-    return siteId_;
-}
-
-
-inline Foam::label& Foam::constPropSite::siteId()
-{
-    return siteId_;
-}
-
-
-inline const Foam::word& Foam::constPropSite::name() const
-{
-    return name_;
-}
-
-
-inline Foam::word& Foam::constPropSite::name()
-{
-    return name_;
-}
-
-
-inline const bool& Foam::constPropSite::pairPotentialSite() const
-{
-    return pairPotentialSite_;
-}
-
-
-inline bool& Foam::constPropSite::pairPotentialSite()
-{
-    return pairPotentialSite_;
-}
-
-
-inline const bool& Foam::constPropSite::electrostaticSite() const
-{
-    return electrostaticSite_;
-}
-
-
-inline bool& Foam::constPropSite::electrostaticSite()
-{
-    return electrostaticSite_;
-}
-
-
-// * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * * //
-
-bool Foam::constPropSite::operator==
-(
-    const constPropSite& rhs
-) const
-{
-    return
-       siteReferencePosition_ == rhs.siteReferencePosition_
-    && siteMass_ == rhs.siteMass_
-    && siteCharge_ == rhs.siteCharge_
-    && siteId_ == rhs.siteId_
-    && name_ == rhs.name_
-    && pairPotentialSite_ == rhs.pairPotentialSite_
-    && electrostaticSite_ == rhs.electrostaticSite_;
-}
-
-
-bool Foam::constPropSite::operator!=
-(
-    const constPropSite& rhs
-) const
-{
-    return !(*this == rhs);
-}
-
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/molecules/monoatomic/monoatomic.C b/src/lagrangian/molecularDynamics/molecule/molecules/monoatomic/monoatomic.C
deleted file mode 100644
index f5b03164878..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/molecules/monoatomic/monoatomic.C
+++ /dev/null
@@ -1,199 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2008-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-\*----------------------------------------------------------------------------*/
-
-#include "monoatomic.H"
-#include "Random.H"
-#include "Time.H"
-
-// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
-
-namespace Foam
-{
-    defineTypeNameAndDebug(monoatomic, 0);
-    defineTemplateTypeNameAndDebug(Cloud<monoatomic>, 0);
-}
-
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-bool Foam::monoatomic::move
-(
-    monoatomic::trackingData& td,
-    const scalar trackTime
-)
-{
-    td.switchProcessor = false;
-    td.keepParticle = true;
-
-    if (special_ != SPECIAL_FROZEN)
-    {
-        return td.keepParticle;
-    }
-
-    const constantProperties& constProps(td.cloud().constProps(id_));
-
-    if (td.part() == trackingData::tpFirstVelocityHalfStep)
-    {
-        // First leapfrog velocity adjust part, required before tracking+force
-        // part
-
-        v_ += 0.5*trackTime*a_;
-    }
-    else if (td.part() == trackingData::tpLinearTrack)
-    {
-        // Leapfrog tracking part
-
-        scalar tEnd = (1.0 - stepFraction())*trackTime;
-        scalar dtMax = tEnd;
-
-        while (td.keepParticle && !td.switchProcessor && tEnd > ROOTVSMALL)
-        {
-            // set the lagrangian time-step
-            scalar dt = min(dtMax, tEnd);
-
-            dt *= trackToFace(position() + dt*v_, td);
-
-            tEnd -= dt;
-            stepFraction() = 1.0 - tEnd/trackTime;
-        }
-
-        setSitePositions(constProps);
-    }
-    else if (td.part() == trackingData::tpSecondVelocityHalfStep)
-    {
-        // Second leapfrog velocity adjust part, required after tracking+force
-        // part
-
-        a_ = siteForces_[0]/constProps.mass();
-
-        v_ += 0.5*trackTime*a_;
-    }
-    else if (td.part() != trackingData::tpRotationalTrack)
-    {
-        FatalErrorIn("monoatomic::move(trackingData&, const scalar)") << nl
-            << td.part() << " is an invalid part of the integration method."
-            << abort(FatalError);
-    }
-
-    return td.keepParticle;
-}
-
-
-void Foam::monoatomic::transformProperties(const tensor& T)
-{
-    particle::transformProperties(T);
-
-    v_ = transform(T, v_);
-
-    a_ = transform(T, a_);
-
-    rf_ = transform(T, rf_);
-
-    sitePositions_[0] = position_ + (T & (sitePositions_[0] - position_));
-
-    siteForces_[0] = T & siteForces_[0];
-}
-
-
-void Foam::monoatomic::transformProperties(const vector& separation)
-{
-    particle::transformProperties(separation);
-
-    if (special_ == SPECIAL_TETHERED)
-    {
-        specialPosition_ += separation;
-    }
-
-    sitePositions_[0] += separation;
-}
-
-
-void Foam::monoatomic::setSitePositions(const constantProperties& constProps)
-{
-    sitePositions_[0] = position_;
-}
-
-
-void Foam::monoatomic::setSiteSizes(label size)
-{
-    // Nothing required, size controlled internally
-}
-
-
-bool Foam::monoatomic::hitPatch
-(
-    const polyPatch&,
-    trackingData&,
-    const label,
-    const scalar,
-    const tetIndices&
-)
-{
-    return false;
-}
-
-
-void Foam::monoatomic::hitProcessorPatch
-(
-    const processorPolyPatch&,
-    trackingData& td
-)
-{
-    td.switchProcessor = true;
-}
-
-
-void Foam::monoatomic::hitWallPatch
-(
-    const wallPolyPatch& wpp,
-    trackingData& td,
-    const tetIndices& tetIs
-)
-{
-    // Use of the normal from tetIs is not required as
-    // hasWallImpactDistance is false.
-    vector nw = normal();
-    nw /= mag(nw);
-
-    scalar vn = v_ & nw;
-
-    // Specular reflection
-    if (vn > 0)
-    {
-        v_ -= 2*vn*nw;
-    }
-}
-
-
-void Foam::monoatomic::hitPatch
-(
-    const polyPatch&,
-    trackingData& td
-)
-{
-    td.keepParticle = false;
-}
-
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/molecules/monoatomic/monoatomic.H b/src/lagrangian/molecularDynamics/molecule/molecules/monoatomic/monoatomic.H
deleted file mode 100644
index d1e999435b9..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/molecules/monoatomic/monoatomic.H
+++ /dev/null
@@ -1,418 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2008-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-Class
-    Foam::monoatomic
-
-Description
-    Foam::monoatomic
-
-SourceFiles
-    monoatomicI.H
-    monoatomic.C
-    monoatomicIO.C
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef monoatomic_H
-#define monoatomic_H
-
-#include "particle.H"
-#include "IOstream.H"
-#include "autoPtr.H"
-#include "diagTensor.H"
-#include "constPropSite.H"
-#include "MoleculeCloud.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-
-/*---------------------------------------------------------------------------*\
-                           Class monoatomic Declaration
-\*---------------------------------------------------------------------------*/
-
-class monoatomic
-:
-    public particle
-{
-
-public:
-
-    // Values of special that are less than zero are for built-in functionality.
-    // Values greater than zero are user specifiable/expandable (i.e. test
-    // special_ >= SPECIAL_USER)
-
-    enum specialTypes
-    {
-        SPECIAL_TETHERED = -1,
-        SPECIAL_FROZEN   = -2,
-        NOT_SPECIAL      = 0,
-        SPECIAL_USER     = 1
-    };
-
-    //- Class to hold monoatomic constant properties
-    class constantProperties
-    {
-        // Private data
-
-            //- Sites of mass, charge or interaction
-            FixedList<constPropSite, 1> sites_;
-
-            //- Which sites require electrostatic interactions
-            FixedList<label, 1> electrostaticSites_;
-
-            //- Which sites require pair interactions
-            FixedList<label, 1> pairPotSites_;
-
-            //-
-            scalar mass_;
-
-
-    public:
-
-        //-
-        inline constantProperties();
-
-        //- Construct from dictionary
-        inline constantProperties
-        (
-            const dictionary& dict,
-            const List<label>& siteIds
-        );
-
-        // Member functions
-
-        //-
-        inline const FixedList<constPropSite, 1>& sites() const;
-
-        //-
-        inline const FixedList<label, 1>& pairPotSites() const;
-
-        //-
-        inline const FixedList<label, 1>& electrostaticSites() const;
-
-        //-
-        inline label degreesOfFreedom() const;
-
-        //-
-        inline scalar mass() const;
-
-        //-
-        inline label nSites() const;
-    };
-
-
-    //- Class used to pass tracking data to the trackToFace function
-    class trackingData
-    :
-        public particle::TrackingData<MoleculeCloud<monoatomic> >
-    {
-    public:
-
-        enum trackPart
-        {
-            tpFirstVelocityHalfStep,
-            tpLinearTrack,
-            tpRotationalTrack,
-            tpSecondVelocityHalfStep,
-            tpAccess
-        };
-
-    private:
-
-        // label specifying which part of the integration algorithm is taking
-        label part_;
-
-
-    public:
-
-        // Constructors
-
-            trackingData(MoleculeCloud<monoatomic>& cloud, trackPart part)
-            :
-                particle::TrackingData<MoleculeCloud<monoatomic> >(cloud),
-                part_(part)
-            {}
-
-        // Member functions
-
-            inline label part() const
-            {
-                return part_;
-            }
-    };
-
-
-private:
-
-    // Private data
-
-          //- Linear velocity of monoatomic
-        vector v_;
-
-        //- Total linear acceleration of monoatomic
-        vector a_;
-
-            //-
-        vector specialPosition_;
-
-        //-
-        scalar potentialEnergy_;
-
-        // - r_ij f_ij, stress dyad
-        tensor rf_;
-
-//         // - r_ij outer product f_ij: virial contribution
-//         tensor rDotf_;
-
-        //-
-        label special_;
-
-        //-
-        label id_;
-
-        //-
-        FixedList<vector, 1> siteForces_;
-
-        //-
-        FixedList<vector, 1> sitePositions_;
-
-
-public:
-
-    //- Runtime type information
-    TypeName("monoatomic");
-
-    friend class Cloud<monoatomic>;
-
-    // Constructors
-
-        //- Construct with macroscopic description
-        inline monoatomic
-        (
-            const polyMesh& mesh,
-            const vector& position,
-            const label cellI,
-            const label tetFaceI,
-            const label tetPtI,
-            const scalar temperature,
-            const vector& bulkVelocity,
-            const vector& specialPosition,
-            const constantProperties& constProps,
-            trackingData& td,
-            const label special,
-            const label id
-        );
-
-        //- Construct from all components
-        inline monoatomic
-        (
-            const polyMesh& mesh,
-            const vector& position,
-            const label cellI,
-            const label tetFaceI,
-            const label tetPtI,
-            const vector& v,
-            const vector& a,
-            const vector& specialPosition,
-            const constantProperties& constProps,
-            const label special,
-            const label id
-        );
-
-        //- Construct from Istream
-        monoatomic
-        (
-            const polyMesh& mesh,
-            Istream& is,
-            bool readFields = true
-        );
-
-        //- Construct and return a clone
-        autoPtr<particle> clone() const
-        {
-            return autoPtr<particle>(new monoatomic(*this));
-        }
-
-        //- Factory class to read-construct particles used for
-        //  parallel transfer
-        class iNew
-        {
-            const polyMesh& mesh_;
-
-        public:
-
-            iNew(const polyMesh& mesh)
-            :
-                mesh_(mesh)
-            {}
-
-            autoPtr<monoatomic> operator()(Istream& is) const
-            {
-                return autoPtr<monoatomic>(new monoatomic(mesh_, is, true));
-            }
-        };
-
-
-    // Member Functions
-
-        // Tracking
-
-            //-
-            bool move(trackingData&, const scalar trackTime);
-
-            //-
-            virtual void transformProperties(const tensor& T);
-
-            //-
-            virtual void transformProperties(const vector& separation);
-
-            //-
-            void setSitePositions(const constantProperties& constProps);
-
-            //-
-            void setSiteSizes(label size);
-
-
-        // Access
-
-            //-
-            inline const vector& v() const;
-
-            //-
-            inline vector& v();
-
-            //-
-            inline const vector& a() const;
-
-            //-
-            inline vector& a();
-
-            //-
-            inline const FixedList<vector, 1>& siteForces() const;
-
-            //-
-            inline FixedList<vector, 1>& siteForces();
-
-            //-
-            inline const FixedList<vector, 1>& sitePositions() const;
-
-            //-
-            inline FixedList<vector, 1>& sitePositions();
-
-            //-
-            inline const vector& specialPosition() const;
-
-            //-
-            inline vector& specialPosition();
-
-            //-
-            inline scalar potentialEnergy() const;
-
-            //-
-            inline scalar& potentialEnergy();
-
-            //-
-            inline const tensor& rf() const;
-
-            //-
-            inline tensor& rf();
-
-            //-
-            inline label special() const;
-
-            //-
-            inline bool tethered() const;
-
-            //-
-            inline label id() const;
-
-
-    // Member Operators
-
-        //- Overridable function to handle the particle hitting a patch
-        //  Executed before other patch-hitting functions
-        bool hitPatch
-        (
-            const polyPatch&,
-            trackingData& td,
-            const label patchI,
-            const scalar trackFraction,
-            const tetIndices& tetIs
-        );
-
-        //- Overridable function to handle the particle hitting a processorPatch
-        void hitProcessorPatch
-        (
-            const processorPolyPatch&,
-            trackingData& td
-        );
-
-        //- Overridable function to handle the particle hitting a wallPatch
-        void hitWallPatch
-        (
-            const wallPolyPatch&,
-            trackingData& td,
-            const tetIndices&
-        );
-
-        //- Overridable function to handle the particle hitting a polyPatch
-        void hitPatch
-        (
-            const polyPatch&,
-            trackingData& td
-        );
-
-
-    // I-O
-
-        //- Read
-        static void readFields(Cloud<monoatomic>& mC);
-
-        //- Write
-        static void writeFields(const Cloud<monoatomic>& mC);
-
-        //- Show info
-        static void info(trackingData& td);
-
-
-    // IOstream Operators
-
-        friend Ostream& operator<<(Ostream&, const monoatomic&);
-};
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace Foam
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#include "monoatomicI.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/molecules/monoatomic/monoatomicI.H b/src/lagrangian/molecularDynamics/molecule/molecules/monoatomic/monoatomicI.H
deleted file mode 100644
index 4485d53b8dd..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/molecules/monoatomic/monoatomicI.H
+++ /dev/null
@@ -1,328 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2008-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-\*---------------------------------------------------------------------------*/
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-inline Foam::monoatomic::constantProperties::constantProperties()
-:
-    sites_(),
-    electrostaticSites_(-1),
-    pairPotSites_(-1),
-    mass_(0)
-{}
-
-
-inline Foam::monoatomic::constantProperties::constantProperties
-(
-    const dictionary& dict,
-    const List<label>& siteIds
-)
-:
-    sites_(),
-    electrostaticSites_(-1),
-    pairPotSites_(-1),
-    mass_(0)
-{
-    if (siteIds.size() != 1)
-    {
-        FatalErrorIn
-        (
-            "Foam::monoatomic::constantProperties::constantProperties"
-            "("
-                "const dictionary& dict, "
-                "const List<label>& siteIds"
-            ")"
-        )
-            << "monoatomic, single site only, given: " << dict
-            << nl << abort(FatalError);
-    }
-
-    FixedList<word, 1> siteIdNames = dict.lookup("siteIds");
-
-    FixedList<vector, 1> siteReferencePositions
-    (
-        dict.lookup("siteReferencePositions")
-    );
-
-    FixedList<scalar, 1> siteMasses(dict.lookup("siteMasses"));
-
-    FixedList<scalar, 1> siteCharges(dict.lookup("siteCharges"));
-
-    FixedList<word, 1> pairPotentialIds(dict.lookup("pairPotentialSiteIds"));
-
-    constPropSite site = sites_[0];
-
-    site = constPropSite
-    (
-        siteReferencePositions[0],
-        siteMasses[0],
-        siteCharges[0],
-        siteIds[0],
-        siteIdNames[0],
-        (findIndex(pairPotentialIds, siteIdNames[0]) != -1),    // pair
-        (mag(siteCharges[0]) > VSMALL)                          // charge
-    );
-
-    mass_ = site.siteMass();
-
-    if (site.pairPotentialSite())
-    {
-        pairPotSites_[0] = 0;
-    }
-
-    if (site.electrostaticSite())
-    {
-        electrostaticSites_[0] = 0;
-    }
-
-    if (!site.pairPotentialSite() && !site.electrostaticSite())
-    {
-        WarningIn
-        (
-            "Foam::monoatomic::constantProperties::constantProperties"
-            "("
-            "const dictionary& dict"
-            ")"
-        )
-        << siteIdNames[0] << " is a non-interacting site." << endl;
-    }
-
-    // Single site monoatomic - no rotational motion.
-    site.siteReferencePosition() = vector::zero;
-}
-
-
-inline Foam::monoatomic::monoatomic
-(
-    const polyMesh& mesh,
-    const vector& position,
-    const label cellI,
-    const label tetFaceI,
-    const label tetPtI,
-    const scalar temperature,
-    const vector& bulkVelocity,
-    const vector& specialPosition,
-    const constantProperties& cP,
-    monoatomic::trackingData& td,
-    const label special,
-    const label id
-)
-:
-    particle(mesh, position, cellI, tetFaceI, tetPtI),
-    v_(bulkVelocity),
-    a_(vector::zero),
-    specialPosition_(specialPosition),
-    potentialEnergy_(0.0),
-    rf_(tensor::zero),
-    special_(special),
-    id_(id),
-    siteForces_(vector::zero),
-    sitePositions_()
-{
-    setSitePositions(cP);
-
-    v_ += td.cloud().equipartitionLinearVelocity(temperature, cP.mass());
-}
-
-
-inline Foam::monoatomic::monoatomic
-(
-    const polyMesh& mesh,
-    const vector& position,
-    const label cellI,
-    const label tetFaceI,
-    const label tetPtI,
-    const vector& v,
-    const vector& a,
-    const vector& specialPosition,
-    const constantProperties& cP,
-    const label special,
-    const label id
-
-)
-:
-    particle(mesh, position, cellI, tetFaceI, tetPtI),
-    v_(v),
-    a_(a),
-    specialPosition_(specialPosition),
-    potentialEnergy_(0.0),
-    rf_(tensor::zero),
-    special_(special),
-    id_(id),
-    siteForces_(vector::zero),
-    sitePositions_()
-{
-    setSitePositions(cP);
-}
-
-// * * * * * * * constantProperties Member Functions * * * * * * * * * * * * //
-
-inline const Foam::FixedList<Foam::constPropSite, 1>&
-Foam::monoatomic::constantProperties::sites() const
-{
-    return sites_;
-}
-
-
-inline const Foam::FixedList<Foam::label, 1>&
-Foam::monoatomic::constantProperties::pairPotSites() const
-{
-    return pairPotSites_;
-}
-
-
-inline const Foam::FixedList<Foam::label, 1>&
-Foam::monoatomic::constantProperties::electrostaticSites() const
-{
-    return electrostaticSites_;
-}
-
-
-inline Foam::label
-Foam::monoatomic::constantProperties::degreesOfFreedom() const
-{
-    return 3;
-}
-
-
-inline Foam::scalar Foam::monoatomic::constantProperties::mass() const
-{
-    return mass_;
-}
-
-
-inline Foam::label Foam::monoatomic::constantProperties::nSites() const
-{
-    return 1;
-}
-
-
-// * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
-
-inline const Foam::vector& Foam::monoatomic::v() const
-{
-    return v_;
-}
-
-
-inline Foam::vector& Foam::monoatomic::v()
-{
-    return v_;
-}
-
-
-inline const Foam::vector& Foam::monoatomic::a() const
-{
-    return a_;
-}
-
-
-inline Foam::vector& Foam::monoatomic::a()
-{
-    return a_;
-}
-
-
-inline const Foam::FixedList<Foam::vector, 1>&
-Foam::monoatomic::siteForces() const
-{
-    return siteForces_;
-}
-
-
-inline Foam::FixedList<Foam::vector, 1>& Foam::monoatomic::siteForces()
-{
-    return siteForces_;
-}
-
-
-inline const Foam::FixedList<Foam::vector, 1>&
-Foam::monoatomic::sitePositions() const
-{
-    return sitePositions_;
-}
-
-
-inline Foam::FixedList<Foam::vector, 1>& Foam::monoatomic::sitePositions()
-{
-    return sitePositions_;
-}
-
-
-inline const Foam::vector& Foam::monoatomic::specialPosition() const
-{
-    return specialPosition_;
-}
-
-
-inline Foam::vector& Foam::monoatomic::specialPosition()
-{
-    return specialPosition_;
-}
-
-
-inline Foam::scalar Foam::monoatomic::potentialEnergy() const
-{
-    return potentialEnergy_;
-}
-
-
-inline Foam::scalar& Foam::monoatomic::potentialEnergy()
-{
-    return potentialEnergy_;
-}
-
-
-inline const Foam::tensor& Foam::monoatomic::rf() const
-{
-    return rf_;
-}
-
-
-inline Foam::tensor& Foam::monoatomic::rf()
-{
-    return rf_;
-}
-
-
-inline Foam::label Foam::monoatomic::special() const
-{
-    return special_;
-}
-
-
-inline bool Foam::monoatomic::tethered() const
-{
-    return special_ == SPECIAL_TETHERED;
-}
-
-
-inline Foam::label Foam::monoatomic::id() const
-{
-    return id_;
-}
-
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/molecules/monoatomic/monoatomicIO.C b/src/lagrangian/molecularDynamics/molecule/molecules/monoatomic/monoatomicIO.C
deleted file mode 100644
index a9a27bb9929..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/molecules/monoatomic/monoatomicIO.C
+++ /dev/null
@@ -1,305 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2008-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-\*---------------------------------------------------------------------------*/
-
-#include "monoatomic.H"
-#include "IOstreams.H"
-#include "Cloud.H"
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-Foam::monoatomic::monoatomic
-(
-    const polyMesh& mesh,
-    Istream& is,
-    bool readFields
-)
-:
-    particle(mesh, is, readFields),
-    v_(vector::zero),
-    a_(vector::zero),
-    specialPosition_(vector::zero),
-    potentialEnergy_(0.0),
-    rf_(tensor::zero),
-    special_(0),
-    id_(0),
-    siteForces_(),
-    sitePositions_()
-{
-    if (readFields)
-    {
-        if (is.format() == IOstream::ASCII)
-        {
-            is  >> v_;
-            is  >> a_;
-            is  >> siteForces_;
-            potentialEnergy_ = readScalar(is);
-            is  >> rf_;
-            special_ = readLabel(is);
-            id_ = readLabel(is);
-            is  >> sitePositions_;
-            is  >> specialPosition_;
-        }
-        else
-        {
-            is.read
-            (
-                reinterpret_cast<char*>(&v_),
-                sizeof(v_)
-              + sizeof(a_)
-              + sizeof(specialPosition_)
-              + sizeof(potentialEnergy_)
-              + sizeof(rf_)
-              + sizeof(special_)
-              + sizeof(id_)
-            );
-
-            is  >> siteForces_ >> sitePositions_;
-        }
-    }
-
-    // Check state of Istream
-    is.check
-    (
-        "Foam::monoatomic::monoatomic"
-        "("
-            "const polyMesh& mesh,"
-            "Istream& is,"
-            "bool readFields"
-        ")"
-    );
-}
-
-
-void Foam::monoatomic::readFields(Cloud<monoatomic>& mC)
-{
-    if (!mC.size())
-    {
-        return;
-    }
-
-    particle::readFields(mC);
-
-    IOField<vector> v(mC.fieldIOobject("v", IOobject::MUST_READ));
-    mC.checkFieldIOobject(mC, v);
-
-    IOField<vector> a(mC.fieldIOobject("a", IOobject::MUST_READ));
-    mC.checkFieldIOobject(mC, a);
-
-    IOField<vector> specialPosition
-    (
-        mC.fieldIOobject("specialPosition", IOobject::MUST_READ)
-    );
-    mC.checkFieldIOobject(mC, specialPosition);
-
-    IOField<label> special(mC.fieldIOobject("special", IOobject::MUST_READ));
-    mC.checkFieldIOobject(mC, special);
-
-    IOField<label> id(mC.fieldIOobject("id", IOobject::MUST_READ));
-    mC.checkFieldIOobject(mC, id);
-
-    label i = 0;
-
-    forAllIter(typename Cloud<monoatomic>, mC, iter)
-    {
-        monoatomic& mol = iter();
-
-        mol.v_ = v[i];
-        mol.a_ = a[i];
-        mol.specialPosition_ = specialPosition[i];
-        mol.special_ = special[i];
-        mol.id_ = id[i];
-        i++;
-    }
-}
-
-
-void Foam::monoatomic::writeFields(const Cloud<monoatomic>& mC)
-{
-    particle::writeFields(mC);
-
-    label np = mC.size();
-
-    IOField<vector> v(mC.fieldIOobject("v", IOobject::NO_READ), np);
-    IOField<vector> a(mC.fieldIOobject("a", IOobject::NO_READ), np);
-    IOField<vector> specialPosition
-    (
-        mC.fieldIOobject("specialPosition", IOobject::NO_READ),
-        np
-    );
-    IOField<label> special(mC.fieldIOobject("special", IOobject::NO_READ), np);
-    IOField<label> id(mC.fieldIOobject("id", IOobject::NO_READ), np);
-
-    label i = 0;
-    forAllConstIter(typename Cloud<monoatomic>, mC, iter)
-    {
-        const monoatomic& mol = iter();
-
-        v[i] = mol.v_;
-        a[i] = mol.a_;
-        specialPosition[i] = mol.specialPosition_;
-        special[i] = mol.special_;
-        id[i] = mol.id_;
-        i++;
-    }
-
-    v.write();
-    a.write();
-    specialPosition.write();
-    special.write();
-    id.write();
-}
-
-
-void Foam::monoatomic::info(monoatomic::trackingData& td)
-{
-    vector totalLinearMomentum(vector::zero);
-    scalar maxVelocityMag = 0.0;
-    scalar totalMass = 0.0;
-    scalar totalLinearKE = 0.0;
-    scalar totalPE = 0.0;
-    scalar totalrDotf = 0.0;
-    label nMols = td.cloud().size();
-
-    forAllConstIter(typename Cloud<monoatomic>, td.cloud(), mol)
-    {
-        const label molId = mol().id();
-        scalar molMass(td.cloud().constProps(molId).mass());
-        totalMass += molMass;
-    }
-
-    forAllConstIter(typename Cloud<monoatomic>, td.cloud(), mol)
-    {
-        const label molId = mol().id();
-        const monoatomic::constantProperties cP
-        (
-            td.cloud().constProps(molId)
-        );
-        scalar molMass(cP.mass());
-        const vector& molV(mol().v());
-        totalLinearMomentum += molV * molMass;
-        if (mag(molV) > maxVelocityMag)
-        {
-            maxVelocityMag = mag(molV);
-        }
-        totalLinearKE += 0.5*molMass*magSqr(molV);
-        totalPE += mol().potentialEnergy();
-        totalrDotf += tr(mol().rf());
-    }
-
-    scalar meshVolume = sum(td.cloud().mesh().cellVolumes());
-
-    if (Pstream::parRun())
-    {
-        reduce(totalLinearMomentum, sumOp<vector>());
-        reduce(maxVelocityMag, maxOp<scalar>());
-        reduce(totalMass, sumOp<scalar>());
-        reduce(totalLinearKE, sumOp<scalar>());
-        reduce(totalPE, sumOp<scalar>());
-        reduce(totalrDotf, sumOp<scalar>());
-        reduce(nMols, sumOp<label>());
-        reduce(meshVolume, sumOp<scalar>());
-    }
-
-    if (nMols)
-    {
-        Info<< nl << "Number of molecules in " << td.cloud().name() << " = "
-            << nMols << nl
-            << "    Overall number density = "
-            << nMols/meshVolume << nl
-            << "    Overall mass density = "
-            << totalMass/meshVolume << nl
-            << "    Average linear momentum per molecule = "
-            << totalLinearMomentum/nMols << ' '
-            << mag(totalLinearMomentum)/nMols << nl
-            << "    maximum |velocity| = "
-            << maxVelocityMag << nl
-            << "    Average linear KE per molecule = "
-            << totalLinearKE/nMols << nl
-            << "    Average angular KE per molecule = "
-            << totalPE/nMols << nl
-            << "    Average TE per molecule = "
-            <<
-            (
-                  totalLinearKE
-                + totalPE
-            )
-            /nMols
-            << nl << endl;
-    }
-    else
-    {
-        Info<< nl << "No molecules in " << td.cloud().name() << endl;
-    }
-}
-
-
-// * * * * * * * * * * * * * * * IOstream Operators  * * * * * * * * * * * * //
-
-Foam::Ostream& Foam::operator<<(Ostream& os, const monoatomic& mol)
-{
-    if (os.format() == IOstream::ASCII)
-    {
-        os  << token::SPACE << static_cast<const particle&>(mol)
-            << token::SPACE << mol.face()
-            << token::SPACE << mol.stepFraction()
-            << token::SPACE << mol.v_
-            << token::SPACE << mol.a_
-            << token::SPACE << mol.specialPosition_
-            << token::SPACE << mol.potentialEnergy_
-            << token::SPACE << mol.rf_
-            << token::SPACE << mol.special_
-            << token::SPACE << mol.id_
-            << token::SPACE << mol.siteForces_
-            << token::SPACE << mol.sitePositions_;
-    }
-    else
-    {
-        os  << static_cast<const particle&>(mol);
-        os.write
-        (
-            reinterpret_cast<const char*>(&mol.v_),
-            sizeof(mol.v_)
-          + sizeof(mol.a_)
-          + sizeof(mol.specialPosition_)
-          + sizeof(mol.potentialEnergy_)
-          + sizeof(mol.rf_)
-          + sizeof(mol.special_)
-          + sizeof(mol.id_)
-        );
-        os  << mol.siteForces_ << mol.sitePositions_;
-    }
-
-    // Check state of Ostream
-    os.check
-    (
-        "Foam::Ostream& Foam::operator<<"
-        "(Foam::Ostream&, const Foam::monoatomic&)"
-    );
-
-    return os;
-}
-
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/molecules/polyatomic/polyatomic.C b/src/lagrangian/molecularDynamics/molecule/molecules/polyatomic/polyatomic.C
deleted file mode 100644
index 18fbfbb5c9c..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/molecules/polyatomic/polyatomic.C
+++ /dev/null
@@ -1,320 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2008-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-\*----------------------------------------------------------------------------*/
-
-#include "polyatomic.H"
-#include "Random.H"
-#include "Time.H"
-
-// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
-
-namespace Foam
-{
-    defineTypeNameAndDebug(polyatomic, 0);
-    defineTemplateTypeNameAndDebug(Cloud<polyatomic>, 0);
-}
-
-
-// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
-
-Foam::tensor Foam::polyatomic::rotationTensorX(scalar phi) const
-{
-    return tensor
-    (
-        1, 0, 0,
-        0, Foam::cos(phi), -Foam::sin(phi),
-        0, Foam::sin(phi), Foam::cos(phi)
-    );
-}
-
-
-Foam::tensor Foam::polyatomic::rotationTensorY(scalar phi) const
-{
-    return tensor
-    (
-        Foam::cos(phi), 0, Foam::sin(phi),
-        0, 1, 0,
-        -Foam::sin(phi), 0, Foam::cos(phi)
-    );
-}
-
-
-Foam::tensor Foam::polyatomic::rotationTensorZ(scalar phi) const
-{
-    return tensor
-    (
-        Foam::cos(phi), -Foam::sin(phi), 0,
-        Foam::sin(phi), Foam::cos(phi), 0,
-        0, 0, 1
-    );
-}
-
-
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-bool Foam::polyatomic::move
-(
-    polyatomic::trackingData& td,
-    const scalar trackTime
-)
-{
-    td.switchProcessor = false;
-    td.keepParticle = true;
-
-    if (special_ != SPECIAL_FROZEN)
-    {
-        return td.keepParticle;
-    }
-
-    const constantProperties& constProps(td.cloud().constProps(id_));
-
-    if (td.part() == trackingData::tpFirstVelocityHalfStep)
-    {
-        // First leapfrog velocity adjust part, required before tracking+force
-        // part
-
-        v_ += 0.5*trackTime*a_;
-
-        pi_ += 0.5*trackTime*tau_;
-    }
-    else if (td.part() == trackingData::tpLinearTrack)
-    {
-        // Leapfrog tracking part
-
-        scalar tEnd = (1.0 - stepFraction())*trackTime;
-        scalar dtMax = tEnd;
-
-        while (td.keepParticle && !td.switchProcessor && tEnd > ROOTVSMALL)
-        {
-            // set the lagrangian time-step
-            scalar dt = min(dtMax, tEnd);
-
-            dt *= trackToFace(position() + dt*v_, td);
-
-            tEnd -= dt;
-            stepFraction() = 1.0 - tEnd/trackTime;
-        }
-    }
-    else if (td.part() == trackingData::tpRotationalTrack)
-    {
-        // Leapfrog orientation adjustment, carried out before force calculation
-        // but after tracking stage, i.e. rotation carried once linear motion
-        // complete.
-
-        if (!constProps.pointMolecule())
-        {
-            const diagTensor& momentOfInertia(constProps.momentOfInertia());
-
-            tensor R;
-
-            if (!constProps.linearMolecule())
-            {
-                R = rotationTensorX(0.5*trackTime*pi_.x()/momentOfInertia.xx());
-                pi_ = pi_ & R;
-                Q_ = Q_ & R;
-            }
-
-            R = rotationTensorY(0.5*trackTime*pi_.y()/momentOfInertia.yy());
-            pi_ = pi_ & R;
-            Q_ = Q_ & R;
-
-            R = rotationTensorZ(trackTime*pi_.z()/momentOfInertia.zz());
-            pi_ = pi_ & R;
-            Q_ = Q_ & R;
-
-            R = rotationTensorY(0.5*trackTime*pi_.y()/momentOfInertia.yy());
-            pi_ = pi_ & R;
-            Q_ = Q_ & R;
-
-            if (!constProps.linearMolecule())
-            {
-                R = rotationTensorX(0.5*trackTime*pi_.x()/momentOfInertia.xx());
-                pi_ = pi_ & R;
-                Q_ = Q_ & R;
-            }
-        }
-
-        setSitePositions(constProps);
-    }
-    else if (td.part() == trackingData::tpSecondVelocityHalfStep)
-    {
-        // Second leapfrog velocity adjust part, required after tracking+force
-        // part
-
-        scalar m = constProps.mass();
-
-        a_ = vector::zero;
-
-        tau_ = vector::zero;
-
-        forAll(siteForces_, sI)
-        {
-            const vector& f = siteForces_[sI];
-
-            a_ += f/m;
-
-            tau_ +=
-                constProps.sites()[sI].siteReferencePosition()
-              ^ (Q_.T() & f);
-        }
-
-        v_ += 0.5*trackTime*a_;
-
-        pi_ += 0.5*trackTime*tau_;
-
-        if (constProps.pointMolecule())
-        {
-            tau_ = vector::zero;
-
-            pi_ = vector::zero;
-        }
-
-        if (constProps.linearMolecule())
-        {
-            tau_.x() = 0.0;
-
-            pi_.x() = 0.0;
-        }
-    }
-    else
-    {
-        FatalErrorIn("polyatomic::move(trackingData&, const scalar)") << nl
-            << td.part() << " is an invalid part of the integration method."
-            << abort(FatalError);
-    }
-
-    return td.keepParticle;
-}
-
-
-void Foam::polyatomic::transformProperties(const tensor& T)
-{
-    particle::transformProperties(T);
-
-    Q_ = T & Q_;
-
-    v_ = transform(T, v_);
-
-    a_ = transform(T, a_);
-
-    pi_ = Q_.T() & transform(T, Q_ & pi_);
-
-    tau_ = Q_.T() & transform(T, Q_ & tau_);
-
-    rf_ = transform(T, rf_);
-
-    sitePositions_ = position_ + (T & (sitePositions_ - position_));
-
-    siteForces_ = T & siteForces_;
-}
-
-
-void Foam::polyatomic::transformProperties(const vector& separation)
-{
-    particle::transformProperties(separation);
-
-    if (special_ == SPECIAL_TETHERED)
-    {
-        specialPosition_ += separation;
-    }
-
-    sitePositions_ = sitePositions_ + separation;
-}
-
-
-void Foam::polyatomic::setSitePositions(const constantProperties& constProps)
-{
-    forAll(constProps.sites(), sI)
-    {
-        sitePositions_[sI] =
-            position_
-          + (Q_ & constProps.sites()[sI].siteReferencePosition());
-    }
-}
-
-
-void Foam::polyatomic::setSiteSizes(label size)
-{
-    sitePositions_.setSize(size);
-
-    siteForces_.setSize(size);
-}
-
-
-bool Foam::polyatomic::hitPatch
-(
-    const polyPatch&,
-    trackingData&,
-    const label,
-    const scalar,
-    const tetIndices&
-)
-{
-    return false;
-}
-
-
-void Foam::polyatomic::hitProcessorPatch
-(
-    const processorPolyPatch&,
-    trackingData& td
-)
-{
-    td.switchProcessor = true;
-}
-
-
-void Foam::polyatomic::hitWallPatch
-(
-    const wallPolyPatch& wpp,
-    trackingData& td,
-    const tetIndices& tetIs
-)
-{
-    // Use of the normal from tetIs is not required as
-    // hasWallImpactDistance is false.
-    vector nw = normal();
-    nw /= mag(nw);
-
-    scalar vn = v_ & nw;
-
-    // Specular reflection
-    if (vn > 0)
-    {
-        v_ -= 2*vn*nw;
-    }
-}
-
-
-void Foam::polyatomic::hitPatch
-(
-    const polyPatch&,
-    trackingData& td
-)
-{
-    td.keepParticle = false;
-}
-
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/molecules/polyatomic/polyatomic.H b/src/lagrangian/molecularDynamics/molecule/molecules/polyatomic/polyatomic.H
deleted file mode 100644
index 0a7797516b7..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/molecules/polyatomic/polyatomic.H
+++ /dev/null
@@ -1,483 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2008-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-Class
-    Foam::polyatomic
-
-Description
-    Foam::polyatomic
-
-SourceFiles
-    polyatomicI.H
-    polyatomic.C
-    polyatomicIO.C
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef polyatomic_H
-#define polyatomic_H
-
-#include "particle.H"
-#include "IOstream.H"
-#include "autoPtr.H"
-#include "diagTensor.H"
-#include "constPropSite.H"
-#include "MoleculeCloud.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-
-/*---------------------------------------------------------------------------*\
-                           Class polyatomic Declaration
-\*---------------------------------------------------------------------------*/
-
-class polyatomic
-:
-    public particle
-{
-
-public:
-
-    // Values of special that are less than zero are for built-in functionality.
-    // Values greater than zero are user specifiable/expandable (i.e. test
-    // special_ >= SPECIAL_USER)
-
-    enum specialTypes
-    {
-        SPECIAL_TETHERED = -1,
-        SPECIAL_FROZEN   = -2,
-        NOT_SPECIAL      = 0,
-        SPECIAL_USER     = 1
-    };
-
-    //- Class to hold polyatomic constant properties
-    class constantProperties
-    {
-        // Private data
-
-            //- Sites of mass, charge or interaction
-            List<constPropSite> sites_;
-
-            //- Which sites require electrostatic interactions
-            List<label> electrostaticSites_;
-
-            //- Which sites require pair interactions
-            List<label> pairPotSites_;
-
-            //- Moment of intertia (in principal axis configiration)
-            diagTensor momentOfInertia_;
-
-            //-
-            scalar mass_;
-
-
-        // Private Member Functions
-
-            //-
-            bool linearMoleculeTest() const;
-
-
-    public:
-
-        //-
-        inline constantProperties();
-
-        //- Construct from dictionary
-        inline constantProperties
-        (
-            const dictionary& dict,
-            const labelList& siteIds
-        );
-
-        // Member functions
-
-        //-
-        inline const List<constPropSite>& sites() const;
-
-        //-
-        inline const List<label>& pairPotSites() const;
-
-        //-
-        inline const List<label>& electrostaticSites() const;
-
-        //-
-        inline const diagTensor& momentOfInertia() const;
-
-        //-
-        inline bool linearMolecule() const;
-
-        //-
-        inline bool pointMolecule() const;
-
-        //-
-        inline label degreesOfFreedom() const;
-
-        //-
-        inline scalar mass() const;
-
-        //-
-        inline label nSites() const;
-    };
-
-
-    //- Class used to pass tracking data to the trackToFace function
-    class trackingData
-    :
-        public particle::TrackingData<MoleculeCloud<polyatomic> >
-    {
-    public:
-
-        enum trackPart
-        {
-            tpFirstVelocityHalfStep,
-            tpLinearTrack,
-            tpRotationalTrack,
-            tpSecondVelocityHalfStep,
-            tpAccess
-        };
-
-
-    private:
-
-        // label specifying which part of the integration algorithm is taking
-        label part_;
-
-
-    public:
-
-        // Constructors
-
-            trackingData(MoleculeCloud<polyatomic>& cloud, trackPart part)
-            :
-                particle::TrackingData<MoleculeCloud<polyatomic> >(cloud),
-                part_(part)
-            {}
-
-        // Member functions
-
-            inline label part() const
-            {
-                return part_;
-            }
-    };
-
-
-private:
-
-    // Private data
-
-        //- Orientation, stored as the rotation tensor to transform
-        //  from the polyatomic to the global reference frame, i.e.:
-        //  globalVector = Q_ & bodyLocalVector
-        //  bodyLocalVector = Q_.T() & globalVector
-        tensor Q_;
-
-        //- Linear velocity of polyatomic
-        vector v_;
-
-        //- Total linear acceleration of polyatomic
-        vector a_;
-
-        //- Angular momentum of polyatomic, in body local reference frame
-        vector pi_;
-
-        //- Total torque on polyatomic, in body local reference frame
-        vector tau_;
-
-        //-
-        vector specialPosition_;
-
-        //-
-        scalar potentialEnergy_;
-
-        // - r_ij f_ij, stress dyad
-        tensor rf_;
-
-//         // - r_ij outer product f_ij: virial contribution
-//         tensor rDotf_;
-
-        //-
-        label special_;
-
-        //-
-        label id_;
-
-        //-
-        List<vector> siteForces_;
-
-        //-
-        List<vector> sitePositions_;
-
-
-    // Private Member Functions
-
-
-        //-
-        tensor rotationTensorX(scalar deltaT) const;
-
-        //-
-        tensor rotationTensorY(scalar deltaT) const;
-
-        //-
-        tensor rotationTensorZ(scalar deltaT) const;
-
-
-public:
-
-    //- Runtime type information
-    TypeName("polyatomic");
-
-    friend class Cloud<polyatomic>;
-
-    // Constructors
-
-        //- Construct with macroscopic description
-        inline polyatomic
-        (
-            const polyMesh& mesh,
-            const vector& position,
-            const label cellI,
-            const label tetFaceI,
-            const label tetPtI,
-            const scalar temperature,
-            const vector& bulkVelocity,
-            const vector& specialPosition,
-            const constantProperties& constProps,
-            polyatomic::trackingData& td,
-            const label special,
-            const label id
-        );
-
-        //- Construct from all components
-        inline polyatomic
-        (
-            const polyMesh& mesh,
-            const vector& position,
-            const label cellI,
-            const label tetFaceI,
-            const label tetPtI,
-            const tensor& Q,
-            const vector& v,
-            const vector& a,
-            const vector& pi,
-            const vector& tau,
-            const vector& specialPosition,
-            const constantProperties& constProps,
-            const label special,
-            const label id
-        );
-
-        //- Construct from Istream
-        polyatomic
-        (
-            const polyMesh& mesh,
-            Istream& is,
-            bool readFields = true
-        );
-
-        //- Construct and return a clone
-        autoPtr<particle> clone() const
-        {
-            return autoPtr<particle>(new polyatomic(*this));
-        }
-
-        //- Factory class to read-construct particles used for
-        //  parallel transfer
-        class iNew
-        {
-            const polyMesh& mesh_;
-
-        public:
-
-            iNew(const polyMesh& mesh)
-            :
-                mesh_(mesh)
-            {}
-
-            autoPtr<polyatomic> operator()(Istream& is) const
-            {
-                return autoPtr<polyatomic>(new polyatomic(mesh_, is, true));
-            }
-        };
-
-
-    // Member Functions
-
-        // Tracking
-
-            //-
-            bool move(trackingData&, const scalar trackTime);
-
-            //-
-            virtual void transformProperties(const tensor& T);
-
-            //-
-            virtual void transformProperties(const vector& separation);
-
-            //-
-            void setSitePositions(const constantProperties& constProps);
-
-            //-
-            void setSiteSizes(label size);
-
-
-        // Access
-
-            //-
-            inline const tensor& Q() const;
-
-            //-
-            inline tensor& Q();
-
-            //-
-            inline const vector& v() const;
-
-            //-
-            inline vector& v();
-
-            //-
-            inline const vector& a() const;
-
-            //-
-            inline vector& a();
-
-            //-
-            inline const vector& pi() const;
-
-            //-
-            inline vector& pi();
-
-            //-
-            inline const vector& tau() const;
-
-            //-
-            inline vector& tau();
-
-            //-
-            inline const List<vector>& siteForces() const;
-
-            //-
-            inline List<vector>& siteForces();
-
-            //-
-            inline const List<vector>& sitePositions() const;
-
-            //-
-            inline List<vector>& sitePositions();
-
-            //-
-            inline const vector& specialPosition() const;
-
-            //-
-            inline vector& specialPosition();
-
-            //-
-            inline scalar potentialEnergy() const;
-
-            //-
-            inline scalar& potentialEnergy();
-
-            //-
-            inline const tensor& rf() const;
-
-            //-
-            inline tensor& rf();
-
-            //-
-            inline label special() const;
-
-            //-
-            inline bool tethered() const;
-
-            //-
-            inline label id() const;
-
-
-    // Member Operators
-
-        //- Overridable function to handle the particle hitting a patch
-        //  Executed before other patch-hitting functions
-        bool hitPatch
-        (
-            const polyPatch&,
-            trackingData& td,
-            const label patchI,
-            const scalar trackFraction,
-            const tetIndices& tetIs
-        );
-
-        //- Overridable function to handle the particle hitting a processorPatch
-        void hitProcessorPatch
-        (
-            const processorPolyPatch&,
-            trackingData& td
-        );
-
-        //- Overridable function to handle the particle hitting a wallPatch
-        void hitWallPatch
-        (
-            const wallPolyPatch&,
-            trackingData& td,
-            const tetIndices&
-        );
-
-        //- Overridable function to handle the particle hitting a polyPatch
-        void hitPatch
-        (
-            const polyPatch&,
-            trackingData& td
-        );
-
-
-    // I-O
-
-        //- Read
-        static void readFields(Cloud<polyatomic>& mC);
-
-        //- Write
-        static void writeFields(const Cloud<polyatomic>& mC);
-
-        //- Show info
-        static void info(trackingData& td);
-
-
-    // IOstream Operators
-
-        friend Ostream& operator<<(Ostream&, const polyatomic&);
-};
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace Foam
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#include "polyatomicI.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/molecules/polyatomic/polyatomicI.H b/src/lagrangian/molecularDynamics/molecule/molecules/polyatomic/polyatomicI.H
deleted file mode 100644
index 57149e5fa9b..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/molecules/polyatomic/polyatomicI.H
+++ /dev/null
@@ -1,653 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2008-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-\*---------------------------------------------------------------------------*/
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-inline Foam::polyatomic::constantProperties::constantProperties()
-:
-    sites_(),
-    electrostaticSites_(),
-    pairPotSites_(),
-    momentOfInertia_(diagTensor(0, 0, 0)),
-    mass_(0)
-{}
-
-
-inline Foam::polyatomic::constantProperties::constantProperties
-(
-    const dictionary& dict,
-    const labelList& siteIds
-)
-:
-    sites_(),
-    electrostaticSites_(),
-    pairPotSites_(),
-    momentOfInertia_(),
-    mass_(0)
-{
-    List<word> siteIdNames = dict.lookup("siteIds");
-
-    List<vector> siteReferencePositions(dict.lookup("siteReferencePositions"));
-
-    List<scalar> siteMasses(dict.lookup("siteMasses"));
-
-    List<scalar> siteCharges(dict.lookup("siteCharges"));
-
-    List<word> pairPotentialIds(dict.lookup("pairPotentialSiteIds"));
-
-    sites_.setSize(siteReferencePositions.size());
-
-    if
-    (
-        (siteIdNames.size() != sites_.size())
-     || (siteCharges.size() != sites_.size())
-    )
-    {
-            FatalErrorIn
-            (
-                "Foam::polyatomic::constantProperties::constantProperties"
-                "("
-                    "const dictionary& dict"
-                ")"
-            )
-            << "Sizes of site id, charge and "
-            << "referencePositions are not the same: " << nl
-            << siteIdNames  << nl
-            << siteReferencePositions << nl
-            << siteCharges << nl
-            << abort(FatalError);
-    }
-
-    electrostaticSites_.setSize(sites_.size(), -1);
-    pairPotSites_.setSize(sites_.size(), -1);
-
-    label pairI = 0;
-    label electrostaticI = 0;
-
-    forAll(sites_, sI)
-    {
-        sites_[sI] = constPropSite
-        (
-            siteReferencePositions[sI],
-            siteMasses[sI],
-            siteCharges[sI],
-            siteIds[sI],
-            siteIdNames[sI],
-            (findIndex(pairPotentialIds, siteIdNames[sI]) != -1),   // pair
-            (mag(siteCharges[sI]) > VSMALL)                         // charge
-        );
-
-        if (sites_[sI].pairPotentialSite())
-        {
-            pairPotSites_[pairI++] = sI;
-        }
-
-        if (sites_[sI].electrostaticSite())
-        {
-            electrostaticSites_[electrostaticI++] = sI;
-        }
-
-        if (!sites_[sI].pairPotentialSite() && !sites_[sI].electrostaticSite())
-        {
-            WarningIn
-            (
-                "Foam::polyatomic::constantProperties::constantProperties"
-                "("
-                    "const dictionary& dict"
-                ")"
-            )
-                << siteIdNames[sI] << " is a non-interacting site." << endl;
-        }
-    }
-
-    pairPotSites_.setSize(pairI);
-    electrostaticSites_.setSize(electrostaticI);
-
-    // Calculate the centre of mass of the body and subtract it from each
-    // position
-
-    vector centreOfMass(vector::zero);
-
-    forAll(sites_, sI)
-    {
-        mass_ += sites_[sI].siteMass();
-
-        centreOfMass +=
-            sites_[sI].siteReferencePosition()*sites_[sI].siteMass();
-    }
-
-    centreOfMass /= mass_;
-
-    forAll(sites_, sI)
-    {
-        sites_[sI].siteReferencePosition() -= centreOfMass;
-    }
-
-    if (sites_.size() == 1)
-    {
-        // Single site polyatomic - no rotational motion.
-
-        sites_[0].siteReferencePosition() = vector::zero;
-
-        momentOfInertia_ = diagTensor(-1, -1, -1);
-    }
-    else if (linearMoleculeTest())
-    {
-        // Linear polyatomic.
-
-        Info<< nl << "Linear polyatomic." << endl;
-
-        vector dir =
-            sites_[1].siteReferencePosition()
-          - sites_[0].siteReferencePosition();
-
-        dir /= mag(dir);
-
-        tensor Q = rotationTensor(dir, vector(1,0,0));
-
-        forAll(sites_, sI)
-        {
-            sites_[sI].siteReferencePosition() =
-                (Q & sites_[sI].siteReferencePosition());
-        }
-
-        // The rotation was around the centre of mass but remove any
-        // components that have crept in due to floating point errors
-
-        centreOfMass = vector::zero;
-
-        forAll(sites_, sI)
-        {
-            centreOfMass +=
-                sites_[sI].siteReferencePosition()*sites_[sI].siteMass();
-        }
-
-        centreOfMass /= mass_;
-
-        forAll(sites_, sI)
-        {
-            sites_[sI].siteReferencePosition() -= centreOfMass;
-        }
-
-        diagTensor momOfInertia = diagTensor::zero;
-
-        forAll(sites_, sI)
-        {
-            const vector& p(sites_[sI].siteReferencePosition());
-
-            momOfInertia +=
-                sites_[sI].siteMass()*diagTensor(0, p.x()*p.x(), p.x()*p.x());
-        }
-
-        momentOfInertia_ = diagTensor
-         (
-             -1,
-             momOfInertia.yy(),
-             momOfInertia.zz()
-         );
-    }
-    else
-    {
-        // Fully 6DOF polyatomic
-
-        // Calculate the inertia tensor in the current orientation
-
-        tensor momOfInertia(tensor::zero);
-
-        forAll(sites_, sI)
-        {
-            const vector& p(sites_[sI].siteReferencePosition());
-
-            momOfInertia += sites_[sI].siteMass()*tensor
-            (
-                p.y()*p.y() + p.z()*p.z(), -p.x()*p.y(), -p.x()*p.z(),
-                -p.y()*p.x(), p.x()*p.x() + p.z()*p.z(), -p.y()*p.z(),
-                -p.z()*p.x(), -p.z()*p.y(), p.x()*p.x() + p.y()*p.y()
-            );
-        }
-
-        if (eigenValues(momOfInertia).x() < VSMALL)
-        {
-            FatalErrorIn("polyatomic::constantProperties::constantProperties")
-                << "An eigenvalue of the inertia tensor is zero, the "
-                << "polyatomic " << dict.name() << " is not a valid 6DOF shape."
-                << nl << abort(FatalError);
-        }
-
-        // Normalise the inertia tensor magnitude to avoid SMALL numbers in the
-        // components causing problems
-
-        momOfInertia /= eigenValues(momOfInertia).x();
-
-        tensor e = eigenVectors(momOfInertia);
-
-        // Calculate the transformation between the principle axes to the
-        // global axes
-
-        tensor Q =
-            vector(1,0,0)*e.x() + vector(0,1,0)*e.y() + vector(0,0,1)*e.z();
-
-        // Transform the site positions
-
-        forAll(sites_, sI)
-        {
-            sites_[sI].siteReferencePosition() =
-                (Q & sites_[sI].siteReferencePosition());
-        }
-
-        // Recalculating the moment of inertia with the new site positions
-
-        // The rotation was around the centre of mass but remove any
-        // components that have crept in due to floating point errors
-
-        centreOfMass = vector::zero;
-
-        forAll(sites_, sI)
-        {
-            centreOfMass +=
-                sites_[sI].siteReferencePosition()*sites_[sI].siteMass();
-        }
-
-        centreOfMass /= mass_;
-
-        forAll(sites_, sI)
-        {
-            sites_[sI].siteReferencePosition() -= centreOfMass;
-        }
-
-        // Calculate the moment of inertia in the principle component
-        // reference frame
-
-        momOfInertia = tensor::zero;
-
-        forAll(sites_, sI)
-        {
-            const vector& p(sites_[sI].siteReferencePosition());
-
-            momOfInertia += sites_[sI].siteMass()*tensor
-            (
-                p.y()*p.y() + p.z()*p.z(), -p.x()*p.y(), -p.x()*p.z(),
-                -p.y()*p.x(), p.x()*p.x() + p.z()*p.z(), -p.y()*p.z(),
-                -p.z()*p.x(), -p.z()*p.y(), p.x()*p.x() + p.y()*p.y()
-            );
-        }
-
-        momentOfInertia_ = diagTensor
-        (
-            momOfInertia.xx(),
-            momOfInertia.yy(),
-            momOfInertia.zz()
-        );
-    }
-}
-
-
-inline Foam::polyatomic::polyatomic
-(
-    const polyMesh& mesh,
-    const vector& position,
-    const label cellI,
-    const label tetFaceI,
-    const label tetPtI,
-    const scalar temperature,
-    const vector& bulkVelocity,
-    const vector& specialPosition,
-    const constantProperties& cP,
-    polyatomic::trackingData& td,
-    const label special,
-    const label id
-)
-:
-    particle(mesh, position, cellI, tetFaceI, tetPtI),
-    Q_(I),
-    v_(bulkVelocity),
-    a_(vector::zero),
-    pi_(vector::zero),
-    tau_(vector::zero),
-    specialPosition_(specialPosition),
-    potentialEnergy_(0.0),
-    rf_(tensor::zero),
-    special_(special),
-    id_(id),
-    siteForces_(cP.nSites(), vector::zero),
-    sitePositions_(cP.nSites())
-{
-    setSitePositions(cP);
-
-    v_ += td.cloud().equipartitionLinearVelocity(temperature, cP.mass());
-
-    if (!cP.pointMolecule())
-    {
-        pi_ = td.cloud().equipartitionAngularMomentum(temperature, cP);
-
-        scalar phi(td.cloud().rndGen().scalar01()*twoPi);
-
-        scalar theta(td.cloud().rndGen().scalar01()*twoPi);
-
-        scalar psi(td.cloud().rndGen().scalar01()*twoPi);
-
-        Q_ = tensor
-        (
-            cos(psi)*cos(phi) - cos(theta)*sin(phi)*sin(psi),
-            cos(psi)*sin(phi) + cos(theta)*cos(phi)*sin(psi),
-            sin(psi)*sin(theta),
-            - sin(psi)*cos(phi) - cos(theta)*sin(phi)*cos(psi),
-            - sin(psi)*sin(phi) + cos(theta)*cos(phi)*cos(psi),
-            cos(psi)*sin(theta),
-            sin(theta)*sin(phi),
-            - sin(theta)*cos(phi),
-            cos(theta)
-        );
-    }
-}
-
-
-Foam::polyatomic::polyatomic
-(
-    const polyMesh& mesh,
-    const vector& position,
-    const label cellI,
-    const label tetFaceI,
-    const label tetPtI,
-    const tensor& Q,
-    const vector& v,
-    const vector& a,
-    const vector& pi,
-    const vector& tau,
-    const vector& specialPosition,
-    const constantProperties& cP,
-    const label special,
-    const label id
-)
-:
-    particle(mesh, position, cellI, tetFaceI, tetPtI),
-    Q_(Q),
-    v_(v),
-    a_(a),
-    pi_(pi),
-    tau_(tau),
-    specialPosition_(specialPosition),
-    potentialEnergy_(0.0),
-    rf_(tensor::zero),
-    special_(special),
-    id_(id),
-    siteForces_(cP.nSites(), vector::zero),
-    sitePositions_(cP.nSites())
-{
-    setSitePositions(cP);
-}
-
-
-// * * * * * * * constantProperties Private Member Functions * * * * * * * * //
-
-inline bool Foam::polyatomic::constantProperties::linearMoleculeTest() const
-{
-    if (sites_.size() == 2)
-    {
-        return true;
-    }
-
-    vector refDir =
-        sites_[1].siteReferencePosition()
-      - sites_[0].siteReferencePosition();
-
-    refDir /= mag(refDir);
-
-    for
-    (
-        label i = 2;
-        i < sites_.size();
-        i++
-    )
-    {
-        vector dir =
-            sites_[i].siteReferencePosition()
-          - sites_[i - 1].siteReferencePosition();
-
-        dir /= mag(dir);
-
-        if (mag(refDir & dir) < 1 - SMALL)
-        {
-            return false;
-        }
-    }
-
-    return true;
-}
-
-
-// * * * * * * * constantProperties Member Functions * * * * * * * * * * * * //
-
-inline const Foam::List<Foam::constPropSite>&
-Foam::polyatomic::constantProperties::sites() const
-{
-    return sites_;
-}
-
-
-inline const Foam::List<Foam::label>&
-Foam::polyatomic::constantProperties::pairPotSites() const
-{
-    return pairPotSites_;
-}
-
-
-inline const Foam::List<Foam::label>&
-Foam::polyatomic::constantProperties::electrostaticSites() const
-{
-    return electrostaticSites_;
-}
-
-
-inline const Foam::diagTensor&
-Foam::polyatomic::constantProperties::momentOfInertia() const
-{
-    return momentOfInertia_;
-}
-
-
-inline bool Foam::polyatomic::constantProperties::linearMolecule() const
-{
-    return ((momentOfInertia_.xx() < 0) && (momentOfInertia_.yy() > 0));
-}
-
-
-inline  bool Foam::polyatomic::constantProperties::pointMolecule() const
-{
-    return (momentOfInertia_.zz() < 0);
-}
-
-
-inline Foam::label
-Foam::polyatomic::constantProperties::degreesOfFreedom() const
-{
-    if (linearMolecule())
-    {
-        return 5;
-    }
-    else if (pointMolecule())
-    {
-        return 3;
-    }
-    else
-    {
-        return 6;
-    }
-}
-
-
-inline Foam::scalar Foam::polyatomic::constantProperties::mass() const
-{
-    return mass_;
-}
-
-
-inline Foam::label Foam::polyatomic::constantProperties::nSites() const
-{
-    return sites_.size();
-}
-
-
-// * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
-
-inline const Foam::tensor& Foam::polyatomic::Q() const
-{
-    return Q_;
-}
-
-
-inline Foam::tensor& Foam::polyatomic::Q()
-{
-    return Q_;
-}
-
-
-inline const Foam::vector& Foam::polyatomic::v() const
-{
-    return v_;
-}
-
-
-inline Foam::vector& Foam::polyatomic::v()
-{
-    return v_;
-}
-
-
-inline const Foam::vector& Foam::polyatomic::a() const
-{
-    return a_;
-}
-
-
-inline Foam::vector& Foam::polyatomic::a()
-{
-    return a_;
-}
-
-
-inline const Foam::vector& Foam::polyatomic::pi() const
-{
-    return pi_;
-}
-
-
-inline Foam::vector& Foam::polyatomic::pi()
-{
-    return pi_;
-}
-
-
-inline const Foam::vector& Foam::polyatomic::tau() const
-{
-    return tau_;
-}
-
-
-inline Foam::vector& Foam::polyatomic::tau()
-{
-    return tau_;
-}
-
-
-inline const Foam::List<Foam::vector>& Foam::polyatomic::siteForces() const
-{
-    return siteForces_;
-}
-
-
-inline Foam::List<Foam::vector>& Foam::polyatomic::siteForces()
-{
-    return siteForces_;
-}
-
-
-inline const Foam::List<Foam::vector>& Foam::polyatomic::sitePositions() const
-{
-    return sitePositions_;
-}
-
-
-inline Foam::List<Foam::vector>& Foam::polyatomic::sitePositions()
-{
-    return sitePositions_;
-}
-
-
-inline const Foam::vector& Foam::polyatomic::specialPosition() const
-{
-    return specialPosition_;
-}
-
-
-inline Foam::vector& Foam::polyatomic::specialPosition()
-{
-    return specialPosition_;
-}
-
-
-inline Foam::scalar Foam::polyatomic::potentialEnergy() const
-{
-    return potentialEnergy_;
-}
-
-
-inline Foam::scalar& Foam::polyatomic::potentialEnergy()
-{
-    return potentialEnergy_;
-}
-
-
-inline const Foam::tensor& Foam::polyatomic::rf() const
-{
-    return rf_;
-}
-
-
-inline Foam::tensor& Foam::polyatomic::rf()
-{
-    return rf_;
-}
-
-
-inline Foam::label Foam::polyatomic::special() const
-{
-    return special_;
-}
-
-
-inline bool Foam::polyatomic::tethered() const
-{
-    return special_ == SPECIAL_TETHERED;
-}
-
-
-inline Foam::label Foam::polyatomic::id() const
-{
-    return id_;
-}
-
-
-// ************************************************************************* //
diff --git a/src/lagrangian/molecularDynamics/molecule/molecules/polyatomic/polyatomicIO.C b/src/lagrangian/molecularDynamics/molecule/molecules/polyatomic/polyatomicIO.C
deleted file mode 100644
index 86dcbfe49f9..00000000000
--- a/src/lagrangian/molecularDynamics/molecule/molecules/polyatomic/polyatomicIO.C
+++ /dev/null
@@ -1,414 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2008-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-\*---------------------------------------------------------------------------*/
-
-#include "polyatomic.H"
-#include "IOstreams.H"
-#include "Cloud.H"
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-Foam::polyatomic::polyatomic
-(
-    const polyMesh& mesh,
-    Istream& is,
-    bool readFields
-)
-:
-    particle(mesh, is, readFields),
-    Q_(tensor::zero),
-    v_(vector::zero),
-    a_(vector::zero),
-    pi_(vector::zero),
-    tau_(vector::zero),
-    specialPosition_(vector::zero),
-    potentialEnergy_(0.0),
-    rf_(tensor::zero),
-    special_(0),
-    id_(0),
-    siteForces_(0),
-    sitePositions_(0)
-{
-    if (readFields)
-    {
-        if (is.format() == IOstream::ASCII)
-        {
-            is  >> Q_;
-            is  >> v_;
-            is  >> a_;
-            is  >> pi_;
-            is  >> tau_;
-            is  >> siteForces_;
-            potentialEnergy_ = readScalar(is);
-            is  >> rf_;
-            special_ = readLabel(is);
-            id_ = readLabel(is);
-            is  >> sitePositions_;
-            is  >> specialPosition_;
-        }
-        else
-        {
-            is.read
-            (
-                reinterpret_cast<char*>(&Q_),
-                sizeof(Q_)
-              + sizeof(v_)
-              + sizeof(a_)
-              + sizeof(pi_)
-              + sizeof(tau_)
-              + sizeof(specialPosition_)
-              + sizeof(potentialEnergy_)
-              + sizeof(rf_)
-              + sizeof(special_)
-              + sizeof(id_)
-            );
-
-            is  >> siteForces_ >> sitePositions_;
-        }
-    }
-
-    // Check state of Istream
-    is.check
-    (
-        "Foam::polyatomic::polyatomic"
-        "("
-            "const polyMesh& mesh,"
-            "Istream& is,"
-            "bool readFields"
-        ")"
-    );
-}
-
-
-void Foam::polyatomic::readFields(Cloud<polyatomic>& mC)
-{
-    if (!mC.size())
-    {
-        return;
-    }
-
-    particle::readFields(mC);
-
-    IOField<tensor> Q(mC.fieldIOobject("Q", IOobject::MUST_READ));
-    mC.checkFieldIOobject(mC, Q);
-
-    IOField<vector> v(mC.fieldIOobject("v", IOobject::MUST_READ));
-    mC.checkFieldIOobject(mC, v);
-
-    IOField<vector> a(mC.fieldIOobject("a", IOobject::MUST_READ));
-    mC.checkFieldIOobject(mC, a);
-
-    IOField<vector> pi(mC.fieldIOobject("pi", IOobject::MUST_READ));
-    mC.checkFieldIOobject(mC, pi);
-
-    IOField<vector> tau(mC.fieldIOobject("tau", IOobject::MUST_READ));
-    mC.checkFieldIOobject(mC, tau);
-
-    IOField<vector> specialPosition
-    (
-        mC.fieldIOobject("specialPosition", IOobject::MUST_READ)
-    );
-    mC.checkFieldIOobject(mC, specialPosition);
-
-    IOField<label> special(mC.fieldIOobject("special", IOobject::MUST_READ));
-    mC.checkFieldIOobject(mC, special);
-
-    IOField<label> id(mC.fieldIOobject("id", IOobject::MUST_READ));
-    mC.checkFieldIOobject(mC, id);
-
-    label i = 0;
-
-    forAllIter(typename Cloud<polyatomic>, mC, iter)
-    {
-        polyatomic& mol = iter();
-
-        mol.Q_ = Q[i];
-        mol.v_ = v[i];
-        mol.a_ = a[i];
-        mol.pi_ = pi[i];
-        mol.tau_ = tau[i];
-        mol.specialPosition_ = specialPosition[i];
-        mol.special_ = special[i];
-        mol.id_ = id[i];
-        i++;
-    }
-}
-
-
-void Foam::polyatomic::writeFields(const Cloud<polyatomic>& mC)
-{
-    particle::writeFields(mC);
-
-    label np = mC.size();
-
-    IOField<tensor> Q(mC.fieldIOobject("Q", IOobject::NO_READ), np);
-    IOField<vector> v(mC.fieldIOobject("v", IOobject::NO_READ), np);
-    IOField<vector> a(mC.fieldIOobject("a", IOobject::NO_READ), np);
-    IOField<vector> pi(mC.fieldIOobject("pi", IOobject::NO_READ), np);
-    IOField<vector> tau(mC.fieldIOobject("tau", IOobject::NO_READ), np);
-    IOField<vector> specialPosition
-    (
-        mC.fieldIOobject("specialPosition", IOobject::NO_READ),
-        np
-    );
-    IOField<label> special(mC.fieldIOobject("special", IOobject::NO_READ), np);
-    IOField<label> id(mC.fieldIOobject("id", IOobject::NO_READ), np);
-
-    // Post processing fields
-
-    IOField<vector> piGlobal
-    (
-        mC.fieldIOobject("piGlobal", IOobject::NO_READ),
-        np
-    );
-
-    IOField<vector> tauGlobal
-    (
-        mC.fieldIOobject("tauGlobal", IOobject::NO_READ),
-        np
-    );
-
-    IOField<vector> orientation1
-    (
-        mC.fieldIOobject("orientation1", IOobject::NO_READ),
-        np
-    );
-
-    IOField<vector> orientation2
-    (
-        mC.fieldIOobject("orientation2", IOobject::NO_READ),
-        np
-    );
-
-    IOField<vector> orientation3
-    (
-        mC.fieldIOobject("orientation3", IOobject::NO_READ),
-        np
-    );
-
-    label i = 0;
-    forAllConstIter(typename Cloud<polyatomic>, mC, iter)
-    {
-        const polyatomic& mol = iter();
-
-        Q[i] = mol.Q_;
-        v[i] = mol.v_;
-        a[i] = mol.a_;
-        pi[i] = mol.pi_;
-        tau[i] = mol.tau_;
-        specialPosition[i] = mol.specialPosition_;
-        special[i] = mol.special_;
-        id[i] = mol.id_;
-
-        piGlobal[i] = mol.Q_ & mol.pi_;
-        tauGlobal[i] = mol.Q_ & mol.tau_;
-
-        orientation1[i] = mol.Q_ & vector(1,0,0);
-        orientation2[i] = mol.Q_ & vector(0,1,0);
-        orientation3[i] = mol.Q_ & vector(0,0,1);
-
-        i++;
-    }
-
-    Q.write();
-    v.write();
-    a.write();
-    pi.write();
-    tau.write();
-    specialPosition.write();
-    special.write();
-    id.write();
-
-    piGlobal.write();
-    tauGlobal.write();
-
-    orientation1.write();
-    orientation2.write();
-    orientation3.write();
-}
-
-
-void Foam::polyatomic::info(polyatomic::trackingData& td)
-{
-    vector totalLinearMomentum(vector::zero);
-    vector totalAngularMomentum(vector::zero);
-    scalar maxVelocityMag = 0.0;
-    scalar totalMass = 0.0;
-    scalar totalLinearKE = 0.0;
-    scalar totalAngularKE = 0.0;
-    scalar totalPE = 0.0;
-    scalar totalrDotf = 0.0;
-    //vector CentreOfMass(vector::zero);
-    label nMols = td.cloud().size();
-    label dofs = 0;
-
-    forAllConstIter(typename Cloud<polyatomic>, td.cloud(), mol)
-    {
-        const label molId = mol().id();
-        scalar molMass(td.cloud().constProps(molId).mass());
-        totalMass += molMass;
-        //CentreOfMass += mol().position()*molMass;
-    }
-
-    // if (nMols)
-    // {
-    //     CentreOfMass /= totalMass;
-    // }
-
-    forAllConstIter(typename Cloud<polyatomic>, td.cloud(), mol)
-    {
-        const label molId = mol().id();
-        const polyatomic::constantProperties cP
-        (
-            td.cloud().constProps(molId)
-        );
-        scalar molMass(cP.mass());
-        const diagTensor& molMoI(cP.momentOfInertia());
-        const vector& molV(mol().v());
-        const vector& molOmega(inv(molMoI) & mol().pi());
-        vector molPiGlobal = mol().Q() & mol().pi();
-        totalLinearMomentum += molV * molMass;
-        totalAngularMomentum += molPiGlobal;
-            //+((mol().position() - CentreOfMass) ^ (molV * molMass));
-        if (mag(molV) > maxVelocityMag)
-        {
-            maxVelocityMag = mag(molV);
-        }
-        totalLinearKE += 0.5*molMass*magSqr(molV);
-        totalAngularKE += 0.5*(molOmega & molMoI & molOmega);
-        totalPE += mol().potentialEnergy();
-        totalrDotf += tr(mol().rf());
-        dofs += cP.degreesOfFreedom();
-    }
-
-    scalar meshVolume = sum(td.cloud().mesh().cellVolumes());
-
-    if (Pstream::parRun())
-    {
-        reduce(totalLinearMomentum, sumOp<vector>());
-        reduce(totalAngularMomentum, sumOp<vector>());
-        reduce(maxVelocityMag, maxOp<scalar>());
-        reduce(totalMass, sumOp<scalar>());
-        reduce(totalLinearKE, sumOp<scalar>());
-        reduce(totalAngularKE, sumOp<scalar>());
-        reduce(totalPE, sumOp<scalar>());
-        reduce(totalrDotf, sumOp<scalar>());
-        reduce(nMols, sumOp<label>());
-        reduce(dofs, sumOp<label>());
-        reduce(meshVolume, sumOp<scalar>());
-    }
-
-    if (nMols)
-    {
-        Info<< nl << "Number of molecules in " << td.cloud().name() << " = "
-            << nMols << nl
-            << "    Overall number density = "
-            << nMols/meshVolume << nl
-            << "    Overall mass density = "
-            << totalMass/meshVolume << nl
-            << "    Average linear momentum per molecule = "
-            << totalLinearMomentum/nMols << ' '
-            << mag(totalLinearMomentum)/nMols << nl
-            << "    Average angular momentum per molecule = "
-            << totalAngularMomentum << ' '
-            << mag(totalAngularMomentum)/nMols << nl
-            << "    maximum |velocity| = "
-            << maxVelocityMag << nl
-            << "    Average linear KE per molecule = "
-            << totalLinearKE/nMols << nl
-            << "    Average angular KE per molecule = "
-            << totalAngularKE/nMols << nl
-            << "    Average PE per molecule = "
-            << totalPE/nMols << nl
-            << "    Average TE per molecule = "
-            <<
-            (
-                  totalLinearKE
-                + totalAngularKE
-                + totalPE
-            )
-            /nMols
-            << nl << endl;
-    }
-    else
-    {
-        Info<< nl << "No molecules in " << td.cloud().name() << endl;
-    }
-}
-
-
-// * * * * * * * * * * * * * * * IOstream Operators  * * * * * * * * * * * * //
-
-Foam::Ostream& Foam::operator<<(Ostream& os, const polyatomic& mol)
-{
-    if (os.format() == IOstream::ASCII)
-    {
-        os  << token::SPACE << static_cast<const particle&>(mol)
-            << token::SPACE << mol.face()
-            << token::SPACE << mol.stepFraction()
-            << token::SPACE << mol.Q_
-            << token::SPACE << mol.v_
-            << token::SPACE << mol.a_
-            << token::SPACE << mol.pi_
-            << token::SPACE << mol.tau_
-            << token::SPACE << mol.specialPosition_
-            << token::SPACE << mol.potentialEnergy_
-            << token::SPACE << mol.rf_
-            << token::SPACE << mol.special_
-            << token::SPACE << mol.id_
-            << token::SPACE << mol.siteForces_
-            << token::SPACE << mol.sitePositions_;
-    }
-    else
-    {
-        os  << static_cast<const particle&>(mol);
-        os.write
-        (
-            reinterpret_cast<const char*>(&mol.Q_),
-            sizeof(mol.Q_)
-          + sizeof(mol.v_)
-          + sizeof(mol.a_)
-          + sizeof(mol.pi_)
-          + sizeof(mol.tau_)
-          + sizeof(mol.specialPosition_)
-          + sizeof(mol.potentialEnergy_)
-          + sizeof(mol.rf_)
-          + sizeof(mol.special_)
-          + sizeof(mol.id_)
-        );
-        os  << mol.siteForces_ << mol.sitePositions_;
-    }
-
-    // Check state of Ostream
-    os.check
-    (
-        "Foam::Ostream& Foam::operator<<"
-        "(Foam::Ostream&, const Foam::polyatomic&)"
-    );
-
-    return os;
-}
-
-
-// ************************************************************************* //
-- 
GitLab