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