diff --git a/ccpp/physics b/ccpp/physics index 0808cc2e89..f91d1bfde0 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 0808cc2e8938ba66003b46746858143a9d75addb +Subproject commit f91d1bfde0bcdf69a8efe0917f49a4713e590bef diff --git a/ccpp/suites/suite_FV3_RRFS_v1beta.xml b/ccpp/suites/suite_FV3_RRFS_v1beta.xml index 3bff7b39da..c570483df3 100644 --- a/ccpp/suites/suite_FV3_RRFS_v1beta.xml +++ b/ccpp/suites/suite_FV3_RRFS_v1beta.xml @@ -56,7 +56,8 @@ GFS_surface_generic_post mynnedmf_wrapper GFS_GWD_generic_pre - drag_suite + cires_ugwp + cires_ugwp_post GFS_GWD_generic_post rayleigh_damp GFS_suite_stateout_update diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index 4291700597..67d8a7668f 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -657,6 +657,7 @@ module GFS_typedefs integer :: icliq_sw !< sw optical property for liquid clouds integer :: iovr_sw !< sw: max-random overlap clouds integer :: iovr_lw !< lw: max-random overlap clouds + integer :: iovr !< max-random overlap clouds for sw & lw (maximum of both) integer :: ictm !< ictm=0 => use data at initial cond time, if not !< available; use latest; no extrapolation. !< ictm=1 => use data at the forecast time, if not @@ -1681,6 +1682,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: adjvisdfd(:) => null() !< real (kind=kind_phys), pointer :: aerodp(:,:) => null() !< real (kind=kind_phys), pointer :: alb1d(:) => null() !< + real (kind=kind_phys), pointer :: alpha(:,:) => null() !< real (kind=kind_phys), pointer :: bexp1d(:) => null() !< real (kind=kind_phys), pointer :: cd(:) => null() !< real (kind=kind_phys), pointer :: cd_ice(:) => null() !< @@ -3683,6 +3685,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%icliq_sw = icliq_sw Model%iovr_sw = iovr_sw Model%iovr_lw = iovr_lw + Model%iovr = max(Model%iovr_sw,Model%iovr_lw) Model%ictm = ictm Model%isubc_sw = isubc_sw Model%isubc_lw = isubc_lw @@ -4838,6 +4841,7 @@ subroutine control_print(Model) print *, ' icliq_sw : ', Model%icliq_sw print *, ' iovr_sw : ', Model%iovr_sw print *, ' iovr_lw : ', Model%iovr_lw + print *, ' iovr : ', Model%iovr print *, ' ictm : ', Model%ictm print *, ' isubc_sw : ', Model%isubc_sw print *, ' isubc_lw : ', Model%isubc_lw @@ -6179,6 +6183,10 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%adjvisdfd (IM)) allocate (Interstitial%aerodp (IM,NSPC1)) allocate (Interstitial%alb1d (IM)) + if (.not. Model%do_RRTMGP) then + ! RRTMGP uses its own cloud_overlap_param + allocate (Interstitial%alpha (IM,Model%levr+LTP)) + end if allocate (Interstitial%bexp1d (IM)) allocate (Interstitial%cd (IM)) allocate (Interstitial%cd_ice (IM)) @@ -6718,6 +6726,9 @@ subroutine interstitial_rad_reset (Interstitial, Model) ! Interstitial%aerodp = clear_val Interstitial%alb1d = clear_val + if (.not. Model%do_RRTMGP) then + Interstitial%alpha = clear_val + end if Interstitial%cldsa = clear_val Interstitial%cldtaulw = clear_val Interstitial%cldtausw = clear_val @@ -7154,6 +7165,9 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%adjvisdfd ) = ', sum(Interstitial%adjvisdfd ) write (0,*) 'sum(Interstitial%aerodp ) = ', sum(Interstitial%aerodp ) write (0,*) 'sum(Interstitial%alb1d ) = ', sum(Interstitial%alb1d ) + if (.not. Model%do_RRTMGP) then + write (0,*) 'sum(Interstitial%alpha ) = ', sum(Interstitial%alpha ) + end if write (0,*) 'sum(Interstitial%bexp1d ) = ', sum(Interstitial%bexp1d ) write (0,*) 'sum(Interstitial%cd ) = ', sum(Interstitial%cd ) write (0,*) 'sum(Interstitial%cd_ice ) = ', sum(Interstitial%cd_ice ) diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index 84ba83e868..24bd57de7e 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.meta +++ b/gfsphysics/GFS_layer/GFS_typedefs.meta @@ -2468,14 +2468,20 @@ units = flag dimensions = () type = integer +[iovr] + standard_name = flag_for_cloud_overlap_method_for_radiation + long_name = max-random overlap clouds + units = flag + dimensions = () + type = integer [iovr_sw] - standard_name = flag_for_max_random_overlap_clouds_for_shortwave_radiation + standard_name = flag_for_cloud_overlap_method_for_shortwave_radiation long_name = sw: max-random overlap clouds units = flag dimensions = () type = integer [iovr_lw] - standard_name = flag_for_max_random_overlap_clouds_for_longwave_radiation + standard_name = flag_for_cloud_overlap_method_for_longwave_radiation long_name = lw: max-random overlap clouds units = flag dimensions = () @@ -6750,6 +6756,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[alpha] + standard_name = cloud_overlap_decorrelation_parameter + long_name = cloud overlap decorrelation parameter for RRTMG (but not for RRTMGP) + units = frac + dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) + type = real + kind = kind_phys [bexp1d] standard_name = perturbation_of_soil_type_b_parameter long_name = perturbation of soil type "b" parameter @@ -9128,7 +9141,6 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys - optional = F active = (flag_for_rrtmgp_radiation_scheme) [p_lev] standard_name = air_pressure_at_interface_for_RRTMGP_in_hPa @@ -9137,7 +9149,6 @@ dimensions = (horizontal_dimension,vertical_dimension_plus_one) type = real kind = kind_phys - optional = F active = (flag_for_rrtmgp_radiation_scheme) [t_lay] standard_name = air_temperature_at_layer_for_RRTMGP @@ -9146,7 +9157,6 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys - optional = F active = (flag_for_rrtmgp_radiation_scheme) [t_lev] standard_name = air_temperature_at_interface_for_RRTMGP @@ -9155,7 +9165,6 @@ dimensions = (horizontal_dimension,vertical_dimension_plus_one) type = real kind = kind_phys - optional = F active = (flag_for_rrtmgp_radiation_scheme) [tv_lay] standard_name = virtual_temperature @@ -9164,7 +9173,6 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys - optional = F active = (flag_for_rrtmgp_radiation_scheme) [relhum] standard_name = relative_humidity @@ -9192,7 +9200,7 @@ active = (flag_for_rrtmgp_radiation_scheme) [cloud_overlap_param] standard_name = cloud_overlap_param - long_name = cloud overlap parameter + long_name = cloud overlap parameter for RRTMGP (but not for RRTMG) units = km dimensions = (horizontal_dimension,vertical_dimension) type = real @@ -9225,7 +9233,6 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys - optional = F [cldtaulw] standard_name = RRTMGP_cloud_optical_depth_layers_at_10mu_band long_name = approx 10mu band layer cloud optical depth @@ -9240,7 +9247,6 @@ dimensions = (horizontal_dimension,vertical_dimension_plus_one) type = real kind = kind_phys - optional = F active = (flag_for_rrtmgp_radiation_scheme) [fluxlwDOWN_allsky] standard_name = RRTMGP_lw_flux_profile_downward_allsky @@ -9249,7 +9255,6 @@ dimensions = (horizontal_dimension,vertical_dimension_plus_one) type = real kind = kind_phys - optional = F active = (flag_for_rrtmgp_radiation_scheme) [fluxlwUP_clrsky] standard_name = RRTMGP_lw_flux_profile_upward_clrsky @@ -9258,7 +9263,6 @@ dimensions = (horizontal_dimension,vertical_dimension_plus_one) type = real kind = kind_phys - optional = F active = (flag_for_rrtmgp_radiation_scheme) [fluxlwDOWN_clrsky] standard_name = RRTMGP_lw_flux_profile_downward_clrsky @@ -9296,7 +9300,6 @@ dimensions = (horizontal_dimension,vertical_dimension_plus_one) type = real kind = kind_phys - optional = F active = (flag_for_rrtmgp_radiation_scheme) [fluxswDOWN_allsky] standard_name = RRTMGP_sw_flux_profile_downward_allsky @@ -9305,7 +9308,6 @@ dimensions = (horizontal_dimension,vertical_dimension_plus_one) type = real kind = kind_phys - optional = F active = (flag_for_rrtmgp_radiation_scheme) [fluxswUP_clrsky] standard_name = RRTMGP_sw_flux_profile_upward_clrsky @@ -9314,7 +9316,6 @@ dimensions = (horizontal_dimension,vertical_dimension_plus_one) type = real kind = kind_phys - optional = F active = (flag_for_rrtmgp_radiation_scheme) [fluxswDOWN_clrsky] standard_name = RRTMGP_sw_flux_profile_downward_clrsky @@ -9323,7 +9324,6 @@ dimensions = (horizontal_dimension,vertical_dimension_plus_one) type = real kind = kind_phys - optional = F active = (flag_for_rrtmgp_radiation_scheme) [flxprf_lw] standard_name = RRTMGP_lw_fluxes @@ -9331,7 +9331,6 @@ units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) type = proflw_type - optional = T active = (flag_for_rrtmgp_radiation_scheme) [flxprf_sw] standard_name = RRTMGP_sw_fluxes @@ -9339,7 +9338,6 @@ units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) type = profsw_type - optional = T active = (flag_for_rrtmgp_radiation_scheme) [aerosolslw] standard_name = RRTMGP_aerosol_optical_properties_for_longwave_bands_01_16 @@ -9348,7 +9346,6 @@ dimensions = (horizontal_dimension,vertical_dimension, number_of_lw_bands_rrtmgp,number_of_aerosol_output_fields_for_longwave_radiation) type = real kind = kind_phys - optional = F active = (flag_for_rrtmgp_radiation_scheme) [aerosolslw(:,:,:,1)] standard_name = RRTMGP_aerosol_optical_depth_for_longwave_bands_01_16 @@ -9939,5 +9936,3 @@ dimensions = () type = real kind = kind_phys - intent = in - optional = F