30 aero_data, env_state, k)
41 real(kind=dp),
intent(out) :: k
54 real(kind=dp),
intent(in) :: v1
56 real(kind=dp),
intent(in) :: v2
62 real(kind=dp),
intent(out) :: k_min
64 real(kind=dp),
intent(out) :: k_max
79 real(kind=dp),
intent(in) :: v1
81 real(kind=dp),
intent(in) :: v2
83 real(kind=dp),
intent(out) :: k
85 real(kind=dp) r1, r2, winf1, winf2, ec
91 call
effic(r1, r2, ec)
92 k = ec * const%pi * (r1 + r2)**2 * abs(winf1 - winf2)
102 real(kind=dp),
intent(in) :: r
104 real(kind=dp),
intent(out) :: w_inf
107 real(kind=dp) eta, xlamb, rhow, rhoa, grav, cunh, t0, sigma
108 real(kind=dp) stok, stb, phy, py, rr, x, y, xrey, bond
110 real(kind=dp) b(7),c(6)
111 data b /-0.318657d1,0.992696d0,-0.153193d-2,-0.987059d-3, &
112 -0.578878d-3,0.855176d-4,-0.327815d-5/
113 data c /-0.500015d1,0.523778d1,-0.204914d1,0.475294d0, &
114 -0.542819d-1,0.238449d-2/
121 cunh = 1.257d0 * xlamb
123 sigma = 76.1d0 - 0.155d0 * (293.15d0 - t0)
124 stok = 2d0 * grav * (rhow - rhoa) / (9d0 * eta)
125 stb = 32d0 * rhoa * (rhow - rhoa) * grav / (3d0 * eta * eta)
126 phy = sigma * sigma * sigma * rhoa * rhoa &
127 / (eta**4 * grav * (rhow - rhoa))
133 if (rr .le. 1d-3)
then
134 w_inf = stok * (rr * rr + cunh * rr)
135 elseif (rr .gt. 1d-3 .and. rr .le. 5.35d-2)
then
136 x = log(stb * rr * rr * rr)
139 y = y + b(i) * (x**(i - 1))
141 xrey = (1d0 + cunh/rr) * exp(y)
142 w_inf = xrey * eta / (2d0 * rhoa * rr)
143 elseif (rr .gt. 5.35d-2)
then
144 bond = grav * (rhow - rhoa) * rr**2 / sigma
145 if (rr .gt. 0.35d0)
then
146 bond = grav * (rhow - rhoa) * 0.35d0**2 / sigma
148 x = log(16d0 * bond * py / 3d0)
151 y = y + c(i) * (x**(i - 1))
154 w_inf = xrey * eta / (2d0 * rhoa * rr)
155 if (rr .gt. 0.35d0)
then
156 w_inf = xrey * eta / (2d0 * rhoa * 0.35d0)
159 w_inf = w_inf / 100d0
172 real(kind=dp),
intent(in) :: r1
174 real(kind=dp),
intent(in) :: r2
176 real(kind=dp),
intent(out) :: ec
178 real(kind=dp) :: r_small, r_big, rq, p, q, ek
179 integer :: k, ir, kk, iq
181 real(kind=dp) :: rat(21),r0(15),ecoll(15,21)
183 data r0 /6.0d0,8.0d0,10.0d0,15.0d0,20.0d0,25.0d0,30.0d0,40.0d0 &
184 ,50.0d0,60.0d0,70.0d0,100.0d0,150.0d0,200.0d0,300.0d0/
185 data rat /0.0d0,0.05d0,0.1d0,0.15d0,0.2d0,0.25d0,0.3d0,0.35d0 &
186 ,0.4d0,0.45d0,0.5d0,0.55d0,0.6d0,0.65d0,0.7d0,0.75d0,0.8d0 &
187 ,0.85d0,0.9d0,0.95d0,1.0d0/
189 data ecoll /0.001d0,0.001d0,0.001d0,0.001d0,0.001d0,0.001d0 &
190 ,0.001d0,0.001d0,0.001d0,0.001d0 ,0.001d0,0.001d0,0.001d0 &
191 ,0.001d0,0.001d0,0.003d0,0.003d0,0.003d0,0.004d0,0.005d0 &
192 ,0.005d0,0.005d0,0.010d0,0.100d0,0.050d0,0.200d0,0.500d0 &
193 ,0.770d0,0.870d0,0.970d0 ,0.007d0,0.007d0,0.007d0,0.008d0 &
194 ,0.009d0,0.010d0,0.010d0,0.070d0,0.400d0,0.430d0 ,0.580d0 &
195 ,0.790d0,0.930d0,0.960d0,1.000d0,0.009d0,0.009d0,0.009d0 &
196 ,0.012d0,0.015d0 ,0.010d0,0.020d0,0.280d0,0.600d0,0.640d0 &
197 ,0.750d0,0.910d0,0.970d0,0.980d0,1.000d0 ,0.014d0,0.014d0 &
198 ,0.014d0,0.015d0,0.016d0,0.030d0,0.060d0,0.500d0,0.700d0 &
199 ,0.770d0 ,0.840d0,0.950d0,0.970d0,1.000d0,1.000d0,0.017d0 &
200 ,0.017d0,0.017d0,0.020d0,0.022d0 ,0.060d0,0.100d0,0.620d0 &
201 ,0.780d0,0.840d0,0.880d0,0.950d0,1.000d0,1.000d0,1.000d0 &
202 ,0.030d0,0.030d0,0.024d0,0.022d0,0.032d0,0.062d0,0.200d0 &
203 ,0.680d0,0.830d0,0.870d0 ,0.900d0,0.950d0,1.000d0,1.000d0 &
204 ,1.000d0,0.025d0,0.025d0,0.025d0,0.036d0,0.043d0 ,0.130d0 &
205 ,0.270d0,0.740d0,0.860d0,0.890d0,0.920d0,1.000d0,1.000d0 &
206 ,1.000d0,1.000d0 ,0.027d0,0.027d0,0.027d0,0.040d0,0.052d0 &
207 ,0.200d0,0.400d0,0.780d0,0.880d0,0.900d0 ,0.940d0,1.000d0 &
208 ,1.000d0,1.000d0,1.000d0,0.030d0,0.030d0,0.030d0,0.047d0 &
209 ,0.064d0 ,0.250d0,0.500d0,0.800d0,0.900d0,0.910d0,0.950d0 &
210 ,1.000d0,1.000d0,1.000d0,1.000d0 ,0.040d0,0.040d0,0.033d0 &
211 ,0.037d0,0.068d0,0.240d0,0.550d0,0.800d0,0.900d0,0.910d0 &
212 ,0.950d0,1.000d0,1.000d0,1.000d0,1.000d0,0.035d0,0.035d0 &
213 ,0.035d0,0.055d0,0.079d0 ,0.290d0,0.580d0,0.800d0,0.900d0 &
214 ,0.910d0,0.950d0,1.000d0,1.000d0,1.000d0,1.000d0 ,0.037d0 &
215 ,0.037d0,0.037d0,0.062d0,0.082d0,0.290d0,0.590d0,0.780d0 &
216 ,0.900d0,0.910d0 ,0.950d0,1.000d0,1.000d0,1.000d0,1.000d0 &
217 ,0.037d0,0.037d0,0.037d0,0.060d0,0.080d0 ,0.290d0,0.580d0 &
218 ,0.770d0,0.890d0,0.910d0,0.950d0,1.000d0,1.000d0,1.000d0 &
219 ,1.000d0 ,0.037d0,0.037d0,0.037d0,0.041d0,0.075d0,0.250d0 &
220 ,0.540d0,0.760d0,0.880d0,0.920d0 ,0.950d0,1.000d0,1.000d0 &
221 ,1.000d0,1.000d0,0.037d0,0.037d0,0.037d0,0.052d0,0.067d0 &
222 ,0.250d0,0.510d0,0.770d0,0.880d0,0.930d0,0.970d0,1.000d0 &
223 ,1.000d0,1.000d0,1.000d0 ,0.037d0,0.037d0,0.037d0,0.047d0 &
224 ,0.057d0,0.250d0,0.490d0,0.770d0,0.890d0,0.950d0 ,1.000d0 &
225 ,1.000d0,1.000d0,1.000d0,1.000d0,0.036d0,0.036d0,0.036d0 &
226 ,0.042d0,0.048d0 ,0.230d0,0.470d0,0.780d0,0.920d0,1.000d0 &
227 ,1.020d0,1.020d0,1.020d0,1.020d0,1.020d0 ,0.040d0,0.040d0 &
228 ,0.035d0,0.033d0,0.040d0,0.112d0,0.450d0,0.790d0,1.010d0 &
229 ,1.030d0 ,1.040d0,1.040d0,1.040d0,1.040d0,1.040d0,0.033d0 &
230 ,0.033d0,0.033d0,0.033d0,0.033d0 ,0.119d0,0.470d0,0.950d0 &
231 ,1.300d0,1.700d0,2.300d0,2.300d0,2.300d0,2.300d0,2.300d0 &
232 ,0.027d0,0.027d0,0.027d0,0.027d0,0.027d0,0.125d0,0.520d0 &
233 ,1.400d0,2.300d0,3.000d0 ,4.000d0,4.000d0,4.000d0,4.000d0 &
236 r_small = min(r1 * 1d6, r2 * 1d6)
237 r_big = max(r1 * 1d6, r2 * 1d6)
242 if (r_big .gt. r0(k))
then
249 if (rq .gt. rat(kk))
then
256 p = (r_big - r0(ir - 1)) / (r0(ir) - r0(ir - 1))
257 q = (rq - rat(iq - 1)) / (rat(iq) - rat(iq - 1))
258 ec = (1d0 - p) * (1d0 - q) * ecoll(ir - 1, iq - 1) &
259 + p * (1d0 - q) * ecoll(ir, iq - 1) &
260 + q * (1d0 - p) * ecoll(ir - 1, iq) &
261 + p * q * ecoll(ir, iq)
263 q = (rq - rat(iq - 1)) / (rat(iq) - rat(iq - 1))
264 ec = (1d0 - q) * ecoll(1, iq - 1) + q * ecoll(1, iq)
267 q = (rq - rat(iq - 1)) / (rat(iq) - rat(iq - 1))
268 ek = (1d0 - q) * ecoll(15, iq - 1) + q * ecoll(15, iq)
272 if (ec .lt. 1d-20) stop 99
The aero_data_t structure and associated subroutines.
The aero_particle_t structure and associated subroutines.
The env_state_t structure and associated subroutines.
subroutine kernel_sedi_helper(v1, v2, k)
Helper function that does the actual sedimentation kernel computation.
Current environment state.
subroutine effic(r1, r2, ec)
Coagulation efficiency.
Gravitational sedimentation coagulation kernel.
Single aerosol particle data structure.
subroutine fall_g(r, w_inf)
Finds the terminal velocity of a particle based on its size.
subroutine kernel_sedi(aero_particle_1, aero_particle_2, aero_data, env_state, k)
Sedimentation 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_sedi_minmax(v1, v2, aero_data, env_state, k_min, k_max)
Minimum and maximum values of the sedimentation coagulation.
Aerosol material properties and associated data.