!WRF:MEDIATION_LAYER:SOLVER
#define BENCH_START(A)
#define BENCH_END(A)
MODULE module_first_rk_step_part2
(docs) 1
CONTAINS
SUBROUTINE first_rk_step_part2
(docs) ( grid , config_flags & 1,29
, moist , moist_tend &
, chem , chem_tend &
, scalar , scalar_tend &
, fdda3d, fdda2d &
, ru_tendf, rv_tendf &
, rw_tendf, t_tendf &
, ph_tendf, mu_tendf &
, tke_tend &
, adapt_step_flag , curr_secs &
, psim , psih , wspd , gz1oz0 , br , chklowq &
, cu_act_flag , hol , th_phy &
, pi_phy , p_phy , t_phy , u_phy , v_phy &
, dz8w , p8w , t8w , rho_phy , rho &
, mu_3d &
, ids, ide, jds, jde, kds, kde &
, ims, ime, jms, jme, kms, kme &
, ips, ipe, jps, jpe, kps, kpe &
, k_start , k_end &
)
USE module_state_description
USE module_model_constants
USE module_domain
, ONLY : domain
USE module_configure
, ONLY : grid_config_rec_type, model_config_rec
#ifdef DM_PARALLEL
USE module_dm
, ONLY : local_communicator, mytask, ntasks, ntasks_x, ntasks_y, local_communicator_periodic, wrf_dm_maxval, wrf_err_message
#else
USE module_dm
#endif
USE module_comm_dm
USE module_diffusion_em
, ONLY : phy_bc, cal_deform_and_div, compute_diff_metrics, &
vertical_diffusion_2, horizontal_diffusion_2, calculate_km_kh, &
tke_rhs
USE module_em
, ONLY : calculate_phy_tend
USE module_fddaobs_driver
, ONLY : fddaobs_driver
USE module_bc
, ONLY : set_physical_bc3d, set_physical_bc2d
USE module_physics_addtendc
, ONLY : update_phy_ten
IMPLICIT NONE
TYPE ( domain ), INTENT(INOUT) :: grid
TYPE ( grid_config_rec_type ), INTENT(IN) :: config_flags
INTEGER, INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
ims, ime, jms, jme, kms, kme, &
ips, ipe, jps, jpe, kps, kpe
LOGICAL ,INTENT(IN) :: adapt_step_flag
REAL, INTENT(IN) :: curr_secs
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT) :: moist
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT) :: moist_tend
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme,num_chem),INTENT(INOUT) :: chem
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme,num_chem),INTENT(INOUT) :: chem_tend
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme,num_scalar),INTENT(INOUT) :: scalar
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme,num_scalar),INTENT(INOUT) :: scalar_tend
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme,num_fdda3d),INTENT(INOUT) :: fdda3d
REAL ,DIMENSION(ims:ime,1:1,jms:jme,num_fdda2d),INTENT(INOUT) :: fdda2d
REAL ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: psim
REAL ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: psih
REAL ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: wspd
REAL ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: gz1oz0
REAL ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: br
REAL ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: chklowq
LOGICAL ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: cu_act_flag
REAL ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: hol
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: th_phy
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: pi_phy
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: p_phy
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: t_phy
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: u_phy
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: v_phy
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: dz8w
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: p8w
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: t8w
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rho_phy
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rho
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: mu_3d
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: ru_tendf
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rv_tendf
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rw_tendf
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: ph_tendf
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: t_tendf
REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: tke_tend
REAL ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: mu_tendf
INTEGER , INTENT(IN) :: k_start, k_end
! Local
REAL, DIMENSION( ims:ime, jms:jme ) :: ht_loc
INTEGER, DIMENSION( ims:ime, jms:jme ) :: shadowmask
INTEGER :: ij
INTEGER num_roof_layers
INTEGER num_wall_layers
INTEGER num_road_layers
INTEGER iswater
INTEGER rk_step
! initialize all tendencies to zero in order to update physics
! tendencies first (separate from dry dynamics).
rk_step = 1
! calculate_phy_tend
BENCH_START(cal_phy_tend)
!$OMP PARALLEL DO &
!$OMP PRIVATE ( ij )
DO ij = 1 , grid%num_tiles
CALL wrf_debug ( 200 , ' call calculate_phy_tend' )
CALL calculate_phy_tend
(config_flags,grid%mut,grid%muu,grid%muv,pi_phy, &
grid%rthraten, &
grid%rublten,grid%rvblten,grid%rthblten, &
grid%rqvblten,grid%rqcblten,grid%rqiblten, &
grid%rthcuten,grid%rqvcuten,grid%rqccuten,grid%rqrcuten, &
grid%rqicuten,grid%rqscuten, &
grid%RUNDGDTEN,grid%RVNDGDTEN,grid%RTHNDGDTEN,grid%RQVNDGDTEN, &
grid%RMUNDGDTEN, &
ids,ide, jds,jde, kds,kde, &
ims,ime, jms,jme, kms,kme, &
grid%i_start(ij), min(grid%i_end(ij),ide-1), &
grid%j_start(ij), min(grid%j_end(ij),jde-1), &
k_start , min(k_end,kde-1) )
ENDDO
!$OMP END PARALLEL DO
BENCH_END(cal_phy_tend)
! tke diffusion
IF(config_flags%diff_opt .eq. 2 .OR. config_flags%diff_opt .eq. 1) THEN
BENCH_START(comp_diff_metrics_tim)
!$OMP PARALLEL DO &
!$OMP PRIVATE ( ij )
DO ij = 1 , grid%num_tiles
CALL wrf_debug ( 200 , ' call compute_diff_metrics ' )
CALL compute_diff_metrics
( config_flags, grid%ph_2, grid%phb, grid%z, grid%rdz, grid%rdzw, &
grid%zx, grid%zy, grid%rdx, grid%rdy, &
ids, ide, jds, jde, kds, kde, &
ims, ime, jms, jme, kms, kme, &
grid%i_start(ij), grid%i_end(ij), &
grid%j_start(ij), grid%j_end(ij), &
k_start , k_end )
ENDDO
!$OMP END PARALLEL DO
BENCH_END(comp_diff_metrics_tim)
#ifdef DM_PARALLEL
# include "HALO_EM_TKE_C.inc"
# include "PERIOD_BDY_EM_A1.inc"
#endif
BENCH_START(tke_diff_bc_tim)
!$OMP PARALLEL DO &
!$OMP PRIVATE ( ij )
DO ij = 1 , grid%num_tiles
CALL wrf_debug ( 200 , ' call bc for diffusion_metrics ' )
CALL set_physical_bc3d
( grid%rdzw , 'w', config_flags, &
ids, ide, jds, jde, kds, kde, &
ims, ime, jms, jme, kms, kme, &
ips, ipe, jps, jpe, kps, kpe, &
grid%i_start(ij), grid%i_end(ij), &
grid%j_start(ij), grid%j_end(ij), &
k_start , k_end )
CALL set_physical_bc3d
( grid%rdz , 'w', config_flags, &
ids, ide, jds, jde, kds, kde, &
ims, ime, jms, jme, kms, kme, &
ips, ipe, jps, jpe, kps, kpe, &
grid%i_start(ij), grid%i_end(ij), &
grid%j_start(ij), grid%j_end(ij), &
k_start , k_end )
CALL set_physical_bc3d
( grid%z , 'w', config_flags, &
ids, ide, jds, jde, kds, kde, &
ims, ime, jms, jme, kms, kme, &
ips, ipe, jps, jpe, kps, kpe, &
grid%i_start(ij), grid%i_end(ij), &
grid%j_start(ij), grid%j_end(ij), &
k_start , k_end )
CALL set_physical_bc3d
( grid%zx , 'w', config_flags, &
ids, ide, jds, jde, kds, kde, &
ims, ime, jms, jme, kms, kme, &
ips, ipe, jps, jpe, kps, kpe, &
grid%i_start(ij), grid%i_end(ij), &
grid%j_start(ij), grid%j_end(ij), &
k_start , k_end )
CALL set_physical_bc3d
( grid%zy , 'w', config_flags, &
ids, ide, jds, jde, kds, kde, &
ims, ime, jms, jme, kms, kme, &
ips, ipe, jps, jpe, kps, kpe, &
grid%i_start(ij), grid%i_end(ij), &
grid%j_start(ij), grid%j_end(ij), &
k_start , k_end )
CALL set_physical_bc2d
( grid%ustm, 't', config_flags, &
ids, ide, jds, jde, &
ims, ime, jms, jme, &
ips, ipe, jps, jpe, &
grid%i_start(ij), grid%i_end(ij), &
grid%j_start(ij), grid%j_end(ij) )
ENDDO
!$OMP END PARALLEL DO
BENCH_END(tke_diff_bc_tim)
BENCH_START(deform_div_tim)
!$OMP PARALLEL DO &
!$OMP PRIVATE ( ij )
DO ij = 1 , grid%num_tiles
CALL wrf_debug ( 200 , ' call cal_deform_and_div' )
CALL cal_deform_and_div
( config_flags,grid%u_2,grid%v_2,grid%w_2,grid%div, &
grid%defor11,grid%defor22,grid%defor33, &
grid%defor12,grid%defor13,grid%defor23, &
grid%u_base, grid%v_base,grid%msfux,grid%msfuy, &
grid%msfvx,grid%msfvy,grid%msftx,grid%msfty, &
grid%rdx, grid%rdy, grid%dn, grid%dnw, grid%rdz, &
grid%rdzw,grid%fnm,grid%fnp,grid%cf1,grid%cf2, &
grid%cf3,grid%zx,grid%zy, &
ids, ide, jds, jde, kds, kde, &
ims, ime, jms, jme, kms, kme, &
grid%i_start(ij), grid%i_end(ij), &
grid%j_start(ij), grid%j_end(ij), &
k_start , k_end )
ENDDO
!$OMP END PARALLEL DO
BENCH_END(deform_div_tim)
#ifdef DM_PARALLEL
# include "HALO_EM_TKE_D.inc"
#endif
! calculate tke, kmh, and kmv
BENCH_START(calc_tke_tim)
!$OMP PARALLEL DO &
!$OMP PRIVATE ( ij )
DO ij = 1 , grid%num_tiles
CALL wrf_debug ( 200 , ' call calculate_km_kh' )
CALL calculate_km_kh
( config_flags,grid%dt,grid%dampcoef,grid%zdamp, &
config_flags%damp_opt, &
grid%xkmh,grid%xkmv,grid%xkhh,grid%xkhv,grid%bn2, &
grid%khdif,grid%kvdif,grid%div, &
grid%defor11,grid%defor22,grid%defor33,grid%defor12, &
grid%defor13,grid%defor23, &
grid%tke_2,p8w,t8w,th_phy, &
t_phy,p_phy,moist,grid%dn,grid%dnw, &
grid%dx,grid%dy,grid%rdz,grid%rdzw, &
config_flags%mix_isotropic,num_moist, &
grid%cf1, grid%cf2, grid%cf3, grid%warm_rain, &
grid%mix_upper_bound, &
grid%msftx, grid%msfty, &
ids,ide, jds,jde, kds,kde, &
ims,ime, jms,jme, kms,kme, &
grid%i_start(ij), grid%i_end(ij), &
grid%j_start(ij), grid%j_end(ij), &
k_start , k_end )
ENDDO
!$OMP END PARALLEL DO
BENCH_END(calc_tke_tim)
#ifdef DM_PARALLEL
# include "HALO_EM_TKE_E.inc"
#endif
ENDIF
#ifdef DM_PARALLEL
# include "PERIOD_BDY_EM_PHY_BC.inc"
IF ( config_flags%grid_fdda .eq. 1) THEN
# include "PERIOD_BDY_EM_FDDA_BC.inc"
ENDIF
# include "PERIOD_BDY_EM_CHEM.inc"
#endif
BENCH_START(phy_bc_tim)
!$OMP PARALLEL DO &
!$OMP PRIVATE ( ij )
DO ij = 1 , grid%num_tiles
CALL wrf_debug ( 200 , ' call phy_bc' )
CALL phy_bc
(config_flags,grid%div,grid%defor11,grid%defor22,grid%defor33, &
grid%defor12,grid%defor13,grid%defor23, &
grid%xkmh,grid%xkmv,grid%xkhh,grid%xkhv, &
grid%tke_2, &
grid%rublten, grid%rvblten, &
ids, ide, jds, jde, kds, kde, &
ims, ime, jms, jme, kms, kme, &
ips, ipe, jps, jpe, kps, kpe, &
grid%i_start(ij), grid%i_end(ij), &
grid%j_start(ij), grid%j_end(ij), &
k_start , k_end )
ENDDO
!$OMP END PARALLEL DO
BENCH_END(phy_bc_tim)
#ifdef DM_PARALLEL
!-----------------------------------------------------------------------
!
! MPP for some physics tendency, km, kh, deformation, and divergence
!
! * * * * * * *
! * * * * * * * * * * * *
! * * * * * * * * * * * * * *
! * + * * + * + * * + * * * * * + * * *
! * * * * * * * * * * * * * *
! * * * * * * * * * * * *
! * * * * * * *
!
! (for PBL)
! rublten x
! rvblten x
!
! (for FDDA)
! rundgdten x
! rvndgdten x
!
! (for TKE3)
! tke_2 x
! (for TKE5)
! tke_2 x
!
! (for diff_opt >= 1)
! defor11 x
! defor22 x
! defor12 x
! defor13 x
! defor23 x
! div x
! xkmv x
! xkmh x
! xkhv x
! xkhh x
! tke x
!
!-----------------------------------------------------------------------
IF ( config_flags%bl_pbl_physics .ge. 1 ) THEN
# include "HALO_EM_PHYS_PBL.inc"
ENDIF
IF ( config_flags%grid_fdda .ge. 1) THEN
# include "HALO_EM_FDDA.inc"
ENDIF
IF ( config_flags%diff_opt .ge. 1 ) THEN
# include "HALO_EM_PHYS_DIFFUSION.inc"
ENDIF
IF ( config_flags%h_mom_adv_order <= 4 ) THEN
# include "HALO_EM_TKE_3.inc"
ELSE IF ( config_flags%h_mom_adv_order <= 6 ) THEN
# include "HALO_EM_TKE_5.inc"
ELSE
WRITE(wrf_err_message,*)'solve_em: invalid h_mom_adv_order = ',config_flags%h_mom_adv_order
CALL wrf_error_fatal
(TRIM(wrf_err_message))
ENDIF
#endif
BENCH_START(update_phy_ten_tim)
!$OMP PARALLEL DO &
!$OMP PRIVATE ( ij )
DO ij = 1 , grid%num_tiles
CALL wrf_debug ( 200 , ' call update_phy_ten' )
CALL update_phy_ten
(ph_tendf,t_tendf, ru_tendf, rv_tendf,moist_tend ,&
scalar_tend, mu_tendf, &
grid%rthraten,grid%rthblten,grid%rthcuten, &
grid%rublten,grid%rvblten, &
grid%rqvblten,grid%rqcblten,grid%rqiblten, &
grid%rqvcuten,grid%rqccuten,grid%rqrcuten, &
grid%rqicuten,grid%rqscuten,grid%RUNDGDTEN, &
grid%RVNDGDTEN,grid%RTHNDGDTEN,grid%RPHNDGDTEN, &
grid%RQVNDGDTEN,grid%RMUNDGDTEN, &
grid%rthfrten,grid%rqvfrten, & ! fire
num_moist,num_scalar,config_flags,rk_step, &
grid%adv_moist_cond, &
ids, ide, jds, jde, kds, kde, &
ims, ime, jms, jme, kms, kme, &
grid%i_start(ij), grid%i_end(ij), &
grid%j_start(ij), grid%j_end(ij), &
k_start, k_end )
END DO
!$OMP END PARALLEL DO
BENCH_END(update_phy_ten_tim)
#ifdef PLANET
! do rayleigh (and zonal-average newtonian) damping during
! first iteration of RK loop only
IF ( (config_flags%damp_opt == 101) .OR. &
(config_flags%damp_opt == 103) ) THEN
!$OMP PARALLEL DO &
!$OMP PRIVATE ( ij )
DO ij = 1 , grid%num_tiles
CALL damptop( grid%u_2, grid%v_2, grid%t_2, &
grid%mut, grid%muu, grid%muv, &
pi_phy, &
t_tendf, ru_tendf, rv_tendf, P2SI, &
ids, ide, jds, jde, kds, kde, &
ims, ime, jms, jme, kms, kme, &
grid%i_start(ij), grid%i_end(ij), &
grid%j_start(ij), grid%j_end(ij), &
k_start, k_end )
END DO
!$OMP END PARALLEL DO
END IF
#endif
IF( config_flags%diff_opt .eq. 2 .and. config_flags%km_opt .eq. 2 ) THEN
BENCH_START(tke_rhs_tim)
!$OMP PARALLEL DO &
!$OMP PRIVATE ( ij )
DO ij = 1 , grid%num_tiles
CALL tke_rhs
( tke_tend,grid%bn2, &
config_flags,grid%defor11,grid%defor22, &
grid%defor33, &
grid%defor12,grid%defor13,grid%defor23, &
grid%u_2,grid%v_2,grid%w_2,grid%div, &
grid%tke_2,grid%mut, &
th_phy,p_phy,p8w,t8w,grid%z,grid%fnm, &
grid%fnp,grid%cf1,grid%cf2,grid%cf3, &
grid%msftx,grid%msfty,grid%xkmh, &
grid%xkmv,grid%xkhv,grid%rdx,grid%rdy, &
grid%dx,grid%dy,grid%dt,grid%zx,grid%zy, &
grid%rdz,grid%rdzw,grid%dn, &
grid%dnw,config_flags%mix_isotropic, &
grid%hfx, grid%qfx, moist(ims,kms,jms,P_QV), &
grid%ustm, rho, &
ids, ide, jds, jde, kds, kde, &
ims, ime, jms, jme, kms, kme, &
grid%i_start(ij), grid%i_end(ij), &
grid%j_start(ij), grid%j_end(ij), &
k_start , k_end )
ENDDO
!$OMP END PARALLEL DO
BENCH_END(tke_rhs_tim)
ENDIF
! calculate vertical diffusion first and then horizontal
! (keep this order)
IF(config_flags%diff_opt .eq. 2) THEN
IF (config_flags%bl_pbl_physics .eq. 0) THEN
BENCH_START(vert_diff_tim)
!$OMP PARALLEL DO &
!$OMP PRIVATE ( ij )
DO ij = 1 , grid%num_tiles
CALL wrf_debug ( 200 , ' call vertical_diffusion_2 ' )
CALL vertical_diffusion_2
( ru_tendf, rv_tendf, rw_tendf, &
t_tendf, tke_tend, &
moist_tend, num_moist, &
chem_tend, num_chem, &
scalar_tend, num_scalar, &
grid%u_2, grid%v_2, &
grid%t_2,grid%u_base,grid%v_base,grid%t_base,grid%qv_base, &
grid%mut,grid%tke_2,config_flags, &
grid%defor13,grid%defor23,grid%defor33, &
grid%div, moist, chem, scalar, &
grid%xkmv, grid%xkhv, config_flags%km_opt, &
grid%fnm, grid%fnp, grid%dn, grid%dnw, grid%rdz, grid%rdzw, &
grid%hfx, grid%qfx, grid%ustm, rho, &
ids, ide, jds, jde, kds, kde, &
ims, ime, jms, jme, kms, kme, &
grid%i_start(ij), grid%i_end(ij), &
grid%j_start(ij), grid%j_end(ij), &
k_start, k_end )
ENDDO
!$OMP END PARALLEL DO
BENCH_END(vert_diff_tim)
ENDIF
!
BENCH_START(hor_diff_tim)
!$OMP PARALLEL DO &
!$OMP PRIVATE ( ij )
DO ij = 1 , grid%num_tiles
CALL wrf_debug ( 200 , ' call horizontal_diffusion_2' )
CALL horizontal_diffusion_2
( t_tendf, ru_tendf, rv_tendf, rw_tendf, &
tke_tend, &
moist_tend, num_moist, &
chem_tend, num_chem, &
scalar_tend, num_scalar, &
grid%t_2, th_phy, &
grid%mut, grid%tke_2, config_flags, &
grid%defor11, grid%defor22, grid%defor12, &
grid%defor13, grid%defor23, grid%div, &
moist, chem, scalar, &
grid%msfux,grid%msfuy, grid%msfvx,grid%msfvy, grid%msftx, &
grid%msfty, grid%xkmh, grid%xkhh, config_flags%km_opt, &
grid%rdx, grid%rdy, grid%rdz, grid%rdzw, &
grid%fnm, grid%fnp, grid%cf1, grid%cf2, grid%cf3, &
grid%zx, grid%zy, grid%dn, grid%dnw, &
ids, ide, jds, jde, kds, kde, &
ims, ime, jms, jme, kms, kme, &
grid%i_start(ij), grid%i_end(ij), &
grid%j_start(ij), grid%j_end(ij), &
k_start , k_end )
ENDDO
!$OMP END PARALLEL DO
BENCH_END(hor_diff_tim)
ENDIF
IF ( grid%obs_nudge_opt .EQ. 1 ) THEN
# ifdef DM_PARALLEL
# include "HALO_OBS_NUDGE.inc"
#endif
!***********************************************************************
! This section for obs nudging
!$OMP PARALLEL DO &
!$OMP PRIVATE ( ij )
DO ij = 1 , grid%num_tiles
CALL fddaobs_driver
(grid%grid_id, model_config_rec%grid_id, &
model_config_rec%parent_id, config_flags%restart, &
grid%obs_nudge_opt, &
grid%obs_ipf_errob, &
grid%obs_ipf_nudob, &
grid%fdda_start, &
grid%fdda_end, &
grid%obs_nudge_wind, &
grid%obs_nudge_temp, &
grid%obs_nudge_mois, &
grid%obs_nudge_pstr, &
grid%obs_coef_wind, &
grid%obs_coef_temp, &
grid%obs_coef_mois, &
grid%obs_coef_pstr, &
grid%obs_rinxy, &
grid%obs_rinsig, &
grid%obs_npfi, &
grid%obs_ionf, &
grid%obs_prt_max, &
grid%obs_prt_freq, &
grid%obs_idynin, &
grid%obs_dtramp, &
grid%parent_grid_ratio, &
grid%max_dom, grid%itimestep, &
grid%dt, grid%gmt, grid%julday, grid%fdob, &
grid%max_obs, &
model_config_rec%nobs_ndg_vars, &
model_config_rec%nobs_err_flds, &
grid%fdob%nstat, grid%fdob%varobs, grid%fdob%errf, &
grid%dx, grid%KPBL,grid%HT, &
grid%mut, grid%muu, grid%muv, &
grid%msftx, grid%msfty, grid%msfux, grid%msfuy, grid%msfvx, grid%msfvy, &
p_phy, t_tendf, t0, &
grid%u_2, grid%v_2, grid%t_2, &
moist(ims,kms,jms,P_QV), &
grid%pb, grid%p_top, grid%p, grid%phb, grid%ph_2, &
grid%uratx, grid%vratx, grid%tratx, &
ru_tendf, rv_tendf, &
moist_tend(ims,kms,jms,P_QV), grid%obs_savwt, &
ids,ide, jds,jde, kds,kde, &
ims,ime, jms,jme, kms,kme, &
grid%i_start(ij), min(grid%i_end(ij),ide-1), &
grid%j_start(ij), min(grid%j_end(ij),jde-1), &
k_start , min(k_end,kde-1) )
ENDDO
!$OMP END PARALLEL DO
ENDIF ! obs_nudge_opt .eq. 1
!
!***********************************************************************
END SUBROUTINE first_rk_step_part2
END MODULE module_first_rk_step_part2