1 #ifndef SET_MATRIX4_MAJOR_H
2 #define SET_MATRIX4_MAJOR_H
12 Scalar data[10] = {NAN, NAN, NAN, NAN, NAN,
13 NAN, NAN, NAN, NAN, NAN};
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++)
26 (*
this)(i,j,k,l) = in(i,j,k,l);
28 Matrix4(
const Matrix4<2,Sym::Diagonal> &in)
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);
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++)
44 (*
this)(i,j,k,l) = in(i,j,k,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;
116 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
118 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
120 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
122 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
124 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
126 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
144 for (
int i = 0; i < 10; i++) ret.
data[i] = 0.0;
150 for (
int i = 0; i < 10; i++) normsq += data[i]*data[i];
151 return std::sqrt(normsq);
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;
175 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
179 for (
int i = 0; i < 10; i++) ret.
data[i] = a.
data[i] + b.
data[i];
182 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
186 for (
int i = 0; i < 10; i++) ret.
data[i] = a.
data[i] - b.
data[i];
189 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
193 for (
int i = 0; i < 10; i++) ret.
data[i] = a.
data[i] * b;
196 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
202 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
206 for (
int i = 0; i < 10; i++) ret.
data[i] = a.
data[i] / b;
209 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
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);
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};
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++)
242 (*
this)(i,j,k,l) = in(i,j,k,l);
244 Matrix4(
const Matrix4<3,Sym::Diagonal> &in)
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);
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++)
260 (*
this)(i,j,k,l) = in(i,j,k,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;
417 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
419 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
421 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
423 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
425 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
427 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
445 for (
int i = 0; i < 45; i++) ret.
data[i] = 0.0;
451 for (
int i = 0; i < 45; i++) normsq += data[i]*data[i];
452 return std::sqrt(normsq);
456 for (
int i = 0; i < 45; i++)
457 if (std::isnan(data[i]))
return true;
469 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
473 for (
int i = 0; i < 45; i++) ret.
data[i] = a.
data[i] + b.
data[i];
476 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
480 for (
int i = 0; i < 45; i++) ret.
data[i] = a.
data[i] - b.
data[i];
483 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
487 for (
int i = 0; i < 45; i++) ret.
data[i] = a.
data[i] * b;
490 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
496 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
500 for (
int i = 0; i < 45; i++) ret.
data[i] = a.
data[i] / b;
504 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
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);
520 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
525 for (
int i = 0; i < AMREX_SPACEDIM; i++)
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);