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,
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);
29 const int prim_index = cons_index - 1;
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;
36 const int prim_index = cons_index - 1;
38 interp_prim_h.InterpolateInY(i,j,k,prim_index,interpy,avg_ymom(i ,j ,k ));
39 (flx_arr[1])(i,j,k) = avg_ymom(i,j,k) * interpy;
43 const int prim_index = cons_index - 1;
45 interp_prim_v.InterpolateInZ(i,j,k,prim_index,interpz,avg_zmom(i ,j ,k ));
46 (flx_arr[2])(i,j,k) = avg_zmom(i,j,k) * interpz;
53 template<
typename InterpType_H>
56 const int& cons_index,
57 const amrex::GpuArray<
const amrex::Array4<amrex::Real>, AMREX_SPACEDIM> flx_arr,
58 const amrex::Array4<const amrex::Real>& cell_prim,
59 const amrex::Array4<const amrex::Real>& avg_xmom,
60 const amrex::Array4<const amrex::Real>& avg_ymom,
61 const amrex::Array4<const amrex::Real>& avg_zmom,
66 switch(vert_adv_type) {
68 AdvectionSrcForScalarsWrapper<InterpType_H,CENTERED2>(bx, cons_index,
70 avg_xmom, avg_ymom, avg_zmom,
71 horiz_upw_frac, vert_upw_frac);
74 AdvectionSrcForScalarsWrapper<InterpType_H,UPWIND3>(bx, cons_index,
76 avg_xmom, avg_ymom, avg_zmom,
77 horiz_upw_frac, vert_upw_frac);
80 AdvectionSrcForScalarsWrapper<InterpType_H,UPWIND3SL>(bx, cons_index,
82 avg_xmom, avg_ymom, avg_zmom,
83 horiz_upw_frac, vert_upw_frac);
86 AdvectionSrcForScalarsWrapper<InterpType_H,CENTERED4>(bx, cons_index,
88 avg_xmom, avg_ymom, avg_zmom,
89 horiz_upw_frac, vert_upw_frac);
92 AdvectionSrcForScalarsWrapper<InterpType_H,UPWIND5>(bx, cons_index,
94 avg_xmom, avg_ymom, avg_zmom,
95 horiz_upw_frac, vert_upw_frac);
98 AdvectionSrcForScalarsWrapper<InterpType_H,CENTERED6>(bx, cons_index,
100 avg_xmom, avg_ymom, avg_zmom,
101 horiz_upw_frac, vert_upw_frac);
104 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:55
AdvType
Definition: ERF_IndexDefines.H:221
ParallelFor(bx, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept { const auto prob_lo=geomdata.ProbLo();const auto dx=geomdata.CellSize();const Real x=(prob_lo[0]+(i+0.5) *dx[0])/mf_m(i, j, 0);const Real z=z_cc(i, j, k);Real L=std::sqrt(std::pow((x - x_c)/x_r, 2)+std::pow((z - z_c)/z_r, 2));if(L<=1.0) { Real dT=T_pert *(std::cos(PI *L)+1.0)/2.0;Real Tbar_hse=p_hse(i, j, k)/(R_d *r_hse(i, j, k));Real theta_perturbed=(Tbar_hse+dT) *std::pow(p_0/p_hse(i, j, k), rdOcp);Real theta_0=(Tbar_hse) *std::pow(p_0/p_hse(i, j, k), rdOcp);if(const_rho) { state_pert(i, j, k, RhoTheta_comp)=r_hse(i, j, k) *(theta_perturbed - theta_0);} else { state_pert(i, j, k, Rho_comp)=getRhoThetagivenP(p_hse(i, j, k))/theta_perturbed - r_hse(i, j, k);} } })
const Box zbx
Definition: ERF_SetupDiff.H:9
const Box xbx
Definition: ERF_SetupDiff.H:7
const Box ybx
Definition: ERF_SetupDiff.H:8
amrex::Real Real
Definition: ERF_ShocInterface.H:19