355 auto omega_d =
omega;
359 auto T_mid_d =
T_mid;
365 auto p_mid_d =
p_mid;
366 auto p_int_d =
p_int;
387 auto ProbLoArr =
m_geom.ProbLoArray();
389 auto domain =
m_geom.Domain();
390 int ilo = domain.smallEnd(0);
391 int ihi = domain.bigEnd(0);
392 int jlo = domain.smallEnd(1);
393 int jhi = domain.bigEnd(1);
395 for (MFIter mfi(*
m_cons); mfi.isValid(); ++mfi) {
397 const auto& gbx = mfi.tilebox(IntVect(0,0,0),IntVect(1,1,0));
398 const int nx = gbx.length(0);
399 const int imin = gbx.smallEnd(0);
400 const int jmin = gbx.smallEnd(1);
401 const int kmax = gbx.bigEnd(2);
404 const Array4<const Real>& cons_arr =
m_cons->const_array(mfi);
406 const Array4<const Real>& u_arr =
m_xvel->const_array(mfi);
407 const Array4<const Real>& v_arr =
m_yvel->const_array(mfi);
408 const Array4<const Real>& w_arr =
m_zvel->const_array(mfi);
410 const Array4<const Real>& t13_arr =
m_tau13->const_array(mfi);
411 const Array4<const Real>& t23_arr =
m_tau23->const_array(mfi);
412 const Array4<const Real>& hfx3_arr =
m_hfx3->const_array(mfi);
413 const Array4<const Real>& qfx3_arr =
m_qfx3->const_array(mfi);
416 Array4<const Real>{};
417 ParallelFor(gbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
421 const int icol = (j-jmin)*nx + (i-imin) +
offset;
422 const int ilay = kmax - k;
434 Real rt_avg = 0.5 * (rt + rt_lo);
435 Real qv_avg = 0.5 * (
qv + qv_lo);
438 Real delz = (z_arr) ? 0.25 * ( (z_arr(i ,j ,k+1) - z_arr(i ,j ,k))
439 + (z_arr(i+1,j ,k+1) - z_arr(i+1,j ,k))
440 + (z_arr(i ,j+1,k+1) - z_arr(i ,j+1,k))
441 + (z_arr(i+1,j+1,k+1) - z_arr(i+1,j+1,k)) ) : dz;
444 Real w_cc = 0.5 * (w_arr(i,j,k) + w_arr(i,j,k+1));
445 w_cc += (w_sub) ? w_sub[k] : 0.0;
446 Real w_limited = std::copysign(std::max(std::fabs(w_cc),1.0e-6),w_cc);
450 horiz_wind_d(icol,0,ilay) = 0.5 * (u_arr(i,j,k) + u_arr(i+1,j ,k));
451 horiz_wind_d(icol,1,ilay) = 0.5 * (v_arr(i,j,k) + v_arr(i ,j+1,k));
452 cldfrac_liq_d(icol,ilay) = (
qc>0.0) ? 1. : 0.;
453 tke_d(icol,ilay) = std::max(cons_arr(i,j,k,
RhoKE_comp)/r, 0.0);
454 qc_d(icol,ilay) =
qc;
459 omega_d(icol,ilay) = -w_limited * r *
CONST_GRAV;
461 int ii = std::min(std::max(i,ilo),ihi);
462 int jj = std::min(std::max(j,jlo),jhi);
464 surf_mom_flux_d(icol,0) = 0.5 * (t13_arr(ii,jj,k) + t13_arr(ii+1,jj ,k));
465 surf_mom_flux_d(icol,1) = 0.5 * (t23_arr(ii,jj,k) + t23_arr(ii ,jj+1,k));
467 surf_sens_flux_d(icol) = hfx3_arr(ii,jj,k);
468 surf_evap_d(icol) = (moist) ? qfx3_arr(ii,jj,k) : 0.0;
470 Real wsp = sqrt( horiz_wind_d(icol,0,ilay)[0]*horiz_wind_d(icol,0,ilay)[0]
471 + horiz_wind_d(icol,1,ilay)[0]*horiz_wind_d(icol,1,ilay)[0] );
472 surf_drag_coeff_tms_d(icol) = surf_mom_flux_d(icol,0) /
473 (-r * wsp * horiz_wind_d(icol,0,ilay)[0]);
476 qv_d(icol,ilay) =
qv;
483 pseudo_dens_d(icol,ilay) = r *
CONST_GRAV * delz;
485 dz_d(icol,ilay) = delz;
488 Real z = (z_arr) ? 0.125 * ( (z_arr(i ,j ,k+1) + z_arr(i ,j ,k))
489 + (z_arr(i+1,j ,k+1) + z_arr(i+1,j ,k))
490 + (z_arr(i ,j+1,k+1) + z_arr(i ,j+1,k))
491 + (z_arr(i+1,j+1,k+1) + z_arr(i+1,j+1,k)) ) :
496 if (ilay==(nlay-1)) {
499 Real qv_hi = (moist) ? std::max(cons_arr(i,j,k+1,
RhoQ1_comp)/r_hi,0.0) : 0.0;
500 rt_avg = 0.5 * (rt + rt_hi);
501 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