From 6eaa143825ed4e54c6b94206d28befce9dd1dc71 Mon Sep 17 00:00:00 2001
From: mattijs <mattijs>
Date: Mon, 13 Nov 2017 11:44:19 +0000
Subject: [PATCH] BUG: foamListTimes: reinstated. Fixes #638.

---
 .../miscellaneous/foamListTimes/Make/files    |   3 +
 .../miscellaneous/foamListTimes/Make/options  |   2 +
 .../foamListTimes/foamListTimes.C             | 174 ++++++++++++++++++
 3 files changed, 179 insertions(+)
 create mode 100644 applications/utilities/miscellaneous/foamListTimes/Make/files
 create mode 100644 applications/utilities/miscellaneous/foamListTimes/Make/options
 create mode 100644 applications/utilities/miscellaneous/foamListTimes/foamListTimes.C

diff --git a/applications/utilities/miscellaneous/foamListTimes/Make/files b/applications/utilities/miscellaneous/foamListTimes/Make/files
new file mode 100644
index 00000000000..fe66ad82248
--- /dev/null
+++ b/applications/utilities/miscellaneous/foamListTimes/Make/files
@@ -0,0 +1,3 @@
+foamListTimes.C
+
+EXE = $(FOAM_APPBIN)/foamListTimes
diff --git a/applications/utilities/miscellaneous/foamListTimes/Make/options b/applications/utilities/miscellaneous/foamListTimes/Make/options
new file mode 100644
index 00000000000..18e6fe47afa
--- /dev/null
+++ b/applications/utilities/miscellaneous/foamListTimes/Make/options
@@ -0,0 +1,2 @@
+/* EXE_INC = */
+/* EXE_LIBS = */
diff --git a/applications/utilities/miscellaneous/foamListTimes/foamListTimes.C b/applications/utilities/miscellaneous/foamListTimes/foamListTimes.C
new file mode 100644
index 00000000000..5aa7389d764
--- /dev/null
+++ b/applications/utilities/miscellaneous/foamListTimes/foamListTimes.C
@@ -0,0 +1,174 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
+     \\/     M anipulation  | Copyright (C) 2016 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+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/>.
+
+Application
+    foamListTimes
+
+Group
+    grpPostProcessingUtilities
+
+Description
+    List times using timeSelector.
+    To simplify parsing of the output, the normal banner information
+    is suppressed.
+
+Usage
+    \b foamListTimes [OPTION]
+
+    Options:
+      - \par -rm
+        Remove selected time directories
+
+      - \par -processor
+        List times from processor0/ directory
+
+\*---------------------------------------------------------------------------*/
+
+#include "argList.H"
+#include "profiling.H"
+#include "timeSelector.H"
+#include "Time.H"
+
+using namespace Foam;
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+int main(int argc, char *argv[])
+{
+    argList::addNote("List times using timeSelector");
+
+    timeSelector::addOptions(true, true);
+    argList::noBanner();
+    argList::noParallel();
+    argList::noJobInfo();
+    argList::addBoolOption
+    (
+        "processor",
+        "list times from processor0/ directory"
+    );
+    argList::addBoolOption
+    (
+        "rm",
+        "remove selected time directories"
+    );
+    profiling::disable(); // Disable profiling (and its output)
+
+    #include "setRootCase.H"
+
+    label nProcs = 0;
+
+    // Create the processor databases
+    PtrList<Time> databases(1);
+
+    if (args.optionFound("processor"))
+    {
+        // Determine the processor count directly
+        while (isDir(args.path()/(word("processor") + name(nProcs))))
+        {
+            ++nProcs;
+        }
+
+        if (!nProcs)
+        {
+            FatalErrorInFunction
+                << "No processor* directories found"
+                << exit(FatalError);
+        }
+
+        // Create the processor databases
+        databases.setSize(nProcs);
+
+        forAll(databases, proci)
+        {
+            databases.set
+            (
+                proci,
+                new Time
+                (
+                    Time::controlDictName,
+                    args.rootPath(),
+                    args.caseName()/fileName(word("processor") + name(proci))
+                )
+            );
+        }
+    }
+    else
+    {
+        databases.set
+        (
+            0,
+            new Time
+            (
+                Time::controlDictName,
+                args.rootPath(),
+                args.caseName()
+            )
+        );
+    }
+
+    // Use the times list from the master processor
+    // and select a subset based on the command-line options
+    instantList timeDirs = timeSelector::select
+    (
+        databases[0].times(),
+        args
+    );
+
+    if (args.optionFound("rm"))
+    {
+        if (args.optionFound("processor"))
+        {
+            for (label proci=0; proci<nProcs; proci++)
+            {
+                fileName procPath
+                (
+                    args.path()/(word("processor") + name(proci))
+                );
+
+                forAll(timeDirs, timeI)
+                {
+                    rmDir(procPath/timeDirs[timeI].name());
+                }
+            }
+        }
+        else
+        {
+            forAll(timeDirs, timeI)
+            {
+                rmDir(args.path()/timeDirs[timeI].name());
+            }
+        }
+    }
+    else
+    {
+        forAll(timeDirs, timeI)
+        {
+            Info<< timeDirs[timeI].name() << endl;
+        }
+    }
+
+    return 0;
+}
+
+
+// ************************************************************************* //
-- 
GitLab