diff --git a/applications/test/fileOperation1/Make/files b/applications/test/fileOperation1/Make/files
new file mode 100644
index 0000000000..3f4a231f16
--- /dev/null
+++ b/applications/test/fileOperation1/Make/files
@@ -0,0 +1,3 @@
+Test-fileOperation1.C
+
+EXE = $(FOAM_USER_APPBIN)/Test-fileOperation1
diff --git a/applications/test/fileOperation1/Make/options b/applications/test/fileOperation1/Make/options
new file mode 100644
index 0000000000..18e6fe47af
--- /dev/null
+++ b/applications/test/fileOperation1/Make/options
@@ -0,0 +1,2 @@
+/* EXE_INC = */
+/* EXE_LIBS = */
diff --git a/applications/test/fileOperation1/Test-fileOperation1.C b/applications/test/fileOperation1/Test-fileOperation1.C
new file mode 100644
index 0000000000..be4480d12e
--- /dev/null
+++ b/applications/test/fileOperation1/Test-fileOperation1.C
@@ -0,0 +1,125 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | www.openfoam.com
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+ Copyright (C) 2020 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 .
+
+Application
+ Test-fileOperation1
+
+Description
+ Test string parsing and other bits for fileOperation
+
+\*---------------------------------------------------------------------------*/
+
+#include "argList.H"
+#include "fileName.H"
+#include "fileOperation.H"
+#include "SubList.H"
+#include "IOobject.H"
+#include "IOstreams.H"
+#include "OSspecific.H"
+
+
+using namespace Foam;
+
+word toString(const fileOperation::procRangeType& group)
+{
+ if (group.empty())
+ {
+ return word::null;
+ }
+ return Foam::name(group.first()) + "-" + Foam::name(group.last());
+}
+
+
+void testSplitPath(const fileName& pathName)
+{
+ fileName path, procDir, local;
+ fileOperation::procRangeType group;
+ label nProcs;
+
+ const label proci =
+ fileOperation::splitProcessorPath
+ (
+ pathName,
+ path,
+ procDir,
+ local,
+ group,
+ nProcs
+ );
+
+
+ Info<< nl
+ << "Input = " << pathName << nl
+ << " path = " << path << nl
+ << " proc = " << procDir << nl
+ << " local = " << local << nl
+ << " group = " << group << " = " << toString(group) << nl
+ << " proci = " << proci << nl
+ << " nProcs = " << nProcs << nl;
+}
+
+
+void testSplitPaths(std::initializer_list dirNames)
+{
+ for (const auto& dirName : dirNames)
+ {
+ testSplitPath(fileName(dirName));
+ }
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+// Main program:
+
+int main(int argc, char *argv[])
+{
+ argList::addArgument("fileName .. fileNameN");
+ argList::addOption("istream", "file", "test Istream values");
+
+
+ testSplitPaths
+ ({
+ "foo/bar",
+ "foo/processor5/system",
+ "foo/processors100_0-5/constant",
+ "foo/processors20_12-16/constant",
+ "/new-processor-gen/case1/processors20",
+ "/new-processor-gen/case1/processors100_0-5/constant",
+ "/new-processor-gen/case1/processors/input",
+ "devel/processor/ideas/processor0/system",
+
+ "/path/processor0Generation1/case1/processor10/input",
+
+ "path/processors100_ab-cd/constant",
+ "path/processors100_a11-d00/constant",
+ });
+
+
+ Info<< "\nEnd\n" << endl;
+ return 0;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/miscellaneous/foamListTimes/foamListTimes.C b/applications/utilities/miscellaneous/foamListTimes/foamListTimes.C
index d7469d9f05..82d78c654d 100644
--- a/applications/utilities/miscellaneous/foamListTimes/foamListTimes.C
+++ b/applications/utilities/miscellaneous/foamListTimes/foamListTimes.C
@@ -66,19 +66,14 @@ using namespace Foam;
// Many ways to name processor directories
//
// Uncollated | "processor0", "processor1" ...
-// Collated (old) | "processors"
-// Collated (new) | "processors"
+// Collated | "processors"
// Host collated | "processors_-"
const regExp matcher("processors?[0-9]+(_[0-9]+-[0-9]+)?");
bool isProcessorDir(const string& dir)
{
- return
- (
- dir.starts_with("processor")
- && (dir == "processors" || matcher.match(dir))
- );
+ return (dir.starts_with("processor") && matcher.match(dir));
}
diff --git a/applications/utilities/miscellaneous/foamRestoreFields/foamRestoreFields.C b/applications/utilities/miscellaneous/foamRestoreFields/foamRestoreFields.C
index 45235ea0d5..03518dcc0c 100644
--- a/applications/utilities/miscellaneous/foamRestoreFields/foamRestoreFields.C
+++ b/applications/utilities/miscellaneous/foamRestoreFields/foamRestoreFields.C
@@ -71,19 +71,14 @@ using namespace Foam;
// Many ways to name processor directories
//
// Uncollated | "processor0", "processor1" ...
-// Collated (old) | "processors"
-// Collated (new) | "processors"
+// Collated | "processors"
// Host collated | "processors_-"
const regExp matcher("processors?[0-9]+(_[0-9]+-[0-9]+)?");
bool isProcessorDir(const string& dir)
{
- return
- (
- dir.starts_with("processor")
- && (dir == "processors" || matcher.match(dir))
- );
+ return (dir.starts_with("processor") && matcher.match(dir));
}
@@ -384,13 +379,7 @@ int main(int argc, char *argv[])
{
if (leadProcIdx < 0)
{
- // Collated (old)
- leadProcIdx = procDirs.find("processors");
- }
-
- if (leadProcIdx < 0)
- {
- // Collated (new)
+ // Collated
leadProcIdx = procDirs.find("processors" + Foam::name(nProcs));
}
diff --git a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C
index 0fef72da77..bbbc6b63bf 100644
--- a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C
+++ b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C
@@ -519,29 +519,26 @@ int main(int argc, char *argv[])
{
const fileName& d = dirs[diri];
- // Starts with 'processors'
- if (d.find("processors") == 0)
+ label proci = -1;
+
+ if
+ (
+ d.starts_with("processor")
+ &&
+ (
+ // Collated is "processors"
+ d[9] == 's'
+
+ // Uncollated has integer(s) after 'processor'
+ || Foam::read(d.substr(9), proci)
+ )
+ )
{
if (fileHandler().exists(d))
{
fileHandler().rmDir(d);
}
}
-
- // Starts with 'processor'
- if (d.find("processor") == 0)
- {
- // Check that integer after processor
- fileName num(d.substr(9));
- label proci = -1;
- if (Foam::read(num.c_str(), proci))
- {
- if (fileHandler().exists(d))
- {
- fileHandler().rmDir(d);
- }
- }
- }
}
procDirsProblem = false;
diff --git a/applications/utilities/postProcessing/miscellaneous/profilingSummary/profilingSummary.C b/applications/utilities/postProcessing/miscellaneous/profilingSummary/profilingSummary.C
index a9fe33dc08..f37f7bc685 100644
--- a/applications/utilities/postProcessing/miscellaneous/profilingSummary/profilingSummary.C
+++ b/applications/utilities/postProcessing/miscellaneous/profilingSummary/profilingSummary.C
@@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
- Copyright (C) 2017 OpenCFD Ltd.
+ Copyright (C) 2017-2020 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@@ -86,15 +86,7 @@ int main(int argc, char *argv[])
#include "createTime.H"
// Determine the processor count
- #ifdef fileOperation_H
const label nProcs = fileHandler().nProcs(args.path());
- #else
- label nProcs = 0;
- while (isDir(args.path()/("processor" + Foam::name(nProcs))))
- {
- ++nProcs;
- }
- #endif
// Create the processor databases
PtrList