21 const auto& dom_lo = lbound(domain);
22 const auto& dom_hi = ubound(domain);
27 Vector<BCRec> bcrs(1);
37 Gpu::DeviceVector<BCRec> bcrs_d(1);
38 Gpu::copyAsync(Gpu::hostToDevice, bcrs.begin(), bcrs.end(), bcrs_d.begin());
39 const BCRec* bc_ptr = bcrs_d.data();
41 GpuArray<GpuArray<Real, AMREX_SPACEDIM*2>, 1> l_bc_extdir_vals_d;
43 for (
int ori = 0; ori < 2*AMREX_SPACEDIM; ori++) {
47 GeometryData
const& geomdata =
m_geom.data();
48 bool is_periodic_in_x = geomdata.isPeriodic(0);
49 bool is_periodic_in_y = geomdata.isPeriodic(1);
52 if (!is_periodic_in_x)
56 Box bx_xlo(bx); bx_xlo.setBig (0,dom_lo.x-1);
57 Box bx_xhi(bx); bx_xhi.setSmall(0,dom_hi.x+1);
58 ParallelFor(bx_xlo, bx_xhi,
59 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
60 int iflip = dom_lo.x - 1- i;
62 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][0];
64 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][0];
66 dest_arr(i,j,k) = dest_arr(dom_lo.x,j,k);
68 dest_arr(i,j,k) = dest_arr(dom_lo.x,j,k);
70 dest_arr(i,j,k) = dest_arr(iflip,j,k);
72 dest_arr(i,j,k) = -dest_arr(iflip,j,k);
75 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
76 int iflip = 2*dom_hi.x + 1 - i;
78 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][3];
80 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][3];
82 dest_arr(i,j,k) = dest_arr(dom_hi.x,j,k);
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);
94 if (!is_periodic_in_y)
98 Box bx_ylo(bx); bx_ylo.setBig (1,dom_lo.y-1);
99 Box bx_yhi(bx); bx_yhi.setSmall(1,dom_hi.y+2);
100 Box bx_ylo_face(bx); bx_ylo_face.setSmall(1,dom_lo.y ); bx_ylo_face.setBig(1,dom_lo.y );
101 Box bx_yhi_face(bx); bx_yhi_face.setSmall(1,dom_hi.y+1); bx_yhi_face.setBig(1,dom_hi.y+1);
102 ParallelFor(bx_ylo, bx_ylo_face,
103 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
105 int jflip = dom_lo.y-j;
107 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][1];
109 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][1];
111 dest_arr(i,j,k) = dest_arr(i,dom_lo.y,k);
113 dest_arr(i,j,k) = dest_arr(i,dom_lo.y,k);
115 dest_arr(i,j,k) = dest_arr(i,jflip,k);
117 dest_arr(i,j,k) = -dest_arr(i,jflip,k);
119 dest_arr(i,j,k) = (4.0*dest_arr(i,dom_lo.y+1,k) - dest_arr(i,dom_lo.y+2,k))/3.0;
123 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
126 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][1];
128 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][1];
130 dest_arr(i,j,k) = (4.0*dest_arr(i,dom_lo.y+1,k) - dest_arr(i,dom_lo.y+2,k))/3.0;
134 ParallelFor(bx_yhi, bx_yhi_face,
135 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
137 int jflip = 2*(dom_hi.y + 1) - j;
139 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][4];
141 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][4];
143 dest_arr(i,j,k) = dest_arr(i,dom_hi.y+1,k);
145 dest_arr(i,j,k) = dest_arr(i,dom_hi.y+1,k);
147 dest_arr(i,j,k) = dest_arr(i,jflip,k);
149 dest_arr(i,j,k) = -dest_arr(i,jflip,k);
151 dest_arr(i,j,k) = (4.0*dest_arr(i,dom_hi.y,k) - dest_arr(i,dom_hi.y-1,k))/3.0;
155 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
158 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][4];
160 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][4];
162 dest_arr(i,j,k) = (4.0*dest_arr(i,dom_hi.y,k) - dest_arr(i,dom_hi.y-1,k))/3.0;
167 Gpu::streamSynchronize();
void impose_lateral_yvel_bcs(const amrex::Array4< amrex::Real > &dest_arr, const amrex::Array4< amrex::Real const > &xvel_arr, const amrex::Array4< amrex::Real const > &yvel_arr, const amrex::Box &bx, const amrex::Box &domain, int bccomp)
Definition: ERF_BoundaryConditionsYvel.cpp:14
@ open
Definition: ERF_IndexDefines.H:197
@ reflect_odd
Definition: ERF_IndexDefines.H:187
@ foextrap
Definition: ERF_IndexDefines.H:190
@ ext_dir
Definition: ERF_IndexDefines.H:191
@ ext_dir_upwind
Definition: ERF_IndexDefines.H:199
@ neumann_int
Definition: ERF_IndexDefines.H:196
@ reflect_even
Definition: ERF_IndexDefines.H:189