mo_aero.F90 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502
  1. #include "tm5.inc"
  2. MODULE mo_aero
  3. ! *mo_aero* contains phyiscal switches and parameters
  4. ! for the ECHAM/HAM aerosol model.
  5. !
  6. ! Author:
  7. ! -------
  8. ! Philip Stier, MPI-MET 12/2002
  9. !
  10. !!$ USE mo_linked_list, ONLY: NETCDF, GRIB
  11. USE mo_aero_m7, ONLY: nmod
  12. !!$ USE mo_control, ONLY: lcolumn
  13. IMPLICIT NONE
  14. !--- 0) Submodel ID:
  15. INTEGER :: id_ham
  16. !--- 1) Switches:
  17. !--- 1.1) Physical:
  18. !--- Define control variables and pre-set with default values:
  19. LOGICAL :: lm7 = .TRUE. ! Aerosol dynamics and thermodynamics scheme M7
  20. INTEGER :: ncdnc = 0, & ! CDNC activation scheme:
  21. !
  22. ! ncdnc = 0 OFF => standard ECHAM5
  23. !
  24. ! = 1 Lohmann et al. (1999) + Lin and Leaitch (1997)
  25. ! = 2 Lohmann et al. (1999) + Abdul-Razzak and Ghan (2000)
  26. ! = 3 Lohmann et al. (1999) + ( Nenes et al. (2003) )
  27. !
  28. nicnc = 0, & ! ICNC scheme:
  29. !
  30. ! ncdnc = 0 OFF
  31. ! = 1 Kaercher and Lohmann (2002)
  32. !
  33. nauto = 1, & ! Autoconversion scheme:
  34. !
  35. ! nauto = 1 Beheng (1994) - ECHAM5 Standard
  36. ! = 2 Khairoutdinov and Kogan (2000)
  37. !
  38. ndust = 2, & ! Dust emission scheme:
  39. !
  40. ! ndust = 1 Balkanski et al. (2002)
  41. ! = 2 Tegen et al. (2002)
  42. !
  43. nseasalt = 2, & ! Sea Salt emission scheme:
  44. !
  45. ! nseasalt = 1 Monahan (1986)
  46. ! = 2 Schulz et al. (2002)
  47. !
  48. npist = 3, & ! DMS emission scheme:
  49. !
  50. ! npist = 1 Liss & Merlivat (1986)
  51. ! = 2 Wanninkhof (1992)
  52. ! = 3 Nightingale (2000)
  53. !
  54. nemiss = 1, & ! Emission inventory
  55. !
  56. ! nemiss =1 old version
  57. ! nemiss =2 AEROCOM emissions 2000
  58. !
  59. nsoa = 2 ! SOA formation scheme:
  60. !
  61. ! nsoa = 0 POM mass emission into both Aitken modes (standard TM5)
  62. ! 1 POM mass emission + distribution according to volatility assumptions to 5 modes
  63. ! 2 atmospheric formation from precursors + distribution according to volatility assumptions to 5 modes
  64. LOGICAL :: lodiag = .FALSE. ! Extended diagnostics
  65. LOGICAL :: laero_rad = .FALSE. ! Radiation calculation
  66. LOGICAL :: lorad(nmod) = .FALSE. ! switch for each mode
  67. LOGICAL :: lodiagrad = .FALSE. ! Extended radiation diagnostics
  68. INTEGER :: nwv = 0 ! nwv: number of additional wavelengths
  69. ! for the radiation calculations
  70. ! (max currently set to 10)
  71. REAL :: cwv(10) = 0. ! cwv: array of additional wavelengths
  72. ! for the radiation calculations [m]
  73. LOGICAL :: lomassfix = .TRUE. ! Mass fixer in convective scheme
  74. !--- 1.2) Technical:
  75. !!$ INTEGER :: NFILETYPE = GRIB ! Output stream filetypes
  76. !--- 2) Parameters:
  77. !-- 2.1) Number of aerosol compounds: (needs to be harmonized with nmode in mo_aero_m7)
  78. INTEGER, PARAMETER :: ntype=6
  79. !--- 2.2) Mode names:
  80. CHARACTER(LEN=2), PARAMETER :: cmode(nmod)=(/'NS','KS','AS','CS','KI','AI','CI'/)
  81. !--- 2.3) Compound names:
  82. CHARACTER(LEN=3), PARAMETER :: ctype(ntype)=(/'SO4','BC ','OC ','SS ','DU ','WAT'/)
  83. !--- 2.4) Index field of tracer indices for the aerosol numbers in each mode:
  84. INTEGER :: nindex(nmod)
  85. !--- 2.5) Emissions:
  86. !--- Carbon Emissions
  87. REAL, PARAMETER :: zbb_wsoc_perc = 0.65, & ! Biom. Burn. Percentage of Water Soluble OC (WSOC) [1]
  88. ! (M.O. Andreae; Talk: Smoke and Climate)
  89. zbge_wsoc_perc = 0.65, & ! Assume same Percentage of WSOC for biogenic OC
  90. !>>> TvN
  91. ! The value of 1.4 for the POM to OC mass ratio is an outdated estimate.
  92. ! In the current code we can apply different ratios
  93. ! for emissions from different sources.
  94. ! For further details, see comment in emission_data.F90.
  95. ! The use of a single constant value, on the other hand,
  96. ! would have the advantage that the simulated POM concentrations
  97. ! can easily be converted to OC.
  98. ! An average value of 1.8 seems reasonable.
  99. ! Assuming that there are no substantial contributions from
  100. ! elements other than H and O, a value of 1.8 can be obtained
  101. ! with an H:C atomic ratio of 1.6 and and O:C ratio of 0.5,
  102. ! which are well within the range of oxidation states
  103. ! presented by Heald et al. (GRL, 2010).
  104. ! According to the model of Kuwata et al. (Environ. Sci. Technol., 2012),
  105. ! the resulting particle density would be close to the value
  106. ! assumed in the model (doc = 1.3 g/cm3 in mo_aero_m7.F90).
  107. !zom2oc = 1.4, & ! Mass ratio organic species to organic carbon
  108. ! (Seinfeld and Pandis, 1998, p709;
  109. ! Ferek et al., JGR, 1998)
  110. !
  111. ! The emission radii for carbonaceous aerosols of the original code below
  112. ! correspond to the values recommended by AeroCom (Dentener et al., ACP, 2006),
  113. ! but adapted to sigma = 1.59 as used in M7 (Stier et al., ACP, 2005).
  114. cmr_ff = 0.03E-6, & ! Fossil fuel emissions:
  115. ! assumed number median radius of the emitted
  116. ! particles with the standard deviation given
  117. ! in mo_aero_m7 [m]. Has to lie within the
  118. ! Aitken mode for the current setup!
  119. cmr_bb = 0.075E-6, & ! Biomass burning emissions:
  120. ! Assumed number median radius of the emitted
  121. ! particles with the standard deviation given
  122. ! in mo_aero_m7 [m]. Has to lie within the
  123. ! Accumulation mode for the current setup!
  124. cmr_bg = 0.03E-6, &! Biogenic secondary particle formation:
  125. ! Assumed number median radius of the emitted
  126. ! particles with the standard deviation given
  127. ! in mo_aero_m7 [m]. Has to lie within the
  128. ! Aitken mode for the current setup!
  129. cmr_sk = 0.03E-6, &! SO4 primary emission ---> aitken mode
  130. ! Assumed number median radius of the emitted
  131. ! particles with the standard deviation given
  132. ! in mo_aero_m7 [m]. Has to lie within the
  133. ! Aitken mode for the current setup!
  134. cmr_sa = 0.075E-6, &! SO4 primary emission ---> accumulation mode
  135. ! Assumed number median radius of the emitted
  136. ! particles with the standard deviation given
  137. ! in mo_aero_m7 [m]. Has to lie within the
  138. ! Accumulation mode for the current setup!
  139. cmr_sc = 0.75E-6, &! SO4 primary emission ---> coarse mode
  140. ! Assumed number median radius of the emitted
  141. ! particles with the standard deviation given
  142. ! in mo_aero_m7 [m]. Has to lie within the
  143. ! Coarse mode for the current setup!
  144. facso2 = 0.975, &! factor to scale primary SO4 emissions
  145. ! AEROCOM assumption 2.5 % of the SO2 emissions
  146. ! in the from of SO4
  147. so2ts = 1./1.998 ! conversion factor SO2 to S
  148. REAL, PUBLIC :: zm2n_bcki_ff, zm2n_bcki_bb, &
  149. zm2n_bcks_bb, zm2n_ocki_ff, &
  150. zm2n_ocki_bb, zm2n_ocki_bg, &
  151. zm2n_ocks_bb, zm2n_ocks_bg, &
  152. zm2n_s4ks_sk, zm2n_s4as_sa, &
  153. zm2n_s4cs_sc
  154. !!$CONTAINS
  155. !!$
  156. !!$
  157. !!$ SUBROUTINE aero_initialize
  158. !!$
  159. !!$ ! Purpose:
  160. !!$ ! ---------
  161. !!$ ! Initializes constants and parameters
  162. !!$ ! used in the HAM aerosol model.
  163. !!$ ! Performs consistency checks.
  164. !!$ !
  165. !!$ ! Author:
  166. !!$ ! ---------
  167. !!$ ! Philip Stier, MPI 03/2003
  168. !!$ !
  169. !!$ ! Interface:
  170. !!$ ! ---------
  171. !!$ ! *aero_initialize* is called from *call_init_submodels* in *call_submodels*
  172. !!$ ! needs to be called after initialization of the
  173. !!$ ! submodel as it makes use of parameters in mo_aero_m7
  174. !!$ !
  175. !!$
  176. !!$ USE mo_tracer, ONLY: flag, ntrac, trlist, AEROSOLNUMBER
  177. !!$ USE mo_constants, ONLY: api
  178. !!$ USE mo_radiation, ONLY: iaero
  179. !!$ USE mo_mpi, ONLY: p_parallel_io
  180. !!$ USE mo_doctor, ONLY: nout
  181. !!$ USE mo_exception, ONLY: finish
  182. !!$ USE mo_aero_m7, ONLY: cmr2ram
  183. !!$ USE mo_aero_trac, ONLY: idt_mbcki, idt_mbcks, &
  184. !!$ idt_mocki, idt_mocks, &
  185. !!$ idt_ms4ks, idt_ms4as, &
  186. !!$ idt_ms4cs
  187. !!$ USE mo_aero_m7, ONLY: iaiti, iaits, iaccs, icoas
  188. !!$
  189. !!$ IMPLICIT NONE
  190. !!$
  191. !!$ INTEGER :: jwv, jmod, jt
  192. !!$
  193. !!$ !--- 1) Consistency checks:
  194. !!$
  195. !!$ !--- 1.1) Radiation:
  196. !!$
  197. !!$ IF (nwv > 10 ) &
  198. !!$ CALL finish('aero_initialize','maximal number of additional wavelengths exceeded')
  199. !!$
  200. !!$ IF (iaero==4 .AND. ANY(lorad(:))) THEN
  201. !!$ laero_rad=.TRUE.
  202. !!$ ELSE IF (iaero/=4 .AND. ANY(lorad(:))) THEN
  203. !!$ CALL finish('aero_initialize','inconsistent setting of iaero in radctl')
  204. !!$ ELSE IF (iaero==4 .AND. .NOT.ANY(lorad(:))) THEN
  205. !!$ CALL finish('aero_initialize','inconsistent setting of iaero and lorad')
  206. !!$ END IF
  207. !!$
  208. !!$ !--- 1.2) Output type:
  209. !!$
  210. !!$ IF(nfiletype/=GRIB .AND. nfiletype/=NETCDF) THEN
  211. !!$ CALL finish('aero_initialize','selected output filetype not supported')
  212. !!$ END IF
  213. !!$
  214. !!$ !--- 2) Consistency checks and display of information:
  215. !!$
  216. !!$ IF (p_parallel_io) THEN
  217. !!$ WRITE(nout,*) ''
  218. !!$ WRITE(nout,*) ''
  219. !!$ WRITE(nout,*) '----------------------------------------------------------'
  220. !!$ WRITE(nout,*) '----------------------------------------------------------'
  221. !!$ WRITE(nout,*) '--- Initialization of the ECHAM/HAM aerosol model ---'
  222. !!$ WRITE(nout,*) '---'
  223. !!$ WRITE(nout,*) '--- Default values of aeroctl modified by setaero:'
  224. !!$ WRITE(nout,*) '---'
  225. !!$ WRITE(nout,*) '--- New settings: lm7 = ', lm7
  226. !!$ WRITE(nout,*) '--- ncdnc = ', ncdnc
  227. !!$ IF (ncdnc==0) THEN
  228. !!$ WRITE(nout,*) '--- => no aerosol-CDNC coupling'
  229. !!$ ELSE IF (ncdnc==1) THEN
  230. !!$ WRITE(nout,*) '--- => Lohmann et al. (1999) +'
  231. !!$ WRITE(nout,*) '--- Lin and Leaitch (1997)'
  232. !!$ ELSE IF (ncdnc==2) THEN
  233. !!$ WRITE(nout,*) '--- => Lohmann et al. (1999) +'
  234. !!$ WRITE(nout,*) '--- Abdul-Razzak and Ghan (2000)'
  235. !!$ END IF
  236. !!$ WRITE(nout,*) '--- nicnc = ', nicnc
  237. !!$ IF (nicnc==0) THEN
  238. !!$ WRITE(nout,*) '--- => no aerosol-ICNC coupling'
  239. !!$ ELSE IF (ncdnc>0 .AND. nicnc==1) THEN
  240. !!$ WRITE(nout,*) '--- => Kaercher and Lohmann (2002)'
  241. !!$ ELSE IF (ncdnc==0 .AND. nicnc>0) THEN
  242. !!$ WRITE(nout,*) '--- => ICNC scheme requires CDNC scheme!'
  243. !!$ CALL finish('aero_initialize','inconsistent combination of ncdnc and nicnc')
  244. !!$ END IF
  245. !!$ WRITE(nout,*) '--- nauto = ', nauto
  246. !!$ WRITE(nout,*) '--- => Autoconversion scheme:'
  247. !!$ IF (nauto==1) THEN
  248. !!$ WRITE(nout,*) '--- Beheng (1994) - ECHAM5 Standard'
  249. !!$ ELSE IF (nauto==2 .AND. ncdnc>0) THEN
  250. !!$ WRITE(nout,*) '--- Khairoutdinov and Kogan (2000)'
  251. !!$ ELSE IF (nauto==2 .AND. ncdnc==0) THEN
  252. !!$ WRITE(nout,*) '--- Khairoutdinov and Kogan (2000)'
  253. !!$ WRITE(nout,*) '--- scheme requires CDNC scheme!'
  254. !!$ CALL finish('aero_initialize','inconsistent combination of nauto and ncdnc')
  255. !!$ ELSE
  256. !!$ CALL finish('aero_initialize','invalid setting for nauto')
  257. !!$ END IF
  258. !!$ WRITE(nout,*) '--- ndust = ', ndust
  259. !!$ IF (ndust==1) THEN
  260. !!$ WRITE(nout,*) '--- => Balkanski et al. (2002)'
  261. !!$ ELSE IF (ndust==2) THEN
  262. !!$ WRITE(nout,*) '--- => Tegen et al. (2002)'
  263. !!$ IF (lcolumn) THEN
  264. !!$ WRITE(nout,*) '--- WARNING:'
  265. !!$ WRITE(nout,*) '--- This dust emission scheme '
  266. !!$ WRITE(nout,*) '--- does not work in SCM mode!'
  267. !!$ WRITE(nout,*) '--- Dust emissions deactivated!'
  268. !!$ ndust=0
  269. !!$ WRITE(nout,*) '--- => ndust = ', ndust
  270. !!$ END IF !lcolumn
  271. !!$ ELSE IF (ndust==0) THEN
  272. !!$ WRITE(nout,*) '--- => DUST EMISSIONS DEACTIVATED!'
  273. !!$ END IF
  274. !!$ WRITE(nout,*) '--- nseasalt = ', nseasalt
  275. !!$ IF (nseasalt==1) THEN
  276. !!$ WRITE(nout,*) '--- => Monahan (1986)'
  277. !!$ ELSE IF (nseasalt==2) THEN
  278. !!$ WRITE(nout,*) '--- => Schulz et al. (2002)'
  279. !!$ ELSE IF (nseasalt==0) THEN
  280. !!$ WRITE(nout,*) '--- => SEASALT EMISSIONS DEACTIVATED!'
  281. !!$ END IF
  282. !!$ WRITE(nout,*) '--- npist = ', npist
  283. !!$ IF (npist==1) THEN
  284. !!$ WRITE(nout,*) '--- => Air-sea exchange:'
  285. !!$ WRITE(nout,*) '--- Liss & Merlivat (1986)'
  286. !!$ ELSE IF (npist==2) THEN
  287. !!$ WRITE(nout,*) '--- => Air-sea exchange:'
  288. !!$ WRITE(nout,*) '--- Wanninkhof (1992)'
  289. !!$ ELSE IF (npist==3) THEN
  290. !!$ WRITE(nout,*) '--- => Air-sea exchange:'
  291. !!$ WRITE(nout,*) '--- Nightingale (2000)'
  292. !!$ END IF
  293. !!$ WRITE(nout,*) '--- nemiss = ', nemiss
  294. !!$ IF (nemiss==1) THEN
  295. !!$ WRITE(nout,*) '--- => 1985 emission data'
  296. !!$ ELSE IF (nemiss==2) THEN
  297. !!$ WRITE(nout,*) '--- => AEROCOM emissions 2000'
  298. !!$ END IF
  299. !!$ IF (lodiag) THEN
  300. !!$ WRITE(nout,*) '--- lodiag = ', lodiag
  301. !!$ WRITE(nout,*) '--- => Aerosol diagnostics activated'
  302. !!$ ELSE
  303. !!$ WRITE(nout,*) '--- lodiag = ', lodiag
  304. !!$ WRITE(nout,*) '--- => Aerosol diagnostics deactivated'
  305. !!$ END IF
  306. !!$ IF (laero_rad) THEN
  307. !!$ WRITE(nout,*) '--- lorad = ', lorad
  308. !!$ WRITE(nout,*) '--- => Radiation calculation for:'
  309. !!$ WRITE(nout,*) '---'
  310. !!$ DO jmod=1, nmod
  311. !!$ IF (lorad(jmod)) THEN
  312. !!$ WRITE(nout,*) '--- Mode ', jmod
  313. !!$ END IF
  314. !!$ END DO
  315. !!$ WRITE(nout,*) '---'
  316. !!$ IF (nwv>0) THEN
  317. !!$ WRITE(nout,*) '--- nwv = ', nwv
  318. !!$ WRITE(nout,*) '--- => Additional wavelengs requested:'
  319. !!$ WRITE(nout,*) '---'
  320. !!$ DO jwv=1, nwv
  321. !!$ WRITE(nout,fmt="(A,E8.2,A)") '--- ',cwv(jwv), ' [m]'
  322. !!$ END DO
  323. !!$ END IF
  324. !!$ ELSE
  325. !!$ WRITE(nout,*) '--- Radiation calculations deactivated!'
  326. !!$ END IF
  327. !!$ IF (lodiagrad) THEN
  328. !!$ WRITE(nout,*) '--- lodiagrad = ', lodiagrad
  329. !!$ WRITE(nout,*) '--- => Extended radiation diagnostics!'
  330. !!$ END IF
  331. !!$ WRITE(nout,*) '---'
  332. !!$ IF(lomassfix) THEN
  333. !!$ WRITE(nout,*) '--- Mass fixer in convection activated!'
  334. !!$ ELSE
  335. !!$ WRITE(nout,*) '--- Mass fixer in convection deactivated!'
  336. !!$ END IF
  337. !!$ WRITE(nout,*) '---'
  338. !!$ IF(nfiletype==GRIB) THEN
  339. !!$ WRITE(nout,*) '--- Output filetype set to GRIB'
  340. !!$ ELSE IF(nfiletype==NETCDF) THEN
  341. !!$ WRITE(nout,*) '--- Output filetype set to NetCDF'
  342. !!$ END IF
  343. !!$ END IF
  344. !!$
  345. !!$ !--- 2) Initialize constants and parameters:
  346. !!$
  347. !!$ !--- 2.1) Emissions
  348. !!$ ! Calculate factors to convert mass flux in number flux for
  349. !!$ ! given number median radii (cmr) and standard deviation
  350. !!$ ! (implicitly by the conversion factor cmr2ram) of the modes
  351. !!$ !
  352. !!$ ! N = M/m = M/(4/3 * pi * dens * R(averageMass)**3)
  353. !!$ ! = M * (3/(4*pi*dens*R(averageMass)))
  354. !!$ ! !
  355. !!$ ! = M * zm2n_xx
  356. !!$
  357. !!$ zm2n_bcki_ff=3./(4.*api*flag('density',idt_mbcki)*(cmr_ff*cmr2ram(iaiti))**3.)
  358. !!$ zm2n_bcki_bb=3./(4.*api*flag('density',idt_mbcki)*(cmr_bb*cmr2ram(iaiti))**3.)
  359. !!$
  360. !!$ zm2n_bcks_bb=3./(4.*api*flag('density',idt_mbcks)*(cmr_bb*cmr2ram(iaits))**3.)
  361. !!$
  362. !!$ zm2n_ocki_ff=3./(4.*api*flag('density',idt_mocki)*(cmr_ff*cmr2ram(iaiti))**3.)
  363. !!$ zm2n_ocki_bb=3./(4.*api*flag('density',idt_mocki)*(cmr_bb*cmr2ram(iaiti))**3.)
  364. !!$ zm2n_ocki_bg=3./(4.*api*flag('density',idt_mocki)*(cmr_bg*cmr2ram(iaiti))**3.)
  365. !!$
  366. !!$ zm2n_ocks_bb=3./(4.*api*flag('density',idt_mocks)*(cmr_bb*cmr2ram(iaits))**3.)
  367. !!$ zm2n_ocks_bg=3./(4.*api*flag('density',idt_mocks)*(cmr_bg*cmr2ram(iaits))**3.)
  368. !!$
  369. !!$ !??????????????
  370. !!$ zm2n_s4ks_sk=3./(4.*api*flag('density',idt_ms4ks)*(cmr_sk*cmr2ram(iaits))**3.)
  371. !!$ zm2n_s4as_sa=3./(4.*api*flag('density',idt_ms4as)*(cmr_sa*cmr2ram(iaccs))**3.)
  372. !!$ zm2n_s4cs_sc=3./(4.*api*flag('density',idt_ms4cs)*(cmr_sc*cmr2ram(icoas))**3.)
  373. !!$ !????????????
  374. !!$
  375. !!$ !--- 3) Set up index matrices for access of tracer by compound and mode:
  376. !!$
  377. !!$ IF (p_parallel_io) THEN
  378. !!$ WRITE(nout,*) '---'
  379. !!$ WRITE(nout,*) '--- Mapping of ECHAM tracers HAM mode-indices:'
  380. !!$ WRITE(nout,*) '---'
  381. !!$ END IF
  382. !!$
  383. !!$ DO jmod=1, nmod
  384. !!$ DO jt=1, ntrac
  385. !!$ IF(trlist%ti(jt)%nphase==AEROSOLNUMBER .AND. trlist%ti(jt)%mode==jmod) THEN
  386. !!$ nindex(jmod)=jt
  387. !!$ IF (p_parallel_io) THEN
  388. !!$ WRITE(nout,*) '--- ', TRIM(trlist%ti(jt)%fullname),': ', jmod
  389. !!$ END IF
  390. !!$ CYCLE
  391. !!$ END IF
  392. !!$ END DO
  393. !!$ END DO
  394. !!$
  395. !!$ !--- 4) Finish:
  396. !!$
  397. !!$ IF (p_parallel_io) THEN
  398. !!$ WRITE(nout,*) '---'
  399. !!$ WRITE(nout,*) '--- Parameters for ECHAM5-HAM initialized ---'
  400. !!$ WRITE(nout,*) '----------------------------------------------------------'
  401. !!$ WRITE(nout,*) '----------------------------------------------------------'
  402. !!$ WRITE(nout,*) ''
  403. !!$ WRITE(nout,*) ''
  404. !!$ END IF
  405. !!$ END SUBROUTINE aero_initialize
  406. !!$
  407. !!$
  408. !!$ SUBROUTINE setaero
  409. !!$
  410. !!$ ! *setaero* modifies pre-set switches of the aeroctl
  411. !!$ ! namelist for the configuration of the
  412. !!$ ! ECHAM/HAM aerosol model
  413. !!$ !
  414. !!$ ! Authors:
  415. !!$ ! --------
  416. !!$ ! Philip Stier, MPI-MET 12/2002
  417. !!$ !
  418. !!$ ! *setaero* is called from *call_init_submodels* in *call_submodels*
  419. !!$ !
  420. !!$
  421. !!$ USE mo_mpi, ONLY: p_parallel, p_parallel_io, p_bcast, p_io
  422. !!$ USE mo_namelist, ONLY: position_nml, nnml, POSITIONED
  423. !!$
  424. !!$ IMPLICIT NONE
  425. !!$
  426. !!$ INCLUDE 'aeroctl.inc'
  427. !!$
  428. !!$ !--- Local variables:
  429. !!$
  430. !!$ INTEGER :: ierr
  431. !!$
  432. !!$ !--- 1) Read namelist:
  433. !!$
  434. !!$ IF (p_parallel_io) THEN
  435. !!$ CALL position_nml ('AEROCTL', status=ierr)
  436. !!$ SELECT CASE (ierr)
  437. !!$ CASE (POSITIONED)
  438. !!$ READ (nnml, aeroctl)
  439. !!$ END SELECT
  440. !!$ ENDIF
  441. !!$
  442. !!$ !--- 2) Broadcast over processors:
  443. !!$
  444. !!$ IF (p_parallel) THEN
  445. !!$ CALL p_bcast (lm7, p_io)
  446. !!$ CALL p_bcast (ncdnc, p_io)
  447. !!$ CALL p_bcast (nicnc, p_io)
  448. !!$ CALL p_bcast (nauto, p_io)
  449. !!$ CALL p_bcast (ndust, p_io)
  450. !!$ CALL p_bcast (nseasalt, p_io)
  451. !!$ CALL p_bcast (npist, p_io)
  452. !!$ CALL p_bcast (nemiss, p_io)
  453. !!$ CALL p_bcast (lodiag, p_io)
  454. !!$ CALL p_bcast (nfiletype, p_io)
  455. !!$ CALL p_bcast (lorad, p_io)
  456. !!$ CALL p_bcast (lodiagrad, p_io)
  457. !!$ CALL p_bcast (nwv, p_io)
  458. !!$ CALL p_bcast (cwv, p_io)
  459. !!$ CALL p_bcast (lomassfix, p_io)
  460. !!$ END IF
  461. !!$
  462. !!$ END SUBROUTINE setaero
  463. END MODULE mo_aero