diff --git a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C index afe4ea5f2ca37c7e7b61c3cb65a0d2731f3849c3..9d4b8400c80a32c181fbe566eaf7d5e0e6e8a629 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C +++ b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C @@ -41,7 +41,7 @@ namespace Foam template<> - const char* NamedEnum<fieldValues::cellSource::operationType, 10>::names[] = + const char* NamedEnum<fieldValues::cellSource::operationType, 11>::names[] = { "none", "sum", @@ -49,6 +49,7 @@ namespace Foam "average", "weightedAverage", "volAverage", + "weightedVolAverage", "volIntegrate", "min", "max", @@ -66,7 +67,7 @@ namespace Foam const Foam::NamedEnum<Foam::fieldValues::cellSource::sourceType, 2> Foam::fieldValues::cellSource::sourceTypeNames_; -const Foam::NamedEnum<Foam::fieldValues::cellSource::operationType, 10> +const Foam::NamedEnum<Foam::fieldValues::cellSource::operationType, 11> Foam::fieldValues::cellSource::operationTypeNames_; diff --git a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.H b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.H index a02584e769092f6d9344f3834fb5541117dfacd6..42f788d88443fc7f8d9d24a323377fc60d9dcfb1 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.H +++ b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.H @@ -85,6 +85,7 @@ Description average | ensemble average weightedAverage | weighted average volAverage | volume weighted average + weightedVolAverage | weighted volume average volIntegrate | volume integral min | minimum max | maximum @@ -149,6 +150,7 @@ public: opAverage, opWeightedAverage, opVolAverage, + opWeightedVolAverage, opVolIntegrate, opMin, opMax, @@ -156,7 +158,7 @@ public: }; //- Operation type names - static const NamedEnum<operationType, 10> operationTypeNames_; + static const NamedEnum<operationType, 11> operationTypeNames_; private: diff --git a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceTemplates.C b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceTemplates.C index f53755e3ff3bfcbddf3db930d8f9a8baeaa9b985..15030ea689cc451f206e1b1f34df8e27ec2dc103 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceTemplates.C +++ b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceTemplates.C @@ -102,17 +102,22 @@ Type Foam::fieldValues::cellSource::processValues } case opWeightedAverage: { - result = sum(values)/sum(weightField); + result = sum(weightField*values)/sum(weightField); break; } case opVolAverage: { - result = sum(values*V)/sum(V); + result = sum(V*values)/sum(V); + break; + } + case opWeightedVolAverage: + { + result = sum(weightField*V*values)/sum(weightField*V); break; } case opVolIntegrate: { - result = sum(values*V); + result = sum(V*values); break; } case opMin: @@ -175,14 +180,11 @@ bool Foam::fieldValues::cellSource::writeValues(const word& fieldName) combineFields(V); combineFields(weightField); - // apply weight field - values *= weightField; - if (Pstream::master()) { Type result = processValues(values, V, weightField); - // add to result dictionary, over-writing any previous entry + // Add to result dictionary, over-writing any previous entry resultDict_.add(fieldName, result, true); if (valueOutput_) @@ -198,7 +200,7 @@ bool Foam::fieldValues::cellSource::writeValues(const word& fieldName) IOobject::NO_READ, IOobject::NO_WRITE ), - values + weightField*values ).write(); } diff --git a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C index 50804908c2eb6610aa5d98501d0100ce0875796c..4e1f79807de01b7554a5314ea987a351f5faa206 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C +++ b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C @@ -48,7 +48,7 @@ namespace Foam template<> - const char* NamedEnum<fieldValues::faceSource::operationType, 14>::names[] = + const char* NamedEnum<fieldValues::faceSource::operationType, 15>::names[] = { "none", "sum", @@ -58,6 +58,7 @@ namespace Foam "average", "weightedAverage", "areaAverage", + "weightedAreaAverage", "areaIntegrate", "min", "max", @@ -77,7 +78,7 @@ namespace Foam const Foam::NamedEnum<Foam::fieldValues::faceSource::sourceType, 3> Foam::fieldValues::faceSource::sourceTypeNames_; -const Foam::NamedEnum<Foam::fieldValues::faceSource::operationType, 14> +const Foam::NamedEnum<Foam::fieldValues::faceSource::operationType, 15> Foam::fieldValues::faceSource::operationTypeNames_; diff --git a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H index 87403aadb73948d2cddfea2eb1509e3a525f2dbf..e74b840f18a73bf56bb85c85f04ac74d59b0668f 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H +++ b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H @@ -97,6 +97,7 @@ Description average | ensemble average weightedAverage | weighted average areaAverage | area weighted average + weightedAreaAverage | weighted area average areaIntegrate | area integral min | minimum max | maximum @@ -190,6 +191,7 @@ public: opAverage, opWeightedAverage, opAreaAverage, + opWeightedAreaAverage, opAreaIntegrate, opMin, opMax, @@ -199,7 +201,7 @@ public: }; //- Operation type names - static const NamedEnum<operationType, 14> operationTypeNames_; + static const NamedEnum<operationType, 15> operationTypeNames_; private: diff --git a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C index 27c392f56224f3dbc606444a74e9da10df164361..53bca6f1fab3ae2fbc1fdf8fa814d484dbb99991 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C +++ b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C @@ -197,7 +197,7 @@ Type Foam::fieldValues::faceSource::processSameTypeValues { if (weightField.size()) { - result = sum(values)/sum(weightField); + result = sum(weightField*values)/sum(weightField); } else { @@ -209,14 +209,28 @@ Type Foam::fieldValues::faceSource::processSameTypeValues { const scalarField magSf(mag(Sf)); - result = sum(values*magSf)/sum(magSf); + result = sum(magSf*values)/sum(magSf); + break; + } + case opWeightedAreaAverage: + { + const scalarField magSf(mag(Sf)); + + if (weightField.size()) + { + result = sum(weightField*magSf*values)/sum(magSf*weightField); + } + else + { + result = sum(magSf*values)/sum(magSf); + } break; } case opAreaIntegrate: { const scalarField magSf(mag(Sf)); - result = sum(values*magSf); + result = sum(magSf*values); break; } case opMin: @@ -337,18 +351,14 @@ bool Foam::fieldValues::faceSource::writeValues } - // apply scale factor and weight field + // Apply scale factor values *= scaleFactor_; - if (weightField.size()) - { - values *= weightField; - } if (Pstream::master()) { Type result = processValues(values, Sf, weightField); - // add to result dictionary, over-writing any previous entry + // Add to result dictionary, over-writing any previous entry resultDict_.add(fieldName, result, true); file()<< tab << result;