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