Skip to content
Snippets Groups Projects
Commit d058600b authored by Andrew Heather's avatar Andrew Heather
Browse files

Merge branch 'feature-multifieldvalue-divide' into 'develop'

ENH: multiFieldValue: add divide and cmptDivide operations

See merge request Development/openfoam!552
parents 7de07fd8 1ce0cb40
No related branches found
No related tags found
1 merge request!552ENH: multiFieldValue: add divide and cmptDivide operations
...@@ -53,12 +53,20 @@ Foam::functionObjects::fieldValues::multiFieldValue::operationTypeNames_ ...@@ -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
......
...@@ -92,6 +92,8 @@ Usage ...@@ -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 ...@@ -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: ...@@ -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: ...@@ -243,12 +247,6 @@ public:
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#ifdef NoRepository
#include "multiFieldValueTemplates.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif #endif
// ************************************************************************* // // ************************************************************************* //
...@@ -28,6 +28,28 @@ License ...@@ -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 ...@@ -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);
......
...@@ -126,4 +126,18 @@ multiFieldValue_average ...@@ -126,4 +126,18 @@ multiFieldValue_average
} }
multiFieldValue_divide
{
${multiFieldValue_add}
operation divide;
}
multiFieldValue_cmptDivide
{
${multiFieldValue_add}
operation cmptDivide;
}
// ************************************************************************* // // ************************************************************************* //
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment