ENH: Exposed weightField to all face/cell source function object operations

This commit is contained in:
andy
2012-02-01 17:32:08 +00:00
parent c603f1602b
commit 7135a403cd
6 changed files with 49 additions and 47 deletions

View File

@ -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_;
}

View File

@ -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<Type>& values,
const scalarField& V,
const scalarField& weightField
const scalarField& V
) const;
//- Output file header information

View File

@ -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<class Type>
Type Foam::fieldValues::cellSource::processValues
(
const Field<Type>& values,
const scalarField& V,
const scalarField& weightField
const scalarField& V
) const
{
Type result = pTraits<Type>::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<Type> values(setFieldValues<Type>(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<scalar>(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_)
{

View File

@ -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_(),

View File

@ -40,6 +40,7 @@ Description
// faceZone,patch,sampledSurface
sourceName f0; // faceZone name, see below
operation sum;
weightField alpha1; // optional weight field
fields
(
p
@ -57,13 +58,14 @@ 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
@ -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<Type>& values,
const scalarField& magSf,
const scalarField& weightField
const scalarField& magSf
) const;
//- Output file header information

View File

@ -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<class Type>
Type Foam::fieldValues::faceSource::processValues
(
const Field<Type>& values,
const scalarField& magSf,
const scalarField& weightField
const scalarField& magSf
) const
{
Type result = pTraits<Type>::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<Type> values(getFieldValues<Type>(fieldName));
scalarField weightField;
scalarField weightField(values.size(), 1.0);
if (operation_ == opWeightedAverage)
if (weightFieldName_ != "none")
{
weightField = getFieldValues<scalar>(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_)
{