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