Function for computing the advective tendency for the momentum equations ONLY when using terrain-fitted coordinates
77 auto dxInv = cellSizeInv[0], dyInv = cellSizeInv[1], dzInv = cellSizeInv[2];
80 Box box2d_u(bxx); box2d_u.setRange(2,0); box2d_u.grow({3,3,0});
81 Box box2d_v(bxy); box2d_v.setRange(2,0); box2d_v.grow({3,3,0});
83 FArrayBox mf_ux_invFAB(box2d_u,1,The_Async_Arena());
84 FArrayBox mf_uy_invFAB(box2d_u,1,The_Async_Arena());
85 const Array4<Real>& mf_ux_inv = mf_ux_invFAB.array();
86 const Array4<Real>& mf_uy_inv = mf_uy_invFAB.array();
88 FArrayBox mf_vx_invFAB(box2d_v,1,The_Async_Arena());
89 FArrayBox mf_vy_invFAB(box2d_v,1,The_Async_Arena());
90 const Array4<Real>& mf_vx_inv = mf_vx_invFAB.array();
91 const Array4<Real>& mf_vy_inv = mf_vy_invFAB.array();
94 [=] AMREX_GPU_DEVICE (
int i,
int j,
int) noexcept
96 mf_ux_inv(i,j,0) =
one / mf_ux(i,j,0);
97 mf_uy_inv(i,j,0) =
one / mf_uy(i,j,0);
99 [=] AMREX_GPU_DEVICE (
int i,
int j,
int) noexcept
101 mf_vx_inv(i,j,0) =
one / mf_vx(i,j,0);
102 mf_vy_inv(i,j,0) =
one / mf_vy(i,j,0);
109 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
111 Real xflux_hi =
fourth * (rho_u(i,j,k) * mf_uy_inv(i,j,0) + rho_u(i+1,j,k) * mf_uy_inv(i+1,j,0)) *
112 (u(i+1,j,k) + u(i,j,k)) *
myhalf * (ax(i,j,k) + ax(i+1,j,k));
114 Real xflux_lo =
fourth * (rho_u(i,j,k) * mf_uy_inv(i,j,0) + rho_u(i-1,j,k) * mf_uy_inv(i-1,j,0)) *
115 (u(i-1,j,k) + u(i,j,k)) *
myhalf * (ax(i,j,k) + ax(i-1,j,k));
118 Real yflux_hi =
fourth * (rho_v(i,j+1,k)*mf_vx_inv(i,j+1,0) + rho_v(i-1,j+1,k)*mf_vx_inv(i-1,j+1,0)) *
119 (u(i,j+1,k) + u(i,j,k)) * met_h_zeta_yhi;
122 Real yflux_lo =
fourth * (rho_v(i,j ,k)*mf_vx_inv(i,j ,0) + rho_v(i-1,j ,k)*mf_vx_inv(i-1,j ,0)) *
123 (u(i,j-1,k) + u(i,j,k)) * met_h_zeta_ylo;
125 Real zflux_hi =
fourth * (Omega(i,j,k+1) + Omega(i-1,j,k+1)) * (u(i,j,k+1) + u(i,j,k)) *
126 myhalf * (az(i,j,k+1) + az(i-1,j,k+1));
127 Real zflux_lo =
fourth * (Omega(i,j,k ) + Omega(i-1,j,k )) * (u(i,j,k-1) + u(i,j,k)) *
128 myhalf * (az(i,j,k ) + az(i-1,j,k ));
130 Real mfsq = mf_ux(i,j,0) * mf_uy(i,j,0);
132 Real advectionSrc = (xflux_hi - xflux_lo) *
dxInv * mfsq
133 + (yflux_hi - yflux_lo) * dyInv * mfsq
134 + (zflux_hi - zflux_lo) * dzInv;
135 rho_u_rhs(i, j, k) = -advectionSrc / (
myhalf * (detJ(i,j,k) + detJ(i-1,j,k)));
137 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
141 Real xflux_hi =
fourth * (rho_u(i+1,j,k)*mf_uy_inv(i+1,j,0) + rho_u(i+1,j-1,k)*mf_uy_inv(i+1,j-1,0)) *
142 (v(i+1,j,k) + v(i,j,k)) * met_h_zeta_xhi;
145 Real xflux_lo =
fourth * (rho_u(i, j, k)*mf_uy_inv(i ,j,0) + rho_u(i ,j-1,k)*mf_uy_inv(i ,j-1,0)) *
146 (v(i-1,j,k) + v(i,j,k)) * met_h_zeta_xlo;
148 Real yflux_hi =
fourth * (rho_v(i,j+1,k)*mf_vx_inv(i,j+1,0) + rho_v(i,j ,k) * mf_vx_inv(i,j ,0)) *
149 (v(i,j+1,k) + v(i,j,k)) *
myhalf * (ay(i,j,k) + ay(i,j+1,k));
151 Real yflux_lo =
fourth * (rho_v(i,j ,k)*mf_vx_inv(i,j ,0) + rho_v(i,j-1,k) * mf_vx_inv(i,j-1,0)) *
152 (v(i,j-1,k) + v(i,j,k)) *
myhalf * (ay(i,j,k) + ay(i,j-1,k));
154 Real zflux_hi =
fourth * (Omega(i,j,k+1) + Omega(i, j-1, k+1)) * (v(i,j,k+1) + v(i,j,k)) *
155 myhalf * (az(i,j,k+1) + az(i,j-1,k+1));
156 Real zflux_lo =
fourth * (Omega(i,j,k ) + Omega(i, j-1, k )) * (v(i,j,k-1) + v(i,j,k)) *
157 myhalf * (az(i,j,k ) + az(i,j-1,k ));
159 Real mfsq = mf_vx(i,j,0) * mf_vy(i,j,0);
161 Real advectionSrc = (xflux_hi - xflux_lo) *
dxInv * mfsq
162 + (yflux_hi - yflux_lo) * dyInv * mfsq
163 + (zflux_hi - zflux_lo) * dzInv;
164 rho_v_rhs(i, j, k) = -advectionSrc / (
myhalf * (detJ(i,j,k) + detJ(i,j-1,k)));
166 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
169 Real xflux_hi =
fourth * (rho_u(i+1,j ,k) + rho_u(i+1,j,k-1)) * mf_uy_inv(i+1,j,0) *
170 (
w(i+1,j,k) +
w(i,j,k)) * met_h_zeta_xhi;
173 Real xflux_lo =
fourth * (rho_u(i ,j ,k) + rho_u(i ,j,k-1)) * mf_uy_inv(i ,j,0) *
174 (
w(i-1,j,k) +
w(i,j,k)) * met_h_zeta_xlo;
177 Real yflux_hi =
fourth * (rho_v(i,j+1,k) + rho_v(i,j+1,k-1)) * mf_vx_inv(i,j+1,0) *
178 (
w(i,j+1,k) +
w(i,j,k)) * met_h_zeta_yhi;
181 Real yflux_lo =
fourth * (rho_v(i,j ,k) + rho_v(i,j ,k-1)) * mf_vx_inv(i,j ,0) *
182 (
w(i,j-1,k) +
w(i,j,k)) * met_h_zeta_ylo;
184 Real zflux_lo =
fourth * (Omega(i,j,k) + Omega(i,j,k-1)) * (
w(i,j,k) +
w(i,j,k-1)) *
185 myhalf * (az(i,j,k) + az(i,j,k+1));
187 Real zflux_hi = (k == hi_z_face) ? Omega(i,j,k) *
w(i,j,k) * az(i,j,k):
188 fourth * (Omega(i,j,k) + Omega(i,j,k+1)) * (
w(i,j,k) +
w(i,j,k+1)) *
189 myhalf * (az(i,j,k) + az(i,j,k+1));
191 Real mfsq = mf_mx(i,j,0) * mf_my(i,j,0);
193 Real advectionSrc = (xflux_hi - xflux_lo) *
dxInv * mfsq
194 + (yflux_hi - yflux_lo) * dyInv * mfsq
195 + (zflux_hi - zflux_lo) * dzInv;
196 rho_w_rhs(i, j, k) = -advectionSrc / (
myhalf*(detJ(i,j,k) + detJ(i,j,k-1)));
202 AdvectionSrcForMomVert<CENTERED2>(bxx, bxy, bxz,
203 rho_u_rhs, rho_v_rhs, rho_w_rhs,
204 rho_u, rho_v, Omega, u, v,
w,
205 z_nd, ax, ay, az, detJ, cellSizeInv,
206 mf_mx, mf_ux_inv, mf_vx_inv,
207 mf_my, mf_uy_inv, mf_vy_inv,
208 horiz_upw_frac, vert_upw_frac,
209 vert_adv_type, lo_z_face, hi_z_face);
211 AdvectionSrcForMomVert<UPWIND3>(bxx, bxy, bxz,
212 rho_u_rhs, rho_v_rhs, rho_w_rhs,
213 rho_u, rho_v, Omega, u, v,
w,
214 z_nd, ax, ay, az, detJ, cellSizeInv,
215 mf_mx, mf_ux_inv, mf_vx_inv,
216 mf_my, mf_uy_inv, mf_vy_inv,
217 horiz_upw_frac, vert_upw_frac,
218 vert_adv_type, lo_z_face, hi_z_face);
220 AdvectionSrcForMomVert<CENTERED4>(bxx, bxy, bxz,
221 rho_u_rhs, rho_v_rhs, rho_w_rhs,
222 rho_u, rho_v, Omega, u, v,
w,
223 z_nd, ax, ay, az, detJ, cellSizeInv,
224 mf_mx, mf_ux_inv, mf_vx_inv,
225 mf_my, mf_uy_inv, mf_vy_inv,
226 horiz_upw_frac, vert_upw_frac,
227 vert_adv_type, lo_z_face, hi_z_face);
229 AdvectionSrcForMomVert<UPWIND5>(bxx, bxy, bxz,
230 rho_u_rhs, rho_v_rhs, rho_w_rhs,
231 rho_u, rho_v, Omega, u, v,
w,
232 z_nd, ax, ay, az, detJ, cellSizeInv,
233 mf_mx, mf_ux_inv, mf_vx_inv,
234 mf_my, mf_uy_inv, mf_vy_inv,
235 horiz_upw_frac, vert_upw_frac,
236 vert_adv_type, lo_z_face, hi_z_face);
238 AdvectionSrcForMomVert<CENTERED6>(bxx, bxy, bxz,
239 rho_u_rhs, rho_v_rhs, rho_w_rhs,
240 rho_u, rho_v, Omega, u, v,
w,
241 z_nd, ax, ay, az, detJ, cellSizeInv,
242 mf_mx, mf_ux_inv, mf_vx_inv,
243 mf_my, mf_uy_inv, mf_vy_inv,
244 horiz_upw_frac, vert_upw_frac,
245 vert_adv_type, lo_z_face, hi_z_face);
247 AdvectionSrcForMomVert<WENO3>(bxx, bxy, bxz,
248 rho_u_rhs, rho_v_rhs, rho_w_rhs,
249 rho_u, rho_v, Omega, u, v,
w,
250 z_nd, ax, ay, az, detJ, cellSizeInv,
251 mf_mx, mf_ux_inv, mf_vx_inv,
252 mf_my, mf_uy_inv, mf_vy_inv,
253 horiz_upw_frac, vert_upw_frac,
254 vert_adv_type, lo_z_face, hi_z_face);
256 AdvectionSrcForMomVert<WENO_Z3>(bxx, bxy, bxz,
257 rho_u_rhs, rho_v_rhs, rho_w_rhs,
258 rho_u, rho_v, Omega, u, v,
w,
259 z_nd, ax, ay, az, detJ, cellSizeInv,
260 mf_mx, mf_ux_inv, mf_vx_inv,
261 mf_my, mf_uy_inv, mf_vy_inv,
262 horiz_upw_frac, vert_upw_frac,
263 vert_adv_type, lo_z_face, hi_z_face);
265 AdvectionSrcForMomVert<WENO_MZQ3>(bxx, bxy, bxz,
266 rho_u_rhs, rho_v_rhs, rho_w_rhs,
267 rho_u, rho_v, Omega, u, v,
w,
268 z_nd, ax, ay, az, detJ, cellSizeInv,
269 mf_mx, mf_ux_inv, mf_vx_inv,
270 mf_my, mf_uy_inv, mf_vy_inv,
271 horiz_upw_frac, vert_upw_frac,
272 vert_adv_type, lo_z_face, hi_z_face);
274 AdvectionSrcForMomVert<WENO5>(bxx, bxy, bxz,
275 rho_u_rhs, rho_v_rhs, rho_w_rhs,
276 rho_u, rho_v, Omega, u, v,
w,
277 z_nd, ax, ay, az, detJ, cellSizeInv,
278 mf_mx, mf_ux_inv, mf_vx_inv,
279 mf_my, mf_uy_inv, mf_vy_inv,
280 horiz_upw_frac, vert_upw_frac,
281 vert_adv_type, lo_z_face, hi_z_face);
283 AdvectionSrcForMomVert<WENO_Z5>(bxx, bxy, bxz,
284 rho_u_rhs, rho_v_rhs, rho_w_rhs,
285 rho_u, rho_v, Omega, u, v,
w,
286 z_nd, ax, ay, az, detJ, cellSizeInv,
287 mf_mx, mf_ux_inv, mf_vx_inv,
288 mf_my, mf_uy_inv, mf_vy_inv,
289 horiz_upw_frac, vert_upw_frac,
290 vert_adv_type, lo_z_face, hi_z_face);
292 AdvectionSrcForMomVert<WENO7>(bxx, bxy, bxz,
293 rho_u_rhs, rho_v_rhs, rho_w_rhs,
294 rho_u, rho_v, Omega, u, v,
w,
295 z_nd, ax, ay, az, detJ, cellSizeInv,
296 mf_mx, mf_ux_inv, mf_vx_inv,
297 mf_my, mf_uy_inv, mf_vy_inv,
298 horiz_upw_frac, vert_upw_frac,
299 vert_adv_type, lo_z_face, hi_z_face);
301 AdvectionSrcForMomVert<WENO_Z7>(bxx, bxy, bxz,
302 rho_u_rhs, rho_v_rhs, rho_w_rhs,
303 rho_u, rho_v, Omega, u, v,
w,
304 z_nd, ax, ay, az, detJ, cellSizeInv,
305 mf_mx, mf_ux_inv, mf_vx_inv,
306 mf_my, mf_uy_inv, mf_vy_inv,
307 horiz_upw_frac, vert_upw_frac,
308 vert_adv_type, lo_z_face, hi_z_face);
constexpr amrex::Real one
Definition: ERF_Constants.H:9
constexpr amrex::Real fourth
Definition: ERF_Constants.H:14
constexpr amrex::Real myhalf
Definition: ERF_Constants.H:13
amrex::GpuArray< Real, AMREX_SPACEDIM > dxInv
Definition: ERF_InitCustomPertVels_ParticleTests.H:17
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);})
Real w
Definition: ERF_Plotfile2DInterpolator.cpp:22
amrex::Real Real
Definition: ERF_ShocInterface.H:19
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_zeta_AtEdgeCenterJ(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:549
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_zeta_AtEdgeCenterK(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:474
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_zeta_AtEdgeCenterI(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:623
AMREX_ASSERT_WITH_MESSAGE(wbar_cutoff_min > wbar_cutoff_max, "ERROR: wbar_cutoff_min < wbar_cutoff_max")