35 #define UNARY_FUNCTION(ReturnType, Type1, Func, Dfunc) \
40 GeometricField<ReturnType, GeoMesh, PrimitiveField1>& res, \
41 const GeometricField<Type1, GeoMesh, PrimitiveField2>& gf1 \
44 Foam::Func(res.primitiveFieldRef(), gf1.primitiveField()); \
45 Foam::Func(res.boundaryFieldRef(), gf1.boundaryField()); \
49 tmp<GeometricField<ReturnType, GeoMesh, Field>> Func \
51 const GeometricField<Type1, GeoMesh, PrimitiveField>& gf1 \
54 tmp<GeometricField<ReturnType, GeoMesh, Field>> tRes \
56 GeometricField<ReturnType, GeoMesh, Field>::New \
58 #Func "(" + gf1.name() + ')', \
60 Dfunc(gf1.dimensions()) \
64 Foam::Func(tRes.ref(), gf1); \
70 tmp<GeometricField<ReturnType, GeoMesh, Field>> Func \
72 const tmp<GeometricField<Type1, GeoMesh, PrimitiveField>>& tgf1 \
75 const GeometricField<Type1, GeoMesh, PrimitiveField>& gf1 = tgf1(); \
77 tmp<GeometricField<ReturnType, GeoMesh, Field>> tRes \
79 reuseTmpGeometricField \
80 <ReturnType, Type1, GeoMesh, PrimitiveField>::New \
83 #Func "(" + gf1.name() + ')', \
84 Dfunc(gf1.dimensions()) \
88 Foam::Func(tRes.ref(), gf1); \
98 #define UNARY_OPERATOR(ReturnType, Type1, Op, OpFunc, Dfunc) \
103 GeometricField<ReturnType, GeoMesh, PrimitiveField1>& res, \
104 const GeometricField<Type1, GeoMesh, PrimitiveField2>& gf1 \
107 Foam::OpFunc(res.primitiveFieldRef(), gf1.primitiveField()); \
108 Foam::OpFunc(res.boundaryFieldRef(), gf1.boundaryField()); \
112 tmp<GeometricField<ReturnType, GeoMesh, Field>> operator Op \
114 const GeometricField<Type1, GeoMesh, PrimitiveField>& gf1 \
117 tmp<GeometricField<ReturnType, GeoMesh, Field>> tRes \
119 GeometricField<ReturnType, GeoMesh, Field>::New \
123 Dfunc(gf1.dimensions()) \
127 Foam::OpFunc(tRes.ref(), gf1); \
133 tmp<GeometricField<ReturnType, GeoMesh, Field>> operator Op \
135 const tmp<GeometricField<Type1, GeoMesh, PrimitiveField>>& tgf1 \
138 const GeometricField<Type1, GeoMesh, PrimitiveField>& gf1 = tgf1(); \
140 tmp<GeometricField<ReturnType, GeoMesh, Field>> tRes \
142 reuseTmpGeometricField \
143 <ReturnType, Type1, GeoMesh, PrimitiveField>::New \
147 Dfunc(gf1.dimensions()) \
151 Foam::OpFunc(tRes.ref(), gf1); \
161 #define BINARY_FUNCTION(ReturnType, Type1, Type2, Func) \
166 GeometricField<ReturnType, GeoMesh, PrimitiveField1>& res, \
167 const GeometricField<Type1, GeoMesh, PrimitiveField2>& gf1, \
168 const GeometricField<Type2, GeoMesh, PrimitiveField3>& gf2 \
173 res.primitiveFieldRef(), \
174 gf1.primitiveField(), \
175 gf2.primitiveField() \
179 res.boundaryFieldRef(), \
180 gf1.boundaryField(), \
181 gf2.boundaryField() \
186 tmp<GeometricField<ReturnType, GeoMesh, Field>> Func \
188 const GeometricField<Type1, GeoMesh, PrimitiveField1>& gf1, \
189 const GeometricField<Type2, GeoMesh, PrimitiveField2>& gf2 \
192 tmp<GeometricField<ReturnType, GeoMesh, Field>> tRes \
194 GeometricField<ReturnType, GeoMesh, Field>::New \
196 #Func "(" + gf1.name() + ',' + gf2.name() + ')', \
198 Func(gf1.dimensions(), gf2.dimensions()) \
202 Foam::Func(tRes.ref(), gf1, gf2); \
208 tmp<GeometricField<ReturnType, GeoMesh, Field>> Func \
210 const GeometricField<Type1, GeoMesh, PrimitiveField1>& gf1, \
211 const tmp<GeometricField<Type2, GeoMesh, PrimitiveField2>>& tgf2 \
214 const GeometricField<Type2, GeoMesh, PrimitiveField2>& gf2 = tgf2(); \
216 tmp<GeometricField<ReturnType, GeoMesh, Field>> tRes \
218 reuseTmpGeometricField \
219 <ReturnType, Type2, GeoMesh, PrimitiveField2>::New \
222 #Func "(" + gf1.name() + ',' + gf2.name() + ')', \
223 Func(gf1.dimensions(), gf2.dimensions()) \
227 Foam::Func(tRes.ref(), gf1, gf2); \
235 tmp<GeometricField<ReturnType, GeoMesh, Field>> Func \
237 const tmp<GeometricField<Type1, GeoMesh, PrimitiveField1>>& tgf1, \
238 const GeometricField<Type2, GeoMesh, PrimitiveField2>& gf2 \
241 const GeometricField<Type1, GeoMesh, PrimitiveField1>& gf1 = tgf1(); \
243 tmp<GeometricField<ReturnType, GeoMesh, Field>> tRes \
245 reuseTmpGeometricField \
246 <ReturnType, Type1, GeoMesh, PrimitiveField1>::New \
249 #Func "(" + gf1.name() + ',' + gf2.name() + ')', \
250 Func(gf1.dimensions(), gf2.dimensions()) \
254 Foam::Func(tRes.ref(), gf1, gf2); \
262 tmp<GeometricField<ReturnType, GeoMesh, Field>> Func \
264 const tmp<GeometricField<Type1, GeoMesh, PrimitiveField1>>& tgf1, \
265 const tmp<GeometricField<Type2, GeoMesh, PrimitiveField2>>& tgf2 \
268 const GeometricField<Type1, GeoMesh, PrimitiveField1>& gf1 = tgf1(); \
269 const GeometricField<Type2, GeoMesh, PrimitiveField2>& gf2 = tgf2(); \
271 tmp<GeometricField<ReturnType, GeoMesh, Field>> tRes \
273 reuseTmpTmpGeometricField \
285 #Func "(" + gf1.name() + ',' + gf2.name() + ')', \
286 Func(gf1.dimensions(), gf2.dimensions()) \
290 Foam::Func(tRes.ref(), gf1, gf2); \
300 #define BINARY_TYPE_FUNCTION_SF(ReturnType, Type1, Type2, Func) \
305 GeometricField<ReturnType, GeoMesh, PrimitiveField1>& res, \
306 const dimensioned<Type1>& dt1, \
307 const GeometricField<Type2, GeoMesh, PrimitiveField2>& gf2 \
310 Foam::Func(res.primitiveFieldRef(), dt1.value(), gf2.primitiveField()); \
311 Foam::Func(res.boundaryFieldRef(), dt1.value(), gf2.boundaryField()); \
315 tmp<GeometricField<ReturnType, GeoMesh, Field>> Func \
317 const dimensioned<Type1>& dt1, \
318 const GeometricField<Type2, GeoMesh, PrimitiveField>& gf2 \
321 tmp<GeometricField<ReturnType, GeoMesh, Field>> tRes \
323 GeometricField<ReturnType, GeoMesh, Field>::New \
325 #Func "(" + dt1.name() + ',' + gf2.name() + ')', \
327 Func(dt1.dimensions(), gf2.dimensions()) \
331 Foam::Func(tRes.ref(), dt1, gf2); \
337 tmp<GeometricField<ReturnType, GeoMesh, Field>> Func \
340 const GeometricField<Type2, GeoMesh, PrimitiveField>& gf2 \
343 return Func(dimensioned<Type1>(t1), gf2); \
348 tmp<GeometricField<ReturnType, GeoMesh, Field>> Func \
350 const dimensioned<Type1>& dt1, \
351 const tmp<GeometricField<Type2, GeoMesh, PrimitiveField>>& tgf2 \
354 const GeometricField<Type2, GeoMesh, PrimitiveField>& gf2 = tgf2(); \
356 tmp<GeometricField<ReturnType, GeoMesh, Field>> tRes \
358 reuseTmpGeometricField \
359 <ReturnType, Type2, GeoMesh, PrimitiveField>::New \
362 #Func "(" + dt1.name() + gf2.name() + ',' + ')', \
363 Func(dt1.dimensions(), gf2.dimensions()) \
367 Foam::Func(tRes.ref(), dt1, gf2); \
375 tmp<GeometricField<ReturnType, GeoMesh, Field>> Func \
378 const tmp<GeometricField<Type2, GeoMesh, PrimitiveField>>& tgf2 \
381 return Func(dimensioned<Type1>(t1), tgf2); \
385 #define BINARY_TYPE_FUNCTION_FS(ReturnType, Type1, Type2, Func) \
390 GeometricField<ReturnType, GeoMesh, PrimitiveField1>& res, \
391 const GeometricField<Type1, GeoMesh, PrimitiveField2>& gf1, \
392 const dimensioned<Type2>& dt2 \
395 Foam::Func(res.primitiveFieldRef(), gf1.primitiveField(), dt2.value()); \
396 Foam::Func(res.boundaryFieldRef(), gf1.boundaryField(), dt2.value()); \
400 tmp<GeometricField<ReturnType, GeoMesh, Field>> Func \
402 const GeometricField<Type1, GeoMesh, PrimitiveField>& gf1, \
403 const dimensioned<Type2>& dt2 \
406 tmp<GeometricField<ReturnType, GeoMesh, Field>> tRes \
408 GeometricField<ReturnType, GeoMesh, Field>::New \
410 #Func "(" + gf1.name() + ',' + dt2.name() + ')', \
412 Func(gf1.dimensions(), dt2.dimensions()) \
416 Foam::Func(tRes.ref(), gf1, dt2); \
422 tmp<GeometricField<ReturnType, GeoMesh, Field>> Func \
424 const GeometricField<Type1, GeoMesh, PrimitiveField>& gf1, \
428 return Func(gf1, dimensioned<Type2>(t2)); \
433 tmp<GeometricField<ReturnType, GeoMesh, Field>> Func \
435 const tmp<GeometricField<Type1, GeoMesh, PrimitiveField>>& tgf1, \
436 const dimensioned<Type2>& dt2 \
439 const GeometricField<Type1, GeoMesh, PrimitiveField>& gf1 = tgf1(); \
441 tmp<GeometricField<ReturnType, GeoMesh, Field>> tRes \
443 reuseTmpGeometricField \
444 <ReturnType, Type1, GeoMesh, PrimitiveField>::New \
447 #Func "(" + gf1.name() + ',' + dt2.name() + ')', \
448 Func(gf1.dimensions(), dt2.dimensions()) \
452 Foam::Func(tRes.ref(), gf1, dt2); \
460 tmp<GeometricField<ReturnType, GeoMesh, Field>> Func \
462 const tmp<GeometricField<Type1, GeoMesh, PrimitiveField>>& tgf1, \
466 return Func(tgf1, dimensioned<Type2>(t2)); \
470 #define BINARY_TYPE_FUNCTION(ReturnType, Type1, Type2, Func) \
471 BINARY_TYPE_FUNCTION_SF(ReturnType, Type1, Type2, Func) \
472 BINARY_TYPE_FUNCTION_FS(ReturnType, Type1, Type2, Func)
477 #define BINARY_OPERATOR(ReturnType, Type1, Type2, Op, OpName, OpFunc) \
482 GeometricField<ReturnType, GeoMesh, PrimitiveField1>& res, \
483 const GeometricField<Type1, GeoMesh, PrimitiveField2>& gf1, \
484 const GeometricField<Type2, GeoMesh, PrimitiveField3>& gf2 \
488 (res.primitiveFieldRef(), gf1.primitiveField(), gf2.primitiveField()); \
490 (res.boundaryFieldRef(), gf1.boundaryField(), gf2.boundaryField()); \
494 tmp<GeometricField<ReturnType, GeoMesh, Field>> operator Op \
496 const GeometricField<Type1, GeoMesh, PrimitiveField1>& gf1, \
497 const GeometricField<Type2, GeoMesh, PrimitiveField2>& gf2 \
500 tmp<GeometricField<ReturnType, GeoMesh, Field>> tRes \
502 GeometricField<ReturnType, GeoMesh, Field>::New \
504 '(' + gf1.name() + OpName + gf2.name() + ')', \
506 gf1.dimensions() Op gf2.dimensions() \
510 Foam::OpFunc(tRes.ref(), gf1, gf2); \
516 tmp<GeometricField<ReturnType, GeoMesh, Field>> operator Op \
518 const GeometricField<Type1, GeoMesh, PrimitiveField1>& gf1, \
519 const tmp<GeometricField<Type2, GeoMesh, PrimitiveField2>>& tgf2 \
522 const GeometricField<Type2, GeoMesh, PrimitiveField2>& gf2 = tgf2(); \
524 tmp<GeometricField<ReturnType, GeoMesh, Field>> tRes \
526 reuseTmpGeometricField \
527 <ReturnType, Type2, GeoMesh, PrimitiveField2>::New \
530 '(' + gf1.name() + OpName + gf2.name() + ')', \
531 gf1.dimensions() Op gf2.dimensions() \
535 Foam::OpFunc(tRes.ref(), gf1, gf2); \
543 tmp<GeometricField<ReturnType, GeoMesh, Field>> operator Op \
545 const tmp<GeometricField<Type1, GeoMesh, PrimitiveField1>>& tgf1, \
546 const GeometricField<Type2, GeoMesh, PrimitiveField2>& gf2 \
549 const GeometricField<Type1, GeoMesh, PrimitiveField1>& gf1 = tgf1(); \
551 tmp<GeometricField<ReturnType, GeoMesh, Field>> tRes \
553 reuseTmpGeometricField \
554 <ReturnType, Type1, GeoMesh, PrimitiveField1>::New \
557 '(' + gf1.name() + OpName + gf2.name() + ')', \
558 gf1.dimensions() Op gf2.dimensions() \
562 Foam::OpFunc(tRes.ref(), gf1, gf2); \
570 tmp<GeometricField<ReturnType, GeoMesh, Field>> operator Op \
572 const tmp<GeometricField<Type1, GeoMesh, PrimitiveField1>>& tgf1, \
573 const tmp<GeometricField<Type2, GeoMesh, PrimitiveField2>>& tgf2 \
576 const GeometricField<Type1, GeoMesh, PrimitiveField1>& gf1 = tgf1(); \
577 const GeometricField<Type2, GeoMesh, PrimitiveField2>& gf2 = tgf2(); \
579 tmp<GeometricField<ReturnType, GeoMesh, Field>> tRes \
581 reuseTmpTmpGeometricField \
593 '(' + gf1.name() + OpName + gf2.name() + ')', \
594 gf1.dimensions() Op gf2.dimensions() \
598 Foam::OpFunc(tRes.ref(), gf1, gf2); \
609 #define BINARY_TYPE_OPERATOR_SF(ReturnType, Type1, Type2, Op, OpName, OpFunc) \
614 GeometricField<ReturnType, GeoMesh, PrimitiveField1>& res, \
615 const dimensioned<Type1>& dt1, \
616 const GeometricField<Type2, GeoMesh, PrimitiveField2>& gf2 \
619 Foam::OpFunc(res.primitiveFieldRef(), dt1.value(), gf2.primitiveField()); \
620 Foam::OpFunc(res.boundaryFieldRef(), dt1.value(), gf2.boundaryField()); \
624 tmp<GeometricField<ReturnType, GeoMesh, Field>> operator Op \
626 const dimensioned<Type1>& dt1, \
627 const GeometricField<Type2, GeoMesh, PrimitiveField>& gf2 \
630 tmp<GeometricField<ReturnType, GeoMesh, Field>> tRes \
632 GeometricField<ReturnType, GeoMesh, Field>::New \
634 '(' + dt1.name() + OpName + gf2.name() + ')', \
636 dt1.dimensions() Op gf2.dimensions() \
640 Foam::OpFunc(tRes.ref(), dt1, gf2); \
646 tmp<GeometricField<ReturnType, GeoMesh, Field>> operator Op \
649 const GeometricField<Type2, GeoMesh, PrimitiveField>& gf2 \
652 return dimensioned<Type1>(t1) Op gf2; \
657 tmp<GeometricField<ReturnType, GeoMesh, Field>> operator Op \
659 const dimensioned<Type1>& dt1, \
660 const tmp<GeometricField<Type2, GeoMesh, PrimitiveField>>& tgf2 \
663 const GeometricField<Type2, GeoMesh, PrimitiveField>& gf2 = tgf2(); \
665 tmp<GeometricField<ReturnType, GeoMesh, Field>> tRes \
667 reuseTmpGeometricField \
668 <ReturnType, Type2, GeoMesh, PrimitiveField>::New \
671 '(' + dt1.name() + OpName + gf2.name() + ')', \
672 dt1.dimensions() Op gf2.dimensions() \
676 Foam::OpFunc(tRes.ref(), dt1, gf2); \
684 tmp<GeometricField<ReturnType, GeoMesh, Field>> operator Op \
687 const tmp<GeometricField<Type2, GeoMesh, PrimitiveField>>& tgf2\
690 return dimensioned<Type1>(t1) Op tgf2; \
694 #define BINARY_TYPE_OPERATOR_FS(ReturnType, Type1, Type2, Op, OpName, OpFunc) \
699 GeometricField<ReturnType, GeoMesh, PrimitiveField1>& res, \
700 const GeometricField<Type1, GeoMesh, PrimitiveField2>& gf1, \
701 const dimensioned<Type2>& dt2 \
704 Foam::OpFunc(res.primitiveFieldRef(), gf1.primitiveField(), dt2.value()); \
705 Foam::OpFunc(res.boundaryFieldRef(), gf1.boundaryField(), dt2.value()); \
709 tmp<GeometricField<ReturnType, GeoMesh, Field>> operator Op \
711 const GeometricField<Type1, GeoMesh, PrimitiveField>& gf1, \
712 const dimensioned<Type2>& dt2 \
715 tmp<GeometricField<ReturnType, GeoMesh, Field>> tRes \
717 GeometricField<ReturnType, GeoMesh, Field>::New \
719 '(' + gf1.name() + OpName + dt2.name() + ')', \
721 gf1.dimensions() Op dt2.dimensions() \
725 Foam::OpFunc(tRes.ref(), gf1, dt2); \
731 tmp<GeometricField<ReturnType, GeoMesh, Field>> operator Op \
733 const GeometricField<Type1, GeoMesh, PrimitiveField>& gf1, \
737 return gf1 Op dimensioned<Type2>(t2); \
742 tmp<GeometricField<ReturnType, GeoMesh, Field>> operator Op \
744 const tmp<GeometricField<Type1, GeoMesh, PrimitiveField>>& tgf1, \
745 const dimensioned<Type2>& dt2 \
748 const GeometricField<Type1, GeoMesh, PrimitiveField>& gf1 = tgf1(); \
750 tmp<GeometricField<ReturnType, GeoMesh, Field>> tRes \
752 reuseTmpGeometricField \
753 <ReturnType, Type1, GeoMesh, PrimitiveField>::New \
756 '(' + gf1.name() + OpName + dt2.name() + ')', \
757 gf1.dimensions() Op dt2.dimensions() \
761 Foam::OpFunc(tRes.ref(), gf1, dt2); \
769 tmp<GeometricField<ReturnType, GeoMesh, Field>> operator Op \
771 const tmp<GeometricField<Type1, GeoMesh, PrimitiveField>>& tgf1, \
775 return tgf1 Op dimensioned<Type2>(t2); \
779 #define BINARY_TYPE_OPERATOR(ReturnType, Type1, Type2, Op, OpName, OpFunc) \
780 BINARY_TYPE_OPERATOR_SF(ReturnType, Type1, Type2, Op, OpName, OpFunc) \
781 BINARY_TYPE_OPERATOR_FS(ReturnType, Type1, Type2, Op, OpName, OpFunc)