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

HWRF RRTMG #33

Closed
wants to merge 8 commits into from
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
94 changes: 94 additions & 0 deletions ccpp/suites/suite_FV3_GFS_HWRF_RRTMG.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="UTF-8"?>

<suite name="FV3_GFS_HWRF_RRTMG" lib="ccppphys" ver="3">
<!-- <init></init> -->
<group name="fast_physics">
<subcycle loop="1">
<scheme>fv_sat_adj</scheme>
</subcycle>
</group>
<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>dcyc2t3_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_2015</scheme>
<scheme>h2ophys</scheme>
<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>samfshalcnv</scheme>
<scheme>GFS_SCNV_generic_post</scheme>
<scheme>GFS_suite_interstitial_4</scheme>
<scheme>cnvc90</scheme>
<scheme>GFS_MP_generic_pre</scheme>
<scheme>gfdl_cloud_microphys</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>
79 changes: 79 additions & 0 deletions ccpp/suites/suite_FV3_HAFS_FA_HRRTMG.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?>

<suite name="FV3_HAFS_FA_HRRTMG" 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>dcyc2t3_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>get_phi_fv3</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>
63 changes: 32 additions & 31 deletions gfsphysics/GFS_layer/GFS_diagnostics.F90
Original file line number Diff line number Diff line change
Expand Up @@ -3278,37 +3278,38 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop

!! Cloud effective radii from Microphysics
!if (Model%imp_physics == Model%imp_physics_thompson .or. Model%imp_physics == Model%imp_physics_wsm6) then
! idx = idx + 1
! ExtDiag(idx)%axes = 3
! ExtDiag(idx)%name = 'cleffr'
! ExtDiag(idx)%desc = 'effective radius of cloud liquid water particle'
! ExtDiag(idx)%unit = 'um'
! ExtDiag(idx)%mod_name = 'gfs_phys'
! allocate (ExtDiag(idx)%data(nblks))
! do nb = 1,nblks
! ExtDiag(idx)%data(nb)%var3 => Tbd(nb)%phy_f3d(:,:,Model%nleffr)
! enddo
! idx = idx + 1
! ExtDiag(idx)%axes = 3
! ExtDiag(idx)%name = 'cieffr'
! ExtDiag(idx)%desc = 'effective radius of stratiform cloud ice particle in um'
! ExtDiag(idx)%unit = 'um'
! ExtDiag(idx)%mod_name = 'gfs_phys'
! allocate (ExtDiag(idx)%data(nblks))
! do nb = 1,nblks
! ExtDiag(idx)%data(nb)%var3 => Tbd(nb)%phy_f3d(:,:,Model%nieffr)
! enddo
! idx = idx + 1
! ExtDiag(idx)%axes = 3
! ExtDiag(idx)%name = 'cseffr'
! ExtDiag(idx)%desc = 'effective radius of stratiform cloud snow particle in um'
! ExtDiag(idx)%unit = 'um'
! ExtDiag(idx)%mod_name = 'gfs_phys'
! allocate (ExtDiag(idx)%data(nblks))
! do nb = 1,nblks
! ExtDiag(idx)%data(nb)%var3 => Tbd(nb)%phy_f3d(:,:,Model%nseffr)
! enddo
!endif
if (Model%imp_physics == Model%imp_physics_fer_hires) then
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this output really required for merging? I assume it's ok for your testing, but we don't really need to have these three additional 3-dim arrays in the standard output, or? On the other hand, users can always control this via the diag_table file, in which case it would make sense to re-enable end extend the original if statement?

if (Model%imp_physics == Model%imp_physics_thompson .or. Model%imp_physics == Model%imp_physics_fer_hires) then

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You are correct. It is for my testing purpose.

idx = idx + 1
ExtDiag(idx)%axes = 3
ExtDiag(idx)%name = 'cleffr'
ExtDiag(idx)%desc = 'effective radius of cloud liquid water particle'
ExtDiag(idx)%unit = 'um'
ExtDiag(idx)%mod_name = 'gfs_phys'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var3 => Tbd(nb)%phy_f3d(:,:,Model%nleffr)
enddo
idx = idx + 1
ExtDiag(idx)%axes = 3
ExtDiag(idx)%name = 'cieffr'
ExtDiag(idx)%desc = 'effective radius of stratiform cloud ice particle in um'
ExtDiag(idx)%unit = 'um'
ExtDiag(idx)%mod_name = 'gfs_phys'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var3 => Tbd(nb)%phy_f3d(:,:,Model%nieffr)
enddo
idx = idx + 1
ExtDiag(idx)%axes = 3
ExtDiag(idx)%name = 'cseffr'
ExtDiag(idx)%desc = 'effective radius of stratiform cloud snow particle in um'
ExtDiag(idx)%unit = 'um'
ExtDiag(idx)%mod_name = 'gfs_phys'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var3 => Tbd(nb)%phy_f3d(:,:,Model%nseffr)
enddo
endif

!MYNN
if (Model%do_mynnedmf) then
Expand Down
16 changes: 13 additions & 3 deletions 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 @@ -2786,8 +2788,10 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
real(kind=kind_phys) :: avg_max_length = 3600. !< reset value in seconds for max hourly
!--- Ferrier-Aligo microphysical parameters
#ifdef CCPP
real(kind=kind_phys) :: rhgrd = 0.98 !< fer_hires microphysics only
logical :: spec_adv = .true. !< Individual cloud species advected
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 @@ -3160,7 +3164,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 @@ -3418,6 +3422,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 @@ -4122,11 +4127,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 @@ -4509,6 +4518,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
22 changes: 14 additions & 8 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
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@grantfirl please help me reviewing the suggested standard names - you are the expert. Thanks!

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 @@ -3903,6 +3903,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