FreeFOAM The Cross-Platform CFD Toolkit
FieldM.H File Reference

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...


Detailed Description

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 dependency graph for FieldM.H:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Namespaces

namespace  Foam
 Namespace for OpenFOAM.

Macros

#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 *)

Macro Definition Documentation

#define TFOR_ALL_F_OP_FUNC_F (   typeF1,
  f1,
  OP,
  FUNC,
  typeF2,
  f2 
)
Value:
\
/* 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)); \

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 
)
Value:
\
/* 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(); \

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 
)
Value:
\
/* 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 
)
Value:
\
/* 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,
 
)
Value:
\
/* 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)); \

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 
)
Value:
\
/* 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 
)
Value:
\
/* 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)); \

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 
)
Value:
\
/* 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)); \

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,
 
)
Value:
\
/* 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)); \

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 
)
Value:
\
/* 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); \

Definition at line 268 of file FieldM.H.

#define TFOR_ALL_F_OP_S_OP_F (   typeF1,
  f1,
  OP1,
  typeS,
  s,
  OP2,
  typeF2,
  f2 
)
Value:
\
/* 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); \

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,
 
)
Value:
\
/* 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); \

Definition at line 304 of file FieldM.H.

#define TFOR_ALL_F_OP_F (   typeF1,
  f1,
  OP,
  typeF2,
  f2 
)
Value:
\
/* 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); \

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 
)
Value:
\
/* 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); \

Definition at line 338 of file FieldM.H.

Referenced by Field< Type >::negate().

#define TFOR_ALL_F_OP_S (   typeF,
  f,
  OP,
  typeS,
 
)
Value:
\
/* 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); \

Definition at line 356 of file FieldM.H.

Referenced by Field< Type >::operator=().

#define TFOR_ALL_S_OP_F (   typeS,
  s,
  OP,
  typeF,
  f 
)
Value:
\
/* 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 
)
Value:
\
/* 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 
)
Value:
\
/* 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().