From 177281fedb6192ac648f37bfb2b25fd9057b836e Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Wed, 11 Jan 2023 12:05:08 -0700 Subject: [PATCH 1/9] remove unused RUC LSM variable and change some CCPP standard names --- ccpp/data/CCPP_typedefs.meta | 2 +- ccpp/data/GFS_typedefs.F90 | 3 --- ccpp/data/GFS_typedefs.meta | 24 ++++++++---------------- 3 files changed, 9 insertions(+), 20 deletions(-) diff --git a/ccpp/data/CCPP_typedefs.meta b/ccpp/data/CCPP_typedefs.meta index f235c3669..20e9f155b 100644 --- a/ccpp/data/CCPP_typedefs.meta +++ b/ccpp/data/CCPP_typedefs.meta @@ -1700,7 +1700,7 @@ type = real kind = kind_phys [fullradar_diag] - standard_name = flag_for_computing_full_radar_reflectivity + standard_name = do_full_radar_reflectivity long_name = flag for computing full radar reflectivity units = flag dimensions = () diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index d02cd5537..c314812f9 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -370,7 +370,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: clw_surf_ice(:) => null() !< RUC LSM: moist cloud water mixing ratio at surface over ice real (kind=kind_phys), pointer :: qwv_surf_land(:) => null() !< RUC LSM: water vapor mixing ratio at surface over land real (kind=kind_phys), pointer :: qwv_surf_ice(:) => null() !< RUC LSM: water vapor mixing ratio at surface over ice - real (kind=kind_phys), pointer :: rhofr(:) => null() !< RUC LSM: density of frozen precipitation real (kind=kind_phys), pointer :: tsnow_land(:) => null() !< RUC LSM: snow temperature at the bottom of the first snow layer over land real (kind=kind_phys), pointer :: tsnow_ice(:) => null() !< RUC LSM: snow temperature at the bottom of the first snow layer over ice real (kind=kind_phys), pointer :: snowfallac_land(:) => null() !< ruc lsm diagnostics over land @@ -2428,7 +2427,6 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%clw_surf_ice (IM)) allocate (Sfcprop%qwv_surf_land (IM)) allocate (Sfcprop%qwv_surf_ice (IM)) - allocate (Sfcprop%rhofr (IM)) allocate (Sfcprop%tsnow_land (IM)) allocate (Sfcprop%tsnow_ice (IM)) allocate (Sfcprop%snowfallac_land (IM)) @@ -2444,7 +2442,6 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%qwv_surf_land = clear_val Sfcprop%qwv_surf_ice = clear_val Sfcprop%flag_frsoil = clear_val - Sfcprop%rhofr = clear_val Sfcprop%tsnow_land = clear_val Sfcprop%tsnow_ice = clear_val Sfcprop%snowfallac_land = clear_val diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index d9b9ca82a..3e6dee205 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -1627,14 +1627,6 @@ type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) -[rhofr] - standard_name = frozen_precipitation_density - long_name = density of frozen precipitation - units = kg m-3 - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) [tsnow_land] standard_name = temperature_in_surface_snow_at_surface_adjacent_layer_over_land long_name = snow temperature at the bottom of the first snow layer over land @@ -4171,7 +4163,7 @@ dimensions = () type = integer [vrbliceden_noah] - standard_name = flag_for_vrbl_prcp_ice_den + standard_name = do_variable_surface_frozen_precipitation_density long_name = flag for variable precip ice density units = flag dimensions = () @@ -7512,49 +7504,49 @@ type = real kind = kind_phys [frzr] - standard_name = lwe_thickness_of_sfc_freezing_rain_amount + standard_name = lwe_thickness_of_surface_freezing_rain_amount long_name = accumulated surface freezing rain units = m dimensions = (horizontal_loop_extent) type = real kind = kind_phys [frzrb] - standard_name = lwe_thickness_of_sfc_freezing_rain_amount_in_bucket + standard_name = lwe_thickness_of_surface_freezing_rain_amount_in_bucket long_name = accumulated surface freezing rain in bucket units = m dimensions = (horizontal_loop_extent) type = real kind = kind_phys [frozr] - standard_name = lwe_thickness_of_sfc_graupel_amount + standard_name = lwe_thickness_of_surface_graupel_amount long_name = accumulated surface graupel units = m dimensions = (horizontal_loop_extent) type = real kind = kind_phys [frozrb] - standard_name = lwe_thickness_of_sfc_graupel_amount_in_bucket + standard_name = lwe_thickness_of_surface_graupel_amount_in_bucket long_name = accumulated surface graupel in bucket units = m dimensions = (horizontal_loop_extent) type = real kind = kind_phys [tsnowp] - standard_name = lwe_thickness_of_sfc_snow_amount + standard_name = lwe_thickness_of_surface_snow_amount long_name = accumulated surface snow units = m dimensions = (horizontal_loop_extent) type = real kind = kind_phys [tsnowpb] - standard_name = lwe_thickness_of_sfc_snow_amount_in_bucket + standard_name = lwe_thickness_of_surface_snow_amount_in_bucket long_name = accumulated surface snow in bucket units = m dimensions = (horizontal_loop_extent) type = real kind = kind_phys [rhonewsn1] - standard_name = lwe_density_of_precip_ice + standard_name = surface_frozen_precipitation_density long_name = density of precipitation ice units = kg m-3 dimensions = (horizontal_loop_extent) From 1edb6c58b82caee36a1b6a386136269f4196583c Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Wed, 11 Jan 2023 17:45:44 -0700 Subject: [PATCH 2/9] address standard name clash with lwe_of_surface... variables --- ccpp/data/GFS_typedefs.meta | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index 3e6dee205..f90f474aa 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -7504,42 +7504,42 @@ type = real kind = kind_phys [frzr] - standard_name = lwe_thickness_of_surface_freezing_rain_amount + standard_name = cumulative_lwe_thickness_of_surface_freezing_rain_amount long_name = accumulated surface freezing rain units = m dimensions = (horizontal_loop_extent) type = real kind = kind_phys [frzrb] - standard_name = lwe_thickness_of_surface_freezing_rain_amount_in_bucket + standard_name = cumulative_lwe_thickness_of_surface_freezing_rain_amount_in_bucket long_name = accumulated surface freezing rain in bucket units = m dimensions = (horizontal_loop_extent) type = real kind = kind_phys [frozr] - standard_name = lwe_thickness_of_surface_graupel_amount + standard_name = cumulative_lwe_thickness_of_surface_graupel_amount long_name = accumulated surface graupel units = m dimensions = (horizontal_loop_extent) type = real kind = kind_phys [frozrb] - standard_name = lwe_thickness_of_surface_graupel_amount_in_bucket + standard_name = cumulative_lwe_thickness_of_surface_graupel_amount_in_bucket long_name = accumulated surface graupel in bucket units = m dimensions = (horizontal_loop_extent) type = real kind = kind_phys [tsnowp] - standard_name = lwe_thickness_of_surface_snow_amount + standard_name = cumulative_lwe_thickness_of_surface_snow_amount long_name = accumulated surface snow units = m dimensions = (horizontal_loop_extent) type = real kind = kind_phys [tsnowpb] - standard_name = lwe_thickness_of_surface_snow_amount_in_bucket + standard_name = cumulative_lwe_thickness_of_surface_snow_amount_in_bucket long_name = accumulated surface snow in bucket units = m dimensions = (horizontal_loop_extent) From 201aecd20590f269cecd269331ba64aeddc33e1e Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Wed, 11 Jan 2023 20:45:52 -0700 Subject: [PATCH 3/9] update atmos_cubed_sphere submodule pointer --- atmos_cubed_sphere | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index aa42f6e13..a839395d5 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit aa42f6e135839492b0a3b80fc3f2c25d766ad437 +Subproject commit a839395d542ab860ae0afa7601e35b37d68d773e From f0fbd733d10172b12358d29e110810036ef6035b Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Wed, 18 Jan 2023 16:52:02 -0500 Subject: [PATCH 4/9] add back internal RUC LSM surface frozen precip density --- ccpp/data/GFS_typedefs.F90 | 3 +++ ccpp/data/GFS_typedefs.meta | 8 ++++++++ ccpp/physics | 2 +- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index c314812f9..d02cd5537 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -370,6 +370,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: clw_surf_ice(:) => null() !< RUC LSM: moist cloud water mixing ratio at surface over ice real (kind=kind_phys), pointer :: qwv_surf_land(:) => null() !< RUC LSM: water vapor mixing ratio at surface over land real (kind=kind_phys), pointer :: qwv_surf_ice(:) => null() !< RUC LSM: water vapor mixing ratio at surface over ice + real (kind=kind_phys), pointer :: rhofr(:) => null() !< RUC LSM: density of frozen precipitation real (kind=kind_phys), pointer :: tsnow_land(:) => null() !< RUC LSM: snow temperature at the bottom of the first snow layer over land real (kind=kind_phys), pointer :: tsnow_ice(:) => null() !< RUC LSM: snow temperature at the bottom of the first snow layer over ice real (kind=kind_phys), pointer :: snowfallac_land(:) => null() !< ruc lsm diagnostics over land @@ -2427,6 +2428,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%clw_surf_ice (IM)) allocate (Sfcprop%qwv_surf_land (IM)) allocate (Sfcprop%qwv_surf_ice (IM)) + allocate (Sfcprop%rhofr (IM)) allocate (Sfcprop%tsnow_land (IM)) allocate (Sfcprop%tsnow_ice (IM)) allocate (Sfcprop%snowfallac_land (IM)) @@ -2442,6 +2444,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%qwv_surf_land = clear_val Sfcprop%qwv_surf_ice = clear_val Sfcprop%flag_frsoil = clear_val + Sfcprop%rhofr = clear_val Sfcprop%tsnow_land = clear_val Sfcprop%tsnow_ice = clear_val Sfcprop%snowfallac_land = clear_val diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index f90f474aa..e7128e2d4 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -1627,6 +1627,14 @@ type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) +[rhofr] + standard_name = lsm_internal_surface_frozen_precipitation_density + long_name = density of frozen precipitation + units = kg m-3 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) [tsnow_land] standard_name = temperature_in_surface_snow_at_surface_adjacent_layer_over_land long_name = snow temperature at the bottom of the first snow layer over land diff --git a/ccpp/physics b/ccpp/physics index db11313be..e259523a1 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit db11313be3f3dd7c471452a13068fd6792690912 +Subproject commit e259523a1cf51c41fed5066ecbc76b52faf93022 From 4edd5ebdc6230cf684ba014fa4b305b7dd896857 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Thu, 19 Jan 2023 10:29:16 -0500 Subject: [PATCH 5/9] update ccpp/physics submodule pointer --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index e259523a1..c96fee620 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit e259523a1cf51c41fed5066ecbc76b52faf93022 +Subproject commit c96fee620e54758250d145fb776b759c2c6c61bc From cb910d03308f139e1c3273f12f089a04db487db8 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Thu, 19 Jan 2023 20:47:49 -0500 Subject: [PATCH 6/9] change vrbliceden_noah to exticeden --- ccpp/data/GFS_typedefs.F90 | 23 ++++++++++++++++------- ccpp/data/GFS_typedefs.meta | 6 +++--- ccpp/physics | 2 +- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index d02cd5537..49d7432ec 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -925,7 +925,7 @@ module GFS_typedefs integer :: lsnow_lsm !< maximum number of snow layers internal to land surface model integer :: lsnow_lsm_lbound!< lower bound for snow arrays, depending on lsnow_lsm integer :: lsnow_lsm_ubound!< upper bound for snow arrays, depending on lsnow_lsm - logical :: vrbliceden_noah !< flag for variable precip ice density for NOAH LSM + logical :: exticeden !< flag for external precip ice density (e.g. calculated after microphysics rather than inside LSM) real(kind=kind_phys), pointer :: zs(:) => null() !< depth of soil levels for land surface model real(kind=kind_phys), pointer :: dzs(:) => null() !< thickness of soil levels for land surface model real(kind=kind_phys), pointer :: pores(:) => null() !< max soil moisture for a given soil type for land surface model @@ -3124,7 +3124,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & integer :: lsoil = 4 !< number of soil layers integer :: lsoil_lsm = -1 !< number of soil layers internal to land surface model; -1 use lsoil integer :: lsnow_lsm = 3 !< maximum number of snow layers internal to land surface model - logical :: vrbliceden_noah = .false. !< Use variable precip ice density for NOAH LSM if true or original formulation + logical :: exticeden = .false. !< Use external precip ice density for LSM if true; use internal LSM formulation of false logical :: rdlai = .false. !< read LAI from input file (for RUC LSM or NOAH LSM WRFv4) logical :: ua_phys = .false. !< flag for using University of Arizona? extension to NOAH LSM WRFv4 logical :: usemonalb = .true. !< flag to read surface diffused shortwave albedo from input file for NOAH LSM WRFv4 @@ -3528,7 +3528,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- land/surface model control lsm, lsoil, lsoil_lsm, lsnow_lsm, kice, rdlai, & nmtvr, ivegsrc, use_ufo, iopt_thcnd, ua_phys, usemonalb, & - aoasis, fasdas,vrbliceden_noah, & + aoasis, fasdas, exticeden, & ! Noah MP options iopt_dveg,iopt_crs,iopt_btr,iopt_run,iopt_sfc, iopt_frz, & iopt_inf, iopt_rad,iopt_alb,iopt_snf,iopt_tbot,iopt_stc, & @@ -4174,7 +4174,12 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%ivegsrc = ivegsrc Model%isot = isot Model%use_ufo = use_ufo - Model%vrbliceden_noah = vrbliceden_noah + Model%exticeden = exticeden + if (Model%exticeden .and. (imp_physics /= imp_physics_gfdl .and. imp_physics /= imp_physics_thompson .and. imp_physics /= imp_physics_nssl )) then + !see GFS_MP_generic_post.F90; exticeden is only compatible with GFDL, Thompson, or NSSL MP + print *,' Using exticeden = T is only valid when using GFDL, Thompson, or NSSL microphysics.' + stop + end if ! GFDL surface layer options Model%lcurr_sf = lcurr_sf @@ -4196,7 +4201,11 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%iopt_inf = iopt_inf Model%iopt_rad = iopt_rad Model%iopt_alb = iopt_alb - Model%iopt_snf = iopt_snf + if (Model%lsm==Model%lsm_noahmp .and. Model%exticeden .and. iopt_snf == 4) then + Model%iopt_snf = 5 + else + Model%iopt_snf = iopt_snf + end if Model%iopt_tbot = iopt_tbot Model%iopt_stc = iopt_stc Model%iopt_trs = iopt_trs @@ -5065,7 +5074,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & if (Model%me == Model%master) then if (Model%lsm == 1) then print *,' NOAH Land Surface Model used' - print *,'vrbliceden_noah = ', Model%vrbliceden_noah + print *,'exticeden = ', Model%exticeden elseif (Model%lsm == 0) then print *,' OSU no longer supported - job aborted' @@ -5924,7 +5933,7 @@ subroutine control_print(Model) print *, ' lsoil : ', Model%lsoil print *, ' rdlai : ', Model%rdlai print *, ' lsoil_lsm : ', Model%lsoil_lsm - print *, ' vrbliceden_noah : ', Model%vrbliceden_noah + print *, ' exticeden : ', Model%exticeden if (Model%lsm==Model%lsm_noahmp) then print *, ' lsnow_lsm : ', Model%lsnow_lsm print *, ' lsnow_lsm_lbound : ', Model%lsnow_lsm_lbound diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index e7128e2d4..bdb61c875 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -4170,9 +4170,9 @@ units = count dimensions = () type = integer -[vrbliceden_noah] - standard_name = do_variable_surface_frozen_precipitation_density - long_name = flag for variable precip ice density +[exticeden] + standard_name = do_external_surface_frozen_precipitation_density + long_name = flag for calculating frozen precip ice density outside of the LSM units = flag dimensions = () type = logical diff --git a/ccpp/physics b/ccpp/physics index c96fee620..cb0afb8c8 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit c96fee620e54758250d145fb776b759c2c6c61bc +Subproject commit cb0afb8c8b9de7b97e37d593225fe2dc81c9f6d8 From 4e8ff4e9efafb6c6463ba179da24c51c5b538783 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Thu, 19 Jan 2023 21:09:39 -0500 Subject: [PATCH 7/9] fix compilation error in GFS_typedefs.F90 --- ccpp/data/GFS_typedefs.F90 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 49d7432ec..4fd196d6a 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -4175,7 +4175,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%isot = isot Model%use_ufo = use_ufo Model%exticeden = exticeden - if (Model%exticeden .and. (imp_physics /= imp_physics_gfdl .and. imp_physics /= imp_physics_thompson .and. imp_physics /= imp_physics_nssl )) then + if (Model%exticeden .and. & + (Model%imp_physics /= Model%imp_physics_gfdl .and. Model%imp_physics /= Model%imp_physics_thompson .and. + Model%imp_physics /= Model%imp_physics_nssl )) then !see GFS_MP_generic_post.F90; exticeden is only compatible with GFDL, Thompson, or NSSL MP print *,' Using exticeden = T is only valid when using GFDL, Thompson, or NSSL microphysics.' stop From 0f820645dccf0d0771b373c6cc89764cdb459927 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Thu, 19 Jan 2023 21:14:44 -0500 Subject: [PATCH 8/9] fix another error in GFS_typedefs.F90 --- ccpp/data/GFS_typedefs.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 4fd196d6a..6f38fdbe3 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -4176,7 +4176,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%use_ufo = use_ufo Model%exticeden = exticeden if (Model%exticeden .and. & - (Model%imp_physics /= Model%imp_physics_gfdl .and. Model%imp_physics /= Model%imp_physics_thompson .and. + (Model%imp_physics /= Model%imp_physics_gfdl .and. Model%imp_physics /= Model%imp_physics_thompson .and. & Model%imp_physics /= Model%imp_physics_nssl )) then !see GFS_MP_generic_post.F90; exticeden is only compatible with GFDL, Thompson, or NSSL MP print *,' Using exticeden = T is only valid when using GFDL, Thompson, or NSSL microphysics.' From 416f96eebaf8b97e033e0befcf7cf88813d4a914 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Fri, 27 Jan 2023 10:06:25 -0500 Subject: [PATCH 9/9] point to Eric's latest winterwx branch of ccpp/physics --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index cb0afb8c8..9691f350b 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit cb0afb8c8b9de7b97e37d593225fe2dc81c9f6d8 +Subproject commit 9691f350b58245d93d5d0fbc61ea793ab47e4dad