Skip to content

Commit 4412521

Browse files
authored
Implicit Explicit Vertical Advection (IEVA) (wrf-model#1373)
TYPE: new feature KEYWORDS: IEVA, vertical advection SOURCE: Louis Wicker (NOAA/NSSL) DESCRIPTION OF CHANGES: For grids with large aspect ratios (dx/dz >> 1) that permit explicit convection, the large time step is limited by the strongest updraft that occurs during integration. This results in time step often 20-30% smaller, or requires the use of w-filtering, such as latent-heat tendency limiting. Regions of large vertical velocities are also often very small relative to the domain. The Implicit-Explicit Vertical Advection (IEVA) scheme has been implemented (see Wicker, L. J., and W. C. Skamarock, 2020: An Implicit–Explicit Vertical Transport Scheme for Convection-Allowing Models. Mon. Wea. Rev., 148, 3893–3910) and that permits a larger time step by partitioning the vertical transport into an explicit piece, which uses the normal vertical schemes present in WRF, and a implicit piece which uses implicit transport (which is unconditionally stable). The combined scheme permits a larger time step than has been previously been used and reduced w-filtering. The scheme will be useful for CONUS scale CAM (convection allowing model) simulations (dx ~ 2-3 km) when the number of vertical levels > 50. Time steps can increase to as large as 25 s, depending on the problem. The Wicker and Skamarock paper demonstrates IEVA's advantages on the 27 April 2011 Alabama tornado outbreak by comparing it to the operational CAM (the High Resolution Rapid Refresh) configuration. Results are shown that the HRRR simulation is stable up to a dt=20 s and only with latent-heat limiting on. Using the IEVA scheme the dt can be increased to 24 s and no latent-heat limiting is needed. Overall integration efficiency increases ~ 15%, and the IEVA solutions are closer to a benchmark run using smaller dt (12 s) than the HRRR simulation. LIST OF MODIFIED FILES: M Registry/Registry.EM_COMMON M dyn_em/Makefile M dyn_em/module_advect_em.F M dyn_em/module_big_step_utilities_em.F M dyn_em/module_em.F A dyn_em/module_ieva_em.F M dyn_em/solve_em.F M run/README.namelist A test/em_real/namelist.input.IEVA.4km TESTS CONDUCTED: 1. This pull requested code has been tested repeatedly on 27 April for a 24 hour simulation with the parameters set as in the Wicker and Skamarock (2020) as well as a 10 step difference test with the em_quarter_ss case using a single node and 4 nodes. The differences in the results ~ 10^-5. 2. Jenkins tests are all pass. RELEASE NOTES: The Implicit-Explicit Vertical Advection (IEVA) scheme has been implemented (see Wicker, L. J., and W. C. Skamarock, 2020: An Implicit–Explicit Vertical Transport Scheme for Convection-Allowing Models. Mon. Wea. Rev., 148, 3893–3910) and that permits a larger time step by partitioning the vertical transport into an explicit piece, which uses the normal vertical schemes present in WRF, and a implicit piece which uses implicit transport (which is unconditionally stable). The combined scheme permits a larger time step than has been previously been used and reduced w-filtering. The scheme will be useful for CONUS-scale CAM (convection allowing model) simulations (dx ~ 2-3 km) when the number of vertical levels > 50. In these cases, time steps can increase to as large as 25 s, depending on the problem. Overall integration efficiency increases ~ 15%, and the IEVA solutions are closer to a benchmark run using smaller time step.
1 parent 3f0aae4 commit 4412521

File tree

9 files changed

+2206
-542
lines changed

9 files changed

+2206
-542
lines changed

Registry/Registry.EM_COMMON

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,8 @@ state real w ikjb dyn_em 2 Z \
209209
state real ww ikj dyn_em 1 Z r "ww" "mu-coupled eta-dot" "Pa s-1"
210210
state real rw ikj dyn_em 1 Z - "rw" "mu-coupled w" "Pa m s-1"
211211
i1 real ww1 ikj dyn_em 1 Z
212+
i1 real wwE ikj dyn_em 1 Z - "wwE" "Explicit vertical velocity" "Pa s-1"
213+
i1 real wwI ikj dyn_em 1 Z - "wwI" "Implicit vertical velocity" "Pa s-1"
212214
state real ww_m ikj dyn_em 1 Z r "ww_m" "time-avg mu-coupled eta-dot" "Pa s-1"
213215
i1 real wwp ikj dyn_em 1 Z
214216
i1 real rw_tend ikj dyn_em 1 Z
@@ -2772,11 +2774,13 @@ rconfig integer scm_force_flux namelist,scm 1 0 rh
27722774
# dynamics option (see package definitions, below)
27732775
rconfig integer dyn_opt namelist,dynamics 1 2
27742776
rconfig integer rk_ord namelist,dynamics 1 3 irh "rk_order" "" ""
2775-
rconfig integer w_damping namelist,dynamics 1 0 irh "w_damping" "" ""
2777+
rconfig integer w_damping namelist,dynamics 1 0 irh "w_damping" "" ""
2778+
rconfig real w_crit_cfl namelist,dynamics 1 1.2 irh "w_crit_cfl" "W-CFL where w-damping is on" ""
2779+
rconfig integer zadvect_implicit namelist,dynamics 1 0 irh "zadvect_implicit" "Turns on IEVA for vertical adv" ""
27762780
# diff_opt 1=old diffusion, 2=new
2777-
rconfig integer diff_opt namelist,dynamics max_domains -1 irh "diff_opt" "" ""
2781+
rconfig integer diff_opt namelist,dynamics max_domains -1 irh "diff_opt" "" ""
27782782
# diff_opt_dfi is needed for backwards integration in dfi
2779-
rconfig integer diff_opt_dfi namelist,dynamics max_domains 0 irh "diff_opt_dfi" "" ""
2783+
rconfig integer diff_opt_dfi namelist,dynamics max_domains 0 irh "diff_opt_dfi" "" ""
27802784
# km_opt 1=old coefs, 2=tke, 3=Smagorinksy
27812785
rconfig integer km_opt namelist,dynamics max_domains -1 irh "km_opt" "" ""
27822786
# km_opt_dfi is needed for backward integration in dfi

dyn_em/Makefile

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,27 @@ RM = rm -f
77

88
MODULES = \
99
module_advect_em.o \
10-
module_diffusion_em.o \
11-
module_small_step_em.o \
10+
module_ieva_em.o \
11+
module_diffusion_em.o \
12+
module_small_step_em.o \
1213
module_big_step_utilities_em.o \
1314
module_em.o \
1415
module_solvedebug_em.o \
1516
module_bc_em.o \
1617
module_init_utilities.o \
1718
module_wps_io_arw.o \
18-
module_damping_em.o \
19-
module_polarfft.o \
19+
module_damping_em.o \
20+
module_polarfft.o \
2021
module_force_scm.o \
2122
module_first_rk_step_part1.o \
2223
module_first_rk_step_part2.o \
2324
module_avgflx_em.o \
24-
module_sfs_nba.o \
25+
module_sfs_nba.o \
2526
module_convtrans_prep.o \
26-
module_sfs_driver.o \
27-
module_stoch.o \
28-
module_after_all_rk_steps.o \
29-
$(CASE_MODULE)
27+
module_sfs_driver.o \
28+
module_stoch.o \
29+
module_after_all_rk_steps.o \
30+
$(CASE_MODULE)
3031

3132
# possible CASE_MODULE settings
3233
# module_initialize_b_wave.o \

dyn_em/module_advect_em.F

Lines changed: 154 additions & 133 deletions
Large diffs are not rendered by default.

dyn_em/module_big_step_utilities_em.F

Lines changed: 147 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -2501,13 +2501,13 @@ END SUBROUTINE pg_buoy_w
25012501
!-------------------------------------------------------------------------------
25022502
25032503
SUBROUTINE w_damp( rw_tend, max_vert_cfl,max_horiz_cfl, &
2504-
u, v, ww, w, mut, c1f, c2f, rdnw, &
2505-
rdx, rdy, msfux, msfuy, &
2506-
msfvx, msfvy, dt, &
2507-
config_flags, &
2508-
ids, ide, jds, jde, kds, kde, &
2509-
ims, ime, jms, jme, kms, kme, &
2510-
its, ite, jts, jte, kts, kte )
2504+
u, v, ww, w, mut, c1f, c2f, rdnw, &
2505+
rdx, rdy, msfux, msfuy, &
2506+
msfvx, msfvy, dt, &
2507+
config_flags, &
2508+
ids, ide, jds, jde, kds, kde, &
2509+
ims, ime, jms, jme, kms, kme, &
2510+
its, ite, jts, jte, kts, kte )
25112511
25122512
USE module_llxy
25132513
IMPLICIT NONE
@@ -2542,7 +2542,6 @@ SUBROUTINE w_damp( rw_tend, max_vert_cfl,max_horiz_cfl, &
25422542
REAL :: vert_cfl, cf_n, cf_d, maxdub, maxdeta
25432543
25442544
INTEGER :: itf, jtf, i, j, k, maxi, maxj, maxk
2545-
INTEGER :: some
25462545
CHARACTER*512 :: temp
25472546
25482547
CHARACTER (LEN=256) :: time_str
@@ -2551,9 +2550,18 @@ SUBROUTINE w_damp( rw_tend, max_vert_cfl,max_horiz_cfl, &
25512550
integer :: total
25522551
REAL :: msfuxt , msfxffl
25532552
2553+
REAL :: w_damp_on = 1.0
2554+
REAL :: w_crit_cfl = 2.0
2555+
REAL :: w_flag_cfl = 1.2
2556+
LOGICAL :: wflags_differ = .false.
2557+
LOGICAL :: print_flag = .true.
2558+
SAVE :: print_flag
2559+
INTEGER :: some1 ! Now have two catagories of CFL information, hence some1 & some2
2560+
INTEGER :: some2
2561+
25542562
!<DESCRIPTION>
25552563
!
2556-
! w_damp computes a damping term for the vertical velocity when the
2564+
! W_damp computes a damping term for the vertical velocity when the
25572565
! vertical Courant number is too large. This was found to be preferable to
25582566
! decreasing the timestep or increasing the diffusion in real-data applications
25592567
! that produced potentially-unstable large vertical velocities because of
@@ -2564,154 +2572,175 @@ SUBROUTINE w_damp( rw_tend, max_vert_cfl,max_horiz_cfl, &
25642572
! horizontal motion. These values are returned via the max_vert_cfl and
25652573
! max_horiz_cfl variables. (Added by T. Hutchinson, WSI, 3/5/2007)
25662574
!
2575+
!-----
2576+
!
2577+
! W_damp modified to be more flexible with IEVA capability. Two things changed.
2578+
! First, the value of the W-CFL where damping is turned on can now be set in the namelist
2579+
! using "w_crit_cfl". Second, the code has been modified to report two levels of
2580+
! W-CFL information. Previously, both damping and W-CFL information was
2581+
! printed at a W-CFL == 1.2. This new capability does not need IEVA on to run.
2582+
!
2583+
! We keep the old level reporting (for consistency), but use "w_flag_cfl" to flag
2584+
! and print information from those points. "w_flag_cfl" is set here in w_damp.
2585+
! A second level of print occurs, which is useful for when we run
2586+
! IEVA, because many points can run with W-CFL > 1.2. We now print this
2587+
! second level separately, as these points might make the model blow up.
2588+
! and where we now want Rayleigh damping turned on. The default value "w_crit_cfl"
2589+
! which replaced "w_beta" in the old code, is set in the namelist/Registery
2590+
! turn on w_damp at 1.2 consistent with the WRFV3/4 (before this) code.
2591+
!
2592+
! Summary
2593+
! -------
2594+
! W_damp will write out CFL information when the vertical courant number is > w_flag_cfl,
2595+
! and W_damp will also turn on Rayleigh damping if vertical courant number > w_crit_cfl.
2596+
!
2597+
! Typical settings for non-IEVA use: w_crit_cfl = 1.2
2598+
! Typical settings for IEVA use: w_crit_cfl = 2.0
2599+
!
2600+
! I also commented out a lot of code put in 8-13 years ago for timing assuming that
2601+
! this is no longer needed....there is some pretty hacky stuff. HTH.
2602+
!
2603+
! (Added by L. Wicker, NSSL, 5/4/2020)
2604+
!
25672605
!</DESCRIPTION>
25682606
25692607
itf=MIN(ite,ide-1)
25702608
jtf=MIN(jte,jde-1)
25712609
2572-
some = 0
2573-
max_vert_cfl = 0.
2610+
some1 = 0
2611+
some2 = 0
2612+
2613+
max_vert_cfl = 0.
25742614
max_horiz_cfl = 0.
25752615
total = 0
25762616
2617+
w_crit_cfl = config_flags%w_crit_cfl
2618+
2619+
IF( abs(w_crit_cfl - w_flag_cfl) > 0.1 ) THEN
2620+
wflags_differ = .true.
2621+
ELSE
2622+
wflags_differ = .false.
2623+
ENDIF
2624+
2625+
IF( print_flag ) THEN
2626+
write(wrf_err_message,*) '----------------------------------------'
2627+
CALL wrf_debug( 0, wrf_err_message )
2628+
WRITE(temp,*) 'W-DAMPING BEGINS AT W-COURANT NUMBER = ',w_crit_cfl
2629+
CALL wrf_debug ( 0 , TRIM(temp) )
2630+
write(wrf_err_message,*) '----------------------------------------'
2631+
CALL wrf_debug( 0, wrf_err_message )
2632+
print_flag = .false.
2633+
ENDIF
2634+
25772635
IF(config_flags%polar ) then
25782636
msfxffl = 1.0/COS(config_flags%fft_filter_lat*degrad)
25792637
END IF
25802638
2581-
IF ( config_flags%w_damping == 1 ) THEN
2639+
! Routine has been reorganized to hopefully reduce redundant code while maintaining efficiency
2640+
25822641
#ifdef OPTIMIZE_CFL_TEST
25832642
! 20121025, L. Meadows vector optimization does not include special case for Cassini
2584-
IF(config_flags%polar ) then
2585-
CALL wrf_error_fatal('module_big_step_utilities_em.F: -DOPTIMIZE_CFL_TEST option does not support global domains')
2586-
END IF
2643+
2644+
IF(config_flags%polar ) then
2645+
CALL wrf_error_fatal('module_big_step_utilities_em.F: -DOPTIMIZE_CFL_TEST option does not support global domains')
2646+
END IF
2647+
25872648
#endif
25882649
2589-
DO j = jts,jtf
2650+
DO j = jts,jtf
2651+
DO k = 2,kde-1
2652+
DO i = its,itf
2653+
2654+
vert_cfl = abs(ww(i,k,j)/(c1f(k)*mut(i,j)+c2f(k))*rdnw(k)*dt)
25902655
2591-
DO k = 2, kde-1
2592-
DO i = its,itf
2593-
#if 1
25942656
# ifdef OPTIMIZE_CFL_TEST
25952657
! L. Meadows, Intel, MIC optimization, 20121025
2596-
msfuxt = msfux(i,j)
2597-
vert_cfl = abs(ww(i,k,j)/(c1f(k)*mut(i,j)+c2f(k))*rdnw(k)*dt)
2598-
IF ( vert_cfl > max_vert_cfl ) THEN
2599-
max_vert_cfl = vert_cfl
2600-
ENDIF
2658+
2659+
msfuxt = msfux(i,j)
2660+
2661+
IF ( vert_cfl > max_vert_cfl ) THEN
2662+
max_vert_cfl = vert_cfl
2663+
ENDIF
26012664
# else
2602-
IF(config_flags%polar ) then
2603-
msfuxt = MIN(msfux(i,j), msfxffl)
2604-
ELSE
2605-
msfuxt = msfux(i,j)
2606-
END IF
2607-
vert_cfl = abs(ww(i,k,j)/(c1f(k)*mut(i,j)+c2f(k))*rdnw(k)*dt)
2665+
IF(config_flags%polar ) THEN
2666+
msfuxt = MIN(msfux(i,j), msfxffl)
2667+
ELSE
2668+
msfuxt = msfux(i,j)
2669+
ENDIF
26082670
2609-
IF ( vert_cfl > max_vert_cfl ) THEN
2610-
max_vert_cfl = vert_cfl ; maxi = i ; maxj = j ; maxk = k
2611-
maxdub = w(i,k,j) ; maxdeta = -1./rdnw(k)
2612-
ENDIF
2671+
IF ( vert_cfl > max_vert_cfl ) THEN
2672+
max_vert_cfl = vert_cfl ; maxi = i ; maxj = j ; maxk = k
2673+
maxdub = w(i,k,j) ; maxdeta = -1./rdnw(k)
2674+
ENDIF
26132675
# endif
26142676
2615-
horiz_cfl = max( abs(u(i,k,j) * rdx * msfuxt * dt), &
2616-
abs(v(i,k,j) * rdy * msfvy(i,j) * dt) )
2617-
if (horiz_cfl > max_horiz_cfl) then
2618-
max_horiz_cfl = horiz_cfl
2619-
endif
2677+
horiz_cfl = max( abs(u(i,k,j) * rdx * msfuxt * dt), &
2678+
abs(v(i,k,j) * rdy * msfvy(i,j) * dt) )
2679+
2680+
IF (horiz_cfl > max_horiz_cfl) THEN
2681+
max_horiz_cfl = horiz_cfl
2682+
ENDIF
2683+
2684+
! Dump out more information without affecting performance
26202685
2621-
if(vert_cfl .gt. w_beta)then
2622-
#else
2623-
! restructure to get rid of divide
2624-
!
2625-
! This had been used for efficiency, but with the addition of returning the cfl values,
2626-
! the old version (above) was reinstated. (T. Hutchinson, 3/5/2007)
2627-
!
2628-
cf_n = abs(ww(i,k,j)*rdnw(k)*dt)
2629-
cf_d = abs((c1f(k)*mut(i,j)+c2f(k)))
2630-
if(cf_n .gt. cf_d*w_beta )then
2631-
#endif
26322686
#ifndef OPTIMIZE_CFL_TEST
26332687
! This internal write is costly on newer Xeon processors because it breaks
26342688
! vectorization. (J. Michalakes for L. Meadows at Intel, 12/13/2012)
2635-
WRITE(temp,*)i,j,k,' vert_cfl,w,d(eta)=',vert_cfl,w(i,k,j),-1./rdnw(k)
2689+
2690+
IF (vert_cfl .gt. w_crit_cfl) THEN
2691+
2692+
some1 = some1 + 1
2693+
2694+
WRITE(temp,FMT="(3(1x,i5,1x),'W-CRIT_CFL: ',f7.4,2x,'W-CFL: ',f7.4,2x,'dETA: ',f7.4))") &
2695+
i,j,k,vert_cfl,w(i,k,j),-1./rdnw(k)
26362696
CALL wrf_debug ( 100 , TRIM(temp) )
2637-
#endif
2638-
if ( vert_cfl > 2. ) some = some + 1
2639-
rw_tend(i,k,j) = rw_tend(i,k,j)-sign(1.,w(i,k,j))*w_alpha*(vert_cfl-w_beta)*(c1f(k)*mut(i,j)+c2f(k))
2640-
endif
2641-
END DO
2642-
ENDDO
2643-
ENDDO
2644-
ELSE
2645-
! just print
2646-
DO j = jts,jtf
26472697
2648-
DO k = 2, kde-1
2649-
DO i = its,itf
2698+
ENDIF
26502699
2651-
#if 1
2652-
# ifdef OPTIMIZE_CFL_TEST
2653-
msfuxt = msfux(i,j)
2654-
vert_cfl = abs(ww(i,k,j)/(c1f(k)*mut(i,j)+c2f(k))*rdnw(k)*dt)
2655-
IF ( vert_cfl > max_vert_cfl ) THEN
2656-
max_vert_cfl = vert_cfl
2657-
ENDIF
2658-
# else
2659-
! L. Meadows MIC optimization, 20121025
2660-
IF(config_flags%polar ) then
2661-
msfuxt = MIN(msfux(i,j), msfxffl)
2662-
ELSE
2663-
msfuxt = msfux(i,j)
2664-
END IF
2665-
vert_cfl = abs(ww(i,k,j)/(c1f(k)*mut(i,j)+c2f(k))*rdnw(k)*dt)
2666-
2667-
IF ( vert_cfl > max_vert_cfl ) THEN
2668-
max_vert_cfl = vert_cfl ; maxi = i ; maxj = j ; maxk = k
2669-
maxdub = w(i,k,j) ; maxdeta = -1./rdnw(k)
2670-
ENDIF
2671-
# endif
2672-
2673-
horiz_cfl = max( abs(u(i,k,j) * rdx * msfuxt * dt), &
2674-
abs(v(i,k,j) * rdy * msfvy(i,j) * dt) )
2700+
IF ((vert_cfl .gt. w_flag_cfl) .and. wflags_differ) THEN
26752701
2676-
if (horiz_cfl > max_horiz_cfl) then
2677-
max_horiz_cfl = horiz_cfl
2678-
endif
2679-
2680-
if(vert_cfl .gt. w_beta)then
2681-
#else
2682-
! restructure to get rid of divide
2683-
!
2684-
! This had been used for efficiency, but with the addition of returning the cfl values,
2685-
! the old version (above) was reinstated. (T. Hutchinson, 3/5/2007)
2686-
!
2687-
cf_n = abs(ww(i,k,j)*rdnw(k)*dt)
2688-
cf_d = abs((c1f(k)*mut(i,j)+c2f(k)))
2689-
if(cf_n .gt. cf_d*w_beta )then
2690-
#endif
2691-
#ifndef OPTIMIZE_CFL_TEST
2692-
WRITE(temp,*)i,j,k,' vert_cfl,w,d(eta)=',vert_cfl,w(i,k,j),-1./rdnw(k)
2702+
some2 = some2 + 1
2703+
2704+
WRITE(temp,FMT="(3(1x,i5,1x),'W-FLAG_CFL: ',f7.4,2x,'W-CFL: ',f7.4,2x,'dETA: ',f7.4))") &
2705+
i,j,k,vert_cfl,w(i,k,j),-1./rdnw(k)
26932706
CALL wrf_debug ( 100 , TRIM(temp) )
2707+
2708+
ENDIF
26942709
#endif
2695-
if ( vert_cfl > 2. ) some = some + 1
2696-
endif
2697-
END DO
2698-
ENDDO
2699-
ENDDO
2700-
ENDIF
2701-
IF ( some .GT. 0 ) THEN
2710+
2711+
IF ((vert_cfl .gt. w_crit_cfl) .and. (config_flags%w_damping == 1) ) THEN
2712+
2713+
rw_tend(i,k,j) = rw_tend(i,k,j)-sign(1.,w(i,k,j))*w_alpha*(vert_cfl-w_crit_cfl)*(c1f(k)*mut(i,j)+c2f(k))
2714+
2715+
ENDIF
2716+
2717+
ENDDO ! end i-loop
2718+
ENDDO ! end k-loop
2719+
ENDDO ! end j-loop
2720+
2721+
IF ( some1 .GT. 0 ) THEN
27022722
CALL get_current_time_string( time_str )
27032723
CALL get_current_grid_name( grid_str )
2704-
WRITE(temp,*)some, &
2705-
' points exceeded cfl=2 in domain '//TRIM(grid_str)//' at time '//TRIM(time_str)//' hours'
2724+
WRITE(temp,*) some1, &
2725+
' points exceeded W_CRITICAL_CFL in domain '//TRIM(grid_str)//' at time '//TRIM(time_str)//' hours'
27062726
CALL wrf_debug ( 0 , TRIM(temp) )
2707-
#ifndef OPTIMIZE_CFL_TEST
2708-
WRITE(temp,*)'MAX AT i,j,k: ',maxi,maxj,maxk,' vert_cfl,w,d(eta)=',max_vert_cfl, &
2709-
maxdub,maxdeta
2727+
WRITE(temp,FMT="('Max W: ',3(1x,i5,1x),'W: ',f7.2,2x,'W-CFL: ',f7.2,2x,'dETA: ',f7.2))") &
2728+
maxi, maxj, maxk, maxdub, max_vert_cfl, maxdeta
2729+
CALL wrf_debug ( 0 , TRIM(temp) )
2730+
WRITE(temp,FMT="('Max U/V: ',3(1x,i5,1x),'U: ',f7.2,2x,'U-CFL: ',f7.2,2x,'V: ',f7.2,2x,'V-CFL: ',f7.2))") &
2731+
maxi, maxj, maxk, u(maxi,maxk,maxj), dt*u(maxi,maxk,maxj)*rdx, v(maxi,maxk,maxj), dt*v(maxi,maxk,maxj)*rdy
2732+
CALL wrf_debug ( 0 , TRIM(temp) )
2733+
ENDIF
2734+
2735+
IF ( some2 .GT. 0 ) THEN
2736+
CALL get_current_time_string( time_str )
2737+
CALL get_current_grid_name( grid_str )
2738+
WRITE(temp,*) some2, &
2739+
' points exceeded W_FLAG_CFL in domain '//TRIM(grid_str)//' at time '//TRIM(time_str)//' hours'
27102740
CALL wrf_debug ( 0 , TRIM(temp) )
2711-
#endif
27122741
ENDIF
27132742
2714-
END SUBROUTINE w_damp
2743+
END SUBROUTINE W_DAMP
27152744
27162745
!-------------------------------------------------------------------------------
27172746

0 commit comments

Comments
 (0)