Skip to content

Commit

Permalink
RRTMG cloud overlap method update (NOAA-EMC#157)
Browse files Browse the repository at this point in the history
Add two new interstitial variables to GFS_typedefs.{F90,meta} that are required for the RRTMG cloud overlap additions by @mjiacono (see NCAR/ccpp-physics#487). Other changes:

* fix wrong metadata in GFS_typedefs.meta (optional and intent are not valid for host model variable tables)
* note that RRTMG and RRTMGP use different interstitial variables for the decorrelation parameter alpha; this is because RRTMGP only works when the number of model levels is the same for radiation (levr) and other physics (levs), while RRTMG works with different numbers of levels; only the one in use gets allocated
* replace GSL drag suite with CIRES UGWP/GFS GWD in ccpp/suites/suite_FV3_RRFS_v1beta.xml (cherry-picked from PR NOAA-EMC#173 for release/public-v2)
  • Loading branch information
climbfuji committed Sep 26, 2020
1 parent 6bc61df commit 9e1ba7c
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 23 deletions.
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

0 comments on commit 9e1ba7c

Please sign in to comment.