High performance macro functions for Field<Type> algebra. These expand using either array element access (for vector machines) or pointer dereferencing for scalar machines as appropriate. More...
High performance macro functions for Field<Type> algebra. These expand using either array element access (for vector machines) or pointer dereferencing for scalar machines as appropriate.
Definition in file FieldM.H.
#include "src/OpenFOAM/db/error/error.H"
#include "src/OpenFOAM/containers/Lists/List/ListLoopM.H"
Go to the source code of this file.
Namespaces | |
namespace | Foam |
Namespace for OpenFOAM. | |
Defines | |
#define | TFOR_ALL_F_OP_FUNC_F(typeF1, f1, OP, FUNC, typeF2, f2) |
#define | TFOR_ALL_F_OP_F_FUNC(typeF1, f1, OP, typeF2, f2, FUNC) |
#define | TFOR_ALL_F_OP_FUNC_F_F(typeF1, f1, OP, FUNC, typeF2, f2, typeF3, f3) |
#define | TFOR_ALL_S_OP_FUNC_F_F(typeS, s, OP, FUNC, typeF1, f1, typeF2, f2) |
#define | TFOR_ALL_F_OP_FUNC_F_S(typeF1, f1, OP, FUNC, typeF2, f2, typeS, s) |
#define | TFOR_ALL_S_OP_FUNC_F_S(typeS1, s1, OP, FUNC, typeF, f, typeS2, s2) |
#define | TFOR_ALL_F_OP_FUNC_S_F(typeF1, f1, OP, FUNC, typeS, s, typeF2, f2) |
#define | TFOR_ALL_F_OP_FUNC_S_S(typeF1, f1, OP, FUNC, typeS1, s1, typeS2, s2) |
#define | TFOR_ALL_F_OP_F_FUNC_S(typeF1, f1, OP, typeF2, f2, FUNC, typeS, s) |
#define | TFOR_ALL_F_OP_F_OP_F(typeF1, f1, OP1, typeF2, f2, OP2, typeF3, f3) |
#define | TFOR_ALL_F_OP_S_OP_F(typeF1, f1, OP1, typeS, s, OP2, typeF2, f2) |
#define | TFOR_ALL_F_OP_F_OP_S(typeF1, f1, OP1, typeF2, f2, OP2, typeS, s) |
#define | TFOR_ALL_F_OP_F(typeF1, f1, OP, typeF2, f2) |
#define | TFOR_ALL_F_OP_OP_F(typeF1, f1, OP1, OP2, typeF2, f2) |
#define | TFOR_ALL_F_OP_S(typeF, f, OP, typeS, s) |
#define | TFOR_ALL_S_OP_F(typeS, s, OP, typeF, f) |
#define | TFOR_ALL_S_OP_F_OP_F(typeS, s, OP1, typeF1, f1, OP2, typeF2, f2) |
#define | TFOR_ALL_S_OP_FUNC_F(typeS, s, OP, FUNC, typeF, f) |
Functions | |
template<class Type1 , class Type2 > | |
void | checkFields (const UList< Type1 > &, const UList< Type2 > &, const char *) |
template<class Type1 , class Type2 , class Type3 > | |
void | checkFields (const UList< Type1 > &, const UList< Type2 > &, const UList< Type3 > &, const char *) |
#define TFOR_ALL_F_OP_FUNC_F | ( | typeF1, | |
f1, | |||
OP, | |||
FUNC, | |||
typeF2, | |||
f2 | |||
) |
\ /* check the two fields have same Field<Type> mesh */ \ checkFields(f1, f2, "f1 " #OP " " #FUNC "(f2)"); \ \ /* set access to f1, f2 and f3 at end of each field */ \ List_ACCESS(typeF1, f1, f1P); \ List_CONST_ACCESS(typeF2, f2, f2P); \ \ /* loop through fields performing f1 OP1 f2 OP2 f3 */ \ List_FOR_ALL(f1, i) \ List_ELEM(f1, f1P, i) OP FUNC(List_ELEM(f2, f2P, i)); \ List_END_FOR_ALL \
Definition at line 121 of file FieldM.H.
Referenced by Foam::cmptAv(), Foam::cmptMag(), Foam::cmptMax(), Foam::cmptMin(), Foam::inv(), Foam::mag(), Foam::magSqr(), and Foam::sqr().
#define TFOR_ALL_F_OP_F_FUNC | ( | typeF1, | |
f1, | |||
OP, | |||
typeF2, | |||
f2, | |||
FUNC | |||
) |
\ /* check the two fields have same Field<Type> mesh */ \ checkFields(f1, f2, "f1 " #OP " f2" #FUNC); \ \ /* set access to f1, f2 and f3 at end of each field */ \ List_ACCESS(typeF1, f1, f1P); \ List_CONST_ACCESS(typeF2, f2, f2P); \ \ /* loop through fields performing f1 OP1 f2 OP2 f3 */ \ List_FOR_ALL(f1, i) \ List_ELEM(f1, f1P, i) OP List_ELEM(f2, f2P, i).FUNC(); \ List_END_FOR_ALL \
Definition at line 136 of file FieldM.H.
Referenced by Foam::T().
#define TFOR_ALL_F_OP_FUNC_F_F | ( | typeF1, | |
f1, | |||
OP, | |||
FUNC, | |||
typeF2, | |||
f2, | |||
typeF3, | |||
f3 | |||
) |
\ /* check the three fields have same Field<Type> mesh */ \ checkFields(f1, f2, f3, "f1 " #OP " " #FUNC "(f2, f3)"); \ \ /* set access to f1, f2 and f3 at end of each field */ \ List_ACCESS(typeF1, f1, f1P); \ List_CONST_ACCESS(typeF2, f2, f2P); \ List_CONST_ACCESS(typeF3, f3, f3P); \ \ /* loop through fields performing f1 OP1 f2 OP2 f3 */ \ List_FOR_ALL(f1, i) \ List_ELEM(f1, f1P, i) \ OP FUNC(List_ELEM(f2, f2P, i), List_ELEM(f3, f3P, i)); \ List_END_FOR_ALL \
Definition at line 153 of file FieldM.H.
Referenced by Foam::transform().
#define TFOR_ALL_S_OP_FUNC_F_F | ( | typeS, | |
s, | |||
OP, | |||
FUNC, | |||
typeF1, | |||
f1, | |||
typeF2, | |||
f2 | |||
) |
\ /* check the two fields have same Field<Type> mesh */ \ checkFields(f1, f2, "s " #OP " " #FUNC "(f1, f2)"); \ \ /* set access to f1 and f2 at end of each field */ \ List_CONST_ACCESS(typeF1, f1, f1P); \ List_CONST_ACCESS(typeF2, f2, f2P); \ \ /* loop through fields performing s OP FUNC(f1, f2) */ \ List_FOR_ALL(f1, i) \ (s) OP FUNC(List_ELEM(f1, f1P, i), List_ELEM(f2, f2P, i)); \ List_END_FOR_ALL \
Definition at line 172 of file FieldM.H.
Referenced by Foam::sumCmptProd().
#define TFOR_ALL_F_OP_FUNC_F_S | ( | typeF1, | |
f1, | |||
OP, | |||
FUNC, | |||
typeF2, | |||
f2, | |||
typeS, | |||
s | |||
) |
\ /* check the two fields have same Field<Type> mesh */ \ checkFields(f1, f2, "f1 " #OP " " #FUNC "(f2, s)"); \ \ /* set access to f1, f2 and f3 at end of each field */ \ List_ACCESS(typeF1, f1, f1P); \ List_CONST_ACCESS(typeF2, f2, f2P); \ \ /* loop through fields performing f1 OP1 f2 OP2 f3 */ \ List_FOR_ALL(f1, i) \ List_ELEM(f1, f1P, i) OP FUNC(List_ELEM(f2, f2P, i), (s)); \ List_END_FOR_ALL
Definition at line 189 of file FieldM.H.
Referenced by Foam::pow().
#define TFOR_ALL_S_OP_FUNC_F_S | ( | typeS1, | |
s1, | |||
OP, | |||
FUNC, | |||
typeF, | |||
f, | |||
typeS2, | |||
s2 | |||
) |
\ /* set access to f at end of field */ \ List_CONST_ACCESS(typeF, f, fP); \ \ /* loop through fields performing f1 OP1 f2 OP2 f3 */ \ List_FOR_ALL(f, i) \ (s1) OP FUNC(List_ELEM(f, fP, i), (s2)); \ List_END_FOR_ALL \
Definition at line 206 of file FieldM.H.
Referenced by Foam::max(), and Foam::min().
#define TFOR_ALL_F_OP_FUNC_S_F | ( | typeF1, | |
f1, | |||
OP, | |||
FUNC, | |||
typeS, | |||
s, | |||
typeF2, | |||
f2 | |||
) |
\ /* check the two fields have same Field<Type> mesh */ \ checkFields(f1, f2, "f1 " #OP " " #FUNC "(s, f2)"); \ \ /* set access to f1, f2 and f3 at end of each field */ \ List_ACCESS(typeF1, f1, f1P); \ List_CONST_ACCESS(typeF2, f2, f2P); \ \ /* loop through fields performing f1 OP1 f2 OP2 f3 */ \ List_FOR_ALL(f1, i) \ List_ELEM(f1, f1P, i) OP FUNC((s), List_ELEM(f2, f2P, i)); \ List_END_FOR_ALL \
Definition at line 219 of file FieldM.H.
Referenced by Field< Type >::replace(), Foam::stabilise(), and Foam::transform().
#define TFOR_ALL_F_OP_FUNC_S_S | ( | typeF1, | |
f1, | |||
OP, | |||
FUNC, | |||
typeS1, | |||
s1, | |||
typeS2, | |||
s2 | |||
) |
\ /* set access to f1 at end of field */ \ List_ACCESS(typeF1, f1, f1P); \ \ /* loop through fields performing f1 OP1 FUNC(s1, s2) */ \ List_FOR_ALL(f1, i) \ List_ELEM(f1, f1P, i) OP FUNC((s1), (s2)); \ List_END_FOR_ALL \
Definition at line 236 of file FieldM.H.
Referenced by Field< Type >::replace().
#define TFOR_ALL_F_OP_F_FUNC_S | ( | typeF1, | |
f1, | |||
OP, | |||
typeF2, | |||
f2, | |||
FUNC, | |||
typeS, | |||
s | |||
) |
\ /* check the two fields have same Field<Type> mesh */ \ checkFields(f1, f2, "f1 " #OP " f2 " #FUNC "(s)"); \ \ /* set access to f1, f2 and f3 at end of each field */ \ List_ACCESS(typeF1, f1, f1P); \ List_CONST_ACCESS(typeF2, f2, f2P); \ \ /* loop through fields performing f1 OP1 f2 OP2 f3 */ \ List_FOR_ALL(f1, i) \ List_ELEM(f1, f1P, i) OP List_ELEM(f2, f2P, i) FUNC((s)); \ List_END_FOR_ALL \
Definition at line 249 of file FieldM.H.
Referenced by Foam::component().
#define TFOR_ALL_F_OP_F_OP_F | ( | typeF1, | |
f1, | |||
OP1, | |||
typeF2, | |||
f2, | |||
OP2, | |||
typeF3, | |||
f3 | |||
) |
\ /* check the three fields have same Field<Type> mesh */ \ checkFields(f1, f2, f3, "f1 " #OP1 " f2 " #OP2 " f3"); \ \ /* set access to f1, f2 and f3 at end of each field */ \ List_ACCESS(typeF1, f1, f1P); \ List_CONST_ACCESS(typeF2, f2, f2P); \ List_CONST_ACCESS(typeF3, f3, f3P); \ \ /* loop through fields performing f1 OP1 f2 OP2 f3 */ \ List_FOR_ALL(f1, i) \ List_ELEM(f1, f1P, i) OP1 List_ELEM(f2, f2P, i) \ OP2 List_ELEM(f3, f3P, i); \ List_END_FOR_ALL \
#define TFOR_ALL_F_OP_S_OP_F | ( | typeF1, | |
f1, | |||
OP1, | |||
typeS, | |||
s, | |||
OP2, | |||
typeF2, | |||
f2 | |||
) |
\ /* check the two fields have same Field<Type> mesh */ \ checkFields(f1, f2, "f1 " #OP1 " s " #OP2 " f2"); \ \ /* set access to f1 and f2 at end of each field */ \ List_ACCESS(typeF1, f1, f1P); \ List_CONST_ACCESS(typeF2, f2, f2P); \ \ /* loop through fields performing f1 OP1 s OP2 f2 */ \ List_FOR_ALL(f1, i) \ List_ELEM(f1, f1P, i) OP1 (s) OP2 List_ELEM(f2, f2P, i); \ List_END_FOR_ALL \
Definition at line 287 of file FieldM.H.
Referenced by Foam::transform().
#define TFOR_ALL_F_OP_F_OP_S | ( | typeF1, | |
f1, | |||
OP1, | |||
typeF2, | |||
f2, | |||
OP2, | |||
typeS, | |||
s | |||
) |
\ /* check the two fields have same Field<Type> mesh */ \ checkFields(f1, f2, "f1 " #OP1 " f2 " #OP2 " s"); \ \ /* set access to f1 and f2 at end of each field */ \ List_ACCESS(typeF1, f1, f1P); \ List_CONST_ACCESS(typeF2, f2, f2P); \ \ /* loop through fields performing f1 OP1 s OP2 f2 */ \ List_FOR_ALL(f1, i) \ List_ELEM(f1, f1P, i) OP1 List_ELEM(f2, f2P, i) OP2 (s); \ List_END_FOR_ALL \
#define TFOR_ALL_F_OP_F | ( | typeF1, | |
f1, | |||
OP, | |||
typeF2, | |||
f2 | |||
) |
\ /* check the two fields have same Field<Type> mesh */ \ checkFields(f1, f2, "f1 " #OP " f2"); \ \ /* set pointer to f1P at end of f1 and */ \ /* f2.p at end of f2 */ \ List_ACCESS(typeF1, f1, f1P); \ List_CONST_ACCESS(typeF2, f2, f2P); \ \ /* loop through fields performing f1 OP f2 */ \ List_FOR_ALL(f1, i) \ List_ELEM(f1, f1P, i) OP List_ELEM(f2, f2P, i); \ List_END_FOR_ALL \
Definition at line 321 of file FieldM.H.
Referenced by Foam::transformFieldMask< tensor >().
#define TFOR_ALL_F_OP_OP_F | ( | typeF1, | |
f1, | |||
OP1, | |||
OP2, | |||
typeF2, | |||
f2 | |||
) |
\ /* check the two fields have same Field<Type> mesh */ \ checkFields(f1, f2, #OP1 " " #OP2 " f2"); \ \ /* set pointer to f1P at end of f1 and */ \ /* f2.p at end of f2 */ \ List_ACCESS(typeF1, f1, f1P); \ List_CONST_ACCESS(typeF2, f2, f2P); \ \ /* loop through fields performing f1 OP1 OP2 f2 */ \ List_FOR_ALL(f1, i) \ List_ELEM(f1, f1P, i) OP1 OP2 List_ELEM(f2, f2P, i); \ List_END_FOR_ALL \
Definition at line 338 of file FieldM.H.
Referenced by Field< Type >::negate().
#define TFOR_ALL_F_OP_S | ( | typeF, | |
f, | |||
OP, | |||
typeS, | |||
s | |||
) |
\ /* set access to f at end of field */ \ List_ACCESS(typeF, f, fP); \ \ /* loop through field performing f OP s */ \ List_FOR_ALL(f, i) \ List_ELEM(f, fP, i) OP (s); \ List_END_FOR_ALL \
Definition at line 356 of file FieldM.H.
Referenced by Field< Type >::operator=().
#define TFOR_ALL_S_OP_F | ( | typeS, | |
s, | |||
OP, | |||
typeF, | |||
f | |||
) |
\ /* set access to f at end of field */ \ List_CONST_ACCESS(typeF, f, fP); \ \ /* loop through field performing s OP f */ \ List_FOR_ALL(f, i) \ (s) OP List_ELEM(f, fP, i); \ List_END_FOR_ALL
Definition at line 372 of file FieldM.H.
Referenced by Foam::sum().
#define TFOR_ALL_S_OP_F_OP_F | ( | typeS, | |
s, | |||
OP1, | |||
typeF1, | |||
f1, | |||
OP2, | |||
typeF2, | |||
f2 | |||
) |
\ /* set access to f1 and f2 at end of each field */ \ List_CONST_ACCESS(typeF1, f1, f1P); \ List_CONST_ACCESS(typeF2, f2, f2P); \ \ /* loop through field performing s OP f */ \ List_FOR_ALL(f1, i) \ (s) OP1 List_ELEM(f1, f1P, i) OP2 List_ELEM(f2, f2P, i); \ List_END_FOR_ALL
Definition at line 385 of file FieldM.H.
Referenced by Foam::sumProd().
#define TFOR_ALL_S_OP_FUNC_F | ( | typeS, | |
s, | |||
OP, | |||
FUNC, | |||
typeF, | |||
f | |||
) |
\ /* set access to f at end of field */ \ List_CONST_ACCESS(typeF, f, fP); \ \ /* loop through field performing s OP f */ \ List_FOR_ALL(f, i) \ (s) OP FUNC(List_ELEM(f, fP, i)); \ List_END_FOR_ALL
Definition at line 399 of file FieldM.H.
Referenced by Foam::sumCmptMag(), Foam::sumMag(), and Foam::sumSqr().