mo_aero_nucl.F90 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770
  1. #include "tm5.inc"
  2. MODULE mo_aero_nucl
  3. ! *mo_aero_nucl* holds routines calculating the nucleation rate
  4. !
  5. ! Author:
  6. ! -------
  7. ! Philip Stier, MPI-Met, Hamburg, 01/2003
  8. !
  9. ! Purpose:
  10. ! --------
  11. ! This module holds the routines for the calculation of the nucleation
  12. ! rate for the binary nucleation in the sulfate water system.
  13. ! These routines are called and applied within HAM from the routine
  14. ! m7_nuck.
  15. ! The old parameterization of Kulmala (1998), that apparently contains
  16. ! some errors is kept for consistency. It is recommended to use the
  17. ! new scheme of Vehkamaeki et al. (2002). However, this parameterization
  18. ! is no longer analytically integrable, the effect of this is to be
  19. ! scrutinized.
  20. ! The modularized version of the Kulmala parameterization has been tested
  21. ! to give bit-identical results with the old version.
  22. !
  23. ! References:
  24. ! -----------
  25. ! Paasonen et al. (2010), On the roles of sulphuric acid and low-volatility
  26. ! organic vapours in the initial steps of atmospheric new particle
  27. ! formation, Atmos. Chem. Phys., 10, 11223-11242, 2010
  28. ! Vehkamaeki et al. (2002), An improved parameterization for sulfuric
  29. ! acid/water nucleation rates for tropospheric and stratospheric
  30. ! conditions, J. Geophys. Res, 107, D22, 4622
  31. ! Kulmala et al. (1998), Parameterizations for sulfuric acid/water
  32. ! nucleation rates. J. Geophys. Res., 103, No D7, 8301-8307
  33. ! Vignati, E. (1999), Modelling Interactions between Aerosols and
  34. ! Gaseous Compounds in the Polluted Marine Atmosphere. PhD-Thesis,
  35. ! RISO National Laborartory Copenhagen, Riso-R-1163(EN)
  36. IMPLICIT NONE
  37. real, public ::d_form
  38. CONTAINS
  39. SUBROUTINE nucl_kulmala(kproma, kbdim, klev, & ! ECHAM5 dims
  40. pso4g, ptp1, prelhum, &
  41. pbnrate, palpha, pbeta )
  42. ! Authors:
  43. ! --------
  44. ! P. Stier, MPI-Met, Hamburg, from the original f77 code
  45. ! in the routine m7_nuck 2001-2003
  46. ! J. Wilson, E. Vignati, JRC/EI, original source 09/2000
  47. !
  48. ! Purpose:
  49. ! --------
  50. ! This routine calculates the instananeous nucleation rate
  51. ! znucrate [molec. cm-3 s-1] from a given gas phase H2SO4 concentration
  52. ! pso4g [molec. cm-3]. It also calculates the integrated change of
  53. ! H2SO4 gas phase mass over one timestep due to nucleation
  54. ! pa4delt(:,:,1) [molec. cm-3] as well as the number of nucleated
  55. ! particles panew [1] during the timestep.
  56. !
  57. ! Interface:
  58. ! ----------
  59. ! *nucl_kulmala* is called from *m7_nuck*
  60. !
  61. ! Method:
  62. ! -------
  63. ! Kulmala et al. (1998) 's formula for binary nucleation is
  64. ! rewritten to take the form znucrate = exp[zalpha+ln(pso4g)*beta].
  65. ! Equation numbers are taken from Kulmala et al. (1998).
  66. ! After the calculation of the nucleation rate znucrate, it is
  67. ! integrated in 2) analytically over one timestep, i.e.:
  68. !
  69. ! Integration of:
  70. !
  71. ! znucrate=d(critn*znav)/dt=exp[zalpha + zbeta*ln(znav)]
  72. !
  73. ! gives znav(t0+dt, znav(t0)) where znav(t0) is pso4g.
  74. ! znav is temporarily stored in zso4g_new and confined between
  75. ! 0 and pso4g.
  76. ! The number of nucleated particles is then calculated by
  77. ! assuming a fixed critical mass critn of newly nucleated
  78. ! particles and dividing the total mass of nucleated sulfate
  79. ! by this critical mass of one nucleated particle.
  80. !
  81. ! Externals:
  82. ! ----------
  83. ! None
  84. USE mo_aero_m7, ONLY: bk
  85. IMPLICIT NONE
  86. INTEGER :: kproma, kbdim, klev
  87. REAL :: pso4g(kbdim,klev), ptp1(kbdim,klev), &
  88. prelhum(kbdim,klev), pbnrate(kbdim,klev), &
  89. palpha(kbdim,klev), pbeta(kbdim,klev)
  90. INTEGER :: jl, jk
  91. REAL :: znwv, zln_nac, ztk, zsupsat, &
  92. zpeh2o, zpeh2so4, zra, zxal, &
  93. ztkn, zssn, zdelta
  94. !---1) Calculation of the nucleation rate: ----------------------------
  95. DO jk=1,klev
  96. DO jl=1,kproma
  97. IF (pso4g(jl,jk) .GT. 1e-5) THEN
  98. ztk=ptp1(jl,jk)
  99. zsupsat=prelhum(jl,jk)
  100. !
  101. !--- 1.1) Restrict t, and rh to limits where the parameterization ok:
  102. !
  103. ztkn = MAX(ztk, 220.0)
  104. zssn = MIN(zsupsat, 0.90)
  105. !
  106. !--- 1.2) Equlibrium vapour pressures (Jaeker-Mirabel (1995), JGR):
  107. !
  108. !--- H2O equlibrium vapour pressure (Tabata):
  109. !
  110. zpeh2o=0.750064*(10.**(8.42926609-1827.17843/ &
  111. ztkn-71208.271/ztkn/ztkn))*1333./bk/ztkn
  112. !
  113. !--- H2SO4 equlibrium vapour pressure at 360
  114. !@@@ Check source: which Ayers?
  115. !
  116. zpeh2so4=EXP(-10156./ztkn+16.259)*7.6e2*1333./bk/ztkn
  117. !
  118. !--- H2SO4 equlibrium vapour pressure - correction of ayers
  119. ! by kulmala - currently not used
  120. !
  121. ! payers=exp(-10156/360+16.259)*7.6e2
  122. ! zpeh2so4=exp(log(payers)+10156*(-1./ztkn+1./360.+0.38/(905-360) * &
  123. ! (1+log(360./ztkn)-360./ztkn)))*1333/bk/ztkn
  124. !
  125. !--- 1.3) Relative acidity (0.0 -1.0):
  126. !
  127. zra=pso4g(jl,jk)/zpeh2so4
  128. !
  129. !--- 1.4) Water vapour molecule concentration [cm-3]:
  130. !
  131. znwv=zsupsat*zpeh2o
  132. !
  133. !--- 1.5) Factor delta in Eq. 22:
  134. !
  135. zdelta=1.0+(ztkn-273.15)/273.15
  136. !
  137. !--- 1.6) Molefraction of H2SO4 in the critical cluster
  138. ! minus the H2SO4(g) term in Eq. 17:
  139. !
  140. zxal = 1.2233-0.0154*zra/(zra+zssn)-0.0415*LOG(znwv)+ 0.0016*ztkn
  141. !
  142. !--- 1.7) Exponent of the critical cluster (Eq. 18):
  143. !
  144. zln_nac = -14.5125+0.1335*ztkn-10.5462*zssn+1958.4*zssn/ztkn
  145. !
  146. !--- 1.8) Sum of all terms in Eq. 20 containing H2SO4(g):
  147. !
  148. pbeta(jl,jk) = 25.1289 - 4890.8/ztkn + 7643.4*0.0102/ztkn - &
  149. 2.2479*zdelta*zssn - 1.9712*0.0102*zdelta/zssn
  150. !
  151. !--- 1.9) Sum all terms in Eq. 20 not containing H2SO4(g):
  152. !
  153. palpha(jl,jk) = zln_nac*(-25.1289 + 4890.8/ztkn + 2.2479*zdelta*zssn) - &
  154. 1743.3/ztkn + zxal*(7643.4/ztkn - 1.9712*zdelta/zssn)
  155. !
  156. !--- 1.10) Nucleation rate [cm-3 s-1] (Kulmala et al., 1998):
  157. !
  158. pbnrate(jl,jk) = EXP(palpha(jl,jk)+LOG(pso4g(jl,jk))*pbeta(jl,jk))
  159. ELSE
  160. palpha(jl,jk) =0.
  161. pbeta(jl,jk) =0.
  162. pbnrate(jl,jk)=0.
  163. END IF ! pso4g(jl,jk) .GT. 1e-5
  164. END DO ! kproma
  165. END DO !klev
  166. END SUBROUTINE nucl_kulmala
  167. SUBROUTINE nucl_vehkamaeki(kproma, kbdim, klev, & ! ECHAM5 dimensions
  168. ptp1, prhd, pmolecH2SO4, & ! ECHAM5 temperature, relative humidity
  169. pxtrnucr, pntot, pdiam ) ! nucleation rate, number of molecules in the
  170. ! critical cluster
  171. !
  172. ! Authors:
  173. ! ---------
  174. ! C. TIMMRECK, MPI HAMBURG 2002
  175. !
  176. ! Purpose
  177. ! ---------
  178. ! Calculation of classical nucleation rate
  179. !
  180. ! calculation of the nucleation rate after Vehkamaeki et al. (2002)
  181. ! The calculation of the nucrate ZKNH2SO4 is in cm^-3 s^-1
  182. ! and a coarse approxmation for the first class
  183. !
  184. ! Modifications:
  185. ! --------------
  186. ! R. Hommel; rewrite in f90, adopted to ECHAM5; MPI HAMBURG; Dec. 2002
  187. ! P. Stier; bugfixes, modularisation and optimization; MPI HAMBURG; 2003-2004
  188. !
  189. ! H2SO4 still fixed to xxx molc/cm3, no sulfur cycle coupling yet
  190. !
  191. ! References:
  192. ! -----------
  193. ! Vehkamaeki et al. (2002), An improved parameterization for sulfuric
  194. ! acid/water nucleation rates for tropospheric and stratospheric
  195. ! conditions, J. Geophys. Res, 107, D22, 4622
  196. !
  197. ! Parameters
  198. ! ----------
  199. ! prho = prhop_neu in *sam*
  200. !
  201. ! prhd = relative humidity in sam_aeroprop & sam_nucl
  202. !
  203. ! pxtrnucr = nucleation rate in [1/m3s]
  204. ! xrhoc = density of the critical nucleus in kg/m^3
  205. ! zrxc = ?
  206. !
  207. USE mo_control, ONLY: nrow
  208. !----------------------------------------------------
  209. IMPLICIT NONE
  210. !----------------------------------------------------
  211. INTEGER :: kproma, kbdim, klev
  212. INTEGER :: jk, jl,jrow
  213. !----------------------------------------------------
  214. !
  215. REAL :: ptp1(kbdim,klev), prhd(kbdim,klev), &
  216. pxtrnucr(kbdim,klev), &
  217. pmolecH2SO4(kbdim,klev), & ! revisited, ok
  218. pntot(kbdim,klev), &
  219. pdiam(kbdim,klev)
  220. !----------------------------------------------------
  221. ! Local Arrays
  222. REAL :: zrxc(kbdim)
  223. REAL :: zrhoa, zrh, zt, x, zjnuc, zrc, &
  224. zxmole, zntot
  225. !--- 0) Initializations:
  226. jrow=nrow(2)
  227. DO jk=1, klev
  228. DO jl=1,kproma
  229. !----1.) Parameterization of nucleation rate after Vehkamaeki et al. (2002)
  230. ! t: temperature in K (190.15-300.15K)
  231. ! zrh: saturatio ratio of water (0.0001-1)
  232. ! zrhoa: sulfuric acid concentration in 1/cm3 (10^4-10^11 1/cm3)
  233. ! jnuc: nucleation rate in 1/cm3s (10^-7-10^10 1/cm3s)
  234. ! ntot: total number of molecules in the critical cluster (ntot>4)
  235. ! x: molefraction of H2SO4 in the critical cluster
  236. ! rc: radius of the critical cluster in nm
  237. ! Calculate nucleation only for valid thermodynamic conditions:
  238. IF( (pmolecH2SO4(jl,jk)>=1.E+4) .AND. &
  239. (prhd(jl,jk) >=1.E-4) .AND. &
  240. (ptp1(jl,jk)>=190.15 .AND. ptp1(jl,jk)<=300.15) ) THEN
  241. zrhoa=MIN(pmolecH2SO4(jl,jk),1.e11)
  242. zrh=MIN(prhd(jl,jk),1.0)
  243. zt=ptp1(jl,jk)
  244. ! Equation (11) - molefraction of H2SO4 in the critical cluster
  245. x=0.7409967177282139 - 0.002663785665140117*zt &
  246. + 0.002010478847383187*LOG(zrh) &
  247. - 0.0001832894131464668*zt*LOG(zrh) &
  248. + 0.001574072538464286*LOG(zrh)**2 &
  249. - 0.00001790589121766952*zt*LOG(zrh)**2 &
  250. + 0.0001844027436573778*LOG(zrh)**3 &
  251. - 1.503452308794887e-6*zt*LOG(zrh)**3 &
  252. - 0.003499978417957668*LOG(zrhoa) &
  253. + 0.0000504021689382576*zt*LOG(zrhoa)
  254. zxmole=x
  255. ! Equation (12) - nucleation rate in 1/cm3s
  256. zjnuc=0.1430901615568665 + 2.219563673425199*zt - &
  257. 0.02739106114964264*zt**2 + &
  258. 0.00007228107239317088*zt**3 + 5.91822263375044/x + &
  259. 0.1174886643003278*LOG(zrh) + 0.4625315047693772*zt*LOG(zrh) - &
  260. 0.01180591129059253*zt**2*LOG(zrh) + &
  261. 0.0000404196487152575*zt**3*LOG(zrh) + &
  262. (15.79628615047088*LOG(zrh))/x - &
  263. 0.215553951893509*LOG(zrh)**2 - &
  264. 0.0810269192332194*zt*LOG(zrh)**2 + &
  265. 0.001435808434184642*zt**2*LOG(zrh)**2 - &
  266. 4.775796947178588e-6*zt**3*LOG(zrh)**2 - &
  267. (2.912974063702185*LOG(zrh)**2)/x - &
  268. 3.588557942822751*LOG(zrh)**3 + &
  269. 0.04950795302831703*zt*LOG(zrh)**3 - &
  270. 0.0002138195118737068*zt**2*LOG(zrh)**3 + &
  271. 3.108005107949533e-7*zt**3*LOG(zrh)**3 - &
  272. (0.02933332747098296*LOG(zrh)**3)/x + &
  273. 1.145983818561277*LOG(zrhoa) - &
  274. 0.6007956227856778*zt*LOG(zrhoa) + &
  275. 0.00864244733283759*zt**2*LOG(zrhoa) - &
  276. 0.00002289467254710888*zt**3*LOG(zrhoa) - &
  277. (8.44984513869014*LOG(zrhoa))/x + &
  278. 2.158548369286559*LOG(zrh)*LOG(zrhoa) + &
  279. 0.0808121412840917*zt*LOG(zrh)*LOG(zrhoa) - &
  280. 0.0004073815255395214*zt**2*LOG(zrh)*LOG(zrhoa) - &
  281. 4.019572560156515e-7*zt**3*LOG(zrh)*LOG(zrhoa) + &
  282. (0.7213255852557236*LOG(zrh)*LOG(zrhoa))/x + &
  283. 1.62409850488771*LOG(zrh)**2*LOG(zrhoa) - &
  284. 0.01601062035325362*zt*LOG(zrh)**2*LOG(zrhoa) + &
  285. 0.00003771238979714162*zt**2*LOG(zrh)**2*LOG(zrhoa) + &
  286. 3.217942606371182e-8*zt**3*LOG(zrh)**2*LOG(zrhoa) - &
  287. (0.01132550810022116*LOG(zrh)**2*LOG(zrhoa))/x + &
  288. 9.71681713056504*LOG(zrhoa)**2 - &
  289. 0.1150478558347306*zt*LOG(zrhoa)**2 + &
  290. 0.0001570982486038294*zt**2*LOG(zrhoa)**2 + &
  291. 4.009144680125015e-7*zt**3*LOG(zrhoa)**2 + &
  292. (0.7118597859976135*LOG(zrhoa)**2)/x - &
  293. 1.056105824379897*LOG(zrh)*LOG(zrhoa)**2 + &
  294. 0.00903377584628419*zt*LOG(zrh)*LOG(zrhoa)**2 - &
  295. 0.00001984167387090606*zt**2*LOG(zrh)*LOG(zrhoa)**2 + &
  296. 2.460478196482179e-8*zt**3*LOG(zrh)*LOG(zrhoa)**2 - &
  297. (0.05790872906645181*LOG(zrh)*LOG(zrhoa)**2)/x - &
  298. 0.1487119673397459*LOG(zrhoa)**3 + &
  299. 0.002835082097822667*zt*LOG(zrhoa)**3 - &
  300. 9.24618825471694e-6*zt**2*LOG(zrhoa)**3 + &
  301. 5.004267665960894e-9*zt**3*LOG(zrhoa)**3 - &
  302. (0.01270805101481648*LOG(zrhoa)**3)/x
  303. zjnuc=EXP(zjnuc) ! add. Eq. (12) [1/(cm^3s)]
  304. ! Equation (13) - total number of molecules in the critical cluster
  305. zntot=-0.002954125078716302 - 0.0976834264241286*zt + &
  306. 0.001024847927067835*zt**2 - 2.186459697726116e-6*zt**3 - &
  307. 0.1017165718716887/x - 0.002050640345231486*LOG(zrh) - &
  308. 0.007585041382707174*zt*LOG(zrh) + &
  309. 0.0001926539658089536*zt**2*LOG(zrh) - &
  310. 6.70429719683894e-7*zt**3*LOG(zrh) - &
  311. (0.2557744774673163*LOG(zrh))/x + &
  312. 0.003223076552477191*LOG(zrh)**2 + &
  313. 0.000852636632240633*zt*LOG(zrh)**2 - &
  314. 0.00001547571354871789*zt**2*LOG(zrh)**2 + &
  315. 5.666608424980593e-8*zt**3*LOG(zrh)**2 + &
  316. (0.03384437400744206*LOG(zrh)**2)/x + &
  317. 0.04743226764572505*LOG(zrh)**3 - &
  318. 0.0006251042204583412*zt*LOG(zrh)**3 + &
  319. 2.650663328519478e-6*zt**2*LOG(zrh)**3 - &
  320. 3.674710848763778e-9*zt**3*LOG(zrh)**3 - &
  321. (0.0002672510825259393*LOG(zrh)**3)/x - &
  322. 0.01252108546759328*LOG(zrhoa) + &
  323. 0.005806550506277202*zt*LOG(zrhoa) - &
  324. 0.0001016735312443444*zt**2*LOG(zrhoa) + &
  325. 2.881946187214505e-7*zt**3*LOG(zrhoa) + &
  326. (0.0942243379396279*LOG(zrhoa))/x - &
  327. 0.0385459592773097*LOG(zrh)*LOG(zrhoa) - &
  328. 0.0006723156277391984*zt*LOG(zrh)*LOG(zrhoa) + &
  329. 2.602884877659698e-6*zt**2*LOG(zrh)*LOG(zrhoa) + &
  330. 1.194163699688297e-8*zt**3*LOG(zrh)*LOG(zrhoa) - &
  331. (0.00851515345806281*LOG(zrh)*LOG(zrhoa))/x - &
  332. 0.01837488495738111*LOG(zrh)**2*LOG(zrhoa) + &
  333. 0.0001720723574407498*zt*LOG(zrh)**2*LOG(zrhoa) - &
  334. 3.717657974086814e-7*zt**2*LOG(zrh)**2*LOG(zrhoa) - &
  335. 5.148746022615196e-10*zt**3*LOG(zrh)**2*LOG(zrhoa) + &
  336. (0.0002686602132926594*LOG(zrh)**2*LOG(zrhoa))/x - &
  337. 0.06199739728812199*LOG(zrhoa)**2 + &
  338. 0.000906958053583576*zt*LOG(zrhoa)**2 - &
  339. 9.11727926129757e-7*zt**2*LOG(zrhoa)**2 - &
  340. 5.367963396508457e-9*zt**3*LOG(zrhoa)**2 - &
  341. (0.007742343393937707*LOG(zrhoa)**2)/x + &
  342. 0.0121827103101659*LOG(zrh)*LOG(zrhoa)**2 - &
  343. 0.0001066499571188091*zt*LOG(zrh)*LOG(zrhoa)**2 + &
  344. 2.534598655067518e-7*zt**2*LOG(zrh)*LOG(zrhoa)**2 - &
  345. 3.635186504599571e-10*zt**3*LOG(zrh)*LOG(zrhoa)**2 + &
  346. (0.0006100650851863252*LOG(zrh)*LOG(zrhoa)**2)/x + &
  347. 0.0003201836700403512*LOG(zrhoa)**3 - &
  348. 0.0000174761713262546*zt*LOG(zrhoa)**3 + &
  349. 6.065037668052182e-8*zt**2*LOG(zrhoa)**3 - &
  350. 1.421771723004557e-11*zt**3*LOG(zrhoa)**3 + &
  351. (0.0001357509859501723*LOG(zrhoa)**3)/x
  352. zntot=EXP(zntot) ! add. Eq. (13)
  353. ! Equation (14) - radius of the critical cluster in nm
  354. zrc=EXP(-1.6524245+0.42316402*x+0.33466487*LOG(zntot)) ! [nm]
  355. ! Conversion [nm -> m]
  356. zrxc(jl)=zrc*1e-9
  357. !----1.2) Limiter
  358. IF(zjnuc<1.e-7 .OR. zntot<4.0) zjnuc=0.0
  359. ! limitation to 1E+10 [1/cm3s]
  360. zjnuc=MIN(zjnuc,1.e10)
  361. pxtrnucr(jl,jk) = zjnuc
  362. ! convert total number of molecules in the critical cluster
  363. ! to number of sulfate molecules:
  364. pntot(jl,jk)=zntot*zxmole
  365. pdiam(jl,jk) = 2.0*zrc
  366. ELSE ! pmolecH2SO4, ptp1 , prhd out of range
  367. pntot(jl,jk) =0.0
  368. pxtrnucr(jl,jk)=0.0
  369. pdiam(jl,jk) =0.0
  370. END IF
  371. END DO ! kproma
  372. END DO ! klev
  373. END SUBROUTINE nucl_vehkamaeki
  374. SUBROUTINE nucl_bl(kproma, kbdim, klev, & ! Dimensions
  375. pmolecH2SO4, pmolecELVOC, ptp1, papp1, prhd, & ! H2SO4 concentration, ELVOC concentration, temperature, pressure, RH
  376. paernl, pm6rp, binnucrate, bindiam, & !
  377. ppfr, pns_sa, pns_org, ztmst) ! Number concs, radii, formation rate, number of H2SO4 molecules in cluster
  378. !
  379. ! Authors:
  380. ! ---------
  381. ! R. MAKKONEN, UNIV. HELSINKI 2016-2017
  382. !
  383. ! Purpose
  384. ! ---------
  385. ! Calculation of 2 nm formation rate based on semi-empirical equation.
  386. !
  387. ! References:
  388. ! -----------
  389. ! Paasonen et al. (2010) ACP
  390. ! Kerminen and Kulmala (2002) Aer. Sci.
  391. !
  392. USE mo_control, ONLY: nrow
  393. USE chem_param, ONLY: xmh2so4, xmelvoc
  394. USE mo_aero_m7, ONLY: pi, dh2so4,nnucl, avo, condensation_sink, nmod, doc
  395. !----------------------------------------------------
  396. IMPLICIT NONE
  397. !----------------------------------------------------
  398. INTEGER :: kproma, kbdim, klev
  399. INTEGER :: jk, jl,jrow
  400. !----------------------------------------------------
  401. !
  402. REAL :: pns_org(kbdim,klev), &
  403. pns_sa(kbdim,klev), &
  404. ppfr(kbdim,klev), &
  405. binnucrate(kbdim,klev),&
  406. bindiam(kbdim,klev)
  407. REAL :: ptp1(kbdim,klev), prhd(kbdim,klev), papp1(kbdim,klev), &
  408. pxtrnucr(kbdim,klev), &
  409. pmolecH2SO4(kbdim,klev), & ! Sulfuric acid concentration
  410. pntot(kbdim,klev), &
  411. pmolecELVOC(kbdim,klev) ! ELVOC concentration
  412. REAL :: paernl(kbdim,klev,nmod), &
  413. pm6rp(kbdim,klev,nmod)
  414. REAL :: zaernl(nmod),zm6rp(nmod)
  415. REAL :: ztmst
  416. !----------------------------------------------------
  417. ! Local Arrays
  418. REAL :: gr_sa, gr_org, nmolec, d_nuc, lambda, factor, cs_prime, fracELVOCnucl, org_ss, binfactor
  419. REAL :: vtot, nuclrate, formrate, n_sa, n_org, delvoc, vfr_sa, vfr_org, diffcoef_org, cs(nmod)
  420. !--- 0) Initializations:
  421. jrow=nrow(2)
  422. ppfr =0.
  423. pns_sa =1.
  424. pns_org =1.
  425. d_nuc=2. ! Size at parameterized nucleation rate (nm)
  426. ! d_form= ! Size at simulated formation rate (nm)
  427. delvoc=doc ! Density of ELVOC g/cm3
  428. diffcoef_org=1.5E-5 ! Diffusion coefficient for calculation of CS from CS', unit m2/s
  429. !--- Total volume of d_form -sized spherical particle (cm3)
  430. vtot = (4./3.) * pi * (0.5*d_form*1.E-7)**3
  431. DO jk=1, klev
  432. DO jl=1,kproma
  433. ! Mean free path (m)
  434. lambda=0.066 *(1.01325E+5/papp1(jl,jk))*(ptp1(jl,jk)/293.15)*1.E-06
  435. ! Condensation sink prime (m-2)
  436. !zaernl(:)=paernl(jl,jk,:)
  437. !zm6rp(:)=pm6rp(jl,jk,:)
  438. !CALL condensation_sink_prime(zaernl(:), 0.01*zm6rp(:), lambda, cs)
  439. CALL condensation_sink_prime(paernl(jl,jk,:), 0.01*pm6rp(jl,jk,:), lambda, cs)
  440. cs_prime=MAX(MIN(sum(cs),1.E10),1.e-20)
  441. ! Steady-state concentration of ELVOCs assuming above condensation sink
  442. org_ss=pmolecELVOC(jl,jk)/(4*pi*diffcoef_org*ztmst*cs_prime)
  443. org_ss=MAX(MIN(org_ss,pmolecELVOC(jl,jk)),0.0)
  444. ! Semi-empirical nucleation rate (d_nuc sized clusters). Only used for rate, not for composition information
  445. IF(nnucl==3) THEN
  446. nuclrate = 11.0 * 1.E-14 * pmolecH2SO4(jl,jk) * org_ss ! Paasonen et al. (2010) Eq. 15
  447. d_nuc=2.0
  448. ELSE IF(nnucl==4) THEN
  449. nuclrate = 3.27 * 1.E-21 * (pmolecH2SO4(jl,jk)**2) * org_ss ! Riccobono et al. (2014)
  450. d_nuc=1.7
  451. END IF
  452. ! Calculate "Kerminen-Kulmala factor" for binary nucleation from critical cluster size to d_nuc
  453. ! Safety check for division by zero and floating overflow (when binnucrate==0, can bindiam>d_nuc)
  454. if (binnucrate(jl,jk)>1e-20) then
  455. CALL kkfactor(ptp1(jl,jk),pmolecH2SO4(jl,jk),org_ss,pm6rp(jl,jk,:),paernl(jl,jk,:),bindiam(jl,jk),d_nuc,cs_prime,gr_sa,gr_org,binfactor)
  456. else
  457. binfactor=0.0
  458. end if
  459. ! Calculate "Kerminen-Kulmala factor", a proportionality factor to account for particles losses between d_nuc and d_form
  460. CALL kkfactor(ptp1(jl,jk),pmolecH2SO4(jl,jk),org_ss,pm6rp(jl,jk,:),paernl(jl,jk,:),d_nuc,d_form,cs_prime,gr_sa,gr_org,factor)
  461. ! Formation rate of d_form clusters: binary nucleation (at d_nuc) plus semi-empirical nucleation (at d_nuc)
  462. formrate = (binnucrate(jl,jk)*binfactor + nuclrate)*factor
  463. ! security check
  464. IF (formrate< 1e-20) then
  465. cycle
  466. end IF
  467. ! Assume that volume ratio v_org/v_sa in forming particle is proportional to GR_org^3 / GR_sa^3
  468. IF(gr_sa+gr_org .GT. 1.E-15) THEN
  469. vfr_sa = gr_sa**3 / (gr_sa+gr_org)**3
  470. vfr_org = gr_org**3 / (gr_sa+gr_org)**3
  471. vfr_sa = MAX(MIN(vfr_sa / (vfr_sa+vfr_org), 1.0), 0.0)
  472. vfr_org = 1 - vfr_sa
  473. ELSE
  474. vfr_sa=0.5
  475. vfr_org=0.5
  476. END IF
  477. ! Number of sulphuric acid and organic molecules in d_form sized particle
  478. ! # = 1 cm3 mol-1 g cm-3 g-1 mol
  479. n_sa = vfr_sa * vtot * avo * dh2so4 / xmh2so4
  480. n_org = vfr_org * vtot * avo * delvoc / xmelvoc
  481. ! Sanity checks and limiters
  482. ! Limiting formation rate based on both sulphuric acid and ELVOC concentration.
  483. ! Limit 1a: sulfuric acid deficit
  484. IF( n_sa * formrate * ztmst .GT. pmolecH2SO4(jl,jk)) THEN
  485. ! Try to maintain formation rate: calculate maximum VFR using all available sulfuric acid
  486. vfr_sa = pmolecH2SO4(jl,jk) * xmh2so4/ ( formrate * vtot * avo * dh2so4 * ztmst)
  487. vfr_org = 1 - vfr_sa
  488. ! Update number of molecules in d_form sized particle
  489. n_sa = vfr_sa * vtot * avo * dh2so4 / xmh2so4 ! (==[H2SO4]/(dT*J) )
  490. n_org = vfr_org * vtot * avo * delvoc / xmelvoc
  491. ! Limit 1b: J can not be maintained by organics
  492. IF( n_org * formrate * ztmst .GT. org_ss) THEN
  493. ! Calculate J from available H2SO4 and ELVOC
  494. !cm-3 s-1= mol cm-3 s-1 ( cm-3 g mol-1 g-1 cm3 )
  495. formrate = 1.0 / (avo * vtot * ztmst) * (pmolecH2SO4(jl,jk) * xmh2so4 / dh2so4 + org_ss * xmelvoc / delvoc)
  496. n_sa = pmolecH2SO4(jl,jk) / (formrate * ztmst)
  497. n_org = org_ss / (formrate * ztmst)
  498. !NOT-NEEDED-EXCEPT-4-DEBUG vfr_sa = vtot * avo * dh2so4 / (xmh2so4 * n_sa) ! (==[H2SO4]/(dT*J) )
  499. !NOT-NEEDED-EXCEPT-4-DEBUG vfr_org = vtot * avo * delvoc / (xmelvoc * n_org)
  500. END IF ! Limit 1b
  501. ! Limit 2a: ELVOC deficit
  502. ELSE IF( n_org * formrate * ztmst .GT. org_ss) THEN
  503. ! Try to maintain formation rate: calculate maximum VFR using all available ELVOC
  504. ! 1 = cm-3 g mol-1 cm3 s cm-3 mol g-1 cm3 s-1
  505. vfr_org = MAX(MIN(org_ss * xmelvoc/ ( formrate * vtot * avo * delvoc * ztmst), 1.0), 0.0)
  506. vfr_sa = 1 - vfr_org
  507. ! Update number of molecules in d_form sized particle
  508. n_sa = vfr_sa * vtot * avo * dh2so4 / xmh2so4
  509. n_org = vfr_org * vtot * avo * delvoc / xmelvoc ! (==[ELVOC(SS)]/(dT*J) )
  510. ! Limit 2b: J can not be maintained by sulfuric acid
  511. IF( n_sa * formrate * ztmst .GT. pmolecH2SO4(jl,jk) ) THEN
  512. ! Calculate J from available H2SO4 and ELVOC
  513. formrate = 1.0 / (avo * vtot * ztmst) * (pmolecH2SO4(jl,jk) * xmh2so4 / dh2so4 + org_ss * xmelvoc / delvoc)
  514. n_sa = pmolecH2SO4(jl,jk) / (formrate * ztmst)
  515. n_org = org_ss / (formrate * ztmst)
  516. !NOT-NEEDED-EXCEPT-4-DEBUG vfr_sa = vtot * avo * dh2so4 / (xmh2so4 * n_sa) ! (==[H2SO4]/(dT*J) )
  517. !NOT-NEEDED-EXCEPT-4-DEBUG vfr_org = vtot * avo * delvoc / (xmelvoc * n_org)
  518. END IF ! Limit 2b
  519. END IF ! Limit 2a
  520. pns_sa(jl,jk) = n_sa ! * formrate ! kerrotaan jo m7_nuck?
  521. pns_org(jl,jk) = n_org ! * formrate ! kerrotaan jo m7_nuck?
  522. ppfr(jl,jk) = formrate
  523. !DBG IF(jk==klev .AND. jl==230) THEN
  524. !DBG! IF(3.GT.2) THEN ! .AND. cs_prime .GT. 1.E-4 .AND. ptp1(jl,jk) .GT. 293.0 .AND. nuclrate .GT. 1) THEN
  525. !DBG WRITE(*,*) 'blnuc: gr_org, n_org, pmolecELVOC(jl,jk),org_ss', gr_org, n_org, pmolecELVOC(jl,jk),org_ss
  526. !DBG WRITE(*,*) 'blnuc: gr_sa, n_sa, pmolecH2SO4(jl,jk)', gr_sa, n_sa, pmolecH2SO4(jl,jk)
  527. !DBG WRITE(*,*) 'blnuc: nuclrate,formrate,factor,cs',nuclrate,formrate,factor,cs_prime
  528. !DBG WRITE(*,*) 'blnuc: vfr ', vfr_sa, vfr_org
  529. !DBG WRITE(*,*) 'blnuc: vtot ', vtot, ztmst
  530. !DBG END IF
  531. END DO
  532. END DO
  533. END SUBROUTINE nucl_bl
  534. SUBROUTINE kkfactor(ptp1, ph2so4, porg, pm6rp, paernl, d_nuc, d_form, cs_prime, gr_sa, gr_org, factor)
  535. USE mo_aero_m7, ONLY: nmod, sigma, pi, dh2so4
  536. USE chem_param, ONLY: xmh2so4, xmelvoc
  537. REAL,INTENT(IN) :: d_nuc, d_form, paernl(nmod), pm6rp(nmod), ptp1, ph2so4, porg, cs_prime
  538. REAL,INTENT(OUT) :: gr_sa, gr_org, factor
  539. REAL :: dorg, lambda, cs(nmod), gamma, vmol
  540. ! Gamma-parameter for K&K
  541. CALL kk_gamma_parameter(paernl(:), 0.01*pm6rp(:), d_nuc, d_form, dh2so4, ptp1, gamma)
  542. !--- Growth rates, calculated using Eq. 21 in Kerminen&Kulmala 2002, assuming 1 g/cm3 density for nuclei
  543. !--- Growth rate due to H2SO4
  544. vmol=SQRT(3.0 * 8.314472 * ptp1 / (xmh2so4*0.001) ) ! RMS Molecular speed (m/s)
  545. gr_sa=((3.E-9)/(1000.))*(vmol*xmh2so4*ph2so4) ! Growth rate (nm/h)
  546. gr_sa=MAX(MIN(gr_sa,1.E2),0.) ! Limit GR to <100 nm/h
  547. ! Growth rate from ELVOCs
  548. vmol=SQRT(3.0 * 8.314472 * ptp1 / (xmelvoc*0.001) ) ! RMS Molecular speed (m/s)
  549. gr_org=((3.E-9)/(1000.))*(vmol*xmelvoc*porg) ! Growth rate (nm/h)
  550. gr_org=MAX(MIN(gr_org,1.E2),0.) ! Limit GR to <100 nm/h
  551. ! Safety check for division by zero
  552. IF((gr_sa+gr_org) .GT. 1.E-10)THEN
  553. factor=EXP((1./d_form-1./d_nuc)*(gamma*cs_prime/(gr_sa+gr_org)))
  554. else
  555. factor=0.0
  556. end if
  557. END SUBROUTINE kkfactor
  558. SUBROUTINE kk_gamma_parameter(paernl, pm6rp, d_nuc, d_form, rho, t, gamma)
  559. USE mo_aero_m7, ONLY: nmod, sigma, wh2so4, rerg, dh2so4
  560. REAL :: gamma0
  561. REAL :: gamma
  562. REAL,intent(in) :: d_nuc, d_form
  563. REAL :: d_mean, rho, t
  564. REAL :: paernl(nmod), pm6rp(nmod)
  565. gamma0=0.23 !! [gamma]=(nm2*m2)/h
  566. ! Number mean diameter for pre-existing particle population (now mass mean diameter)
  567. ! [d_mean] = nm
  568. d_mean=(1.E9)*(paernl(2)*pm6rp(2)+paernl(3)*pm6rp(3)+paernl(4)*pm6rp(4)+ &
  569. paernl(5)*pm6rp(5)+paernl(6)*pm6rp(6)+paernl(7)*pm6rp(7))/6.
  570. gamma=gamma0*((d_nuc/1.)**0.2)*((d_form/3.)**0.075)*((d_mean/150.)**0.048)*(rho**(-0.33))*(t/293.)
  571. END SUBROUTINE kk_gamma_parameter
  572. SUBROUTINE condensation_sink_prime(N,D,LAMBDA,OUTPUT)
  573. ! Calculate 'condensation sink' using eq. 6 in Kerminen et. al 2004
  574. ! eq. 3 in Kerminen et. al 2002
  575. USE mo_aero_m7, ONLY: nmod
  576. REAL, INTENT(OUT) :: OUTPUT(nmod) !output coefficients
  577. REAL, INTENT(IN) :: N(nmod) !number concentrations [#/cm3]
  578. REAL, INTENT(IN) :: D(nmod) !current geom median diameters of the modes [m]
  579. REAL, INTENT(IN) :: LAMBDA ![m]
  580. REAL :: KN ! Knudsen number
  581. REAL :: CS(nmod)
  582. INTEGER :: jmod
  583. DO jmod=1,nmod
  584. IF (N(jmod)>1.e0) THEN
  585. KN=(2*LAMBDA)/D(jmod)
  586. CS(jmod)=((D(jmod))*(N(jmod)*1.E6)*(1+KN))/(1+0.377*KN+1.33*KN*(1+KN))
  587. CS(jmod)=MAX(CS(jmod),0.)
  588. CS(jmod)=MIN(CS(jmod),1.E15)
  589. ELSE
  590. CS(jmod)=0.
  591. END IF
  592. END DO
  593. !Note: the 0.5 factor is applied already here
  594. OUTPUT=0.5*CS
  595. END SUBROUTINE condensation_sink_prime
  596. END MODULE mo_aero_nucl