30 #ifndef _GranOO_Geom_SymTensor_hpp_
31 #define _GranOO_Geom_SymTensor_hpp_
35 #include "GranOO3/3rdParty/Eigen/Dense"
37 #include <boost/archive/text_oarchive.hpp>
38 #include <boost/archive/text_iarchive.hpp>
71 static std::string
class_ID() {
return "SymTensor";}
72 static const int N = 6;
82 double,
double,
double);
116 const double &
xx()
const;
117 const double &
xy()
const;
118 const double &
xz()
const;
120 const double &
yx()
const;
121 const double &
yy()
const;
122 const double &
yz()
const;
124 const double &
zx()
const;
125 const double &
zy()
const;
126 const double &
zz()
const;
151 template <
typename Axis>
double&
val();
152 template <
typename Axis>
const double&
val()
const;
154 const double &
operator() (
unsigned int i,
unsigned int j)
const;
163 template<
class Archive>
170 #ifndef DOXYGEN_SHOULD_SKIP_THIS
172 template<
class Archive>
174 ar &
xx(); ar &
yy(); ar &
zz();
175 ar &
xy(); ar &
xz(); ar &
yz();
185 double XY,
double XZ,
double YZ)
202 operator/(
const SymTensor &m,
const double &d) {
203 return SymTensor(m.xx()/d, m.yy()/d, m.zz()/d,
204 m.xy()/d, m.xz()/d, m.yz()/d);
237 return (
xy() == 0. &&
xz() == 0. &&
xz() == 0. &&
238 yy() == 0. &&
yz() == 0. &&
yz() == 0. &&
239 zy() == 0. &&
zz() == 0. &&
zz() == 0);
333 template<>
inline double& SymTensor::val<XX>() {
337 template<>
inline double& SymTensor::val<XY>() {
341 template<>
inline double& SymTensor::val<XZ>() {
345 template<>
inline double& SymTensor::val<YX>() {
349 template<>
inline double& SymTensor::val<YY>() {
353 template<>
inline double& SymTensor::val<YZ>() {
357 template<>
inline double& SymTensor::val<ZX>() {
361 template<>
inline double& SymTensor::val<ZY>() {
365 template<>
inline double& SymTensor::val<ZZ>() {
369 template<>
inline const double& SymTensor::val<XX>()
const {
373 template<>
inline const double& SymTensor::val<XY>()
const {
377 template<>
inline const double& SymTensor::val<XZ>()
const {
381 template<>
inline const double& SymTensor::val<YX>()
const {
385 template<>
inline const double& SymTensor::val<YY>()
const {
389 template<>
inline const double& SymTensor::val<YZ>()
const {
393 template<>
inline const double& SymTensor::val<ZX>()
const {
397 template<>
inline const double& SymTensor::val<ZY>()
const {
401 template<>
inline const double& SymTensor::val<ZZ>()
const {
506 return xx() +
yy() +
zz();
511 return xx() +
yy() +
zz();
528 operator<< (std::ostream& o,
const SymTensor& M) {
529 return o << M.xx() <<
'\t' << M.yy() <<
'\t' << M.zz() <<
'\n'
530 << M.xy() <<
'\t' << M.xz() <<
'\t' << M.yz() <<
'\n';
534 operator*(
const SymTensor &m,
const Vector &v) {
535 return Vector(m.xx()*v.x() + m.xy()*v.y() + m.xz()*v.z(),
536 m.yx()*v.x() + m.yy()*v.y() + m.yz()*v.z(),
537 m.zx()*v.x() + m.zy()*v.y() + m.zz()*v.z());
542 operator*(
const double &d,
const SymTensor &m) {
543 return SymTensor(m.xx()*d, m.yy()*d, m.zz()*d,
544 m.xy()*d, m.xz()*d, m.yz()*d);
548 operator*(
const SymTensor &m,
const double &d) {
553 operator* (
const SymTensor &m1,
const SymTensor &m2) {
554 return (m1.xx()*m2.xx() + m1.yy()*m2.yy() + m1.zz()*m2.zz() +
555 m1.xy()*m2.xy() + m1.xz()*m2.xz() + m1.yz()*m2.yz());
559 operator* (
const SymTensor &m1,
const Tensor &m2) {
560 return Tensor(m1.xx()*m2.xx() + m1.xy()*m2.yx() + m1.xz()*m2.zx(),
561 m1.xx()*m2.xy() + m1.xy()*m2.yy() + m1.xz()*m2.zy(),
562 m1.xx()*m2.xz() + m1.xy()*m2.yz() + m1.xz()*m2.zz(),
564 m1.yx()*m2.xx() + m1.yy()*m2.yx() + m1.yz()*m2.zx(),
565 m1.yx()*m2.xy() + m1.yy()*m2.yy() + m1.yz()*m2.zy(),
566 m1.yx()*m2.xz() + m1.yy()*m2.yz() + m1.yz()*m2.zz(),
568 m1.zx()*m2.xx() + m1.zy()*m2.yx() + m1.zz()*m2.zx(),
569 m1.zx()*m2.xy() + m1.zy()*m2.yy() + m1.zz()*m2.zy(),
570 m1.zx()*m2.xz() + m1.zy()*m2.yz() + m1.zz()*m2.zz());
574 operator* (
const Tensor &m1,
const SymTensor &m2) {
575 return Tensor(m1.xx()*m2.xx() + m1.xy()*m2.yx() + m1.xz()*m2.zx(),
576 m1.xx()*m2.xy() + m1.xy()*m2.yy() + m1.xz()*m2.zy(),
577 m1.xx()*m2.xz() + m1.xy()*m2.yz() + m1.xz()*m2.zz(),
579 m1.yx()*m2.xx() + m1.yy()*m2.yx() + m1.yz()*m2.zx(),
580 m1.yx()*m2.xy() + m1.yy()*m2.yy() + m1.yz()*m2.zy(),
581 m1.yx()*m2.xz() + m1.yy()*m2.yz() + m1.yz()*m2.zz(),
583 m1.zx()*m2.xx() + m1.zy()*m2.yx() + m1.zz()*m2.zx(),
584 m1.zx()*m2.xy() + m1.zy()*m2.yy() + m1.zz()*m2.zy(),
585 m1.zx()*m2.xz() + m1.zy()*m2.yz() + m1.zz()*m2.zz());
592 operator+ (
const SymTensor &m1,
const SymTensor &m2) {
593 return SymTensor(m1.xx()+m2.xx(), m1.yy()+m2.yy(), m1.zz()+m2.zz(),
594 m1.xy()+m2.xy(), m1.xz()+m2.xz(), m1.yz()+m2.yz());
598 operator- (
const SymTensor &m1,
const SymTensor &m2) {
599 return SymTensor(m1.xx()-m2.xx(), m1.yy()-m2.yy(), m1.zz()-m2.zz(),
600 m1.xy()-m2.xy(), m1.xz()-m2.xz(), m1.yz()-m2.yz());
604 operator== (
const SymTensor &m1,
const SymTensor &m2) {
605 SymTensor
t(m1.xx()-m2.xx(), m1.yy()-m2.yy(), m1.zz()-m2.zz(),
606 m1.xy()-m2.xy(), m1.xz()-m2.xz(), m1.yz()-m2.yz());
#define SafeModeAssert(condition, message)
Definition: Macro.hpp:47
Definition: Quaternion.hpp:54
Definition: SymTensor.hpp:68
void set_yz(const double &)
void set_yy(const double &)
const double & yz() const
const double & operator()(unsigned int i, unsigned int j) const
void operator+=(const SymTensor &m)
const double & zz() const
void eigen_value(Vector &v, Quaternion &q) const
Definition: SymTensor.cpp:59
void serialize(Archive &ar, const unsigned int)
SymTensor(double, double, double, double, double, double)
double invariant2() const
const double & xz() const
void set_zy(const double &)
static const int N
Definition: SymTensor.hpp:72
void set_zz(const double &)
void set_yx(const double &)
SymTensor & operator=(const SymTensor &m)
const double & xy() const
void operator/=(double d)
static const SymTensor id
Definition: SymTensor.hpp:73
SymTensor(const SymTensor &m)
const double & xx() const
const double & yx() const
const double & zy() const
const double & zx() const
const double & yy() const
void set_xx(const double &)
void set_zx(const double &)
void set_xz(const double &)
const double & val() const
double invariant1() const
friend class boost::serialization::access
Definition: SymTensor.hpp:162
void set_xy(const double &)
static std::string class_ID()
Definition: SymTensor.hpp:71
double invariant3() const
SymTensor & operator=(const Tensor &m)
Eigen::Matrix< double, 6, 1 > coord
Definition: SymTensor.hpp:167
Definition: Tensor.hpp:62
Definition: Vector.hpp:75
SymTensor operator+(const SymTensor &m1, const SymTensor &m2)
SymTensor operator-(const SymTensor &m1, const SymTensor &m2)
std::ostream & operator<<(std::ostream &, const EulerAngle &)
SymTensor operator/(const SymTensor &m, const double &d)
Vector operator*(const SymTensor &m, const Vector &v)
bool operator==(const EulerAngle &, const EulerAngle &)
Definition: Common.hpp:198
x y t t *t x y t t t x y t t t x *y t *t t x *y t *t t x y t t t x y t t t t(t+t)") define_sfop3(16