diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py
index 6258c4b7a..83b6500bb 100755
--- a/ccpp/config/ccpp_prebuild_config.py
+++ b/ccpp/config/ccpp_prebuild_config.py
@@ -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',
@@ -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' ],
diff --git a/ccpp/physics b/ccpp/physics
index 0346c384f..6c27ff2e4 160000
--- a/ccpp/physics
+++ b/ccpp/physics
@@ -1 +1 @@
-Subproject commit 0346c384fd6c31fc6d0278259493a5474cd830d7
+Subproject commit 6c27ff2e43010dba325b498a83b10813e55b059a
diff --git a/ccpp/suites/suite_FV3_HAFS_FA_HWRF_RRTMG.xml b/ccpp/suites/suite_FV3_HAFS_FA_HWRF_RRTMG.xml
new file mode 100644
index 000000000..4d6820518
--- /dev/null
+++ b/ccpp/suites/suite_FV3_HAFS_FA_HWRF_RRTMG.xml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+ GFS_time_vary_pre
+ GFS_rrtmg_setup
+ GFS_rad_time_vary
+ GFS_phys_time_vary
+
+
+
+
+ GFS_suite_interstitial_rad_reset
+ GFS_rrtmg_pre
+ rrtmg_lw_pre
+ rrtmg_lw
+ rrtmg_lw_post
+ rrtmg_sw_pre
+ rrtmg_sw
+ rrtmg_sw_post
+ GFS_rrtmg_post
+
+
+
+
+ GFS_suite_interstitial_phys_reset
+ GFS_suite_stateout_reset
+ get_prs_fv3
+ GFS_suite_interstitial_1
+ GFS_surface_generic_pre
+ GFS_surface_composites_pre
+ dcyc2t3
+ GFS_surface_composites_inter
+ GFS_suite_interstitial_2
+
+
+
+ sfc_diff
+ GFS_surface_loop_control_part1
+ sfc_nst_pre
+ sfc_nst
+ sfc_nst_post
+ lsm_noah
+ sfc_sice
+ GFS_surface_loop_control_part2
+
+
+
+ GFS_surface_composites_post
+ sfc_diag
+ sfc_diag_post
+ GFS_surface_generic_post
+ GFS_PBL_generic_pre
+ hedmf
+ GFS_PBL_generic_post
+ GFS_GWD_generic_pre
+ cires_ugwp
+ cires_ugwp_post
+ GFS_GWD_generic_post
+ rayleigh_damp
+ GFS_suite_stateout_update
+ ozphys
+ GFS_DCNV_generic_pre
+ get_phi_fv3
+ GFS_suite_interstitial_3
+ GFS_DCNV_generic_post
+ GFS_SCNV_generic_pre
+ GFS_SCNV_generic_post
+ GFS_suite_interstitial_4
+ cnvc90
+ GFS_MP_generic_pre
+ mp_fer_hires
+ GFS_MP_generic_post
+ maximum_hourly_diagnostics
+
+
+
+
+ GFS_stochastics
+
+
+
+
diff --git a/ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml b/ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml
index 973650818..e1d70f035 100644
--- a/ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml
+++ b/ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml
@@ -65,7 +65,6 @@
GFS_DCNV_generic_pre
get_phi_fv3
GFS_suite_interstitial_3
-
GFS_DCNV_generic_post
GFS_SCNV_generic_pre
GFS_SCNV_generic_post
diff --git a/gfsphysics/GFS_layer/GFS_diagnostics.F90 b/gfsphysics/GFS_layer/GFS_diagnostics.F90
index 90f30f52b..aa511a595 100644
--- a/gfsphysics/GFS_layer/GFS_diagnostics.F90
+++ b/gfsphysics/GFS_layer/GFS_diagnostics.F90
@@ -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'
diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90
index 215ab9942..bc21d3490 100644
--- a/gfsphysics/GFS_layer/GFS_typedefs.F90
+++ b/gfsphysics/GFS_layer/GFS_typedefs.F90
@@ -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
@@ -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)
@@ -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, &
@@ -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
@@ -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
@@ -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
diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta
index 7d964fd9a..92f99e155 100644
--- a/gfsphysics/GFS_layer/GFS_typedefs.meta
+++ b/gfsphysics/GFS_layer/GFS_typedefs.meta
@@ -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
@@ -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
@@ -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
@@ -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]