30 #define UNARY_FUNCTION(ReturnType, Type1, Func, Dfunc) \
33 tmp<DimensionedField<ReturnType, GeoMesh>> Func \
35 const DimensionedField<Type1, GeoMesh>& df1 \
38 tmp<DimensionedField<ReturnType, GeoMesh>> tRes \
40 DimensionedField<ReturnType, GeoMesh>::New \
42 #Func "(" + df1.name() + ')', \
44 Dfunc(df1.dimensions()) \
48 Func(tRes.ref().field(), df1.field()); \
54 tmp<DimensionedField<ReturnType, GeoMesh>> Func \
56 const tmp<DimensionedField<Type1, GeoMesh>>& tdf1 \
59 const DimensionedField<Type1, GeoMesh>& df1 = tdf1(); \
61 tmp<DimensionedField<ReturnType, GeoMesh>> tRes \
63 reuseTmpDimensionedField<ReturnType, Type1, GeoMesh>::New \
66 #Func "(" + df1.name() + ')', \
67 Dfunc(df1.dimensions()) \
71 Func(tRes.ref().field(), df1.field()); \
81 #define UNARY_OPERATOR(ReturnType, Type1, Op, OpFunc, Dfunc) \
84 tmp<DimensionedField<ReturnType, GeoMesh>> operator Op \
86 const DimensionedField<Type1, GeoMesh>& df1 \
89 tmp<DimensionedField<ReturnType, GeoMesh>> tRes \
91 DimensionedField<ReturnType, GeoMesh>::New \
95 Dfunc(df1.dimensions()) \
99 Foam::OpFunc(tRes.ref().field(), df1.field()); \
105 tmp<DimensionedField<ReturnType, GeoMesh>> operator Op \
107 const tmp<DimensionedField<Type1, GeoMesh>>& tdf1 \
110 const DimensionedField<Type1, GeoMesh>& df1 = tdf1(); \
112 tmp<DimensionedField<ReturnType, GeoMesh>> tRes \
114 reuseTmpDimensionedField<ReturnType, Type1, GeoMesh>::New \
118 Dfunc(df1.dimensions()) \
122 Foam::OpFunc(tRes.ref().field(), df1.field()); \
132 #define BINARY_FUNCTION(ReturnType, Type1, Type2, Func) \
135 tmp<DimensionedField<ReturnType, GeoMesh>> Func \
137 const DimensionedField<Type1, GeoMesh>& df1, \
138 const DimensionedField<Type2, GeoMesh>& df2 \
141 tmp<DimensionedField<ReturnType, GeoMesh>> tRes \
143 DimensionedField<ReturnType, GeoMesh>::New \
145 #Func "(" + df1.name() + ',' + df2.name() + ')', \
147 Func(df1.dimensions(), df2.dimensions()) \
151 Func(tRes.ref().field(), df1.field(), df2.field()); \
157 tmp<DimensionedField<ReturnType, GeoMesh>> Func \
159 const DimensionedField<Type1, GeoMesh>& df1, \
160 const tmp<DimensionedField<Type2, GeoMesh>>& tdf2 \
163 const DimensionedField<Type2, GeoMesh>& df2 = tdf2(); \
165 tmp<DimensionedField<ReturnType, GeoMesh>> tRes \
167 reuseTmpDimensionedField<ReturnType, Type2, GeoMesh>::New \
170 #Func "(" + df1.name() + ',' + df2.name() + ')', \
171 Func(df1.dimensions(), df2.dimensions()) \
175 Func(tRes.ref().field(), df1.field(), df2.field()); \
183 tmp<DimensionedField<ReturnType, GeoMesh>> Func \
185 const tmp<DimensionedField<Type1, GeoMesh>>& tdf1, \
186 const DimensionedField<Type2, GeoMesh>& df2 \
189 const DimensionedField<Type1, GeoMesh>& df1 = tdf1(); \
191 tmp<DimensionedField<ReturnType, GeoMesh>> tRes \
193 reuseTmpDimensionedField<ReturnType, Type1, GeoMesh>::New \
196 #Func "(" + df1.name() + ',' + df2.name() + ')', \
197 Func(df1.dimensions(), df2.dimensions()) \
201 Func(tRes.ref().field(), df1.field(), df2.field()); \
209 tmp<DimensionedField<ReturnType, GeoMesh>> Func \
211 const tmp<DimensionedField<Type1, GeoMesh>>& tdf1, \
212 const tmp<DimensionedField<Type2, GeoMesh>>& tdf2 \
215 const DimensionedField<Type1, GeoMesh>& df1 = tdf1(); \
216 const DimensionedField<Type2, GeoMesh>& df2 = tdf2(); \
218 tmp<DimensionedField<ReturnType, GeoMesh>> tRes \
220 reuseTmpTmpDimensionedField<ReturnType, Type1, Type2, GeoMesh>::New \
224 #Func "(" + df1.name() + ',' + df2.name() + ')', \
225 Func(df1.dimensions(), df2.dimensions()) \
229 Func(tRes.ref().field(), df1.field(), df2.field()); \
240 #define BINARY_TYPE_FUNCTION_SF(ReturnType, Type1, Type2, Func) \
243 tmp<DimensionedField<ReturnType, GeoMesh>> Func \
245 const dimensioned<Type1>& dt1, \
246 const DimensionedField<Type2, GeoMesh>& df2 \
249 tmp<DimensionedField<ReturnType, GeoMesh>> tRes \
251 DimensionedField<ReturnType, GeoMesh>::New \
253 #Func "(" + dt1.name() + ',' + df2.name() + ')', \
255 Func(dt1.dimensions(), df2.dimensions()) \
259 Func(tRes.ref().field(), dt1.value(), df2.field()); \
265 tmp<DimensionedField<ReturnType, GeoMesh>> Func \
268 const DimensionedField<Type2, GeoMesh>& df2 \
271 return Func(dimensioned<Type1>(t1), df2); \
276 tmp<DimensionedField<ReturnType, GeoMesh>> Func \
278 const dimensioned<Type1>& dt1, \
279 const tmp<DimensionedField<Type2, GeoMesh>>& tdf2 \
282 const DimensionedField<Type2, GeoMesh>& df2 = tdf2(); \
284 tmp<DimensionedField<ReturnType, GeoMesh>> tRes \
286 reuseTmpDimensionedField<ReturnType, Type2, GeoMesh>::New \
289 #Func "(" + dt1.name() + ',' + df2.name() + ')', \
290 Func(dt1.dimensions(), df2.dimensions()) \
294 Func(tRes.ref().field(), dt1.value(), df2.field()); \
302 tmp<DimensionedField<ReturnType, GeoMesh>> Func \
305 const tmp<DimensionedField<Type2, GeoMesh>>& tdf2 \
308 return Func(dimensioned<Type2>(t1), tdf2); \
312 #define BINARY_TYPE_FUNCTION_FS(ReturnType, Type1, Type2, Func) \
315 tmp<DimensionedField<ReturnType, GeoMesh>> Func \
317 const DimensionedField<Type1, GeoMesh>& df1, \
318 const dimensioned<Type2>& dt2 \
321 tmp<DimensionedField<ReturnType, GeoMesh>> tRes \
323 DimensionedField<ReturnType, GeoMesh>::New \
325 #Func "(" + df1.name() + ',' + dt2.name() + ')', \
327 Func(df1.dimensions(), dt2.dimensions()) \
331 Func(tRes.ref().field(), df1.field(), dt2.value()); \
337 tmp<DimensionedField<ReturnType, GeoMesh>> Func \
339 const DimensionedField<Type1, GeoMesh>& df1, \
343 return Func(df1, dimensioned<Type2>(t2)); \
348 tmp<DimensionedField<ReturnType, GeoMesh>> Func \
350 const tmp<DimensionedField<Type1, GeoMesh>>& tdf1, \
351 const dimensioned<Type2>& dt2 \
354 const DimensionedField<Type1, GeoMesh>& df1 = tdf1(); \
356 tmp<DimensionedField<ReturnType, GeoMesh>> tRes \
358 reuseTmpDimensionedField<ReturnType, Type1, GeoMesh>::New \
361 #Func "(" + df1.name() + ',' + dt2.name() + ')', \
362 Func(df1.dimensions(), dt2.dimensions()) \
366 Func(tRes.ref().field(), df1.field(), dt2.value()); \
374 tmp<DimensionedField<ReturnType, GeoMesh>> Func \
376 const tmp<DimensionedField<Type1, GeoMesh>>& tdf1, \
380 return Func(tdf1, dimensioned<Type2>(t2)); \
384 #define BINARY_TYPE_FUNCTION(ReturnType, Type1, Type2, Func) \
385 BINARY_TYPE_FUNCTION_SF(ReturnType, Type1, Type2, Func) \
386 BINARY_TYPE_FUNCTION_FS(ReturnType, Type1, Type2, Func)
391 #define BINARY_OPERATOR(ReturnType, Type1, Type2, Op, OpName, OpFunc) \
394 tmp<DimensionedField<ReturnType, GeoMesh>> operator Op \
396 const DimensionedField<Type1, GeoMesh>& df1, \
397 const DimensionedField<Type2, GeoMesh>& df2 \
400 tmp<DimensionedField<ReturnType, GeoMesh>> tRes \
402 DimensionedField<ReturnType, GeoMesh>::New \
404 '(' + df1.name() + OpName + df2.name() + ')', \
406 df1.dimensions() Op df2.dimensions() \
410 Foam::OpFunc(tRes.ref().field(), df1.field(), df2.field()); \
416 tmp<DimensionedField<ReturnType, GeoMesh>> operator Op \
418 const DimensionedField<Type1, GeoMesh>& df1, \
419 const tmp<DimensionedField<Type2, GeoMesh>>& tdf2 \
422 const DimensionedField<Type2, GeoMesh>& df2 = tdf2(); \
424 tmp<DimensionedField<ReturnType, GeoMesh>> tRes \
426 reuseTmpDimensionedField<ReturnType, Type2, GeoMesh>::New \
429 '(' + df1.name() + OpName + df2.name() + ')', \
430 df1.dimensions() Op df2.dimensions() \
434 Foam::OpFunc(tRes.ref().field(), df1.field(), df2.field()); \
442 tmp<DimensionedField<ReturnType, GeoMesh>> operator Op \
444 const tmp<DimensionedField<Type1, GeoMesh>>& tdf1, \
445 const DimensionedField<Type2, GeoMesh>& df2 \
448 const DimensionedField<Type1, GeoMesh>& df1 = tdf1(); \
450 tmp<DimensionedField<ReturnType, GeoMesh>> tRes \
452 reuseTmpDimensionedField<ReturnType, Type1, GeoMesh>::New \
455 '(' + df1.name() + OpName + df2.name() + ')', \
456 df1.dimensions() Op df2.dimensions() \
460 Foam::OpFunc(tRes.ref().field(), df1.field(), df2.field()); \
468 tmp<DimensionedField<ReturnType, GeoMesh>> operator Op \
470 const tmp<DimensionedField<Type1, GeoMesh>>& tdf1, \
471 const tmp<DimensionedField<Type2, GeoMesh>>& tdf2 \
474 const DimensionedField<Type1, GeoMesh>& df1 = tdf1(); \
475 const DimensionedField<Type2, GeoMesh>& df2 = tdf2(); \
477 tmp<DimensionedField<ReturnType, GeoMesh>> tRes \
479 reuseTmpTmpDimensionedField<ReturnType, Type1, Type2, GeoMesh>::New \
483 '(' + df1.name() + OpName + df2.name() + ')', \
484 df1.dimensions() Op df2.dimensions() \
488 Foam::OpFunc(tRes.ref().field(), df1.field(), df2.field()); \
499 #define BINARY_TYPE_OPERATOR_SF(ReturnType, Type1, Type2, Op, OpName, OpFunc) \
502 tmp<DimensionedField<ReturnType, GeoMesh>> operator Op \
504 const dimensioned<Type1>& dt1, \
505 const DimensionedField<Type2, GeoMesh>& df2 \
508 tmp<DimensionedField<ReturnType, GeoMesh>> tRes \
510 DimensionedField<ReturnType, GeoMesh>::New \
512 '(' + dt1.name() + OpName + df2.name() + ')', \
514 dt1.dimensions() Op df2.dimensions() \
518 Foam::OpFunc(tRes.ref().field(), dt1.value(), df2.field()); \
524 tmp<DimensionedField<ReturnType, GeoMesh>> operator Op \
527 const DimensionedField<Type2, GeoMesh>& df2 \
530 return dimensioned<Type1>(t1) Op df2; \
535 tmp<DimensionedField<ReturnType, GeoMesh>> operator Op \
537 const dimensioned<Type1>& dt1, \
538 const tmp<DimensionedField<Type2, GeoMesh>>& tdf2 \
541 const DimensionedField<Type2, GeoMesh>& df2 = tdf2(); \
543 tmp<DimensionedField<ReturnType, GeoMesh>> tRes \
545 reuseTmpDimensionedField<ReturnType, Type2, GeoMesh>::New \
548 '(' + dt1.name() + OpName + df2.name() + ')', \
549 dt1.dimensions() Op df2.dimensions() \
553 Foam::OpFunc(tRes.ref().field(), dt1.value(), tdf2().field()); \
561 tmp<DimensionedField<ReturnType, GeoMesh>> operator Op \
564 const tmp<DimensionedField<Type2, GeoMesh>>& tdf2 \
567 return dimensioned<Type1>(t1) Op tdf2; \
571 #define BINARY_TYPE_OPERATOR_FS(ReturnType, Type1, Type2, Op, OpName, OpFunc) \
574 tmp<DimensionedField<ReturnType, GeoMesh>> operator Op \
576 const DimensionedField<Type1, GeoMesh>& df1, \
577 const dimensioned<Type2>& dt2 \
580 tmp<DimensionedField<ReturnType, GeoMesh>> tRes \
582 DimensionedField<ReturnType, GeoMesh>::New \
584 '(' + df1.name() + OpName + dt2.name() + ')', \
586 df1.dimensions() Op dt2.dimensions() \
590 Foam::OpFunc(tRes.ref().field(), df1.field(), dt2.value()); \
596 tmp<DimensionedField<ReturnType, GeoMesh>> operator Op \
598 const DimensionedField<Type1, GeoMesh>& df1, \
602 return df1 Op dimensioned<Type2>(t2); \
607 tmp<DimensionedField<ReturnType, GeoMesh>> operator Op \
609 const tmp<DimensionedField<Type1, GeoMesh>>& tdf1, \
610 const dimensioned<Type2>& dt2 \
613 const DimensionedField<Type1, GeoMesh>& df1 = tdf1(); \
615 tmp<DimensionedField<ReturnType, GeoMesh>> tRes \
617 reuseTmpDimensionedField<ReturnType, Type1, GeoMesh>::New \
620 '(' + df1.name() + OpName + dt2.name() + ')', \
621 df1.dimensions() Op dt2.dimensions() \
625 Foam::OpFunc(tRes.ref().field(), tdf1().field(), dt2.value()); \
633 tmp<DimensionedField<ReturnType, GeoMesh>> operator Op \
635 const tmp<DimensionedField<Type1, GeoMesh>>& tdf1, \
639 return tdf1 Op dimensioned<Type2>(t2); \
642 #define BINARY_TYPE_OPERATOR(ReturnType, Type1, Type2, Op, OpName, OpFunc) \
643 BINARY_TYPE_OPERATOR_SF(ReturnType, Type1, Type2, Op, OpName, OpFunc) \
644 BINARY_TYPE_OPERATOR_FS(ReturnType, Type1, Type2, Op, OpName, OpFunc)