@@ -64,6 +64,7 @@ Return the parameters of the rain drop diameter distribution
64
64
- A `NamedTuple` with the fields `(; N₀r, Dr_mean, xr_mean)`
65
65
"""
66
66
function pdf_rain_parameters (pdf_r:: CMP.RainParticlePDF_SB2006_notlimited , qᵣ, ρₐ, Nᵣ)
67
+ (iszero (Nᵣ) && iszero (qᵣ)) && return (; N₀r = zero (Nᵣ), Dr_mean = zero (qᵣ), xr_mean = zero (qᵣ))
67
68
(; ρw) = pdf_r
68
69
Lᵣ = ρₐ * qᵣ
69
70
@@ -75,11 +76,12 @@ function pdf_rain_parameters(pdf_r::CMP.RainParticlePDF_SB2006_notlimited, qᵣ,
75
76
return (; N₀r, Dr_mean, xr_mean)
76
77
end
77
78
function pdf_rain_parameters (pdf_r:: CMP.RainParticlePDF_SB2006_limited , qᵣ, ρₐ, Nᵣ)
79
+ (iszero (Nᵣ) && iszero (qᵣ)) && return (; N₀r = zero (Nᵣ), Dr_mean = zero (qᵣ), xr_mean = zero (qᵣ))
78
80
(; xr_min, xr_max, N0_min, N0_max, λ_min, λ_max, ρw) = pdf_r
79
81
Lᵣ = ρₐ * max (0 , qᵣ)
80
82
81
83
# Sequence of limiting steps in Seifert and Beheng 2006:
82
- x̃r = clamp (Lᵣ / Nᵣ, xr_min, xr_max) # Eq. (94) # TODO : Ill-defined for 0 / 0
84
+ x̃r = clamp (Lᵣ / Nᵣ, xr_min, xr_max) # Eq. (94)
83
85
N₀r = clamp (Nᵣ * ∛ (π * ρw / x̃r), N0_min, N0_max) # Eq. (95)
84
86
λr = clamp (∜ (π * ρw * N₀r / Lᵣ), λ_min, λ_max) # Eq. (96)
85
87
xr_mean = clamp (Lᵣ * λr / N₀r, xr_min, xr_max) # Eq. (97)
@@ -153,6 +155,7 @@ That is,
153
155
- `(logA, logB)`: Log of the parameters of the generalized gamma distribution
154
156
"""
155
157
function log_pdf_cloud_parameters_mass (pdf_c, q, ρₐ, N)
158
+ (N < eps (one (N)) && q < eps (one (q))) && return (log (zero (N)), log (1 / zero (q)))
156
159
(; νc, μc) = pdf_c
157
160
L = ρₐ * q
158
161
logx̄ = log (L / N)
@@ -242,7 +245,7 @@ Return `n(D)`, a function that computes the size distribution for rain particles
242
245
"""
243
246
function DT. size_distribution (pdf:: CMP.RainParticlePDF_SB2006 , q, ρₐ, N)
244
247
(; N₀r, Dr_mean) = pdf_rain_parameters (pdf, q, ρₐ, N)
245
- return n (D) = N₀r * exp (- D / Dr_mean)
248
+ return n (D) = iszero (N₀r) ? zero (D) : N₀r * exp (- D / Dr_mean)
246
249
end
247
250
248
251
"""
@@ -263,7 +266,7 @@ The size distribution is given by:
263
266
"""
264
267
function DT. size_distribution (pdf:: CMP.CloudParticlePDF_SB2006 , q, ρₐ, N)
265
268
(; logN₀c, λc, νcD, μcD) = pdf_cloud_parameters (pdf, q, ρₐ, N)
266
- return n (D) = exp (logN₀c + νcD * log (D) - λc * D^ μcD)
269
+ return n (D) = logN₀c == - Inf ? zero (D) : exp (logN₀c + νcD * log (D) - λc * D^ μcD)
267
270
end
268
271
269
272
"""
@@ -303,6 +306,7 @@ function get_size_distribution_bounds(
303
306
q, ρₐ, N, p = eps (FT),
304
307
) where {FT}
305
308
(; Dr_mean) = pdf_rain_parameters (pdf, q, ρₐ, N)
309
+ iszero (Dr_mean) && return (FT (0 ), FT (0 ))
306
310
D_min = DT. exponential_quantile (Dr_mean, p)
307
311
D_max = DT. exponential_quantile (Dr_mean, 1 - p)
308
312
return D_min, D_max
0 commit comments