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

65 {
66  switch(vert_adv_type) {
68  AdvectionSrcForScalarsWrapper<InterpType_H,CENTERED2>(bx, cons_index,
69  flx_arr, cell_prim,
70  avg_xmom, avg_ymom, avg_zmom,
71  horiz_upw_frac, vert_upw_frac);
72  break;
74  AdvectionSrcForScalarsWrapper<InterpType_H,UPWIND3>(bx, cons_index,
75  flx_arr, cell_prim,
76  avg_xmom, avg_ymom, avg_zmom,
77  horiz_upw_frac, vert_upw_frac);
78  break;
80  AdvectionSrcForScalarsWrapper<InterpType_H,UPWIND3SL>(bx, cons_index,
81  flx_arr, cell_prim,
82  avg_xmom, avg_ymom, avg_zmom,
83  horiz_upw_frac, vert_upw_frac);
84  break;
86  AdvectionSrcForScalarsWrapper<InterpType_H,CENTERED4>(bx, cons_index,
87  flx_arr, cell_prim,
88  avg_xmom, avg_ymom, avg_zmom,
89  horiz_upw_frac, vert_upw_frac);
90  break;
92  AdvectionSrcForScalarsWrapper<InterpType_H,UPWIND5>(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,CENTERED6>(bx, cons_index,
99  flx_arr, cell_prim,
100  avg_xmom, avg_ymom, avg_zmom,
101  horiz_upw_frac, vert_upw_frac);
102  break;
103  default:
104  AMREX_ASSERT_WITH_MESSAGE(false, "Unknown vertical advection scheme!");
105  }
106 }
@ Upwind_3rd_SL
@ 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  (flx_arr[1])(i,j,k) = avg_ymom(i,j,k) * interpy;
40  });
41  amrex::ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept
42  {
43  const int prim_index = cons_index - 1;
44  amrex::Real interpz(0.);
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;
47  });
48 }
const Box zbx
Definition: ERF_DiffSetup.H:23
const Box xbx
Definition: ERF_DiffSetup.H:21
const Box ybx
Definition: ERF_DiffSetup.H:22
amrex::Real Real
Definition: ERF_ShocInterface.H:19