From c554dc7b7d29c6c3979b8e09227ca7bc75f9aefc Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@Germany> Date: Mon, 21 Nov 2016 12:36:04 +0100 Subject: [PATCH] ENH: ensure written and evaluated values correspond (issue #311) - Avoids possible discrepancy when the user selects non-coincidental values for executeInterval and writeInterval. - zeroGradient and ddt2 function objects --- src/functionObjects/field/ddt2/ddt2.C | 9 +++++++++ src/functionObjects/field/ddt2/ddt2.H | 3 +++ src/functionObjects/field/zeroGradient/zeroGradient.C | 9 +++++++++ src/functionObjects/field/zeroGradient/zeroGradient.H | 3 +++ 4 files changed, 24 insertions(+) diff --git a/src/functionObjects/field/ddt2/ddt2.C b/src/functionObjects/field/ddt2/ddt2.C index a3876716585..7aeecd01e90 100644 --- a/src/functionObjects/field/ddt2/ddt2.C +++ b/src/functionObjects/field/ddt2/ddt2.C @@ -112,6 +112,7 @@ Foam::functionObjects::ddt2::ddt2 ) : fvMeshFunctionObject(name, runTime, dict), + prevTimeIndex_(-1), selectFields_(), resultName_(word::null), blacklist_(), @@ -217,12 +218,20 @@ bool Foam::functionObjects::ddt2::execute() << "Unprocessed field " << ignored << endl; } + // Update time index + prevTimeIndex_ = obr_.time().timeIndex(); + return true; } bool Foam::functionObjects::ddt2::write() { + if (prevTimeIndex_ < obr_.time().timeIndex()) + { + // Ensure written results reflect the current state + execute(); + } if (results_.size()) { Log << type() << ' ' << name() << " write:" << endl; diff --git a/src/functionObjects/field/ddt2/ddt2.H b/src/functionObjects/field/ddt2/ddt2.H index 21607ce2a34..bba1492e3e4 100644 --- a/src/functionObjects/field/ddt2/ddt2.H +++ b/src/functionObjects/field/ddt2/ddt2.H @@ -101,6 +101,9 @@ class ddt2 { // Private data + //- Time at last execute, ensures write uses up-to-date values + label prevTimeIndex_; + //- Name of fields to process wordReList selectFields_; diff --git a/src/functionObjects/field/zeroGradient/zeroGradient.C b/src/functionObjects/field/zeroGradient/zeroGradient.C index ff07607652b..53d41c23f89 100644 --- a/src/functionObjects/field/zeroGradient/zeroGradient.C +++ b/src/functionObjects/field/zeroGradient/zeroGradient.C @@ -100,6 +100,7 @@ Foam::functionObjects::zeroGradient::zeroGradient ) : fvMeshFunctionObject(name, runTime, dict), + prevTimeIndex_(-1), selectFields_(), resultName_(string::null), results_() @@ -174,12 +175,20 @@ bool Foam::functionObjects::zeroGradient::execute() << "Unprocessed field " << ignored << endl; } + // Update time index + prevTimeIndex_ = obr_.time().timeIndex(); + return true; } bool Foam::functionObjects::zeroGradient::write() { + if (prevTimeIndex_ < obr_.time().timeIndex()) + { + // Ensure written results reflect the current state + execute(); + } if (results_.size()) { Log << type() << ' ' << name() << " write:" << endl; diff --git a/src/functionObjects/field/zeroGradient/zeroGradient.H b/src/functionObjects/field/zeroGradient/zeroGradient.H index 84243608243..e4eb1c75b3d 100644 --- a/src/functionObjects/field/zeroGradient/zeroGradient.H +++ b/src/functionObjects/field/zeroGradient/zeroGradient.H @@ -95,6 +95,9 @@ class zeroGradient { // Private data + //- Time at last execute, ensures write uses up-to-date values + label prevTimeIndex_; + //- Name of fields to process wordReList selectFields_; -- GitLab