mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: postOperation for surfaceFieldValue
- currently only 'none' or 'sqrt', which can be useful in combination with integrate or averaging functions.
This commit is contained in:
@ -85,6 +85,18 @@ const char* Foam::NamedEnum
|
||||
"areaNormalIntegrate"
|
||||
};
|
||||
|
||||
template<>
|
||||
const char* Foam::NamedEnum
|
||||
<
|
||||
Foam::functionObjects::fieldValues::surfaceFieldValue::postOperationType,
|
||||
2
|
||||
>::names[] =
|
||||
{
|
||||
"none",
|
||||
"sqrt"
|
||||
};
|
||||
|
||||
|
||||
const Foam::NamedEnum
|
||||
<
|
||||
Foam::functionObjects::fieldValues::surfaceFieldValue::regionTypes,
|
||||
@ -97,6 +109,13 @@ const Foam::NamedEnum
|
||||
16
|
||||
> Foam::functionObjects::fieldValues::surfaceFieldValue::operationTypeNames_;
|
||||
|
||||
const Foam::NamedEnum
|
||||
<
|
||||
Foam::functionObjects::fieldValues::surfaceFieldValue::postOperationType,
|
||||
2
|
||||
>
|
||||
Foam::functionObjects::fieldValues::surfaceFieldValue::postOperationTypeNames_;
|
||||
|
||||
|
||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||
|
||||
@ -649,6 +668,11 @@ Foam::functionObjects::fieldValues::surfaceFieldValue::surfaceFieldValue
|
||||
surfaceWriterPtr_(nullptr),
|
||||
regionType_(regionTypeNames_.read(dict.lookup("regionType"))),
|
||||
operation_(operationTypeNames_.read(dict.lookup("operation"))),
|
||||
postOperation_
|
||||
(
|
||||
postOperationTypeNames_
|
||||
[dict.lookupOrDefault<word>("postOperation", "none")]
|
||||
),
|
||||
weightFieldName_("none"),
|
||||
orientWeightField_(false),
|
||||
orientedFieldsStart_(labelMax),
|
||||
@ -674,6 +698,11 @@ Foam::functionObjects::fieldValues::surfaceFieldValue::surfaceFieldValue
|
||||
surfaceWriterPtr_(nullptr),
|
||||
regionType_(regionTypeNames_.read(dict.lookup("regionType"))),
|
||||
operation_(operationTypeNames_.read(dict.lookup("operation"))),
|
||||
postOperation_
|
||||
(
|
||||
postOperationTypeNames_
|
||||
[dict.lookupOrDefault<word>("postOperation", "none")]
|
||||
),
|
||||
weightFieldName_("none"),
|
||||
orientWeightField_(false),
|
||||
orientedFieldsStart_(labelMax),
|
||||
|
||||
@ -86,6 +86,7 @@ Usage
|
||||
regionType | face regionType: see below | yes |
|
||||
name | name of face regionType if required | no |
|
||||
operation | operation to perform | yes |
|
||||
postOperation | post-operation to perform | no | none |
|
||||
weightField | name of field to apply weighting | no |
|
||||
orientedWeightField | name of oriented field to apply weighting | no |
|
||||
scaleFactor | scale factor | no | 1
|
||||
@ -223,6 +224,17 @@ public:
|
||||
static const NamedEnum<operationType, 16> operationTypeNames_;
|
||||
|
||||
|
||||
//- Post-operation type enumeration
|
||||
enum postOperationType
|
||||
{
|
||||
postOpNone,
|
||||
postOpSqrt
|
||||
};
|
||||
|
||||
//- Operation type names
|
||||
static const NamedEnum<postOperationType, 2> postOperationTypeNames_;
|
||||
|
||||
|
||||
private:
|
||||
|
||||
// Private Member Functions
|
||||
@ -267,6 +279,9 @@ protected:
|
||||
//- Operation to apply to values
|
||||
operationType operation_;
|
||||
|
||||
//- Optional post-evaluation operation
|
||||
postOperationType postOperation_;
|
||||
|
||||
//- Weight field name - optional
|
||||
word weightFieldName_;
|
||||
|
||||
@ -394,11 +409,11 @@ public:
|
||||
inline fileName outputDir() const;
|
||||
|
||||
//- Templated helper function to output field values
|
||||
template<class Type>
|
||||
template<class Type, class WeightType>
|
||||
bool writeValues
|
||||
(
|
||||
const word& fieldName,
|
||||
const scalarField& weightField,
|
||||
const Field<WeightType>& weightField,
|
||||
const bool orient
|
||||
);
|
||||
|
||||
|
||||
@ -286,11 +286,11 @@ Type Foam::functionObjects::fieldValues::surfaceFieldValue::processValues
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class Type>
|
||||
template<class Type, class WeightType>
|
||||
bool Foam::functionObjects::fieldValues::surfaceFieldValue::writeValues
|
||||
(
|
||||
const word& fieldName,
|
||||
const scalarField& weightField,
|
||||
const Field<WeightType>& weightField,
|
||||
const bool orient
|
||||
)
|
||||
{
|
||||
@ -355,6 +355,22 @@ bool Foam::functionObjects::fieldValues::surfaceFieldValue::writeValues
|
||||
|
||||
Type result = processValues(values, Sf, weightField);
|
||||
|
||||
switch (postOperation_)
|
||||
{
|
||||
case postOpNone:
|
||||
break;
|
||||
case postOpSqrt:
|
||||
{
|
||||
// sqrt: component-wise - doesn't change the type
|
||||
for (direction d=0; d < pTraits<Type>::nComponents; ++d)
|
||||
{
|
||||
setComponent(result, d)
|
||||
= sqrt(mag(component(result, d)));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
file()<< tab << result;
|
||||
|
||||
Log << " " << operationTypeNames_[operation_]
|
||||
|
||||
Reference in New Issue
Block a user