mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: Exposed weightField to all face/cell source function object operations
This commit is contained in:
@ -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_(),
|
||||
|
||||
@ -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<Type>& values,
|
||||
const scalarField& magSf,
|
||||
const scalarField& weightField
|
||||
const scalarField& magSf
|
||||
) const;
|
||||
|
||||
//- Output file header information
|
||||
|
||||
@ -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_)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user