348 auto omega_d =
omega;
352 auto T_mid_d =
T_mid;
358 auto p_mid_d =
p_mid;
359 auto p_int_d =
p_int;
380 auto ProbLoArr =
m_geom.ProbLoArray();
381 for (MFIter mfi(*
m_cons); mfi.isValid(); ++mfi) {
382 const auto& vbx = mfi.validbox();
383 const int nx = vbx.length(0);
384 const int imin = vbx.smallEnd(0);
385 const int jmin = vbx.smallEnd(1);
386 const int kmax = vbx.bigEnd(2);
388 const Array4<const Real>& cons_arr =
m_cons->const_array(mfi);
390 const Array4<const Real>& u_arr =
m_xvel->const_array(mfi);
391 const Array4<const Real>& v_arr =
m_yvel->const_array(mfi);
392 const Array4<const Real>& w_arr =
m_zvel->const_array(mfi);
394 const Array4<const Real>& t13_arr =
m_tau13->const_array(mfi);
395 const Array4<const Real>& t23_arr =
m_tau23->const_array(mfi);
396 const Array4<const Real>& hfx3_arr =
m_hfx3->const_array(mfi);
397 const Array4<const Real>& qfx3_arr =
m_qfx3->const_array(mfi);
400 Array4<const Real>{};
401 ParallelFor(vbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
405 const int icol = (j-jmin)*nx + (i-imin) +
offset;
406 const int ilay = kmax - k;
418 Real rt_avg = 0.5 * (rt + rt_lo);
419 Real qv_avg = 0.5 * (
qv + qv_lo);
422 Real z = (z_arr) ? 0.125 * ( (z_arr(i ,j ,k+1) + z_arr(i ,j ,k))
423 + (z_arr(i+1,j ,k+1) + z_arr(i+1,j ,k))
424 + (z_arr(i ,j+1,k+1) + z_arr(i ,j+1,k))
425 + (z_arr(i+1,j+1,k+1) + z_arr(i+1,j+1,k)) ) *
CONST_GRAV :
426 ProbLoArr[2] + (k + 0.5) * dz;
429 Real delz = (z_arr) ? 0.25 * ( (z_arr(i ,j ,k+1) - z_arr(i ,j ,k))
430 + (z_arr(i+1,j ,k+1) - z_arr(i+1,j ,k))
431 + (z_arr(i ,j+1,k+1) - z_arr(i ,j+1,k))
432 + (z_arr(i+1,j+1,k+1) - z_arr(i+1,j+1,k)) ) : dz;
435 Real w_cc = 0.5 * (w_arr(i,j,k) + w_arr(i,j,k+1));
436 w_cc += (w_sub) ? w_sub[k] : 0.0;
437 Real w_limited = std::copysign(std::max(std::fabs(w_cc),1.0e-6),w_cc);
442 horiz_wind_d(icol,0,ilay) = 0.5 * (u_arr(i,j,k) + u_arr(i+1,j ,k));
443 horiz_wind_d(icol,1,ilay) = 0.5 * (v_arr(i,j,k) + v_arr(i ,j+1,k));
444 cldfrac_liq_d(icol,ilay) = (
qc>0.0) ? 1. : 0.;
445 tke_d(icol,ilay) = std::max(cons_arr(i,j,k,
RhoKE_comp)/r, 0.0);
446 qc_d(icol,ilay) =
qc;
451 omega_d(icol,ilay) = -w_limited * r *
CONST_GRAV;
453 surf_mom_flux_d(icol,0) = 0.5 * (t13_arr(i,j,k) + t13_arr(i+1,j ,k));
454 surf_mom_flux_d(icol,1) = 0.5 * (t23_arr(i,j,k) + t23_arr(i ,j+1,k));
456 surf_sens_flux_d(icol) = hfx3_arr(i,j,k);
457 surf_evap_d(icol) = (moist) ? qfx3_arr(i,j,k) : 0.0;
459 Real wsp = sqrt( horiz_wind_d(icol,0,ilay)[0]*horiz_wind_d(icol,0,ilay)[0]
460 + horiz_wind_d(icol,1,ilay)[0]*horiz_wind_d(icol,1,ilay)[0] );
461 surf_drag_coeff_tms_d(icol) = surf_mom_flux_d(icol,0) /
462 (-r * wsp * horiz_wind_d(icol,0,ilay)[0]);
465 qv_d(icol,ilay) =
qv;
472 pseudo_dens_d(icol,ilay) = r *
CONST_GRAV * delz;
474 dz_d(icol,ilay) = delz;
478 if (ilay==(nlay-1)) {
481 Real qv_hi = (moist) ? std::max(cons_arr(i,j,k+1,
RhoQ1_comp)/r_hi,0.0) : 0.0;
482 rt_avg = 0.5 * (rt + rt_hi);
483 qv_avg = 0.5 * (
qv + qv_hi);
constexpr amrex::Real CONST_GRAV
Definition: ERF_Constants.H:21
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getPgivenRTh(const amrex::Real rhotheta, const amrex::Real qv=0.)
Definition: ERF_EOS.H:81
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getTgivenRandRTh(const amrex::Real rho, const amrex::Real rhotheta, const amrex::Real qv=0.0)
Definition: ERF_EOS.H:46
amrex::MultiFab * m_z_phys
Definition: ERF_ShocInterface.H:611
amrex::MultiFab * m_qfx3
Definition: ERF_ShocInterface.H:605
amrex::MultiFab * m_zvel
Definition: ERF_ShocInterface.H:596
amrex::MultiFab * m_tau23
Definition: ERF_ShocInterface.H:603
amrex::MultiFab * m_tau13
Definition: ERF_ShocInterface.H:602
amrex::MultiFab * m_hfx3
Definition: ERF_ShocInterface.H:604
amrex::Real * m_w_subsid
Definition: ERF_ShocInterface.H:599