35 const auto& geom =
m_phi.repo().mesh().Geom(lev);
36 const auto& idx = geom.InvCellSizeArray();
37 const auto dlo = geom.Domain().smallEnd();
38 const auto dhi = geom.Domain().bigEnd();
42 auto const& in_arrs =
m_phi(lev).const_arrays();
43 auto const& out_arrs = out_mf.arrays();
46 out_mf, amrex::IntVect(0),
47 [=] AMREX_GPU_DEVICE(
int nbx,
int i,
int j,
int k) {
48 if (!Stencil::applies_to(i, j, k, dlo, dhi)) {
51 auto const& phi = in_arrs[nbx];
52 auto const& qcritphi = out_arrs[nbx];
53 const amrex::Real ux = ((Stencil::c00 * phi(i + 1, j, k, 0)) +
54 (Stencil::c01 * phi(i, j, k, 0)) +
55 (Stencil::c02 * phi(i - 1, j, k, 0))) *
57 const amrex::Real vx = ((Stencil::c00 * phi(i + 1, j, k, 1)) +
58 (Stencil::c01 * phi(i, j, k, 1)) +
59 (Stencil::c02 * phi(i - 1, j, k, 1))) *
61 const amrex::Real wx = ((Stencil::c00 * phi(i + 1, j, k, 2)) +
62 (Stencil::c01 * phi(i, j, k, 2)) +
63 (Stencil::c02 * phi(i - 1, j, k, 2))) *
65 const amrex::Real uy = ((Stencil::c10 * phi(i, j + 1, k, 0)) +
66 (Stencil::c11 * phi(i, j, k, 0)) +
67 (Stencil::c12 * phi(i, j - 1, k, 0))) *
69 const amrex::Real vy = ((Stencil::c10 * phi(i, j + 1, k, 1)) +
70 (Stencil::c11 * phi(i, j, k, 1)) +
71 (Stencil::c12 * phi(i, j - 1, k, 1))) *
73 const amrex::Real wy = ((Stencil::c10 * phi(i, j + 1, k, 2)) +
74 (Stencil::c11 * phi(i, j, k, 2)) +
75 (Stencil::c12 * phi(i, j - 1, k, 2))) *
77 const amrex::Real uz = ((Stencil::c20 * phi(i, j, k + 1, 0)) +
78 (Stencil::c21 * phi(i, j, k, 0)) +
79 (Stencil::c22 * phi(i, j, k - 1, 0))) *
81 const amrex::Real vz = ((Stencil::c20 * phi(i, j, k + 1, 1)) +
82 (Stencil::c21 * phi(i, j, k, 1)) +
83 (Stencil::c22 * phi(i, j, k - 1, 1))) *
85 const amrex::Real wz = ((Stencil::c20 * phi(i, j, k + 1, 2)) +
86 (Stencil::c21 * phi(i, j, k, 2)) +
87 (Stencil::c22 * phi(i, j, k - 1, 2))) *
94 const amrex::Real W2 = (0.5_rt *
utils::powi(uy - vx, 2)) +
100 ((W2 / amrex::max<amrex::Real>(
101 std::numeric_limits<amrex::Real>::epsilon() *
106 qcritphi(i, j, k) = 0.5_rt * (W2 - S2);