From be8cbc10187fb5194866149fe93dfb83a343e6b7 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@Germany>
Date: Mon, 23 Mar 2009 16:57:26 +0100
Subject: [PATCH] use timeSelector mechanism in a few more utilities

---
 .../estimateScalarError/estimateScalarError.C | 19 +++----
 .../icoErrorEstimate/icoErrorEstimate.C       | 20 +++----
 .../icoMomentError/icoMomentError.C           | 20 +++----
 .../momentScalarError/momentScalarError.C     | 19 +++----
 .../foamToStarMesh/foamToStarMesh.C           | 17 +++---
 .../mesh/conversion/polyDualMesh/Make/files   |  2 +-
 .../{makePolyDualMesh.C => polyDualMeshApp.C} |  4 +-
 .../conversion/writeMeshObj/writeMeshObj.C    | 23 +++-----
 .../mesh/manipulation/checkMesh/checkMesh.C   | 52 +++++++------------
 .../mesh/manipulation/rotateMesh/rotateMesh.C | 16 +++---
 .../mesh/manipulation/setSet/setSet.C         |  4 +-
 .../miscellaneous/patchSummary/patchSummary.C | 14 ++---
 .../foamDataToFluent/foamDataToFluent.C       | 14 ++---
 .../dataConversion/foamToVTK/foamToVTK.C      | 19 +++----
 .../postProcessing/miscellaneous/ptot/ptot.C  | 15 ++----
 .../postProcessing/miscellaneous/wdot/wdot.C  | 15 ++----
 .../writeCellCentres/writeCellCentres.C       | 25 ++++-----
 .../scalarField/pPrime2/pPrime2.C             | 17 ++----
 .../stressComponents/stressComponents.C       | 16 ++----
 .../createTurbulenceFields.C                  | 15 ++----
 .../streamFunction/streamFunction.C           | 17 ++----
 21 files changed, 124 insertions(+), 239 deletions(-)
 rename applications/utilities/mesh/conversion/polyDualMesh/{makePolyDualMesh.C => polyDualMeshApp.C} (99%)

diff --git a/applications/utilities/errorEstimation/estimateScalarError/estimateScalarError.C b/applications/utilities/errorEstimation/estimateScalarError/estimateScalarError.C
index c90594ff24c..9fb3a646d65 100644
--- a/applications/utilities/errorEstimation/estimateScalarError/estimateScalarError.C
+++ b/applications/utilities/errorEstimation/estimateScalarError/estimateScalarError.C
@@ -39,24 +39,17 @@ Description
 
 int main(int argc, char *argv[])
 {
+    timeSelector::addOptions();
 
-#   include "addTimeOptions.H"
 #   include "setRootCase.H"
-
-    Info<< "\nEstimating error in scalar transport equation\n" << endl;
-
 #   include "createTime.H"
 
-    // Get times list
-    instantList Times = runTime.times();
-
-#   include "checkTimeOptions.H"
-
-    runTime.setTime(Times[startTime], startTime);
+    instantList timeDirs = timeSelector::select0(runTime, args);
 
 #   include "createMesh.H"
 
-    Info<< "Reading transportProperties\n" << endl;
+    Info<< "\nEstimating error in scalar transport equation\n"
+        << "Reading transportProperties\n" << endl;
 
     IOdictionary transportProperties
     (
@@ -79,9 +72,9 @@ int main(int argc, char *argv[])
     );
 
 
-    for (label i=startTime; i<endTime; i++)
+    forAll(timeDirs, timeI)
     {
-        runTime.setTime(Times[i], i);
+        runTime.setTime(timeDirs[timeI], timeI);
 
         Info<< "Time = " << runTime.timeName() << endl;
 
diff --git a/applications/utilities/errorEstimation/icoErrorEstimate/icoErrorEstimate.C b/applications/utilities/errorEstimation/icoErrorEstimate/icoErrorEstimate.C
index 5ce860640d4..c236b76eb40 100644
--- a/applications/utilities/errorEstimation/icoErrorEstimate/icoErrorEstimate.C
+++ b/applications/utilities/errorEstimation/icoErrorEstimate/icoErrorEstimate.C
@@ -38,25 +38,17 @@ Description
 
 int main(int argc, char *argv[])
 {
+    timeSelector::addOptions();
 
-#   include "addTimeOptions.H"
 #   include "setRootCase.H"
-
-    Info<< "\nEstimating error in the incompressible momentum equation\n"
-        << endl;
-
 #   include "createTime.H"
 
-    // Get times list
-    instantList Times = runTime.times();
-
-#   include "checkTimeOptions.H"
-
-    runTime.setTime(Times[startTime], startTime);
+    instantList timeDirs = timeSelector::select0(runTime, args);
 
 #   include "createMesh.H"
 
-    Info<< "Reading transportProperties\n" << endl;
+    Info<< "\nEstimating error in the incompressible momentum equation\n"
+        << "Reading transportProperties\n" << endl;
 
     IOdictionary transportProperties
     (
@@ -75,9 +67,9 @@ int main(int argc, char *argv[])
         transportProperties.lookup("nu")
     );
 
-    for (label i=startTime; i<endTime; i++)
+    forAll(timeDirs, timeI)
     {
-        runTime.setTime(Times[i], i);
+        runTime.setTime(timeDirs[timeI], timeI);
 
         Info<< "Time = " << runTime.timeName() << endl;
 
diff --git a/applications/utilities/errorEstimation/icoMomentError/icoMomentError.C b/applications/utilities/errorEstimation/icoMomentError/icoMomentError.C
index 5810d64ca78..67551e1eecc 100644
--- a/applications/utilities/errorEstimation/icoMomentError/icoMomentError.C
+++ b/applications/utilities/errorEstimation/icoMomentError/icoMomentError.C
@@ -39,25 +39,17 @@ Description
 
 int main(int argc, char *argv[])
 {
+    timeSelector::addOptions();
 
-#   include "addTimeOptions.H"
 #   include "setRootCase.H"
-
-    Info<< "\nEstimating error in the incompressible momentum equation\n"
-        << endl;
-
 #   include "createTime.H"
 
-    // Get times list
-    instantList Times = runTime.times();
-
-#   include "checkTimeOptions.H"
-
-    runTime.setTime(Times[startTime], startTime);
+    instantList timeDirs = timeSelector::select0(runTime, args);
 
 #   include "createMesh.H"
 
-    Info<< "Reading transportProperties\n" << endl;
+    Info<< "\nEstimating error in the incompressible momentum equation\n"
+        << "Reading transportProperties\n" << endl;
 
     IOdictionary transportProperties
     (
@@ -76,9 +68,9 @@ int main(int argc, char *argv[])
         transportProperties.lookup("nu")
     );
 
-    for (label i=startTime; i<endTime; i++)
+    forAll(timeDirs, timeI)
     {
-        runTime.setTime(Times[i], i);
+        runTime.setTime(timeDirs[timeI], timeI);
 
         Info<< "Time = " << runTime.timeName() << endl;
 
diff --git a/applications/utilities/errorEstimation/momentScalarError/momentScalarError.C b/applications/utilities/errorEstimation/momentScalarError/momentScalarError.C
index b1e1395bda0..f1767e75b01 100644
--- a/applications/utilities/errorEstimation/momentScalarError/momentScalarError.C
+++ b/applications/utilities/errorEstimation/momentScalarError/momentScalarError.C
@@ -40,24 +40,17 @@ Description
 
 int main(int argc, char *argv[])
 {
+    timeSelector::addOptions();
 
-#   include "addTimeOptions.H"
 #   include "setRootCase.H"
-
-    Info<< "\nEstimating error in scalar transport equation\n" << endl;
-
 #   include "createTime.H"
 
-    // Get times list
-    instantList Times = runTime.times();
-
-#   include "checkTimeOptions.H"
-
-    runTime.setTime(Times[startTime], startTime);
+    instantList timeDirs = timeSelector::select0(runTime, args);
 
 #   include "createMesh.H"
 
-    Info<< "Reading transportProperties\n" << endl;
+    Info<< "\nEstimating error in scalar transport equation\n"
+        << "Reading transportProperties\n" << endl;
 
     IOdictionary transportProperties
     (
@@ -80,9 +73,9 @@ int main(int argc, char *argv[])
     );
 
 
-    for (label i=startTime; i<endTime; i++)
+    forAll(timeDirs, timeI)
     {
-        runTime.setTime(Times[i], i);
+        runTime.setTime(timeDirs[timeI], timeI);
 
         Info<< "Time = " << runTime.timeName() << endl;
 
diff --git a/applications/utilities/mesh/conversion/foamToStarMesh/foamToStarMesh.C b/applications/utilities/mesh/conversion/foamToStarMesh/foamToStarMesh.C
index 0a4f6d6027b..5cdbcb77e89 100644
--- a/applications/utilities/mesh/conversion/foamToStarMesh/foamToStarMesh.C
+++ b/applications/utilities/mesh/conversion/foamToStarMesh/foamToStarMesh.C
@@ -61,6 +61,7 @@ See Also
 \*---------------------------------------------------------------------------*/
 
 #include "argList.H"
+#include "timeSelector.H"
 #include "Time.H"
 #include "polyMesh.H"
 #include "STARCDMeshWriter.H"
@@ -73,20 +74,17 @@ using namespace Foam;
 int main(int argc, char *argv[])
 {
     argList::noParallel();
+    timeSelector::addOptions();
+
     argList::validOptions.insert("scale", "scale");
     argList::validOptions.insert("noBnd", "");
     argList::validOptions.insert("tri", "");
     argList::validOptions.insert("surface", "");
 
-#   include "addTimeOptions.H"
 #   include "setRootCase.H"
 #   include "createTime.H"
-    // Get times list
-    instantList Times = runTime.times();
 
-    // set startTime and endTime depending on -time and -latestTime options
-#   include "checkTimeOptions.H"
-    runTime.setTime(Times[startTime], startTime);
+    instantList timeDirs = timeSelector::select0(runTime, args);
 
     bool surfaceOnly = false;
     if (args.options().found("surface") or args.options().found("tri"))
@@ -118,17 +116,16 @@ int main(int argc, char *argv[])
 
 #   include "createPolyMesh.H"
 
-    // bool firstCheck = true;
 
-    for (label timeI = startTime; timeI < endTime; ++timeI)
+    forAll(timeDirs, timeI)
     {
-        runTime.setTime(Times[timeI], timeI);
+        runTime.setTime(timeDirs[timeI], timeI);
 
 #       include "getTimeIndex.H"
 
         polyMesh::readUpdateState state = mesh.readUpdate();
 
-        if (timeI == startTime || state != polyMesh::UNCHANGED)
+        if (!timeI || state != polyMesh::UNCHANGED)
         {
             meshWriters::STARCD writer(mesh, scaleFactor);
 
diff --git a/applications/utilities/mesh/conversion/polyDualMesh/Make/files b/applications/utilities/mesh/conversion/polyDualMesh/Make/files
index 752da5cfddb..189fc19ec52 100644
--- a/applications/utilities/mesh/conversion/polyDualMesh/Make/files
+++ b/applications/utilities/mesh/conversion/polyDualMesh/Make/files
@@ -1,4 +1,4 @@
 meshDualiser.C
-makePolyDualMesh.C
+polyDualMeshApp.C
 
 EXE = $(FOAM_APPBIN)/polyDualMesh
diff --git a/applications/utilities/mesh/conversion/polyDualMesh/makePolyDualMesh.C b/applications/utilities/mesh/conversion/polyDualMesh/polyDualMeshApp.C
similarity index 99%
rename from applications/utilities/mesh/conversion/polyDualMesh/makePolyDualMesh.C
rename to applications/utilities/mesh/conversion/polyDualMesh/polyDualMeshApp.C
index ab553054021..8b03d895422 100644
--- a/applications/utilities/mesh/conversion/polyDualMesh/makePolyDualMesh.C
+++ b/applications/utilities/mesh/conversion/polyDualMesh/polyDualMeshApp.C
@@ -348,8 +348,10 @@ int main(int argc, char *argv[])
 
 #   include "setRootCase.H"
 #   include "createTime.H"
+
     // Get times list
     instantList Times = runTime.times();
+
 #   include "checkTimeOptions.H"
     runTime.setTime(Times[startTime], startTime);
 
@@ -509,7 +511,7 @@ int main(int argc, char *argv[])
     Info<< "Writing dual mesh to " << runTime.timeName() << endl;
 
     mesh.write();
- 
+
     Info<< "End\n" << endl;
 
     return 0;
diff --git a/applications/utilities/mesh/conversion/writeMeshObj/writeMeshObj.C b/applications/utilities/mesh/conversion/writeMeshObj/writeMeshObj.C
index e6c2560b38e..d8042fdaa8a 100644
--- a/applications/utilities/mesh/conversion/writeMeshObj/writeMeshObj.C
+++ b/applications/utilities/mesh/conversion/writeMeshObj/writeMeshObj.C
@@ -37,6 +37,7 @@ Description
 \*---------------------------------------------------------------------------*/
 
 #include "argList.H"
+#include "timeSelector.H"
 #include "Time.H"
 #include "polyMesh.H"
 #include "OFstream.H"
@@ -336,6 +337,7 @@ void writePointCells
 
 int main(int argc, char *argv[])
 {
+    timeSelector::addOptions();
     argList::validOptions.insert("patchFaces", "");
     argList::validOptions.insert("cell", "cellI");
     argList::validOptions.insert("face", "faceI");
@@ -343,7 +345,6 @@ int main(int argc, char *argv[])
     argList::validOptions.insert("cellSet", "setName");
     argList::validOptions.insert("faceSet", "setName");
 
-#   include "addTimeOptions.H"
 #   include "setRootCase.H"
 #   include "createTime.H"
     runTime.functionObjects().off();
@@ -361,31 +362,23 @@ int main(int argc, char *argv[])
         << "(for points, faces, cells) is consistent with"
         << " Foam numbering (starting from 0)." << endl << endl;
 
-    // Get times list
-    instantList Times = runTime.times();
-
-#   include "checkTimeOptions.H"
-
-    runTime.setTime(Times[startTime], startTime);
+    instantList timeDirs = timeSelector::select0(runTime, args);
 
 #   include "createPolyMesh.H"
 
-    bool firstCheck = true;
-
-    for (label i=startTime; i<endTime; i++)
+    forAll(timeDirs, timeI)
     {
-        runTime.setTime(Times[i], i);
+        runTime.setTime(timeDirs[timeI], timeI);
 
         Info<< "Time = " << runTime.timeName() << endl;
 
         polyMesh::readUpdateState state = mesh.readUpdate();
 
-        if (firstCheck || state != polyMesh::UNCHANGED)
+        if (!timeI || state != polyMesh::UNCHANGED)
         {
             if (patchFaces)
             {
                 writePatchFaces(mesh, runTime.timeName());
-
             }
             else if (doCell)
             {
@@ -487,9 +480,7 @@ int main(int argc, char *argv[])
             Info << "No mesh." << endl;
         }
 
-        firstCheck = false;
-
-        Info << endl << endl;
+        Info << nl << endl;
     }
 
 
diff --git a/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C b/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C
index 74ab53432af..d226008f5cd 100644
--- a/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C
+++ b/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C
@@ -31,7 +31,9 @@ Description
 \*---------------------------------------------------------------------------*/
 
 #include "argList.H"
+#include "timeSelector.H"
 #include "Time.H"
+
 #include "polyMesh.H"
 #include "globalMeshData.H"
 
@@ -45,48 +47,34 @@ using namespace Foam;
 
 int main(int argc, char *argv[])
 {
+    timeSelector::addOptions(false);   // no constant
 #   include "addRegionOption.H"
-
-#   include "addTimeOptionsNoConstant.H"
-
     argList::validOptions.insert("noTopology", "");
     argList::validOptions.insert("allGeometry", "");
     argList::validOptions.insert("allTopology", "");
 
 #   include "setRootCase.H"
-
-    const bool noTopology = args.options().found("noTopology");
-    const bool allGeometry = args.options().found("allGeometry");
-    const bool allTopology = args.options().found("allTopology");
-
 #   include "createTime.H"
-
-    // Get times list
-    instantList Times = runTime.times();
-
-#   include "checkTimeOptionsNoConstant.H"
-
-    runTime.setTime(Times[startTime], startTime);
-
+    instantList timeDirs = timeSelector::select0(runTime, args);
 #   include "createNamedPolyMesh.H"
 
-    bool firstCheck = true;
+    const bool noTopology  = args.options().found("noTopology");
+    const bool allGeometry = args.options().found("allGeometry");
+    const bool allTopology = args.options().found("allTopology");
 
-    for (label i=startTime; i<endTime; i++)
+    forAll(timeDirs, timeI)
     {
-        runTime.setTime(Times[i], i);
+        runTime.setTime(timeDirs[timeI], timeI);
 
         polyMesh::readUpdateState state = mesh.readUpdate();
 
         if
         (
-            firstCheck
+            !timeI
          || state == polyMesh::TOPO_CHANGE
          || state == polyMesh::TOPO_PATCH_CHANGE
         )
         {
-            firstCheck = false;
-
             Info<< "Time = " << runTime.timeName() << nl << endl;
 
             // Clear mesh before checking
@@ -110,32 +98,30 @@ int main(int argc, char *argv[])
 
             if (noFailedChecks == 0)
             {
-                Info<< "\nMesh OK."
-                    << nl << endl;
+                Info<< "\nMesh OK.\n" << endl;
             }
             else
             {
-                Info<< "\nFailed " << noFailedChecks << " mesh checks."
-                    << nl << endl;
+                Info<< "\nFailed " << noFailedChecks << " mesh checks.\n"
+                    << endl;
             }
         }
         else if (state == polyMesh::POINTS_MOVED)
         {
             Info<< "Time = " << runTime.timeName() << nl << endl;
 
-            label noFailedChecks = checkGeometry(mesh, allGeometry);
+            label nFailedChecks = checkGeometry(mesh, allGeometry);
 
-            reduce(noFailedChecks, sumOp<label>());
+            reduce(nFailedChecks, sumOp<label>());
 
-            if (noFailedChecks == 0)
+            if (nFailedChecks)
             {
-                Info << "\nMesh OK."
-                    << nl << endl;
+                Info<< "\nFailed " << nFailedChecks << " mesh checks.\n"
+                    << endl;
             }
             else
             {
-                Info<< "\nFailed " << noFailedChecks << " mesh checks."
-                    << nl << endl;
+                Info << "\nMesh OK.\n" << endl;
             }
         }
     }
diff --git a/applications/utilities/mesh/manipulation/rotateMesh/rotateMesh.C b/applications/utilities/mesh/manipulation/rotateMesh/rotateMesh.C
index 317799312ca..d7a84ee45a8 100644
--- a/applications/utilities/mesh/manipulation/rotateMesh/rotateMesh.C
+++ b/applications/utilities/mesh/manipulation/rotateMesh/rotateMesh.C
@@ -31,6 +31,7 @@ Description
 \*---------------------------------------------------------------------------*/
 
 #include "argList.H"
+#include "timeSelector.H"
 #include "Time.H"
 #include "fvMesh.H"
 #include "volFields.H"
@@ -66,7 +67,8 @@ void RotateFields
 
 int main(int argc, char *argv[])
 {
-#   include "addTimeOptions.H"
+    timeSelector::addOptions();
+
     argList::validArgs.append("n1");
     argList::validArgs.append("n2");
 
@@ -105,19 +107,15 @@ int main(int argc, char *argv[])
         points.write();
     }
 
-    // Get times list
-    instantList Times = runTime.times();
-
-    // set startTime and endTime depending on -time and -latestTime options
-#   include "checkTimeOptions.H"
 
-    runTime.setTime(Times[startTime], startTime);
+    instantList timeDirs = timeSelector::select0(runTime, args);
 
 #   include "createMesh.H"
 
-    for (label i=startTime; i<endTime; i++)
+
+    forAll(timeDirs, timeI)
     {
-        runTime.setTime(Times[i], i);
+        runTime.setTime(timeDirs[timeI], timeI);
 
         Info<< "Time = " << runTime.timeName() << endl;
 
diff --git a/applications/utilities/mesh/manipulation/setSet/setSet.C b/applications/utilities/mesh/manipulation/setSet/setSet.C
index a5909c398ab..ff6d576b0ab 100644
--- a/applications/utilities/mesh/manipulation/setSet/setSet.C
+++ b/applications/utilities/mesh/manipulation/setSet/setSet.C
@@ -48,8 +48,8 @@ Description
 
 
 #if READLINE != 0
-#include <readline/readline.h>
-#include <readline/history.h>
+# include <readline/readline.h>
+# include <readline/history.h>
 #endif
 
 using namespace Foam;
diff --git a/applications/utilities/miscellaneous/patchSummary/patchSummary.C b/applications/utilities/miscellaneous/patchSummary/patchSummary.C
index 8195e4d9dc6..67ae5270274 100644
--- a/applications/utilities/miscellaneous/patchSummary/patchSummary.C
+++ b/applications/utilities/miscellaneous/patchSummary/patchSummary.C
@@ -40,25 +40,19 @@ Description
 
 int main(int argc, char *argv[])
 {
+    timeSelector::addOptions();
 
-#   include "addTimeOptions.H"
 #   include "addRegionOption.H"
 #   include "setRootCase.H"
 #   include "createTime.H"
 
-    // Get times list
-    instantList Times = runTime.times();
-
-    // set startTime and endTime depending on -time and -latestTime options
-#   include "checkTimeOptions.H"
-
-    runTime.setTime(Times[startTime], startTime);
+    instantList timeDirs = timeSelector::select0(runTime, args);
 
 #   include "createNamedMesh.H"
 
-    for (label i=startTime; i<endTime; i++)
+    forAll(timeDirs, timeI)
     {
-        runTime.setTime(Times[i], i);
+        runTime.setTime(timeDirs[timeI], timeI);
 
         Info<< "Time = " << runTime.timeName() << nl << endl;
 
diff --git a/applications/utilities/postProcessing/dataConversion/foamDataToFluent/foamDataToFluent.C b/applications/utilities/postProcessing/dataConversion/foamDataToFluent/foamDataToFluent.C
index 7f5a8e29174..4a63948f422 100644
--- a/applications/utilities/postProcessing/dataConversion/foamDataToFluent/foamDataToFluent.C
+++ b/applications/utilities/postProcessing/dataConversion/foamDataToFluent/foamDataToFluent.C
@@ -38,26 +38,22 @@ Description
 int main(int argc, char *argv[])
 {
     argList::noParallel();
-#   include "addTimeOptions.H"
+    timeSelector::addOptions(false);   // no constant
 
 #   include "setRootCase.H"
 #   include "createTime.H"
 
-    instantList Times = runTime.times();
-
-    // set startTime and endTime depending on -time and -latestTime options
-#   include "checkTimeOptionsNoConstant.H"
-
-    runTime.setTime(Times[startTime], startTime);
+    instantList timeDirs = timeSelector::select0(runTime, args);
 
 #   include "createMesh.H"
 
     // make a directory called proInterface in the case
     mkDir(runTime.rootPath()/runTime.caseName()/"fluentInterface");
 
-    for (label timeI = startTime; timeI < endTime; timeI++)
+    forAll(timeDirs, timeI)
     {
-        runTime.setTime(Times[timeI], timeI);
+        runTime.setTime(timeDirs[timeI], timeI);
+
         Info<< "Time = " << runTime.timeName() << endl;
 
         if (mesh.readUpdate())
diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C
index 793e18c05b7..2d5e7479906 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C
+++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C
@@ -225,8 +225,10 @@ labelList getSelectedPatches
 
 int main(int argc, char *argv[])
 {
-#   include "addTimeOptions.H"
+    timeSelector::addOptions();
+
 #   include "addRegionOption.H"
+
     argList::validOptions.insert("fields", "fields");
     argList::validOptions.insert("cellSet", "cellSet name");
     argList::validOptions.insert("faceSet", "faceSet name");
@@ -244,7 +246,6 @@ int main(int argc, char *argv[])
 #   include "setRootCase.H"
 #   include "createTime.H"
 
-
     bool doWriteInternal = !args.options().found("noInternal");
     bool doFaceZones = !args.options().found("noFaceZones");
     bool doLinks = !args.options().found("noLinks");
@@ -312,14 +313,8 @@ int main(int argc, char *argv[])
     }
 
 
-    instantList Times = runTime.times();
-
-    // set startTime and endTime depending on -time and -latestTime options
-#   include "checkTimeOptions.H"
-
-    runTime.setTime(Times[startTime], startTime);
+    instantList timeDirs = timeSelector::select0(runTime, args);
 
-    // Current mesh.
 #   include "createNamedMesh.H"
 
     // VTK/ directory in the case
@@ -359,11 +354,11 @@ int main(int argc, char *argv[])
     // mesh wrapper; does subsetting and decomposition
     vtkMesh vMesh(mesh, cellSetName);
 
-    for (label timeI = startTime; timeI < endTime; timeI++)
+    forAll(timeDirs, timeI)
     {
-        runTime.setTime(Times[timeI], timeI);
+        runTime.setTime(timeDirs[timeI], timeI);
 
-        Info<< "Time " << Times[timeI].name() << endl;
+        Info<< "Time: " << runTime.timeName() << endl;
 
         // Check for new polyMesh/ and update mesh, fvMeshSubset and cell
         // decomposition.
diff --git a/applications/utilities/postProcessing/miscellaneous/ptot/ptot.C b/applications/utilities/postProcessing/miscellaneous/ptot/ptot.C
index bb41fb60d46..26d66de83e8 100644
--- a/applications/utilities/postProcessing/miscellaneous/ptot/ptot.C
+++ b/applications/utilities/postProcessing/miscellaneous/ptot/ptot.C
@@ -36,25 +36,18 @@ Description
 
 int main(int argc, char *argv[])
 {
+    timeSelector::addOptions();
 
-#   include "addTimeOptions.H"
 #   include "setRootCase.H"
-
 #   include "createTime.H"
 
-    // Get times list
-    instantList Times = runTime.times();
-
-    // set startTime and endTime depending on -time and -latestTime options
-#   include "checkTimeOptions.H"
-
-    runTime.setTime(Times[startTime], startTime);
+    instantList timeDirs = timeSelector::select0(runTime, args);
 
 #   include "createMesh.H"
 
-    for (label i=startTime; i<endTime; i++)
+    forAll(timeDirs, timeI)
     {
-        runTime.setTime(Times[i], i);
+        runTime.setTime(timeDirs[timeI], timeI);
 
         Info<< "Time = " << runTime.timeName() << endl;
 
diff --git a/applications/utilities/postProcessing/miscellaneous/wdot/wdot.C b/applications/utilities/postProcessing/miscellaneous/wdot/wdot.C
index 79f23de3e79..81a0c469794 100644
--- a/applications/utilities/postProcessing/miscellaneous/wdot/wdot.C
+++ b/applications/utilities/postProcessing/miscellaneous/wdot/wdot.C
@@ -37,25 +37,18 @@ Description
 
 int main(int argc, char *argv[])
 {
+    timeSelector::addOptions();
 
-#   include "addTimeOptions.H"
 #   include "setRootCase.H"
-
 #   include "createTime.H"
 
-    // Get times list
-    instantList Times = runTime.times();
-
-    // set startTime and endTime depending on -time and -latestTime options
-#   include "checkTimeOptions.H"
-
-    runTime.setTime(Times[startTime], startTime);
+    instantList timeDirs = timeSelector::select0(runTime, args);
 
 #   include "createMesh.H"
 
-    for (label i=startTime; i<endTime; i++)
+    forAll(timeDirs, timeI)
     {
-        runTime.setTime(Times[i], i);
+        runTime.setTime(timeDirs[timeI], timeI);
 
         mesh.readUpdate();
 
diff --git a/applications/utilities/postProcessing/miscellaneous/writeCellCentres/writeCellCentres.C b/applications/utilities/postProcessing/miscellaneous/writeCellCentres/writeCellCentres.C
index f420edf6ada..bc26ec509fb 100644
--- a/applications/utilities/postProcessing/miscellaneous/writeCellCentres/writeCellCentres.C
+++ b/applications/utilities/postProcessing/miscellaneous/writeCellCentres/writeCellCentres.C
@@ -29,6 +29,8 @@ Description
 \*---------------------------------------------------------------------------*/
 
 #include "argList.H"
+#include "timeSelector.H"
+#include "Time.H"
 #include "fvMesh.H"
 #include "vectorIOField.H"
 #include "volFields.H"
@@ -41,23 +43,18 @@ using namespace Foam;
 
 int main(int argc, char *argv[])
 {
-#   include "addTimeOptions.H"
+    timeSelector::addOptions();
+
 #   include "setRootCase.H"
 #   include "createTime.H"
 
-
-    // Get times list
-    instantList Times = runTime.times();
-
-#   include "checkTimeOptions.H"
-
-    runTime.setTime(Times[startTime], startTime);
+    instantList timeDirs = timeSelector::select0(runTime, args);
 
 #   include "createMesh.H"
 
-    for (label i=startTime; i<endTime; i++)
+    forAll(timeDirs, timeI)
     {
-        runTime.setTime(Times[i], i);
+        runTime.setTime(timeDirs[timeI], timeI);
 
         Info<< "Time = " << runTime.timeName() << endl;
 
@@ -77,10 +74,10 @@ int main(int argc, char *argv[])
             mesh.C()
         );
 
-        //Info<< "Writing cellCentre positions to " << cc.name() << " in "
-        //    << runTime.timeName() << endl;
+        // Info<< "Writing cellCentre positions to " << cc.name() << " in "
+        //     << runTime.timeName() << endl;
         //
-        //cc.write();
+        // cc.write();
 
         Info<< "Writing components of cellCentre positions to volScalarFields"
             << " ccx, ccy, ccz in " <<  runTime.timeName() << endl;
@@ -104,7 +101,7 @@ int main(int argc, char *argv[])
         }
     }
 
-    Info << nl << "End" << endl;
+    Info<< "\nEnd" << endl;
 
     return 0;
 }
diff --git a/applications/utilities/postProcessing/scalarField/pPrime2/pPrime2.C b/applications/utilities/postProcessing/scalarField/pPrime2/pPrime2.C
index 6729389218f..54a7b53c461 100644
--- a/applications/utilities/postProcessing/scalarField/pPrime2/pPrime2.C
+++ b/applications/utilities/postProcessing/scalarField/pPrime2/pPrime2.C
@@ -38,23 +38,16 @@ Description
 
 int main(int argc, char *argv[])
 {
+    timeSelector::addOptions();
 
-#   include "addTimeOptions.H"
 #   include "setRootCase.H"
-
 #   include "createTime.H"
 
-    // Get times list
-    instantList Times = runTime.times();
-
-    // set startTime and endTime depending on -time and -latestTime options
-#   include "checkTimeOptions.H"
-
-    runTime.setTime(Times[startTime], startTime);
+    instantList timeDirs = timeSelector::select0(runTime, args);
 
 #   include "createMesh.H"
 
-    runTime.setTime(Times[endTime-1], endTime-1);
+    runTime.setTime(timeDirs[timeDirs.size()-1], timeDirs.size()-1);
 
     volScalarField pMean
     (
@@ -68,9 +61,9 @@ int main(int argc, char *argv[])
         mesh
     );
 
-    for (label i=startTime; i<endTime; i++)
+    forAll(timeDirs, timeI)
     {
-        runTime.setTime(Times[i], i);
+        runTime.setTime(timeDirs[timeI], timeI);
 
         Info<< "Time = " << runTime.timeName() << endl;
 
diff --git a/applications/utilities/postProcessing/stressField/stressComponents/stressComponents.C b/applications/utilities/postProcessing/stressField/stressComponents/stressComponents.C
index 2c481b89278..aa26a0e0c08 100644
--- a/applications/utilities/postProcessing/stressField/stressComponents/stressComponents.C
+++ b/applications/utilities/postProcessing/stressField/stressComponents/stressComponents.C
@@ -35,30 +35,22 @@ Description
 #include "incompressible/singlePhaseTransportModel/singlePhaseTransportModel.H"
 #include "zeroGradientFvPatchFields.H"
 
-
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 int main(int argc, char *argv[])
 {
+    timeSelector::addOptions();
 
-#   include "addTimeOptions.H"
 #   include "setRootCase.H"
-
 #   include "createTime.H"
 
-    // Get times list
-    instantList Times = runTime.times();
-
-    // set startTime and endTime depending on -time and -latestTime options
-#   include "checkTimeOptions.H"
-
-    runTime.setTime(Times[startTime], startTime);
+    instantList timeDirs = timeSelector::select0(runTime, args);
 
 #   include "createMesh.H"
 
-    for (label i=startTime; i<endTime; i++)
+    forAll(timeDirs, timeI)
     {
-        runTime.setTime(Times[i], i);
+        runTime.setTime(timeDirs[timeI], timeI);
 
         Info<< "Time = " << runTime.timeName() << endl;
 
diff --git a/applications/utilities/postProcessing/turbulence/createTurbulenceFields/createTurbulenceFields.C b/applications/utilities/postProcessing/turbulence/createTurbulenceFields/createTurbulenceFields.C
index 5e15aff046e..c4a556f21fb 100644
--- a/applications/utilities/postProcessing/turbulence/createTurbulenceFields/createTurbulenceFields.C
+++ b/applications/utilities/postProcessing/turbulence/createTurbulenceFields/createTurbulenceFields.C
@@ -42,24 +42,19 @@ Source files:
 
 int main(int argc, char *argv[])
 {
-    #include "addTimeOptions.H"
+    timeSelector::addOptions();
+
     #include "setRootCase.H"
     #include "createTime.H"
 
-    // Get times list
-    instantList Times = runTime.times();
-
-    // set startTime and endTime depending on -time and -latestTime options
-    #include "checkTimeOptions.H"
+    instantList timeDirs = timeSelector::select0(runTime, args);
 
-    runTime.setTime(Times[startTime], startTime);
     #include "createMesh.H"
-
     #include "createFields.H"
 
-    for (label i=startTime; i<endTime; i++)
+    forAll(timeDirs, timeI)
     {
-        runTime.setTime(Times[i], i);
+        runTime.setTime(timeDirs[timeI], timeI);
 
         Info<< "Time = " << runTime.timeName() << endl;
 
diff --git a/applications/utilities/postProcessing/velocityField/streamFunction/streamFunction.C b/applications/utilities/postProcessing/velocityField/streamFunction/streamFunction.C
index 98c044ca3e1..68d4c8d6980 100644
--- a/applications/utilities/postProcessing/velocityField/streamFunction/streamFunction.C
+++ b/applications/utilities/postProcessing/velocityField/streamFunction/streamFunction.C
@@ -26,7 +26,7 @@ Application
     streamFunction
 
 Description
-    Calculates and writes the stream function of velocity field U at each time 
+    Calculates and writes the stream function of velocity field U at each time
 
 \*---------------------------------------------------------------------------*/
 
@@ -42,27 +42,20 @@ Description
 
 int main(int argc, char *argv[])
 {
+    timeSelector::addOptions();
 
-#   include "addTimeOptions.H"
 #   include "setRootCase.H"
-
 #   include "createTime.H"
 
-    // Get times list
-    instantList Times = runTime.times();
-
-    // set startTime and endTime depending on -time and -latestTime options
-#   include "checkTimeOptions.H"
-
-    runTime.setTime(Times[startTime], startTime);
+    instantList timeDirs = timeSelector::select0(runTime, args);
 
 #   include "createMeshNoClear.H"
 
     pointMesh pMesh(mesh);
 
-    for (label i=startTime; i<endTime; i++)
+    forAll(timeDirs, timeI)
     {
-        runTime.setTime(Times[i], i);
+        runTime.setTime(timeDirs[timeI], timeI);
 
         Info<< nl << "Time: " << runTime.timeName() << endl;
 
-- 
GitLab