89 Tensor<Cmpt>(vecs.
x(), vecs.
y(), vecs.
z(), transposed)
116 const Cmpt txx,
const Cmpt txy,
const Cmpt txz,
117 const Cmpt tyx,
const Cmpt tyy,
const Cmpt tyz,
118 const Cmpt tzx,
const Cmpt tzy,
const Cmpt tzz
121 this->v_[XX] = txx; this->v_[XY] = txy; this->v_[XZ] = txz;
122 this->v_[YX] = tyx; this->v_[YY] = tyy; this->v_[YZ] = tyz;
123 this->v_[ZX] = tzx; this->v_[ZY] = tzy; this->v_[ZZ] = tzz;
130 template<
class, Foam::direction, Foam::direction>
class Block2,
195template<Foam::direction Idx>
198 if (Idx == 0)
return cx();
199 else if (Idx == 1)
return cy();
200 else if (Idx == 2)
return cz();
202 static_assert(Idx < 3,
"Invalid column access");
212 case 0:
return cx();
break;
213 case 1:
return cy();
break;
214 case 2:
return cz();
break;
225template<Foam::direction Idx>
228 if (Idx == 0)
return x();
229 else if (Idx == 1)
return y();
230 else if (Idx == 2)
return z();
232 static_assert(Idx < 3,
"Invalid row access");
242 case 0:
return x();
break;
243 case 1:
return y();
break;
244 case 2:
return z();
break;
255template<Foam::direction Idx>
260 this->v_[XX] = v.
x();
261 this->v_[YX] = v.
y();
262 this->v_[ZX] = v.
z();
266 this->v_[XY] = v.
x();
267 this->v_[YY] = v.
y();
268 this->v_[ZY] = v.
z();
272 this->v_[XZ] = v.
x();
273 this->v_[YZ] = v.
y();
274 this->v_[ZZ] = v.
z();
277 static_assert(Idx < 3,
"Invalid column access");
282template<Foam::direction Idx>
287 this->v_[XX] = v.
x(); this->v_[XY] = v.
y(); this->v_[XZ] = v.
z();
291 this->v_[YX] = v.
x(); this->v_[YY] = v.
y(); this->v_[YZ] = v.
z();
295 this->v_[ZX] = v.
x(); this->v_[ZY] = v.
y(); this->v_[ZZ] = v.
z();
298 static_assert(Idx < 3,
"Invalid row access");
305 const Vector<Cmpt>&
x,
306 const Vector<Cmpt>&
y,
307 const Vector<Cmpt>& z
339 case 0: col<0>(v);
break;
340 case 1: col<1>(v);
break;
341 case 2: col<2>(v);
break;
353 const Vector<Cmpt>& v
358 case 0: row<0>(v);
break;
359 case 1: row<1>(v);
break;
360 case 2: row<2>(v);
break;
442 xx()*yy()*zz() + xy()*yz()*zx()
456 return (yy()*zz() - yz()*zy());
461 return (xx()*zz() - xz()*zx());
475 yy()*zz() - zy()*yz(), xz()*zy() - xy()*zz(), xy()*yz() - xz()*yy(),
534 const Cmpt detval = this->det2D(excludeCmpt);
536 return this->adjunct2D(excludeCmpt)/detval;
541#if defined(__GNUC__) && !defined(__clang__)
543__attribute__((optimize(
"no-tree-vectorize")))
568#if defined(__GNUC__) && !defined(__clang__)
570__attribute__((optimize(
"no-tree-vectorize")))
590 const Cmpt detval = this->
det();
593 if (
mag(detval) < VSMALL)
596 <<
"Tensor not properly invertible, determinant:"
597 << detval <<
" tensor:" << *
this <<
nl
620 const scalar threshold = SMALL * (magSqr_xx + magSqr_yy + magSqr_zz);
622 const bool small_xx = (magSqr_xx < threshold);
623 const bool small_yy = (magSqr_yy < threshold);
624 const bool small_zz = (magSqr_zz < threshold);
626 if (small_xx || small_yy || small_zz)
634 const Cmpt detval = work.
det();
636 if (
mag(detval) < ROOTVSMALL)
652 const Cmpt detval = this->
det();
654 if (
mag(detval) < ROOTVSMALL)
657 return Tensor<Cmpt>(
Zero);
669 *
this = this->
inner(t);
705 this->v_[XX] =
tr.x().x();
706 this->v_[XY] =
tr.x().y();
707 this->v_[XZ] =
tr.x().z();
709 this->v_[YX] =
tr.y().x();
710 this->v_[YY] =
tr.y().y();
711 this->v_[YZ] =
tr.y().z();
713 this->v_[ZX] =
tr.z().x();
714 this->v_[ZY] =
tr.z().y();
715 this->v_[ZZ] =
tr.z().z();
730 return t.
xx() + t.
yy() + t.
zz();
751 t.
xx(), 0.5*(t.
xy() + t.
yx()), 0.5*(t.
xz() + t.
zx()),
752 t.
yy(), 0.5*(t.
yz() + t.
zy()),
760inline SymmTensor<Cmpt>
twoSymm(
const Tensor<Cmpt>& t)
764 2*t.xx(), (t.xy() + t.yx()), (t.xz() + t.zx()),
765 2*t.yy(), (t.yz() + t.zy()),
773inline SymmTensor<Cmpt>
devSymm(
const Tensor<Cmpt>& t)
775 const Cmpt
sph(
tr(t)/3.0);
779 t.xx() -
sph, 0.5*(t.xy() + t.yx()), 0.5*(t.xz() + t.zx()),
780 t.yy() -
sph, 0.5*(t.yz() + t.zy()),
788inline SymmTensor<Cmpt>
devTwoSymm(
const Tensor<Cmpt>& t)
790 const Cmpt
sph((2.0/3.0)*
tr(t));
792 return SymmTensor<Cmpt>
794 2*t.xx() -
sph, (t.xy() + t.yx()), (t.xz() + t.zx()),
795 2*t.yy() -
sph, (t.yz() + t.zy()),
803inline Tensor<Cmpt>
skew(
const Tensor<Cmpt>& t)
807 Zero, 0.5*(t.xy() - t.yx()), 0.5*(t.xz() - t.zx()),
808 0.5*(t.yx() - t.xy()),
Zero, 0.5*(t.yz() - t.zy()),
809 0.5*(t.zx() - t.xz()), 0.5*(t.zy() - t.yz()),
Zero
816inline const Tensor<Cmpt>&
skew(
const SymmTensor<Cmpt>& st)
832inline Tensor<Cmpt>
dev2(
const Tensor<Cmpt>& t)
840inline Cmpt
det(
const Tensor<Cmpt>& t)
859 if (
mag(detval) < VSMALL)
862 <<
"Tensor not properly invertible, determinant:"
863 << detval <<
" tensor:" << t <<
nl
894 t.xx()*t.yy() + t.yy()*t.zz() + t.xx()*t.zz()
895 - t.xy()*t.yx() - t.yz()*t.zy() - t.xz()*t.zx()
910inline Tensor<Cmpt>
lerp
912 const Tensor<Cmpt>& a,
913 const Tensor<Cmpt>&
b,
917 const scalar onet = (1-t);
921 onet*a.xx() + t*
b.xx(),
922 onet*a.xy() + t*
b.xy(),
923 onet*a.xz() + t*
b.xz(),
924 onet*a.yx() + t*
b.yx(),
925 onet*a.yy() + t*
b.yy(),
926 onet*a.yz() + t*
b.yz(),
927 onet*a.zx() + t*
b.zx(),
928 onet*a.zy() + t*
b.zy(),
929 onet*a.zz() + t*
b.zz()
943 st1.
ii() + t2.
xx(), t2.
xy(), t2.
xz(),
944 t2.
yx(), st1.
ii() + t2.
yy(), t2.
yz(),
945 t2.
zx(), t2.
zy(), st1.
ii() + t2.
zz()
953operator+(
const Tensor<Cmpt>& t1,
const SphericalTensor<Cmpt>& st2)
957 t1.xx() + st2.ii(), t1.xy(), t1.xz(),
958 t1.yx(), t1.yy() + st2.ii(), t1.yz(),
959 t1.zx(), t1.zy(), t1.zz() + st2.ii()
971 st1.xx() + t2.xx(), st1.xy() + t2.xy(), st1.xz() + t2.xz(),
972 st1.xy() + t2.yx(), st1.yy() + t2.yy(), st1.yz() + t2.yz(),
973 st1.xz() + t2.zx(), st1.yz() + t2.zy(), st1.zz() + t2.zz()
981operator+(
const Tensor<Cmpt>& t1,
const SymmTensor<Cmpt>& st2)
985 t1.xx() + st2.xx(), t1.xy() + st2.xy(), t1.xz() + st2.xz(),
986 t1.yx() + st2.xy(), t1.yy() + st2.yy(), t1.yz() + st2.yz(),
987 t1.zx() + st2.xz(), t1.zy() + st2.yz(), t1.zz() + st2.zz()
995operator-(
const SphericalTensor<Cmpt>& st1,
const Tensor<Cmpt>& t2)
999 st1.ii() - t2.xx(), -t2.xy(), -t2.xz(),
1000 -t2.yx(), st1.ii() - t2.yy(), -t2.yz(),
1001 -t2.zx(), -t2.zy(), st1.ii() - t2.zz()
1009operator-(
const Tensor<Cmpt>& t1,
const SphericalTensor<Cmpt>& st2)
1013 t1.xx() - st2.ii(), t1.xy(), t1.xz(),
1014 t1.yx(), t1.yy() - st2.ii(), t1.yz(),
1015 t1.zx(), t1.zy(), t1.zz() - st2.ii()
1027 st1.
xx() - t2.
xx(), st1.
xy() - t2.
xy(), st1.
xz() - t2.
xz(),
1028 st1.
xy() - t2.
yx(), st1.
yy() - t2.
yy(), st1.
yz() - t2.
yz(),
1029 st1.
xz() - t2.
zx(), st1.
yz() - t2.
zy(), st1.
zz() - t2.
zz()
1041 t1.
xx() - st2.
xx(), t1.
xy() - st2.
xy(), t1.
xz() - st2.
xz(),
1042 t1.
yx() - st2.
xy(), t1.
yy() - st2.
yy(), t1.
yz() - st2.
yz(),
1043 t1.
zx() - st2.
xz(), t1.
zy() - st2.
yz(), t1.
zz() - st2.
zz()
1058inline Tensor<Cmpt>
operator*(
const Vector<Cmpt>& v)
1062 Zero, -v.z(), v.y(),
1063 v.z(),
Zero, -v.x(),
1071inline typename innerProduct<Vector<Cmpt>, Tensor<Cmpt>>
::type
1072operator/(
const Vector<Cmpt>& v,
const Tensor<Cmpt>& t)
1084 if (
mag(
s) < VSMALL)
1088 <<
" is not divisible due to a zero value in Cmpt:"
1096 t.xx()/
s, t.xy()/
s, t.xz()/
s,
1098 t.zx()/
s, t.zy()/
s, t.zz()/
s
1105inline typename innerProduct<Tensor<Cmpt>, Tensor<Cmpt>>
::type
1106operator&(
const Tensor<Cmpt>& t1,
const Tensor<Cmpt>& t2)
1108 return t1.inner(t2);
1114#if defined(__GNUC__) && !defined(__clang__)
1116__attribute__((optimize(
"no-tree-vectorize")))
1119operator&(
const SphericalTensor<Cmpt>& st1,
const Tensor<Cmpt>& t2)
1123 st1.ii()*t2.xx(), st1.ii()*t2.xy(), st1.ii()*t2.xz(),
1124 st1.ii()*t2.yx(), st1.ii()*t2.yy(), st1.ii()*t2.yz(),
1125 st1.ii()*t2.zx(), st1.ii()*t2.zy(), st1.ii()*t2.zz()
1132#if defined(__GNUC__) && !defined(__clang__)
1134__attribute__((optimize(
"no-tree-vectorize")))
1150#if defined(__GNUC__) && !defined(__clang__)
1152__attribute__((optimize(
"no-tree-vectorize")))
1155operator&(
const SymmTensor<Cmpt>& st1,
const Tensor<Cmpt>& t2)
1159 st1.xx()*t2.xx() + st1.xy()*t2.yx() + st1.xz()*t2.zx(),
1160 st1.xx()*t2.xy() + st1.xy()*t2.yy() + st1.xz()*t2.zy(),
1161 st1.xx()*t2.xz() + st1.xy()*t2.yz() + st1.xz()*t2.zz(),
1163 st1.xy()*t2.xx() + st1.yy()*t2.yx() + st1.yz()*t2.zx(),
1164 st1.xy()*t2.xy() + st1.yy()*t2.yy() + st1.yz()*t2.zy(),
1165 st1.xy()*t2.xz() + st1.yy()*t2.yz() + st1.yz()*t2.zz(),
1167 st1.xz()*t2.xx() + st1.yz()*t2.yx() + st1.zz()*t2.zx(),
1168 st1.xz()*t2.xy() + st1.yz()*t2.yy() + st1.zz()*t2.zy(),
1169 st1.xz()*t2.xz() + st1.yz()*t2.yz() + st1.zz()*t2.zz()
1176#if defined(__GNUC__) && !defined(__clang__)
1178__attribute__((optimize(
"no-tree-vectorize")))
1185 t1.
xx()*st2.
xx() + t1.
xy()*st2.
xy() + t1.
xz()*st2.
xz(),
1186 t1.
xx()*st2.
xy() + t1.
xy()*st2.
yy() + t1.
xz()*st2.
yz(),
1187 t1.
xx()*st2.
xz() + t1.
xy()*st2.
yz() + t1.
xz()*st2.
zz(),
1189 t1.
yx()*st2.
xx() + t1.
yy()*st2.
xy() + t1.
yz()*st2.
xz(),
1190 t1.
yx()*st2.
xy() + t1.
yy()*st2.
yy() + t1.
yz()*st2.
yz(),
1191 t1.
yx()*st2.
xz() + t1.
yy()*st2.
yz() + t1.
yz()*st2.
zz(),
1193 t1.
zx()*st2.
xx() + t1.
zy()*st2.
xy() + t1.
zz()*st2.
xz(),
1194 t1.
zx()*st2.
xy() + t1.
zy()*st2.
yy() + t1.
zz()*st2.
yz(),
1202#if defined(__GNUC__) && !defined(__clang__)
1204__attribute__((optimize(
"no-tree-vectorize")))
1207operator&(
const Tensor<Cmpt>& t,
const Vector<Cmpt>& v)
1211 t.xx()*v.x() + t.xy()*v.y() + t.xz()*v.z(),
1212 t.yx()*v.x() + t.yy()*v.y() + t.yz()*v.z(),
1213 t.zx()*v.x() + t.zy()*v.y() + t.zz()*v.z()
1220#if defined(__GNUC__) && !defined(__clang__)
1222__attribute__((optimize(
"no-tree-vectorize")))
1229 v.
x()*t.
xx() + v.
y()*t.
yx() + v.
z()*t.
zx(),
1230 v.
x()*t.
xy() + v.
y()*t.
yy() + v.
z()*t.
zy(),
1231 v.
x()*t.
xz() + v.
y()*t.
yz() + v.
z()*t.
zz()
1239operator&&(
const SphericalTensor<Cmpt>& st1,
const Tensor<Cmpt>& t2)
1241 return (st1.ii()*t2.xx() + st1.ii()*t2.yy() + st1.ii()*t2.zz());
1250 return (t1.
xx()*st2.
ii() + t1.
yy()*st2.
ii() + t1.
zz()*st2.
ii());
1257operator&&(
const SymmTensor<Cmpt>& st1,
const Tensor<Cmpt>& t2)
1261 st1.xx()*t2.xx() + st1.xy()*t2.xy() + st1.xz()*t2.xz() +
1262 st1.xy()*t2.yx() + st1.yy()*t2.yy() + st1.yz()*t2.yz() +
1263 st1.xz()*t2.zx() + st1.yz()*t2.zy() + st1.zz()*t2.zz()
1275 t1.xx()*st2.xx() + t1.xy()*st2.xy() + t1.xz()*st2.xz() +
1276 t1.yx()*st2.xy() + t1.yy()*st2.yy() + t1.yz()*st2.yz() +
1277 t1.zx()*st2.xz() + t1.zy()*st2.yz() + t1.zz()*st2.zz()
1284inline typename outerProduct<Vector<Cmpt>, Vector<Cmpt>>
::type
1285operator*(
const Vector<Cmpt>& v1,
const Vector<Cmpt>& v2)
1289 v1.x()*v2.x(), v1.x()*v2.y(), v1.x()*v2.z(),
1290 v1.y()*v2.x(), v1.y()*v2.y(), v1.y()*v2.z(),
1291 v1.z()*v2.x(), v1.z()*v2.y(), v1.z()*v2.z()
1299class typeOfSum<SphericalTensor<Cmpt>, Tensor<Cmpt>>
1303 typedef Tensor<Cmpt>
type;
1317class innerProduct<SphericalTensor<Cmpt>, Tensor<Cmpt>>
1326class innerProduct<Tensor<Cmpt>, SphericalTensor<Cmpt>>
1335class typeOfSum<SymmTensor<Cmpt>, Tensor<Cmpt>>
1339 typedef Tensor<Cmpt>
type;
1353class innerProduct<SymmTensor<Cmpt>, Tensor<Cmpt>>
1357 typedef Tensor<Cmpt>
type;
An Istream is an abstract base class for all input systems (streams, files, token lists etc)....
MatrixSpace< Tensor< Cmpt >, Cmpt, Mrows, Ncols > msType
Foam::MatrixSpace< Tensor< Cmpt >, Cmpt, Mrows, Ncols >::template ConstBlock< SubTensor, BRowStart, BColStart > block() const
A templated (3 x 3) diagonal tensor of objects of <T>, effectively containing 1 element,...
const Cmpt & ii() const noexcept
A templated (3 x 3) symmetric tensor of objects of <T>, effectively containing 6 elements,...
const Cmpt & yy() const noexcept
const Cmpt & xx() const noexcept
const Cmpt & yz() const noexcept
const Cmpt & zz() const noexcept
const Cmpt & xy() const noexcept
const Cmpt & xz() const noexcept
A templated (3 x 3) tensor of objects of <T> derived from MatrixSpace.
scalar diagSqr() const
The L2-norm squared of the diagonal.
bool is_identity(const scalar tol=ROOTVSMALL) const
Is identity tensor?
Tensor< Cmpt > T() const
Return non-Hermitian transpose.
const Cmpt & yy() const noexcept
Tensor< Cmpt > safeInv() const
Return inverse, with (ad hoc) failsafe handling of 2D tensors.
void addDiag(const Vector< Cmpt > &v)
Add to the diagonal.
Tensor< Cmpt > inv2D(const direction excludeCmpt) const
Return inverse of 2D tensor (by excluding given direction).
void rows(const Vector< Cmpt > &x, const Vector< Cmpt > &y, const Vector< Cmpt > &z)
Set row values.
void operator&=(const Tensor< Cmpt > &t)
Assign inner-product of this with another Tensor.
Tensor & operator=(const Tensor &)=default
Copy assignment.
Tensor< Cmpt > adjunct() const
Return adjunct matrix (transpose of cofactor matrix).
Cmpt det2D(const direction excludeCmpt) const
The 2D determinant by excluding given direction.
Vector< Cmpt > row() const
Extract vector for given row: compile-time check of index.
void subtractDiag(const Vector< Cmpt > &v)
Subtract from the diagonal.
Vector< Cmpt > z() const
Extract vector for row 2.
Vector< Cmpt > cz() const
Extract vector for column 2.
const Cmpt & zy() const noexcept
const Cmpt & yx() const noexcept
Tensor< Cmpt > adjunct2D(const direction excludeCmpt) const
Return 2D adjunct matrix by excluding given direction.
Tensor< Cmpt > inner(const Tensor< Cmpt > &t2) const
Inner-product of this with another Tensor.
Cmpt det() const
The determinate.
Tensor< Cmpt > inv() const
Return inverse.
Vector< Cmpt > cx() const
Extract vector for column 0.
Vector< Cmpt > cy() const
Extract vector for column 1.
void cols(const Vector< Cmpt > &x, const Vector< Cmpt > &y, const Vector< Cmpt > &z)
Set column values.
Vector< Cmpt > y() const
Extract vector for row 1.
const Cmpt & xx() const noexcept
Tensor< Cmpt > cof() const
Return cofactor matrix (transpose of adjunct matrix).
Vector< Cmpt > col() const
Extract vector for given column: compile-time check of index.
const Cmpt & yz() const noexcept
Tensor()=default
Default construct.
Tensor< Cmpt > schur(const Tensor< Cmpt > &t2) const
Schur-product of this with another Tensor.
Vector< Cmpt > diag() const
Extract the diagonal as a vector.
const Cmpt & zz() const noexcept
const Cmpt & xy() const noexcept
const Cmpt & xz() const noexcept
const Cmpt & zx() const noexcept
Vector< Cmpt > x() const
Extract vector for row 0.
static const Tensor< Cmpt > zero
friend Ostream & operator(Ostream &, const VectorSpace< Tensor< Cmpt >, Cmpt, Ncmpts > &)
Templated 3D Vector derived from VectorSpace adding construction from 3 components,...
const Cmpt & x() const noexcept
Access to the vector x component.
const Cmpt & z() const noexcept
Access to the vector z component.
const Cmpt & y() const noexcept
Access to the vector y component.
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.
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))
tmp< faMatrix< Type > > operator-(const faMatrix< Type > &)
Unary negation.
dimensionedSymmTensor dev2(const dimensionedSymmTensor &dt)
dimensionedSymmTensor dev(const dimensionedSymmTensor &dt)
dimensionedScalar det(const dimensionedSphericalTensor &dt)
dimensionedSymmTensor symm(const dimensionedSymmTensor &dt)
dimensionedScalar tr(const dimensionedSphericalTensor &dt)
tmp< faMatrix< Type > > operator+(const faMatrix< Type > &, const faMatrix< Type > &)
SymmTensor< Cmpt > devTwoSymm(const SymmTensor< Cmpt > &st)
Return the deviatoric part of twice the symmetric part of a SymmTensor.
dimensionedSymmTensor twoSymm(const dimensionedSymmTensor &dt)
Cmpt invariantII(const SymmTensor2D< Cmpt > &st)
Return the 2nd invariant of a SymmTensor2D.
Cmpt invariantI(const SymmTensor2D< Cmpt > &st)
Return the 1st invariant of a SymmTensor2D.
tmp< faMatrix< Type > > operator*(const areaScalarField::Internal &, const faMatrix< Type > &)
SymmTensor< Cmpt > devSymm(const SymmTensor< Cmpt > &st)
Return the deviatoric part of the symmetric part of a SymmTensor.
Cmpt invariantIII(const SymmTensor< Cmpt > &st)
Return the 3rd invariant of a SymmTensor.
fileName::Type type(const fileName &name, const bool followLink=true)
Return the file type: DIRECTORY or FILE, normally following symbolic links.
dimensionedScalar operator/(const scalar s1, const dimensionedScalar &ds2)
dimensionedSymmTensor cof(const dimensionedSymmTensor &dt)
tmp< GeometricField< Type, faPatchField, areaMesh > > operator&(const faMatrix< Type > &, const DimensionedField< Type, areaMesh > &)
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
errorManip< error > abort(error &err)
SphericalTensor< Cmpt > sph(const DiagTensor< Cmpt > &dt)
Return the spherical part of a DiagTensor as a SphericalTensor.
static constexpr const zero Zero
Global zero (0).
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...
dimensionedSphericalTensor inv(const dimensionedSphericalTensor &dt)
dimensioned< typename scalarProduct< Type1, Type2 >::type > operator&&(const dimensioned< Type1 > &, const dimensioned< Type2 > &)
dimensioned< typename typeOfMag< Type >::type > magSqr(const dimensioned< Type > &dt)
dimensionedTensor skew(const dimensionedTensor &dt)
dimensioned< Type > lerp(const dimensioned< Type > &a, const dimensioned< Type > &b, const scalar t)
constexpr char nl
The newline '\n' character (0x0a).