SymmTensorI.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | www.openfoam.com
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8  Copyright (C) 2011-2016 OpenFOAM Foundation
9  Copyright (C) 2019 OpenCFD Ltd.
10 -------------------------------------------------------------------------------
11 License
12  This file is part of OpenFOAM.
13 
14  OpenFOAM is free software: you can redistribute it and/or modify it
15  under the terms of the GNU General Public License as published by
16  the Free Software Foundation, either version 3 of the License, or
17  (at your option) any later version.
18 
19  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
20  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
21  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22  for more details.
23 
24  You should have received a copy of the GNU General Public License
25  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
26 
27 \*---------------------------------------------------------------------------*/
28 
29 #include "Tensor.H"
30 
31 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
32 
33 template<class Cmpt>
35 {}
36 
37 
38 template<class Cmpt>
40 :
42 {}
43 
44 
45 template<class Cmpt>
46 template<class Cmpt2>
48 (
49  const VectorSpace<SymmTensor<Cmpt2>, Cmpt2, 6>& vs
50 )
51 :
53 {}
54 
55 
56 template<class Cmpt>
58 {
59  this->v_[XX] = st.ii(); this->v_[XY] = 0; this->v_[XZ] = 0;
60  this->v_[YY] = st.ii(); this->v_[YZ] = 0;
61  this->v_[ZZ] = st.ii();
62 }
63 
64 
65 template<class Cmpt>
67 (
68  const Cmpt txx, const Cmpt txy, const Cmpt txz,
69  const Cmpt tyy, const Cmpt tyz,
70  const Cmpt tzz
71 )
72 {
73  this->v_[XX] = txx; this->v_[XY] = txy; this->v_[XZ] = txz;
74  this->v_[YY] = tyy; this->v_[YZ] = tyz;
75  this->v_[ZZ] = tzz;
76 }
77 
78 
79 template<class Cmpt>
81 :
82  SymmTensor::vsType(is)
83 {}
84 
85 
86 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
87 
88 template<class Cmpt>
89 inline const Cmpt& Foam::SymmTensor<Cmpt>::xx() const
90 {
91  return this->v_[XX];
92 }
93 
94 template<class Cmpt>
95 inline const Cmpt& Foam::SymmTensor<Cmpt>::xy() const
96 {
97  return this->v_[XY];
98 }
99 
100 template<class Cmpt>
101 inline const Cmpt& Foam::SymmTensor<Cmpt>::xz() const
102 {
103  return this->v_[XZ];
104 }
105 
106 template<class Cmpt>
107 inline const Cmpt& Foam::SymmTensor<Cmpt>::yy() const
108 {
109  return this->v_[YY];
110 }
111 
112 template<class Cmpt>
113 inline const Cmpt& Foam::SymmTensor<Cmpt>::yz() const
114 {
115  return this->v_[YZ];
116 }
117 
118 template<class Cmpt>
119 inline const Cmpt& Foam::SymmTensor<Cmpt>::zz() const
120 {
121  return this->v_[ZZ];
122 }
123 
124 
125 template<class Cmpt>
127 {
128  return this->v_[XX];
129 }
130 
131 template<class Cmpt>
133 {
134  return this->v_[XY];
135 }
136 
137 template<class Cmpt>
139 {
140  return this->v_[XZ];
141 }
142 
143 template<class Cmpt>
145 {
146  return this->v_[YY];
147 }
148 
149 template<class Cmpt>
151 {
152  return this->v_[YZ];
153 }
154 
155 template<class Cmpt>
157 {
158  return this->v_[ZZ];
159 }
160 
161 
162 template<class Cmpt>
164 {
165  return Vector<Cmpt>(this->v_[XX], this->v_[YY], this->v_[ZZ]);
166 }
167 
168 
169 template<class Cmpt>
171 {
172  this->v_[XX] = v.x(); this->v_[YY] = v.y(); this->v_[ZZ] = v.z();
173 }
174 
175 
176 template<class Cmpt>
178 {
179  return *this;
180 }
181 
182 
183 // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
184 
185 template<class Cmpt>
187 {
188  this->v_[XX] = st.ii(); this->v_[XY] = 0; this->v_[XZ] = 0;
189  this->v_[YY] = st.ii(); this->v_[YZ] = 0;
190  this->v_[ZZ] = st.ii();
191 }
192 
193 
194 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
195 
196 namespace Foam
197 {
198 
199 // * * * * * * * * * * * * * * * Global Operators * * * * * * * * * * * * * //
200 
201 //- Hodge Dual operator (tensor -> vector)
202 template<class Cmpt>
204 {
205  return Vector<Cmpt>(st.yz(), -st.xz(), st.xy());
206 }
207 
208 
209 //- Inner-product between two symmetric tensors
210 template<class Cmpt>
211 inline Tensor<Cmpt>
213 {
214  return Tensor<Cmpt>
215  (
216  st1.xx()*st2.xx() + st1.xy()*st2.xy() + st1.xz()*st2.xz(),
217  st1.xx()*st2.xy() + st1.xy()*st2.yy() + st1.xz()*st2.yz(),
218  st1.xx()*st2.xz() + st1.xy()*st2.yz() + st1.xz()*st2.zz(),
219 
220  st1.xy()*st2.xx() + st1.yy()*st2.xy() + st1.yz()*st2.xz(),
221  st1.xy()*st2.xy() + st1.yy()*st2.yy() + st1.yz()*st2.yz(),
222  st1.xy()*st2.xz() + st1.yy()*st2.yz() + st1.yz()*st2.zz(),
223 
224  st1.xz()*st2.xx() + st1.yz()*st2.xy() + st1.zz()*st2.xz(),
225  st1.xz()*st2.xy() + st1.yz()*st2.yy() + st1.zz()*st2.yz(),
226  st1.xz()*st2.xz() + st1.yz()*st2.yz() + st1.zz()*st2.zz()
227  );
228 }
229 
230 
231 //- Double-dot-product between a symmetric tensor and a symmetric tensor
232 template<class Cmpt>
233 inline Cmpt
235 {
236  return
237  (
238  st1.xx()*st2.xx() + 2*st1.xy()*st2.xy() + 2*st1.xz()*st2.xz()
239  + st1.yy()*st2.yy() + 2*st1.yz()*st2.yz()
240  + st1.zz()*st2.zz()
241  );
242 }
243 
244 
245 //- Inner-product between a symmetric tensor and a vector
246 template<class Cmpt>
247 inline Vector<Cmpt>
249 {
250  return Vector<Cmpt>
251  (
252  st.xx()*v.x() + st.xy()*v.y() + st.xz()*v.z(),
253  st.xy()*v.x() + st.yy()*v.y() + st.yz()*v.z(),
254  st.xz()*v.x() + st.yz()*v.y() + st.zz()*v.z()
255  );
256 }
257 
258 
259 //- Inner-product between a vector and a symmetric tensor
260 template<class Cmpt>
261 inline Vector<Cmpt>
263 {
264  return Vector<Cmpt>
265  (
266  v.x()*st.xx() + v.y()*st.xy() + v.z()*st.xz(),
267  v.x()*st.xy() + v.y()*st.yy() + v.z()*st.yz(),
268  v.x()*st.xz() + v.y()*st.yz() + v.z()*st.zz()
269  );
270 }
271 
272 
273 //- Inner-sqr of a symmetric tensor
274 template<class Cmpt>
275 inline SymmTensor<Cmpt>
277 {
278  return SymmTensor<Cmpt>
279  (
280  st.xx()*st.xx() + st.xy()*st.xy() + st.xz()*st.xz(),
281  st.xx()*st.xy() + st.xy()*st.yy() + st.xz()*st.yz(),
282  st.xx()*st.xz() + st.xy()*st.yz() + st.xz()*st.zz(),
283 
284  st.xy()*st.xy() + st.yy()*st.yy() + st.yz()*st.yz(),
285  st.xy()*st.xz() + st.yy()*st.yz() + st.yz()*st.zz(),
286 
287  st.xz()*st.xz() + st.yz()*st.yz() + st.zz()*st.zz()
288  );
289 }
290 
291 
292 template<class Cmpt>
293 inline Cmpt magSqr(const SymmTensor<Cmpt>& st)
294 {
295  return
296  (
297  magSqr(st.xx()) + 2*magSqr(st.xy()) + 2*magSqr(st.xz())
298  + magSqr(st.yy()) + 2*magSqr(st.yz())
299  + magSqr(st.zz())
300  );
301 }
302 
303 
304 //- Return the trace of a symmetric tensor
305 template<class Cmpt>
306 inline Cmpt tr(const SymmTensor<Cmpt>& st)
307 {
308  return st.xx() + st.yy() + st.zz();
309 }
310 
311 
312 //- Return the spherical part of a symmetric tensor
313 template<class Cmpt>
315 {
316  return (1.0/3.0)*tr(st);
317 }
318 
319 
320 //- Return the symmetric part of a symmetric tensor, i.e. itself
321 template<class Cmpt>
322 inline const SymmTensor<Cmpt>& symm(const SymmTensor<Cmpt>& st)
323 {
324  return st;
325 }
326 
327 
328 //- Return twice the symmetric part of a symmetric tensor
329 template<class Cmpt>
331 {
332  return 2*st;
333 }
334 
335 
336 //- Return the deviatoric part of a symmetric tensor
337 template<class Cmpt>
339 {
340  return st - SphericalTensor<Cmpt>::oneThirdI*tr(st);
341 }
342 
343 
344 //- Return the deviatoric part of a symmetric tensor
345 template<class Cmpt>
347 {
348  return st - SphericalTensor<Cmpt>::twoThirdsI*tr(st);
349 }
350 
351 
352 //- Return the determinant of a symmetric tensor
353 template<class Cmpt>
354 inline Cmpt det(const SymmTensor<Cmpt>& st)
355 {
356  return
357  (
358  st.xx()*st.yy()*st.zz() + st.xy()*st.yz()*st.xz()
359  + st.xz()*st.xy()*st.yz() - st.xx()*st.yz()*st.yz()
360  - st.xy()*st.xy()*st.zz() - st.xz()*st.yy()*st.xz()
361  );
362 }
363 
364 
365 //- Return the cofactor symmetric tensor of a symmetric tensor
366 template<class Cmpt>
368 {
369  return SymmTensor<Cmpt>
370  (
371  st.yy()*st.zz() - st.yz()*st.yz(),
372  st.xz()*st.yz() - st.xy()*st.zz(),
373  st.xy()*st.yz() - st.xz()*st.yy(),
374 
375  st.xx()*st.zz() - st.xz()*st.xz(),
376  st.xy()*st.xz() - st.xx()*st.yz(),
377 
378  st.xx()*st.yy() - st.xy()*st.xy()
379  );
380 }
381 
382 
383 //- Return the inverse of a symmetric tensor give the determinant
384 template<class Cmpt>
385 inline SymmTensor<Cmpt> inv(const SymmTensor<Cmpt>& st, const Cmpt detst)
386 {
387  return SymmTensor<Cmpt>
388  (
389  st.yy()*st.zz() - st.yz()*st.yz(),
390  st.xz()*st.yz() - st.xy()*st.zz(),
391  st.xy()*st.yz() - st.xz()*st.yy(),
392 
393  st.xx()*st.zz() - st.xz()*st.xz(),
394  st.xy()*st.xz() - st.xx()*st.yz(),
395 
396  st.xx()*st.yy() - st.xy()*st.xy()
397  )/detst;
398 }
399 
400 
401 //- Return the inverse of a symmetric tensor
402 template<class Cmpt>
404 {
405  return inv(st, det(st));
406 }
407 
408 
409 //- Return the 1st invariant of a symmetric tensor
410 template<class Cmpt>
411 inline Cmpt invariantI(const SymmTensor<Cmpt>& st)
412 {
413  return tr(st);
414 }
415 
416 
417 //- Return the 2nd invariant of a symmetric tensor
418 template<class Cmpt>
419 inline Cmpt invariantII(const SymmTensor<Cmpt>& st)
420 {
421  return
422  (
423  st.xx()*st.yy() + st.yy()*st.zz() + st.xx()*st.zz()
424  - sqr(st.xy()) - sqr(st.yz()) - sqr(st.xz())
425  );
426 }
427 
428 
429 //- Return the 3rd invariant of a symmetric tensor
430 template<class Cmpt>
431 inline Cmpt invariantIII(const SymmTensor<Cmpt>& st)
432 {
433  return det(st);
434 }
435 
436 
437 template<class Cmpt>
438 inline SymmTensor<Cmpt>
440 {
441  return SymmTensor<Cmpt>
442  (
443  spt1.ii() + st2.xx(), st2.xy(), st2.xz(),
444  spt1.ii() + st2.yy(), st2.yz(),
445  spt1.ii() + st2.zz()
446  );
447 }
448 
449 
450 template<class Cmpt>
451 inline SymmTensor<Cmpt>
453 {
454  return SymmTensor<Cmpt>
455  (
456  st1.xx() + spt2.ii(), st1.xy(), st1.xz(),
457  st1.yy() + spt2.ii(), st1.yz(),
458  st1.zz() + spt2.ii()
459  );
460 }
461 
462 
463 template<class Cmpt>
464 inline SymmTensor<Cmpt>
466 {
467  return SymmTensor<Cmpt>
468  (
469  spt1.ii() - st2.xx(), -st2.xy(), -st2.xz(),
470  spt1.ii() - st2.yy(), -st2.yz(),
471  spt1.ii() - st2.zz()
472  );
473 }
474 
475 
476 template<class Cmpt>
477 inline SymmTensor<Cmpt>
479 {
480  return SymmTensor<Cmpt>
481  (
482  st1.xx() - spt2.ii(), st1.xy(), st1.xz(),
483  st1.yy() - spt2.ii(), st1.yz(),
484  st1.zz() - spt2.ii()
485  );
486 }
487 
488 
489 //- Inner-product between a spherical symmetric tensor and a symmetric tensor
490 template<class Cmpt>
491 inline SymmTensor<Cmpt>
493 {
494  return SymmTensor<Cmpt>
495  (
496  spt1.ii()*st2.xx(), spt1.ii()*st2.xy(), spt1.ii()*st2.xz(),
497  spt1.ii()*st2.yy(), spt1.ii()*st2.yz(),
498  spt1.ii()*st2.zz()
499  );
500 }
501 
502 
503 //- Inner-product between a tensor and a spherical tensor
504 template<class Cmpt>
505 inline SymmTensor<Cmpt>
507 {
508  return SymmTensor<Cmpt>
509  (
510  st1.xx()*spt2.ii(), st1.xy()*spt2.ii(), st1.xz()*spt2.ii(),
511  st1.yy()*spt2.ii(), st1.yz()*spt2.ii(),
512  st1.zz()*spt2.ii()
513  );
514 }
515 
516 
517 //- Double-dot-product between a spherical tensor and a symmetric tensor
518 template<class Cmpt>
519 inline Cmpt
521 {
522  return(spt1.ii()*st2.xx() + spt1.ii()*st2.yy() + spt1.ii()*st2.zz());
523 }
524 
525 
526 //- Double-dot-product between a tensor and a spherical tensor
527 template<class Cmpt>
528 inline Cmpt
530 {
531  return(st1.xx()*spt2.ii() + st1.yy()*spt2.ii() + st1.zz()*spt2.ii());
532 }
533 
534 
535 template<class Cmpt>
537 {
538  return SymmTensor<Cmpt>
539  (
540  v.x()*v.x(), v.x()*v.y(), v.x()*v.z(),
541  v.y()*v.y(), v.y()*v.z(),
542  v.z()*v.z()
543  );
544 }
545 
546 
547 template<class Cmpt>
548 class outerProduct<SymmTensor<Cmpt>, Cmpt>
549 {
550 public:
551 
553 };
554 
555 template<class Cmpt>
556 class outerProduct<Cmpt, SymmTensor<Cmpt>>
557 {
558 public:
559 
561 };
562 
563 template<class Cmpt>
564 class innerProduct<SymmTensor<Cmpt>, SymmTensor<Cmpt>>
565 {
566 public:
567 
569 };
570 
571 template<class Cmpt>
572 class innerProduct<SymmTensor<Cmpt>, Vector<Cmpt>>
573 {
574 public:
575 
577 };
578 
579 template<class Cmpt>
580 class innerProduct<Vector<Cmpt>, SymmTensor<Cmpt>>
581 {
582 public:
583 
585 };
586 
587 
588 template<class Cmpt>
590 {
591 public:
592 
594 };
595 
596 template<class Cmpt>
598 {
599 public:
600 
602 };
603 
604 template<class Cmpt>
606 {
607 public:
608 
610 };
611 
612 template<class Cmpt>
614 {
615 public:
616 
618 };
619 
620 
621 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
622 
623 } // End namespace Foam
624 
625 // ************************************************************************* //
Foam::Tensor
Templated 3D tensor derived from MatrixSpace adding construction from 9 components,...
Definition: complexI.H:282
Foam::Vector::x
const Cmpt & x() const
Access to the vector x component.
Definition: VectorI.H:78
Foam::symm
dimensionedSymmTensor symm(const dimensionedSymmTensor &dt)
Definition: dimensionedSymmTensor.C:84
Foam::SymmTensor
Templated 3D symmetric tensor derived from VectorSpace adding construction from 6 components,...
Definition: SymmTensor.H:57
Foam::invariantIII
Cmpt invariantIII(const SymmTensor< Cmpt > &st)
Return the 3rd invariant of a symmetric tensor.
Definition: SymmTensorI.H:431
Foam::SymmTensor::yz
const Cmpt & yz() const
Definition: SymmTensorI.H:113
Foam::SymmTensor::T
const SymmTensor< Cmpt > & T() const
Transpose.
Definition: SymmTensorI.H:177
Foam::operator&
tmp< GeometricField< Type, fvPatchField, volMesh > > operator&(const fvMatrix< Type > &, const DimensionedField< Type, volMesh > &)
Foam::invariantI
Cmpt invariantI(const SymmTensor< Cmpt > &st)
Return the 1st invariant of a symmetric tensor.
Definition: SymmTensorI.H:411
Foam::SymmTensor::xz
const Cmpt & xz() const
Definition: SymmTensorI.H:101
Foam::Zero
static constexpr const zero Zero
Global zero.
Definition: zero.H:128
Foam::innerProduct
Definition: products.H:141
Foam::typeOfSum< SphericalTensor< Cmpt >, SymmTensor< Cmpt > >::type
SymmTensor< Cmpt > type
Definition: SymmTensorI.H:593
Foam::operator-
tmp< faMatrix< Type > > operator-(const faMatrix< Type > &)
Foam::innerProduct< SymmTensor< Cmpt >, SymmTensor< Cmpt > >::type
Tensor< Cmpt > type
Definition: SymmTensorI.H:568
Foam::dev2
dimensionedSymmTensor dev2(const dimensionedSymmTensor &dt)
Definition: dimensionedSymmTensor.C:117
Foam::innerSqr
dimensionedSymmTensor innerSqr(const dimensionedSymmTensor &dt)
Definition: dimensionedSymmTensor.C:62
Foam::Vector::z
const Cmpt & z() const
Access to the vector z component.
Definition: VectorI.H:90
Foam::outerProduct< SymmTensor< Cmpt >, Cmpt >::type
SymmTensor< Cmpt > type
Definition: SymmTensorI.H:552
Foam::magSqr
dimensioned< typename typeOfMag< Type >::type > magSqr(const dimensioned< Type > &dt)
Foam::VectorSpace
Templated vector space.
Definition: VectorSpace.H:56
Foam::SymmTensor::xx
const Cmpt & xx() const
Definition: SymmTensorI.H:89
Foam::typeOfSum
Definition: products.H:97
Foam::outerProduct< Cmpt, SymmTensor< Cmpt > >::type
SymmTensor< Cmpt > type
Definition: SymmTensorI.H:560
Foam::SymmTensor::xy
const Cmpt & xy() const
Definition: SymmTensorI.H:95
Foam::Istream
An Istream is an abstract base class for all input systems (streams, files, token lists etc)....
Definition: Istream.H:61
Foam::inv
dimensionedSphericalTensor inv(const dimensionedSphericalTensor &dt)
Definition: dimensionedSphericalTensor.C:73
Foam::sph
SphericalTensor< Cmpt > sph(const DiagTensor< Cmpt > &dt)
Return the spherical part of a diagonal tensor.
Definition: DiagTensorI.H:290
Foam::operator&&
dimensioned< typename scalarProduct< Type1, Type2 >::type > operator&&(const dimensioned< Type1 > &, const dimensioned< Type2 > &)
Foam::SymmTensor::SymmTensor
SymmTensor()
Construct null.
Definition: SymmTensorI.H:34
Foam::invariantII
Cmpt invariantII(const SymmTensor< Cmpt > &st)
Return the 2nd invariant of a symmetric tensor.
Definition: SymmTensorI.H:419
Foam::SymmTensor::operator=
void operator=(const SphericalTensor< Cmpt > &)
Assign to given SphericalTensor.
Definition: SymmTensorI.H:186
Foam
Namespace for OpenFOAM.
Definition: atmBoundaryLayer.C:33
Foam::cof
dimensionedSymmTensor cof(const dimensionedSymmTensor &dt)
Definition: dimensionedSymmTensor.C:139
Foam::SphericalTensor::ii
const Cmpt & ii() const
Definition: SphericalTensorI.H:72
Foam::SphericalTensor
Templated 3D SphericalTensor derived from VectorSpace adding construction from 1 component,...
Definition: SphericalTensor.H:55
Tensor.H
Foam::Vector::y
const Cmpt & y() const
Access to the vector y component.
Definition: VectorI.H:84
Foam::sqr
dimensionedSymmTensor sqr(const dimensionedVector &dv)
Definition: dimensionedSymmTensor.C:51
Foam::SymmTensor::diag
Vector< Cmpt > diag() const
Extract the diagonal as a vector.
Definition: SymmTensorI.H:163
Foam::SymmTensor::yy
const Cmpt & yy() const
Definition: SymmTensorI.H:107
Foam::Vector
Templated 3D Vector derived from VectorSpace adding construction from 3 components,...
Definition: Vector.H:62
Foam::operator+
tmp< faMatrix< Type > > operator+(const faMatrix< Type > &, const faMatrix< Type > &)
Foam::operator*
tmp< faMatrix< Type > > operator*(const areaScalarField &, const faMatrix< Type > &)
Foam::SymmTensor::zz
const Cmpt & zz() const
Definition: SymmTensorI.H:119
Foam::tr
dimensionedScalar tr(const dimensionedSphericalTensor &dt)
Definition: dimensionedSphericalTensor.C:51
Foam::det
dimensionedScalar det(const dimensionedSphericalTensor &dt)
Definition: dimensionedSphericalTensor.C:62
Foam::innerProduct< SphericalTensor< Cmpt >, SymmTensor< Cmpt > >::type
SymmTensor< Cmpt > type
Definition: SymmTensorI.H:609
Foam::innerProduct< SymmTensor< Cmpt >, SphericalTensor< Cmpt > >::type
SymmTensor< Cmpt > type
Definition: SymmTensorI.H:617
Foam::innerProduct< Vector< Cmpt >, SymmTensor< Cmpt > >::type
Vector< Cmpt > type
Definition: SymmTensorI.H:584
Foam::innerProduct< SymmTensor< Cmpt >, Vector< Cmpt > >::type
Vector< Cmpt > type
Definition: SymmTensorI.H:576
Foam::twoSymm
dimensionedSymmTensor twoSymm(const dimensionedSymmTensor &dt)
Definition: dimensionedSymmTensor.C:95
Foam::outerProduct
Definition: products.H:106
Foam::zero
A class representing the concept of 0 (zero), which can be used to avoid manipulating objects that ar...
Definition: zero.H:61
Foam::dev
dimensionedSymmTensor dev(const dimensionedSymmTensor &dt)
Definition: dimensionedSymmTensor.C:106
Foam::typeOfSum< SymmTensor< Cmpt >, SphericalTensor< Cmpt > >::type
SymmTensor< Cmpt > type
Definition: SymmTensorI.H:601