ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_AdvectionSrcForScalars.H File Reference
Include dependency graph for ERF_AdvectionSrcForScalars.H:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

template<typename InterpType_H , typename InterpType_V >
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)
 
template<typename InterpType_H >
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)
 

Function Documentation

◆ AdvectionSrcForScalarsVert()

template<typename InterpType_H >
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 
)

Wrapper function for templating the vertical advective tendency w/ spatial order > two

Template Parameters
InterpType_Hhorizontal interpolation type
Parameters
[in]bxcell-centered box over which scalar fluxes are computed
[in]cons_indexconserved scalar component to update
[out]flx_arrflux arrays for the selected scalar component
[in]cell_primprimitive scalar variables
[in]avg_xmomx-component of time-averaged momentum
[in]avg_ymomy-component of time-averaged momentum
[in]avg_zmomz-component of time-averaged momentum
[in]horiz_upw_frachorizontal upwind blending fraction
[in]vert_upw_fracvertical upwind blending fraction
[in]vert_adv_typevertical advection stencil
89 {
90  switch(vert_adv_type) {
92  AdvectionSrcForScalarsWrapper<InterpType_H,CENTERED2>(bx, cons_index,
93  flx_arr, cell_prim,
94  avg_xmom, avg_ymom, avg_zmom,
95  horiz_upw_frac, vert_upw_frac);
96  break;
98  AdvectionSrcForScalarsWrapper<InterpType_H,UPWIND3>(bx, cons_index,
99  flx_arr, cell_prim,
100  avg_xmom, avg_ymom, avg_zmom,
101  horiz_upw_frac, vert_upw_frac);
102  break;
104  AdvectionSrcForScalarsWrapper<InterpType_H,UPWIND3SL>(bx, cons_index,
105  flx_arr, cell_prim,
106  avg_xmom, avg_ymom, avg_zmom,
107  horiz_upw_frac, vert_upw_frac);
108  break;
110  AdvectionSrcForScalarsWrapper<InterpType_H,CENTERED4>(bx, cons_index,
111  flx_arr, cell_prim,
112  avg_xmom, avg_ymom, avg_zmom,
113  horiz_upw_frac, vert_upw_frac);
114  break;
115  case AdvType::Upwind_5th:
116  AdvectionSrcForScalarsWrapper<InterpType_H,UPWIND5>(bx, cons_index,
117  flx_arr, cell_prim,
118  avg_xmom, avg_ymom, avg_zmom,
119  horiz_upw_frac, vert_upw_frac);
120  break;
122  AdvectionSrcForScalarsWrapper<InterpType_H,CENTERED6>(bx, cons_index,
123  flx_arr, cell_prim,
124  avg_xmom, avg_ymom, avg_zmom,
125  horiz_upw_frac, vert_upw_frac);
126  break;
127  default:
128  AMREX_ASSERT_WITH_MESSAGE(false, "Unknown vertical advection scheme!");
129  }
130 }
@ Upwind_3rd_SL
@ Centered_4th
@ Centered_6th
@ Centered_2nd
AMREX_ASSERT_WITH_MESSAGE(wbar_cutoff_min > wbar_cutoff_max, "ERROR: wbar_cutoff_min < wbar_cutoff_max")
Here is the call graph for this function:

◆ AdvectionSrcForScalarsWrapper()

template<typename InterpType_H , typename InterpType_V >
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 
)

Wrapper function for computing the advective tendency w/ spatial order > two

Template Parameters
InterpType_Hhorizontal interpolation type
InterpType_Vvertical interpolation type
Parameters
[in]bxcell-centered box over which scalar fluxes are computed
[in]cons_indexconserved scalar component to update
[out]flx_arrflux arrays for the selected scalar component
[in]cell_primprimitive scalar variables
[in]avg_xmomx-component of time-averaged momentum
[in]avg_ymomy-component of time-averaged momentum
[in]avg_zmomz-component of time-averaged momentum
[in]horiz_upw_frachorizontal upwind blending fraction
[in]vert_upw_fracvertical upwind blending fraction
30 {
31  // Instantiate structs for vert/horiz interp
32  InterpType_H interp_prim_h(cell_prim, horiz_upw_frac);
33  InterpType_V interp_prim_v(cell_prim, vert_upw_frac);
34 
35  const amrex::Box xbx = amrex::surroundingNodes(bx,0);
36  const amrex::Box ybx = amrex::surroundingNodes(bx,1);
37  const amrex::Box zbx = amrex::surroundingNodes(bx,2);
38 
39  amrex::ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept
40  {
41  const int prim_index = cons_index - 1;
42  amrex::Real interpx(zero);
43  interp_prim_h.InterpolateInX(i,j,k,prim_index,interpx,avg_xmom(i ,j ,k ));
44  (flx_arr[0])(i,j,k) = avg_xmom(i,j,k) * interpx;
45  });
46  amrex::ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept
47  {
48  const int prim_index = cons_index - 1;
49  amrex::Real interpy(zero);
50  interp_prim_h.InterpolateInY(i,j,k,prim_index,interpy,avg_ymom(i ,j ,k ));
51  (flx_arr[1])(i,j,k) = avg_ymom(i,j,k) * interpy;
52  });
53  amrex::ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept
54  {
55  const int prim_index = cons_index - 1;
56  amrex::Real interpz(zero);
57  interp_prim_v.InterpolateInZ(i,j,k,prim_index,interpz,avg_zmom(i ,j ,k ));
58  (flx_arr[2])(i,j,k) = avg_zmom(i,j,k) * interpz;
59  });
60 }
constexpr amrex::Real zero
Definition: ERF_Constants.H:8
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);})
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Here is the call graph for this function: