From 84907675f84fc0c8d443665a41dc9a86e81c262b Mon Sep 17 00:00:00 2001 From: andy <andy> Date: Tue, 16 Aug 2011 18:05:27 +0100 Subject: [PATCH] ENH: Added window option to fieldAverage function object --- .../field/fieldAverage/controlDict | 2 + .../fieldAverage/fieldAverage/fieldAverage.C | 3 +- .../fieldAverage/fieldAverageTemplates.C | 50 ++++++++++++------- .../fieldAverageItem/fieldAverageItem.C | 7 ++- .../fieldAverageItem/fieldAverageItem.H | 17 ++++++- .../fieldAverageItem/fieldAverageItemIO.C | 16 +++++- 6 files changed, 69 insertions(+), 26 deletions(-) diff --git a/src/postProcessing/functionObjects/field/fieldAverage/controlDict b/src/postProcessing/functionObjects/field/fieldAverage/controlDict index 2c8d3cac79a..7d59d161f4f 100644 --- a/src/postProcessing/functionObjects/field/fieldAverage/controlDict +++ b/src/postProcessing/functionObjects/field/fieldAverage/controlDict @@ -68,6 +68,7 @@ functions mean on; prime2Mean on; base time; + window 0.01; // optional averaging window } p @@ -75,6 +76,7 @@ functions mean on; prime2Mean on; base time; + window 0.01; // optional averaging window } ); } diff --git a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.C b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.C index 46e64afc3ec..be8b03a5b51 100644 --- a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.C +++ b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.C @@ -377,8 +377,7 @@ void Foam::fieldAverage::execute() void Foam::fieldAverage::end() -{ -} +{} void Foam::fieldAverage::write() diff --git a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverageTemplates.C b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverageTemplates.C index e067eb20797..0fdf344531d 100644 --- a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverageTemplates.C +++ b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverageTemplates.C @@ -149,7 +149,7 @@ const { typedef GeometricField<Type, fvPatchField, volMesh> fieldType; - const scalar dt = obr_.time().deltaTValue(); + scalar dt = obr_.time().deltaTValue(); forAll(faItems_, i) { @@ -163,17 +163,24 @@ const obr_.lookupObject<fieldType>(meanFieldList[i]) ); - scalar alpha = 0.0; - scalar beta = 0.0; - if (faItems_[i].timeBase()) + scalar Dt = totalTime_[i]; + if (faItems_[i].iterBase()) { - alpha = (totalTime_[i] - dt)/totalTime_[i]; - beta = dt/totalTime_[i]; + dt = 1.0; + Dt = scalar(totalIter_[i]); } - else + + scalar alpha = (Dt - dt)/Dt; + scalar beta = dt/Dt; + if (faItems_[i].window() > 0) { - alpha = scalar(totalIter_[i] - 1)/scalar(totalIter_[i]); - beta = 1.0/scalar(totalIter_[i]); + const scalar w = faItems_[i].window(); + + if (Dt - dt >= w) + { + alpha = (w - dt)/w; + beta = dt/w; + } } meanField = alpha*meanField + beta*baseField; @@ -192,7 +199,7 @@ void Foam::fieldAverage::calculatePrime2MeanFields typedef GeometricField<Type1, fvPatchField, volMesh> fieldType1; typedef GeometricField<Type2, fvPatchField, volMesh> fieldType2; - const scalar dt = obr_.time().deltaTValue(); + scalar dt = obr_.time().deltaTValue(); forAll(faItems_, i) { @@ -213,17 +220,24 @@ void Foam::fieldAverage::calculatePrime2MeanFields obr_.lookupObject<fieldType2>(prime2MeanFieldList[i]) ); - scalar alpha = 0.0; - scalar beta = 0.0; - if (faItems_[i].timeBase()) + scalar Dt = totalTime_[i]; + if (faItems_[i].iterBase()) { - alpha = (totalTime_[i] - dt)/totalTime_[i]; - beta = dt/totalTime_[i]; + dt = 1.0; + Dt = scalar(totalIter_[i]); } - else + + scalar alpha = (Dt - dt)/Dt; + scalar beta = dt/Dt; + if (faItems_[i].window() > 0) { - alpha = scalar(totalIter_[i] - 1)/scalar(totalIter_[i]); - beta = 1.0/scalar(totalIter_[i]); + const scalar w = faItems_[i].window(); + + if (Dt - dt >= w) + { + alpha = (w - dt)/w; + beta = dt/w; + } } prime2MeanField = diff --git a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItem.C b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItem.C index 3c04fc64d4c..39bbfb4fa98 100644 --- a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItem.C +++ b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItem.C @@ -53,7 +53,8 @@ Foam::fieldAverageItem::fieldAverageItem() fieldName_("unknown"), mean_(0), prime2Mean_(0), - base_(ITER) + base_(ITER), + window_(-1.0) {} @@ -62,7 +63,8 @@ Foam::fieldAverageItem::fieldAverageItem(const fieldAverageItem& faItem) fieldName_(faItem.fieldName_), mean_(faItem.mean_), prime2Mean_(faItem.prime2Mean_), - base_(faItem.base_) + base_(faItem.base_), + window_(faItem.window_) {} @@ -91,6 +93,7 @@ void Foam::fieldAverageItem::operator=(const fieldAverageItem& rhs) mean_ = rhs.mean_; prime2Mean_ = rhs.prime2Mean_; base_ = rhs.base_; + window_ = rhs.window_; } diff --git a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItem.H b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItem.H index f08328b3d76..10d1e08ad3b 100644 --- a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItem.H +++ b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItem.H @@ -33,9 +33,13 @@ Description mean on; prime2Mean on; base time; // iteration + window 200; // optional averaging window } \endverbatim + The averaging window corresponds to the averaging interval (iters or time) + If not specified, the averaging is over 'all iters/time' + SourceFiles fieldAverageItem.C fieldAverageItemIO.C @@ -100,6 +104,9 @@ private: //- Averaging base type baseType base_; + //- Averaging window - defaults to -1 for 'all iters/time' + scalar window_; + public: @@ -148,7 +155,7 @@ public: } //- Return true if base is ITER - Switch ITERBase() const + Switch iterBase() const { return base_ == ITER; } @@ -159,6 +166,11 @@ public: return base_ == TIME; } + scalar window() const + { + return window_; + } + // Member Operators @@ -177,7 +189,8 @@ public: a.fieldName_ == b.fieldName_ && a.mean_ == b.mean_ && a.prime2Mean_ == b.prime2Mean_ - && a.base_ == b.base_; + && a.base_ == b.base_ + && a.window_ == b.window_; } friend bool operator!= diff --git a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItemIO.C b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItemIO.C index 945e4388671..4ebad485a7d 100644 --- a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItemIO.C +++ b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItemIO.C @@ -33,7 +33,9 @@ Foam::fieldAverageItem::fieldAverageItem(Istream& is) : fieldName_("unknown"), mean_(0), - prime2Mean_(0) + prime2Mean_(0), + base_(ITER), + window_(-1.0) { is.check("Foam::fieldAverageItem::fieldAverageItem(Foam::Istream&)"); @@ -43,6 +45,7 @@ Foam::fieldAverageItem::fieldAverageItem(Istream& is) entry.lookup("mean") >> mean_; entry.lookup("prime2Mean") >> prime2Mean_; base_ = baseTypeNames_[entry.lookup("base")]; + window_ = entry.lookupOrDefault<scalar>("window", -1.0); } @@ -62,6 +65,7 @@ Foam::Istream& Foam::operator>>(Istream& is, fieldAverageItem& faItem) entry.lookup("mean") >> faItem.mean_; entry.lookup("prime2Mean") >> faItem.prime2Mean_; faItem.base_ = faItem.baseTypeNames_[entry.lookup("base")]; + faItem.window_ = entry.lookupOrDefault<scalar>("window", -1.0); return is; } @@ -80,7 +84,15 @@ Foam::Ostream& Foam::operator<<(Ostream& os, const fieldAverageItem& faItem) os.writeKeyword("prime2Mean") << faItem.mean_ << token::END_STATEMENT << nl; os.writeKeyword("base") << faItem.baseTypeNames_[faItem.base_] - << token::END_STATEMENT << nl << token::END_BLOCK << nl; + << token::END_STATEMENT << nl; + + if (faItem.window_ > 0) + { + os.writeKeyword("window") << faItem.window_ + << token::END_STATEMENT << nl; + } + + os << token::END_BLOCK << nl; os.check ( -- GitLab