View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001653 | OpenFOAM | Bug | public | 2015-04-08 17:21 | 2015-05-05 19:33 |
Reporter | dkxls | Assigned To | henry | ||
Priority | high | Severity | major | Reproducibility | have not tried |
Status | resolved | Resolution | fixed | ||
Platform | GNU/Linux | OS | OpenSuSE | OS Version | 13.2 |
Summary | 0001653: [fieldAverage]: totalTime/totalIter are not reset if resetOnOutput is true | ||||
Description | To my understanding the resetOnOutput is used to obtain short-time averages, i.e. quantities are averaged between two output times. Hence, the totalTime/totalIter should be reset together with the mean/prime2Mean fields after each output. The totalTime/totalIter are currently only set/reset on restart and not at output time. | ||||
Additional Information | This seems to be handled correctly in version 2.1.x and the change happened in the 2.2.x source tree related to this bug: http://www.openfoam.org/mantisbt/view.php?id=854 | ||||
Tags | No tags attached. | ||||
|
Can you provide a patch for this fix? |
|
I uploaded 2 patches, the first one resets the counters when the mean/prime2Mean are written out. This should fix the original problem. I also realised that in certain cases (i.e. a restarted run with resetOnOutput) the old field might be falsely read on initialization. The second patch provides a fix for that, though the code gets more and more cluttered. The code compiles, but I haven't had time to test it (and I unfortunately won't have time to do that this week). |
|
0001-fieldAverage.C-Reset-totalIter_-totalTime_-if-resetO.patch (1,670 bytes)
From 7c864a35e999176d406e9426239b979b8a642d9c Mon Sep 17 00:00:00 2001 From: Armin Wehrfritz <armin.wehrfritz@aalto.fi> Date: Thu, 9 Apr 2015 15:37:20 +0300 Subject: [PATCH 1/2] fieldAverage.C - Reset totalIter_ & totalTime_ if resetOnOutput_ --- .../field/fieldAverage/fieldAverage/fieldAverage.C | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.C b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.C index 251b9d3..83c259e 100644 --- a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.C +++ b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.C @@ -195,7 +195,7 @@ void Foam::fieldAverage::readAveragingProperties() totalTime_.clear(); totalTime_.setSize(faItems_.size(), obr_.time().deltaTValue()); - if (resetOnRestart_) + if (resetOnRestart_ || resetOnOutput_) { Info<< " Starting averaging at time " << obr_.time().timeName() << nl; @@ -348,10 +348,13 @@ void Foam::fieldAverage::write() Info<< " Restarting averaging at time " << obr_.time().timeName() << nl << endl; - initialize(); + totalIter_.clear(); + totalIter_.setSize(faItems_.size(), 1); + + totalTime_.clear(); + totalTime_.setSize(faItems_.size(), obr_.time().deltaTValue()); - // ensure first averaging works unconditionally - prevTimeIndex_ = -1; + initialize(); } Info<< endl; -- 2.1.4 |
|
0002-fieldAverageTemplates.C-NO_READ-for-mean-prime2Mean-.patch (4,255 bytes)
From 9986ef70da49f0ca23ceaf763321e1a53030fc28 Mon Sep 17 00:00:00 2001 From: Armin Wehrfritz <armin.wehrfritz@aalto.fi> Date: Thu, 9 Apr 2015 15:40:50 +0300 Subject: [PATCH 2/2] fieldAverageTemplates.C - NO_READ for mean & prime2Mean if resetOnOutput_ --- .../fieldAverage/fieldAverageTemplates.C | 99 ++++++++++++++++------ 1 file changed, 72 insertions(+), 27 deletions(-) diff --git a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverageTemplates.C b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverageTemplates.C index 00b4c9e..788f3fb 100644 --- a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverageTemplates.C +++ b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverageTemplates.C @@ -56,22 +56,44 @@ void Foam::fieldAverage::addMeanFieldType(const label fieldI) { const Type& baseField = obr_.lookupObject<Type>(fieldName); - // Store on registry - obr_.store - ( - new Type + if (resetOnOutput_) + { + // Store on registry + obr_.store ( - IOobject + new Type ( - meanFieldName, - obr_.time().timeName(obr_.time().startTime().value()), - obr_, - IOobject::READ_IF_PRESENT, - IOobject::NO_WRITE - ), - 1*baseField - ) - ); + IOobject + ( + meanFieldName, + obr_.time().timeName(), + obr_, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + 1*baseField + ) + ); + } + else + { + // Store on registry + obr_.store + ( + new Type + ( + IOobject + ( + meanFieldName, + obr_.time().timeName(obr_.time().startTime().value()), + obr_, + IOobject::READ_IF_PRESENT, + IOobject::NO_WRITE + ), + 1*baseField + ) + ); + } } } @@ -124,21 +146,44 @@ void Foam::fieldAverage::addPrime2MeanFieldType(const label fieldI) const Type1& baseField = obr_.lookupObject<Type1>(fieldName); const Type1& meanField = obr_.lookupObject<Type1>(meanFieldName); - obr_.store - ( - new Type2 + if (resetOnOutput_) + { + // Store on registry + obr_.store ( - IOobject + new Type2 ( - prime2MeanFieldName, - obr_.time().timeName(obr_.time().startTime().value()), - obr_, - IOobject::READ_IF_PRESENT, - IOobject::NO_WRITE - ), - sqr(baseField) - sqr(meanField) - ) - ); + IOobject + ( + prime2MeanFieldName, + obr_.time().timeName(), + obr_, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + sqr(baseField) - sqr(meanField) + ) + ); + } + else + { + // Store on registry + obr_.store + ( + new Type2 + ( + IOobject + ( + prime2MeanFieldName, + obr_.time().timeName(obr_.time().startTime().value()), + obr_, + IOobject::READ_IF_PRESENT, + IOobject::NO_WRITE + ), + sqr(baseField) - sqr(meanField) + ) + ); + } } } -- 2.1.4 |
|
Thanks for the patches. I propose to apply them to OpenFOAM-dev for testing and if all is well they could also be made to OpenFOAM-2.3.x |
|
The first patch is fine but the second can be simplified using the ?: ternary operator to avoid code duplication without: commit 4df8179f3290238ed6f09ff7aaea7970ac1c367d Please let me know if there are any issues with these changes. |
|
Indeed much more elegant with the ternary operator! I will report back in case there are any issues. |
|
I have tested the changes above for several cases and everything appears to work correctly. I suggest to add the corrections also to OpenFOAM-2.3.x. |
|
Resolved by commit e0b2369cc0aa99ffc7ca025fdb6a303a77bf5e83 |
Date Modified | Username | Field | Change |
---|---|---|---|
2015-04-08 17:21 | dkxls | New Issue | |
2015-04-08 17:38 | henry | Note Added: 0004579 | |
2015-04-09 14:21 | dkxls | Note Added: 0004589 | |
2015-04-09 14:22 | dkxls | File Added: 0001-fieldAverage.C-Reset-totalIter_-totalTime_-if-resetO.patch | |
2015-04-09 14:22 | dkxls | File Added: 0002-fieldAverageTemplates.C-NO_READ-for-mean-prime2Mean-.patch | |
2015-04-09 14:56 | henry | Note Added: 0004591 | |
2015-04-09 16:09 | henry | Note Added: 0004594 | |
2015-04-09 17:15 | dkxls | Note Added: 0004595 | |
2015-05-05 17:36 | dkxls | Note Added: 0004712 | |
2015-05-05 19:33 | henry | Note Added: 0004719 | |
2015-05-05 19:33 | henry | Status | new => resolved |
2015-05-05 19:33 | henry | Resolution | open => fixed |
2015-05-05 19:33 | henry | Assigned To | => henry |