Function for computing the advective tendency for the momentum equations when using constant dz with no EB and no terrain-fitted coordinates.
55 AMREX_ALWAYS_ASSERT(bxz.smallEnd(2) > 0);
57 auto dxInv = cellSizeInv[0];
auto dyInv = cellSizeInv[1];
60 Box box2d_u(bxx); box2d_u.setRange(2,0); box2d_u.grow({3,3,0});
61 Box box2d_v(bxy); box2d_v.setRange(2,0); box2d_v.grow({3,3,0});
62 FArrayBox mf_u_invFAB(box2d_u,1,The_Async_Arena());
63 FArrayBox mf_v_invFAB(box2d_v,1,The_Async_Arena());
64 const Array4<Real>& mf_u_inv = mf_u_invFAB.array();
65 const Array4<Real>& mf_v_inv = mf_v_invFAB.array();
67 ParallelFor(box2d_u, box2d_v,
68 [=] AMREX_GPU_DEVICE (
int i,
int j,
int) noexcept
70 mf_u_inv(i,j,0) = 1. / mf_u(i,j,0);
72 [=] AMREX_GPU_DEVICE (
int i,
int j,
int) noexcept
74 mf_v_inv(i,j,0) = 1. / mf_v(i,j,0);
77 auto dz_ptr = stretched_dz_d.data();
82 ParallelFor(bxx, bxy, bxz,
83 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
85 Real xflux_hi = 0.25 * (rho_u(i, j , k) * mf_u_inv(i,j,0) + rho_u(i+1, j , k) * mf_u_inv(i+1,j,0)) * (u(i+1,j,k) + u(i,j,k));
86 Real xflux_lo = 0.25 * (rho_u(i, j , k) * mf_u_inv(i,j,0) + rho_u(i-1, j , k) * mf_u_inv(i-1,j,0)) * (u(i-1,j,k) + u(i,j,k));
88 Real yflux_hi = 0.25 * (rho_v(i, j+1, k) * mf_v_inv(i,j+1,0) + rho_v(i-1, j+1, k) * mf_v_inv(i-1,j+1,0)) * (u(i,j+1,k) + u(i,j,k));
89 Real yflux_lo = 0.25 * (rho_v(i, j , k) * mf_v_inv(i,j ,0) + rho_v(i-1, j , k) * mf_v_inv(i-1,j ,0)) * (u(i,j-1,k) + u(i,j,k));
91 Real zflux_hi = 0.25 * (
omega(i, j, k+1) +
omega(i-1, j, k+1)) * (u(i,j,k+1) + u(i,j,k));
92 Real zflux_lo = 0.25 * (
omega(i, j, k ) +
omega(i-1, j, k )) * (u(i,j,k-1) + u(i,j,k));
94 Real mfsq = mf_u(i,j,0) * mf_u(i,j,0);
96 Real dzInv = 1.0/dz_ptr[k];
98 Real advectionSrc = (xflux_hi - xflux_lo) * dxInv * mfsq
99 + (yflux_hi - yflux_lo) * dyInv * mfsq
100 + (zflux_hi - zflux_lo) * dzInv;
101 rho_u_rhs(i, j, k) = -advectionSrc;
103 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
105 Real xflux_hi = 0.25 * (rho_u(i+1, j, k) * mf_u_inv(i+1,j,0) + rho_u(i+1, j-1, k) * mf_u_inv(i+1,j-1,0)) * (v(i+1,j,k) + v(i,j,k));
106 Real xflux_lo = 0.25 * (rho_u(i , j, k) * mf_u_inv(i ,j,0) + rho_u(i , j-1, k) * mf_u_inv(i ,j-1,0)) * (v(i-1,j,k) + v(i,j,k));
108 Real yflux_hi = 0.25 * (rho_v(i ,j+1,k) * mf_v_inv(i,j+1,0) + rho_v(i ,j ,k) * mf_v_inv(i,j ,0)) * (v(i,j+1,k) + v(i,j,k));
109 Real yflux_lo = 0.25 * (rho_v(i ,j ,k) * mf_v_inv(i,j ,0) + rho_v(i ,j-1,k) * mf_v_inv(i,j-1,0) ) * (v(i,j-1,k) + v(i,j,k));
111 Real zflux_hi = 0.25 * (
omega(i, j, k+1) +
omega(i, j-1, k+1)) * (v(i,j,k+1) + v(i,j,k));
112 Real zflux_lo = 0.25 * (
omega(i, j, k ) +
omega(i, j-1, k )) * (v(i,j,k-1) + v(i,j,k));
114 Real mfsq = mf_v(i,j,0) * mf_v(i,j,0);
116 Real dzInv = 1.0/dz_ptr[k];
118 Real advectionSrc = (xflux_hi - xflux_lo) * dxInv * mfsq
119 + (yflux_hi - yflux_lo) * dyInv * mfsq
120 + (zflux_hi - zflux_lo) * dzInv;
121 rho_v_rhs(i, j, k) = -advectionSrc;
123 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
125 Real xflux_hi = 0.25*(rho_u(i+1,j ,k) + rho_u(i+1, j, k-1)) * mf_u_inv(i+1,j ,0) * (w(i+1,j,k) + w(i,j,k));
126 Real xflux_lo = 0.25*(rho_u(i ,j ,k) + rho_u(i , j, k-1)) * mf_u_inv(i ,j ,0) * (w(i-1,j,k) + w(i,j,k));
128 Real yflux_hi = 0.25*(rho_v(i ,j+1,k) + rho_v(i, j+1, k-1)) * mf_v_inv(i ,j+1,0) * (w(i,j+1,k) + w(i,j,k));
129 Real yflux_lo = 0.25*(rho_v(i ,j ,k) + rho_v(i, j , k-1)) * mf_v_inv(i ,j ,0) * (w(i,j-1,k) + w(i,j,k));
131 Real zflux_lo = 0.25 * (
omega(i,j,k) +
omega(i,j,k-1)) * (w(i,j,k) + w(i,j,k-1));
133 Real zflux_hi = (k == hi_z_face) ?
omega(i,j,k) * w(i,j,k) :
134 0.25 * (
omega(i,j,k) +
omega(i,j,k+1)) * (w(i,j,k) + w(i,j,k+1));
136 Real mfsq = mf_m(i,j,0) * mf_m(i,j,0);
138 Real dzInv = 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
140 Real advectionSrc = (xflux_hi - xflux_lo) * dxInv * mfsq
141 + (yflux_hi - yflux_lo) * dyInv * mfsq
142 + (zflux_hi - zflux_lo) * dzInv;
143 rho_w_rhs(i, j, k) = -advectionSrc;
149 AdvectionSrcForMomVert_N<CENTERED2>(bxx, bxy, bxz,
150 rho_u_rhs, rho_v_rhs, rho_w_rhs,
151 rho_u, rho_v,
omega, u, v, w,
152 cellSizeInv, stretched_dz_d, mf_m,
154 horiz_upw_frac, vert_upw_frac,
155 vert_adv_type, lo_z_face, hi_z_face);
157 AdvectionSrcForMomVert_N<UPWIND3>(bxx, bxy, bxz,
158 rho_u_rhs, rho_v_rhs, rho_w_rhs,
159 rho_u, rho_v,
omega, u, v, w,
160 cellSizeInv, stretched_dz_d, mf_m,
162 horiz_upw_frac, vert_upw_frac,
163 vert_adv_type, lo_z_face, hi_z_face);
165 AdvectionSrcForMomVert_N<CENTERED4>(bxx, bxy, bxz,
166 rho_u_rhs, rho_v_rhs, rho_w_rhs,
167 rho_u, rho_v,
omega, u, v, w,
168 cellSizeInv, stretched_dz_d, mf_m,
170 horiz_upw_frac, vert_upw_frac,
171 vert_adv_type, lo_z_face, hi_z_face);
173 AdvectionSrcForMomVert_N<UPWIND5>(bxx, bxy, bxz,
174 rho_u_rhs, rho_v_rhs, rho_w_rhs,
175 rho_u, rho_v,
omega, u, v, w,
176 cellSizeInv, stretched_dz_d, mf_m,
178 horiz_upw_frac, vert_upw_frac,
179 vert_adv_type, lo_z_face, hi_z_face);
181 AdvectionSrcForMomVert_N<CENTERED6>(bxx, bxy, bxz,
182 rho_u_rhs, rho_v_rhs, rho_w_rhs,
183 rho_u, rho_v,
omega, u, v, w,
184 cellSizeInv, stretched_dz_d, mf_m,
186 horiz_upw_frac, vert_upw_frac,
187 vert_adv_type, lo_z_face, hi_z_face);
189 AMREX_ASSERT_WITH_MESSAGE(
false,
"Unknown advection scheme!");
@ omega
Definition: ERF_SAM.H:49