From 1ce0cb407aa6c5bbf48128cf21a01593cfd4f76a Mon Sep 17 00:00:00 2001 From: Kutalmis Bercin Date: Wed, 29 Jun 2022 14:56:43 +0100 Subject: [PATCH] ENH: multiFieldValue: add divide and cmptDivide operations TUT: cavity: new examples for multiFieldValue divide/cmptDivide ops --- .../field/multiFieldValue/multiFieldValue.C | 8 ++++ .../field/multiFieldValue/multiFieldValue.H | 16 ++++---- ...ValueTemplates.C => multiFieldValueImpl.C} | 40 +++++++++++++++++++ .../RAS/cavity/system/FOs/FOmultiFieldValue | 14 +++++++ 4 files changed, 69 insertions(+), 9 deletions(-) rename src/functionObjects/field/multiFieldValue/{multiFieldValueTemplates.C => multiFieldValueImpl.C} (77%) diff --git a/src/functionObjects/field/multiFieldValue/multiFieldValue.C b/src/functionObjects/field/multiFieldValue/multiFieldValue.C index 45cf5bb8d1..0e8ca29ec2 100644 --- a/src/functionObjects/field/multiFieldValue/multiFieldValue.C +++ b/src/functionObjects/field/multiFieldValue/multiFieldValue.C @@ -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 diff --git a/src/functionObjects/field/multiFieldValue/multiFieldValue.H b/src/functionObjects/field/multiFieldValue/multiFieldValue.H index 02a939ff12..a8103fe08b 100644 --- a/src/functionObjects/field/multiFieldValue/multiFieldValue.H +++ b/src/functionObjects/field/multiFieldValue/multiFieldValue.H @@ -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 // ************************************************************************* // diff --git a/src/functionObjects/field/multiFieldValue/multiFieldValueTemplates.C b/src/functionObjects/field/multiFieldValue/multiFieldValueImpl.C similarity index 77% rename from src/functionObjects/field/multiFieldValue/multiFieldValueTemplates.C rename to src/functionObjects/field/multiFieldValue/multiFieldValueImpl.C index 5f6c99c084..67526bc8b6 100644 --- a/src/functionObjects/field/multiFieldValue/multiFieldValueTemplates.C +++ b/src/functionObjects/field/multiFieldValue/multiFieldValueImpl.C @@ -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 +static inline scalar MagOp(const Type& val) +{ + return Foam::mag(val); +} + +//- Return self if a given Type is scalar +template<> +inline scalar MagOp(const scalar& val) +{ + return val; +} + +} // End namespace Foam + + // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template @@ -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); diff --git a/tutorials/incompressible/pisoFoam/RAS/cavity/system/FOs/FOmultiFieldValue b/tutorials/incompressible/pisoFoam/RAS/cavity/system/FOs/FOmultiFieldValue index ab8a943e7b..80dd001345 100644 --- a/tutorials/incompressible/pisoFoam/RAS/cavity/system/FOs/FOmultiFieldValue +++ b/tutorials/incompressible/pisoFoam/RAS/cavity/system/FOs/FOmultiFieldValue @@ -126,4 +126,18 @@ multiFieldValue_average } +multiFieldValue_divide +{ + ${multiFieldValue_add} + operation divide; +} + + +multiFieldValue_cmptDivide +{ + ${multiFieldValue_add} + operation cmptDivide; +} + + // ************************************************************************* //