5 #ifndef ERF_Microphysics_Utils_H
6 #define ERF_Microphysics_Utils_H
10 #include <AMReX_REAL.H>
11 #include <AMReX_Array.H>
14 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
16 return std::exp(lgamma(
x));
25 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
38 AMREX_ALWAYS_ASSERT(dtt>-90);
44 esati = a0 + dtt*(a1+dtt*(
a2+dtt*(
a3+dtt*(
a4+dtt*(a5+dtt*(a6+dtt*(a7+a8*dtt)))))));
50 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
67 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
81 if (dtt>-85 && dtt<70.0) {
82 esatw = a0 + dtt*(a1+dtt*(
a2+dtt*(
a3+dtt*(
a4+dtt*(a5+dtt*(a6+dtt*(a7+a8*dtt)))))));
93 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
106 AMREX_ALWAYS_ASSERT(dtt>-85);
111 dtesati = a0 + dtt*(a1+dtt*(
a2+dtt*(
a3+dtt*(
a4+dtt*(a5+dtt*(a6+dtt*(a7+a8*dtt)))))));
117 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
132 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
146 if (dtt>-85.0 && dtt<70.) {
147 dtesatw = a0 + dtt*(a1+dtt*(
a2+dtt*(
a3+dtt*(
a4+dtt*(a5+dtt*(a6+dtt*(a7+a8*dtt)))))));
154 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
158 qsati =
Rd_on_Rv*esati/std::max(esati,p-esati);
165 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
169 qsatw =
Rd_on_Rv*esatw/std::max(esatw,p-esatw);
172 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
177 dtqsati =
Rd_on_Rv * dtesati * p / (denom * denom);
180 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
185 dtqsatw =
Rd_on_Rv * dtesatw * p / (denom * denom);
188 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
195 amrex::Real rlmo = -bflx*vonk/(ustar*ustar*ustar+eps);
203 x = std::sqrt(sqrt(1.0-bm*zeta));
204 psi1 = 2.0*std::log(1.0+
x) + std::log(1.0+
x*
x) -2.0*std::atan(
x) +
c1;
206 amrex::Real lnz = std::max(0.0, vonk*wnd/(ustar+eps) +psi1);
207 z0 =
z*std::exp(-lnz);
210 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
225 term_vel = omp*vrain*std::pow(
rho*qrr,
crain)
226 + (1.0-omp)*( (1.0-omg)*vsnow*std::pow(
rho*qss,
csnow)
227 + omg *vgrau*std::pow(
rho*qgg,
cgrau) );
232 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
234 return std::max(0.0,
y);
237 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
239 return -std::min(0.0,
y);
constexpr amrex::Real csnow
Definition: ERF_Constants.H:82
constexpr amrex::Real a_gr
Definition: ERF_Constants.H:79
constexpr amrex::Real Rd_on_Rv
Definition: ERF_Constants.H:87
constexpr amrex::Real cgrau
Definition: ERF_Constants.H:83
constexpr amrex::Real tprmin
Definition: ERF_Constants.H:33
constexpr amrex::Real qp_threshold
Definition: ERF_Constants.H:60
constexpr amrex::Real crain
Definition: ERF_Constants.H:81
constexpr amrex::Real tgrmin
Definition: ERF_Constants.H:35
constexpr amrex::Real a_pr
Definition: ERF_Constants.H:78
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real erf_esatw(amrex::Real t)
Definition: ERF_MicrophysicsUtils.H:68
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real erf_dtesatw(amrex::Real t)
Definition: ERF_MicrophysicsUtils.H:133
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void erf_dtqsatw(amrex::Real t, amrex::Real p, amrex::Real &dtqsatw)
Definition: ERF_MicrophysicsUtils.H:181
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real erf_dtesati(amrex::Real t)
Definition: ERF_MicrophysicsUtils.H:94
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real erf_esati(amrex::Real t)
Definition: ERF_MicrophysicsUtils.H:26
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real pn(amrex::Real y)
Definition: ERF_MicrophysicsUtils.H:238
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void z0_est(amrex::Real z, amrex::Real bflx, amrex::Real wnd, amrex::Real ustar, amrex::Real &z0)
Definition: ERF_MicrophysicsUtils.H:189
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real erf_dtesatw_cc(amrex::Real t)
Definition: ERF_MicrophysicsUtils.H:118
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void erf_dtqsati(amrex::Real t, amrex::Real p, amrex::Real &dtqsati)
Definition: ERF_MicrophysicsUtils.H:173
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real term_vel_qp(amrex::Real qploc, amrex::Real vrain, amrex::Real vsnow, amrex::Real vgrau, amrex::Real rho, amrex::Real tabs)
Definition: ERF_MicrophysicsUtils.H:211
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void erf_qsatw(amrex::Real t, amrex::Real p, amrex::Real &qsatw)
Definition: ERF_MicrophysicsUtils.H:166
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real erf_gammafff(amrex::Real x)
Definition: ERF_MicrophysicsUtils.H:15
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void erf_qsati(amrex::Real t, amrex::Real p, amrex::Real &qsati)
Definition: ERF_MicrophysicsUtils.H:155
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real pp(amrex::Real y)
Definition: ERF_MicrophysicsUtils.H:233
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real erf_esatw_cc(amrex::Real t)
Definition: ERF_MicrophysicsUtils.H:51
amrex::Real Real
Definition: ERF_ShocInterface.H:19
@ tabs
Definition: ERF_Kessler.H:24
@ rho
Definition: ERF_Kessler.H:22
real(c_double), parameter svp1
Definition: ERF_module_model_constants.F90:78
real(c_double), parameter a2
Definition: ERF_module_model_constants.F90:95
real(c_double), parameter a3
Definition: ERF_module_model_constants.F90:96
real(c_double), parameter svp3
Definition: ERF_module_model_constants.F90:80
real(c_double), parameter svp2
Definition: ERF_module_model_constants.F90:79
real(c_double), parameter a4
Definition: ERF_module_model_constants.F90:97
real(c_double), parameter svpt0
Definition: ERF_module_model_constants.F90:81
real(c_double), private c1
Definition: ERF_module_mp_morr_two_moment.F90:211