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));
256 if (k == hi_z_face-1 || k == lo_z_face) {
258 }
else if (k == hi_z_face-2 || k == lo_z_face+1) {
262 interp_w_wall.InterpolateInZ(i,j,k+1,0,interp_hi,rho_w_avg_hi,vert_adv_type);
265 interp_w_v.InterpolateInZ(i,j,k+1,0,interp_hi,rho_w_avg_hi);
267 zflux_hi = rho_w_avg_hi * interp_hi;
275 if (k == lo_z_face) {
276 zflux_lo = rho_w(i,j,k) *
w(i,j,k);
278 rho_w_avg_lo =
myhalf * (rho_w(i,j,k) + rho_w(i,j,k-1));
279 if (k == lo_z_face+1 || k == hi_z_face) {
281 }
else if (k == lo_z_face+2 || k == hi_z_face-1) {
285 interp_w_wall.InterpolateInZ(i,j,k,0,interp_lo,rho_w_avg_lo,vert_adv_type);
288 interp_w_v.InterpolateInZ(i,j,k,0,interp_lo,rho_w_avg_lo);
290 zflux_lo = rho_w_avg_lo * interp_lo;
295 advectionSrc = (xflux_hi - xflux_lo) *
dxInv * mfsq
296 + (yflux_hi - yflux_lo) * dyInv * mfsq
297 + (zflux_hi - zflux_lo) * dzInv;
334 template<
typename InterpType_H,
typename InterpType_V,
typename WallInterpType>
337 const amrex::Array4<amrex::Real>& rho_u_rhs,
338 const amrex::Array4<amrex::Real>& rho_v_rhs,
339 const amrex::Array4<amrex::Real>& rho_w_rhs,
340 const amrex::Array4<const amrex::Real>& rho_u,
341 const amrex::Array4<const amrex::Real>& rho_v,
342 const amrex::Array4<const amrex::Real>& rho_w,
343 const amrex::Array4<const amrex::Real>& u,
344 const amrex::Array4<const amrex::Real>& v,
345 const amrex::Array4<const amrex::Real>&
w,
346 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
347 const amrex::Gpu::DeviceVector<amrex::Real>& stretched_dz_d,
348 const amrex::Array4<const amrex::Real>& mf_mx,
349 const amrex::Array4<const amrex::Real>& mf_ux_inv,
350 const amrex::Array4<const amrex::Real>& mf_vx_inv,
351 const amrex::Array4<const amrex::Real>& mf_my,
352 const amrex::Array4<const amrex::Real>& mf_uy_inv,
353 const amrex::Array4<const amrex::Real>& mf_vy_inv,
357 const int lo_z_face,
const int hi_z_face)
360 InterpType_H interp_u_h(u, upw_frac_h); InterpType_V interp_u_v(u, upw_frac_v);
361 InterpType_H interp_v_h(v, upw_frac_h); InterpType_V interp_v_v(v, upw_frac_v);
362 InterpType_H interp_w_h(
w, upw_frac_h); InterpType_V interp_w_v(
w, upw_frac_v);
363 WallInterpType interp_w_wall(
w, upw_frac_v);
365 auto dxInv = cellSizeInv[0];
366 auto dyInv = cellSizeInv[1];
368 auto dz_ptr = stretched_dz_d.data();
371 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
373 auto dzInv =
one/dz_ptr[k];
375 interp_u_h, interp_u_v,
376 mf_ux_inv, mf_uy_inv, mf_vx_inv,
377 dxInv, dyInv, dzInv);
381 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
383 auto dzInv =
one/dz_ptr[k];
385 interp_v_h, interp_v_v,
386 mf_uy_inv, mf_vx_inv, mf_vy_inv,
387 dxInv, dyInv, dzInv);
391 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
394 auto dzInv = (k == 0) ?
one / dz_ptr[k] :
395 (k == hi_z_face) ?
one / dz_ptr[k-1] :
two/(dz_ptr[k] + dz_ptr[k-1]);
397 interp_w_h, interp_w_v, interp_w_wall,
398 mf_mx, mf_my, mf_uy_inv, mf_vx_inv,
399 vert_adv_type, lo_z_face, hi_z_face,
400 dxInv, dyInv, dzInv);
434 template<
typename InterpType_H>
437 const amrex::Array4<amrex::Real>& rho_u_rhs,
438 const amrex::Array4<amrex::Real>& rho_v_rhs,
439 const amrex::Array4<amrex::Real>& rho_w_rhs,
440 const amrex::Array4<const amrex::Real>& rho_u,
441 const amrex::Array4<const amrex::Real>& rho_v,
442 const amrex::Array4<const amrex::Real>& rho_w,
443 const amrex::Array4<const amrex::Real>& u,
444 const amrex::Array4<const amrex::Real>& v,
445 const amrex::Array4<const amrex::Real>&
w,
446 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
447 const amrex::Gpu::DeviceVector<amrex::Real>& stretched_dz_d,
448 const amrex::Array4<const amrex::Real>& mf_mx,
449 const amrex::Array4<const amrex::Real>& mf_ux_inv,
450 const amrex::Array4<const amrex::Real>& mf_vx_inv,
451 const amrex::Array4<const amrex::Real>& mf_my,
452 const amrex::Array4<const amrex::Real>& mf_uy_inv,
453 const amrex::Array4<const amrex::Real>& mf_vy_inv,
457 const int lo_z_face,
const int hi_z_face)
460 AdvectionSrcForMomWrapper_N<InterpType_H,CENTERED2,UPWINDALL>(bxx, bxy, bxz,
461 rho_u_rhs, rho_v_rhs, rho_w_rhs,
462 rho_u, rho_v, rho_w, u, v,
w,
463 cellSizeInv, stretched_dz_d,
464 mf_mx, mf_ux_inv, mf_vx_inv,
465 mf_my, mf_uy_inv, mf_vy_inv,
466 upw_frac_h, upw_frac_v,
468 lo_z_face, hi_z_face);
470 AdvectionSrcForMomWrapper_N<InterpType_H,UPWIND3,UPWINDALL>(bxx, bxy, bxz,
471 rho_u_rhs, rho_v_rhs, rho_w_rhs,
472 rho_u, rho_v, rho_w, u, v,
w,
473 cellSizeInv, stretched_dz_d,
474 mf_mx, mf_ux_inv, mf_vx_inv,
475 mf_my, mf_uy_inv, mf_vy_inv,
476 upw_frac_h, upw_frac_v,
478 lo_z_face, hi_z_face);
480 AdvectionSrcForMomWrapper_N<InterpType_H,CENTERED4,UPWINDALL>(bxx, bxy, bxz,
481 rho_u_rhs, rho_v_rhs, rho_w_rhs,
482 rho_u, rho_v, rho_w, u, v,
w,
483 cellSizeInv, stretched_dz_d,
484 mf_mx, mf_ux_inv, mf_vx_inv,
485 mf_my, mf_uy_inv, mf_vy_inv,
486 upw_frac_h, upw_frac_v,
488 lo_z_face, hi_z_face);
490 AdvectionSrcForMomWrapper_N<InterpType_H,UPWIND5,UPWINDALL>(bxx, bxy, bxz,
491 rho_u_rhs, rho_v_rhs, rho_w_rhs,
492 rho_u, rho_v, rho_w, u, v,
w,
493 cellSizeInv, stretched_dz_d,
494 mf_mx, mf_ux_inv, mf_vx_inv,
495 mf_my, mf_uy_inv, mf_vy_inv,
496 upw_frac_h, upw_frac_v,
498 lo_z_face, hi_z_face);
500 AdvectionSrcForMomWrapper_N<InterpType_H,CENTERED6,UPWINDALL>(bxx, bxy, bxz,
501 rho_u_rhs, rho_v_rhs, rho_w_rhs,
502 rho_u, rho_v, rho_w, u, v,
w,
503 cellSizeInv, stretched_dz_d,
504 mf_mx, mf_ux_inv, mf_vx_inv,
505 mf_my, mf_uy_inv, mf_vy_inv,
506 upw_frac_h, upw_frac_v,
508 lo_z_face, hi_z_face);
510 AdvectionSrcForMomWrapper_N<InterpType_H,WENO3,UPWINDALL>(bxx, bxy, bxz,
511 rho_u_rhs, rho_v_rhs, rho_w_rhs,
512 rho_u, rho_v, rho_w, u, v,
w,
513 cellSizeInv, stretched_dz_d,
514 mf_mx, mf_ux_inv, mf_vx_inv,
515 mf_my, mf_uy_inv, mf_vy_inv,
516 upw_frac_h, upw_frac_v,
518 lo_z_face, hi_z_face);
520 AdvectionSrcForMomWrapper_N<InterpType_H,WENO_Z3,UPWINDALL>(bxx, bxy, bxz,
521 rho_u_rhs, rho_v_rhs, rho_w_rhs,
522 rho_u, rho_v, rho_w, u, v,
w,
523 cellSizeInv, stretched_dz_d,
524 mf_mx, mf_ux_inv, mf_vx_inv,
525 mf_my, mf_uy_inv, mf_vy_inv,
526 upw_frac_h, upw_frac_v,
528 lo_z_face, hi_z_face);
530 AdvectionSrcForMomWrapper_N<InterpType_H,WENO_MZQ3,UPWINDALL>(bxx, bxy, bxz,
531 rho_u_rhs, rho_v_rhs, rho_w_rhs,
532 rho_u, rho_v, rho_w, u, v,
w,
533 cellSizeInv, stretched_dz_d,
534 mf_mx, mf_ux_inv, mf_vx_inv,
535 mf_my, mf_uy_inv, mf_vy_inv,
536 upw_frac_h, upw_frac_v,
538 lo_z_face, hi_z_face);
540 AdvectionSrcForMomWrapper_N<InterpType_H,WENO5,UPWINDALL>(bxx, bxy, bxz,
541 rho_u_rhs, rho_v_rhs, rho_w_rhs,
542 rho_u, rho_v, rho_w, u, v,
w,
543 cellSizeInv, stretched_dz_d,
544 mf_mx, mf_ux_inv, mf_vx_inv,
545 mf_my, mf_uy_inv, mf_vy_inv,
546 upw_frac_h, upw_frac_v,
548 lo_z_face, hi_z_face);
550 AdvectionSrcForMomWrapper_N<InterpType_H,WENO_Z5,UPWINDALL>(bxx, bxy, bxz,
551 rho_u_rhs, rho_v_rhs, rho_w_rhs,
552 rho_u, rho_v, rho_w, u, v,
w,
553 cellSizeInv, stretched_dz_d,
554 mf_mx, mf_ux_inv, mf_vx_inv,
555 mf_my, mf_uy_inv, mf_vy_inv,
556 upw_frac_h, upw_frac_v,
558 lo_z_face, hi_z_face);
560 AdvectionSrcForMomWrapper_N<InterpType_H,WENO7,UPWINDALL>(bxx, bxy, bxz,
561 rho_u_rhs, rho_v_rhs, rho_w_rhs,
562 rho_u, rho_v, rho_w, u, v,
w,
563 cellSizeInv, stretched_dz_d,
564 mf_mx, mf_ux_inv, mf_vx_inv,
565 mf_my, mf_uy_inv, mf_vy_inv,
566 upw_frac_h, upw_frac_v,
568 lo_z_face, hi_z_face);
570 AdvectionSrcForMomWrapper_N<InterpType_H,WENO_Z7,UPWINDALL>(bxx, bxy, bxz,
571 rho_u_rhs, rho_v_rhs, rho_w_rhs,
572 rho_u, rho_v, rho_w, u, v,
w,
573 cellSizeInv, stretched_dz_d,
574 mf_mx, mf_ux_inv, mf_vx_inv,
575 mf_my, mf_uy_inv, mf_vy_inv,
576 upw_frac_h, upw_frac_v,
578 lo_z_face, hi_z_face);
AdvType
Definition: ERF_IndexDefines.H:352
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);})
constexpr amrex::Real two
Definition: ERF_NumericalConstants.H:38
constexpr amrex::Real one
Definition: ERF_NumericalConstants.H:37
constexpr amrex::Real zero
Definition: ERF_NumericalConstants.H:36
constexpr amrex::Real myhalf
Definition: ERF_NumericalConstants.H:41
Real w
Definition: ERF_Plotfile2DInterpolator.cpp:23
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")