merge standard release WRF/WPS V3.0.1.1 into wrffire
[wrffire.git] / wrfv2_fire / dyn_em / module_first_rk_step_part2.F
blob0f58f4d7030aab76a894c89f0cb50fde086321c5
1 !WRF:MEDIATION_LAYER:SOLVER
3 #define BENCH_START(A)
4 #define BENCH_END(A)
6 MODULE module_first_rk_step_part2
8 CONTAINS
10   SUBROUTINE first_rk_step_part2 (   grid , config_flags              &
11                              , moist , moist_tend               &
12                              , chem  , chem_tend                &
13                              , scalar , scalar_tend             &
14                              , fdda3d, fdda2d                   &
15                              , ru_tendf, rv_tendf               &
16                              , rw_tendf, t_tendf                &
17                              , ph_tendf, mu_tendf               &
18                              , tke_tend                         &
19                              , adapt_step_flag , curr_secs      &
20                              , psim , psih , wspd , gz1oz0 , br , chklowq &
21                              , cu_act_flag , hol , th_phy        &
22                              , pi_phy , p_phy , t_phy , u_phy , v_phy     &
23                              , dz8w , p8w , t8w , rho_phy , rho           &
24                              , z_at_w , mu_3d                   &
25                              , ids, ide, jds, jde, kds, kde     &
26                              , ims, ime, jms, jme, kms, kme     &
27                              , ips, ipe, jps, jpe, kps, kpe     &
28                              , k_start , k_end                  &
29                             )
30     USE module_state_description
31     USE module_model_constants
32     USE module_domain, ONLY : domain
33     USE module_configure, ONLY : grid_config_rec_type, model_config_rec
34     USE module_dm
35     USE module_diffusion_em, ONLY : phy_bc, cal_deform_and_div, compute_diff_metrics, &
36                                     vertical_diffusion_2, horizontal_diffusion_2, calculate_km_kh, &
37                                     tke_rhs
38     USE module_em, ONLY : calculate_phy_tend
39     USE module_fddaobs_driver, ONLY : fddaobs_driver
40     USE module_bc, ONLY : set_physical_bc3d, set_physical_bc2d
41     USE module_physics_addtendc, ONLY : update_phy_ten
43     IMPLICIT NONE
45     TYPE ( domain ), INTENT(INOUT) :: grid
46     TYPE ( grid_config_rec_type ), INTENT(IN) :: config_flags
48     INTEGER, INTENT(IN) :: ids, ide, jds, jde, kds, kde,     &
49                            ims, ime, jms, jme, kms, kme,     &
50                            ips, ipe, jps, jpe, kps, kpe
52     LOGICAL ,INTENT(IN)                        :: adapt_step_flag
53     REAL, INTENT(IN)                           :: curr_secs
55     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT)   :: moist
56     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT)   :: moist_tend
57     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT)   :: chem
58     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT)   :: chem_tend
59     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT)   :: scalar
60     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT)   :: scalar_tend
61     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_fdda3d),INTENT(INOUT)  :: fdda3d
62     REAL    ,DIMENSION(ims:ime,1:1,jms:jme,num_fdda2d),INTENT(INOUT)      :: fdda2d
63     REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: psim
64     REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: psih
65     REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: wspd
66     REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: gz1oz0
67     REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: br
68     REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: chklowq
69     LOGICAL ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: cu_act_flag
70     REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: hol
72     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: th_phy
73     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: pi_phy
74     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: p_phy
75     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: t_phy
76     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: u_phy
77     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: v_phy
78     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: dz8w
79     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: p8w
80     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: t8w
81     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rho_phy
82     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rho
83     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: z_at_w
84     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: mu_3d
86     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: ru_tendf
87     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rv_tendf
88     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rw_tendf
89     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: ph_tendf
90     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: t_tendf
91     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: tke_tend
93     REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: mu_tendf
95     INTEGER , INTENT(IN)                          ::  k_start, k_end
97 ! Local
99     REAL, DIMENSION( ims:ime, jms:jme ) :: ht_loc
100     INTEGER, DIMENSION( ims:ime, jms:jme ) :: shadowmask 
101     INTEGER                             :: ij
102     INTEGER  num_roof_layers
103     INTEGER  num_wall_layers
104     INTEGER  num_road_layers
105     INTEGER  iswater
106     INTEGER  rk_step 
108  ! initialize all tendencies to zero in order to update physics
109  ! tendencies first (separate from dry dynamics).
111     rk_step = 1
113 ! calculate_phy_tend
115 BENCH_START(cal_phy_tend)
116       !$OMP PARALLEL DO   &
117       !$OMP PRIVATE ( ij )
119       DO ij = 1 , grid%num_tiles
121         CALL wrf_debug ( 200 , ' call calculate_phy_tend' )
122         CALL calculate_phy_tend (config_flags,grid%mut,grid%muu,grid%muv,pi_phy,            &
123                      grid%rthraten,                                         &
124                      grid%rublten,grid%rvblten,grid%rthblten,                         &
125                      grid%rqvblten,grid%rqcblten,grid%rqiblten,                       &
126                      grid%rthcuten,grid%rqvcuten,grid%rqccuten,grid%rqrcuten,              &
127                      grid%rqicuten,grid%rqscuten,                                &
128                      grid%RUNDGDTEN,grid%RVNDGDTEN,grid%RTHNDGDTEN,grid%RQVNDGDTEN,        &
129                      grid%RMUNDGDTEN,                                       &
130                      ids,ide, jds,jde, kds,kde,                        &
131                      ims,ime, jms,jme, kms,kme,                        &
132                      grid%i_start(ij), min(grid%i_end(ij),ide-1),      &
133                      grid%j_start(ij), min(grid%j_end(ij),jde-1),      &
134                      k_start    , min(k_end,kde-1)                     )
136       ENDDO
137       !$OMP END PARALLEL DO
138 BENCH_END(cal_phy_tend)
140 ! tke diffusion
142        IF(config_flags%diff_opt .eq. 2 .OR. config_flags%diff_opt .eq. 1) THEN
144 BENCH_START(comp_diff_metrics_tim)
145          !$OMP PARALLEL DO   &
146          !$OMP PRIVATE ( ij )
147          DO ij = 1 , grid%num_tiles
148            CALL wrf_debug ( 200 , ' call compute_diff_metrics ' )
149            CALL compute_diff_metrics ( config_flags, grid%ph_2, grid%phb, grid%z, grid%rdz, grid%rdzw, &
150                                        grid%zx, grid%zy, grid%rdx, grid%rdy,                      &
151                                        ids, ide, jds, jde, kds, kde,          &
152                                        ims, ime, jms, jme, kms, kme,          &
153                                        grid%i_start(ij), grid%i_end(ij),      &
154                                        grid%j_start(ij), grid%j_end(ij),      &
155                                        k_start    , k_end                    )
156          ENDDO
157          !$OMP END PARALLEL DO
158 BENCH_END(comp_diff_metrics_tim)
160 #ifdef DM_PARALLEL
161 #  include "HALO_EM_TKE_C.inc"
162 #  include "PERIOD_BDY_EM_A1.inc"
163 #endif
165 BENCH_START(tke_diff_bc_tim)
166          !$OMP PARALLEL DO   &
167          !$OMP PRIVATE ( ij )
169          DO ij = 1 , grid%num_tiles
171            CALL wrf_debug ( 200 , ' call bc for diffusion_metrics ' )
172            CALL set_physical_bc3d( grid%rdzw , 'w', config_flags,           &
173                                    ids, ide, jds, jde, kds, kde,       &
174                                    ims, ime, jms, jme, kms, kme,       &
175                                    ips, ipe, jps, jpe, kps, kpe,       &
176                                    grid%i_start(ij), grid%i_end(ij),   &
177                                    grid%j_start(ij), grid%j_end(ij),   &
178                                    k_start    , k_end                 )
179            CALL set_physical_bc3d( grid%rdz , 'w', config_flags,            &
180                                    ids, ide, jds, jde, kds, kde,       &
181                                    ims, ime, jms, jme, kms, kme,       &
182                                    ips, ipe, jps, jpe, kps, kpe,       &
183                                    grid%i_start(ij), grid%i_end(ij),   &
184                                    grid%j_start(ij), grid%j_end(ij),   &
185                                    k_start    , k_end                 )
186            CALL set_physical_bc3d( grid%z , 'w', config_flags,              &
187                                    ids, ide, jds, jde, kds, kde,       &
188                                    ims, ime, jms, jme, kms, kme,       &
189                                    ips, ipe, jps, jpe, kps, kpe,       &
190                                    grid%i_start(ij), grid%i_end(ij),   &
191                                    grid%j_start(ij), grid%j_end(ij),   &
192                                    k_start    , k_end                 )
193            CALL set_physical_bc3d( grid%zx , 'w', config_flags,             &
194                                    ids, ide, jds, jde, kds, kde,       &
195                                    ims, ime, jms, jme, kms, kme,       &
196                                    ips, ipe, jps, jpe, kps, kpe,       &
197                                    grid%i_start(ij), grid%i_end(ij),   &
198                                    grid%j_start(ij), grid%j_end(ij),   &
199                                    k_start    , k_end                 )
200            CALL set_physical_bc3d( grid%zy , 'w', config_flags,             &
201                                    ids, ide, jds, jde, kds, kde,       &
202                                    ims, ime, jms, jme, kms, kme,       &
203                                    ips, ipe, jps, jpe, kps, kpe,       &
204                                    grid%i_start(ij), grid%i_end(ij),   &
205                                    grid%j_start(ij), grid%j_end(ij),   &
206                                    k_start    , k_end                 )
207            CALL set_physical_bc2d( grid%ustm, 't', config_flags,            &
208                                    ids, ide, jds, jde,                 &
209                                    ims, ime, jms, jme,                 &
210                                    ips, ipe, jps, jpe,                 &
211                                    grid%i_start(ij), grid%i_end(ij),   &
212                                    grid%j_start(ij), grid%j_end(ij)   )
214          ENDDO
215          !$OMP END PARALLEL DO
216 BENCH_END(tke_diff_bc_tim)
218 BENCH_START(deform_div_tim)
220          !$OMP PARALLEL DO   &
221          !$OMP PRIVATE ( ij )
223          DO ij = 1 , grid%num_tiles
225            CALL wrf_debug ( 200 , ' call cal_deform_and_div' )
226            CALL cal_deform_and_div ( config_flags,grid%u_2,grid%v_2,grid%w_2,grid%div,  &
227                                      grid%defor11,grid%defor22,grid%defor33,            &
228                                      grid%defor12,grid%defor13,grid%defor23,            &
229                                      grid%u_base, grid%v_base,grid%msfux,grid%msfuy,    &
230                                      grid%msfvx,grid%msfvy,grid%msftx,grid%msfty,       &
231                                      grid%rdx, grid%rdy, grid%dn, grid%dnw, grid%rdz,   &
232                                      grid%rdzw,grid%fnm,grid%fnp,grid%cf1,grid%cf2,     &
233                                      grid%cf3,grid%zx,grid%zy,            &
234                                      ids, ide, jds, jde, kds, kde,        &
235                                      ims, ime, jms, jme, kms, kme,        &
236                                      grid%i_start(ij), grid%i_end(ij),    &
237                                      grid%j_start(ij), grid%j_end(ij),    &
238                                      k_start    , k_end                  )
239          ENDDO
240          !$OMP END PARALLEL DO
241 BENCH_END(deform_div_tim)
243 #ifdef DM_PARALLEL
244 #     include "HALO_EM_TKE_D.inc"
245 #endif
247 ! calculate tke, kmh, and kmv
249 BENCH_START(calc_tke_tim)
250          !$OMP PARALLEL DO   &
251          !$OMP PRIVATE ( ij )
252          DO ij = 1 , grid%num_tiles
254            CALL wrf_debug ( 200 , ' call calculate_km_kh' )
255            CALL calculate_km_kh( config_flags,grid%dt,grid%dampcoef,grid%zdamp,         &
256                                  config_flags%damp_opt,                                 &
257                                  grid%xkmh,grid%xkmv,grid%xkhh,grid%xkhv,grid%bn2,      &
258                                  grid%khdif,grid%kvdif,grid%div,                        &
259                                  grid%defor11,grid%defor22,grid%defor33,grid%defor12,   &
260                                  grid%defor13,grid%defor23,                             &
261                                  grid%tke_2,p8w,t8w,th_phy,                             &
262                                  t_phy,p_phy,moist,grid%dn,grid%dnw,                    &
263                                  grid%dx,grid%dy,grid%rdz,grid%rdzw,                    &
264                                  config_flags%mix_isotropic,num_moist,                  &
265                                  grid%cf1, grid%cf2, grid%cf3, grid%warm_rain,          &
266                                  grid%mix_upper_bound,                                  &
267                                  grid%msftx, grid%msfty,                                &
268                                  ids,ide, jds,jde, kds,kde,                             &
269                                  ims,ime, jms,jme, kms,kme,                             &
270                                  grid%i_start(ij), grid%i_end(ij),                      &
271                                  grid%j_start(ij), grid%j_end(ij),                      &
272                                  k_start    , k_end                          )
273          ENDDO
274        !$OMP END PARALLEL DO
275 BENCH_END(calc_tke_tim)
277 #ifdef DM_PARALLEL
278 #     include "HALO_EM_TKE_E.inc"
279 #endif
281        ENDIF
283 #ifdef DM_PARALLEL
284 #      include "PERIOD_BDY_EM_PHY_BC.inc"
285        IF ( config_flags%grid_fdda .eq. 1) THEN
286 #      include "PERIOD_BDY_EM_FDDA_BC.inc"
287        ENDIF
288 #      include "PERIOD_BDY_EM_CHEM.inc"
289 #endif
291 BENCH_START(phy_bc_tim)
292        !$OMP PARALLEL DO   &
293        !$OMP PRIVATE ( ij )
295        DO ij = 1 , grid%num_tiles
297          CALL wrf_debug ( 200 , ' call phy_bc' )
298          CALL phy_bc (config_flags,grid%div,grid%defor11,grid%defor22,grid%defor33,            &
299                       grid%defor12,grid%defor13,grid%defor23,      &
300                       grid%xkmh,grid%xkmv,grid%xkhh,grid%xkhv,     &
301                       grid%tke_2,                                  &
302                       grid%rublten, grid%rvblten,                  &
303                       ids, ide, jds, jde, kds, kde,                &
304                       ims, ime, jms, jme, kms, kme,                &
305                       ips, ipe, jps, jpe, kps, kpe,                &
306                       grid%i_start(ij), grid%i_end(ij),            &
307                       grid%j_start(ij), grid%j_end(ij),            &
308                       k_start    , k_end                           )
309        ENDDO
310        !$OMP END PARALLEL DO
311 BENCH_END(phy_bc_tim)
313 #ifdef DM_PARALLEL
314 !-----------------------------------------------------------------------
316 ! MPP for some physics tendency, km, kh, deformation, and divergence
318 !                                                         * * * * * * *
319 !                                            * * * * *    * * * * * * *
320 !               *                     *      * * * * *    * * * * * * *
321 !             * + *      * + *        +      * * + * *    * * * + * * *
322 !               *                     *      * * * * *    * * * * * * *
323 !                                            * * * * *    * * * * * * *
324 !                                                         * * * * * * *
326 ! (for PBL)
327 ! rublten                  x
328 ! rvblten                             x
330 ! (for FDDA)
331 ! rundgdten     x
332 ! rvndgdten     x
334 ! (for TKE3)
335 ! tke_2                                          x               
336 ! (for TKE5)
337 ! tke_2                                                         x
339 ! (for diff_opt >= 1)
340 ! defor11                  x
341 ! defor22                             x
342 ! defor12       x
343 ! defor13                  x
344 ! defor23                             x
345 ! div           x
346 ! xkmv          x
347 ! xkmh          x
348 ! xkhv          x
349 ! xkhh          x
350 ! tke           x
352 !-----------------------------------------------------------------------
353        IF ( config_flags%bl_pbl_physics .ge. 1 ) THEN
354 #      include "HALO_EM_PHYS_PBL.inc"
355        ENDIF
356        IF ( config_flags%grid_fdda .eq. 1) THEN
357 #      include "HALO_EM_FDDA.inc"
358        ENDIF
359        IF ( config_flags%diff_opt .ge. 1 ) THEN
360 #      include "HALO_EM_PHYS_DIFFUSION.inc"
361        ENDIF
363        IF      ( config_flags%h_mom_adv_order <= 4 ) THEN
364 #       include "HALO_EM_TKE_3.inc"
365        ELSE IF ( config_flags%h_mom_adv_order <= 6 ) THEN
366 #       include "HALO_EM_TKE_5.inc"
367        ELSE
368          WRITE(wrf_err_message,*)'solve_em: invalid h_mom_adv_order = ',config_flags%h_mom_adv_order
369          CALL wrf_error_fatal(TRIM(wrf_err_message))
370        ENDIF
371 #endif
373 BENCH_START(update_phy_ten_tim)
374        !$OMP PARALLEL DO   &
375        !$OMP PRIVATE ( ij )
377        DO ij = 1 , grid%num_tiles
379          CALL wrf_debug ( 200 , ' call update_phy_ten' )
380          CALL update_phy_ten(t_tendf, ru_tendf, rv_tendf,moist_tend,        &
381                            scalar_tend, mu_tendf,                           &
382                            grid%rthraten,grid%rthblten,grid%rthcuten,       &
383                            grid%rublten,grid%rvblten,                       &
384                            grid%rqvblten,grid%rqcblten,grid%rqiblten,       &
385                            grid%rqvcuten,grid%rqccuten,grid%rqrcuten,       &
386                            grid%rqicuten,grid%rqscuten,grid%RUNDGDTEN,      &
387                            grid%RVNDGDTEN,grid%RTHNDGDTEN,grid%RQVNDGDTEN,  &
388                            grid%RMUNDGDTEN,                                 &
389                            grid%rthfrten,grid%rqvfrten,                     &  ! fire
390                            num_moist,num_scalar,config_flags,rk_step,          &
391                            grid%adv_moist_cond,                             &
392                            ids, ide, jds, jde, kds, kde,                    &
393                            ims, ime, jms, jme, kms, kme,                    &
394                            grid%i_start(ij), grid%i_end(ij),                &
395                            grid%j_start(ij), grid%j_end(ij),                &
396                            k_start, k_end                               )
398        END DO
399        !$OMP END PARALLEL DO
400 BENCH_END(update_phy_ten_tim)
402 #ifdef PLANET
403        ! do rayleigh (and zonal-average newtonian) damping during
404        ! first iteration of RK loop only
406        IF ( (config_flags%damp_opt == 101) .OR. &
407             (config_flags%damp_opt == 103)      ) THEN
408          !$OMP PARALLEL DO   &
409          !$OMP PRIVATE ( ij )
410          DO ij = 1 , grid%num_tiles
411            CALL damptop( grid%u_2, grid%v_2, grid%t_2, &
412                          grid%mut, grid%muu, grid%muv, &
413                          pi_phy,                                &
414                          t_tendf, ru_tendf, rv_tendf, P2SI,     &
415                          ids, ide, jds, jde, kds, kde,          &
416                          ims, ime, jms, jme, kms, kme,          &
417                          grid%i_start(ij), grid%i_end(ij),      &
418                          grid%j_start(ij), grid%j_end(ij),      &
419                          k_start, k_end                         )
420          END DO
421          !$OMP END PARALLEL DO
422        END IF
423 #endif
425        IF( config_flags%diff_opt .eq. 2 .and. config_flags%km_opt .eq. 2 ) THEN
427 BENCH_START(tke_rhs_tim)
428          !$OMP PARALLEL DO   &
429          !$OMP PRIVATE ( ij )
430          DO ij = 1 , grid%num_tiles
432            CALL tke_rhs  ( tke_tend,grid%bn2,                           &
433                          config_flags,grid%defor11,grid%defor22,      &
434                          grid%defor33,                                &
435                          grid%defor12,grid%defor13,grid%defor23,      &
436                          grid%u_2,grid%v_2,grid%w_2,grid%div,         &
437                          grid%tke_2,grid%mut,                         &
438                          th_phy,p_phy,p8w,t8w,grid%z,grid%fnm,        & 
439                          grid%fnp,grid%cf1,grid%cf2,grid%cf3,         &     
440                          grid%msftx,grid%msfty,grid%xkmh,             &
441                          grid%xkmv,grid%xkhv,grid%rdx,grid%rdy,       &
442                          grid%dx,grid%dy,grid%dt,grid%zx,grid%zy,     &
443                          grid%rdz,grid%rdzw,grid%dn,                  &
444                          grid%dnw,config_flags%mix_isotropic,         &
445                          grid%hfx, grid%qfx, moist(ims,kms,jms,P_QV), &
446                          grid%ustm, rho,                              &
447                          ids, ide, jds, jde, kds, kde,                &
448                          ims, ime, jms, jme, kms, kme,                &
449                          grid%i_start(ij), grid%i_end(ij),            &
450                          grid%j_start(ij), grid%j_end(ij),            &
451                          k_start    , k_end                           )
453          ENDDO
454          !$OMP END PARALLEL DO
455 BENCH_END(tke_rhs_tim)
457        ENDIF
459 ! calculate vertical diffusion first and then horizontal
460 ! (keep this order)
462        IF(config_flags%diff_opt .eq. 2) THEN
464          IF (config_flags%bl_pbl_physics .eq. 0) THEN
466 BENCH_START(vert_diff_tim)
467            !$OMP PARALLEL DO   &
468            !$OMP PRIVATE ( ij )
469            DO ij = 1 , grid%num_tiles
471              CALL wrf_debug ( 200 , ' call vertical_diffusion_2 ' )
472              CALL vertical_diffusion_2( ru_tendf, rv_tendf, rw_tendf,            &
473                                       t_tendf, tke_tend,                         &
474                                       moist_tend, num_moist,                      &
475                                       chem_tend, num_chem,                       &
476                                       scalar_tend, num_scalar,                     &
477                                       grid%u_2, grid%v_2,                                  &
478                                       grid%t_2,grid%u_base,grid%v_base,grid%t_base,grid%qv_base,          &
479                                       grid%mut,grid%tke_2,config_flags, &
480                                       grid%defor13,grid%defor23,grid%defor33,                   &
481                                       grid%div, moist, chem, scalar,                  &
482                                       grid%xkmv, grid%xkhv, config_flags%km_opt,                        &
483                                       grid%fnm, grid%fnp, grid%dn, grid%dnw, grid%rdz, grid%rdzw, &
484                                       grid%hfx, grid%qfx, grid%ustm, rho,        &
485                                       ids, ide, jds, jde, kds, kde,              &
486                                       ims, ime, jms, jme, kms, kme,              &
487                                       grid%i_start(ij), grid%i_end(ij),          &
488                                       grid%j_start(ij), grid%j_end(ij),          &
489                                       k_start, k_end                             )
491            ENDDO
492            !$OMP END PARALLEL DO
493 BENCH_END(vert_diff_tim)
495          ENDIF
497 BENCH_START(hor_diff_tim)
498          !$OMP PARALLEL DO   &
499          !$OMP PRIVATE ( ij )
500          DO ij = 1 , grid%num_tiles
502            CALL wrf_debug ( 200 , ' call horizontal_diffusion_2' )
503            CALL horizontal_diffusion_2( t_tendf, ru_tendf, rv_tendf, rw_tendf, &
504                                       tke_tend,                              &
505                                       moist_tend, num_moist,                  &
506                                       chem_tend, num_chem,                   &
507                                       scalar_tend, num_scalar,                 &
508                                       grid%t_2, th_phy,                           &
509                                       grid%mut, grid%tke_2, config_flags,              &
510                                       grid%defor11, grid%defor22, grid%defor12,             &
511                                       grid%defor13, grid%defor23, grid%div,                 &
512                                       moist, chem, scalar,                   &
513                                       grid%msfux,grid%msfuy, grid%msfvx,grid%msfvy, grid%msftx,  &
514                                       grid%msfty, grid%xkmh, grid%xkhh, config_flags%km_opt,     &
515                                       grid%rdx, grid%rdy, grid%rdz, grid%rdzw,                   &
516                                       grid%fnm, grid%fnp, grid%cf1, grid%cf2, grid%cf3,          &
517                                       grid%zx, grid%zy, grid%dn, grid%dnw,                       &
518                                       ids, ide, jds, jde, kds, kde,          &
519                                       ims, ime, jms, jme, kms, kme,          &
520                                       grid%i_start(ij), grid%i_end(ij),      &
521                                       grid%j_start(ij), grid%j_end(ij),      &
522                                       k_start    , k_end                    )
523          ENDDO
524          !$OMP END PARALLEL DO
525 BENCH_END(hor_diff_tim)
526        ENDIF
528        IF ( grid%obs_nudge_opt .EQ. 1 ) THEN
529 # ifdef DM_PARALLEL
530 #       include "HALO_OBS_NUDGE.inc"
531 #endif
532 !***********************************************************************
533 ! This section for obs nudging
534          !$OMP PARALLEL DO   &
535          !$OMP PRIVATE ( ij )
537          DO ij = 1 , grid%num_tiles
539            CALL fddaobs_driver (grid%grid_id, model_config_rec%grid_id, &
540                    model_config_rec%parent_id, config_flags%restart,    &
541                    grid%obs_nudge_opt,                                  &
542                    grid%obs_ipf_errob,                                  &
543                    grid%obs_ipf_nudob,                                  &
544                    grid%fdda_start,                                     &
545                    grid%fdda_end,                                       &
546                    grid%obs_nudge_wind,                                 &
547                    grid%obs_nudge_temp,                                 &
548                    grid%obs_nudge_mois,                                 &
549                    grid%obs_nudge_pstr,                                 &
550                    grid%obs_coef_wind,                                  &
551                    grid%obs_coef_temp,                                  &
552                    grid%obs_coef_mois,                                  &
553                    grid%obs_coef_pstr,                                  &             
554                    grid%obs_rinxy,                                      &
555                    grid%obs_rinsig,                                     &
556                    grid%obs_npfi,                                       &
557                    grid%obs_ionf,                                       &
558                    grid%obs_nobs_prt,                                   &
559                    grid%obs_idynin,                                     &
560                    grid%obs_dtramp,                                     &
561                    model_config_rec%cen_lat(1),                         &
562                    model_config_rec%cen_lon(1),                         &
563                    config_flags%truelat1,                               &
564                    config_flags%truelat2,                               &
565                    config_flags%map_proj,                               &
566                    model_config_rec%i_parent_start,                     &
567                    model_config_rec%j_parent_start,                     &
568                    grid%parent_grid_ratio,                              &
569                    grid%max_dom, grid%itimestep,                        &
570                    grid%dt, grid%gmt, grid%julday, grid%fdob,           &
571                    grid%max_obs,                                        &
572                    model_config_rec%nobs_ndg_vars,                      &
573                    model_config_rec%nobs_err_flds,                      &
574                    grid%fdob%nstat, grid%fdob%varobs, grid%fdob%errf,   &
575                    grid%dx, grid%KPBL,grid%HT,                          &
576                    grid%mut, grid%muu, grid%muv,               &
577                    grid%msftx, grid%msfty, grid%msfux, grid%msfuy, grid%msfvx, grid%msfvy, &
578                    p_phy, t_tendf, t0,                                  &
579                    grid%u_2, grid%v_2, grid%t_2,               &
580                    moist(ims,kms,jms,P_QV),                                   &
581                    grid%pb, grid%p_top, grid%p,                   &
582                    grid%uratx, grid%vratx, grid%tratx,                  &
583                    ru_tendf, rv_tendf,                                  &
584                    moist_tend(ims,kms,jms,P_QV), grid%obs_savwt,           &
585                    ids,ide, jds,jde, kds,kde,                           &
586                    ims,ime, jms,jme, kms,kme,                           &
587                    grid%i_start(ij), min(grid%i_end(ij),ide-1),         &
588                    grid%j_start(ij), min(grid%j_end(ij),jde-1),         &
589                    k_start    , min(k_end,kde-1)                     )
591          ENDDO
592          !$OMP END PARALLEL DO
593        ENDIF  ! obs_nudge_opt .eq. 1
595 !***********************************************************************
597   END SUBROUTINE first_rk_step_part2
599 END MODULE module_first_rk_step_part2