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 , scalar , scalar_tend &
15 , ru_tendf, rv_tendf &
17 , ph_tendf, mu_tendf &
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 &
25 , ids, ide, jds, jde, kds, kde &
26 , ims, ime, jms, jme, kms, kme &
27 , ips, ipe, jps, jpe, kps, kpe &
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
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, &
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
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
99 REAL, DIMENSION( ims:ime, jms:jme ) :: ht_loc
100 INTEGER, DIMENSION( ims:ime, jms:jme ) :: shadowmask
102 INTEGER num_roof_layers
103 INTEGER num_wall_layers
104 INTEGER num_road_layers
108 ! initialize all tendencies to zero in order to update physics
109 ! tendencies first (separate from dry dynamics).
115 BENCH_START(cal_phy_tend)
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, &
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, &
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) )
137 !$OMP END PARALLEL DO
138 BENCH_END(cal_phy_tend)
142 IF(config_flags%diff_opt .eq. 2 .OR. config_flags%diff_opt .eq. 1) THEN
144 BENCH_START(comp_diff_metrics_tim)
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), &
157 !$OMP END PARALLEL DO
158 BENCH_END(comp_diff_metrics_tim)
161 # include "HALO_EM_TKE_C.inc"
162 # include "PERIOD_BDY_EM_A1.inc"
165 BENCH_START(tke_diff_bc_tim)
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), &
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), &
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), &
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), &
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), &
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) )
215 !$OMP END PARALLEL DO
216 BENCH_END(tke_diff_bc_tim)
218 BENCH_START(deform_div_tim)
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), &
240 !$OMP END PARALLEL DO
241 BENCH_END(deform_div_tim)
244 # include "HALO_EM_TKE_D.inc"
247 ! calculate tke, kmh, and kmv
249 BENCH_START(calc_tke_tim)
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), &
274 !$OMP END PARALLEL DO
275 BENCH_END(calc_tke_tim)
278 # include "HALO_EM_TKE_E.inc"
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"
288 # include "PERIOD_BDY_EM_CHEM.inc"
291 BENCH_START(phy_bc_tim)
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, &
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), &
310 !$OMP END PARALLEL DO
311 BENCH_END(phy_bc_tim)
314 !-----------------------------------------------------------------------
316 ! MPP for some physics tendency, km, kh, deformation, and divergence
319 ! * * * * * * * * * * * *
320 ! * * * * * * * * * * * * * *
321 ! * + * * + * + * * + * * * * * + * * *
322 ! * * * * * * * * * * * * * *
323 ! * * * * * * * * * * * *
339 ! (for diff_opt >= 1)
352 !-----------------------------------------------------------------------
353 IF ( config_flags%bl_pbl_physics .ge. 1 ) THEN
354 # include "HALO_EM_PHYS_PBL.inc"
356 IF ( config_flags%grid_fdda .eq. 1) THEN
357 # include "HALO_EM_FDDA.inc"
359 IF ( config_flags%diff_opt .ge. 1 ) THEN
360 # include "HALO_EM_PHYS_DIFFUSION.inc"
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"
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))
373 BENCH_START(update_phy_ten_tim)
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, &
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), &
399 !$OMP END PARALLEL DO
400 BENCH_END(update_phy_ten_tim)
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
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, &
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), &
421 !$OMP END PARALLEL DO
425 IF( config_flags%diff_opt .eq. 2 .and. config_flags%km_opt .eq. 2 ) THEN
427 BENCH_START(tke_rhs_tim)
430 DO ij = 1 , grid%num_tiles
432 CALL tke_rhs ( tke_tend,grid%bn2, &
433 config_flags,grid%defor11,grid%defor22, &
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), &
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), &
454 !$OMP END PARALLEL DO
455 BENCH_END(tke_rhs_tim)
459 ! calculate vertical diffusion first and then horizontal
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)
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, &
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), &
492 !$OMP END PARALLEL DO
493 BENCH_END(vert_diff_tim)
497 BENCH_START(hor_diff_tim)
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, &
505 moist_tend, num_moist, &
506 chem_tend, num_chem, &
507 scalar_tend, num_scalar, &
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), &
524 !$OMP END PARALLEL DO
525 BENCH_END(hor_diff_tim)
528 IF ( grid%obs_nudge_opt .EQ. 1 ) THEN
530 # include "HALO_OBS_NUDGE.inc"
532 !***********************************************************************
533 ! This section for obs nudging
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, &
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, &
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, &
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) )
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