26 aero_data, env_state, k)
37 real(kind=dp),
intent(out) :: k
39 real(kind=dp) :: v1, v2, d1, d2
47 env_state%pressure, k)
60 real(kind=dp),
intent(in) :: v1
62 real(kind=dp),
intent(in) :: v2
68 real(kind=dp),
intent(out) :: k_min
70 real(kind=dp),
intent(out) :: k_max
73 integer,
parameter :: n_sample = 3
75 real(kind=dp) :: d1, d2, d_min, d_max, k
79 d_min = minval(aero_data%density)
80 d_max = maxval(aero_data%density)
88 env_state%temp, env_state%pressure, k)
113 real(kind=dp),
intent(in) :: v1
115 real(kind=dp),
intent(in) :: d1
117 real(kind=dp),
intent(in) :: v2
119 real(kind=dp),
intent(in) :: d2
121 real(kind=dp),
intent(in) :: tk
123 real(kind=dp),
intent(in) :: press
125 real(kind=dp),
intent(out) :: bckernel
127 integer,
parameter :: nbin_maxd = 1000
128 integer,
save :: nbin = 0
129 real(kind=dp),
save :: rad_sv(nbin_maxd)
130 real(kind=dp) :: avogad, bckernel1, boltz, cunning, deltasq_i, &
131 deltasq_j, den_i, den_j, diffus_i, diffus_j, diffus_sum, &
132 freepath, gasfreepath, gasspeed, knud, mwair, rad_i, rad_j, &
133 rad_sum, rgas, rhoair, speedsq_i, speedsq_j, tmp1, tmp2, &
134 viscosd, viscosk, vol_i, vol_j
146 boltz = const%boltzmann * 1d7
147 avogad = const%avagadro
148 mwair = const%air_molec_weight * 1d3
149 rgas = const%univ_gas_const * 1d3 / const%air_std_press
151 rhoair = 0.001d0 * ((press/const%air_std_press)*mwair/(rgas*tk))
153 viscosd = (1.8325d-04*(296.16d0+120d0)/(tk+120d0)) * (tk/296.16d0)**1.5d0
154 viscosk = viscosd/rhoair
155 gasspeed = sqrt(8d0*boltz*tk*avogad/(const%pi*mwair))
156 gasfreepath = 2d0*viscosk/gasspeed
172 knud = gasfreepath/rad_i
173 cunning = 1d0 + knud*(1.249d0 + 0.42d0*exp(-0.87d0/knud))
174 diffus_i = boltz*tk*cunning/(6d0*const%pi*rad_i*viscosd)
175 speedsq_i = 8d0*boltz*tk/(const%pi*den_i*vol_i)
176 freepath = 8d0*diffus_i/(const%pi*sqrt(speedsq_i))
177 tmp1 = (2d0*rad_i + freepath)**3
178 tmp2 = (4d0*rad_i*rad_i + freepath*freepath)**1.5d0
179 deltasq_i = ( (tmp1-tmp2)/(6d0*rad_i*freepath) - 2d0*rad_i )**2
185 knud = gasfreepath/rad_j
186 cunning = 1d0 + knud*(1.249d0 + 0.42d0*exp(-0.87d0/knud))
187 diffus_j = boltz*tk*cunning/(6d0*const%pi*rad_j*viscosd)
188 speedsq_j = 8d0*boltz*tk/(const%pi*den_j*vol_j)
189 freepath = 8d0*diffus_j/(const%pi*sqrt(speedsq_j))
190 tmp1 = (2d0*rad_j + freepath)**3
191 tmp2 = (4d0*rad_j*rad_j + freepath*freepath)**1.5d0
192 deltasq_j = ( (tmp1-tmp2)/(6d0*rad_j*freepath) - 2d0*rad_j )**2
194 rad_sum = rad_i + rad_j
195 diffus_sum = diffus_i + diffus_j
196 tmp1 = rad_sum/(rad_sum + sqrt(deltasq_i + deltasq_j))
197 tmp2 = 4d0*diffus_sum/(rad_sum*sqrt(speedsq_i + speedsq_j))
198 bckernel1 = 4d0*const%pi*rad_sum*diffus_sum/(tmp1 + tmp2)
200 bckernel = bckernel1 * 1.0d-6
The aero_particle_t structure and associated subroutines.
The env_state_t structure and associated subroutines.
subroutine kernel_brown_helper(v1, d1, v2, d2, tk, press, bckernel)
Helper function that does the actual Brownian kernel computation.
real(kind=dp) function interp_linear_disc(x_1, x_n, n, i)
Linear interpolation over discrete indices.
real(kind=dp) function aero_particle_density(aero_particle, aero_data)
Average density of the particle (kg/m^3).
Common utility subroutines.
Current environment state.
subroutine kernel_brown_minmax(v1, v2, aero_data, env_state, k_min, k_max)
Compute the minimum and maximum Brownian coagulation kernel.
Single aerosol particle data structure.
Brownian coagulation kernel.
real(kind=dp) elemental function vol2rad(v)
Convert volume (m^3) to radius (m).
elemental real(kind=dp) function aero_particle_volume(aero_particle)
Total volume of the particle (m^3).
subroutine kernel_brown(aero_particle_1, aero_particle_2, aero_data, env_state, k)
Compute the Brownian coagulation kernel.
Aerosol material properties and associated data.