From 454f7960b0c249e76a23b3af69439d1e175a6e4c Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Fri, 28 Oct 2022 18:38:24 +0200 Subject: [PATCH] STYLE: expand use of ListLoop macros (#2624) - the old List_FOR_ALL macro only remained in use in relatively few places. Replace with the expanded equivalent and move the looping parameter out of the macro and give an explicit name (eg, loopLen) which simplifies the addition of any loop pragmas in the various TFOR_ALL... macros (for example). --- .../IndirectListBase/IndirectListBase.C | 6 +- .../containers/Lists/List/ListLoopM.H | 5 +- .../Lists/ListOps/ListOpsTemplates.C | 36 +++--- .../FieldField/FieldFieldFunctions.C | 111 ++++++++++++------ .../FieldField/FieldFieldFunctionsM.C | 33 ++++-- .../fields/Fields/Field/FieldFunctions.C | 6 +- src/OpenFOAM/fields/Fields/Field/FieldM.H | 100 ++++++++++++---- 7 files changed, 203 insertions(+), 94 deletions(-) diff --git a/src/OpenFOAM/containers/IndirectLists/IndirectListBase/IndirectListBase.C b/src/OpenFOAM/containers/IndirectLists/IndirectListBase/IndirectListBase.C index 94afdececc..2243f3d8bc 100644 --- a/src/OpenFOAM/containers/IndirectLists/IndirectListBase/IndirectListBase.C +++ b/src/OpenFOAM/containers/IndirectLists/IndirectListBase/IndirectListBase.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2017-2020 OpenCFD Ltd. + Copyright (C) 2017-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -38,7 +38,7 @@ Foam::label Foam::IndirectListBase::find if (pos >= 0 && len) { - List_CONST_ACCESS(T, values_, vals); + const T* const vals = values_.begin(); while (pos < len) { @@ -69,7 +69,7 @@ Foam::label Foam::IndirectListBase::rfind pos = addr_.size()-1; } - List_CONST_ACCESS(T, values_, vals); + const T* const vals = values_.begin(); while (pos >= 0) { diff --git a/src/OpenFOAM/containers/Lists/List/ListLoopM.H b/src/OpenFOAM/containers/Lists/List/ListLoopM.H index cd7d5ad655..60479fdda5 100644 --- a/src/OpenFOAM/containers/Lists/List/ListLoopM.H +++ b/src/OpenFOAM/containers/Lists/List/ListLoopM.H @@ -29,8 +29,8 @@ Description \*---------------------------------------------------------------------------*/ -#ifndef ListLoopM_H -#define ListLoopM_H +#ifndef Foam_ListLoopM_H +#define Foam_ListLoopM_H // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // Element access looping @@ -43,6 +43,7 @@ Description #define List_CONST_ACCESS(type, f, fp) \ const type* const __restrict__ fp = (f).begin() +// Loop over all elements #define List_FOR_ALL(f, i) \ const label _n##i = (f).size(); \ for (label i=0; i<_n##i; ++i) diff --git a/src/OpenFOAM/containers/Lists/ListOps/ListOpsTemplates.C b/src/OpenFOAM/containers/Lists/ListOps/ListOpsTemplates.C index bcdeb8ea18..9f990ec861 100644 --- a/src/OpenFOAM/containers/Lists/ListOps/ListOpsTemplates.C +++ b/src/OpenFOAM/containers/Lists/ListOps/ListOpsTemplates.C @@ -26,10 +26,6 @@ License \*---------------------------------------------------------------------------*/ -#include -#include "ListOps.H" -#include "ListLoopM.H" - // * * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * // template @@ -1324,15 +1320,14 @@ Foam::List Foam::ListOps::create List output(len); - if (len) - { - List_ACCESS(T, output, out); - List_CONST_ACCESS(T2, input, in); + // ie, std::transform(input.begin(), input.end(), output.begin(), op); - for (label i = 0; i < len; ++i) - { - out[i] = op(in[i]); - } + const T2* in = input.begin(); + T* out = output.begin(); + + for (label i = 0; i < len; ++i) + { + out[i] = op(in[i]); } return output; @@ -1351,16 +1346,15 @@ Foam::List Foam::ListOps::create List output(len); - if (len) - { - T* out = output.begin(); + // ie, std::transform(first, last, output.begin(), op); - while (first != last) - { - *out = op(*first); - ++first; - ++out; - } + T* out = output.begin(); + + while (first != last) + { + *out = op(*first); + ++first; + ++out; } return output; diff --git a/src/OpenFOAM/fields/FieldFields/FieldField/FieldFieldFunctions.C b/src/OpenFOAM/fields/FieldFields/FieldField/FieldFieldFunctions.C index ee2bba60b6..41c4cd93fe 100644 --- a/src/OpenFOAM/fields/FieldFields/FieldField/FieldFieldFunctions.C +++ b/src/OpenFOAM/fields/FieldFields/FieldField/FieldFieldFunctions.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2019 OpenCFD Ltd. + Copyright (C) 2019-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -47,7 +47,9 @@ void component const direction d ) { - forAll(sf, i) + const label loopLen = (sf).size(); + + for (label i = 0; i < loopLen; ++i) { component(sf[i], f[i], d); } @@ -57,7 +59,9 @@ void component template class Field, class Type> void T(FieldField& f1, const FieldField& f2) { - forAll(f1, i) + const label loopLen = (f1).size(); + + for (label i = 0; i < loopLen; ++i) { T(f1[i], f2[i]); } @@ -71,7 +75,9 @@ void pow const FieldField& vf ) { - forAll(f, i) + const label loopLen = (f).size(); + + for (label i = 0; i < loopLen; ++i) { pow(f[i], vf[i]); } @@ -122,7 +128,9 @@ void sqr const FieldField& vf ) { - forAll(f, i) + const label loopLen = (f).size(); + + for (label i = 0; i < loopLen; ++i) { sqr(f[i], vf[i]); } @@ -165,7 +173,9 @@ void magSqr const FieldField& f ) { - forAll(sf, i) + const label loopLen = (sf).size(); + + for (label i = 0; i < loopLen; ++i) { magSqr(sf[i], f[i]); } @@ -210,7 +220,9 @@ void mag const FieldField& f ) { - forAll(sf, i) + const label loopLen = (sf).size(); + + for (label i = 0; i < loopLen; ++i) { mag(sf[i], f[i]); } @@ -255,7 +267,9 @@ void cmptMax const FieldField& f ) { - forAll(cf, i) + const label loopLen = (cf).size(); + + for (label i = 0; i < loopLen; ++i) { cmptMax(cf[i], f[i]); } @@ -304,7 +318,9 @@ void cmptMin const FieldField& f ) { - forAll(cf, i) + const label loopLen = (cf).size(); + + for (label i = 0; i < loopLen; ++i) { cmptMin(cf[i], f[i]); } @@ -353,7 +369,9 @@ void cmptAv const FieldField& f ) { - forAll(cf, i) + const label loopLen = (cf).size(); + + for (label i = 0; i < loopLen; ++i) { cmptAv(cf[i], f[i]); } @@ -402,7 +420,9 @@ void cmptMag const FieldField& f ) { - forAll(cf, i) + const label loopLen = (cf).size(); + + for (label i = 0; i < loopLen; ++i) { cmptMag(cf[i], f[i]); } @@ -451,7 +471,9 @@ Type max(const FieldField& f) { Type result = pTraits::min; - forAll(f, i) + const label loopLen = (f).size(); + + for (label i = 0; i < loopLen; ++i) { if (f[i].size()) { @@ -471,7 +493,9 @@ Type min(const FieldField& f) { Type result = pTraits::max; - forAll(f, i) + const label loopLen = (f).size(); + + for (label i = 0; i < loopLen; ++i) { if (f[i].size()) { @@ -488,14 +512,16 @@ TMP_UNARY_FUNCTION(Type, min) template class Field, class Type> Type sum(const FieldField& f) { - Type Sum = Zero; + Type result = Zero; - forAll(f, i) + const label loopLen = (f).size(); + + for (label i = 0; i < loopLen; ++i) { - Sum += sum(f[i]); + result += sum(f[i]); } - return Sum; + return result; } TMP_UNARY_FUNCTION(Type, sum) @@ -507,7 +533,9 @@ typename typeOfMag::type sumMag(const FieldField& f) magType result = Zero; - forAll(f, i) + const label loopLen = (f).size(); + + for (label i = 0; i < loopLen; ++i) { result += sumMag(f[i]); } @@ -520,21 +548,20 @@ TMP_UNARY_FUNCTION(typename typeOfMag::type, sumMag) template class Field, class Type> Type average(const FieldField& f) { - if (f.size()) + label n = 0; + + const label loopLen = (f).size(); + + for (label i = 0; i < loopLen; ++i) { - label n = 0; + n += f[i].size(); + } - forAll(f, i) - { - n += f[i].size(); - } + if (n) + { + Type avrg = sum(f)/n; - if (n) - { - Type avrg = sum(f)/n; - - return avrg; - } + return avrg; } WarningInFunction @@ -551,7 +578,9 @@ MinMax minMax(const FieldField& f) { MinMax result; - forAll(f, i) + const label loopLen = (f).size(); + + for (label i = 0; i < loopLen; ++i) { result += minMax(f[i]); } @@ -566,7 +595,9 @@ scalarMinMax minMaxMag(const FieldField& f) { scalarMinMax result; - forAll(f, i) + const label loopLen = (f).size(); + + for (label i = 0; i < loopLen; ++i) { result += minMaxMag(f[i]); } @@ -605,7 +636,9 @@ Type gAverage(const FieldField& f) { label n = 0; - forAll(f, i) + const label loopLen = (f).size(); + + for (label i = 0; i < loopLen; ++i) { n += f[i].size(); } @@ -675,7 +708,9 @@ void opFunc \ const FieldField& f2 \ ) \ { \ - forAll(f, i) \ + const label loopLen = (f).size(); \ + \ + for (label i = 0; i < loopLen; ++i) \ { \ opFunc(f[i], f1[i], f2[i]); \ } \ @@ -811,7 +846,9 @@ void opFunc \ const VectorSpace& vs \ ) \ { \ - forAll(f, i) \ + const label loopLen = (f).size(); \ + \ + for (label i = 0; i < loopLen; ++i) \ { \ opFunc(f[i], f1[i], vs); \ } \ @@ -881,7 +918,9 @@ void opFunc \ const FieldField& f1 \ ) \ { \ - forAll(f, i) \ + const label loopLen = (f).size(); \ + \ + for (label i = 0; i < loopLen; ++i) \ { \ opFunc(f[i], vs, f1[i]); \ } \ diff --git a/src/OpenFOAM/fields/FieldFields/FieldField/FieldFieldFunctionsM.C b/src/OpenFOAM/fields/FieldFields/FieldField/FieldFieldFunctionsM.C index 0c4ffc367f..500cd8d54e 100644 --- a/src/OpenFOAM/fields/FieldFields/FieldField/FieldFieldFunctionsM.C +++ b/src/OpenFOAM/fields/FieldFields/FieldField/FieldFieldFunctionsM.C @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation + Copyright (C) 2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -39,7 +40,9 @@ void Func \ const FieldField& f \ ) \ { \ - forAll(res, i) \ + const label loopLen = (res).size(); \ + \ + for (label i = 0; i < loopLen; ++i) \ { \ Func(res[i], f[i]); \ } \ @@ -83,7 +86,9 @@ void OpFunc \ const FieldField& f \ ) \ { \ - forAll(res, i) \ + const label loopLen = (res).size(); \ + \ + for (label i = 0; i < loopLen; ++i) \ { \ OpFunc(res[i], f[i]); \ } \ @@ -128,7 +133,9 @@ void Func \ const FieldField& f2 \ ) \ { \ - forAll(f, i) \ + const label loopLen = (f).size(); \ + \ + for (label i = 0; i < loopLen; ++i) \ { \ Func(f[i], f1[i], f2[i]); \ } \ @@ -212,7 +219,9 @@ void Func \ const FieldField& f2 \ ) \ { \ - forAll(f, i) \ + const label loopLen = (f).size(); \ + \ + for (label i = 0; i < loopLen; ++i) \ { \ Func(f[i], s, f2[i]); \ } \ @@ -260,7 +269,9 @@ void Func \ const Type2& s \ ) \ { \ - forAll(f, i) \ + const label loopLen = (f).size(); \ + \ + for (label i = 0; i < loopLen; ++i) \ { \ Func(f[i], f1[i], s); \ } \ @@ -315,7 +326,9 @@ void OpFunc \ const FieldField& f2 \ ) \ { \ - forAll(f, i) \ + const label loopLen = (f).size(); \ + \ + for (label i = 0; i < loopLen; ++i) \ { \ OpFunc(f[i], f1[i], f2[i]); \ } \ @@ -399,7 +412,9 @@ void OpFunc \ const FieldField& f2 \ ) \ { \ - forAll(f, i) \ + const label loopLen = (f).size(); \ + \ + for (label i = 0; i < loopLen; ++i) \ { \ OpFunc(f[i], s, f2[i]); \ } \ @@ -447,7 +462,9 @@ void OpFunc \ const Type2& s \ ) \ { \ - forAll(f, i) \ + const label loopLen = (f).size(); \ + \ + for (label i = 0; i < loopLen; ++i) \ { \ OpFunc(f[i], f1[i], s); \ } \ diff --git a/src/OpenFOAM/fields/Fields/Field/FieldFunctions.C b/src/OpenFOAM/fields/Fields/Field/FieldFunctions.C index 0c5091fab6..9111ce62f9 100644 --- a/src/OpenFOAM/fields/Fields/Field/FieldFunctions.C +++ b/src/OpenFOAM/fields/Fields/Field/FieldFunctions.C @@ -481,13 +481,13 @@ sumProd(const UList& f1, const UList& f2) template Type sumCmptProd(const UList& f1, const UList& f2) { - Type SumProd = Zero; + Type result = Zero; if (f1.size() && (f1.size() == f2.size())) { TFOR_ALL_S_OP_FUNC_F_F ( Type, - SumProd, + result, +=, cmptMultiply, Type, @@ -496,7 +496,7 @@ Type sumCmptProd(const UList& f1, const UList& f2) f2 ) } - return SumProd; + return result; } diff --git a/src/OpenFOAM/fields/Fields/Field/FieldM.H b/src/OpenFOAM/fields/Fields/Field/FieldM.H index 44ab5910c7..307796eae3 100644 --- a/src/OpenFOAM/fields/Fields/Field/FieldM.H +++ b/src/OpenFOAM/fields/Fields/Field/FieldM.H @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation + Copyright (C) 2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -30,8 +31,8 @@ Description \*---------------------------------------------------------------------------*/ -#ifndef FieldM_H -#define FieldM_H +#ifndef Foam_FieldM_H +#define Foam_FieldM_H #include "error.H" #include "ListLoopM.H" @@ -123,12 +124,17 @@ void checkFields List_CONST_ACCESS(typeF2, f2, f2P); \ \ /* Loop: f1 OP FUNC(f2) */ \ - List_FOR_ALL(f1, i) \ + const label loopLen = (f1).size(); \ + \ + /* pragmas... */ \ + for (label i = 0; i < loopLen; ++i) \ { \ (f1P[i]) OP FUNC(f2P[i]); \ } +// Member function : this f1 OP f2.FUNC() + #define TFOR_ALL_F_OP_F_FUNC(typeF1, f1, OP, typeF2, f2, FUNC) \ \ /* Check fields have same size */ \ @@ -139,7 +145,10 @@ void checkFields List_CONST_ACCESS(typeF2, f2, f2P); \ \ /* Loop: f1 OP f2.FUNC() */ \ - List_FOR_ALL(f1, i) \ + const label loopLen = (f1).size(); \ + \ + /* pragmas... */ \ + for (label i = 0; i < loopLen; ++i) \ { \ (f1P[i]) OP (f2P[i]).FUNC(); \ } @@ -158,7 +167,10 @@ void checkFields List_CONST_ACCESS(typeF3, f3, f3P); \ \ /* Loop: f1 OP FUNC(f2, f3) */ \ - List_FOR_ALL(f1, i) \ + const label loopLen = (f1).size(); \ + \ + /* pragmas... */ \ + for (label i = 0; i < loopLen; ++i) \ { \ (f1P[i]) OP FUNC((f2P[i]), (f3P[i])); \ } @@ -176,7 +188,10 @@ void checkFields List_CONST_ACCESS(typeF2, f2, f2P); \ \ /* Loop: s OP FUNC(f1, f2) */ \ - List_FOR_ALL(f1, i) \ + const label loopLen = (f1).size(); \ + \ + /* pragmas, reduction... */ \ + for (label i = 0; i < loopLen; ++i) \ { \ (s) OP FUNC((f1P[i]), (f2P[i])); \ } @@ -194,7 +209,10 @@ void checkFields List_CONST_ACCESS(typeF2, f2, f2P); \ \ /* Loop: f1 OP FUNC(f2, s) */ \ - List_FOR_ALL(f1, i) \ + const label loopLen = (f1).size(); \ + \ + /* pragmas... */ \ + for (label i = 0; i < loopLen; ++i) \ { \ (f1P[i]) OP FUNC((f2P[i]), (s)); \ } @@ -208,7 +226,10 @@ void checkFields List_CONST_ACCESS(typeF, f, fP); \ \ /* Loop: s1 OP FUNC(f, s2) */ \ - List_FOR_ALL(f, i) \ + const label loopLen = (f).size(); \ + \ + /* pragmas, reduction... */ \ + for (label i = 0; i < loopLen; ++i) \ { \ (s1) OP FUNC((fP[i]), (s2)); \ } @@ -226,7 +247,10 @@ void checkFields List_CONST_ACCESS(typeF2, f2, f2P); \ \ /* Loop: f1 OP1 f2 OP2 f3 */ \ - List_FOR_ALL(f1, i) \ + const label loopLen = (f1).size(); \ + \ + /* pragmas... */ \ + for (label i = 0; i < loopLen; ++i) \ { \ (f1P[i]) OP FUNC((s), (f2P[i])); \ } @@ -240,7 +264,10 @@ void checkFields List_ACCESS(typeF1, f1, f1P); \ \ /* Loop: f1 OP FUNC(s1, s2) */ \ - List_FOR_ALL(f1, i) \ + const label loopLen = (f1).size(); \ + \ + /* pragmas... */ \ + for (label i = 0; i < loopLen; ++i) \ { \ (f1P[i]) OP FUNC((s1), (s2)); \ } @@ -258,7 +285,10 @@ void checkFields List_CONST_ACCESS(typeF2, f2, f2P); \ \ /* Loop: f1 OP f2 FUNC(s) */ \ - List_FOR_ALL(f1, i) \ + const label loopLen = (f1).size(); \ + \ + /* pragmas... */ \ + for (label i = 0; i < loopLen; ++i) \ { \ (f1P[i]) OP (f2P[i]) FUNC((s)); \ } @@ -277,7 +307,10 @@ void checkFields List_CONST_ACCESS(typeF3, f3, f3P); \ \ /* Loop: f1 OP1 f2 OP2 f3 */ \ - List_FOR_ALL(f1, i) \ + const label loopLen = (f1).size(); \ + \ + /* pragmas... */ \ + for (label i = 0; i < loopLen; ++i) \ { \ (f1P[i]) OP1 (f2P[i]) OP2 (f3P[i]); \ } @@ -295,7 +328,10 @@ void checkFields List_CONST_ACCESS(typeF2, f2, f2P); \ \ /* Loop: f1 OP1 s OP2 f2 */ \ - List_FOR_ALL(f1, i) \ + const label loopLen = (f1).size(); \ + \ + /* pragmas... */ \ + for (label i = 0; i < loopLen; ++i) \ { \ (f1P[i]) OP1 (s) OP2 (f2P[i]); \ } @@ -313,7 +349,10 @@ void checkFields List_CONST_ACCESS(typeF2, f2, f2P); \ \ /* Loop f1 OP1 s OP2 f2 */ \ - List_FOR_ALL(f1, i) \ + const label loopLen = (f1).size(); \ + \ + /* pragmas... */ \ + for (label i = 0; i < loopLen; ++i) \ { \ (f1P[i]) OP1 (f2P[i]) OP2 (s); \ } @@ -331,11 +370,15 @@ void checkFields List_CONST_ACCESS(typeF2, f2, f2P); \ \ /* Loop: f1 OP f2 */ \ - List_FOR_ALL(f1, i) \ + const label loopLen = (f1).size(); \ + \ + /* pragmas... */ \ + for (label i = 0; i < loopLen; ++i) \ { \ (f1P[i]) OP (f2P[i]); \ } + // Member operator : this field f1 OP1 OP2 f2 #define TFOR_ALL_F_OP_OP_F(typeF1, f1, OP1, OP2, typeF2, f2) \ @@ -348,7 +391,10 @@ void checkFields List_CONST_ACCESS(typeF2, f2, f2P); \ \ /* Loop: f1 OP1 OP2 f2 */ \ - List_FOR_ALL(f1, i) \ + const label loopLen = (f1).size(); \ + \ + /* pragmas... */ \ + for (label i = 0; i < loopLen; ++i) \ { \ (f1P[i]) OP1 OP2 (f2P[i]); \ } @@ -362,7 +408,10 @@ void checkFields List_ACCESS(typeF, f, fP); \ \ /* Loop: f OP s */ \ - List_FOR_ALL(f, i) \ + const label loopLen = (f).size(); \ + \ + /* pragmas... */ \ + for (label i = 0; i < loopLen; ++i) \ { \ (fP[i]) OP (s); \ } @@ -378,7 +427,10 @@ void checkFields List_CONST_ACCESS(typeF, f, fP); \ \ /* Loop: s OP f */ \ - List_FOR_ALL(f, i) \ + const label loopLen = (f).size(); \ + \ + /* pragmas, reduction... */ \ + for (label i = 0; i < loopLen; ++i) \ { \ (s) OP (fP[i]); \ } @@ -392,8 +444,11 @@ void checkFields List_CONST_ACCESS(typeF1, f1, f1P); \ List_CONST_ACCESS(typeF2, f2, f2P); \ \ - /* Loop: s OP f */ \ - List_FOR_ALL(f1, i) \ + /* Loop: s OP1 f1 OP2 f2 */ \ + const label loopLen = (f1).size(); \ + \ + /* pragmas, reduction... */ \ + for (label i = 0; i < loopLen; ++i) \ { \ (s) OP1 (f1P[i]) OP2 (f2P[i]); \ } @@ -407,7 +462,10 @@ void checkFields List_CONST_ACCESS(typeF, f, fP); \ \ /* Loop: s OP FUNC(f) */ \ - List_FOR_ALL(f, i) \ + const label loopLen = (f).size(); \ + \ + /* pragmas, reduction... */ \ + for (label i = 0; i < loopLen; ++i) \ { \ (s) OP FUNC(fP[i]); \ }