Alamo
Matrix4_Major.H
Go to the documentation of this file.
1#ifndef SET_MATRIX4_MAJOR_H
2#define SET_MATRIX4_MAJOR_H
3
4#include "Base.H"
5
6namespace Set
7{
8
9template <>
10class Matrix4<2, Sym::Major>
11{
12 Scalar data[10] = {NAN, NAN, NAN, NAN, NAN,
13 NAN, NAN, NAN, NAN, NAN};
14
15public:
17
18 #if AMREX_SPACEDIM == 2
20 {
21 // TODO: very inefficient, need to optimize
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++)
26 (*this)(i,j,k,l) = in(i,j,k,l);
27 }
28 Matrix4(const Matrix4<2,Sym::Diagonal> &in)
29 {
30 // TODO: very inefficient, need to optimize
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++)
35 (*this)(i,j,k,l) = in(i,j,k,l);
36 }
37 Matrix4(const Matrix4<2,Sym::MajorMinor> &in)
38 {
39 // TODO: very inefficient, need to optimize
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++)
44 (*this)(i,j,k,l) = in(i,j,k,l);
45 }
46 #endif
47
49 const Scalar &operator()(const int i, const int j, const int k, const int l) const
50 {
51 int uid = i + 2 * j + 4 * k + 8 * l;
52 if (uid==0 ) return data[0]; // [0000]
53 else if (uid==8 || uid==2 ) return data[1]; // [0001] [0100]
54 else if (uid==4 || uid==1 ) return data[2]; // [0010] [1000]
55 else if (uid==12 || uid==3 ) return data[3]; // [0011] [1100]
56 else if (uid==10 ) return data[4]; // [0101]
57 else if (uid==6 || uid==9 ) return data[5]; // [0110] [1001]
58 else if (uid==14 || uid==11 ) return data[6]; // [0111] [1101]
59 else if (uid==5 ) return data[7]; // [1010]
60 else if (uid==13 || uid==7 ) return data[8]; // [1011] [1110]
61 else if (uid==15 ) return data[9]; // [1111]
62 else
63 Util::Abort(INFO, "Index out of range");
64 return Set::Garbage;
65 }
66
68 Scalar &operator()(const int i, const int j, const int k, const int l)
69 {
70 int uid = i + 2 * j + 4 * k + 8 * l;
71 if (uid==0 ) return data[0]; // [0000]
72 else if (uid==8 || uid==2 ) return data[1]; // [0001] [0100]
73 else if (uid==4 || uid==1 ) return data[2]; // [0010] [1000]
74 else if (uid==12 || uid==3 ) return data[3]; // [0011] [1100]
75 else if (uid==10 ) return data[4]; // [0101]
76 else if (uid==6 || uid==9 ) return data[5]; // [0110] [1001]
77 else if (uid==14 || uid==11 ) return data[6]; // [0111] [1101]
78 else if (uid==5 ) return data[7]; // [1010]
79 else if (uid==13 || uid==7 ) return data[8]; // [1011] [1110]
80 else if (uid==15 ) return data[9]; // [1111]
81 else
82 Util::Abort(INFO, "Index out of range");
83 return Set::Garbage;
84 }
85 void Print(std::ostream &os)
86 {
87 os.precision(4);
88 for (int k = 0; k < 2; k++)
89 {
90 for (int i = -1; i < 3; i++)
91 {
92 for (int l = 0; l < 2; l++)
93 {
94 if (i == -1)
95 os << "┌ ┐ ";
96 else if (i == 2)
97 os << "└ ┘ ";
98 else
99 {
100 os << "│ ";
101 for (int j = 0; j < 2; j++)
102 {
103 const Set::Scalar &val = (*this)(i, j, k, l);
104 os << std::scientific << std::setw(11) << val; //(fabs(val)>1E-10 ? val : 0);
105 os << " ";
106 }
107 os << "│ ";
108 }
109 }
110 os << std::endl;
111 }
112 }
113 }
114 //AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
115 //void operator=(const Matrix4<2, Sym::Major> &a) { for (int i = 0; i < 10; i++) data[i] = a.data[i]; }
117 void operator+=(const Matrix4<2, Sym::Major> &a) { for (int i = 0; i < 10; i++) data[i] += a.data[i]; }
119 void operator-=(const Matrix4<2, Sym::Major> &a) { for (int i = 0; i < 10; i++) data[i] -= a.data[i]; }
121 void operator*=(const Matrix4<2, Sym::Major> &a) { for (int i = 0; i < 10; i++) data[i] *= a.data[i]; }
123 void operator/=(const Matrix4<2, Sym::Major> &a) { for (int i = 0; i < 10; i++) data[i] /= a.data[i]; }
125 void operator*=(const Set::Scalar &alpha) { for (int i = 0; i < 10; i++) data[i] *= alpha; }
127 void operator/=(const Set::Scalar &alpha) { for (int i = 0; i < 10; i++) data[i] /= alpha; }
128
130 {
132 for (int i = 0; i < 10; i++) ret.data[i] = (Set::Scalar)i;
133 return ret;
134 }
136 {
138 for (int i = 0; i < 10; i++) ret.data[i] = (Util::Random());
139 return ret;
140 }
142 {
144 for (int i = 0; i < 10; i++) ret.data[i] = 0.0;
145 return ret;
146 }
148 {
149 Set::Scalar normsq = 0.0;
150 for (int i = 0; i < 10; i++) normsq += data[i]*data[i];
151 return std::sqrt(normsq);
152 }
153 bool contains_nan() const
154 {
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;
165 return false;
166 }
167
174};
177{
179 for (int i = 0; i < 10; i++) ret.data[i] = a.data[i] + b.data[i];
180 return ret;
181}
184{
186 for (int i = 0; i < 10; i++) ret.data[i] = a.data[i] - b.data[i];
187 return ret;
188}
191{
193 for (int i = 0; i < 10; i++) ret.data[i] = a.data[i] * b;
194 return ret;
195}
198{
199 return a*b;
200}
201
204{
206 for (int i = 0; i < 10; i++) ret.data[i] = a.data[i] / b;
207 return ret;
208}
211{
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);
217 return ret;
218}
219
220
221
222template <>
223class Matrix4<3, Sym::Major>
224{
225 Scalar data[45] = {NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN,
226 NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN,
227 NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN,
228 NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN,
229 NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN};
230
231public:
233
234 #if AMREX_SPACEDIM == 3
236 {
237 // TODO: very inefficient, need to optimize
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++)
242 (*this)(i,j,k,l) = in(i,j,k,l);
243 }
244 Matrix4(const Matrix4<3,Sym::Diagonal> &in)
245 {
246 // TODO: very inefficient, need to optimize
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++)
251 (*this)(i,j,k,l) = in(i,j,k,l);
252 }
253 Matrix4(const Matrix4<3,Sym::MajorMinor> &in)
254 {
255 // TODO: very inefficient, need to optimize
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++)
260 (*this)(i,j,k,l) = in(i,j,k,l);
261 }
262 #endif
263
265 Scalar &operator()(const int i, const int j, const int k, const int l)
266 {
267 int uid = i + 3 * j + 9 * k + 27 * l;
268
269 if (uid == 0) return data[0]; // [0000]
270 else if (uid == 27 || uid == 3) return data[1]; // [0001] [0100]
271 else if (uid == 54 || uid == 6) return data[2]; // [0002] [0200]
272 else if (uid == 9 || uid == 1) return data[3]; // [0010] [1000]
273 else if (uid == 36 || uid == 4) return data[4]; // [0011] [1100]
274 else if (uid == 63 || uid == 7) return data[5]; // [0012] [1200]
275 else if (uid == 18 || uid == 2) return data[6]; // [0020] [2000]
276 else if (uid == 45 || uid == 5) return data[7]; // [0021] [2100]
277 else if (uid == 72 || uid == 8) return data[8]; // [0022] [2200]
278 else if (uid == 30) return data[9]; // [0101]
279 else if (uid == 57 || uid == 33) return data[10]; // [0102] [0201]
280 else if (uid == 12 || uid == 28) return data[11]; // [0110] [1001]
281 else if (uid == 39 || uid == 31) return data[12]; // [0111] [1101]
282 else if (uid == 66 || uid == 34) return data[13]; // [0112] [1201]
283 else if (uid == 21 || uid == 29) return data[14]; // [0120] [2001]
284 else if (uid == 48 || uid == 32) return data[15]; // [0121] [2101]
285 else if (uid == 75 || uid == 35) return data[16]; // [0122] [2201]
286 else if (uid == 60) return data[17]; // [0202]
287 else if (uid == 15 || uid == 55) return data[18]; // [0210] [1002]
288 else if (uid == 42 || uid == 58) return data[19]; // [0211] [1102]
289 else if (uid == 69 || uid == 61) return data[20]; // [0212] [1202]
290 else if (uid == 24 || uid == 56) return data[21]; // [0220] [2002]
291 else if (uid == 51 || uid == 59) return data[22]; // [0221] [2102]
292 else if (uid == 78 || uid == 62) return data[23]; // [0222] [2202]
293 else if (uid == 10) return data[24]; // [1010]
294 else if (uid == 37 || uid == 13) return data[25]; // [1011] [1110]
295 else if (uid == 64 || uid == 16) return data[26]; // [1012] [1210]
296 else if (uid == 19 || uid == 11) return data[27]; // [1020] [2010]
297 else if (uid == 46 || uid == 14) return data[28]; // [1021] [2110]
298 else if (uid == 73 || uid == 17) return data[29]; // [1022] [2210]
299 else if (uid == 40) return data[30]; // [1111]
300 else if (uid == 67 || uid == 43) return data[31]; // [1112] [1211]
301 else if (uid == 22 || uid == 38) return data[32]; // [1120] [2011]
302 else if (uid == 49 || uid == 41) return data[33]; // [1121] [2111]
303 else if (uid == 76 || uid == 44) return data[34]; // [1122] [2211]
304 else if (uid == 70) return data[35]; // [1212]
305 else if (uid == 25 || uid == 65) return data[36]; // [1220] [2012]
306 else if (uid == 52 || uid == 68) return data[37]; // [1221] [2112]
307 else if (uid == 79 || uid == 71) return data[38]; // [1222] [2212]
308 else if (uid == 20) return data[39]; // [2020]
309 else if (uid == 47 || uid == 23) return data[40]; // [2021] [2120]
310 else if (uid == 74 || uid == 26) return data[41]; // [2022] [2220]
311 else if (uid == 50) return data[42]; // [2121]
312 else if (uid == 77 || uid == 53) return data[43]; // [2122] [2221]
313 else if (uid == 80) return data[44]; // [2222]
314 else
315 Util::Abort(INFO, "Index out of range");
316 return Set::Garbage;
317 }
318
319
321 const Scalar &operator()(const int i, const int j, const int k, const int l) const
322 {
323 int uid = i + 3 * j + 9 * k + 27 * l;
324
325 if (uid == 0) return data[0]; // [0000]
326 else if (uid == 27 || uid == 3) return data[1]; // [0001] [0100]
327 else if (uid == 54 || uid == 6) return data[2]; // [0002] [0200]
328 else if (uid == 9 || uid == 1) return data[3]; // [0010] [1000]
329 else if (uid == 36 || uid == 4) return data[4]; // [0011] [1100]
330 else if (uid == 63 || uid == 7) return data[5]; // [0012] [1200]
331 else if (uid == 18 || uid == 2) return data[6]; // [0020] [2000]
332 else if (uid == 45 || uid == 5) return data[7]; // [0021] [2100]
333 else if (uid == 72 || uid == 8) return data[8]; // [0022] [2200]
334 else if (uid == 30) return data[9]; // [0101]
335 else if (uid == 57 || uid == 33) return data[10]; // [0102] [0201]
336 else if (uid == 12 || uid == 28) return data[11]; // [0110] [1001]
337 else if (uid == 39 || uid == 31) return data[12]; // [0111] [1101]
338 else if (uid == 66 || uid == 34) return data[13]; // [0112] [1201]
339 else if (uid == 21 || uid == 29) return data[14]; // [0120] [2001]
340 else if (uid == 48 || uid == 32) return data[15]; // [0121] [2101]
341 else if (uid == 75 || uid == 35) return data[16]; // [0122] [2201]
342 else if (uid == 60) return data[17]; // [0202]
343 else if (uid == 15 || uid == 55) return data[18]; // [0210] [1002]
344 else if (uid == 42 || uid == 58) return data[19]; // [0211] [1102]
345 else if (uid == 69 || uid == 61) return data[20]; // [0212] [1202]
346 else if (uid == 24 || uid == 56) return data[21]; // [0220] [2002]
347 else if (uid == 51 || uid == 59) return data[22]; // [0221] [2102]
348 else if (uid == 78 || uid == 62) return data[23]; // [0222] [2202]
349 else if (uid == 10) return data[24]; // [1010]
350 else if (uid == 37 || uid == 13) return data[25]; // [1011] [1110]
351 else if (uid == 64 || uid == 16) return data[26]; // [1012] [1210]
352 else if (uid == 19 || uid == 11) return data[27]; // [1020] [2010]
353 else if (uid == 46 || uid == 14) return data[28]; // [1021] [2110]
354 else if (uid == 73 || uid == 17) return data[29]; // [1022] [2210]
355 else if (uid == 40) return data[30]; // [1111]
356 else if (uid == 67 || uid == 43) return data[31]; // [1112] [1211]
357 else if (uid == 22 || uid == 38) return data[32]; // [1120] [2011]
358 else if (uid == 49 || uid == 41) return data[33]; // [1121] [2111]
359 else if (uid == 76 || uid == 44) return data[34]; // [1122] [2211]
360 else if (uid == 70) return data[35]; // [1212]
361 else if (uid == 25 || uid == 65) return data[36]; // [1220] [2012]
362 else if (uid == 52 || uid == 68) return data[37]; // [1221] [2112]
363 else if (uid == 79 || uid == 71) return data[38]; // [1222] [2212]
364 else if (uid == 20) return data[39]; // [2020]
365 else if (uid == 47 || uid == 23) return data[40]; // [2021] [2120]
366 else if (uid == 74 || uid == 26) return data[41]; // [2022] [2220]
367 else if (uid == 50) return data[42]; // [2121]
368 else if (uid == 77 || uid == 53) return data[43]; // [2122] [2221]
369 else if (uid == 80) return data[44]; // [2222]
370 else
371 Util::Abort(INFO, "Index out of range");
372 return Set::Garbage;
373 }
374
376 {
377 Set::Scalar retsq = 0;
378 for (int i = 0; i < 45; i++) retsq += data[i]*data[i];
379 return std::sqrt(retsq);
380 }
381
382
383 void Print(std::ostream &os)
384 {
385 for (int i = 0; i < 45; i++)
386 os << "i = " << i << " " << data[i] << std::endl;
387
388 os.precision(4);
389 for (int k = 0; k < 3; k++)
390 {
391 for (int i = -1; i < 4; i++)
392 {
393 for (int l = 0; l < 3; l++)
394 {
395 if (i == -1)
396 os << "┌ ┐ ";
397 else if (i == 3)
398 os << "└ ┘ ";
399 else
400 {
401 os << "│ ";
402 for (int j = 0; j < 3; j++)
403 {
404 const Set::Scalar &val = (*this)(i, j, k, l);
405 os << std::scientific << std::setw(11) << val; //(fabs(val)>1E-10 ? val : 0);
406 os << " ";
407 }
408 os << "│ ";
409 }
410 }
411 os << std::endl;
412 }
413 }
414 }
415 //AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
416 //void operator=(const Matrix4<3, Sym::Major> &a) { for (int i = 0; i < 45; i++) data[i] = a.data[i]; }
418 void operator+=(const Matrix4<3, Sym::Major> &a) { for (int i = 0; i < 45; i++) data[i] += a.data[i]; }
420 void operator-=(const Matrix4<3, Sym::Major> &a) { for (int i = 0; i < 45; i++) data[i] -= a.data[i]; }
422 void operator*=(const Matrix4<3, Sym::Major> &a) { for (int i = 0; i < 45; i++) data[i] *= a.data[i]; }
424 void operator/=(const Matrix4<3, Sym::Major> &a) { for (int i = 0; i < 45; i++) data[i] /= a.data[i]; }
426 void operator*=(const Set::Scalar &alpha) { for (int i = 0; i < 45; i++) data[i] *= alpha; }
428 void operator/=(const Set::Scalar &alpha) { for (int i = 0; i < 45; i++) data[i] /= alpha; }
429
431 {
433 for (int i = 0; i < 45; i++) ret.data[i] = (Set::Scalar)i;
434 return ret;
435 }
437 {
439 for (int i = 0; i < 45; i++) ret.data[i] = (Util::Random());
440 return ret;
441 }
443 {
445 for (int i = 0; i < 45; i++) ret.data[i] = 0.0;
446 return ret;
447 }
449 {
450 Set::Scalar normsq = 0.0;
451 for (int i = 0; i < 45; i++) normsq += data[i]*data[i];
452 return std::sqrt(normsq);
453 }
454 bool contains_nan() const
455 {
456 for (int i = 0; i < 45; i++)
457 if (std::isnan(data[i])) return true;
458 return false;
459 }
460
467};
468
471{
473 for (int i = 0; i < 45; i++) ret.data[i] = a.data[i] + b.data[i];
474 return ret;
475}
478{
480 for (int i = 0; i < 45; i++) ret.data[i] = a.data[i] - b.data[i];
481 return ret;
482}
485{
487 for (int i = 0; i < 45; i++) ret.data[i] = a.data[i] * b;
488 return ret;
489}
492{
493 return a*b;
494}
495
498{
500 for (int i = 0; i < 45; i++) ret.data[i] = a.data[i] / b;
501 return ret;
502}
503
506{
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);
517 return ret;
518}
519
522{
523 // TODO: improve efficiency of this method
524 Set::Vector ret = Set::Vector::Zero();
525 for (int i = 0; i < AMREX_SPACEDIM; i++)
526 {
527 for (int J = 0; J < AMREX_SPACEDIM; J++)
528 for (int k = 0; k < AMREX_SPACEDIM; k++)
529 for (int L = 0; L < AMREX_SPACEDIM; L++)
530 ret(i) += a(i,J,k,L) * b(k,L,J);
531 }
532 return ret;
533}
534
535}
536#endif
#define INFO
Definition Util.H:20
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()
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()
A collection of data types and symmetry-reduced data structures.
Definition Base.H:18
AMREX_FORCE_INLINE Quaternion operator-(const Quaternion a, const Quaternion b)
Definition Base.H:100
static Scalar Garbage
Definition Base.H:118
Sym
Definition Base.H:197
@ Major
Definition Base.H:197
amrex::Real Scalar
Definition Base.H:19
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:20
AMREX_FORCE_INLINE Quaternion operator+(const Quaternion a, const Quaternion b)
Definition Base.H:92
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, AMREX_SPACEDIM > Matrix
Definition Base.H:23
AMREX_FORCE_INLINE Quaternion operator*(const Set::Scalar alpha, const Quaternion b)
Definition Base.H:78
void Abort(const char *msg)
Definition Util.cpp:170
Set::Scalar Random()
Definition Set.cpp:9