m7_dgas.F90 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. #include "tm5.inc"
  2. #ifdef with_budgets
  3. SUBROUTINE m7_dgas(kproma, kbdim, klev, pso4g, paerml, paernl, &
  4. ptp1, papp1, pm6rp, pso4_5, pso4_6, pso4_7, &
  5. ptime,pprocess )
  6. #else
  7. SUBROUTINE m7_dgas(kproma, kbdim, klev, pso4g, paerml, paernl, &
  8. ptp1, papp1, pm6rp, pso4_5, pso4_6, pso4_7, &
  9. ptime )
  10. #endif
  11. !
  12. !**** *m7_dgas* calculates the transfer of mass due to
  13. ! sulfate condensation on soluble and
  14. ! insoluble modes.
  15. !
  16. ! Authors:
  17. ! -----------
  18. ! J. Wilson, E. Vignati, JRC/EI (original source) 05/2000
  19. ! P. Stier, MPI (f90-version, changes, comments) 2001
  20. !
  21. ! Purpose:
  22. ! -----------
  23. ! This routine calculates the changes in aerosol mass and
  24. ! gas phase sulfate due to sulfate condensation.
  25. !
  26. !** Interface:
  27. ! -----------
  28. ! *m7_dgas* is called from *m7*
  29. !
  30. ! Method:
  31. ! -----------------
  32. ! The transfer of sulfate to the particles is based on
  33. ! Fuchs (1959). Soluble and insoluble particles are distinguished
  34. ! by a different accomodation coefficient "caccso4" defined
  35. ! in mo_aero_m7.
  36. ! (Currently 1.0 for soluble and 0.3 for insoluble modes).
  37. !
  38. ! Externals
  39. ! -----------
  40. ! none
  41. !
  42. ! References:
  43. ! -----------
  44. ! Fuchs, N.A. (1959). Evaporation and droplet growth in gaseous media;
  45. ! Pergamon, New York, pp72.
  46. USE mo_time_control, ONLY: delta_time
  47. USE mo_control, ONLY: nrow
  48. USE mo_aero_m7, ONLY: pi, wh2so4, rerg, avo, &
  49. fmax, caccso4, &
  50. nmod, naermod, &
  51. iso4ns, iso4ks, iso4as, iso4cs
  52. ! USE mo_aero_mem, ONLY: d_cond_so4
  53. #ifdef with_budgets
  54. Use M7_Data, only: nm7procs
  55. #endif
  56. IMPLICIT NONE
  57. !
  58. !--- Parameter list:
  59. !
  60. ! pso4g = mass of gas phase sulfate [molec. cm-3]
  61. ! pm6rp = mean mode actual radius (wet radius for soluble modes
  62. ! and dry radius for insoluble modes) [cm]
  63. ! pso4_x = mass of sulphate condensed on insoluble mode x [molec. cm-3]
  64. !
  65. !--- Local Variables:
  66. !
  67. ! zde = molecular diffusion []
  68. ! zvelb = velocity []
  69. ! zcondo = condensation coefficient []
  70. ! zc2(nmod) = flux of sulfate condensing on the respective mode
  71. ! per sulfate gas phase concentration []
  72. ! zcondo = total flux of condensing sulfate
  73. ! per sulfate gas phase concentration []
  74. ! zfcond = total mass of condensing sulfate for one timestep []
  75. INTEGER :: kproma, kbdim, klev
  76. REAL :: ptime, time_step_len
  77. REAL :: ptp1(kbdim,klev), papp1(kbdim,klev), &
  78. pso4g(kbdim,klev), pso4_5(kbdim,klev), &
  79. pso4_6(kbdim,klev), pso4_7(kbdim,klev)
  80. REAL :: paernl(kbdim,klev,nmod), paerml(kbdim,klev,naermod), &
  81. pm6rp(kbdim,klev,nmod)
  82. #ifdef with_budgets
  83. Real :: pprocess(kbdim,klev,nm7procs)
  84. #endif
  85. !
  86. ! Local variables:
  87. INTEGER :: jl, jk, jmod, jrow
  88. REAL :: zfcond, zftot, zpbyone, zde2, &
  89. zvelb, zxibc, zm6rp, zf1, &
  90. zqtmst
  91. REAL :: zcondo(kbdim,klev)
  92. REAL :: zc2(kbdim,klev,nmod)
  93. !--- 0) Initialisations: -------------------------------------------------
  94. !
  95. jrow=nrow(2)
  96. zcondo(:,:)=0.0
  97. zc2(:,:,:) = 0.0
  98. time_step_len = ptime
  99. zqtmst=1/time_step_len
  100. !--- 1) Calculate condensation rate for cm diameter sulphate aerosols: ---
  101. !
  102. DO jmod=1,nmod
  103. DO jk=1,klev
  104. DO jl=1,kproma
  105. IF (pm6rp(jl,jk,jmod).GT.0.) THEN
  106. !--- Diffusion coefficient (Reference???):
  107. zpbyone=1000.0 / (papp1(jl,jk)/100.0)
  108. zde2=0.073 * zpbyone * (ptp1(jl,jk) / 298.15)**1.5
  109. !--- Mean molecule velocity (Moore, 1962 (S+P equ. 8.2)):
  110. zvelb=SQRT(8.0 * rerg * ptp1(jl,jk) / pi / wh2so4)
  111. !--- ???Fuchs???
  112. zxibc=8.0 * zde2 / pi / zvelb
  113. !
  114. ! Use count median radius:
  115. zm6rp=pm6rp(jl,jk,jmod)
  116. !--- Distance from particle up to which the kinetic regime applies:
  117. zf1=( (zm6rp + zxibc)**3.0 - (zm6rp**2.0 + zxibc**2.0)**1.5 ) / &
  118. (3.0 * zm6rp * zxibc) - zm6rp
  119. !--- Diffusive flux to single particle surface:
  120. ! (Elisabetta's thesis: fraction in equ. 2.26)
  121. zc2(jl,jk,jmod)=(4.0 * pi * zde2 * zm6rp ) / &
  122. ((4.0 * zde2) / (zvelb * zm6rp * caccso4(jmod)) + &
  123. (zm6rp/(zm6rp+zf1)) )
  124. !--- Total diffusive flux to all particles in the respective mode:
  125. ! (per concentration of gas phase sulfate)
  126. zc2(jl,jk,jmod)=zc2(jl,jk,jmod) * paernl(jl,jk,jmod)
  127. !--- Total diffusive flux to all particles in all modes:
  128. ! (per concentration of gas phase sulfate)
  129. zcondo(jl,jk)=zcondo(jl,jk)+ zc2(jl,jk,jmod)
  130. END IF
  131. END DO
  132. END DO
  133. END DO
  134. !
  135. !--- 2) Calculation of the new sulfate aerosol masses and of the ---------
  136. ! mass of sulfate condensing on the respective modes:
  137. !
  138. DO jk=1,klev
  139. DO jl=1,kproma
  140. IF(zcondo(jl,jk).GT.0..AND.pso4g(jl,jk).GT.1.e-10) THEN
  141. !--- Total diffusive flux to all particles in all modes:
  142. zfcond=zcondo(jl,jk)*pso4g(jl,jk)
  143. !--- Total mass of sulfate condensing during 1 timestep:
  144. zftot=zfcond*time_step_len
  145. !--- Limit condensing sulfate to
  146. ! fmax[%] x (available gas-phase sulfate) :
  147. zfcond=MIN(zftot,(pso4g(jl,jk)*fmax))
  148. !--- Remaining gas phase sulfate:
  149. pso4g(jl,jk)=pso4g(jl,jk)-zfcond
  150. !--- Add mass to sulfate compounds:
  151. ! zc2(:,:,jmod)/zcondo = fraction of total sulfate flux
  152. ! that condenses on mode jmod
  153. ! => ( " )*zfcond = mass of sulfate condensing on
  154. ! the respective mode
  155. paerml(jl,jk,iso4ns)=paerml(jl,jk,iso4ns)+ &
  156. zc2(jl,jk,iso4ns)/zcondo(jl,jk)*zfcond
  157. paerml(jl,jk,iso4ks)=paerml(jl,jk,iso4ks)+ &
  158. zc2(jl,jk,iso4ks)/zcondo(jl,jk)*zfcond
  159. paerml(jl,jk,iso4as)=paerml(jl,jk,iso4as)+ &
  160. zc2(jl,jk,iso4as)/zcondo(jl,jk)*zfcond
  161. paerml(jl,jk,iso4cs)=paerml(jl,jk,iso4cs)+ &
  162. zc2(jl,jk,iso4cs)/zcondo(jl,jk)*zfcond
  163. !--- Mass of sulphate condensing on the insoluble modes:
  164. ! (Transfer from insoluble to soluble modes
  165. ! calculated in m7_concoag.)
  166. pso4_5(jl,jk)=zc2(jl,jk,5)/zcondo(jl,jk)*zfcond
  167. pso4_6(jl,jk)=zc2(jl,jk,6)/zcondo(jl,jk)*zfcond
  168. pso4_7(jl,jk)=zc2(jl,jk,7)/zcondo(jl,jk)*zfcond
  169. #ifdef with_budgets
  170. ! Write down condensations
  171. pprocess(jl,jk,41:47) = zc2(jl,jk,1:7)/zcondo(jl,jk)*zfcond
  172. #endif
  173. ELSE
  174. pso4_5(jl,jk)=0.
  175. pso4_6(jl,jk)=0.
  176. pso4_7(jl,jk)=0.
  177. END IF
  178. END DO
  179. END DO
  180. ! write(*,*) 'dgas', 'so4gnew', pso4g(2100,1), 'condso4', zcondo(2100,1)*pso4g(2100,1)*time_step_len, 'limit=', pso4g(2100,1)*fmax
  181. ! write(*,*) 'cond5= ', pso4_5(2100,1), 'rad5= ', pm6rp(2100,1,5)
  182. END SUBROUTINE m7_dgas