113 BL_PROFILE_REGION(
"realbdy_compute_interior_ghost_RHS()");
118 Array4<Real> bdatxlo, bdatxhi, bdatylo, bdatyhi;
120 Vector<std::unique_ptr<PlaneVector>>& bndry_data = m_r2d->interp_in_time(time);
121 bdatxlo = (*bndry_data[0])[0].array();
122 bdatylo = (*bndry_data[1])[0].array();
123 bdatxhi = (*bndry_data[3])[0].array();
124 bdatyhi = (*bndry_data[4])[0].array();
133 Real F1 = 1./(nudge_factor*delta_t);
136 Real dT = bdy_time_interval;
138 int n_time =
static_cast<int>( (time-start_bdy_time) / dT);
139 int n_time_p1 = n_time + 1;
140 Real alpha = ((time-start_bdy_time) - n_time * dT) / dT;
143 if (time >= final_bdy_time) {
144 n_time =
static_cast<int>( (final_bdy_time - start_bdy_time)/ dT);
158 FArrayBox U_xlo, U_xhi, U_ylo, U_yhi;
159 FArrayBox V_xlo, V_xhi, V_ylo, V_yhi;
160 FArrayBox T_xlo, T_xhi, T_ylo, T_yhi;
181 for (
int ivar(ivarU); ivar < BdyEnd; ivar++) {
182 int ivar_idx = var_map[ivar];
183 Box domain = geom.Domain();
184 auto ixtype = S_cur_data[ivar_idx].boxArray().ixType();
185 domain.convert(ixtype);
190 Box gdom(domain); gdom.grow(ng_vect);
191 Box bx_xlo, bx_xhi, bx_ylo, bx_yhi;
199 U_xlo.resize(bx_xlo,1,The_Async_Arena()); U_xhi.resize(bx_xhi,1,The_Async_Arena());
200 U_ylo.resize(bx_ylo,1,The_Async_Arena()); U_yhi.resize(bx_yhi,1,The_Async_Arena());
201 }
else if (ivar == ivarV) {
202 V_xlo.resize(bx_xlo,1,The_Async_Arena()); V_xhi.resize(bx_xhi,1,The_Async_Arena());
203 V_ylo.resize(bx_ylo,1,The_Async_Arena()); V_yhi.resize(bx_yhi,1,The_Async_Arena());
204 }
else if (ivar == ivarT){
205 T_xlo.resize(bx_xlo,1,The_Async_Arena()); T_xhi.resize(bx_xhi,1,The_Async_Arena());
206 T_ylo.resize(bx_ylo,1,The_Async_Arena()); T_yhi.resize(bx_yhi,1,The_Async_Arena());
221 for (
int ivar(ivarU); ivar < BdyEnd; ivar++) {
222 int ivar_idx = var_map[ivar];
223 Box domain = geom.Domain();
224 auto ixtype = S_cur_data[ivar_idx].boxArray().ixType();
225 domain.convert(ixtype);
226 const auto&
dom_lo = lbound(domain);
227 const auto&
dom_hi = ubound(domain);
230 int bdy_comp = ind_map2[ivar];
231 const auto& dom_cc_lo = lbound(geom.Domain());
232 const auto& dom_cc_hi = ubound(geom.Domain());
235 #pragma omp parallel if (Gpu::notInLaunchRegion())
237 for (MFIter mfi(S_cur_data[ivar_idx],TilingIfNotGPU()); mfi.isValid(); ++mfi) {
241 Box gtbx = grow(mfi.tilebox(ixtype.toIntVect()),ng_vect);
242 Box tbx_xlo, tbx_xhi, tbx_ylo, tbx_yhi;
248 Array4<Real> arr_xlo; Array4<Real> arr_xhi;
249 Array4<Real> arr_ylo; Array4<Real> arr_yhi;
251 arr_xlo = U_xlo.array(); arr_xhi = U_xhi.array();
252 arr_ylo = U_ylo.array(); arr_yhi = U_yhi.array();
253 }
else if (ivar == ivarV) {
254 arr_xlo = V_xlo.array(); arr_xhi = V_xhi.array();
255 arr_ylo = V_ylo.array(); arr_yhi = V_yhi.array();
256 }
else if (ivar == ivarT){
257 arr_xlo = T_xlo.array(); arr_xhi = T_xhi.array();
258 arr_ylo = T_ylo.array(); arr_yhi = T_yhi.array();
264 const auto& bdatxlo_n = bdy_data_xlo[n_time ][ivar].const_array();
265 const auto& bdatxlo_np1 = bdy_data_xlo[n_time_p1][ivar].const_array();
266 const auto& bdatxhi_n = bdy_data_xhi[n_time ][ivar].const_array();
267 const auto& bdatxhi_np1 = bdy_data_xhi[n_time_p1][ivar].const_array();
268 const auto& bdatylo_n = bdy_data_ylo[n_time ][ivar].const_array();
269 const auto& bdatylo_np1 = bdy_data_ylo[n_time_p1][ivar].const_array();
270 const auto& bdatyhi_n = bdy_data_yhi[n_time ][ivar].const_array();
271 const auto& bdatyhi_np1 = bdy_data_yhi[n_time_p1][ivar].const_array();
281 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
283 int ii = std::max(i ,
dom_lo.x);
285 int jj = std::max(j ,
dom_lo.y);
286 jj = std::min(jj,
dom_hi.y);
290 rho_interp = 0.5 * ( r_arr(i-1,j ,k) + r_arr(i,j,k) );
291 }
else if (ivar==ivarV) {
292 rho_interp = 0.5 * ( r_arr(i ,j-1,k) + r_arr(i,j,k) );
294 rho_interp = r_arr(i,j,k);
298 int ii2 = std::min(std::max(i , dom_cc_lo.x), dom_cc_hi.x);
299 int jj2 = std::min(std::max(j , dom_cc_lo.y), dom_cc_hi.y);
300 arr_xlo(i,j,k) = rho_interp * bdatxlo(ii2,jj2,k,bdy_comp);
302 arr_xlo(i,j,k) = rho_interp * ( oma * bdatxlo_n (ii,jj,k,0)
303 +
alpha * bdatxlo_np1(ii,jj,k,0) );
306 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
309 ii = std::min(ii,
dom_hi.x);
310 int jj = std::max(j ,
dom_lo.y);
311 jj = std::min(jj,
dom_hi.y);
315 rho_interp = 0.5 * ( r_arr(i-1,j ,k) + r_arr(i,j,k) );
316 }
else if (ivar==ivarV) {
317 rho_interp = 0.5 * ( r_arr(i ,j-1,k) + r_arr(i,j,k) );
319 rho_interp = r_arr(i,j,k);
323 int ii2 = std::min(std::max(i , dom_cc_lo.x), dom_cc_hi.x);
324 int jj2 = std::min(std::max(j , dom_cc_lo.y), dom_cc_hi.y);
325 arr_xhi(i,j,k) = rho_interp * bdatxhi(ii2,jj2,k,bdy_comp);
327 arr_xhi(i,j,k) = rho_interp * ( oma * bdatxhi_n (ii,jj,k,0)
328 +
alpha * bdatxhi_np1(ii,jj,k,0) );
333 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
335 int ii = std::max(i ,
dom_lo.x);
336 ii = std::min(ii,
dom_hi.x);
337 int jj = std::max(j ,
dom_lo.y);
342 rho_interp = 0.5 * ( r_arr(i-1,j ,k) + r_arr(i,j,k) );
343 }
else if (ivar==ivarV) {
344 rho_interp = 0.5 * ( r_arr(i ,j-1,k) + r_arr(i,j,k) );
346 rho_interp = r_arr(i,j,k);
350 int ii2 = std::min(std::max(i , dom_cc_lo.x), dom_cc_hi.x);
351 int jj2 = std::min(std::max(j , dom_cc_lo.y), dom_cc_hi.y);
352 arr_ylo(i,j,k) = rho_interp * bdatylo(ii2,jj2,k,bdy_comp);
354 arr_ylo(i,j,k) = rho_interp * ( oma * bdatylo_n (ii,jj,k,0)
355 +
alpha * bdatylo_np1(ii,jj,k,0) );
358 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
360 int ii = std::max(i ,
dom_lo.x);
361 ii = std::min(ii,
dom_hi.x);
363 jj = std::min(jj,
dom_hi.y);
367 rho_interp = 0.5 * ( r_arr(i-1,j ,k) + r_arr(i,j,k) );
368 }
else if (ivar==ivarV) {
369 rho_interp = 0.5 * ( r_arr(i ,j-1,k) + r_arr(i,j,k) );
371 rho_interp = r_arr(i,j,k);
375 int ii2 = std::min(std::max(i , dom_cc_lo.x), dom_cc_hi.x);
376 int jj2 = std::min(std::max(j , dom_cc_lo.y), dom_cc_hi.y);
377 arr_yhi(i,j,k) = rho_interp * bdatyhi(ii2,jj2,k,bdy_comp);
379 arr_yhi(i,j,k) = rho_interp * ( oma * bdatyhi_n (ii,jj,k,0)
380 +
alpha * bdatyhi_np1(ii,jj,k,0) );
389 auto dx = geom.CellSizeArray();
390 auto ProbLo = geom.ProbLoArray();
391 auto ProbHi = geom.ProbHiArray();
392 for (
int ivar(ivarU); ivar < BdyEnd; ivar++) {
393 int ivar_idx = ivar_map[ivar];
394 int icomp = comp_map[ivar];
396 Box domain = geom.Domain();
397 domain.convert(S_cur_data[ivar_idx].boxArray().ixType());
401 #pragma omp parallel if (Gpu::notInLaunchRegion())
403 for (MFIter mfi(S_cur_data[ivar_idx],TilingIfNotGPU()); mfi.isValid(); ++mfi) {
404 Box tbx = mfi.tilebox();
405 Box tbx_xlo, tbx_xhi, tbx_ylo, tbx_yhi;
411 Array4<Real> rhs_arr; Array4<Real> data_arr;
412 Array4<Real> arr_xlo; Array4<Real> arr_xhi;
413 Array4<Real> arr_ylo; Array4<Real> arr_yhi;
415 arr_xlo = U_xlo.array(); arr_xhi = U_xhi.array();
416 arr_ylo = U_ylo.array(); arr_yhi = U_yhi.array();
419 }
else if (ivar == ivarV) {
420 arr_xlo = V_xlo.array(); arr_xhi = V_xhi.array();
421 arr_ylo = V_ylo.array(); arr_yhi = V_yhi.array();
424 }
else if (ivar == ivarT){
425 arr_xlo = T_xlo.array(); arr_xhi = T_xhi.array();
426 arr_ylo = T_ylo.array(); arr_yhi = T_yhi.array();
433 Array4<Real> u_xlo = U_xlo.array(); Array4<Real> u_xhi = U_xhi.array();
434 Array4<Real> v_xlo = V_xlo.array(); Array4<Real> v_xhi = V_xhi.array();
435 Array4<Real> v_ylo = V_ylo.array(); Array4<Real> v_yhi = V_yhi.array();
438 width,
dx, ProbLo, ProbHi, F1, geom.Domain(),
439 tbx_xlo , tbx_xhi , tbx_ylo , tbx_yhi ,
440 arr_xlo , arr_xhi , arr_ylo , arr_yhi ,
441 u_xlo, u_xhi, v_xlo, v_xhi, v_ylo, v_yhi,
442 data_arr, rhs_arr, do_upwind);
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:37
const Real dx
Definition: ERF_InitCustomPert_ABL.H:23
AMREX_ALWAYS_ASSERT(bx.length()[2]==khi+1)
amrex::Real alpha
Definition: ERF_InitCustomPert_IsentropicVortex.H:8
void realbdy_interior_bxs_xy(const Box &bx, const Box &domain, const int &width, Box &bx_xlo, Box &bx_xhi, Box &bx_ylo, Box &bx_yhi, const IntVect &ng_vect, const bool get_int_ng)
Definition: ERF_InteriorGhostCells.cpp:23
AMREX_FORCE_INLINE IntVect offset(const int face_dir, const int normal)
Definition: ERF_ReadBndryPlanes.cpp:28
const auto & dom_hi
Definition: ERF_SetupVertDiff.H:2
const auto & dom_lo
Definition: ERF_SetupVertDiff.H:1
AMREX_GPU_HOST AMREX_FORCE_INLINE void realbdy_compute_relaxation(const int &icomp, const int &num_var, const int &width, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dx, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &ProbLo, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &ProbHi, const amrex::Real &F1, const amrex::Box &domain_cc, const amrex::Box &bx_xlo, const amrex::Box &bx_xhi, const amrex::Box &bx_ylo, const amrex::Box &bx_yhi, const amrex::Array4< const amrex::Real > &arr_xlo, const amrex::Array4< const amrex::Real > &arr_xhi, const amrex::Array4< const amrex::Real > &arr_ylo, const amrex::Array4< const amrex::Real > &arr_yhi, const amrex::Array4< const amrex::Real > &u_xlo, const amrex::Array4< const amrex::Real > &u_xhi, const amrex::Array4< const amrex::Real > &v_xlo, const amrex::Array4< const amrex::Real > &v_xhi, const amrex::Array4< const amrex::Real > &v_ylo, const amrex::Array4< const amrex::Real > &v_yhi, const amrex::Array4< const amrex::Real > &data_arr, const amrex::Array4< amrex::Real > &rhs_arr, const bool &do_upwind)
Definition: ERF_Utils.H:182
@ RhoTheta_bc_comp
Definition: ERF_IndexDefines.H:78
@ yvel_bc
Definition: ERF_IndexDefines.H:88
@ xvel_bc
Definition: ERF_IndexDefines.H:87
@ U
Definition: ERF_IndexDefines.H:108
@ NumTypes
Definition: ERF_IndexDefines.H:112
@ T
Definition: ERF_IndexDefines.H:110
@ V
Definition: ERF_IndexDefines.H:109
@ xvel
Definition: ERF_IndexDefines.H:157
@ cons
Definition: ERF_IndexDefines.H:156
@ yvel
Definition: ERF_IndexDefines.H:158