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

dtc/hwrf-physics: HWRF RRTMG (based on #33) #38

Merged
6 changes: 4 additions & 2 deletions ccpp/config/ccpp_prebuild_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,8 @@
'FV3/ccpp/physics/physics/module_mp_thompson.F90',
'FV3/ccpp/physics/physics/module_mp_thompson_make_number_concentrations.F90',
'FV3/ccpp/physics/physics/module_MP_FER_HIRES.F90',
'FV3/ccpp/physics/physics/HWRF_mersenne_twister.F90',
'FV3/ccpp/physics/physics/HWRF_mcica_random_numbers.F90',
'FV3/ccpp/physics/physics/module_bl_mynn.F90',
'FV3/ccpp/physics/physics/module_sf_mynn.F90',
'FV3/ccpp/physics/physics/module_SF_JSFC.F90',
Expand Down Expand Up @@ -218,8 +220,8 @@
'FV3/ccpp/physics/physics/ozphys.f' : [ 'slow_physics' ],
'FV3/ccpp/physics/physics/ozphys_2015.f' : [ 'slow_physics' ],
'FV3/ccpp/physics/physics/precpd.f' : [ 'slow_physics' ],
'FV3/ccpp/physics/physics/radlw_main.f' : [ 'slow_physics' ],
'FV3/ccpp/physics/physics/radsw_main.f' : [ 'slow_physics' ],
'FV3/ccpp/physics/physics/radlw_main.F90' : [ 'slow_physics' ],
'FV3/ccpp/physics/physics/radsw_main.F90' : [ 'slow_physics' ],
'FV3/ccpp/physics/physics/rascnv.F90' : [ 'slow_physics' ],
'FV3/ccpp/physics/physics/rayleigh_damp.f' : [ 'slow_physics' ],
'FV3/ccpp/physics/physics/rrtmg_lw_post.F90' : [ 'slow_physics' ],
Expand Down
85 changes: 85 additions & 0 deletions ccpp/suites/suite_FV3_HAFS_FA_HWRF_RRTMG.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="UTF-8"?>

<suite name="FV3_HAFS_FA_HWRF_RRTMG" lib="ccppphys" ver="3">
<!-- <init></init> -->
<group name="time_vary">
<subcycle loop="1">
<scheme>GFS_time_vary_pre</scheme>
<scheme>GFS_rrtmg_setup</scheme>
<scheme>GFS_rad_time_vary</scheme>
<scheme>GFS_phys_time_vary</scheme>
</subcycle>
</group>
<group name="radiation">
<subcycle loop="1">
<scheme>GFS_suite_interstitial_rad_reset</scheme>
<scheme>GFS_rrtmg_pre</scheme>
<scheme>rrtmg_lw_pre</scheme>
<scheme>rrtmg_lw</scheme>
<scheme>rrtmg_lw_post</scheme>
<scheme>rrtmg_sw_pre</scheme>
<scheme>rrtmg_sw</scheme>
<scheme>rrtmg_sw_post</scheme>
<scheme>GFS_rrtmg_post</scheme>
</subcycle>
</group>
<group name="physics">
<subcycle loop="1">
<scheme>GFS_suite_interstitial_phys_reset</scheme>
<scheme>GFS_suite_stateout_reset</scheme>
<scheme>get_prs_fv3</scheme>
<scheme>GFS_suite_interstitial_1</scheme>
<scheme>GFS_surface_generic_pre</scheme>
<scheme>GFS_surface_composites_pre</scheme>
<scheme>dcyc2t3</scheme>
<scheme>GFS_surface_composites_inter</scheme>
<scheme>GFS_suite_interstitial_2</scheme>
</subcycle>
<!-- Surface iteration loop -->
<subcycle loop="2">
<scheme>sfc_diff</scheme>
<scheme>GFS_surface_loop_control_part1</scheme>
<scheme>sfc_nst_pre</scheme>
<scheme>sfc_nst</scheme>
<scheme>sfc_nst_post</scheme>
<scheme>lsm_noah</scheme>
<scheme>sfc_sice</scheme>
<scheme>GFS_surface_loop_control_part2</scheme>
</subcycle>
<!-- End of surface iteration loop -->
<subcycle loop="1">
<scheme>GFS_surface_composites_post</scheme>
<scheme>sfc_diag</scheme>
<scheme>sfc_diag_post</scheme>
<scheme>GFS_surface_generic_post</scheme>
<scheme>GFS_PBL_generic_pre</scheme>
<scheme>hedmf</scheme>
<scheme>GFS_PBL_generic_post</scheme>
<scheme>GFS_GWD_generic_pre</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>
<scheme>ozphys</scheme>
<scheme>GFS_DCNV_generic_pre</scheme>
<scheme>get_phi_fv3</scheme>
<scheme>GFS_suite_interstitial_3</scheme>
<scheme>GFS_DCNV_generic_post</scheme>
<scheme>GFS_SCNV_generic_pre</scheme>
<scheme>GFS_SCNV_generic_post</scheme>
<scheme>GFS_suite_interstitial_4</scheme>
<scheme>cnvc90</scheme>
<scheme>GFS_MP_generic_pre</scheme>
<scheme>mp_fer_hires</scheme>
<scheme>GFS_MP_generic_post</scheme>
<scheme>maximum_hourly_diagnostics</scheme>
</subcycle>
</group>
<group name="stochastics">
<subcycle loop="1">
<scheme>GFS_stochastics</scheme>
</subcycle>
</group>
<!-- <finalize></finalize> -->
</suite>
1 change: 0 additions & 1 deletion ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@
<scheme>GFS_DCNV_generic_pre</scheme>
<scheme>get_phi_fv3</scheme>
<scheme>GFS_suite_interstitial_3</scheme>
<!-- <scheme>samfdeepcnv</scheme> -->
<scheme>GFS_DCNV_generic_post</scheme>
<scheme>GFS_SCNV_generic_pre</scheme>
<scheme>GFS_SCNV_generic_post</scheme>
Expand Down
2 changes: 1 addition & 1 deletion gfsphysics/GFS_layer/GFS_diagnostics.F90
Original file line number Diff line number Diff line change
Expand Up @@ -3288,7 +3288,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop
endif

!! Cloud effective radii from Microphysics
!if (Model%imp_physics == Model%imp_physics_thompson .or. Model%imp_physics == Model%imp_physics_wsm6) then
!if (Model%imp_physics == Model%imp_physics_thompson .or. Model%imp_physics == Model%imp_physics_wsm6 .or. Model%imp_physics == Model%imp_physics_fer_hires) then
! idx = idx + 1
! ExtDiag(idx)%axes = 3
! ExtDiag(idx)%name = 'cleffr'
Expand Down
12 changes: 11 additions & 1 deletion gfsphysics/GFS_layer/GFS_typedefs.F90
Original file line number Diff line number Diff line change
Expand Up @@ -773,6 +773,8 @@ module GFS_typedefs
#ifdef CCPP
real(kind=kind_phys) :: rhgrd !< fer_hires microphysics only
logical :: spec_adv !< flag for individual cloud species advected
integer :: icloud !< cloud effect to the optical depth in radiation; this also controls the cloud fraction options
!< 3: with cloud effect, and use cloud fraction option 3, based on Sundqvist et al. (1989)
#endif
logical :: do_aw !< AW scale-aware option in cs convection
logical :: do_awdd !< AW scale-aware option in cs convection
Expand Down Expand Up @@ -2798,6 +2800,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
#ifdef CCPP
real(kind=kind_phys) :: rhgrd = 0.98 !< fer_hires microphysics only
logical :: spec_adv = .true. !< Individual cloud species advected
integer :: icloud = 0 !< cloud effect to the optical depth in radiation; this also controls the cloud fraction options
!< 3: with cloud effect from FA, and use cloud fraction option 3, based on Sundqvist et al. (1989)
#endif
!--- M-G microphysical parameters
integer :: fprcp = 0 !< no prognostic rain and snow (MG)
Expand Down Expand Up @@ -3177,7 +3181,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
prslrd0, ral_ts, ldiag_ugwp, do_ugwp, do_tofd, &
! --- Ferrier-Aligo
#ifdef CCPP
spec_adv, rhgrd, &
spec_adv, rhgrd, icloud, &
#endif
!--- mass flux deep convection
clam_deep, c0s_deep, c1_deep, betal_deep, &
Expand Down Expand Up @@ -3435,6 +3439,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
#ifdef CCPP
Model%rhgrd = rhgrd
Model%spec_adv = spec_adv
Model%icloud = icloud
#endif

!--- gfdl MP parameters
Expand Down Expand Up @@ -4145,11 +4150,15 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
print *,' Radiative heating calculated at',Model%levr, ' layers'
if (Model%iovr_sw == 0) then
print *,' random cloud overlap for Shortwave IOVR_SW=',Model%iovr_sw
elseif (Model%iovr_sw == 4) then
print *,'exponential cloud overlap for Shortwave IOVR_SW=',Model%iovr_lw
else
print *,' max-random cloud overlap for Shortwave IOVR_SW=',Model%iovr_sw
endif
if (Model%iovr_lw == 0) then
print *,' random cloud overlap for Longwave IOVR_LW=',Model%iovr_lw
elseif (Model%iovr_lw == 4) then
print *,'exponential cloud overlap for Longwave IOVR_LW=',Model%iovr_lw
else
print *,' max-random cloud overlap for Longwave IOVR_LW=',Model%iovr_lw
endif
Expand Down Expand Up @@ -4532,6 +4541,7 @@ subroutine control_print(Model)
print *, ' Ferrier-Aligo microphysical parameters'
print *, ' spec_adv : ', Model%spec_adv
print *, ' rhgrd : ', Model%rhgrd
print *, ' icloud : ', Model%icloud
print *, ' '
endif
#endif
Expand Down
40 changes: 23 additions & 17 deletions gfsphysics/GFS_layer/GFS_typedefs.meta
Original file line number Diff line number Diff line change
Expand Up @@ -2174,14 +2174,14 @@
dimensions = ()
type = integer
[iovr_sw]
standard_name = flag_for_max_random_overlap_clouds_for_shortwave_radiation
long_name = sw: max-random overlap clouds
standard_name = flag_for_cloud_overlapping_method_for_shortwave_radiation
long_name = control flag for cloud overlapping method for SW
units = flag
dimensions = ()
type = integer
[iovr_lw]
standard_name = flag_for_max_random_overlap_clouds_for_longwave_radiation
long_name = lw: max-random overlap clouds
standard_name = flag_for_cloud_overlapping_method_for_longwave_radiation
long_name = control flag for cloud overlapping method for LW
units = flag
dimensions = ()
type = integer
Expand All @@ -2192,14 +2192,14 @@
dimensions = ()
type = integer
[isubc_sw]
standard_name = flag_for_sw_clouds_without_sub_grid_approximation
long_name = flag for sw clouds without sub-grid approximation
standard_name = flag_for_sw_clouds_grid_approximation
long_name = flag for sw clouds sub-grid approximation
units = flag
dimensions = ()
type = integer
[isubc_lw]
standard_name = flag_for_lw_clouds_without_sub_grid_approximation
long_name = flag for lw clouds without sub-grid approximation
standard_name = flag_for_lw_clouds_sub_grid_approximation
long_name = flag for lw clouds sub-grid approximation
units = flag
dimensions = ()
type = integer
Expand Down Expand Up @@ -3909,6 +3909,12 @@
dimensions = ()
type = real
kind = kind_phys
[icloud]
standard_name = cloud_effect_to_optical_depth_and_cloud_fraction
long_name = cloud effect to the optical depth and cloud fraction in radiation
units = flag
dimensions = ()
type = integer
[gwd_opt]
standard_name = gwd_opt
long_name = flag to choose gwd scheme
Expand Down Expand Up @@ -6185,63 +6191,63 @@
standard_name = total_cloud_fraction
long_name = layer total cloud fraction
units = frac
dimensions = (horizontal_dimension,vertical_dimension)
dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation)
type = real
kind = kind_phys
[clouds(:,:,2)]
standard_name = cloud_liquid_water_path
long_name = layer cloud liquid water path
units = g m-2
dimensions = (horizontal_dimension,vertical_dimension)
dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation)
type = real
kind = kind_phys
[clouds(:,:,3)]
standard_name = mean_effective_radius_for_liquid_cloud
long_name = mean effective radius for liquid cloud
units = micron
dimensions = (horizontal_dimension,vertical_dimension)
dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation)
type = real
kind = kind_phys
[clouds(:,:,4)]
standard_name = cloud_ice_water_path
long_name = layer cloud ice water path
units = g m-2
dimensions = (horizontal_dimension,vertical_dimension)
dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation)
type = real
kind = kind_phys
[clouds(:,:,5)]
standard_name = mean_effective_radius_for_ice_cloud
long_name = mean effective radius for ice cloud
units = micron
dimensions = (horizontal_dimension,vertical_dimension)
dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation)
type = real
kind = kind_phys
[clouds(:,:,6)]
standard_name = cloud_rain_water_path
long_name = cloud rain water path
units = g m-2
dimensions = (horizontal_dimension,vertical_dimension)
dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation)
type = real
kind = kind_phys
[clouds(:,:,7)]
standard_name = mean_effective_radius_for_rain_drop
long_name = mean effective radius for rain drop
units = micron
dimensions = (horizontal_dimension,vertical_dimension)
dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation)
type = real
kind = kind_phys
[clouds(:,:,8)]
standard_name = cloud_snow_water_path
long_name = cloud snow water path
units = g m-2
dimensions = (horizontal_dimension,vertical_dimension)
dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation)
type = real
kind = kind_phys
[clouds(:,:,9)]
standard_name = mean_effective_radius_for_snow_flake
long_name = mean effective radius for snow flake
units = micron
dimensions = (horizontal_dimension,vertical_dimension)
dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation)
type = real
kind = kind_phys
[clw]
Expand Down