Skip to content
Closed
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
Copy Markdown

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
Copy Markdown
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
Copy Markdown

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