Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RRTMG cloud overlap method update #157

3 changes: 2 additions & 1 deletion ccpp/suites/suite_FV3_RRFS_v1beta.xml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@
<scheme>GFS_surface_generic_post</scheme>
<scheme>mynnedmf_wrapper</scheme>
<scheme>GFS_GWD_generic_pre</scheme>
<scheme>drag_suite</scheme>
<scheme>cires_ugwp</scheme>
<scheme>cires_ugwp_post</scheme>
<scheme>GFS_GWD_generic_post</scheme>
<scheme>rayleigh_damp</scheme>
<scheme>GFS_suite_stateout_update</scheme>
Expand Down
14 changes: 14 additions & 0 deletions gfsphysics/GFS_layer/GFS_typedefs.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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() !<
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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))
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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 )
Expand Down
37 changes: 16 additions & 21 deletions gfsphysics/GFS_layer/GFS_typedefs.meta
Original file line number Diff line number Diff line change
Expand Up @@ -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 = ()
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -9323,23 +9324,20 @@
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
long_name = lw fluxes total sky / csk and up / down at levels
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
long_name = sw fluxes total sky / csk and up / down at levels
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
Expand All @@ -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
Expand Down Expand Up @@ -9939,5 +9936,3 @@
dimensions = ()
type = real
kind = kind_phys
intent = in
optional = F