diff --git a/src/postProcessing/functionObjects/field/fieldAverage/controlDict b/src/postProcessing/functionObjects/field/fieldAverage/controlDict index 2c8d3cac79a64c0a0c0693055fef8d09254c4b6f..7d59d161f4f4d300981c9c8b4037526d0a0db6fa 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 46e64afc3ec3cdd5e61c323fb8dac5a5020c6bd5..be8b03a5b5157f9a1e58af3df0afae64fd18095c 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 e067eb20797ae0180362b39bfc0f830c24211951..0fdf344531da8efeaabfbcb1e610c3f31d16db82 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 3c04fc64d4c29c7ff178e89da59ddfc5ca08ed69..39bbfb4fa983c67f9fb288a8667f2dc3bf505983 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 f08328b3d76b2d289e0fcb4c4fe34ab0c82aa8e3..10d1e08ad3b346b3ae395e5d2d1b872ad1f1243d 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 945e43886712d3b67f50d1a4412e903b74b00c79..4ebad485a7d1a0530685f55bd981b0ba51f91576 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 (