mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: faceSource function object - updates and fixes
This commit is contained in:
@ -48,11 +48,13 @@ namespace Foam
|
|||||||
|
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
const char* NamedEnum<fieldValues::faceSource::operationType, 12>::names[] =
|
const char* NamedEnum<fieldValues::faceSource::operationType, 14>::names[] =
|
||||||
{
|
{
|
||||||
"none",
|
"none",
|
||||||
"sum",
|
"sum",
|
||||||
|
"sumMag",
|
||||||
"sumDirection",
|
"sumDirection",
|
||||||
|
"sumDirectionBalance",
|
||||||
"average",
|
"average",
|
||||||
"weightedAverage",
|
"weightedAverage",
|
||||||
"areaAverage",
|
"areaAverage",
|
||||||
@ -75,7 +77,7 @@ namespace Foam
|
|||||||
const Foam::NamedEnum<Foam::fieldValues::faceSource::sourceType, 3>
|
const Foam::NamedEnum<Foam::fieldValues::faceSource::sourceType, 3>
|
||||||
Foam::fieldValues::faceSource::sourceTypeNames_;
|
Foam::fieldValues::faceSource::sourceTypeNames_;
|
||||||
|
|
||||||
const Foam::NamedEnum<Foam::fieldValues::faceSource::operationType, 12>
|
const Foam::NamedEnum<Foam::fieldValues::faceSource::operationType, 14>
|
||||||
Foam::fieldValues::faceSource::operationTypeNames_;
|
Foam::fieldValues::faceSource::operationTypeNames_;
|
||||||
|
|
||||||
|
|
||||||
@ -450,6 +452,11 @@ void Foam::fieldValues::faceSource::initialise(const dictionary& dict)
|
|||||||
Info<< " weight field = " << weightFieldName_;
|
Info<< " weight field = " << weightFieldName_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dict.readIfPresent("scaleFactor", scaleFactor_))
|
||||||
|
{
|
||||||
|
Info<< " scale factor = " << scaleFactor_;
|
||||||
|
}
|
||||||
|
|
||||||
Info<< nl << endl;
|
Info<< nl << endl;
|
||||||
|
|
||||||
if (valueOutput_)
|
if (valueOutput_)
|
||||||
@ -499,24 +506,15 @@ Foam::scalar Foam::fieldValues::faceSource::processValues
|
|||||||
{
|
{
|
||||||
case opSumDirection:
|
case opSumDirection:
|
||||||
{
|
{
|
||||||
const vector direction(dict_.lookup("direction"));
|
vector n(dict_.lookup("direction"));
|
||||||
|
return sum(pos(values*(Sf & n))*mag(values));
|
||||||
scalar v = 0.0;
|
|
||||||
|
|
||||||
forAll(Sf, i)
|
|
||||||
{
|
|
||||||
scalar d = Sf[i] & direction;
|
|
||||||
if (d > 0)
|
|
||||||
{
|
|
||||||
v += pos(values[i])*values[i];
|
|
||||||
}
|
}
|
||||||
else
|
case opSumDirectionBalance:
|
||||||
{
|
{
|
||||||
v += neg(values[i])*values[i];
|
vector n(dict_.lookup("direction"));
|
||||||
}
|
const scalarField nv(values*(Sf & n));
|
||||||
}
|
|
||||||
|
|
||||||
return v;
|
return sum(pos(nv)*mag(values) - neg(nv)*mag(values));
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
@ -539,8 +537,19 @@ Foam::vector Foam::fieldValues::faceSource::processValues
|
|||||||
{
|
{
|
||||||
case opSumDirection:
|
case opSumDirection:
|
||||||
{
|
{
|
||||||
const vector direction(dict_.lookup("direction"));
|
vector n(dict_.lookup("direction"));
|
||||||
return sum(pos(values & direction)*values);
|
n /= mag(n) + ROOTVSMALL;
|
||||||
|
const scalarField nv(n & values);
|
||||||
|
|
||||||
|
return sum(pos(nv)*n*(nv));
|
||||||
|
}
|
||||||
|
case opSumDirectionBalance:
|
||||||
|
{
|
||||||
|
vector n(dict_.lookup("direction"));
|
||||||
|
n /= mag(n) + ROOTVSMALL;
|
||||||
|
const scalarField nv(n & values);
|
||||||
|
|
||||||
|
return sum(pos(nv)*n*(nv));
|
||||||
}
|
}
|
||||||
case opAreaNormalAverage:
|
case opAreaNormalAverage:
|
||||||
{
|
{
|
||||||
@ -576,6 +585,7 @@ Foam::fieldValues::faceSource::faceSource
|
|||||||
source_(sourceTypeNames_.read(dict.lookup("source"))),
|
source_(sourceTypeNames_.read(dict.lookup("source"))),
|
||||||
operation_(operationTypeNames_.read(dict.lookup("operation"))),
|
operation_(operationTypeNames_.read(dict.lookup("operation"))),
|
||||||
weightFieldName_("none"),
|
weightFieldName_("none"),
|
||||||
|
scaleFactor_(1.0),
|
||||||
nFaces_(0),
|
nFaces_(0),
|
||||||
faceId_(),
|
faceId_(),
|
||||||
facePatchId_(),
|
facePatchId_(),
|
||||||
|
|||||||
@ -71,6 +71,7 @@ Description
|
|||||||
sourceName | name of face source if required | no |
|
sourceName | name of face source if required | no |
|
||||||
operation | operation to perform | yes |
|
operation | operation to perform | yes |
|
||||||
weightField | name of field to apply weighting | no |
|
weightField | name of field to apply weighting | no |
|
||||||
|
scaleFactor | scale factor | no | 1
|
||||||
fields | list of fields to operate on | yes |
|
fields | list of fields to operate on | yes |
|
||||||
\endtable
|
\endtable
|
||||||
|
|
||||||
@ -87,7 +88,9 @@ Description
|
|||||||
\plaintable
|
\plaintable
|
||||||
none | no operation
|
none | no operation
|
||||||
sum | sum
|
sum | sum
|
||||||
|
sumMag | sum of component magnitudes
|
||||||
sumDirection | sum values which are positive in given direction
|
sumDirection | sum values which are positive in given direction
|
||||||
|
sumDirectionBalance | sum of balance of values in given direction
|
||||||
average | ensemble average
|
average | ensemble average
|
||||||
weightedAverage | weighted average
|
weightedAverage | weighted average
|
||||||
areaAverage | area weighted average
|
areaAverage | area weighted average
|
||||||
@ -177,7 +180,9 @@ public:
|
|||||||
{
|
{
|
||||||
opNone,
|
opNone,
|
||||||
opSum,
|
opSum,
|
||||||
|
opSumMag,
|
||||||
opSumDirection,
|
opSumDirection,
|
||||||
|
opSumDirectionBalance,
|
||||||
opAverage,
|
opAverage,
|
||||||
opWeightedAverage,
|
opWeightedAverage,
|
||||||
opAreaAverage,
|
opAreaAverage,
|
||||||
@ -190,7 +195,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
//- Operation type names
|
//- Operation type names
|
||||||
static const NamedEnum<operationType, 12> operationTypeNames_;
|
static const NamedEnum<operationType, 14> operationTypeNames_;
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -237,6 +242,9 @@ protected:
|
|||||||
//- Weight field name - optional
|
//- Weight field name - optional
|
||||||
word weightFieldName_;
|
word weightFieldName_;
|
||||||
|
|
||||||
|
//- Scale factor - optional
|
||||||
|
scalar scaleFactor_;
|
||||||
|
|
||||||
//- Global number of faces
|
//- Global number of faces
|
||||||
label nFaces_;
|
label nFaces_;
|
||||||
|
|
||||||
|
|||||||
@ -141,6 +141,11 @@ Type Foam::fieldValues::faceSource::processSameTypeValues
|
|||||||
result = sum(values);
|
result = sum(values);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case opSumMag:
|
||||||
|
{
|
||||||
|
result = sum(cmptMag(values));
|
||||||
|
break;
|
||||||
|
}
|
||||||
case opSumDirection:
|
case opSumDirection:
|
||||||
{
|
{
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
@ -161,6 +166,26 @@ Type Foam::fieldValues::faceSource::processSameTypeValues
|
|||||||
result = pTraits<Type>::zero;
|
result = pTraits<Type>::zero;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case opSumDirectionBalance:
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"template<class Type>"
|
||||||
|
"Type Foam::fieldValues::faceSource::processSameTypeValues"
|
||||||
|
"("
|
||||||
|
"const Field<Type>&, "
|
||||||
|
"const vectorField&, "
|
||||||
|
"const scalarField&"
|
||||||
|
") const"
|
||||||
|
)
|
||||||
|
<< "Operation " << operationTypeNames_[operation_]
|
||||||
|
<< " not available for values of type "
|
||||||
|
<< pTraits<Type>::typeName
|
||||||
|
<< exit(FatalError);
|
||||||
|
|
||||||
|
result = pTraits<Type>::zero;
|
||||||
|
break;
|
||||||
|
}
|
||||||
case opAverage:
|
case opAverage:
|
||||||
{
|
{
|
||||||
result = sum(values)/values.size();
|
result = sum(values)/values.size();
|
||||||
@ -304,8 +329,8 @@ bool Foam::fieldValues::faceSource::writeValues(const word& fieldName)
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// apply weight field
|
// apply scale factor and weight field
|
||||||
values *= weightField;
|
values *= scaleFactor_*weightField;
|
||||||
|
|
||||||
if (Pstream::master())
|
if (Pstream::master())
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user