m7_averageproperties.F90 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. #include "tm5.inc"
  2. SUBROUTINE m7_averageproperties(kproma, kbdim, klev, paernl, paerml, pttn, pm6rp, prhop)
  3. !
  4. ! Author:
  5. ! --------
  6. ! E. Vignati, JRC/EI (original source) 10/2000
  7. ! P. Stier, MPI (f90-version, changes, comments) 2001
  8. !
  9. ! Purpose:
  10. ! ---------
  11. ! Calculation of the mean particle mass (pttn).
  12. ! [molecules cm-3] for the sulphate mass
  13. ! [ug m-3] for the other compounds
  14. !
  15. ! Calculation of the (dry) radius and the density
  16. ! of the particles of the insoluble modes.
  17. !
  18. ! Interface:
  19. ! ----------
  20. ! m7_averageproperties is called from m7
  21. !
  22. ! Externals:
  23. ! ----------
  24. ! none
  25. !
  26. USE mo_aero_m7, ONLY: dbc, doc, ddust, pi, &
  27. critn, ram2cmr, nmod, naermod, &
  28. ibcks, ibcas, ibccs, ibcki, &
  29. iocks, iocas, ioccs, iocki, &
  30. issas, isscs, &
  31. iduas, iducs, iduai, iduci, &
  32. isoans, isoaks, isoaas, isoacs, isoaki, &
  33. iaiti, iacci, icoai, &
  34. nsol, dh2so4, wh2so4, doc, avo
  35. IMPLICIT NONE
  36. !
  37. !--- Parameter list:
  38. !
  39. ! paerml(kbdim,klev,naermod) = total aerosol mass for each compound
  40. ! [molec. cm-3 for sulfate and ug m-3 for others]
  41. ! paernl(kbdim,klev,nmod) = aerosol number for each mode [cm-3]
  42. ! pttn(kbdim,klev,naermod) = average mass for single compound in each mode
  43. ! [in molec. for sulphate and in ug for others]
  44. ! pm6rp(kbdim,klev,nmod) = mean mode actual radius (wet radius for soluble
  45. ! modes and dry radius for insoluble modes) [cm]
  46. ! prhop(kbdim,klev,nmod) = mean mode particle density [g cm-3]
  47. !
  48. !--- Local variables:
  49. !
  50. ! zinsvol = average volume for single particle in the
  51. ! insolulbe mode [cm3]
  52. ! zinsmas = average mass for single particle in the
  53. ! insolulbe mode [g]
  54. !--- Parameters:
  55. INTEGER :: kproma, kbdim, klev
  56. REAL :: paerml(kbdim,klev,naermod), paernl(kbdim,klev,nmod), &
  57. pttn(kbdim,klev,naermod), pm6rp(kbdim,klev,nmod), &
  58. prhop(kbdim,klev,nmod)
  59. !--- Local variables:
  60. INTEGER :: jmod, jk, jl
  61. REAL :: zinsvol, zinsmas, zeps
  62. !--- 0) Initialization:
  63. ! zeps=EPSILON(1.0)
  64. zeps=1.e-20
  65. !--- 1) Calculate mean particle masses at start of timestep: ---------------------------
  66. !
  67. ! To be able to compute a intra-modal coagulation coefficient for the nucleation
  68. ! mode for the case of no pre-existing particles but coagulation of freshly formed
  69. ! particles during the timestep, pttn is set to the mass of the critical cluster
  70. ! for this case. This allows to calculate an ambient radius of the
  71. ! freshly formed particles and subsequently the calculation of the coagulation
  72. ! coefficient. This mass is "virtual" as it is not added to the mode but used
  73. ! only for the described computation of the coagulation coefficient.
  74. ! !@@@ Check whether this is always fulfilled.
  75. DO jmod=1,nsol
  76. DO jk=1,klev
  77. DO jl=1,kproma
  78. IF (paernl(jl,jk,jmod) .GT. 1e-20 .AND. paerml(jl,jk,jmod) .GT. 1e-25) THEN
  79. pttn(jl,jk,jmod)=paerml(jl,jk,jmod)/paernl(jl,jk,jmod)
  80. ELSE IF (jmod == 1 .AND. paernl(jl,jk,jmod) <= 1e-10 .AND. paerml(jl,jk,jmod) <= 1e-15) THEN
  81. pttn(jl,jk,jmod)=critn
  82. END IF
  83. END DO
  84. END DO
  85. END DO
  86. !
  87. !--- 3) Calculation of the mean mass pttn [ug] for each compound in the modes: ---------
  88. ! [Factor 1.E-6 to convert(ug m-3)/cm-3 into ug]
  89. !
  90. DO jmod=1,nmod
  91. DO jk=1,klev
  92. DO jl=1,kproma
  93. IF (jmod.EQ.1) THEN
  94. !RM Include organics in nucleation mode
  95. IF (paernl(jl,jk,jmod) .GT. 1e-20 .AND. paerml(jl,jk,isoans) .GT. 1e-25) THEN
  96. pttn(jl,jk,isoans)=paerml(jl,jk,isoans)/paernl(jl,jk,jmod)*1.E-6
  97. ELSE
  98. pttn(jl,jk,isoans)=0.
  99. END IF
  100. END IF
  101. !
  102. IF (jmod.EQ.2) THEN
  103. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,ibcks) .GT. 1e-15) THEN
  104. pttn(jl,jk,ibcks)=paerml(jl,jk,ibcks)/paernl(jl,jk,jmod)*1.E-6
  105. ELSE
  106. pttn(jl,jk,ibcks)=0.
  107. END IF
  108. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,iocks) .GT. 1e-15) THEN
  109. pttn(jl,jk,iocks)=paerml(jl,jk,iocks)/paernl(jl,jk,jmod)*1.E-6
  110. ELSE
  111. pttn(jl,jk,iocks)=0.
  112. END IF
  113. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,isoaks) .GT. 1e-15) THEN
  114. pttn(jl,jk,isoaks)=paerml(jl,jk,isoaks)/paernl(jl,jk,jmod)*1.E-6
  115. ELSE
  116. pttn(jl,jk,isoaks)=0.
  117. END IF
  118. END IF
  119. !
  120. IF (jmod.EQ.3) THEN
  121. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,ibcas) .GT. 1e-15) THEN
  122. pttn(jl,jk,ibcas)=paerml(jl,jk,ibcas)/paernl(jl,jk,jmod)*1.E-6
  123. ELSE
  124. pttn(jl,jk,ibcas)=0.
  125. END IF
  126. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,iocas) .GT. 1e-15) THEN
  127. pttn(jl,jk,iocas)=paerml(jl,jk,iocas)/paernl(jl,jk,jmod)*1.E-6
  128. ELSE
  129. pttn(jl,jk,iocas)=0.
  130. END IF
  131. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,isoaas) .GT. 1e-15) THEN
  132. pttn(jl,jk,isoaas)=paerml(jl,jk,isoaas)/paernl(jl,jk,jmod)*1.E-6
  133. ELSE
  134. pttn(jl,jk,isoaas)=0.
  135. END IF
  136. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,issas) .GT. 1e-15) THEN
  137. pttn(jl,jk,issas)=paerml(jl,jk,issas)/paernl(jl,jk,jmod)*1.E-6
  138. ELSE
  139. pttn(jl,jk,issas)=0.
  140. END IF
  141. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,iduas) .GT. 1e-15) THEN
  142. pttn(jl,jk,iduas)=paerml(jl,jk,iduas)/paernl(jl,jk,jmod)*1.E-6
  143. ELSE
  144. pttn(jl,jk,iduas)=0.
  145. END IF
  146. END IF
  147. !
  148. IF (jmod.EQ.4) THEN
  149. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,ibccs) .GT. 1e-15) THEN
  150. pttn(jl,jk,ibccs)=paerml(jl,jk,ibccs)/paernl(jl,jk,jmod)*1.E-6
  151. ELSE
  152. pttn(jl,jk,ibccs)=0.
  153. END IF
  154. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,ioccs) .GT. 1e-15) THEN
  155. pttn(jl,jk,ioccs)=paerml(jl,jk,ioccs)/paernl(jl,jk,jmod)*1.E-6
  156. ELSE
  157. pttn(jl,jk,ioccs)=0.
  158. END IF
  159. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,isoacs) .GT. 1e-15) THEN
  160. pttn(jl,jk,isoacs)=paerml(jl,jk,isoacs)/paernl(jl,jk,jmod)*1.E-6
  161. ELSE
  162. pttn(jl,jk,isoacs)=0.
  163. END IF
  164. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,isscs) .GT. 1e-15) THEN
  165. pttn(jl,jk,isscs)=paerml(jl,jk,isscs)/paernl(jl,jk,jmod)*1.E-6
  166. ELSE
  167. pttn(jl,jk,isscs)=0.
  168. END IF
  169. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,iducs) .GT. 1e-15) THEN
  170. pttn(jl,jk,iducs)=paerml(jl,jk,iducs)/paernl(jl,jk,jmod)*1.E-6
  171. ELSE
  172. pttn(jl,jk,iducs)=0.
  173. END IF
  174. END IF
  175. !
  176. IF (jmod.EQ.5) THEN
  177. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,ibcki) .GT. 1e-15) THEN
  178. pttn(jl,jk,ibcki)=paerml(jl,jk,ibcki)/paernl(jl,jk,jmod)*1.E-6
  179. ELSE
  180. pttn(jl,jk,ibcki)=0.
  181. END IF
  182. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,iocki) .GT. 1e-15) THEN
  183. pttn(jl,jk,iocki)=paerml(jl,jk,iocki)/paernl(jl,jk,jmod)*1.E-6
  184. ELSE
  185. pttn(jl,jk,iocki)=0.
  186. END IF
  187. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,isoaki) .GT. 1e-15) THEN
  188. pttn(jl,jk,isoaki)=paerml(jl,jk,isoaki)/paernl(jl,jk,jmod)*1.E-6
  189. ELSE
  190. pttn(jl,jk,isoaki)=0.
  191. END IF
  192. END IF
  193. !
  194. IF (jmod.EQ.6) THEN
  195. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,iduai) .GT. 1e-15) THEN
  196. pttn(jl,jk,iduai)=paerml(jl,jk,iduai)/paernl(jl,jk,jmod)*1.E-6
  197. ELSE
  198. pttn(jl,jk,iduai)=0.
  199. END IF
  200. END IF
  201. !
  202. IF (jmod.EQ.7) THEN
  203. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,iduci) .GT. 1e-15) THEN
  204. pttn(jl,jk,iduci)=paerml(jl,jk,iduci)/paernl(jl,jk,jmod)*1.E-6
  205. ELSE
  206. pttn(jl,jk,iduci)=0.
  207. END IF
  208. END IF
  209. END DO
  210. END DO
  211. END DO
  212. !
  213. !--- 4) Calculate count median radii for lognormal distribution from -------------------
  214. ! mass for insoluble modes:
  215. DO jk=1,klev
  216. DO jl=1,kproma
  217. !--- 4.1) Aitken mode insoluble:
  218. zinsmas=1.e-6*(pttn(jl,jk,ibcki)+pttn(jl,jk,iocki)+pttn(jl,jk,isoaki))
  219. zinsvol=1.e-6*(pttn(jl,jk,ibcki)/dbc+(pttn(jl,jk,iocki)+pttn(jl,jk,isoaki))/doc)
  220. IF (zinsvol > zeps) THEN
  221. prhop(jl,jk,iaiti)=zinsmas/zinsvol
  222. pm6rp(jl,jk,iaiti)=(0.75/pi*1.e-6* &
  223. (pttn(jl,jk,ibcki)/dbc+(pttn(jl,jk,iocki)+pttn(jl,jk,isoaki))/doc))**(1./3.)*ram2cmr(iaiti)
  224. ELSE
  225. prhop(jl,jk,iaiti)=0.
  226. pm6rp(jl,jk,iaiti)=0.
  227. END IF
  228. !--- 4.2) Accumulation mode insoluble:
  229. IF (pttn(jl,jk,iduai) > zeps) THEN
  230. prhop(jl,jk,iacci)=ddust
  231. pm6rp(jl,jk,iacci)=(0.75/pi*1.e-6*pttn(jl,jk,iduai)/ddust)**(1./3.)*ram2cmr(iacci)
  232. ELSE
  233. prhop(jl,jk,iacci)=0.
  234. pm6rp(jl,jk,iacci)=0.
  235. END IF
  236. !--- 4.3) Coarse mode insoluble:
  237. IF (pttn(jl,jk,iduci) > zeps) THEN
  238. prhop(jl,jk,icoai)=ddust
  239. pm6rp(jl,jk,icoai)=(0.75/pi*1.e-6*pttn(jl,jk,iduci)/ddust)**(1./3.)*ram2cmr(icoai)
  240. ELSE
  241. prhop(jl,jk,icoai)=0.
  242. pm6rp(jl,jk,icoai)=0.
  243. END IF
  244. END DO
  245. END DO
  246. !
  247. ! write(2255,*) 'averprop', 'zinsvol= ', zinsvol, 'zeps= ', zeps, 'rad=', pm6rp(1,1,1), 'massbc= ', pttn(1,1,8), 'ram2cmr= ', ram2cmr(1)
  248. END SUBROUTINE m7_averageproperties