16 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(
18 "m_lapphi.num_comp() = " + std::to_string(
m_lapphi.num_comp()));
19 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(
20 m_phi.num_comp() == AMREX_SPACEDIM,
21 "m_phi.num_comp() = " + std::to_string(
m_phi.num_comp()) +
22 ", AMREX_SPACEDIM = " + std::to_string(AMREX_SPACEDIM));
23 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(
24 m_phi.num_grow() > amrex::IntVect(0),
25 "m_phi.num_grow() = (" + std::to_string(
m_phi.num_grow()[0]) +
26 ", " + std::to_string(
m_phi.num_grow()[1]) +
", " +
27 std::to_string(
m_phi.num_grow()[2]) +
")");
33 const auto& geom =
m_phi.repo().mesh().Geom(lev);
34 const auto& idx = geom.InvCellSizeArray();
35 const auto dlo = geom.Domain().smallEnd();
36 const auto dhi = geom.Domain().bigEnd();
39 auto const& in_arrs =
m_phi(lev).const_arrays();
40 auto const& out_arrs = out_mf.arrays();
43 out_mf, amrex::IntVect(0),
44 [=] AMREX_GPU_DEVICE(
int nbx,
int i,
int j,
int k) {
45 if (!Stencil::applies_to(i, j, k, dlo, dhi)) {
48 auto const& phi = in_arrs[nbx];
49 auto const& lapphi = out_arrs[nbx];
50 const amrex::Real d2phidx2 =
51 ((Stencil::s00 * phi(i + 1, j, k, 0)) +
52 (Stencil::s01 * phi(i, j, k, 0)) +
53 (Stencil::s02 * phi(i - 1, j, k, 0))) *
55 const amrex::Real d2phidy2 =
56 ((Stencil::s10 * phi(i, j + 1, k, 1)) +
57 (Stencil::s11 * phi(i, j, k, 1)) +
58 (Stencil::s12 * phi(i, j - 1, k, 1))) *
60 const amrex::Real d2phidz2 =
61 ((Stencil::s20 * phi(i, j, k + 1, 2)) +
62 (Stencil::s21 * phi(i, j, k, 2)) +
63 (Stencil::s22 * phi(i, j, k - 1, 2))) *
65 lapphi(i, j, k) = d2phidx2 + d2phidy2 + d2phidz2;