Impose lateral boundary conditions on x velocity.
25 const auto& dom_lo = lbound(domain);
26 const auto& dom_hi = ubound(domain);
38 Vector<BCRec> bcrs(1);
41 Gpu::DeviceVector<BCRec> bcrs_d(1);
42 Gpu::copyAsync(Gpu::hostToDevice, bcrs.begin(), bcrs.end(), bcrs_d.begin());
43 const BCRec* bc_ptr = bcrs_d.data();
45 GpuArray<GpuArray<Real, AMREX_SPACEDIM*2>,1> l_bc_extdir_vals_d;
47 for (
int ori = 0; ori < 2*AMREX_SPACEDIM; ori++) {
51 GeometryData
const& geomdata =
m_geom.data();
52 bool is_periodic_in_x = geomdata.isPeriodic(0);
53 bool is_periodic_in_y = geomdata.isPeriodic(1);
56 if (!is_periodic_in_x)
59 Box bx_xlo(bx); bx_xlo.setBig (0,dom_lo.x-1);
60 Box bx_xhi(bx); bx_xhi.setSmall(0,dom_hi.x+2);
61 Box bx_xlo_face(bx); bx_xlo_face.setSmall(0,dom_lo.x ); bx_xlo_face.setBig(0,dom_lo.x );
62 Box bx_xhi_face(bx); bx_xhi_face.setSmall(0,dom_hi.x+1); bx_xhi_face.setBig(0,dom_hi.x+1);
64 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
66 int iflip = dom_lo.x - i;
68 dest_arr(i,j,k) = (xvel_bc_ptr) ? xvel_bc_ptr[k] : l_bc_extdir_vals_d[0][0];
70 dest_arr(i,j,k) = (xvel_bc_ptr) ? xvel_bc_ptr[k] : l_bc_extdir_vals_d[0][0];
72 dest_arr(i,j,k) = dest_arr(dom_lo.x,j,k);
74 dest_arr(i,j,k) = dest_arr(dom_lo.x,j,k);
76 dest_arr(i,j,k) = dest_arr(iflip,j,k);
78 dest_arr(i,j,k) = -dest_arr(iflip,j,k);
80 dest_arr(i,j,k) = (
Real(4.0)*dest_arr(dom_lo.x+1,j,k) - dest_arr(dom_lo.x+2,j,k))/
three;
82 Real delta_i = (dom_lo.x - i);
83 dest_arr(i,j,k) = (
one + delta_i)*dest_arr(dom_lo.x,j,k) - delta_i*dest_arr(dom_lo.x+1,j,k);
87 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
90 dest_arr(i,j,k) = (xvel_bc_ptr) ? xvel_bc_ptr[k] : l_bc_extdir_vals_d[0][0];
92 dest_arr(i,j,k) = (xvel_bc_ptr) ? xvel_bc_ptr[k] : l_bc_extdir_vals_d[0][0];
94 dest_arr(i,j,k) = (
Real(4.0)*dest_arr(dom_lo.x+1,j,k) - dest_arr(dom_lo.x+2,j,k))/
three;
99 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
101 int iflip = 2*(dom_hi.x + 1) - i;
103 dest_arr(i,j,k) = (xvel_bc_ptr) ? xvel_bc_ptr[k] : l_bc_extdir_vals_d[0][3];
105 dest_arr(i,j,k) = (xvel_bc_ptr) ? xvel_bc_ptr[k] : l_bc_extdir_vals_d[0][3];
107 dest_arr(i,j,k) = dest_arr(dom_hi.x+1,j,k);
109 dest_arr(i,j,k) = dest_arr(dom_hi.x+1,j,k);
111 dest_arr(i,j,k) = dest_arr(iflip,j,k);
113 dest_arr(i,j,k) = -dest_arr(iflip,j,k);
115 dest_arr(i,j,k) = (
Real(4.0)*dest_arr(dom_hi.x,j,k) - dest_arr(dom_hi.x-1,j,k))/
three;
117 Real delta_i = (i - dom_hi.x - 1);
118 dest_arr(i,j,k) = (
one + delta_i)*dest_arr(dom_hi.x+1,j,k) - delta_i*dest_arr(dom_hi.x,j,k);
122 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
125 dest_arr(i,j,k) = (xvel_bc_ptr) ? xvel_bc_ptr[k] : l_bc_extdir_vals_d[0][3];
127 dest_arr(i,j,k) = (xvel_bc_ptr) ? xvel_bc_ptr[k] : l_bc_extdir_vals_d[0][3];
129 dest_arr(i,j,k) = (
Real(4.0)*dest_arr(dom_hi.x,j,k) - dest_arr(dom_hi.x-1,j,k))/
three;
135 if (!is_periodic_in_y)
139 Box bx_ylo(bx); bx_ylo.setBig (1,dom_lo.y-1);
140 Box bx_yhi(bx); bx_yhi.setSmall(1,dom_hi.y+1);
142 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
143 int jflip = dom_lo.y - 1 - j;
145 dest_arr(i,j,k) = (xvel_bc_ptr) ? xvel_bc_ptr[k] : l_bc_extdir_vals_d[0][1];
147 dest_arr(i,j,k) = (xvel_bc_ptr) ? xvel_bc_ptr[k] : l_bc_extdir_vals_d[0][1];
149 dest_arr(i,j,k) = dest_arr(i,dom_lo.y,k);
151 dest_arr(i,j,k) = dest_arr(i,dom_lo.y,k);
153 dest_arr(i,j,k) = dest_arr(i,jflip,k);
155 dest_arr(i,j,k) = -dest_arr(i,jflip,k);
157 Real delta_j = (dom_lo.y - j);
158 dest_arr(i,j,k) = (
one + delta_j)*dest_arr(i,dom_lo.y,k) - delta_j*dest_arr(i,dom_lo.y+1,k);
161 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
162 int jflip = 2*dom_hi.y + 1 - j;
164 dest_arr(i,j,k) = (xvel_bc_ptr) ? xvel_bc_ptr[k] : l_bc_extdir_vals_d[0][4];
166 dest_arr(i,j,k) = (xvel_bc_ptr) ? xvel_bc_ptr[k] : l_bc_extdir_vals_d[0][4];
168 dest_arr(i,j,k) = dest_arr(i,dom_hi.y,k);
170 dest_arr(i,j,k) = dest_arr(i,dom_hi.y,k);
172 dest_arr(i,j,k) = dest_arr(i,jflip,k);
174 dest_arr(i,j,k) = -dest_arr(i,jflip,k);
176 Real delta_j = (j - dom_hi.y);
177 dest_arr(i,j,k) = (
one + delta_j)*dest_arr(i,dom_hi.y,k) - delta_j*dest_arr(i,dom_hi.y-1,k);
183 Gpu::streamSynchronize();
constexpr amrex::Real three
Definition: ERF_Constants.H:11
constexpr amrex::Real one
Definition: ERF_Constants.H:9
constexpr amrex::Real zero
Definition: ERF_Constants.H:8
ParallelFor(fab_box, [=] AMREX_GPU_DEVICE(int i, int j, int k) { qrcuten_arr(i, j, k)=Real(0);qscuten_arr(i, j, k)=Real(0);qicuten_arr(i, j, k)=Real(0);})
amrex::Real Real
Definition: ERF_ShocInterface.H:19
void impose_lateral_xvel_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, const double time)
Definition: ERF_BoundaryConditionsXvel.cpp:18
@ open
Definition: ERF_IndexDefines.H:256
@ reflect_odd
Definition: ERF_IndexDefines.H:245
@ hoextrap
Definition: ERF_IndexDefines.H:250
@ foextrap
Definition: ERF_IndexDefines.H:248
@ ext_dir
Definition: ERF_IndexDefines.H:249
@ ext_dir_upwind
Definition: ERF_IndexDefines.H:257
@ neumann_int
Definition: ERF_IndexDefines.H:255
@ reflect_even
Definition: ERF_IndexDefines.H:247