30 #define UNARY_FUNCTION(ReturnType, Type1, Func, Dfunc) \
33 tmp<DimensionedField<ReturnType, GeoMesh, Field>> Func \
35 const DimensionedField<Type1, GeoMesh, PrimitiveField>& df1 \
38 tmp<DimensionedField<ReturnType, GeoMesh, Field>> tRes \
40 DimensionedField<ReturnType, GeoMesh, Field>::New \
42 #Func "(" + df1.name() + ')', \
44 Dfunc(df1.dimensions()) \
48 Func(tRes.ref().primitiveFieldRef(), df1.primitiveField()); \
54 tmp<DimensionedField<ReturnType, GeoMesh, Field>> Func \
56 const tmp<DimensionedField<Type1, GeoMesh, PrimitiveField>>& tdf1 \
59 const DimensionedField<Type1, GeoMesh, PrimitiveField>& df1 = tdf1(); \
61 tmp<DimensionedField<ReturnType, GeoMesh, Field>> tRes \
63 reuseTmpDimensionedField \
72 #Func "(" + df1.name() + ')', \
73 Dfunc(df1.dimensions()) \
77 Func(tRes.ref().primitiveFieldRef(), df1.primitiveField()); \
87 #define UNARY_OPERATOR(ReturnType, Type1, Op, OpFunc, Dfunc) \
90 tmp<DimensionedField<ReturnType, GeoMesh, Field>> operator Op \
92 const DimensionedField<Type1, GeoMesh, PrimitiveField>& df1 \
95 tmp<DimensionedField<ReturnType, GeoMesh, Field>> tRes \
97 DimensionedField<ReturnType, GeoMesh, Field>::New \
101 Dfunc(df1.dimensions()) \
105 Foam::OpFunc(tRes.ref().primitiveFieldRef(), df1.primitiveField()); \
111 tmp<DimensionedField<ReturnType, GeoMesh, Field>> operator Op \
113 const tmp<DimensionedField<Type1, GeoMesh, PrimitiveField>>& tdf1 \
116 const DimensionedField<Type1, GeoMesh, PrimitiveField>& df1 = tdf1(); \
118 tmp<DimensionedField<ReturnType, GeoMesh, Field>> tRes \
120 reuseTmpDimensionedField \
130 Dfunc(df1.dimensions()) \
134 Foam::OpFunc(tRes.ref().primitiveFieldRef(), df1.primitiveField()); \
144 #define BINARY_FUNCTION(ReturnType, Type1, Type2, Func) \
147 tmp<DimensionedField<ReturnType, GeoMesh, Field>> Func \
149 const DimensionedField<Type1, GeoMesh, PrimitiveField1>& df1, \
150 const DimensionedField<Type2, GeoMesh, PrimitiveField2>& df2 \
153 tmp<DimensionedField<ReturnType, GeoMesh, Field>> tRes \
155 DimensionedField<ReturnType, GeoMesh, Field>::New \
157 #Func "(" + df1.name() + ',' + df2.name() + ')', \
159 Func(df1.dimensions(), df2.dimensions()) \
165 tRes.ref().primitiveFieldRef(), \
166 df1.primitiveField(), \
167 df2.primitiveField() \
174 tmp<DimensionedField<ReturnType, GeoMesh, Field>> Func \
176 const DimensionedField<Type1, GeoMesh, PrimitiveField1>& df1, \
177 const tmp<DimensionedField<Type2, GeoMesh, PrimitiveField2>>& tdf2 \
180 const DimensionedField<Type2, GeoMesh, PrimitiveField2>& df2 = tdf2(); \
182 tmp<DimensionedField<ReturnType, GeoMesh, Field>> tRes \
184 reuseTmpDimensionedField \
193 #Func "(" + df1.name() + ',' + df2.name() + ')', \
194 Func(df1.dimensions(), df2.dimensions()) \
200 tRes.ref().primitiveFieldRef(), \
201 df1.primitiveField(), \
202 df2.primitiveField() \
211 tmp<DimensionedField<ReturnType, GeoMesh, Field>> Func \
213 const tmp<DimensionedField<Type1, GeoMesh, PrimitiveField1>>& tdf1, \
214 const DimensionedField<Type2, GeoMesh, PrimitiveField2>& df2 \
217 const DimensionedField<Type1, GeoMesh, PrimitiveField1>& df1 = tdf1(); \
219 tmp<DimensionedField<ReturnType, GeoMesh, Field>> tRes \
221 reuseTmpDimensionedField \
230 #Func "(" + df1.name() + ',' + df2.name() + ')', \
231 Func(df1.dimensions(), df2.dimensions()) \
237 tRes.ref().primitiveFieldRef(), \
238 df1.primitiveField(), \
239 df2.primitiveField() \
248 tmp<DimensionedField<ReturnType, GeoMesh, Field>> Func \
250 const tmp<DimensionedField<Type1, GeoMesh, PrimitiveField1>>& tdf1, \
251 const tmp<DimensionedField<Type2, GeoMesh, PrimitiveField2>>& tdf2 \
254 const DimensionedField<Type1, GeoMesh, PrimitiveField1>& df1 = tdf1(); \
255 const DimensionedField<Type2, GeoMesh, PrimitiveField2>& df2 = tdf2(); \
257 tmp<DimensionedField<ReturnType, GeoMesh, Field>> tRes \
259 reuseTmpTmpDimensionedField \
271 #Func "(" + df1.name() + ',' + df2.name() + ')', \
272 Func(df1.dimensions(), df2.dimensions()) \
278 tRes.ref().primitiveFieldRef(), \
279 df1.primitiveField(), \
280 df2.primitiveField() \
292 #define BINARY_TYPE_FUNCTION_SF(ReturnType, Type1, Type2, Func) \
295 tmp<DimensionedField<ReturnType, GeoMesh, Field>> Func \
297 const dimensioned<Type1>& dt1, \
298 const DimensionedField<Type2, GeoMesh, PrimitiveField>& df2 \
301 tmp<DimensionedField<ReturnType, GeoMesh, Field>> tRes \
303 DimensionedField<ReturnType, GeoMesh, Field>::New \
305 #Func "(" + dt1.name() + ',' + df2.name() + ')', \
307 Func(dt1.dimensions(), df2.dimensions()) \
311 Func(tRes.ref().primitiveFieldRef(), dt1.value(), df2.primitiveField()); \
317 tmp<DimensionedField<ReturnType, GeoMesh, Field>> Func \
320 const DimensionedField<Type2, GeoMesh, PrimitiveField>& df2 \
323 return Func(dimensioned<Type1>(t1), df2); \
328 tmp<DimensionedField<ReturnType, GeoMesh, Field>> Func \
330 const dimensioned<Type1>& dt1, \
331 const tmp<DimensionedField<Type2, GeoMesh, PrimitiveField>>& tdf2 \
334 const DimensionedField<Type2, GeoMesh, PrimitiveField>& df2 = tdf2(); \
336 tmp<DimensionedField<ReturnType, GeoMesh, Field>> tRes \
338 reuseTmpDimensionedField \
347 #Func "(" + dt1.name() + ',' + df2.name() + ')', \
348 Func(dt1.dimensions(), df2.dimensions()) \
352 Func(tRes.ref().primitiveFieldRef(), dt1.value(), df2.primitiveField()); \
360 tmp<DimensionedField<ReturnType, GeoMesh, Field>> Func \
363 const tmp<DimensionedField<Type2, GeoMesh, PrimitiveField>>& tdf2 \
366 return Func(dimensioned<Type2>(t1), tdf2); \
370 #define BINARY_TYPE_FUNCTION_FS(ReturnType, Type1, Type2, Func) \
373 tmp<DimensionedField<ReturnType, GeoMesh, Field>> Func \
375 const DimensionedField<Type1, GeoMesh, PrimitiveField>& df1, \
376 const dimensioned<Type2>& dt2 \
379 tmp<DimensionedField<ReturnType, GeoMesh, Field>> tRes \
381 DimensionedField<ReturnType, GeoMesh, Field>::New \
383 #Func "(" + df1.name() + ',' + dt2.name() + ')', \
385 Func(df1.dimensions(), dt2.dimensions()) \
389 Func(tRes.ref().primitiveFieldRef(), df1.primitiveField(), dt2.value()); \
395 tmp<DimensionedField<ReturnType, GeoMesh, Field>> Func \
397 const DimensionedField<Type1, GeoMesh, PrimitiveField>& df1, \
401 return Func(df1, dimensioned<Type2>(t2)); \
406 tmp<DimensionedField<ReturnType, GeoMesh, Field>> Func \
408 const tmp<DimensionedField<Type1, GeoMesh, PrimitiveField>>& tdf1, \
409 const dimensioned<Type2>& dt2 \
412 const DimensionedField<Type1, GeoMesh, PrimitiveField>& df1 = tdf1(); \
414 tmp<DimensionedField<ReturnType, GeoMesh, Field>> tRes \
416 reuseTmpDimensionedField \
425 #Func "(" + df1.name() + ',' + dt2.name() + ')', \
426 Func(df1.dimensions(), dt2.dimensions()) \
430 Func(tRes.ref().primitiveFieldRef(), df1.primitiveField(), dt2.value()); \
438 tmp<DimensionedField<ReturnType, GeoMesh, Field>> Func \
440 const tmp<DimensionedField<Type1, GeoMesh, PrimitiveField>>& tdf1, \
444 return Func(tdf1, dimensioned<Type2>(t2)); \
448 #define BINARY_TYPE_FUNCTION(ReturnType, Type1, Type2, Func) \
449 BINARY_TYPE_FUNCTION_SF(ReturnType, Type1, Type2, Func) \
450 BINARY_TYPE_FUNCTION_FS(ReturnType, Type1, Type2, Func)
455 #define BINARY_OPERATOR(ReturnType, Type1, Type2, Op, OpName, OpFunc) \
458 tmp<DimensionedField<ReturnType, GeoMesh, Field>> operator Op \
460 const DimensionedField<Type1, GeoMesh, PrimitiveField1>& df1, \
461 const DimensionedField<Type2, GeoMesh, PrimitiveField2>& df2 \
464 tmp<DimensionedField<ReturnType, GeoMesh, Field>> tRes \
466 DimensionedField<ReturnType, GeoMesh, Field>::New \
468 '(' + df1.name() + OpName + df2.name() + ')', \
470 df1.dimensions() Op df2.dimensions() \
476 tRes.ref().primitiveFieldRef(), \
477 df1.primitiveField(), \
478 df2.primitiveField() \
485 tmp<DimensionedField<ReturnType, GeoMesh, Field>> operator Op \
487 const DimensionedField<Type1, GeoMesh, PrimitiveField1>& df1, \
488 const tmp<DimensionedField<Type2, GeoMesh, PrimitiveField2>>& tdf2 \
491 const DimensionedField<Type2, GeoMesh, PrimitiveField2>& df2 = tdf2(); \
493 tmp<DimensionedField<ReturnType, GeoMesh, Field>> tRes \
495 reuseTmpDimensionedField \
504 '(' + df1.name() + OpName + df2.name() + ')', \
505 df1.dimensions() Op df2.dimensions() \
511 tRes.ref().primitiveFieldRef(), \
512 df1.primitiveField(), \
513 df2.primitiveField() \
522 tmp<DimensionedField<ReturnType, GeoMesh, Field>> operator Op \
524 const tmp<DimensionedField<Type1, GeoMesh, PrimitiveField1>>& tdf1, \
525 const DimensionedField<Type2, GeoMesh, PrimitiveField2>& df2 \
528 const DimensionedField<Type1, GeoMesh, PrimitiveField1>& df1 = tdf1(); \
530 tmp<DimensionedField<ReturnType, GeoMesh, Field>> tRes \
532 reuseTmpDimensionedField \
541 '(' + df1.name() + OpName + df2.name() + ')', \
542 df1.dimensions() Op df2.dimensions() \
548 tRes.ref().primitiveFieldRef(), \
549 df1.primitiveField(), \
550 df2.primitiveField() \
559 tmp<DimensionedField<ReturnType, GeoMesh, Field>> operator Op \
561 const tmp<DimensionedField<Type1, GeoMesh, PrimitiveField1>>& tdf1, \
562 const tmp<DimensionedField<Type2, GeoMesh, PrimitiveField2>>& tdf2 \
565 const DimensionedField<Type1, GeoMesh, PrimitiveField1>& df1 = tdf1(); \
566 const DimensionedField<Type2, GeoMesh, PrimitiveField2>& df2 = tdf2(); \
568 tmp<DimensionedField<ReturnType, GeoMesh, Field>> tRes \
570 reuseTmpTmpDimensionedField \
582 '(' + df1.name() + OpName + df2.name() + ')', \
583 df1.dimensions() Op df2.dimensions() \
589 tRes.ref().primitiveFieldRef(), \
590 df1.primitiveField(), \
591 df2.primitiveField() \
603 #define BINARY_TYPE_OPERATOR_SF(ReturnType, Type1, Type2, Op, OpName, OpFunc) \
606 tmp<DimensionedField<ReturnType, GeoMesh, Field>> operator Op \
608 const dimensioned<Type1>& dt1, \
609 const DimensionedField<Type2, GeoMesh, PrimitiveField>& df2 \
612 tmp<DimensionedField<ReturnType, GeoMesh, Field>> tRes \
614 DimensionedField<ReturnType, GeoMesh, Field>::New \
616 '(' + dt1.name() + OpName + df2.name() + ')', \
618 dt1.dimensions() Op df2.dimensions() \
624 tRes.ref().primitiveFieldRef(), \
626 df2.primitiveField() \
633 tmp<DimensionedField<ReturnType, GeoMesh, Field>> operator Op \
636 const DimensionedField<Type2, GeoMesh, PrimitiveField>& df2 \
639 return dimensioned<Type1>(t1) Op df2; \
644 tmp<DimensionedField<ReturnType, GeoMesh, Field>> operator Op \
646 const dimensioned<Type1>& dt1, \
647 const tmp<DimensionedField<Type2, GeoMesh, PrimitiveField>>& tdf2 \
650 const DimensionedField<Type2, GeoMesh, PrimitiveField>& df2 = tdf2(); \
652 tmp<DimensionedField<ReturnType, GeoMesh, Field>> tRes \
654 reuseTmpDimensionedField \
663 '(' + dt1.name() + OpName + df2.name() + ')', \
664 dt1.dimensions() Op df2.dimensions() \
670 tRes.ref().primitiveFieldRef(), \
672 tdf2().primitiveField() \
681 tmp<DimensionedField<ReturnType, GeoMesh, Field>> operator Op \
684 const tmp<DimensionedField<Type2, GeoMesh, PrimitiveField>>& tdf2 \
687 return dimensioned<Type1>(t1) Op tdf2; \
691 #define BINARY_TYPE_OPERATOR_FS(ReturnType, Type1, Type2, Op, OpName, OpFunc) \
694 tmp<DimensionedField<ReturnType, GeoMesh, Field>> operator Op \
696 const DimensionedField<Type1, GeoMesh, PrimitiveField>& df1, \
697 const dimensioned<Type2>& dt2 \
700 tmp<DimensionedField<ReturnType, GeoMesh, Field>> tRes \
702 DimensionedField<ReturnType, GeoMesh, Field>::New \
704 '(' + df1.name() + OpName + dt2.name() + ')', \
706 df1.dimensions() Op dt2.dimensions() \
712 tRes.ref().primitiveFieldRef(), \
713 df1.primitiveField(), \
721 tmp<DimensionedField<ReturnType, GeoMesh, Field>> operator Op \
723 const DimensionedField<Type1, GeoMesh, PrimitiveField>& df1, \
727 return df1 Op dimensioned<Type2>(t2); \
732 tmp<DimensionedField<ReturnType, GeoMesh, Field>> operator Op \
734 const tmp<DimensionedField<Type1, GeoMesh, PrimitiveField>>& tdf1, \
735 const dimensioned<Type2>& dt2 \
738 const DimensionedField<Type1, GeoMesh, PrimitiveField>& df1 = tdf1(); \
740 tmp<DimensionedField<ReturnType, GeoMesh, Field>> tRes \
742 reuseTmpDimensionedField \
751 '(' + df1.name() + OpName + dt2.name() + ')', \
752 df1.dimensions() Op dt2.dimensions() \
758 tRes.ref().primitiveFieldRef(), \
759 tdf1().primitiveField(), \
769 tmp<DimensionedField<ReturnType, GeoMesh, Field>> operator Op \
771 const tmp<DimensionedField<Type1, GeoMesh, PrimitiveField>>& tdf1, \
775 return tdf1 Op dimensioned<Type2>(t2); \
778 #define BINARY_TYPE_OPERATOR(ReturnType, Type1, Type2, Op, OpName, OpFunc) \
779 BINARY_TYPE_OPERATOR_SF(ReturnType, Type1, Type2, Op, OpName, OpFunc) \
780 BINARY_TYPE_OPERATOR_FS(ReturnType, Type1, Type2, Op, OpName, OpFunc)