299 const auto& dom_lo = lbound(domain);
300 const auto& dom_hi = ubound(domain);
306 Vector<BCRec> bcrs_w(1);
316 Gpu::DeviceVector<BCRec> bcrs_w_d(ncomp);
317 Gpu::copyAsync(Gpu::hostToDevice, bcrs_w.begin(), bcrs_w.end(), bcrs_w_d.begin());
318 const BCRec* bc_ptr_w = bcrs_w_d.data();
320 GpuArray<GpuArray<Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NVAR_max> l_bc_extdir_vals_d;
322 for (
int i = 0; i < ncomp; i++)
323 for (
int ori = 0; ori < 2*AMREX_SPACEDIM; ori++)
326 GeometryData
const& geomdata =
m_geom.data();
327 bool is_periodic_in_x = geomdata.isPeriodic(0);
328 bool is_periodic_in_y = geomdata.isPeriodic(1);
333 if (!is_periodic_in_x)
335 Box bx_xlo(bx); bx_xlo.setBig (0,dom_lo.x-1);
336 Box bx_xhi(bx); bx_xhi.setSmall(0,dom_hi.x+1);
338 bx_xlo, ncomp, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) {
339 int iflip = dom_lo.x - 1 - i;
341 dest_arr(i,j,k) = l_bc_extdir_vals_d[n][0];
343 dest_arr(i,j,k) = dest_arr(dom_lo.x,j,k);
345 dest_arr(i,j,k) = dest_arr(dom_lo.x,j,k);
347 dest_arr(i,j,k) = dest_arr(iflip,j,k);
349 dest_arr(i,j,k) = -dest_arr(iflip,j,k);
352 bx_xhi, ncomp, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) {
353 int iflip = 2*dom_hi.x + 1 - i;
355 dest_arr(i,j,k) = l_bc_extdir_vals_d[n][3];
357 dest_arr(i,j,k) = dest_arr(dom_hi.x,j,k);
359 dest_arr(i,j,k) = dest_arr(dom_hi.x,j,k);
361 dest_arr(i,j,k) = dest_arr(iflip,j,k);
363 dest_arr(i,j,k) = -dest_arr(iflip,j,k);
370 if (!is_periodic_in_y)
372 Box bx_ylo(bx); bx_ylo.setBig (1,dom_lo.y-1);
373 Box bx_yhi(bx); bx_yhi.setSmall(1,dom_hi.y+1);
374 ParallelFor(bx_ylo, ncomp, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) {
375 int jflip = dom_lo.y - 1 - j;
377 dest_arr(i,j,k) = l_bc_extdir_vals_d[n][1];
379 dest_arr(i,j,k) = dest_arr(i,dom_lo.y,k);
381 dest_arr(i,j,k) = dest_arr(i,dom_lo.y,k);
383 dest_arr(i,j,k) = dest_arr(i,jflip,k);
385 dest_arr(i,j,k) = -dest_arr(i,jflip,k);
388 bx_yhi, ncomp, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) {
389 int jflip = 2*dom_hi.y + 1 - j;
391 dest_arr(i,j,k) = l_bc_extdir_vals_d[n][4];
393 dest_arr(i,j,k) = dest_arr(i,dom_hi.y,k);
395 dest_arr(i,j,k) = dest_arr(i,dom_hi.y,k);
397 dest_arr(i,j,k) = dest_arr(i,jflip,k);
399 dest_arr(i,j,k) = -dest_arr(i,jflip,k);
404 Gpu::streamSynchronize();
#define NVAR_max
Definition: IndexDefines.H:27
void impose_lateral_zvel_bcs(const amrex::Array4< amrex::Real > &dest_arr, const amrex::Box &bx, const amrex::Box &domain, int bccomp_w)
Definition: BoundaryConditions_zvel.cpp:294
@ open
Definition: IndexDefines.H:157
@ reflect_odd
Definition: IndexDefines.H:148
@ foextrap
Definition: IndexDefines.H:151
@ ext_dir
Definition: IndexDefines.H:152
@ reflect_even
Definition: IndexDefines.H:150