From b4182c60a3c4753ccc78d47e0f3ea95cb4047591 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Thu, 8 Dec 2016 09:32:55 +0000 Subject: [PATCH] BUG: inconsistency in periodic restart for fieldAverage (issue #330) - the interval for the next restart was not being adjusted when the file was reread, or when doing a complete simulation restart. --- .../field/fieldAverage/fieldAverage.C | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/functionObjects/field/fieldAverage/fieldAverage.C b/src/functionObjects/field/fieldAverage/fieldAverage.C index 46c30fbc97..dbdf33b446 100644 --- a/src/functionObjects/field/fieldAverage/fieldAverage.C +++ b/src/functionObjects/field/fieldAverage/fieldAverage.C @@ -302,17 +302,39 @@ bool Foam::functionObjects::fieldAverage::read(const dictionary& dict) dict.readIfPresent("periodicRestart", periodicRestart_); dict.lookup("fields") >> faItems_; + const scalar currentTime = obr().time().value(); + if (periodicRestart_) { dict.lookup("restartPeriod") >> restartPeriod_; - Info<< " Restart period " << restartPeriod_ - << nl << endl; + + if (restartPeriod_ > 0) + { + // Determine the appropriate interval for the next restart + periodIndex_ = 1; + while (currentTime > restartPeriod_*periodIndex_) + { + ++periodIndex_; + } + + Info<< " Restart period " << restartPeriod_ + << " - next restart at " << (restartPeriod_*periodIndex_) + << nl << endl; + } + else + { + periodicRestart_ = false; + + Info<< " Restart period " << restartPeriod_ + << " - ignored" + << nl << endl; + } } restartTime_ = GREAT; if (dict.readIfPresent("restartTime", restartTime_)) { - if (restartTime_ < obr_.time().value()) + if (currentTime > restartTime_) { // The restart time is already in the past - ignore restartTime_ = GREAT;