Alamo
Matrix4_Diagonal.H
Go to the documentation of this file.
1 #ifndef SET_MATRIX4_DIAGONAL_H
2 #define SET_MATRIX4_DIAGONAL_H
3 
4 #include "Util/Util.H"
5 #include "Base.H"
6 
7 namespace Set
8 {
9 template<>
10 class Matrix4<AMREX_SPACEDIM, Sym::Diagonal>
11 {
12  Set::Matrix A = Set::Matrix::Ones();
13 public:
14  AMREX_GPU_HOST_DEVICE Matrix4() {};
15  AMREX_GPU_HOST_DEVICE Matrix4(Set::Matrix a_A): A(a_A) {};
16  AMREX_FORCE_INLINE
17  Scalar operator () (const int i, const int j, const int k, const int l) const
18  {
19  if (i == k && j == l) return A(i, j);
20  else return 0.0;
21  }
22  void Randomize()
23  {
24  A = Set::Matrix::Random();
25  }
26  void Print(std::ostream& os)
27  {
28  os << "A = \n" << A;
29  }
31  {
33  zero.A = Set::Matrix::Zero();
34  return zero;
35  }
44 
45 
46  //AMREX_GPU_HOST_DEVICE void operator = (Matrix4<AMREX_SPACEDIM,Sym::Isotropic> &a) {lambda = a.lambda; mu = a.mu;}
47  AMREX_GPU_HOST_DEVICE void operator += (const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& a) { A += a.A; }
48  AMREX_GPU_HOST_DEVICE void operator -= (const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& a) { A -= a.A; }
49  //AMREX_GPU_HOST_DEVICE void operator *= (const Matrix4<AMREX_SPACEDIM,Sym::Diagonal> &a) {A *= a.A;}
50  //AMREX_GPU_HOST_DEVICE void operator /= (const Matrix4<AMREX_SPACEDIM,Sym::Diagonal> &a) {A /= a.A;}
51  AMREX_GPU_HOST_DEVICE void operator *= (const Set::Scalar& alpha) { A *= alpha; }
52  AMREX_GPU_HOST_DEVICE void operator /= (const Set::Scalar& alpha) { A /= alpha; }
53 
55  {
56  return A.lpNorm<2>();
57  }
58  bool contains_nan() const
59  {
60  if (std::isnan(A.lpNorm<2>())) return true;
61  return false;
62  }
63 
64 };
65 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
67 {
68  Set::Matrix ret;
69 
70  for (int i = 0; i < AMREX_SPACEDIM; i++)
71  {
72  for (int j = 0; j < AMREX_SPACEDIM; j++)
73  {
74  ret(i, j) = a.A(i, j) * b(i, j);
75  }
76  }
77 
78  return ret;
79 }
80 
81 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
83 {
84  Set::Vector ret = Set::Vector::Zero();
85 
86  for (int i = 0; i < AMREX_SPACEDIM; i++)
87  for (int j = 0; j < AMREX_SPACEDIM; j++)
88  ret(i) += a.A(i, j) * b(i, j, j);
89 
90  return ret;
91 }
92 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
95 {
96  return a.A == b.A;
97 }
98 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
101 {
103  ret.A += b.A;
104  return ret;
105 }
106 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
109 {
111  ret.A -= b.A;
112  return ret;
113 }
114 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
116  const Set::Scalar& b)
117 {
119  ret.A *= b;
120  return ret;
121 }
122 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
125 {
126  return a*b;
127 }
128 
129 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
131  const Set::Scalar& b)
132 {
134  ret.A /= b;
135  return ret;
136 }
137 
138 
139 }
140 #endif
Set::Matrix4< AMREX_SPACEDIM, Sym::Diagonal >::A
Set::Matrix A
Definition: Matrix4_Diagonal.H:12
operator+=
AMREX_FORCE_INLINE void operator+=(const OP_CLASS &rhs)
Definition: InClassOperators.H:2
Set::operator+
AMREX_FORCE_INLINE Quaternion operator+(const Quaternion a, const Quaternion b)
Definition: Base.H:92
Set::operator-
AMREX_FORCE_INLINE Quaternion operator-(const Quaternion a, const Quaternion b)
Definition: Base.H:100
Set::Sym
Sym
Definition: Base.H:197
Util.H
Set::Matrix4< AMREX_SPACEDIM, Sym::Diagonal >::Zero
static Matrix4< AMREX_SPACEDIM, Sym::Diagonal > Zero()
Definition: Matrix4_Diagonal.H:30
Set::Matrix4< AMREX_SPACEDIM, Sym::Diagonal >::contains_nan
bool contains_nan() const
Definition: Matrix4_Diagonal.H:58
Set::Matrix4< AMREX_SPACEDIM, Sym::Diagonal >::Matrix4
AMREX_GPU_HOST_DEVICE Matrix4(Set::Matrix a_A)
Definition: Matrix4_Diagonal.H:15
Base.H
Set::Vector
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, 1 > Vector
Definition: Base.H:20
operator*=
Matrix< _Scalar, _Rows, _Cols > & operator*=(const amrex::Vector< amrex::Real > &x)
Definition: Eigen_Amrex.H:18
Set::operator*
AMREX_FORCE_INLINE Quaternion operator*(const Set::Scalar alpha, const Quaternion b)
Definition: Base.H:78
Util::Random
Set::Scalar Random()
Definition: Set.cpp:9
Set::Scalar
amrex::Real Scalar
Definition: Base.H:19
Set
A collection of data types and symmetry-reduced data structures.
Definition: Base.H:17
Set::Matrix3
Definition: Matrix3.H:8
Set::Matrix
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, AMREX_SPACEDIM > Matrix
Definition: Base.H:23
Set::Matrix4< AMREX_SPACEDIM, Sym::Diagonal >::Matrix4
AMREX_GPU_HOST_DEVICE Matrix4()
Definition: Matrix4_Diagonal.H:14
Set::Matrix4< AMREX_SPACEDIM, Sym::Diagonal >
Definition: Matrix4_Diagonal.H:10
Set::operator/
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE Matrix4< AMREX_SPACEDIM, Sym::Diagonal > operator/(const Matrix4< AMREX_SPACEDIM, Sym::Diagonal > &a, const Set::Scalar &b)
Definition: Matrix4_Diagonal.H:130
Set::Matrix4< AMREX_SPACEDIM, Sym::Diagonal >::Norm
Set::Scalar Norm()
Definition: Matrix4_Diagonal.H:54
Set::Matrix4
Definition: Base.H:198
Set::operator==
AMREX_FORCE_INLINE bool operator==(const Quaternion a, const Quaternion b)
Definition: Base.H:108
Set::Diagonal
@ Diagonal
Definition: Base.H:197
Set::Matrix4< AMREX_SPACEDIM, Sym::Diagonal >::Print
void Print(std::ostream &os)
Definition: Matrix4_Diagonal.H:26
Set::Matrix4< AMREX_SPACEDIM, Sym::Diagonal >::Randomize
void Randomize()
Definition: Matrix4_Diagonal.H:22