362 auto omega_d =
omega;
366 auto T_mid_d =
T_mid;
372 auto p_mid_d =
p_mid;
373 auto p_int_d =
p_int;
394 auto ProbLoArr =
m_geom.ProbLoArray();
396 auto domain =
m_geom.Domain();
397 int ilo = domain.smallEnd(0);
398 int ihi = domain.bigEnd(0);
399 int jlo = domain.smallEnd(1);
400 int jhi = domain.bigEnd(1);
402 for (MFIter mfi(*
m_cons); mfi.isValid(); ++mfi) {
404 const auto& gbx = mfi.tilebox(IntVect(0,0,0),IntVect(1,1,0));
405 const int nx = gbx.length(0);
406 const int imin = gbx.smallEnd(0);
407 const int jmin = gbx.smallEnd(1);
408 const int kmax = gbx.bigEnd(2);
411 const Array4<const Real>& cons_arr =
m_cons->const_array(mfi);
413 const Array4<const Real>& u_arr =
m_xvel->const_array(mfi);
414 const Array4<const Real>& v_arr =
m_yvel->const_array(mfi);
415 const Array4<const Real>& w_arr =
m_zvel->const_array(mfi);
417 const Array4<const Real>& t13_arr =
m_tau13->const_array(mfi);
418 const Array4<const Real>& t23_arr =
m_tau23->const_array(mfi);
419 const Array4<const Real>& hfx3_arr =
m_hfx3->const_array(mfi);
420 const Array4<const Real>& qfx3_arr =
m_qfx3->const_array(mfi);
423 Array4<const Real>{};
424 ParallelFor(gbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
428 const int icol = (j-jmin)*nx + (i-imin) +
offset;
429 const int ilay = kmax - k;
430 const int ilayi = kmax + 1 - k;
442 Real rt_avg = 0.5 * (rt + rt_lo);
443 Real qv_avg = 0.5 * (
qv + qv_lo);
446 Real delz = (z_arr) ? 0.25 * ( (z_arr(i ,j ,k+1) - z_arr(i ,j ,k))
447 + (z_arr(i+1,j ,k+1) - z_arr(i+1,j ,k))
448 + (z_arr(i ,j+1,k+1) - z_arr(i ,j+1,k))
449 + (z_arr(i+1,j+1,k+1) - z_arr(i+1,j+1,k)) ) : dz;
452 Real w_cc = 0.5 * (w_arr(i,j,k) + w_arr(i,j,k+1));
453 w_cc += (w_sub) ? w_sub[k] : 0.0;
454 Real w_limited = std::copysign(std::max(std::fabs(w_cc),1.0e-6),w_cc);
458 horiz_wind_d(icol,0,ilay) = 0.5 * (u_arr(i,j,k) + u_arr(i+1,j ,k));
459 horiz_wind_d(icol,1,ilay) = 0.5 * (v_arr(i,j,k) + v_arr(i ,j+1,k));
460 cldfrac_liq_d(icol,ilay) = (
qc>0.0) ? 1. : 0.;
461 tke_d(icol,ilay) = std::max(cons_arr(i,j,k,
RhoKE_comp)/r, 0.0);
462 qc_d(icol,ilay) =
qc;
467 omega_d(icol,ilay) = -w_limited * r *
CONST_GRAV;
469 int ii = std::min(std::max(i,ilo),ihi);
470 int jj = std::min(std::max(j,jlo),jhi);
472 surf_mom_flux_d(icol,0) = 0.5 * (t13_arr(ii,jj,k) + t13_arr(ii+1,jj ,k));
473 surf_mom_flux_d(icol,1) = 0.5 * (t23_arr(ii,jj,k) + t23_arr(ii ,jj+1,k));
475 surf_sens_flux_d(icol) = hfx3_arr(ii,jj,k);
476 surf_evap_d(icol) = (moist) ? qfx3_arr(ii,jj,k) : 0.0;
478 Real wsp = sqrt( horiz_wind_d(icol,0,ilay)[0]*horiz_wind_d(icol,0,ilay)[0]
479 + horiz_wind_d(icol,1,ilay)[0]*horiz_wind_d(icol,1,ilay)[0] );
480 surf_drag_coeff_tms_d(icol) = surf_mom_flux_d(icol,0) /
481 (-r * wsp * horiz_wind_d(icol,0,ilay)[0]);
484 qv_d(icol,ilay) =
qv;
491 pseudo_dens_d(icol,ilay) = r *
CONST_GRAV * delz;
493 dz_d(icol,ilay) = delz;
496 Real z = (z_arr) ? 0.125 * ( (z_arr(i ,j ,k+1) + z_arr(i ,j ,k))
497 + (z_arr(i+1,j ,k+1) + z_arr(i+1,j ,k))
498 + (z_arr(i ,j+1,k+1) + z_arr(i ,j+1,k))
499 + (z_arr(i+1,j+1,k+1) + z_arr(i+1,j+1,k)) ) :
507 Real qv_hi = (moist) ? std::max(cons_arr(i,j,k+1,
RhoQ1_comp)/r_hi,0.0) : 0.0;
508 rt_avg = 0.5 * (rt + rt_hi);
509 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