37template<
class Form,
class Cmpt, Foam::direction Ncmpts>
44template<
class Form,
class Cmpt, Foam::direction Ncmpts>
54template<
class Form,
class Cmpt, Foam::direction Ncmpts>
55template<
class Form2,
class Cmpt2>
65template<
class Form,
class Cmpt, Foam::direction Ncmpts>
66template<
class SubVector, Foam::direction BStart>
78 "Requested block size > VectorSpace size"
85template<
class Form,
class Cmpt, Foam::direction Ncmpts>
95 <<
"index out of range"
104template<
class Form,
class Cmpt, Foam::direction Ncmpts>
114 <<
"index out of range"
123template<
class Form,
class Cmpt, Foam::direction Ncmpts>
134 <<
"index out of range"
143template<
class Form,
class Cmpt, Foam::direction Ncmpts>
154 <<
"index out of range"
163template<
class Form,
class Cmpt, Foam::direction Ncmpts>
170template<
class Form,
class Cmpt, Foam::direction Ncmpts>
179template<
class Form,
class Cmpt, Foam::direction Ncmpts>
180template<
class SubVector, Foam::direction BStart>
182 ConstBlock<SubVector, BStart>
191template<
class Form,
class Cmpt, Foam::direction Ncmpts>
201 <<
"index out of range"
210template<
class Form,
class Cmpt, Foam::direction Ncmpts>
220 <<
"index out of range"
229template<
class Form,
class Cmpt, Foam::direction Ncmpts>
230template<
class SubVector, Foam::direction BStart>
233ConstBlock<SubVector, BStart>::operator[]
242 <<
"index out of range"
247 return vs_[BStart + d];
251template<
class Form,
class Cmpt, Foam::direction Ncmpts>
252template<
class SubVector, Foam::direction BStart>
265 <<
"index " << i <<
" out of range"
272 <<
"index " << j <<
" != 0"
277 return vs_[BStart + i];
281template<
class Form,
class Cmpt, Foam::direction Ncmpts>
291template<
class Form,
class Cmpt, Foam::direction Ncmpts>
292template<
class Form2,
class Cmpt2>
302template<
class Form,
class Cmpt, Foam::direction Ncmpts>
312template<
class Form,
class Cmpt, Foam::direction Ncmpts>
322template<
class Form,
class Cmpt, Foam::direction Ncmpts>
329template<
class Form,
class Cmpt, Foam::direction Ncmpts>
339template<
class Form,
class Cmpt, Foam::direction Ncmpts>
356template<
class Form,
class Cmpt, direction Ncmpts>
367template<
class Form,
class Cmpt, direction Ncmpts>
370 const VectorSpace<Form, Cmpt, Ncmpts>& vs,
374 return vs.component(d);
381template<
class Form,
class Cmpt, direction Ncmpts>
384 const VectorSpace<Form, Cmpt, Ncmpts>&,
394template<
class Form,
class Cmpt, direction Ncmpts>
397 const VectorSpace<Form, Cmpt, Ncmpts>& v,
402 return static_cast<const Form&
>(v);
407template<
class Form,
class Cmpt, direction Ncmpts>
410 const VectorSpace<Form, Cmpt, Ncmpts>& v,
415 return sqr(
static_cast<const Form&
>(v));
419template<
class Form,
class Cmpt, direction Ncmpts>
422 const VectorSpace<Form, Cmpt, Ncmpts>& vs
431template<
class Form,
class Cmpt, direction Ncmpts>
434 const VectorSpace<Form, Cmpt, Ncmpts>& vs
437 return ::sqrt(
magSqr(
static_cast<const Form&
>(vs)));
443template<
class Form,
class Cmpt, direction Ncmpts>
452 const scalar
s(
mag(vs));
453 return s < ROOTVSMALL ?
Zero : vs/
s;
457template<
class Form,
class Cmpt, direction Ncmpts>
460 const VectorSpace<Form, Cmpt, Ncmpts>& vs1,
461 const VectorSpace<Form, Cmpt, Ncmpts>& vs2
470template<
class Form,
class Cmpt, direction Ncmpts>
471inline VectorSpace<Form, Cmpt, Ncmpts>
cmptPow
473 const VectorSpace<Form, Cmpt, Ncmpts>& vs1,
474 const VectorSpace<Form, Cmpt, Ncmpts>& vs2
483template<
class Form,
class Cmpt, direction Ncmpts>
484inline VectorSpace<Form, Cmpt, Ncmpts>
cmptDivide
486 const VectorSpace<Form, Cmpt, Ncmpts>& vs1,
487 const VectorSpace<Form, Cmpt, Ncmpts>& vs2
496template<
class Form,
class Cmpt, direction Ncmpts>
497inline VectorSpace<Form, Cmpt, Ncmpts>
stabilise
499 const VectorSpace<Form, Cmpt, Ncmpts>& vs,
509template<
class Form,
class Cmpt, direction Ncmpts>
512 const VectorSpace<Form, Cmpt, Ncmpts>& vs
515 Cmpt cMax = vs.v_[0];
521template<
class Form,
class Cmpt, direction Ncmpts>
524 const VectorSpace<Form, Cmpt, Ncmpts>& vs
527 Cmpt cMin = vs.v_[0];
533template<
class Form,
class Cmpt, direction Ncmpts>
536 const VectorSpace<Form, Cmpt, Ncmpts>& vs
545template<
class Form,
class Cmpt, direction Ncmpts>
548 const VectorSpace<Form, Cmpt, Ncmpts>& vs
555template<
class Form,
class Cmpt, direction Ncmpts>
558 const VectorSpace<Form, Cmpt, Ncmpts>& vs
561 Cmpt product = vs.v_[0];
567template<
class Form,
class Cmpt, direction Ncmpts>
570 const VectorSpace<Form, Cmpt, Ncmpts>& vs
579template<
class Form,
class Cmpt, direction Ncmpts>
582 const VectorSpace<Form, Cmpt, Ncmpts>& vs
591template<
class Form,
class Cmpt, direction Ncmpts>
594 const VectorSpace<Form, Cmpt, Ncmpts>& vs
603template<
class Form,
class Cmpt, direction Ncmpts>
606 const VectorSpace<Form, Cmpt, Ncmpts>& vs1,
607 const VectorSpace<Form, Cmpt, Ncmpts>& vs2
616template<
class Form,
class Cmpt, direction Ncmpts>
619 const VectorSpace<Form, Cmpt, Ncmpts>& vs1,
620 const VectorSpace<Form, Cmpt, Ncmpts>& vs2
629template<
class Form,
class Cmpt, direction Ncmpts>
632 const VectorSpace<Form, Cmpt, Ncmpts>& vs1,
633 const VectorSpace<Form, Cmpt, Ncmpts>& vs2
643inline Type
dot(
const scalar
s,
const Type& t)
650inline Type
dot(
const Type& t,
const scalar
s)
658 class Form1,
class Cmpt1,
direction Ncmpts1,
659 class Form2,
class Cmpt2,
direction Ncmpts2
667 return static_cast<const Form1&
>(t1) &
static_cast<const Form2&
>(t2);
673template<
class Form,
class Cmpt, direction Ncmpts>
685template<
class Form,
class Cmpt, direction Ncmpts>
688 const VectorSpace<Form, Cmpt, Ncmpts>& vs1,
689 const VectorSpace<Form, Cmpt, Ncmpts>& vs2
697template<
class Form,
class Cmpt, direction Ncmpts>
700 const VectorSpace<Form, Cmpt, Ncmpts>& vs1,
701 const VectorSpace<Form, Cmpt, Ncmpts>& vs2
710template<
class Form,
class Cmpt, direction Ncmpts>
714 const VectorSpace<Form, Cmpt, Ncmpts>& vs
723template<
class Form,
class Cmpt, direction Ncmpts>
726 const VectorSpace<Form, Cmpt, Ncmpts>& vs,
736template<
class Form,
class Cmpt, direction Ncmpts>
739 const VectorSpace<Form, Cmpt, Ncmpts>& vs,
776template<
class Form,
class Cmpt, direction Ncmpts>
777inline Cmpt
operator&&
783 Cmpt ddProd = vs1.v_[0]*vs2.v_[0];
786 ddProd += vs1.v_[i]*vs2.v_[i];
792template<
class Form,
class Cmpt, direction Ncmpts>
793inline bool operator==
795 const VectorSpace<Form, Cmpt, Ncmpts>& vs1,
796 const VectorSpace<Form, Cmpt, Ncmpts>& vs2
801 if (!
equal(vs1.v_[i], vs2.v_[i]))
return false;
807template<
class Form,
class Cmpt, direction Ncmpts>
808inline bool operator!=
810 const VectorSpace<Form, Cmpt, Ncmpts>& vs1,
811 const VectorSpace<Form, Cmpt, Ncmpts>& vs2
814 return !(vs1 == vs2);
818template<
class Form,
class Cmpt, direction Ncmpts>
821 const VectorSpace<Form, Cmpt, Ncmpts>& vs1,
822 const VectorSpace<Form, Cmpt, Ncmpts>& vs2
828 if (!(vs1.v_[i] < vs2.v_[i]))
return false;
834template<
class Form,
class Cmpt, direction Ncmpts>
835inline bool operator<=
837 const VectorSpace<Form, Cmpt, Ncmpts>& vs1,
838 const VectorSpace<Form, Cmpt, Ncmpts>& vs2
845template<
class Form,
class Cmpt, direction Ncmpts>
848 const VectorSpace<Form, Cmpt, Ncmpts>& vs1,
849 const VectorSpace<Form, Cmpt, Ncmpts>& vs2
856template<
class Form,
class Cmpt, direction Ncmpts>
857inline bool operator>=
859 const VectorSpace<Form, Cmpt, Ncmpts>& vs1,
860 const VectorSpace<Form, Cmpt, Ncmpts>& vs2
static const direction nComponents
Number of components in this vector space.
void fill(const Cmpt &s)
Assign all components to given value.
const Cmpt & component(const direction) const
void operator=(const VectorSpace< Form, Cmpt, Ncmpts > &)
void replace(const direction, const Cmpt &)
const ConstBlock< SubVector, BStart > block() const
static constexpr direction nComponents
Number of components in this vector space.
iterator begin() noexcept
Return an iterator (pointer) to begin of VectorSpace.
VectorSpace< Form, Cmpt, Ncmpts > vsType
VectorSpace type.
const_iterator cbegin() const noexcept
Return const_iterator (const pointer) to begin of VectorSpace.
Cmpt v_[Ncmpts]
The components of this vector space.
static Form uniform(const Cmpt &s)
Return a VectorSpace with all elements = s.
friend Ostream & operator(Ostream &, const VectorSpace< Form, Cmpt, Ncmpts > &)
VectorSpace()=default
Default construct.
typeOfRank< typenamepTraits< arg1 >::cmptType, direction(pTraits< arg1 >::rank)+direction(pTraits< arg2 >::rank) -2 >::type type
A traits class, which is primarily used for primitives and vector-space.
symmTypeOfRank< typenamepTraits< arg1 >::cmptType, arg2 *direction(pTraits< arg1 >::rank)>::type type
A class representing the concept of 0 (zero) that can be used to avoid manipulating objects known to ...
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
gmvFile<< "tracers "<< particles.size()<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().x()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().y()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().z()<< " ";}gmvFile<< nl;forAll(lagrangianScalarNames, i){ word name=lagrangianScalarNames[i];IOField< scalar > s(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
label max(const labelHashSet &set, label maxValue=labelMin)
Find the max value in labelHashSet, optionally limited by second argument.
dimensionedSymmTensor sqr(const dimensionedVector &dv)
quaternion normalised(const quaternion &q)
Return the normalised (unit) quaternion of the given quaternion.
Scalar minMod(const Scalar s1, const Scalar s2)
void component(FieldField< Field, typename FieldField< Field, Type >::cmptType > &sf, const FieldField< Field, Type > &f, const direction d)
Scalar cmptPow(const Scalar s1, const Scalar s2)
bool equal(const T &a, const T &b)
Compare two values for equality.
label & setComponent(label &val, const direction) noexcept
Non-const access to integer-type (has no components).
void cmptMin(FieldField< Field, typename FieldField< Field, Type >::cmptType > &cf, const FieldField< Field, Type > &f)
dimensioned< Type > cmptDivide(const dimensioned< Type > &, const dimensioned< Type > &)
Scalar cmptSqr(const Scalar s)
Cmpt cmptProduct(const VectorSpace< Form, Cmpt, Ncmpts > &vs)
Cmpt cmptSum(const SphericalTensor< Cmpt > &st)
Return the sum of components of a SphericalTensor.
void dot(FieldField< Field1, typename innerProduct< Type1, Type2 >::type > &f, const FieldField< Field1, Type1 > &f1, const FieldField< Field2, Type2 > &f2)
dimensionedScalar pow(const dimensionedScalar &ds, const dimensionedScalar &expt)
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.
void cmptMagSqr(Field< Type > &result, const UList< Type > &f1)
errorManip< error > abort(error &err)
void cmptMax(FieldField< Field, typename FieldField< Field, Type >::cmptType > &cf, const FieldField< Field, Type > &f)
dimensionedScalar stabilise(const dimensionedScalar &x, const dimensionedScalar &y)
dimensioned< Type > sum(const DimensionedField< Type, GeoMesh > &f1, const label comm)
static constexpr const zero Zero
Global zero (0).
dimensioned< Type > cmptMultiply(const dimensioned< Type > &, const dimensioned< Type > &)
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...
void cmptMag(FieldField< Field, Type > &cf, const FieldField< Field, Type > &f)
dimensioned< typename typeOfMag< Type >::type > magSqr(const dimensioned< Type > &dt)
Various functors for unary and binary operations. Can be used for parallel combine-reduce operations ...
Traits classes for inner and outer products of primitives.
static void opSV(V &vs, const S &s, const V1 &vs1, BinaryOp bop)
Apply the binary operation between scalar and vector-space data and assign the result.
static void fill_n(Output result, const T &val)
Somewhat equivalent to std::fill_n() but with templated loops.
static void SeqOp(S &s, const V &vs, EqOp eo)
Apply the inplace binary reduction operation.
static void eqOpS(V &vs, const S &s, EqOp eo)
Apply the binary assignment operation to each vector-space component.
static void copy_n(Input input, Output result)
Somewhat equivalent to std::copy_n() but with templated loops.
static void op(V &vs, const V1 &vs1, const V1 &vs2, BinaryOp bop)
Apply the binary operation between two vector-space data and assign the result.
static void eqOp(V1 &vs1, const V2 &vs2, EqOp eo)
Apply the inplace binary assignment operation to the components.
static void opVS(V &vs, const V1 &vs1, const S &s, BinaryOp bop)
Apply the binary operation between vector-space and scalar data and assign the result.