Impose lateral boundary conditions on y velocity.
24 const auto& dom_lo = lbound(domain);
25 const auto& dom_hi = ubound(domain);
38 const auto& xvel_lo = lbound(xvel_arr);
39 const auto& xvel_hi = ubound(xvel_arr);
40 const auto& yvel_lo = lbound(yvel_arr);
41 const auto& yvel_hi = ubound(yvel_arr);
46 Vector<BCRec> bcrs(1);
56 Gpu::DeviceVector<BCRec> bcrs_d(1);
57 Gpu::copyAsync(Gpu::hostToDevice, bcrs.begin(), bcrs.end(), bcrs_d.begin());
58 const BCRec* bc_ptr = bcrs_d.data();
60 GpuArray<GpuArray<Real, AMREX_SPACEDIM*2>, 1> l_bc_extdir_vals_d;
62 for (
int ori = 0; ori < 2*AMREX_SPACEDIM; ori++) {
66 GeometryData
const& geomdata =
m_geom.data();
67 bool is_periodic_in_x = geomdata.isPeriodic(0);
68 bool is_periodic_in_y = geomdata.isPeriodic(1);
71 if (!is_periodic_in_x)
75 Box bx_xlo(bx); bx_xlo.setBig (0,dom_lo.x-1);
76 Box bx_xhi(bx); bx_xhi.setSmall(0,dom_hi.x+1);
78 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
79 int iflip = dom_lo.x - 1- i;
81 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][0];
83 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][0];
85 dest_arr(i,j,k) = dest_arr(dom_lo.x,j,k);
87 dest_arr(i,j,k) = dest_arr(dom_lo.x,j,k);
89 dest_arr(i,j,k) = dest_arr(iflip,j,k);
91 dest_arr(i,j,k) = -dest_arr(iflip,j,k);
93 Real delta_i = (dom_lo.x - i);
94 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);
97 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
98 int iflip = 2*dom_hi.x + 1 - i;
100 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][3];
102 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][3];
104 dest_arr(i,j,k) = dest_arr(dom_hi.x,j,k);
106 dest_arr(i,j,k) = dest_arr(dom_hi.x,j,k);
108 dest_arr(i,j,k) = dest_arr(iflip,j,k);
110 dest_arr(i,j,k) = -dest_arr(iflip,j,k);
112 Real delta_i = (i - dom_hi.x);
113 dest_arr(i,j,k) = (
one + delta_i)*dest_arr(dom_hi.x,j,k) - delta_i*dest_arr(dom_hi.x-1,j,k);
119 if (!is_periodic_in_y)
123 Box bx_ylo(bx); bx_ylo.setBig (1,dom_lo.y-1);
124 Box bx_yhi(bx); bx_yhi.setSmall(1,dom_hi.y+2);
125 Box bx_ylo_face(bx); bx_ylo_face.setSmall(1,dom_lo.y ); bx_ylo_face.setBig(1,dom_lo.y );
126 Box bx_yhi_face(bx); bx_yhi_face.setSmall(1,dom_hi.y+1); bx_yhi_face.setBig(1,dom_hi.y+1);
128 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
130 int jflip = dom_lo.y-j;
132 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][1];
134 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][1];
136 dest_arr(i,j,k) = dest_arr(i,dom_lo.y,k);
138 dest_arr(i,j,k) = dest_arr(i,dom_lo.y,k);
140 dest_arr(i,j,k) = dest_arr(i,jflip,k);
142 dest_arr(i,j,k) = -dest_arr(i,jflip,k);
144 dest_arr(i,j,k) = (
Real(4.0)*dest_arr(i,dom_lo.y+1,k) - dest_arr(i,dom_lo.y+2,k))/
three;
146 Real delta_j = (dom_lo.y - j);
147 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);
151 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
154 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][1];
156 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][1];
158 dest_arr(i,j,k) = (
Real(4.0)*dest_arr(i,dom_lo.y+1,k) - dest_arr(i,dom_lo.y+2,k))/
three;
163 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
165 int jflip = 2*(dom_hi.y + 1) - j;
167 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][4];
169 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][4];
171 dest_arr(i,j,k) = dest_arr(i,dom_hi.y+1,k);
173 dest_arr(i,j,k) = dest_arr(i,dom_hi.y+1,k);
175 dest_arr(i,j,k) = dest_arr(i,jflip,k);
177 dest_arr(i,j,k) = -dest_arr(i,jflip,k);
179 dest_arr(i,j,k) = (
Real(4.0)*dest_arr(i,dom_hi.y,k) - dest_arr(i,dom_hi.y-1,k))/
three;
181 Real delta_j = (j - dom_hi.y - 1);
182 dest_arr(i,j,k) = (
one + delta_j)*dest_arr(i,dom_hi.y+1,k) - delta_j*dest_arr(i,dom_hi.y,k);
186 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
189 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][4];
191 dest_arr(i,j,k) = (yvel_bc_ptr) ? yvel_bc_ptr[k] : l_bc_extdir_vals_d[0][4];
193 dest_arr(i,j,k) = (
Real(4.0)*dest_arr(i,dom_hi.y,k) - dest_arr(i,dom_hi.y-1,k))/
three;
198 Gpu::streamSynchronize();
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);})
constexpr amrex::Real three
Definition: ERF_NumericalConstants.H:39
constexpr amrex::Real one
Definition: ERF_NumericalConstants.H:37
constexpr amrex::Real zero
Definition: ERF_NumericalConstants.H:36
amrex::Real Real
Definition: ERF_ShocInterface.H:19
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, const double time)
Definition: ERF_BoundaryConditionsYvel.cpp:17
@ open
Definition: ERF_IndexDefines.H:307
@ reflect_odd
Definition: ERF_IndexDefines.H:296
@ hoextrap
Definition: ERF_IndexDefines.H:301
@ foextrap
Definition: ERF_IndexDefines.H:299
@ ext_dir
Definition: ERF_IndexDefines.H:300
@ ext_dir_upwind
Definition: ERF_IndexDefines.H:308
@ neumann_int
Definition: ERF_IndexDefines.H:306
@ reflect_even
Definition: ERF_IndexDefines.H:298