From a77ab5d4eb90de10b8e2ca9ad8dc05f0144501a7 Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@esi-group.com> Date: Thu, 11 Oct 2018 09:12:01 +0200 Subject: [PATCH] STYLE: relocate distributed flag into ParRunControl - adjust member order in TimePaths to better packing --- applications/test/sizeof/Test-sizeof.C | 8 +++ .../redistributePar/redistributePar.C | 50 +++++++++---------- src/OpenFOAM/db/Time/TimePaths.C | 6 +-- src/OpenFOAM/db/Time/TimePaths.H | 3 +- src/OpenFOAM/global/argList/argList.C | 13 +++-- src/OpenFOAM/global/argList/argList.H | 17 +++---- src/OpenFOAM/global/argList/argListI.H | 24 ++++----- src/OpenFOAM/global/argList/parRun.H | 34 +++++++++---- 8 files changed, 90 insertions(+), 65 deletions(-) diff --git a/applications/test/sizeof/Test-sizeof.C b/applications/test/sizeof/Test-sizeof.C index 40f33de650b..c20ce172a25 100644 --- a/applications/test/sizeof/Test-sizeof.C +++ b/applications/test/sizeof/Test-sizeof.C @@ -33,6 +33,7 @@ Description #include "nil.H" #include "IOstreams.H" #include "PstreamBuffers.H" +#include "argList.H" #include "Time.H" namespace Foam @@ -63,6 +64,13 @@ int main(int argc, char *argv[]) nil x; cout<<"nil:" << sizeof(x) << nl; } + { + argList x(argc, argv); + cout<<"argList:" << sizeof(x) << nl; + + TimePaths y(x); + cout<<"TimePaths:" << sizeof(y) << nl; + } { zero x; cout<<"zero:" << sizeof(x) << nl; diff --git a/applications/utilities/parallelProcessing/redistributePar/redistributePar.C b/applications/utilities/parallelProcessing/redistributePar/redistributePar.C index b7ae617422d..89b3e0296c7 100644 --- a/applications/utilities/parallelProcessing/redistributePar/redistributePar.C +++ b/applications/utilities/parallelProcessing/redistributePar/redistributePar.C @@ -336,8 +336,7 @@ void determineDecomposition { Info<< "Setting caseName to " << baseRunTime.caseName() << " to read decomposeParDict" << endl; - const_cast<Time&>(mesh.time()).TimePaths::caseName() = - baseRunTime.caseName(); + const_cast<Time&>(mesh.time()).caseName() = baseRunTime.caseName(); } scalarField cellWeights; @@ -366,8 +365,7 @@ void determineDecomposition if (Pstream::master() && decompose) { Info<< "Restoring caseName to " << proc0CaseName << endl; - const_cast<Time&>(mesh.time()).TimePaths::caseName() = - proc0CaseName; + const_cast<Time&>(mesh.time()).caseName() = proc0CaseName; } // Dump decomposition to volScalarField @@ -383,10 +381,10 @@ void determineDecomposition Time& tm = const_cast<Time&>(mesh.time()); - tm.TimePaths::caseName() = baseRunTime.caseName(); + tm.caseName() = baseRunTime.caseName(); writeDecomposition("cellDist", mesh, decomp); Info<< "Restoring caseName to " << proc0CaseName << endl; - tm.TimePaths::caseName() = proc0CaseName; + tm.caseName() = proc0CaseName; } } else @@ -908,12 +906,12 @@ autoPtr<mapDistributePolyMesh> redistributeAndWrite // Get original objects (before incrementing time!) if (Pstream::master() && decompose) { - runTime.TimePaths::caseName() = baseRunTime.caseName(); + runTime.caseName() = baseRunTime.caseName(); } IOobjectList objects(mesh, runTime.timeName()); if (Pstream::master() && decompose) { - runTime.TimePaths::caseName() = proc0CaseName; + runTime.caseName() = proc0CaseName; } Info<< "From time " << runTime.timeName() @@ -932,7 +930,7 @@ autoPtr<mapDistributePolyMesh> redistributeAndWrite if (Pstream::master() && decompose) { - runTime.TimePaths::caseName() = baseRunTime.caseName(); + runTime.caseName() = baseRunTime.caseName(); } readFields ( @@ -1112,7 +1110,7 @@ autoPtr<mapDistributePolyMesh> redistributeAndWrite if (Pstream::master() && decompose) { - runTime.TimePaths::caseName() = proc0CaseName; + runTime.caseName() = proc0CaseName; } } @@ -1192,7 +1190,7 @@ autoPtr<mapDistributePolyMesh> redistributeAndWrite { Info<< "Setting caseName to " << baseRunTime.caseName() << " to write reconstructed mesh and fields." << endl; - runTime.TimePaths::caseName() = baseRunTime.caseName(); + runTime.caseName() = baseRunTime.caseName(); mesh.write(); topoSet::removeFiles(mesh); @@ -1212,7 +1210,7 @@ autoPtr<mapDistributePolyMesh> redistributeAndWrite // Now we've written all. Reset caseName on master Info<< "Restoring caseName to " << proc0CaseName << endl; - runTime.TimePaths::caseName() = proc0CaseName; + runTime.caseName() = proc0CaseName; } } else @@ -1258,7 +1256,7 @@ autoPtr<mapDistributePolyMesh> redistributeAndWrite // Read refinement data if (Pstream::master() && decompose) { - runTime.TimePaths::caseName() = baseRunTime.caseName(); + runTime.caseName() = baseRunTime.caseName(); } IOobject io ( @@ -1274,7 +1272,7 @@ autoPtr<mapDistributePolyMesh> redistributeAndWrite hexRef8Data refData(io); if (Pstream::master() && decompose) { - runTime.TimePaths::caseName() = proc0CaseName; + runTime.caseName() = proc0CaseName; } // Make sure all processors have valid data (since only some will @@ -1294,13 +1292,13 @@ autoPtr<mapDistributePolyMesh> redistributeAndWrite { Info<< "Setting caseName to " << baseRunTime.caseName() << " to write reconstructed refinement data." << endl; - runTime.TimePaths::caseName() = baseRunTime.caseName(); + runTime.caseName() = baseRunTime.caseName(); refData.write(); // Now we've written all. Reset caseName on master Info<< "Restoring caseName to " << proc0CaseName << endl; - runTime.TimePaths::caseName() = proc0CaseName; + runTime.caseName() = proc0CaseName; } } else @@ -1314,7 +1312,7 @@ autoPtr<mapDistributePolyMesh> redistributeAndWrite // // Read sets // if (Pstream::master() && decompose) // { - // runTime.TimePaths::caseName() = baseRunTime.caseName(); + // runTime.caseName() = baseRunTime.caseName(); // } // IOobjectList objects(mesh, mesh.facesInstance(), "polyMesh/sets"); // @@ -1323,7 +1321,7 @@ autoPtr<mapDistributePolyMesh> redistributeAndWrite // // if (Pstream::master() && decompose) // { - // runTime.TimePaths::caseName() = proc0CaseName; + // runTime.caseName() = proc0CaseName; // } // // forAll(cellSets, i) @@ -1337,7 +1335,7 @@ autoPtr<mapDistributePolyMesh> redistributeAndWrite // { // Info<< "Setting caseName to " << baseRunTime.caseName() // << " to write reconstructed refinement data." << endl; - // runTime.TimePaths::caseName() = baseRunTime.caseName(); + // runTime.caseName() = baseRunTime.caseName(); // // forAll(cellSets, i) // { @@ -1346,7 +1344,7 @@ autoPtr<mapDistributePolyMesh> redistributeAndWrite // // // Now we've written all. Reset caseName on master // Info<< "Restoring caseName to " << proc0CaseName << endl; - // runTime.TimePaths::caseName() = proc0CaseName; + // runTime.caseName() = proc0CaseName; // } // } // else @@ -2931,7 +2929,7 @@ int main(int argc, char *argv[]) { Info<< "Setting caseName to " << baseRunTime.caseName() << " to find undecomposed mesh" << endl; - runTime.TimePaths::caseName() = baseRunTime.caseName(); + runTime.caseName() = baseRunTime.caseName(); } masterInstDir = runTime.findInstance @@ -2944,7 +2942,7 @@ int main(int argc, char *argv[]) if (decompose) { Info<< "Restoring caseName to " << proc0CaseName << endl; - runTime.TimePaths::caseName() = proc0CaseName; + runTime.caseName() = proc0CaseName; } } Pstream::scatter(masterInstDir); @@ -2970,7 +2968,7 @@ int main(int argc, char *argv[]) { Info<< "Setting caseName to " << baseRunTime.caseName() << " to read undecomposed mesh" << endl; - runTime.TimePaths::caseName() = baseRunTime.caseName(); + runTime.caseName() = baseRunTime.caseName(); } autoPtr<fvMesh> meshPtr = loadOrCreateMesh @@ -2987,7 +2985,7 @@ int main(int argc, char *argv[]) if (Pstream::master() && decompose) { Info<< "Restoring caseName to " << proc0CaseName << endl; - runTime.TimePaths::caseName() = proc0CaseName; + runTime.caseName() = proc0CaseName; } fvMesh& mesh = meshPtr(); @@ -3046,7 +3044,7 @@ int main(int argc, char *argv[]) // Detect lagrangian fields if (Pstream::master() && decompose) { - runTime.TimePaths::caseName() = baseRunTime.caseName(); + runTime.caseName() = baseRunTime.caseName(); } parLagrangianRedistributor::findClouds ( @@ -3069,7 +3067,7 @@ int main(int argc, char *argv[]) ); if (Pstream::master() && decompose) { - runTime.TimePaths::caseName() = proc0CaseName; + runTime.caseName() = proc0CaseName; } diff --git a/src/OpenFOAM/db/Time/TimePaths.C b/src/OpenFOAM/db/Time/TimePaths.C index 894e2fafc53..78378463ab0 100644 --- a/src/OpenFOAM/db/Time/TimePaths.C +++ b/src/OpenFOAM/db/Time/TimePaths.C @@ -70,8 +70,8 @@ Foam::TimePaths::TimePaths ) : processorCase_(args.parRunControl().parRun()), + distributed_(args.parRunControl().distributed()), rootPath_(args.rootPath()), - distributed_(args.distributed()), globalCaseName_(args.globalCaseName()), case_(args.caseName()), system_(systemName), @@ -93,8 +93,8 @@ Foam::TimePaths::TimePaths ) : processorCase_(false), - rootPath_(rootPath), distributed_(false), + rootPath_(rootPath), globalCaseName_(caseName), case_(caseName), system_(systemName), @@ -117,8 +117,8 @@ Foam::TimePaths::TimePaths ) : processorCase_(processorCase), - rootPath_(rootPath), distributed_(distributed), + rootPath_(rootPath), globalCaseName_(globalCaseName), case_(caseName), system_(systemName), diff --git a/src/OpenFOAM/db/Time/TimePaths.H b/src/OpenFOAM/db/Time/TimePaths.H index c5067b9227b..55b6901d243 100644 --- a/src/OpenFOAM/db/Time/TimePaths.H +++ b/src/OpenFOAM/db/Time/TimePaths.H @@ -56,8 +56,9 @@ class TimePaths // Private data bool processorCase_; - const fileName rootPath_; bool distributed_; + + const fileName rootPath_; fileName globalCaseName_; fileName case_; const word system_; diff --git a/src/OpenFOAM/global/argList/argList.C b/src/OpenFOAM/global/argList/argList.C index 92ac5235d41..467002727ee 100644 --- a/src/OpenFOAM/global/argList/argList.C +++ b/src/OpenFOAM/global/argList/argList.C @@ -774,8 +774,7 @@ Foam::argList::argList ) : args_(argc), - options_(argc), - distributed_(false) + options_(argc) { // Check for -fileHandler, which requires an argument. word handlerType(getEnv("FOAM_FILEHANDLER")); @@ -1150,7 +1149,7 @@ void Foam::argList::parse label dictNProcs = -1; if (this->readListIfPresent("roots", roots)) { - distributed_ = true; + parRunControl_.distributed(true); source = "-roots"; if (roots.size() != 1) { @@ -1222,7 +1221,7 @@ void Foam::argList::parse if (decompDict.lookupOrDefault("distributed", false)) { - distributed_ = true; + parRunControl_.distributed(true); decompDict.readEntry("roots", roots); } } @@ -1350,12 +1349,16 @@ void Foam::argList::parse else { // Collect the master's argument list + label nroots; + IPstream fromMaster ( Pstream::commsTypes::scheduled, Pstream::masterNo() ); - fromMaster >> args_ >> options_ >> distributed_; + fromMaster >> args_ >> options_ >> nroots; + + parRunControl_.distributed(nroots); // Establish rootPath_/globalCase_/case_ for slave setCasePaths(); diff --git a/src/OpenFOAM/global/argList/argList.H b/src/OpenFOAM/global/argList/argList.H index d55219e7857..aba5043d51f 100644 --- a/src/OpenFOAM/global/argList/argList.H +++ b/src/OpenFOAM/global/argList/argList.H @@ -129,7 +129,7 @@ class argList static bool checkProcessorDirectories_; //- Switch on/off parallel mode. - // Must be first to be constructed so destructor is done last. + // Construct first so destructor is done last. ParRunControl parRunControl_; //- The arguments after removing known options @@ -140,7 +140,6 @@ class argList word executable_; fileName rootPath_; - bool distributed_; fileName globalCase_; fileName case_; @@ -288,19 +287,12 @@ public: //- Return root path inline const fileName& rootPath() const; - //- Return distributed flag - //- (i.e. are rootPaths different on different machines) - inline bool distributed() const; - //- Return case name (parallel run) or global case (serial run) inline const fileName& caseName() const; //- Return global case name inline const fileName& globalCaseName() const; - //- Return parRunControl - inline const ParRunControl& parRunControl() const; - //- Return the full path to the (processor local) case // \note This is guaranteed to be an absolute path inline fileName path() const; @@ -309,6 +301,13 @@ public: // \note This is guaranteed to be an absolute path inline fileName globalPath() const; + //- Return distributed flag + //- (i.e. are rootPaths different on different machines) + inline bool distributed() const; + + //- Return the ParRunControl + inline const ParRunControl& parRunControl() const; + //- Return the number of arguments inline label size() const; diff --git a/src/OpenFOAM/global/argList/argListI.H b/src/OpenFOAM/global/argList/argListI.H index 2848add5077..81e8a6443c3 100644 --- a/src/OpenFOAM/global/argList/argListI.H +++ b/src/OpenFOAM/global/argList/argListI.H @@ -63,12 +63,6 @@ inline const Foam::fileName& Foam::argList::rootPath() const } -inline bool Foam::argList::distributed() const -{ - return distributed_; -} - - inline const Foam::fileName& Foam::argList::caseName() const { return case_; @@ -81,12 +75,6 @@ inline const Foam::fileName& Foam::argList::globalCaseName() const } -inline const Foam::ParRunControl& Foam::argList::parRunControl() const -{ - return parRunControl_; -} - - inline Foam::fileName Foam::argList::path() const { return rootPath()/caseName(); @@ -99,6 +87,18 @@ inline Foam::fileName Foam::argList::globalPath() const } +inline bool Foam::argList::distributed() const +{ + return parRunControl_.distributed(); +} + + +inline const Foam::ParRunControl& Foam::argList::parRunControl() const +{ + return parRunControl_; +} + + inline Foam::label Foam::argList::size() const { return args_.size(); diff --git a/src/OpenFOAM/global/argList/parRun.H b/src/OpenFOAM/global/argList/parRun.H index 3c21a6ad0c4..d2b4dc5db62 100644 --- a/src/OpenFOAM/global/argList/parRun.H +++ b/src/OpenFOAM/global/argList/parRun.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2018 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -49,18 +49,22 @@ namespace Foam class ParRunControl { - bool RunPar; + bool parallel_; + bool distributed_; public: + //- Construct null ParRunControl() : - RunPar(false) + parallel_(false), + distributed_(false) {} + //- Destructor, triggers Pstream::exit ~ParRunControl() { - if (RunPar) + if (parallel_) { Info<< "Finalising parallel run" << endl; } @@ -69,10 +73,11 @@ public: Pstream::exit(0); } + //- Initialize Pstream for a parallel run - void runPar(int& argc, char**& argv, const bool needsThread) + void runPar(int& argc, char**& argv, bool needsThread) { - RunPar = true; + parallel_ = true; if (!Pstream::init(argc, argv, needsThread)) { @@ -81,11 +86,22 @@ public: } } - - //- Is this a parallel run? + //- True if this is parallel run. bool parRun() const { - return RunPar; + return parallel_; + } + + //- True if this is a parallel run and uses distributed roots. + bool distributed() const + { + return parallel_ && distributed_; + } + + //- Set use of distributed roots. + void distributed(bool on) + { + distributed_ = (parallel_ ? on : false); } }; -- GitLab