31 #define TEMPLATE template<class Type, class GeoMesh> 41 template<
class Type,
class GeoMesh, direction r>
59 pow<Type, r, GeoMesh>(tres.ref().field(), f1.
field());
65 template<
class Type,
class GeoMesh, direction r>
69 const tmp<DimensionedField<Type, GeoMesh>>& tf1,
75 const auto& f1 = tf1();
85 pow<Type, r, GeoMesh>(tres.ref().field(), f1.
field());
92 template<
class Type,
class GeoMesh>
94 sqr(
const DimensionedField<Type, GeoMesh>& f1)
102 "sqr(" + f1.name() +
')',
106 sqr(tres.ref().field(), f1.field());
111 template<
class Type,
class GeoMesh>
113 sqr(
const tmp<DimensionedField<Type, GeoMesh>>& tf1)
117 const auto& f1 = tf1();
123 "sqr(" + f1.name() +
')',
127 sqr(tres.ref().field(), f1.field());
134 template<
class Type,
class GeoMesh>
136 magSqr(
const DimensionedField<Type, GeoMesh>& f1)
144 "magSqr(" + f1.name() +
')',
153 template<
class Type,
class GeoMesh>
155 magSqr(
const tmp<DimensionedField<Type, GeoMesh>>& tf1)
159 const auto& f1 = tf1();
165 "magSqr(" + f1.name() +
')',
169 magSqr(tres.ref().field(), f1.field());
176 template<
class Type,
class GeoMesh>
178 mag(
const DimensionedField<Type, GeoMesh>& f1)
186 "mag(" + f1.name() +
')',
190 mag(tres.ref().field(), f1.field());
195 template<
class Type,
class GeoMesh>
197 mag(
const tmp<DimensionedField<Type, GeoMesh>>& tf1)
201 const auto& f1 = tf1();
207 "mag(" + f1.name() +
')',
211 mag(tres.ref().field(), f1.field());
218 template<
class Type,
class GeoMesh>
234 "cmptAv(" + f1.
name() +
')',
244 template<
class Type,
class GeoMesh>
256 const auto& f1 = tf1();
262 "cmptAv(" + f1.name() +
')',
273 #define UNARY_REDUCTION_FUNCTION(ReturnType, Func, gFunc) \ 275 template<class Type, class GeoMesh> \ 276 dimensioned<ReturnType> Func \ 278 const DimensionedField<Type, GeoMesh>& f1, \ 282 return dimensioned<ReturnType> \ 284 #Func "(" + f1.name() + ')', \ 286 gFunc(f1.field(), comm) \ 290 template<class Type, class GeoMesh> \ 291 dimensioned<ReturnType> Func \ 293 const tmp<DimensionedField<Type, GeoMesh>>& tf1, \ 297 dimensioned<ReturnType> res = Func(tf1(), comm); \ 311 #undef UNARY_REDUCTION_FUNCTION 329 template<class Type, class
GeoMesh>
340 result.oriented() = f1.oriented();
343 template<
class Type,
class GeoMesh>
344 tmp<DimensionedField<Type, GeoMesh>>
347 const DimensionedField<Type, GeoMesh>& f1,
355 "clamp01(" + f1.name() +
')',
365 template<
class Type,
class GeoMesh>
366 tmp<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) \ 416 template<class Type1, class Type2, class GeoMesh> \ 417 tmp<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()); \ 440 template<class Type1, class Type2, class GeoMesh> \ 441 tmp<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()); \ 467 template<class Type1, class Type2, class GeoMesh> \ 468 tmp<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()); \ 494 template<class Type1, class Type2, class GeoMesh> \ 495 tmp<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()); \ 525 template<class Form, class Type, class GeoMesh> \ 526 tmp<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()); \ 549 template<class Form, class Cmpt, direction nCmpt, class Type, class GeoMesh> \ 550 tmp<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)); \ 561 template<class Form, class Type, class GeoMesh> \ 562 tmp<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()); \ 588 template<class Form, class Cmpt, direction nCmpt, class Type, class GeoMesh> \ 589 tmp<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)); \ 600 template<class Form, class Type, class GeoMesh> \ 601 tmp<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()); \ 624 template<class Form, class Cmpt, direction nCmpt, class Type, class GeoMesh> \ 625 tmp<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; \ 636 template<class Form, class Type, class GeoMesh> \ 637 tmp<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()); \ 663 template<class Form, class Cmpt, direction nCmpt, class Type, class GeoMesh> \ 664 tmp<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_OPERATOR(ReturnType, Type1, Type2, Op, OpName, OpFunc)
void divide(DimensionedField< Type, GeoMesh > &result, const DimensionedField< Type, GeoMesh > &f1, 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)
Type gMin(const FieldField< Field, Type > &f)
const word & name() const noexcept
Return the object name.
label max(const labelHashSet &set, label maxValue=labelMin)
Find the max value in labelHashSet, optionally limited by second argument.
dimensionedSymmTensor sqr(const dimensionedVector &dv)
A min/max value pair with additional methods. In addition to conveniently storing values...
#define BINARY_TYPE_OPERATOR_SF(ReturnType, Type1, Type2, Op, OpName, OpFunc)
#define UNARY_REDUCTION_FUNCTION(ReturnType, Func, gFunc)
#define BINARY_TYPE_OPERATOR_FS(ReturnType, Type1, Type2, Op, OpName, OpFunc)
void cross(FieldField< Field1, typename crossProduct< Type1, Type2 >::type > &f, const FieldField< Field1, Type1 > &f1, const FieldField< Field2, Type2 > &f2)
typeOfRank< typename pTraits< arg1 >::cmptType, direction(pTraits< arg1 >::rank)+direction(pTraits< arg2 >::rank) >::type type
#define BINARY_TYPE_FUNCTION(ReturnType, Type1, Type2, Func)
Field< Type >::cmptType cmptType
Component type of the field elements.
void dotdot(FieldField< Field1, typename scalarProduct< Type1, Type2 >::type > &f, const FieldField< Field1, Type1 > &f1, const FieldField< Field2, Type2 > &f2)
void subtract(FieldField< Field1, typename typeOfSum< Type1, Type2 >::type > &f, const FieldField< Field1, Type1 > &f1, const FieldField< Field2, Type2 > &f2)
dimensioned< Type > sum(const DimensionedField< Type, GeoMesh > &f1, const label comm)
void outer(FieldField< Field1, typename outerProduct< Type1, Type2 >::type > &f, const FieldField< Field1, Type1 > &f1, const FieldField< Field2, Type2 > &f2)
void dot(FieldField< Field1, typename innerProduct< Type1, Type2 >::type > &f, const FieldField< Field1, Type1 > &f1, const FieldField< Field2, Type2 > &f2)
#define PRODUCT_OPERATOR(product, Op, OpFunc)
dimensioned< Type > cmptDivide(const dimensioned< Type > &, const dimensioned< Type > &)
MinMax< label > minMax(const labelHashSet &set)
Find the min/max values of labelHashSet.
#define BINARY_FUNCTION(ReturnType, Type1, Type2, Func)
dimensioned< Type > average(const DimensionedField< Type, GeoMesh > &f1, const label comm)
dimensioned< scalarMinMax > minMaxMag(const DimensionedField< Type, GeoMesh > &f1, const label comm)
Type gSum(const FieldField< Field, Type > &f)
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for expressions::valueTypeCode::INVALID.
#define BINARY_TYPE_FUNCTION_FS(ReturnType, Type1, Type2, Func)
MinMax< Type > gMinMax(const FieldField< Field, Type > &f)
void negate(DimensionedField< Type, GeoMesh > &result, const DimensionedField< Type, GeoMesh > &f1)
label min(const labelHashSet &set, label minValue=labelMax)
Find the min value in labelHashSet, optionally limited by second argument.
static tmp< DimensionedField< TypeR, GeoMesh > > New(const DimensionedField< Type1, GeoMesh > &f1, const word &name, const dimensionSet &dimensions)
Pass-through to New DimensionedField.
dimensioned< Type > cmptMultiply(const dimensioned< Type > &, const dimensioned< Type > &)
void add(FieldField< Field1, typename typeOfSum< Type1, Type2 >::type > &f, const FieldField< Field1, Type1 > &f1, const FieldField< Field2, Type2 > &f2)
refinementData transform(const tensor &, const refinementData val)
No-op rotational transform for base types.
Type gAverage(const FieldField< Field, Type > &f, const label comm)
The global arithmetic average of a FieldField.
Type gMax(const FieldField< Field, Type > &f)
scalarMinMax gMinMaxMag(const FieldField< Field, Type > &f)
dimensioned< Type > lerp(const dimensioned< Type > &a, const dimensioned< Type > &b, const scalar t)
const dimensionSet & dimensions() const noexcept
Return dimensions.
typeOfMag< Type >::type gSumMag(const FieldField< Field, Type > &f)
Represents 0/1 range or concept. Used for tagged dispatch or clamping.
symmTypeOfRank< typename pTraits< arg1 >::cmptType, arg2 *direction(pTraits< arg1 >::rank) >::type type
dimensioned< typename typeOfMag< Type >::type > sumMag(const DimensionedField< Type, GeoMesh > &f1, const label comm)
dimensionedScalar pow(const dimensionedScalar &ds, const dimensionedScalar &expt)
void clear()
Clear exponents - resets to be dimensionless.
const Field< Type > & field() const noexcept
Return const-reference to the primitive field values.
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
#define UNARY_OPERATOR(ReturnType, Type1, Op, OpFunc, Dfunc)
#define TERNARY_TYPE_FUNCTION_FFS(ReturnType, Type1, Type2, Type3, Func)
Generic mesh wrapper used by volMesh, surfaceMesh, pointMesh etc.
A class for managing temporary objects.
void multiply(DimensionedField< Type, GeoMesh > &result, const DimensionedField< Type, GeoMesh > &f1, const DimensionedField< scalar, GeoMesh > &f2)
#define TERNARY_FUNCTION(ReturnType, Type1, Type2, Type3, Func)
dimensioned< typename typeOfMag< Type >::type > magSqr(const dimensioned< Type > &dt)
dimensionSet clamp(const dimensionSet &a, const dimensionSet &range)
pTraits< typename pTraits< arg1 >::cmptType >::magType type