32 const auto& geom =
m_phi.repo().mesh().Geom(lev);
33 const auto& idx = geom.InvCellSizeArray();
34 const auto dlo = geom.Domain().smallEnd();
35 const auto dhi = geom.Domain().bigEnd();
38 auto const& in_arrs =
m_phi(lev).const_arrays();
39 auto const& out_arrs = out_mf.arrays();
42 out_mf, amrex::IntVect(0),
43 [=] AMREX_GPU_DEVICE(
int nbx,
int i,
int j,
int k) {
44 if (!Stencil::applies_to(i, j, k, dlo, dhi)) {
47 auto const& phi = in_arrs[nbx];
48 auto const& strphi = out_arrs[nbx];
49 const amrex::Real ux = ((Stencil::c00 * phi(i + 1, j, k, 0)) +
50 (Stencil::c01 * phi(i, j, k, 0)) +
51 (Stencil::c02 * phi(i - 1, j, k, 0))) *
53 const amrex::Real vx = ((Stencil::c00 * phi(i + 1, j, k, 1)) +
54 (Stencil::c01 * phi(i, j, k, 1)) +
55 (Stencil::c02 * phi(i - 1, j, k, 1))) *
57 const amrex::Real wx = ((Stencil::c00 * phi(i + 1, j, k, 2)) +
58 (Stencil::c01 * phi(i, j, k, 2)) +
59 (Stencil::c02 * phi(i - 1, j, k, 2))) *
61 const amrex::Real uy = ((Stencil::c10 * phi(i, j + 1, k, 0)) +
62 (Stencil::c11 * phi(i, j, k, 0)) +
63 (Stencil::c12 * phi(i, j - 1, k, 0))) *
65 const amrex::Real vy = ((Stencil::c10 * phi(i, j + 1, k, 1)) +
66 (Stencil::c11 * phi(i, j, k, 1)) +
67 (Stencil::c12 * phi(i, j - 1, k, 1))) *
69 const amrex::Real wy = ((Stencil::c10 * phi(i, j + 1, k, 2)) +
70 (Stencil::c11 * phi(i, j, k, 2)) +
71 (Stencil::c12 * phi(i, j - 1, k, 2))) *
73 const amrex::Real uz = ((Stencil::c20 * phi(i, j, k + 1, 0)) +
74 (Stencil::c21 * phi(i, j, k, 0)) +
75 (Stencil::c22 * phi(i, j, k - 1, 0))) *
77 const amrex::Real vz = ((Stencil::c20 * phi(i, j, k + 1, 1)) +
78 (Stencil::c21 * phi(i, j, k, 1)) +
79 (Stencil::c22 * phi(i, j, k - 1, 1))) *
81 const amrex::Real wz = ((Stencil::c20 * phi(i, j, k + 1, 2)) +
82 (Stencil::c21 * phi(i, j, k, 2)) +
83 (Stencil::c22 * phi(i, j, k - 1, 2))) *
86 strphi(i, j, k, 0) = ((ux * ux) + (uy * vx) + (uz * wx)) -
87 ((ux * ux) + (uy * uy) + (uz * uz)) +
88 (3 * ((ux * ux) + (vx * vx) + (wx * wx))) +
89 ((ux * ux) + (vx * uy) + (wx * uz));
91 strphi(i, j, k, 1) = ((ux * uy) + (uy * vy) + (uz * wy)) -
92 ((ux * vx) + (uy * vy) + (uz * vz)) +
93 (3 * ((ux * uy) + (vx * vy) + (wx * wy))) +
94 ((ux * vx) + (vx * vy) + (wx * vz));
96 strphi(i, j, k, 2) = ((ux * uz) + (uy * vz) + (uz * wz)) -
97 ((ux * wx) + (uy * wy) + (uz * wz)) +
98 (3 * ((ux * uz) + (vx * vz) + (wx * wz))) +
99 ((ux * wx) + (vx * wy) + (wx * wz));
101 strphi(i, j, k, 3) = ((vx * ux) + (vy * vx) + (vz * wx)) -
102 ((vx * ux) + (vy * uy) + (vz * uz)) +
103 (3 * ((uy * ux) + (vy * vx) + (wy * wx))) +
104 ((uy * ux) + (vy * uy) + (wy * uz));
106 strphi(i, j, k, 4) = ((vx * uy) + (vy * vy) + (vz * wy)) -
107 ((vx * vx) + (vy * vy) + (vz * vz)) +
108 (3 * ((uy * vx) + (vy * vy) + (wy * wy))) +
109 ((uy * vx) + (vy * vy) + (wy * vz));
111 strphi(i, j, k, 5) = ((vx * uz) + (vy * vz) + (vz * wz)) -
112 ((vx * wx) + (vy * wy) + (vz * wz)) +
113 (3 * ((uy * wx) + (vy * vz) + (wy * wz))) +
114 ((uy * wx) + (vy * wy) + (wy * wz));
116 strphi(i, j, k, 6) = ((wx * ux) + (wy * vx) + (wz * wx)) -
117 ((wx * ux) + (wy * uy) + (wz * uz)) +
118 (3 * ((uz * ux) + (vz * vx) + (wz * wx))) +
119 ((uz * ux) + (vz * uy) + (wz * uz));
121 strphi(i, j, k, 7) = ((wx * uy) + (wy * vy) + (wz * wy)) -
122 ((wx * vx) + (wy * vy) + (wz * vz)) +
123 (3 * ((uz * uy) + (vz * vy) + (wz * wy))) +
124 ((uz * vx) + (vz * vy) + (wz * vz));
126 strphi(i, j, k, 8) = ((wx * uz) + (wy * vz) + (wz * wz)) -
127 ((wx * wx) + (wy * wy) + (wz * wz)) +
128 (3 * ((uz * uz) + (vz * vz) + (wz * wz))) +
129 ((uz * wx) + (vz * wy) + (wz * wz));