82 BL_PROFILE_REGION(
"erf_fast_rhs_MT()");
84 Real beta_1 = 0.5 * (1.0 - beta_s);
85 Real beta_2 = 0.5 * (1.0 + beta_s);
90 const Real* dx = geom.CellSize();
91 const GpuArray<Real, AMREX_SPACEDIM> dxInv = geom.InvCellSizeArray();
97 MultiFab coeff_A_mf(fast_coeffs, make_alias, 0, 1);
98 MultiFab inv_coeff_B_mf(fast_coeffs, make_alias, 1, 1);
99 MultiFab coeff_C_mf(fast_coeffs, make_alias, 2, 1);
100 MultiFab coeff_P_mf(fast_coeffs, make_alias, 3, 1);
101 MultiFab coeff_Q_mf(fast_coeffs, make_alias, 4, 1);
105 const Array<Real,AMREX_SPACEDIM> grav{0.0, 0.0, -gravity};
106 const GpuArray<Real,AMREX_SPACEDIM> grav_gpu{grav[0], grav[1], grav[2]};
116 #pragma omp parallel if (Gpu::notInLaunchRegion())
119 FArrayBox temp_rhs_fab;
124 std::array<FArrayBox,AMREX_SPACEDIM> flux;
128 for ( MFIter mfi(S_stg_data[
IntVars::cons],
false); mfi.isValid(); ++mfi)
130 Box bx = mfi.tilebox();
131 Box tbx = surroundingNodes(bx,0);
132 Box tby = surroundingNodes(bx,1);
133 Box tbz = surroundingNodes(bx,2);
135 Box vbx = mfi.validbox();
136 const auto& vbx_hi = ubound(vbx);
138 const Array4<Real const>& xmom_src_arr = xmom_src.const_array(mfi);
139 const Array4<Real const>& ymom_src_arr = ymom_src.const_array(mfi);
140 const Array4<Real const>& zmom_src_arr = zmom_src.const_array(mfi);
141 const Array4<Real const>& cc_src_arr = cc_src.const_array(mfi);
143 const Array4<const Real> & stg_cons = S_stg_data[
IntVars::cons].const_array(mfi);
144 const Array4<const Real> & stg_xmom = S_stg_data[
IntVars::xmom].const_array(mfi);
145 const Array4<const Real> & stg_ymom = S_stg_data[
IntVars::ymom].const_array(mfi);
146 const Array4<const Real> & stg_zmom = S_stg_data[
IntVars::zmom].const_array(mfi);
147 const Array4<const Real> & prim = S_stg_prim.const_array(mfi);
148 const Array4<const Real> & qt_arr =
qt.const_array(mfi);
150 const Array4<const Real>& slow_rhs_cons = S_slow_rhs[
IntVars::cons].const_array(mfi);
151 const Array4<const Real>& slow_rhs_rho_u = S_slow_rhs[
IntVars::xmom].const_array(mfi);
152 const Array4<const Real>& slow_rhs_rho_v = S_slow_rhs[
IntVars::ymom].const_array(mfi);
153 const Array4<const Real>& slow_rhs_rho_w = S_slow_rhs[
IntVars::zmom].const_array(mfi);
155 const Array4<Real>& cur_cons = S_data[
IntVars::cons].array(mfi);
156 const Array4<Real>& cur_xmom = S_data[
IntVars::xmom].array(mfi);
157 const Array4<Real>& cur_ymom = S_data[
IntVars::ymom].array(mfi);
158 const Array4<Real>& cur_zmom = S_data[
IntVars::zmom].array(mfi);
160 const Array4<Real>& lagged_delta_rt = S_scratch[
IntVars::cons].array(mfi);
162 const Array4<const Real>& prev_cons = S_prev[
IntVars::cons].const_array(mfi);
163 const Array4<const Real>& prev_xmom = S_prev[
IntVars::xmom].const_array(mfi);
164 const Array4<const Real>& prev_ymom = S_prev[
IntVars::ymom].const_array(mfi);
165 const Array4<const Real>& prev_zmom = S_prev[
IntVars::zmom].const_array(mfi);
168 const Array4<Real>& avg_xmom = S_scratch[
IntVars::xmom].array(mfi);
169 const Array4<Real>& avg_ymom = S_scratch[
IntVars::ymom].array(mfi);
170 const Array4<Real>& avg_zmom = S_scratch[
IntVars::zmom].array(mfi);
172 const Array4<const Real>& z_nd_old = z_phys_nd_old->const_array(mfi);
173 const Array4<const Real>& z_nd_new = z_phys_nd_new->const_array(mfi);
174 const Array4<const Real>& z_nd_stg = z_phys_nd_stg->const_array(mfi);
175 const Array4<const Real>& detJ_old = detJ_cc_old->const_array(mfi);
176 const Array4<const Real>& detJ_new = detJ_cc_new->const_array(mfi);
177 const Array4<const Real>& detJ_stg = detJ_cc_stg->const_array(mfi);
179 const Array4<const Real>& z_t_arr = z_t_rk->const_array(mfi);
180 const Array4<const Real>& zp_t_arr = z_t_pert->const_array(mfi);
182 const Array4< Real>& omega_arr = Omega.array(mfi);
184 const Array4<const Real>& pi_stage_ca = pi_stage.const_array(mfi);
186 const Array4<Real>& theta_extrap = extrap.array(mfi);
189 const Array4<const Real>& mf_mx = mapfac[
MapFacType::m_x]->const_array(mfi);
190 const Array4<const Real>& mf_my = mapfac[
MapFacType::m_y]->const_array(mfi);
191 const Array4<const Real>& mf_ux = mapfac[
MapFacType::u_x]->const_array(mfi);
192 const Array4<const Real>& mf_vy = mapfac[
MapFacType::v_y]->const_array(mfi);
196 Box gbx = mfi.tilebox(); gbx.grow(1);
197 Box gtbx = mfi.nodaltilebox(0); gtbx.grow(1); gtbx.setSmall(2,0);
198 Box gtby = mfi.nodaltilebox(1); gtby.grow(1); gtby.setSmall(2,0);
201 BL_PROFILE(
"fast_rhs_copies_0");
204 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
209 theta_extrap(i,j,k) = delta_rt;
214 }
else if (use_lagged_delta_rt) {
217 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
219 theta_extrap(i,j,k) = delta_rt + beta_d * (delta_rt - lagged_delta_rt(i,j,k,
RhoTheta_comp));
227 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
233 RHS_fab.resize (tbz,1, The_Async_Arena());
234 soln_fab.resize (tbz,1, The_Async_Arena());
235 temp_rhs_fab.resize(tbz,2, The_Async_Arena());
237 auto const& RHS_a = RHS_fab.array();
238 auto const& soln_a = soln_fab.array();
239 auto const& temp_rhs_arr = temp_rhs_fab.array();
241 auto const& coeffA_a = coeff_A_mf.array(mfi);
242 auto const& inv_coeffB_a = inv_coeff_B_mf.array(mfi);
243 auto const& coeffC_a = coeff_C_mf.array(mfi);
244 auto const& coeffP_a = coeff_P_mf.array(mfi);
245 auto const& coeffQ_a = coeff_Q_mf.array(mfi);
251 BL_PROFILE(
"fast_rhs_xymom_T");
252 ParallelFor(tbx, tby,
253 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
258 Real gp_xi = (theta_extrap(i,j,k) - theta_extrap(i-1,j,k)) * dxi;
259 Real gp_zeta_on_iface = (k == 0) ?
260 0.5 * dzi * ( theta_extrap(i-1,j,k+1) + theta_extrap(i,j,k+1)
261 -theta_extrap(i-1,j,k ) - theta_extrap(i,j,k ) ) :
262 0.25 * dzi * ( theta_extrap(i-1,j,k+1) + theta_extrap(i,j,k+1)
263 -theta_extrap(i-1,j,k-1) - theta_extrap(i,j,k-1) );
264 Real
gpx = h_zeta_old * gp_xi - h_xi_old * gp_zeta_on_iface;
267 Real q = (l_use_moisture) ? 0.5 * (qt_arr(i-1,j,k) + qt_arr(i,j,k)) : 0.0;
269 Real pi_c = 0.5 * (pi_stage_ca(i-1,j,k,0) + pi_stage_ca(i ,j,k,0));
270 Real fast_rhs_rho_u = -
Gamma *
R_d * pi_c *
gpx / (1.0 + q);
273 cur_xmom(i,j,k) = h_zeta_old * prev_xmom(i,j,k) + dtau * fast_rhs_rho_u
274 + dtau * slow_rhs_rho_u(i,j,k)
275 + dtau * xmom_src_arr(i,j,k);
277 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
282 Real gp_eta = (theta_extrap(i,j,k) -theta_extrap(i,j-1,k)) * dyi;
283 Real gp_zeta_on_jface = (k == 0) ?
284 0.5 * dzi * ( theta_extrap(i,j,k+1) + theta_extrap(i,j-1,k+1)
285 -theta_extrap(i,j,k ) - theta_extrap(i,j-1,k ) ) :
286 0.25 * dzi * ( theta_extrap(i,j,k+1) + theta_extrap(i,j-1,k+1)
287 -theta_extrap(i,j,k-1) - theta_extrap(i,j-1,k-1) );
288 Real
gpy = h_zeta_old * gp_eta - h_eta_old * gp_zeta_on_jface;
291 Real q = (l_use_moisture) ? 0.5 * (qt_arr(i,j-1,k) + qt_arr(i,j,k)) : 0.0;
293 Real pi_c = 0.5 * (pi_stage_ca(i,j-1,k,0) + pi_stage_ca(i,j ,k,0));
294 Real fast_rhs_rho_v = -
Gamma *
R_d * pi_c *
gpy / (1.0 + q);
297 cur_ymom(i, j, k) = h_zeta_old * prev_ymom(i,j,k) + dtau * fast_rhs_rho_v
298 + dtau * slow_rhs_rho_v(i,j,k)
299 + dtau * ymom_src_arr(i,j,k);
306 for (
int dir = 0; dir < AMREX_SPACEDIM; ++dir) {
307 flux[dir].resize(surroundingNodes(bx,dir),2);
308 flux[dir].setVal<RunOn::Device>(0.);
310 const GpuArray<const Array4<Real>, AMREX_SPACEDIM>
311 flx_arr{{AMREX_D_DECL(flux[0].array(), flux[1].array(), flux[2].array())}};
315 BL_PROFILE(
"fast_T_making_rho_rhs");
316 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
320 Real xflux_lo = cur_xmom(i ,j,k) - stg_xmom(i ,j,k)*h_zeta_stg_xlo;
321 Real xflux_hi = cur_xmom(i+1,j,k) - stg_xmom(i+1,j,k)*h_zeta_stg_xhi;
325 Real yflux_lo = cur_ymom(i,j ,k) - stg_ymom(i,j ,k)*h_zeta_stg_ylo;
326 Real yflux_hi = cur_ymom(i,j+1,k) - stg_ymom(i,j+1,k)*h_zeta_stg_yhi;
329 temp_rhs_arr(i,j,k,0) = ( xflux_hi - xflux_lo ) * dxi + ( yflux_hi - yflux_lo ) * dyi;
330 temp_rhs_arr(i,j,k,1) = (( xflux_hi * (prim(i,j,k,0) + prim(i+1,j,k,0)) -
331 xflux_lo * (prim(i,j,k,0) + prim(i-1,j,k,0)) ) * dxi +
332 ( yflux_hi * (prim(i,j,k,0) + prim(i,j+1,k,0)) -
333 yflux_lo * (prim(i,j,k,0) + prim(i,j-1,k,0)) ) * dyi) * 0.5;
336 (flx_arr[0])(i,j,k,0) = xflux_lo;
337 (flx_arr[0])(i,j,k,1) = (flx_arr[0])(i ,j,k,0) * 0.5 * (prim(i,j,k,0) + prim(i-1,j,k,0));
339 (flx_arr[1])(i,j,k,0) = yflux_lo;
340 (flx_arr[1])(i,j,k,1) = (flx_arr[1])(i,j ,k,0) * 0.5 * (prim(i,j,k,0) + prim(i,j-1,k,0));
343 (flx_arr[0])(i+1,j,k,0) = xflux_hi;
344 (flx_arr[0])(i+1,j,k,1) = (flx_arr[0])(i+1,j,k,0) * 0.5 * (prim(i,j,k,0) + prim(i+1,j,k,0));
347 (flx_arr[1])(i,j+1,k,0) = yflux_hi;
348 (flx_arr[1])(i,j+1,k,1) = (flx_arr[1])(i,j+1,k,0) * 0.5 * (prim(i,j,k,0) + prim(i,j+1,k,0));
358 Box gbxo = mfi.nodaltilebox(2);
360 BL_PROFILE(
"fast_MT_making_omega");
361 Box gbxo_lo = gbxo; gbxo_lo.setBig(2,0);
362 ParallelFor(gbxo_lo, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
363 omega_arr(i,j,k) = 0.;
365 Box gbxo_hi = gbxo; gbxo_hi.setSmall(2,gbxo.bigEnd(2));
366 ParallelFor(gbxo_hi, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
367 omega_arr(i,j,k) = prev_zmom(i,j,k) - stg_zmom(i,j,k) - zp_t_arr(i,j,k);
369 Box gbxo_mid = gbxo; gbxo_mid.setSmall(2,1); gbxo_mid.setBig(2,gbxo.bigEnd(2)-1);
370 ParallelFor(gbxo_mid, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
372 (
OmegaFromW(i,j,k,prev_zmom(i,j,k),prev_xmom,prev_ymom,mf_ux,mf_vy,z_nd_old,dxInv)
373 -
OmegaFromW(i,j,k, stg_zmom(i,j,k), stg_xmom, stg_ymom,mf_ux,mf_vy,z_nd_old,dxInv) )
379 ParallelFor(tbx, tby,
380 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
383 cur_xmom(i, j, k) /= h_zeta_new;
384 avg_xmom(i,j,k) += facinv*(cur_xmom(i,j,k) - stg_xmom(i,j,k));
386 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
389 cur_ymom(i, j, k) /= h_zeta_new;
390 avg_ymom(i,j,k) += facinv*(cur_ymom(i,j,k) - stg_ymom(i,j,k));
393 Box bx_shrunk_in_k = bx;
394 int klo = tbz.smallEnd(2);
395 int khi = tbz.bigEnd(2);
396 bx_shrunk_in_k.setSmall(2,klo+1);
397 bx_shrunk_in_k.setBig(2,khi-1);
402 Real halfg = std::abs(0.5 * grav_gpu[2]);
405 BL_PROFILE(
"fast_loop_on_shrunk_t");
407 ParallelFor(bx_shrunk_in_k, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
409 Real dJ_old_kface = 0.5 * (detJ_old(i,j,k) + detJ_old(i,j,k-1));
410 Real dJ_new_kface = 0.5 * (detJ_new(i,j,k) + detJ_new(i,j,k-1));
411 Real dJ_stg_kface = 0.5 * (detJ_stg(i,j,k) + detJ_stg(i,j,k-1));
413 Real q = (l_use_moisture) ? 0.5 * (qt_arr(i,j,k-1) + qt_arr(i,j,k)) : 0.0;
415 Real coeff_P = coeffP_a(i,j,k) / (1.0 + q);
416 Real coeff_Q = coeffQ_a(i,j,k) / (1.0 + q);
423 Real R0_tmp = coeff_P * cur_cons(i,j,k ,
RhoTheta_comp) * dJ_old_kface
427 - halfg * ( cur_cons(i,j,k,
Rho_comp) + cur_cons(i,j,k-1,
Rho_comp) ) * dJ_old_kface
428 + halfg * ( stg_cons(i,j,k,
Rho_comp) + stg_cons(i,j,k-1,
Rho_comp) ) * dJ_stg_kface;
431 Real R1_tmp = - halfg * ( slow_rhs_cons(i,j,k ,
Rho_comp) +
436 Real Omega_kp1 = omega_arr(i,j,k+1);
437 Real Omega_k = omega_arr(i,j,k );
438 Real Omega_km1 = omega_arr(i,j,k-1);
441 R1_tmp += ( halfg ) *
442 ( beta_1 * dzi * (Omega_kp1 - Omega_km1) + temp_rhs_arr(i,j,k,
Rho_comp) + temp_rhs_arr(i,j,k-1,
Rho_comp));
446 coeff_P * ( beta_1 * dzi * (Omega_kp1*theta_t_hi - Omega_k*theta_t_mid) + temp_rhs_arr(i,j,k ,
RhoTheta_comp) ) +
447 coeff_Q * ( beta_1 * dzi * (Omega_k*theta_t_mid - Omega_km1*theta_t_lo) + temp_rhs_arr(i,j,k-1,
RhoTheta_comp) ) );
450 RHS_a(i,j,k) = dJ_old_kface * prev_zmom(i,j,k) - dJ_stg_kface * stg_zmom(i,j,k)
451 + dtau * (slow_rhs_rho_w(i,j,k) + R0_tmp + dtau*beta_2*R1_tmp + zmom_src_arr(i,j,k));
454 Real UppVpp = dJ_new_kface *
OmegaFromW(i,j,k,0.,cur_xmom,cur_ymom,mf_ux,mf_vy,z_nd_new,dxInv)
455 -dJ_stg_kface *
OmegaFromW(i,j,k,0.,stg_xmom,stg_ymom,mf_ux,mf_vy,z_nd_stg,dxInv);
456 RHS_a(i,j,k) += UppVpp;
463 auto const lo = lbound(bx);
464 auto const hi = ubound(bx);
467 BL_PROFILE(
"fast_rhs_b2d_loop_t");
470 ParallelFor(b2d, [=] AMREX_GPU_DEVICE (
int i,
int j,
int)
473 Real rho_on_bdy = 0.5 * ( prev_cons(i,j,lo.z) + prev_cons(i,j,lo.z-1) );
474 RHS_a(i,j,lo.z) = rho_on_bdy * zp_t_arr(i,j,0);
476 soln_a(i,j,lo.z) = RHS_a(i,j,lo.z) * inv_coeffB_a(i,j,lo.z);
479 RHS_a(i,j,hi.z+1) = 0.0;
481 for (
int k = lo.z+1; k <= hi.z+1; k++) {
482 soln_a(i,j,k) = (RHS_a(i,j,k)-coeffA_a(i,j,k)*soln_a(i,j,k-1)) * inv_coeffB_a(i,j,k);
485 for (
int k = hi.z; k >= lo.z; k--) {
486 soln_a(i,j,k) -= ( coeffC_a(i,j,k) * inv_coeffB_a(i,j,k) ) * soln_a(i,j,k+1);
490 cur_zmom(i,j,hi.z+1) = stg_zmom(i,j,hi.z+1) + soln_a(i,j,hi.z+1);
493 for (
int j = lo.y; j <= hi.y; ++j) {
495 for (
int i = lo.x; i <= hi.x; ++i) {
497 Real rho_on_bdy = 0.5 * ( prev_cons(i,j,lo.z) + prev_cons(i,j,lo.z-1) );
498 RHS_a(i,j,lo.z) = rho_on_bdy * zp_t_arr(i,j,lo.z);
500 soln_a(i,j,lo.z) = RHS_a(i,j,lo.z) * inv_coeffB_a(i,j,lo.z);
504 for (
int j = lo.y; j <= hi.y; ++j) {
506 for (
int i = lo.x; i <= hi.x; ++i) {
507 RHS_a (i,j,hi.z+1) = 0.0;
510 for (
int k = lo.z+1; k <= hi.z+1; ++k) {
511 for (
int j = lo.y; j <= hi.y; ++j) {
513 for (
int i = lo.x; i <= hi.x; ++i) {
514 soln_a(i,j,k) = (RHS_a(i,j,k)-coeffA_a(i,j,k)*soln_a(i,j,k-1)) * inv_coeffB_a(i,j,k);
518 for (
int k = hi.z; k >= lo.z; --k) {
519 for (
int j = lo.y; j <= hi.y; ++j) {
521 for (
int i = lo.x; i <= hi.x; ++i) {
522 soln_a(i,j,k) -= ( coeffC_a(i,j,k) * inv_coeffB_a(i,j,k) ) * soln_a(i,j,k+1);
528 for (
int j = lo.y; j <= hi.y; ++j) {
530 for (
int i = lo.x; i <= hi.x; ++i) {
531 cur_zmom(i,j,hi.z+1) = stg_zmom(i,j,hi.z+1) + soln_a(i,j,hi.z+1);
538 BL_PROFILE(
"fast_rhs_new_drhow");
540 ParallelFor(tbz, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
542 Real rho_on_face = 0.5 * (cur_cons(i,j,k,
Rho_comp) + cur_cons(i,j,k-1,
Rho_comp));
545 cur_zmom(i,j,k) =
WFromOmega(i,j,k,rho_on_face*(z_t_arr(i,j,k)+zp_t_arr(i,j,k)),
546 cur_xmom,cur_ymom,mf_ux,mf_vy,z_nd_new,dxInv);
553 Real UppVpp =
WFromOmega(i,j,k,0.0,cur_xmom,cur_ymom,mf_ux,mf_vy,z_nd_new,dxInv)
554 -
WFromOmega(i,j,k,0.0,stg_xmom,stg_ymom,mf_ux,mf_vy,z_nd_stg,dxInv);
555 Real wpp = soln_a(i,j,k) + UppVpp;
556 Real dJ_old_kface = 0.5 * (detJ_old(i,j,k) + detJ_old(i,j,k-1));
557 Real dJ_new_kface = 0.5 * (detJ_new(i,j,k) + detJ_new(i,j,k-1));
559 cur_zmom(i,j,k) = dJ_old_kface * (stg_zmom(i,j,k) + wpp);
560 cur_zmom(i,j,k) /= dJ_new_kface;
562 soln_a(i,j,k) =
OmegaFromW(i,j,k,cur_zmom(i,j,k),cur_xmom,cur_ymom,mf_ux,mf_vy,z_nd_new,dxInv)
563 -
OmegaFromW(i,j,k,stg_zmom(i,j,k),stg_xmom,stg_ymom,mf_ux,mf_vy,z_nd_stg,dxInv);
564 soln_a(i,j,k) -= rho_on_face * zp_t_arr(i,j,k);
573 BL_PROFILE(
"fast_rho_final_update");
574 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
576 Real zflux_lo = beta_2 * soln_a(i,j,k ) + beta_1 * omega_arr(i,j,k);
577 Real zflux_hi = beta_2 * soln_a(i,j,k+1) + beta_1 * omega_arr(i,j,k+1);
581 avg_zmom(i,j,k) += facinv*zflux_lo / (mf_mx(i,j,0) * mf_my(i,j,0));
583 (flx_arr[2])(i,j,k,0) = zflux_lo / (mf_mx(i,j,0) * mf_my(i,j,0));
589 Real fast_rhs_rho = -(temp_rhs_arr(i,j,k,0) + ( zflux_hi - zflux_lo ) * dzi);
590 Real temp_rho = detJ_old(i,j,k) * cur_cons(i,j,k,0) +
591 dtau * ( slow_rhs_cons(i,j,k,0) + fast_rhs_rho );
592 cur_cons(i,j,k,0) = temp_rho / detJ_new(i,j,k);
597 Real fast_rhs_rhotheta = -( temp_rhs_arr(i,j,k,1) + 0.5 *
598 ( zflux_hi * (prim(i,j,k) + prim(i,j,k+1))
599 - zflux_lo * (prim(i,j,k) + prim(i,j,k-1)) ) * dzi );
600 Real temp_rth = detJ_old(i,j,k) * cur_cons(i,j,k,1) +
601 dtau * ( slow_rhs_cons(i,j,k,1) + fast_rhs_rhotheta );
602 cur_cons(i,j,k,1) = temp_rth / detJ_new(i,j,k);
604 (flx_arr[2])(i,j,k,1) = (flx_arr[2])(i,j,k,0) * 0.5 * (prim(i,j,k) + prim(i,j,k-1));
608 avg_zmom(i,j,k+1) += facinv * zflux_hi / (mf_mx(i,j,0) * mf_my(i,j,0));
610 (flx_arr[2])(i,j,k+1,0) = zflux_hi / (mf_mx(i,j,0) * mf_my(i,j,0));
611 (flx_arr[2])(i,j,k+1,1) = (flx_arr[2])(i,j,k+1,0) * 0.5 * (prim(i,j,k) + prim(i,j,k+1));
623 int strt_comp_reflux = 0;
624 int num_comp_reflux = 2;
625 if (level < finest_level) {
626 fr_as_crse->CrseAdd(mfi,
627 {{AMREX_D_DECL(&(flux[0]), &(flux[1]), &(flux[2]))}},
628 dx, dtau, strt_comp_reflux, strt_comp_reflux, num_comp_reflux, RunOn::Device);
631 fr_as_fine->FineAdd(mfi,
632 {{AMREX_D_DECL(&(flux[0]), &(flux[1]), &(flux[2]))}},
633 dx, dtau, strt_comp_reflux, strt_comp_reflux, num_comp_reflux, RunOn::Device);
639 Gpu::streamSynchronize();
constexpr amrex::Real R_d
Definition: ERF_Constants.H:10
constexpr amrex::Real Gamma
Definition: ERF_Constants.H:19
@ v_y
Definition: ERF_DataStruct.H:23
@ m_y
Definition: ERF_DataStruct.H:23
@ u_x
Definition: ERF_DataStruct.H:22
@ m_x
Definition: ERF_DataStruct.H:22
#define Rho_comp
Definition: ERF_IndexDefines.H:36
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:37
#define PrimTheta_comp
Definition: ERF_IndexDefines.H:50
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real OmegaFromW(int &i, int &j, int &k, amrex::Real w, const amrex::Array4< const amrex::Real > &u_arr, const amrex::Array4< const amrex::Real > &v_arr, const amrex::Array4< const amrex::Real > &mf_u, const amrex::Array4< const amrex::Real > &mf_v, const amrex::Array4< const amrex::Real > &z_nd, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxInv)
Definition: ERF_TerrainMetrics.H:415
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_xi_AtIface(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:110
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_zeta_AtIface(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:96
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_zeta_AtJface(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:139
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_eta_AtJface(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:167
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real WFromOmega(int &i, int &j, int &k, amrex::Real omega, const amrex::Array4< const amrex::Real > &u_arr, const amrex::Array4< const amrex::Real > &v_arr, const amrex::Array4< const amrex::Real > &mf_u, const amrex::Array4< const amrex::Real > &mf_v, const amrex::Array4< const amrex::Real > &z_nd, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxInv)
Definition: ERF_TerrainMetrics.H:465
@ gpy
Definition: ERF_IndexDefines.H:151
@ gpx
Definition: ERF_IndexDefines.H:150
@ ymom
Definition: ERF_IndexDefines.H:160
@ cons
Definition: ERF_IndexDefines.H:158
@ zmom
Definition: ERF_IndexDefines.H:161
@ xmom
Definition: ERF_IndexDefines.H:159
@ qt
Definition: ERF_Kessler.H:27