ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
ERF_Advection.H
Go to the documentation of this file.
1 #ifndef ERF_ADVECTION_H_
2 #define ERF_ADVECTION_H_
3 
4 #include "AMReX.H"
5 #include "AMReX_MultiFab.H"
6 #include "AMReX_iMultiFab.H"
7 #include "AMReX_BCRec.H"
8 #include "AMReX_YAFluxRegister.H"
9 
10 #include "ERF_DataStruct.H"
11 #include "ERF_IndexDefines.H"
12 #include "ERF_SurfaceLayer.H"
13 #include "ERF_EB.H"
14 
15 /** Compute advection tendency for density and potential temperature */
16 void AdvectionSrcForRho (const amrex::Box& bx,
17  const amrex::Array4<amrex::Real>& src,
18  const amrex::Array4<const amrex::Real>& rho_u, // These are being used
19  const amrex::Array4<const amrex::Real>& rho_v, // to define the fluxes
20  const amrex::Array4<const amrex::Real>& omega,
21  const amrex::Array4< amrex::Real>& avg_xmom, // These are being defined
22  const amrex::Array4< amrex::Real>& avg_ymom, // from the rho fluxes
23  const amrex::Array4< amrex::Real>& avg_zmom,
24  const amrex::Array4<const amrex::Real>& ax_arr,
25  const amrex::Array4<const amrex::Real>& ay_arr,
26  const amrex::Array4<const amrex::Real>& az_arr,
27  const amrex::Array4<const amrex::Real>& detJ,
28  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
29  const amrex::Array4<const amrex::Real>& mf_mx,
30  const amrex::Array4<const amrex::Real>& mf_my,
31  const amrex::Array4<const amrex::Real>& mf_uy,
32  const amrex::Array4<const amrex::Real>& mf_vx,
33  const amrex::GpuArray<const amrex::Array4<amrex::Real>, AMREX_SPACEDIM>& flx_arr,
34  const bool fixed_rho);
35 
36 /** Compute advection tendency for all scalars other than density and potential temperature */
37 void AdvectionSrcForScalars (const amrex::Box& bx,
38  const int icomp, const int ncomp,
39  const amrex::Array4<const amrex::Real>& avg_xmom,
40  const amrex::Array4<const amrex::Real>& avg_ymom,
41  const amrex::Array4<const amrex::Real>& avg_zmom,
42  const amrex::Array4<const amrex::Real>& cell_prim,
43  const amrex::Array4<amrex::Real>& src,
44  const amrex::Array4<const amrex::Real>& vf_arr,
45  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
46  const amrex::Array4<const amrex::Real>& mf_mx,
47  const amrex::Array4<const amrex::Real>& mf_my,
48  const AdvType horiz_adv_type, const AdvType vert_adv_type,
49  const amrex::Real horiz_upw_frac, const amrex::Real vert_upw_frac,
50  const amrex::GpuArray<const amrex::Array4<amrex::Real>, AMREX_SPACEDIM>& flx_arr,
51  const amrex::Box& domain,
52  const amrex::BCRec* bc_ptr_h);
53 
54 /** Compute advection tendencies for all components of momentum */
55 void AdvectionSrcForMom (const amrex::MFIter& mfi,
56  const amrex::Box& bx,
57  const amrex::Box& bxx, const amrex::Box& bxy, const amrex::Box& bxz,
58  const amrex::Vector<amrex::Box>& bxx_grown,
59  const amrex::Vector<amrex::Box>& bxy_grown,
60  const amrex::Vector<amrex::Box>& bxz_grown,
61  const amrex::Array4< amrex::Real>& rho_u_rhs, const amrex::Array4< amrex::Real>& rho_v_rhs,
62  const amrex::Array4< amrex::Real>& rho_w_rhs,
63  const amrex::Array4<const amrex::Real>& rho,
64  const amrex::Array4<const amrex::Real>& u , const amrex::Array4<const amrex::Real>& v,
65  const amrex::Array4<const amrex::Real>& w ,
66  const amrex::Array4<const amrex::Real>& rho_u , const amrex::Array4<const amrex::Real>& rho_v,
67  const amrex::Array4<const amrex::Real>& Omega ,
68  const amrex::Array4<const amrex::Real>& z_nd,
69  const amrex::Array4<const amrex::Real>& ax,
70  const amrex::Array4<const amrex::Real>& ay,
71  const amrex::Array4<const amrex::Real>& az,
72  const amrex::Array4<const amrex::Real>& detJ,
73  amrex::Gpu::DeviceVector<amrex::Real>& stretched_dz_d,
74  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
75  const amrex::Array4<const amrex::Real>& mf_mx,
76  const amrex::Array4<const amrex::Real>& mf_ux,
77  const amrex::Array4<const amrex::Real>& mf_vx,
78  const amrex::Array4<const amrex::Real>& mf_my,
79  const amrex::Array4<const amrex::Real>& mf_uy,
80  const amrex::Array4<const amrex::Real>& mf_vy,
81  const AdvType horiz_adv_type, const AdvType vert_adv_type,
82  const amrex::Real horiz_upw_frac, const amrex::Real vert_upw_frac,
83  MeshType& mesh_type, TerrainType& terrain_type,
84  const eb_& ebfact,
85  amrex::GpuArray<amrex::Array4<amrex::Real>, AMREX_SPACEDIM>& flx_u_arr,
86  amrex::GpuArray<amrex::Array4<amrex::Real>, AMREX_SPACEDIM>& flx_v_arr,
87  amrex::GpuArray<amrex::Array4<amrex::Real>, AMREX_SPACEDIM>& flx_w_arr,
88  const amrex::Vector<amrex::iMultiFab>& physbnd_mask,
89  const bool already_on_centroids,
90  const int lo_z_face, const int hi_z_face,
91  const amrex::Box& domain,
92  const amrex::BCRec* bc_ptr_h);
93 
94 /** Compute advection tendencies for all components of momentum when dz is constant */
96  const amrex::Box& bxx, const amrex::Box& bxy, const amrex::Box& bxz,
97  const amrex::Array4< amrex::Real>& rho_u_rhs, const amrex::Array4< amrex::Real>& rho_v_rhs,
98  const amrex::Array4< amrex::Real>& rho_w_rhs,
99  const amrex::Array4<const amrex::Real>& u , const amrex::Array4<const amrex::Real>& v,
100  const amrex::Array4<const amrex::Real>& w ,
101  const amrex::Array4<const amrex::Real>& rho_u , const amrex::Array4<const amrex::Real>& rho_v,
102  const amrex::Array4<const amrex::Real>& Omega ,
103  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
104  const amrex::Gpu::DeviceVector<amrex::Real>& stretched_dz_d,
105  const amrex::Array4<const amrex::Real>& mf_mx,
106  const amrex::Array4<const amrex::Real>& mf_ux,
107  const amrex::Array4<const amrex::Real>& mf_vx,
108  const amrex::Array4<const amrex::Real>& mf_my,
109  const amrex::Array4<const amrex::Real>& mf_uy,
110  const amrex::Array4<const amrex::Real>& mf_vy,
111  const AdvType horiz_adv_type, const AdvType vert_adv_type,
112  const amrex::Real horiz_upw_frac, const amrex::Real vert_upw_frac,
113  TerrainType& terrain_type,
114  const int lo_z_face, const int hi_z_face);
115 
116 /** Compute advection tendencies for all components of momentum when dz is stretched */
118  const amrex::Box& bxx, const amrex::Box& bxy, const amrex::Box& bxz,
119  const amrex::Array4< amrex::Real>& rho_u_rhs, const amrex::Array4< amrex::Real>& rho_v_rhs,
120  const amrex::Array4< amrex::Real>& rho_w_rhs,
121  const amrex::Array4<const amrex::Real>& u , const amrex::Array4<const amrex::Real>& v,
122  const amrex::Array4<const amrex::Real>& w ,
123  const amrex::Array4<const amrex::Real>& rho_u , const amrex::Array4<const amrex::Real>& rho_v,
124  const amrex::Array4<const amrex::Real>& Omega ,
125  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
126  const amrex::Gpu::DeviceVector<amrex::Real>& stretched_dz_d,
127  const amrex::Array4<const amrex::Real>& mf_mx,
128  const amrex::Array4<const amrex::Real>& mf_ux,
129  const amrex::Array4<const amrex::Real>& mf_vx,
130  const amrex::Array4<const amrex::Real>& mf_my,
131  const amrex::Array4<const amrex::Real>& mf_uy,
132  const amrex::Array4<const amrex::Real>& mf_vy,
133  const AdvType horiz_adv_type, const AdvType vert_adv_type,
134  const amrex::Real horiz_upw_frac, const amrex::Real vert_upw_frac,
135  const int lo_z_face, const int hi_z_face);
136 
137 /** Compute advection tendencies for all components of momentum for TERRAIN-FITTED COORDS only */
139  const amrex::Box& bxx, const amrex::Box& bxy, const amrex::Box& bxz,
140  const amrex::Array4< amrex::Real>& rho_u_rhs, const amrex::Array4< amrex::Real>& rho_v_rhs,
141  const amrex::Array4< amrex::Real>& rho_w_rhs,
142  const amrex::Array4<const amrex::Real>& u , const amrex::Array4<const amrex::Real>& v,
143  const amrex::Array4<const amrex::Real>& w ,
144  const amrex::Array4<const amrex::Real>& rho_u , const amrex::Array4<const amrex::Real>& rho_v,
145  const amrex::Array4<const amrex::Real>& Omega ,
146  const amrex::Array4<const amrex::Real>& z_nd,
147  const amrex::Array4<const amrex::Real>& ax,
148  const amrex::Array4<const amrex::Real>& ay,
149  const amrex::Array4<const amrex::Real>& az,
150  const amrex::Array4<const amrex::Real>& detJ,
151  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
152  const amrex::Array4<const amrex::Real>& mf_mx,
153  const amrex::Array4<const amrex::Real>& mf_ux,
154  const amrex::Array4<const amrex::Real>& mf_vx,
155  const amrex::Array4<const amrex::Real>& mf_my,
156  const amrex::Array4<const amrex::Real>& mf_uy,
157  const amrex::Array4<const amrex::Real>& mf_vy,
158  const AdvType horiz_adv_type, const AdvType vert_adv_type,
159  const amrex::Real horiz_upw_frac, const amrex::Real vert_upw_frac,
160  const int lo_z_face, const int hi_z_face);
161 
162 /** Compute advection tendencies for all components of momentum when using EB for terrain */
163 void AdvectionSrcForMom_EB (const amrex::MFIter& mfi,
164  const amrex::Box& bxx, const amrex::Box& bxy, const amrex::Box& bxz,
165  const amrex::Vector<amrex::Box>& bxx_grown,
166  const amrex::Vector<amrex::Box>& bxy_grown,
167  const amrex::Vector<amrex::Box>& bxz_grown,
168  const amrex::Array4< amrex::Real>& rho_u_rhs, const amrex::Array4< amrex::Real>& rho_v_rhs,
169  const amrex::Array4< amrex::Real>& rho_w_rhs,
170  const amrex::Array4<const amrex::Real>& u , const amrex::Array4<const amrex::Real>& v,
171  const amrex::Array4<const amrex::Real>& w ,
172  const amrex::Array4<const amrex::Real>& rho_u , const amrex::Array4<const amrex::Real>& rho_v,
173  const amrex::Array4<const amrex::Real>& Omega ,
174  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
175  const amrex::Array4<const amrex::Real>& mf_mx,
176  const amrex::Array4<const amrex::Real>& mf_ux,
177  const amrex::Array4<const amrex::Real>& mf_vx,
178  const amrex::Array4<const amrex::Real>& mf_my,
179  const amrex::Array4<const amrex::Real>& mf_uy,
180  const amrex::Array4<const amrex::Real>& mf_vy,
181  const AdvType horiz_adv_type, const AdvType vert_adv_type,
182  const amrex::Real horiz_upw_frac, const amrex::Real vert_upw_frac,
183  const eb_& ebfact,
184  amrex::GpuArray<amrex::Array4<amrex::Real>, AMREX_SPACEDIM>& flx_u_arr,
185  amrex::GpuArray<amrex::Array4<amrex::Real>, AMREX_SPACEDIM>& flx_v_arr,
186  amrex::GpuArray<amrex::Array4<amrex::Real>, AMREX_SPACEDIM>& flx_w_arr,
187  const amrex::Vector<amrex::iMultiFab>& physbnd_mask,
188  const bool already_on_centroids,
189  const int lo_z_face, const int hi_z_face,
190  const amrex::Box& domain);
191 
192 /** Compute advection tendencies for all normal components of momentum */
193 void
194 AdvectionSrcForOpenBC_Normal (const amrex::Box& bx,
195  const int& dir,
196  const amrex::Array4< amrex::Real>& rhs_arr,
197  const amrex::Array4<const amrex::Real>& vel_norm_arr,
198  const amrex::Array4<const amrex::Real>& cell_data_arr,
199  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxInv,
200  const bool do_lo=false);
201 
202 /** Compute advection tendencies for u momentum tangent to open bc*/
203 void
204 AdvectionSrcForOpenBC_Tangent_Xmom (const amrex::Box& bxx,
205  const int& dir,
206  const amrex::Array4< amrex::Real>& rho_u_rhs,
207  const amrex::Array4<const amrex::Real>& u,
208  const amrex::Array4<const amrex::Real>& rho_u,
209  const amrex::Array4<const amrex::Real>& rho_v,
210  const amrex::Array4<const amrex::Real>& Omega,
211  const amrex::Array4<const amrex::Real>& ax,
212  const amrex::Array4<const amrex::Real>& az,
213  const amrex::Array4<const amrex::Real>& detJ,
214  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
215  const bool do_lo=false);
216 
217 /** Compute advection tendencies for v momentum tangent to open bc*/
218 void
219 AdvectionSrcForOpenBC_Tangent_Ymom (const amrex::Box& bxy,
220  const int& dir,
221  const amrex::Array4< amrex::Real>& rho_v_rhs,
222  const amrex::Array4<const amrex::Real>& v,
223  const amrex::Array4<const amrex::Real>& rho_u,
224  const amrex::Array4<const amrex::Real>& rho_v,
225  const amrex::Array4<const amrex::Real>& Omega,
226  const amrex::Array4<const amrex::Real>& ay,
227  const amrex::Array4<const amrex::Real>& az,
228  const amrex::Array4<const amrex::Real>& detJ,
229  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
230  const bool do_lo=false);
231 
232 /** Compute advection tendencies for w momentum tangent to open bc*/
233 void
234 AdvectionSrcForOpenBC_Tangent_Zmom (const amrex::Box& bxz,
235  const int& dir,
236  const amrex::Array4< amrex::Real>& rho_w_rhs,
237  const amrex::Array4<const amrex::Real>& w,
238  const amrex::Array4<const amrex::Real>& rho_u,
239  const amrex::Array4<const amrex::Real>& rho_v,
240  const amrex::Array4<const amrex::Real>& Omega,
241  const amrex::Array4<const amrex::Real>& ax,
242  const amrex::Array4<const amrex::Real>& ay,
243  const amrex::Array4<const amrex::Real>& az,
244  const amrex::Array4<const amrex::Real>& detJ,
245  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
246  const int domhi_z,
247  const bool do_lo=false);
248 
249 /** Compute advection tendencies for cons tangential to BC (2nd order)*/
250 void
252  const int& dir,
253  const int& icomp,
254  const int& ncomp,
255  const amrex::Array4< amrex::Real>& cell_rhs,
256  const amrex::Array4<const amrex::Real>& cell_prim,
257  const amrex::Array4<const amrex::Real>& avg_xmom,
258  const amrex::Array4<const amrex::Real>& avg_ymom,
259  const amrex::Array4<const amrex::Real>& avg_zmom,
260  const amrex::Array4<const amrex::Real>& detJ,
261  const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
262  const bool do_lo=false);
263 
264 /** Compute advection tendencies in normal dir for vars tangent to open bc */
265 AMREX_GPU_HOST_DEVICE
266 AMREX_FORCE_INLINE
267 amrex::Real
269  const int& j,
270  const int& k,
271  const int& nprim,
272  const int& dir,
273  const amrex::Array4<const amrex::Real>& prim_tang_arr,
274  const amrex::Array4<const amrex::Real>& mom_norm_arr,
275  const amrex::Real& dxInv,
276  const bool do_lo=false);
277 
278 AMREX_GPU_HOST_DEVICE
279 AMREX_FORCE_INLINE
280 AdvType
281 EfficientAdvType (int nrk, AdvType adv_type)
282 {
283  AdvType eff_adv_type;
284 
285  if (nrk == 0) {
286 
287  eff_adv_type = AdvType::Centered_2nd;
288 
289  } else if (nrk == 1) {
290 
291  if ( (adv_type == AdvType::Centered_2nd) ||
292  (adv_type == AdvType::Upwind_3rd) ||
293  (adv_type == AdvType::Centered_4th) ||
294  (adv_type == AdvType::Weno_3) ||
295  (adv_type == AdvType::Weno_3Z) ||
296  (adv_type == AdvType::Weno_3MZQ) )
297  {
298  eff_adv_type = AdvType::Centered_2nd;
299 
300  } else if ( (adv_type == AdvType::Upwind_5th) ||
301  (adv_type == AdvType::Weno_5) ||
302  (adv_type == AdvType::Weno_5Z) )
303  {
304  eff_adv_type = AdvType::Upwind_3rd;
305 
306  } else { // (adv_type == AdvType::Centered_6th)
307 
308  eff_adv_type = AdvType::Centered_4th;
309  }
310 
311  } else {
312 
313  eff_adv_type = adv_type;
314  }
315 
316  return(eff_adv_type);
317 }
318 #endif
void AdvectionSrcForRho(const amrex::Box &bx, const amrex::Array4< amrex::Real > &src, const amrex::Array4< const amrex::Real > &rho_u, const amrex::Array4< const amrex::Real > &rho_v, const amrex::Array4< const amrex::Real > &omega, const amrex::Array4< amrex::Real > &avg_xmom, const amrex::Array4< amrex::Real > &avg_ymom, const amrex::Array4< amrex::Real > &avg_zmom, const amrex::Array4< const amrex::Real > &ax_arr, const amrex::Array4< const amrex::Real > &ay_arr, const amrex::Array4< const amrex::Real > &az_arr, const amrex::Array4< const amrex::Real > &detJ, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_my, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_vx, const amrex::GpuArray< const amrex::Array4< amrex::Real >, AMREX_SPACEDIM > &flx_arr, const bool fixed_rho)
void AdvectionSrcForMom_EB(const amrex::MFIter &mfi, const amrex::Box &bxx, const amrex::Box &bxy, const amrex::Box &bxz, const amrex::Vector< amrex::Box > &bxx_grown, const amrex::Vector< amrex::Box > &bxy_grown, const amrex::Vector< amrex::Box > &bxz_grown, const amrex::Array4< amrex::Real > &rho_u_rhs, const amrex::Array4< amrex::Real > &rho_v_rhs, const amrex::Array4< amrex::Real > &rho_w_rhs, const amrex::Array4< const amrex::Real > &u, const amrex::Array4< const amrex::Real > &v, const amrex::Array4< const amrex::Real > &w, const amrex::Array4< const amrex::Real > &rho_u, const amrex::Array4< const amrex::Real > &rho_v, const amrex::Array4< const amrex::Real > &Omega, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_ux, const amrex::Array4< const amrex::Real > &mf_vx, const amrex::Array4< const amrex::Real > &mf_my, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_vy, const AdvType horiz_adv_type, const AdvType vert_adv_type, const amrex::Real horiz_upw_frac, const amrex::Real vert_upw_frac, const eb_ &ebfact, amrex::GpuArray< amrex::Array4< amrex::Real >, AMREX_SPACEDIM > &flx_u_arr, amrex::GpuArray< amrex::Array4< amrex::Real >, AMREX_SPACEDIM > &flx_v_arr, amrex::GpuArray< amrex::Array4< amrex::Real >, AMREX_SPACEDIM > &flx_w_arr, const amrex::Vector< amrex::iMultiFab > &physbnd_mask, const bool already_on_centroids, const int lo_z_face, const int hi_z_face, const amrex::Box &domain)
void AdvectionSrcForMom_StretchedDz(const amrex::Box &bxx, const amrex::Box &bxy, const amrex::Box &bxz, const amrex::Array4< amrex::Real > &rho_u_rhs, const amrex::Array4< amrex::Real > &rho_v_rhs, const amrex::Array4< amrex::Real > &rho_w_rhs, const amrex::Array4< const amrex::Real > &u, const amrex::Array4< const amrex::Real > &v, const amrex::Array4< const amrex::Real > &w, const amrex::Array4< const amrex::Real > &rho_u, const amrex::Array4< const amrex::Real > &rho_v, const amrex::Array4< const amrex::Real > &Omega, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Gpu::DeviceVector< amrex::Real > &stretched_dz_d, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_ux, const amrex::Array4< const amrex::Real > &mf_vx, const amrex::Array4< const amrex::Real > &mf_my, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_vy, const AdvType horiz_adv_type, const AdvType vert_adv_type, const amrex::Real horiz_upw_frac, const amrex::Real vert_upw_frac, const int lo_z_face, const int hi_z_face)
void AdvectionSrcForOpenBC_Tangent_Ymom(const amrex::Box &bxy, const int &dir, const amrex::Array4< amrex::Real > &rho_v_rhs, const amrex::Array4< const amrex::Real > &v, const amrex::Array4< const amrex::Real > &rho_u, const amrex::Array4< const amrex::Real > &rho_v, const amrex::Array4< const amrex::Real > &Omega, const amrex::Array4< const amrex::Real > &ay, const amrex::Array4< const amrex::Real > &az, const amrex::Array4< const amrex::Real > &detJ, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const bool do_lo=false)
void AdvectionSrcForScalars(const amrex::Box &bx, const int icomp, const int ncomp, 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::Array4< const amrex::Real > &cell_prim, const amrex::Array4< amrex::Real > &src, const amrex::Array4< const amrex::Real > &vf_arr, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_my, const AdvType horiz_adv_type, const AdvType vert_adv_type, const amrex::Real horiz_upw_frac, const amrex::Real vert_upw_frac, const amrex::GpuArray< const amrex::Array4< amrex::Real >, AMREX_SPACEDIM > &flx_arr, const amrex::Box &domain, const amrex::BCRec *bc_ptr_h)
void AdvectionSrcForOpenBC_Tangent_Xmom(const amrex::Box &bxx, const int &dir, const amrex::Array4< amrex::Real > &rho_u_rhs, const amrex::Array4< const amrex::Real > &u, const amrex::Array4< const amrex::Real > &rho_u, const amrex::Array4< const amrex::Real > &rho_v, const amrex::Array4< const amrex::Real > &Omega, const amrex::Array4< const amrex::Real > &ax, const amrex::Array4< const amrex::Real > &az, const amrex::Array4< const amrex::Real > &detJ, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const bool do_lo=false)
void AdvectionSrcForMom_TF(const amrex::Box &bxx, const amrex::Box &bxy, const amrex::Box &bxz, const amrex::Array4< amrex::Real > &rho_u_rhs, const amrex::Array4< amrex::Real > &rho_v_rhs, const amrex::Array4< amrex::Real > &rho_w_rhs, const amrex::Array4< const amrex::Real > &u, const amrex::Array4< const amrex::Real > &v, const amrex::Array4< const amrex::Real > &w, const amrex::Array4< const amrex::Real > &rho_u, const amrex::Array4< const amrex::Real > &rho_v, const amrex::Array4< const amrex::Real > &Omega, const amrex::Array4< const amrex::Real > &z_nd, const amrex::Array4< const amrex::Real > &ax, const amrex::Array4< const amrex::Real > &ay, const amrex::Array4< const amrex::Real > &az, const amrex::Array4< const amrex::Real > &detJ, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_ux, const amrex::Array4< const amrex::Real > &mf_vx, const amrex::Array4< const amrex::Real > &mf_my, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_vy, const AdvType horiz_adv_type, const AdvType vert_adv_type, const amrex::Real horiz_upw_frac, const amrex::Real vert_upw_frac, const int lo_z_face, const int hi_z_face)
void AdvectionSrcForOpenBC_Normal(const amrex::Box &bx, const int &dir, const amrex::Array4< amrex::Real > &rhs_arr, const amrex::Array4< const amrex::Real > &vel_norm_arr, const amrex::Array4< const amrex::Real > &cell_data_arr, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxInv, const bool do_lo=false)
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real AdvectionSrcForOpenBC_Tangent(const int &i, const int &j, const int &k, const int &nprim, const int &dir, const amrex::Array4< const amrex::Real > &prim_tang_arr, const amrex::Array4< const amrex::Real > &mom_norm_arr, const amrex::Real &dxInv, const bool do_lo=false)
void AdvectionSrcForMom(const amrex::MFIter &mfi, const amrex::Box &bx, const amrex::Box &bxx, const amrex::Box &bxy, const amrex::Box &bxz, const amrex::Vector< amrex::Box > &bxx_grown, const amrex::Vector< amrex::Box > &bxy_grown, const amrex::Vector< amrex::Box > &bxz_grown, const amrex::Array4< amrex::Real > &rho_u_rhs, const amrex::Array4< amrex::Real > &rho_v_rhs, const amrex::Array4< amrex::Real > &rho_w_rhs, const amrex::Array4< const amrex::Real > &rho, const amrex::Array4< const amrex::Real > &u, const amrex::Array4< const amrex::Real > &v, const amrex::Array4< const amrex::Real > &w, const amrex::Array4< const amrex::Real > &rho_u, const amrex::Array4< const amrex::Real > &rho_v, const amrex::Array4< const amrex::Real > &Omega, const amrex::Array4< const amrex::Real > &z_nd, const amrex::Array4< const amrex::Real > &ax, const amrex::Array4< const amrex::Real > &ay, const amrex::Array4< const amrex::Real > &az, const amrex::Array4< const amrex::Real > &detJ, amrex::Gpu::DeviceVector< amrex::Real > &stretched_dz_d, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_ux, const amrex::Array4< const amrex::Real > &mf_vx, const amrex::Array4< const amrex::Real > &mf_my, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_vy, const AdvType horiz_adv_type, const AdvType vert_adv_type, const amrex::Real horiz_upw_frac, const amrex::Real vert_upw_frac, MeshType &mesh_type, TerrainType &terrain_type, const eb_ &ebfact, amrex::GpuArray< amrex::Array4< amrex::Real >, AMREX_SPACEDIM > &flx_u_arr, amrex::GpuArray< amrex::Array4< amrex::Real >, AMREX_SPACEDIM > &flx_v_arr, amrex::GpuArray< amrex::Array4< amrex::Real >, AMREX_SPACEDIM > &flx_w_arr, const amrex::Vector< amrex::iMultiFab > &physbnd_mask, const bool already_on_centroids, const int lo_z_face, const int hi_z_face, const amrex::Box &domain, const amrex::BCRec *bc_ptr_h)
void AdvectionSrcForOpenBC_Tangent_Cons(const amrex::Box &bx, const int &dir, const int &icomp, const int &ncomp, const amrex::Array4< amrex::Real > &cell_rhs, 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::Array4< const amrex::Real > &detJ, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const bool do_lo=false)
void AdvectionSrcForOpenBC_Tangent_Zmom(const amrex::Box &bxz, const int &dir, const amrex::Array4< amrex::Real > &rho_w_rhs, const amrex::Array4< const amrex::Real > &w, const amrex::Array4< const amrex::Real > &rho_u, const amrex::Array4< const amrex::Real > &rho_v, const amrex::Array4< const amrex::Real > &Omega, const amrex::Array4< const amrex::Real > &ax, const amrex::Array4< const amrex::Real > &ay, const amrex::Array4< const amrex::Real > &az, const amrex::Array4< const amrex::Real > &detJ, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const int domhi_z, const bool do_lo=false)
void AdvectionSrcForMom_ConstantDz(const amrex::Box &bxx, const amrex::Box &bxy, const amrex::Box &bxz, const amrex::Array4< amrex::Real > &rho_u_rhs, const amrex::Array4< amrex::Real > &rho_v_rhs, const amrex::Array4< amrex::Real > &rho_w_rhs, const amrex::Array4< const amrex::Real > &u, const amrex::Array4< const amrex::Real > &v, const amrex::Array4< const amrex::Real > &w, const amrex::Array4< const amrex::Real > &rho_u, const amrex::Array4< const amrex::Real > &rho_v, const amrex::Array4< const amrex::Real > &Omega, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Gpu::DeviceVector< amrex::Real > &stretched_dz_d, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_ux, const amrex::Array4< const amrex::Real > &mf_vx, const amrex::Array4< const amrex::Real > &mf_my, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_vy, const AdvType horiz_adv_type, const AdvType vert_adv_type, const amrex::Real horiz_upw_frac, const amrex::Real vert_upw_frac, TerrainType &terrain_type, const int lo_z_face, const int hi_z_face)
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE AdvType EfficientAdvType(int nrk, AdvType adv_type)
Definition: ERF_Advection.H:281
AdvType
Definition: ERF_IndexDefines.H:221
@ Centered_4th
@ Centered_2nd
Definition: ERF_EB.H:13
@ rho
Definition: ERF_Kessler.H:22
@ omega
Definition: ERF_Morrison.H:53