chem_driver.F
References to this file elsewhere.
1 !WRF:MODEL_LAYER:CHEMICS
2 !
3 #if ( NMM_CORE == 1 )
4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5 !NCEP_MESO:MEDIATION_LAYER:SOLVER
6 !
7 !-----------------------------------------------------------------------
8 #include "../dyn_nmm/nmm_loop_basemacros.h"
9 #include "../dyn_nmm/nmm_loop_macros.h"
10 !-----------------------------------------------------------------------
11 #endif
12 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
13 subroutine chem_driver ( grid , config_flags &
14
15 #if ( EM_CORE == 1 )
16 #include "em_dummy_new_args.inc"
17 #endif
18
19 #if ( NMM_CORE == 1 )
20 #include "nmm_dummy_new_args.inc"
21 #endif
22
23 )
24 !----------------------------------------------------------------------
25 USE module_domain
26 USE module_configure
27 #if ( EM_CORE == 1 )
28 USE module_driver_constants
29 USE module_machine
30 USE module_tiles
31 #endif
32 USE module_dm
33 USE module_model_constants
34 USE module_state_description
35 #if ( NMM_CORE == 1 )
36 USE MODULE_PHYSICS_CALLS
37 #endif
38 USE module_data_radm2
39 USE module_data_sorgam
40 USE module_radm
41 USE module_dep_simple
42 USE module_bioemi_simple
43 USE module_phot_mad
44 USE module_aerosols_sorgam
45 USE module_chem_utilities
46 USE module_ctrans_grell
47 USE module_wetscav_driver, only: wetscav_driver
48 USE module_input_chem_data, only: &
49 #if (defined(CHEM_DBG_I) && defined(CHEM_DBG_J) && defined(CHEM_DBG_K))
50 chem_dbg, &
51 #endif
52 get_last_gas
53 IMPLICIT NONE
54
55 ! Input data.
56
57 TYPE(domain) , TARGET :: grid
58 !
59 ! Definitions of dummy arguments to solve
60 #if ( EM_CORE == 1 )
61 #include <em_dummy_new_decl.inc>
62 #define NO_I1_OLD
63 !#include <em_i1_decl_new.inc>
64 #endif
65 #if ( NMM_CORE == 1 )
66 #include <nmm_dummy_new_decl.inc>
67 #ifdef DM_PARALLEL
68 INCLUDE "mpif.h"
69 #endif
70 #endif
71
72 TYPE(grid_config_rec_type), INTENT(IN ) :: config_flags
73
74 INTEGER :: ids,ide, jds,jde, kds,kde, &
75 ims,ime, jms,jme, kms,kme, &
76 ips,ipe, jps,jpe, kps,kpe, &
77 its,ite, jts,jte, kts,kte
78 ! ..
79 ! .. Local Scalars ..
80 INTEGER :: stepave,i,j,k,numgas,nv,n, nr,ktauc, ktau,k_start,k_end,idf,jdf,kdf
81
82 ! ................................................................
83 ! ..
84 !
85 ! necessary for aerosols (module dependent)
86 !
87 real, dimension(grid%sm31:grid%em31,grid%sm32:grid%em32,grid%sm33:grid%em33) ::vcsulf_old
88 real, dimension(grid%sm31:grid%em31,grid%sm32:grid%em32,grid%sm33:grid%em33,ldrog) ::vdrog3
89
90
91 !!! rate for n2o5 hyrolysis (calculated outside the chemistry solver routines)
92 real, dimension(grid%sm31:grid%em31,grid%sm32:grid%em32,grid%sm33:grid%em33) ::n2o5_het
93 ! met-variables needed
94 !
95 REAL,DIMENSION(grid%sm31:grid%em31,grid%sm32:grid%em32,grid%sm33:grid%em33) :: &
96 p_phy,u_phy,v_phy &
97 ,t_phy,dz8w,t8w,p8w &
98 ,rho,rri,z_at_w,vvel,zmid
99 REAL,DIMENSION(grid%sm31:grid%em31,grid%sm33:grid%em33) :: pbl_h
100 #if ( NMM_CORE == 1 )
101 ! met-variables needed when using NMM
102 !
103 REAL,DIMENSION(grid%sm32:grid%em32-1) :: QL,TL
104 !
105 REAL,DIMENSION(grid%sm31:grid%em31,grid%sm33:grid%em33) :: REXNSFC,FACTRS &
106 ,TOT,TSFC
107 !
108 REAL :: DAYI,DPL,FICE,FRAIN,HOUR,PLYR &
109 & ,QI,QR,QW,RADT,TIMES,WC,TDUM,WMSK,RWMSK
110 #endif
111
112
113 INTEGER :: ij
114 INTEGER :: im , num_3d_m , ic , num_3d_c
115 INTEGER :: ijds, ijde
116 INTEGER :: ksubt
117
118 REAL :: chem_minval, dtstepc
119
120 INTEGER :: numgas_aqfrac = 0 ! last dimension of gas_aqfrac
121 REAL, ALLOCATABLE, DIMENSION(:,:,:,:) :: gas_aqfrac
122 ! fraction of gas that is in cloud water
123
124 LOGICAL :: haveaer
125 ! ..
126 ! .. Intrinsic Functions ..
127 INTRINSIC max, min
128 ! ..
129
130 ! Number of levels to exclude from the chem calculations counting from
131 ! the model top.
132 ksubt=0
133 stepave=1800./grid%dt
134 CALL get_ijk_from_grid ( grid , &
135 ids, ide, jds, jde, kds, kde, &
136 ims, ime, jms, jme, kms, kme, &
137 ips, ipe, jps, jpe, kps, kpe )
138 ktau = grid%itimestep
139 !initialize
140 !
141 #if ( NMM_CORE == 1 )
142 !*** IN NMM SET CONTROLS FOR TILES TO PATCHES
143 !
144 !-----------------------------------------------------------------------
145 KTAU=GRID%NMM_NTSD
146 IDF=IDE-1
147 JDF=JDE-1
148 KDF=KDE-1
149 ITS=IPS
150 ITE=MIN(IPE,IDF)
151 JTS=JPS
152 JTE=MIN(JPE,JDF)
153 KTS=KPS
154 KTE=MIN(KPE,KDF)
155
156 #endif
157 if(ktau.le.1)then
158 grid%gd_cloud_a=0.
159 grid%gd_cloud2_a=0.
160 grid%gd_cloud_b=0.
161 grid%gd_cloud2_b=0.
162 grid%raincv_a=0.
163 grid%raincv_b=0.
164 endif
165
166
167
168 num_3d_m = num_moist
169 num_3d_c = num_chem
170 numgas = get_last_gas(config_flags%chem_opt)
171
172
173 #if ( EM_CORE == 1 )
174
175 ! Compute these starting and stopping locations for each tile and number of tiles.
176 CALL set_tiles ( grid , ids , ide , jds , jde , ips , ipe , jps , jpe )
177 k_start = kps
178 k_end = kpe
179
180 #endif
181 ijds = min(ids, jds)
182 ijde = max(ide, jde)
183
184
185 chem_minval = epsilc !chem_minval can be case dependant and set below...
186 chem_select: SELECT CASE(config_flags%chem_opt)
187 CASE (RADM2)
188 CALL wrf_debug(15,'calling radm2 from chem_driver')
189 haveaer = .false.
190 CASE (RADM2_KPP)
191 CALL wrf_debug(15,'calling radm2_kpp from chem_driver')
192 haveaer = .false.
193 CASE (RADM2SORG)
194 CALL wrf_debug(15,'calling radm2sorg aerosols driver from chem_driver')
195 haveaer = .true.
196 CASE (RADM2SORG_KPP)
197 CALL wrf_debug(15,'calling radm2sorg aerosols driver from chem_driver')
198 haveaer = .false.
199 CASE (RADM2SORG_AQ)
200 CALL wrf_debug(15,'calling radm2sorg_aq aerosols driver from chem_driver')
201 haveaer = .true.
202 CASE (RACM)
203 CALL wrf_debug(15,'calling racm from chem_driver')
204 haveaer = .false.
205 CASE (RACM_KPP)
206 CALL wrf_debug(15,'calling racm_kpp from chem_driver')
207 haveaer = .false.
208 CASE (RACM_MIM_KPP)
209 CALL wrf_debug(15,'calling racm_mim_kpp from chem_driver')
210 haveaer = .false.
211 CASE (RACMSORG)
212 CALL wrf_debug(15,'calling racmsorg aerosols driver from chem_driver')
213 haveaer = .true.
214 CASE (RACMSORG_KPP)
215 CALL wrf_debug(15,'calling racmsorg_kpp aerosols driver from chem_driver')
216 haveaer = .false.
217 CASE (RACMSORG_AQ)
218 CALL wrf_debug(15,'calling racmsorg_aq aerosols driver from chem_driver')
219 haveaer = .true.
220 CASE (CBMZ)
221 CALL wrf_debug(15,'calling cbmz from chem_driver')
222 haveaer = .false.
223 CASE (CBMZ_BB)
224 CALL wrf_debug(15,'calling cbmz_bb from chem_driver')
225 haveaer = .false.
226 CASE (CBMZ_MOSAIC_4BIN)
227 CALL wrf_debug(15,'calling cbmz_mosaic_4bin aerosols driver from chem_driver')
228 haveaer = .true.
229 CASE (CBMZ_MOSAIC_8BIN)
230 CALL wrf_debug(15,'calling cbmz_mosaic_8bin aerosols driver from chem_driver')
231 haveaer = .true.
232 CASE (CBMZ_MOSAIC_4BIN_AQ)
233 CALL wrf_debug(15,'calling cbmz_mosaic_4bin_aq aerosols driver from chem_driver')
234 haveaer = .true.
235 CASE (CBMZ_MOSAIC_8BIN_AQ)
236 CALL wrf_debug(15,'calling cbmz_mosaic_8bin_aq aerosols driver from chem_driver')
237 haveaer = .true.
238 CASE (CHEM_TRACER)
239 CALL wrf_debug(15,'tracer mode: only doing emissions and dry dep in chem_driver')
240 CASE DEFAULT
241 CALL wrf_debug(15,'calling chem_opt=? from chem_driver')
242 END SELECT chem_select
243
244 !
245 !
246 !
247 #if ( NMM_CORE == 1 )
248 k_start = kts
249 k_end = kte
250 ! this should be in seperate routine!!!!!!
251 GRID%SIGMA=1
252 grid%nmm_HYDRO=.FALSE.
253 its=max(its,MYIS1)
254 jts=max(jts,MYJS2)
255 ite=min(ite,MYIE1)
256 jte=min(jte,MYJE2)
257 DO J=jts,jte
258 DO I=its,ite
259 pbl_h(i,j)=grid%nmm_pblh(i,j)
260 !
261 ! PDSL=PD(I,J)*RES(I,J)
262 !-----------------------------------------------------------------------
263 !*** LONG AND SHORTWAVE FLUX AT GROUND SURFACE
264 !-----------------------------------------------------------------------
265 IF(grid%nmm_CZMEAN(I,J)>0.) THEN
266 FACTRS(I,J)=grid%nmm_CZEN(I,J)/grid%nmm_CZMEAN(I,J)
267 ELSE
268 FACTRS(I,J)=0.
269 ENDIF
270 grid%GSW(I,J)=(grid%nmm_RSWIN(I,J)-grid%nmm_RSWOUT(I,J))*grid%nmm_HBM2(I,J)*FACTRS(I,J)
271 P8W(I,KTE+1,J)=grid%nmm_PT
272 grid%XLAT(I,J)=grid%nmm_GLAT(I,J)/DEGRAD
273 grid%XLONG(I,J)=grid%nmm_GLON(I,J)/DEGRAD
274 grid%XLAND(I,J)=grid%nmm_SM(I,J)+1.
275 grid%PSFC(i,j)=grid%nmm_PD(I,J)+grid%nmm_PDTOP+grid%nmm_PT
276 grid%UST(I,J)=grid%nmm_USTAR(I,J)
277 REXNSFC(I,J)=(grid%PSFC(i,j)*1.E-5)**CAPA
278 TSFC(I,J)=grid%nmm_THS(I,J)*REXNSFC(I,J)
279 grid%TSK(I,J)=TSFC(I,J)
280
281 T8W(I,1,J)=TSFC(I,J)
282 P8W(I,KTS,J)=grid%nmm_ETA1(KTS)*grid%nmm_PDTOP+grid%nmm_ETA2(KTS)*grid%nmm_PDSL(i,j)+grid%nmm_PT
283 !
284 !-----------------------------------------------------------------------
285 !*** FILL THE SINGLE-COLUMN INPUT
286 !-----------------------------------------------------------------------
287 !
288 z_at_w(i,kts,j)=grid%nmm_fis(i,j)/g
289 DO K=KTS,KTE
290 vvel(i,k,j)=grid%nmm_w(i,k,j)
291 DPL=grid%nmm_DETA1(K)*grid%nmm_PDTOP+grid%nmm_DETA2(K)*grid%nmm_PDSL(i,j)
292 QL(K)=AMAX1(grid%nmm_Q(I,K,J),EPSQ)
293 PLYR=grid%nmm_AETA1(K)*grid%nmm_PDTOP+grid%nmm_AETA2(K)*grid%nmm_PDSL(i,j)+grid%nmm_PT
294 TL(K)=grid%nmm_T(I,K,J)
295 !
296 ! here rri is inverse density!
297 !
298 RHO(I,K,J)=PLYR/(R_D*TL(K)*(1.+P608*QL(K)))
299 RRI(I,K,J)=1./RHO(i,k,j)
300 T_PHY(I,K,J)=TL(K)
301 moist(I,K,J,P_QV)=QL(K)/(1.-QL(K))
302 P8W(I,K+1,J)=grid%nmm_ETA1(K+1)*grid%nmm_PDTOP+grid%nmm_ETA2(K+1)*grid%nmm_PDSL(i,j)+grid%nmm_PT
303 P_PHY(I,K,J)=PLYR
304 DZ8W(I,K,J)=TL(K)*(P608*QL(K)+1.)*R_D &
305 & *(P8W(I,K,J)-P8W(I,K+1,J)) &
306 & /(P_PHY(I,K,J)*G)
307 if(K.gt.kts)then
308 Z_AT_W(i,k,j)=Z_AT_W(I,k-1,j)+DZ8W(I,K-1,J)
309 ZMID(I,K-1,J)=.5*(Z_AT_W(I,K-1,J)+Z_AT_W(I,K,J))
310 endif
311
312 ENDDO
313 !
314 DO K=KTS+1,KTE
315 T8W(I,K,J)=0.5*(TL(K-1)+TL(K))
316 ENDDO
317 T8W(I,KTE+1,J)=-1.E20
318 ZMID(I,KTE,J)=Z_AT_W(I,KTE,J)
319 !
320 ENDDO
321 ENDDO
322 !-----------------------------------------------------------------------
323 !-----------------------------------------------------------------------
324 !
325 !*** COMPUTE VELOCITY COMPONENTS AT MASS POINTS
326 !
327 !-----------------------------------------------------------------------
328 !$omp parallel do &
329 !$omp& private(i,j,k,rwmsk,wmsk)
330 DO J=MYJS1_P1,MYJE1_P1
331 !
332 DO K=KTS,KTE
333 DO I=MYIS_P1,MYIE_P1
334 WMSK=grid%nmm_VTM(I+grid%nmm_IHE(J),K,J)+grid%nmm_VTM(I+grid%nmm_IHW(J),K,J) &
335 & +grid%nmm_VTM(I,K,J+1)+grid%nmm_VTM(I,K,J-1)
336 IF(WMSK>0.)THEN
337 RWMSK=1./WMSK
338 U_PHY(I,K,J)=(grid%nmm_U(I+grid%nmm_IHE(J),K,J)*grid%nmm_VTM(I+grid%nmm_IHE(J),K,J) &
339 & +grid%nmm_U(I+grid%nmm_IHW(J),K,J)*grid%nmm_VTM(I+grid%nmm_IHW(J),K,J) &
340 & +grid%nmm_U(I,K,J+1)*grid%nmm_VTM(I,K,J+1) &
341 & +grid%nmm_U(I,K,J-1)*grid%nmm_VTM(I,K,J-1))*RWMSK
342 V_PHY(I,K,J)=(grid%nmm_V(I+grid%nmm_IHE(J),K,J)*grid%nmm_VTM(I+grid%nmm_IHE(J),K,J) &
343 & +grid%nmm_V(I+grid%nmm_IHW(J),K,J)*grid%nmm_VTM(I+grid%nmm_IHW(J),K,J) &
344 & +grid%nmm_V(I,K,J+1)*grid%nmm_VTM(I,K,J+1) &
345 & +grid%nmm_V(I,K,J-1)*grid%nmm_VTM(I,K,J-1))*RWMSK
346 ELSE
347 U_PHY(I,K,J)=0.
348 V_PHY(I,K,J)=0.
349 ENDIF
350 ENDDO
351 ENDDO
352 ENDDO
353
354
355
356 #endif
357
358 do nv=1,num_chem
359 do j=jps,jpe
360 do k=kps,kpe
361 do i=ips,ipe
362 chem(i,k,j,nv)=max(chem(i,k,j,nv),chem_minval)
363 enddo
364 enddo
365 enddo
366 enddo
367 select case (config_flags%chem_opt)
368 case (RADM2SORG, RADM2SORG_KPP,RACMSORG,RACMSORG_KPP)
369 do j=jps,jpe
370 do k=kps,kpe
371 do i=ips,ipe
372 if(chem(i,k,j,p_nu0).lt.1.e07) then
373 chem(i,k,j,p_nu0)=1.e7
374 endif
375 enddo
376 enddo
377 enddo
378 end select
379
380
381 vdrog3=0.
382 #if ( EM_CORE == 1 )
383 do j=jps,min(jde-1,jpe)
384 do k=kps,kpe
385 do i=ips,min(ide-1,ipe)
386 rri(i,k,j)=grid%em_alt(i,k,j)
387 vvel(i,k,j)=grid%em_w_2(i,k,j)
388 zmid(i,k,j)=grid%em_z(i,k,j)
389 enddo
390 enddo
391 enddo
392 do j=jps,min(jde-1,jpe)
393 do i=ips,min(ide-1,ipe)
394 pbl_h(i,j)=grid%pblh(i,j)
395 enddo
396 enddo
397
398 !$OMP PARALLEL DO &
399 !$OMP PRIVATE ( ij, its, ite, jts, jte )
400 chem_tile_loop_1: DO ij = 1 , grid%num_tiles
401 its = max(grid%i_start(ij),ids+1)
402 ite = min(grid%i_end(ij),ide-2)
403 jts = max(grid%j_start(ij),jds+1)
404 jte = min(grid%j_end(ij),jde-2)
405 kts=k_start
406 kte=k_end
407 #endif
408 !
409 ! no time average available in first half hour
410 !
411 if( config_flags%chem_conv_tr>0)then
412 if(ktau.le.stepave)then
413 do j=jts,jte
414 do i=its,ite
415 grid%raincv_b(i,j)=grid%raincv(i,j)
416 enddo
417 enddo
418 endif
419 !
420 ! build time average, and stored in raincv_b to be used by convective transport routine
421 !
422 if(mod(ktau,stepave).ne.0)then
423 do j=jts,jte
424 do i=its,ite
425 grid%raincv_a(i,j)=grid%raincv_a(i,j)+grid%raincv(i,j)
426 enddo
427 enddo
428 else if(mod(ktau,stepave).eq.0)then
429 do j=jts,jte
430 do i=its,ite
431 grid%raincv_b(i,j)=grid%raincv_a(i,j)/float(stepave)
432 grid%raincv_a(i,j)=0.
433 enddo
434 enddo
435 endif
436 endif ! chem_conv_tr
437 !
438 ! do the same for convwective parameterization cloud water mix ratio,
439 ! currently only for cu_physics=3, used by both photolysis and atmospheric radiation
440 !
441 if( config_flags%cu_physics == 3 )then
442 if(ktau.le.stepave)then
443 do j=jts,jte
444 do k=kts,kte
445 do i=its,ite
446 grid%gd_cloud_b(i,k,j)=grid%gd_cloud(i,k,j)
447 grid%gd_cloud2_b(i,k,j)=grid%gd_cloud2(i,k,j)
448 enddo
449 enddo
450 enddo
451 endif ! stepave
452 !
453 !
454 !
455 if(mod(ktau,stepave).ne.0)then
456 do j=jts,jte
457 do k=kts,kte
458 do i=its,ite
459 grid%gd_cloud_a(i,k,j)=grid%gd_cloud_a(i,k,j)+grid%gd_cloud(i,k,j)
460 grid%gd_cloud2_a(i,k,j)=grid%gd_cloud2_a(i,k,j)+grid%gd_cloud2(i,k,j)
461 enddo
462 enddo
463 enddo
464 else if(mod(ktau,stepave).eq.0)then
465 do j=jts,jte
466 do k=kts,kte
467 do i=its,ite
468 grid%gd_cloud_b(i,k,j)=grid%gd_cloud_a(i,k,j)/float(stepave)
469 grid%gd_cloud_a(i,k,j)=0.
470 grid%gd_cloud2_b(i,k,j)=grid%gd_cloud2_a(i,k,j)/float(stepave)
471 grid%gd_cloud2_a(i,k,j)=0.
472 enddo
473 enddo
474 enddo
475 endif !stepave
476 endif ! cu_physics
477 !
478 !
479 #if ( EM_CORE == 1 )
480 CALL wrf_debug ( 15 , ' call chem_prep' )
481 CALL chem_prep ( config_flags, &
482 grid%em_u_2, grid%em_v_2, grid%em_p, grid%em_pb, &
483 grid%em_alt,grid%em_ph_2, grid%em_phb, grid%em_t_2, &
484 moist, num_3d_m, rho, &
485 p_phy, u_phy, v_phy, &
486 p8w, t_phy, t8w, grid%em_z, z_at_w, &
487 dz8w, grid%em_fnm, grid%em_fnp, &
488 ids, ide, jds, jde, kds, kde, &
489 ims, ime, jms, jme, kms, kme, &
490 its,ite,jts,jte, &
491 k_start, k_end )
492 #endif
493
494 #if (defined(CHEM_DBG_I) && defined(CHEM_DBG_J) && defined(CHEM_DBG_K))
495 if( (its <= CHEM_DBG_I .and. ite >= CHEM_DBG_I) .and. &
496 (jts <= CHEM_DBG_J .and. jte >= CHEM_DBG_J) .and. &
497 (k_start <= CHEM_DBG_K .and. k_end >= CHEM_DBG_K) ) then
498 call wrf_debug(15,"calling chem_dbg at top of chem_driver")
499 call chem_dbg(CHEM_DBG_I,CHEM_DBG_J,CHEM_DBG_K,grid%dt,ktau, &
500 dz8w,t_phy,p_phy,rho,chem, &
501 grid%e_so2,grid%e_no,grid%e_co,grid%e_eth,grid%e_hc3,grid%e_hc5, &
502 grid%e_hc8,grid%e_xyl,grid%e_ol2,grid%e_olt, &
503 grid%e_oli,grid%e_tol,grid%e_csl,grid%e_hcho,grid%e_ald,grid%e_ket, &
504 grid%e_ora2,grid%e_nh3,grid%e_pm10,grid%e_pm25,grid%e_pm25i, &
505 grid%e_pm25j,grid%e_eci,grid%e_ecj,grid%e_orgi,grid%e_orgj, &
506 grid%e_no2,grid%e_ch3oh,grid%e_c2h5oh,grid%e_iso, &
507 grid%e_so4j,grid%e_so4c,grid%e_no3j,grid%e_no3c,grid%e_orgc,grid%e_ecc,&
508 ids,ide, jds,jde, kds,kde, &
509 ims,ime, jms,jme, kms,kme, &
510 its,ite, jts,jte, k_start,k_end, &
511 config_flags%kemit )
512 end if
513 #endif
514
515 !--- emissions
516 if(config_flags%emiss_inpt_opt > 0)then
517 call wrf_debug(15,'calling emissions driver')
518 call emissions_driver(grid%id,ktau,grid%dt,grid%DX, &
519 config_flags, grid%stepbioe, &
520 grid%gmt,grid%julday,rri,t_phy,moist,p8w,t8w, &
521 grid%e_bio,p_phy,chem,rho,dz8w,grid%ne_area, &
522 grid%e_iso,grid%e_so2,grid%e_no,grid%e_co,grid%e_eth,grid%e_hc3, &
523 grid%e_hc5,grid%e_hc8,grid%e_xyl,grid%e_ol2,grid%e_olt, &
524 grid%e_oli,grid%e_tol,grid%e_csl,grid%e_hcho,grid%e_ald,grid%e_ket, &
525 grid%e_ora2,grid%e_pm25,grid%e_pm10,grid%e_nh3, &
526 grid%e_pm25i,grid%e_pm25j,grid%e_eci,grid%e_ecj,grid%e_orgi, &
527 grid%e_orgj,grid%e_no2,grid%e_ch3oh, &
528 grid%e_c2h5oh,grid%e_so4j,grid%e_so4c,grid%e_no3j,grid%e_no3c, &
529 grid%e_orgc,grid%e_ecc, &
530 grid%u10,grid%v10,grid%ivgtyp,grid%gsw,grid%vegfra,grid%rmol, &
531 grid%ust,grid%znt, &
532 grid%xland,grid%xlat,grid%xlong, &
533 z_at_w, &
534 grid%sebio_iso,grid%sebio_oli,grid%sebio_api,grid%sebio_lim, &
535 grid%sebio_xyl,grid%sebio_hc3,grid%sebio_ete,grid%sebio_olt, &
536 grid%sebio_ket,grid%sebio_ald,grid%sebio_hcho,grid%sebio_eth, &
537 grid%sebio_ora2,grid%sebio_co,grid%sebio_nr, &
538 grid%noag_grow,grid%noag_nongrow,grid%nononag,grid%slai, &
539 grid%ebio_iso,grid%ebio_oli,grid%ebio_api,grid%ebio_lim,grid%ebio_xyl, &
540 grid%ebio_hc3,grid%ebio_ete,grid%ebio_olt,grid%ebio_ket,grid%ebio_ald, &
541 grid%ebio_hcho,grid%ebio_eth,grid%ebio_ora2,grid%ebio_co,grid%ebio_nr, &
542 grid%ebio_no,numgas, &
543 ids,ide, jds,jde, kds,kde, &
544 ims,ime, jms,jme, kms,kme, &
545 its,ite,jts,jte,kts,kte)
546
547 #if (defined(CHEM_DBG_I) && defined(CHEM_DBG_J) && defined(CHEM_DBG_K))
548 if( (its <= CHEM_DBG_I .and. ite >= CHEM_DBG_I) .and. &
549 (jts <= CHEM_DBG_J .and. jte >= CHEM_DBG_J) .and. &
550 (k_start <= CHEM_DBG_K .and. k_end >= CHEM_DBG_K) ) then
551 call wrf_debug(15,'calling chem_dbg after emissions_driver')
552 call chem_dbg(CHEM_DBG_I,CHEM_DBG_J,CHEM_DBG_K,grid%dt,ktau, &
553 dz8w,t_phy,p_phy,rho,chem, &
554 grid%e_so2,grid%e_no,grid%e_co,grid%e_eth,grid%e_hc3,grid%e_hc5, &
555 grid%e_hc8,grid%e_xyl,grid%e_ol2,grid%e_olt, &
556 grid%e_oli,grid%e_tol,grid%e_csl,grid%e_hcho,grid%e_ald,grid%e_ket, &
557 grid%e_ora2,grid%e_nh3,grid%e_pm10,grid%e_pm25,grid%e_pm25i, &
558 grid%e_pm25j,grid%e_eci,grid%e_ecj,grid%e_orgi,grid%e_orgj, &
559 grid%e_no2,grid%e_ch3oh,grid%e_c2h5oh,grid%e_iso, &
560 grid%e_so4j,grid%e_so4c,grid%e_no3j,grid%e_no3c,grid%e_orgc,grid%e_ecc,&
561 ids,ide, jds,jde, kds,kde, &
562 ims,ime, jms,jme, kms,kme, &
563 its,ite, jts,jte, k_start,k_end, &
564 config_flags%kemit )
565 end if
566 #endif
567 endif
568
569 !
570 ! calculate photolysis rates
571 !o
572 ! print *,'stepphot = ',grid%stepphot
573 if((ktau.eq.1 .or. mod(ktau,grid%stepphot).eq.0) &
574 .and. config_flags%chem_opt /= CHEM_TRACER) then
575 call wrf_debug(15,'calling photolysis driver')
576 call photolysis_driver (grid%id,ktau,grid%dt,config_flags,haveaer, &
577 grid%gmt,grid%julday,t_phy,moist,grid%aerwrf,p8w,t8w,p_phy, &
578 chem,rho,dz8w,grid%xlat,grid%xlong, &
579 z_at_w, &
580 grid%gd_cloud_b,grid%gd_cloud2_b, &
581 grid%ph_macr,grid%ph_o31d,grid%ph_o33p,grid%ph_no2,grid%ph_no3o2, &
582 grid%ph_no3o,grid%ph_hno2,grid%ph_hno3,grid%ph_hno4,grid%ph_h2o2, &
583 grid%ph_ch2or,grid%ph_ch2om,grid%ph_ch3cho,grid%ph_ch3coch3, &
584 grid%ph_ch3coc2h5,grid%ph_hcocho,grid%ph_ch3cocho, &
585 grid%ph_hcochest,grid%ph_ch3o2h,grid%ph_ch3coo2h,grid%ph_ch3ono2, &
586 grid%ph_hcochob,grid%ph_n2o5,grid%ph_o2, &
587 grid%tauaer1,grid%tauaer2,grid%tauaer3,grid%tauaer4, &
588 grid%gaer1,grid%gaer2,grid%gaer3,grid%gaer4, &
589 grid%waer1,grid%waer2,grid%waer3,grid%waer4, &
590 grid%pm2_5_dry,grid%pm2_5_water,grid%uvrad, &
591 ids,ide, jds,jde, kds,kde, &
592 ims,ime, jms,jme, kms,kme, &
593 its,ite,jts,jte,kts,kte)
594
595 #if (defined(CHEM_DBG_I) && defined(CHEM_DBG_J) && defined(CHEM_DBG_K))
596 if( (its <= CHEM_DBG_I .and. ite >= CHEM_DBG_I) .and. &
597 (jts <= CHEM_DBG_J .and. jte >= CHEM_DBG_J) .and. &
598 (k_start <= CHEM_DBG_K .and. k_end >= CHEM_DBG_K) ) then
599 call wrf_debug(15,'calling chem_dbg after photolysis_driver')
600 call chem_dbg(CHEM_DBG_I,CHEM_DBG_J,CHEM_DBG_K,grid%dt,ktau, &
601 dz8w,t_phy,p_phy,rho,chem, &
602 grid%e_so2,grid%e_no,grid%e_co,grid%e_eth,grid%e_hc3,grid%e_hc5, &
603 grid%e_hc8,grid%e_xyl,grid%e_ol2,grid%e_olt, &
604 grid%e_oli,grid%e_tol,grid%e_csl,grid%e_hcho,grid%e_ald,grid%e_ket, &
605 grid%e_ora2,grid%e_nh3,grid%e_pm10,grid%e_pm25,grid%e_pm25i, &
606 grid%e_pm25j,grid%e_eci,grid%e_ecj,grid%e_orgi,grid%e_orgj, &
607 grid%e_no2,grid%e_ch3oh,grid%e_c2h5oh,grid%e_iso, &
608 grid%e_so4j,grid%e_so4c,grid%e_no3j,grid%e_no3c,grid%e_orgc,grid%e_ecc,&
609 ids,ide, jds,jde, kds,kde, &
610 ims,ime, jms,jme, kms,kme, &
611 its,ite, jts,jte, k_start,k_end, &
612 config_flags%kemit, &
613 grid%ph_macr,grid%ph_o31d,grid%ph_o33p,grid%ph_no2,grid%ph_no3o2, &
614 grid%ph_no3o,grid%ph_hno2,grid%ph_hno3,grid%ph_hno4,grid%ph_h2o2, &
615 grid%ph_ch2or,grid%ph_ch2om,grid%ph_ch3cho,grid%ph_ch3coch3, &
616 grid%ph_ch3coc2h5,grid%ph_hcocho,grid%ph_ch3cocho, &
617 grid%ph_hcochest,grid%ph_ch3o2h,grid%ph_ch3coo2h, &
618 grid%ph_ch3ono2,grid%ph_hcochob,grid%ph_n2o5,grid%ph_o2 &
619 )
620 end if
621 #endif
622 endif
623 !
624 ! do vertical mixing with dry deposition
625 ! 28-jun-2005 rce - added vertmix_onoff to turn vertical mixing on/off
626 !
627 if (config_flags%vertmix_onoff>0) then
628 if (ktau.gt.2) then
629 call wrf_debug(15,'calling dry_deposition_driver')
630 call dry_dep_driver(grid%id,ktau,grid%dt,config_flags, &
631 grid%gmt,grid%julday,t_phy,moist,scalar,p8w,t8w,vvel, &
632 rri,p_phy,chem,rho,dz8w,grid%exch_h, &
633 grid%cldfra, grid%cldfra_old, &
634 grid%ccn1, grid%ccn2, grid%ccn3, grid%ccn4, grid%ccn5, grid%ccn6, &
635 grid%qndropsource,grid%ivgtyp,grid%tsk,grid%gsw,grid%vegfra,pbl_h, &
636 grid%rmol,grid%ust,grid%znt,grid%xlat,grid%xlong, &
637 zmid,z_at_w, &
638 grid%h2oaj,grid%h2oai,grid%nu3,grid%ac3,grid%cor3,grid%asulf, &
639 grid%ahno3,grid%anh3,grid%cvaro1,grid%cvaro2,grid%cvalk1,grid%cvole1,&
640 grid%cvapi1,grid%cvapi2,grid%cvlim1,grid%cvlim2,grid%dep_vel_o3, &
641 grid%e_co,config_flags%kemit,numgas, &
642 ids,ide, jds,jde, kds,kde, &
643 ims,ime, jms,jme, kms,kme, &
644 its,ite,jts,jte,kts,kte)
645 ! k_start , min(k_end,kde-ksubt) )
646 end if
647
648 #if (defined(CHEM_DBG_I) && defined(CHEM_DBG_J) && defined(CHEM_DBG_K))
649 if( (its <= CHEM_DBG_I .and. ite >= CHEM_DBG_I) .and. &
650 (jts <= CHEM_DBG_J .and. jte >= CHEM_DBG_J) .and. &
651 (k_start <= CHEM_DBG_K .and. k_end >= CHEM_DBG_K) ) then
652 call wrf_debug(15,'calling chem_dbg after dry_deposition_driver')
653 call chem_dbg(CHEM_DBG_I,CHEM_DBG_J,CHEM_DBG_K,grid%dt,ktau, &
654 dz8w,t_phy,p_phy,rho,chem, &
655 grid%e_so2,grid%e_no,grid%e_co,grid%e_eth,grid%e_hc3,grid%e_hc5, &
656 grid%e_hc8,grid%e_xyl,grid%e_ol2,grid%e_olt, &
657 grid%e_oli,grid%e_tol,grid%e_csl,grid%e_hcho,grid%e_ald,grid%e_ket, &
658 grid%e_ora2,grid%e_nh3,grid%e_pm10,grid%e_pm25,grid%e_pm25i, &
659 grid%e_pm25j,grid%e_eci,grid%e_ecj,grid%e_orgi,grid%e_orgj, &
660 grid%e_no2,grid%e_ch3oh,grid%e_c2h5oh,grid%e_iso, &
661 grid%e_so4j,grid%e_so4c,grid%e_no3j,grid%e_no3c,grid%e_orgc,grid%e_ecc,&
662 ids,ide, jds,jde, kds,kde, &
663 ims,ime, jms,jme, kms,kme, &
664 its,ite, jts,jte, k_start,k_end, &
665 config_flags%kemit, &
666 )
667 end if
668 #endif
669 end if
670
671
672 !
673 ! convective transport/wet deposition
674 !
675 !
676 !
677 if( config_flags%cu_physics>0 .and. config_flags%chem_conv_tr>0)then
678 call wrf_debug(15,'calling conv transport')
679 call grelldrvct(grid%DT,ktau,grid%DX,grid%id,config_flags, &
680 rho,grid%RAINCV_B,chem, &
681 U_phy,V_phy,t_phy,moist,dz8w, &
682 p_phy,XLV,CP,G,r_v, &
683 z_at_w, &
684 grid%cu_co_ten, &
685 num_chem, &
686 ids,ide, jds,jde, kds,kde, &
687 ims,ime, jms,jme, kms,kme, &
688 its,ite,jts,jte,kts,kte)
689 ! k_start , min(k_end,kde-1) )
690 end if
691 !
692 !
693 !
694 !
695 n2o5_het=0.
696 ! Calculate rate of n2o5 hydrolysis
697 call wrf_debug(15,'calling calc_het_n2o5')
698
699
700
701 !
702 ! For the chemistry tracer mode, only emissions and vertical mixing are done.
703 ! So, finish any remaining tiles and then skip to the end of chem_driver.
704 !
705 kts=k_start
706 kte=k_end
707 if((ktau.eq.1.or.mod(ktau,grid%stepchem).eq.0) &
708 .and. config_flags%chem_opt /= CHEM_TRACER) then
709 dtstepc=grid%dt*float(grid%stepchem)
710 ktauc=max(ktau/grid%stepchem,1)
711 if(ktau.eq.1)dtstepc=grid%dt
712 if(config_flags%gaschem_onoff>0)then
713 !
714 ! chemical mechanisms
715 !
716 call mechanism_driver(grid%id,ktau,grid%dt,ktauc,dtstepc,config_flags, &
717 grid%gmt,grid%julday,t_phy,moist,p8w,t8w, &
718 p_phy,chem,rho,dz8w, &
719 zmid,z_at_w, &
720 vdrog3,vcsulf_old, &
721 grid%ph_macr,grid%ph_o31d,grid%ph_o33p,grid%ph_no2,grid%ph_no3o2, &
722 grid%ph_no3o,grid%ph_hno2,grid%ph_hno3,grid%ph_hno4,grid%ph_h2o2, &
723 grid%ph_ch2or,grid%ph_ch2om,grid%ph_ch3cho,grid%ph_ch3coch3, &
724 grid%ph_ch3coc2h5,grid%ph_hcocho,grid%ph_ch3cocho,grid%ph_hcochest, &
725 grid%ph_ch3o2h,grid%ph_ch3coo2h,grid%ph_ch3ono2,grid%ph_hcochob, &
726 grid%ph_n2o5,grid%ph_o2,grid%addt,grid%addx,grid%addc,grid%etep, &
727 grid%oltp,grid%olip,grid%cslp,grid%limp,grid%hc5p,grid%hc8p,grid%tolp, &
728 grid%xylp,grid%apip,grid%isop,grid%hc3p,grid%ethp,grid%o3p,grid%tco3, &
729 grid%mo2,grid%o1d,grid%olnn,grid%rpho,grid%xo2, &
730 grid%ketp,grid%olnd, &
731 ids,ide, jds,jde, kds,kde, &
732 ims,ime, jms,jme, kms,kme, &
733 its,ite,jts,jte,kts,kte )
734
735
736 !cms++
737 !
738
739
740 #ifdef WRF_KPP
741 CALL wrf_debug(15,'calling kpp_mechanism_driver')
742
743
744 CALL kpp_mechanism_driver (chem, &
745 grid%id,dtstepc,config_flags, &
746 p_phy,t_phy,rho,moist, &
747 vdrog3, ldrog, &
748 n2o5_het, &
749 !
750 #include <call_to_kpp_mech_drive.inc>
751 !
752 ids,ide, jds,jde, kds,kde, &
753 ims,ime, jms,jme, kms,kme, &
754 its,ite,jts,jte,kts,kte)
755 ! k_start , min(k_end,kde-ksubt) )
756
757
758 !cms--
759 !
760 #endif
761 #if (defined(CHEM_DBG_I) && defined(CHEM_DBG_J) && defined(CHEM_DBG_K))
762 if( (its <= CHEM_DBG_I .and. ite >= CHEM_DBG_I) .and. &
763 (jts <= CHEM_DBG_J .and. jte >= CHEM_DBG_J) .and. &
764 (k_start <= CHEM_DBG_K .and. k_end >= CHEM_DBG_K) ) then
765 call wrf_debug(15,'calling chem_dbg after mechanism_driver')
766 call chem_dbg(CHEM_DBG_I,CHEM_DBG_J,CHEM_DBG_K,grid%dt,ktau, &
767 dz8w,t_phy,p_phy,rho,chem, &
768 grid%e_so2,grid%e_no,grid%e_co,grid%e_eth,grid%e_hc3,grid%e_hc5, &
769 grid%e_hc8,grid%e_xyl,grid%e_ol2,grid%e_olt, &
770 grid%e_oli,grid%e_tol,grid%e_csl,grid%e_hcho,grid%e_ald,grid%e_ket, &
771 grid%e_ora2,grid%e_nh3,grid%e_pm10,grid%e_pm25,grid%e_pm25i, &
772 grid%e_pm25j,grid%e_eci,grid%e_ecj,grid%e_orgi,grid%e_orgj, &
773 grid%e_no2,grid%e_ch3oh,grid%e_c2h5oh,grid%e_iso, &
774 grid%e_so4j,grid%e_so4c,grid%e_no3j,grid%e_no3c,grid%e_orgc,grid%e_ecc,&
775 ids,ide, jds,jde, kds,kde, &
776 ims,ime, jms,jme, kms,kme, &
777 its,ite, jts,jte, k_start,k_end, &
778 config_flags%kemit, &
779 grid%ph_macr,grid%ph_o31d,grid%ph_o33p,grid%ph_no2,grid%ph_no3o2, &
780 grid%ph_no3o,grid%ph_hno2,grid%ph_hno3,grid%ph_hno4,grid%ph_h2o2, &
781 grid%ph_ch2or,grid%ph_ch2om,grid%ph_ch3cho,grid%ph_ch3coch3, &
782 grid%ph_ch3coc2h5,grid%ph_hcocho,grid%ph_ch3cocho, &
783 grid%ph_hcochest,grid%ph_ch3o2h,grid%ph_ch3coo2h, &
784 grid%ph_ch3ono2,grid%ph_hcochob,grid%ph_n2o5,grid%ph_o2 &
785 )
786 end if
787 #endif
788 endif
789
790
791
792 ! allocate gas_aqfrac if either cldchem or wetscav is on
793 if ( (config_flags%cldchem_onoff > 0) .or. &
794 (config_flags%wetscav_onoff > 0) ) then
795 numgas_aqfrac = max( numgas, 1 )
796 allocate( gas_aqfrac( grid%sm31:grid%em31, grid%sm32:grid%em32, &
797 grid%sm33:grid%em33, numgas_aqfrac ) )
798 gas_aqfrac(:,:,:,:) = 0.0
799 end if
800
801 !
802 ! now do cloud chemistry
803 !
804 if (config_flags%cldchem_onoff > 0) then
805
806 call cloudchem_driver( &
807 grid%id, ktau, ktauc, grid%dt, dtstepc, config_flags, &
808 t_phy, p_phy, rho, rri, &
809 moist, grid%cldfra, grid%ph_no2, &
810 chem, gas_aqfrac, numgas_aqfrac, &
811 ids,ide, jds,jde, kds,kde, &
812 ims,ime, jms,jme, kms,kme, &
813 its,ite, jts,jte, kts,kte )
814
815 endif
816
817
818 !
819 ! now do aerosols
820 !
821 if(config_flags%aerchem_onoff>0)then
822 call aerosols_driver (grid%id,ktau,grid%dt,ktauc,config_flags,dtstepc, &
823 rri,t_phy,moist,grid%aerwrf,p8w,t8w, &
824 p_phy,chem,rho,dz8w, &
825 zmid,z_at_w, &
826 grid%h2oaj,grid%h2oai,grid%nu3,grid%ac3,grid%cor3,grid%asulf, &
827 grid%ahno3,grid%anh3,grid%cvaro1,grid%cvaro2,grid%cvalk1,grid%cvole1, &
828 grid%cvapi1,grid%cvapi2,grid%cvlim1,grid%cvlim2,vcsulf_old, &
829 grid%e_pm25i,grid%e_pm25j,grid%e_eci,grid%e_ecj,grid%e_orgi, &
830 grid%e_orgj,grid%e_pm10,grid%e_so4i,grid%e_so4j,grid%e_no3i,grid%e_no3j,&
831 vdrog3, &
832 ids,ide, jds,jde, kds,kde, &
833 ims,ime, jms,jme, kms,kme, &
834 its,ite,jts,jte,kts,kte)
835
836 #if (defined(CHEM_DBG_I) && defined(CHEM_DBG_J) && defined(CHEM_DBG_K))
837 if( (its <= CHEM_DBG_I .and. ite >= CHEM_DBG_I) .and. &
838 (jts <= CHEM_DBG_J .and. jte >= CHEM_DBG_J) .and. &
839 (k_start <= CHEM_DBG_K .and. k_end >= CHEM_DBG_K) ) then
840 call wrf_debug(15,'calling chem_dbg after aerosols_driver')
841 call chem_dbg(CHEM_DBG_I,CHEM_DBG_J,CHEM_DBG_K,grid%dt,ktau, &
842 dz8w,t_phy,p_phy,rho,chem, &
843 grid%e_so2,grid%e_no,grid%e_co,grid%e_eth,grid%e_hc3,grid%e_hc5, &
844 grid%e_hc8,grid%e_xyl,grid%e_ol2,grid%e_olt, &
845 grid%e_oli,grid%e_tol,grid%e_csl,grid%e_hcho,grid%e_ald,grid%e_ket, &
846 grid%e_ora2,grid%e_nh3,grid%e_pm10,grid%e_pm25,grid%e_pm25i, &
847 grid%e_pm25j,grid%e_eci,grid%e_ecj,grid%e_orgi,grid%e_orgj, &
848 grid%e_no2,grid%e_ch3oh,grid%e_c2h5oh,grid%e_iso, &
849 grid%e_so4j,grid%e_so4c,grid%e_no3j,grid%e_no3c,grid%e_orgc,grid%e_ecc,&
850 ids,ide, jds,jde, kds,kde, &
851 ims,ime, jms,jme, kms,kme, &
852 its,ite, jts,jte, k_start,k_end, &
853 config_flags%kemit,
854 grid%ph_macr,grid%ph_o31d,grid%ph_o33p,grid%ph_no2,grid%ph_no3o2, &
855 grid%ph_no3o,grid%ph_hno2,grid%ph_hno3,grid%ph_hno4,grid%ph_h2o2, &
856 grid%ph_ch2or,grid%ph_ch2om,grid%ph_ch3cho,grid%ph_ch3coch3, &
857 grid%ph_ch3coc2h5,grid%ph_hcocho,grid%ph_ch3cocho, &
858 grid%ph_hcochest,grid%ph_ch3o2h,grid%ph_ch3coo2h, &
859 grid%ph_ch3ono2,grid%ph_hcochob,grid%ph_n2o5,grid%ph_o2 &
860 )
861 end if
862 #endif
863 endif
864
865
866 !
867 ! now do wet removal
868 !
869 if (config_flags%wetscav_onoff > 0) then
870 call wetscav_driver (grid%id,ktau,grid%dt,ktauc,config_flags,dtstepc, &
871 rri,t_phy,moist,p8w,t8w, &
872 p_phy,chem,rho,grid%cldfra, &
873 grid%qlsink,grid%precr,grid%preci,grid%precs,grid%precg, &
874 gas_aqfrac, numgas_aqfrac, &
875 grid%h2oaj,grid%h2oai,grid%nu3,grid%ac3,grid%cor3, &
876 grid%asulf,grid%ahno3,grid%anh3,grid%cvaro1,grid%cvaro2, &
877 grid%cvalk1,grid%cvole1,grid%cvapi1,grid%cvapi2, &
878 grid%cvlim1,grid%cvlim2, &
879 ids,ide, jds,jde, kds,kde, &
880 ims,ime, jms,jme, kms,kme, &
881 grid%i_start(ij), min(grid%i_end(ij),ide-1), &
882 grid%j_start(ij), min(grid%j_end(ij),jde-1), &
883 k_start , min(k_end,kde-ksubt) )
884
885 endif
886
887 if (numgas_aqfrac > 0) then
888 deallocate( gas_aqfrac )
889 numgas_aqfrac = 0
890 end if
891
892 end if !Chemistry time step check
893 !
894 ! Sum up the aerosol mass for radiation and diagnostic purposes. Unlike
895 ! aerosol_driver, which is called every dtchem, this must be done every
896 ! time step because of emissions and deposition.
897 !
898 call sum_pm_driver ( config_flags, &
899 rri, chem, grid%h2oaj, grid%h2oai, &
900 grid%pm2_5_dry, grid%pm2_5_water, grid%pm2_5_dry_ec, grid%pm10, &
901 ids,ide, jds,jde, kds,kde, &
902 ims,ime, jms,jme, kms,kme, &
903 its,ite, jts,jte, k_start,k_end )
904
905 ! Fill top level to prevent spurious interpolation results (no extrapolation)
906 ! should this be done on halo too????
907 do nv=1,num_chem
908 do j=jts,jte
909 do i=its,ite
910 chem(i,kte,j,nv)=chem(i,kte-1,j,nv)
911 enddo
912 enddo
913 enddo
914 call wrf_debug(15,'done tileloop in chem_driver')
915 # if ( EM_CORE == 1 )
916 END DO chem_tile_loop_1
917 #endif
918
919
920 END subroutine chem_driver