363 auto omega_d =
omega;
367 auto T_mid_d =
T_mid;
373 auto p_mid_d =
p_mid;
374 auto p_int_d =
p_int;
395 auto ProbLoArr =
m_geom.ProbLoArray();
397 auto domain =
m_geom.Domain();
398 int ilo = domain.smallEnd(0);
399 int ihi = domain.bigEnd(0);
400 int jlo = domain.smallEnd(1);
401 int jhi = domain.bigEnd(1);
403 for (MFIter mfi(*
m_cons); mfi.isValid(); ++mfi) {
405 const auto& gbx = mfi.tilebox(IntVect(0,0,0),IntVect(1,1,0));
406 const int nx = gbx.length(0);
407 const int imin = gbx.smallEnd(0);
408 const int jmin = gbx.smallEnd(1);
409 const int kmax = gbx.bigEnd(2);
412 const Array4<const Real>& cons_arr =
m_cons->const_array(mfi);
414 const Array4<const Real>& u_arr =
m_xvel->const_array(mfi);
415 const Array4<const Real>& v_arr =
m_yvel->const_array(mfi);
416 const Array4<const Real>& w_arr =
m_zvel->const_array(mfi);
418 const Array4<const Real>& t13_arr =
m_tau13->const_array(mfi);
419 const Array4<const Real>& t23_arr =
m_tau23->const_array(mfi);
420 const Array4<const Real>& hfx3_arr =
m_hfx3->const_array(mfi);
421 const Array4<const Real>& qfx3_arr =
m_qfx3->const_array(mfi);
424 Array4<const Real>{};
425 ParallelFor(gbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
429 const int icol = (j-jmin)*
nx + (i-imin) +
offset;
430 const int ilay = kmax - k;
431 const int ilayi = kmax + 1 - k;
443 Real rt_avg =
Real(0.5) * (rt + rt_lo);
447 Real delz = (z_arr) ?
Real(0.25) * ( (z_arr(i ,j ,k+1) - z_arr(i ,j ,k))
448 + (z_arr(i+1,j ,k+1) - z_arr(i+1,j ,k))
449 + (z_arr(i ,j+1,k+1) - z_arr(i ,j+1,k))
450 + (z_arr(i+1,j+1,k+1) - z_arr(i+1,j+1,k)) ) :
dz;
453 Real w_cc =
Real(0.5) * (w_arr(i,j,k) + w_arr(i,j,k+1));
454 w_cc += (w_sub) ?
Real(0.5) * (w_sub[k] + w_sub[k+1]) :
Real(0.);
455 Real w_limited = std::copysign(std::max(std::fabs(w_cc),
Real(1.0e-6)),w_cc);
459 horiz_wind_d(icol,0,ilay) =
Real(0.5) * (u_arr(i,j,k) + u_arr(i+1,j ,k));
460 horiz_wind_d(icol,1,ilay) =
Real(0.5) * (v_arr(i,j,k) + v_arr(i ,j+1,k));
462 tke_d(icol,ilay) = std::max(cons_arr(i,j,k,
RhoKE_comp)/r,
Real(0.));
463 qc_d(icol,ilay) =
qc;
468 omega_d(icol,ilay) = -w_limited * r *
CONST_GRAV;
470 int ii = std::min(std::max(i,ilo),ihi);
471 int jj = std::min(std::max(j,jlo),jhi);
473 surf_mom_flux_d(icol,0) =
Real(0.5) * (t13_arr(ii,jj,k) + t13_arr(ii+1,jj ,k));
474 surf_mom_flux_d(icol,1) =
Real(0.5) * (t23_arr(ii,jj,k) + t23_arr(ii ,jj+1,k));
476 surf_sens_flux_d(icol) = hfx3_arr(ii,jj,k);
477 surf_evap_d(icol) = (moist) ? qfx3_arr(ii,jj,k) :
Real(0.);
480 Real wsp = std::sqrt( horiz_wind_d(icol,0,ilay)[0]*horiz_wind_d(icol,0,ilay)[0]
481 + horiz_wind_d(icol,1,ilay)[0]*horiz_wind_d(icol,1,ilay)[0] );
482 Real stress_mag = std::sqrt( surf_mom_flux_d(icol,0)*surf_mom_flux_d(icol,0)
483 + surf_mom_flux_d(icol,1)*surf_mom_flux_d(icol,1) );
484 surf_drag_coeff_tms_d(icol) = (wsp >
Real(1.0e-8)) ? stress_mag / wsp :
Real(0.);
487 qv_d(icol,ilay) =
qv;
496 dz_d(icol,ilay) =
delz;
499 Real z = (z_arr) ?
Real(0.125) * ( (z_arr(i ,j ,k+1) + z_arr(i ,j ,k))
500 + (z_arr(i+1,j ,k+1) + z_arr(i+1,j ,k))
501 + (z_arr(i ,j+1,k+1) + z_arr(i ,j+1,k))
502 + (z_arr(i+1,j+1,k+1) + z_arr(i+1,j+1,k)) ) : ProbLoArr[2];
510 rt_avg =
Real(0.5) * (rt + rt_hi);
511 qv_avg =
Real(0.5) * (
qv + qv_hi);
constexpr amrex::Real CONST_GRAV
Definition: ERF_Constants.H:56
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getTgivenRandRTh(const amrex::Real rho, const amrex::Real rhotheta, const amrex::Real qv=amrex::Real(0))
Definition: ERF_EOS.H:46
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getPgivenRTh(const amrex::Real rhotheta, const amrex::Real qv=amrex::Real(0))
Definition: ERF_EOS.H:81
amrex::MultiFab * m_z_phys
Definition: ERF_ShocInterface.H:645
amrex::MultiFab * m_qfx3
Definition: ERF_ShocInterface.H:639
amrex::MultiFab * m_zvel
Definition: ERF_ShocInterface.H:630
amrex::MultiFab * m_tau23
Definition: ERF_ShocInterface.H:637
amrex::MultiFab * m_tau13
Definition: ERF_ShocInterface.H:636
amrex::MultiFab * m_hfx3
Definition: ERF_ShocInterface.H:638
amrex::Real * m_w_subsid
Definition: ERF_ShocInterface.H:633
@ delz
Definition: ERF_WSM6.H:281