31#define TEMPLATE template<class Type, class GeoMesh>
41template<
class Type,
class GeoMesh, direction r>
65template<
class Type,
class GeoMesh, direction r>
66tmp<DimensionedField<typename powProduct<Type, r>::type, GeoMesh>>
69 const tmp<DimensionedField<Type, GeoMesh>>& tf1,
75 const auto& f1 = tf1();
92template<
class Type,
class GeoMesh>
93tmp<DimensionedField<typename outerProduct<Type, Type>::type, GeoMesh>>
94sqr(
const DimensionedField<Type, GeoMesh>& f1)
102 "sqr(" + f1.name() +
')',
106 sqr(tres.ref().field(), f1.field());
111template<
class Type,
class GeoMesh>
112tmp<DimensionedField<typename outerProduct<Type, Type>::type, GeoMesh>>
113sqr(
const tmp<DimensionedField<Type, GeoMesh>>& tf1)
117 const auto& f1 = tf1();
123 "sqr(" + f1.
name() +
')',
127 sqr(tres.ref().field(), f1.
field());
134template<
class Type,
class GeoMesh>
135tmp<DimensionedField<typename typeOfMag<Type>::type, GeoMesh>>
136magSqr(
const DimensionedField<Type, GeoMesh>& f1)
144 "magSqr(" + f1.name() +
')',
153template<
class Type,
class GeoMesh>
154tmp<DimensionedField<typename typeOfMag<Type>::type, GeoMesh>>
155magSqr(
const tmp<DimensionedField<Type, GeoMesh>>& tf1)
159 const auto& f1 = tf1();
165 "magSqr(" + f1.
name() +
')',
176template<
class Type,
class GeoMesh>
177tmp<DimensionedField<typename typeOfMag<Type>::type, GeoMesh>>
178mag(
const DimensionedField<Type, GeoMesh>& f1)
186 "mag(" + f1.name() +
')',
190 mag(tres.ref().field(), f1.field());
195template<
class Type,
class GeoMesh>
196tmp<DimensionedField<typename typeOfMag<Type>::type, GeoMesh>>
197mag(
const tmp<DimensionedField<Type, GeoMesh>>& tf1)
201 const auto& f1 = tf1();
207 "mag(" + f1.
name() +
')',
211 mag(tres.ref().field(), f1.
field());
218template<
class Type,
class GeoMesh>
234 "cmptAv(" + f1.
name() +
')',
244template<
class Type,
class GeoMesh>
256 const auto& f1 = tf1();
262 "cmptAv(" + f1.
name() +
')',
273#define UNARY_REDUCTION_FUNCTION(ReturnType, Func, gFunc) \
275template<class Type, class GeoMesh> \
276dimensioned<ReturnType> Func \
278 const DimensionedField<Type, GeoMesh>& f1, \
282 return dimensioned<ReturnType> \
284 #Func "(" + f1.name() + ')', \
286 gFunc(f1.field(), comm) \
290template<class Type, class GeoMesh> \
291dimensioned<ReturnType> Func \
293 const tmp<DimensionedField<Type, GeoMesh>>& tf1, \
297 dimensioned<ReturnType> res = Func(tf1(), comm); \
311#undef UNARY_REDUCTION_FUNCTION
329template<class Type, class
GeoMesh>
340 result.oriented() = f1.oriented();
343template<
class Type,
class GeoMesh>
344tmp<DimensionedField<Type, GeoMesh>>
347 const DimensionedField<Type, GeoMesh>& f1,
355 "clamp01(" + f1.name() +
')',
365template<
class Type,
class GeoMesh>
366tmp<DimensionedField<Type, GeoMesh>>
369 const tmp<DimensionedField<Type, GeoMesh>>& tf1,
373 const auto& f1 = tf1();
379 "clamp01(" + f1.name() +
')',
414#define PRODUCT_OPERATOR(product, Op, OpFunc) \
416template<class Type1, class Type2, class GeoMesh> \
417tmp<DimensionedField<typename product<Type1, Type2>::type, GeoMesh>> \
420 const DimensionedField<Type1, GeoMesh>& f1, \
421 const DimensionedField<Type2, GeoMesh>& f2 \
424 typedef typename product<Type1, Type2>::type resultType; \
427 reuseTmpDimensionedField<resultType, Type1, GeoMesh>::New \
430 '(' + f1.name() + #Op + f2.name() + ')', \
431 (f1.dimensions() Op f2.dimensions()) \
434 Foam::OpFunc(tres.ref().field(), f1.field(), f2.field()); \
440template<class Type1, class Type2, class GeoMesh> \
441tmp<DimensionedField<typename product<Type1, Type2>::type, GeoMesh>> \
444 const DimensionedField<Type1, GeoMesh>& f1, \
445 const tmp<DimensionedField<Type2, GeoMesh>>& tf2 \
448 typedef typename product<Type1, Type2>::type resultType; \
450 const auto& f2 = tf2(); \
453 reuseTmpDimensionedField<resultType, Type2, GeoMesh>::New \
456 '(' + f1.name() + #Op + f2.name() + ')', \
457 (f1.dimensions() Op f2.dimensions()) \
460 Foam::OpFunc(tres.ref().field(), f1.field(), f2.field()); \
467template<class Type1, class Type2, class GeoMesh> \
468tmp<DimensionedField<typename product<Type1, Type2>::type, GeoMesh>> \
471 const tmp<DimensionedField<Type1, GeoMesh>>& tf1, \
472 const DimensionedField<Type2, GeoMesh>& f2 \
475 typedef typename product<Type1, Type2>::type resultType; \
477 const auto& f1 = tf1(); \
480 reuseTmpDimensionedField<resultType, Type1, GeoMesh>::New \
483 '(' + f1.name() + #Op + f2.name() + ')', \
484 (f1.dimensions() Op f2.dimensions()) \
487 Foam::OpFunc(tres.ref().field(), f1.field(), f2.field()); \
494template<class Type1, class Type2, class GeoMesh> \
495tmp<DimensionedField<typename product<Type1, Type2>::type, GeoMesh>> \
498 const tmp<DimensionedField<Type1, GeoMesh>>& tf1, \
499 const tmp<DimensionedField<Type2, GeoMesh>>& tf2 \
502 typedef typename product<Type1, Type2>::type resultType; \
504 const auto& f1 = tf1(); \
505 const auto& f2 = tf2(); \
508 reuseTmpTmpDimensionedField \
509 <resultType, Type1, Type1, Type2, GeoMesh>::New \
513 '(' + f1.name() + #Op + f2.name() + ')', \
514 (f1.dimensions() Op f2.dimensions()) \
517 Foam::OpFunc(tres.ref().field(), f1.field(), f2.field()); \
525template<class Form, class Type, class GeoMesh> \
526tmp<DimensionedField<typename product<Type, Form>::type, GeoMesh>> \
529 const DimensionedField<Type, GeoMesh>& f1, \
530 const dimensioned<Form>& dvs \
533 typedef typename product<Type, Form>::type resultType; \
536 reuseTmpDimensionedField<resultType, Type, GeoMesh>::New \
539 '(' + f1.name() + #Op + dvs.name() + ')', \
540 (f1.dimensions() Op dvs.dimensions()) \
543 Foam::OpFunc(tres.ref().field(), f1.field(), dvs.value()); \
549template<class Form, class Cmpt, direction nCmpt, class Type, class GeoMesh> \
550tmp<DimensionedField<typename product<Form, Type>::type, GeoMesh>> \
553 const DimensionedField<Type, GeoMesh>& f1, \
554 const VectorSpace<Form,Cmpt,nCmpt>& vs \
557 return f1 Op dimensioned<Form>(static_cast<const Form&>(vs)); \
561template<class Form, class Type, class GeoMesh> \
562tmp<DimensionedField<typename product<Type, Form>::type, GeoMesh>> \
565 const tmp<DimensionedField<Type, GeoMesh>>& tf1, \
566 const dimensioned<Form>& dvs \
569 typedef typename product<Type, Form>::type resultType; \
571 const auto& f1 = tf1(); \
574 reuseTmpDimensionedField<resultType, Type, GeoMesh>::New \
577 '(' + f1.name() + #Op + dvs.name() + ')', \
578 (f1.dimensions() Op dvs.dimensions()) \
581 Foam::OpFunc(tres.ref().field(), f1.field(), dvs.value()); \
588template<class Form, class Cmpt, direction nCmpt, class Type, class GeoMesh> \
589tmp<DimensionedField<typename product<Form, Type>::type, GeoMesh>> \
592 const tmp<DimensionedField<Type, GeoMesh>>& tf1, \
593 const VectorSpace<Form,Cmpt,nCmpt>& vs \
596 return tf1 Op dimensioned<Form>(static_cast<const Form&>(vs)); \
600template<class Form, class Type, class GeoMesh> \
601tmp<DimensionedField<typename product<Form, Type>::type, GeoMesh>> \
604 const dimensioned<Form>& dvs, \
605 const DimensionedField<Type, GeoMesh>& f2 \
608 typedef typename product<Form, Type>::type resultType; \
611 reuseTmpDimensionedField<resultType, Type, GeoMesh>::New \
614 '(' + dvs.name() + #Op + f2.name() + ')', \
615 (dvs.dimensions() Op f2.dimensions()) \
618 Foam::OpFunc(tres.ref().field(), dvs.value(), f2.field()); \
624template<class Form, class Cmpt, direction nCmpt, class Type, class GeoMesh> \
625tmp<DimensionedField<typename product<Form, Type>::type, GeoMesh>> \
628 const VectorSpace<Form,Cmpt,nCmpt>& vs, \
629 const DimensionedField<Type, GeoMesh>& f2 \
632 return dimensioned<Form>(static_cast<const Form&>(vs)) Op f2; \
636template<class Form, class Type, class GeoMesh> \
637tmp<DimensionedField<typename product<Form, Type>::type, GeoMesh>> \
640 const dimensioned<Form>& dvs, \
641 const tmp<DimensionedField<Type, GeoMesh>>& tf2 \
644 typedef typename product<Form, Type>::type resultType; \
646 const auto& f2 = tf2(); \
649 reuseTmpDimensionedField<resultType, Type, GeoMesh>::New \
652 '(' + dvs.name() + #Op + f2.name() + ')', \
653 (dvs.dimensions() Op f2.dimensions()) \
656 Foam::OpFunc(tres.ref().field(), dvs.value(), f2.field()); \
663template<class Form, class Cmpt, direction nCmpt, class Type, class GeoMesh> \
664tmp<DimensionedField<typename product<Form, Type>::type, GeoMesh>> \
667 const VectorSpace<Form,Cmpt,nCmpt>& vs, \
668 const tmp<DimensionedField<Type, GeoMesh>>& tf2 \
671 return dimensioned<Form>(static_cast<const Form&>(vs)) Op tf2; \
683#undef PRODUCT_OPERATOR
#define BINARY_FUNCTION(ReturnType, Type1, Type2, Func)
#define BINARY_TYPE_FUNCTION_FS(ReturnType, Type1, Type2, Func)
#define UNARY_OPERATOR(ReturnType, Type1, Op, OpFunc, Dfunc)
#define BINARY_OPERATOR(ReturnType, Type1, Type2, Op, OpName, OpFunc)
#define TERNARY_FUNCTION(ReturnType, Type1, Type2, Type3, Func)
#define TERNARY_TYPE_FUNCTION_FFS(ReturnType, Type1, Type2, Type3, Func)
#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)
#define UNARY_REDUCTION_FUNCTION(ReturnType, Func, gFunc)
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
const DynamicField< Type > & field() const noexcept
Return const-reference to the primitive field values.
const dimensionSet & dimensions() const noexcept
Return dimensions.
Field< Type >::cmptType cmptType
Component type of the field elements.
Generic mesh wrapper used by volMesh, surfaceMesh, pointMesh etc.
const word & name() const noexcept
Return the object name.
A min/max value pair with additional methods. In addition to conveniently storing values,...
typeOfRank< typenamepTraits< arg1 >::cmptType, direction(pTraits< arg1 >::rank)+direction(pTraits< arg2 >::rank)>::type type
symmTypeOfRank< typenamepTraits< arg1 >::cmptType, arg2 *direction(pTraits< arg1 >::rank)>::type type
A class for managing temporary objects.
The magnitude type for given argument.
pTraits< typenamepTraits< arg1 >::cmptType >::magType type
Represents 0/1 range or concept. Used for tagged dispatch or clamping.
#define PRODUCT_OPERATOR(product, op, opFunc)
Type gAverage(const FieldField< Field, Type > &f, const label comm)
The global arithmetic average of a FieldField.
dimensioned< scalarMinMax > minMaxMag(const DimensionedField< Type, GeoMesh > &f1, const label comm)
label max(const labelHashSet &set, label maxValue=labelMin)
Find the max value in labelHashSet, optionally limited by second argument.
Type gSum(const FieldField< Field, Type > &f)
dimensionedSymmTensor sqr(const dimensionedVector &dv)
void subtract(DimensionedField< scalar, GeoMesh > &result, const dimensioned< scalar > &dt1, const DimensionedField< scalar, GeoMesh > &f2)
dimensioned< Type > cmptDivide(const dimensioned< Type > &, const dimensioned< Type > &)
refinementData transform(const tensor &, const refinementData val)
No-op rotational transform for base types.
dimensionSet clamp(const dimensionSet &a, const dimensionSet &range)
void divide(DimensionedField< Type, GeoMesh > &result, const DimensionedField< Type, GeoMesh > &f1, const DimensionedField< scalar, GeoMesh > &f2)
MinMax< scalar > scalarMinMax
A scalar min/max range.
void dot(FieldField< Field1, typename innerProduct< Type1, Type2 >::type > &f, const FieldField< Field1, Type1 > &f1, const FieldField< Field2, Type2 > &f2)
scalarMinMax gMinMaxMag(const FieldField< Field, Type > &f)
dimensionedScalar pow(const dimensionedScalar &ds, const dimensionedScalar &expt)
MinMax< label > minMax(const labelHashSet &set)
Find the min/max values of labelHashSet.
void add(DimensionedField< scalar, GeoMesh > &result, const dimensioned< scalar > &dt1, const DimensionedField< scalar, GeoMesh > &f2)
tmp< DimensionedField< typename DimensionedField< Type, GeoMesh >::cmptType, GeoMesh > > cmptAv(const DimensionedField< Type, GeoMesh > &f1)
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
label min(const labelHashSet &set, label minValue=labelMax)
Find the min value in labelHashSet, optionally limited by second argument.
MinMax< Type > gMinMax(const FieldField< Field, Type > &f)
dimensioned< Type > sum(const DimensionedField< Type, GeoMesh > &f1, const label comm)
dimensioned< Type > cmptMultiply(const dimensioned< Type > &, const dimensioned< Type > &)
typeOfMag< Type >::type gSumMag(const FieldField< Field, Type > &f)
void dotdot(FieldField< Field1, typename scalarProduct< Type1, Type2 >::type > &f, const FieldField< Field1, Type1 > &f1, const FieldField< Field2, Type2 > &f2)
Type gMin(const FieldField< Field, Type > &f)
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for expressions::valueTypeCode::INVALID.
void cross(FieldField< Field1, typename crossProduct< Type1, Type2 >::type > &f, const FieldField< Field1, Type1 > &f1, const FieldField< Field2, Type2 > &f2)
void negate(DimensionedField< Type, GeoMesh > &result, const DimensionedField< Type, GeoMesh > &f1)
void multiply(DimensionedField< Type, GeoMesh > &result, const DimensionedField< Type, GeoMesh > &f1, const DimensionedField< scalar, GeoMesh > &f2)
dimensioned< Type > average(const DimensionedField< Type, GeoMesh > &f1, const label comm)
Type gMax(const FieldField< Field, Type > &f)
dimensioned< typename typeOfMag< Type >::type > magSqr(const dimensioned< Type > &dt)
void outer(FieldField< Field1, typename outerProduct< Type1, Type2 >::type > &f, const FieldField< Field1, Type1 > &f1, const FieldField< Field2, Type2 > &f2)
dimensioned< Type > lerp(const dimensioned< Type > &a, const dimensioned< Type > &b, const scalar t)
dimensioned< typename typeOfMag< Type >::type > sumMag(const DimensionedField< Type, GeoMesh > &f1, const label comm)
static tmp< DimensionedField< TypeR, GeoMesh > > New(const DimensionedField< Type1, GeoMesh > &f1, const word &name, const dimensionSet &dimensions)
Pass-through to New DimensionedField.