45 const auto& cons_arr =
cons.const_array(mfi);
46 const auto& u_arr =
xvel.const_array(mfi);
47 const auto& v_arr =
yvel.const_array(mfi);
48 const auto& w_arr =
zvel.const_array(mfi);
49 const auto& z_arr = z_phys_nd.const_array(mfi);
51 const Array4<const Real> hfx_arr = hfx3 ? hfx3->const_array(mfi) : Array4<const Real>{};
52 const Array4<const Real> qfx_arr = qfx3 ? qfx3->const_array(mfi) : Array4<const Real>{};
53 const Array4<const Real> t13_arr =
tau13 ?
tau13->const_array(mfi) : Array4<const Real>{};
54 const Array4<const Real> t23_arr =
tau23 ?
tau23->const_array(mfi) : Array4<const Real>{};
56 auto zt_arr = col.
zt.array();
57 auto zi_arr = col.
zi.array();
58 auto dz_arr = col.
dz.array();
59 auto p_mid_arr = col.
p_mid.array();
60 auto p_int_arr = col.
p_int.array();
62 auto theta_arr = col.
theta.array();
63 auto exner_arr = col.
exner.array();
64 auto theta_v_arr = col.
theta_v.array();
65 auto thetal_arr = col.
thetal.array();
67 auto qc_arr = col.
qc.array();
68 auto qi_arr = col.
qi.array();
69 auto qw_arr = col.
qw.array();
70 auto shoc_ql_arr = col.
shoc_ql.array();
71 auto tabs_arr = col.
tabs.array();
72 auto tke_arr = col.
tke.array();
73 auto ucol_arr = col.
u.array();
74 auto vcol_arr = col.
v.array();
75 auto wcol_arr = col.
w.array();
82 const auto problo = geom.ProbLoArray();
83 const auto dx = geom.CellSizeArray();
86 const int ncomp =
cons.nComp();
87 const auto layout = col.
layout;
89 const Box xy_box = amrex::makeSlab(mfi.validbox(), 2,
klo);
91 ParallelFor(xy_box, [=] AMREX_GPU_DEVICE (
int i,
int j,
int) noexcept
94 const Real rho_sfc = amrex::max(cons_arr(i,j,
klo,
Rho_comp), 1.0e-12_rt);
98 if (hfx3) sflux_arr(ic,0,0) = hfx_arr(i,j,
klo) / rho_sfc;
99 if (qfx3) lflux_arr(ic,0,0) = qfx_arr(i,j,
klo) / rho_sfc;
101 tauu_arr(ic,0,0) = 0.5_rt * (t13_arr(i,j,
klo) + t13_arr(i+1,j,
klo)) / rho_sfc;
104 tauv_arr(ic,0,0) = 0.5_rt * (t23_arr(i,j,
klo) + t23_arr(i,j+1,
klo)) / rho_sfc;
107 for (
int k =
klo; k <=
khi; ++k) {
108 const int kk = k -
klo;
112 const Real zlo = four_node_z_avg(z_arr, i, j, k);
113 const Real zhi = four_node_z_avg(z_arr, i, j, k+1);
114 const Real zc = 0.5_rt * (zlo + zhi);
115 const Real dz = zhi - zlo;
118 const Real qv = load_q(cons_arr, i, j, k, moisture_indices.
qv,
rho, ncomp);
119 const Real qc = load_q(cons_arr, i, j, k, moisture_indices.
qc,
rho, ncomp);
120 const Real qi = load_q(cons_arr, i, j, k, moisture_indices.
qi,
rho, ncomp);
129 const Real theta_v =
theta * (1.0_rt + 0.61_rt *
qv - ql_np);
132 zt_arr(ic,kk,0) =
zc;
133 zi_arr(ic,kk,0) = zlo;
134 zi_arr(ic,kk+1,0) = zhi;
135 dz_arr(ic,kk,0) =
dz;
136 p_mid_arr(ic,kk,0) =
p;
138 theta_arr(ic,kk,0) =
theta;
139 exner_arr(ic,kk,0) = exner;
140 theta_v_arr(ic,kk,0) = theta_v;
141 thetal_arr(ic,kk,0) = thetal;
143 qc_arr(ic,kk,0) =
qc;
144 qi_arr(ic,kk,0) =
qi;
145 qw_arr(ic,kk,0) =
qv +
qc +
qi;
146 shoc_ql_arr(ic,kk,0) = ql_np;
147 tabs_arr(ic,kk,0) =
tabs;
148 tke_arr(ic,kk,0) = qke;
151 ucol_arr(ic,kk,0) = 0.5_rt * (u_arr(i,j,k) + u_arr(i+1,j,k));
152 vcol_arr(ic,kk,0) = 0.5_rt * (v_arr(i,j,k) + v_arr(i,j+1,k));
153 wcol_arr(ic,kk,0) = 0.5_rt * (w_arr(i,j,k) + w_arr(i,j,k+1));
156 p_int_arr(ic,0,0) = p_mid_arr(ic,0,0);
157 for (
int k =
klo+1; k <=
khi; ++k) {
158 const int kk = k -
klo;
159 p_int_arr(ic,kk,0) = 0.5_rt * (p_mid_arr(ic,kk-1,0) + p_mid_arr(ic,kk,0));
161 p_int_arr(ic,layout.nlev,0) = p_mid_arr(ic,layout.nlev-1,0);
constexpr amrex::Real Cp_d
Definition: ERF_Constants.H:36
constexpr amrex::Real CONST_GRAV
Definition: ERF_Constants.H:56
@ tau23
Definition: ERF_DataStruct.H:40
@ tau13
Definition: ERF_DataStruct.H:40
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
#define Rho_comp
Definition: ERF_IndexDefines.H:39
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:40
#define RhoKE_comp
Definition: ERF_IndexDefines.H:41
auto problo
Definition: ERF_InitCustomPertVels_ABL.H:36
const int klo
Definition: ERF_InitCustomPert_ABL.H:75
const Real zc
Definition: ERF_InitCustomPert_ABL.H:56
const Real dx
Definition: ERF_InitCustomPert_ABL.H:44
const int khi
Definition: ERF_InitCustomPert_Bubble.H:21
auto qv_arr
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:210
ParallelFor(fab_box, [=] AMREX_GPU_DEVICE(int i, int j, int k) { qrcuten_arr(i, j, k)=Real(0);qscuten_arr(i, j, k)=Real(0);qicuten_arr(i, j, k)=Real(0);})
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int shoc_column_index(const ShocColumnLayout &layout, int i, int j)
Definition: ERF_ShocColumnData.H:130
amrex::Real Real
Definition: ERF_ShocInterface.H:19
auto rho_arr
Definition: ERF_UpdateWSubsidence_SineMassFlux.H:3
@ theta
Definition: ERF_SLM.H:19
@ tabs
Definition: ERF_Kessler.H:27
@ rho
Definition: ERF_Kessler.H:25
@ qv
Definition: ERF_Kessler.H:31
@ qc
Definition: ERF_SatAdj.H:42
@ qi
Definition: ERF_WDM6.H:28
@ xvel
Definition: ERF_IndexDefines.H:215
@ cons
Definition: ERF_IndexDefines.H:214
@ zvel
Definition: ERF_IndexDefines.H:217
@ yvel
Definition: ERF_IndexDefines.H:216
@ dz
Definition: ERF_AdvanceWDM6.cpp:272
@ p
Definition: ERF_WSM6.H:280
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real thetal_from_theta(amrex::Real theta, amrex::Real qc, amrex::Real qi, amrex::Real exner) noexcept
Definition: ERF_ShocThermoUtils.H:52
int qi
cloud ice
Definition: ERF_DataStruct.H:236
int qv
water vapor
Definition: ERF_DataStruct.H:234
int qc
cloud liquid water
Definition: ERF_DataStruct.H:235
amrex::FArrayBox theta_v
Definition: ERF_ShocTypes.H:84
amrex::FArrayBox theta
Definition: ERF_ShocTypes.H:82
amrex::FArrayBox qi
Definition: ERF_ShocTypes.H:88
amrex::FArrayBox dz
Definition: ERF_ShocTypes.H:78
amrex::FArrayBox surf_lat_flux
Definition: ERF_ShocTypes.H:145
amrex::FArrayBox rho
Definition: ERF_ShocTypes.H:81
amrex::FArrayBox shoc_ql
Definition: ERF_ShocTypes.H:111
amrex::FArrayBox w
Definition: ERF_ShocTypes.H:94
amrex::FArrayBox host_dse
Definition: ERF_ShocTypes.H:95
amrex::FArrayBox qc
Definition: ERF_ShocTypes.H:87
amrex::FArrayBox surf_tau_v
Definition: ERF_ShocTypes.H:147
amrex::FArrayBox tke
Definition: ERF_ShocTypes.H:91
amrex::FArrayBox p_int
Definition: ERF_ShocTypes.H:80
amrex::FArrayBox exner
Definition: ERF_ShocTypes.H:83
ShocColumnLayout layout
Definition: ERF_ShocTypes.H:73
amrex::FArrayBox zi
Definition: ERF_ShocTypes.H:77
amrex::FArrayBox tabs
Definition: ERF_ShocTypes.H:90
amrex::FArrayBox surf_sens_flux
Definition: ERF_ShocTypes.H:144
amrex::FArrayBox qw
Definition: ERF_ShocTypes.H:89
amrex::FArrayBox v
Definition: ERF_ShocTypes.H:93
amrex::FArrayBox zt
Definition: ERF_ShocTypes.H:76
amrex::FArrayBox qv
Definition: ERF_ShocTypes.H:86
amrex::FArrayBox p_mid
Definition: ERF_ShocTypes.H:79
amrex::FArrayBox u
Definition: ERF_ShocTypes.H:92
amrex::FArrayBox surf_tau_u
Definition: ERF_ShocTypes.H:146
amrex::FArrayBox thetal
Definition: ERF_ShocTypes.H:85
int kmax
Definition: ERF_ShocTypes.H:68
int kmin
Definition: ERF_ShocTypes.H:67