m7_averageproperties.F90 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  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. iaiti, iacci, icoai, &
  33. nsol
  34. IMPLICIT NONE
  35. !
  36. !--- Parameter list:
  37. !
  38. ! paerml(kbdim,klev,naermod) = total aerosol mass for each compound
  39. ! [molec. cm-3 for sulfate and ug m-3 for others]
  40. ! paernl(kbdim,klev,nmod) = aerosol number for each mode [cm-3]
  41. ! pttn(kbdim,klev,naermod) = average mass for single compound in each mode
  42. ! [in molec. for sulphate and in ug for others]
  43. ! pm6rp(kbdim,klev,nmod) = mean mode actual radius (wet radius for soluble
  44. ! modes and dry radius for insoluble modes) [cm]
  45. ! prhop(kbdim,klev,nmod) = mean mode particle density [g cm-3]
  46. !
  47. !--- Local variables:
  48. !
  49. ! zinsvol = average volume for single particle in the
  50. ! insolulbe mode [cm3]
  51. ! zinsmas = average mass for single particle in the
  52. ! insolulbe mode [g]
  53. !--- Parameters:
  54. INTEGER :: kproma, kbdim, klev
  55. REAL :: paerml(kbdim,klev,naermod), paernl(kbdim,klev,nmod), &
  56. pttn(kbdim,klev,naermod), pm6rp(kbdim,klev,nmod), &
  57. prhop(kbdim,klev,nmod)
  58. !--- Local variables:
  59. INTEGER :: jmod, jk, jl
  60. REAL :: zinsvol, zinsmas, zeps
  61. !--- 0) Initialization:
  62. ! zeps=EPSILON(1.0)
  63. zeps=1.e-20
  64. !--- 1) Calculate mean particle masses at start of timestep: ---------------------------
  65. !
  66. ! To be able to compute a intra-modal coagulation coefficient for the nucleation
  67. ! mode for the case of no pre-existing particles but coagulation of freshly formed
  68. ! particles during the timestep, pttn is set to the mass of the critical cluster
  69. ! for this case. This allows to calculate an ambient radius of the
  70. ! freshly formed particles and subsequently the calculation of the coagulation
  71. ! coefficient. This mass is "virtual" as it is not added to the mode but used
  72. ! only for the described computation of the coagulation coefficient.
  73. ! !@@@ Check whether this is always fulfilled.
  74. DO jmod=1,nsol
  75. DO jk=1,klev
  76. DO jl=1,kproma
  77. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,jmod) .GT. 1e-15) THEN
  78. pttn(jl,jk,jmod)=paerml(jl,jk,jmod)/paernl(jl,jk,jmod)
  79. ELSE IF (jmod == 1 .AND. paernl(jl,jk,jmod) <= 1e-10 .AND. paerml(jl,jk,jmod) <= 1e-15) THEN
  80. pttn(jl,jk,jmod)=critn
  81. END IF
  82. END DO
  83. END DO
  84. END DO
  85. !
  86. !--- 3) Calculation of the mean mass pttn [ug] for each compound in the modes: ---------
  87. ! [Factor 1.E-6 to convert(ug m-3)/cm-3 into ug]
  88. !
  89. DO jmod=2,nmod
  90. DO jk=1,klev
  91. DO jl=1,kproma
  92. IF (jmod.EQ.2) THEN
  93. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,ibcks) .GT. 1e-15) THEN
  94. pttn(jl,jk,ibcks)=paerml(jl,jk,ibcks)/paernl(jl,jk,jmod)*1.E-6
  95. ELSE
  96. pttn(jl,jk,ibcks)=0.
  97. END IF
  98. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,iocks) .GT. 1e-15) THEN
  99. pttn(jl,jk,iocks)=paerml(jl,jk,iocks)/paernl(jl,jk,jmod)*1.E-6
  100. ELSE
  101. pttn(jl,jk,iocks)=0.
  102. END IF
  103. END IF
  104. !
  105. IF (jmod.EQ.3) THEN
  106. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,ibcas) .GT. 1e-15) THEN
  107. pttn(jl,jk,ibcas)=paerml(jl,jk,ibcas)/paernl(jl,jk,jmod)*1.E-6
  108. ELSE
  109. pttn(jl,jk,ibcas)=0.
  110. END IF
  111. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,iocas) .GT. 1e-15) THEN
  112. pttn(jl,jk,iocas)=paerml(jl,jk,iocas)/paernl(jl,jk,jmod)*1.E-6
  113. ELSE
  114. pttn(jl,jk,iocas)=0.
  115. END IF
  116. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,issas) .GT. 1e-15) THEN
  117. pttn(jl,jk,issas)=paerml(jl,jk,issas)/paernl(jl,jk,jmod)*1.E-6
  118. ELSE
  119. pttn(jl,jk,issas)=0.
  120. END IF
  121. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,iduas) .GT. 1e-15) THEN
  122. pttn(jl,jk,iduas)=paerml(jl,jk,iduas)/paernl(jl,jk,jmod)*1.E-6
  123. ELSE
  124. pttn(jl,jk,iduas)=0.
  125. END IF
  126. END IF
  127. !
  128. IF (jmod.EQ.4) THEN
  129. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,ibccs) .GT. 1e-15) THEN
  130. pttn(jl,jk,ibccs)=paerml(jl,jk,ibccs)/paernl(jl,jk,jmod)*1.E-6
  131. ELSE
  132. pttn(jl,jk,ibccs)=0.
  133. END IF
  134. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,ioccs) .GT. 1e-15) THEN
  135. pttn(jl,jk,ioccs)=paerml(jl,jk,ioccs)/paernl(jl,jk,jmod)*1.E-6
  136. ELSE
  137. pttn(jl,jk,ioccs)=0.
  138. END IF
  139. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,isscs) .GT. 1e-15) THEN
  140. pttn(jl,jk,isscs)=paerml(jl,jk,isscs)/paernl(jl,jk,jmod)*1.E-6
  141. ELSE
  142. pttn(jl,jk,isscs)=0.
  143. END IF
  144. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,iducs) .GT. 1e-15) THEN
  145. pttn(jl,jk,iducs)=paerml(jl,jk,iducs)/paernl(jl,jk,jmod)*1.E-6
  146. ELSE
  147. pttn(jl,jk,iducs)=0.
  148. END IF
  149. END IF
  150. !
  151. IF (jmod.EQ.5) THEN
  152. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,ibcki) .GT. 1e-15) THEN
  153. pttn(jl,jk,ibcki)=paerml(jl,jk,ibcki)/paernl(jl,jk,jmod)*1.E-6
  154. ELSE
  155. pttn(jl,jk,ibcki)=0.
  156. END IF
  157. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,iocki) .GT. 1e-15) THEN
  158. pttn(jl,jk,iocki)=paerml(jl,jk,iocki)/paernl(jl,jk,jmod)*1.E-6
  159. ELSE
  160. pttn(jl,jk,iocki)=0.
  161. END IF
  162. END IF
  163. !
  164. IF (jmod.EQ.6) THEN
  165. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,iduai) .GT. 1e-15) THEN
  166. pttn(jl,jk,iduai)=paerml(jl,jk,iduai)/paernl(jl,jk,jmod)*1.E-6
  167. ELSE
  168. pttn(jl,jk,iduai)=0.
  169. END IF
  170. END IF
  171. !
  172. IF (jmod.EQ.7) THEN
  173. IF (paernl(jl,jk,jmod) .GT. 1e-10 .AND. paerml(jl,jk,iduci) .GT. 1e-15) THEN
  174. pttn(jl,jk,iduci)=paerml(jl,jk,iduci)/paernl(jl,jk,jmod)*1.E-6
  175. ELSE
  176. pttn(jl,jk,iduci)=0.
  177. END IF
  178. END IF
  179. END DO
  180. END DO
  181. END DO
  182. !
  183. !--- 4) Calculate count median radii for lognormal distribution from -------------------
  184. ! mass for insoluble modes:
  185. DO jk=1,klev
  186. DO jl=1,kproma
  187. !--- 4.1) Aitken mode insoluble:
  188. zinsmas=1.e-6*(pttn(jl,jk,ibcki)+pttn(jl,jk,iocki))
  189. zinsvol=1.e-6*(pttn(jl,jk,ibcki)/dbc+pttn(jl,jk,iocki)/doc)
  190. IF (zinsvol > zeps) THEN
  191. prhop(jl,jk,iaiti)=zinsmas/zinsvol
  192. pm6rp(jl,jk,iaiti)=(0.75/pi*1.e-6* &
  193. (pttn(jl,jk,ibcki)/dbc+pttn(jl,jk,iocki)/doc))**(1./3.)*ram2cmr(iaiti)
  194. ELSE
  195. prhop(jl,jk,iaiti)=0.
  196. pm6rp(jl,jk,iaiti)=0.
  197. END IF
  198. !--- 4.2) Accumulation mode insoluble:
  199. IF (pttn(jl,jk,iduai) > zeps) THEN
  200. prhop(jl,jk,iacci)=ddust
  201. pm6rp(jl,jk,iacci)=(0.75/pi*1.e-6*pttn(jl,jk,iduai)/ddust)**(1./3.)*ram2cmr(iacci)
  202. ELSE
  203. prhop(jl,jk,iacci)=0.
  204. pm6rp(jl,jk,iacci)=0.
  205. END IF
  206. !--- 4.3) Coarse mode insoluble:
  207. IF (pttn(jl,jk,iduci) > zeps) THEN
  208. prhop(jl,jk,icoai)=ddust
  209. pm6rp(jl,jk,icoai)=(0.75/pi*1.e-6*pttn(jl,jk,iduci)/ddust)**(1./3.)*ram2cmr(icoai)
  210. ELSE
  211. prhop(jl,jk,icoai)=0.
  212. pm6rp(jl,jk,icoai)=0.
  213. END IF
  214. END DO
  215. END DO
  216. ! write(*,*) 'averprop', 'zinsvol= ', zinsvol, 'zeps= ', zeps, 'rad=', pm6rp(2100,1,5), 'massbc= ', pttn(2100,1,8), 'ram2cmr= ', ram2cmr(5)
  217. END SUBROUTINE m7_averageproperties