@@ -78,11 +78,17 @@ function cloud_sources(
78
78
qᵣ,
79
79
qₛ,
80
80
ρ,
81
- Tₐ ,
81
+ T ,
82
82
dt,
83
83
) where {FT}
84
84
85
85
qᵥ = qₜ - qₗ - qᵢ - qᵣ - qₛ
86
+ qₛₗ = TD. q_vap_saturation_from_density (
87
+ thp,
88
+ T,
89
+ ρ,
90
+ TD. saturation_vapor_pressure (thp, T, TD. Liquid ()),
91
+ )
86
92
87
93
if qᵥ + qₗ > FT (0 )
88
94
S = CMNe. conv_q_vap_to_q_liq_ice_MM2015 (
@@ -94,16 +100,16 @@ function cloud_sources(
94
100
qᵣ,
95
101
qₛ,
96
102
ρ,
97
- Tₐ ,
103
+ T ,
98
104
)
99
105
else
100
106
S = FT (0 )
101
107
end
102
108
103
109
return ifelse (
104
110
S > FT (0 ),
105
- triangle_inequality_limiter (S, limit (clip (qᵥ) , dt, 2 )),
106
- - triangle_inequality_limiter (abs (S), limit (clip (qₗ) , dt, 2 )),
111
+ triangle_inequality_limiter (S, limit (qᵥ - qₛₗ , dt, 2 )),
112
+ - triangle_inequality_limiter (abs (S), limit (qₗ , dt, 2 )),
107
113
)
108
114
end
109
115
function cloud_sources (
@@ -121,6 +127,13 @@ function cloud_sources(
121
127
122
128
qᵥ = qₜ - qₗ - qᵢ - qᵣ - qₛ
123
129
130
+ qₛᵢ = TD. q_vap_saturation_from_density (
131
+ thp,
132
+ T,
133
+ ρ,
134
+ TD. saturation_vapor_pressure (thp, T, TD. Ice ()),
135
+ )
136
+
124
137
if qᵥ + qᵢ > FT (0 )
125
138
S = CMNe. conv_q_vap_to_q_liq_ice_MM2015 (
126
139
cm_params,
@@ -139,8 +152,8 @@ function cloud_sources(
139
152
140
153
return ifelse (
141
154
S > FT (0 ),
142
- triangle_inequality_limiter (S, limit (clip (qᵥ) , dt, 2 )),
143
- - triangle_inequality_limiter (abs (S), limit (clip (qᵢ) , dt, 2 )),
155
+ triangle_inequality_limiter (S, limit (qᵥ - qₛᵢ , dt, 2 )),
156
+ - triangle_inequality_limiter (abs (S), limit (qᵢ , dt, 2 )),
144
157
)
145
158
end
146
159
0 commit comments