18 const GpuArray<Real,AMREX_SPACEDIM> ,
const Array4<const Real>& ,
21 const auto& dom_lo = amrex::lbound(domain);
22 const auto& dom_hi = amrex::ubound(domain);
28 Vector<BCRec> bcrs(ncomp);
43 amrex::Gpu::DeviceVector<BCRec> bcrs_d(ncomp);
45 Gpu::htod_memcpy_async(bcrs_d.data(), bcrs.data(),
sizeof(BCRec)*ncomp);
47 std::memcpy(bcrs_d.data(), bcrs.data(),
sizeof(BCRec)*ncomp);
49 const amrex::BCRec* bc_ptr = bcrs_d.data();
51 GpuArray<GpuArray<Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NCONS+8> l_bc_extdir_vals_d;
53 for (
int i = 0; i < ncomp; i++)
54 for (
int ori = 0; ori < 2*AMREX_SPACEDIM; ori++)
57 GeometryData
const& geomdata =
m_geom.data();
58 bool is_periodic_in_x = geomdata.isPeriodic(0);
59 bool is_periodic_in_y = geomdata.isPeriodic(1);
64 Box bx_xlo(bx); bx_xlo.setBig (0,dom_lo.x-1);
65 Box bx_xhi(bx); bx_xhi.setSmall(0,dom_hi.x+1);
67 bx_xlo, ncomp, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) {
68 int iflip = dom_lo.x - 1 - i;
70 dest_arr(i,j,k) = l_bc_extdir_vals_d[n][0];
72 dest_arr(i,j,k) = dest_arr(dom_lo.x,j,k);
74 dest_arr(i,j,k) = dest_arr(iflip,j,k);
76 dest_arr(i,j,k) = -dest_arr(iflip,j,k);
79 bx_xhi, ncomp, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) {
80 int iflip = 2*dom_hi.x + 1 - i;
82 dest_arr(i,j,k) = l_bc_extdir_vals_d[n][3];
84 dest_arr(i,j,k) = dest_arr(dom_hi.x,j,k);
86 dest_arr(i,j,k) = dest_arr(iflip,j,k);
88 dest_arr(i,j,k) = -dest_arr(iflip,j,k);
97 Box bx_ylo(bx); bx_ylo.setBig (1,dom_lo.y-1);
98 Box bx_yhi(bx); bx_yhi.setSmall(1,dom_hi.y+1);
99 ParallelFor(bx_ylo, ncomp, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) {
100 int jflip = dom_lo.y - 1 - j;
102 dest_arr(i,j,k) = l_bc_extdir_vals_d[n][1];
104 dest_arr(i,j,k) = dest_arr(i,dom_lo.y,k);
106 dest_arr(i,j,k) = dest_arr(i,jflip,k);
108 dest_arr(i,j,k) = -dest_arr(i,jflip,k);
111 bx_yhi, ncomp, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) {
112 int jflip = 2*dom_hi.y + 1 - j;
114 dest_arr(i,j,k) = l_bc_extdir_vals_d[n][4];
116 dest_arr(i,j,k) = dest_arr(i,dom_hi.y,k);
118 dest_arr(i,j,k) = dest_arr(i,jflip,k);
120 dest_arr(i,j,k) = -dest_arr(i,jflip,k);
127 Gpu::streamSynchronize();