m7_dgas_org.F90 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. #include "tm5.inc"
  2. #ifdef with_budgets
  3. SUBROUTINE m7_dgas_org(kproma, kbdim, klev, pelvoc, psvoc, paerml, paernl, &
  4. ptp1, papp1, pm6rp, &
  5. ptime,pprocess )
  6. #else
  7. SUBROUTINE m7_dgas_org(kproma, kbdim, klev, pelvoc, psvoc, paerml, paernl, &
  8. ptp1, papp1, pm6rp, &
  9. ptime )
  10. #endif
  11. !
  12. !**** *m7_dgas_org* calculates the transfer of mass due to
  13. ! organic condensation
  14. !
  15. ! Authors:
  16. ! -----------
  17. ! J. Wilson, E. Vignati, JRC/EI (original source) 05/2000
  18. ! R. Makkonen, UHEL 2015
  19. !
  20. USE mo_time_control, ONLY: delta_time
  21. USE mo_control, ONLY: nrow
  22. USE mo_aero_m7, ONLY: pi, wh2so4, rerg, avo, &
  23. fmax, caccso4, &
  24. nmod, naermod, &
  25. iocks, iocas, ioccs, iocki, &
  26. isoans, isoaks, isoaas, isoacs, isoaki
  27. USE mo_aero_m7, ONLY: condensation_sink
  28. ! USE mo_aero_mem, ONLY: d_cond_so4
  29. #ifdef with_budgets
  30. Use M7_Data, only: nm7procs
  31. #endif
  32. IMPLICIT NONE
  33. !
  34. !--- Parameter list:
  35. !
  36. ! pso4g = mass of gas phase sulfate [molec. cm-3]
  37. ! pm6rp = mean mode actual radius (wet radius for soluble modes
  38. ! and dry radius for insoluble modes) [cm]
  39. ! pso4_x = mass of sulphate condensed on insoluble mode x [molec. cm-3]
  40. !
  41. !--- Local Variables:
  42. !
  43. ! zde = molecular diffusion []
  44. ! zvelb = velocity []
  45. ! zcondo = condensation coefficient []
  46. ! zc2(nmod) = flux of sulfate condensing on the respective mode
  47. ! per sulfate gas phase concentration []
  48. ! zcondo = total flux of condensing sulfate
  49. ! per sulfate gas phase concentration []
  50. ! zfcond = total mass of condensing sulfate for one timestep []
  51. INTEGER :: kproma, kbdim, klev
  52. REAL :: ptime, time_step_len
  53. REAL :: ptp1(kbdim,klev), papp1(kbdim,klev), &
  54. pelvoc(kbdim,klev), psvoc(kbdim,klev)
  55. REAL :: paernl(kbdim,klev,nmod), paerml(kbdim,klev,naermod), &
  56. pm6rp(kbdim,klev,nmod)
  57. #ifdef with_budgets
  58. Real :: pprocess(kbdim,klev,nm7procs)
  59. #endif
  60. !
  61. ! Local variables:
  62. INTEGER :: jl, jk, jmod, jrow
  63. REAL :: zfcond, zftot, zpbyone, zde2, &
  64. zvelb, zxibc, zm6rp, zf1, &
  65. zqtmst
  66. REAL :: zcondo(kbdim,klev)
  67. REAL :: zc2(kbdim,klev,nmod)
  68. REAL :: lambda, cs(7), cs_sum, modeweight(7), modeweight_sum
  69. ! REAL(dp):: soa_yield, org, lambda, cs(7), cs_weighted(7), cssum, pblheight, oc_mass_sum
  70. REAL, parameter :: oc2pom_soa = 2.4 !RM test 1e1
  71. !--- 0) Initialisations: -------------------------------------------------
  72. !
  73. jrow=nrow(2)
  74. zcondo(:,:)=0.0
  75. zc2(:,:,:) = 0.0
  76. time_step_len = ptime
  77. zqtmst=1/time_step_len
  78. !--- 1) Calculate condensation rate for cm diameter sulphate aerosols: ---
  79. !
  80. DO jmod=1,nmod
  81. DO jk=1,klev
  82. DO jl=1,kproma
  83. IF (pm6rp(jl,jk,jmod).GT.0.) THEN
  84. !--- Diffusion coefficient (Reference???):
  85. zpbyone=1000.0 / (papp1(jl,jk)/100.0)
  86. zde2=0.073 * zpbyone * (ptp1(jl,jk) / 298.15)**1.5
  87. !--- Mean molecule velocity (Moore, 1962 (S+P equ. 8.2)):
  88. zvelb=SQRT(8.0 * rerg * ptp1(jl,jk) / pi / wh2so4)
  89. !--- ???Fuchs???
  90. zxibc=8.0 * zde2 / pi / zvelb
  91. !
  92. ! Use count median radius:
  93. zm6rp=pm6rp(jl,jk,jmod)
  94. !--- Distance from particle up to which the kinetic regime applies:
  95. zf1=( (zm6rp + zxibc)**3.0 - (zm6rp**2.0 + zxibc**2.0)**1.5 ) / &
  96. (3.0 * zm6rp * zxibc) - zm6rp
  97. !--- Diffusive flux to single particle surface:
  98. ! (Elisabetta's thesis: fraction in equ. 2.26)
  99. zc2(jl,jk,jmod)=(4.0 * pi * zde2 * zm6rp ) / &
  100. ((4.0 * zde2) / (zvelb * zm6rp * caccso4(jmod)) + &
  101. (zm6rp/(zm6rp+zf1)) )
  102. !--- Total diffusive flux to all particles in the respective mode:
  103. ! (per concentration of gas phase sulfate)
  104. zc2(jl,jk,jmod)=zc2(jl,jk,jmod) * paernl(jl,jk,jmod)
  105. !--- Total diffusive flux to all particles in all modes:
  106. ! (per concentration of gas phase sulfate)
  107. zcondo(jl,jk)=zcondo(jl,jk)+ zc2(jl,jk,jmod)
  108. END IF
  109. END DO
  110. END DO
  111. END DO
  112. !
  113. !--- 2) Calculation of the new organic aerosol masses and of the ---------
  114. ! mass of organic condensing on the respective modes:
  115. !
  116. DO jk=1,klev
  117. DO jl=1,kproma
  118. lambda=6.6E-8
  119. !
  120. !--- Calculate condensation sink and OA-mass of each mode
  121. !
  122. CALL condensation_sink(7,paernl(jl,jk,:), 0.01*pm6rp(jl,jk,:), lambda, cs)
  123. modeweight(1)=0.
  124. modeweight(2)=MIN(MAX(paerml(jl,jk,iocks)+paerml(jl,jk,isoaks),0.),1.E5)
  125. modeweight(3)=MIN(MAX(paerml(jl,jk,iocas)+paerml(jl,jk,isoaas),0.),1.E5)
  126. modeweight(4)=MIN(MAX(paerml(jl,jk,ioccs)+paerml(jl,jk,isoacs),0.),1.E5)
  127. modeweight(5)=MIN(MAX(paerml(jl,jk,iocki)+paerml(jl,jk,isoaki),0.),1.E5)
  128. modeweight(6)=0.
  129. modeweight(7)=0.
  130. cs_sum=SUM(cs(1:5)) ! Sum only over OC-modes
  131. modeweight_sum=SUM(modeweight)
  132. !
  133. !--- Condense S/LVOC according to mode OA mass
  134. !
  135. IF(modeweight_sum .GT. 1.E-13 .AND. psvoc(jl,jk).GT.1.e-16 .AND. psvoc(jl,jk).LT.1.e10) THEN
  136. paerml(jl,jk,isoaks) = paerml(jl,jk,isoaks) + psvoc(jl,jk)*modeweight(2)/modeweight_sum
  137. paerml(jl,jk,isoaas) = paerml(jl,jk,isoaas) + psvoc(jl,jk)*modeweight(3)/modeweight_sum
  138. paerml(jl,jk,isoacs) = paerml(jl,jk,isoacs) + psvoc(jl,jk)*modeweight(4)/modeweight_sum
  139. paerml(jl,jk,isoaki) = paerml(jl,jk,isoaki) + psvoc(jl,jk)*modeweight(5)/modeweight_sum
  140. pprocess(jl,jk,80) = psvoc(jl,jk)*modeweight(2)/modeweight_sum
  141. pprocess(jl,jk,81) = psvoc(jl,jk)*modeweight(3)/modeweight_sum
  142. pprocess(jl,jk,82) = psvoc(jl,jk)*modeweight(4)/modeweight_sum
  143. pprocess(jl,jk,83) = psvoc(jl,jk)*modeweight(5)/modeweight_sum
  144. !--- If only small amount of existing OA, condensing to accumulation mode
  145. ELSE IF(psvoc(jl,jk).GT.1.e-16 .AND. psvoc(jl,jk).LT.1.e10) THEN
  146. paerml(jl,jk,isoaas) = paerml(jl,jk,isoaas) + psvoc(jl,jk)
  147. pprocess(jl,jk,81) = psvoc(jl,jk) ! Condensation 3 SOA
  148. END IF
  149. !
  150. !--- Condense ELVOC according to mode condensation sink
  151. !
  152. IF(cs_sum.GT.1.E-15 .AND. cs_sum.LT.1.E5 .AND. pelvoc(jl,jk).GT.1.e-16 .AND. pelvoc(jl,jk).LT.1.e10) THEN
  153. paerml(jl,jk,isoans)=paerml(jl,jk,isoans)+ &
  154. pelvoc(jl,jk)*cs(1)/cs_sum
  155. paerml(jl,jk,isoaks)=paerml(jl,jk,isoaks)+ &
  156. pelvoc(jl,jk)*cs(2)/cs_sum
  157. paerml(jl,jk,isoaas)=paerml(jl,jk,isoaas)+ &
  158. pelvoc(jl,jk)*cs(3)/cs_sum
  159. paerml(jl,jk,isoacs)=paerml(jl,jk,isoacs)+ &
  160. pelvoc(jl,jk)*cs(4)/cs_sum
  161. paerml(jl,jk,isoaki)=paerml(jl,jk,isoaki)+ &
  162. pelvoc(jl,jk)*cs(5)/cs_sum
  163. pprocess(jl,jk,79) = pelvoc(jl,jk)*cs(1)/cs_sum ! Condensation 1 SOA
  164. pprocess(jl,jk,80) = pelvoc(jl,jk)*cs(2)/cs_sum ! Condensation 2 SOA
  165. pprocess(jl,jk,81) = pelvoc(jl,jk)*cs(3)/cs_sum ! Condensation 3 SOA
  166. pprocess(jl,jk,82) = pelvoc(jl,jk)*cs(4)/cs_sum ! Condensation 4 SOA
  167. pprocess(jl,jk,83) = pelvoc(jl,jk)*cs(5)/cs_sum ! Condensation 5 SOA
  168. ! write(*,*) 'NUC AIT ACC COA AITI',zc2(jl,jk,iocks)/zcondo(jl,jk),zc2(jl,jk,iocas)/zcondo(jl,jk),zc2(jl,jk,ioccs)/zcondo(jl,jk),zc2(jl,jk,iocki)/zcondo(jl,jk)
  169. ! write(*,*) 'NUC AIT ACC COA AITI',cs(1)/cs_sum,cs(2)/cs_sum,cs(3)/cs_sum,cs(4)/cs_sum,cs(5)/cs_sum
  170. !--- If only small CS, condensing to accumulation mode
  171. ELSE IF(pelvoc(jl,jk).GT.1.e-16 .AND. pelvoc(jl,jk).LT.1.e10) THEN
  172. paerml(jl,jk,isoaas) = paerml(jl,jk,isoaas) + pelvoc(jl,jk)
  173. pprocess(jl,jk,81) = pelvoc(jl,jk) ! Condensation 3 SOA
  174. END IF
  175. END DO
  176. END DO
  177. !write(*,*) 'elvoc:',pelvoc(2100,1)
  178. !write(*,*) 'paerml iocks:',paerml(2100,1,iocks)
  179. ! write(*,*) 'dgas', 'so4gnew', pso4g(2100,1), 'condso4', zcondo(2100,1)*pso4g(2100,1)*time_step_len, 'limit=', pso4g(2100,1)*fmax
  180. ! write(*,*) 'cond5= ', pso4_5(2100,1), 'rad5= ', pm6rp(2100,1,5)
  181. END SUBROUTINE m7_dgas_org