ENH: multiFieldValue: add divide and cmptDivide operations
TUT: cavity: new examples for multiFieldValue divide/cmptDivide ops
This commit is contained in:
parent
7de07fd8ba
commit
1ce0cb407a
@ -53,12 +53,20 @@ Foam::functionObjects::fieldValues::multiFieldValue::operationTypeNames_
|
||||
{ operationType::opSum, "sum" },
|
||||
{ operationType::opAdd, "add" },
|
||||
{ operationType::opSubtract, "subtract" },
|
||||
{ operationType::opDivide, "divide" },
|
||||
{ operationType::opCmptDivide, "cmptDivide" },
|
||||
{ operationType::opMin, "min" },
|
||||
{ operationType::opMax, "max" },
|
||||
{ operationType::opAverage, "average" },
|
||||
});
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
// Implementation
|
||||
#include "multiFieldValueImpl.C"
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * //
|
||||
|
||||
void Foam::functionObjects::fieldValues::multiFieldValue::writeFileHeader
|
||||
|
@ -92,6 +92,8 @@ Usage
|
||||
sum | Sum of values
|
||||
add | Add values (same as sum)
|
||||
subtract | Subtract values from first entry
|
||||
divide | Divide first entry by values
|
||||
cmptDivide | Divide first entry by componentwise values
|
||||
min | Minimum value
|
||||
max | Maximum value
|
||||
average | Average value
|
||||
@ -106,12 +108,12 @@ Usage
|
||||
|
||||
SourceFiles
|
||||
multiFieldValue.C
|
||||
multiFieldValueTemplates.C
|
||||
multiFieldValueImpl.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef functionObjects_multiFieldValue_H
|
||||
#define functionObjects_multiFieldValue_H
|
||||
#ifndef Foam_functionObjects_multiFieldValue_H
|
||||
#define Foam_functionObjects_multiFieldValue_H
|
||||
|
||||
#include "stateFunctionObject.H"
|
||||
#include "writeFile.H"
|
||||
@ -145,6 +147,8 @@ public:
|
||||
opSum, //!< Sum of values
|
||||
opAdd, //!< Add values (same as sum)
|
||||
opSubtract, //!< Subtract values from first entry
|
||||
opDivide, //!< Divide first entry by values
|
||||
opCmptDivide, //!< Divide first entry by values componentwise
|
||||
opMin, //!< Minimum value
|
||||
opMax, //!< Maximum value
|
||||
opAverage //!< Average value
|
||||
@ -243,12 +247,6 @@ public:
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#ifdef NoRepository
|
||||
#include "multiFieldValueTemplates.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
|
@ -28,6 +28,28 @@ License
|
||||
|
||||
#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 * * * * * * * * * * * * * //
|
||||
|
||||
template<class Type>
|
||||
@ -70,6 +92,24 @@ bool Foam::functionObjects::fieldValues::multiFieldValue::applyOperation
|
||||
}
|
||||
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:
|
||||
{
|
||||
result = min(values);
|
@ -126,4 +126,18 @@ multiFieldValue_average
|
||||
}
|
||||
|
||||
|
||||
multiFieldValue_divide
|
||||
{
|
||||
${multiFieldValue_add}
|
||||
operation divide;
|
||||
}
|
||||
|
||||
|
||||
multiFieldValue_cmptDivide
|
||||
{
|
||||
${multiFieldValue_add}
|
||||
operation cmptDivide;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
Loading…
Reference in New Issue
Block a user