mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: Added window option to fieldAverage function object
This commit is contained in:
@ -68,6 +68,7 @@ functions
|
|||||||
mean on;
|
mean on;
|
||||||
prime2Mean on;
|
prime2Mean on;
|
||||||
base time;
|
base time;
|
||||||
|
window 0.01; // optional averaging window
|
||||||
}
|
}
|
||||||
|
|
||||||
p
|
p
|
||||||
@ -75,6 +76,7 @@ functions
|
|||||||
mean on;
|
mean on;
|
||||||
prime2Mean on;
|
prime2Mean on;
|
||||||
base time;
|
base time;
|
||||||
|
window 0.01; // optional averaging window
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -377,8 +377,7 @@ void Foam::fieldAverage::execute()
|
|||||||
|
|
||||||
|
|
||||||
void Foam::fieldAverage::end()
|
void Foam::fieldAverage::end()
|
||||||
{
|
{}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldAverage::write()
|
void Foam::fieldAverage::write()
|
||||||
|
|||||||
@ -149,7 +149,7 @@ const
|
|||||||
{
|
{
|
||||||
typedef GeometricField<Type, fvPatchField, volMesh> fieldType;
|
typedef GeometricField<Type, fvPatchField, volMesh> fieldType;
|
||||||
|
|
||||||
const scalar dt = obr_.time().deltaTValue();
|
scalar dt = obr_.time().deltaTValue();
|
||||||
|
|
||||||
forAll(faItems_, i)
|
forAll(faItems_, i)
|
||||||
{
|
{
|
||||||
@ -163,17 +163,24 @@ const
|
|||||||
obr_.lookupObject<fieldType>(meanFieldList[i])
|
obr_.lookupObject<fieldType>(meanFieldList[i])
|
||||||
);
|
);
|
||||||
|
|
||||||
scalar alpha = 0.0;
|
scalar Dt = totalTime_[i];
|
||||||
scalar beta = 0.0;
|
if (faItems_[i].iterBase())
|
||||||
if (faItems_[i].timeBase())
|
|
||||||
{
|
{
|
||||||
alpha = (totalTime_[i] - dt)/totalTime_[i];
|
dt = 1.0;
|
||||||
beta = dt/totalTime_[i];
|
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]);
|
const scalar w = faItems_[i].window();
|
||||||
beta = 1.0/scalar(totalIter_[i]);
|
|
||||||
|
if (Dt - dt >= w)
|
||||||
|
{
|
||||||
|
alpha = (w - dt)/w;
|
||||||
|
beta = dt/w;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
meanField = alpha*meanField + beta*baseField;
|
meanField = alpha*meanField + beta*baseField;
|
||||||
@ -192,7 +199,7 @@ void Foam::fieldAverage::calculatePrime2MeanFields
|
|||||||
typedef GeometricField<Type1, fvPatchField, volMesh> fieldType1;
|
typedef GeometricField<Type1, fvPatchField, volMesh> fieldType1;
|
||||||
typedef GeometricField<Type2, fvPatchField, volMesh> fieldType2;
|
typedef GeometricField<Type2, fvPatchField, volMesh> fieldType2;
|
||||||
|
|
||||||
const scalar dt = obr_.time().deltaTValue();
|
scalar dt = obr_.time().deltaTValue();
|
||||||
|
|
||||||
forAll(faItems_, i)
|
forAll(faItems_, i)
|
||||||
{
|
{
|
||||||
@ -213,17 +220,24 @@ void Foam::fieldAverage::calculatePrime2MeanFields
|
|||||||
obr_.lookupObject<fieldType2>(prime2MeanFieldList[i])
|
obr_.lookupObject<fieldType2>(prime2MeanFieldList[i])
|
||||||
);
|
);
|
||||||
|
|
||||||
scalar alpha = 0.0;
|
scalar Dt = totalTime_[i];
|
||||||
scalar beta = 0.0;
|
if (faItems_[i].iterBase())
|
||||||
if (faItems_[i].timeBase())
|
|
||||||
{
|
{
|
||||||
alpha = (totalTime_[i] - dt)/totalTime_[i];
|
dt = 1.0;
|
||||||
beta = dt/totalTime_[i];
|
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]);
|
const scalar w = faItems_[i].window();
|
||||||
beta = 1.0/scalar(totalIter_[i]);
|
|
||||||
|
if (Dt - dt >= w)
|
||||||
|
{
|
||||||
|
alpha = (w - dt)/w;
|
||||||
|
beta = dt/w;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
prime2MeanField =
|
prime2MeanField =
|
||||||
|
|||||||
@ -53,7 +53,8 @@ Foam::fieldAverageItem::fieldAverageItem()
|
|||||||
fieldName_("unknown"),
|
fieldName_("unknown"),
|
||||||
mean_(0),
|
mean_(0),
|
||||||
prime2Mean_(0),
|
prime2Mean_(0),
|
||||||
base_(ITER)
|
base_(ITER),
|
||||||
|
window_(-1.0)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -62,7 +63,8 @@ Foam::fieldAverageItem::fieldAverageItem(const fieldAverageItem& faItem)
|
|||||||
fieldName_(faItem.fieldName_),
|
fieldName_(faItem.fieldName_),
|
||||||
mean_(faItem.mean_),
|
mean_(faItem.mean_),
|
||||||
prime2Mean_(faItem.prime2Mean_),
|
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_;
|
mean_ = rhs.mean_;
|
||||||
prime2Mean_ = rhs.prime2Mean_;
|
prime2Mean_ = rhs.prime2Mean_;
|
||||||
base_ = rhs.base_;
|
base_ = rhs.base_;
|
||||||
|
window_ = rhs.window_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -33,9 +33,13 @@ Description
|
|||||||
mean on;
|
mean on;
|
||||||
prime2Mean on;
|
prime2Mean on;
|
||||||
base time; // iteration
|
base time; // iteration
|
||||||
|
window 200; // optional averaging window
|
||||||
}
|
}
|
||||||
\endverbatim
|
\endverbatim
|
||||||
|
|
||||||
|
The averaging window corresponds to the averaging interval (iters or time)
|
||||||
|
If not specified, the averaging is over 'all iters/time'
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
fieldAverageItem.C
|
fieldAverageItem.C
|
||||||
fieldAverageItemIO.C
|
fieldAverageItemIO.C
|
||||||
@ -100,6 +104,9 @@ private:
|
|||||||
//- Averaging base type
|
//- Averaging base type
|
||||||
baseType base_;
|
baseType base_;
|
||||||
|
|
||||||
|
//- Averaging window - defaults to -1 for 'all iters/time'
|
||||||
|
scalar window_;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -148,7 +155,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
//- Return true if base is ITER
|
//- Return true if base is ITER
|
||||||
Switch ITERBase() const
|
Switch iterBase() const
|
||||||
{
|
{
|
||||||
return base_ == ITER;
|
return base_ == ITER;
|
||||||
}
|
}
|
||||||
@ -159,6 +166,11 @@ public:
|
|||||||
return base_ == TIME;
|
return base_ == TIME;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
scalar window() const
|
||||||
|
{
|
||||||
|
return window_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Member Operators
|
// Member Operators
|
||||||
|
|
||||||
@ -177,7 +189,8 @@ public:
|
|||||||
a.fieldName_ == b.fieldName_
|
a.fieldName_ == b.fieldName_
|
||||||
&& a.mean_ == b.mean_
|
&& a.mean_ == b.mean_
|
||||||
&& a.prime2Mean_ == b.prime2Mean_
|
&& a.prime2Mean_ == b.prime2Mean_
|
||||||
&& a.base_ == b.base_;
|
&& a.base_ == b.base_
|
||||||
|
&& a.window_ == b.window_;
|
||||||
}
|
}
|
||||||
|
|
||||||
friend bool operator!=
|
friend bool operator!=
|
||||||
|
|||||||
@ -33,7 +33,9 @@ Foam::fieldAverageItem::fieldAverageItem(Istream& is)
|
|||||||
:
|
:
|
||||||
fieldName_("unknown"),
|
fieldName_("unknown"),
|
||||||
mean_(0),
|
mean_(0),
|
||||||
prime2Mean_(0)
|
prime2Mean_(0),
|
||||||
|
base_(ITER),
|
||||||
|
window_(-1.0)
|
||||||
{
|
{
|
||||||
is.check("Foam::fieldAverageItem::fieldAverageItem(Foam::Istream&)");
|
is.check("Foam::fieldAverageItem::fieldAverageItem(Foam::Istream&)");
|
||||||
|
|
||||||
@ -43,6 +45,7 @@ Foam::fieldAverageItem::fieldAverageItem(Istream& is)
|
|||||||
entry.lookup("mean") >> mean_;
|
entry.lookup("mean") >> mean_;
|
||||||
entry.lookup("prime2Mean") >> prime2Mean_;
|
entry.lookup("prime2Mean") >> prime2Mean_;
|
||||||
base_ = baseTypeNames_[entry.lookup("base")];
|
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("mean") >> faItem.mean_;
|
||||||
entry.lookup("prime2Mean") >> faItem.prime2Mean_;
|
entry.lookup("prime2Mean") >> faItem.prime2Mean_;
|
||||||
faItem.base_ = faItem.baseTypeNames_[entry.lookup("base")];
|
faItem.base_ = faItem.baseTypeNames_[entry.lookup("base")];
|
||||||
|
faItem.window_ = entry.lookupOrDefault<scalar>("window", -1.0);
|
||||||
|
|
||||||
return is;
|
return is;
|
||||||
}
|
}
|
||||||
@ -80,7 +84,15 @@ Foam::Ostream& Foam::operator<<(Ostream& os, const fieldAverageItem& faItem)
|
|||||||
os.writeKeyword("prime2Mean") << faItem.mean_
|
os.writeKeyword("prime2Mean") << faItem.mean_
|
||||||
<< token::END_STATEMENT << nl;
|
<< token::END_STATEMENT << nl;
|
||||||
os.writeKeyword("base") << faItem.baseTypeNames_[faItem.base_]
|
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
|
os.check
|
||||||
(
|
(
|
||||||
|
|||||||
Reference in New Issue
Block a user