1 #ifndef ERF_PROGNOSTIC_CLOUD_FRACTION_H_
2 #define ERF_PROGNOSTIC_CLOUD_FRACTION_H_
4 #include <AMReX_GpuControl.H>
5 #include <AMReX_Math.H>
6 #include <AMReX_FArrayBox.H>
36 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
40 if (
T <= 0.0 ||
P <= 0.0 ||
qv < 0.0 || !amrex::Math::isfinite(
qv) ||
41 !amrex::Math::isfinite(
T) || !amrex::Math::isfinite(
P)) {
71 if (rh < 0.0) rh = 0.0;
72 if (rh > 1.0) rh = 1.0;
98 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
105 if (!amrex::Math::isfinite(rh) || !amrex::Math::isfinite(
qc) ||
106 !amrex::Math::isfinite(rh_min) || !amrex::Math::isfinite(rh_max) ||
107 !amrex::Math::isfinite(qc_scale)) {
112 if (rh < 0.0) rh = 0.0;
113 if (rh > 1.0) rh = 1.0;
114 if (
qc < 0.0)
qc = 0.0;
119 if (rh_max > rh_min) {
121 amrex::Real cf_rh = (rh - rh_min) / (rh_max - rh_min);
122 if (cf_rh < 0.0) cf_rh = 0.0;
123 if (cf_rh > 1.0) cf_rh = 1.0;
125 }
else if (rh >= rh_min) {
132 if (qc_scale > 0.0) {
134 if (cf_qc > 1.0) cf_qc = 1.0;
139 if (cf < 0.0) cf = 0.0;
140 if (cf > 1.0) cf = 1.0;
143 if (!amrex::Math::isfinite(cf)) {
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real compute_relative_humidity(amrex::Real qv, amrex::Real T, amrex::Real P)
Compute relative humidity from water vapor mixing ratio.
Definition: ERF_PrognosticCloudFraction.H:37
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real diagnose_cloud_fraction_from_rh_qc(amrex::Real rh, amrex::Real qc, amrex::Real rh_min, amrex::Real rh_max, amrex::Real qc_scale)
Diagnose cloud fraction from relative humidity and cloud water.
Definition: ERF_PrognosticCloudFraction.H:99
amrex::Real Real
Definition: ERF_ShocInterface.H:19
@ P
Definition: ERF_IndexDefines.H:244
@ qv
Definition: ERF_Kessler.H:31
@ qc
Definition: ERF_Morrison.H:110
@ T
Definition: ERF_IndexDefines.H:168
real(c_double), parameter epsilon
Definition: ERF_module_model_constants.F90:12