mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: timeActivatedFileUpdate: avoid copying on master; simplified logic; Fixes #420.
This commit is contained in:
@ -468,6 +468,7 @@ Foam::Time::Time
|
||||
(
|
||||
args.parRunControl().parRun(),
|
||||
args.rootPath(),
|
||||
args.distributed(),
|
||||
args.globalCaseName(),
|
||||
args.caseName(),
|
||||
systemName,
|
||||
|
||||
@ -70,6 +70,7 @@ Foam::TimePaths::TimePaths
|
||||
:
|
||||
processorCase_(false),
|
||||
rootPath_(rootPath),
|
||||
distributed_(false),
|
||||
globalCaseName_(caseName),
|
||||
case_(caseName),
|
||||
system_(systemName),
|
||||
@ -84,6 +85,7 @@ Foam::TimePaths::TimePaths
|
||||
(
|
||||
const bool processorCase,
|
||||
const fileName& rootPath,
|
||||
const bool distributed,
|
||||
const fileName& globalCaseName,
|
||||
const fileName& caseName,
|
||||
const word& systemName,
|
||||
@ -92,6 +94,7 @@ Foam::TimePaths::TimePaths
|
||||
:
|
||||
processorCase_(processorCase),
|
||||
rootPath_(rootPath),
|
||||
distributed_(distributed),
|
||||
globalCaseName_(globalCaseName),
|
||||
case_(caseName),
|
||||
system_(systemName),
|
||||
|
||||
@ -53,6 +53,7 @@ class TimePaths
|
||||
|
||||
bool processorCase_;
|
||||
const fileName rootPath_;
|
||||
bool distributed_;
|
||||
fileName globalCaseName_;
|
||||
fileName case_;
|
||||
const word system_;
|
||||
@ -84,6 +85,7 @@ public:
|
||||
(
|
||||
const bool processorCase,
|
||||
const fileName& rootPath,
|
||||
const bool distributed,
|
||||
const fileName& globalCaseName,
|
||||
const fileName& caseName,
|
||||
const word& systemName,
|
||||
@ -139,6 +141,13 @@ public:
|
||||
return constant_;
|
||||
}
|
||||
|
||||
//- Is case running with parallel distributed directories
|
||||
// (i.e. not NFS mounted)
|
||||
bool distributed() const
|
||||
{
|
||||
return distributed_;
|
||||
}
|
||||
|
||||
//- Return constant name for the case
|
||||
// which for parallel runs returns ../constant()
|
||||
fileName caseConstant() const;
|
||||
|
||||
@ -429,7 +429,8 @@ Foam::argList::argList
|
||||
)
|
||||
:
|
||||
args_(argc),
|
||||
options_(argc)
|
||||
options_(argc),
|
||||
distributed_(false)
|
||||
{
|
||||
// Check if this run is a parallel run by searching for any parallel option
|
||||
// If found call runPar which might filter argv
|
||||
@ -669,6 +670,7 @@ void Foam::argList::parse
|
||||
label dictNProcs = -1;
|
||||
if (options_.found("roots"))
|
||||
{
|
||||
distributed_ = true;
|
||||
source = "-roots";
|
||||
IStringStream is(options_["roots"]);
|
||||
roots = readList<fileName>(is);
|
||||
@ -700,7 +702,7 @@ void Foam::argList::parse
|
||||
decompDict.lookup("numberOfSubdomains")
|
||||
);
|
||||
|
||||
if (decompDict.lookupOrDefault("distributed", false))
|
||||
if (decompDict.lookupOrDefault("distributed", distributed_))
|
||||
{
|
||||
decompDict.lookup("roots") >> roots;
|
||||
}
|
||||
@ -771,7 +773,7 @@ void Foam::argList::parse
|
||||
options_.set("case", roots[slave-1]/globalCase_);
|
||||
|
||||
OPstream toSlave(Pstream::scheduled, slave);
|
||||
toSlave << args_ << options_;
|
||||
toSlave << args_ << options_ << roots.size();
|
||||
}
|
||||
options_.erase("case");
|
||||
|
||||
@ -818,7 +820,7 @@ void Foam::argList::parse
|
||||
)
|
||||
{
|
||||
OPstream toSlave(Pstream::scheduled, slave);
|
||||
toSlave << args_ << options_;
|
||||
toSlave << args_ << options_ << roots.size();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -826,7 +828,7 @@ void Foam::argList::parse
|
||||
{
|
||||
// Collect the master's argument list
|
||||
IPstream fromMaster(Pstream::scheduled, Pstream::masterNo());
|
||||
fromMaster >> args_ >> options_;
|
||||
fromMaster >> args_ >> options_ >> distributed_;
|
||||
|
||||
// Establish rootPath_/globalCase_/case_ for slave
|
||||
getRootCase();
|
||||
|
||||
@ -109,6 +109,7 @@ class argList
|
||||
|
||||
word executable_;
|
||||
fileName rootPath_;
|
||||
bool distributed_;
|
||||
fileName globalCase_;
|
||||
fileName case_;
|
||||
string argListStr_;
|
||||
@ -221,6 +222,10 @@ 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;
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
\\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
@ -39,6 +39,12 @@ 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_;
|
||||
|
||||
@ -67,11 +67,14 @@ void Foam::functionObjects::timeActivatedFileUpdate::updateFile()
|
||||
Log << nl << type() << ": copying file" << nl << timeVsFile_[i].second()
|
||||
<< nl << "to:" << nl << fileToUpdate_ << nl << endl;
|
||||
|
||||
if (Pstream::master() || time_.distributed())
|
||||
{
|
||||
// Slaves do not copy if running non-distributed
|
||||
fileName destFile(fileToUpdate_ + Foam::name(pid()));
|
||||
cp(timeVsFile_[i].second(), destFile);
|
||||
mv(destFile, fileToUpdate_);
|
||||
}
|
||||
lastIndex_ = i;
|
||||
|
||||
modified_ = true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user