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