From 1194af6a8af3da3ac3a17d892f61c191965237f8 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@Germany>
Date: Mon, 5 Oct 2009 09:14:14 +0200
Subject: [PATCH] added foamListTimes utility

- can be used to query available time directories

- useful, for example, with a shell script
---
 .../miscellaneous/foamListTimes/Make/files    |   3 +
 .../miscellaneous/foamListTimes/Make/options  |   2 +
 .../foamListTimes/foamListTimes.C             | 126 ++++++++++++++++++
 3 files changed, 131 insertions(+)
 create mode 100644 applications/utilities/postProcessing/miscellaneous/foamListTimes/Make/files
 create mode 100644 applications/utilities/postProcessing/miscellaneous/foamListTimes/Make/options
 create mode 100644 applications/utilities/postProcessing/miscellaneous/foamListTimes/foamListTimes.C

diff --git a/applications/utilities/postProcessing/miscellaneous/foamListTimes/Make/files b/applications/utilities/postProcessing/miscellaneous/foamListTimes/Make/files
new file mode 100644
index 00000000000..fe66ad82248
--- /dev/null
+++ b/applications/utilities/postProcessing/miscellaneous/foamListTimes/Make/files
@@ -0,0 +1,3 @@
+foamListTimes.C
+
+EXE = $(FOAM_APPBIN)/foamListTimes
diff --git a/applications/utilities/postProcessing/miscellaneous/foamListTimes/Make/options b/applications/utilities/postProcessing/miscellaneous/foamListTimes/Make/options
new file mode 100644
index 00000000000..18e6fe47afa
--- /dev/null
+++ b/applications/utilities/postProcessing/miscellaneous/foamListTimes/Make/options
@@ -0,0 +1,2 @@
+/* EXE_INC = */
+/* EXE_LIBS = */
diff --git a/applications/utilities/postProcessing/miscellaneous/foamListTimes/foamListTimes.C b/applications/utilities/postProcessing/miscellaneous/foamListTimes/foamListTimes.C
new file mode 100644
index 00000000000..0a10a5744fa
--- /dev/null
+++ b/applications/utilities/postProcessing/miscellaneous/foamListTimes/foamListTimes.C
@@ -0,0 +1,126 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation,
+    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+Application
+    foamListTimes
+
+Description
+    List times using timeSelector
+
+Usage
+
+    - foamListTimes [OPTION]
+
+    @param -processor \n
+    List times from processor0 directory
+
+\*---------------------------------------------------------------------------*/
+
+#include "argList.H"
+#include "timeSelector.H"
+#include "Time.H"
+
+using namespace Foam;
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+int main(int argc, char *argv[])
+{
+    timeSelector::addOptions();  // -constant enabled
+    argList::noBanner();
+    argList::noParallel();
+    argList::validOptions.insert("processor", "");
+
+#   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)
+        {
+            FatalErrorIn(args.executable())
+                << "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
+    );
+
+    forAll(timeDirs, timeI)
+    {
+        Info<< timeDirs[timeI].name() << endl;
+    }
+
+    return 0;
+}
+
+
+// ************************************************************************* //
-- 
GitLab