28 #define TEMPLATE template<class Type>
48 void T(Field<Type>& res,
const UList<Type>&
f);
51 template<
class Type, direction r>
58 template<
class Type, direction r>
62 const SubField<Type>& vf
66 template<
class Type, direction r>
67 tmp<Field<typename powProduct<Type, r>::type>>
75 template<
class Type, direction r>
76 tmp<Field<typename powProduct<Type, r>::type>>
79 const SubField<Type>&
f,
84 template<
class Type, direction r>
85 tmp<Field<typename powProduct<Type, r>::type>>
88 const tmp<Field<Type>>&
tf,
102 tmp<Field<typename outerProduct<Type, Type>::type>>
103 sqr(
const Field<Type>&
f);
106 tmp<Field<typename outerProduct<Type, Type>::type>>
107 sqr(
const SubField<Type>&
f);
110 tmp<Field<typename outerProduct<Type, Type>::type>>
111 sqr(
const tmp<Field<Type>>&
tf);
115 void magSqr(Field<scalar>& res,
const UList<Type>&
f);
118 tmp<Field<scalar>>
magSqr(
const Field<Type>&
f);
121 tmp<Field<scalar>>
magSqr(
const SubField<Type>&
f);
124 tmp<Field<scalar>>
magSqr(
const tmp<Field<Type>>&
tf);
128 void mag(Field<scalar>& res,
const UList<Type>&
f);
131 tmp<Field<scalar>>
mag(
const Field<Type>&
f);
134 tmp<Field<scalar>>
mag(
const SubField<Type>&
f);
137 tmp<Field<scalar>>
mag(
const tmp<Field<Type>>&
tf);
144 tmp<Field<typename Field<Type>::cmptType>>
cmptMax(
const Field<Type>&
f);
147 tmp<Field<typename Field<Type>::cmptType>>
cmptMax(
const SubField<Type>&
f);
150 tmp<Field<typename Field<Type>::cmptType>>
158 tmp<Field<typename Field<Type>::cmptType>>
cmptMin(
const Field<Type>&
f);
161 tmp<Field<typename Field<Type>::cmptType>>
cmptMin(
const SubField<Type>&
f);
164 tmp<Field<typename Field<Type>::cmptType>>
172 tmp<Field<typename Field<Type>::cmptType>>
cmptAv(
const Field<Type>&
f);
175 tmp<Field<typename Field<Type>::cmptType>>
cmptAv(
const SubField<Type>&
f);
178 tmp<Field<typename Field<Type>::cmptType>>
cmptAv(
const tmp<Field<Type>>&
tf);
182 void cmptMag(Field<Type>& res,
const UList<Type>&
f);
185 tmp<Field<Type>>
cmptMag(
const Field<Type>&
f);
188 tmp<Field<Type>>
cmptMag(
const SubField<Type>&
f);
191 tmp<Field<Type>>
cmptMag(
const tmp<Field<Type>>&
tf);
221 #define PRODUCT_OPERATOR(product, Op, OpFunc) \
223 template<class Type1, class Type2> \
226 Field<typename product<Type1, Type2>::type>& res, \
227 const UList<Type1>& f1, \
228 const UList<Type2>& f2 \
231 template<class Type1, class Type2> \
232 tmp<Field<typename product<Type1, Type2>::type>> \
233 operator Op(const Field<Type1>& f1, const Field<Type2>& f2); \
235 template<class Type1, class Type2> \
236 tmp<Field<typename product<Type1, Type2>::type>> \
237 operator Op(const Field<Type1>& f1, const SubField<Type2>& f2); \
239 template<class Type1, class Type2> \
240 tmp<Field<typename product<Type1, Type2>::type>> \
241 operator Op(const SubField<Type1>& f1, const Field<Type2>& f2); \
243 template<class Type1, class Type2> \
244 tmp<Field<typename product<Type1, Type2>::type>> \
245 operator Op(const SubField<Type1>& f1, const SubField<Type2>& f2); \
247 template<class Type1, class Type2> \
248 tmp<Field<typename product<Type1, Type2>::type>> \
249 operator Op(const Field<Type1>& f1, const tmp<Field<Type2>>& tf2); \
251 template<class Type1, class Type2> \
252 tmp<Field<typename product<Type1, Type2>::type>> \
253 operator Op(const SubField<Type1>& f1, const tmp<Field<Type2>>& tf2); \
255 template<class Type1, class Type2> \
256 tmp<Field<typename product<Type1, Type2>::type>> \
257 operator Op(const tmp<Field<Type1>>& tf1, const Field<Type2>& f2); \
259 template<class Type1, class Type2> \
260 tmp<Field<typename product<Type1, Type2>::type>> \
261 operator Op(const tmp<Field<Type1>>& tf1, const SubField<Type2>& f2); \
263 template<class Type1, class Type2> \
264 tmp<Field<typename product<Type1, Type2>::type>> \
265 operator Op(const tmp<Field<Type1>>& tf1, const tmp<Field<Type2>>& tf2); \
267 template<class Type, class Form, class Cmpt, direction nCmpt> \
270 Field<typename product<Type, Form>::type>& res, \
271 const UList<Type>& f1, \
272 const VectorSpace<Form,Cmpt,nCmpt>& vs \
275 template<class Type, class Form, class Cmpt, direction nCmpt> \
276 tmp<Field<typename product<Type, Form>::type>> \
277 operator Op(const Field<Type>& f1, const VectorSpace<Form,Cmpt,nCmpt>& vs); \
279 template<class Type, class Form, class Cmpt, direction nCmpt> \
280 tmp<Field<typename product<Type, Form>::type>> \
281 operator Op(const SubField<Type>& f1, const VectorSpace<Form,Cmpt,nCmpt>& vs); \
283 template<class Type, class Form, class Cmpt, direction nCmpt> \
284 tmp<Field<typename product<Type, Form>::type>> \
285 operator Op(const tmp<Field<Type>>&tf1,const VectorSpace<Form,Cmpt,nCmpt>&vs); \
287 template<class Form, class Cmpt, direction nCmpt, class Type> \
290 Field<typename product<Form, Type>::type>& res, \
291 const VectorSpace<Form,Cmpt,nCmpt>& vs, \
292 const UList<Type>& f1 \
295 template<class Form, class Cmpt, direction nCmpt, class Type> \
296 tmp<Field<typename product<Form, Type>::type>> \
297 operator Op(const VectorSpace<Form,Cmpt,nCmpt>& vs, const Field<Type>& f1); \
299 template<class Form, class Cmpt, direction nCmpt, class Type> \
300 tmp<Field<typename product<Form, Type>::type>> \
301 operator Op(const VectorSpace<Form,Cmpt,nCmpt>& vs, const SubField<Type>& f1); \
303 template<class Form, class Cmpt, direction nCmpt, class Type> \
304 tmp<Field<typename product<Form, Type>::type>> \
305 operator Op(const VectorSpace<Form,Cmpt,nCmpt>&vs,const tmp<Field<Type>>&tf1);
315 #undef PRODUCT_OPERATOR
#define BINARY_FUNCTION(ReturnType, Type1, Type2, Func)
#define UNARY_OPERATOR(ReturnType, Type1, Op, OpFunc, Dfunc)
#define BINARY_OPERATOR(ReturnType, Type1, Type2, Op, OpName, OpFunc)
#define BINARY_TYPE_OPERATOR_SF(ReturnType, Type1, Type2, Op, OpName, OpFunc)
#define BINARY_TYPE_OPERATOR_FS(ReturnType, Type1, Type2, Op, OpName, OpFunc)
#define BINARY_TYPE_FUNCTION(ReturnType, Type1, Type2, Func)
High performance macro functions for Field<Type> algebra. These expand using either array element acc...
#define PRODUCT_OPERATOR(product, Op, OpFunc)
pTraits< Type >::cmptType cmptType
Component type.
typeOfRank< typename pTraits< arg1 >::cmptType, direction(pTraits< arg1 >::rank)+direction(pTraits< arg2 >::rank) >::type type
symmTypeOfRank< typename pTraits< arg1 >::cmptType, arg2 *direction(pTraits< arg1 >::rank) >::type type
void subtract(GeometricField< typename typeOfSum< Type1, Type2 >::type, GeoMesh, PrimitiveField1 > &gf, const GeometricField< Type1, GeoMesh, PrimitiveField2 > &gf1, const GeometricField< Type2, GeoMesh, PrimitiveField3 > &gf2)
void outer(GeometricField< typename outerProduct< Type1, Type2 >::type, GeoMesh, PrimitiveField1 > &gf, const GeometricField< Type1, GeoMesh, PrimitiveField2 > &gf1, const GeometricField< Type2, GeoMesh, PrimitiveField3 > &gf2)
void add(GeometricField< typename typeOfSum< Type1, Type2 >::type, GeoMesh, PrimitiveField1 > &gf, const GeometricField< Type1, GeoMesh, PrimitiveField2 > &gf1, const GeometricField< Type2, GeoMesh, PrimitiveField3 > &gf2)
tmp< DimensionedField< Type, GeoMesh, Field > > cmptMultiply(const DimensionedField< Type, GeoMesh, PrimitiveField1 > &df1, const DimensionedField< Type, GeoMesh, PrimitiveField2 > &df2)
void divide(pointPatchField< Type > &f, const pointPatchField< Type > &f1, const pointPatchField< scalar > &f2)
void cmptMax(Field< typename Field< Type >::cmptType > &res, const UList< Type > &f)
tmp< DimensionedField< typename outerProduct< Type, Type >::type, GeoMesh, Field >> sqr(const DimensionedField< Type, GeoMesh, PrimitiveField > &df)
void component(GeometricField< typename GeometricField< Type, GeoMesh, PrimitiveField1 >::cmptType, GeoMesh, PrimitiveField1 > &gcf, const GeometricField< Type, GeoMesh, PrimitiveField2 > &gf, const direction d)
tmp< DimensionedField< Type, GeoMesh, Field > > cmptDivide(const DimensionedField< Type, GeoMesh, PrimitiveField1 > &df1, const DimensionedField< Type, GeoMesh, PrimitiveField2 > &df2)
void dotdot(GeometricField< typename scalarProduct< Type1, Type2 >::type, GeoMesh, PrimitiveField1 > &gf, const GeometricField< Type1, GeoMesh, PrimitiveField2 > &gf1, const GeometricField< Type2, GeoMesh, PrimitiveField3 > &gf2)
dimensioned< Type > min(const DimensionedField< Type, GeoMesh, PrimitiveField > &df)
void cmptMin(Field< typename Field< Type >::cmptType > &res, const UList< Type > &f)
void cross(GeometricField< typename crossProduct< Type1, Type2 >::type, GeoMesh, PrimitiveField1 > &gf, const GeometricField< Type1, GeoMesh, PrimitiveField2 > &gf1, const GeometricField< Type2, GeoMesh, PrimitiveField3 > &gf2)
tmp< DimensionedField< typename powProduct< Type, r >::type, GeoMesh, Field > > pow(const DimensionedField< Type, GeoMesh, PrimitiveField > &df, typename powProduct< Type, r >::type)
tmp< DimensionedField< typename DimensionedField< Type, GeoMesh, PrimitiveField >::cmptType, GeoMesh, Field >> cmptAv(const DimensionedField< Type, GeoMesh, PrimitiveField > &df)
tmp< DimensionedField< scalar, GeoMesh, Field > > mag(const DimensionedField< Type, GeoMesh, PrimitiveField > &df)
void multiply(pointPatchField< Type > &f, const pointPatchField< scalar > &f1, const pointPatchField< Type > &f2)
void negate(pointPatchField< Type > &f, const pointPatchField< Type > &f1)
tmp< DimensionedField< Type, GeoMesh, Field > > cmptMag(const DimensionedField< Type, GeoMesh, PrimitiveField > &df)
tmp< DimensionedField< scalar, GeoMesh, Field > > magSqr(const DimensionedField< Type, GeoMesh, PrimitiveField > &df)
void T(GeometricField< Type, GeoMesh, PrimitiveField1 > &gf, const GeometricField< Type, GeoMesh, PrimitiveField2 > &gf1)
dimensioned< Type > max(const DimensionedField< Type, GeoMesh, PrimitiveField > &df)
void dot(GeometricField< typename innerProduct< Type1, Type2 >::type, GeoMesh, PrimitiveField1 > &gf, const GeometricField< Type1, GeoMesh, PrimitiveField2 > &gf1, const GeometricField< Type2, GeoMesh, PrimitiveField3 > &gf2)