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
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
126 if (time .eq. 0d0)
then 128 aero_binned%num_conc(k) =
const%pi/2d0 &
129 * (2d0 * bin_grid%centers(k))**3 * num_conc / mean_vol &
134 tau = num_conc * mean_vol *
beta_1 * time
138 x = 2d0 * rat_v * sqrt(t)
139 if (x .lt. 500d0)
then 142 bin_grid%centers(k)) &
143 * (1d0 - t) / sqrt(t) * exp(-((1d0 + t) * rat_v)) * b
151 bin_grid%centers(k)) &
152 * (1d0 - t) / sqrt(t) &
153 * exp((2d0*sqrt(t) - t - 1d0) * rat_v) &
154 / sqrt(4d0 *
const%pi * rat_v * sqrt(t))
156 aero_binned%num_conc(k) =
const%pi/2d0 &
157 * (2d0 * bin_grid%centers(k))**3 * nn
161 aero_binned%vol_conc = 0d0
164 bin_grid%centers(k)) * aero_binned%num_conc(k)
175 real(kind=dp),
intent(in) :: x
177 real(kind=dp),
intent(out) :: r
186 subroutine calci1 ( arg, result, jint )
232 real ( kind = 8 ) arg
234 real ( kind = 8 ) exp40
235 real ( kind = 8 ) forty
236 integer ( kind = 4 ) j
237 integer ( kind = 4 ) jint
238 real ( kind = 8 ) one5
239 real ( kind = 8 ) p(15)
240 real ( kind = 8 ) pbar
241 real ( kind = 8 ) pp(8)
242 real ( kind = 8 ) q(5)
243 real ( kind = 8 ) qq(6)
244 real ( kind = 8 ) rec15
245 real ( kind = 8 ) result
246 real ( kind = 8 ) sump
247 real ( kind = 8 ) sumq
248 real ( kind = 8 ) two25
250 real ( kind = 8 ) xinf
251 real ( kind = 8 ) xmax
252 real ( kind = 8 ) xsmall
258 data exp40 / 2.353852668370199854d17 /
259 data forty / 40.0d0 /
260 data rec15 / 6.6666666666666666666d-2 /
261 data two25 / 225.0d0 /
265 data xsmall /5.55d-17/
267 data xmax /713.987d0/
271 data p/-1.9705291802535139930d-19,-6.5245515583151902910d-16, &
272 -1.1928788903603238754d-12,-1.4831904935994647675d-09, &
273 -1.3466829827635152875d-06,-9.1746443287817501309d-04, &
274 -4.7207090827310162436d-01,-1.8225946631657315931d+02, &
275 -5.1894091982308017540d+04,-1.0588550724769347106d+07, &
276 -1.4828267606612366099d+09,-1.3357437682275493024d+11, &
277 -6.9876779648010090070d+12,-1.7732037840791591320d+14, &
278 -1.4577180278143463643d+15/
279 data q/-4.0076864679904189921d+03, 7.4810580356655069138d+06, &
280 -8.0059518998619764991d+09, 4.8544714258273622913d+12, &
281 -1.3218168307321442305d+15/
285 data pp/-6.0437159056137600000d-02, 4.5748122901933459000d-01, &
286 -4.2843766903304806403d-01, 9.7356000150886612134d-02, &
287 -3.2457723974465568321d-03,-3.6395264712121795296d-04, &
288 1.6258661867440836395d-05,-3.6347578404608223492d-07/
289 data qq/-3.8806586721556593450d+00, 3.2593714889036996297d+00, &
290 -8.5017476463217924408d-01, 7.4212010813186530069d-02, &
291 -2.2835624489492512649d-03, 3.7510433111922824643d-05/
292 data pbar/3.98437500d-01/
298 if ( x < xsmall )
then 304 else if ( x < one5 )
then 309 sump = sump * xx + p(j)
320 result = ( sump / sumq ) * x
322 if ( jint == 2 )
then 323 result = result * exp( -x )
326 else if ( jint == 1 .and. xmax < x )
then 334 xx = 1.0d+00 / x - rec15
356 if ( jint /= 1 )
then 357 result = ( result + pbar ) / sqrt( x )
362 if ( xmax - one5 < x )
then 370 result = ( ( result * a + pbar * a ) / sqrt( x ) ) * b
375 if ( arg < 0.0d+00 )
then real(kind=dp), parameter beta_1
Scaling coefficient for constant kernel.
subroutine aero_binned_set_sizes(aero_binned, n_bin, n_spec)
Set the number of bins and species in an aero_binned_t.
The bin_grid_t structure and associated subroutines.
real(kind=dp) elemental function aero_data_rad2vol(aero_data, r)
Convert geometric radius (m) to mass-equivalent volume (m^3).
The env_state_t structure and associated subroutines.
The aero_dist_t structure and associated subroutines.
Additive coagulation kernel.
The aero_particle_t structure and associated subroutines.
subroutine kernel_additive_minmax(v1, v2, aero_data, env_state, k_min, k_max)
Minimum and maximum values of the additive kernel.
Current environment state.
subroutine kernel_additive(aero_particle_1, aero_particle_2, aero_data, env_state, k)
Additive coagulation kernel.
elemental integer function bin_grid_size(bin_grid)
Return the number of bins in the grid, or -1 if the bin grid is not allocated.
subroutine calci1(arg, result, jint)
Calculates modified Bessel functions of the first kind .
The aero_data_t structure and associated subroutines.
Single aerosol particle data structure.
1D grid, either logarithmic or linear.
elemental real(kind=dp) function aero_particle_volume(aero_particle)
Total volume of the particle (m^3).
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.
type(const_t), save const
Fixed variable for accessing the constant's values.
elemental integer function aero_data_n_spec(aero_data)
Return the number of aerosol species, or -1 if uninitialized.
Aerosol material properties and associated data.
Common utility subroutines.
The aero_binned_t structure and associated subroutines.
subroutine bessi1(x, r)
Modified Bessel function of the first kind .
Aerosol number and volume distributions stored per bin.