26 template<
typename InterpType_H,
typename InterpType_V>
31 const amrex::Array4<const amrex::Real>& rho_u,
32 const amrex::Array4<const amrex::Real>& rho_v,
33 const amrex::Array4<const amrex::Real>& rho_w,
34 InterpType_H interp_u_h,
35 InterpType_V interp_u_v,
36 const amrex::Array4<const amrex::Real>& mf_ux_inv,
37 const amrex::Array4<const amrex::Real>& mf_uy_inv,
38 const amrex::Array4<const amrex::Real>& mf_vx_inv,
53 rho_u_avg_hi =
myhalf * (rho_u(i+1, j, k) * mf_uy_inv(i+1,j,0) + rho_u(i, j, k) * mf_uy_inv(i,j,0));
54 interp_u_h.InterpolateInX(i+1,j,k,0,interp_hi,rho_u_avg_hi);
55 xflux_hi = rho_u_avg_hi * interp_hi;
57 rho_u_avg_lo =
myhalf * (rho_u(i-1, j, k) * mf_uy_inv(i-1,j,0) + rho_u(i, j, k) * mf_uy_inv(i,j,0));
58 interp_u_h.InterpolateInX(i,j,k,0,interp_lo,rho_u_avg_lo);
59 xflux_lo = rho_u_avg_lo * interp_lo;
61 rho_v_avg_hi =
myhalf * (rho_v(i, j+1, k) * mf_vx_inv(i,j+1,0) + rho_v(i-1, j+1, k) * mf_vx_inv(i-1,j+1,0));
62 interp_u_h.InterpolateInY(i,j+1,k,0,interp_hi,rho_v_avg_hi);
63 yflux_hi = rho_v_avg_hi * interp_hi;
65 rho_v_avg_lo =
myhalf * (rho_v(i, j , k) * mf_vx_inv(i,j ,0) + rho_v(i-1, j , k) * mf_vx_inv(i-1,j ,0));
66 interp_u_h.InterpolateInY(i,j,k,0,interp_lo,rho_v_avg_lo);
67 yflux_lo = rho_v_avg_lo * interp_lo;
69 rho_w_avg_hi =
myhalf * (rho_w(i, j, k+1) + rho_w(i-1, j, k+1));
70 interp_u_v.InterpolateInZ(i,j,k+1,0,interp_hi,rho_w_avg_hi);
71 zflux_hi = rho_w_avg_hi * interp_hi;
73 rho_w_avg_lo =
myhalf * (rho_w(i, j, k ) + rho_w(i-1, j, k ));
74 interp_u_v.InterpolateInZ(i,j,k,0,interp_lo,rho_w_avg_lo);
75 zflux_lo = rho_w_avg_lo * interp_lo;
77 amrex::Real mfsq = 1 / (mf_ux_inv(i,j,0) * mf_uy_inv(i,j,0));
79 advectionSrc = (xflux_hi - xflux_lo) *
dxInv * mfsq
80 + (yflux_hi - yflux_lo) * dyInv * mfsq
81 + (zflux_hi - zflux_lo) * dzInv;
108 template<
typename InterpType_H,
typename InterpType_V>
113 const amrex::Array4<const amrex::Real>& rho_u,
114 const amrex::Array4<const amrex::Real>& rho_v,
115 const amrex::Array4<const amrex::Real>& rho_w,
116 InterpType_H interp_v_h,
117 InterpType_V interp_v_v,
118 const amrex::Array4<const amrex::Real>& mf_uy_inv,
119 const amrex::Array4<const amrex::Real>& mf_vx_inv,
120 const amrex::Array4<const amrex::Real>& mf_vy_inv,
135 rho_u_avg_hi =
myhalf * (rho_u(i+1, j, k) * mf_uy_inv(i+1,j ,0) + rho_u(i+1, j-1, k) * mf_uy_inv(i+1,j-1,0));
136 interp_v_h.InterpolateInX(i+1,j,k,0,interp_hi,rho_u_avg_hi);
137 xflux_hi = rho_u_avg_hi * interp_hi;
139 rho_u_avg_lo =
myhalf * (rho_u(i , j, k) * mf_uy_inv(i ,j ,0) + rho_u(i , j-1, k) * mf_uy_inv(i ,j-1,0));
140 interp_v_h.InterpolateInX(i,j,k,0,interp_lo,rho_u_avg_lo);
141 xflux_lo = rho_u_avg_lo * interp_lo;
143 rho_v_avg_hi =
myhalf * (rho_v(i, j, k) * mf_vx_inv(i ,j ,0) + rho_v(i, j+1, k) * mf_vx_inv(i ,j+1,0));
144 interp_v_h.InterpolateInY(i,j+1,k,0,interp_hi,rho_v_avg_hi);
145 yflux_hi = rho_v_avg_hi * interp_hi;
147 rho_v_avg_lo =
myhalf * (rho_v(i, j, k) * mf_vx_inv(i ,j ,0) + rho_v(i, j-1, k) * mf_vx_inv(i ,j-1,0));
148 interp_v_h.InterpolateInY(i,j,k,0,interp_lo,rho_v_avg_lo);
149 yflux_lo = rho_v_avg_lo * interp_lo;
151 rho_w_avg_hi =
myhalf * (rho_w(i, j, k+1) + rho_w(i, j-1, k+1));
152 interp_v_v.InterpolateInZ(i,j,k+1,0,interp_hi,rho_w_avg_hi);
153 zflux_hi = rho_w_avg_hi * interp_hi;
155 rho_w_avg_lo =
myhalf * (rho_w(i, j, k ) + rho_w(i, j-1, k ));
156 interp_v_v.InterpolateInZ(i,j,k ,0,interp_lo,rho_w_avg_lo);
157 zflux_lo = rho_w_avg_lo * interp_lo;
159 amrex::Real mfsq = 1 / (mf_vx_inv(i,j,0) * mf_vy_inv(i,j,0));
161 advectionSrc = (xflux_hi - xflux_lo) *
dxInv * mfsq
162 + (yflux_hi - yflux_lo) * dyInv * mfsq
163 + (zflux_hi - zflux_lo) * dzInv;
197 template<
typename InterpType_H,
typename InterpType_V,
typename WallInterpType>
202 const amrex::Array4<const amrex::Real>& rho_u,
203 const amrex::Array4<const amrex::Real>& rho_v,
204 const amrex::Array4<const amrex::Real>& rho_w,
205 const amrex::Array4<const amrex::Real>&
w,
206 InterpType_H interp_w_h,
207 InterpType_V interp_w_v,
208 WallInterpType interp_w_wall,
209 const amrex::Array4<const amrex::Real>& mf_mx,
210 const amrex::Array4<const amrex::Real>& mf_my,
211 const amrex::Array4<const amrex::Real>& mf_uy_inv,
212 const amrex::Array4<const amrex::Real>& mf_vx_inv,
214 const int lo_z_face,
const int hi_z_face,
230 rho_u_avg_hi =
myhalf * (rho_u(i+1, j, k) + rho_u(i+1, j, k-1)) * mf_uy_inv(i+1,j ,0);
231 interp_w_h.InterpolateInX(i+1,j,k,0,interp_hi,rho_u_avg_hi);
232 xflux_hi = rho_u_avg_hi * interp_hi;
234 rho_u_avg_lo =
myhalf * (rho_u(i , j, k) + rho_u(i , j, k-1)) * mf_uy_inv(i ,j ,0);
235 interp_w_h.InterpolateInX(i,j,k,0,interp_lo,rho_u_avg_lo);
236 xflux_lo = rho_u_avg_lo * interp_lo;
238 rho_v_avg_hi =
myhalf * (rho_v(i, j+1, k) + rho_v(i, j+1, k-1)) * mf_vx_inv(i ,j+1,0);
239 interp_w_h.InterpolateInY(i,j+1,k,0,interp_hi,rho_v_avg_hi);
240 yflux_hi = rho_v_avg_hi * interp_hi;
242 rho_v_avg_lo =
myhalf * (rho_v(i, j , k) + rho_v(i, j , k-1)) * mf_vx_inv(i ,j ,0);
243 interp_w_h.InterpolateInY(i,j,k,0,interp_lo,rho_v_avg_lo);
244 yflux_lo = rho_v_avg_lo * interp_lo;
251 if (k == hi_z_face) {
252 zflux_hi = rho_w(i,j,k) *
w(i,j,k);
254 rho_w_avg_hi =
myhalf * (rho_w(i,j,k) + rho_w(i,j,k+1));
255 if (k == hi_z_face-1) {
257 }
else if (k == hi_z_face-2 || k == lo_z_face+1) {
261 interp_w_wall.InterpolateInZ(i,j,k+1,0,interp_hi,rho_w_avg_hi,vert_adv_type);
264 interp_w_v.InterpolateInZ(i,j,k+1,0,interp_hi,rho_w_avg_hi);
266 zflux_hi = rho_w_avg_hi * interp_hi;
274 if (k == lo_z_face) {
275 zflux_lo = rho_w(i,j,k) *
w(i,j,k);
277 rho_w_avg_lo =
myhalf * (rho_w(i,j,k) + rho_w(i,j,k-1));
278 if (k == lo_z_face+1) {
280 }
else if (k == lo_z_face+2 || k == hi_z_face-1) {
284 interp_w_wall.InterpolateInZ(i,j,k,0,interp_lo,rho_w_avg_lo,vert_adv_type);
287 interp_w_v.InterpolateInZ(i,j,k,0,interp_lo,rho_w_avg_lo);
289 zflux_lo = rho_w_avg_lo * interp_lo;
294 advectionSrc = (xflux_hi - xflux_lo) *
dxInv * mfsq
295 + (yflux_hi - yflux_lo) * dyInv * mfsq
296 + (zflux_hi - zflux_lo) * dzInv;
333 template<
typename InterpType_H,
typename InterpType_V,
typename WallInterpType>
336 const amrex::Array4<amrex::Real>& rho_u_rhs,
337 const amrex::Array4<amrex::Real>& rho_v_rhs,
338 const amrex::Array4<amrex::Real>& rho_w_rhs,
339 const amrex::Array4<const amrex::Real>& rho_u,
340 const amrex::Array4<const amrex::Real>& rho_v,
341 const amrex::Array4<const amrex::Real>& rho_w,
342 const amrex::Array4<const amrex::Real>& u,
343 const amrex::Array4<const amrex::Real>& v,
344 const amrex::Array4<const amrex::Real>&
w,
345 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
346 const amrex::Gpu::DeviceVector<amrex::Real>& stretched_dz_d,
347 const amrex::Array4<const amrex::Real>& mf_mx,
348 const amrex::Array4<const amrex::Real>& mf_ux_inv,
349 const amrex::Array4<const amrex::Real>& mf_vx_inv,
350 const amrex::Array4<const amrex::Real>& mf_my,
351 const amrex::Array4<const amrex::Real>& mf_uy_inv,
352 const amrex::Array4<const amrex::Real>& mf_vy_inv,
356 const int lo_z_face,
const int hi_z_face)
359 InterpType_H interp_u_h(u, upw_frac_h); InterpType_V interp_u_v(u, upw_frac_v);
360 InterpType_H interp_v_h(v, upw_frac_h); InterpType_V interp_v_v(v, upw_frac_v);
361 InterpType_H interp_w_h(
w, upw_frac_h); InterpType_V interp_w_v(
w, upw_frac_v);
362 WallInterpType interp_w_wall(
w, upw_frac_v);
364 auto dxInv = cellSizeInv[0];
365 auto dyInv = cellSizeInv[1];
367 auto dz_ptr = stretched_dz_d.data();
370 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
372 auto dzInv =
one/dz_ptr[k];
374 interp_u_h, interp_u_v,
375 mf_ux_inv, mf_uy_inv, mf_vx_inv,
376 dxInv, dyInv, dzInv);
380 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
382 auto dzInv =
one/dz_ptr[k];
384 interp_v_h, interp_v_v,
385 mf_uy_inv, mf_vx_inv, mf_vy_inv,
386 dxInv, dyInv, dzInv);
390 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
392 auto dzInv = (k == 0) ?
one / dz_ptr[k] :
two/(dz_ptr[k] + dz_ptr[k-1]);
394 interp_w_h, interp_w_v, interp_w_wall,
395 mf_mx, mf_my, mf_uy_inv, mf_vx_inv,
396 vert_adv_type, lo_z_face, hi_z_face,
397 dxInv, dyInv, dzInv);
431 template<
typename InterpType_H>
434 const amrex::Array4<amrex::Real>& rho_u_rhs,
435 const amrex::Array4<amrex::Real>& rho_v_rhs,
436 const amrex::Array4<amrex::Real>& rho_w_rhs,
437 const amrex::Array4<const amrex::Real>& rho_u,
438 const amrex::Array4<const amrex::Real>& rho_v,
439 const amrex::Array4<const amrex::Real>& rho_w,
440 const amrex::Array4<const amrex::Real>& u,
441 const amrex::Array4<const amrex::Real>& v,
442 const amrex::Array4<const amrex::Real>&
w,
443 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
444 const amrex::Gpu::DeviceVector<amrex::Real>& stretched_dz_d,
445 const amrex::Array4<const amrex::Real>& mf_mx,
446 const amrex::Array4<const amrex::Real>& mf_ux_inv,
447 const amrex::Array4<const amrex::Real>& mf_vx_inv,
448 const amrex::Array4<const amrex::Real>& mf_my,
449 const amrex::Array4<const amrex::Real>& mf_uy_inv,
450 const amrex::Array4<const amrex::Real>& mf_vy_inv,
454 const int lo_z_face,
const int hi_z_face)
457 AdvectionSrcForMomWrapper_N<InterpType_H,CENTERED2,UPWINDALL>(bxx, bxy, bxz,
458 rho_u_rhs, rho_v_rhs, rho_w_rhs,
459 rho_u, rho_v, rho_w, u, v,
w,
460 cellSizeInv, stretched_dz_d,
461 mf_mx, mf_ux_inv, mf_vx_inv,
462 mf_my, mf_uy_inv, mf_vy_inv,
463 upw_frac_h, upw_frac_v,
465 lo_z_face, hi_z_face);
467 AdvectionSrcForMomWrapper_N<InterpType_H,UPWIND3,UPWINDALL>(bxx, bxy, bxz,
468 rho_u_rhs, rho_v_rhs, rho_w_rhs,
469 rho_u, rho_v, rho_w, u, v,
w,
470 cellSizeInv, stretched_dz_d,
471 mf_mx, mf_ux_inv, mf_vx_inv,
472 mf_my, mf_uy_inv, mf_vy_inv,
473 upw_frac_h, upw_frac_v,
475 lo_z_face, hi_z_face);
477 AdvectionSrcForMomWrapper_N<InterpType_H,CENTERED4,UPWINDALL>(bxx, bxy, bxz,
478 rho_u_rhs, rho_v_rhs, rho_w_rhs,
479 rho_u, rho_v, rho_w, u, v,
w,
480 cellSizeInv, stretched_dz_d,
481 mf_mx, mf_ux_inv, mf_vx_inv,
482 mf_my, mf_uy_inv, mf_vy_inv,
483 upw_frac_h, upw_frac_v,
485 lo_z_face, hi_z_face);
487 AdvectionSrcForMomWrapper_N<InterpType_H,UPWIND5,UPWINDALL>(bxx, bxy, bxz,
488 rho_u_rhs, rho_v_rhs, rho_w_rhs,
489 rho_u, rho_v, rho_w, u, v,
w,
490 cellSizeInv, stretched_dz_d,
491 mf_mx, mf_ux_inv, mf_vx_inv,
492 mf_my, mf_uy_inv, mf_vy_inv,
493 upw_frac_h, upw_frac_v,
495 lo_z_face, hi_z_face);
497 AdvectionSrcForMomWrapper_N<InterpType_H,CENTERED6,UPWINDALL>(bxx, bxy, bxz,
498 rho_u_rhs, rho_v_rhs, rho_w_rhs,
499 rho_u, rho_v, rho_w, u, v,
w,
500 cellSizeInv, stretched_dz_d,
501 mf_mx, mf_ux_inv, mf_vx_inv,
502 mf_my, mf_uy_inv, mf_vy_inv,
503 upw_frac_h, upw_frac_v,
505 lo_z_face, hi_z_face);
507 AdvectionSrcForMomWrapper_N<InterpType_H,WENO3,UPWINDALL>(bxx, bxy, bxz,
508 rho_u_rhs, rho_v_rhs, rho_w_rhs,
509 rho_u, rho_v, rho_w, u, v,
w,
510 cellSizeInv, stretched_dz_d,
511 mf_mx, mf_ux_inv, mf_vx_inv,
512 mf_my, mf_uy_inv, mf_vy_inv,
513 upw_frac_h, upw_frac_v,
515 lo_z_face, hi_z_face);
517 AdvectionSrcForMomWrapper_N<InterpType_H,WENO_Z3,UPWINDALL>(bxx, bxy, bxz,
518 rho_u_rhs, rho_v_rhs, rho_w_rhs,
519 rho_u, rho_v, rho_w, u, v,
w,
520 cellSizeInv, stretched_dz_d,
521 mf_mx, mf_ux_inv, mf_vx_inv,
522 mf_my, mf_uy_inv, mf_vy_inv,
523 upw_frac_h, upw_frac_v,
525 lo_z_face, hi_z_face);
527 AdvectionSrcForMomWrapper_N<InterpType_H,WENO_MZQ3,UPWINDALL>(bxx, bxy, bxz,
528 rho_u_rhs, rho_v_rhs, rho_w_rhs,
529 rho_u, rho_v, rho_w, u, v,
w,
530 cellSizeInv, stretched_dz_d,
531 mf_mx, mf_ux_inv, mf_vx_inv,
532 mf_my, mf_uy_inv, mf_vy_inv,
533 upw_frac_h, upw_frac_v,
535 lo_z_face, hi_z_face);
537 AdvectionSrcForMomWrapper_N<InterpType_H,WENO5,UPWINDALL>(bxx, bxy, bxz,
538 rho_u_rhs, rho_v_rhs, rho_w_rhs,
539 rho_u, rho_v, rho_w, u, v,
w,
540 cellSizeInv, stretched_dz_d,
541 mf_mx, mf_ux_inv, mf_vx_inv,
542 mf_my, mf_uy_inv, mf_vy_inv,
543 upw_frac_h, upw_frac_v,
545 lo_z_face, hi_z_face);
547 AdvectionSrcForMomWrapper_N<InterpType_H,WENO_Z5,UPWINDALL>(bxx, bxy, bxz,
548 rho_u_rhs, rho_v_rhs, rho_w_rhs,
549 rho_u, rho_v, rho_w, u, v,
w,
550 cellSizeInv, stretched_dz_d,
551 mf_mx, mf_ux_inv, mf_vx_inv,
552 mf_my, mf_uy_inv, mf_vy_inv,
553 upw_frac_h, upw_frac_v,
555 lo_z_face, hi_z_face);
557 AdvectionSrcForMomWrapper_N<InterpType_H,WENO7,UPWINDALL>(bxx, bxy, bxz,
558 rho_u_rhs, rho_v_rhs, rho_w_rhs,
559 rho_u, rho_v, rho_w, u, v,
w,
560 cellSizeInv, stretched_dz_d,
561 mf_mx, mf_ux_inv, mf_vx_inv,
562 mf_my, mf_uy_inv, mf_vy_inv,
563 upw_frac_h, upw_frac_v,
565 lo_z_face, hi_z_face);
567 AdvectionSrcForMomWrapper_N<InterpType_H,WENO_Z7,UPWINDALL>(bxx, bxy, bxz,
568 rho_u_rhs, rho_v_rhs, rho_w_rhs,
569 rho_u, rho_v, rho_w, u, v,
w,
570 cellSizeInv, stretched_dz_d,
571 mf_mx, mf_ux_inv, mf_vx_inv,
572 mf_my, mf_uy_inv, mf_vy_inv,
573 upw_frac_h, upw_frac_v,
575 lo_z_face, hi_z_face);
constexpr amrex::Real two
Definition: ERF_Constants.H:10
constexpr amrex::Real one
Definition: ERF_Constants.H:9
constexpr amrex::Real zero
Definition: ERF_Constants.H:8
constexpr amrex::Real myhalf
Definition: ERF_Constants.H:13
AdvType
Definition: ERF_IndexDefines.H:261
amrex::GpuArray< Real, AMREX_SPACEDIM > dxInv
Definition: ERF_InitCustomPertVels_ParticleTests.H:17
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);})
Real w
Definition: ERF_Plotfile2DInterpolator.cpp:22
amrex::Real Real
Definition: ERF_ShocInterface.H:19
AMREX_ASSERT_WITH_MESSAGE(wbar_cutoff_min > wbar_cutoff_max, "ERROR: wbar_cutoff_min < wbar_cutoff_max")