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