functionObjects::fieldAverage: Corrected handling of internal fields

Resolves bug-report https://bugs.openfoam.org/view.php?id=3776
This commit is contained in:
Henry Weller
2022-01-07 21:16:21 +00:00
parent a05910e22e
commit 1ae5288274

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -243,13 +243,24 @@ void Foam::functionObjects::fieldAverage::calculateMeanFields() const
typedef typename VolFieldType::Internal InternalType;
typedef GeometricField<Type, fvsPatchField, surfaceMesh> SurfaceFieldType;
forAll(faItems_, i)
forAll(faItems_, fieldi)
{
if (faItems_[i].mean())
if (faItems_[fieldi].mean())
{
calculateMeanFieldType<VolFieldType>(i);
calculateMeanFieldType<InternalType>(i);
calculateMeanFieldType<SurfaceFieldType>(i);
const word& fieldName = faItems_[fieldi].fieldName();
if (obr_.foundObject<VolFieldType>(fieldName))
{
calculateMeanFieldType<VolFieldType>(fieldi);
}
else if (obr_.foundObject<InternalType>(fieldName))
{
calculateMeanFieldType<InternalType>(fieldi);
}
else if (obr_.foundObject<SurfaceFieldType>(fieldName))
{
calculateMeanFieldType<SurfaceFieldType>(fieldi);
}
}
}
}
@ -263,8 +274,6 @@ void Foam::functionObjects::fieldAverage::calculatePrime2MeanFieldType
{
const word& fieldName = faItems_[fieldi].fieldName();
if (obr_.foundObject<Type1>(fieldName))
{
const Type1& baseField = obr_.lookupObject<Type1>(fieldName);
const Type1& meanField =
obr_.lookupObject<Type1>(faItems_[fieldi].meanFieldName());
@ -298,7 +307,6 @@ void Foam::functionObjects::fieldAverage::calculatePrime2MeanFieldType
+ beta*sqr(baseField)
- sqr(meanField);
}
}
template<class Type1, class Type2>
@ -312,17 +320,35 @@ void Foam::functionObjects::fieldAverage::calculatePrime2MeanFields() const
typedef typename VolFieldType2::Internal InternalType2;
typedef GeometricField<Type2, fvsPatchField, surfaceMesh> SurfaceFieldType2;
forAll(faItems_, i)
forAll(faItems_, fieldi)
{
if (faItems_[i].prime2Mean())
if (faItems_[fieldi].prime2Mean())
{
calculatePrime2MeanFieldType<VolFieldType1, VolFieldType2>(i);
calculatePrime2MeanFieldType<InternalType1, InternalType2>(i);
calculatePrime2MeanFieldType<SurfaceFieldType1, SurfaceFieldType2>
const word& fieldName = faItems_[fieldi].fieldName();
if (obr_.foundObject<VolFieldType1>(fieldName))
{
calculatePrime2MeanFieldType<VolFieldType1, VolFieldType2>
(
i
fieldi
);
}
else if (obr_.foundObject<InternalType1>(fieldName))
{
calculatePrime2MeanFieldType<InternalType1, InternalType2>
(
fieldi
);
}
else if (obr_.foundObject<SurfaceFieldType1>(fieldName))
{
calculatePrime2MeanFieldType
<
SurfaceFieldType1,
SurfaceFieldType2
>(fieldi);
}
}
}
}
@ -332,10 +358,6 @@ void Foam::functionObjects::fieldAverage::addMeanSqrToPrime2MeanType
(
const label fieldi
) const
{
const word& fieldName = faItems_[fieldi].fieldName();
if (obr_.foundObject<Type1>(fieldName))
{
const Type1& meanField =
obr_.lookupObject<Type1>(faItems_[fieldi].meanFieldName());
@ -345,7 +367,6 @@ void Foam::functionObjects::fieldAverage::addMeanSqrToPrime2MeanType
prime2MeanField += sqr(meanField);
}
}
template<class Type1, class Type2>
@ -359,13 +380,33 @@ void Foam::functionObjects::fieldAverage::addMeanSqrToPrime2Mean() const
typedef typename VolFieldType2::Internal InternalType2;
typedef GeometricField<Type2, fvsPatchField, surfaceMesh> SurfaceFieldType2;
forAll(faItems_, i)
forAll(faItems_, fieldi)
{
if (faItems_[i].prime2Mean())
if (faItems_[fieldi].prime2Mean())
{
addMeanSqrToPrime2MeanType<VolFieldType1, VolFieldType2>(i);
addMeanSqrToPrime2MeanType<InternalType1, InternalType2>(i);
addMeanSqrToPrime2MeanType<SurfaceFieldType1, SurfaceFieldType2>(i);
const word& fieldName = faItems_[fieldi].fieldName();
if (obr_.foundObject<VolFieldType1>(fieldName))
{
addMeanSqrToPrime2MeanType<VolFieldType1, VolFieldType2>
(
fieldi
);
}
else if (obr_.foundObject<InternalType1>(fieldName))
{
addMeanSqrToPrime2MeanType<InternalType1, InternalType2>
(
fieldi
);
}
else if (obr_.foundObject<SurfaceFieldType1>(fieldName))
{
addMeanSqrToPrime2MeanType<SurfaceFieldType1, SurfaceFieldType2>
(
fieldi
);
}
}
}
}
@ -392,18 +433,18 @@ void Foam::functionObjects::fieldAverage::writeFields() const
typedef typename VolFieldType::Internal InternalType;
typedef GeometricField<Type, fvsPatchField, surfaceMesh> SurfaceFieldType;
forAll(faItems_, i)
forAll(faItems_, fieldi)
{
if (faItems_[i].mean())
if (faItems_[fieldi].mean())
{
const word& fieldName = faItems_[i].meanFieldName();
const word& fieldName = faItems_[fieldi].meanFieldName();
writeFieldType<VolFieldType>(fieldName);
writeFieldType<InternalType>(fieldName);
writeFieldType<SurfaceFieldType>(fieldName);
}
if (faItems_[i].prime2Mean())
if (faItems_[fieldi].prime2Mean())
{
const word& fieldName = faItems_[i].prime2MeanFieldName();
const word& fieldName = faItems_[fieldi].prime2MeanFieldName();
writeFieldType<VolFieldType>(fieldName);
writeFieldType<InternalType>(fieldName);
writeFieldType<SurfaceFieldType>(fieldName);