diff --git a/applications/solvers/combustion/chemFoam/Make/options b/applications/solvers/combustion/chemFoam/Make/options
index 7b95c2f16f..9facf7ac9c 100644
--- a/applications/solvers/combustion/chemFoam/Make/options
+++ b/applications/solvers/combustion/chemFoam/Make/options
@@ -12,6 +12,7 @@ EXE_INC = \
EXE_LIBS = \
-lfiniteVolume \
+ -lcompressibleTurbulenceModel \
-lcompressibleRASModels \
-lreactionThermophysicalModels \
-lfluidThermophysicalModels \
diff --git a/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/Make/options b/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/Make/options
index 8aa441b18e..11c10272ff 100644
--- a/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/Make/options
+++ b/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/Make/options
@@ -17,6 +17,7 @@ EXE_LIBS = \
-ldynamicMesh \
-lmeshTools \
-lincompressibleTransportModels \
+ -lincompressibleTurbulenceModel \
-lincompressibleRASModels \
-lincompressibleLESModels \
-lfiniteVolume \
diff --git a/applications/solvers/multiphase/compressibleInterFoam/Make/options b/applications/solvers/multiphase/compressibleInterFoam/Make/options
index ca9a90cf77..48c253b213 100644
--- a/applications/solvers/multiphase/compressibleInterFoam/Make/options
+++ b/applications/solvers/multiphase/compressibleInterFoam/Make/options
@@ -7,6 +7,7 @@ EXE_INC = \
-I$(LIB_SRC)/finiteVolume/lnInclude
EXE_LIBS = \
+ -linterfaceProperties \
-ltwoPhaseInterfaceProperties \
-lincompressibleTransportModels \
-lphaseEquationsOfState \
diff --git a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/Make/options b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/Make/options
index db259cfbc0..d4d0fa9b5a 100644
--- a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/Make/options
+++ b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/Make/options
@@ -11,6 +11,7 @@ EXE_INC = \
-I$(LIB_SRC)/dynamicFvMesh/lnInclude
EXE_LIBS = \
+ -linterfaceProperties \
-ltwoPhaseInterfaceProperties \
-lincompressibleTransportModels \
-lphaseEquationsOfState \
diff --git a/applications/solvers/multiphase/interFoam/LTSInterFoam/Make/options b/applications/solvers/multiphase/interFoam/LTSInterFoam/Make/options
index 24349f694e..054a8dbbd4 100644
--- a/applications/solvers/multiphase/interFoam/LTSInterFoam/Make/options
+++ b/applications/solvers/multiphase/interFoam/LTSInterFoam/Make/options
@@ -7,6 +7,7 @@ EXE_INC = \
-I$(LIB_SRC)/finiteVolume/lnInclude
EXE_LIBS = \
+ -linterfaceProperties \
-ltwoPhaseInterfaceProperties \
-lincompressibleTransportModels \
-lincompressibleTurbulenceModel \
diff --git a/applications/solvers/multiphase/interFoam/MRFInterFoam/Make/options b/applications/solvers/multiphase/interFoam/MRFInterFoam/Make/options
index 24349f694e..054a8dbbd4 100644
--- a/applications/solvers/multiphase/interFoam/MRFInterFoam/Make/options
+++ b/applications/solvers/multiphase/interFoam/MRFInterFoam/Make/options
@@ -7,6 +7,7 @@ EXE_INC = \
-I$(LIB_SRC)/finiteVolume/lnInclude
EXE_LIBS = \
+ -linterfaceProperties \
-ltwoPhaseInterfaceProperties \
-lincompressibleTransportModels \
-lincompressibleTurbulenceModel \
diff --git a/applications/solvers/multiphase/interFoam/Make/options b/applications/solvers/multiphase/interFoam/Make/options
index c8ce69c074..599567b54d 100644
--- a/applications/solvers/multiphase/interFoam/Make/options
+++ b/applications/solvers/multiphase/interFoam/Make/options
@@ -6,6 +6,7 @@ EXE_INC = \
-I$(LIB_SRC)/finiteVolume/lnInclude
EXE_LIBS = \
+ -linterfaceProperties \
-ltwoPhaseInterfaceProperties \
-lincompressibleTransportModels \
-lincompressibleTurbulenceModel \
diff --git a/applications/solvers/multiphase/interFoam/interDyMFoam/Make/options b/applications/solvers/multiphase/interFoam/interDyMFoam/Make/options
index 102475c1ed..ba60cb1981 100644
--- a/applications/solvers/multiphase/interFoam/interDyMFoam/Make/options
+++ b/applications/solvers/multiphase/interFoam/interDyMFoam/Make/options
@@ -10,6 +10,7 @@ EXE_INC = \
-I$(LIB_SRC)/dynamicFvMesh/lnInclude
EXE_LIBS = \
+ -linterfaceProperties \
-ltwoPhaseInterfaceProperties \
-lincompressibleTransportModels \
-lincompressibleTurbulenceModel \
diff --git a/applications/solvers/multiphase/interFoam/porousInterFoam/Make/options b/applications/solvers/multiphase/interFoam/porousInterFoam/Make/options
index a33b9c82be..6fc987453b 100644
--- a/applications/solvers/multiphase/interFoam/porousInterFoam/Make/options
+++ b/applications/solvers/multiphase/interFoam/porousInterFoam/Make/options
@@ -8,6 +8,7 @@ EXE_INC = \
-I$(LIB_SRC)/meshTools/lnInclude
EXE_LIBS = \
+ -linterfaceProperties \
-ltwoPhaseInterfaceProperties \
-lincompressibleTransportModels \
-lincompressibleTurbulenceModel \
diff --git a/applications/solvers/multiphase/interPhaseChangeFoam/Make/options b/applications/solvers/multiphase/interPhaseChangeFoam/Make/options
index 960639f66a..5416a161a8 100644
--- a/applications/solvers/multiphase/interPhaseChangeFoam/Make/options
+++ b/applications/solvers/multiphase/interPhaseChangeFoam/Make/options
@@ -7,6 +7,7 @@ EXE_INC = \
-I$(LIB_SRC)/finiteVolume/lnInclude
EXE_LIBS = \
+ -linterfaceProperties \
-ltwoPhaseInterfaceProperties \
-lincompressibleTransportModels \
-lincompressibleTurbulenceModel \
diff --git a/applications/test/Circulator/Make/files b/applications/test/Circulator/Make/files
new file mode 100644
index 0000000000..b6a4e63dc2
--- /dev/null
+++ b/applications/test/Circulator/Make/files
@@ -0,0 +1,3 @@
+Test-Circulator.C
+
+EXE = $(FOAM_USER_APPBIN)/Test-Circulator
diff --git a/applications/test/Circulator/Make/options b/applications/test/Circulator/Make/options
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/applications/test/Circulator/Test-Circulator.C b/applications/test/Circulator/Test-Circulator.C
new file mode 100644
index 0000000000..19a21f6b79
--- /dev/null
+++ b/applications/test/Circulator/Test-Circulator.C
@@ -0,0 +1,268 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+Application
+ Test-circulator
+
+Description
+
+\*---------------------------------------------------------------------------*/
+
+#include "List.H"
+#include "ListOps.H"
+#include "face.H"
+#include "circulator.H"
+#include "const_circulator.H"
+
+
+using namespace Foam;
+
+
+// return
+// 0: no match
+// +1: identical
+// -1: same face, but different orientation
+label compare(const face& a, const face& b)
+{
+ // Basic rule: we assume that the sequence of labels in each list
+ // will be circular in the same order (but not necessarily in the
+ // same direction or from the same starting point).
+
+ // Trivial reject: faces are different size
+ label sizeA = a.size();
+ label sizeB = b.size();
+
+ if (sizeA != sizeB || sizeA == 0)
+ {
+ return 0;
+ }
+
+ const_circulator aCirc(a);
+ const_circulator bCirc(b);
+
+ // Rotate face b until its element matches the starting element of face a.
+ do
+ {
+ if (aCirc() == bCirc())
+ {
+ // Set bCirc fulcrum to its iterator and increment the iterators
+ bCirc.setFulcrumToIterator();
+ ++aCirc;
+ ++bCirc;
+
+ break;
+ }
+ } while (bCirc.circulate(CirculatorBase::CLOCKWISE));
+
+ // Look forwards around the faces for a match
+ do
+ {
+ if (aCirc() != bCirc())
+ {
+ break;
+ }
+ }
+ while
+ (
+ aCirc.circulate(CirculatorBase::CLOCKWISE),
+ bCirc.circulate(CirculatorBase::CLOCKWISE)
+ );
+
+ // If the circulator has stopped then faces a and b matched.
+ if (!aCirc.circulate())
+ {
+ return 1;
+ }
+ else
+ {
+ // Reset the circulators back to their fulcrum
+ aCirc.setIteratorToFulcrum();
+ bCirc.setIteratorToFulcrum();
+ ++aCirc;
+ --bCirc;
+ }
+
+ // Look backwards around the faces for a match
+ do
+ {
+ if (aCirc() != bCirc())
+ {
+ break;
+ }
+ }
+ while
+ (
+ aCirc.circulate(CirculatorBase::CLOCKWISE),
+ bCirc.circulate(CirculatorBase::ANTICLOCKWISE)
+ );
+
+ // If the circulator has stopped then faces a and b matched.
+ if (!aCirc.circulate())
+ {
+ return -1;
+ }
+
+ return 0;
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+// Main program:
+
+int main(int argc, char *argv[])
+{
+ Info<< "Test the implementation of a circular iterator" << nl << endl;
+
+ Info<< "Test const circulator. First go forwards, then backwards."
+ << nl << endl;
+
+ face f(identity(4));
+
+ const_circulator cStart(f);
+
+ if (cStart.size()) do
+ {
+ Info<< "Iterate forwards over face (prev/curr/next) : "
+ << cStart.prev() << " / " << cStart() << " / " << cStart.next()
+ << endl;
+
+ } while (cStart.circulate(CirculatorBase::CLOCKWISE));
+
+ if (cStart.size()) do
+ {
+ Info<< "Iterate backwards over face : " << cStart() << endl;
+
+ } while (cStart.circulate(CirculatorBase::ANTICLOCKWISE));
+
+
+ Info<< nl << nl << "Test non-const circulator" << nl << endl;
+
+ circulator cStart2(f);
+
+ Info<< "Face before : " << f << endl;
+
+ if (cStart2.size()) do
+ {
+ Info<< "Iterate forwards over face (prev/curr/next) : "
+ << cStart2.prev() << " / " << cStart2() << " / " << cStart2.next()
+ << endl;
+
+ } while (cStart2.circulate(CirculatorBase::CLOCKWISE));
+
+ if (cStart2.size()) do
+ {
+ Info<< "Iterate forwards over face, adding 1 to each element : "
+ << cStart2();
+
+ cStart2() += 1;
+
+ Info<< " -> " << cStart2() << endl;
+ } while (cStart2.circulate(CirculatorBase::CLOCKWISE));
+
+ Info<< "Face after : " << f << endl;
+
+
+ Info<< nl << nl << "Compare two faces: " << endl;
+ face a(identity(5));
+ Info<< "Compare " << a << " and " << a << " Match = " << compare(a, a)
+ << endl;
+
+ face b(reverseList(a));
+ Info<< "Compare " << a << " and " << b << " Match = " << compare(a, b)
+ << endl;
+
+ face c(a);
+ c[4] = 3;
+ Info<< "Compare " << a << " and " << c << " Match = " << compare(a, c)
+ << endl;
+
+ face d(rotateList(a, 2));
+ Info<< "Compare " << a << " and " << d << " Match = " << compare(a, d)
+ << endl;
+
+ face g(labelList(5, 1));
+ face h(g);
+ Info<< "Compare " << g << " and " << h << " Match = " << compare(g, h)
+ << endl;
+
+ g[0] = 2;
+ h[3] = 2;
+ Info<< "Compare " << g << " and " << h << " Match = " << compare(g, h)
+ << endl;
+
+ g[4] = 3;
+ h[4] = 3;
+ Info<< "Compare " << g << " and " << h << " Match = " << compare(g, h)
+ << endl;
+
+ face face1(identity(1));
+ Info<< "Compare " << face1 << " and " << face1
+ << " Match = " << compare(face1, face1) << endl;
+
+ Info<< nl << nl << "Zero face" << nl << endl;
+
+ face fZero;
+ circulator cZero(fZero);
+
+ if (cZero.size()) do
+ {
+ Info<< "Iterate forwards over face : " << cZero() << endl;
+
+ } while (cZero.circulate(CirculatorBase::CLOCKWISE));
+
+ fZero = face(identity(5));
+
+ // circulator was invalidated so reset
+ cZero = circulator(fZero);
+
+ do
+ {
+ Info<< "Iterate forwards over face : " << cZero() << endl;
+
+ } while (cZero.circulate(CirculatorBase::CLOCKWISE));
+
+
+ Info<< nl << nl << "Simultaneously go forwards/backwards over face " << f
+ << nl << endl;
+
+ const_circulator circForward(f);
+ const_circulator circBackward(f);
+
+ if (circForward.size() && circBackward.size()) do
+ {
+ Info<< "Iterate over face forwards : " << circForward()
+ << ", backwards : " << circBackward() << endl;
+ }
+ while
+ (
+ circForward.circulate(CirculatorBase::CLOCKWISE),
+ circBackward.circulate(CirculatorBase::ANTICLOCKWISE)
+ );
+
+ Info<< "\nEnd\n" << endl;
+
+ return 0;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/test/ListOps/Make/files b/applications/test/ListOps/Make/files
new file mode 100644
index 0000000000..645600a709
--- /dev/null
+++ b/applications/test/ListOps/Make/files
@@ -0,0 +1,2 @@
+Test-ListOps.C
+EXE = $(FOAM_USER_APPBIN)/Test-ListOps
diff --git a/applications/test/ListOps/Make/options b/applications/test/ListOps/Make/options
new file mode 100644
index 0000000000..9e79e9d733
--- /dev/null
+++ b/applications/test/ListOps/Make/options
@@ -0,0 +1,3 @@
+EXE_INC = /*-DFULLDEBUG -O0 -g*/ \
+
+EXE_LIBS = \
diff --git a/applications/test/ListOps/Test-ListOps.C b/applications/test/ListOps/Test-ListOps.C
new file mode 100644
index 0000000000..f6e5695164
--- /dev/null
+++ b/applications/test/ListOps/Test-ListOps.C
@@ -0,0 +1,120 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+Application
+ Test-ListOps
+
+Description
+
+\*---------------------------------------------------------------------------*/
+
+#include "argList.H"
+#include "List.H"
+#include "SubList.H"
+#include "ListOps.H"
+#include "face.H"
+
+using namespace Foam;
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+// Main program:
+
+int main(int argc, char *argv[])
+{
+ Info<< "Test Rotations:" << nl << endl;
+
+ List