26 subroutine kernel_brown(aero_particle_1, aero_particle_2, &
27 aero_data, env_state, k)
38 real(kind=dp),
intent(out) :: k
40 real(kind=dp) :: v1, v2, d1, d2
48 env_state%pressure, k)
61 real(kind=dp),
intent(in) :: v1
63 real(kind=dp),
intent(in) :: v2
69 real(kind=dp),
intent(out) :: k_min
71 real(kind=dp),
intent(out) :: k_max
74 integer,
parameter :: n_sample = 3
76 real(kind=dp) :: d1, d2, d_min, d_max, k
80 d_min = minval(aero_data%density)
81 d_max = maxval(aero_data%density)
89 env_state%temp, env_state%pressure, k)
112 temp, pressure, bckernel)
115 real(kind=dp),
intent(in) :: vol_i
117 real(kind=dp),
intent(in) :: den_i
119 real(kind=dp),
intent(in) :: vol_j
121 real(kind=dp),
intent(in) :: den_j
125 real(kind=dp),
intent(in) :: temp
127 real(kind=dp),
intent(in) :: pressure
129 real(kind=dp),
intent(out) :: bckernel
131 real(kind=dp) :: cunning, deltasq_i, &
132 deltasq_j, diffus_i, diffus_j, diffus_sum, &
133 freepath, gasfreepath, gasspeed, knud, rad_i, rad_j, &
134 rad_sum, rhoair, speedsq_i, speedsq_j, tmp1, tmp2, &
135 viscosd, viscosk, Rme_i, Rme_j
143 rhoair = (pressure *
const%air_molec_weight) / &
144 (
const%univ_gas_const * temp)
146 viscosd = 1.8325d-05 * (416.16d0 / (temp + 120d0)) * &
147 (temp / 296.16d0)**1.5d0
148 viscosk = viscosd / rhoair
149 gasspeed = sqrt((8.0d0 *
const%boltzmann * temp *
const%avagadro) / &
151 gasfreepath = 2d0 * viscosk / gasspeed
167 knud = gasfreepath/rme_i
168 cunning = 1d0 + knud*(1.249d0 + 0.42d0*exp(-0.87d0/knud))
169 diffus_i = (
const%boltzmann * temp * cunning) / &
170 (6.0d0 *
const%pi * rme_i * viscosd)
171 speedsq_i = 8d0 *
const%boltzmann * temp / (
const%pi * den_i * vol_i)
172 freepath = 8d0*diffus_i/(
const%pi*sqrt(speedsq_i))
173 tmp1 = (2d0*rme_i + freepath)**3
174 tmp2 = (4d0*rme_i*rme_i + freepath*freepath)**1.5d0
175 deltasq_i = ( (tmp1-tmp2)/(6d0*rme_i*freepath) - 2d0*rme_i )**2
181 knud = gasfreepath/rme_j
182 cunning = 1d0 + knud*(1.249d0 + 0.42d0*exp(-0.87d0/knud))
183 diffus_j = (
const%boltzmann * temp * cunning) / &
184 (6.0d0 *
const%pi * rme_j * viscosd)
185 speedsq_j = 8d0 *
const%boltzmann * temp / (
const%pi * den_j * vol_j)
186 freepath = 8d0*diffus_j/(
const%pi*sqrt(speedsq_j))
187 tmp1 = (2d0*rme_j + freepath)**3
188 tmp2 = (4d0*rme_j*rme_j + freepath*freepath)**1.5d0
189 deltasq_j = ( (tmp1-tmp2)/(6d0*rme_j*freepath) - 2d0*rme_j )**2
191 rad_sum = rad_i + rad_j
192 diffus_sum = diffus_i + diffus_j
193 tmp1 = rad_sum/(rad_sum + sqrt(deltasq_i + deltasq_j))
194 tmp2 = 4d0*diffus_sum/(rad_sum*sqrt(speedsq_i + speedsq_j))
195 bckernel = 4d0*
const%pi*rad_sum*diffus_sum/(tmp1 + tmp2)
real(kind=dp) function aero_data_vol_to_mobility_rad(aero_data, v, temp, pressure)
Convert mass-equivalent volume (m^3) to mobility equivalent radius (m).
subroutine kernel_brown_helper(vol_i, den_i, vol_j, den_j, aero_data, temp, pressure, bckernel)
Helper function that does the actual Brownian kernel computation.
subroutine kernel_brown_minmax(v1, v2, aero_data, env_state, k_min, k_max)
Compute the minimum and maximum Brownian coagulation kernel.
The env_state_t structure and associated subroutines.
The aero_particle_t structure and associated subroutines.
Current environment state.
real(kind=dp) function aero_particle_density(aero_particle, aero_data)
Average density of the particle (kg/m^3).
subroutine kernel_brown(aero_particle_1, aero_particle_2, aero_data, env_state, k)
Compute the Brownian coagulation kernel.
The aero_data_t structure and associated subroutines.
Single aerosol particle data structure.
elemental real(kind=dp) function aero_particle_volume(aero_particle)
Total volume of the particle (m^3).
real(kind=dp) elemental function aero_data_vol2rad(aero_data, v)
Convert mass-equivalent volume (m^3) to geometric radius (m).
type(const_t), save const
Fixed variable for accessing the constant's values.
Aerosol material properties and associated data.
Common utility subroutines.
real(kind=dp) function interp_linear_disc(x_1, x_n, n, i)
Linear interpolation over discrete indices.
Brownian coagulation kernel.