diff --git a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C index 3bbb078c86..b42f15e6b3 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C +++ b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -55,9 +55,9 @@ namespace Foam { "none", "sum", + "average", "volAverage", "volIntegrate", - "weightedAverage", "min", "max", "CoV" @@ -143,9 +143,8 @@ void Foam::fieldValues::cellSource::initialise(const dictionary& dict) << " total volume = " << gSum(filterField(mesh().V())) << nl << endl; - if (operation_ == opWeightedAverage) + if (dict.readIfPresent("weightField", weightFieldName_)) { - dict.lookup("weightField") >> weightFieldName_; Info<< " weight field = " << weightFieldName_; } diff --git a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.H b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.H index 259c2aff88..573b53f522 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.H +++ b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -39,6 +39,7 @@ Description source cellZone; // Type of cell source sourceName c0; operation volAverage; + weightField alpha1; // optional weight field fields ( p @@ -49,9 +50,9 @@ Description where operation is one of: - none - sum + - average - volAverage - volIntegrate - - weightedAverage - CoV (Coefficient of variation: standard deviation/mean) SourceFiles @@ -103,9 +104,9 @@ public: { opNone, opSum, + opAverage, opVolAverage, opVolIntegrate, - opWeightedAverage, opMin, opMax, opCoV @@ -168,8 +169,7 @@ protected: Type processValues ( const Field& values, - const scalarField& V, - const scalarField& weightField + const scalarField& V ) const; //- Output file header information diff --git a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceTemplates.C b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceTemplates.C index 9a3263465c..61d39a43c9 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceTemplates.C +++ b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceTemplates.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -78,8 +78,7 @@ template Type Foam::fieldValues::cellSource::processValues ( const Field& values, - const scalarField& V, - const scalarField& weightField + const scalarField& V ) const { Type result = pTraits::zero; @@ -90,6 +89,11 @@ Type Foam::fieldValues::cellSource::processValues result = sum(values); break; } + case opAverage: + { + result = sum(values)/values.size(); + break; + } case opVolAverage: { result = sum(values*V)/sum(V); @@ -100,11 +104,6 @@ Type Foam::fieldValues::cellSource::processValues result = sum(values*V); break; } - case opWeightedAverage: - { - result = sum(values*weightField)/sum(weightField); - break; - } case opMin: { result = min(values); @@ -152,23 +151,25 @@ bool Foam::fieldValues::cellSource::writeValues(const word& fieldName) if (ok) { Field values(setFieldValues(fieldName)); - combineFields(values); - scalarField V(filterField(mesh().V())); - combineFields(V); + scalarField weightField(values.size(), 1.0); - scalarField weightField; - - if (operation_ == opWeightedAverage) + if (weightFieldName_ != "none") { weightField = setFieldValues(weightFieldName_, true); } + // Combine onto master + combineFields(values); + combineFields(V); combineFields(weightField); + // apply weight field + values *= weightField; + if (Pstream::master()) { - Type result = processValues(values, V, weightField); + Type result = processValues(values, V); if (valueOutput_) { diff --git a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C index 98a45084bf..68befe8fd9 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C +++ b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -58,9 +58,9 @@ namespace Foam { "none", "sum", + "average", "areaAverage", "areaIntegrate", - "weightedAverage", "min", "max", "CoV" @@ -282,9 +282,8 @@ void Foam::fieldValues::faceSource::initialise(const dictionary& dict) << " total area = " << totalArea << nl; - if (operation_ == opWeightedAverage) + if (dict.readIfPresent("weightField", weightFieldName_)) { - dict.lookup("weightField") >> weightFieldName_; Info<< " weight field = " << weightFieldName_; } @@ -326,7 +325,7 @@ Foam::fieldValues::faceSource::faceSource fieldValue(name, obr, dict, loadFromFiles), source_(sourceTypeNames_.read(dict.lookup("source"))), operation_(operationTypeNames_.read(dict.lookup("operation"))), - weightFieldName_("undefinedWeightedFieldName"), + weightFieldName_("none"), nFaces_(0), faceId_(), facePatchId_(), diff --git a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H index 90f972c574..3c5ab78624 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H +++ b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H @@ -40,6 +40,7 @@ Description // faceZone,patch,sampledSurface sourceName f0; // faceZone name, see below operation sum; + weightField alpha1; // optional weight field fields ( p @@ -57,19 +58,20 @@ Description operation is one of: - none - sum + - average - areaAverage - areaIntegrate - - weightedAverage - min - max - CoV (Coefficient of variation: standard deviation/mean) + Notes: - faces on empty patches get ignored - if the field is a volField the faceZone can only consist of boundary - faces. + faces. - all fields get oriented according to the faceZone (so you might e.g. see - negative pressure) + negative pressure) - using sampledSurfaces: - they do not do surface fields - they use cell values - they do not do any interpolation. @@ -129,9 +131,9 @@ public: { opNone, opSum, + opAverage, opAreaAverage, opAreaIntegrate, - opWeightedAverage, opMin, opMax, opCoV @@ -165,7 +167,7 @@ protected: //- Operation to apply to values operationType operation_; - //- Weight field name - only used for opWeightedAverage mode + //- Weight field name - optional word weightFieldName_; //- Global number of faces @@ -213,8 +215,7 @@ protected: Type processValues ( const Field& values, - const scalarField& magSf, - const scalarField& weightField + const scalarField& magSf ) const; //- Output file header information diff --git a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C index 821fda5f6a..bf83e811bc 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C +++ b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -97,8 +97,7 @@ template Type Foam::fieldValues::faceSource::processValues ( const Field& values, - const scalarField& magSf, - const scalarField& weightField + const scalarField& magSf ) const { Type result = pTraits::zero; @@ -109,6 +108,11 @@ Type Foam::fieldValues::faceSource::processValues result = sum(values); break; } + case opAverage: + { + result = sum(values)/values.size(); + break; + } case opAreaAverage: { result = sum(values*magSf)/sum(magSf); @@ -119,11 +123,6 @@ Type Foam::fieldValues::faceSource::processValues result = sum(values*magSf); break; } - case opWeightedAverage: - { - result = sum(values*weightField)/sum(weightField); - break; - } case opMin: { result = min(values); @@ -173,9 +172,9 @@ bool Foam::fieldValues::faceSource::writeValues(const word& fieldName) if (ok) { Field values(getFieldValues(fieldName)); - scalarField weightField; + scalarField weightField(values.size(), 1.0); - if (operation_ == opWeightedAverage) + if (weightFieldName_ != "none") { weightField = getFieldValues(weightFieldName_, true); } @@ -198,10 +197,13 @@ bool Foam::fieldValues::faceSource::writeValues(const word& fieldName) combineFields(magSf); combineFields(weightField); + // apply weight field + values *= weightField; + if (Pstream::master()) { - Type result = processValues(values, magSf, weightField); + Type result = processValues(values, magSf); if (valueOutput_) {