ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_AdvectionSrcForMom.cpp File Reference
#include "AMReX_BCRec.H"
#include "ERF_Advection.H"
#include "ERF_AdvectionSrcForMom_N.H"
#include "ERF_AdvectionSrcForMom_T.H"
#include "ERF_EB.H"
Include dependency graph for ERF_AdvectionSrcForMom.cpp:

Functions

void AdvectionSrcForMom (const MFIter &mfi, const Box &bxx, const Box &bxy, const Box &bxz, const Vector< Box > &bxx_grown, const Vector< Box > &bxy_grown, const Vector< Box > &bxz_grown, const Array4< Real > &rho_u_rhs, const Array4< Real > &rho_v_rhs, const Array4< Real > &rho_w_rhs, const Array4< const Real > &cell_data, const Array4< const Real > &u, const Array4< const Real > &v, const Array4< const Real > &w, const Array4< const Real > &rho_u, const Array4< const Real > &rho_v, const Array4< const Real > &omega, const Array4< const Real > &z_nd, const Array4< const Real > &ax, const Array4< const Real > &ay, const Array4< const Real > &az, const Array4< const Real > &detJ, Gpu::DeviceVector< Real > &stretched_dz_d, const GpuArray< Real, AMREX_SPACEDIM > &cellSizeInv, const Array4< const Real > &mf_mx, const Array4< const Real > &mf_ux, const Array4< const Real > &mf_vx, const Array4< const Real > &mf_my, const Array4< const Real > &mf_uy, const Array4< const Real > &mf_vy, const AdvType horiz_adv_type, const AdvType vert_adv_type, const Real horiz_upw_frac, const Real vert_upw_frac, MeshType &mesh_type, TerrainType &terrain_type, const eb_ &ebfact, GpuArray< Array4< Real >, AMREX_SPACEDIM > &flx_u_arr, GpuArray< Array4< Real >, AMREX_SPACEDIM > &flx_v_arr, GpuArray< Array4< Real >, AMREX_SPACEDIM > &flx_w_arr, const Vector< iMultiFab > &physbnd_mask, const bool already_on_centroids, const int lo_z_face, const int hi_z_face, const Box &domain, const BCRec *bc_ptr_h)
 

Function Documentation

◆ AdvectionSrcForMom()

void AdvectionSrcForMom ( const MFIter &  mfi,
const Box &  bxx,
const Box &  bxy,
const Box &  bxz,
const Vector< Box > &  bxx_grown,
const Vector< Box > &  bxy_grown,
const Vector< Box > &  bxz_grown,
const Array4< Real > &  rho_u_rhs,
const Array4< Real > &  rho_v_rhs,
const Array4< Real > &  rho_w_rhs,
const Array4< const Real > &  cell_data,
const Array4< const Real > &  u,
const Array4< const Real > &  v,
const Array4< const Real > &  w,
const Array4< const Real > &  rho_u,
const Array4< const Real > &  rho_v,
const Array4< const Real > &  omega,
const Array4< const Real > &  z_nd,
const Array4< const Real > &  ax,
const Array4< const Real > &  ay,
const Array4< const Real > &  az,
const Array4< const Real > &  detJ,
Gpu::DeviceVector< Real > &  stretched_dz_d,
const GpuArray< Real, AMREX_SPACEDIM > &  cellSizeInv,
const Array4< const Real > &  mf_mx,
const Array4< const Real > &  mf_ux,
const Array4< const Real > &  mf_vx,
const Array4< const Real > &  mf_my,
const Array4< const Real > &  mf_uy,
const Array4< const Real > &  mf_vy,
const AdvType  horiz_adv_type,
const AdvType  vert_adv_type,
const Real  horiz_upw_frac,
const Real  vert_upw_frac,
MeshType &  mesh_type,
TerrainType &  terrain_type,
const eb_ ebfact,
GpuArray< Array4< Real >, AMREX_SPACEDIM > &  flx_u_arr,
GpuArray< Array4< Real >, AMREX_SPACEDIM > &  flx_v_arr,
GpuArray< Array4< Real >, AMREX_SPACEDIM > &  flx_w_arr,
const Vector< iMultiFab > &  physbnd_mask,
const bool  already_on_centroids,
const int  lo_z_face,
const int  hi_z_face,
const Box &  domain,
const BCRec *  bc_ptr_h 
)

Function for computing the advective tendency for the momentum equations This routine has explicit expressions for all cases (terrain or not) when the horizontal and vertical spatial orders are <= 2, and calls more specialized functions when either (or both) spatial order(s) is greater than two

Parameters
[in]mfiMultiFab Iterator
[in]bxxbox over which the x-momentum is updated
[in]bxybox over which the y-momentum is updated
[in]bxzbox over which the z-momentum is updated
[in]bxx_growngrown boxes of bxx to loop over the nodal grids of bxx
[in]bxy_growngrown boxes of bxy to loop over the nodal grids of bxy
[in]bxz_growngrown boxes of bxz to loop over the nodal grids of bxz
[out]rho_u_rhstendency for the x-momentum equation
[out]rho_v_rhstendency for the y-momentum equation
[out]rho_w_rhstendency for the z-momentum equation
[in]cell_datacell-centered conservative state used by open-boundary terms
[in]ux-component of the velocity
[in]vy-component of the velocity
[in]wz-component of the velocity
[in]rho_ux-component of the momentum
[in]rho_vy-component of the momentum
[in]omegacomponent of the momentum normal to the z-coordinate surface
[in]z_ndheight coordinate at nodes
[in]axArea fraction of x-faces
[in]ayArea fraction of y-faces
[in]azArea fraction of z-faces
[in]detJJacobian of the metric transformation (= 1 if use_terrain_fitted_coords is false)
[in]stretched_dz_ddevice vector of vertical cell spacing
[in]cellSizeInvinverse of the grid spacing
[in]mf_mxx map factor at cell centers
[in]mf_uxx map factor at x-faces
[in]mf_vxx map factor at y-faces
[in]mf_myy map factor at cell centers
[in]mf_uyy map factor at x-faces
[in]mf_vyy map factor at y-faces
[in]horiz_adv_typesets the spatial order to be used for lateral derivatives
[in]vert_adv_typesets the spatial order to be used for vertical derivatives
[in]horiz_upw_frachorizontal upwind blending fraction
[in]vert_upw_fracvertical upwind blending fraction
[in]mesh_typegrid spacing type
[in]terrain_typeterrain representation type
[in]ebfactEB factories for cell- and face-centered variables
[in,out]flx_u_arrcontainer of fluxes for x-momentum
[in,out]flx_v_arrcontainer of fluxes for y-momentum
[in,out]flx_w_arrcontainer of fluxes for z-momentum
[in]physbnd_maskVector of masks for flux interpolation (=1 otherwise, =0 if physbnd)
[in]already_on_centroidsflag whether flux interpolation is unnecessary
[in]lo_z_faceminimum z-face k-index at this level
[in]hi_z_facemaximum z-face k-index at this level
[in]domaincomputational domain
[in]bc_ptr_hboundary condition records on host
107 {
108  BL_PROFILE_VAR("AdvectionSrcForMom", AdvectionSrcForMom);
109 
110  AMREX_ALWAYS_ASSERT(bxz.smallEnd(2) > 0);
111 
112  // compute mapfactor inverses
113  Box box2d_u(bxx); box2d_u.setRange(2,0); box2d_u.grow({3,3,0});
114  Box box2d_v(bxy); box2d_v.setRange(2,0); box2d_v.grow({3,3,0});
115  FArrayBox mf_u_invFAB(box2d_u,1,The_Async_Arena());
116  FArrayBox mf_v_invFAB(box2d_v,1,The_Async_Arena());
117  const Array4<Real>& mf_u_inv = mf_u_invFAB.array();
118  const Array4<Real>& mf_v_inv = mf_v_invFAB.array();
119 
120  const bool use_terrain_fitted_coords = ( terrain_type == TerrainType::StaticFittedMesh ||
121  terrain_type == TerrainType::MovingFittedMesh);
122 
123  ParallelFor(box2d_u, box2d_v,
124  [=] AMREX_GPU_DEVICE (int i, int j, int) noexcept
125  {
126  mf_u_inv(i,j,0) = one / mf_ux(i,j,0);
127  },
128  [=] AMREX_GPU_DEVICE (int i, int j, int) noexcept
129  {
130  mf_v_inv(i,j,0) = one / mf_vy(i,j,0);
131  });
132 
133  if (mesh_type == MeshType::ConstantDz && terrain_type != TerrainType::EB)
134  {
135  // amrex::Print() << "ADV:CONSTANT DZ " << std::endl;
136  AdvectionSrcForMom_ConstantDz(bxx, bxy, bxz,
137  rho_u_rhs, rho_v_rhs, rho_w_rhs, u, v, w,
138  rho_u, rho_v, omega,
139  cellSizeInv, stretched_dz_d,
140  mf_mx, mf_ux, mf_vx, mf_my, mf_uy, mf_vy,
141  horiz_adv_type, vert_adv_type,
142  horiz_upw_frac, vert_upw_frac,
143  terrain_type, lo_z_face, hi_z_face);
144  }
145  else if (mesh_type == MeshType::StretchedDz && terrain_type != TerrainType::EB)
146  {
147  // amrex::Print() << "ADV:STRETCHED DZ " << std::endl;
148  AdvectionSrcForMom_StretchedDz(bxx, bxy, bxz,
149  rho_u_rhs, rho_v_rhs, rho_w_rhs,
150  u, v, w, rho_u, rho_v, omega,
151  cellSizeInv, stretched_dz_d,
152  mf_mx, mf_ux, mf_vx, mf_my, mf_uy, mf_vy,
153  horiz_adv_type, vert_adv_type,
154  horiz_upw_frac, vert_upw_frac,
155  lo_z_face, hi_z_face);
156  }
157  else if ( terrain_type == TerrainType::EB)
158  {
159  // amrex::Print() << "ADV:EB " << std::endl;
160  AdvectionSrcForMom_EB(mfi, bxx, bxy, bxz, bxx_grown, bxy_grown, bxz_grown,
161  rho_u_rhs, rho_v_rhs, rho_w_rhs,
162  u, v, w,
163  rho_u, rho_v, omega,
164  cellSizeInv,
165  mf_mx, mf_ux, mf_vx, mf_my, mf_uy, mf_vy,
166  horiz_adv_type, vert_adv_type,
167  horiz_upw_frac, vert_upw_frac,
168  ebfact, flx_u_arr, flx_v_arr, flx_w_arr,
169  physbnd_mask, already_on_centroids,
170  lo_z_face, hi_z_face, domain);
171  }
172  else
173  {
174  AMREX_ALWAYS_ASSERT(use_terrain_fitted_coords);
175  // amrex::Print() << "ADV:TF " << std::endl;
176  AdvectionSrcForMom_TF(bxx, bxy, bxz,
177  rho_u_rhs, rho_v_rhs, rho_w_rhs,
178  u, v, w,
179  rho_u, rho_v, omega,
180  z_nd, ax, ay, az, detJ,
181  cellSizeInv,
182  mf_mx, mf_ux, mf_vx, mf_my, mf_uy, mf_vy,
183  horiz_adv_type, vert_adv_type,
184  horiz_upw_frac, vert_upw_frac,
185  lo_z_face, hi_z_face);
186 
187  }
188 
189  // Open bc will be imposed upon all vars (we only access cons here for simplicity)
190  const bool xlo_open = (bc_ptr_h[BCVars::cons_bc].lo(0) == ERFBCType::open);
191  const bool xhi_open = (bc_ptr_h[BCVars::cons_bc].hi(0) == ERFBCType::open);
192  const bool ylo_open = (bc_ptr_h[BCVars::cons_bc].lo(1) == ERFBCType::open);
193  const bool yhi_open = (bc_ptr_h[BCVars::cons_bc].hi(1) == ERFBCType::open);
194 
195  // The open-boundary kernels below overwrite the tendencies the operators above just
196  // wrote, so they have to run on exactly the boxes those operators covered. Rebuilding
197  // the boxes here instead is what went wrong: the z shrink was applied unconditionally,
198  // while the caller applies it only where the box actually reaches the bottom or top of
199  // the domain. On a grid decomposed in z that dropped one w-face at every internal
200  // split from the open-boundary treatment, leaving in place the interior stencil --
201  // which differences across the open lateral boundary, into an unfilled ghost cell.
202  const Box& tbx = bxx;
203  const Box& tby = bxy;
204  const Box& tbz = bxz;
205 
206  const int domhi_z = domain.bigEnd(2);
207 
208  // Special advection operator for open BC (bndry normal/tangent operations)
209  //
210  // Where two perpendicular open boundaries meet, every face and cell on the
211  // boundary must be updated by exactly one of these kernels: they assign rather
212  // than accumulate, so an overlap would silently keep whichever ran last and
213  // throw the other away. A boundary-normal momentum owns the corner in its own
214  // direction -- that face lies on the open boundary, so the radiation condition
215  // is what belongs there -- and the tangential boxes are trimmed to match.
216  // w is tangent to both lateral boundaries and so has no normal owner at a
217  // corner; it is covered by OpenBCTangentPatches below, which tags the corner
218  // with both sides so that the kernel differences across neither open boundary.
219  if (xlo_open)
220  {
221  Box tbx_xlo, tby_xlo;
222  if (tbx.smallEnd(0) == domain.smallEnd(0)) { tbx_xlo = makeSlab(tbx,0,domain.smallEnd(0));}
223  if (tby.smallEnd(0) == domain.smallEnd(0)) { tby_xlo = makeSlab(tby,0,domain.smallEnd(0));}
224 
225  tby_xlo = TrimOpenBCCorner(tby_xlo, 1, domain, ylo_open, yhi_open);
226 
227  bool do_lo = true;
228 
229  AdvectionSrcForOpenBC_Normal(tbx_xlo, 0, rho_u_rhs, u, cell_data, cellSizeInv, do_lo);
230  AdvectionSrcForOpenBC_Tangent_Ymom(tby_xlo, 0, rho_v_rhs, v,
231  rho_u, rho_v, omega,
232  ay, az, detJ, cellSizeInv,
233  do_lo);
234  }
235  if (xhi_open)
236  {
237  Box tbx_xhi, tby_xhi;
238  if (tbx.bigEnd(0) == domain.bigEnd(0)+1) { tbx_xhi = makeSlab(tbx,0,domain.bigEnd(0)+1);}
239  if (tby.bigEnd(0) == domain.bigEnd(0)) { tby_xhi = makeSlab(tby,0,domain.bigEnd(0) );}
240 
241  tby_xhi = TrimOpenBCCorner(tby_xhi, 1, domain, ylo_open, yhi_open);
242 
243  AdvectionSrcForOpenBC_Normal(tbx_xhi, 0, rho_u_rhs, u, cell_data, cellSizeInv);
244  AdvectionSrcForOpenBC_Tangent_Ymom(tby_xhi, 0, rho_v_rhs, v,
245  rho_u, rho_v, omega,
246  ay, az, detJ, cellSizeInv);
247  }
248  if (ylo_open)
249  {
250  Box tbx_ylo, tby_ylo;
251  if (tbx.smallEnd(1) == domain.smallEnd(1)) { tbx_ylo = makeSlab(tbx,1,domain.smallEnd(1));}
252  if (tby.smallEnd(1) == domain.smallEnd(1)) { tby_ylo = makeSlab(tby,1,domain.smallEnd(1));}
253 
254  tbx_ylo = TrimOpenBCCorner(tbx_ylo, 0, domain, xlo_open, xhi_open);
255 
256  bool do_lo = true;
257  AdvectionSrcForOpenBC_Tangent_Xmom(tbx_ylo, 1, rho_u_rhs, u,
258  rho_u, rho_v, omega,
259  ax, az, detJ, cellSizeInv,
260  do_lo);
261  AdvectionSrcForOpenBC_Normal(tby_ylo, 1, rho_v_rhs, v, cell_data, cellSizeInv, do_lo);
262  }
263  if (yhi_open)
264  {
265  Box tbx_yhi, tby_yhi;
266  if (tbx.bigEnd(1) == domain.bigEnd(1)) { tbx_yhi = makeSlab(tbx,1,domain.bigEnd(1) );}
267  if (tby.bigEnd(1) == domain.bigEnd(1)+1) { tby_yhi = makeSlab(tby,1,domain.bigEnd(1)+1);}
268 
269  tbx_yhi = TrimOpenBCCorner(tbx_yhi, 0, domain, xlo_open, xhi_open);
270 
271  AdvectionSrcForOpenBC_Tangent_Xmom(tbx_yhi, 1, rho_u_rhs, u,
272  rho_u, rho_v, omega,
273  ax, az, detJ, cellSizeInv);
274  AdvectionSrcForOpenBC_Normal(tby_yhi, 1, rho_v_rhs, v, cell_data, cellSizeInv);
275  }
276 
277  for (const OpenBCPatch& patch : OpenBCTangentPatches(tbz, domain,
278  xlo_open, xhi_open, ylo_open, yhi_open))
279  {
280  AdvectionSrcForOpenBC_Tangent_Zmom(patch.box, patch.x_side, patch.y_side, rho_w_rhs, w,
281  rho_u, rho_v, omega,
282  ax, ay, az, detJ, cellSizeInv,
283  domhi_z);
284  }
285 }
void AdvectionSrcForMom(const MFIter &mfi, const Box &bxx, const Box &bxy, const Box &bxz, const Vector< Box > &bxx_grown, const Vector< Box > &bxy_grown, const Vector< Box > &bxz_grown, const Array4< Real > &rho_u_rhs, const Array4< Real > &rho_v_rhs, const Array4< Real > &rho_w_rhs, const Array4< const Real > &cell_data, const Array4< const Real > &u, const Array4< const Real > &v, const Array4< const Real > &w, const Array4< const Real > &rho_u, const Array4< const Real > &rho_v, const Array4< const Real > &omega, const Array4< const Real > &z_nd, const Array4< const Real > &ax, const Array4< const Real > &ay, const Array4< const Real > &az, const Array4< const Real > &detJ, Gpu::DeviceVector< Real > &stretched_dz_d, const GpuArray< Real, AMREX_SPACEDIM > &cellSizeInv, const Array4< const Real > &mf_mx, const Array4< const Real > &mf_ux, const Array4< const Real > &mf_vx, const Array4< const Real > &mf_my, const Array4< const Real > &mf_uy, const Array4< const Real > &mf_vy, const AdvType horiz_adv_type, const AdvType vert_adv_type, const Real horiz_upw_frac, const Real vert_upw_frac, MeshType &mesh_type, TerrainType &terrain_type, const eb_ &ebfact, GpuArray< Array4< Real >, AMREX_SPACEDIM > &flx_u_arr, GpuArray< Array4< Real >, AMREX_SPACEDIM > &flx_v_arr, GpuArray< Array4< Real >, AMREX_SPACEDIM > &flx_w_arr, const Vector< iMultiFab > &physbnd_mask, const bool already_on_centroids, const int lo_z_face, const int hi_z_face, const Box &domain, const BCRec *bc_ptr_h)
Definition: ERF_AdvectionSrcForMom.cpp:64
amrex::Box TrimOpenBCCorner(amrex::Box b, const int dim, const amrex::Box &domain, const bool lo_open, const bool hi_open)
Definition: ERF_Advection.H:237
amrex::Vector< OpenBCPatch > OpenBCTangentPatches(const amrex::Box &b, const amrex::Box &domain, const bool xlo_open, const bool xhi_open, const bool ylo_open, const bool yhi_open)
Definition: ERF_Advection.H:291
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 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)
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)
void AdvectionSrcForOpenBC_Tangent_Zmom(const amrex::Box &bxz, const OpenSide x_side, const OpenSide y_side, 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)
AMREX_ALWAYS_ASSERT(bx.length()[2]==khi+1)
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);})
constexpr amrex::Real one
Definition: ERF_NumericalConstants.H:30
Real w
Definition: ERF_Plotfile2DInterpolator.cpp:22
@ cons_bc
Definition: ERF_IndexDefines.H:89
@ open
Definition: ERF_IndexDefines.H:304
@ omega
Definition: ERF_Morrison.H:55
Definition: ERF_Advection.H:217
Here is the call graph for this function: