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