1#ifndef SET_MATRIX4_MAJOR_H
2#define SET_MATRIX4_MAJOR_H
18 #if AMREX_SPACEDIM == 2
22 for (
int i = 0;
i < 2;
i++)
23 for (
int j = 0;
j < 2;
j++)
24 for (
int k = 0;
k < 2;
k++)
25 for (
int l = 0;
l < 2;
l++)
31 for (
int i = 0;
i < 2;
i++)
32 for (
int j = 0;
j < 2;
j++)
33 for (
int k = 0;
k < 2;
k++)
34 for (
int l = 0;
l < 2;
l++)
37 Matrix4(
const Matrix4<2,Sym::MajorMinor> &
in)
40 for (
int i = 0;
i < 2;
i++)
41 for (
int j = 0;
j < 2;
j++)
42 for (
int k = 0;
k < 2;
k++)
43 for (
int l = 0;
l < 2;
l++)
51 int uid =
i + 2 *
j + 4 *
k + 8 *
l;
52 if (
uid==0 )
return data[0];
53 else if (
uid==8 ||
uid==2 )
return data[1];
54 else if (
uid==4 ||
uid==1 )
return data[2];
55 else if (
uid==12 ||
uid==3 )
return data[3];
56 else if (
uid==10 )
return data[4];
57 else if (
uid==6 ||
uid==9 )
return data[5];
58 else if (
uid==14 ||
uid==11 )
return data[6];
59 else if (
uid==5 )
return data[7];
60 else if (
uid==13 ||
uid==7 )
return data[8];
61 else if (
uid==15 )
return data[9];
70 int uid =
i + 2 *
j + 4 *
k + 8 *
l;
71 if (
uid==0 )
return data[0];
72 else if (
uid==8 ||
uid==2 )
return data[1];
73 else if (
uid==4 ||
uid==1 )
return data[2];
74 else if (
uid==12 ||
uid==3 )
return data[3];
75 else if (
uid==10 )
return data[4];
76 else if (
uid==6 ||
uid==9 )
return data[5];
77 else if (
uid==14 ||
uid==11 )
return data[6];
78 else if (
uid==5 )
return data[7];
79 else if (
uid==13 ||
uid==7 )
return data[8];
80 else if (
uid==15 )
return data[9];
88 for (
int k = 0;
k < 2;
k++)
90 for (
int i = -1;
i < 3;
i++)
92 for (
int l = 0;
l < 2;
l++)
101 for (
int j = 0;
j < 2;
j++)
104 os << std::scientific << std::setw(11) << val;
150 for (
int i = 0;
i < 10;
i++)
normsq += data[
i]*data[
i];
155 if (std::isnan(data[ 0]))
return true;
156 if (std::isnan(data[ 1]))
return true;
157 if (std::isnan(data[ 2]))
return true;
158 if (std::isnan(data[ 3]))
return true;
159 if (std::isnan(data[ 4]))
return true;
160 if (std::isnan(data[ 5]))
return true;
161 if (std::isnan(data[ 6]))
return true;
162 if (std::isnan(data[ 7]))
return true;
163 if (std::isnan(data[ 8]))
return true;
164 if (std::isnan(data[ 9]))
return true;
179 for (
int i = 0;
i < 10;
i++)
ret.data[
i] = a.data[
i] +
b.data[
i];
186 for (
int i = 0;
i < 10;
i++)
ret.data[
i] = a.data[
i] -
b.data[
i];
193 for (
int i = 0;
i < 10;
i++)
ret.data[
i] = a.data[
i] *
b;
206 for (
int i = 0;
i < 10;
i++)
ret.data[
i] = a.data[
i] /
b;
213 ret(0,0) = a.data[0]*
b(0,0) + a.data[1]*
b(0,1) + a.data[2]*
b(1,0) + a.data[3]*
b(1,1);
214 ret(0,1) = a.data[1]*
b(0,0) + a.data[4]*
b(0,1) + a.data[5]*
b(1,0) + a.data[6]*
b(1,1);
215 ret(1,0) = a.data[2]*
b(0,0) + a.data[5]*
b(0,1) + a.data[7]*
b(1,0) + a.data[8]*
b(1,1);
216 ret(1,1) = a.data[3]*
b(0,0) + a.data[6]*
b(0,1) + a.data[8]*
b(1,0) + a.data[9]*
b(1,1);
234 #if AMREX_SPACEDIM == 3
238 for (
int i = 0;
i < 3;
i++)
239 for (
int j = 0;
j < 3;
j++)
240 for (
int k = 0;
k < 3;
k++)
241 for (
int l = 0;
l < 3;
l++)
247 for (
int i = 0;
i < 3;
i++)
248 for (
int j = 0;
j < 3;
j++)
249 for (
int k = 0;
k < 3;
k++)
250 for (
int l = 0;
l < 3;
l++)
253 Matrix4(
const Matrix4<3,Sym::MajorMinor> &
in)
256 for (
int i = 0;
i < 3;
i++)
257 for (
int j = 0;
j < 3;
j++)
258 for (
int k = 0;
k < 3;
k++)
259 for (
int l = 0;
l < 3;
l++)
267 int uid =
i + 3 *
j + 9 *
k + 27 *
l;
269 if (
uid == 0)
return data[0];
270 else if (
uid == 27 ||
uid == 3)
return data[1];
271 else if (
uid == 54 ||
uid == 6)
return data[2];
272 else if (
uid == 9 ||
uid == 1)
return data[3];
273 else if (
uid == 36 ||
uid == 4)
return data[4];
274 else if (
uid == 63 ||
uid == 7)
return data[5];
275 else if (
uid == 18 ||
uid == 2)
return data[6];
276 else if (
uid == 45 ||
uid == 5)
return data[7];
277 else if (
uid == 72 ||
uid == 8)
return data[8];
278 else if (
uid == 30)
return data[9];
279 else if (
uid == 57 ||
uid == 33)
return data[10];
280 else if (
uid == 12 ||
uid == 28)
return data[11];
281 else if (
uid == 39 ||
uid == 31)
return data[12];
282 else if (
uid == 66 ||
uid == 34)
return data[13];
283 else if (
uid == 21 ||
uid == 29)
return data[14];
284 else if (
uid == 48 ||
uid == 32)
return data[15];
285 else if (
uid == 75 ||
uid == 35)
return data[16];
286 else if (
uid == 60)
return data[17];
287 else if (
uid == 15 ||
uid == 55)
return data[18];
288 else if (
uid == 42 ||
uid == 58)
return data[19];
289 else if (
uid == 69 ||
uid == 61)
return data[20];
290 else if (
uid == 24 ||
uid == 56)
return data[21];
291 else if (
uid == 51 ||
uid == 59)
return data[22];
292 else if (
uid == 78 ||
uid == 62)
return data[23];
293 else if (
uid == 10)
return data[24];
294 else if (
uid == 37 ||
uid == 13)
return data[25];
295 else if (
uid == 64 ||
uid == 16)
return data[26];
296 else if (
uid == 19 ||
uid == 11)
return data[27];
297 else if (
uid == 46 ||
uid == 14)
return data[28];
298 else if (
uid == 73 ||
uid == 17)
return data[29];
299 else if (
uid == 40)
return data[30];
300 else if (
uid == 67 ||
uid == 43)
return data[31];
301 else if (
uid == 22 ||
uid == 38)
return data[32];
302 else if (
uid == 49 ||
uid == 41)
return data[33];
303 else if (
uid == 76 ||
uid == 44)
return data[34];
304 else if (
uid == 70)
return data[35];
305 else if (
uid == 25 ||
uid == 65)
return data[36];
306 else if (
uid == 52 ||
uid == 68)
return data[37];
307 else if (
uid == 79 ||
uid == 71)
return data[38];
308 else if (
uid == 20)
return data[39];
309 else if (
uid == 47 ||
uid == 23)
return data[40];
310 else if (
uid == 74 ||
uid == 26)
return data[41];
311 else if (
uid == 50)
return data[42];
312 else if (
uid == 77 ||
uid == 53)
return data[43];
313 else if (
uid == 80)
return data[44];
323 int uid =
i + 3 *
j + 9 *
k + 27 *
l;
325 if (
uid == 0)
return data[0];
326 else if (
uid == 27 ||
uid == 3)
return data[1];
327 else if (
uid == 54 ||
uid == 6)
return data[2];
328 else if (
uid == 9 ||
uid == 1)
return data[3];
329 else if (
uid == 36 ||
uid == 4)
return data[4];
330 else if (
uid == 63 ||
uid == 7)
return data[5];
331 else if (
uid == 18 ||
uid == 2)
return data[6];
332 else if (
uid == 45 ||
uid == 5)
return data[7];
333 else if (
uid == 72 ||
uid == 8)
return data[8];
334 else if (
uid == 30)
return data[9];
335 else if (
uid == 57 ||
uid == 33)
return data[10];
336 else if (
uid == 12 ||
uid == 28)
return data[11];
337 else if (
uid == 39 ||
uid == 31)
return data[12];
338 else if (
uid == 66 ||
uid == 34)
return data[13];
339 else if (
uid == 21 ||
uid == 29)
return data[14];
340 else if (
uid == 48 ||
uid == 32)
return data[15];
341 else if (
uid == 75 ||
uid == 35)
return data[16];
342 else if (
uid == 60)
return data[17];
343 else if (
uid == 15 ||
uid == 55)
return data[18];
344 else if (
uid == 42 ||
uid == 58)
return data[19];
345 else if (
uid == 69 ||
uid == 61)
return data[20];
346 else if (
uid == 24 ||
uid == 56)
return data[21];
347 else if (
uid == 51 ||
uid == 59)
return data[22];
348 else if (
uid == 78 ||
uid == 62)
return data[23];
349 else if (
uid == 10)
return data[24];
350 else if (
uid == 37 ||
uid == 13)
return data[25];
351 else if (
uid == 64 ||
uid == 16)
return data[26];
352 else if (
uid == 19 ||
uid == 11)
return data[27];
353 else if (
uid == 46 ||
uid == 14)
return data[28];
354 else if (
uid == 73 ||
uid == 17)
return data[29];
355 else if (
uid == 40)
return data[30];
356 else if (
uid == 67 ||
uid == 43)
return data[31];
357 else if (
uid == 22 ||
uid == 38)
return data[32];
358 else if (
uid == 49 ||
uid == 41)
return data[33];
359 else if (
uid == 76 ||
uid == 44)
return data[34];
360 else if (
uid == 70)
return data[35];
361 else if (
uid == 25 ||
uid == 65)
return data[36];
362 else if (
uid == 52 ||
uid == 68)
return data[37];
363 else if (
uid == 79 ||
uid == 71)
return data[38];
364 else if (
uid == 20)
return data[39];
365 else if (
uid == 47 ||
uid == 23)
return data[40];
366 else if (
uid == 74 ||
uid == 26)
return data[41];
367 else if (
uid == 50)
return data[42];
368 else if (
uid == 77 ||
uid == 53)
return data[43];
369 else if (
uid == 80)
return data[44];
378 for (
int i = 0;
i < 45;
i++)
retsq += data[
i]*data[
i];
379 return std::sqrt(
retsq);
385 for (
int i = 0;
i < 45;
i++)
386 os <<
"i = " <<
i <<
" " << data[
i] << std::endl;
389 for (
int k = 0;
k < 3;
k++)
391 for (
int i = -1;
i < 4;
i++)
393 for (
int l = 0;
l < 3;
l++)
402 for (
int j = 0;
j < 3;
j++)
405 os << std::scientific << std::setw(11) << val;
451 for (
int i = 0;
i < 45;
i++)
normsq += data[
i]*data[
i];
456 for (
int i = 0;
i < 45;
i++)
457 if (std::isnan(data[
i]))
return true;
473 for (
int i = 0;
i < 45;
i++)
ret.data[
i] = a.data[
i] +
b.data[
i];
480 for (
int i = 0;
i < 45;
i++)
ret.data[
i] = a.data[
i] -
b.data[
i];
487 for (
int i = 0;
i < 45;
i++)
ret.data[
i] = a.data[
i] *
b;
500 for (
int i = 0;
i < 45;
i++)
ret.data[
i] = a.data[
i] /
b;
508 ret(0,0) = a.data[ 0]*
b(0,0) + a.data[ 1]*
b(0,1) + a.data[ 2]*
b(0,2) + a.data[ 3]*
b(1,0) + a.data[ 4]*
b(1,1) + a.data[ 5]*
b(1,2) + a.data[ 6]*
b(2,0) + a.data[ 7]*
b(2,1) + a.data[ 8]*
b(2,2);
509 ret(0,1) = a.data[ 1]*
b(0,0) + a.data[ 9]*
b(0,1) + a.data[10]*
b(0,2) + a.data[11]*
b(1,0) + a.data[12]*
b(1,1) + a.data[13]*
b(1,2) + a.data[14]*
b(2,0) + a.data[15]*
b(2,1) + a.data[16]*
b(2,2);
510 ret(0,2) = a.data[ 2]*
b(0,0) + a.data[10]*
b(0,1) + a.data[17]*
b(0,2) + a.data[18]*
b(1,0) + a.data[19]*
b(1,1) + a.data[20]*
b(1,2) + a.data[21]*
b(2,0) + a.data[22]*
b(2,1) + a.data[23]*
b(2,2);
511 ret(1,0) = a.data[ 3]*
b(0,0) + a.data[11]*
b(0,1) + a.data[18]*
b(0,2) + a.data[24]*
b(1,0) + a.data[25]*
b(1,1) + a.data[26]*
b(1,2) + a.data[27]*
b(2,0) + a.data[28]*
b(2,1) + a.data[29]*
b(2,2);
512 ret(1,1) = a.data[ 4]*
b(0,0) + a.data[12]*
b(0,1) + a.data[19]*
b(0,2) + a.data[25]*
b(1,0) + a.data[30]*
b(1,1) + a.data[31]*
b(1,2) + a.data[32]*
b(2,0) + a.data[33]*
b(2,1) + a.data[34]*
b(2,2);
513 ret(1,2) = a.data[ 5]*
b(0,0) + a.data[13]*
b(0,1) + a.data[20]*
b(0,2) + a.data[26]*
b(1,0) + a.data[31]*
b(1,1) + a.data[35]*
b(1,2) + a.data[36]*
b(2,0) + a.data[37]*
b(2,1) + a.data[38]*
b(2,2);
514 ret(2,0) = a.data[ 6]*
b(0,0) + a.data[14]*
b(0,1) + a.data[21]*
b(0,2) + a.data[27]*
b(1,0) + a.data[32]*
b(1,1) + a.data[36]*
b(1,2) + a.data[39]*
b(2,0) + a.data[40]*
b(2,1) + a.data[41]*
b(2,2);
515 ret(2,1) = a.data[ 7]*
b(0,0) + a.data[15]*
b(0,1) + a.data[22]*
b(0,2) + a.data[28]*
b(1,0) + a.data[33]*
b(1,1) + a.data[37]*
b(1,2) + a.data[40]*
b(2,0) + a.data[42]*
b(2,1) + a.data[43]*
b(2,2);
516 ret(2,2) = a.data[ 8]*
b(0,0) + a.data[16]*
b(0,1) + a.data[23]*
b(0,2) + a.data[29]*
b(1,0) + a.data[34]*
b(1,1) + a.data[38]*
b(1,2) + a.data[41]*
b(2,0) + a.data[43]*
b(2,1) + a.data[44]*
b(2,2);
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE void operator-=(const Matrix4< 2, Sym::Major > &a)
AMREX_FORCE_INLINE const Scalar & operator()(const int i, const int j, const int k, const int l) const
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE void operator/=(const Matrix4< 2, Sym::Major > &a)
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE void operator+=(const Matrix4< 2, Sym::Major > &a)
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE void operator*=(const Matrix4< 2, Sym::Major > &a)
static Matrix4< 2, Sym::Major > Randomize()
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE void operator*=(const Set::Scalar &alpha)
AMREX_FORCE_INLINE Scalar & operator()(const int i, const int j, const int k, const int l)
static Matrix4< 2, Sym::Major > Increment()
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE void operator/=(const Set::Scalar &alpha)
static Matrix4< 2, Sym::Major > Zero()
bool contains_nan() const
void Print(std::ostream &os)
AMREX_GPU_HOST_DEVICE Matrix4()
void Print(std::ostream &os)
AMREX_FORCE_INLINE const Scalar & operator()(const int i, const int j, const int k, const int l) const
static Matrix4< 3, Sym::Major > Zero()
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE void operator*=(const Set::Scalar &alpha)
static Matrix4< 3, Sym::Major > Increment()
AMREX_GPU_HOST_DEVICE Matrix4()
AMREX_FORCE_INLINE Scalar & operator()(const int i, const int j, const int k, const int l)
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE void operator+=(const Matrix4< 3, Sym::Major > &a)
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE void operator/=(const Matrix4< 3, Sym::Major > &a)
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE void operator/=(const Set::Scalar &alpha)
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE void operator-=(const Matrix4< 3, Sym::Major > &a)
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE void operator*=(const Matrix4< 3, Sym::Major > &a)
static Matrix4< 3, Sym::Major > Randomize()
bool contains_nan() const
A collection of data types and symmetry-reduced data structures.
AMREX_FORCE_INLINE Quaternion operator-(const Quaternion a, const Quaternion b)
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
AMREX_FORCE_INLINE Quaternion operator+(const Quaternion a, const Quaternion b)
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, AMREX_SPACEDIM > Matrix
AMREX_FORCE_INLINE Quaternion operator*(const Set::Scalar alpha, const Quaternion b)
void Abort(const char *msg)