7 template<
typename InterpType_H,
typename InterpType_V>
10 const int& cons_index,
11 const amrex::GpuArray<
const amrex::Array4<amrex::Real>, AMREX_SPACEDIM> flx_arr,
12 const amrex::Array4<const amrex::Real>& cell_prim,
13 const amrex::Array4<const amrex::Real>& avg_xmom,
14 const amrex::Array4<const amrex::Real>& avg_ymom,
15 const amrex::Array4<const amrex::Real>& avg_zmom,
16 const amrex::Real horiz_upw_frac,
17 const amrex::Real vert_upw_frac)
20 InterpType_H interp_prim_h(cell_prim, horiz_upw_frac);
21 InterpType_V interp_prim_v(cell_prim, vert_upw_frac);
23 const amrex::Box
xbx = amrex::surroundingNodes(bx,0);
24 const amrex::Box
ybx = amrex::surroundingNodes(bx,1);
25 const amrex::Box
zbx = amrex::surroundingNodes(bx,2);
27 amrex::ParallelFor(
xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
29 const int prim_index = cons_index - 1;
30 amrex::Real interpx(0.);
31 interp_prim_h.InterpolateInX(i,j,k,prim_index,interpx,avg_xmom(i ,j ,k ));
32 (flx_arr[0])(i,j,k) = avg_xmom(i,j,k) * interpx;
34 amrex::ParallelFor(
ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
36 const int prim_index = cons_index - 1;
37 amrex::Real interpy(0.);
38 interp_prim_h.InterpolateInY(i,j,k,prim_index,interpy,avg_ymom(i ,j ,k ));
40 (flx_arr[1])(i,j,k) = avg_ymom(i,j,k) * interpy;
42 amrex::ParallelFor(
zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
44 const int prim_index = cons_index - 1;
45 amrex::Real interpz(0.);
46 interp_prim_v.InterpolateInZ(i,j,k,prim_index,interpz,avg_zmom(i ,j ,k ));
47 (flx_arr[2])(i,j,k) = avg_zmom(i,j,k) * interpz;
54 template<
typename InterpType_H>
57 const int& cons_index,
58 const amrex::GpuArray<
const amrex::Array4<amrex::Real>, AMREX_SPACEDIM> flx_arr,
59 const amrex::Array4<const amrex::Real>& cell_prim,
60 const amrex::Array4<const amrex::Real>& avg_xmom,
61 const amrex::Array4<const amrex::Real>& avg_ymom,
62 const amrex::Array4<const amrex::Real>& avg_zmom,
63 const amrex::Real horiz_upw_frac,
64 const amrex::Real vert_upw_frac,
67 switch(vert_adv_type) {
69 AdvectionSrcForScalarsWrapper<InterpType_H,CENTERED2>(bx, cons_index,
71 avg_xmom, avg_ymom, avg_zmom,
72 horiz_upw_frac, vert_upw_frac);
75 AdvectionSrcForScalarsWrapper<InterpType_H,UPWIND3>(bx, cons_index,
77 avg_xmom, avg_ymom, avg_zmom,
78 horiz_upw_frac, vert_upw_frac);
81 AdvectionSrcForScalarsWrapper<InterpType_H,CENTERED4>(bx, cons_index,
83 avg_xmom, avg_ymom, avg_zmom,
84 horiz_upw_frac, vert_upw_frac);
87 AdvectionSrcForScalarsWrapper<InterpType_H,UPWIND5>(bx, cons_index,
89 avg_xmom, avg_ymom, avg_zmom,
90 horiz_upw_frac, vert_upw_frac);
93 AdvectionSrcForScalarsWrapper<InterpType_H,CENTERED6>(bx, cons_index,
95 avg_xmom, avg_ymom, avg_zmom,
96 horiz_upw_frac, vert_upw_frac);
99 AMREX_ASSERT_WITH_MESSAGE(
false,
"Unknown vertical advection scheme!");
void AdvectionSrcForScalarsWrapper(const amrex::Box &bx, const int &cons_index, const amrex::GpuArray< const amrex::Array4< amrex::Real >, AMREX_SPACEDIM > flx_arr, const amrex::Array4< const amrex::Real > &cell_prim, const amrex::Array4< const amrex::Real > &avg_xmom, const amrex::Array4< const amrex::Real > &avg_ymom, const amrex::Array4< const amrex::Real > &avg_zmom, const amrex::Real horiz_upw_frac, const amrex::Real vert_upw_frac)
Definition: ERF_AdvectionSrcForScalars.H:9
void AdvectionSrcForScalarsVert(const amrex::Box &bx, const int &cons_index, const amrex::GpuArray< const amrex::Array4< amrex::Real >, AMREX_SPACEDIM > flx_arr, const amrex::Array4< const amrex::Real > &cell_prim, const amrex::Array4< const amrex::Real > &avg_xmom, const amrex::Array4< const amrex::Real > &avg_ymom, const amrex::Array4< const amrex::Real > &avg_zmom, const amrex::Real horiz_upw_frac, const amrex::Real vert_upw_frac, const AdvType vert_adv_type)
Definition: ERF_AdvectionSrcForScalars.H:56
const Box zbx
Definition: ERF_DiffSetup.H:23
const Box xbx
Definition: ERF_DiffSetup.H:21
const Box ybx
Definition: ERF_DiffSetup.H:22
AdvType
Definition: ERF_IndexDefines.H:221