ENH: multiFieldValue: add divide and cmptDivide operations

TUT: cavity: new examples for multiFieldValue divide/cmptDivide ops
This commit is contained in:
Kutalmis Bercin
2022-06-29 14:56:43 +01:00
parent 7de07fd8ba
commit 1ce0cb407a
4 changed files with 69 additions and 9 deletions

View File

@ -53,12 +53,20 @@ Foam::functionObjects::fieldValues::multiFieldValue::operationTypeNames_
{ operationType::opSum, "sum" }, { operationType::opSum, "sum" },
{ operationType::opAdd, "add" }, { operationType::opAdd, "add" },
{ operationType::opSubtract, "subtract" }, { operationType::opSubtract, "subtract" },
{ operationType::opDivide, "divide" },
{ operationType::opCmptDivide, "cmptDivide" },
{ operationType::opMin, "min" }, { operationType::opMin, "min" },
{ operationType::opMax, "max" }, { operationType::opMax, "max" },
{ operationType::opAverage, "average" }, { operationType::opAverage, "average" },
}); });
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Implementation
#include "multiFieldValueImpl.C"
// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // // * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * //
void Foam::functionObjects::fieldValues::multiFieldValue::writeFileHeader void Foam::functionObjects::fieldValues::multiFieldValue::writeFileHeader

View File

@ -92,6 +92,8 @@ Usage
sum | Sum of values sum | Sum of values
add | Add values (same as sum) add | Add values (same as sum)
subtract | Subtract values from first entry subtract | Subtract values from first entry
divide | Divide first entry by values
cmptDivide | Divide first entry by componentwise values
min | Minimum value min | Minimum value
max | Maximum value max | Maximum value
average | Average value average | Average value
@ -106,12 +108,12 @@ Usage
SourceFiles SourceFiles
multiFieldValue.C multiFieldValue.C
multiFieldValueTemplates.C multiFieldValueImpl.C
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef functionObjects_multiFieldValue_H #ifndef Foam_functionObjects_multiFieldValue_H
#define functionObjects_multiFieldValue_H #define Foam_functionObjects_multiFieldValue_H
#include "stateFunctionObject.H" #include "stateFunctionObject.H"
#include "writeFile.H" #include "writeFile.H"
@ -145,6 +147,8 @@ public:
opSum, //!< Sum of values opSum, //!< Sum of values
opAdd, //!< Add values (same as sum) opAdd, //!< Add values (same as sum)
opSubtract, //!< Subtract values from first entry opSubtract, //!< Subtract values from first entry
opDivide, //!< Divide first entry by values
opCmptDivide, //!< Divide first entry by values componentwise
opMin, //!< Minimum value opMin, //!< Minimum value
opMax, //!< Maximum value opMax, //!< Maximum value
opAverage //!< Average value opAverage //!< Average value
@ -243,12 +247,6 @@ public:
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#ifdef NoRepository
#include "multiFieldValueTemplates.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif #endif
// ************************************************************************* // // ************************************************************************* //

View File

@ -28,6 +28,28 @@ License
#include "FlatOutput.H" #include "FlatOutput.H"
// * * * * * * * * * * * * * * * Local Functions * * * * * * * * * * * * * * //
namespace Foam
{
//- Return magnitude of a given value unless the given Type is scalar
template<class Type>
static inline scalar MagOp(const Type& val)
{
return Foam::mag(val);
}
//- Return self if a given Type is scalar
template<>
inline scalar MagOp<scalar>(const scalar& val)
{
return val;
}
} // End namespace Foam
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<class Type> template<class Type>
@ -70,6 +92,24 @@ bool Foam::functionObjects::fieldValues::multiFieldValue::applyOperation
} }
break; break;
} }
case opDivide:
{
result = values[0];
for (label i = 1; i < values.size(); ++i)
{
result /= stabilise(MagOp(values[i]), SMALL);
}
break;
}
case opCmptDivide:
{
result = values[0];
for (label i = 1; i < values.size(); ++i)
{
result = cmptDivide(result, stabilise(values[i], SMALL));
}
break;
}
case opMin: case opMin:
{ {
result = min(values); result = min(values);

View File

@ -126,4 +126,18 @@ multiFieldValue_average
} }
multiFieldValue_divide
{
${multiFieldValue_add}
operation divide;
}
multiFieldValue_cmptDivide
{
${multiFieldValue_add}
operation cmptDivide;
}
// ************************************************************************* // // ************************************************************************* //