23 real(kind=dp),
parameter :: beta_1 = 1000d0
31 aero_data, env_state, k)
42 real(kind=dp),
intent(out) :: k
55 real(kind=dp),
intent(in) :: v1
57 real(kind=dp),
intent(in) :: v2
63 real(kind=dp),
intent(out) :: k_min
65 real(kind=dp),
intent(out) :: k_max
67 k_min = beta_1 * (v1 + v2)
102 radius_at_mean_vol, env_state, aero_binned)
109 real(kind=dp),
intent(in) :: time
111 real(kind=dp),
intent(in) :: num_conc
113 real(kind=dp),
intent(in) :: radius_at_mean_vol
119 real(kind=dp) :: tau, t, rat_v, nn, b, x, mean_vol
122 mean_vol =
rad2vol(radius_at_mean_vol)
123 if (time .eq. 0d0)
then
124 do k = 1,bin_grid%n_bin
125 aero_binned%num_conc(k) = const%pi/2d0 &
126 * (2d0 * bin_grid%centers(k))**3 * num_conc / mean_vol &
127 * exp(-(
rad2vol(bin_grid%centers(k)) / mean_vol))
130 tau = num_conc * mean_vol * beta_1 * time
132 do k = 1,bin_grid%n_bin
133 rat_v =
rad2vol(bin_grid%centers(k)) / mean_vol
134 x = 2d0 * rat_v * sqrt(t)
135 if (x .lt. 500d0)
then
137 nn = num_conc /
rad2vol(bin_grid%centers(k)) &
138 * (1d0 - t) / sqrt(t) * exp(-((1d0 + t) * rat_v)) * b
145 nn = num_conc /
rad2vol(bin_grid%centers(k)) &
146 * (1d0 - t) / sqrt(t) &
147 * exp((2d0*sqrt(t) - t - 1d0) * rat_v) &
148 / sqrt(4d0 * const%pi * rat_v * sqrt(t))
150 aero_binned%num_conc(k) = const%pi/2d0 &
151 * (2d0 * bin_grid%centers(k))**3 * nn
155 aero_binned%vol_conc = 0d0
156 do k = 1,bin_grid%n_bin
157 aero_binned%vol_conc(k,1) =
rad2vol(bin_grid%centers(k)) &
158 * aero_binned%num_conc(k)
169 real(kind=dp),
intent(in) :: x
171 real(kind=dp),
intent(out) :: r
226 real ( kind = 8 ) arg
228 real ( kind = 8 ) exp40
229 real ( kind = 8 ) forty
230 integer ( kind = 4 ) j
231 integer ( kind = 4 ) jint
232 real ( kind = 8 ) one5
233 real ( kind = 8 ) p(15)
234 real ( kind = 8 ) pbar
235 real ( kind = 8 ) pp(8)
236 real ( kind = 8 ) q(5)
237 real ( kind = 8 ) qq(6)
238 real ( kind = 8 ) rec15
239 real ( kind = 8 ) result
240 real ( kind = 8 ) sump
241 real ( kind = 8 ) sumq
242 real ( kind = 8 ) two25
244 real ( kind = 8 ) xinf
245 real ( kind = 8 ) xmax
246 real ( kind = 8 ) xsmall
252 data exp40 / 2.353852668370199854d17 /
253 data forty / 40.0d0 /
254 data rec15 / 6.6666666666666666666d-2 /
255 data two25 / 225.0d0 /
259 data xsmall /5.55d-17/
261 data xmax /713.987d0/
265 data p/-1.9705291802535139930d-19,-6.5245515583151902910d-16, &
266 -1.1928788903603238754d-12,-1.4831904935994647675d-09, &
267 -1.3466829827635152875d-06,-9.1746443287817501309d-04, &
268 -4.7207090827310162436d-01,-1.8225946631657315931d+02, &
269 -5.1894091982308017540d+04,-1.0588550724769347106d+07, &
270 -1.4828267606612366099d+09,-1.3357437682275493024d+11, &
271 -6.9876779648010090070d+12,-1.7732037840791591320d+14, &
272 -1.4577180278143463643d+15/
273 data q/-4.0076864679904189921d+03, 7.4810580356655069138d+06, &
274 -8.0059518998619764991d+09, 4.8544714258273622913d+12, &
275 -1.3218168307321442305d+15/
279 data pp/-6.0437159056137600000d-02, 4.5748122901933459000d-01, &
280 -4.2843766903304806403d-01, 9.7356000150886612134d-02, &
281 -3.2457723974465568321d-03,-3.6395264712121795296d-04, &
282 1.6258661867440836395d-05,-3.6347578404608223492d-07/
283 data qq/-3.8806586721556593450d+00, 3.2593714889036996297d+00, &
284 -8.5017476463217924408d-01, 7.4212010813186530069d-02, &
285 -2.2835624489492512649d-03, 3.7510433111922824643d-05/
286 data pbar/3.98437500d-01/
292 if ( x < xsmall )
then
298 else if ( x < one5 )
then
303 sump = sump * xx + p(j)
314 result = ( sump / sumq ) * x
316 if ( jint == 2 )
then
317 result = result * exp( -x )
320 else if ( jint == 1 .and. xmax < x )
then
328 xx = 1.0d+00 / x - rec15
350 if ( jint /= 1 )
then
351 result = ( result + pbar ) / sqrt( x )
356 if ( xmax - one5 < x )
then
364 result = ( ( result * a + pbar * a ) / sqrt( x ) ) * b
369 if ( arg < 0.0d+00 )
then
The aero_data_t structure and associated subroutines.
Additive coagulation kernel.
subroutine kernel_additive_minmax(v1, v2, aero_data, env_state, k_min, k_max)
Minimum and maximum values of the additive kernel.
real(kind=dp) elemental function rad2vol(r)
Convert radius (m) to volume (m^3).
The aero_dist_t structure and associated subroutines.
subroutine kernel_additive(aero_particle_1, aero_particle_2, aero_data, env_state, k)
Additive coagulation kernel.
The aero_particle_t structure and associated subroutines.
The env_state_t structure and associated subroutines.
subroutine bessi1(x, r)
Modified Bessel function of the first kind .
Common utility subroutines.
Current environment state.
subroutine calci1(arg, result, jint)
Calculates modified Bessel functions of the first kind .
Single aerosol particle data structure.
1D grid, either logarithmic or linear.
subroutine soln_additive_exp(bin_grid, aero_data, time, num_conc, radius_at_mean_vol, env_state, aero_binned)
Exact solution with the additive coagulation kernel and exponential initial condition.
The bin_grid_t structure and associated subroutines.
The aero_binned_t structure and associated subroutines.
elemental real(kind=dp) function aero_particle_volume(aero_particle)
Total volume of the particle (m^3).
Aerosol material properties and associated data.
Aerosol number and volume distributions stored per bin.