5 #ifndef ERF_Microphysics_Utils_H
6 #define ERF_Microphysics_Utils_H
12 #include <AMReX_REAL.H>
13 #include <AMReX_Array.H>
34 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
40 const bool use_anelastic_reference_pressure,
43 if (use_anelastic_reference_pressure) {
54 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
57 return std::exp(std::lgamma(
x));
66 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
86 esati = a0 + dtt*(a1+dtt*(
a2+dtt*(
a3+dtt*(
a4+dtt*(a5+dtt*(a6+dtt*(a7+a8*dtt)))))));
97 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
107 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
120 return a0 + dtt*(a1+dtt*(
a2+dtt*(
a3+dtt*(
a4+dtt*(a5+dtt*(a6+dtt*(a7+a8*dtt)))))));
123 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
136 return a0 + dtt*(a1+dtt*(
a2+dtt*(
a3+dtt*(
a4+dtt*(a5+dtt*(a6+dtt*(a7+a8*dtt)))))));
139 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
144 return dtt > poly_min_dtt && dtt <
amrex::Real(70.0) &&
158 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
178 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
197 dtesati = a0 + dtt*(a1+dtt*(
a2+dtt*(
a3+dtt*(
a4+dtt*(a5+dtt*(a6+dtt*(a7+a8*dtt)))))));
205 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
221 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
232 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
235 return RdoRv * esat / std::max(esat,
p - esat);
240 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
243 if ((
p - esat) >= esat) {
245 return RdoRv * dtesat *
p / (denom * denom);
253 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
263 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
270 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
279 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
constexpr amrex::Real RdoRv
Definition: ERF_Constants.H:44
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_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getTgivenPandTh(const amrex::Real P, const amrex::Real th, const amrex::Real rdOcp)
Definition: ERF_EOS.H:32
const Real rdOcp
Definition: ERF_InitCustomPert_ABL.H:72
AMREX_ALWAYS_ASSERT(bx.length()[2]==khi+1)
bool use_empirical
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:25
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool erf_use_positive_esatw_poly(amrex::Real t)
Definition: ERF_MicrophysicsUtils.H:140
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real erf_dtesatw(amrex::Real t)
Definition: ERF_MicrophysicsUtils.H:222
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void erf_dtqsatw(amrex::Real t, amrex::Real p, amrex::Real &dtqsatw)
Definition: ERF_MicrophysicsUtils.H:280
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real erf_dtesati(amrex::Real t)
Definition: ERF_MicrophysicsUtils.H:179
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real erf_esatw_flatau_poly(amrex::Real dtt)
Definition: ERF_MicrophysicsUtils.H:108
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real erf_dtesatw_flatau_poly(amrex::Real dtt)
Definition: ERF_MicrophysicsUtils.H:124
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real erf_esati(amrex::Real t)
Definition: ERF_MicrophysicsUtils.H:67
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE MicrophysicsThermoState diagnose_microphysics_thermo_state(const amrex::Real rho, const amrex::Real rho_theta, const amrex::Real qv, const amrex::Real rdOcp, const bool use_anelastic_reference_pressure, const amrex::Real p0) noexcept
Definition: ERF_MicrophysicsUtils.H:35
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real erf_dtesatw_cc(amrex::Real t)
Definition: ERF_MicrophysicsUtils.H:206
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real erf_qsat_from_esat(amrex::Real esat, amrex::Real p)
Definition: ERF_MicrophysicsUtils.H:233
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void erf_dtqsati(amrex::Real t, amrex::Real p, amrex::Real &dtqsati)
Definition: ERF_MicrophysicsUtils.H:271
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void erf_qsatw(amrex::Real t, amrex::Real p, amrex::Real &qsatw)
Definition: ERF_MicrophysicsUtils.H:264
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real erf_gammafff(amrex::Real x)
Definition: ERF_MicrophysicsUtils.H:55
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real erf_dtqsat_from_esat(amrex::Real esat, amrex::Real dtesat, amrex::Real p)
Definition: ERF_MicrophysicsUtils.H:241
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void erf_qsati(amrex::Real t, amrex::Real p, amrex::Real &qsati)
Definition: ERF_MicrophysicsUtils.H:254
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real erf_esatw(amrex::Real t, bool use_empirical=false)
Definition: ERF_MicrophysicsUtils.H:159
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real erf_esatw_cc(amrex::Real t)
Definition: ERF_MicrophysicsUtils.H:98
amrex::Real Real
Definition: ERF_ShocInterface.H:19
@ theta
Definition: ERF_SLM.H:19
@ rho
Definition: ERF_Kessler.H:25
@ qv
Definition: ERF_Kessler.H:31
@ qsatw
Definition: ERF_WSM6.H:340
@ qsati
Definition: ERF_WSM6.H:340
@ t
Definition: ERF_WSM6.H:272
@ p
Definition: ERF_WSM6.H:280
real(c_double), parameter svp1
Definition: ERF_module_model_constants.F90:78
real(c_double), parameter p0
Definition: ERF_module_model_constants.F90:40
real(c_double), parameter epsilon
Definition: ERF_module_model_constants.F90:12
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
Definition: ERF_MicrophysicsUtils.H:22
amrex::Real pressure_pa
Definition: ERF_MicrophysicsUtils.H:23
amrex::Real temperature
Definition: ERF_MicrophysicsUtils.H:24