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