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#include "Matrix4.H"
7#include "Matrix4_Isotropic.H"
8#include "Matrix4_Diagonal.H"
9
10namespace Set
11{
12
13template <>
14class Matrix4<2, Sym::Major>
15{
16 Scalar data[10] = {NAN, NAN, NAN, NAN, NAN,
17 NAN, NAN, NAN, NAN, NAN};
18
19public:
21
23 const Scalar &operator()(const int i, const int j, const int k, const int l) const
24 {
25 int uid = i + 2 * j + 4 * k + 8 * l;
26 if (uid==0 ) return data[0]; // [0000]
27 else if (uid==8 || uid==2 ) return data[1]; // [0001] [0100]
28 else if (uid==4 || uid==1 ) return data[2]; // [0010] [1000]
29 else if (uid==12 || uid==3 ) return data[3]; // [0011] [1100]
30 else if (uid==10 ) return data[4]; // [0101]
31 else if (uid==6 || uid==9 ) return data[5]; // [0110] [1001]
32 else if (uid==14 || uid==11 ) return data[6]; // [0111] [1101]
33 else if (uid==5 ) return data[7]; // [1010]
34 else if (uid==13 || uid==7 ) return data[8]; // [1011] [1110]
35 else if (uid==15 ) return data[9]; // [1111]
36 else
37 Util::Abort(INFO, "Index out of range");
38 return Set::Garbage;
39 }
40
42 Scalar &operator()(const int i, const int j, const int k, const int l)
43 {
44 int uid = i + 2 * j + 4 * k + 8 * l;
45 if (uid==0 ) return data[0]; // [0000]
46 else if (uid==8 || uid==2 ) return data[1]; // [0001] [0100]
47 else if (uid==4 || uid==1 ) return data[2]; // [0010] [1000]
48 else if (uid==12 || uid==3 ) return data[3]; // [0011] [1100]
49 else if (uid==10 ) return data[4]; // [0101]
50 else if (uid==6 || uid==9 ) return data[5]; // [0110] [1001]
51 else if (uid==14 || uid==11 ) return data[6]; // [0111] [1101]
52 else if (uid==5 ) return data[7]; // [1010]
53 else if (uid==13 || uid==7 ) return data[8]; // [1011] [1110]
54 else if (uid==15 ) return data[9]; // [1111]
55 else
56 Util::Abort(INFO, "Index out of range");
57 return Set::Garbage;
58 }
59
60
61 #if AMREX_SPACEDIM == 2
63 {
64 // TODO: very inefficient, need to optimize
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++)
69 (*this)(i,j,k,l) = in(i,j,k,l);
70 }
71 Matrix4(const Matrix4<2,Sym::Diagonal> &in)
72 {
73 // TODO: very inefficient, need to optimize
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++)
78 (*this)(i,j,k,l) = in(i,j,k,l);
79 }
80 Matrix4(const Matrix4<2,Sym::MajorMinor> &in)
81 {
82 // TODO: very inefficient, need to optimize
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++)
87 (*this)(i,j,k,l) = in(i,j,k,l);
88 }
89 #endif
90
91 void Print(std::ostream &os)
92 {
93 os.precision(4);
94 for (int k = 0; k < 2; k++)
95 {
96 for (int i = -1; i < 3; i++)
97 {
98 for (int l = 0; l < 2; l++)
99 {
100 if (i == -1)
101 os << "┌ ┐ ";
102 else if (i == 2)
103 os << "└ ┘ ";
104 else
105 {
106 os << "│ ";
107 for (int j = 0; j < 2; j++)
108 {
109 const Set::Scalar &val = (*this)(i, j, k, l);
110 os << std::scientific << std::setw(11) << val; //(fabs(val)>1E-10 ? val : 0);
111 os << " ";
112 }
113 os << "│ ";
114 }
115 }
116 os << std::endl;
117 }
118 }
119 }
120 //AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
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 Matrix4<2, Sym::Major> &a) { for (int i = 0; i < 10; i++) data[i] -= a.data[i]; }
127 void operator*=(const Matrix4<2, Sym::Major> &a) { for (int i = 0; i < 10; i++) data[i] *= a.data[i]; }
129 void operator/=(const Matrix4<2, Sym::Major> &a) { for (int i = 0; i < 10; i++) data[i] /= a.data[i]; }
131 void operator*=(const Set::Scalar &alpha) { for (int i = 0; i < 10; i++) data[i] *= alpha; }
133 void operator/=(const Set::Scalar &alpha) { for (int i = 0; i < 10; i++) data[i] /= alpha; }
134
136 {
138 for (int i = 0; i < 10; i++) ret.data[i] = (Set::Scalar)i;
139 return ret;
140 }
142 {
143 for (int i = 0; i < 10; i++) data[i] = (Util::Random());
144 }
146 {
148 ret.Randomize();
149 return ret;
150 }
152 {
154 for (int i = 0; i < 10; i++) ret.data[i] = 0.0;
155 return ret;
156 }
158 {
159 Set::Scalar normsq = 0.0;
160 for (int i = 0; i < 10; i++) normsq += data[i]*data[i];
161 return std::sqrt(normsq);
162 }
163 bool contains_nan() const
164 {
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;
175 return false;
176 }
177
184};
187{
189 for (int i = 0; i < 10; i++) ret.data[i] = a.data[i] + b.data[i];
190 return ret;
191}
194{
196 for (int i = 0; i < 10; i++) ret.data[i] = a.data[i] - b.data[i];
197 return ret;
198}
201{
203 for (int i = 0; i < 10; i++) ret.data[i] = a.data[i] * b;
204 return ret;
205}
208{
209 return a*b;
210}
211
214{
216 for (int i = 0; i < 10; i++) ret.data[i] = a.data[i] / b;
217 return ret;
218}
221{
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);
227 return ret;
228}
229
230
231
232template <>
233class Matrix4<3, Sym::Major>
234{
235 Scalar data[45] = {NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN,
236 NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN,
237 NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN,
238 NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN,
239 NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN};
240
241public:
243
244 #if AMREX_SPACEDIM == 3
246 {
247 // TODO: very inefficient, need to optimize
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++)
252 (*this)(i,j,k,l) = in(i,j,k,l);
253 }
254 Matrix4(const Matrix4<3,Sym::Diagonal> &in)
255 {
256 // TODO: very inefficient, need to optimize
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++)
261 (*this)(i,j,k,l) = in(i,j,k,l);
262 }
263 Matrix4(const Matrix4<3,Sym::MajorMinor> &in)
264 {
265 // TODO: very inefficient, need to optimize
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++)
270 (*this)(i,j,k,l) = in(i,j,k,l);
271 }
272 #endif
273
275 Scalar &operator()(const int i, const int j, const int k, const int l)
276 {
277 int uid = i + 3 * j + 9 * k + 27 * l;
278
279 if (uid == 0) return data[0]; // [0000]
280 else if (uid == 27 || uid == 3) return data[1]; // [0001] [0100]
281 else if (uid == 54 || uid == 6) return data[2]; // [0002] [0200]
282 else if (uid == 9 || uid == 1) return data[3]; // [0010] [1000]
283 else if (uid == 36 || uid == 4) return data[4]; // [0011] [1100]
284 else if (uid == 63 || uid == 7) return data[5]; // [0012] [1200]
285 else if (uid == 18 || uid == 2) return data[6]; // [0020] [2000]
286 else if (uid == 45 || uid == 5) return data[7]; // [0021] [2100]
287 else if (uid == 72 || uid == 8) return data[8]; // [0022] [2200]
288 else if (uid == 30) return data[9]; // [0101]
289 else if (uid == 57 || uid == 33) return data[10]; // [0102] [0201]
290 else if (uid == 12 || uid == 28) return data[11]; // [0110] [1001]
291 else if (uid == 39 || uid == 31) return data[12]; // [0111] [1101]
292 else if (uid == 66 || uid == 34) return data[13]; // [0112] [1201]
293 else if (uid == 21 || uid == 29) return data[14]; // [0120] [2001]
294 else if (uid == 48 || uid == 32) return data[15]; // [0121] [2101]
295 else if (uid == 75 || uid == 35) return data[16]; // [0122] [2201]
296 else if (uid == 60) return data[17]; // [0202]
297 else if (uid == 15 || uid == 55) return data[18]; // [0210] [1002]
298 else if (uid == 42 || uid == 58) return data[19]; // [0211] [1102]
299 else if (uid == 69 || uid == 61) return data[20]; // [0212] [1202]
300 else if (uid == 24 || uid == 56) return data[21]; // [0220] [2002]
301 else if (uid == 51 || uid == 59) return data[22]; // [0221] [2102]
302 else if (uid == 78 || uid == 62) return data[23]; // [0222] [2202]
303 else if (uid == 10) return data[24]; // [1010]
304 else if (uid == 37 || uid == 13) return data[25]; // [1011] [1110]
305 else if (uid == 64 || uid == 16) return data[26]; // [1012] [1210]
306 else if (uid == 19 || uid == 11) return data[27]; // [1020] [2010]
307 else if (uid == 46 || uid == 14) return data[28]; // [1021] [2110]
308 else if (uid == 73 || uid == 17) return data[29]; // [1022] [2210]
309 else if (uid == 40) return data[30]; // [1111]
310 else if (uid == 67 || uid == 43) return data[31]; // [1112] [1211]
311 else if (uid == 22 || uid == 38) return data[32]; // [1120] [2011]
312 else if (uid == 49 || uid == 41) return data[33]; // [1121] [2111]
313 else if (uid == 76 || uid == 44) return data[34]; // [1122] [2211]
314 else if (uid == 70) return data[35]; // [1212]
315 else if (uid == 25 || uid == 65) return data[36]; // [1220] [2012]
316 else if (uid == 52 || uid == 68) return data[37]; // [1221] [2112]
317 else if (uid == 79 || uid == 71) return data[38]; // [1222] [2212]
318 else if (uid == 20) return data[39]; // [2020]
319 else if (uid == 47 || uid == 23) return data[40]; // [2021] [2120]
320 else if (uid == 74 || uid == 26) return data[41]; // [2022] [2220]
321 else if (uid == 50) return data[42]; // [2121]
322 else if (uid == 77 || uid == 53) return data[43]; // [2122] [2221]
323 else if (uid == 80) return data[44]; // [2222]
324 else
325 Util::Abort(INFO, "Index out of range");
326 return Set::Garbage;
327 }
328
329
331 const Scalar &operator()(const int i, const int j, const int k, const int l) const
332 {
333 int uid = i + 3 * j + 9 * k + 27 * l;
334
335 if (uid == 0) return data[0]; // [0000]
336 else if (uid == 27 || uid == 3) return data[1]; // [0001] [0100]
337 else if (uid == 54 || uid == 6) return data[2]; // [0002] [0200]
338 else if (uid == 9 || uid == 1) return data[3]; // [0010] [1000]
339 else if (uid == 36 || uid == 4) return data[4]; // [0011] [1100]
340 else if (uid == 63 || uid == 7) return data[5]; // [0012] [1200]
341 else if (uid == 18 || uid == 2) return data[6]; // [0020] [2000]
342 else if (uid == 45 || uid == 5) return data[7]; // [0021] [2100]
343 else if (uid == 72 || uid == 8) return data[8]; // [0022] [2200]
344 else if (uid == 30) return data[9]; // [0101]
345 else if (uid == 57 || uid == 33) return data[10]; // [0102] [0201]
346 else if (uid == 12 || uid == 28) return data[11]; // [0110] [1001]
347 else if (uid == 39 || uid == 31) return data[12]; // [0111] [1101]
348 else if (uid == 66 || uid == 34) return data[13]; // [0112] [1201]
349 else if (uid == 21 || uid == 29) return data[14]; // [0120] [2001]
350 else if (uid == 48 || uid == 32) return data[15]; // [0121] [2101]
351 else if (uid == 75 || uid == 35) return data[16]; // [0122] [2201]
352 else if (uid == 60) return data[17]; // [0202]
353 else if (uid == 15 || uid == 55) return data[18]; // [0210] [1002]
354 else if (uid == 42 || uid == 58) return data[19]; // [0211] [1102]
355 else if (uid == 69 || uid == 61) return data[20]; // [0212] [1202]
356 else if (uid == 24 || uid == 56) return data[21]; // [0220] [2002]
357 else if (uid == 51 || uid == 59) return data[22]; // [0221] [2102]
358 else if (uid == 78 || uid == 62) return data[23]; // [0222] [2202]
359 else if (uid == 10) return data[24]; // [1010]
360 else if (uid == 37 || uid == 13) return data[25]; // [1011] [1110]
361 else if (uid == 64 || uid == 16) return data[26]; // [1012] [1210]
362 else if (uid == 19 || uid == 11) return data[27]; // [1020] [2010]
363 else if (uid == 46 || uid == 14) return data[28]; // [1021] [2110]
364 else if (uid == 73 || uid == 17) return data[29]; // [1022] [2210]
365 else if (uid == 40) return data[30]; // [1111]
366 else if (uid == 67 || uid == 43) return data[31]; // [1112] [1211]
367 else if (uid == 22 || uid == 38) return data[32]; // [1120] [2011]
368 else if (uid == 49 || uid == 41) return data[33]; // [1121] [2111]
369 else if (uid == 76 || uid == 44) return data[34]; // [1122] [2211]
370 else if (uid == 70) return data[35]; // [1212]
371 else if (uid == 25 || uid == 65) return data[36]; // [1220] [2012]
372 else if (uid == 52 || uid == 68) return data[37]; // [1221] [2112]
373 else if (uid == 79 || uid == 71) return data[38]; // [1222] [2212]
374 else if (uid == 20) return data[39]; // [2020]
375 else if (uid == 47 || uid == 23) return data[40]; // [2021] [2120]
376 else if (uid == 74 || uid == 26) return data[41]; // [2022] [2220]
377 else if (uid == 50) return data[42]; // [2121]
378 else if (uid == 77 || uid == 53) return data[43]; // [2122] [2221]
379 else if (uid == 80) return data[44]; // [2222]
380 else
381 Util::Abort(INFO, "Index out of range");
382 return Set::Garbage;
383 }
384
386 {
387 Set::Scalar retsq = 0;
388 for (int i = 0; i < 45; i++) retsq += data[i]*data[i];
389 return std::sqrt(retsq);
390 }
391
392
393 void Print(std::ostream &os)
394 {
395 for (int i = 0; i < 45; i++)
396 os << "i = " << i << " " << data[i] << std::endl;
397
398 os.precision(4);
399 for (int k = 0; k < 3; k++)
400 {
401 for (int i = -1; i < 4; i++)
402 {
403 for (int l = 0; l < 3; l++)
404 {
405 if (i == -1)
406 os << "┌ ┐ ";
407 else if (i == 3)
408 os << "└ ┘ ";
409 else
410 {
411 os << "│ ";
412 for (int j = 0; j < 3; j++)
413 {
414 const Set::Scalar &val = (*this)(i, j, k, l);
415 os << std::scientific << std::setw(11) << val; //(fabs(val)>1E-10 ? val : 0);
416 os << " ";
417 }
418 os << "│ ";
419 }
420 }
421 os << std::endl;
422 }
423 }
424 }
425 //AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
426 //void operator=(const Matrix4<3, Sym::Major> &a) { for (int i = 0; i < 45; i++) data[i] = a.data[i]; }
428 void operator+=(const Matrix4<3, Sym::Major> &a) { for (int i = 0; i < 45; i++) data[i] += a.data[i]; }
430 void operator-=(const Matrix4<3, Sym::Major> &a) { for (int i = 0; i < 45; i++) data[i] -= a.data[i]; }
432 void operator*=(const Matrix4<3, Sym::Major> &a) { for (int i = 0; i < 45; i++) data[i] *= a.data[i]; }
434 void operator/=(const Matrix4<3, Sym::Major> &a) { for (int i = 0; i < 45; i++) data[i] /= a.data[i]; }
436 void operator*=(const Set::Scalar &alpha) { for (int i = 0; i < 45; i++) data[i] *= alpha; }
438 void operator/=(const Set::Scalar &alpha) { for (int i = 0; i < 45; i++) data[i] /= alpha; }
439
441 {
443 for (int i = 0; i < 45; i++) ret.data[i] = (Set::Scalar)i;
444 return ret;
445 }
447 {
448 for (int i = 0; i < 45; i++) data[i] = (Util::Random());
449 }
451 {
453 ret.Randomize();
454 return ret;
455 }
457 {
459 for (int i = 0; i < 45; i++) ret.data[i] = 0.0;
460 return ret;
461 }
463 {
464 Set::Scalar normsq = 0.0;
465 for (int i = 0; i < 45; i++) normsq += data[i]*data[i];
466 return std::sqrt(normsq);
467 }
468 bool contains_nan() const
469 {
470 for (int i = 0; i < 45; i++)
471 if (std::isnan(data[i])) return true;
472 return false;
473 }
474
481};
482
485{
487 for (int i = 0; i < 45; i++) ret.data[i] = a.data[i] + b.data[i];
488 return ret;
489}
492{
494 for (int i = 0; i < 45; i++) ret.data[i] = a.data[i] - b.data[i];
495 return ret;
496}
499{
501 for (int i = 0; i < 45; i++) ret.data[i] = a.data[i] * b;
502 return ret;
503}
506{
507 return a*b;
508}
509
512{
514 for (int i = 0; i < 45; i++) ret.data[i] = a.data[i] / b;
515 return ret;
516}
517
520{
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);
531 return ret;
532}
533
536{
537 // TODO: improve efficiency of this method
538 Set::Vector ret = Set::Vector::Zero();
539 for (int i = 0; i < AMREX_SPACEDIM; i++)
540 {
541 for (int J = 0; J < AMREX_SPACEDIM; J++)
542 for (int k = 0; k < AMREX_SPACEDIM; k++)
543 for (int L = 0; L < AMREX_SPACEDIM; L++)
544 ret(i) += a(i,J,k,L) * b(k,L,J);
545 }
546 return ret;
547}
548
549}
550#endif
#define INFO
Definition Util.H:23
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()
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()
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
static Scalar Garbage
Definition Base.H:117
Sym
Definition Matrix4.H:12
@ Major
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 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
void Abort(const char *msg)
Definition Util.cpp:263
Set::Scalar Random()
Definition Set.cpp:34