Split cloud components according to saturation pressures; source theta from latent heat.
16 constexpr Real bn =
tbgmin*an;
35 const auto& box3d = mfi.tilebox();
37 ParallelFor(box3d, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
46 Real delta_qv, delta_qc, delta_qi;
55 if (tabs_array(i,j,k) >=
tbgmax) {
57 delta_qi = qci_array(i,j,k);
58 qci_array(i,j,k) = 0.0;
59 qcl_array(i,j,k) += delta_qi;
60 tabs_array(i,j,k) -= fac_fus * delta_qi;
61 pres_array(i,j,k) = rho_array(i,j,k) *
R_d * tabs_array(i,j,k)
62 * (1.0 +
R_v/
R_d * qv_array(i,j,k));
63 theta_array(i,j,k) =
getThgivenPandT(tabs_array(i,j,k), pres_array(i,j,k), rdOcp);
64 pres_array(i,j,k) *= 0.01;
67 else if (tabs_array(i,j,k) <=
tbgmin) {
69 delta_qc = qcl_array(i,j,k);
70 qcl_array(i,j,k) = 0.0;
71 qci_array(i,j,k) += delta_qc;
72 tabs_array(i,j,k) += fac_fus * delta_qc;
73 pres_array(i,j,k) = rho_array(i,j,k) *
R_d * tabs_array(i,j,k)
74 * (1.0 +
R_v/
R_d * qv_array(i,j,k));
75 theta_array(i,j,k) =
getThgivenPandT(tabs_array(i,j,k), pres_array(i,j,k), rdOcp);
76 pres_array(i,j,k) *= 0.01;
80 omn = an*tabs_array(i,j,k)-bn;
81 delta_qc = qcl_array(i,j,k) - qn_array(i,j,k) * omn;
82 delta_qi = qci_array(i,j,k) - qn_array(i,j,k) * (1.0 - omn);
83 qcl_array(i,j,k) = qn_array(i,j,k) * omn;
84 qci_array(i,j,k) = qn_array(i,j,k) * (1.0 - omn);
85 tabs_array(i,j,k) += fac_fus * delta_qc;
86 pres_array(i,j,k) = rho_array(i,j,k) *
R_d * tabs_array(i,j,k)
87 * (1.0 +
R_v/
R_d * qv_array(i,j,k));
88 theta_array(i,j,k) =
getThgivenPandT(tabs_array(i,j,k), pres_array(i,j,k), rdOcp);
89 pres_array(i,j,k) *= 0.01;
93 erf_qsatw(tabs_array(i,j,k), pres_array(i,j,k), qsatw);
94 erf_qsati(tabs_array(i,j,k), pres_array(i,j,k), qsati);
95 qsat = omn * qsatw + (1.0-omn) * qsati;
98 if (qt_array(i,j,k) > qsat) {
102 fac_cond , fac_fus , fac_sub ,
104 tabs_array, pres_array,
105 qv_array , qcl_array , qci_array,
106 qn_array , qt_array);
109 theta_array(i,j,k) =
getThgivenPandT(tabs_array(i,j,k), 100.0*pres_array(i,j,k), rdOcp);
120 delta_qv = qcl_array(i,j,k) + qci_array(i,j,k);
121 delta_qc = qcl_array(i,j,k);
122 delta_qi = qci_array(i,j,k);
125 qv_array(i,j,k) += delta_qv;
126 qcl_array(i,j,k) = 0.0;
127 qci_array(i,j,k) = 0.0;
128 qn_array(i,j,k) = 0.0;
129 qt_array(i,j,k) = qv_array(i,j,k);
132 tabs_array(i,j,k) -= fac_cond * delta_qc + fac_sub * delta_qi;
135 theta_array(i,j,k) =
getThgivenPandT(tabs_array(i,j,k), 100.0*pres_array(i,j,k), rdOcp);
138 erf_qsatw(tabs_array(i,j,k), pres_array(i,j,k), qsatw);
139 erf_qsati(tabs_array(i,j,k), pres_array(i,j,k), qsati);
140 qsat = omn * qsatw + (1.0-omn) * qsati;
141 if (qt_array(i,j,k) > qsat) {
145 fac_cond , fac_fus , fac_sub ,
147 tabs_array, pres_array,
148 qv_array , qcl_array , qci_array,
149 qn_array , qt_array);
152 theta_array(i,j,k) =
getThgivenPandT(tabs_array(i,j,k), 100.0*pres_array(i,j,k), rdOcp);
constexpr amrex::Real R_v
Definition: ERF_Constants.H:11
constexpr amrex::Real tbgmax
Definition: ERF_Constants.H:32
constexpr amrex::Real tbgmin
Definition: ERF_Constants.H:31
constexpr amrex::Real R_d
Definition: ERF_Constants.H:10
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getThgivenPandT(const amrex::Real T, const amrex::Real P, const amrex::Real rdOcp)
Definition: ERF_EOS.H:18
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void erf_qsatw(amrex::Real t, amrex::Real p, amrex::Real &qsatw)
Definition: ERF_MicrophysicsUtils.H:158
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void erf_qsati(amrex::Real t, amrex::Real p, amrex::Real &qsati)
Definition: ERF_MicrophysicsUtils.H:151
amrex::Real m_fac_cond
Definition: ERF_Morrison.H:297
amrex::Real m_fac_sub
Definition: ERF_Morrison.H:299
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real NewtonIterSat(int &i, int &j, int &k, const amrex::Real &fac_cond, const amrex::Real &fac_fus, const amrex::Real &fac_sub, const amrex::Real &an, const amrex::Real &bn, const amrex::Array4< amrex::Real > &tabs_array, const amrex::Array4< amrex::Real > &pres_array, const amrex::Array4< amrex::Real > &qv_array, const amrex::Array4< amrex::Real > &qc_array, const amrex::Array4< amrex::Real > &qi_array, const amrex::Array4< amrex::Real > &qn_array, const amrex::Array4< amrex::Real > &qt_array)
Definition: ERF_Morrison.H:147
amrex::Real m_rdOcp
Definition: ERF_Morrison.H:301
amrex::Array< FabPtr, MicVar_Morr::NumVars > mic_fab_vars
Definition: ERF_Morrison.H:308
amrex::Real m_fac_fus
Definition: ERF_Morrison.H:298
@ qv
Definition: ERF_Morrison.H:33
@ pres
Definition: ERF_Morrison.H:29
@ qcl
Definition: ERF_Morrison.H:34
@ tabs
Definition: ERF_Morrison.H:28
@ theta
Definition: ERF_Morrison.H:27
@ qn
Definition: ERF_Morrison.H:32
@ rho
Definition: ERF_Morrison.H:26
@ qci
Definition: ERF_Morrison.H:35
@ qt
Definition: ERF_Morrison.H:31