@@ -92,15 +92,7 @@ def _make_solve(formulae): # pylint: disable=too-many-statements,too-many-local
92
92
93
93
@numba .njit (** {** JIT_FLAGS , ** {"parallel" : False }})
94
94
def _liquid_water_mixing_ratio (n , x , m_d_mean ):
95
- return (
96
- np .sum (
97
- n
98
- * jit_formulae .particle_shape_and_density__volume_to_mass (
99
- jit_formulae .condensation_coordinate__volume (x )
100
- )
101
- )
102
- / m_d_mean
103
- )
95
+ return np .sum (n * jit_formulae .condensation_coordinate__mass (x )) / m_d_mean
104
96
105
97
@numba .njit (** {** JIT_FLAGS , ** {"parallel" : False }})
106
98
def _impl ( # pylint: disable=too-many-arguments,too-many-locals
@@ -133,8 +125,10 @@ def _impl( # pylint: disable=too-many-arguments,too-many-locals
133
125
diffusivity = DTp ,
134
126
density = air_density ,
135
127
)
128
+ sum_n_dm_dt = 0
136
129
for i , x_i in enumerate (x ):
137
- v = jit_formulae .condensation_coordinate__volume (x_i )
130
+ m = jit_formulae .condensation_coordinate__mass (x_i )
131
+ v = jit_formulae .particle_shape_and_density__mass_to_volume (m )
138
132
r = jit_formulae .trivia__radius (v )
139
133
Dr = jit_formulae .diffusion_kinetics__D (DTp , r , lambdaD )
140
134
Kr = jit_formulae .diffusion_kinetics__K (KTp , r , lambdaK )
@@ -145,34 +139,23 @@ def _impl( # pylint: disable=too-many-arguments,too-many-locals
145
139
)
146
140
)
147
141
sgm = jit_formulae .surface_tension__sigma (T , v , dry_volume [i ], f_org [i ])
148
- dy_dt [idx_x + i ] = jit_formulae .condensation_coordinate__dx_dt (
149
- x_i ,
150
- jit_formulae .drop_growth__r_dr_dt (
151
- jit_formulae .hygroscopicity__RH_eq (
152
- r , T , kappa [i ], dry_volume [i ] / PI_4_3 , sgm
153
- ),
154
- T ,
155
- RH ,
156
- lv ,
157
- pvs ,
158
- Dr ,
159
- Kr ,
160
- ventilation_factor ,
142
+ r_dr_dt = jit_formulae .drop_growth__r_dr_dt (
143
+ jit_formulae .hygroscopicity__RH_eq (
144
+ r , T , kappa [i ], dry_volume [i ] / PI_4_3 , sgm
161
145
),
146
+ T ,
147
+ RH ,
148
+ lv ,
149
+ pvs ,
150
+ Dr ,
151
+ Kr ,
152
+ ventilation_factor ,
162
153
)
163
- d_water_vapour_mixing_ratio__dt = (
164
- dot_water_vapour_mixing_ratio
165
- - np .sum (
166
- n
167
- * jit_formulae .particle_shape_and_density__volume_to_mass (
168
- jit_formulae .condensation_coordinate__volume (x )
169
- )
170
- * dy_dt [idx_x :]
171
- )
172
- / m_d_mean
173
- )
154
+ dm_dt = jit_formulae .particle_shape_and_density__dm_dt (r , r_dr_dt )
155
+ dy_dt [idx_x + i ] = jit_formulae .condensation_coordinate__dx_dt (m , dm_dt )
156
+ sum_n_dm_dt += n [i ] * dm_dt
174
157
dy_dt [idx_thd ] = dot_thd + jit_formulae .state_variable_triplet__dthd_dt (
175
- rhod , thd , T , d_water_vapour_mixing_ratio__dt , lv
158
+ rhod , thd , T , dot_water_vapour_mixing_ratio - sum_n_dm_dt / m_d_mean , lv
176
159
)
177
160
178
161
@numba .njit (** {** JIT_FLAGS , ** {"parallel" : False }})
@@ -252,9 +235,7 @@ def solve( # pylint: disable=too-many-arguments,too-many-locals,unused-argument
252
235
y0 = np .empty (n_sd_in_cell + idx_x )
253
236
y0 [idx_thd ] = thd
254
237
y0 [idx_x :] = jit_formulae .condensation_coordinate__x (
255
- jit_formulae .particle_shape_and_density__mass_to_volume (
256
- attributes .water_mass [cell_idx ]
257
- )
238
+ attributes .water_mass [cell_idx ]
258
239
)
259
240
total_water_mixing_ratio = (
260
241
water_vapour_mixing_ratio
@@ -301,9 +282,7 @@ def solve( # pylint: disable=too-many-arguments,too-many-locals,unused-argument
301
282
m_new = 0
302
283
for i in range (n_sd_in_cell ):
303
284
attributes .water_mass [cell_idx [i ]] = (
304
- jit_formulae .particle_shape_and_density__volume_to_mass (
305
- jit_formulae .condensation_coordinate__volume (y1 [idx_x + i ])
306
- )
285
+ jit_formulae .condensation_coordinate__mass (y1 [idx_x + i ])
307
286
)
308
287
m_new += (
309
288
attributes .multiplicity [cell_idx [i ]]
0 commit comments