1#ifndef SET_MATRIX4_MAJOR_H
2#define SET_MATRIX4_MAJOR_H
25 int uid =
i + 2 *
j + 4 *
k + 8 *
l;
26 if (
uid==0 )
return data[0];
27 else if (
uid==8 ||
uid==2 )
return data[1];
28 else if (
uid==4 ||
uid==1 )
return data[2];
29 else if (
uid==12 ||
uid==3 )
return data[3];
30 else if (
uid==10 )
return data[4];
31 else if (
uid==6 ||
uid==9 )
return data[5];
32 else if (
uid==14 ||
uid==11 )
return data[6];
33 else if (
uid==5 )
return data[7];
34 else if (
uid==13 ||
uid==7 )
return data[8];
35 else if (
uid==15 )
return data[9];
44 int uid =
i + 2 *
j + 4 *
k + 8 *
l;
45 if (
uid==0 )
return data[0];
46 else if (
uid==8 ||
uid==2 )
return data[1];
47 else if (
uid==4 ||
uid==1 )
return data[2];
48 else if (
uid==12 ||
uid==3 )
return data[3];
49 else if (
uid==10 )
return data[4];
50 else if (
uid==6 ||
uid==9 )
return data[5];
51 else if (
uid==14 ||
uid==11 )
return data[6];
52 else if (
uid==5 )
return data[7];
53 else if (
uid==13 ||
uid==7 )
return data[8];
54 else if (
uid==15 )
return data[9];
61 #if AMREX_SPACEDIM == 2
65 for (
int i = 0;
i < 2;
i++)
66 for (
int j = 0;
j < 2;
j++)
67 for (
int k = 0;
k < 2;
k++)
68 for (
int l = 0;
l < 2;
l++)
74 for (
int i = 0;
i < 2;
i++)
75 for (
int j = 0;
j < 2;
j++)
76 for (
int k = 0;
k < 2;
k++)
77 for (
int l = 0;
l < 2;
l++)
80 Matrix4(
const Matrix4<2,Sym::MajorMinor> &
in)
83 for (
int i = 0;
i < 2;
i++)
84 for (
int j = 0;
j < 2;
j++)
85 for (
int k = 0;
k < 2;
k++)
86 for (
int l = 0;
l < 2;
l++)
94 for (
int k = 0;
k < 2;
k++)
96 for (
int i = -1;
i < 3;
i++)
98 for (
int l = 0;
l < 2;
l++)
107 for (
int j = 0;
j < 2;
j++)
110 os << std::scientific << std::setw(11) << val;
160 for (
int i = 0;
i < 10;
i++)
normsq += data[
i]*data[
i];
165 if (std::isnan(data[ 0]))
return true;
166 if (std::isnan(data[ 1]))
return true;
167 if (std::isnan(data[ 2]))
return true;
168 if (std::isnan(data[ 3]))
return true;
169 if (std::isnan(data[ 4]))
return true;
170 if (std::isnan(data[ 5]))
return true;
171 if (std::isnan(data[ 6]))
return true;
172 if (std::isnan(data[ 7]))
return true;
173 if (std::isnan(data[ 8]))
return true;
174 if (std::isnan(data[ 9]))
return true;
189 for (
int i = 0;
i < 10;
i++)
ret.data[
i] = a.data[
i] +
b.data[
i];
196 for (
int i = 0;
i < 10;
i++)
ret.data[
i] = a.data[
i] -
b.data[
i];
203 for (
int i = 0;
i < 10;
i++)
ret.data[
i] = a.data[
i] *
b;
216 for (
int i = 0;
i < 10;
i++)
ret.data[
i] = a.data[
i] /
b;
223 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);
224 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);
225 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);
226 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);
244 #if AMREX_SPACEDIM == 3
248 for (
int i = 0;
i < 3;
i++)
249 for (
int j = 0;
j < 3;
j++)
250 for (
int k = 0;
k < 3;
k++)
251 for (
int l = 0;
l < 3;
l++)
257 for (
int i = 0;
i < 3;
i++)
258 for (
int j = 0;
j < 3;
j++)
259 for (
int k = 0;
k < 3;
k++)
260 for (
int l = 0;
l < 3;
l++)
263 Matrix4(
const Matrix4<3,Sym::MajorMinor> &
in)
266 for (
int i = 0;
i < 3;
i++)
267 for (
int j = 0;
j < 3;
j++)
268 for (
int k = 0;
k < 3;
k++)
269 for (
int l = 0;
l < 3;
l++)
277 int uid =
i + 3 *
j + 9 *
k + 27 *
l;
279 if (
uid == 0)
return data[0];
280 else if (
uid == 27 ||
uid == 3)
return data[1];
281 else if (
uid == 54 ||
uid == 6)
return data[2];
282 else if (
uid == 9 ||
uid == 1)
return data[3];
283 else if (
uid == 36 ||
uid == 4)
return data[4];
284 else if (
uid == 63 ||
uid == 7)
return data[5];
285 else if (
uid == 18 ||
uid == 2)
return data[6];
286 else if (
uid == 45 ||
uid == 5)
return data[7];
287 else if (
uid == 72 ||
uid == 8)
return data[8];
288 else if (
uid == 30)
return data[9];
289 else if (
uid == 57 ||
uid == 33)
return data[10];
290 else if (
uid == 12 ||
uid == 28)
return data[11];
291 else if (
uid == 39 ||
uid == 31)
return data[12];
292 else if (
uid == 66 ||
uid == 34)
return data[13];
293 else if (
uid == 21 ||
uid == 29)
return data[14];
294 else if (
uid == 48 ||
uid == 32)
return data[15];
295 else if (
uid == 75 ||
uid == 35)
return data[16];
296 else if (
uid == 60)
return data[17];
297 else if (
uid == 15 ||
uid == 55)
return data[18];
298 else if (
uid == 42 ||
uid == 58)
return data[19];
299 else if (
uid == 69 ||
uid == 61)
return data[20];
300 else if (
uid == 24 ||
uid == 56)
return data[21];
301 else if (
uid == 51 ||
uid == 59)
return data[22];
302 else if (
uid == 78 ||
uid == 62)
return data[23];
303 else if (
uid == 10)
return data[24];
304 else if (
uid == 37 ||
uid == 13)
return data[25];
305 else if (
uid == 64 ||
uid == 16)
return data[26];
306 else if (
uid == 19 ||
uid == 11)
return data[27];
307 else if (
uid == 46 ||
uid == 14)
return data[28];
308 else if (
uid == 73 ||
uid == 17)
return data[29];
309 else if (
uid == 40)
return data[30];
310 else if (
uid == 67 ||
uid == 43)
return data[31];
311 else if (
uid == 22 ||
uid == 38)
return data[32];
312 else if (
uid == 49 ||
uid == 41)
return data[33];
313 else if (
uid == 76 ||
uid == 44)
return data[34];
314 else if (
uid == 70)
return data[35];
315 else if (
uid == 25 ||
uid == 65)
return data[36];
316 else if (
uid == 52 ||
uid == 68)
return data[37];
317 else if (
uid == 79 ||
uid == 71)
return data[38];
318 else if (
uid == 20)
return data[39];
319 else if (
uid == 47 ||
uid == 23)
return data[40];
320 else if (
uid == 74 ||
uid == 26)
return data[41];
321 else if (
uid == 50)
return data[42];
322 else if (
uid == 77 ||
uid == 53)
return data[43];
323 else if (
uid == 80)
return data[44];
333 int uid =
i + 3 *
j + 9 *
k + 27 *
l;
335 if (
uid == 0)
return data[0];
336 else if (
uid == 27 ||
uid == 3)
return data[1];
337 else if (
uid == 54 ||
uid == 6)
return data[2];
338 else if (
uid == 9 ||
uid == 1)
return data[3];
339 else if (
uid == 36 ||
uid == 4)
return data[4];
340 else if (
uid == 63 ||
uid == 7)
return data[5];
341 else if (
uid == 18 ||
uid == 2)
return data[6];
342 else if (
uid == 45 ||
uid == 5)
return data[7];
343 else if (
uid == 72 ||
uid == 8)
return data[8];
344 else if (
uid == 30)
return data[9];
345 else if (
uid == 57 ||
uid == 33)
return data[10];
346 else if (
uid == 12 ||
uid == 28)
return data[11];
347 else if (
uid == 39 ||
uid == 31)
return data[12];
348 else if (
uid == 66 ||
uid == 34)
return data[13];
349 else if (
uid == 21 ||
uid == 29)
return data[14];
350 else if (
uid == 48 ||
uid == 32)
return data[15];
351 else if (
uid == 75 ||
uid == 35)
return data[16];
352 else if (
uid == 60)
return data[17];
353 else if (
uid == 15 ||
uid == 55)
return data[18];
354 else if (
uid == 42 ||
uid == 58)
return data[19];
355 else if (
uid == 69 ||
uid == 61)
return data[20];
356 else if (
uid == 24 ||
uid == 56)
return data[21];
357 else if (
uid == 51 ||
uid == 59)
return data[22];
358 else if (
uid == 78 ||
uid == 62)
return data[23];
359 else if (
uid == 10)
return data[24];
360 else if (
uid == 37 ||
uid == 13)
return data[25];
361 else if (
uid == 64 ||
uid == 16)
return data[26];
362 else if (
uid == 19 ||
uid == 11)
return data[27];
363 else if (
uid == 46 ||
uid == 14)
return data[28];
364 else if (
uid == 73 ||
uid == 17)
return data[29];
365 else if (
uid == 40)
return data[30];
366 else if (
uid == 67 ||
uid == 43)
return data[31];
367 else if (
uid == 22 ||
uid == 38)
return data[32];
368 else if (
uid == 49 ||
uid == 41)
return data[33];
369 else if (
uid == 76 ||
uid == 44)
return data[34];
370 else if (
uid == 70)
return data[35];
371 else if (
uid == 25 ||
uid == 65)
return data[36];
372 else if (
uid == 52 ||
uid == 68)
return data[37];
373 else if (
uid == 79 ||
uid == 71)
return data[38];
374 else if (
uid == 20)
return data[39];
375 else if (
uid == 47 ||
uid == 23)
return data[40];
376 else if (
uid == 74 ||
uid == 26)
return data[41];
377 else if (
uid == 50)
return data[42];
378 else if (
uid == 77 ||
uid == 53)
return data[43];
379 else if (
uid == 80)
return data[44];
388 for (
int i = 0;
i < 45;
i++)
retsq += data[
i]*data[
i];
389 return std::sqrt(
retsq);
395 for (
int i = 0;
i < 45;
i++)
396 os <<
"i = " <<
i <<
" " << data[
i] << std::endl;
399 for (
int k = 0;
k < 3;
k++)
401 for (
int i = -1;
i < 4;
i++)
403 for (
int l = 0;
l < 3;
l++)
412 for (
int j = 0;
j < 3;
j++)
415 os << std::scientific << std::setw(11) << val;
465 for (
int i = 0;
i < 45;
i++)
normsq += data[
i]*data[
i];
470 for (
int i = 0;
i < 45;
i++)
471 if (std::isnan(data[
i]))
return true;
487 for (
int i = 0;
i < 45;
i++)
ret.data[
i] = a.data[
i] +
b.data[
i];
494 for (
int i = 0;
i < 45;
i++)
ret.data[
i] = a.data[
i] -
b.data[
i];
501 for (
int i = 0;
i < 45;
i++)
ret.data[
i] = a.data[
i] *
b;
514 for (
int i = 0;
i < 45;
i++)
ret.data[
i] = a.data[
i] /
b;
522 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);
523 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);
524 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);
525 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);
526 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);
527 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);
528 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);
529 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);
530 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)
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE void operator*=(const Set::Scalar &alpha)
static Matrix4< 2, Sym::Major > Random()
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 > Random()
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)