ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
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 > 2.

66 {
67  switch(vert_adv_type) {
69  AdvectionSrcForScalarsWrapper<InterpType_H,CENTERED2>(bx, cons_index,
70  flx_arr, cell_prim,
71  avg_xmom, avg_ymom, avg_zmom,
72  horiz_upw_frac, vert_upw_frac);
73  break;
75  AdvectionSrcForScalarsWrapper<InterpType_H,UPWIND3>(bx, cons_index,
76  flx_arr, cell_prim,
77  avg_xmom, avg_ymom, avg_zmom,
78  horiz_upw_frac, vert_upw_frac);
79  break;
81  AdvectionSrcForScalarsWrapper<InterpType_H,CENTERED4>(bx, cons_index,
82  flx_arr, cell_prim,
83  avg_xmom, avg_ymom, avg_zmom,
84  horiz_upw_frac, vert_upw_frac);
85  break;
87  AdvectionSrcForScalarsWrapper<InterpType_H,UPWIND5>(bx, cons_index,
88  flx_arr, cell_prim,
89  avg_xmom, avg_ymom, avg_zmom,
90  horiz_upw_frac, vert_upw_frac);
91  break;
93  AdvectionSrcForScalarsWrapper<InterpType_H,CENTERED6>(bx, cons_index,
94  flx_arr, cell_prim,
95  avg_xmom, avg_ymom, avg_zmom,
96  horiz_upw_frac, vert_upw_frac);
97  break;
98  default:
99  AMREX_ASSERT_WITH_MESSAGE(false, "Unknown vertical advection scheme!");
100  }
101 }
@ Centered_4th
@ Centered_6th
@ Centered_2nd

◆ 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 > 2.

18 {
19  // Instantiate structs for vert/horiz interp
20  InterpType_H interp_prim_h(cell_prim, horiz_upw_frac);
21  InterpType_V interp_prim_v(cell_prim, vert_upw_frac);
22 
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);
26 
27  amrex::ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept
28  {
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;
33  });
34  amrex::ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept
35  {
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 ));
39 
40  (flx_arr[1])(i,j,k) = avg_ymom(i,j,k) * interpy;
41  });
42  amrex::ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept
43  {
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;
48  });
49 }