diff --git a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C index ebf14d47f03be4a99109f3bd95cd1ae470a72022..3bbb078c869bcca89c8051f926900711d48ae6f2 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C +++ b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C @@ -50,7 +50,7 @@ namespace Foam const char* Foam::NamedEnum < Foam::fieldValues::cellSource::operationType, - 7 + 8 >::names[] = { "none", @@ -59,7 +59,8 @@ namespace Foam "volIntegrate", "weightedAverage", "min", - "max" + "max", + "CoV" }; } @@ -67,7 +68,7 @@ namespace Foam const Foam::NamedEnum<Foam::fieldValues::cellSource::sourceType, 2> Foam::fieldValues::cellSource::sourceTypeNames_; -const Foam::NamedEnum<Foam::fieldValues::cellSource::operationType, 7> +const Foam::NamedEnum<Foam::fieldValues::cellSource::operationType, 8> 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 b3231481f674831c875d30205597b9257fc52682..259c2aff88eea38066c11479f0999dddc9c5040a 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.H +++ b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.H @@ -52,6 +52,7 @@ Description - volAverage - volIntegrate - weightedAverage + - CoV (Coefficient of variation: standard deviation/mean) SourceFiles cellSource.C @@ -106,11 +107,12 @@ public: opVolIntegrate, opWeightedAverage, opMin, - opMax + opMax, + opCoV }; //- Operation type names - static const NamedEnum<operationType, 7> operationTypeNames_; + static const NamedEnum<operationType, 8> operationTypeNames_; private: diff --git a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceTemplates.C b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceTemplates.C index 6c3fe94438d1e1d4785c47f51247f63208cd75bd..9a3263465cfdd4f06a1a2e0dd25af0d815f409f3 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceTemplates.C +++ b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceTemplates.C @@ -115,6 +115,23 @@ Type Foam::fieldValues::cellSource::processValues result = max(values); break; } + case opCoV: + { + Type meanValue = sum(values*V)/sum(V); + + const label nComp = pTraits<Type>::nComponents; + + for (direction d=0; d<nComp; ++d) + { + scalarField vals(values.component(d)); + scalar mean = component(meanValue, d); + scalar& res = setComponent(result, d); + + res = sqrt(sum(V*sqr(vals - mean))/(V.size()*sum(V)))/mean; + } + + break; + } default: { // Do nothing diff --git a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C index 5141604eed0e8094f75b549f5a02c8495cd1d686..98a45084bfd3190df8a4f2575dd6658c26131740 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C +++ b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C @@ -53,7 +53,7 @@ namespace Foam const char* Foam::NamedEnum < Foam::fieldValues::faceSource::operationType, - 7 + 8 >::names[] = { "none", @@ -62,7 +62,8 @@ namespace Foam "areaIntegrate", "weightedAverage", "min", - "max" + "max", + "CoV" }; } @@ -71,7 +72,7 @@ namespace Foam const Foam::NamedEnum<Foam::fieldValues::faceSource::sourceType, 3> Foam::fieldValues::faceSource::sourceTypeNames_; -const Foam::NamedEnum<Foam::fieldValues::faceSource::operationType, 7> +const Foam::NamedEnum<Foam::fieldValues::faceSource::operationType, 8> 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 4ff40c837d98feeaba742e9d8fc4578a2d56c494..90f972c57434f6dd7416e68ea47aca591f638e3e 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H +++ b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H @@ -62,6 +62,7 @@ Description - weightedAverage - min - max + - CoV (Coefficient of variation: standard deviation/mean) Notes: - faces on empty patches get ignored @@ -132,11 +133,12 @@ public: opAreaIntegrate, opWeightedAverage, opMin, - opMax + opMax, + opCoV }; //- Operation type names - static const NamedEnum<operationType, 7> operationTypeNames_; + static const NamedEnum<operationType, 8> operationTypeNames_; private: diff --git a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C index 47fb3a61e10e460ef461b85b487435a3dddb45fa..821fda5f6a937e1b18a4013b460b0a190e2a7147 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C +++ b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C @@ -134,6 +134,25 @@ Type Foam::fieldValues::faceSource::processValues result = max(values); break; } + case opCoV: + { + Type meanValue = sum(values*magSf)/sum(magSf); + + const label nComp = pTraits<Type>::nComponents; + + for (direction d=0; d<nComp; ++d) + { + scalarField vals(values.component(d)); + scalar mean = component(meanValue, d); + scalar& res = setComponent(result, d); + + res = + sqrt(sum(magSf*sqr(vals - mean))/(magSf.size()*sum(magSf))) + /mean; + } + + break; + } default: { // Do nothing