343 auto omega_d =
omega;
347 auto T_mid_d =
T_mid;
353 auto p_mid_d =
p_mid;
354 auto p_int_d =
p_int;
375 auto ProbLoArr =
m_geom.ProbLoArray();
376 for (MFIter mfi(*
m_cons); mfi.isValid(); ++mfi) {
377 const auto& vbx = mfi.validbox();
378 const int nx = vbx.length(0);
379 const int imin = vbx.smallEnd(0);
380 const int jmin = vbx.smallEnd(1);
382 const Array4<const Real>& cons_arr =
m_cons->const_array(mfi);
384 const Array4<const Real>& u_arr =
m_xvel->const_array(mfi);
385 const Array4<const Real>& v_arr =
m_yvel->const_array(mfi);
386 const Array4<const Real>& w_arr =
m_zvel->const_array(mfi);
388 const Array4<const Real>& t13_arr =
m_tau13->const_array(mfi);
389 const Array4<const Real>& t23_arr =
m_tau23->const_array(mfi);
390 const Array4<const Real>& hfx3_arr =
m_hfx3->const_array(mfi);
391 const Array4<const Real>& qfx3_arr =
m_qfx3->const_array(mfi);
393 const Array4<const Real>& mu_arr =
m_mu->const_array(mfi);
396 Array4<const Real>{};
397 ParallelFor(vbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
400 const int icol = (j-jmin)*nx + (i-imin) +
offset;
413 Real r_avg = 0.5 * (r + r_lo);
414 Real rt_avg = 0.5 * (rt + rt_lo);
415 Real qv_avg = 0.5 * (
qv + qv_lo);
418 Real z = (z_arr) ? 0.125 * ( (z_arr(i ,j ,k+1) + z_arr(i ,j ,k))
419 + (z_arr(i+1,j ,k+1) + z_arr(i+1,j ,k))
420 + (z_arr(i ,j+1,k+1) + z_arr(i ,j+1,k))
421 + (z_arr(i+1,j+1,k+1) + z_arr(i+1,j+1,k)) ) *
CONST_GRAV :
422 ProbLoArr[2] + (k + 0.5) * dz;
425 Real delz = (z_arr) ? 0.25 * ( (z_arr(i ,j ,k+1) - z_arr(i ,j ,k))
426 + (z_arr(i+1,j ,k+1) - z_arr(i+1,j ,k))
427 + (z_arr(i ,j+1,k+1) - z_arr(i ,j+1,k))
428 + (z_arr(i+1,j+1,k+1) - z_arr(i+1,j+1,k)) ) : dz;
431 Real w_cc = 0.5 * (w_arr(i,j,k) + w_arr(i,j,k+1));
432 w_cc += (w_sub) ? w_sub[k] : 0.0;
433 Real w_limited = std::copysign(std::max(std::fabs(w_cc),1.0e-6),w_cc);
439 omega_d(icol,ilay) = -w_limited * r *
CONST_GRAV;
441 surf_mom_flux_d(icol,0) = 0.5 * (t13_arr(i,j,k) + t13_arr(i+1,j ,k));
442 surf_mom_flux_d(icol,1) = 0.5 * (t23_arr(i,j,k) + t23_arr(i ,j+1,k));
444 surf_sens_flux_d(icol) = hfx3_arr(i,j,k) * r *
Cp_d;
445 surf_evap(icol) = (moist) ? qfx3_arr(i,j,k) : 0.0;
448 qv_d(icol,ilay) =
qv;
449 surf_drag_coeff_tms_d(icol) = 0.0;
456 pseudo_dens_d(icol,ilay) = r *
CONST_GRAV * delz;
458 dz_d(icol,ilay) = delz;
462 if (ilay==(nlay-1)) {
465 Real qv_hi = (moist) ? std::max(cons_arr(i,j,k+1,
RhoQ1_comp)/r_hi,0.0) : 0.0;
466 r_avg = 0.5 * (r + r_hi);
467 rt_avg = 0.5 * (rt + rt_hi);
468 qv_avg = 0.5 * (
qv + qv_hi);
474 horiz_wind_d(icol,0,ilay) = 0.5 * (u_arr(i,j,k) + u_arr(i+1,j ,k));
475 horiz_wind_d(icol,1,ilay) = 0.5 * (v_arr(i,j,k) + v_arr(i ,j+1,k));
476 cldfrac_liq_d(icol,ilay) = (
qc>0.0) ? 1. : 0.;
477 tke_d(icol,ilay) = std::max(cons_arr(i,j,k,
RhoKE_comp)/r, 0.0);
478 qc_d(icol,ilay) =
qc;
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:593
amrex::MultiFab * m_qfx3
Definition: ERF_ShocInterface.H:587
amrex::MultiFab * m_zvel
Definition: ERF_ShocInterface.H:578
amrex::MultiFab * m_tau23
Definition: ERF_ShocInterface.H:585
amrex::MultiFab * m_tau13
Definition: ERF_ShocInterface.H:584
amrex::MultiFab * m_hfx3
Definition: ERF_ShocInterface.H:586
amrex::Real * m_w_subsid
Definition: ERF_ShocInterface.H:581