m7_coaset.F90 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. #include "tm5.inc"
  2. SUBROUTINE m7_coaset(kproma, kbdim, klev, paernl, ptp1, &
  3. papp1, pm6rp, prhop, pcom )
  4. !
  5. ! *m7_coaset* calculates the coagulation kernels between the modes
  6. !
  7. ! Authors:
  8. ! ---------
  9. ! J. Wilson and E. Vignati, JRC/EI (original source) 09/2000
  10. ! P. Stier, MPI (f90-version, changes, comments) 2001
  11. !
  12. ! Modifications:
  13. ! --------------
  14. ! Philip Stier, MPI 2001
  15. !
  16. ! Purpose
  17. ! ---------
  18. ! This routine calculates the coaglation kernels between particles
  19. ! with the count median radii of the three modes.
  20. ! Coagulation allowed between the following modes:
  21. ! soluble modes: 1+1=1, 2+2=2, 1+2=2, 1+3=3, 1+4=4, 2+3=3, 2+4=4
  22. ! insoluble modes: 2i+2i=2i
  23. ! mixed modes: 1+2i=2, 1+4i=4, 2+2i=2, 2+4i=4, 3+2i=3, 4+2i=4
  24. !
  25. ! Interface:
  26. ! -----------
  27. ! *m7_coaset* is called from *m7_dnum*
  28. !
  29. ! Externals:
  30. ! -----------
  31. ! none
  32. !
  33. ! Reference:
  34. ! -----------
  35. ! The calculations are based on:
  36. ! Fuchs, N.A. (1964). The Mechanics of Aerosols. Pergamon Press. Oxford.
  37. ! (Chapter VII, Section 49)
  38. !
  39. ! Warning:
  40. ! --------
  41. ! For optimization purposes currently only "physically reasonable" elements of the
  42. ! coagulation kernel pcom are calculated in m7_concoag. These elements are specified
  43. ! in the matrix locoagmask in mo_aero_m7. Check carefully and adapt locoagmask
  44. ! accordingly before changes in the code below.
  45. !
  46. USE mo_aero_m7, ONLY: pi, bk, sqrt2, nmod, locoagmask
  47. !
  48. IMPLICIT NONE
  49. !
  50. !--- Parameter list:
  51. !
  52. ! paernl = aerosol number for each mode [cm-3]
  53. ! ptp1 = atmospheric temperature at time t+1 [K]
  54. ! papp1 = atmospheric pressure at time t+1 [Pa]
  55. ! pm6rp = mean mode actual radius (wet radius for soluble modes
  56. ! and dry radius for insoluble modes) [cm]
  57. ! prhop = mean mode particle density [g cm-3]
  58. ! pcom(:,:,jm1,jm2) = Coagulation coefficient for modes jm1 and jm2 []
  59. !
  60. !--- List of local variables:
  61. !
  62. ! zwlc = mean free pathlength []
  63. ! zairvisc = air viscosity []
  64. ! zrpav = average radius of the two interacting modes
  65. ! zpvx = volume of the xth interacting mode
  66. ! zpmx = mass of the xth interacting mode
  67. !
  68. ! zrknudx = knudsen number of the xth interacting mode
  69. ! zpd2x = particle diffusion of the xth interacting mode
  70. !
  71. !--- Parameters:
  72. !
  73. INTEGER :: kproma, kbdim, klev
  74. REAL :: ptp1(kbdim,klev), papp1(kbdim,klev)
  75. REAL :: pm6rp(kbdim,klev,nmod), prhop(kbdim,klev,nmod), &
  76. paernl(kbdim,klev,nmod)
  77. REAL :: pcom(kbdim,klev,nmod,nmod)
  78. !--- Local variables:
  79. INTEGER :: jm2, jm1, jl, jk
  80. !
  81. REAL :: zpbyone, zwlc, zairvisc, zbtketc, &
  82. zrpvm1, zrpvm2, zrpav, zpv1, &
  83. zpm1, zcv21, zpv2, zpm2, &
  84. zcv22, zcv2av, zrknud1, zrknud2, &
  85. ze1, ze2, zpd21, zpd22, &
  86. zpdav, zxd1, zh21, zxd2, &
  87. zh22, zh2av, zcoc, zhu1, &
  88. zhu2, zhu
  89. !--- 1) Calculation of the coagulation coefficient: ---------------------------
  90. !
  91. DO jm2=1,nmod
  92. DO jm1=jm2,nmod
  93. IF (locoagmask(jm1,jm2)) THEN
  94. DO jk=1,klev
  95. DO jl=1,kproma
  96. IF (paernl(jl,jk,jm1) > 1.E-10 .AND. paernl(jl,jk,jm2) > 1.E-10 .AND. &
  97. pm6rp(jl,jk,jm1) > 1.E-10 .AND. pm6rp(jl,jk,jm2) > 1.E-10 .AND. &
  98. prhop(jl,jk,jm1) > 1.E-10 .AND. prhop(jl,jk,jm2) > 1.E-10 ) THEN
  99. !--- 1.1) Calculate ambient properties:
  100. !--- Mean free pathlength ? (from Knudsen Number below):
  101. ! Parametrisation?
  102. zpbyone=1000.0 / (papp1(jl,jk)/100.0)
  103. zwlc=6.6e-6 * ptp1(jl,jk) / 293.15 * zpbyone
  104. !--- Viscosity:
  105. zairvisc=1.827e-4 * (ptp1(jl,jk) / 291.15)**0.74
  106. !---
  107. zbtketc=bk * ptp1(jl,jk) / 6.0 / pi / zairvisc
  108. !--- Count median radii of the respective modes:
  109. zrpvm1=pm6rp(jl,jk,jm1)
  110. zrpvm2=pm6rp(jl,jk,jm2)
  111. !--- Average radius of the modes:
  112. zrpav=(zrpvm1 + zrpvm2) / 2.0
  113. !--- Volume and mass of mode jm1:
  114. zpv1=4.0 / 3.0 * pi * zrpvm1**3.0
  115. zpm1=zpv1 * prhop(jl,jk,jm1)
  116. !--- Squared mean particle velocity of mode jm1:
  117. zcv21=8.0 * bk * ptp1(jl,jk) / (pi * zpm1)
  118. !--- Volume and mass of particles in mode jm2:
  119. zpv2=4.0 / 3.0 * pi * zrpvm2**3.0
  120. zpm2=zpv2 * prhop(jl,jk,jm2)
  121. !--- Squared mean particle velocity of mode jm2:
  122. zcv22=8.0 * bk * ptp1(jl,jk) / (pi * zpm2)
  123. !--- Fuchs: G_r (below Eq. 49.27):
  124. zcv2av=SQRT(zcv21 + zcv22)
  125. !--- Knudsen numbers of the modes:
  126. !@@@ Check: is zwlc mean free path then zrknud=zwlc/zrpvm!
  127. zrknud1=zwlc/zrpvm1/2.0
  128. zrknud2=zwlc/zrpvm2/2.0
  129. !--- Diffusivities of the respective modes:
  130. ! !@@@ Parameterisation?
  131. ze1=EXP(-0.43/zrknud1)
  132. ze2=EXP(-0.43/zrknud2)
  133. zpd21=zbtketc * (1.0 + zrknud1*2.492 + zrknud1*0.84*ze1) / zrpvm1
  134. zpd22=zbtketc * (1.0 + zrknud2*2.492 + zrknud2*0.84*ze2) / zrpvm2
  135. !--- Average diffusivity of the modes:
  136. zpdav=(zpd21 + zpd22) / 2.0
  137. !--- Average mean free path of particles in jm1:
  138. zxd1=8.0 * zpd21 / (pi*SQRT(zcv21))
  139. !--- Mean distance from surface after mean free path (Eq. 49.13):
  140. zh21=(((2.0*zrpvm1 + zxd1)**3.0 - &
  141. (4.0*zrpvm1*zrpvm1 + zxd1*zxd1)**1.5) / &
  142. (6.0*zrpvm1*zxd1) - 2*zrpvm1 ) * sqrt2
  143. !--- Average mean free path of particles in jm2:
  144. zxd2=8.0 * zpd22 / (pi*SQRT(zcv22))
  145. !--- Mean distance from surface after mean free path (Eq. 49.13):
  146. zh22=(((2.0*zrpvm2 + zxd2)**3.0 - &
  147. (4.0*zrpvm2*zrpvm2 + zxd2*zxd2)**1.5) / &
  148. (6.0*zrpvm2*zxd2) - 2*zrpvm2 ) * sqrt2
  149. !--- Fuchs: delta_r !@@@ (why division by sqrt2?)
  150. zh2av=SQRT(zh21*zh21 + zh22*zh22) / sqrt2
  151. !--- 1.2) Calculation of the coagulation coefficient pcom (Eq. 49.26):
  152. ! Factor 16 instead factor 8 as in Fuchs as his formulation
  153. ! applies for the inter-modal coagulation. This is taken into
  154. ! account in the assignment of the inter-modal coagulation
  155. ! coefficient.
  156. zcoc=16.0 * pi * zpdav * zrpav
  157. !--- Calculation of beta=1/zhu (Eq. 49.27):
  158. zhu1=4.0 * zpdav / (zcv2av * zrpav)
  159. zhu2=zrpav / (zrpav + zh2av /2.0)
  160. zhu=zhu1 + zhu2
  161. !--- Coagulation coefficient following (Eq.49.26):
  162. pcom(jl,jk,jm1,jm2)=zcoc / zhu
  163. ELSE
  164. pcom(jl,jk,jm1,jm2)=0.
  165. END IF
  166. !--- 2) Mirror the coagulation matrix (symmetric): -----------------
  167. pcom(jl,jk,jm2,jm1)=pcom(jl,jk,jm1,jm2)
  168. END DO
  169. END DO
  170. ELSE
  171. pcom(1:kproma,:,jm1,jm2)=0.
  172. END IF ! locoagmask
  173. END DO
  174. END DO
  175. END SUBROUTINE m7_coaset