Kernel/Math/Matrix.h
Go to the documentation of this file.
1 // This file is part of the MercuryDPM project (https://www.mercurydpm.org).
2 // Copyright (c), The MercuryDPM Developers Team. All rights reserved.
3 // License: BSD 3-Clause License; see the LICENSE file in the root directory.
4 
5 #ifndef MECURYDPM_MATRIX_H
6 #define MECURYDPM_MATRIX_H
7 
8 #include <cmath>
9 #include <sstream>
10 #include "Vector.h"
11 #include "SmallMatrix.h"
12 
16 class Matrix3D
17 {
18 public:
22  Mdouble XX, XY, XZ, YX, YY, YZ, ZX, ZY, ZZ;
23 
27  Matrix3D();
28 
33  Mdouble zx,
34  Mdouble zy,
35  Mdouble zz);
36 
41 
45  void setZero();
46 
50  double trace() const;
51 
55  Vec3D diag() const;
56 
61  double determinant() const {
62  return XX*(YY*ZZ-YZ*ZY) - XY*(YX*ZZ-YZ*ZX) + XZ*(YX*ZY-YY*ZX);
63  }
64 
68  double deviator() const;
69 
73  Matrix3D operator+(const Matrix3D& A) const;
74 
78  Matrix3D operator-(const Matrix3D& A) const;
79 
83  Matrix3D operator+(Mdouble a) const;
84 
88  Matrix3D operator-(Mdouble a) const;
89 
93  Matrix3D operator*(Mdouble a) const;
94 
98  Vec3D operator*(const Vec3D& a) const;
99 
103  Matrix3D operator*(const Matrix3D& a) const;
104 
108  Matrix3D operator/(Mdouble a) const;
109 
113  friend std::ostream& operator<<(std::ostream& os, const Matrix3D& A);
114 
118  friend std::istream& operator>>(std::istream& is, Matrix3D& A);
119 
123  Matrix3D& operator+=(const Matrix3D& A);
124 
128  Matrix3D& operator-=(const Matrix3D& A);
129 
134 
138  static Matrix3D square(const Matrix3D& A);
139 
143  static Matrix3D sqrt(const Matrix3D& A);
144 
148  static Matrix3D dyadic(const Vec3D& a, const Vec3D& b);
149 
153  static Matrix3D cross(const Vec3D& a, const Matrix3D& b);
154 
158  static Matrix3D inverse(const Matrix3D& A);
159 
163  Vec3D ldivide(const Vec3D& b);
164 
169 };
170 
171 
172 #endif
double Mdouble
Definition: GeneralDefine.h:13
Matrix< float, 2, 1 > xy
Definition: LLT_solve.cpp:6
float * p
Definition: Tutorial_Map_using.cpp:9
Scalar * b
Definition: benchVecAdd.cpp:17
Matrix< SCALARA, Dynamic, Dynamic, opt_A > A
Definition: bench_gemm.cpp:47
Implementation of a 3D matrix.
Definition: Kernel/Math/Matrix.h:17
void setZero()
Sets all elements to zero.
Definition: Matrix.cc:54
Matrix3D & operator+=(const Matrix3D &A)
Matrix addition.
Definition: Matrix.cc:220
Mdouble YX
Definition: Kernel/Math/Matrix.h:22
Matrix3D & operator/=(Mdouble a)
Scalar division.
Definition: Matrix.cc:258
Vec3D diag() const
The diagonal elements.
Definition: Matrix.cc:72
Matrix3D operator*(Mdouble a) const
Scalar multiplication.
Definition: Matrix.cc:143
friend std::istream & operator>>(std::istream &is, Matrix3D &A)
Add elements to istream.
Definition: Matrix.cc:209
Matrix3D operator-(const Matrix3D &A) const
Matrix subtraction.
Definition: Matrix.cc:107
double trace() const
Sum of the diagonal elements.
Definition: Matrix.cc:63
Mdouble ZX
Definition: Kernel/Math/Matrix.h:22
static Matrix3D dyadic(const Vec3D &a, const Vec3D &b)
Calculates the dyadic product of a two Vec3D: .
Definition: Matrix.cc:302
Mdouble XY
Definition: Kernel/Math/Matrix.h:22
Mdouble YY
Definition: Kernel/Math/Matrix.h:22
Matrix3D operator/(Mdouble a) const
Scalar division.
Definition: Matrix.cc:182
Mdouble ZY
Definition: Kernel/Math/Matrix.h:22
Mdouble ZZ
Definition: Kernel/Math/Matrix.h:22
Mdouble YZ
Definition: Kernel/Math/Matrix.h:22
Matrix3D & operator-=(const Matrix3D &A)
Matrix substraction.
Definition: Matrix.cc:239
friend std::ostream & operator<<(std::ostream &os, const Matrix3D &A)
Add elements to ostream.
Definition: Matrix.cc:195
static Matrix3D inverse(const Matrix3D &A)
Computes the inverse of a matrix.
Definition: Matrix.cc:328
Matrix3D getCylindricalTensorField(const Vec3D &p) const
Returns the matrix in cylindrical coordinates.
Definition: Matrix.cc:373
Mdouble XZ
Definition: Kernel/Math/Matrix.h:22
Matrix3D operator+(const Matrix3D &A) const
Matrix addition.
Definition: Matrix.cc:94
Mdouble XX
all nine matrix elements
Definition: Kernel/Math/Matrix.h:22
double determinant() const
Definition: Kernel/Math/Matrix.h:61
Vec3D ldivide(const Vec3D &b)
A.ldivide(b) computes the solution x to A*x=b.
Definition: Matrix.cc:352
static Matrix3D square(const Matrix3D &A)
Calculates the pointwise square.
Definition: Matrix.cc:277
static Matrix3D cross(const Vec3D &a, const Matrix3D &b)
'Special' cross product; CP of vector with each column of a matrix
Definition: Matrix.cc:316
double deviator() const
Deviator.
Definition: Matrix.cc:82
static Matrix3D sqrt(const Matrix3D &A)
Calculates the pointwise square root.
Definition: Matrix.cc:289
Matrix3D()
default constructor
Definition: Matrix.cc:13
Data type for small dense matrix.
Definition: SmallMatrix.h:48
Definition: Kernel/Math/Vector.h:30
Eigen::Map< Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor >, 0, Eigen::OuterStride<> > matrix(T *data, int rows, int cols, int stride)
Definition: common.h:85
const Scalar * a
Definition: level2_cplx_impl.h:32