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 "AMReX_Config.H"
5#include "Util/Util.H"
6#include "Base.H"
7
8#include "Set.H"
9#include "Set/Matrix3.H"
10#include "Set/Matrix4.H"
11
12namespace Set
13{
14template<>
16{
17 std::array<std::array<Set::Scalar,AMREX_SPACEDIM>,AMREX_SPACEDIM> A = {{
18 AMREX_D_DECL(
19 {AMREX_D_DECL(NAN,NAN,NAN)},
20 {AMREX_D_DECL(NAN,NAN,NAN)},
21 {AMREX_D_DECL(NAN,NAN,NAN)}
22 )}};
23
24
25public:
27 {
29 for (int i = 0 ; i < AMREX_SPACEDIM; i++)
30 for (int j = 0 ; j < AMREX_SPACEDIM; j++)
31 ret(i,j)=A[i][j];
32 return ret;
33 }
34
36 //AMREX_GPU_HOST_DEVICE Matrix4(Set::Matrix a_A): A(a_A) {};
38 Scalar operator () (const int i, const int j, const int k, const int l) const
39 {
40 if (i == k && j == l) return A[i][j];
41 else return 0.0;
42 }
43 void Randomize()
44 {
45 for (int i = 0 ; i < AMREX_SPACEDIM; i++)
46 for (int j = 0 ; j < AMREX_SPACEDIM; j++)
47 A[i][j] = Util::Random();
48 }
55 void Print(std::ostream& os)
56 {
57 os << "A = \n" << getA();
58 }
60 {
62 for (int i = 0 ; i < AMREX_SPACEDIM; i++)
63 for (int j = 0 ; j < AMREX_SPACEDIM; j++)
64 zero.A[i][j] = 0.0;
65 return zero;
66 }
68 {
70 for (int i = 0 ; i < AMREX_SPACEDIM; i++)
71 for (int j = 0 ; j < AMREX_SPACEDIM; j++)
72 ones.A[i][j] = 1.0;
73 return ones;
74 }
83
84
85 //AMREX_GPU_HOST_DEVICE void operator = (Matrix4<AMREX_SPACEDIM,Sym::Isotropic> &a) {lambda = a.lambda; mu = a.mu;}
87 for (int i = 0 ; i < AMREX_SPACEDIM; i++)
88 for (int j = 0 ; j < AMREX_SPACEDIM; j++)
89 A[i][j] += a.A[i][j];
90 }
92 for (int i = 0 ; i < AMREX_SPACEDIM; i++)
93 for (int j = 0 ; j < AMREX_SPACEDIM; j++)
94 A[i][j] -= a.A[i][j];
95 }
97 for (int i = 0 ; i < AMREX_SPACEDIM; i++)
98 for (int j = 0 ; j < AMREX_SPACEDIM; j++)
99 A[i][j] *= alpha;
100 }
102 for (int i = 0 ; i < AMREX_SPACEDIM; i++)
103 for (int j = 0 ; j < AMREX_SPACEDIM; j++)
104 A[i][j] /= alpha;
105 }
106
108 {
109 return getA().lpNorm<2>();
110 }
111 bool contains_nan() const
112 {
113 if (std::isnan(getA().lpNorm<2>())) return true;
114 return false;
115 }
116
117};
120{
122
123 for (int i = 0; i < AMREX_SPACEDIM; i++)
124 {
125 for (int j = 0; j < AMREX_SPACEDIM; j++)
126 {
127 ret(i, j) = a.A[i][j] * b(i, j);
128 }
129 }
130
131 return ret;
132}
133
136{
137 Set::Vector ret = Set::Vector::Zero();
138
139 for (int i = 0; i < AMREX_SPACEDIM; i++)
140 for (int j = 0; j < AMREX_SPACEDIM; j++)
141 ret(i) += a.A[i][j] * b(i, j, j);
142
143 return ret;
144}
148{
149 return a.A == b.A;
150}
173 const Set::Scalar& b)
174{
176 for (int i = 0; i < AMREX_SPACEDIM; i++)
177 for (int j = 0; j < AMREX_SPACEDIM; j++)
178 ret.A[i][j] *= b;
179 return ret;
180}
187
190 const Set::Scalar& b)
191{
193 for (int i = 0; i < AMREX_SPACEDIM; i++)
194 for (int j = 0; j < AMREX_SPACEDIM; j++)
195 ret.A[i][j] /= b;
196 return ret;
197}
198
199
200}
201#endif
Matrix< _Scalar, _Rows, _Cols > & operator*=(const amrex::Vector< amrex::Real > &x)
Definition Eigen_Amrex.H:18
AMREX_FORCE_INLINE void operator+=(const OP_CLASS &rhs)
static Matrix4< AMREX_SPACEDIM, Sym::Diagonal > Ones()
std::array< std::array< Set::Scalar, AMREX_SPACEDIM >, AMREX_SPACEDIM > A
static Matrix4< AMREX_SPACEDIM, Sym::Diagonal > Zero()
static Matrix4< AMREX_SPACEDIM, Sym::Diagonal > Random()
AMREX_GPU_HOST_DEVICE Matrix4()=default
A collection of data types and symmetry-reduced data structures.
Definition Base.H:17
AMREX_FORCE_INLINE Quaternion operator-(const Quaternion a, const Quaternion b)
Definition Base.H:99
Sym
Definition Matrix4.H:12
@ Diagonal
Definition Matrix4.H:12
amrex::Real Scalar
Definition Base.H:18
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE Matrix4< AMREX_SPACEDIM, Sym::Diagonal > operator/(const Matrix4< AMREX_SPACEDIM, Sym::Diagonal > &a, const Set::Scalar &b)
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, 1 > Vector
Definition Base.H:19
AMREX_FORCE_INLINE bool operator==(const Quaternion a, const Quaternion b)
Definition Base.H:107
AMREX_FORCE_INLINE Quaternion operator+(const Quaternion a, const Quaternion b)
Definition Base.H:91
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, AMREX_SPACEDIM > Matrix
Definition Base.H:22
AMREX_FORCE_INLINE Quaternion operator*(const Set::Scalar alpha, const Quaternion b)
Definition Base.H:77
Set::Scalar Random()
Definition Set.cpp:34