190 BL_PROFILE_REGION(
"realbdy_compute_interior_ghost_RHS()");
193 Real F1 = 1./delta_t;
196 Real dT = bdy_time_interval;
199 Real time_since_start = time;
201 int n_time =
static_cast<int>( time_since_start / dT);
202 Real alpha = (time_since_start - n_time * dT) / dT;
203 AMREX_ALWAYS_ASSERT( alpha >= 0. && alpha <= 1.0);
204 Real oma = 1.0 - alpha;
206 int n_time_p1 = n_time + 1;
207 if ((time == stop_time_elapsed) && (alpha==0)) {
219 FArrayBox U_xlo, U_xhi, U_ylo, U_yhi;
220 FArrayBox V_xlo, V_xhi, V_ylo, V_yhi;
221 FArrayBox T_xlo, T_xhi, T_ylo, T_yhi;
242 for (
int ivar(ivarU); ivar < BdyEnd; ivar++) {
243 int ivar_idx = var_map[ivar];
244 Box domain = geom.Domain();
245 auto ixtype = S_cur_data[ivar_idx].boxArray().ixType();
246 domain.convert(ixtype);
249 IntVect ng_vect(1,1,0);
250 Box gdom(domain); gdom.grow(ng_vect);
251 Box bx_xlo, bx_xhi, bx_ylo, bx_yhi;
259 U_xlo.resize(bx_xlo,1,The_Async_Arena()); U_xhi.resize(bx_xhi,1,The_Async_Arena());
260 U_ylo.resize(bx_ylo,1,The_Async_Arena()); U_yhi.resize(bx_yhi,1,The_Async_Arena());
261 }
else if (ivar == ivarV) {
262 V_xlo.resize(bx_xlo,1,The_Async_Arena()); V_xhi.resize(bx_xhi,1,The_Async_Arena());
263 V_ylo.resize(bx_ylo,1,The_Async_Arena()); V_yhi.resize(bx_yhi,1,The_Async_Arena());
264 }
else if (ivar == ivarT){
265 T_xlo.resize(bx_xlo,1,The_Async_Arena()); T_xhi.resize(bx_xhi,1,The_Async_Arena());
266 T_ylo.resize(bx_ylo,1,The_Async_Arena()); T_yhi.resize(bx_yhi,1,The_Async_Arena());
281 for (
int ivar(ivarU); ivar < BdyEnd; ivar++) {
282 int ivar_idx = var_map[ivar];
283 Box domain = geom.Domain();
284 auto ixtype = S_cur_data[ivar_idx].boxArray().ixType();
285 domain.convert(ixtype);
286 const auto&
dom_lo = lbound(domain);
287 const auto&
dom_hi = ubound(domain);
290 #pragma omp parallel if (Gpu::notInLaunchRegion())
292 for (MFIter mfi(S_cur_data[ivar_idx],TilingIfNotGPU()); mfi.isValid(); ++mfi) {
294 IntVect ng_vect(1,1,0);
295 Box gtbx = grow(mfi.tilebox(ixtype.toIntVect()),ng_vect);
296 Box tbx_xlo, tbx_xhi, tbx_ylo, tbx_yhi;
302 Array4<Real> arr_xlo; Array4<Real> arr_xhi;
303 Array4<Real> arr_ylo; Array4<Real> arr_yhi;
305 arr_xlo = U_xlo.array(); arr_xhi = U_xhi.array();
306 arr_ylo = U_ylo.array(); arr_yhi = U_yhi.array();
307 }
else if (ivar == ivarV) {
308 arr_xlo = V_xlo.array(); arr_xhi = V_xhi.array();
309 arr_ylo = V_ylo.array(); arr_yhi = V_yhi.array();
310 }
else if (ivar == ivarT){
311 arr_xlo = T_xlo.array(); arr_xhi = T_xhi.array();
312 arr_ylo = T_ylo.array(); arr_yhi = T_yhi.array();
318 const auto& bdatxlo_n = bdy_data_xlo[n_time ][ivar].const_array();
319 const auto& bdatxlo_np1 = bdy_data_xlo[n_time_p1][ivar].const_array();
320 const auto& bdatxhi_n = bdy_data_xhi[n_time ][ivar].const_array();
321 const auto& bdatxhi_np1 = bdy_data_xhi[n_time_p1][ivar].const_array();
322 const auto& bdatylo_n = bdy_data_ylo[n_time ][ivar].const_array();
323 const auto& bdatylo_np1 = bdy_data_ylo[n_time_p1][ivar].const_array();
324 const auto& bdatyhi_n = bdy_data_yhi[n_time ][ivar].const_array();
325 const auto& bdatyhi_np1 = bdy_data_yhi[n_time_p1][ivar].const_array();
331 int offset = set_width - 1;
332 if (width > set_width)
offset = width - 1;
335 ParallelFor(tbx_xlo, tbx_xhi,
336 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
338 int ii = std::max(i ,
dom_lo.x);
340 int jj = std::max(j ,
dom_lo.y);
341 jj = std::min(jj,
dom_hi.y);
345 rho_interp = 0.5 * ( r_arr(i-1,j ,k) + r_arr(i,j,k) );
346 }
else if (ivar==ivarV) {
347 rho_interp = 0.5 * ( r_arr(i ,j-1,k) + r_arr(i,j,k) );
349 rho_interp = r_arr(i,j,k);
351 arr_xlo(i,j,k) = rho_interp * ( oma * bdatxlo_n (ii,jj,k,0)
352 + alpha * bdatxlo_np1(ii,jj,k,0) );
354 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
357 ii = std::min(ii,
dom_hi.x);
358 int jj = std::max(j ,
dom_lo.y);
359 jj = std::min(jj,
dom_hi.y);
363 rho_interp = 0.5 * ( r_arr(i-1,j ,k) + r_arr(i,j,k) );
364 }
else if (ivar==ivarV) {
365 rho_interp = 0.5 * ( r_arr(i ,j-1,k) + r_arr(i,j,k) );
367 rho_interp = r_arr(i,j,k);
369 arr_xhi(i,j,k) = rho_interp * ( oma * bdatxhi_n (ii,jj,k,0)
370 + alpha * bdatxhi_np1(ii,jj,k,0) );
373 ParallelFor(tbx_ylo, tbx_yhi,
374 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
376 int ii = std::max(i ,
dom_lo.x);
377 ii = std::min(ii,
dom_hi.x);
378 int jj = std::max(j ,
dom_lo.y);
383 rho_interp = 0.5 * ( r_arr(i-1,j ,k) + r_arr(i,j,k) );
384 }
else if (ivar==ivarV) {
385 rho_interp = 0.5 * ( r_arr(i ,j-1,k) + r_arr(i,j,k) );
387 rho_interp = r_arr(i,j,k);
389 arr_ylo(i,j,k) = rho_interp * ( oma * bdatylo_n (ii,jj,k,0)
390 + alpha * bdatylo_np1(ii,jj,k,0) );
392 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
394 int ii = std::max(i ,
dom_lo.x);
395 ii = std::min(ii,
dom_hi.x);
397 jj = std::min(jj,
dom_hi.y);
401 rho_interp = 0.5 * ( r_arr(i-1,j ,k) + r_arr(i,j,k) );
402 }
else if (ivar==ivarV) {
403 rho_interp = 0.5 * ( r_arr(i ,j-1,k) + r_arr(i,j,k) );
405 rho_interp = r_arr(i,j,k);
407 arr_yhi(i,j,k) = rho_interp * ( oma * bdatyhi_n (ii,jj,k,0)
408 + alpha * bdatyhi_np1(ii,jj,k,0) );
420 for (
int ivar(ivarU); ivar < BdyEnd; ivar++) {
421 int ivar_idx = ivar_map[ivar];
422 int icomp = comp_map[ivar];
424 Box domain = geom.Domain();
425 auto ix_type = S_old_data[ivar_idx].boxArray().ixType();
426 auto iv_type = ix_type.toIntVect();
427 domain.convert(ix_type);
429 int set_width_x = (iv_type[0]) ? set_width : set_width-1;
430 int set_width_y = (iv_type[1]) ? set_width : set_width-1;
433 #pragma omp parallel if (Gpu::notInLaunchRegion())
435 for (MFIter mfi(S_old_data[ivar_idx],TilingIfNotGPU()); mfi.isValid(); ++mfi) {
436 Box tbx = mfi.tilebox();
437 Box tbx_xlo, tbx_xhi, tbx_ylo, tbx_yhi;
442 Array4<Real> rhs_arr; Array4<Real> data_arr;
443 Array4<Real> arr_xlo; Array4<Real> arr_xhi;
444 Array4<Real> arr_ylo; Array4<Real> arr_yhi;
446 arr_xlo = U_xlo.array(); arr_xhi = U_xhi.array();
447 arr_ylo = U_ylo.array(); arr_yhi = U_yhi.array();
450 }
else if (ivar == ivarV) {
451 arr_xlo = V_xlo.array(); arr_xhi = V_xhi.array();
452 arr_ylo = V_ylo.array(); arr_yhi = V_yhi.array();
455 }
else if (ivar == ivarT){
456 arr_xlo = T_xlo.array(); arr_xhi = T_xhi.array();
457 arr_ylo = T_ylo.array(); arr_yhi = T_yhi.array();
464 Array4<Real> u_xlo = U_xlo.array(); Array4<Real> u_xhi = U_xhi.array();
465 Array4<Real> v_xlo = V_xlo.array(); Array4<Real> v_xhi = V_xhi.array();
466 Array4<Real> v_ylo = V_ylo.array(); Array4<Real> v_yhi = V_yhi.array();
469 width, set_width_x, set_width_y,
470 domain, geom.Domain(),
471 tbx_xlo , tbx_xhi , tbx_ylo , tbx_yhi ,
472 arr_xlo , arr_xhi , arr_ylo , arr_yhi ,
473 u_xlo, u_xhi, v_xlo, v_xhi, v_ylo, v_yhi,
474 data_arr, rhs_arr, do_upwind);
485 if (width > set_width) {
486 auto dx = geom.CellSizeArray();
487 auto ProbLo = geom.ProbLoArray();
488 auto ProbHi = geom.ProbHiArray();
489 for (
int ivar(ivarU); ivar < BdyEnd; ivar++) {
490 int ivar_idx = ivar_map[ivar];
491 int icomp = comp_map[ivar];
493 Box domain = geom.Domain();
494 domain.convert(S_cur_data[ivar_idx].boxArray().ixType());
498 #pragma omp parallel if (Gpu::notInLaunchRegion())
500 for (MFIter mfi(S_cur_data[ivar_idx],TilingIfNotGPU()); mfi.isValid(); ++mfi) {
501 Box tbx = mfi.tilebox();
502 Box tbx_xlo, tbx_xhi, tbx_ylo, tbx_yhi;
508 Array4<Real> rhs_arr; Array4<Real> data_arr;
509 Array4<Real> arr_xlo; Array4<Real> arr_xhi;
510 Array4<Real> arr_ylo; Array4<Real> arr_yhi;
512 arr_xlo = U_xlo.array(); arr_xhi = U_xhi.array();
513 arr_ylo = U_ylo.array(); arr_yhi = U_yhi.array();
516 }
else if (ivar == ivarV) {
517 arr_xlo = V_xlo.array(); arr_xhi = V_xhi.array();
518 arr_ylo = V_ylo.array(); arr_yhi = V_yhi.array();
521 }
else if (ivar == ivarT){
522 arr_xlo = T_xlo.array(); arr_xhi = T_xhi.array();
523 arr_ylo = T_ylo.array(); arr_yhi = T_yhi.array();
530 Array4<Real> u_xlo = U_xlo.array(); Array4<Real> u_xhi = U_xhi.array();
531 Array4<Real> v_xlo = V_xlo.array(); Array4<Real> v_xhi = V_xhi.array();
532 Array4<Real> v_ylo = V_ylo.array(); Array4<Real> v_yhi = V_yhi.array();
535 width, dx, ProbLo, ProbHi, F1, geom.Domain(),
536 tbx_xlo , tbx_xhi , tbx_ylo , tbx_yhi ,
537 arr_xlo , arr_xhi , arr_ylo , arr_yhi ,
538 u_xlo, u_xhi, v_xlo, v_xhi, v_ylo, v_yhi,
539 data_arr, rhs_arr, do_upwind);
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:37
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 int &set_width, 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
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:323
AMREX_GPU_HOST AMREX_FORCE_INLINE void realbdy_set_rhs_in_spec_region(const amrex::Real &dt, const int &icomp, const int &num_var, const int &width, const int &set_width_x, const int &set_width_y, const amrex::Box &domain, 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:183
@ 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:141
@ cons
Definition: ERF_IndexDefines.H:140
@ yvel
Definition: ERF_IndexDefines.H:142