diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py
index 828c5a26b..840f68b2f 100755
--- a/ccpp/config/ccpp_prebuild_config.py
+++ b/ccpp/config/ccpp_prebuild_config.py
@@ -175,9 +175,10 @@
'ccpp/physics/physics/MP/Thompson/mp_thompson_pre.F90',
'ccpp/physics/physics/MP/Thompson/mp_thompson.F90',
'ccpp/physics/physics/MP/Thompson/mp_thompson_post.F90',
- 'ccpp/physics/physics/MP/wsm6/scm_mp_wsm6_pre.F90',
+ 'ccpp/physics/physics/MP/wsm6/gfs_mmm_mp_wsm6_pre.F90',
'ccpp/physics/physics/mmm_physics/mp_wsm6.F90',
- 'ccpp/physics/physics/MP/wsm6/scm_mp_wsm6_post.F90',
+ 'ccpp/physics/physics/mmm_physics/mp_wsm6_effectRad.F90',
+ 'ccpp/physics/physics/MP/wsm6/gfs_mmm_mp_wsm6_post.F90',
'ccpp/physics/physics/MP/Zhao_Carr/zhaocarr_gscond.f',
'ccpp/physics/physics/MP/Zhao_Carr/zhaocarr_precpd.f',
'ccpp/physics/physics/PBL/HEDMF/hedmf.f',
diff --git a/ccpp/physics b/ccpp/physics
index d7e08a8d9..58fd28930 160000
--- a/ccpp/physics
+++ b/ccpp/physics
@@ -1 +1 @@
-Subproject commit d7e08a8d980aad57cac4080d24065ae839145038
+Subproject commit 58fd28930fd111a5384371be5da4f77afb06b047
diff --git a/ccpp/physics_namelists/input_RAP_wsm6.nml b/ccpp/physics_namelists/input_RAP_wsm6.nml
index f69a84f15..68aa24a6b 100644
--- a/ccpp/physics_namelists/input_RAP_wsm6.nml
+++ b/ccpp/physics_namelists/input_RAP_wsm6.nml
@@ -8,7 +8,7 @@
use_ufo = .true.
pre_rad = .false.
imp_physics = 7
- ltaerosol = .true.
+ ltaerosol = .false.
lradar = .true.
sedi_semi = .true.
decfl = 10
@@ -16,8 +16,8 @@
nssl_alphah = 0.0
nssl_alphahl = 1.0
nssl_hail_on = .false.
- nssl_ccn_on = .true.
- nssl_invertccn = .true.
+ nssl_ccn_on = .false.
+ nssl_invertccn = .false.
dt_inner = 60
ttendlim = -999
pdfcld = .false.
@@ -83,7 +83,7 @@
lkm = 0
psautco = 0.0008,0.0005
prautco = 0.00015,0.00015
- lgfdlmprad = .true.
+ lgfdlmprad = .false.
cplchm = .false.
cplwav = .false.
cplwav2atm = .false.
@@ -113,6 +113,7 @@
do_RRTMGP = .false.
doGP_cldoptics_LUT = .false.
doGP_lwscat = .false.
+ do_wsm6_mmm = .true.
hail_opt = 0
den0 = 1.28
denr = 1000
diff --git a/ccpp/suites/suite_SCM_RAP_wsm6.xml b/ccpp/suites/suite_SCM_RAP_wsm6.xml
index 6e879bb28..b281242ba 100644
--- a/ccpp/suites/suite_SCM_RAP_wsm6.xml
+++ b/ccpp/suites/suite_SCM_RAP_wsm6.xml
@@ -70,12 +70,10 @@
GFS_suite_interstitial_4
cnvc90
GFS_MP_generic_pre
-
-
-
- scm_mp_wsm6_pre
+ gfs_mmm_mp_wsm6_pre
mp_wsm6
- scm_mp_wsm6_post
+ mp_wsm6_effectRad
+ gfs_mmm_mp_wsm6_post
GFS_MP_generic_post
cu_gf_driver_post
maximum_hourly_diagnostics
diff --git a/scm/src/CCPP_typedefs.F90 b/scm/src/CCPP_typedefs.F90
index 74fd1afe1..dc350c30a 100644
--- a/scm/src/CCPP_typedefs.F90
+++ b/scm/src/CCPP_typedefs.F90
@@ -161,7 +161,9 @@ module CCPP_typedefs
real (kind=kind_phys), pointer :: gflx_ice(:) => null() !<
real (kind=kind_phys), pointer :: gflx_land(:) => null() !<
real (kind=kind_phys), pointer :: gflx_water(:) => null() !<
+ real (kind=kind_phys), pointer :: graupel_nonphy_mm(:)=> null() !<
real (kind=kind_phys), pointer :: graupelmp(:) => null() !<
+ real (kind=kind_phys), pointer :: graupelmp_mm(:) => null() !<
real (kind=kind_phys), pointer :: gwdcu(:,:) => null() !<
real (kind=kind_phys), pointer :: gwdcv(:,:) => null() !<
real (kind=kind_phys), pointer :: zvfun(:) => null() !<
@@ -247,7 +249,9 @@ module CCPP_typedefs
real (kind=kind_phys), pointer :: qss_water(:) => null() !<
logical :: fullradar_diag !<
real (kind=kind_phys) :: raddt !<
+ real (kind=kind_phys), pointer :: rain_nonphy_mm(:)=> null() !<
real (kind=kind_phys), pointer :: rainmp(:) => null() !<
+ real (kind=kind_phys), pointer :: rainmp_mm(:) => null() !<
real (kind=kind_phys), pointer :: raincd(:) => null() !<
real (kind=kind_phys), pointer :: raincs(:) => null() !<
real (kind=kind_phys), pointer :: rainmcadj(:) => null() !<
@@ -275,7 +279,9 @@ module CCPP_typedefs
logical :: skip_macro !<
real (kind=kind_phys), pointer :: snowc(:) => null() !<
real (kind=kind_phys), pointer :: snohf(:) => null() !<
+ real (kind=kind_phys), pointer :: snow_nonphy_mm(:)=> null() !<
real (kind=kind_phys), pointer :: snowmp(:) => null() !<
+ real (kind=kind_phys), pointer :: snowmp_mm(:) => null() !<
real (kind=kind_phys), pointer :: snowmt(:) => null() !<
real (kind=kind_phys), pointer :: stress(:) => null() !<
real (kind=kind_phys), pointer :: stress_ice(:) => null() !<
@@ -414,17 +420,18 @@ module CCPP_typedefs
real (kind=kind_phys), pointer :: clxss(:,:) => null() !<
!-- WSM6
- integer :: hail_opt !<
- real (kind=kind_phys), pointer :: qi(:,:) => null() !<
- real (kind=kind_phys), pointer :: qc(:,:) => null() !<
real (kind=kind_phys), pointer :: rho_air(:,:) => null() !<
real (kind=kind_phys), pointer :: evapprod2d(:,:) => null() !<
real (kind=kind_phys), pointer :: rainprod2d(:,:) => null() !<
- real (kind=kind_phys) :: q_over_R_minus_one !<
- integer :: vertical_dimension_start !<
- integer :: vertical_dimension_end !<
+ real (kind=kind_phys), pointer :: re_qc_m(:,:) => null() !<
+ real (kind=kind_phys), pointer :: re_qi_m(:,:) => null() !<
+ real (kind=kind_phys), pointer :: re_qs_m(:,:) => null() !<
+ integer :: vertical_begin !<
+ integer :: vertical_end !<
integer :: horizontal_begin !<
integer :: horizontal_end !<
+ real (kind=kind_phys) :: re_qc_bg,re_qi_bg,re_qs_bg !<
+ real (kind=kind_phys) :: re_qc_max,re_qi_max,re_qs_max !<
!-- 3D diagnostics
integer :: rtg_ozone_index, rtg_tke_index
@@ -778,6 +785,12 @@ subroutine gfs_interstitial_create (Interstitial, IM, Model)
.or. Model%imp_physics == Model%imp_physics_nssl &
.or. Model%imp_physics == Model%imp_physics_wsm6_mmm &
) then
+ allocate (Interstitial%graupel_nonphy_mm (IM))
+ allocate (Interstitial%rain_nonphy_mm (IM))
+ allocate (Interstitial%snow_nonphy_mm (IM))
+ allocate (Interstitial%graupelmp_mm (IM))
+ allocate (Interstitial%rainmp_mm (IM))
+ allocate (Interstitial%snowmp_mm (IM))
allocate (Interstitial%graupelmp (IM))
allocate (Interstitial%icemp (IM))
allocate (Interstitial%rainmp (IM))
@@ -816,13 +829,16 @@ subroutine gfs_interstitial_create (Interstitial, IM, Model)
! Setup WSM6
if (Model%imp_physics == Model%imp_physics_wsm6_mmm) then
- Interstitial%vertical_dimension_start = 1
- Interstitial%vertical_dimension_end = Model%levs
+ Interstitial%horizontal_begin = 1
+ Interstitial%horizontal_end = IM
+ Interstitial%vertical_begin = 1
+ Interstitial%vertical_end = Model%levs
allocate (Interstitial%q_lay(IM,Model%levs))
- allocate (Interstitial%qi(IM,Model%levs))
- allocate (Interstitial%qc(IM,Model%levs))
allocate (Interstitial%deltaZ(IM, Model%levs))
allocate (Interstitial%rho_air(IM,Model%levs))
+ allocate (Interstitial%re_qc_m(IM,Model%levs))
+ allocate (Interstitial%re_qi_m(IM,Model%levs))
+ allocate (Interstitial%re_qs_m(IM,Model%levs))
allocate (Interstitial%evapprod2d(IM,Model%levs))
allocate (Interstitial%rainprod2d(IM,Model%levs))
end if
@@ -1456,10 +1472,23 @@ subroutine gfs_interstitial_phys_reset (Interstitial, Model)
.or. Model%imp_physics == Model%imp_physics_nssl &
.or. Model%imp_physics == Model%imp_physics_wsm6_mmm &
) then
+ Interstitial%graupel_nonphy_mm = clear_val
+ Interstitial%rain_nonphy_mm = clear_val
+ Interstitial%snow_nonphy_mm = clear_val
+ Interstitial%graupelmp_mm = clear_val
+ Interstitial%rainmp_mm = clear_val
+ Interstitial%snowmp_mm = clear_val
Interstitial%graupelmp = clear_val
Interstitial%icemp = clear_val
Interstitial%rainmp = clear_val
Interstitial%snowmp = clear_val
+ Interstitial%re_qc_bg = clear_val
+ Interstitial%re_qi_bg = clear_val
+ Interstitial%re_qs_bg = clear_val
+ Interstitial%re_qc_max = clear_val
+ Interstitial%re_qi_max = clear_val
+ Interstitial%re_qs_max = clear_val
+
else if (Model%imp_physics == Model%imp_physics_mg) then
Interstitial%ncgl = clear_val
Interstitial%ncpr = clear_val
diff --git a/scm/src/CCPP_typedefs.meta b/scm/src/CCPP_typedefs.meta
index 28c15805a..c13008a0f 100644
--- a/scm/src/CCPP_typedefs.meta
+++ b/scm/src/CCPP_typedefs.meta
@@ -324,43 +324,27 @@
dimensions = (horizontal_loop_extent,adjusted_vertical_layer_dimension_for_radiation)
type = real
kind = kind_phys
-[re_qc_bg]
- standard_name = background_cloud_condensed_water_effective_radius
- long_name = background cloud condensed water effective radius
- units = m
- dimensions = ()
- type = real | kind = kind_phys
- intent = in
-[re_qi_bg]
- standard_name = background_ice_water_effective_radius
- long_name = background ice water effective radius
- units = m
- dimensions = ()
- type = real | kind = kind_phys
-[re_qs_bg]
- standard_name = background_snow_effective_radius
- long_name = background snow effective radius
- units = m
- dimensions = ()
- type = real | kind = kind_phys
[re_qc_max]
- standard_name = maximum_cloud_condensed_water_effective_radius
- long_name = maximum cloud condensed water effective radius
+ standard_name = maximum_cloud_liquid_water_effective_radius
+ long_name = maximum cloud liquid water effective radius
units = m
dimensions = ()
type = real | kind = kind_phys
+ active = (control_for_microphysics_scheme == identifier_for_wsm6_mmm_microphysics_scheme)
[re_qi_max]
standard_name = maximum_ice_water_effective_radius
long_name = maximum ice water effective radius
units = m
dimensions = ()
type = real | kind = kind_phys
+ active = (control_for_microphysics_scheme == identifier_for_wsm6_mmm_microphysics_scheme)
[re_qs_max]
standard_name = maximum_snow_effective_radius
long_name = maximum snow effective radius
units = m
dimensions = ()
type = real | kind = kind_phys
+ active = (control_for_microphysics_scheme == identifier_for_wsm6_mmm_microphysics_scheme)
[clw]
standard_name = convective_transportable_tracers
long_name = array to contain cloud water and other convective trans. tracers
@@ -749,14 +733,6 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
-[q_over_R_minus_one]
- standard_name = ratio_of_water_vapor_to_dry_air_gas_constants_minus_one
- long_name = (Rwv / Rdair) - 1.0
- units = none
- dimensions = ()
- type = real
- kind = kind_phys
- intent = in
[ep1d]
standard_name = surface_upward_potential_latent_heat_flux
long_name = surface upward potential latent heat flux
@@ -1187,6 +1163,20 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
+[graupel_nonphy_mm]
+ standard_name = lwe_thickness_of_graupel_amount_on_dynamics_timestep_in_mm
+ long_name = graupel fall at this time step
+ units = mm
+ dimensions = (horizontal_loop_extent)
+ type = real | kind = kind_phys
+[graupelmp_mm]
+ standard_name = lwe_thickness_of_graupel_amount_in_mm
+ long_name = explicit graupel on physics timestep
+ units = mm
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ active = (control_for_microphysics_scheme == identifier_for_wsm6_mmm_microphysics_scheme)
[graupelmp]
standard_name = lwe_thickness_of_graupel_amount
long_name = explicit graupel fall on physics timestep
@@ -1194,7 +1184,7 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
- active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme)
+ active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_wsm6_mmm_microphysics_scheme)
[gwdcu]
standard_name = tendency_of_x_wind_due_to_convective_gravity_wave_drag
long_name = zonal wind tendency due to convective gravity wave drag
@@ -1286,7 +1276,7 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
- active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme)
+ active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_wsm6_mmm_microphysics_scheme)
[dry]
standard_name = flag_nonzero_land_surface_fraction
long_name = flag indicating presence of some land surface area fraction
@@ -1681,21 +1671,7 @@
standard_name = air_density
long_name = air density
units = kg m-3
- dimensions = (horizontal_begin:horizontal_end,vertical_layer_dimension)
- type = real
- kind = kind_phys
-[qi]
- standard_name = ice_water_mixing_ratio
- long_name = ice water mixing ratio
- units = kg kg-1
- dimensions = (horizontal_begin:horizontal_end,vertical_layer_dimension)
- type = real
- kind = kind_phys
-[qc]
- standard_name = cloud_condensed_water_mixing_ratio
- long_name = cloud condensed water mixing ratio
- units = kg kg-1
- dimensions = (horizontal_begin:horizontal_end,vertical_layer_dimension)
+ dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
[qgl]
@@ -1807,6 +1783,20 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
+[rain_nonphy_mm]
+ standard_name = lwe_thickness_of_rain_amount_on_dynamics_timestep_in_mm
+ long_name = total rain at this time step
+ units = mm
+ dimensions = (horizontal_loop_extent)
+ type = real | kind = kind_phys
+[rainmp_mm]
+ standard_name = lwe_thickness_of_explicit_rain_amount_in_mm
+ long_name = explicit rain on physics timestep
+ units = mm
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ active = (control_for_microphysics_scheme == identifier_for_wsm6_mmm_microphysics_scheme)
[rainmp]
standard_name = lwe_thickness_of_explicit_rain_amount
long_name = explicit rain on physics timestep
@@ -1814,7 +1804,7 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
- active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme)
+ active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_wsm6_mmm_microphysics_scheme)
[rainp]
standard_name = tendency_of_rain_water_mixing_ratio_due_to_microphysics
long_name = tendency of rain water mixing ratio due to microphysics
@@ -2063,6 +2053,20 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
+[snow_nonphy_mm]
+ standard_name = lwe_thickness_of_snow_amount_on_dynamics_timestep_in_mm
+ long_name = snow fall at this time step
+ units = mm
+ dimensions = (horizontal_loop_extent)
+ type = real | kind = kind_phys
+[snowmp_mm]
+ standard_name = lwe_thickness_of_snow_amount_in_mm
+ long_name = explicit snow on physics timestep
+ units = mm
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ active = (control_for_microphysics_scheme == identifier_for_wsm6_mmm_microphysics_scheme)
[snowmp]
standard_name = lwe_thickness_of_snow_amount
long_name = explicit snow fall on physics timestep
@@ -2070,7 +2074,7 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
- active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme)
+ active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_wsm6_mmm_microphysics_scheme)
[snowmt]
standard_name = surface_snow_melt
long_name = snow melt during timestep
@@ -2494,7 +2498,7 @@
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
- active = (flag_for_rrtmgp_radiation_scheme)
+ active = (flag_for_rrtmgp_radiation_scheme .or. flag_for_wsm6_mmm)
[p_lay]
standard_name = air_pressure_at_layer_for_RRTMGP
long_name = air pressure layer
@@ -2550,7 +2554,7 @@
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
- active = (flag_for_rrtmgp_radiation_scheme)
+ active = (flag_for_rrtmgp_radiation_scheme .or. control_for_microphysics_scheme == identifier_for_wsm6_mmm_microphysics_scheme)
[deltaZc]
standard_name = layer_thickness_from_layer_center
long_name = layer_thickness
@@ -2815,6 +2819,51 @@
type = real
kind = kind_phys
active = (flag_for_rrtmgp_radiation_scheme)
+[re_qc_bg]
+ standard_name = background_cloud_liquid_water_effective_radius
+ long_name = background cloud liquid water effective radius
+ units = m
+ dimensions = ()
+ type = real
+ kind = kind_phys
+ active = (control_for_microphysics_scheme == identifier_for_wsm6_mmm_microphysics_scheme)
+[re_qi_bg]
+ standard_name = background_ice_water_effective_radius
+ long_name = background ice water effective radius
+ units = m
+ dimensions = ()
+ type = real
+ kind = kind_phys
+ active = (control_for_microphysics_scheme == identifier_for_wsm6_mmm_microphysics_scheme)
+[re_qs_bg]
+ standard_name = background_snow_effective_radius
+ long_name = background snow effective radius
+ units = m
+ dimensions = ()
+ type = real
+ kind = kind_phys
+ active = (control_for_microphysics_scheme == identifier_for_wsm6_mmm_microphysics_scheme)
+[re_qc_m]
+ standard_name = effective_radius_of_stratiform_cloud_liquid_water_particle_in_meter
+ long_name = eff. radius of cloud liquid water particle in meter
+ units = m
+ dimensions = (horizontal_loop_extent,vertical_layer_dimension)
+ type = real | kind = kind_phys
+ active = (control_for_microphysics_scheme == identifier_for_wsm6_mmm_microphysics_scheme)
+[re_qi_m]
+ standard_name = effective_radius_of_stratiform_cloud_ice_particle_in_meter
+ long_name = eff. radius of cloud ice water particle in meter
+ units = m
+ dimensions = (horizontal_loop_extent,vertical_layer_dimension)
+ type = real | kind = kind_phys
+ active = (control_for_microphysics_scheme == identifier_for_wsm6_mmm_microphysics_scheme)
+[re_qs_m]
+ standard_name = effective_radius_of_stratiform_cloud_snow_particle_in_meter
+ long_name = effective radius of cloud snow particle in meter
+ units = m
+ dimensions = (horizontal_loop_extent,vertical_layer_dimension)
+ type = real | kind = kind_phys
+ active = (control_for_microphysics_scheme == identifier_for_wsm6_mmm_microphysics_scheme)
[vmr_o2]
standard_name = volume_mixing_ratio_for_o2
long_name = molar mixing ratio of o2 in with respect to dry air
@@ -2941,34 +2990,28 @@
type = real
kind = kind_phys
active = (flag_for_CCPP_suite_simulator)
-[hail_opt]
- standard_name = flag_for_hail_instead_of_graupel_parameters
- long_name = flag for hail instead of graupel parameters (graupel if false)
- units = flag
- dimensions = ()
- type = integer
[evapprod2d]
standard_name = grid_scale_production_of_evaporation
long_name = grid-scale production of evaporation
units = kg kg-1 s-1
- dimensions = (horizontal_begin:horizontal_end,vertical_layer_dimension)
+ dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
[rainprod2d]
standard_name = grid_scale_production_of_rain
long_name = grid-scale production of rain
units = kg kg-1 s-1
- dimensions = (horizontal_begin:horizontal_end,vertical_layer_dimension)
+ dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
-[vertical_dimension_start]
- standard_name = vertical_dimension_start
+[vertical_begin]
+ standard_name = vertical_begin
long_name = vertical dimension start
- units = none
+ units = count
dimensions = ()
type = integer
-[vertical_dimension_end]
- standard_name = vertical_dimension_end
+[vertical_end]
+ standard_name = vertical_end
long_name = vertical dimension end
units = count
dimensions = ()
diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90
index afc8747e3..b472fab23 100644
--- a/scm/src/GFS_typedefs.F90
+++ b/scm/src/GFS_typedefs.F90
@@ -1223,6 +1223,7 @@ module GFS_typedefs
real(kind=kind_phys) :: betadcu !< Tuning parameter for prog. closure deep clouds
!--- wsm6 parameters
+ logical :: do_wsm6_mmm
integer :: hail_opt
real(kind=kind_phys) :: den0
real(kind=kind_phys) :: denr
@@ -2040,6 +2041,8 @@ module GFS_typedefs
real (kind=kind_phys), pointer :: iwp_ex (:) => null() !< ice water path from microphysics
real (kind=kind_phys), pointer :: lwp_fc (:) => null() !< liquid water path from cloud fraction scheme
real (kind=kind_phys), pointer :: iwp_fc (:) => null() !< ice water path from cloud fraction scheme
+!--- WSM6 MMM scheme
+ real (kind=kind_phys), pointer :: tot_rainmp (:) => null() !< accumulated rain from microphysics
!--- Extra PBL diagnostics
real (kind=kind_phys), pointer :: dkt(:,:) => null() !< Eddy diffusitivity for heat
@@ -3885,6 +3888,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
logical :: ca_trigger = .false.
!--- wsm6 parameters
+ logical :: do_wsm6_mmm = .false.
integer :: hail_opt = 0 ! .false. !< hail option flag
real(kind=kind_phys) :: den0 = 1.28 !< density of dry air
real(kind=kind_phys) :: denr = 1000 !< density of liquid water
@@ -4151,7 +4155,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
!--- GSL lightning threat indices
lightning_threat, &
!--- wsm6 parameters
- hail_opt, den0, denr, dens, cl, cpv, &
+ do_wsm6_mmm, hail_opt, den0, denr, dens, cl, cpv, &
!--- CCPP suite simulator
do_ccpp_suite_sim
@@ -5189,6 +5193,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
if(Model%me==0) print *,' model init,iaufhrs=',Model%iaufhrs
!--- wsm6 parameters
+ Model%do_wsm6_mmm = do_wsm6_mmm
Model%hail_opt = hail_opt
Model%den0 = den0
Model%denr = denr
@@ -6108,13 +6113,19 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
Model%nleffr = 1
Model%nieffr = 2
Model%nseffr = 3
+ Model%lradar = .true.
+ if (.not. Model%effr_in) then
+ print *,' MMM WSM6 MP requires effr_in to be set to .true., changing value from false to true'
+ Model%effr_in = .true.
+ effr_in = .true.
+ endif
if (Model%me == Model%master) &
print *,' Using WSM6 MMM microphysics', &
- ' ltaerosol = ',Model%ltaerosol, &
- ' mraerosol = ',Model%mraerosol, &
+ !' ltaerosol = ',Model%ltaerosol, &
+ !#' mraerosol = ',Model%mraerosol, &
' ttendlim =',Model%ttendlim, &
- ' ext_diag_thompson =',Model%ext_diag_thompson, &
- ' dt_inner =',Model%dt_inner, &
+ !' ext_diag_thompson =',Model%ext_diag_thompson, &
+ !' dt_inner =',Model%dt_inner, &
' sedi_semi=',Model%sedi_semi, &
' decfl=',decfl, &
' effr_in =',Model%effr_in, &
@@ -7098,7 +7109,8 @@ subroutine control_print(Model)
print *, ' '
print *, 'lightning threat indexes'
print *, ' lightning_threat : ', Model%lightning_threat
- print *, 'wsm6 parameters'
+ print *, ' wsm6 parameters'
+ print *, ' do_wsm6_mmm : ', Model%do_wsm6_mmm
print *, ' hail_opt : ', Model%hail_opt
print *, ' den0 : ', Model%den0
print *, ' denr : ', Model%denr
@@ -7858,6 +7870,11 @@ subroutine diag_create (Diag, IM, Model)
allocate (Diag%lwp_fc (IM))
allocate (Diag%iwp_fc (IM))
+ ! WSM6 MMM scheme
+ if (Model%imp_physics == Model%imp_physics_wsm6_mmm) then
+ allocate (Diag%tot_rainmp (IM))
+ end if
+
!--- 3D diagnostics
if (Model%ldiag3d) then
allocate(Diag%dtend(IM,Model%levs,Model%ndtend))
@@ -8175,6 +8192,10 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center)
Diag%lwp_fc = zero
Diag%iwp_fc = zero
+ if (Model%imp_physics == Model%imp_physics_wsm6_mmm) then
+ Diag%tot_rainmp = zero
+ end if
+
Diag%totprcpb = zero
Diag%cnvprcpb = zero
Diag%toticeb = zero
diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta
index 024527050..610e6113f 100644
--- a/scm/src/GFS_typedefs.meta
+++ b/scm/src/GFS_typedefs.meta
@@ -4277,6 +4277,19 @@
units = flag
dimensions = ()
type = integer
+[do_wsm6_mmm]
+ standard_name = flag_for_wsm6_mmm
+ long_name = flag to activate mmm wsm6 microphysics
+ units = flag
+ dimensions = ()
+ type = logical
+[hail_opt]
+ standard_name = flag_for_hail_instead_of_graupel_parameters
+ long_name = flag for hail instead of graupel parameters (graupel if false)
+ units = flag
+ dimensions = ()
+ type = integer
+ active = (flag_for_wsm6_mmm)
[imp_physics_zhao_carr]
standard_name = identifier_for_zhao_carr_microphysics_scheme
long_name = choice of Zhao-Carr microphysics scheme
@@ -9448,6 +9461,13 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
+[tot_rainmp]
+ standard_name = accumulated_lwe_thickness_of_explicit_rain_amount
+ long_name = accumulated explicit rain
+ units = m
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
[total_albedo]
standard_name = total_sky_albedo
long_name = total sky albedo at toa
diff --git a/scm/src/scm_physical_constants.F90 b/scm/src/scm_physical_constants.F90
index 4b7e64887..175aee385 100644
--- a/scm/src/scm_physical_constants.F90
+++ b/scm/src/scm_physical_constants.F90
@@ -62,8 +62,8 @@ module scm_physical_constants
!> wsm6
real(kind=dp),parameter:: con_qmin = 1.e-15 !< minimum value of water vapor mixing ratio
real(kind=dp),parameter:: con_cv = 717 !< specific heat of dry air at constant volume
- real(kind=dp),parameter:: con_xls = 2.8440E06 !< latent heat of sublimation of water at 0C
+ real(kind=dp),parameter:: con_xls = 2.8440E06 !< latent heat of sublimation of snow/ice at 0C
real(kind=dp),parameter:: con_rhodryair = 1.225 !< density of dry air
- real(kind=dp),parameter:: con_rhosnow = 300.0 !< density of snow
+ real(kind=dp),parameter:: con_rhosnow = 100.0 !< density of snow
real(kind=dp),parameter:: con_4rv = 4.0 * con_rv !< four times the gas constant water vapor
end module scm_physical_constants
diff --git a/scm/src/scm_physical_constants.meta b/scm/src/scm_physical_constants.meta
index 6e8e8b746..503a75b40 100644
--- a/scm/src/scm_physical_constants.meta
+++ b/scm/src/scm_physical_constants.meta
@@ -106,7 +106,7 @@
kind = kind_phys
[con_hvap]
standard_name = latent_heat_of_vaporization_of_water_at_0C
- long_name = latent heat of evaporation/sublimation
+ long_name = latent heat of evaporation
units = J kg-1
dimensions = ()
type = real
@@ -301,11 +301,12 @@
type = real
kind = kind_phys
[con_xls]
- standard_name = latent_heat_of_sublimation_of_water_at_0C
- long_name = latent heat of sublimation of water at 0C
+ standard_name = latent_heat_of_sublimation_of_ice_snow_at_0C
+ long_name = latent heat of sublimation of snow/ice at 0C
units = J kg-1
dimensions = ()
- type = real | kind = kind_phys
+ type = real
+ kind = kind_phys
[con_rhodryair]
standard_name = density_of_dry_air
long_name = density of dry air