chem_rates__dummy.F90 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895
  1. !### macro's #####################################################
  2. !
  3. #define TRACEBACK write (gol,'("in ",a," (",a,", line",i5,")")') rname, __FILE__, __LINE__; call goErr
  4. #define IF_NOTOK_RETURN(action) if (status/=0) then; TRACEBACK; action; return; end if
  5. #define IF_ERROR_RETURN(action) if (status> 0) then; TRACEBACK; action; return; end if
  6. !
  7. #include "tm5.inc"
  8. !
  9. !#################################################################
  10. module chem_rates
  11. !
  12. ! use GO, only : gol, goPr, goErr
  13. !
  14. ! private
  15. !
  16. ! public :: rates, calrates, calchetnew1, calchetnew2
  17. !
  18. !
  19. !contains
  20. !
  21. !
  22. ! subroutine rates
  23. ! !----------------------------------------------------------------------
  24. ! !
  25. ! !**** rates calculation of look up tables for rate constants and
  26. ! ! Henry's law constants
  27. ! !
  28. ! ! purpose
  29. ! ! -------
  30. ! ! calculation of look up tables rate constants/henry coefficients
  31. ! !
  32. ! ! interface
  33. ! ! ---------
  34. ! ! call rates
  35. ! !
  36. ! ! method
  37. ! ! ------
  38. ! ! use known array of temperatures (integers) to calculate rate constants
  39. ! ! 3 body reactions are explicitly calculated in chemistry
  40. ! !
  41. ! ! external
  42. ! ! --------
  43. ! ! none
  44. ! !
  45. ! ! reference
  46. ! ! ---------
  47. ! ! none
  48. ! !
  49. ! !------------------------------------------------------------------
  50. ! use toolbox, only: zfarr
  51. ! use chem_param
  52. !
  53. ! implicit none
  54. !
  55. ! ! local
  56. ! integer :: itemp,k,i
  57. ! real :: ztrec,zt3rec,temp
  58. !
  59. ! ! start
  60. ! do k=1,ntemp
  61. ! itemp=k+ntlow
  62. ! temp=float(itemp)
  63. ! ztrec=1./float(itemp)
  64. ! zt3rec=300./float(itemp)
  65. ! rates_lut(knoo3,k)=zfarr(2.e-12,-1400.,ztrec)
  66. ! rates_lut(kho2no,k)=zfarr(3.7e-12,250.,ztrec)
  67. ! rates_lut(kno2oha,k)=2.47e-30*zt3rec**2.97 !!!wp!!! new ravi
  68. ! rates_lut(kno2ohb,k)=1.45e-11*zt3rec**2.77 !!!wp!!! new ravi
  69. ! rates_lut(kohhno3a,k)=zfarr(2.41e-14,460.,ztrec) !!!wp!!! new ravi
  70. ! rates_lut(kohhno3b,k)=zfarr(6.51e-34,1335.,ztrec) !!!wp!!! new ravi
  71. ! rates_lut(kohhno3c,k)=zfarr(2.69e-17,2199.,ztrec) !!!wp!!! new ravi
  72. ! rates_lut(kno2o3,k)=zfarr(1.2e-13,-2450.,ztrec)
  73. ! rates_lut(knono3,k)=zfarr(1.5e-11,170.,ztrec)
  74. ! rates_lut(kno2no3a,k)=2.2e-30*zt3rec**3.9
  75. ! rates_lut(kno2no3b,k)=1.5e-12*zt3rec**0.7
  76. ! rates_lut(kn2o5,k)=zfarr(2.7e-27,11000.,ztrec)
  77. ! rates_lut(khno4oh,k)=zfarr(1.3e-12,380.,ztrec)
  78. ! rates_lut(kno2ho2a,k)=1.8e-31*zt3rec**3.2
  79. ! rates_lut(kno2ho2b,k)=4.7e-12*zt3rec**1.4
  80. ! rates_lut(khno4m,k)=zfarr(2.1e-27,10900.,ztrec)
  81. ! rates_lut(kodm,k)=.2095*zfarr(3.2e-11,70.,ztrec)+ &
  82. ! .7808*zfarr(1.8e-11,110.,ztrec)
  83. ! rates_lut(kh2ood,k)=2.2e-10
  84. ! rates_lut(ko3ho2,k)=zfarr(1.1e-14,-500.,ztrec)
  85. ! rates_lut(ko3oh,k)=zfarr(1.6e-12,-940.,ztrec)
  86. ! rates_lut(khpoh,k)=zfarr(2.9e-12,-160.,ztrec)
  87. ! rates_lut(kfrmoh,k)=1.e-11
  88. ! rates_lut(kch4oh,k)=zfarr(2.65e-12,-1800.,ztrec)
  89. ! rates_lut(kohmper,k)=zfarr(3.8e-12,200.,ztrec)
  90. ! rates_lut(kohrooh,k)=3.e-12
  91. ! rates_lut(kho2oh,k)=zfarr(4.8e-11,250.,ztrec)
  92. ! rates_lut(kmo2ho2,k)=zfarr(3.8e-13,800.,ztrec)
  93. ! rates_lut(kmo2no,k)=zfarr(4.2e-12,180.,ztrec)
  94. ! rates_lut(kmo2mo2,k)=zfarr(2.5e-13,190.,ztrec)
  95. ! rates_lut(kho2ho2a,k)=zfarr(2.3e-13,600.,ztrec)
  96. ! rates_lut(kho2ho2b,k)=zfarr(1.7e-33,1000.,ztrec)
  97. ! rates_lut(kho2ho2c,k)=zfarr(1.4e-21,2200.,ztrec)
  98. ! rates_lut(kc41,k)=5.8e-16
  99. ! rates_lut(kc43,k)=zfarr(7.0e-12,250.,ztrec)
  100. ! rates_lut(kc44,k)=2.5e-15
  101. ! rates_lut(kc46,k)=zfarr(3.5e-11,-180.,ztrec)
  102. ! rates_lut(kc47a,k)=2.7e-28*zt3rec**(-7.1)
  103. ! rates_lut(kc47b,k)=1.2e-11*zt3rec**0.9
  104. ! rates_lut(kc48,k)=zfarr(2.0e16,-13500.,ztrec)
  105. ! rates_lut(kc49,k)=2.e-12
  106. ! rates_lut(kc50,k)=6.5e-12
  107. ! rates_lut(kc52,k)=8.1e-13
  108. ! rates_lut(kc53,k)=zfarr(1.e15,-8000.,ztrec)
  109. ! rates_lut(kc54,k)=1.6e3
  110. ! rates_lut(kc57,k)=zfarr(5.2e-12,504.,ztrec)
  111. ! rates_lut(kc58,k)=zfarr(4.33e-15,-1800.,ztrec)
  112. ! rates_lut(kc59,k)=7.7e-15
  113. ! rates_lut(kc61a,k)=1.e-28*zt3rec**0.8
  114. ! rates_lut(kc61b,k)=8.8e-12
  115. ! rates_lut(kc62,k)=zfarr(9.14e-15,-2580.,ztrec)
  116. ! rates_lut(kc73,k)=1.7e-11
  117. ! rates_lut(kc76,k)=zfarr(2.54e-11,410.,ztrec)
  118. ! rates_lut(kc77,k)=zfarr(12.3e-15,-2013.,ztrec)
  119. ! rates_lut(kc78,k)=7.8e-13
  120. ! rates_lut(kc79,k)=zfarr(4.2e-12,180.,ztrec)
  121. ! rates_lut(kc80,k)=zfarr(1.7e-14,1300.,ztrec)
  122. ! rates_lut(kc81,k)=6.8e-13
  123. ! rates_lut(kc82,k)=zfarr(3.5e-13,1000.,ztrec)
  124. ! rates_lut(kc83,k)=8.e-11
  125. ! rates_lut(kc84,k)=1.78e-12
  126. !
  127. ! ! sulfur and ammonia gas phase reactions
  128. !
  129. ! ! the hynes et al. parameterisation is replaced by chin et al. 1996
  130. !
  131. ! rates_lut(kdmsoha,k)= 9.6e-12*exp(-234./temp)
  132. ! rates_lut(kdmsohb,k)=1.7e-42*exp(7810./temp)
  133. ! rates_lut(kdmsohc,k)=5.5e-31*exp(7460./temp)
  134. ! rates_lut(kdmsno3,k)=zfarr(1.9e-13,500.,ztrec)!at 298 1.01e-12
  135. ! rates_lut(kso2oha,k)=3.0e-31*(temp/300.)**(-3.3)
  136. ! rates_lut(kso2ohb,k)= 1.5e-12*(temp/300.)
  137. !
  138. ! !
  139. ! ! fate of ammonia
  140. ! !
  141. ! rates_lut(knh3oh,k)= zfarr(1.7e-12,-710.,ztrec)!1.56e-13 at 298k
  142. ! rates_lut(knh2no,k)= zfarr(3.8e-12,+450.,ztrec)!1.72e-11
  143. ! rates_lut(knh2no2,k)= zfarr(2.1e-12,650.,ztrec)!1.86e-11
  144. ! rates_lut(knh2ho2,k)= 3.4e-11
  145. ! rates_lut(knh2o2,k)= 6.0e-21
  146. ! rates_lut(knh2o3,k)= zfarr(4.3e-12,-930.,ztrec)!1.89e-13 at 298k
  147. !
  148. ! !
  149. ! ! **** solubility Henry equilibrium
  150. ! ! HNO3/so4/nh4 just a very high number to take H and
  151. ! ! dissociation into account
  152. ! !
  153. ! henry(:,k)=0.
  154. ! henry(ih2o2,k)=zfarr(1.67e-5,6621.,ZTREC)
  155. ! henry(ihno3,k)=1e7
  156. ! henry(ich3o2h,k)=zfarr(1.5e-6,5607.,ZTREC)
  157. ! henry(ich2o,k)=zfarr(2.7e-6,6425.,ZTREC)
  158. ! henry(irooh,k)=zfarr(1.5e-6,5607.,ZTREC)!(as CH3O2H)
  159. ! henry(iorgntr,k)=zfarr(1.8e-6,6000.,ZTREC)
  160. ! henry(iso4,k)=1.e7
  161. ! henry(inh4,k)=1.e7
  162. ! henry(imsa,k)=1.e7
  163. ! henry(iso2,k) =1.2*exp(3120.*ZTREC)*3.41e-5 !correction for the 1/298. part
  164. ! henry(inh3,k) =75.0*exp(3400.*ZTREC)*1.10e-5
  165. ! henry(io3,k)=1.1e-2*exp(2300.*ZTREC)*4.45e-4
  166. ! end do !k temperature loop
  167. ! !
  168. ! ! marked tracers:
  169. ! !
  170. ! henry(io3s,:) = henry(io3,:)
  171. !
  172. !
  173. ! end subroutine rates
  174. !
  175. !
  176. !
  177. ! subroutine calrates(region,rjx,rr,ye)
  178. ! !**************************************************************
  179. ! !
  180. ! ! CALRATES calculate rate constants using lookup table rates_lut
  181. ! ! calculate third bodies
  182. ! ! calculate heterogeneous removal on aerosols
  183. ! !
  184. ! ! External: CALCHET
  185. ! !
  186. ! !************************************************************
  187. ! !debug use hdf
  188. !
  189. ! use global_data, only: region_dat
  190. ! use chem_param
  191. ! use dims, only: isr,ier, jsr,jer, im, jm
  192. !
  193. ! implicit none
  194. !
  195. ! ! input/output
  196. ! integer, intent(in) :: region
  197. ! real,dimension(im(region),jm(region),nj) :: rjx
  198. ! ! output
  199. ! ! rr: reaction rates...
  200. ! real,dimension(im(region),jm(region),nreac),intent(out) :: rr
  201. ! ! ye: extra 2D fields
  202. ! real,dimension(im(region),jm(region),n_extra),intent(inout) :: ye
  203. !
  204. ! ! local:
  205. ! ! heterogeneous removal rates
  206. ! real,dimension(:,:),allocatable :: het_nh3, het_n2o5
  207. !
  208. ! ! help variables
  209. ! integer, dimension(:,:), pointer :: zoomed
  210. ! integer :: itemp,i,j
  211. ! real :: tr, temp, wv, airp, rx1, rx2, rx3
  212. ! real :: dum, h2ox, aird, o2
  213. ! real :: x1, x2, xice, xliq
  214. ! !
  215. ! ! cloud chemistry of n2o5
  216. ! real :: dg, kt_liq, kt_ice
  217. ! real, parameter :: r_liq=1e-3, r_ice=5e-3 ! cm
  218. ! real, parameter :: g_n2o5_i=0.01, g_n2o5_l=0.04
  219. !
  220. ! !debug integer :: io,sfstart,sfend
  221. !
  222. ! ! start
  223. ! zoomed => region_dat(region)%zoomed
  224. ! allocate(het_nh3(im(region),jm(region)))
  225. ! allocate(het_n2o5(im(region),jm(region)))
  226. !
  227. ! rx3=0.6
  228. ! do j=jsr(region),jer(region)
  229. ! do i=isr(region),ier(region)
  230. ! if(zoomed(i,j)/=region) cycle
  231. ! temp=ye(i,j,i_temp)
  232. ! itemp=nint(temp-float(ntlow))
  233. ! itemp=min(max(itemp,1),ntemp) !limit temperatures in loop-up table range
  234. ! airp=ye(i,j,i_pres)
  235. ! !
  236. ! ! Calculation of relative humidity [%]
  237. ! ! Richardson's approximation for water vapor pressure
  238. ! ! should be calculated in subroutine rates
  239. ! !
  240. ! h2ox = ye(i,j,ih2on)
  241. ! aird = ye(i,j,iairn)
  242. ! tr=1.-373.15/temp
  243. ! wv=exp((((-.1299*tr-.6445)*tr-1.976)*tr+13.3185)*tr)
  244. ! ye(i,j,irh)=h2ox*temp/(1013.25*wv*7.24e16)
  245. ! ye(i,j,irh) = max(min(ye(i,j,irh),100.0),0.0) !limit rh between 0-100%
  246. !
  247. ! o2=0.209476*aird
  248. ! !
  249. ! !**** calculate three body reaction rates
  250. ! !
  251. ! rx1=rates_lut(KNO2OHA,itemp)*aird
  252. ! rx2=rates_lut(KNO2OHB,itemp)
  253. ! rr(i,j,kno2oh)=RX1/(1.+RX1/RX2)*RX3**(1./(1.+LOG10(RX1/RX2)**2))
  254. ! rx1=rates_lut(KOHHNO3C,itemp)
  255. ! rx2=rates_lut(KOHHNO3B,itemp)*aird
  256. ! rr(i,j,kohhno3)=rates_lut(KOHHNO3A,itemp)+rx1*rx2/(rx1+rx2)
  257. ! rx1=rates_lut(KNO2NO3A,itemp)*aird
  258. ! rx2=rates_lut(KNO2NO3B,itemp)
  259. ! rr(i,j,kno2no3)=RX1/(1.+RX1/RX2)*RX3**(1./(1.+LOG10(RX1/RX2)**2))
  260. ! rx1=rates_lut(KNO2HO2A,itemp)*aird
  261. ! rx2=rates_lut(KNO2HO2B,itemp)
  262. ! rr(i,j,kno2ho2)=RX1/(1.+RX1/RX2)*RX3**(1./(1.+LOG10(RX1/RX2)**2))
  263. ! rx1=rates_lut(KC61A,itemp)*aird
  264. ! rx2=rates_lut(KC61B,itemp)
  265. ! rr(i,j,kc61)=RX1/(1.+RX1/RX2)*RX3**(1./(1.+LOG10(RX1/RX2)**2))
  266. ! !
  267. ! ! photolysis rates and 2 body reactions
  268. ! !
  269. ! rr(i,j,knoo3)=rates_lut(KNOO3,itemp)
  270. ! rr(i,j,kho2no)=rates_lut(KHO2NO,itemp)
  271. ! rr(i,j,kmo2no)=rates_lut(Kmo2NO,itemp)
  272. ! rr(i,j,kno2o3)=rates_lut(KNO2O3,itemp)
  273. ! rr(i,j,knono3)=rates_lut(KNONO3,itemp)
  274. ! rr(i,j,kn2o5)=rr(i,j,kno2no3)/rates_lut(KN2O5,itemp)
  275. ! rr(i,j,khno4oh)=rates_lut(KHNO4OH,itemp)
  276. ! rr(i,j,khno4m)=rr(i,j,kno2ho2)/rates_lut(KHNO4M,itemp)
  277. ! rr(i,j,kodm)=rates_lut(KODM,itemp)
  278. ! rr(i,j,kh2ood)=rates_lut(KH2OOD,itemp)
  279. ! rr(i,j,ko3ho2)=rates_lut(KO3HO2,itemp)
  280. ! rr(i,j,kcooh)=1.5E-13+9E-14*airp/101325.
  281. ! rr(i,j,ko3oh)=rates_lut(KO3OH,itemp)
  282. ! rr(i,j,khpoh)=rates_lut(KHPOH,itemp)
  283. ! rr(i,j,kfrmoh)=rates_lut(KFRMOH,itemp)
  284. ! rr(i,j,kch4oh)=rates_lut(KCH4OH,itemp)
  285. ! rr(i,j,kh2oh)=1.06*rates_lut(KCH4OH,itemp)*550.e-9*aird !H2=550ppbv
  286. ! rr(i,j,kohmper)=rates_lut(KOHMPER,itemp)
  287. ! rr(i,j,kohrooh)=rates_lut(KOHROOH,itemp)
  288. ! rr(i,j,kmo2ho2)=rates_lut(KMO2HO2,itemp)
  289. ! rr(i,j,kmo2mo2)=rates_lut(KMO2MO2,itemp)
  290. ! rr(i,j,kho2oh)=rates_lut(KHO2OH,itemp)
  291. ! rr(i,j,kho2ho2)=(rates_lut(KHO2HO2A,itemp) + &
  292. ! rates_lut(KHO2HO2B,itemp)*aird)* &
  293. ! (1.+rates_lut(KHO2HO2C,itemp)*h2ox)
  294. ! rr(i,j,kc41)=rates_lut(KC41,itemp)
  295. ! rr(i,j,kc43)=rates_lut(KC43,itemp)
  296. ! rr(i,j,kc44)=rates_lut(KC44,itemp)
  297. ! rr(i,j,kc46)=rates_lut(KC46,itemp)
  298. ! rx1=rates_lut(KC47A,itemp)*aird*0.7808
  299. ! rx2=rates_lut(KC47B,itemp)
  300. ! rr(i,j,kc47)=0.96*RX1/(1.+RX1/RX2)*0.3**(1./(1.+LOG10(RX1/RX2)**2))
  301. ! rr(i,j,kc48)=rates_lut(KC48,itemp)
  302. ! rr(i,j,kc49)=rates_lut(KC49,itemp)
  303. ! rr(i,j,kc50)=rates_lut(KC50,itemp)
  304. ! rr(i,j,kc52)=rates_lut(KC52,itemp)
  305. ! rr(i,j,kc53)=rates_lut(KC53,itemp)
  306. ! rr(i,j,kc54)=rates_lut(KC54,itemp)
  307. ! rr(i,j,kc57)=rates_lut(KC57,itemp)
  308. ! rr(i,j,kc58)=rates_lut(KC58,itemp)
  309. ! rr(i,j,kc59)=rates_lut(KC59,itemp)
  310. ! rr(i,j,kc62)=rates_lut(KC62,itemp)
  311. ! rr(i,j,kc73)=rates_lut(KC73,itemp)
  312. ! rr(i,j,kc76)=rates_lut(KC76,itemp)
  313. ! rr(i,j,kc77)=rates_lut(KC77,itemp)
  314. ! rr(i,j,kc78)=rates_lut(KC78,itemp)
  315. ! rr(i,j,kc79)=rates_lut(KC79,itemp)
  316. ! rr(i,j,kc80)=rates_lut(KC80,itemp)
  317. ! rr(i,j,kc81)=rates_lut(KC81,itemp)
  318. ! rr(i,j,kc82)=rates_lut(KC82,itemp)
  319. ! rr(i,j,kc83)=rates_lut(KC83,itemp)
  320. ! rr(i,j,kc84)=rates_lut(KC84,itemp)
  321. ! rr(i,j,kc85)=rr(i,j,kc81)*rr(i,j,kc82)/rr(i,j,kc79)
  322. ! rjx(i,j,jo3d)=rjx(i,j,jo3d)*rr(i,j,kh2ood)*h2ox / &
  323. ! ( rr(i,j,kodm)*aird + rr(i,j,kh2ood)*h2ox )
  324. ! ! this is fraction rjo3d=>OH
  325. !
  326. ! RX1=rates_lut(kso2oha,itemp)*aird
  327. ! RX2=rates_lut(kso2ohb,itemp)
  328. ! rr(i,j,kso2oh)=RX1/(1.+RX1/RX2)*0.6**(1./(1.+LOG10(RX1/RX2)**2))
  329. ! !
  330. ! ! dmsoha => so2
  331. ! ! dmsohb => 0.75 SO2 + 0.25 MSA
  332. ! !
  333. ! rr(i,j,kdmsoha)=rates_lut(kdmsoha,itemp)
  334. ! rr(i,j,kdmsohb)=rates_lut(kdmsohb,itemp)*o2/ &
  335. ! (1.+rates_lut(kdmsohc,itemp)*o2)
  336. ! rr(i,j,kdmsno3)=rates_lut(kdmsno3,itemp)
  337. !
  338. ! ! ammonia chemistry
  339. ! rr(i,j,knh3oh)=rates_lut(knh3oh,itemp)
  340. ! rr(i,j,knh2no)=rates_lut(knh2no,itemp)
  341. ! rr(i,j,knh2no2)=rates_lut(knh2no2,itemp)
  342. ! rr(i,j,knh2ho2)=rates_lut(knh2ho2,itemp)
  343. ! rr(i,j,knh2o2)=rates_lut(knh2o2,itemp)*o2
  344. ! rr(i,j,knh2o3)=rates_lut(knh2o3,itemp)
  345. ! rr(i,j,krn222)=2.11e-6 ! s-1 decay time Rn222 to Pb210
  346. ! end do
  347. ! end do !_lat/lon loop
  348. !
  349. ! ! calculate heterogeneous removal constants of n2o5
  350. !
  351. ! call calchetnew2(region,ye,het_n2o5,1) !n2o5
  352. ! call calchetnew2(region,ye,het_nh3,2) !nh3
  353. !
  354. ! !
  355. ! ! heterogeneous reaction of N2O5 and H2O -> 2 HNO3 on cloud and aerosol
  356. ! ! included in gas phase chemistry
  357. ! !
  358. ! do j=jsr(region),jer(region)
  359. ! do i=isr(region),ier(region)
  360. ! if(zoomed(i,j)/=region) cycle
  361. ! !
  362. ! ! kt= (r2/3Dg + 4*r/3vgamma)^-1
  363. ! ! ice r=50 micrometer gamma = 0.01
  364. ! ! water r=10 micrometer gamma = 0.05
  365. ! ! v is 4e5 cm/s and Dg is 0.1 cm2/s at standard press
  366. ! airp=ye(i,j,i_pres)
  367. ! dg=0.1*1e5/airp !simple approximation for diffusion coeff. [cm2/s]
  368. ! kt_liq=1./(r_liq*r_liq/3./dg+4.*r_liq/3./4e5/g_n2o5_l)
  369. ! kt_ice=1./(r_ice*r_ice/3./dg+4.*r_ice/3./4e5/g_n2o5_i)
  370. ! aird = ye(i,j,iairn)
  371. ! xliq = ye(i,j,ilwc)
  372. ! xice = ye(i,j,iiwc)
  373. ! rr(i,j,kn2o5l)=(kt_liq*xliq+kt_ice*xice) ! cloud
  374. ! !
  375. ! ! kn2o5aq and nh3so4 can be done implicitly,
  376. ! ! it has occurred that these rates have
  377. ! ! become negative over antarctica (aug 1993),
  378. ! ! therefore put minimum value of 0. (AJ jul1999)
  379. ! !
  380. ! !cmk rr(i,j,kn2o5aq)=max(0.,het_n2o5(i,j)/
  381. ! ! 1e-9*(y(jl,iso4)+y(jl,imsa))/aird
  382. ! !cmk multiplication moved to EBI
  383. ! rr(i,j,kn2o5aq)=max(0.,het_n2o5(i,j))/1e-9/aird
  384. ! !
  385. ! ! knh3so4 is uptake coefficient on H2SO4.
  386. ! ! 1 uptake of NH3 consumes 1 acid molecule.
  387. ! !
  388. ! rr(i,j,knh3so4)=max(0.,het_nh3(i,j))/1e-9/aird
  389. ! ! rr(i,j,knh3so4)=0.0 !CMK sep2003: why was this here?
  390. ! !
  391. ! end do
  392. ! end do
  393. !
  394. ! deallocate(het_n2o5)
  395. ! deallocate(het_nh3)
  396. ! nullify(zoomed)
  397. ! !debug if(level==1) then
  398. ! !debug io = sfstart('rr.hdf',dfacc_create)
  399. ! !debug call io_write(io,im(region),'im',jm(region),'jm',lm(region),'lm',t,'t')
  400. ! !debug call io_write(io,im(region),'im',jm(region),'jm',lm(region),'lm',q,'q')
  401. ! !debug call io_write(io,im(region),'im',jm(region),'jm',lm(region),'lm',clwc,'lwc')
  402. ! !debug call io_write(io,im(region),'im',jm(region),'jm',lm(region),'lm',ciwc,'iwc')
  403. ! !debug call io_write(io,im(region),'im',jm(region),'jm',nrat,'nrat',rr,'rr')
  404. ! !debug call io_write(io,nrat,'nrat',ntemp,'ntemp',rates_lut,'rates_lut')
  405. ! !debug call io_write(io,ntrace,'ntrace',ntemp,'ntemp',henry,'henry')
  406. ! !debug io = sfend(io)
  407. ! !debug endif
  408. ! end subroutine calrates
  409. !
  410. !
  411. !
  412. ! subroutine calchet1(gamma,xmw,icomp)
  413. ! !----------------------------------------------------------------------
  414. ! !
  415. ! !**** calchet1 - pre-calculate heterogeneous removal rates on sulfate aerosol
  416. ! !
  417. ! ! programmed by frank dentener 01.04.96
  418. ! ! modified by Maarten krol
  419. ! !
  420. ! ! purpose
  421. ! ! -------
  422. ! ! calculate heterogeneous removal constants for specified species
  423. ! ! on sulfate aerosol as function of concentration,
  424. ! ! relative humidity and pressure
  425. ! !
  426. ! ! interface
  427. ! ! ---------
  428. ! ! calchet1(gamma,xmw,icomp)
  429. ! !
  430. ! ! gamma dimensionless accomodation coefficient
  431. ! ! xmw molar weight [g/mol]
  432. ! ! icomp (compound number)
  433. ! !
  434. ! ! method
  435. ! ! ------
  436. ! ! use Whitby sulfate distribution, and Fuchs' rate expression
  437. ! ! to integrate rate coefficient on aerosol distribution
  438. ! !
  439. ! ! external
  440. ! ! --------
  441. ! ! none
  442. ! !
  443. ! ! reference
  444. ! ! ---------
  445. ! ! Dentener (1993) Ph.D. thesis
  446. ! !
  447. ! !------------------------------------------------------------------
  448. ! use binas, xgamma=> gamma
  449. ! use chem_param
  450. !
  451. ! implicit none
  452. !
  453. ! ! input
  454. ! real,intent(in) :: xmw,gamma
  455. ! integer,intent(in):: icomp
  456. !
  457. ! ! local
  458. ! integer :: ip,isat,i
  459. ! real :: press,temp,dxm,dn2o5,vsp,xl,aird,aervol
  460. ! real :: hsat1,hsat2,raer,rx1,zlogs,rx2
  461. ! real :: FN1,FN2,FR1,FR2,FA1,FA2,FV1,FV2,rmean,qi30,xkn,xlab,xfac
  462. ! real,parameter :: RG=8.314E3,VENT=1.0, FLN10=2.302585,W2PI=2.506638
  463. ! real,parameter :: xmnso4=xmso4+xmh+xmnh4,p1=1.,t1=288.,g=1.40,conc=1e-9
  464. ! real,dimension(3),parameter :: apar=(/1.,3.4e-8,0.301/)
  465. ! ! quantities of integration (e.g.number surface, volume and rate coefficient
  466. ! integer,parameter :: nt=4
  467. ! integer,parameter :: nint1=2000 ! number of integration intervals
  468. ! ! rint: integration stepsizes [m],0-1 um,1-100 um
  469. ! real,dimension(nint1) :: rint = &
  470. ! (/ (.001E-6, i=1,1000), (0.1E-6, i=1,1000) /)
  471. ! real,dimension(nt) :: qi
  472. !
  473. ! !
  474. ! ! 1 particle (unity)/cm3, radius and log(sigma) measurements from Whitby
  475. ! ! the radius is assumed to be 'dry radius
  476. ! ! We take aerosol size from Whitby accumulation mode (1978)
  477. ! ! Numbermean radius: 0.034um, sigma=2, 1 (unity) particles cm-3
  478. ! ! Molecular weight NH4HSO4 111 g/mol
  479. ! ! aerosol density of dry NH4HSO4 1.8 E3 kg/m3= 1.8 gcm-3
  480. ! ! temperature is not a determining factor is implicitly accounted for
  481. ! ! as a function of pressure.
  482. ! ! temperature is assumed to follow an adiabatic lapse rate:
  483. ! ! (T2/T1)=(P2/P1)^{(g-1)/g} function of pressure with g=Cp/Cv=ca. 1.40
  484. ! !
  485. !
  486. ! ! start
  487. !
  488. ! print *,'calchet1: initialize heterogeneous rem. rates'
  489. !
  490. ! ! pressure from 1000 to 0 mbar
  491. ! do ip=1,11
  492. ! press=max(0.001,1.1-ip*0.1) !atmosphere (minimum is 1 hPa)
  493. ! temp=max(210.,t1*(press/p1)**((g-1)/g))
  494. ! !this estimate of temp is not very accurate
  495. ! DN2O5=4.6e-6*TEMP**1.75/PRESS*1E-4 ! diffusion coefficient for n2o5 [m2/s]
  496. ! dxm=dn2o5*xmw/xmn2o5 ! diffusion coefficient for other component
  497. ! VSP=SQRT(8.*RG*TEMP/PI/XMW) ! Molecular speed [m/s]
  498. ! XL=3.*DXM/VSP ! free molecular path length [m]
  499. !
  500. ! aird=press/(rg*temp)*1e2 ! (mole/cm3)
  501. ! aervol=conc*aird*xmnso4/aerdens ! (mole/cm3) * (g/mole)/(g/cm3)=>[cm3/cm3]
  502. ! ! aervol is the volume of 1 pbbv dry nh4hso4 at temp and press
  503. ! do isat=1,11
  504. ! hsat1=-10.+10.*isat
  505. ! HSAT1=AMIN1(HSAT1,95.) !max RH of 95 %
  506. ! HSAT2=HSAT1*HSAT1
  507. ! RAER=AMAX1(1.,1.0129231-0.0041328044*hsat1+0.00070336143*hsat2&
  508. ! -1.4388956e-05*hsat1*hsat2+9.1359802e-08*hsat2*hsat2)
  509. ! ! growth of aerosol radius due to deliquescence for NH4HSO4
  510. !
  511. ! ! actual integration
  512. ! RX1=0.0
  513. ! QI(:)=0.
  514. ! ZLOGS=APAR(3)
  515. ! rmean=apar(2)*raer
  516. ! do I=1,NINT1-1
  517. ! RX1=RX1+RINT(I)
  518. ! RX2=RX1+RINT(I+1) !RX2-RX1 is integration size interval
  519. ! XKN= 3.*DXM/RX1/VSP !Knudsen number
  520. ! XLAB=(XKN*4./3.+0.71)/(XKN+1.)
  521. ! FN1=(LOG10(RX1/rmean))**2
  522. ! FN2=(LOG10(RX2/rmean))**2
  523. ! FN1= EXP(-FN1/2./ZLOGS/ZLOGS)/RX1 !number integration
  524. ! FN2= EXP(-FN2/2./ZLOGS/ZLOGS)/RX2 !number integration
  525. ! FR1=1./(1.+XKN*(XLAB+(4.*(1.-GAMMA)/3./GAMMA)))*RX1*FN1
  526. ! !reactivity integration
  527. ! FR2=1./(1.+XKN*(XLAB+(4.*(1.-GAMMA)/3./GAMMA)))*RX2*FN2
  528. ! FA1= RX1*RX1*FN1 !surface integration
  529. ! FA2= RX2*RX2*FN2 !surface integration
  530. ! FV1= RX1*RX1*RX1*FN1 !volume integration
  531. ! FV2= RX2*RX2*RX2*FN2 !volume integration
  532. ! QI(1)=QI(1)+RINT(I)/2.*(FN1+FN2) !EULER INTEGRATION
  533. ! QI(2)=QI(2)+RINT(I)/2.*(FA1+FA2)
  534. ! QI(3)=QI(3)+RINT(I)/2.*(FV1+FV2)
  535. ! QI(4)=QI(4)+RINT(I)/2.*(FR1+FR2)
  536. ! end do !I=1,NINT1-1
  537. ! xfac=APAR(1)*1.e6/FLN10/W2PI/zlogs ! constant integration factor
  538. ! QI(1)=QI(1)*xfac*1.E-6 ! conversion cm3=>m3 number
  539. ! QI(2)=QI(2)*4.*PI*xfac*1.e-2 ! m=>cm surface
  540. ! QI(3)=QI(3)*4./3.*PI*xfac !volume
  541. ! QI(4)=QI(4)*4.*PI*DXM*xfac*vent !reactivity
  542. ! if (isat == 1) qi30=qi(3) ! dry volume
  543. ! hetrem(isat,ip,icomp)=aervol/qi30*qi(4)! removal coefficient
  544. ! end do !isat
  545. ! end do !ip
  546. !
  547. ! end subroutine calchet1
  548. !
  549. !
  550. !
  551. ! subroutine calchet2(region,ye,het,icomp)
  552. ! !----------------------------------------------------------------------
  553. ! !
  554. ! !**** calchet2 - calculate heterogeneous removal rates on sulfate aerosol
  555. ! !
  556. ! ! programmed by frank dentener 01.04.96
  557. ! ! modified for TM5 by maarten krol jan 2002
  558. ! !
  559. ! ! purpose
  560. ! ! -------
  561. ! ! calculate heterogeneous removal constants for specified species
  562. ! ! on sulfate aerosol as function of concentration,
  563. ! ! relative humidity and pressure
  564. ! !
  565. ! ! interface
  566. ! ! ---------
  567. ! ! calchet2(region,ye,het,icomp)
  568. ! !
  569. ! ! region to indicate for which zoom region
  570. ! ! ye : extra fields (for rh,pressure).
  571. ! ! het heterogeneous removal constant [s-1/ppbv]
  572. ! ! icomp (1,2) compound (N2O5, NH3)
  573. ! !
  574. ! ! method
  575. ! ! ------
  576. ! ! use Whitby sulfate distribution, and Fuchs' rate expression
  577. ! ! to integrate rate coefficient on aerosol distribution
  578. ! !
  579. ! ! external
  580. ! ! --------
  581. ! ! none
  582. ! !
  583. ! ! reference
  584. ! ! ---------
  585. ! ! Dentener (1993) Ph.D. thesis
  586. ! !
  587. ! use global_data, only: region_dat
  588. ! use binas, xgamma=>gamma
  589. ! use dims, only: isr,ier, jsr,jer, im, jm
  590. ! use chem_param
  591. !
  592. ! implicit none
  593. !
  594. ! ! input
  595. ! integer,intent(in) :: region,icomp
  596. ! real,dimension(im(region),jm(region)) :: het ! result
  597. ! real,dimension(im(region),jm(region),n_extra) :: ye
  598. ! ! ye: extra fields (rh, pressure)
  599. !
  600. ! ! local
  601. ! integer,dimension(:,:),pointer :: zoomed
  602. ! real :: pres,px,hx,hp1,hp2
  603. ! integer :: np1,np2,nh1,nh2,i,j
  604. !
  605. ! ! relative humidity should be between 0-100 % and
  606. ! ! pressure between 105000 and 0 Pa
  607. ! ! actual interpolation....
  608. ! ! hetrem field in in module.....
  609. !
  610. ! zoomed => region_dat(region)%zoomed
  611. !
  612. ! do j=jsr(region),jer(region)
  613. ! do i=isr(region),ier(region)
  614. ! if(zoomed(i,j)/=region) cycle
  615. ! pres = ye(i,j,i_pres)
  616. ! np1=min(11,1+nint(10.-pres/10000.)) !pressure
  617. ! np1=max(1,np1)
  618. ! np2=min(11,np1+1)
  619. ! nh1=max(1,nint(ye(i,j,irh)/10.+0.5)) !relative humidity
  620. ! nh1=min(11,nh1)
  621. ! nh2=min(11,nh1+1)
  622. ! px=((11-np1)*10000.-pres)/10000.
  623. ! hx=(ye(i,j,irh)-(nh1-1)*10.)/10.
  624. ! hp1=px*hetrem(nh1,np2,icomp)+(1.-px)*hetrem(nh1,np1,icomp)
  625. ! hp2=px*hetrem(nh2,np2,icomp)+(1.-px)*hetrem(nh2,np1,icomp)
  626. ! het(i,j)=hx*hp2+(1.-hx)*hp1
  627. ! end do
  628. ! end do
  629. !
  630. ! nullify(zoomed)
  631. !
  632. ! end subroutine calchet2
  633. !
  634. !
  635. !
  636. ! subroutine calchetnew1(gamma,xmw,icomp)
  637. ! !----------------------------------------------------------------------
  638. ! !
  639. ! !**** calchetnew1 - pre- calculate heterogeneous removal rates
  640. ! ! on sulfate aerosol
  641. ! !
  642. ! ! programmed by frank dentener 01.04.96
  643. ! ! modified MK oct 2003: splitted in two.
  644. ! !
  645. ! ! purpose
  646. ! ! -------
  647. ! ! calculate heterogeneous removal constants for specified species
  648. ! ! on sulfate aerosol as function of concentration,
  649. ! ! relative humidity and pressure
  650. ! !
  651. ! ! interface
  652. ! ! ---------
  653. ! ! calchetnew1(gamma,xmw,icomp)
  654. ! !
  655. ! ! gamma dimensionless accomodation coefficient
  656. ! ! xmw molar weight [g/mol]
  657. ! ! icomp component number: 1: n2o5 2:nh3
  658. ! !
  659. ! ! method
  660. ! ! ------
  661. ! ! use Whitby sulfate distribution, and Fuchs' rate expression
  662. ! ! to integrate rate coefficient on aerosol distribution
  663. ! !
  664. ! ! external
  665. ! ! --------
  666. ! ! none
  667. ! !
  668. ! ! reference
  669. ! ! ---------
  670. ! ! Dentener (1993) Ph.D. thesis
  671. ! !
  672. ! !------------------------------------------------------------------
  673. ! use toolbox, only : escape_tm
  674. ! use reaction_data, only : ncomponent, hetrem, aerdens, rra
  675. ! use reaction_data, only : nr_interval, np_interval
  676. !
  677. ! implicit none
  678. !
  679. ! ! input/output
  680. ! real, intent(in) :: gamma
  681. ! real, intent(in) :: xmw
  682. ! integer, intent(in) :: icomp
  683. !
  684. ! !local
  685. ! integer :: ip,i,iaero
  686. ! ! quantities of integration e.g. number surface, volume and rate coefficient
  687. ! integer,parameter :: nt=4
  688. ! integer,parameter :: nint1=2000 !number of integration intervals
  689. ! real :: rx1,rx2,fn1,fn2,fr1,fr2,fa1,fa2,fv1,fv2
  690. ! real :: zlogs,rmean,qi(nt),qi30
  691. ! real,dimension(nint1) :: rint = &
  692. ! (/ (.001E-6, i=1,1000), (0.1E-6, i=1,1000) /)
  693. ! !
  694. ! ! needed for calculation of reaction constants
  695. ! real,parameter :: xmn2o5 = 108.
  696. ! real,parameter :: rg = 8.314e3
  697. ! real,parameter :: vent = 1.0
  698. ! real,parameter :: pi = 3.14159
  699. ! real,parameter :: fln10 = 2.302585
  700. ! real,parameter :: w2pi = 2.506638
  701. ! real,parameter :: avo = 6.0e23
  702. ! real,parameter :: xmnso4 = 111.
  703. ! real,parameter :: p1 = 1.
  704. ! real,parameter :: t1 = 288.
  705. ! real,parameter :: g = 1.40
  706. ! real,parameter :: conc = 1e-9
  707. ! !
  708. ! real :: temp, press, dn2o5, vsp, xl, xfac, xkn, xlab, dxm
  709. ! real :: raer,aervol,aird
  710. ! real,dimension(3) :: apar=(/1.,3.4e-8,0.301/)
  711. !
  712. ! ! 1 particle (unity)/cm3, radius and log(sigma) measurements from Whitby
  713. ! ! the radius is assumed to be 'dry radius
  714. ! ! We take aerosol size from Whitby accumulation mode (1978)
  715. ! ! Numbermean radius: 0.034um, sigma=2, 1 (unity) particles cm-3
  716. ! ! Molecular weight NH4HSO4 115 g/mol
  717. ! ! aerosol density of dry NH4HSO4 1.8 E3 kg/m3= 1.8 gcm-3
  718. ! ! temperature is not a determining factor is implicitly accounted for
  719. ! ! as a function of pressure.
  720. ! ! temperature is assumed to follow an adiabatic lapse rate:
  721. ! ! (T2/T1)=(P2/P1)^{(g-1)/g} function of pressure with g=Cp/Cv=ca. 1.40
  722. ! !
  723. !
  724. ! if ( icomp > ncomponent ) then
  725. ! call escape_tm('calchetnew1: Check component in calchetnew1')
  726. ! end if
  727. ! print *,'calchetnew1: initialize heterogeneous rem. rates ', icomp
  728. !
  729. ! do ip=1,np_interval !pressure from 1000 to 0 mbar
  730. !
  731. ! press=max(0.001,1.1-ip*0.1) !atmosphere (minimum is 1 hPa)
  732. ! temp=max(210.,t1*(press/p1)**((g-1)/g))
  733. ! !this estimate of temp is not very accurate
  734. ! DN2O5=4.6e-6*TEMP**1.75/PRESS*1E-4 ! diffusion coefficient for n2o5 [m2/s]
  735. ! dxm=dn2o5*xmw/xmn2o5 ! diffusion coefficient for other component
  736. ! VSP=SQRT(8.*RG*TEMP/PI/XMW) ! Molecular speed [m/s]
  737. ! XL=3.*DXM/VSP ! free molecular path length [m]
  738. !
  739. ! aird=press/(rg*temp)*1e2 ! (mole/cm3)
  740. ! aervol=conc*aird*xmnso4/aerdens ! (mole/cm3) * (g/mole)/(g/cm3)=>[cm3/cm3]
  741. ! ! aervol is the volume of 1 pbbv dry nh4hso4 at temp and press
  742. !
  743. ! do iaero=1,nr_interval ! aerosol increased radius loop
  744. !
  745. ! ! RAER: growth of aerosol radius due to deliquescence for NH4HSO4
  746. ! RAER=rra(iaero)
  747. !
  748. ! ! actual integration
  749. ! RX1=0.0
  750. ! QI(:)=0.
  751. ! ZLOGS=APAR(3)
  752. ! rmean=apar(2)*raer
  753. !
  754. ! do I=1,NINT1-1
  755. !
  756. ! RX1=RX1+RINT(I)
  757. ! RX2=RX1+RINT(I+1) !RX2-RX1 is integration size interval
  758. ! XKN= 3.*DXM/RX1/VSP !Knudsen number
  759. ! XLAB=(XKN*4./3.+0.71)/(XKN+1.)
  760. ! FN1=(LOG10(RX1/rmean))**2
  761. ! FN2=(LOG10(RX2/rmean))**2
  762. ! FN1= EXP(-FN1/2./ZLOGS/ZLOGS)/RX1 !number integration
  763. ! FN2= EXP(-FN2/2./ZLOGS/ZLOGS)/RX2 !number integration
  764. ! FR1=1./(1.+XKN*(XLAB+(4.*(1.-GAMMA)/3./GAMMA)))*RX1*FN1
  765. ! !reactivity integration
  766. ! FR2=1./(1.+XKN*(XLAB+(4.*(1.-GAMMA)/3./GAMMA)))*RX2*FN2
  767. ! FA1= RX1*RX1*FN1 !surface integration
  768. ! FA2= RX2*RX2*FN2 !surface integration
  769. ! FV1= RX1*RX1*RX1*FN1 !volume integration
  770. ! FV2= RX2*RX2*RX2*FN2 !volume integration
  771. ! QI(1)=QI(1)+RINT(I)/2.*(FN1+FN2) !EULER INTEGRATION
  772. ! QI(2)=QI(2)+RINT(I)/2.*(FA1+FA2)
  773. ! QI(3)=QI(3)+RINT(I)/2.*(FV1+FV2)
  774. ! QI(4)=QI(4)+RINT(I)/2.*(FR1+FR2)
  775. !
  776. ! end do !I=1,NINT1-1
  777. !
  778. ! xfac=APAR(1)*1.e6/FLN10/W2PI/zlogs ! constant integration factor
  779. ! QI(1)=QI(1)*xfac*1.E-6 ! conversion cm3=>m3 number
  780. ! QI(2)=QI(2)*4.*PI*xfac*1.e-2 ! m=>cm surface
  781. ! QI(3)=QI(3)*4./3.*PI*xfac !volume
  782. ! QI(4)=QI(4)*4.*PI*DXM*xfac*vent !reactivity
  783. ! if (iaero == 1) qi30=qi(3) ! dry volume
  784. ! hetrem(iaero,ip,icomp)=aervol/qi30*qi(4)! removal coefficient
  785. !
  786. ! end do !iaero
  787. ! write(*,'(a,i3,19(1x,1pe9.1))') ' calchetnew1: ',ip,hetrem(:,ip,icomp)
  788. !
  789. ! end do !ip
  790. !
  791. ! end subroutine calchetnew1
  792. !
  793. !
  794. !
  795. ! subroutine calchetnew2(region,ye,het,icomp)
  796. ! !----------------------------------------------------------------------
  797. ! !
  798. ! !**** calchetnew2 - calculate heterogeneous removal rates on sulfate aerosol
  799. ! !
  800. ! ! programmed by frank dentener 01.04.96
  801. ! ! modified for TM5 by maarten krol jan 2002
  802. ! !
  803. ! ! purpose
  804. ! ! -------
  805. ! ! calculate heterogeneous removal constants for specified species
  806. ! ! on sulfate aerosol as function of concentration,
  807. ! ! relative humidity and pressure
  808. ! !
  809. ! ! interface
  810. ! ! ---------
  811. ! ! calchetnew2(region,ye,het,icomp)
  812. ! !
  813. ! ! region to indicate for which zoom region
  814. ! ! ye : extra fields (for rh,pressure).
  815. ! ! het heterogeneous removal constant [s-1/ppbv]
  816. ! ! icomp (1,2) compound (N2O5, NH3)
  817. ! !
  818. ! !
  819. ! ! method
  820. ! ! ------
  821. ! ! use Whitby sulfate distribution, and Fuchs' rate expression
  822. ! ! to integrate rate coefficient on aerosol distribution
  823. ! ! 1 particle (unity)/cm3, radius and log(sigma) measurements from Whitby
  824. ! ! the radius is assumed to be 'dry radius
  825. ! ! We take aerosol size from Whitby accumulation mode (1978)
  826. ! ! Numbermean radius: 0.034um, sigma=2, 1 (unity) particles cm-3
  827. ! ! Molecular weight NH4HSO4 115 g/mol
  828. ! ! aerosol density of dry NH4HSO4 1.8 E3 kg/m3= 1.8 gcm-3
  829. ! ! temperature is not a determining factor is implicitly accounted for
  830. ! ! as a function of pressure.
  831. ! ! temperature is assumed to follow an adiabatic lapse rate:
  832. ! ! (T2/T1)=(P2/P1)^{(g-1)/g} function of pressure with g=Cp/Cv=ca. 1.40
  833. ! !
  834. ! ! external
  835. ! ! --------
  836. ! ! none
  837. ! !
  838. ! ! reference
  839. ! ! ---------
  840. ! ! Dentener (1993) Ph.D. thesis
  841. ! !----------------------------------------------------------------------
  842. !
  843. ! use global_data, only : region_dat
  844. ! use binas, only : xgamma=>gamma
  845. ! use dims, only : isr,ier, jsr,jer, im, jm
  846. ! use reaction_data, only : ncomponent, hetrem, nr_interval
  847. ! use reaction_data, only : np_interval, aerdens, rra
  848. ! use chem_param, only : n_extra, irinc, i_pres
  849. !
  850. ! implicit none
  851. !
  852. ! ! input
  853. ! integer, intent(in) :: region
  854. ! integer, intent(in) :: icomp
  855. ! real,dimension(im(region),jm(region)) :: het !result (time scale)
  856. ! real,dimension(im(region),jm(region),n_extra) :: ye
  857. ! ! ye: extra fields ( pressure, rinc)
  858. !
  859. ! ! local
  860. ! integer,dimension(:,:),pointer :: zoomed
  861. !
  862. ! real :: pres,px,hx,hp1,hp2
  863. ! integer :: np1,np2,nh1,nh2,i,j,jr, nr1, nr2
  864. !
  865. ! ! start
  866. !
  867. ! zoomed => region_dat(region)%zoomed
  868. !
  869. ! do j=jsr(region),jer(region)
  870. ! do i=isr(region),ier(region)
  871. ! if(zoomed(i,j)/=region) cycle
  872. ! pres = ye(i,j,i_pres)
  873. ! np1=min(np_interval,1+nint(10.-pres/10000.))
  874. ! np1=max(1,np1)
  875. ! np2=min(np_interval,np1+1)
  876. ! nr1=1
  877. ! do jr=1,nr_interval
  878. ! if(ye(i,j,irinc).ge.rra(jr)) nr1=jr ! lower bound of rinc array
  879. ! end do
  880. ! nr2=min(nr1+1,nr_interval) ! upper bound of rinc
  881. ! px=((np_interval-np1)*10000.-pres)/10000.
  882. ! hx=1.
  883. ! if (nr1.ne.nr2) hx=(ye(i,j,irinc)-rra(nr1))/(rra(nr2)-rra(nr1))
  884. ! hp1=px*hetrem(nr1,np2,icomp)+(1.-px)*hetrem(nr1,np1,icomp)
  885. ! hp2=px*hetrem(nr2,np2,icomp)+(1.-px)*hetrem(nr2,np1,icomp)
  886. ! het(i,j)=hx*hp2+(1.-hx)*hp1
  887. ! end do
  888. ! end do
  889. ! nullify(zoomed)
  890. !
  891. ! end subroutine calchetnew2
  892. !
  893. !
  894. end module chem_rates