From 0a10877401f231cee5bf1bdac0e6cc0c77c0ebc7 Mon Sep 17 00:00:00 2001 From: tanyasmirnova Date: Fri, 16 Oct 2020 22:07:12 +0000 Subject: [PATCH 1/8] Variables for sea ice in RUC LSM are added. --- ccpp/physics | 2 +- gfsphysics/GFS_layer/GFS_typedefs.F90 | 101 +++++++++++++++++++++---- gfsphysics/GFS_layer/GFS_typedefs.meta | 99 ++++++++++++++++++++++++ 3 files changed, 186 insertions(+), 16 deletions(-) diff --git a/ccpp/physics b/ccpp/physics index 2caf57905..590d110c2 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 2caf57905c7405eea65281be55103901ef6eb5a4 +Subproject commit 590d110c28cefa0829516bfbb26d299f3f9eda55 diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index ce8eaef7a..553b27215 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -242,6 +242,8 @@ module GFS_typedefs real (kind=kind_phys), pointer :: tisfc (:) => null() !< surface temperature over ice fraction real (kind=kind_phys), pointer :: tiice(:,:) => null() !< internal ice temperature real (kind=kind_phys), pointer :: snowd (:) => null() !< snow depth water equivalent in mm ; same as snwdph + real (kind=kind_phys), pointer :: snowd_land (:) => null() !< snow depth water equivalent in mm ; same as snwdph + real (kind=kind_phys), pointer :: snowd_ice (:) => null() !< snow depth water equivalent in mm ; same as snwdph real (kind=kind_phys), pointer :: zorl (:) => null() !< composite surface roughness in cm real (kind=kind_phys), pointer :: zorlo (:) => null() !< ocean surface roughness in cm real (kind=kind_phys), pointer :: zorll (:) => null() !< land surface roughness in cm @@ -253,6 +255,7 @@ module GFS_typedefs !--- In (radiation only) real (kind=kind_phys), pointer :: sncovr (:) => null() !< snow cover in fraction + real (kind=kind_phys), pointer :: sncovr_ice (:) => null() !< snow cover in fraction real (kind=kind_phys), pointer :: snoalb (:) => null() !< maximum snow albedo in fraction real (kind=kind_phys), pointer :: alvsf (:) => null() !< mean vis albedo with strong cosz dependency real (kind=kind_phys), pointer :: alnsf (:) => null() !< mean nir albedo with strong cosz dependency @@ -369,12 +372,22 @@ module GFS_typedefs real (kind=kind_phys), pointer :: flag_frsoil(:,:) => null() !< RUC LSM: flag for frozen soil physics ! real (kind=kind_phys), pointer :: clw_surf(:) => null() !< RUC LSM: moist cloud water mixing ratio at surface + real (kind=kind_phys), pointer :: clw_surf_land(:) => null() !< RUC LSM: moist cloud water mixing ratio at surface over land + 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(:) => null() !< RUC LSM: water vapor mixing ratio at surface + real (kind=kind_phys), pointer :: qwv_surf_land(:) => null() !< RUC LSM: water vapor mixing ratio at surface + real (kind=kind_phys), pointer :: qwv_surf_ice(:) => null() !< RUC LSM: water vapor mixing ratio at surface real (kind=kind_phys), pointer :: cndm_surf(:) => null() !< RUC LSM: surface condensation mass + real (kind=kind_phys), pointer :: cndm_surf_land(:)=> null() !< RUC LSM: surface condensation mass over land + real (kind=kind_phys), pointer :: cndm_surf_ice(:) => null() !< RUC LSM: surface condensation mass over ice real (kind=kind_phys), pointer :: rhofr(:) => null() !< RUC LSM: density of frozen precipitation - real (kind=kind_phys), pointer :: tsnow(:) => null() !< RUC LSM: snow temperature at the bottom of the first soil layer - real (kind=kind_phys), pointer :: snowfallac(:) => null() !< ruc lsm diagnostics + real (kind=kind_phys), pointer :: tsnow(:) => null() !< RUC LSM: snow temperature at the bottom of the first snow layer + 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 :: acsnow(:) => null() !< ruc lsm diagnostics + real (kind=kind_phys), pointer :: snowfallac(:) => null() !< ruc lsm diagnostics + real (kind=kind_phys), pointer :: snowfallac_land(:) => null() !< ruc lsm diagnostics over land + real (kind=kind_phys), pointer :: snowfallac_ice(:) => null() !< ruc lsm diagnostics over ice ! MYNN surface layer real (kind=kind_phys), pointer :: ustm (:) => null() !u* including drag @@ -775,13 +788,15 @@ module GFS_typedefs integer :: lsm_noahmp=2 !< flag for NOAH land surface model integer :: lsm_ruc=3 !< flag for RUC land surface model integer :: lsoil !< number of soil layers - integer :: kice=2 !< number of layers in sice #ifdef CCPP integer :: lsoil_lsm !< number of soil layers internal to land surface model 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 real(kind=kind_phys), pointer :: zs(:) => null() !< depth of soil levels for land surface model logical :: rdlai + integer :: kice !< number of layers in ice model +#else + integer :: kice=2 !< number of layers in sice #endif integer :: ivegsrc !< ivegsrc = 0 => USGS, !< ivegsrc = 1 => IGBP (20 category) @@ -1359,7 +1374,9 @@ module GFS_typedefs !--- Out (radiation only) real (kind=kind_phys), pointer :: htrsw (:,:) => null() !< swh total sky sw heating rate in k/sec real (kind=kind_phys), pointer :: htrlw (:,:) => null() !< hlw total sky lw heating rate in k/sec - real (kind=kind_phys), pointer :: sfalb (:) => null() !< mean surface diffused sw albedo + real (kind=kind_phys), pointer :: sfalb (:) => null() !< mean surface diffused sw albedo + real (kind=kind_phys), pointer :: sfalb_land (:) => null() !< mean surface diffused sw albedo + real (kind=kind_phys), pointer :: sfalb_ice (:) => null() !< mean surface diffused sw albedo real (kind=kind_phys), pointer :: coszen(:) => null() !< mean cos of zenith angle over rad call period real (kind=kind_phys), pointer :: tsflw (:) => null() !< surface air temp during lw calculation in k @@ -1705,11 +1722,18 @@ module GFS_typedefs real (kind=kind_phys), pointer :: clouds(:,:,:) => null() !< real (kind=kind_phys), pointer :: clw(:,:,:) => null() !< real (kind=kind_phys), pointer :: clw_surf(:) => null() !< + real (kind=kind_phys), pointer :: clw_surf_land(:) => null() !< + real (kind=kind_phys), pointer :: clw_surf_ice(:) => null() !< + real (kind=kind_phys), pointer :: qwv_surf(:) => null() !< + real (kind=kind_phys), pointer :: qwv_surf_land(:) => null() !< + real (kind=kind_phys), pointer :: qwv_surf_ice(:) => null() !< real (kind=kind_phys), pointer :: clx(:,:) => null() !< real (kind=kind_phys), pointer :: cmm_ice(:) => null() !< real (kind=kind_phys), pointer :: cmm_land(:) => null() !< real (kind=kind_phys), pointer :: cmm_ocean(:) => null() !< real (kind=kind_phys), pointer :: cndm_surf(:) => null() !< + real (kind=kind_phys), pointer :: cndm_surf_land(:) => null() !< + real (kind=kind_phys), pointer :: cndm_surf_ice(:) => null() !< real (kind=kind_phys), pointer :: cnv_dqldt(:,:) => null() !< real (kind=kind_phys), pointer :: cnv_fice(:,:) => null() !< real (kind=kind_phys), pointer :: cnv_mfd(:,:) => null() !< @@ -1939,6 +1963,11 @@ module GFS_typedefs real (kind=kind_phys), pointer :: tsfc_ocean(:) => null() !< real (kind=kind_phys), pointer :: tsfg(:) => null() !< real (kind=kind_phys), pointer :: tsnow(:) => null() !< + real (kind=kind_phys), pointer :: tsnow_land(:) => null() !< + real (kind=kind_phys), pointer :: tsnow_ice(:) => null() !< + real (kind=kind_phys), pointer :: snowfallac(:) => null() !< + real (kind=kind_phys), pointer :: snowfallac_land(:) => null() !< + real (kind=kind_phys), pointer :: snowfallac_ice(:) => null() !< real (kind=kind_phys), pointer :: tsurf(:) => null() !< real (kind=kind_phys), pointer :: tsurf_ice(:) => null() !< real (kind=kind_phys), pointer :: tsurf_land(:) => null() !< @@ -2231,6 +2260,8 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%tisfc (IM)) allocate (Sfcprop%tiice (IM,Model%kice)) allocate (Sfcprop%snowd (IM)) + allocate (Sfcprop%snowd_land (IM)) + allocate (Sfcprop%snowd_ice (IM)) allocate (Sfcprop%zorl (IM)) allocate (Sfcprop%zorlo (IM)) allocate (Sfcprop%zorll (IM)) @@ -2251,6 +2282,8 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%tisfc = clear_val Sfcprop%tiice = clear_val Sfcprop%snowd = clear_val + Sfcprop%snowd_land = clear_val + Sfcprop%snowd_ice = clear_val Sfcprop%zorl = clear_val Sfcprop%zorlo = clear_val Sfcprop%zorll = clear_val @@ -2262,6 +2295,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) !--- In (radiation only) allocate (Sfcprop%sncovr (IM)) + allocate (Sfcprop%sncovr_ice (IM)) allocate (Sfcprop%snoalb (IM)) allocate (Sfcprop%alvsf (IM)) allocate (Sfcprop%alnsf (IM)) @@ -2271,6 +2305,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%facwf (IM)) Sfcprop%sncovr = clear_val + Sfcprop%sncovr_ice = clear_val Sfcprop%snoalb = clear_val Sfcprop%alvsf = clear_val Sfcprop%alnsf = clear_val @@ -2315,6 +2350,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%hice (IM)) allocate (Sfcprop%weasd (IM)) allocate (Sfcprop%sncovr (IM)) + allocate (Sfcprop%sncovr_ice (IM)) allocate (Sfcprop%canopy (IM)) allocate (Sfcprop%ffmm (IM)) allocate (Sfcprop%ffhh (IM)) @@ -2328,6 +2364,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%hice = clear_val Sfcprop%weasd = clear_val Sfcprop%sncovr = clear_val + Sfcprop%sncovr_ice = clear_val Sfcprop%canopy = clear_val Sfcprop%ffmm = clear_val Sfcprop%ffhh = clear_val @@ -2508,26 +2545,47 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%smois (IM,Model%lsoil_lsm)) allocate (Sfcprop%tslb (IM,Model%lsoil_lsm)) allocate (Sfcprop%flag_frsoil (IM,Model%lsoil_lsm)) - allocate (Sfcprop%clw_surf (IM)) - allocate (Sfcprop%qwv_surf (IM)) - allocate (Sfcprop%cndm_surf (IM)) - allocate (Sfcprop%rhofr (IM)) - allocate (Sfcprop%tsnow (IM)) - allocate (Sfcprop%snowfallac (IM)) - allocate (Sfcprop%acsnow (IM)) + allocate (Sfcprop%clw_surf (IM)) + allocate (Sfcprop%clw_surf_land (IM)) + allocate (Sfcprop%clw_surf_ice (IM)) + allocate (Sfcprop%qwv_surf (IM)) + allocate (Sfcprop%qwv_surf_land (IM)) + allocate (Sfcprop%qwv_surf_ice (IM)) + allocate (Sfcprop%cndm_surf (IM)) + allocate (Sfcprop%cndm_surf_land(IM)) + allocate (Sfcprop%cndm_surf_ice (IM)) + allocate (Sfcprop%rhofr (IM)) + allocate (Sfcprop%tsnow (IM)) + allocate (Sfcprop%tsnow_land (IM)) + allocate (Sfcprop%tsnow_ice (IM)) + allocate (Sfcprop%snowfallac (IM)) + allocate (Sfcprop%snowfallac_land (IM)) + allocate (Sfcprop%snowfallac_ice (IM)) + allocate (Sfcprop%acsnow (IM)) + ! Sfcprop%wetness = clear_val Sfcprop%sh2o = clear_val Sfcprop%keepsmfr = clear_val Sfcprop%smois = clear_val Sfcprop%tslb = clear_val - Sfcprop%clw_surf = clear_val - Sfcprop%qwv_surf = clear_val - Sfcprop%cndm_surf = clear_val + Sfcprop%clw_surf = clear_val + Sfcprop%clw_surf_land = clear_val + Sfcprop%clw_surf_ice = clear_val + Sfcprop%qwv_surf = clear_val + Sfcprop%qwv_surf_land = clear_val + Sfcprop%qwv_surf_ice = clear_val + Sfcprop%cndm_surf = clear_val + Sfcprop%cndm_surf_land = clear_val + Sfcprop%cndm_surf_ice = clear_val Sfcprop%flag_frsoil = clear_val Sfcprop%rhofr = clear_val Sfcprop%tsnow = clear_val + Sfcprop%tsnow_land = clear_val + Sfcprop%tsnow_ice = clear_val Sfcprop%snowfallac = clear_val + Sfcprop%snowfallac_land = clear_val + Sfcprop%snowfallac_ice = clear_val Sfcprop%acsnow = clear_val ! if (Model%rdlai) then @@ -3053,6 +3111,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & 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 :: rdlai = .false. + integer :: kice = -1 !< number of layers in ice; -1 use 2 #endif integer :: ivegsrc = 2 !< ivegsrc = 0 => USGS, !< ivegsrc = 1 => IGBP (20 category) @@ -3361,7 +3420,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & avg_max_length, & !--- land/surface model control #ifdef CCPP - lsm, lsoil, lsoil_lsm, lsnow_lsm, rdlai, & + lsm, lsoil, lsoil_lsm, lsnow_lsm, kice, rdlai, & nmtvr, ivegsrc, use_ufo, & #else lsm, lsoil, nmtvr, ivegsrc, use_ufo, & @@ -3807,6 +3866,13 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & if (Model%lsm==Model%lsm_ruc) then allocate (Model%zs(Model%lsoil_lsm)) Model%zs = clear_val + endif + ! + ! Set number of ice model layers + if (kice==-1) then + Model%kice = 2 + else + Model%kice = kice end if ! if (lsnow_lsm /= 3) then @@ -4927,6 +4993,7 @@ subroutine control_print(Model) print *, ' rdlai : ', Model%rdlai print *, ' lsoil_lsm : ', Model%lsoil_lsm print *, ' lsnow_lsm : ', Model%lsnow_lsm + print *, ' kice : ', Model%kice #endif print *, ' ivegsrc : ', Model%ivegsrc print *, ' isot : ', Model%isot @@ -5465,6 +5532,8 @@ subroutine radtend_create (Radtend, IM, Model) allocate (Radtend%htrsw (IM,Model%levs)) allocate (Radtend%htrlw (IM,Model%levs)) allocate (Radtend%sfalb (IM)) + allocate (Radtend%sfalb_land (IM)) + allocate (Radtend%sfalb_ice (IM)) allocate (Radtend%coszen (IM)) allocate (Radtend%tsflw (IM)) allocate (Radtend%semis (IM)) @@ -5472,6 +5541,8 @@ subroutine radtend_create (Radtend, IM, Model) Radtend%htrsw = clear_val Radtend%htrlw = clear_val Radtend%sfalb = clear_val + Radtend%sfalb_land = clear_val + Radtend%sfalb_ice = clear_val Radtend%coszen = clear_val Radtend%tsflw = clear_val Radtend%semis = clear_val diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index b895e779c..1ecc8dd7e 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.meta +++ b/gfsphysics/GFS_layer/GFS_typedefs.meta @@ -592,6 +592,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[sncovr_ice] + standard_name = surface_snow_area_fraction_over_ice + long_name = surface snow area fraction over ice + units = frac + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [snoalb] standard_name = upper_bound_on_max_albedo_over_deep_snow long_name = maximum snow albedo @@ -1252,6 +1259,20 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[clw_surf_land] + standard_name = cloud_condensed_water_mixing_ratio_at_surface_over_land + long_name = moist cloud water mixing ratio at surface over land + units = kg kg-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[clw_surf_ice] + standard_name = cloud_condensed_water_mixing_ratio_at_surface_over_ice + long_name = moist cloud water mixing ratio at surface over ice + units = kg kg-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [qwv_surf] standard_name = water_vapor_mixing_ratio_at_surface @@ -1260,6 +1281,22 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[qwv_surf_land] + standard_name = water_vapor_mixing_ratio_at_surface_over_land + long_name = water vapor mixing ratio at surface over land + units = kg kg-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[qwv_surf_ice] + standard_name = water_vapor_mixing_ratio_at_surface_over_ice + long_name = water vapor mixing ratio at surface over ice + units = kg kg-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [cndm_surf] standard_name = surface_condensation_mass @@ -1268,6 +1305,22 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[cndm_surf_land] + standard_name = surface_condensation_mass_over_land + long_name = surface condensation mass + units = kg m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[cndm_surf_ice] + standard_name = surface_condensation_mass_over_ice + long_name = surface condensation mass over ice + units = kg m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [flag_frsoil] standard_name = flag_for_frozen_soil_physics @@ -1292,6 +1345,22 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[tsnow_land] + standard_name = snow_temperature_bottom_first_layer_over_land + long_name = snow temperature at the bottom of the first snow layer over land + units = K + dimensions = (horizontal_dimension) + type = real + kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[tsnow_ice] + standard_name = snow_temperature_bottom_first_layer_over_ice + long_name = snow temperature at the bottom of the first snow layer over ice + units = K + dimensions = (horizontal_dimension) + type = real + kind = kind_phys active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [snowfallac] standard_name = total_accumulated_snowfall @@ -1300,6 +1369,22 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[snowfallac_land] + standard_name = total_accumulated_snowfall_over_land + long_name = run-total snow accumulation on the ground + units = kg m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[snowfallac_ice] + standard_name = total_accumulated_snowfall_over_ice + long_name = run-total snow accumulation on the ice + units = kg m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [acsnow] standard_name = accumulated_water_equivalent_of_frozen_precip @@ -5115,6 +5200,20 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[sfalb_land] + standard_name = surface_diffused_shortwave_albedo_over_land + long_name = mean surface diffused sw albed over land with snow effect + units = frac + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[sfalb_ice] + standard_name = surface_diffused_shortwave_albedo_over_ice + long_name = mean surface diffused sw albedo over ice with snow effect + units = frac + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [coszen] standard_name = cosine_of_zenith_angle long_name = mean cos of zenith angle over rad call period From 0e6772ef93d044bcfc8523d820251b7ca68993d8 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Tue, 3 Nov 2020 15:34:07 -0700 Subject: [PATCH 2/8] Update .gitmodules and submodule pointers for ccpp/physics and GFDL_atmos_cubed_sphere for code review and testing --- .gitmodules | 12 ++++++++---- atmos_cubed_sphere | 2 +- ccpp/physics | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/.gitmodules b/.gitmodules index bdc0ffbf1..170002991 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,12 +1,16 @@ [submodule "atmos_cubed_sphere"] path = atmos_cubed_sphere - url = https://github.com/NOAA-GSD/GFDL_atmos_cubed_sphere - branch = gsd/develop + #url = https://github.com/NOAA-GSD/GFDL_atmos_cubed_sphere + #branch = gsd/develop + url = https://github.com/climbfuji/GFDL_atmos_cubed_sphere + branch = gfs_dzmin_for_gsd_develop [submodule "ccpp/framework"] path = ccpp/framework url = https://github.com/NOAA-GSD/ccpp-framework branch = gsd/develop [submodule "ccpp/physics"] path = ccpp/physics - url = https://github.com/NOAA-GSD/ccpp-physics - branch = gsd/develop + #url = https://github.com/NOAA-GSD/ccpp-physics + #branch = gsd/develop + url = https://github.com/tanyasmirnova/ccpp-physics + branch = rucice \ No newline at end of file diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index b446f3252..6927f13d0 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit b446f3252c29e502fcb8090f57d844e329a31818 +Subproject commit 6927f13d06c95154747e25ecab66ab4e362e450f diff --git a/ccpp/physics b/ccpp/physics index 590d110c2..58bee8651 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 590d110c28cefa0829516bfbb26d299f3f9eda55 +Subproject commit 58bee865180c25ccbc8f404f9e55bc2706127e15 From 67a52b8b846ea24809ddff93a496e084ad65760a Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Tue, 10 Nov 2020 11:04:54 -0700 Subject: [PATCH 3/8] Remove calls to sfc_sice, lsm_ruc_sfc_sice_pre, lsm_ruc_sfc_sice_post for all RUC LSM runs --- ccpp/suites/suite_FV3_GSD_SAR.xml | 3 --- ccpp/suites/suite_FV3_GSD_v0.xml | 3 --- ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml | 3 --- ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml | 3 --- ccpp/suites/suite_FV3_HRRR.xml | 5 +---- ccpp/suites/suite_FV3_RAP.xml | 3 --- 6 files changed, 1 insertion(+), 19 deletions(-) diff --git a/ccpp/suites/suite_FV3_GSD_SAR.xml b/ccpp/suites/suite_FV3_GSD_SAR.xml index 093d7e568..81b217579 100644 --- a/ccpp/suites/suite_FV3_GSD_SAR.xml +++ b/ccpp/suites/suite_FV3_GSD_SAR.xml @@ -45,9 +45,6 @@ sfc_nst sfc_nst_post lsm_ruc - lsm_ruc_sfc_sice_pre - sfc_sice - lsm_ruc_sfc_sice_post GFS_surface_loop_control_part2 diff --git a/ccpp/suites/suite_FV3_GSD_v0.xml b/ccpp/suites/suite_FV3_GSD_v0.xml index 98bd9c8c1..b21384b9e 100644 --- a/ccpp/suites/suite_FV3_GSD_v0.xml +++ b/ccpp/suites/suite_FV3_GSD_v0.xml @@ -45,9 +45,6 @@ sfc_nst sfc_nst_post lsm_ruc - lsm_ruc_sfc_sice_pre - sfc_sice - lsm_ruc_sfc_sice_post GFS_surface_loop_control_part2 diff --git a/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml b/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml index 852385dca..a9149d604 100644 --- a/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml +++ b/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml @@ -45,9 +45,6 @@ sfc_nst sfc_nst_post lsm_ruc - lsm_ruc_sfc_sice_pre - sfc_sice - lsm_ruc_sfc_sice_post GFS_surface_loop_control_part2 diff --git a/ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml b/ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml index f1c22a774..0197ad665 100644 --- a/ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml +++ b/ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml @@ -45,9 +45,6 @@ sfc_nst sfc_nst_post lsm_ruc - lsm_ruc_sfc_sice_pre - sfc_sice - lsm_ruc_sfc_sice_post GFS_surface_loop_control_part2 diff --git a/ccpp/suites/suite_FV3_HRRR.xml b/ccpp/suites/suite_FV3_HRRR.xml index 24f57b8ec..6a0e9b5c6 100644 --- a/ccpp/suites/suite_FV3_HRRR.xml +++ b/ccpp/suites/suite_FV3_HRRR.xml @@ -1,4 +1,4 @@ - +g @@ -45,9 +45,6 @@ sfc_nst sfc_nst_post lsm_ruc - lsm_ruc_sfc_sice_pre - sfc_sice - lsm_ruc_sfc_sice_post GFS_surface_loop_control_part2 diff --git a/ccpp/suites/suite_FV3_RAP.xml b/ccpp/suites/suite_FV3_RAP.xml index 3f145c144..5256c9993 100644 --- a/ccpp/suites/suite_FV3_RAP.xml +++ b/ccpp/suites/suite_FV3_RAP.xml @@ -45,9 +45,6 @@ sfc_nst sfc_nst_post lsm_ruc - lsm_ruc_sfc_sice_pre - sfc_sice - lsm_ruc_sfc_sice_post GFS_surface_loop_control_part2 From bbf0c100dee3e506fef42d89028d03cb25f2f03d Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Tue, 10 Nov 2020 14:25:01 -0700 Subject: [PATCH 4/8] Removelsm_ruc_sfc_sice_interstitial.F90 from ccpp_prebuild_config.py --- ccpp/config/ccpp_prebuild_config.py | 1 - ccpp/physics | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index daabe2df6..b5df36d7e 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -168,7 +168,6 @@ 'FV3/ccpp/physics/physics/sfc_diag.f', 'FV3/ccpp/physics/physics/sfc_diag_post.F90', 'FV3/ccpp/physics/physics/sfc_drv_ruc.F90', - 'FV3/ccpp/physics/physics/lsm_ruc_sfc_sice_interstitial.F90', 'FV3/ccpp/physics/physics/sfc_cice.f', 'FV3/ccpp/physics/physics/sfc_diff.f', 'FV3/ccpp/physics/physics/sfc_drv.f', diff --git a/ccpp/physics b/ccpp/physics index 58bee8651..e6cac7bd8 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 58bee865180c25ccbc8f404f9e55bc2706127e15 +Subproject commit e6cac7bd89c154c8961d114eb6c2d60b3215e510 From 1e574d3be0121b60380cb86547bc0403c3ce1c5a Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Tue, 10 Nov 2020 14:25:51 -0700 Subject: [PATCH 5/8] Necessary updates to GFS_typedefs.{F90,meta}, GFS_diagnostics.F90 and FV3GFS_io.F90 for RUC ICE --- gfsphysics/GFS_layer/GFS_diagnostics.F90 | 12 +- gfsphysics/GFS_layer/GFS_typedefs.F90 | 157 ++++++++--------------- gfsphysics/GFS_layer/GFS_typedefs.meta | 81 +----------- io/FV3GFS_io.F90 | 85 +++++++----- 4 files changed, 113 insertions(+), 222 deletions(-) diff --git a/gfsphysics/GFS_layer/GFS_diagnostics.F90 b/gfsphysics/GFS_layer/GFS_diagnostics.F90 index adb624cca..3e43eae62 100644 --- a/gfsphysics/GFS_layer/GFS_diagnostics.F90 +++ b/gfsphysics/GFS_layer/GFS_diagnostics.F90 @@ -3030,24 +3030,24 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop if (Model%lsm == Model%lsm_ruc) then idx = idx + 1 ExtDiag(idx)%axes = 2 - ExtDiag(idx)%name = 'snowfall_acc' - ExtDiag(idx)%desc = 'total accumulated frozen precipitation' + ExtDiag(idx)%name = 'snowfall_acc_land' + ExtDiag(idx)%desc = 'total accumulated frozen precipitation over land' ExtDiag(idx)%unit = 'kg m-2' ExtDiag(idx)%mod_name = 'gfs_sfc' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%snowfallac(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%snowfallac_land(:) enddo idx = idx + 1 ExtDiag(idx)%axes = 2 - ExtDiag(idx)%name = 'swe_snowfall_acc' - ExtDiag(idx)%desc = 'accumulated water equivalent of frozen precipitation' + ExtDiag(idx)%name = 'snowfall_acc_ice' + ExtDiag(idx)%desc = 'total accumulated frozen precipitation over ice' ExtDiag(idx)%unit = 'kg m-2' ExtDiag(idx)%mod_name = 'gfs_sfc' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%acsnow(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%snowfallac_ice(:) enddo endif #endif diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index 553b27215..321d2a87f 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -242,8 +242,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: tisfc (:) => null() !< surface temperature over ice fraction real (kind=kind_phys), pointer :: tiice(:,:) => null() !< internal ice temperature real (kind=kind_phys), pointer :: snowd (:) => null() !< snow depth water equivalent in mm ; same as snwdph - real (kind=kind_phys), pointer :: snowd_land (:) => null() !< snow depth water equivalent in mm ; same as snwdph - real (kind=kind_phys), pointer :: snowd_ice (:) => null() !< snow depth water equivalent in mm ; same as snwdph real (kind=kind_phys), pointer :: zorl (:) => null() !< composite surface roughness in cm real (kind=kind_phys), pointer :: zorlo (:) => null() !< ocean surface roughness in cm real (kind=kind_phys), pointer :: zorll (:) => null() !< land surface roughness in cm @@ -254,8 +252,8 @@ module GFS_typedefs real (kind=kind_phys), pointer :: hprime (:,:) => null() !< orographic metrics !--- In (radiation only) - real (kind=kind_phys), pointer :: sncovr (:) => null() !< snow cover in fraction - real (kind=kind_phys), pointer :: sncovr_ice (:) => null() !< snow cover in fraction + real (kind=kind_phys), pointer :: sncovr (:) => null() !< snow cover in fraction over land + real (kind=kind_phys), pointer :: sncovr_ice (:) => null() !< snow cover in fraction over ice (RUC LSM only) real (kind=kind_phys), pointer :: snoalb (:) => null() !< maximum snow albedo in fraction real (kind=kind_phys), pointer :: alvsf (:) => null() !< mean vis albedo with strong cosz dependency real (kind=kind_phys), pointer :: alnsf (:) => null() !< mean nir albedo with strong cosz dependency @@ -364,28 +362,20 @@ module GFS_typedefs #ifdef CCPP ! Soil properties for RUC LSM (number of levels different from NOAH 4-layer model) - real (kind=kind_phys), pointer :: wetness(:) => null() !< normalized soil wetness for lsm - real (kind=kind_phys), pointer :: sh2o(:,:) => null() !< volume fraction of unfrozen soil moisture for lsm - real (kind=kind_phys), pointer :: keepsmfr(:,:) => null() !< RUC LSM: frozen moisture in soil - real (kind=kind_phys), pointer :: smois(:,:) => null() !< volumetric fraction of soil moisture for lsm - real (kind=kind_phys), pointer :: tslb(:,:) => null() !< soil temperature for land surface model - real (kind=kind_phys), pointer :: flag_frsoil(:,:) => null() !< RUC LSM: flag for frozen soil physics + real (kind=kind_phys), pointer :: wetness(:) => null() !< normalized soil wetness for lsm + real (kind=kind_phys), pointer :: sh2o(:,:) => null() !< volume fraction of unfrozen soil moisture for lsm + real (kind=kind_phys), pointer :: keepsmfr(:,:) => null() !< RUC LSM: frozen moisture in soil + real (kind=kind_phys), pointer :: smois(:,:) => null() !< volumetric fraction of soil moisture for lsm + real (kind=kind_phys), pointer :: tslb(:,:) => null() !< soil temperature for land surface model + real (kind=kind_phys), pointer :: flag_frsoil(:,:) => null() !< RUC LSM: flag for frozen soil physics ! - real (kind=kind_phys), pointer :: clw_surf(:) => null() !< RUC LSM: moist cloud water mixing ratio at surface - real (kind=kind_phys), pointer :: clw_surf_land(:) => null() !< RUC LSM: moist cloud water mixing ratio at surface over land - 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(:) => null() !< RUC LSM: water vapor mixing ratio at surface - real (kind=kind_phys), pointer :: qwv_surf_land(:) => null() !< RUC LSM: water vapor mixing ratio at surface - real (kind=kind_phys), pointer :: qwv_surf_ice(:) => null() !< RUC LSM: water vapor mixing ratio at surface - real (kind=kind_phys), pointer :: cndm_surf(:) => null() !< RUC LSM: surface condensation mass - real (kind=kind_phys), pointer :: cndm_surf_land(:)=> null() !< RUC LSM: surface condensation mass over land - real (kind=kind_phys), pointer :: cndm_surf_ice(:) => null() !< RUC LSM: surface condensation mass over ice - real (kind=kind_phys), pointer :: rhofr(:) => null() !< RUC LSM: density of frozen precipitation - real (kind=kind_phys), pointer :: tsnow(:) => null() !< RUC LSM: snow temperature at the bottom of the first snow layer - 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 :: acsnow(:) => null() !< ruc lsm diagnostics - real (kind=kind_phys), pointer :: snowfallac(:) => null() !< ruc lsm diagnostics + real (kind=kind_phys), pointer :: clw_surf_land(:) => null() !< RUC LSM: moist cloud water mixing ratio at surface over land + 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 real (kind=kind_phys), pointer :: snowfallac_ice(:) => null() !< ruc lsm diagnostics over ice @@ -1375,8 +1365,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: htrsw (:,:) => null() !< swh total sky sw heating rate in k/sec real (kind=kind_phys), pointer :: htrlw (:,:) => null() !< hlw total sky lw heating rate in k/sec real (kind=kind_phys), pointer :: sfalb (:) => null() !< mean surface diffused sw albedo - real (kind=kind_phys), pointer :: sfalb_land (:) => null() !< mean surface diffused sw albedo - real (kind=kind_phys), pointer :: sfalb_ice (:) => null() !< mean surface diffused sw albedo real (kind=kind_phys), pointer :: coszen(:) => null() !< mean cos of zenith angle over rad call period real (kind=kind_phys), pointer :: tsflw (:) => null() !< surface air temp during lw calculation in k @@ -1721,19 +1709,10 @@ module GFS_typedefs real (kind=kind_phys), pointer :: cld1d(:) => null() !< real (kind=kind_phys), pointer :: clouds(:,:,:) => null() !< real (kind=kind_phys), pointer :: clw(:,:,:) => null() !< - real (kind=kind_phys), pointer :: clw_surf(:) => null() !< - real (kind=kind_phys), pointer :: clw_surf_land(:) => null() !< - real (kind=kind_phys), pointer :: clw_surf_ice(:) => null() !< - real (kind=kind_phys), pointer :: qwv_surf(:) => null() !< - real (kind=kind_phys), pointer :: qwv_surf_land(:) => null() !< - real (kind=kind_phys), pointer :: qwv_surf_ice(:) => null() !< real (kind=kind_phys), pointer :: clx(:,:) => null() !< real (kind=kind_phys), pointer :: cmm_ice(:) => null() !< real (kind=kind_phys), pointer :: cmm_land(:) => null() !< real (kind=kind_phys), pointer :: cmm_ocean(:) => null() !< - real (kind=kind_phys), pointer :: cndm_surf(:) => null() !< - real (kind=kind_phys), pointer :: cndm_surf_land(:) => null() !< - real (kind=kind_phys), pointer :: cndm_surf_ice(:) => null() !< real (kind=kind_phys), pointer :: cnv_dqldt(:,:) => null() !< real (kind=kind_phys), pointer :: cnv_fice(:,:) => null() !< real (kind=kind_phys), pointer :: cnv_mfd(:,:) => null() !< @@ -1962,12 +1941,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: tsfc_land(:) => null() !< real (kind=kind_phys), pointer :: tsfc_ocean(:) => null() !< real (kind=kind_phys), pointer :: tsfg(:) => null() !< - real (kind=kind_phys), pointer :: tsnow(:) => null() !< - real (kind=kind_phys), pointer :: tsnow_land(:) => null() !< - real (kind=kind_phys), pointer :: tsnow_ice(:) => null() !< - real (kind=kind_phys), pointer :: snowfallac(:) => null() !< - real (kind=kind_phys), pointer :: snowfallac_land(:) => null() !< - real (kind=kind_phys), pointer :: snowfallac_ice(:) => null() !< real (kind=kind_phys), pointer :: tsurf(:) => null() !< real (kind=kind_phys), pointer :: tsurf_ice(:) => null() !< real (kind=kind_phys), pointer :: tsurf_land(:) => null() !< @@ -2260,8 +2233,6 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%tisfc (IM)) allocate (Sfcprop%tiice (IM,Model%kice)) allocate (Sfcprop%snowd (IM)) - allocate (Sfcprop%snowd_land (IM)) - allocate (Sfcprop%snowd_ice (IM)) allocate (Sfcprop%zorl (IM)) allocate (Sfcprop%zorlo (IM)) allocate (Sfcprop%zorll (IM)) @@ -2282,8 +2253,6 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%tisfc = clear_val Sfcprop%tiice = clear_val Sfcprop%snowd = clear_val - Sfcprop%snowd_land = clear_val - Sfcprop%snowd_ice = clear_val Sfcprop%zorl = clear_val Sfcprop%zorlo = clear_val Sfcprop%zorll = clear_val @@ -2294,8 +2263,6 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%hprime = clear_val !--- In (radiation only) - allocate (Sfcprop%sncovr (IM)) - allocate (Sfcprop%sncovr_ice (IM)) allocate (Sfcprop%snoalb (IM)) allocate (Sfcprop%alvsf (IM)) allocate (Sfcprop%alnsf (IM)) @@ -2304,8 +2271,6 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%facsf (IM)) allocate (Sfcprop%facwf (IM)) - Sfcprop%sncovr = clear_val - Sfcprop%sncovr_ice = clear_val Sfcprop%snoalb = clear_val Sfcprop%alvsf = clear_val Sfcprop%alnsf = clear_val @@ -2350,7 +2315,9 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%hice (IM)) allocate (Sfcprop%weasd (IM)) allocate (Sfcprop%sncovr (IM)) - allocate (Sfcprop%sncovr_ice (IM)) + if (Model%lsm == Model%lsm_ruc) then + allocate (Sfcprop%sncovr_ice (IM)) + end if allocate (Sfcprop%canopy (IM)) allocate (Sfcprop%ffmm (IM)) allocate (Sfcprop%ffhh (IM)) @@ -2364,7 +2331,9 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%hice = clear_val Sfcprop%weasd = clear_val Sfcprop%sncovr = clear_val - Sfcprop%sncovr_ice = clear_val + if (Model%lsm == Model%lsm_ruc) then + Sfcprop%sncovr_ice = clear_val + end if Sfcprop%canopy = clear_val Sfcprop%ffmm = clear_val Sfcprop%ffhh = clear_val @@ -2539,54 +2508,37 @@ subroutine sfcprop_create (Sfcprop, IM, Model) #ifdef CCPP if (Model%lsm == Model%lsm_ruc) then ! For land surface models with different numbers of levels than the four NOAH levels - allocate (Sfcprop%wetness (IM)) - allocate (Sfcprop%sh2o (IM,Model%lsoil_lsm)) - allocate (Sfcprop%keepsmfr (IM,Model%lsoil_lsm)) - allocate (Sfcprop%smois (IM,Model%lsoil_lsm)) - allocate (Sfcprop%tslb (IM,Model%lsoil_lsm)) - allocate (Sfcprop%flag_frsoil (IM,Model%lsoil_lsm)) - allocate (Sfcprop%clw_surf (IM)) - allocate (Sfcprop%clw_surf_land (IM)) - allocate (Sfcprop%clw_surf_ice (IM)) - allocate (Sfcprop%qwv_surf (IM)) - allocate (Sfcprop%qwv_surf_land (IM)) - allocate (Sfcprop%qwv_surf_ice (IM)) - allocate (Sfcprop%cndm_surf (IM)) - allocate (Sfcprop%cndm_surf_land(IM)) - allocate (Sfcprop%cndm_surf_ice (IM)) - allocate (Sfcprop%rhofr (IM)) - allocate (Sfcprop%tsnow (IM)) - allocate (Sfcprop%tsnow_land (IM)) - allocate (Sfcprop%tsnow_ice (IM)) - allocate (Sfcprop%snowfallac (IM)) + allocate (Sfcprop%wetness (IM)) + allocate (Sfcprop%sh2o (IM,Model%lsoil_lsm)) + allocate (Sfcprop%keepsmfr (IM,Model%lsoil_lsm)) + allocate (Sfcprop%smois (IM,Model%lsoil_lsm)) + allocate (Sfcprop%tslb (IM,Model%lsoil_lsm)) + allocate (Sfcprop%flag_frsoil (IM,Model%lsoil_lsm)) + allocate (Sfcprop%clw_surf_land (IM)) + 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)) allocate (Sfcprop%snowfallac_ice (IM)) - allocate (Sfcprop%acsnow (IM)) - ! - Sfcprop%wetness = clear_val - Sfcprop%sh2o = clear_val - Sfcprop%keepsmfr = clear_val - Sfcprop%smois = clear_val - Sfcprop%tslb = clear_val - Sfcprop%clw_surf = clear_val - Sfcprop%clw_surf_land = clear_val - Sfcprop%clw_surf_ice = clear_val - Sfcprop%qwv_surf = clear_val - Sfcprop%qwv_surf_land = clear_val - Sfcprop%qwv_surf_ice = clear_val - Sfcprop%cndm_surf = clear_val - Sfcprop%cndm_surf_land = clear_val - Sfcprop%cndm_surf_ice = clear_val - Sfcprop%flag_frsoil = clear_val - Sfcprop%rhofr = clear_val - Sfcprop%tsnow = clear_val - Sfcprop%tsnow_land = clear_val - Sfcprop%tsnow_ice = clear_val - Sfcprop%snowfallac = clear_val + Sfcprop%wetness = clear_val + Sfcprop%sh2o = clear_val + Sfcprop%keepsmfr = clear_val + Sfcprop%smois = clear_val + Sfcprop%tslb = clear_val + Sfcprop%clw_surf_land = clear_val + Sfcprop%clw_surf_ice = clear_val + 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 Sfcprop%snowfallac_ice = clear_val - Sfcprop%acsnow = clear_val ! if (Model%rdlai) then allocate (Sfcprop%xlaixy (IM)) @@ -3111,7 +3063,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & 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 :: rdlai = .false. - integer :: kice = -1 !< number of layers in ice; -1 use 2 + integer :: kice = 2 !< number of layers in ice; default is 2 (GFS sice) #endif integer :: ivegsrc = 2 !< ivegsrc = 0 => USGS, !< ivegsrc = 1 => IGBP (20 category) @@ -3866,14 +3818,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & if (Model%lsm==Model%lsm_ruc) then allocate (Model%zs(Model%lsoil_lsm)) Model%zs = clear_val - endif - ! - ! Set number of ice model layers - if (kice==-1) then - Model%kice = 2 - else - Model%kice = kice end if + ! Set number of ice model layers + Model%kice = kice ! if (lsnow_lsm /= 3) then write(0,*) 'Logic error: NoahMP expects the maximum number of snow layers to be exactly 3 (see sfc_noahmp_drv.f)' @@ -5532,8 +5479,6 @@ subroutine radtend_create (Radtend, IM, Model) allocate (Radtend%htrsw (IM,Model%levs)) allocate (Radtend%htrlw (IM,Model%levs)) allocate (Radtend%sfalb (IM)) - allocate (Radtend%sfalb_land (IM)) - allocate (Radtend%sfalb_ice (IM)) allocate (Radtend%coszen (IM)) allocate (Radtend%tsflw (IM)) allocate (Radtend%semis (IM)) @@ -5541,8 +5486,6 @@ subroutine radtend_create (Radtend, IM, Model) Radtend%htrsw = clear_val Radtend%htrlw = clear_val Radtend%sfalb = clear_val - Radtend%sfalb_land = clear_val - Radtend%sfalb_ice = clear_val Radtend%coszen = clear_val Radtend%tsflw = clear_val Radtend%semis = clear_val diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index 1ecc8dd7e..b9dad062c 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.meta +++ b/gfsphysics/GFS_layer/GFS_typedefs.meta @@ -599,6 +599,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [snoalb] standard_name = upper_bound_on_max_albedo_over_deep_snow long_name = maximum snow albedo @@ -1251,14 +1252,7 @@ dimensions = (horizontal_dimension,soil_vertical_dimension_for_land_surface_model) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) -[clw_surf] - standard_name = cloud_condensed_water_mixing_ratio_at_surface - long_name = moist cloud water mixing ratio at surface - units = kg kg-1 - dimensions = (horizontal_dimension) - type = real - kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [clw_surf_land] standard_name = cloud_condensed_water_mixing_ratio_at_surface_over_land long_name = moist cloud water mixing ratio at surface over land @@ -1266,6 +1260,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [clw_surf_ice] standard_name = cloud_condensed_water_mixing_ratio_at_surface_over_ice long_name = moist cloud water mixing ratio at surface over ice @@ -1274,14 +1269,6 @@ type = real kind = kind_phys active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) -[qwv_surf] - standard_name = water_vapor_mixing_ratio_at_surface - long_name = water vapor mixing ratio at surface - units = kg kg-1 - dimensions = (horizontal_dimension) - type = real - kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [qwv_surf_land] standard_name = water_vapor_mixing_ratio_at_surface_over_land long_name = water vapor mixing ratio at surface over land @@ -1298,30 +1285,6 @@ type = real kind = kind_phys active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) -[cndm_surf] - standard_name = surface_condensation_mass - long_name = surface condensation mass - units = kg m-2 - dimensions = (horizontal_dimension) - type = real - kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) -[cndm_surf_land] - standard_name = surface_condensation_mass_over_land - long_name = surface condensation mass - units = kg m-2 - dimensions = (horizontal_dimension) - type = real - kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) -[cndm_surf_ice] - standard_name = surface_condensation_mass_over_ice - long_name = surface condensation mass over ice - units = kg m-2 - dimensions = (horizontal_dimension) - type = real - kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [flag_frsoil] standard_name = flag_for_frozen_soil_physics long_name = flag for frozen soil physics (RUC) @@ -1338,14 +1301,6 @@ type = real kind = kind_phys active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) -[tsnow] - standard_name = snow_temperature_bottom_first_layer - long_name = snow temperature at the bottom of the first snow layer - units = K - dimensions = (horizontal_dimension) - type = real - kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [tsnow_land] standard_name = snow_temperature_bottom_first_layer_over_land long_name = snow temperature at the bottom of the first snow layer over land @@ -1362,14 +1317,6 @@ type = real kind = kind_phys active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) -[snowfallac] - standard_name = total_accumulated_snowfall - long_name = run-total snow accumulation on the ground - units = kg m-2 - dimensions = (horizontal_dimension) - type = real - kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [snowfallac_land] standard_name = total_accumulated_snowfall_over_land long_name = run-total snow accumulation on the ground @@ -1386,14 +1333,6 @@ type = real kind = kind_phys active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) -[acsnow] - standard_name = accumulated_water_equivalent_of_frozen_precip - long_name = snow water equivalent of run-total frozen precip - units = kg m-2 - dimensions = (horizontal_dimension) - type = real - kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [ustm] standard_name = surface_friction_velocity_drag long_name = friction velocity isolated for momentum only @@ -5200,20 +5139,6 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys -[sfalb_land] - standard_name = surface_diffused_shortwave_albedo_over_land - long_name = mean surface diffused sw albed over land with snow effect - units = frac - dimensions = (horizontal_dimension) - type = real - kind = kind_phys -[sfalb_ice] - standard_name = surface_diffused_shortwave_albedo_over_ice - long_name = mean surface diffused sw albedo over ice with snow effect - units = frac - dimensions = (horizontal_dimension) - type = real - kind = kind_phys [coszen] standard_name = cosine_of_zenith_angle long_name = mean cos of zenith angle over rad call period diff --git a/io/FV3GFS_io.F90 b/io/FV3GFS_io.F90 index 458605c96..e3c953625 100644 --- a/io/FV3GFS_io.F90 +++ b/io/FV3GFS_io.F90 @@ -530,9 +530,9 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) #ifdef CCPP if (Model%lsm == Model%lsm_ruc .and. warm_start) then if(Model%rdlai) then - nvar_s2r = 7 + nvar_s2r = 11 else - nvar_s2r = 6 + nvar_s2r = 10 end if nvar_s3 = 5 else @@ -865,13 +865,17 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) #ifdef CCPP else if (Model%lsm == Model%lsm_ruc .and. warm_start) then sfc_name2(nvar_s2m+19) = 'wetness' - sfc_name2(nvar_s2m+20) = 'clw_surf' - sfc_name2(nvar_s2m+21) = 'qwv_surf' - sfc_name2(nvar_s2m+22) = 'tsnow' - sfc_name2(nvar_s2m+23) = 'snowfall_acc' - sfc_name2(nvar_s2m+24) = 'swe_snowfall_acc' + sfc_name2(nvar_s2m+20) = 'clw_surf_land' + sfc_name2(nvar_s2m+21) = 'clw_surf_ice' + sfc_name2(nvar_s2m+22) = 'qwv_surf_land' + sfc_name2(nvar_s2m+23) = 'qwv_surf_ice' + sfc_name2(nvar_s2m+24) = 'tsnow_land' + sfc_name2(nvar_s2m+25) = 'tsnow_ice' + sfc_name2(nvar_s2m+26) = 'snowfall_acc_land' + sfc_name2(nvar_s2m+27) = 'snowfall_acc_ice' + sfc_name2(nvar_s2m+28) = 'sncovr_ice' if (Model%rdlai) then - sfc_name2(nvar_s2m+25) = 'lai' + sfc_name2(nvar_s2m+29) = 'lai' endif else if (Model%lsm == Model%lsm_ruc .and. Model%rdlai) then sfc_name2(nvar_s2m+19) = 'lai' @@ -1135,17 +1139,21 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) #ifdef CCPP if (Model%lsm == Model%lsm_ruc .and. warm_start) then !--- Extra RUC variables - Sfcprop(nb)%wetness(ix) = sfc_var2(i,j,nvar_s2m+19) - Sfcprop(nb)%clw_surf(ix) = sfc_var2(i,j,nvar_s2m+20) - Sfcprop(nb)%qwv_surf(ix) = sfc_var2(i,j,nvar_s2m+21) - Sfcprop(nb)%tsnow(ix) = sfc_var2(i,j,nvar_s2m+22) - Sfcprop(nb)%snowfallac(ix) = sfc_var2(i,j,nvar_s2m+23) - Sfcprop(nb)%acsnow(ix) = sfc_var2(i,j,nvar_s2m+24) + Sfcprop(nb)%wetness(ix) = sfc_var2(i,j,nvar_s2m+19) + Sfcprop(nb)%clw_surf_land(ix) = sfc_var2(i,j,nvar_s2m+20) + Sfcprop(nb)%clw_surf_ice(ix) = sfc_var2(i,j,nvar_s2m+21) + Sfcprop(nb)%qwv_surf_land(ix) = sfc_var2(i,j,nvar_s2m+22) + Sfcprop(nb)%qwv_surf_ice(ix) = sfc_var2(i,j,nvar_s2m+23) + Sfcprop(nb)%tsnow_land(ix) = sfc_var2(i,j,nvar_s2m+24) + Sfcprop(nb)%tsnow_ice(ix) = sfc_var2(i,j,nvar_s2m+25) + Sfcprop(nb)%snowfallac_land(ix) = sfc_var2(i,j,nvar_s2m+26) + Sfcprop(nb)%snowfallac_ice(ix) = sfc_var2(i,j,nvar_s2m+27) + Sfcprop(nb)%sncovr_ice(ix) = sfc_var2(i,j,nvar_s2m+28) if (Model%rdlai) then - Sfcprop(nb)%xlaixy(ix) = sfc_var2(i,j,nvar_s2m+25) + Sfcprop(nb)%xlaixy(ix) = sfc_var2(i,j,nvar_s2m+29) endif else if (Model%lsm == Model%lsm_ruc .and. Model%rdlai) then - Sfcprop(nb)%xlaixy(ix) = sfc_var2(i,j,nvar_s2m+19) + Sfcprop(nb)%xlaixy(ix) = sfc_var2(i,j,nvar_s2m+19) elseif (Model%lsm == Model%lsm_noahmp) then !--- Extra Noah MP variables #else @@ -1275,7 +1283,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) !--- if sncovr does not exist in the restart, need to create it if (sfc_var2(i,j,32) < -9990.0_r8) then - if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing sncovr') + if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing sncovr') !--- compute sncovr from existing variables !--- code taken directly from read_fix.f !$omp parallel do default(shared) private(nb, ix, vegtyp, rsnow) @@ -1294,6 +1302,13 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) endif enddo enddo + !--- For RUC LSM: create sncovr_ice from sncovr + if (Model%lsm == Model%lsm_ruc) then + if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - fill sncovr_ice with sncovr') + do nb = 1, Atm_block%nblks + Sfcprop(nb)%sncovr_ice(:) = Sfcprop(nb)%sncovr(:) + end do + endif endif ! if (Model%frac_grid) then @@ -1723,9 +1738,9 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta #ifdef CCPP if (Model%lsm == Model%lsm_ruc) then if (Model%rdlai) then - nvar2r = 7 + nvar2r = 11 else - nvar2r = 6 + nvar2r = 10 endif nvar3 = 5 else @@ -1862,13 +1877,17 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta #ifdef CCPP if (Model%lsm == Model%lsm_ruc) then sfc_name2(nvar2m+19) = 'wetness' - sfc_name2(nvar2m+20) = 'clw_surf' - sfc_name2(nvar2m+21) = 'qwv_surf' - sfc_name2(nvar2m+22) = 'tsnow' - sfc_name2(nvar2m+23) = 'snowfall_acc' - sfc_name2(nvar2m+24) = 'swe_snowfall_acc' + sfc_name2(nvar2m+20) = 'clw_surf_land' + sfc_name2(nvar2m+21) = 'clw_surf_ice' + sfc_name2(nvar2m+22) = 'qwv_surf_land' + sfc_name2(nvar2m+23) = 'qwv_surf_ice' + sfc_name2(nvar2m+24) = 'tsnow_land' + sfc_name2(nvar2m+25) = 'tsnow_ice' + sfc_name2(nvar2m+26) = 'snowfall_acc_land' + sfc_name2(nvar2m+27) = 'snowfall_acc_ice' + sfc_name2(nvar2m+28) = 'sncovr_ice' if (Model%rdlai) then - sfc_name2(nvar2m+25) = 'lai' + sfc_name2(nvar2m+29) = 'lai' endif else if(Model%lsm == Model%lsm_noahmp) then #else @@ -2087,13 +2106,17 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta if (Model%lsm == Model%lsm_ruc) then !--- Extra RUC variables sfc_var2(i,j,nvar2m+19) = Sfcprop(nb)%wetness(ix) - sfc_var2(i,j,nvar2m+20) = Sfcprop(nb)%clw_surf(ix) - sfc_var2(i,j,nvar2m+21) = Sfcprop(nb)%qwv_surf(ix) - sfc_var2(i,j,nvar2m+22) = Sfcprop(nb)%tsnow(ix) - sfc_var2(i,j,nvar2m+23) = Sfcprop(nb)%snowfallac(ix) - sfc_var2(i,j,nvar2m+24) = Sfcprop(nb)%acsnow(ix) + sfc_var2(i,j,nvar2m+20) = Sfcprop(nb)%clw_surf_land(ix) + sfc_var2(i,j,nvar2m+21) = Sfcprop(nb)%clw_surf_ice(ix) + sfc_var2(i,j,nvar2m+22) = Sfcprop(nb)%qwv_surf_land(ix) + sfc_var2(i,j,nvar2m+23) = Sfcprop(nb)%qwv_surf_ice(ix) + sfc_var2(i,j,nvar2m+24) = Sfcprop(nb)%tsnow_land(ix) + sfc_var2(i,j,nvar2m+25) = Sfcprop(nb)%tsnow_ice(ix) + sfc_var2(i,j,nvar2m+26) = Sfcprop(nb)%snowfallac_land(ix) + sfc_var2(i,j,nvar2m+27) = Sfcprop(nb)%snowfallac_ice(ix) + sfc_var2(i,j,nvar2m+28) = Sfcprop(nb)%sncovr_ice(ix) if (Model%rdlai) then - sfc_var2(i,j,nvar2m+25) = Sfcprop(nb)%xlaixy(ix) + sfc_var2(i,j,nvar2m+29) = Sfcprop(nb)%xlaixy(ix) endif else if (Model%lsm == Model%lsm_noahmp) then From 85ec4b336fea64d253c5ea0d696eaac2c1ddbf00 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Tue, 10 Nov 2020 15:18:03 -0700 Subject: [PATCH 6/8] Bugfix in ccpp/suites/suite_FV3_HRRR.xml --- ccpp/suites/suite_FV3_HRRR.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/suites/suite_FV3_HRRR.xml b/ccpp/suites/suite_FV3_HRRR.xml index 6a0e9b5c6..8147d20e4 100644 --- a/ccpp/suites/suite_FV3_HRRR.xml +++ b/ccpp/suites/suite_FV3_HRRR.xml @@ -1,4 +1,4 @@ -g + From d8054606b65d4689010d46b592a1b58df1f56f01 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Tue, 10 Nov 2020 15:20:02 -0700 Subject: [PATCH 7/8] Update submodule pointer for ccpp-physics --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index e6cac7bd8..dccce9530 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit e6cac7bd89c154c8961d114eb6c2d60b3215e510 +Subproject commit dccce95301ab15c17ef37e97c5cf02547356850c From 5fba7da51515d1d742b5d07b046b0b56d859f72d Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Tue, 24 Nov 2020 08:56:44 -0700 Subject: [PATCH 8/8] Update .gitmodules and submodule pointer for ccpp-physics for code review and testing --- .gitmodules | 4 ++-- ccpp/physics | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index 170002991..571704c03 100644 --- a/.gitmodules +++ b/.gitmodules @@ -12,5 +12,5 @@ path = ccpp/physics #url = https://github.com/NOAA-GSD/ccpp-physics #branch = gsd/develop - url = https://github.com/tanyasmirnova/ccpp-physics - branch = rucice \ No newline at end of file + url = https://github.com/climbfuji/ccpp-physics + branch = ruclsm_bugfixes_dom diff --git a/ccpp/physics b/ccpp/physics index dccce9530..dc007b004 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit dccce95301ab15c17ef37e97c5cf02547356850c +Subproject commit dc007b0040c9c128d8355817f97f6a948dce6c06