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]