1 !WRF:MEDIATION_LAYER:SOLVER
6 MODULE module_first_rk_step_part2
10 SUBROUTINE first_rk_step_part2 ( grid , config_flags &
11 , moist , moist_tend &
13 , tracer, tracer_tend &
14 , scalar , scalar_tend &
16 , ru_tendf, rv_tendf &
18 , ph_tendf, mu_tendf &
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 &
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
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
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, &
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
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
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) &
113 REAL ,DIMENSION(grid%sm31:grid%em31,grid%sm32:grid%em32,grid%sm33:grid%em33,n_nba_rij) &
118 REAL, DIMENSION( ims:ime, jms:jme ) :: ht_loc
119 INTEGER, DIMENSION( ims:ime, jms:jme ) :: shadowmask
121 INTEGER num_roof_layers
122 INTEGER num_wall_layers
123 INTEGER num_road_layers
126 #if ( WRF_DFI_RADAR == 1 )
127 INTEGER i_start,i_end,j_start,j_end,i,j,k
130 ! initialize all tendencies to zero in order to update physics
131 ! tendencies first (separate from dry dynamics).
137 BENCH_START(cal_phy_tend)
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, &
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, &
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) )
160 !$OMP END PARALLEL DO
161 BENCH_END(cal_phy_tend)
165 IF(config_flags%diff_opt .eq. 2 .OR. config_flags%diff_opt .eq. 1) THEN
167 BENCH_START(comp_diff_metrics_tim)
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), &
180 !$OMP END PARALLEL DO
181 BENCH_END(comp_diff_metrics_tim)
184 # include "HALO_EM_TKE_C.inc"
185 # include "PERIOD_BDY_EM_A1.inc"
188 BENCH_START(tke_diff_bc_tim)
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), &
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), &
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), &
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), &
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), &
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) )
238 !$OMP END PARALLEL DO
239 BENCH_END(tke_diff_bc_tim)
241 BENCH_START(deform_div_tim)
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), &
264 !$OMP END PARALLEL DO
265 BENCH_END(deform_div_tim)
268 # include "HALO_EM_TKE_D.inc"
271 ! calculate tke, kmh, and kmv
273 BENCH_START(calc_tke_tim)
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), &
298 !$OMP END PARALLEL DO
299 BENCH_END(calc_tke_tim)
302 # include "HALO_EM_TKE_E.inc"
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"
312 # include "PERIOD_BDY_EM_CHEM.inc"
315 BENCH_START(phy_bc_tim)
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, &
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), &
335 !$OMP END PARALLEL DO
336 BENCH_END(phy_bc_tim)
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, &
348 !-----------------------------------------------------------------------
350 ! MPP for some physics tendency, km, kh, deformation, and divergence
353 ! * * * * * * * * * * * *
354 ! * * * * * * * * * * * * * *
355 ! * + * * + * + * * + * * * * * + * * *
356 ! * * * * * * * * * * * * * *
357 ! * * * * * * * * * * * *
373 ! (for diff_opt >= 1)
386 !-----------------------------------------------------------------------
387 IF ( config_flags%bl_pbl_physics .ge. 1 ) THEN
388 # include "HALO_EM_PHYS_PBL.inc"
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"
395 IF ( config_flags%grid_fdda .ge. 1) THEN
396 # include "HALO_EM_FDDA.inc"
398 IF ( config_flags%diff_opt .ge. 1 ) THEN
399 # include "HALO_EM_PHYS_DIFFUSION.inc"
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"
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))
412 BENCH_START(update_phy_ten_tim)
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
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), &
461 !$OMP END PARALLEL DO
462 BENCH_END(update_phy_ten_tim)
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
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, &
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), &
483 !$OMP END PARALLEL DO
487 IF( config_flags%diff_opt .eq. 2 .and. config_flags%km_opt .eq. 2 ) THEN
489 BENCH_START(tke_rhs_tim)
492 DO ij = 1 , grid%num_tiles
494 CALL tke_rhs ( tke_tend,grid%bn2, &
495 config_flags,grid%defor11,grid%defor22, &
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), &
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), &
516 !$OMP END PARALLEL DO
517 BENCH_END(tke_rhs_tim)
521 ! calculate vertical diffusion first and then horizontal
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)
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, &
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), &
556 !$OMP END PARALLEL DO
557 BENCH_END(vert_diff_tim)
561 BENCH_START(hor_diff_tim)
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, &
569 moist_tend, num_moist, &
570 chem_tend, num_chem, &
571 scalar_tend, num_scalar, &
572 tracer_tend, num_tracer, &
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
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), &
591 !$OMP END PARALLEL DO
592 BENCH_END(hor_diff_tim)
595 IF ( grid%obs_nudge_opt .EQ. 1 ) THEN
597 # include "HALO_OBS_NUDGE.inc"
599 !***********************************************************************
600 ! This section for obs nudging
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, &
609 grid%obs_nudge_opt, &
610 grid%obs_ipf_errob, &
611 grid%obs_ipf_nudob, &
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, &
630 grid%parent_grid_ratio, &
631 grid%max_dom, grid%itimestep, &
633 grid%dt, grid%gmt, grid%julday, grid%fdob, &
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) )
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