29 #define TEMPLATE template<template<class> class Field, class Type>
39 template<
template<
class>
class Field,
class Type>
54 template<
template<
class>
class Field,
class Type>
64 template<
template<
class>
class Field,
class Type,
int r>
77 template<
template<
class>
class Field,
class Type,
int r>
89 pow<Type, r>(tRes(),
f);
93 template<
template<
class>
class Field,
class Type,
int r>
105 pow<Type, r>(tRes(),
tf());
111 template<
template<
class>
class Field,
class Type>
124 template<
template<
class>
class Field,
class Type>
137 template<
template<
class>
class Field,
class Type>
152 template<
template<
class>
class Field,
class Type>
161 template<
template<
class>
class Field,
class Type>
173 template<
template<
class>
class Field,
class Type>
187 template<
template<
class>
class Field,
class Type>
196 template<
template<
class>
class Field,
class Type>
208 template<
template<
class>
class Field,
class Type>
222 template<
template<
class>
class Field,
class Type>
235 template<
template<
class>
class Field,
class Type>
236 tmp<FieldField<Field, typename FieldField<Field, Type>::cmptType> >
cmptMax
250 template<
template<
class>
class Field,
class Type>
251 tmp<FieldField<Field, typename FieldField<Field, Type>::cmptType> >
cmptMax
267 template<
template<
class>
class Field,
class Type>
280 template<
template<
class>
class Field,
class Type>
281 tmp<FieldField<Field, typename FieldField<Field, Type>::cmptType> >
cmptMin
295 template<
template<
class>
class Field,
class Type>
296 tmp<FieldField<Field, typename FieldField<Field, Type>::cmptType> >
cmptMin
312 template<
template<
class>
class Field,
class Type>
325 template<
template<
class>
class Field,
class Type>
326 tmp<FieldField<Field, typename FieldField<Field, Type>::cmptType> >
cmptAv
340 template<
template<
class>
class Field,
class Type>
341 tmp<FieldField<Field, typename FieldField<Field, Type>::cmptType> >
cmptAv
357 template<
template<
class>
class Field,
class Type>
370 template<
template<
class>
class Field,
class Type>
371 tmp<FieldField<Field, Type> >
cmptMag
384 template<
template<
class>
class Field,
class Type>
385 tmp<FieldField<Field, Type> >
cmptMag
400 #define TMP_UNARY_FUNCTION(returnType, func) \
402 template<template<class> class Field, class Type> \
403 returnType func(const tmp<FieldField<Field, Type> >& tf1) \
405 returnType res = func(tf1()); \
410 template<
template<
class>
class Field,
class Type>
414 while(i < f.
size() && !f[i].
size()) i++;
420 for (label j=i+1; j<f.
size(); j++)
424 Max =
max(
max(f[j]), Max);
438 template<template<class> class
Field, class Type>
442 while(i < f.size() && !f[i].size()) i++;
447 while(!f[i].size()) i++;
451 for (label j=i+1; j<f.size(); j++)
455 Min =
min(
min(f[j]), Min);
469 template<template<class> class
Field, class Type>
491 template<template<class> class
Field, class Type>
513 template<template<class> class
Field, class Type>
527 WarningIn(
"average(const FieldField<Field, Type>&) const")
528 <<
"empty fieldField, returning zero" <<
endl;
533 Type avrg =
sum(f)/n;
539 WarningIn(
"average(const FieldField<Field, Type>&) const")
540 <<
"empty fieldField, returning zero" <<
endl;
551 #define G_UNARY_FUNCTION(returnType, gFunc, func, rFunc) \
553 template<template<class> class Field, class Type> \
554 returnType gFunc(const FieldField<Field, Type>& f) \
556 returnType res = func(f); \
557 reduce(res, rFunc##Op<Type>()); \
560 TMP_UNARY_FUNCTION(returnType, gFunc)
567 #undef G_UNARY_FUNCTION
570 template<
template<
class>
class Field,
class Type>
584 Type avrg =
gSum(f)/n;
590 WarningIn(
"gAverage(const FieldField<Field, Type>&) const")
591 <<
"empty fieldField, returning zero" <<
endl;
599 #undef TMP_UNARY_FUNCTION
617 #ifndef __INTEL_COMPILER
631 #define PRODUCT_OPERATOR(product, op, opFunc) \
633 template<template<class> class Field, class Type1, class Type2> \
636 FieldField<Field, typename product<Type1, Type2>::type>& f, \
637 const FieldField<Field, Type1>& f1, \
638 const FieldField<Field, Type2>& f2 \
643 opFunc(f[i], f1[i], f2[i]); \
647 template<template<class> class Field, class Type1, class Type2> \
648 tmp<FieldField<Field, typename product<Type1, Type2>::type> > \
651 const FieldField<Field, Type1>& f1, \
652 const FieldField<Field, Type2>& f2 \
655 typedef typename product<Type1, Type2>::type productType; \
656 tmp<FieldField<Field, productType> > tRes \
658 FieldField<Field, productType>::NewCalculatedType(f1) \
660 opFunc(tRes(), f1, f2); \
664 template<template<class> class Field, class Type1, class Type2> \
665 tmp<FieldField<Field, typename product<Type1, Type2>::type> > \
668 const FieldField<Field, Type1>& f1, \
669 const tmp<FieldField<Field, Type2> >& tf2 \
672 typedef typename product<Type1, Type2>::type productType; \
673 tmp<FieldField<Field, productType> > tRes \
675 reuseTmpFieldField<Field, productType, Type2>::New(tf2) \
677 opFunc(tRes(), f1, tf2()); \
678 reuseTmpFieldField<Field, productType, Type2>::clear(tf2); \
682 template<template<class> class Field, class Type1, class Type2> \
683 tmp<FieldField<Field, typename product<Type1, Type2>::type> > \
686 const tmp<FieldField<Field, Type1> >& tf1, \
687 const FieldField<Field, Type2>& f2 \
690 typedef typename product<Type1, Type2>::type productType; \
691 tmp<FieldField<Field, productType> > tRes \
693 reuseTmpFieldField<Field, productType, Type1>::New(tf1) \
695 opFunc(tRes(), tf1(), f2); \
696 reuseTmpFieldField<Field, productType, Type1>::clear(tf1); \
700 template<template<class> class Field, class Type1, class Type2> \
701 tmp<FieldField<Field, typename product<Type1, Type2>::type> > \
704 const tmp<FieldField<Field, Type1> >& tf1, \
705 const tmp<FieldField<Field, Type2> >& tf2 \
708 typedef typename product<Type1, Type2>::type productType; \
709 tmp<FieldField<Field, productType> > tRes \
711 reuseTmpTmpFieldField<Field, productType, Type1, Type1, Type2>::New \
714 opFunc(tRes(), tf1(), tf2()); \
715 reuseTmpTmpFieldField<Field, productType, Type1, Type1, Type2>::clear \
721 <template<class> class Field, class Type, class Form, class Cmpt, int nCmpt> \
724 FieldField<Field, typename product<Type, Form>::type>& f, \
725 const FieldField<Field, Type>& f1, \
726 const VectorSpace<Form,Cmpt,nCmpt>& vs \
731 opFunc(f[i], f1[i], vs); \
736 <template<class> class Field, class Type, class Form, class Cmpt, int nCmpt> \
737 tmp<FieldField<Field, typename product<Type, Form>::type> > \
740 const FieldField<Field, Type>& f1, \
741 const VectorSpace<Form,Cmpt,nCmpt>& vs \
744 typedef typename product<Type, Form>::type productType; \
745 tmp<FieldField<Field, productType> > tRes \
747 FieldField<Field, productType>::NewCalculatedType(f1) \
749 opFunc(tRes(), f1, static_cast<const Form&>(vs)); \
754 <template<class> class Field, class Type, class Form, class Cmpt, int nCmpt> \
755 tmp<FieldField<Field, typename product<Type, Form>::type> > \
758 const tmp<FieldField<Field, Type> >& tf1, \
759 const VectorSpace<Form,Cmpt,nCmpt>& vs \
762 typedef typename product<Type, Form>::type productType; \
763 tmp<FieldField<Field, productType> > tRes \
765 reuseTmpFieldField<Field, productType, Type>::New(tf1) \
767 opFunc(tRes(), tf1(), static_cast<const Form&>(vs)); \
768 reuseTmpFieldField<Field, productType, Type>::clear(tf1); \
773 <template<class> class Field, class Form, class Cmpt, int nCmpt, class Type> \
776 FieldField<Field, typename product<Form, Type>::type>& f, \
777 const VectorSpace<Form,Cmpt,nCmpt>& vs, \
778 const FieldField<Field, Type>& f1 \
783 opFunc(f[i], vs, f1[i]); \
788 <template<class> class Field, class Form, class Cmpt, int nCmpt, class Type> \
789 tmp<FieldField<Field, typename product<Form, Type>::type> > \
792 const VectorSpace<Form,Cmpt,nCmpt>& vs, \
793 const FieldField<Field, Type>& f1 \
796 typedef typename product<Form, Type>::type productType; \
797 tmp<FieldField<Field, productType> > tRes \
799 FieldField<Field, productType>::NewCalculatedType(f1) \
801 opFunc(tRes(), static_cast<const Form&>(vs), f1); \
806 <template<class> class Field, class Form, class Cmpt, int nCmpt, class Type> \
807 tmp<FieldField<Field, typename product<Form, Type>::type> > \
810 const VectorSpace<Form,Cmpt,nCmpt>& vs, \
811 const tmp<FieldField<Field, Type> >& tf1 \
814 typedef typename product<Form, Type>::type productType; \
815 tmp<FieldField<Field, productType> > tRes \
817 reuseTmpFieldField<Field, productType, Type>::New(tf1) \
819 opFunc(tRes(), static_cast<const Form&>(vs), tf1()); \
820 reuseTmpFieldField<Field, productType, Type>::clear(tf1); \
832 #undef PRODUCT_OPERATOR