mo_aero_m7.F90 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517
  1. #include "tm5.inc"
  2. MODULE mo_aero_m7
  3. ! *mo_aero_m7* Contains parameters, switches and initialization
  4. ! routines for the m7 aerosol scheme.
  5. !
  6. ! Authors:
  7. ! --------
  8. ! E. Vignati (JRC/IES) 2005
  9. ! P. Stier (MPI) 2001/2002
  10. ! E. Vignati and J. Wilson (JRC / EI) 2000
  11. IMPLICIT NONE
  12. SAVE
  13. !--- 1) Define and pre-set switches for the processes of M7: -----------------------
  14. !--- Physical:
  15. LOGICAL :: lsnucl = .TRUE., & ! nucleation
  16. lscoag = .TRUE., & ! coagulation
  17. lscond = .TRUE. ! condensation of H2SO4
  18. INTEGER :: nnucl = 1 ! Choice of the nucleation scheme:
  19. !
  20. ! nnucl = 1 Vehkamaeki (2002)
  21. ! = 2 Kulmala (1998)
  22. !--- Technical:
  23. LOGICAL :: lmass_diag = .FALSE. ! mass balance check in m7_interface
  24. !--- 2) Numbers of compounds and modes of m7: --------------------------------------
  25. INTEGER, PARAMETER :: naermod=18, & !number of all compounds
  26. nmod=7, & !number of modes
  27. nss=2, & !number of sea salt compounds
  28. nsol=4, & !number of soluble compounds
  29. ngas=3, & !number of gaseous compounds
  30. nsulf=4 !number of sulfate compounds
  31. !--- 3) List of indexes corresponding to the compound masses and mode numbers:------
  32. !--- 3.1) Mass index (in array aerml and ttn):
  33. !
  34. ! Attention:
  35. ! The mass of sulfate compounds is always given in [molec. cm-3]
  36. ! whilst the mass of other compounds is given in [ug cm-3].
  37. !
  38. ! Compounds:
  39. !
  40. ! so4 = sulphate
  41. ! bc = black carbon
  42. ! oc = organic carbon,
  43. ! ss = sea salt
  44. ! du = dust
  45. !
  46. ! Modes:
  47. !
  48. ! n = nucleation mode
  49. ! k = aitken mode
  50. ! a = accumulation mode
  51. ! c = coarse mode
  52. !
  53. ! Type:
  54. !
  55. ! s = soluble mode
  56. ! i = insoluble mode
  57. ! COMPOUND:
  58. INTEGER, PARAMETER :: &
  59. iso4ns=1, iso4ks=2, iso4as=3, iso4cs=4, & !- Sulfate
  60. ibcks =5, ibcas =6, ibccs =7, ibcki =8, & !- Black Carbon
  61. iocks =9, iocas=10, ioccs=11, iocki=12, & !- Organic Carbon
  62. issas=13, isscs=14, & !- Sea Salt
  63. iduas=15, iducs=16, iduai=17, iduci=18 !- Dust
  64. ! MODE: | | | | |
  65. ! nucl. | aitk. | acc. | coar. | aitk. | acc. | coar. |
  66. ! soluble | soluble | soluble | soluble | insol. | insol. | insol. |
  67. !--- 3.2) Number index (in array aernl):
  68. !
  69. INTEGER, PARAMETER :: &
  70. inucs=1, iaits=2, iaccs=3, icoas=4, iaiti=5, iacci=6, icoai=7
  71. ! MODE: | | | | |
  72. ! nucl. | aitk. | acc. | coar. | aitk. | acc. | coar. |
  73. ! soluble | soluble | soluble | soluble | insol. | insol. | insol. |
  74. !--- 4) Definition of the modes of M7: ------------------------------------------------------
  75. !--- 4.1) Threshold radii between the different modes [cm]:
  76. ! Used for the repartititioning in m7_dconc.
  77. ! crdiv(jmod) is the lower bound and crdiv(jmod+1) is
  78. ! the upper bound of the respective geometric mode
  79. ! Default value for nucleation mode is modified by the
  80. ! choice of the nuclation scheme.
  81. REAL :: crdiv(4)=(/ 0.0005E-4, 0.005E-4, 0.05E-4, 0.5E-4 /)
  82. ! | | |
  83. ! | | |
  84. ! nucleation -- aitken - accum -- coarse mode
  85. !--- 4.2) Standard deviation for the modes:
  86. REAL, PARAMETER :: sigma(nmod)=(/ 1.59, 1.59, 1.59, 2.00, 1.59, 1.59, 2.00 /)
  87. !--- Natural logarithm of the standard deviation of each mode:
  88. ! Calulated in m7_initialize.
  89. REAL :: sigmaln(nmod)
  90. !--- 5) Conversion factors for lognormal particle size distributions: -------------
  91. ! Calulated in m7_initialize.
  92. REAL :: cmr2ras(nmod) ! Conversion factor: count median radius to radius of average surface
  93. REAL :: cmr2mmr(nmod) ! Conversion factor: count median radius to mass mean radius
  94. REAL :: cmedr2mmedr(nmod) ! Conversion factor: count median radius to mass median radius
  95. REAL :: cmr2ram(nmod) ! Conversion factor: count median radius to radius of average mass
  96. REAL :: ram2cmr(nmod) ! Conversion factor: radius of average mass to count median radius
  97. !--- 6) Assumed thresholds for occurence of specific quantities: -------------
  98. !@@@ To be done!
  99. ! REAL, PARAMETER :: cmin_aerml = 1.E-15 , ! Aerosol mass
  100. ! cmin_aernl = 1.E-10 , ! Aerosol number
  101. !
  102. !--- 7) Chemical constants: ----------------------------------------------------
  103. !
  104. !--- Accomodation coefficient of H2SO4 on aerosols:
  105. ! (reduced for insoluble modes)
  106. REAL, PARAMETER :: caccso4(nmod) = (/ 1.0, 1.0, 1.0, 1.0, 0.3, 0.3, 0.3 /)
  107. !--- Critical relative humidity:
  108. REAL, PARAMETER :: crh = 0.45 ! Assumed relative humidity for the
  109. ! Na2SO4 / NaCl system below which
  110. ! crystalization occurs.
  111. ! (estimated from Tang, I.N.; JGR 102, D2 1883-1893)
  112. !--- 8) Physical constants: ----------------------------------------------------
  113. !
  114. !--- 8.1) General physical constants:
  115. REAL, PARAMETER :: bk = 1.38e-16, & ! Bolzman constant []
  116. avo = 6.02217E+23,& ! Avogadro number [mol-1]
  117. rerg = 8.314E+7, & ! Ideal gas constant [erg.K-1.mole-1]
  118. r_kcal = 1.986E-3 ! Ideal gas constant [kcal K-1.mole-1]
  119. !--- 8.2) Type specific physical constants:
  120. !
  121. REAL, PARAMETER :: dh2so4 = 1.841, & ! Density H2SO4 [g cm-3]
  122. ddust = 2.650, & ! Density du [g cm-3]
  123. !>>> TvN
  124. ! The density of BC is in the range 1.7 to 1.9 g/cm3.
  125. ! (Bond and Bergstrom, Aerosol Sci. Technol., 2006).
  126. ! We therefore adopt a value of 1.8 g/cm3.
  127. ! Details can be found in Bond et al. (JGR, 2013),
  128. ! and references therein:
  129. ! Park et al. (J. Nanoparticle Research, 2004) measured
  130. ! 1.77 +- 0.07 g/cm3 for the non-volatile components of diesel soot,
  131. ! and give a range 1.7-1.8 g/cm3 in their conclusions.
  132. ! Kondo et al. (Aerosol Sci. Techn., 2011) measured
  133. ! 1.718 +- 0.004 g/cm3 for fullerene soot.
  134. ! Schmid et al. (Environ. Sci. Technol., 2009)
  135. ! derive a value 1.8 +- 0.2 g/cm3
  136. ! for elemental carbon from biomass burning.
  137. ! For comparison, in GLOMAP a value of 1.5 g/cm3 is used.
  138. ! Note that these density estimates measure the mass per volume
  139. ! occupied by the spherules, as should be the case:
  140. ! "If the radiative forcing of BC particles is to be
  141. ! calculated from their mass concentrations,
  142. ! as it is usually the case, density should represent
  143. ! the material density of the spherules, and not that
  144. ! of their ramiform (branched) or aciniform (packed) aggregates."
  145. ! (A. Gelencser, Carbonaceous Aerosol, Springer, 2004, p. 228).
  146. ! This is explained in more detail by Bond and Bergstrom
  147. ! (Aerosol Sci. Technol., 2005).
  148. !
  149. !dbc = 2., & ! Density bc [g cm-3]
  150. dbc = 1.8, & ! Density bc [g cm-3]
  151. ! The density of OA is highly variable,
  152. ! but in any case substantially lower than 2 g/cm3.
  153. ! We adopt an average value of 1.3 g/cm3,
  154. ! based on a number of studies:
  155. ! Turpin and Lim (Aerosol Sci. Technol., 2001)
  156. ! suggest that 1.2 g/cm3 is a reasonable estimate.
  157. ! Lee et al. (ACP, 2010) measured 1.26 +- 0.24 g/cm3
  158. ! at during FAME-2009 at Finokalia after evaporation
  159. ! Cross et al. (Aerosol Sci. Technol., 2007) assume an
  160. ! average bulk density of 1.27 g/cm3
  161. ! Nakao et al. (Atmos. Environ., 2013) measure average densities
  162. ! for SOA between 1.22 and 1.42 g/cm3, depending of species.
  163. ! This is in line with predictions from the OA density model
  164. ! by Kuwata et al. (Environ. Sci. Technol., 2012),
  165. ! who find a range between 1.23 and 1.46 g/cm3 for SOA.
  166. ! This model can be used to estimate OA density
  167. ! as function of O:C and H:C elemental ratios,
  168. ! with an accuracy of 12% or more.
  169. ! As a further simplication, it is often assumed that
  170. ! H:C = 2 - O:C (e.g. Murphy et al., ACP, 2011).
  171. ! The model, however, is restricted to particle components
  172. ! having negligible quantities of additional elements,
  173. ! most notably nitrogen.
  174. ! Schmid et al. (Environ. Sci. Technol., 2009)
  175. ! derive a value of 1.39 +- 0.13 for OA from biomass burning.
  176. !
  177. !doc = 2., & ! Density oc [g cm-3]
  178. doc = 1.3, & ! Density POM [g cm-3]
  179. !<<< TvN
  180. dnacl = 2.165, & ! Density NaCl [g cm-3]
  181. dna2so4 = 2.68, & ! Density Na2SO4 [g cm-3]
  182. dnahso4 = 2.435, & ! Density NaHSO4 [g cm-3]
  183. dh2o = 1.0, & ! Density H2O [g cm-3]
  184. wh2so4 = 98.0734, & ! Molecular weight H2SO4 [g mol-1]
  185. wh2o = 18.0, & ! Molecular weight H2O [g mol-1]
  186. wso4 = 96.0576, & ! Molecular weight SO4 [g mol-1]
  187. wso2 = 64.0, & ! Molecular weight SO2 [g mol-1]
  188. wna = 22.99, & ! Atomic weight Na [g mol-1]
  189. wcl = 35.453, & ! Atomic weight Cl [g mol-1]
  190. wnacl = 58.443, & ! Molecular weight NaCl [g mol-1]
  191. wna2so4 = 142.0376, & ! Molecular weight Na2SO4 [g mol-1]
  192. wnahso4 = 120.0555 ! Molecular weight NaHSO4 [g mol-1]
  193. !--- 9) Assumed parameters: ------------------------------------------------------
  194. REAL, PARAMETER :: critn=100., & ! Assumed mass of an nucleated sulfate
  195. ! particle for the Kulmala scheme [molecules]
  196. fmax=0.95, & ! Factor that limits the condensation
  197. ! of sulfate to fmax times the available
  198. ! sulfate in the gas phase [1].
  199. ! (m7_dgas)
  200. cLayerThickness = 1.0 ! Assumed required layer thickness of
  201. ! sulfate to transfer an insoluble
  202. ! particle to a soluble mode. It is
  203. ! given in units of layers of
  204. ! monomolecular sulfate. Determines the
  205. ! transfer rate from insoluble to
  206. ! soluble modes.
  207. !--- 10) Computational constants: ------------------------------------------------
  208. REAL, PARAMETER :: sqrt2=1.4142136, &
  209. pi=3.141592654
  210. !--- 11) Data used for the calculation of the aerosol properties -----------------
  211. ! under ambient conditions:
  212. ! (Included the conversion from Pa to hPa in the first parameter.)
  213. REAL, PARAMETER :: wvb(17)= &
  214. (/ 95.80188, -28.5257, -1.082153, 0.1466501, &
  215. -20627.51, 0.0461242, -0.003935, -3.36115, &
  216. -0.00024137, 0.067938345, 0.00000649899, 8616124.373, &
  217. 1.168155578, -0.021317481, 0.000270358, -1353332314.0, &
  218. -0.002403805 /)
  219. REAL, PARAMETER :: gmb(9)= &
  220. (/ 1.036391467, 0.00728531, -0.011013887, -0.068887407, &
  221. 0.001047842, 0.001049607, 0.000740534, -1.081202685, &
  222. -0.0000029113 /)
  223. !--- 4) Logical mask for coagulation kernel: -------------------------------------
  224. ! (The coagulation kernel mask is symmetric and not all
  225. ! values are used for physical considerations. As its
  226. ! calculation is very expensive, a mask is used to
  227. ! calculate only the necessarey elements.)
  228. LOGICAL :: locoagmask(nmod,nmod)
  229. DATA locoagmask(1:nmod,1) / .TRUE., .TRUE., .TRUE., .TRUE., .TRUE., .TRUE., .TRUE. /
  230. DATA locoagmask(1:nmod,2) / .FALSE., .TRUE., .TRUE., .TRUE., .TRUE., .TRUE., .TRUE. /
  231. DATA locoagmask(1:nmod,3) / .FALSE., .FALSE., .TRUE., .FALSE., .TRUE., .FALSE., .FALSE. /
  232. DATA locoagmask(1:nmod,4) / .FALSE., .FALSE., .FALSE., .FALSE., .FALSE., .FALSE., .FALSE. /
  233. DATA locoagmask(1:nmod,5) / .FALSE., .FALSE., .FALSE., .FALSE., .TRUE., .FALSE., .FALSE. /
  234. DATA locoagmask(1:nmod,6) / .FALSE., .FALSE., .FALSE., .FALSE., .FALSE., .FALSE., .FALSE. /
  235. DATA locoagmask(1:nmod,7) / .FALSE., .FALSE., .FALSE., .FALSE., .FALSE., .FALSE., .FALSE. /
  236. !--- 12) Service routines for initialization and auxiliary computations ----------
  237. CONTAINS
  238. SUBROUTINE m7_initialize
  239. ! Purpose:
  240. ! ---------
  241. ! Initializes constants and parameters
  242. ! used in the m7 aerosol model.
  243. !
  244. ! Author:
  245. ! ---------
  246. ! Philip Stier, MPI may 2001
  247. !
  248. ! Interface:
  249. ! ---------
  250. ! *m7_initialize* is called from *call_init_submodels* in *call_submodels*
  251. !
  252. IMPLICIT NONE
  253. INTEGER :: jmod
  254. DO jmod=1, nmod
  255. !--- 1) Calculate conversion factors for lognormal distributions:----
  256. ! Radius of average mass (ram) to count median radius (cmr) and
  257. ! vice versa. Count median radius to radius of average
  258. ! mass (ram).
  259. ! These factors depend on the standard deviation (sigma)
  260. ! of the lognormal distribution.
  261. ! (Based on the Hatch-Choate Conversins Equations;
  262. ! see Hinds, Chapter 4.5, 4.6 for more details.
  263. ! In particular equation 4.53.)
  264. !--- Count Median Radius to Mass Median Radius:
  265. cmedr2mmedr(jmod) = EXP(3.0*(LOG(sigma(jmod)))**2)
  266. !--- Count Median Radius to Mass Mean Radius:
  267. cmr2mmr(jmod) = EXP(3.5*(LOG(sigma(jmod)))**2)
  268. !--- Count Median Radius to Radius of Average Mass:
  269. cmr2ram(jmod) = EXP(1.5*(LOG(sigma(jmod)))**2)
  270. !--- Radius of Average Mass to Count Median Radius:
  271. ram2cmr(jmod) = 1. / cmr2ram(jmod)
  272. !--- Count Median Radius to Radius of Average Surface:
  273. cmr2ras(jmod) = EXP(1.0*(LOG(sigma(jmod)))**2)
  274. !--- 2) Calculate the natural logarithm of the standard deviation:
  275. sigmaln(jmod) = LOG(sigma(jmod))
  276. END DO
  277. !--- 3) Set the lower mode boundary for the nucleation mode:
  278. ! (Depends on the choice of the nucleation scheme.)
  279. SELECT CASE (nnucl)
  280. CASE(1)
  281. crdiv(1)=0.0005E-4
  282. CASE(2)
  283. crdiv(1)=( critn * wh2so4/avo/dh2so4*0.75/pi )**(1./3.)
  284. END SELECT
  285. !--------------------------------------------------------------------
  286. END SUBROUTINE m7_initialize
  287. SUBROUTINE m7_coat(pm6rp_lon_lev, pcrtcst)
  288. ! Purpose:
  289. ! ---------
  290. ! *m7_coat* calculates the number of sulfate
  291. ! molecules required to coat a particle
  292. ! with cLayerThickness of sulfate
  293. !
  294. ! Author:
  295. ! ---------
  296. ! Philip Stier, MPI 2001
  297. !
  298. ! Interface:
  299. ! ---------
  300. ! *m7_coat* is called from *m7_concoag*
  301. !
  302. IMPLICIT NONE
  303. INTEGER :: jmod
  304. REAL :: pm6rp_lon_lev(nmod) ! Ambient radii for current
  305. ! longitude and level [cm]
  306. REAL :: pcrtcst(nmod) ! Critical constant, i.e. number of
  307. ! sulfate to cover an average particle
  308. ! of the mode with a layer of the
  309. ! thickness determined by cLayerThickness.
  310. REAL :: zras(nmod) ! Radius of average surface
  311. ! for a single particle [cm]
  312. REAL :: zas(nmod) ! Average surface
  313. ! for single particle [cm+2]
  314. REAL, PARAMETER :: csurf_molec = 2.39E-15 ! Average cross-section
  315. ! of a single H2SO4 molecule [cm+2]
  316. !--- 1) Calculate the radii of average surface for modes 5-7:
  317. zras(5) = pm6rp_lon_lev(5) * cmr2ras(5)
  318. zras(6) = pm6rp_lon_lev(6) * cmr2ras(6)
  319. zras(7) = pm6rp_lon_lev(7) * cmr2ras(7)
  320. DO jmod=5, 7
  321. !--- 2) Calculate the average surface of an particle for modes 5-7:
  322. zas(jmod) = 4 * zras(jmod)**2 * pi
  323. !--- 3) Determine the number of sulfate molecules needed to form
  324. ! a cLayerThickness thick layer of sulfate on the particles
  325. ! in modes 5-7:
  326. pcrtcst(jmod) = (zas(jmod) / csurf_molec) * cLayerThickness
  327. END DO
  328. END SUBROUTINE m7_coat
  329. !!$ SUBROUTINE setaeroM7
  330. !!$
  331. !!$ ! *setaeroM7* modifies pre-set switches of the aeroM7ctl
  332. !!$ ! namelist for the configuration of the
  333. !!$ ! M7 component of the ECHAM/HAM aerosol model
  334. !!$ !
  335. !!$ ! Authors:
  336. !!$ ! --------
  337. !!$ ! Philip Stier, MPI-MET 12/2002
  338. !!$ !
  339. !!$ ! *setaeroM7* is called from *call_init_submodels* in *call_submodels*
  340. !!$ !
  341. !!$
  342. !!$ USE mo_mpi, ONLY: p_parallel, p_parallel_io, p_bcast, p_io
  343. !!$ USE mo_namelist, ONLY: position_nml, nnml, POSITIONED
  344. !!$ USE mo_doctor, ONLY: nout
  345. !!$ USE mo_exception, ONLY: finish
  346. !!$
  347. !!$ IMPLICIT NONE
  348. !!$
  349. !!$ INCLUDE 'aerom7ctl.inc'
  350. !!$
  351. !!$ !--- Local variables:
  352. !!$
  353. !!$ INTEGER :: ierr
  354. !!$
  355. !!$ !--- 1) Read namelist:
  356. !!$
  357. !!$ IF (p_parallel_io) THEN
  358. !!$ CALL position_nml ('AEROM7CTL', status=ierr)
  359. !!$ SELECT CASE (ierr)
  360. !!$ CASE (POSITIONED)
  361. !!$ READ (nnml, aerom7ctl)
  362. !!$ END SELECT
  363. !!$ ENDIF
  364. !!$
  365. !!$ !--- 2) Broadcast over processors:
  366. !!$
  367. !!$ IF (p_parallel) THEN
  368. !!$ CALL p_bcast (lsnucl, p_io)
  369. !!$ CALL p_bcast (lscoag, p_io)
  370. !!$ CALL p_bcast (lscond, p_io)
  371. !!$ CALL p_bcast (nnucl, p_io)
  372. !!$ CALL p_bcast (lmass_diag, p_io)
  373. !!$ END IF
  374. !!$
  375. !!$ IF (.NOT. p_parallel) THEN
  376. !!$ WRITE(nout,*) ''
  377. !!$ WRITE(nout,*) ''
  378. !!$ WRITE(nout,*) '----------------------------------------------------------'
  379. !!$ WRITE(nout,*) '----------------------------------------------------------'
  380. !!$ WRITE(nout,*) '--- Initialization of settings for aerosol module M7 ---'
  381. !!$ WRITE(nout,*) '---'
  382. !!$ WRITE(nout,*) '--- Default values of aeroctl modified by setaero:'
  383. !!$ WRITE(nout,*) '---'
  384. !!$ WRITE(nout,*) '--- New settings: lsnucl = ', lsnucl
  385. !!$ WRITE(nout,*) '--- lscoag = ', lscoag
  386. !!$ WRITE(nout,*) '--- lscond = ', lscond
  387. !!$ IF (nnucl==1) THEN
  388. !!$ WRITE(nout,*) '--- nnucl = ', nnucl
  389. !!$ WRITE(nout,*) '--- => Vehkamaeki et al., 2002'
  390. !!$ ELSE IF (nnucl==2) THEN
  391. !!$ WRITE(nout,*) '--- nnucl = ', nnucl
  392. !!$ WRITE(nout,*) '--- => Kulmala et al., 1998'
  393. !!$ ELSE IF (lsnucl .AND. (nnucl/=1 .OR. nnucl/=2)) THEN
  394. !!$ WRITE(nout,*) '--- Error:'
  395. !!$ CALL finish('setaerom7', 'nucleation requested but no scheme selected')
  396. !!$ END IF
  397. !!$ WRITE(nout,*) '---'
  398. !!$ IF (lmass_diag) THEN
  399. !!$ WRITE(nout,*) '--- Mass balance check in m7_interface activated'
  400. !!$ ELSE
  401. !!$ WRITE(nout,*) '--- Mass balance check in m7_interface deactivated'
  402. !!$ END IF
  403. !!$ WRITE(nout,*) '---'
  404. !!$ WRITE(nout,*) '----------------------------------------------------------'
  405. !!$ WRITE(nout,*) '----------------------------------------------------------'
  406. !!$ WRITE(nout,*) ''
  407. !!$ WRITE(nout,*) ''
  408. !!$ END IF
  409. !!$
  410. !!$ END SUBROUTINE setaeroM7
  411. END MODULE mo_aero_m7