Time: Added running method to check running state without side effects

chtMultiRegionSimpleFoam needs to check whether or not the simulation is
at the end. To facilitate this, a Time::running method has been added.
The Time::run method was being used for this purpose, but this lead to
function objects being executed multiple times.

This resolves bug report https://bugs.openfoam.org/view.php?id=2804
This commit is contained in:
Will Bainbridge
2018-01-05 15:24:14 +00:00
parent 8b44230384
commit 9a35ce69a3
3 changed files with 18 additions and 12 deletions

View File

@ -53,12 +53,12 @@ if (resControlUsed)
}
}
if (!runTime.run())
if (!runTime.running())
{
Info<< "\nRegions not converged after " << runTime.timeName()
<< " iterations" << endl;
}
else if (runTime.run() && resControlUsed && allRegionsConverged)
else if (runTime.running() && resControlUsed && allRegionsConverged)
{
Info<< "\nRegions converged after " << runTime.timeName()
<< " iterations" << endl;

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -778,9 +778,15 @@ Foam::dimensionedScalar Foam::Time::endTime() const
}
bool Foam::Time::running() const
{
return value() < (endTime_ - 0.5*deltaT_);
}
bool Foam::Time::run() const
{
bool running = value() < (endTime_ - 0.5*deltaT_);
const bool running = this->running();
if (!subCycling_)
{
@ -806,21 +812,18 @@ bool Foam::Time::run() const
functionObjects_.execute();
}
}
// Update the "running" status following the
// possible side-effects from functionObjects
running = value() < (endTime_ - 0.5*deltaT_);
}
return running;
// Re-evaluate if running in case a function object has changed things
return this->running();
}
bool Foam::Time::loop()
{
bool running = run();
const bool running = this->running();
if (running)
if (run())
{
operator++();
}

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -443,6 +443,9 @@ public:
// Check
//- Return true if run should continue without any side effects
virtual bool running() const;
//- Return true if run should continue,
// also invokes the functionObjectList::end() method
// when the time goes out of range