diff --git a/src/OpenFOAM/expressions/exprDriver/exprDriverFields.C b/src/OpenFOAM/expressions/exprDriver/exprDriverFields.C index f0d6db78e8..368ab87273 100644 --- a/src/OpenFOAM/expressions/exprDriver/exprDriverFields.C +++ b/src/OpenFOAM/expressions/exprDriver/exprDriverFields.C @@ -26,66 +26,9 @@ License \*---------------------------------------------------------------------------*/ #include "exprDriver.H" -#include "Tuple2.H" #include "FieldOps.H" #include "Random.H" -// * * * * * * * * * * * * * * * Local Functions * * * * * * * * * * * * * * // - -namespace Foam -{ - -//! \cond file-scope - -template -static Foam::Tuple2 findMinData -( - const Field& vals, - const Field& data -) -{ - typedef Tuple2 retType; - - retType result(pTraits::max, Zero); - - const label i = findMin(vals); - if (i != -1) - { - result.first() = vals[i]; - result.second() = data[i]; - } - - Foam::combineReduce(result, minFirstEqOp()); - return result; -} - - -template -static Foam::Tuple2 findMaxData -( - const Field& vals, - const Field& data -) -{ - typedef Tuple2 retType; - - retType result(pTraits::min, Zero); - - const label i = findMax(vals); - if (i != -1) - { - result.first() = vals[i]; - result.second() = data[i]; - } - - Foam::combineReduce(result, maxFirstEqOp()); - return result; -} - -//! \endcond -} // End namespace Foam - - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // void Foam::expressions::exprDriver::fill_random @@ -98,13 +41,11 @@ void Foam::expressions::exprDriver::fill_random if (gaussian) { Random::gaussianGeneratorOp gen(seed); - FieldOps::assign(field, field, gen); } else { Random::uniformGeneratorOp gen(seed); - FieldOps::assign(field, field, gen); } } @@ -116,7 +57,7 @@ Foam::point Foam::expressions::exprDriver::getPositionOfMinimum const pointField& locs ) { - return findMinData(vals, locs).second(); + return FieldOps::findMinData(vals, locs).second(); } @@ -126,7 +67,7 @@ Foam::point Foam::expressions::exprDriver::getPositionOfMaximum const pointField& locs ) { - return findMaxData(vals, locs).second(); + return FieldOps::findMaxData(vals, locs).second(); } diff --git a/src/OpenFOAM/fields/Fields/Field/FieldOps.C b/src/OpenFOAM/fields/Fields/Field/FieldOps.C index 0c9d997166..061dff27a6 100644 --- a/src/OpenFOAM/fields/Fields/Field/FieldOps.C +++ b/src/OpenFOAM/fields/Fields/Field/FieldOps.C @@ -25,6 +25,7 @@ License \*---------------------------------------------------------------------------*/ +#include "PstreamCombineReduceOps.H" #include // * * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * // @@ -154,4 +155,46 @@ void Foam::FieldOps::ternarySelect } +template +Foam::Tuple2 Foam::FieldOps::findMinData +( + const Field& vals, + const Field& data +) +{ + Tuple2 result(pTraits::max, Zero); + + const label i = findMin(vals); + if (i != -1) + { + result.first() = vals[i]; + result.second() = data[i]; + } + + Foam::combineReduce(result, minFirstEqOp()); + return result; +} + + +template +Foam::Tuple2 Foam::FieldOps::findMaxData +( + const Field& vals, + const Field& data +) +{ + Tuple2 result(pTraits::min, Zero); + + const label i = findMax(vals); + if (i != -1) + { + result.first() = vals[i]; + result.second() = data[i]; + } + + Foam::combineReduce(result, maxFirstEqOp()); + return result; +} + + // ************************************************************************* // diff --git a/src/OpenFOAM/fields/Fields/Field/FieldOps.H b/src/OpenFOAM/fields/Fields/Field/FieldOps.H index 47ebf2917f..ebbc9650e9 100644 --- a/src/OpenFOAM/fields/Fields/Field/FieldOps.H +++ b/src/OpenFOAM/fields/Fields/Field/FieldOps.H @@ -39,6 +39,7 @@ SourceFiles #include "flipOp.H" #include "ListOps.H" +#include "Tuple2.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -189,6 +190,26 @@ void ternarySelect } +//- Locate the min value in a field and return it and associated data +// This can be used, for example, to return a value/position combination. +template +Tuple2 findMinData +( + const Field& vals, + const Field& data +); + + +//- Locate the max value in a field and return it and associated data +// This can be used, for example, to return a value/position combination. +template +Tuple2 findMaxData +( + const Field& vals, + const Field& data +); + + } // End namespace FieldOps // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //