1 !WRF:MODEL_LAYER:CHEMICS
3 subroutine emissions_driver(id,ktau,dtstep,DX, &
4 config_flags, stepbioe,gmt,julday,alt,t_phy,moist,p8w,t8w, &
5 e_bio,p_phy,chem,rho_phy,dz8w,ne_area, &
6 e_iso,e_so2,e_no,e_co,e_eth,e_hc3,e_hc5,e_hc8,e_xyl,e_ol2,e_olt, &
7 e_oli,e_tol,e_csl,e_hcho,e_ald,e_ket,e_ora2,e_pm25,e_pm10,e_nh3, &
8 e_pm25i,e_pm25j,e_eci,e_ecj,e_orgi,e_orgj,e_no2,e_ch3oh, &
9 e_c2h5oh,e_so4j,e_so4c,e_no3j,e_no3c,e_orgc,e_ecc, &
10 u10,v10,ivgtyp,gsw,vegfra,rmol,ust,znt, &
11 xland,xlat,xlong,z_at_w, &
12 sebio_iso,sebio_oli,sebio_api,sebio_lim,sebio_xyl, &
13 sebio_hc3,sebio_ete,sebio_olt,sebio_ket,sebio_ald, &
14 sebio_hcho,sebio_eth,sebio_ora2,sebio_co,sebio_nr, &
15 noag_grow,noag_nongrow,nononag,slai, &
16 ebio_iso,ebio_oli,ebio_api,ebio_lim,ebio_xyl, &
17 ebio_hc3,ebio_ete,ebio_olt,ebio_ket,ebio_ald, &
18 ebio_hcho,ebio_eth,ebio_ora2,ebio_co,ebio_nr,ebio_no, &
20 ids,ide, jds,jde, kds,kde, &
21 ims,ime, jms,jme, kms,kme, &
22 its,ite, jts,jte, kts,kte )
23 !----------------------------------------------------------------------
25 USE module_state_description
27 USE module_emissions_anthropogenics
28 USE module_bioemi_simple
29 USE module_bioemi_beis311
30 USE module_cbmz_addemiss
31 USE module_mosaic_addemiss
34 TYPE(grid_config_rec_type), INTENT(IN ) :: config_flags
36 INTEGER, INTENT(IN ) :: id,julday, ne_area, &
38 ids,ide, jds,jde, kds,kde, &
39 ims,ime, jms,jme, kms,kme, &
40 its,ite, jts,jte, kts,kte
41 INTEGER, INTENT(IN ) :: &
43 REAL, DIMENSION( ims:ime, kms:kme, jms:jme, num_moist ), &
45 REAL, DIMENSION( ims:ime, kms:kme, jms:jme, num_chem ), &
46 INTENT(INOUT ) :: chem
47 REAL, DIMENSION( ims:ime, jms:jme, ne_area ), &
48 INTENT(INOUT ) :: e_bio
49 ! REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), &
50 REAL, DIMENSION( ims:ime, kms:config_flags%kemit, jms:jme ), &
52 e_iso,e_so2,e_no,e_co,e_eth,e_hc3,e_hc5,e_hc8,e_xyl,e_ol2, &
53 e_olt,e_oli,e_tol,e_csl,e_hcho,e_ald,e_ket,e_ora2,e_pm25, &
54 e_pm10,e_nh3,e_pm25i,e_pm25j,e_eci,e_ecj,e_orgi,e_orgj,e_no2, &
55 e_ch3oh,e_c2h5oh,e_so4j,e_so4c,e_no3j,e_no3c,e_orgc,e_ecc
59 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
67 INTEGER,DIMENSION( ims:ime , jms:jme ) , &
70 REAL, DIMENSION( ims:ime , jms:jme ) , &
82 REAL, DIMENSION( ims:ime , jms:jme ) , &
84 sebio_iso,sebio_oli,sebio_api,sebio_lim,sebio_xyl, &
85 sebio_hc3,sebio_ete,sebio_olt,sebio_ket,sebio_ald, &
86 sebio_hcho,sebio_eth,sebio_ora2,sebio_co,sebio_nr, &
87 noag_grow,noag_nongrow,nononag,slai, &
88 ebio_iso,ebio_oli,ebio_api,ebio_lim,ebio_xyl, &
89 ebio_hc3,ebio_ete,ebio_olt,ebio_ket,ebio_ald, &
90 ebio_hcho,ebio_eth,ebio_ora2,ebio_co,ebio_nr,ebio_no
92 REAL, INTENT(IN ) :: &
97 INTEGER :: i, j, k, ksub
99 CHARACTER (LEN=80) :: message
103 ! .. Intrinsic Functions ..
107 #if ( NMM_CORE == 1 )
110 bioem_select: SELECT CASE(config_flags%bio_emiss_opt)
112 CALL wrf_debug(15,'biogenic emissions: calling Gunther1')
113 if(ktau.eq.1.or.mod(ktau,stepbioe).eq.0)then
114 call bio_emissions(id,ktau,dtstep,DX,config_flags, &
115 gmt,julday,t_phy,moist,p8w,t8w, &
116 e_bio,p_phy,chem,rho_phy,dz8w,ne_area, &
117 ivgtyp,gsw,vegfra,rmol,ust,znt,xlat,xlong,z_at_w, &
119 ids,ide, jds,jde, kds,kde, &
120 ims,ime, jms,jme, kms,kme, &
121 its,ite, jts,jte, kts,kte )
124 if(ktau.eq.1.or.mod(ktau,stepbioe).eq.0)then
125 if(config_flags%chem_opt > RACMSORG .AND. config_flags%chem_opt < 100 ) then !<100: kpp mechs, e.g. RACMSORG_KPP
126 CALL wrf_error_fatal( &
127 "emissions_driver: beis3.1.1 biogenic emis. not currently implemented for CBMZ")
129 CALL wrf_debug(15,'biogenic emissions: calling beis3.1.1')
130 call bio_emissions_beis311(id,config_flags,ktau,dtstep, &
131 julday,gmt,xlat,xlong,t_phy,p_phy,gsw, &
132 sebio_iso,sebio_oli,sebio_api,sebio_lim,sebio_xyl, &
133 sebio_hc3,sebio_ete,sebio_olt,sebio_ket,sebio_ald, &
134 sebio_hcho,sebio_eth,sebio_ora2,sebio_co,sebio_nr, &
135 noag_grow,noag_nongrow,nononag,slai, &
136 ebio_iso,ebio_oli,ebio_api,ebio_lim,ebio_xyl, &
137 ebio_hc3,ebio_ete,ebio_olt,ebio_ket,ebio_ald, &
138 ebio_hcho,ebio_eth,ebio_ora2,ebio_co,ebio_nr,ebio_no, &
139 ids,ide, jds,jde, kds,kde, &
140 ims,ime, jms,jme, kms,kme, &
141 its,ite, jts,jte, kts,kte )
145 if(ktau.eq.1.or.mod(ktau,stepbioe).eq.0) &
146 e_bio(its:ite,jts:jte,1:ne_area) = 0.
147 !wig: May need to zero out all ebio_xxx arrays too if they are incorporated
150 END SELECT bioem_select
152 gas_addemiss_select: SELECT CASE(config_flags%chem_opt)
153 CASE (RADM2, RADM2_KPP, RADM2SORG, RACM, RACMSORG,RACM_KPP,RACMSORG_KPP, RACM_MIM_KPP,RADM2SORG_KPP)
154 IF(config_flags%kemit .GT. kte-ksub) THEN
155 message = ' EMISSIONS_DRIVER: KEMIT > KME '
157 write(0,*)kme,kte-ksub,k
158 CALL WRF_ERROR_FATAL (message)
160 call wrf_debug(15,'emissions_driver calling add_anthropogenics')
161 call add_anthropogenics(id,dtstep,dz8w,config_flags,rho_phy,chem,&
162 e_iso,e_so2,e_no,e_co,e_eth,e_hc3,e_hc5,e_hc8,e_xyl, &
163 e_ol2,e_olt,e_oli,e_tol,e_csl,e_hcho,e_ald,e_ket,e_ora2, &
164 e_pm25,e_pm10,e_nh3, &
165 ids,ide, jds,jde, kds,kde, &
166 ims,ime, jms,jme, kms,kme, &
167 its,ite, jts,jte, kts,kte )
168 call wrf_debug(15,'emissions_driver calling add_biogenics')
169 call add_biogenics(id,dtstep,dz8w,config_flags, rho_phy,chem, &
171 ebio_iso,ebio_oli,ebio_api,ebio_lim,ebio_xyl, &
172 ebio_hc3,ebio_ete,ebio_olt,ebio_ket,ebio_ald, &
173 ebio_hcho,ebio_eth,ebio_ora2,ebio_co,ebio_nr,ebio_no, &
174 ids,ide, jds,jde, kds,kde, &
175 ims,ime, jms,jme, kms,kme, &
176 its,ite, jts,jte, kts,kte )
178 CASE (CBMZ, CBMZ_BB, CBMZ_MOSAIC_4BIN, CBMZ_MOSAIC_8BIN, CBMZ_MOSAIC_4BIN_AQ, CBMZ_MOSAIC_8BIN_AQ)
179 IF(config_flags%kemit .GT. kte-ksub) THEN
180 message = ' EMISSIONS_DRIVER: KEMIT > KME '
181 CALL WRF_ERROR_FATAL (message)
183 call wrf_debug(15,'emissions_driver calling cbmz_addemiss_anthro')
184 call cbmz_addemiss_anthro( id, dtstep, dz8w, config_flags, &
186 e_so2,e_no,e_co,e_eth,e_hc3,e_hc5,e_hc8,e_xyl,e_ol2,e_olt, &
187 e_oli,e_tol,e_csl,e_hcho,e_ald,e_ket,e_ora2,e_nh3, &
188 e_no2,e_ch3oh,e_c2h5oh, &
189 ids,ide, jds,jde, kds,kde, &
190 ims,ime, jms,jme, kms,kme, &
191 its,ite, jts,jte, kts,kte )
192 call wrf_debug(15,'emissions_driver calling cbmz_addemiss_bio')
193 call cbmz_addemiss_bio( id, dtstep, dz8w, config_flags, &
194 rho_phy, chem, e_bio, ne_area, e_iso, &
196 ids,ide, jds,jde, kds,kde, &
197 ims,ime, jms,jme, kms,kme, &
198 its,ite, jts,jte, kts,kte )
203 do k=kts,min(config_flags%kemit,kte-ksub)
204 conv = 4.828e-4/rho_phy(i,k,j)*dtstep/(dz8w(i,k,j)*60.)
205 chem(i,k,j,p_so2) = chem(i,k,j,p_so2) &
207 chem(i,k,j,p_co) = chem(i,k,j,p_co) &
209 chem(i,k,j,p_no) = chem(i,k,j,p_no) &
211 chem(i,k,j,p_ald) = chem(i,k,j,p_ald) &
213 chem(i,k,j,p_hcho) = chem(i,k,j,p_hcho) &
215 chem(i,k,j,p_ora2) = chem(i,k,j,p_ora2) &
222 call wrf_debug(15,'emissions_driver NOT CALLING gas add_... routines')
224 END SELECT gas_addemiss_select
226 aer_addemiss_select: SELECT CASE(config_flags%chem_opt)
228 CASE (CBMZ_MOSAIC_4BIN, CBMZ_MOSAIC_8BIN, CBMZ_MOSAIC_4BIN_AQ, CBMZ_MOSAIC_8BIN_AQ)
229 call wrf_debug(15,'emissions_driver calling mosaic_addemiss')
230 call mosaic_addemiss( id, dtstep, u10, v10, alt, dz8w, xland, &
231 config_flags, chem, &
232 e_pm10,e_pm25,e_pm25i,e_pm25j,e_eci,e_ecj,e_orgi,e_orgj, &
233 e_so4j,e_so4c,e_no3j,e_no3c,e_orgc,e_ecc, &
234 ids,ide, jds,jde, kds,kde, &
235 ims,ime, jms,jme, kms,kme, &
236 its,ite, jts,jte, kts,kte )
239 call wrf_debug(15,'emissions_driver NOT CALLING aer add_... routines')
241 END SELECT aer_addemiss_select
243 END subroutine emissions_driver