26 void apply(
const int lev,
const amrex::MFIter& mfi)
const
28 const auto& geom =
m_phi.repo().mesh().Geom(lev);
29 const auto& idx = geom.InvCellSizeArray();
30 const auto& qcritphi =
m_qcritphi(lev).array(mfi);
31 const auto& phi =
m_phi(lev).const_array(mfi);
34 const auto& bx_in = mfi.tilebox();
35 const auto& bx = Stencil::box(bx_in, geom);
40 bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k)
noexcept {
41 amrex::Real cp1, c, cm1, ux, uy, uz, vx, vy, vz, wx, wy, wz;
46 ux = (cp1 * phi(i + 1, j, k, 0) + c * phi(i, j, k, 0) +
47 cm1 * phi(i - 1, j, k, 0)) *
49 vx = (cp1 * phi(i + 1, j, k, 1) + c * phi(i, j, k, 1) +
50 cm1 * phi(i - 1, j, k, 1)) *
52 wx = (cp1 * phi(i + 1, j, k, 2) + c * phi(i, j, k, 2) +
53 cm1 * phi(i - 1, j, k, 2)) *
60 uy = (cp1 * phi(i, j + 1, k, 0) + c * phi(i, j, k, 0) +
61 cm1 * phi(i, j - 1, k, 0)) *
63 vy = (cp1 * phi(i, j + 1, k, 1) + c * phi(i, j, k, 1) +
64 cm1 * phi(i, j - 1, k, 1)) *
66 wy = (cp1 * phi(i, j + 1, k, 2) + c * phi(i, j, k, 2) +
67 cm1 * phi(i, j - 1, k, 2)) *
74 uz = (cp1 * phi(i, j, k + 1, 0) + c * phi(i, j, k, 0) +
75 cm1 * phi(i, j, k - 1, 0)) *
77 vz = (cp1 * phi(i, j, k + 1, 1) + c * phi(i, j, k, 1) +
78 cm1 * phi(i, j, k - 1, 1)) *
80 wz = (cp1 * phi(i, j, k + 1, 2) + c * phi(i, j, k, 2) +
81 cm1 * phi(i, j, k - 1, 2)) *
84 const amrex::Real S2 =
85 std::pow(ux, 2.0_rt) + std::pow(vy, 2.0_rt) +
86 std::pow(wz, 2.0_rt) + 0.5_rt * std::pow(uy + vx, 2.0_rt) +
87 0.5_rt * std::pow(vz + wy, 2.0_rt) +
88 0.5_rt * std::pow(wx + uz, 2.0_rt);
90 const amrex::Real W2 = 0.5_rt * std::pow(uy - vx, 2.0_rt) +
91 0.5_rt * std::pow(vz - wy, 2.0_rt) +
92 0.5_rt * std::pow(wx - uz, 2.0_rt);
96 (W2 / amrex::max<amrex::Real>(
97 std::numeric_limits<amrex::Real>::epsilon() *
102 qcritphi(i, j, k) = 0.5_rt * (W2 - S2);