r4627 | gill | 2010-12-29 16:29:58 -0700 (Wed, 29 Dec 2010) | 5 lines
[wrffire.git] / wrfv2_fire / dyn_em / module_first_rk_step_part2.F
blob57dd3012cbad4d30646a29bdfcb8dc1085727989
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                              , tracer, tracer_tend              &
14                              , scalar , scalar_tend             &
15                              , fdda3d, fdda2d                   &
16                              , ru_tendf, rv_tendf               &
17                              , rw_tendf, t_tendf                &
18                              , ph_tendf, mu_tendf               &
19                              , tke_tend                         &
20                              , adapt_step_flag , curr_secs      &
21                              , psim , psih , wspd , gz1oz0 , br , chklowq &
22                              , cu_act_flag , hol , th_phy        &
23                              , pi_phy , p_phy , t_phy , u_phy , v_phy     &
24                              , dz8w , p8w , t8w , rho_phy , rho           &
25                              , nba_mij, n_nba_mij         & !JDM
26                              , nba_rij, n_nba_rij         & !JDM
27                              , ids, ide, jds, jde, kds, kde     &
28                              , ims, ime, jms, jme, kms, kme     &
29                              , ips, ipe, jps, jpe, kps, kpe     &
30                              , k_start , k_end                  &
31                             )
32     USE module_state_description
33     USE module_model_constants
34     USE module_domain, ONLY : domain
35     USE module_configure, ONLY : grid_config_rec_type, model_config_rec
36 #ifdef DM_PARALLEL
37     USE module_dm, ONLY : local_communicator, mytask, ntasks, ntasks_x, ntasks_y, local_communicator_periodic, wrf_dm_maxval, wrf_err_message
38     USE module_comm_dm, ONLY : halo_em_tke_c_sub,halo_em_tke_d_sub,halo_em_tke_e_sub            &
39             ,halo_em_phys_pbl_sub,halo_em_fdda_sub,halo_em_phys_diffusion_sub,halo_em_tke_3_sub &
40             ,halo_em_tke_5_sub,halo_obs_nudge_sub,period_bdy_em_a1_sub,period_bdy_em_phy_bc_sub &
41             ,period_bdy_em_fdda_bc_sub,period_bdy_em_chem_sub,halo_em_phys_cu_sub
42 #endif
43     USE module_diffusion_em, ONLY : phy_bc, cal_deform_and_div, compute_diff_metrics, &
44                                     vertical_diffusion_2, horizontal_diffusion_2, calculate_km_kh, &
45                                     tke_rhs
46     USE module_em, ONLY : calculate_phy_tend
47     USE module_fddaobs_driver, ONLY : fddaobs_driver
48     USE module_bc, ONLY : set_physical_bc3d, set_physical_bc2d
49     USE module_physics_addtendc, ONLY : update_phy_ten
51     USE module_sfs_driver !JDM
53     IMPLICIT NONE
55     TYPE ( domain ), INTENT(INOUT) :: grid
56     TYPE ( grid_config_rec_type ), INTENT(IN) :: config_flags
58     INTEGER, INTENT(IN) :: ids, ide, jds, jde, kds, kde,     &
59                            ims, ime, jms, jme, kms, kme,     &
60                            ips, ipe, jps, jpe, kps, kpe
62     LOGICAL ,INTENT(IN)                        :: adapt_step_flag
63     REAL, INTENT(IN)                           :: curr_secs
65     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT)   :: moist
66     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT)   :: moist_tend
67     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_chem),INTENT(INOUT)   :: chem
68     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_chem),INTENT(INOUT)   :: chem_tend
69     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_tracer),INTENT(INOUT)   :: tracer
70     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_tracer),INTENT(INOUT)   :: tracer_tend
71     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_scalar),INTENT(INOUT)   :: scalar
72     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_scalar),INTENT(INOUT)   :: scalar_tend
73     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme,num_fdda3d),INTENT(INOUT)  :: fdda3d
74     REAL    ,DIMENSION(ims:ime,1:1,jms:jme,num_fdda2d),INTENT(INOUT)      :: fdda2d
75     REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: psim
76     REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: psih
77     REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: wspd
78     REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: gz1oz0
79     REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: br
80     REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: chklowq
81     LOGICAL ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: cu_act_flag
82     REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT)         :: hol
84     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: th_phy
85     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: pi_phy
86     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: p_phy
87     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: t_phy
88     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: u_phy
89     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: v_phy
90     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: dz8w
91     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: p8w
92     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: t8w
93     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rho_phy
94     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rho
96     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: ru_tendf
97     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rv_tendf
98     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rw_tendf
99     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: ph_tendf
100     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: t_tendf
101     REAL    ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: tke_tend
103     REAL    ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: mu_tendf
105     INTEGER , INTENT(IN)                          ::  k_start, k_end
107 !JDM
108   INTEGER, INTENT(  IN ) :: n_nba_mij, n_nba_rij
110   REAL ,DIMENSION(grid%sm31:grid%em31,grid%sm32:grid%em32,grid%sm33:grid%em33,n_nba_mij) &
111   :: nba_mij
113   REAL ,DIMENSION(grid%sm31:grid%em31,grid%sm32:grid%em32,grid%sm33:grid%em33,n_nba_rij) &
114   :: nba_rij
116 ! Local
118     REAL, DIMENSION( ims:ime, jms:jme ) :: ht_loc
119     INTEGER, DIMENSION( ims:ime, jms:jme ) :: shadowmask 
120     INTEGER                             :: ij
121     INTEGER  num_roof_layers
122     INTEGER  num_wall_layers
123     INTEGER  num_road_layers
124     INTEGER  iswater
125     INTEGER  rk_step 
126 #if ( WRF_DFI_RADAR == 1 )
127     INTEGER  i_start,i_end,j_start,j_end,i,j,k
128 #endif
130  ! initialize all tendencies to zero in order to update physics
131  ! tendencies first (separate from dry dynamics).
133     rk_step = 1
135 ! calculate_phy_tend
137 BENCH_START(cal_phy_tend)
138       !$OMP PARALLEL DO   &
139       !$OMP PRIVATE ( ij )
141       DO ij = 1 , grid%num_tiles
143         CALL wrf_debug ( 200 , ' call calculate_phy_tend' )
144         CALL calculate_phy_tend (config_flags,grid%mut,grid%muu,grid%muv,pi_phy,            &
145                      grid%rthraten,                                         &
146                      grid%rublten,grid%rvblten,grid%rthblten,                         &
147                      grid%rqvblten,grid%rqcblten,grid%rqiblten,                       &
148                      grid%rthcuten,grid%rqvcuten,grid%rqccuten,grid%rqrcuten,              &
149                      grid%rqicuten,grid%rqscuten,                                &
150                      grid%rucuten, grid%rvcuten,                                 &
151                      grid%RUNDGDTEN,grid%RVNDGDTEN,grid%RTHNDGDTEN,grid%RQVNDGDTEN,        &
152                      grid%RMUNDGDTEN,                                       &
153                      ids,ide, jds,jde, kds,kde,                        &
154                      ims,ime, jms,jme, kms,kme,                        &
155                      grid%i_start(ij), min(grid%i_end(ij),ide-1),      &
156                      grid%j_start(ij), min(grid%j_end(ij),jde-1),      &
157                      k_start    , min(k_end,kde-1)                     )
159       ENDDO
160       !$OMP END PARALLEL DO
161 BENCH_END(cal_phy_tend)
163 ! tke diffusion
165        IF(config_flags%diff_opt .eq. 2 .OR. config_flags%diff_opt .eq. 1) THEN
167 BENCH_START(comp_diff_metrics_tim)
168          !$OMP PARALLEL DO   &
169          !$OMP PRIVATE ( ij )
170          DO ij = 1 , grid%num_tiles
171            CALL wrf_debug ( 200 , ' call compute_diff_metrics ' )
172            CALL compute_diff_metrics ( config_flags, grid%ph_2, grid%phb, grid%z, grid%rdz, grid%rdzw, &
173                                        grid%zx, grid%zy, grid%rdx, grid%rdy,                      &
174                                        ids, ide, jds, jde, kds, kde,          &
175                                        ims, ime, jms, jme, kms, kme,          &
176                                        grid%i_start(ij), grid%i_end(ij),      &
177                                        grid%j_start(ij), grid%j_end(ij),      &
178                                        k_start    , k_end                    )
179          ENDDO
180          !$OMP END PARALLEL DO
181 BENCH_END(comp_diff_metrics_tim)
183 #ifdef DM_PARALLEL
184 #  include "HALO_EM_TKE_C.inc"
185 #  include "PERIOD_BDY_EM_A1.inc"
186 #endif
188 BENCH_START(tke_diff_bc_tim)
189          !$OMP PARALLEL DO   &
190          !$OMP PRIVATE ( ij )
192          DO ij = 1 , grid%num_tiles
194            CALL wrf_debug ( 200 , ' call bc for diffusion_metrics ' )
195            CALL set_physical_bc3d( grid%rdzw , 'w', config_flags,           &
196                                    ids, ide, jds, jde, kds, kde,       &
197                                    ims, ime, jms, jme, kms, kme,       &
198                                    ips, ipe, jps, jpe, kps, kpe,       &
199                                    grid%i_start(ij), grid%i_end(ij),   &
200                                    grid%j_start(ij), grid%j_end(ij),   &
201                                    k_start    , k_end                 )
202            CALL set_physical_bc3d( grid%rdz , 'w', config_flags,            &
203                                    ids, ide, jds, jde, kds, kde,       &
204                                    ims, ime, jms, jme, kms, kme,       &
205                                    ips, ipe, jps, jpe, kps, kpe,       &
206                                    grid%i_start(ij), grid%i_end(ij),   &
207                                    grid%j_start(ij), grid%j_end(ij),   &
208                                    k_start    , k_end                 )
209            CALL set_physical_bc3d( grid%z , 'w', config_flags,              &
210                                    ids, ide, jds, jde, kds, kde,       &
211                                    ims, ime, jms, jme, kms, kme,       &
212                                    ips, ipe, jps, jpe, kps, kpe,       &
213                                    grid%i_start(ij), grid%i_end(ij),   &
214                                    grid%j_start(ij), grid%j_end(ij),   &
215                                    k_start    , k_end                 )
216            CALL set_physical_bc3d( grid%zx , 'w', config_flags,             &
217                                    ids, ide, jds, jde, kds, kde,       &
218                                    ims, ime, jms, jme, kms, kme,       &
219                                    ips, ipe, jps, jpe, kps, kpe,       &
220                                    grid%i_start(ij), grid%i_end(ij),   &
221                                    grid%j_start(ij), grid%j_end(ij),   &
222                                    k_start    , k_end                 )
223            CALL set_physical_bc3d( grid%zy , 'w', config_flags,             &
224                                    ids, ide, jds, jde, kds, kde,       &
225                                    ims, ime, jms, jme, kms, kme,       &
226                                    ips, ipe, jps, jpe, kps, kpe,       &
227                                    grid%i_start(ij), grid%i_end(ij),   &
228                                    grid%j_start(ij), grid%j_end(ij),   &
229                                    k_start    , k_end                 )
230            CALL set_physical_bc2d( grid%ustm, 't', config_flags,            &
231                                    ids, ide, jds, jde,                 &
232                                    ims, ime, jms, jme,                 &
233                                    ips, ipe, jps, jpe,                 &
234                                    grid%i_start(ij), grid%i_end(ij),   &
235                                    grid%j_start(ij), grid%j_end(ij)   )
237          ENDDO
238          !$OMP END PARALLEL DO
239 BENCH_END(tke_diff_bc_tim)
241 BENCH_START(deform_div_tim)
243          !$OMP PARALLEL DO   &
244          !$OMP PRIVATE ( ij )
246          DO ij = 1 , grid%num_tiles
248            CALL wrf_debug ( 200 , ' call cal_deform_and_div' )
249            CALL cal_deform_and_div ( config_flags,grid%u_2,grid%v_2,grid%w_2,grid%div,  &
250                                      grid%defor11,grid%defor22,grid%defor33,            &
251                                      grid%defor12,grid%defor13,grid%defor23,            &
252                                      nba_rij, n_nba_rij,                                & !JDM
253                                      grid%u_base, grid%v_base,grid%msfux,grid%msfuy,    &
254                                      grid%msfvx,grid%msfvy,grid%msftx,grid%msfty,       &
255                                      grid%rdx, grid%rdy, grid%dn, grid%dnw, grid%rdz,   &
256                                      grid%rdzw,grid%fnm,grid%fnp,grid%cf1,grid%cf2,     &
257                                      grid%cf3,grid%zx,grid%zy,            &
258                                      ids, ide, jds, jde, kds, kde,        &
259                                      ims, ime, jms, jme, kms, kme,        &
260                                      grid%i_start(ij), grid%i_end(ij),    &
261                                      grid%j_start(ij), grid%j_end(ij),    &
262                                      k_start    , k_end                  )
263          ENDDO
264          !$OMP END PARALLEL DO
265 BENCH_END(deform_div_tim)
267 #ifdef DM_PARALLEL
268 #     include "HALO_EM_TKE_D.inc"
269 #endif
271 ! calculate tke, kmh, and kmv
273 BENCH_START(calc_tke_tim)
274          !$OMP PARALLEL DO   &
275          !$OMP PRIVATE ( ij )
276          DO ij = 1 , grid%num_tiles
278            CALL wrf_debug ( 200 , ' call calculate_km_kh' )
279            CALL calculate_km_kh( config_flags,grid%dt,grid%dampcoef,grid%zdamp,         &
280                                  config_flags%damp_opt,                                 &
281                                  grid%xkmh,grid%xkmv,grid%xkhh,grid%xkhv,grid%bn2,      &
282                                  grid%khdif,grid%kvdif,grid%div,                        &
283                                  grid%defor11,grid%defor22,grid%defor33,grid%defor12,   &
284                                  grid%defor13,grid%defor23,                             &
285                                  grid%tke_2,p8w,t8w,th_phy,                             &
286                                  t_phy,p_phy,moist,grid%dn,grid%dnw,                    &
287                                  grid%dx,grid%dy,grid%rdz,grid%rdzw,                    &
288                                  config_flags%mix_isotropic,num_moist,                  &
289                                  grid%cf1, grid%cf2, grid%cf3, grid%warm_rain,          &
290                                  grid%mix_upper_bound,                                  &
291                                  grid%msftx, grid%msfty,                                &
292                                  ids,ide, jds,jde, kds,kde,                             &
293                                  ims,ime, jms,jme, kms,kme,                             &
294                                  grid%i_start(ij), grid%i_end(ij),                      &
295                                  grid%j_start(ij), grid%j_end(ij),                      &
296                                  k_start    , k_end                          )
297          ENDDO
298        !$OMP END PARALLEL DO
299 BENCH_END(calc_tke_tim)
301 #ifdef DM_PARALLEL
302 #     include "HALO_EM_TKE_E.inc"
303 #endif
305        ENDIF
307 #ifdef DM_PARALLEL
308 #      include "PERIOD_BDY_EM_PHY_BC.inc"
309        IF ( config_flags%grid_fdda .eq. 1) THEN
310 #      include "PERIOD_BDY_EM_FDDA_BC.inc"
311        ENDIF
312 #      include "PERIOD_BDY_EM_CHEM.inc"
313 #endif
315 BENCH_START(phy_bc_tim)
316        !$OMP PARALLEL DO   &
317        !$OMP PRIVATE ( ij )
319        DO ij = 1 , grid%num_tiles
321          CALL wrf_debug ( 200 , ' call phy_bc' )
322          CALL phy_bc (config_flags,grid%div,grid%defor11,grid%defor22,grid%defor33,            &
323                       grid%defor12,grid%defor13,grid%defor23,      &
324                       grid%xkmh,grid%xkmv,grid%xkhh,grid%xkhv,     &
325                       grid%tke_2,                                  &
326                       grid%rublten, grid%rvblten,                  &
327                       grid%rucuten, grid%rvcuten,                  & ! Tiedtke and NSAS
328                       ids, ide, jds, jde, kds, kde,                &
329                       ims, ime, jms, jme, kms, kme,                &
330                       ips, ipe, jps, jpe, kps, kpe,                &
331                       grid%i_start(ij), grid%i_end(ij),            &
332                       grid%j_start(ij), grid%j_end(ij),            &
333                       k_start    , k_end                           )
334        ENDDO
335        !$OMP END PARALLEL DO
336 BENCH_END(phy_bc_tim)
338 !JDM
339 IF ( ( config_flags%sfs_opt .GT. 0 ) .AND. ( config_flags%diff_opt .eq. 2 ) ) THEN
341  CALL sfs_driver( grid, config_flags,     &
342                   nba_mij, n_nba_mij,     & 
343                   nba_rij, n_nba_rij      ) 
345 ENDIF
347 #ifdef DM_PARALLEL
348 !-----------------------------------------------------------------------
350 ! MPP for some physics tendency, km, kh, deformation, and divergence
352 !                                                         * * * * * * *
353 !                                            * * * * *    * * * * * * *
354 !               *                     *      * * * * *    * * * * * * *
355 !             * + *      * + *        +      * * + * *    * * * + * * *
356 !               *                     *      * * * * *    * * * * * * *
357 !                                            * * * * *    * * * * * * *
358 !                                                         * * * * * * *
360 ! (for PBL)
361 ! rublten                  x
362 ! rvblten                             x
364 ! (for FDDA)
365 ! rundgdten     x
366 ! rvndgdten     x
368 ! (for TKE3)
369 ! tke_2                                          x               
370 ! (for TKE5)
371 ! tke_2                                                         x
373 ! (for diff_opt >= 1)
374 ! defor11                  x
375 ! defor22                             x
376 ! defor12       x
377 ! defor13                  x
378 ! defor23                             x
379 ! div           x
380 ! xkmv          x
381 ! xkmh          x
382 ! xkhv          x
383 ! xkhh          x
384 ! tke           x
386 !-----------------------------------------------------------------------
387        IF ( config_flags%bl_pbl_physics .ge. 1 ) THEN
388 #      include "HALO_EM_PHYS_PBL.inc"
389        ENDIF
390        IF ( config_flags%cu_physics == SASSCHEME      .or.   &
391             config_flags%cu_physics == TIEDTKESCHEME  .or.   &
392             config_flags%cu_physics == NSASSCHEME ) THEN
393 #      include "HALO_EM_PHYS_CU.inc"
394        ENDIF
395        IF ( config_flags%grid_fdda .ge. 1) THEN
396 #      include "HALO_EM_FDDA.inc"
397        ENDIF
398        IF ( config_flags%diff_opt .ge. 1 ) THEN
399 #      include "HALO_EM_PHYS_DIFFUSION.inc"
400        ENDIF
402        IF      ( config_flags%h_mom_adv_order <= 4 ) THEN
403 #       include "HALO_EM_TKE_3.inc"
404        ELSE IF ( config_flags%h_mom_adv_order <= 6 ) THEN
405 #       include "HALO_EM_TKE_5.inc"
406        ELSE
407          WRITE(wrf_err_message,*)'solve_em: invalid h_mom_adv_order = ',config_flags%h_mom_adv_order
408          CALL wrf_error_fatal(TRIM(wrf_err_message))
409        ENDIF
410 #endif
412 BENCH_START(update_phy_ten_tim)
413        !$OMP PARALLEL DO   &
414        !$OMP PRIVATE ( ij )
416        DO ij = 1 , grid%num_tiles
418          CALL wrf_debug ( 200 , ' call update_phy_ten' )
419 #if ( WRF_DFI_RADAR == 1 )
420          if (config_flags%cu_physics .gt. 0) then
421            i_start = grid%i_start(ij)
422            i_end   = min( grid%i_end(ij),ide-1 )
423            j_start = grid%j_start(ij)
424            j_end   = min( grid%j_end(ij),jde-1 )
425            if (config_flags%dfi_radar == 1 .and. grid%dfi_stage == DFI_FWD ) &
426                  CALL wrf_debug ( 200 , ' Zero out cu_physics' )
427            DO j = j_start, j_end
428            DO k = k_start, min( k_end,kde-1 ) - 1
429            DO i = i_start, i_end
430              if (config_flags%dfi_radar == 1 .and. grid%dfi_stage ==DFI_FWD  &
431              .and. grid%dfi_tten_rad(i,k,j) >= 1.0e-7 .and.  &
432                    grid%dfi_tten_rad(i,k,j) <= 10.) then
433 ! zero out cu-param temp tendency
434                 grid%rthcuten(i,k,j) = 0.0
435              endif
436            ENDDO
437            ENDDO
438            ENDDO
439          ENDIF
440 #endif
441          CALL update_phy_ten(ph_tendf,t_tendf, ru_tendf, rv_tendf,moist_tend ,&
442                            scalar_tend, mu_tendf,                           &
443                            grid%rthraten,grid%rthblten,grid%rthcuten,       &
444                            grid%rublten,grid%rvblten,                       &
445                            grid%rqvblten,grid%rqcblten,grid%rqiblten,       &
446                            grid%rqvcuten,grid%rqccuten,grid%rqrcuten,       &
447                            grid%rqicuten,grid%rqscuten,grid%RUNDGDTEN,      &
448                            grid%RVNDGDTEN,grid%RTHNDGDTEN,grid%RPHNDGDTEN,  &
449                            grid%RQVNDGDTEN,grid%RMUNDGDTEN,                 &
450                            grid%RUCUTEN, grid%RVCUTEN,                      &  ! Tiedtke and NSAS
451                            grid%rthfrten,grid%rqvfrten,                     &  ! fire
452                            num_moist,num_scalar,config_flags,rk_step,          &
453                            grid%adv_moist_cond,                             &
454                            ids, ide, jds, jde, kds, kde,                    &
455                            ims, ime, jms, jme, kms, kme,                    &
456                            grid%i_start(ij), grid%i_end(ij),                &
457                            grid%j_start(ij), grid%j_end(ij),                &
458                            k_start, k_end                               )
460        END DO
461        !$OMP END PARALLEL DO
462 BENCH_END(update_phy_ten_tim)
464 #ifdef PLANET
465        ! do rayleigh (and zonal-average newtonian) damping during
466        ! first iteration of RK loop only
468        IF ( (config_flags%damp_opt == 101) .OR. &
469             (config_flags%damp_opt == 103)      ) THEN
470          !$OMP PARALLEL DO   &
471          !$OMP PRIVATE ( ij )
472          DO ij = 1 , grid%num_tiles
473            CALL damptop( grid%u_2, grid%v_2, grid%t_2, &
474                          grid%mut, grid%muu, grid%muv, &
475                          pi_phy,                                &
476                          t_tendf, ru_tendf, rv_tendf, P2SI,     &
477                          ids, ide, jds, jde, kds, kde,          &
478                          ims, ime, jms, jme, kms, kme,          &
479                          grid%i_start(ij), grid%i_end(ij),      &
480                          grid%j_start(ij), grid%j_end(ij),      &
481                          k_start, k_end                         )
482          END DO
483          !$OMP END PARALLEL DO
484        END IF
485 #endif
487        IF( config_flags%diff_opt .eq. 2 .and. config_flags%km_opt .eq. 2 ) THEN
489 BENCH_START(tke_rhs_tim)
490          !$OMP PARALLEL DO   &
491          !$OMP PRIVATE ( ij )
492          DO ij = 1 , grid%num_tiles
494            CALL tke_rhs  ( tke_tend,grid%bn2,                           &
495                          config_flags,grid%defor11,grid%defor22,      &
496                          grid%defor33,                                &
497                          grid%defor12,grid%defor13,grid%defor23,      &
498                          grid%u_2,grid%v_2,grid%w_2,grid%div,         &
499                          grid%tke_2,grid%mut,                         &
500                          th_phy,p_phy,p8w,t8w,grid%z,grid%fnm,        & 
501                          grid%fnp,grid%cf1,grid%cf2,grid%cf3,         &     
502                          grid%msftx,grid%msfty,grid%xkmh,             &
503                          grid%xkmv,grid%xkhv,grid%rdx,grid%rdy,       &
504                          grid%dx,grid%dy,grid%dt,grid%zx,grid%zy,     &
505                          grid%rdz,grid%rdzw,grid%dn,                  &
506                          grid%dnw,config_flags%mix_isotropic,         &
507                          grid%hfx, grid%qfx, moist(ims,kms,jms,P_QV), &
508                          grid%ustm, rho,                              &
509                          ids, ide, jds, jde, kds, kde,                &
510                          ims, ime, jms, jme, kms, kme,                &
511                          grid%i_start(ij), grid%i_end(ij),            &
512                          grid%j_start(ij), grid%j_end(ij),            &
513                          k_start    , k_end                           )
515          ENDDO
516          !$OMP END PARALLEL DO
517 BENCH_END(tke_rhs_tim)
519        ENDIF
521 ! calculate vertical diffusion first and then horizontal
522 ! (keep this order)
524        IF(config_flags%diff_opt .eq. 2) THEN
526          IF (config_flags%bl_pbl_physics .eq. 0) THEN
528 BENCH_START(vert_diff_tim)
529            !$OMP PARALLEL DO   &
530            !$OMP PRIVATE ( ij )
531            DO ij = 1 , grid%num_tiles
533              CALL wrf_debug ( 200 , ' call vertical_diffusion_2 ' )
534              CALL vertical_diffusion_2( ru_tendf, rv_tendf, rw_tendf,            &
535                                       t_tendf, tke_tend,                         &
536                                       moist_tend, num_moist,                      &
537                                       chem_tend, num_chem,                       &
538                                       scalar_tend, num_scalar,                     &
539                                       tracer_tend, num_tracer,                     &
540                                       grid%u_2, grid%v_2,                                  &
541                                       grid%t_2,grid%u_base,grid%v_base,grid%t_base,grid%qv_base,          &
542                                       grid%mut,grid%tke_2,config_flags, &
543                                       grid%defor13,grid%defor23,grid%defor33,                   &
544                                       nba_mij, num_nba_mij,          & !JDM
545                                       grid%div, moist, chem, scalar,tracer,         &
546                                       grid%xkmv, grid%xkhv, config_flags%km_opt,                        &
547                                       grid%fnm, grid%fnp, grid%dn, grid%dnw, grid%rdz, grid%rdzw, &
548                                       grid%hfx, grid%qfx, grid%ustm, rho,        &
549                                       ids, ide, jds, jde, kds, kde,              &
550                                       ims, ime, jms, jme, kms, kme,              &
551                                       grid%i_start(ij), grid%i_end(ij),          &
552                                       grid%j_start(ij), grid%j_end(ij),          &
553                                       k_start, k_end                             )
555            ENDDO
556            !$OMP END PARALLEL DO
557 BENCH_END(vert_diff_tim)
559          ENDIF
561 BENCH_START(hor_diff_tim)
562          !$OMP PARALLEL DO   &
563          !$OMP PRIVATE ( ij )
564          DO ij = 1 , grid%num_tiles
566            CALL wrf_debug ( 200 , ' call horizontal_diffusion_2' )
567            CALL horizontal_diffusion_2( t_tendf, ru_tendf, rv_tendf, rw_tendf, &
568                                       tke_tend,                              &
569                                       moist_tend, num_moist,                  &
570                                       chem_tend, num_chem,                   &
571                                       scalar_tend, num_scalar,                 &
572                                       tracer_tend, num_tracer,                 &
573                                       grid%t_2, th_phy,                           &
574                                       grid%mut, grid%tke_2, config_flags,              &
575                                       grid%defor11, grid%defor22, grid%defor12,             &
576                                       grid%defor13, grid%defor23,   &
577                                       nba_mij, num_nba_mij,         & !JDM
578                                       grid%div,                     &
579                                       moist, chem, scalar,tracer,               &
580                                       grid%msfux,grid%msfuy, grid%msfvx,grid%msfvy, grid%msftx,  &
581                                       grid%msfty, grid%xkmh, grid%xkhh, config_flags%km_opt,     &
582                                       grid%rdx, grid%rdy, grid%rdz, grid%rdzw,                   &
583                                       grid%fnm, grid%fnp, grid%cf1, grid%cf2, grid%cf3,          &
584                                       grid%zx, grid%zy, grid%dn, grid%dnw,                       &
585                                       ids, ide, jds, jde, kds, kde,          &
586                                       ims, ime, jms, jme, kms, kme,          &
587                                       grid%i_start(ij), grid%i_end(ij),      &
588                                       grid%j_start(ij), grid%j_end(ij),      &
589                                       k_start    , k_end                    )
590          ENDDO
591          !$OMP END PARALLEL DO
592 BENCH_END(hor_diff_tim)
593        ENDIF
595        IF ( grid%obs_nudge_opt .EQ. 1 ) THEN
596 # ifdef DM_PARALLEL
597 #       include "HALO_OBS_NUDGE.inc"
598 #endif
599 !***********************************************************************
600 ! This section for obs nudging
601          !$OMP PARALLEL DO   &
602          !$OMP PRIVATE ( ij )
604          DO ij = 1 , grid%num_tiles
606            CALL fddaobs_driver (grid%grid_id, model_config_rec%grid_id, &
607                    model_config_rec%parent_id, config_flags%restart,    &
608                    config_flags,                                        &
609                    grid%obs_nudge_opt,                                  &
610                    grid%obs_ipf_errob,                                  &
611                    grid%obs_ipf_nudob,                                  &
612                    grid%fdda_start,                                     &
613                    grid%fdda_end,                                       &
614                    grid%obs_nudge_wind,                                 &
615                    grid%obs_nudge_temp,                                 &
616                    grid%obs_nudge_mois,                                 &
617                    grid%obs_nudge_pstr,                                 &
618                    grid%obs_coef_wind,                                  &
619                    grid%obs_coef_temp,                                  &
620                    grid%obs_coef_mois,                                  &
621                    grid%obs_coef_pstr,                                  &             
622                    grid%obs_rinxy,                                      &
623                    grid%obs_rinsig,                                     &
624                    grid%obs_npfi,                                       &
625                    grid%obs_ionf,                                       &
626                    grid%obs_prt_max,                                    &
627                    grid%obs_prt_freq,                                   &
628                    grid%obs_idynin,                                     &
629                    grid%obs_dtramp,                                     &
630                    grid%parent_grid_ratio,                              &
631                    grid%max_dom, grid%itimestep,                        &
632                    grid%xtime,                                          &
633                    grid%dt, grid%gmt, grid%julday, grid%fdob,           &
634                    grid%max_obs,                                        &
635                    model_config_rec%nobs_ndg_vars,                      &
636                    model_config_rec%nobs_err_flds,                      &
637                    grid%fdob%nstat, grid%fdob%varobs, grid%fdob%errf,   &
638                    grid%dx, grid%KPBL,grid%HT,                          &
639                    grid%mut, grid%muu, grid%muv,                        &
640                    grid%msftx, grid%msfty, grid%msfux, grid%msfuy, grid%msfvx, grid%msfvy, &
641                    p_phy, t_tendf, t0,                                  &
642                    grid%u_2, grid%v_2, grid%t_2,                        &
643                    moist(ims,kms,jms,P_QV),                             &
644                    grid%pb, grid%p_top, grid%p, grid%phb, grid%ph_2,    &
645                    grid%uratx, grid%vratx, grid%tratx,                  &
646                    ru_tendf, rv_tendf,                                  &
647                    moist_tend(ims,kms,jms,P_QV), grid%obs_savwt,        &
648                    grid%regime, grid%pblh, grid%z_at_w, grid%z,         &
649                    ids,ide, jds,jde, kds,kde,                           &
650                    ims,ime, jms,jme, kms,kme,                           &
651                    grid%i_start(ij), min(grid%i_end(ij),ide-1),         &
652                    grid%j_start(ij), min(grid%j_end(ij),jde-1),         &
653                    k_start    , min(k_end,kde-1)                     )
655          ENDDO
656          !$OMP END PARALLEL DO
657        ENDIF  ! obs_nudge_opt .eq. 1
659 !***********************************************************************
661   END SUBROUTINE first_rk_step_part2
663 END MODULE module_first_rk_step_part2