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>
35 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
39 if (
T <= 0.0 ||
P <= 0.0 ||
qv < 0.0 || !amrex::Math::isfinite(
qv) ||
40 !amrex::Math::isfinite(
T) || !amrex::Math::isfinite(
P)) {
55 if (!amrex::Math::isfinite(arg) || arg > 100.0) {
64 if (qsat < 0.0 || !amrex::Math::isfinite(qsat)) {
70 if (rh < 0.0) rh = 0.0;
71 if (rh > 1.0) rh = 1.0;
97 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
104 if (!amrex::Math::isfinite(rh) || !amrex::Math::isfinite(
qc) ||
105 !amrex::Math::isfinite(rh_min) || !amrex::Math::isfinite(rh_max) ||
106 !amrex::Math::isfinite(qc_scale)) {
111 if (rh < 0.0) rh = 0.0;
112 if (rh > 1.0) rh = 1.0;
113 if (
qc < 0.0)
qc = 0.0;
118 if (rh_max > rh_min) {
120 amrex::Real cf_rh = (rh - rh_min) / (rh_max - rh_min);
121 if (cf_rh < 0.0) cf_rh = 0.0;
122 if (cf_rh > 1.0) cf_rh = 1.0;
124 }
else if (rh >= rh_min) {
131 if (qc_scale > 0.0) {
133 if (cf_qc > 1.0) cf_qc = 1.0;
138 if (cf < 0.0) cf = 0.0;
139 if (cf > 1.0) cf = 1.0;
142 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:36
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:98
amrex::Real Real
Definition: ERF_ShocInterface.H:19
@ P
Definition: ERF_IndexDefines.H:204
@ qv
Definition: ERF_Kessler.H:31
@ qc
Definition: ERF_SatAdj.H:42
@ T
Definition: ERF_IndexDefines.H:128
real(c_double), parameter epsilon
Definition: ERF_module_model_constants.F90:12