+
+
+
72 auto dxInv = cellSizeInv[0], dyInv = cellSizeInv[1], dzInv = cellSizeInv[2];
+
+
74 AMREX_ALWAYS_ASSERT(bxz.smallEnd(2) > 0);
+
+
+
77 Box box2d_u(bxx); box2d_u.setRange(2,0); box2d_u.grow({3,3,0});
+
78 Box box2d_v(bxy); box2d_v.setRange(2,0); box2d_v.grow({3,3,0});
+
79 FArrayBox mf_u_invFAB(box2d_u,1,The_Async_Arena());
+
80 FArrayBox mf_v_invFAB(box2d_v,1,The_Async_Arena());
+
81 const Array4<Real>& mf_u_inv = mf_u_invFAB.array();
+
82 const Array4<Real>& mf_v_inv = mf_v_invFAB.array();
+
+
84 const bool use_terrain_fitted_coords = ( terrain_type == TerrainType::StaticFittedMesh ||
+
85 terrain_type == TerrainType::MovingFittedMesh);
+
+
87 ParallelFor(box2d_u, box2d_v,
+
88 [=] AMREX_GPU_DEVICE (
int i,
int j,
int) noexcept
+
+
90 mf_u_inv(i,j,0) = 1. / mf_u(i,j,0);
+
+
92 [=] AMREX_GPU_DEVICE (
int i,
int j,
int) noexcept
+
+
94 mf_v_inv(i,j,0) = 1. / mf_v(i,j,0);
+
+
+
97 if ( terrain_type == TerrainType::EB ||
+
98 terrain_type == TerrainType::ImmersedForcing)
-
100 rho_u_rhs(i, j, k) = 0.0;
-
-
102 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
-
-
104 rho_v_rhs(i, j, k) = 0.0;
-
-
106 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
-
-
108 rho_w_rhs(i, j, k) = 0.0;
-
-
-
-
-
-
-
115 ParallelFor(bxx, bxy, bxz,
-
116 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
-
-
118 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));
-
119 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));
-
-
121 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));
-
122 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));
-
-
124 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));
-
125 Real zflux_lo = 0.25 * (Omega(i, j, k ) + Omega(i-1, j, k )) * (u(i,j,k-1) + u(i,j,k));
-
-
127 Real mfsq = mf_u(i,j,0) * mf_u(i,j,0);
-
-
129 Real advectionSrc = (xflux_hi - xflux_lo) * dxInv * mfsq
-
130 + (yflux_hi - yflux_lo) * dyInv * mfsq
-
131 + (zflux_hi - zflux_lo) * dzInv;
-
132 rho_u_rhs(i, j, k) = -advectionSrc;
-
-
134 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
-
-
136 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));
-
137 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));
-
-
139 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));
-
140 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));
-
-
142 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));
-
143 Real zflux_lo = 0.25 * (Omega(i, j, k ) + Omega(i, j-1, k )) * (v(i,j,k-1) + v(i,j,k));
-
-
145 Real mfsq = mf_v(i,j,0) * mf_v(i,j,0);
-
-
147 Real advectionSrc = (xflux_hi - xflux_lo) * dxInv * mfsq
-
148 + (yflux_hi - yflux_lo) * dyInv * mfsq
-
149 + (zflux_hi - zflux_lo) * dzInv;
-
150 rho_v_rhs(i, j, k) = -advectionSrc;
-
-
152 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
-
-
154 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));
-
155 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));
-
-
157 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));
-
158 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));
-
-
160 Real zflux_lo = 0.25 * (Omega(i,j,k) + Omega(i,j,k-1)) * (w(i,j,k) + w(i,j,k-1));
-
-
162 Real zflux_hi = (k == hi_z_face) ? Omega(i,j,k) * w(i,j,k) :
-
163 0.25 * (Omega(i,j,k) + Omega(i,j,k+1)) * (w(i,j,k) + w(i,j,k+1));
-
-
165 Real mfsq = mf_m(i,j,0) * mf_m(i,j,0);
-
-
167 Real advectionSrc = (xflux_hi - xflux_lo) * dxInv * mfsq
-
168 + (yflux_hi - yflux_lo) * dyInv * mfsq
-
169 + (zflux_hi - zflux_lo) * dzInv;
-
170 rho_w_rhs(i, j, k) = -advectionSrc;
-
-
-
-
-
175 AdvectionSrcForMomVert_N<CENTERED2>(bxx, bxy, bxz,
-
176 rho_u_rhs, rho_v_rhs, rho_w_rhs,
-
177 rho_u, rho_v, Omega, u, v, w,
-
-
-
180 horiz_upw_frac, vert_upw_frac,
-
181 vert_adv_type, lo_z_face, hi_z_face);
-
-
183 AdvectionSrcForMomVert_N<UPWIND3>(bxx, bxy, bxz,
-
184 rho_u_rhs, rho_v_rhs, rho_w_rhs,
-
185 rho_u, rho_v, Omega, u, v, w,
-
-
-
188 horiz_upw_frac, vert_upw_frac,
-
189 vert_adv_type, lo_z_face, hi_z_face);
-
-
191 AdvectionSrcForMomVert_N<CENTERED4>(bxx, bxy, bxz,
-
192 rho_u_rhs, rho_v_rhs, rho_w_rhs,
-
193 rho_u, rho_v, Omega, u, v, w,
-
-
-
196 horiz_upw_frac, vert_upw_frac,
-
197 vert_adv_type, lo_z_face, hi_z_face);
-
-
199 AdvectionSrcForMomVert_N<UPWIND5>(bxx, bxy, bxz,
-
200 rho_u_rhs, rho_v_rhs, rho_w_rhs,
-
201 rho_u, rho_v, Omega, u, v, w,
-
-
-
204 horiz_upw_frac, vert_upw_frac,
-
205 vert_adv_type, lo_z_face, hi_z_face);
-
-
207 AdvectionSrcForMomVert_N<CENTERED6>(bxx, bxy, bxz,
-
208 rho_u_rhs, rho_v_rhs, rho_w_rhs,
-
209 rho_u, rho_v, Omega, u, v, w,
-
-
-
212 horiz_upw_frac, vert_upw_frac,
-
213 vert_adv_type, lo_z_face, hi_z_face);
-
-
215 AMREX_ASSERT_WITH_MESSAGE(
false,
"Unknown advection scheme!");
-
-
-
-
-
-
-
-
-
224 ParallelFor(bxx, bxy, bxz,
-
225 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
-
-
227 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)) *
-
228 (u(i+1,j,k) + u(i,j,k)) * 0.5 * (ax(i,j,k) + ax(i+1,j,k));
-
-
230 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)) *
-
231 (u(i-1,j,k) + u(i,j,k)) * 0.5 * (ax(i,j,k) + ax(i-1,j,k));
-
-
-
234 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)) *
-
235 (u(i,j+1,k) + u(i,j,k)) * met_h_zeta_yhi;
+
100 amrex::ignore_unused(use_terrain_fitted_coords);
+
101 ParallelFor(bxx, bxy, bxz,
+
102 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
+
+
104 rho_u_rhs(i, j, k) = 0.0;
+
+
106 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
+
+
108 rho_v_rhs(i, j, k) = 0.0;
+
+
110 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
+
+
112 rho_w_rhs(i, j, k) = 0.0;
+
+
+
115 if ( !use_terrain_fitted_coords) {
+
+
+
+
119 ParallelFor(bxx, bxy, bxz,
+
120 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
+
+
122 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));
+
123 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));
+
+
125 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));
+
126 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));
+
+
128 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));
+
129 Real zflux_lo = 0.25 * (Omega(i, j, k ) + Omega(i-1, j, k )) * (u(i,j,k-1) + u(i,j,k));
+
+
131 Real mfsq = mf_u(i,j,0) * mf_u(i,j,0);
+
+
133 Real advectionSrc = (xflux_hi - xflux_lo) * dxInv * mfsq
+
134 + (yflux_hi - yflux_lo) * dyInv * mfsq
+
135 + (zflux_hi - zflux_lo) * dzInv;
+
136 rho_u_rhs(i, j, k) = -advectionSrc;
+
+
138 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
+
+
140 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));
+
141 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));
+
+
143 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));
+
144 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));
+
+
146 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));
+
147 Real zflux_lo = 0.25 * (Omega(i, j, k ) + Omega(i, j-1, k )) * (v(i,j,k-1) + v(i,j,k));
+
+
149 Real mfsq = mf_v(i,j,0) * mf_v(i,j,0);
+
+
151 Real advectionSrc = (xflux_hi - xflux_lo) * dxInv * mfsq
+
152 + (yflux_hi - yflux_lo) * dyInv * mfsq
+
153 + (zflux_hi - zflux_lo) * dzInv;
+
154 rho_v_rhs(i, j, k) = -advectionSrc;
+
+
156 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
+
+
158 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));
+
159 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));
+
+
161 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));
+
162 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));
+
+
164 Real zflux_lo = 0.25 * (Omega(i,j,k) + Omega(i,j,k-1)) * (w(i,j,k) + w(i,j,k-1));
+
+
166 Real zflux_hi = (k == hi_z_face) ? Omega(i,j,k) * w(i,j,k) :
+
167 0.25 * (Omega(i,j,k) + Omega(i,j,k+1)) * (w(i,j,k) + w(i,j,k+1));
+
+
169 Real mfsq = mf_m(i,j,0) * mf_m(i,j,0);
+
+
171 Real advectionSrc = (xflux_hi - xflux_lo) * dxInv * mfsq
+
172 + (yflux_hi - yflux_lo) * dyInv * mfsq
+
173 + (zflux_hi - zflux_lo) * dzInv;
+
174 rho_w_rhs(i, j, k) = -advectionSrc;
+
+
+
+
+
179 AdvectionSrcForMomVert_N<CENTERED2>(bxx, bxy, bxz,
+
180 rho_u_rhs, rho_v_rhs, rho_w_rhs,
+
181 rho_u, rho_v, Omega, u, v, w,
+
+
+
184 horiz_upw_frac, vert_upw_frac,
+
185 vert_adv_type, lo_z_face, hi_z_face);
+
+
187 AdvectionSrcForMomVert_N<UPWIND3>(bxx, bxy, bxz,
+
188 rho_u_rhs, rho_v_rhs, rho_w_rhs,
+
189 rho_u, rho_v, Omega, u, v, w,
+
+
+
192 horiz_upw_frac, vert_upw_frac,
+
193 vert_adv_type, lo_z_face, hi_z_face);
+
+
195 AdvectionSrcForMomVert_N<CENTERED4>(bxx, bxy, bxz,
+
196 rho_u_rhs, rho_v_rhs, rho_w_rhs,
+
197 rho_u, rho_v, Omega, u, v, w,
+
+
+
200 horiz_upw_frac, vert_upw_frac,
+
201 vert_adv_type, lo_z_face, hi_z_face);
+
+
203 AdvectionSrcForMomVert_N<UPWIND5>(bxx, bxy, bxz,
+
204 rho_u_rhs, rho_v_rhs, rho_w_rhs,
+
205 rho_u, rho_v, Omega, u, v, w,
+
+
+
208 horiz_upw_frac, vert_upw_frac,
+
209 vert_adv_type, lo_z_face, hi_z_face);
+
+
211 AdvectionSrcForMomVert_N<CENTERED6>(bxx, bxy, bxz,
+
212 rho_u_rhs, rho_v_rhs, rho_w_rhs,
+
213 rho_u, rho_v, Omega, u, v, w,
+
+
+
216 horiz_upw_frac, vert_upw_frac,
+
217 vert_adv_type, lo_z_face, hi_z_face);
+
+
219 AMREX_ASSERT_WITH_MESSAGE(
false,
"Unknown advection scheme!");
+
+
+
+
+
+
+
+
+
228 ParallelFor(bxx, bxy, bxz,
+
229 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
+
+
231 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)) *
+
232 (u(i+1,j,k) + u(i,j,k)) * 0.5 * (ax(i,j,k) + ax(i+1,j,k));
+
+
234 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)) *
+
235 (u(i-1,j,k) + u(i,j,k)) * 0.5 * (ax(i,j,k) + ax(i-1,j,k));
-
-
238 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)) *
-
239 (u(i,j-1,k) + u(i,j,k)) * met_h_zeta_ylo;
+
+
238 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)) *
+
239 (u(i,j+1,k) + u(i,j,k)) * met_h_zeta_yhi;
-
241 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)) *
-
242 0.5 * (az(i,j,k+1) + az(i-1,j,k+1));
-
243 Real zflux_lo = 0.25 * (Omega(i,j,k ) + Omega(i-1,j,k )) * (u(i,j,k-1) + u(i,j,k)) *
-
244 0.5 * (az(i,j,k ) + az(i-1,j,k ));
-
-
246 Real mfsq = mf_u(i,j,0) * mf_u(i,j,0);
-
-
248 Real advectionSrc = (xflux_hi - xflux_lo) * dxInv * mfsq
-
249 + (yflux_hi - yflux_lo) * dyInv * mfsq
-
250 + (zflux_hi - zflux_lo) * dzInv;
+
+
242 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)) *
+
243 (u(i,j-1,k) + u(i,j,k)) * met_h_zeta_ylo;
+
+
245 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)) *
+
246 0.5 * (az(i,j,k+1) + az(i-1,j,k+1));
+
247 Real zflux_lo = 0.25 * (Omega(i,j,k ) + Omega(i-1,j,k )) * (u(i,j,k-1) + u(i,j,k)) *
+
248 0.5 * (az(i,j,k ) + az(i-1,j,k ));
+
+
250 Real mfsq = mf_u(i,j,0) * mf_u(i,j,0);
-
252 rho_u_rhs(i, j, k) = -advectionSrc / (0.5 * (detJ(i,j,k) + detJ(i-1,j,k)));
-
-
254 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
-
-
-
-
258 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)) *
-
259 (v(i+1,j,k) + v(i,j,k)) * met_h_zeta_xhi;
+
252 Real advectionSrc = (xflux_hi - xflux_lo) * dxInv * mfsq
+
253 + (yflux_hi - yflux_lo) * dyInv * mfsq
+
254 + (zflux_hi - zflux_lo) * dzInv;
+
+
256 rho_u_rhs(i, j, k) = -advectionSrc / (0.5 * (detJ(i,j,k) + detJ(i-1,j,k)));
+
+
258 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
+
-
-
262 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-1,j ,0)) *
-
263 (v(i-1,j,k) + v(i,j,k)) * met_h_zeta_xlo;
+
+
262 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)) *
+
263 (v(i+1,j,k) + v(i,j,k)) * met_h_zeta_xhi;
-
265 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)) *
-
266 (v(i,j+1,k) + v(i,j,k)) * 0.5 * (ay(i,j,k) + ay(i,j+1,k));
-
-
268 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)) *
-
269 (v(i,j-1,k) + v(i,j,k)) * 0.5 * (ay(i,j,k) + ay(i,j-1,k));
-
-
271 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)) *
-
272 0.5 * (az(i,j,k+1) + az(i,j-1,k+1));
-
273 Real zflux_lo = 0.25 * (Omega(i,j,k ) + Omega(i, j-1, k )) * (v(i,j,k-1) + v(i,j,k)) *
-
274 0.5 * (az(i,j,k ) + az(i,j-1,k ));
-
-
276 Real mfsq = mf_v(i,j,0) * mf_v(i,j,0);
-
-
278 Real advectionSrc = (xflux_hi - xflux_lo) * dxInv * mfsq
-
279 + (yflux_hi - yflux_lo) * dyInv * mfsq
-
280 + (zflux_hi - zflux_lo) * dzInv;
+
+
266 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-1,j ,0)) *
+
267 (v(i-1,j,k) + v(i,j,k)) * met_h_zeta_xlo;
+
+
269 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)) *
+
270 (v(i,j+1,k) + v(i,j,k)) * 0.5 * (ay(i,j,k) + ay(i,j+1,k));
+
+
272 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)) *
+
273 (v(i,j-1,k) + v(i,j,k)) * 0.5 * (ay(i,j,k) + ay(i,j-1,k));
+
+
275 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)) *
+
276 0.5 * (az(i,j,k+1) + az(i,j-1,k+1));
+
277 Real zflux_lo = 0.25 * (Omega(i,j,k ) + Omega(i, j-1, k )) * (v(i,j,k-1) + v(i,j,k)) *
+
278 0.5 * (az(i,j,k ) + az(i,j-1,k ));
+
+
280 Real mfsq = mf_v(i,j,0) * mf_v(i,j,0);
-
282 rho_v_rhs(i, j, k) = -advectionSrc / (0.5 * (detJ(i,j,k) + detJ(i,j-1,k)));
-
-
284 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
-
-
-
287 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) *
-
288 (w(i+1,j,k) + w(i,j,k)) * met_h_zeta_xhi;
-
-
-
291 Real xflux_lo = 0.25*(rho_u(i ,j ,k) + rho_u(i ,j,k-1)) * mf_u_inv(i ,j,0) *
-
292 (w(i-1,j,k) + w(i,j,k)) * met_h_zeta_xlo;
+
282 Real advectionSrc = (xflux_hi - xflux_lo) * dxInv * mfsq
+
283 + (yflux_hi - yflux_lo) * dyInv * mfsq
+
284 + (zflux_hi - zflux_lo) * dzInv;
+
+
286 rho_v_rhs(i, j, k) = -advectionSrc / (0.5 * (detJ(i,j,k) + detJ(i,j-1,k)));
+
+
288 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
+
+
+
291 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) *
+
292 (w(i+1,j,k) + w(i,j,k)) * met_h_zeta_xhi;
-
-
295 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) *
-
296 (w(i,j+1,k) + w(i,j,k)) * met_h_zeta_yhi;
+
+
295 Real xflux_lo = 0.25*(rho_u(i ,j ,k) + rho_u(i ,j,k-1)) * mf_u_inv(i ,j,0) *
+
296 (w(i-1,j,k) + w(i,j,k)) * met_h_zeta_xlo;
-
-
299 Real yflux_lo = 0.25*(rho_v(i,j ,k) + rho_v(i,j ,k-1)) * mf_v_inv(i,j ,0) *
-
300 (w(i,j-1,k) + w(i,j,k)) * met_h_zeta_ylo;
+
+
299 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) *
+
300 (w(i,j+1,k) + w(i,j,k)) * met_h_zeta_yhi;
-
302 Real zflux_lo = 0.25 * (Omega(i,j,k) + Omega(i,j,k-1)) * (w(i,j,k) + w(i,j,k-1));
-
-
304 Real zflux_hi = (k == hi_z_face) ? Omega(i,j,k) * w(i,j,k) * az(i,j,k):
-
305 0.25 * (Omega(i,j,k) + Omega(i,j,k+1)) * (w(i,j,k) + w(i,j,k+1)) *
-
306 0.5 * (az(i,j,k) + az(i,j,k+1));
+
+
303 Real yflux_lo = 0.25*(rho_v(i,j ,k) + rho_v(i,j ,k-1)) * mf_v_inv(i,j ,0) *
+
304 (w(i,j-1,k) + w(i,j,k)) * met_h_zeta_ylo;
+
+
306 Real zflux_lo = 0.25 * (Omega(i,j,k) + Omega(i,j,k-1)) * (w(i,j,k) + w(i,j,k-1));
-
308 Real mfsq = mf_m(i,j,0) * mf_m(i,j,0);
-
-
310 Real advectionSrc = (xflux_hi - xflux_lo) * dxInv * mfsq
-
311 + (yflux_hi - yflux_lo) * dyInv * mfsq
-
312 + (zflux_hi - zflux_lo) * dzInv;
+
308 Real zflux_hi = (k == hi_z_face) ? Omega(i,j,k) * w(i,j,k) * az(i,j,k):
+
309 0.25 * (Omega(i,j,k) + Omega(i,j,k+1)) * (w(i,j,k) + w(i,j,k+1)) *
+
310 0.5 * (az(i,j,k) + az(i,j,k+1));
+
+
312 Real mfsq = mf_m(i,j,0) * mf_m(i,j,0);
-
314 rho_w_rhs(i, j, k) = -advectionSrc / (0.5*(detJ(i,j,k) + detJ(i,j,k-1)));
-
-
-
-
-
319 AdvectionSrcForMomVert<CENTERED2>(bxx, bxy, bxz,
-
320 rho_u_rhs, rho_v_rhs, rho_w_rhs,
-
321 rho_u, rho_v, Omega, u, v, w, z_nd, ax, ay, az, detJ,
-
322 cellSizeInv, mf_m, mf_u_inv, mf_v_inv,
-
323 horiz_upw_frac, vert_upw_frac,
-
324 vert_adv_type, lo_z_face, hi_z_face);
-
-
326 AdvectionSrcForMomVert<UPWIND3>(bxx, bxy, bxz,
-
327 rho_u_rhs, rho_v_rhs, rho_w_rhs,
-
328 rho_u, rho_v, Omega, u, v, w, z_nd, ax, ay, az, detJ,
-
329 cellSizeInv, mf_m, mf_u_inv, mf_v_inv,
-
330 horiz_upw_frac, vert_upw_frac,
-
331 vert_adv_type, lo_z_face, hi_z_face);
-
-
333 AdvectionSrcForMomVert<CENTERED4>(bxx, bxy, bxz,
-
334 rho_u_rhs, rho_v_rhs, rho_w_rhs,
-
335 rho_u, rho_v, Omega, u, v, w, z_nd, ax, ay, az, detJ,
-
336 cellSizeInv, mf_m, mf_u_inv, mf_v_inv,
-
337 horiz_upw_frac, vert_upw_frac,
-
338 vert_adv_type, lo_z_face, hi_z_face);
-
-
340 AdvectionSrcForMomVert<UPWIND5>(bxx, bxy, bxz,
-
341 rho_u_rhs, rho_v_rhs, rho_w_rhs,
-
342 rho_u, rho_v, Omega, u, v, w, z_nd, ax, ay, az, detJ,
-
343 cellSizeInv, mf_m, mf_u_inv, mf_v_inv,
-
344 horiz_upw_frac, vert_upw_frac,
-
345 vert_adv_type, lo_z_face, hi_z_face);
-
-
347 AdvectionSrcForMomVert<CENTERED6>(bxx, bxy, bxz,
-
348 rho_u_rhs, rho_v_rhs, rho_w_rhs,
-
349 rho_u, rho_v, Omega, u, v, w, z_nd, ax, ay, az, detJ,
-
350 cellSizeInv, mf_m, mf_u_inv, mf_v_inv,
-
351 horiz_upw_frac, vert_upw_frac,
-
352 vert_adv_type, lo_z_face, hi_z_face);
-
-
354 AMREX_ASSERT_WITH_MESSAGE(
false,
"Unknown advection scheme!");
-
-
-
-
-
-
-
-
-
-
-
-
-
367 Box tbx(surroundingNodes(bx,0));
-
368 Box tby(surroundingNodes(bx,1));
-
369 Box tbz(surroundingNodes(bx,2)); tbz.growLo(2,-1); tbz.growHi(2,-1);
-
-
371 const int domhi_z = domain.bigEnd(2);
-
-
-
-
-
376 Box tbx_xlo, tby_xlo, tbz_xlo;
-
377 if (tbx.smallEnd(0) == domain.smallEnd(0)) { tbx_xlo = makeSlab(tbx,0,domain.smallEnd(0));}
-
378 if (tby.smallEnd(0) == domain.smallEnd(0)) { tby_xlo = makeSlab(tby,0,domain.smallEnd(0));}
-
379 if (tbz.smallEnd(0) == domain.smallEnd(0)) { tbz_xlo = makeSlab(tbz,0,domain.smallEnd(0));}
-
-
-
-
-
-
-
386 ay, az, detJ, cellSizeInv,
-
-
-
-
390 ax, ay, az, detJ, cellSizeInv,
-
-
-
-
-
395 Box tbx_xhi, tby_xhi, tbz_xhi;
-
396 if (tbx.bigEnd(0) == domain.bigEnd(0)+1) { tbx_xhi = makeSlab(tbx,0,domain.bigEnd(0)+1);}
-
397 if (tby.bigEnd(0) == domain.bigEnd(0)) { tby_xhi = makeSlab(tby,0,domain.bigEnd(0) );}
-
398 if (tbz.bigEnd(0) == domain.bigEnd(0)) { tbz_xhi = makeSlab(tbz,0,domain.bigEnd(0) );}
-
-
-
-
-
403 ay, az, detJ, cellSizeInv);
-
-
-
406 ax, ay, az, detJ, cellSizeInv,
-
-
-
-
-
411 Box tbx_ylo, tby_ylo, tbz_ylo;
-
412 if (tbx.smallEnd(1) == domain.smallEnd(1)) { tbx_ylo = makeSlab(tbx,1,domain.smallEnd(1));}
-
413 if (tby.smallEnd(1) == domain.smallEnd(1)) { tby_ylo = makeSlab(tby,1,domain.smallEnd(1));}
-
414 if (tbz.smallEnd(1) == domain.smallEnd(1)) { tbz_ylo = makeSlab(tbz,1,domain.smallEnd(1));}
-
-
-
-
-
419 ax, az, detJ, cellSizeInv,
-
-
-
+
314 Real advectionSrc = (xflux_hi - xflux_lo) * dxInv * mfsq
+
315 + (yflux_hi - yflux_lo) * dyInv * mfsq
+
316 + (zflux_hi - zflux_lo) * dzInv;
+
+
318 rho_w_rhs(i, j, k) = -advectionSrc / (0.5*(detJ(i,j,k) + detJ(i,j,k-1)));
+
+
+
+
+
323 AdvectionSrcForMomVert<CENTERED2>(bxx, bxy, bxz,
+
324 rho_u_rhs, rho_v_rhs, rho_w_rhs,
+
325 rho_u, rho_v, Omega, u, v, w, z_nd, ax, ay, az, detJ,
+
326 cellSizeInv, mf_m, mf_u_inv, mf_v_inv,
+
327 horiz_upw_frac, vert_upw_frac,
+
328 vert_adv_type, lo_z_face, hi_z_face);
+
+
330 AdvectionSrcForMomVert<UPWIND3>(bxx, bxy, bxz,
+
331 rho_u_rhs, rho_v_rhs, rho_w_rhs,
+
332 rho_u, rho_v, Omega, u, v, w, z_nd, ax, ay, az, detJ,
+
333 cellSizeInv, mf_m, mf_u_inv, mf_v_inv,
+
334 horiz_upw_frac, vert_upw_frac,
+
335 vert_adv_type, lo_z_face, hi_z_face);
+
+
337 AdvectionSrcForMomVert<CENTERED4>(bxx, bxy, bxz,
+
338 rho_u_rhs, rho_v_rhs, rho_w_rhs,
+
339 rho_u, rho_v, Omega, u, v, w, z_nd, ax, ay, az, detJ,
+
340 cellSizeInv, mf_m, mf_u_inv, mf_v_inv,
+
341 horiz_upw_frac, vert_upw_frac,
+
342 vert_adv_type, lo_z_face, hi_z_face);
+
+
344 AdvectionSrcForMomVert<UPWIND5>(bxx, bxy, bxz,
+
345 rho_u_rhs, rho_v_rhs, rho_w_rhs,
+
346 rho_u, rho_v, Omega, u, v, w, z_nd, ax, ay, az, detJ,
+
347 cellSizeInv, mf_m, mf_u_inv, mf_v_inv,
+
348 horiz_upw_frac, vert_upw_frac,
+
349 vert_adv_type, lo_z_face, hi_z_face);
+
+
351 AdvectionSrcForMomVert<CENTERED6>(bxx, bxy, bxz,
+
352 rho_u_rhs, rho_v_rhs, rho_w_rhs,
+
353 rho_u, rho_v, Omega, u, v, w, z_nd, ax, ay, az, detJ,
+
354 cellSizeInv, mf_m, mf_u_inv, mf_v_inv,
+
355 horiz_upw_frac, vert_upw_frac,
+
356 vert_adv_type, lo_z_face, hi_z_face);
+
+
358 AMREX_ASSERT_WITH_MESSAGE(
false,
"Unknown advection scheme!");
+
+
+
+
+
+
+
+
+
+
+
+
+
+
372 Box tbx(surroundingNodes(bx,0));
+
373 Box tby(surroundingNodes(bx,1));
+
374 Box tbz(surroundingNodes(bx,2)); tbz.growLo(2,-1); tbz.growHi(2,-1);
+
+
376 const int domhi_z = domain.bigEnd(2);
+
+
+
+
+
381 Box tbx_xlo, tby_xlo, tbz_xlo;
+
382 if (tbx.smallEnd(0) == domain.smallEnd(0)) { tbx_xlo = makeSlab(tbx,0,domain.smallEnd(0));}
+
383 if (tby.smallEnd(0) == domain.smallEnd(0)) { tby_xlo = makeSlab(tby,0,domain.smallEnd(0));}
+
384 if (tbz.smallEnd(0) == domain.smallEnd(0)) { tbz_xlo = makeSlab(tbz,0,domain.smallEnd(0));}
+
+
+
+
+
+
+
391 ay, az, detJ, cellSizeInv,
+
+
+
+
395 ax, ay, az, detJ, cellSizeInv,
+
+
+
+
+
400 Box tbx_xhi, tby_xhi, tbz_xhi;
+
401 if (tbx.bigEnd(0) == domain.bigEnd(0)+1) { tbx_xhi = makeSlab(tbx,0,domain.bigEnd(0)+1);}
+
402 if (tby.bigEnd(0) == domain.bigEnd(0)) { tby_xhi = makeSlab(tby,0,domain.bigEnd(0) );}
+
403 if (tbz.bigEnd(0) == domain.bigEnd(0)) { tbz_xhi = makeSlab(tbz,0,domain.bigEnd(0) );}
+
+
+
+
+
408 ay, az, detJ, cellSizeInv);
+
+
+
411 ax, ay, az, detJ, cellSizeInv,
+
+
+
+
+
416 Box tbx_ylo, tby_ylo, tbz_ylo;
+
417 if (tbx.smallEnd(1) == domain.smallEnd(1)) { tbx_ylo = makeSlab(tbx,1,domain.smallEnd(1));}
+
418 if (tby.smallEnd(1) == domain.smallEnd(1)) { tby_ylo = makeSlab(tby,1,domain.smallEnd(1));}
+
419 if (tbz.smallEnd(1) == domain.smallEnd(1)) { tbz_ylo = makeSlab(tbz,1,domain.smallEnd(1));}
+
+
+
-
424 ax, ay, az, detJ, cellSizeInv,
-
-
-
-
-
429 Box tbx_yhi, tby_yhi, tbz_yhi;
-
430 if (tbx.bigEnd(1) == domain.bigEnd(1)) { tbx_yhi = makeSlab(tbx,1,domain.bigEnd(1) );}
-
431 if (tby.bigEnd(1) == domain.bigEnd(1)+1) { tby_yhi = makeSlab(tby,1,domain.bigEnd(1)+1);}
-
432 if (tbz.bigEnd(1) == domain.bigEnd(1)) { tbz_yhi = makeSlab(tbz,1,domain.bigEnd(1) );}
-
-
-
-
436 ax, az, detJ, cellSizeInv);
-
-
-
-
440 ax, ay, az, detJ, cellSizeInv,
-
-
-
-
-
+
424 ax, az, detJ, cellSizeInv,
+
+
+
+
+
429 ax, ay, az, detJ, cellSizeInv,
+
+
+
+
+
434 Box tbx_yhi, tby_yhi, tbz_yhi;
+
435 if (tbx.bigEnd(1) == domain.bigEnd(1)) { tbx_yhi = makeSlab(tbx,1,domain.bigEnd(1) );}
+
436 if (tby.bigEnd(1) == domain.bigEnd(1)+1) { tby_yhi = makeSlab(tby,1,domain.bigEnd(1)+1);}
+
437 if (tbz.bigEnd(1) == domain.bigEnd(1)) { tbz_yhi = makeSlab(tbz,1,domain.bigEnd(1) );}
+
+
+
+
441 ax, az, detJ, cellSizeInv);
+
+
+
+
445 ax, ay, az, detJ, cellSizeInv,
+
+
+
+
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 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)
@@ -777,8 +781,8 @@