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      CASE (RACMPM_KPP)
208        CALL wrf_debug(15,'calling racmpm_kpp from chem_driver')
209        haveaer = .false.
210      CASE (RACM_MIM_KPP)
211        CALL wrf_debug(15,'calling racm_mim_kpp from chem_driver')
212        haveaer = .false.
213      CASE (RACMSORG)
214        CALL wrf_debug(15,'calling racmsorg aerosols driver from chem_driver')
215        haveaer = .true.
216      CASE (RACMSORG_KPP)
217        CALL wrf_debug(15,'calling racmsorg_kpp aerosols driver from chem_driver')
218        haveaer = .false.
219      CASE (RACMSORG_AQ)
220        CALL wrf_debug(15,'calling racmsorg_aq aerosols driver from chem_driver')
221        haveaer = .true.
222      CASE (CBMZ)
223        CALL wrf_debug(15,'calling cbmz from chem_driver')
224        haveaer = .false.
225      CASE (CBMZ_BB)
226        CALL wrf_debug(15,'calling cbmz_bb from chem_driver')
227        haveaer = .false.
228      CASE (CBMZ_MOSAIC_4BIN)
229        CALL wrf_debug(15,'calling cbmz_mosaic_4bin aerosols driver from chem_driver')
230        haveaer = .true.
231      CASE (CBMZ_MOSAIC_8BIN)
232        CALL wrf_debug(15,'calling cbmz_mosaic_8bin aerosols driver from chem_driver')
233        haveaer = .true.
234      CASE (CBMZ_MOSAIC_4BIN_AQ)
235        CALL wrf_debug(15,'calling cbmz_mosaic_4bin_aq aerosols driver from chem_driver')
236        haveaer = .true.
237      CASE (CBMZ_MOSAIC_8BIN_AQ)
238        CALL wrf_debug(15,'calling cbmz_mosaic_8bin_aq aerosols driver from chem_driver')
239        haveaer = .true.
240     CASE (CHEM_TRACER)
241        CALL wrf_debug(15,'tracer mode: only doing emissions and dry dep in chem_driver')
242      CASE DEFAULT
243        CALL wrf_debug(15,'calling chem_opt=? from chem_driver')
244    END SELECT chem_select                              
245 
246 !
247 !
248 !
249 #if ( NMM_CORE == 1 )
250   k_start         = kts
251   k_end           = kte
252 ! this should be in seperate routine!!!!!!
253       GRID%SIGMA=1
254       grid%nmm_HYDRO=.FALSE.
255       its=max(its,MYIS1)
256       jts=max(jts,MYJS2)
257       ite=min(ite,MYIE1)
258       jte=min(jte,MYJE2)
259       DO J=jts,jte
260       DO I=its,ite
261         pbl_h(i,j)=grid%nmm_pblh(i,j)
262 !
263 !       PDSL=PD(I,J)*RES(I,J)
264 !-----------------------------------------------------------------------
265 !*** LONG AND SHORTWAVE FLUX AT GROUND SURFACE
266 !-----------------------------------------------------------------------
267         IF(grid%nmm_CZMEAN(I,J)>0.) THEN
268           FACTRS(I,J)=grid%nmm_CZEN(I,J)/grid%nmm_CZMEAN(I,J)
269         ELSE
270           FACTRS(I,J)=0.
271         ENDIF
272         grid%GSW(I,J)=(grid%nmm_RSWIN(I,J)-grid%nmm_RSWOUT(I,J))*grid%nmm_HBM2(I,J)*FACTRS(I,J)
273         P8W(I,KTE+1,J)=grid%nmm_PT
274         grid%XLAT(I,J)=grid%nmm_GLAT(I,J)/DEGRAD
275         grid%XLONG(I,J)=grid%nmm_GLON(I,J)/DEGRAD
276         grid%XLAND(I,J)=grid%nmm_SM(I,J)+1.
277         grid%PSFC(i,j)=grid%nmm_PD(I,J)+grid%nmm_PDTOP+grid%nmm_PT
278         grid%UST(I,J)=grid%nmm_USTAR(I,J)
279         REXNSFC(I,J)=(grid%PSFC(i,j)*1.E-5)**CAPA
280         TSFC(I,J)=grid%nmm_THS(I,J)*REXNSFC(I,J)
281         grid%TSK(I,J)=TSFC(I,J)
282 
283         T8W(I,1,J)=TSFC(I,J) 
284         P8W(I,KTS,J)=grid%nmm_ETA1(KTS)*grid%nmm_PDTOP+grid%nmm_ETA2(KTS)*grid%nmm_PDSL(i,j)+grid%nmm_PT
285 !       
286 !-----------------------------------------------------------------------
287 !***  FILL THE SINGLE-COLUMN INPUT
288 !-----------------------------------------------------------------------
289 !
290         z_at_w(i,kts,j)=grid%nmm_fis(i,j)/g
291         DO K=KTS,KTE
292            vvel(i,k,j)=grid%nmm_w(i,k,j)
293            DPL=grid%nmm_DETA1(K)*grid%nmm_PDTOP+grid%nmm_DETA2(K)*grid%nmm_PDSL(i,j)
294           QL(K)=AMAX1(grid%nmm_Q(I,K,J),EPSQ)
295           PLYR=grid%nmm_AETA1(K)*grid%nmm_PDTOP+grid%nmm_AETA2(K)*grid%nmm_PDSL(i,j)+grid%nmm_PT
296           TL(K)=grid%nmm_T(I,K,J)
297 !
298 ! here rri is inverse density!
299 !
300           RHO(I,K,J)=PLYR/(R_D*TL(K)*(1.+P608*QL(K)))
301           RRI(I,K,J)=1./RHO(i,k,j)
302           T_PHY(I,K,J)=TL(K)
303           moist(I,K,J,P_QV)=QL(K)/(1.-QL(K))
304           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
305           P_PHY(I,K,J)=PLYR
306           DZ8W(I,K,J)=TL(K)*(P608*QL(K)+1.)*R_D                           &
307      &                 *(P8W(I,K,J)-P8W(I,K+1,J))                       &
308      &                 /(P_PHY(I,K,J)*G)
309           if(K.gt.kts)then
310             Z_AT_W(i,k,j)=Z_AT_W(I,k-1,j)+DZ8W(I,K-1,J)
311             ZMID(I,K-1,J)=.5*(Z_AT_W(I,K-1,J)+Z_AT_W(I,K,J))
312           endif
313 
314          ENDDO
315 !         
316         DO K=KTS+1,KTE
317           T8W(I,K,J)=0.5*(TL(K-1)+TL(K))
318         ENDDO 
319         T8W(I,KTE+1,J)=-1.E20
320         ZMID(I,KTE,J)=Z_AT_W(I,KTE,J)
321 !         
322       ENDDO
323       ENDDO
324 !-----------------------------------------------------------------------
325 !-----------------------------------------------------------------------
326 !
327 !***  COMPUTE VELOCITY COMPONENTS AT MASS POINTS
328 !
329 !-----------------------------------------------------------------------
330 !$omp parallel do                                                       &
331 !$omp& private(i,j,k,rwmsk,wmsk)
332       DO J=MYJS1_P1,MYJE1_P1
333 !
334         DO K=KTS,KTE
335           DO I=MYIS_P1,MYIE_P1
336             WMSK=grid%nmm_VTM(I+grid%nmm_IHE(J),K,J)+grid%nmm_VTM(I+grid%nmm_IHW(J),K,J)                    &
337      &          +grid%nmm_VTM(I,K,J+1)+grid%nmm_VTM(I,K,J-1)
338             IF(WMSK>0.)THEN
339               RWMSK=1./WMSK
340               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)           &
341      &                     +grid%nmm_U(I+grid%nmm_IHW(J),K,J)*grid%nmm_VTM(I+grid%nmm_IHW(J),K,J)       &
342      &                     +grid%nmm_U(I,K,J+1)*grid%nmm_VTM(I,K,J+1)                 &
343      &                     +grid%nmm_U(I,K,J-1)*grid%nmm_VTM(I,K,J-1))*RWMSK
344               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)           &
345      &                     +grid%nmm_V(I+grid%nmm_IHW(J),K,J)*grid%nmm_VTM(I+grid%nmm_IHW(J),K,J)       &
346      &                     +grid%nmm_V(I,K,J+1)*grid%nmm_VTM(I,K,J+1)                 &
347      &                     +grid%nmm_V(I,K,J-1)*grid%nmm_VTM(I,K,J-1))*RWMSK
348             ELSE
349               U_PHY(I,K,J)=0.
350               V_PHY(I,K,J)=0.
351             ENDIF
352           ENDDO
353         ENDDO
354       ENDDO     
355             
356               
357               
358 #endif
359 
360       do nv=1,num_chem
361          do j=jps,jpe
362             do k=kps,kpe
363                do i=ips,ipe
364                   chem(i,k,j,nv)=max(chem(i,k,j,nv),chem_minval)
365                enddo
366             enddo
367          enddo
368       enddo
369       select case (config_flags%chem_opt)
370       case (RADM2SORG, RADM2SORG_KPP,RACMSORG,RACMSORG_KPP)
371          do j=jps,jpe
372             do k=kps,kpe
373                do i=ips,ipe
374                   if(chem(i,k,j,p_nu0).lt.1.e07) then
375                      chem(i,k,j,p_nu0)=1.e7
376                   endif
377                enddo
378             enddo
379          enddo
380       end select
381 
382 
383       vdrog3=0.
384 #if ( EM_CORE == 1 )
385       do j=jps,min(jde-1,jpe)
386          do k=kps,kpe
387             do i=ips,min(ide-1,ipe)
388               rri(i,k,j)=grid%em_alt(i,k,j)
389               vvel(i,k,j)=grid%em_w_2(i,k,j)
390               zmid(i,k,j)=grid%em_z(i,k,j)
391             enddo
392          enddo
393       enddo
394       do j=jps,min(jde-1,jpe)
395          do i=ips,min(ide-1,ipe)
396             pbl_h(i,j)=grid%pblh(i,j)
397          enddo
398       enddo
399 
400      !$OMP PARALLEL DO   &
401      !$OMP PRIVATE ( ij, its, ite, jts, jte )
402    chem_tile_loop_1: DO ij = 1 , grid%num_tiles
403        its = max(grid%i_start(ij),ids+1)
404        ite = min(grid%i_end(ij),ide-2)
405        jts = max(grid%j_start(ij),jds+1)
406        jte = min(grid%j_end(ij),jde-2)
407        kts=k_start
408        kte=k_end
409 #endif
410 ! 
411 ! no time average available in first half hour
412 !   
413        if( config_flags%chem_conv_tr>0)then
414          if(ktau.le.stepave)then
415            do j=jts,jte
416                 do i=its,ite
417                      grid%raincv_b(i,j)=grid%raincv(i,j)
418                 enddo
419            enddo
420           endif
421 ! 
422 ! build time average, and stored in raincv_b to be used by convective transport routine
423 !   
424           if(mod(ktau,stepave).ne.0)then
425            do j=jts,jte
426                 do i=its,ite
427                    grid%raincv_a(i,j)=grid%raincv_a(i,j)+grid%raincv(i,j)
428                 enddo
429            enddo
430           else if(mod(ktau,stepave).eq.0)then
431            do j=jts,jte
432                 do i=its,ite
433                    grid%raincv_b(i,j)=grid%raincv_a(i,j)/float(stepave)
434                    grid%raincv_a(i,j)=0.
435                 enddo
436            enddo
437          endif
438        endif   ! chem_conv_tr
439 !
440 ! do the same for convwective parameterization cloud water mix ratio, 
441 ! currently only for cu_physics=3, used by both photolysis and atmospheric radiation
442 !
443        if(config_flags%cu_rad_feedback)then
444        if( config_flags%cu_physics == 3 )then
445          if(ktau.le.stepave)then
446            do j=jts,jte
447                 do k=kts,kte
448                      do i=its,ite
449                           grid%gd_cloud_b(i,k,j)=grid%gd_cloud(i,k,j)
450                           grid%gd_cloud2_b(i,k,j)=grid%gd_cloud2(i,k,j)
451                      enddo
452                 enddo
453            enddo
454          endif   ! stepave
455 !
456 ! 
457 !
458           if(mod(ktau,stepave).ne.0)then
459            do j=jts,jte
460                 do k=kts,kte
461                      do i=its,ite
462                        grid%gd_cloud_a(i,k,j)=grid%gd_cloud_a(i,k,j)+grid%gd_cloud(i,k,j)
463                        grid%gd_cloud2_a(i,k,j)=grid%gd_cloud2_a(i,k,j)+grid%gd_cloud2(i,k,j)
464                      enddo
465                 enddo
466            enddo
467           else if(mod(ktau,stepave).eq.0)then
468            do j=jts,jte
469                 do k=kts,kte
470                      do i=its,ite
471                        grid%gd_cloud_b(i,k,j)=grid%gd_cloud_a(i,k,j)/float(stepave)
472                        grid%gd_cloud_a(i,k,j)=0.
473                        grid%gd_cloud2_b(i,k,j)=grid%gd_cloud2_a(i,k,j)/float(stepave)
474                        grid%gd_cloud2_a(i,k,j)=0.
475                      enddo
476                 enddo
477            enddo
478           endif !stepave
479        endif ! cu_physics
480        endif ! cu_rad_feedback
481 !
482 !
483 #if ( EM_CORE == 1 )
484          CALL wrf_debug ( 15 , ' call chem_prep' )
485          CALL chem_prep ( config_flags,                                               &
486                          grid%em_u_2, grid%em_v_2, grid%em_p, grid%em_pb,             &
487                          grid%em_alt,grid%em_ph_2, grid%em_phb, grid%em_t_2,          &
488                          moist, num_3d_m, rho,                                        &
489                          p_phy,  u_phy, v_phy,                                        &
490                          p8w, t_phy, t8w, grid%em_z, z_at_w,                          &
491                          dz8w, grid%em_fnm, grid%em_fnp,                              &
492                          ids, ide, jds, jde, kds, kde,                                &
493                          ims, ime, jms, jme, kms, kme,                                &
494                          its,ite,jts,jte,                                             &
495                          k_start, k_end                                               )
496 #endif
497 
498 #if (defined(CHEM_DBG_I) && defined(CHEM_DBG_J) && defined(CHEM_DBG_K))
499        if( (its <= CHEM_DBG_I .and. ite >= CHEM_DBG_I) .and.                          &
500            (jts <= CHEM_DBG_J .and. jte >= CHEM_DBG_J) .and.                          &
501            (k_start <= CHEM_DBG_K .and. k_end >= CHEM_DBG_K)  ) then
502           call wrf_debug(15,"calling chem_dbg at top of chem_driver")
503           call chem_dbg(CHEM_DBG_I,CHEM_DBG_J,CHEM_DBG_K,grid%dt,ktau,                &
504                dz8w,t_phy,p_phy,rho,chem,                                             &
505                grid%e_so2,grid%e_no,grid%e_co,grid%e_eth,grid%e_hc3,grid%e_hc5,       &
506                grid%e_hc8,grid%e_xyl,grid%e_ol2,grid%e_olt,                           &
507                grid%e_oli,grid%e_tol,grid%e_csl,grid%e_hcho,grid%e_ald,grid%e_ket,    &
508                grid%e_ora2,grid%e_nh3,grid%e_pm10,grid%e_pm25,grid%e_pm25i,           &
509                grid%e_pm25j,grid%e_eci,grid%e_ecj,grid%e_orgi,grid%e_orgj,            &
510                grid%e_no2,grid%e_ch3oh,grid%e_c2h5oh,grid%e_iso,                      &
511                grid%e_so4j,grid%e_so4c,grid%e_no3j,grid%e_no3c,grid%e_orgc,grid%e_ecc,&
512                ids,ide, jds,jde, kds,kde,                                             &
513                ims,ime, jms,jme, kms,kme,                                             &
514                its,ite, jts,jte, k_start,k_end,                                       &
515                config_flags%kemit                                                     )
516        end if
517 #endif
518 
519 !--- emissions
520     if(config_flags%emiss_inpt_opt > 0)then
521       call wrf_debug(15,'calling emissions driver')
522       call emissions_driver(grid%id,ktau,grid%dt,grid%DX,grid%stepfirepl,             &
523          config_flags, grid%stepbioe,                                                 &
524          grid%gmt,grid%julday,rri,t_phy,moist,p8w,t8w,u_phy,v_phy,vvel,               &
525          grid%e_bio,p_phy,chem,rho,dz8w,grid%ne_area,                                 &
526          grid%e_iso,grid%e_so2,grid%e_no,grid%e_co,grid%e_eth,grid%e_hc3,             &
527          grid%e_hc5,grid%e_hc8,grid%e_xyl,grid%e_ol2,grid%e_olt,                      &
528          grid%e_oli,grid%e_tol,grid%e_csl,grid%e_hcho,grid%e_ald,grid%e_ket,          &
529          grid%e_ora2,grid%e_pm25,grid%e_pm10,grid%e_nh3,                              &
530          grid%e_pm25i,grid%e_pm25j,grid%e_eci,grid%e_ecj,grid%e_orgi,                 &
531          grid%e_orgj,grid%e_no2,grid%e_ch3oh,                                         &
532          grid%e_c2h5oh,grid%e_so4j,grid%e_so4c,grid%e_no3j,grid%e_no3c,               &
533          grid%e_orgc,grid%e_ecc,                                                      &
534          grid%ebu_no,grid%ebu_co,grid%ebu_co2,grid%ebu_eth,grid%ebu_hc3,grid%ebu_hc5, &
535          grid%ebu_hc8,grid%ebu_ete,grid%ebu_olt,grid%ebu_oli,grid%ebu_pm25,           &
536          grid%ebu_pm10,grid%ebu_dien,grid%ebu_iso,grid%ebu_api,grid%ebu_lim,          &
537          grid%ebu_tol,grid%ebu_xyl,grid%ebu_csl,grid%ebu_hcho,grid%ebu_ald,           &
538          grid%ebu_ket,grid%ebu_macr,grid%ebu_ora1,grid%ebu_ora2,grid%mean_fct_agtf,   &
539          grid%mean_fct_agef,grid%mean_fct_agsv,grid%mean_fct_aggr,grid%firesize_agtf, &
540          grid%firesize_agef,grid%firesize_agsv,grid%firesize_aggr,                    &
541          grid%u10,grid%v10,grid%ivgtyp,grid%gsw,grid%vegfra,grid%rmol,                &
542          grid%ust,grid%znt,                                                           &
543          grid%xland,grid%xlat,grid%xlong,                                             &
544          z_at_w,zmid,                                                                 &
545          grid%sebio_iso,grid%sebio_oli,grid%sebio_api,grid%sebio_lim,                 &
546          grid%sebio_xyl,grid%sebio_hc3,grid%sebio_ete,grid%sebio_olt,                 &
547          grid%sebio_ket,grid%sebio_ald,grid%sebio_hcho,grid%sebio_eth,                &
548          grid%sebio_ora2,grid%sebio_co,grid%sebio_nr,                                 &
549          grid%noag_grow,grid%noag_nongrow,grid%nononag,grid%slai,                     &
550          grid%ebio_iso,grid%ebio_oli,grid%ebio_api,grid%ebio_lim,grid%ebio_xyl,       &
551          grid%ebio_hc3,grid%ebio_ete,grid%ebio_olt,grid%ebio_ket,grid%ebio_ald,       &
552          grid%ebio_hcho,grid%ebio_eth,grid%ebio_ora2,grid%ebio_co,grid%ebio_nr,       &
553          grid%ebio_no,numgas,                                                         &
554          ids,ide, jds,jde, kds,kde,                                                   &
555          ims,ime, jms,jme, kms,kme,                                                   &
556          its,ite,jts,jte,kts,kte)        
557 
558 #if (defined(CHEM_DBG_I) && defined(CHEM_DBG_J) && defined(CHEM_DBG_K))
559        if( (its <= CHEM_DBG_I .and. ite >= CHEM_DBG_I) .and.                          &
560            (jts <= CHEM_DBG_J .and. jte >= CHEM_DBG_J) .and.                          &
561            (k_start <= CHEM_DBG_K .and. k_end >= CHEM_DBG_K)  ) then
562           call wrf_debug(15,'calling chem_dbg after emissions_driver')
563           call chem_dbg(CHEM_DBG_I,CHEM_DBG_J,CHEM_DBG_K,grid%dt,ktau,                &
564                dz8w,t_phy,p_phy,rho,chem,                                             &
565                grid%e_so2,grid%e_no,grid%e_co,grid%e_eth,grid%e_hc3,grid%e_hc5,       &
566                grid%e_hc8,grid%e_xyl,grid%e_ol2,grid%e_olt,                           &
567                grid%e_oli,grid%e_tol,grid%e_csl,grid%e_hcho,grid%e_ald,grid%e_ket,    &
568                grid%e_ora2,grid%e_nh3,grid%e_pm10,grid%e_pm25,grid%e_pm25i,           &
569                grid%e_pm25j,grid%e_eci,grid%e_ecj,grid%e_orgi,grid%e_orgj,            &
570                grid%e_no2,grid%e_ch3oh,grid%e_c2h5oh,grid%e_iso,                      &
571                grid%e_so4j,grid%e_so4c,grid%e_no3j,grid%e_no3c,grid%e_orgc,grid%e_ecc,&
572                ids,ide, jds,jde, kds,kde,                                             &
573                ims,ime, jms,jme, kms,kme,                                             &
574                its,ite, jts,jte, k_start,k_end,                                       &
575                config_flags%kemit                                                     )
576        end if
577 #endif
578       endif
579 
580 !
581 ! calculate photolysis rates
582 !o
583 !     print *,'stepphot = ',grid%stepphot
584       if((ktau.eq.1 .or. mod(ktau,grid%stepphot).eq.0)                                &
585            .and. config_flags%chem_opt /= CHEM_TRACER) then
586          call wrf_debug(15,'calling photolysis driver')
587          call photolysis_driver (grid%id,ktau,grid%dt,config_flags,haveaer,           &
588               grid%gmt,grid%julday,t_phy,moist,grid%aerwrf,p8w,t8w,p_phy,             &
589               chem,rho,dz8w,grid%xlat,grid%xlong,                                     &
590               z_at_w,                                                                 &
591               grid%gd_cloud_b,grid%gd_cloud2_b,                                       &
592               grid%ph_macr,grid%ph_o31d,grid%ph_o33p,grid%ph_no2,grid%ph_no3o2,       &
593               grid%ph_no3o,grid%ph_hno2,grid%ph_hno3,grid%ph_hno4,grid%ph_h2o2,       &
594               grid%ph_ch2or,grid%ph_ch2om,grid%ph_ch3cho,grid%ph_ch3coch3,            &
595               grid%ph_ch3coc2h5,grid%ph_hcocho,grid%ph_ch3cocho,                      &
596               grid%ph_hcochest,grid%ph_ch3o2h,grid%ph_ch3coo2h,grid%ph_ch3ono2,       &
597               grid%ph_hcochob,grid%ph_n2o5,grid%ph_o2,                                &
598               grid%tauaer1,grid%tauaer2,grid%tauaer3,grid%tauaer4,                    &
599               grid%gaer1,grid%gaer2,grid%gaer3,grid%gaer4,                            &
600               grid%waer1,grid%waer2,grid%waer3,grid%waer4,                            &
601               grid%pm2_5_dry,grid%pm2_5_water,grid%uvrad,                             &
602               ids,ide, jds,jde, kds,kde,                                              &
603               ims,ime, jms,jme, kms,kme,                                              &
604               its,ite,jts,jte,kts,kte)
605    
606 #if (defined(CHEM_DBG_I) && defined(CHEM_DBG_J) && defined(CHEM_DBG_K))
607          if( (its <= CHEM_DBG_I .and. ite >= CHEM_DBG_I) .and. &
608              (jts <= CHEM_DBG_J .and. jte >= CHEM_DBG_J) .and. &
609              (k_start <= CHEM_DBG_K .and. k_end >= CHEM_DBG_K)  ) then
610           call wrf_debug(15,'calling chem_dbg after photolysis_driver')
611           call chem_dbg(CHEM_DBG_I,CHEM_DBG_J,CHEM_DBG_K,grid%dt,ktau,                &
612                dz8w,t_phy,p_phy,rho,chem,                                             &
613                grid%e_so2,grid%e_no,grid%e_co,grid%e_eth,grid%e_hc3,grid%e_hc5,       &
614                grid%e_hc8,grid%e_xyl,grid%e_ol2,grid%e_olt,                           &
615                grid%e_oli,grid%e_tol,grid%e_csl,grid%e_hcho,grid%e_ald,grid%e_ket,    &
616                grid%e_ora2,grid%e_nh3,grid%e_pm10,grid%e_pm25,grid%e_pm25i,           &
617                grid%e_pm25j,grid%e_eci,grid%e_ecj,grid%e_orgi,grid%e_orgj,            &
618                grid%e_no2,grid%e_ch3oh,grid%e_c2h5oh,grid%e_iso,                      &
619                grid%e_so4j,grid%e_so4c,grid%e_no3j,grid%e_no3c,grid%e_orgc,grid%e_ecc,&
620                ids,ide, jds,jde, kds,kde,                                             &
621                ims,ime, jms,jme, kms,kme,                                             &
622                its,ite, jts,jte, k_start,k_end,                                       &
623                config_flags%kemit,                                                    &
624                grid%ph_macr,grid%ph_o31d,grid%ph_o33p,grid%ph_no2,grid%ph_no3o2,      &
625                grid%ph_no3o,grid%ph_hno2,grid%ph_hno3,grid%ph_hno4,grid%ph_h2o2,      &
626                grid%ph_ch2or,grid%ph_ch2om,grid%ph_ch3cho,grid%ph_ch3coch3,           &
627                grid%ph_ch3coc2h5,grid%ph_hcocho,grid%ph_ch3cocho,                     &
628                grid%ph_hcochest,grid%ph_ch3o2h,grid%ph_ch3coo2h,                      &
629                grid%ph_ch3ono2,grid%ph_hcochob,grid%ph_n2o5,grid%ph_o2                &
630                                                                                       )
631        end if
632 #endif
633       endif
634 !
635 ! do vertical mixing with dry deposition
636 ! 28-jun-2005 rce - added vertmix_onoff to turn vertical mixing on/off
637 !
638       if (config_flags%vertmix_onoff>0) then
639          if (ktau.gt.2) then
640             call wrf_debug(15,'calling dry_deposition_driver')
641             call dry_dep_driver(grid%id,ktau,grid%dt,config_flags,                    &
642                  grid%gmt,grid%julday,t_phy,moist,scalar,p8w,t8w,vvel,                &
643                  rri,p_phy,chem,rho,dz8w,grid%exch_h,                                 &
644                  grid%cldfra, grid%cldfra_old,                                        &
645 	         grid%ccn1, grid%ccn2, grid%ccn3, grid%ccn4, grid%ccn5, grid%ccn6,    &
646                  grid%qndropsource,grid%ivgtyp,grid%tsk,grid%gsw,grid%vegfra,pbl_h,   &
647                  grid%rmol,grid%ust,grid%znt,grid%xlat,grid%xlong,                    &
648                  zmid,z_at_w,                                                         &
649                  grid%h2oaj,grid%h2oai,grid%nu3,grid%ac3,grid%cor3,grid%asulf,        &
650                  grid%ahno3,grid%anh3,grid%cvaro1,grid%cvaro2,grid%cvalk1,grid%cvole1,&
651                  grid%cvapi1,grid%cvapi2,grid%cvlim1,grid%cvlim2,grid%dep_vel_o3,     &
652                  grid%e_co,config_flags%kemit,numgas,                                 &
653                  ids,ide, jds,jde, kds,kde,                                           &
654                  ims,ime, jms,jme, kms,kme,                                           &
655                  its,ite,jts,jte,kts,kte)
656 !                k_start         , min(k_end,kde-ksubt)                               )
657          end if
658 
659 #if (defined(CHEM_DBG_I) && defined(CHEM_DBG_J) && defined(CHEM_DBG_K))
660        if( (its <= CHEM_DBG_I .and. ite >= CHEM_DBG_I) .and. &
661            (jts <= CHEM_DBG_J .and. jte >= CHEM_DBG_J) .and. &
662            (k_start <= CHEM_DBG_K .and. k_end >= CHEM_DBG_K)  ) then
663           call wrf_debug(15,'calling chem_dbg after dry_deposition_driver')
664           call chem_dbg(CHEM_DBG_I,CHEM_DBG_J,CHEM_DBG_K,grid%dt,ktau,                &
665                dz8w,t_phy,p_phy,rho,chem,                                             &
666                grid%e_so2,grid%e_no,grid%e_co,grid%e_eth,grid%e_hc3,grid%e_hc5,       &
667                grid%e_hc8,grid%e_xyl,grid%e_ol2,grid%e_olt,                           &
668                grid%e_oli,grid%e_tol,grid%e_csl,grid%e_hcho,grid%e_ald,grid%e_ket,    &
669                grid%e_ora2,grid%e_nh3,grid%e_pm10,grid%e_pm25,grid%e_pm25i,           &
670                grid%e_pm25j,grid%e_eci,grid%e_ecj,grid%e_orgi,grid%e_orgj,            &
671                grid%e_no2,grid%e_ch3oh,grid%e_c2h5oh,grid%e_iso,                      &
672                grid%e_so4j,grid%e_so4c,grid%e_no3j,grid%e_no3c,grid%e_orgc,grid%e_ecc,&
673                ids,ide, jds,jde, kds,kde,                                             &
674                ims,ime, jms,jme, kms,kme,                                             &
675                its,ite, jts,jte, k_start,k_end,                                       &
676                config_flags%kemit,                                                    &
677                                                                                       )
678        end if
679 #endif
680       end if
681 
682 
683 !
684 !   convective transport/wet deposition
685 !
686 !
687 !
688      if( config_flags%cu_physics>0 .and. config_flags%chem_conv_tr>0)then
689         call wrf_debug(15,'calling conv transport')
690         call grelldrvct(grid%DT,ktau,grid%DX,grid%id,config_flags,                    &
691              rho,grid%RAINCV_B,chem,                                                  &
692              U_phy,V_phy,t_phy,moist,dz8w,                                            &
693              p_phy,XLV,CP,G,r_v,                                                      &
694              z_at_w,                                                                  &
695              grid%cu_co_ten,                                                          &
696              num_chem,                                                                &
697              ids,ide, jds,jde, kds,kde,                                               &
698              ims,ime, jms,jme, kms,kme,                                               &
699              its,ite,jts,jte,kts,kte)
700 !            k_start    , min(k_end,kde-1)                                            )
701      end if
702 !
703 !
704 !
705 !
706 n2o5_het=0.
707 ! Calculate rate of n2o5 hydrolysis 
708        call wrf_debug(15,'calling calc_het_n2o5')
709 
710 
711 
712 !
713 ! For the chemistry tracer mode, only emissions and vertical mixing are done.
714 ! So, finish any remaining tiles and then skip to the end of chem_driver.
715 !
716       kts=k_start
717       kte=k_end
718       if((ktau.eq.1.or.mod(ktau,grid%stepchem).eq.0)                                  &
719            .and. config_flags%chem_opt /= CHEM_TRACER) then
720         dtstepc=grid%dt*float(grid%stepchem)
721         ktauc=max(ktau/grid%stepchem,1)
722         if(ktau.eq.1)dtstepc=grid%dt
723         if(config_flags%gaschem_onoff>0)then
724 !
725 ! chemical mechanisms
726 !
727         call mechanism_driver(grid%id,ktau,grid%dt,ktauc,dtstepc,config_flags,        &
728               grid%gmt,grid%julday,t_phy,moist,p8w,t8w,                               &
729               p_phy,chem,rho,dz8w,                                                    &
730               zmid,z_at_w,                                                            &
731               vdrog3,vcsulf_old,                                                      &
732               grid%ph_macr,grid%ph_o31d,grid%ph_o33p,grid%ph_no2,grid%ph_no3o2,       &
733               grid%ph_no3o,grid%ph_hno2,grid%ph_hno3,grid%ph_hno4,grid%ph_h2o2,       &
734               grid%ph_ch2or,grid%ph_ch2om,grid%ph_ch3cho,grid%ph_ch3coch3,            &
735               grid%ph_ch3coc2h5,grid%ph_hcocho,grid%ph_ch3cocho,grid%ph_hcochest,     &
736               grid%ph_ch3o2h,grid%ph_ch3coo2h,grid%ph_ch3ono2,grid%ph_hcochob,        &
737               grid%ph_n2o5,grid%ph_o2,grid%addt,grid%addx,grid%addc,grid%etep,        &
738               grid%oltp,grid%olip,grid%cslp,grid%limp,grid%hc5p,grid%hc8p,grid%tolp,  &
739               grid%xylp,grid%apip,grid%isop,grid%hc3p,grid%ethp,grid%o3p,grid%tco3,   &
740               grid%mo2,grid%o1d,grid%olnn,grid%rpho,grid%xo2,                         &
741               grid%ketp,grid%olnd,                                                    &
742               ids,ide, jds,jde, kds,kde,                                              &
743               ims,ime, jms,jme, kms,kme,                                              &
744               its,ite,jts,jte,kts,kte        )
745           
746 
747 !cms++
748 !
749 
750 
751 #ifdef WRF_KPP
752    CALL wrf_debug(15,'calling kpp_mechanism_driver')
753 
754 
755 CALL kpp_mechanism_driver (chem,                                                      &
756    grid%id,dtstepc,config_flags,                                                      &
757    p_phy,t_phy,rho,moist,                                                             &
758    vdrog3, ldrog,                                                                     &
759 !
760 #include <call_to_kpp_mech_drive.inc>
761 !
762    ids,ide, jds,jde, kds,kde,                                                         &
763    ims,ime, jms,jme, kms,kme,                                                         &
764    its,ite,jts,jte,kts,kte)
765 !  k_start    , min(k_end,kde-ksubt)                                                  )
766 
767 
768 !cms--
769 !
770 #endif
771 #if (defined(CHEM_DBG_I) && defined(CHEM_DBG_J) && defined(CHEM_DBG_K))
772        if( (its <= CHEM_DBG_I .and. ite >= CHEM_DBG_I) .and.                          &
773            (jts <= CHEM_DBG_J .and. jte >= CHEM_DBG_J) .and.                          &
774            (k_start <= CHEM_DBG_K .and. k_end >= CHEM_DBG_K)  ) then
775           call wrf_debug(15,'calling chem_dbg after mechanism_driver')
776           call chem_dbg(CHEM_DBG_I,CHEM_DBG_J,CHEM_DBG_K,grid%dt,ktau,                &
777                dz8w,t_phy,p_phy,rho,chem,                                             &
778                grid%e_so2,grid%e_no,grid%e_co,grid%e_eth,grid%e_hc3,grid%e_hc5,       &
779                grid%e_hc8,grid%e_xyl,grid%e_ol2,grid%e_olt,                           &
780                grid%e_oli,grid%e_tol,grid%e_csl,grid%e_hcho,grid%e_ald,grid%e_ket,    &
781                grid%e_ora2,grid%e_nh3,grid%e_pm10,grid%e_pm25,grid%e_pm25i,           &
782                grid%e_pm25j,grid%e_eci,grid%e_ecj,grid%e_orgi,grid%e_orgj,            &
783                grid%e_no2,grid%e_ch3oh,grid%e_c2h5oh,grid%e_iso,                      &
784                grid%e_so4j,grid%e_so4c,grid%e_no3j,grid%e_no3c,grid%e_orgc,grid%e_ecc,&
785                ids,ide, jds,jde, kds,kde,                                             &
786                ims,ime, jms,jme, kms,kme,                                             &
787                its,ite, jts,jte, k_start,k_end,                                       &
788                config_flags%kemit,                                                    &
789                grid%ph_macr,grid%ph_o31d,grid%ph_o33p,grid%ph_no2,grid%ph_no3o2,      &
790                grid%ph_no3o,grid%ph_hno2,grid%ph_hno3,grid%ph_hno4,grid%ph_h2o2,      &
791                grid%ph_ch2or,grid%ph_ch2om,grid%ph_ch3cho,grid%ph_ch3coch3,           &
792                grid%ph_ch3coc2h5,grid%ph_hcocho,grid%ph_ch3cocho,                     &
793                grid%ph_hcochest,grid%ph_ch3o2h,grid%ph_ch3coo2h,                      &
794                grid%ph_ch3ono2,grid%ph_hcochob,grid%ph_n2o5,grid%ph_o2                &
795                                                                                       )
796        end if
797 #endif
798        endif
799 
800 
801 
802 !   allocate gas_aqfrac if either cldchem or wetscav is on
803         if ( (config_flags%cldchem_onoff > 0) .or.                                    &
804              (config_flags%wetscav_onoff > 0) ) then
805             numgas_aqfrac = max( numgas, 1 )
806             allocate( gas_aqfrac( grid%sm31:grid%em31, grid%sm32:grid%em32,           &
807                                   grid%sm33:grid%em33, numgas_aqfrac ) )
808             gas_aqfrac(:,:,:,:) = 0.0
809         end if
810 
811 !
812 !   now do cloud chemistry
813 !
814         if (config_flags%cldchem_onoff > 0) then
815 
816         call cloudchem_driver(                                                        &
817                grid%id, ktau, ktauc, grid%dt, dtstepc, config_flags,                  &
818                t_phy, p_phy, rho, rri,                                                &
819                moist, grid%cldfra, grid%ph_no2,                                       &
820                chem, gas_aqfrac, numgas_aqfrac,                                       &
821                ids,ide, jds,jde, kds,kde,                                             &
822                ims,ime, jms,jme, kms,kme,                                             &
823                its,ite, jts,jte, kts,kte                                              )
824        
825        endif
826 
827 
828 !
829 !   now do aerosols
830 !
831 	if(config_flags%aerchem_onoff>0)then
832         call aerosols_driver (grid%id,ktau,grid%dt,ktauc,config_flags,dtstepc,        &
833               rri,t_phy,moist,grid%aerwrf,p8w,t8w,                                    &
834               p_phy,chem,rho,dz8w,                                                    &
835               zmid,z_at_w,                                                            &
836               grid%h2oaj,grid%h2oai,grid%nu3,grid%ac3,grid%cor3,grid%asulf,           &
837               grid%ahno3,grid%anh3,grid%cvaro1,grid%cvaro2,grid%cvalk1,grid%cvole1,   &
838               grid%cvapi1,grid%cvapi2,grid%cvlim1,grid%cvlim2,vcsulf_old,             &
839               grid%e_pm25i,grid%e_pm25j,grid%e_eci,grid%e_ecj,grid%e_orgi,            &
840               grid%e_orgj,grid%e_pm10,grid%e_so4i,grid%e_so4j,grid%e_no3i,grid%e_no3j,&
841               vdrog3,                                                                 &
842               ids,ide, jds,jde, kds,kde,                                              &
843               ims,ime, jms,jme, kms,kme,                                              &
844               its,ite,jts,jte,kts,kte)
845 
846 #if (defined(CHEM_DBG_I) && defined(CHEM_DBG_J) && defined(CHEM_DBG_K))
847        if( (its <= CHEM_DBG_I .and. ite >= CHEM_DBG_I) .and.                          &
848            (jts <= CHEM_DBG_J .and. jte >= CHEM_DBG_J) .and.                          &
849            (k_start <= CHEM_DBG_K .and. k_end >= CHEM_DBG_K)  ) then
850           call wrf_debug(15,'calling chem_dbg after aerosols_driver')
851           call chem_dbg(CHEM_DBG_I,CHEM_DBG_J,CHEM_DBG_K,grid%dt,ktau,                &
852                dz8w,t_phy,p_phy,rho,chem,                                             &
853                grid%e_so2,grid%e_no,grid%e_co,grid%e_eth,grid%e_hc3,grid%e_hc5,       &
854                grid%e_hc8,grid%e_xyl,grid%e_ol2,grid%e_olt,                           &
855                grid%e_oli,grid%e_tol,grid%e_csl,grid%e_hcho,grid%e_ald,grid%e_ket,    &
856                grid%e_ora2,grid%e_nh3,grid%e_pm10,grid%e_pm25,grid%e_pm25i,           &
857                grid%e_pm25j,grid%e_eci,grid%e_ecj,grid%e_orgi,grid%e_orgj,            &
858                grid%e_no2,grid%e_ch3oh,grid%e_c2h5oh,grid%e_iso,                      &
859                grid%e_so4j,grid%e_so4c,grid%e_no3j,grid%e_no3c,grid%e_orgc,grid%e_ecc,&
860                ids,ide, jds,jde, kds,kde,                                             &
861                ims,ime, jms,jme, kms,kme,                                             &
862                its,ite, jts,jte, k_start,k_end,                                       &
863                config_flags%kemit,
864                grid%ph_macr,grid%ph_o31d,grid%ph_o33p,grid%ph_no2,grid%ph_no3o2,      &
865                grid%ph_no3o,grid%ph_hno2,grid%ph_hno3,grid%ph_hno4,grid%ph_h2o2,      &
866                grid%ph_ch2or,grid%ph_ch2om,grid%ph_ch3cho,grid%ph_ch3coch3,           &
867                grid%ph_ch3coc2h5,grid%ph_hcocho,grid%ph_ch3cocho,                     &
868                grid%ph_hcochest,grid%ph_ch3o2h,grid%ph_ch3coo2h,                      &
869                grid%ph_ch3ono2,grid%ph_hcochob,grid%ph_n2o5,grid%ph_o2                &
870                                                                                       )
871        end if
872 #endif
873        endif
874 
875 
876 !
877 !   now do wet removal
878 !
879 	if (config_flags%wetscav_onoff > 0) then
880         call wetscav_driver (grid%id,ktau,grid%dt,ktauc,config_flags,dtstepc,         &
881               rri,t_phy,moist,p8w,t8w,                                                &
882               p_phy,chem,rho,grid%cldfra,                                             &
883               grid%qlsink,grid%precr,grid%preci,grid%precs,grid%precg,                &
884               gas_aqfrac, numgas_aqfrac,                                              &
885               grid%h2oaj,grid%h2oai,grid%nu3,grid%ac3,grid%cor3,                      &
886               grid%asulf,grid%ahno3,grid%anh3,grid%cvaro1,grid%cvaro2,                &
887               grid%cvalk1,grid%cvole1,grid%cvapi1,grid%cvapi2,                        &
888               grid%cvlim1,grid%cvlim2,                                                &
889               ids,ide, jds,jde, kds,kde,                                              &
890               ims,ime, jms,jme, kms,kme,                                              &
891               grid%i_start(ij), min(grid%i_end(ij),ide-1),                            &
892               grid%j_start(ij), min(grid%j_end(ij),jde-1),                            &
893               k_start         , min(k_end,kde-ksubt)                                  )
894        
895        endif
896 
897        if (numgas_aqfrac > 0) then
898            deallocate( gas_aqfrac )
899            numgas_aqfrac = 0
900        end if
901 
902 end if !Chemistry time step check
903 !
904 ! Sum up the aerosol mass for radiation and diagnostic purposes. Unlike
905 ! aerosol_driver, which is called every dtchem, this must be done every
906 ! time step because of emissions and deposition.
907 !
908       call sum_pm_driver ( config_flags,                                              &
909            rri, chem, grid%h2oaj, grid%h2oai,                                         &
910            grid%pm2_5_dry, grid%pm2_5_water, grid%pm2_5_dry_ec, grid%pm10,            &
911            ids,ide, jds,jde, kds,kde,                                                 &
912            ims,ime, jms,jme, kms,kme,                                                 &
913            its,ite, jts,jte, k_start,k_end                                            )
914 
915 ! Fill top level to prevent spurious interpolation results (no extrapolation)
916 ! should this be done on halo too????
917       do nv=1,num_chem
918          do j=jts,jte
919             do i=its,ite
920                   chem(i,kte,j,nv)=chem(i,kte-1,j,nv)
921             enddo
922          enddo
923       enddo
924       call wrf_debug(15,'done tileloop in chem_driver')
925 # if ( EM_CORE == 1 ) 
926    END DO chem_tile_loop_1
927 #endif
928 
929 
930     END subroutine chem_driver