diff --git a/.gitmodules b/.gitmodules
index 746d5c258..1a1a9b5d7 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,8 +1,8 @@
[submodule "ccpp-framework"]
path = ccpp/framework
url = https://github.com/NCAR/ccpp-framework
- branch = dtc/develop
+ branch = master
[submodule "ccpp-physics"]
path = ccpp/physics
url = https://github.com/NCAR/ccpp-physics
- branch = dtc/develop
+ branch = master
diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py
index f2d29d2d2..6fc87b5fa 100755
--- a/ccpp/config/ccpp_prebuild_config.py
+++ b/ccpp/config/ccpp_prebuild_config.py
@@ -191,6 +191,7 @@
'ccpp/physics/physics/rte-rrtmgp/rte/mo_rte_kind.F90',
'ccpp/physics/physics/rte-rrtmgp/rte/mo_rte_lw.F90',
'ccpp/physics/physics/rte-rrtmgp/rte/mo_rte_sw.F90',
+ 'ccpp/physics/physics/rte-rrtmgp/rte/mo_rte_config.F90',
'ccpp/physics/physics/rte-rrtmgp/rte/mo_source_functions.F90',
'ccpp/physics/physics/rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90',
'ccpp/physics/physics/rte-rrtmgp/rte/kernels/mo_optical_props_kernels.F90',
@@ -202,7 +203,9 @@
'ccpp/physics/physics/rte-rrtmgp/extensions/mo_heating_rates.F90',
'ccpp/physics/physics/rte-rrtmgp/extensions/mo_rrtmgp_clr_all_sky.F90',
'ccpp/physics/physics/rte-rrtmgp/extensions/cloud_optics/mo_cloud_optics.F90',
- 'ccpp/physics/physics/rte-rrtmgp/extensions/cloud_optics/mo_cloud_sampling.F90',
+ 'ccpp/physics/physics/rrtmg_lw_cloud_optics.F90' ,
+ 'ccpp/physics/physics/rrtmg_sw_cloud_optics.F90' ,
+ 'ccpp/physics/physics/rrtmgp_aux.F90' ,
# derived data type definitions
'scm/src/GFS_typedefs.F90',
'scm/src/gmtb_scm_kinds.F90',
@@ -304,24 +307,25 @@
'ccpp/physics/physics/mp_fer_hires.F90' ,
'ccpp/physics/physics/gmtb_scm_sfc_flux_spec.F90' ,
# RRTMGP
- 'ccpp/physics/physics/rrtmg_lw_cloud_optics.F90' ,
- 'ccpp/physics/physics/rrtmg_sw_cloud_optics.F90' ,
- 'ccpp/physics/physics/rrtmgp_aux.F90' ,
'ccpp/physics/physics/rrtmgp_lw_gas_optics.F90' ,
'ccpp/physics/physics/rrtmgp_lw_cloud_optics.F90' ,
'ccpp/physics/physics/rrtmgp_sw_gas_optics.F90' ,
'ccpp/physics/physics/rrtmgp_sw_cloud_optics.F90' ,
'ccpp/physics/physics/rrtmgp_sw_aerosol_optics.F90' ,
'ccpp/physics/physics/rrtmgp_lw_rte.F90' ,
- 'ccpp/physics/physics/rrtmgp_lw_cloud_sampling.F90' ,
'ccpp/physics/physics/rrtmgp_sw_rte.F90' ,
- 'ccpp/physics/physics/rrtmgp_sw_cloud_sampling.F90' ,
'ccpp/physics/physics/rrtmgp_lw_aerosol_optics.F90' ,
'ccpp/physics/physics/GFS_rrtmgp_setup.F90' ,
'ccpp/physics/physics/GFS_rrtmgp_pre.F90' ,
'ccpp/physics/physics/rrtmgp_lw_pre.F90' ,
'ccpp/physics/physics/GFS_rrtmgp_sw_pre.F90' ,
'ccpp/physics/physics/GFS_rrtmgp_lw_post.F90' ,
+ 'ccpp/physics/physics/rrtmgp_lw_cloud_sampling.F90' ,
+ 'ccpp/physics/physics/rrtmgp_sw_cloud_sampling.F90' ,
+ 'ccpp/physics/physics/GFS_cloud_diagnostics.F90' ,
+ 'ccpp/physics/physics/mo_cloud_sampling.F90' ,
+ 'ccpp/physics/physics/GFS_rrtmgp_gfdlmp_pre.F90' ,
+ 'ccpp/physics/physics/GFS_rrtmgp_zhaocarr_pre.F90' ,
'ccpp/physics/physics/GFS_rrtmgp_sw_post.F90'
]
@@ -362,20 +366,6 @@
# if no entry is made here. Possible values are: 'all', 'none',
# or a list of standard_names: [ 'var1', 'var3' ].
OPTIONAL_ARGUMENTS = {
- 'rrtmgp_sw_rte' : {
- 'rrtmgp_sw_rte_run' : [
- 'components_of_surface_downward_shortwave_fluxes',
- ],
- },
- 'GFS_rrtmgp_sw_post' : {
- 'GFS_rrtmgp_sw_post_run' : 'none',
- },
- 'rrtmgp_lw_rte' : {
- 'rrtmgp_lw_rte_run' : 'none',
- },
- 'GFS_rrtmgp_lw_post' : {
- 'GFS_rrtmgp_lw_post_run' : 'none',
- },
'rrtmg_sw' : {
'rrtmg_sw_run' : [
'tendency_of_air_temperature_due_to_shortwave_heating_assuming_clear_sky_on_radiation_time_step_and_radiation_levels',
@@ -431,7 +421,34 @@
'rime_factor',
],
},
-
+ 'rrtmgp_lw_rte' : {
+ 'rrtmgp_lw_rte_run' : [
+ 'RRTMGP_jacobian_of_lw_flux_profile_upward',
+ 'RRTMGP_jacobian_of_lw_flux_profile_downward',
+ ],
+ },
+ 'rrtmgp_sw_rte' : {
+ 'rrtmgp_sw_rte_run' : [
+ 'components_of_surface_downward_shortwave_fluxes',
+ ],
+ },
+ 'GFS_rrtmgp_sw_post' : {
+ 'GFS_rrtmgp_sw_post_run' : [
+ 'tendency_of_air_temperature_due_to_shortwave_heating_assuming_clear_sky_on_radiation_time_step',
+ 'components_of_surface_downward_shortwave_fluxes',
+ ],
+ },
+ 'GFS_rrtmgp_lw_post' : {
+ 'GFS_rrtmgp_lw_post_run' : [
+ 'tendency_of_air_temperature_due_to_longwave_heating_assuming_clear_sky_on_radiation_time_step',
+ ],
+ },
+ 'GFS_suite_interstitial_2' : {
+ 'GFS_suite_interstitial_2_run' : [
+ 'RRTMGP_jacobian_of_lw_flux_profile_upward',
+ 'RRTMGP_lw_flux_profile_upward_allsky',
+ ],
+ },
#'subroutine_name_1' : 'all',
#'subroutine_name_2' : 'none',
#'subroutine_name_2' : [ 'var1', 'var3'],
diff --git a/ccpp/physics b/ccpp/physics
index 82a73dddd..2e3b1cf83 160000
--- a/ccpp/physics
+++ b/ccpp/physics
@@ -1 +1 @@
-Subproject commit 82a73dddd8789f268fd6f8020b5b303540d68d0d
+Subproject commit 2e3b1cf83dc0c693fb9f25d0805d516e7461fd25
diff --git a/ccpp/physics_namelists/input_GFS_v15p2_RRTMGP.nml b/ccpp/physics_namelists/input_GFS_v15p2_RRTMGP.nml
index 708829108..7c52a392d 100644
--- a/ccpp/physics_namelists/input_GFS_v15p2_RRTMGP.nml
+++ b/ccpp/physics_namelists/input_GFS_v15p2_RRTMGP.nml
@@ -55,7 +55,7 @@
lw_file_clouds = 'extensions/cloud_optics/rrtmgp-cloud-optics-coeffs-lw.nc'
sw_file_gas = 'rrtmgp/data/rrtmgp-data-sw-g224-2018-12-04.nc'
sw_file_clouds = 'extensions/cloud_optics/rrtmgp-cloud-optics-coeffs-sw.nc'
- rrtmgp_cld_optics = 0
+ doG_cldoptics = .true.
rrtmgp_ngauss_ang = 3
rrtmgp_nrghice = 3
/
diff --git a/ccpp/physics_namelists/input_GFS_v15p2_RRTMGP_LWjac.nml b/ccpp/physics_namelists/input_GFS_v15p2_RRTMGP_LWjac.nml
new file mode 100644
index 000000000..9c094fb93
--- /dev/null
+++ b/ccpp/physics_namelists/input_GFS_v15p2_RRTMGP_LWjac.nml
@@ -0,0 +1,126 @@
+&gfs_physics_nml
+ fhzero = 6.
+ h2o_phys = .true.
+ ldiag3d = .true.
+ fhcyc = 24.
+ use_ufo = .true.
+ pre_rad = .false.
+ ncld = 5
+ imp_physics = 11
+ pdfcld = .false.
+ fhswr = 3600.
+ fhlwr = 3600.
+ ialb = 1
+ iems = 1
+ iaer = 111
+ ico2 = 2
+ isubc_sw = 2
+ isubc_lw = 2
+ isol = 2
+ lwhtr = .true.
+ swhtr = .true.
+ cnvgwd = .true.
+ shal_cnv = .true.
+ cal_pre = .false.
+ redrag = .true.
+ dspheat = .true.
+ hybedmf = .true.
+ random_clds = .false.
+ trans_trac = .true.
+ cnvcld = .true.
+ imfshalcnv = 2
+ imfdeepcnv = 2
+ cdmbgwd = 3.5,0.25
+ prslrd0 = 0.
+ ivegsrc = 1
+ isot = 1
+ debug = .false.
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ nstf_name = 2,1,0,0,0
+ nst_anl = .true.
+ psautco = 0.0008,0.0005
+ prautco = 0.00015,0.00015
+ lgfdlmprad = .true.
+ effr_in = .true.
+ do_sppt = .false.
+ do_shum = .false.
+ do_skeb = .false.
+ do_sfcperts = .false.
+ do_RRTMGP = .true.
+ active_gases = 'h2o_co2_o3_n2o_ch4_o2'
+ ngases = 6
+ rrtmgp_root = '../../ccpp/physics/physics/rte-rrtmgp/'
+ lw_file_gas = 'rrtmgp/data/rrtmgp-data-lw-g256-2018-12-04.nc'
+ lw_file_clouds = 'extensions/cloud_optics/rrtmgp-cloud-optics-coeffs-lw.nc'
+ sw_file_gas = 'rrtmgp/data/rrtmgp-data-sw-g224-2018-12-04.nc'
+ sw_file_clouds = 'extensions/cloud_optics/rrtmgp-cloud-optics-coeffs-sw.nc'
+ doG_cldoptics = .true.
+ use_LW_jacobian = .true.
+ rrtmgp_ngauss_ang = 3
+ rrtmgp_nrghice = 3
+/
+
+&gfdl_cloud_microphysics_nml
+ sedi_transport = .true.
+ do_sedi_heat = .false.
+ rad_snow = .true.
+ rad_graupel = .true.
+ rad_rain = .true.
+ const_vi = .F.
+ const_vs = .F.
+ const_vg = .F.
+ const_vr = .F.
+ vi_max = 1.
+ vs_max = 2.
+ vg_max = 12.
+ vr_max = 12.
+ qi_lim = 1.
+ prog_ccn = .false.
+ do_qa = .false.
+ fast_sat_adj = .false.
+ tau_l2v = 225.
+ tau_v2l = 150.
+ tau_g2v = 900.
+ rthresh = 10.e-6 ! This is a key parameter for cloud water
+ dw_land = 0.16
+ dw_ocean = 0.10
+ ql_gen = 1.0e-3
+ ql_mlt = 1.0e-3
+ qi0_crt = 8.0E-5
+ qs0_crt = 1.0e-3
+ tau_i2s = 1000.
+ c_psaci = 0.05
+ c_pgacs = 0.01
+ rh_inc = 0.30
+ rh_inr = 0.30
+ rh_ins = 0.30
+ ccn_l = 300.
+ ccn_o = 100.
+ c_paut = 0.5
+ c_cracw = 0.8
+ use_ppm = .false.
+ use_ccn = .true.
+ mono_prof = .true.
+ z_slope_liq = .true.
+ z_slope_ice = .true.
+ de_ice = .false.
+ fix_negative = .true.
+ icloud_f = 1
+ mp_time = 150.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1,1,0,0
+ knob_ugwp_wvspec = 1,25,25,25
+ knob_ugwp_azdir = 2,4,4,4
+ knob_ugwp_stoch = 0,0,0,0
+ knob_ugwp_effac = 1,1,1,1
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_version = 0
+ launch_level = 25
+/
diff --git a/ccpp/physics_namelists/input_GFS_v16beta_RRTMGP.nml b/ccpp/physics_namelists/input_GFS_v16beta_RRTMGP.nml
new file mode 100644
index 000000000..c5f7c5de2
--- /dev/null
+++ b/ccpp/physics_namelists/input_GFS_v16beta_RRTMGP.nml
@@ -0,0 +1,150 @@
+&gfs_physics_nml
+ fhzero = 6
+ h2o_phys = .true.
+ ldiag3d = .true.
+ fhcyc = 24
+ use_ufo = .true.
+ pre_rad = .false.
+ ncld = 5
+ imp_physics = 11
+ pdfcld = .false.
+ fhswr = 3600.
+ fhlwr = 3600.
+ ialb = 1
+ iems = 1
+ iaer = 5111
+ icliq_sw = 2
+ iovr_lw = 3
+ iovr_sw = 3
+ ico2 = 2
+ isubc_sw = 2
+ isubc_lw = 2
+ isol = 2
+ lwhtr = .true.
+ swhtr = .true.
+ cnvgwd = .true.
+ shal_cnv = .true.
+ cal_pre = .false.
+ redrag = .true.
+ dspheat = .true.
+ hybedmf = .false.
+ satmedmf = .true.
+ isatmedmf = 1
+ lheatstrg = .true.
+ random_clds = .false.
+ trans_trac = .true.
+ cnvcld = .true.
+ imfshalcnv = 2
+ imfdeepcnv = 2
+ cdmbgwd = 4.0,0.15,1.0,1.0
+ prslrd0 = 0.
+ ivegsrc = 1
+ isot = 1
+ lsoil = 4
+ lsm = 1
+ iopt_dveg = 1
+ iopt_crs = 1
+ iopt_btr = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_rad = 1
+ iopt_alb = 2
+ iopt_snf = 4
+ iopt_tbot = 2
+ iopt_stc = 1
+ debug = .false.
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ nstf_name = 2,1,0,0,0
+ nst_anl = .true.
+ psautco = 0.0008,0.0005
+ prautco = 0.00015,0.00015
+ lgfdlmprad = .true.
+ effr_in = .true.
+ ldiag_ugwp = .false.
+ do_ugwp = .false.
+ do_tofd = .true.
+ do_sppt = .false.
+ do_shum = .false.
+ do_skeb = .false.
+ do_sfcperts = .false.
+ do_RRTMGP = .true.
+ active_gases = 'h2o_co2_o3_n2o_ch4_o2'
+ ngases = 6
+ rrtmgp_root = '../../ccpp/physics/physics/rte-rrtmgp/'
+ lw_file_gas = 'rrtmgp/data/rrtmgp-data-lw-g256-2018-12-04.nc'
+ lw_file_clouds = 'extensions/cloud_optics/rrtmgp-cloud-optics-coeffs-lw.nc'
+ sw_file_gas = 'rrtmgp/data/rrtmgp-data-sw-g224-2018-12-04.nc'
+ sw_file_clouds = 'extensions/cloud_optics/rrtmgp-cloud-optics-coeffs-sw.nc'
+ doG_cldoptics = .true.
+ rrtmgp_ngauss_ang = 3
+ rrtmgp_nrghice = 3
+/
+
+&gfdl_cloud_microphysics_nml
+ sedi_transport = .true.
+ do_sedi_heat = .false.
+ rad_snow = .true.
+ rad_graupel = .true.
+ rad_rain = .true.
+ const_vi = .F.
+ const_vs = .F.
+ const_vg = .F.
+ const_vr = .F.
+ vi_max = 1.
+ vs_max = 2.
+ vg_max = 12.
+ vr_max = 12.
+ qi_lim = 1.
+ prog_ccn = .false.
+ do_qa = .false.
+ fast_sat_adj = .false.
+ tau_l2v = 225.
+ tau_v2l = 150.
+ tau_g2v = 900.
+ rthresh = 10.e-6 ! This is a key parameter for cloud water
+ dw_land = 0.16
+ dw_ocean = 0.10
+ ql_gen = 1.0e-3
+ ql_mlt = 1.0e-3
+ qi0_crt = 8.0E-5
+ qs0_crt = 1.0e-3
+ tau_i2s = 1000.
+ c_psaci = 0.05
+ c_pgacs = 0.01
+ rh_inc = 0.30
+ rh_inr = 0.30
+ rh_ins = 0.30
+ ccn_l = 300.
+ ccn_o = 100.
+ c_paut = 0.5
+ c_cracw = 0.8
+ use_ppm = .false.
+ use_ccn = .true.
+ mono_prof = .true.
+ z_slope_liq = .true.
+ z_slope_ice = .true.
+ de_ice = .false.
+ fix_negative = .true.
+ icloud_f = 1
+ mp_time = 150.
+ reiflag = 2
+/
+
+&cires_ugwp_nml
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1,1,0,0
+ knob_ugwp_wvspec = 1,25,25,25
+ knob_ugwp_azdir = 2,4,4,4
+ knob_ugwp_stoch = 0,0,0,0
+ knob_ugwp_effac = 1,1,1,1
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_version = 0
+ launch_level = 27
+/
+
diff --git a/ccpp/physics_namelists/input_GFS_v16beta_RRTMGP_LWjac.nml b/ccpp/physics_namelists/input_GFS_v16beta_RRTMGP_LWjac.nml
new file mode 100644
index 000000000..868032fa7
--- /dev/null
+++ b/ccpp/physics_namelists/input_GFS_v16beta_RRTMGP_LWjac.nml
@@ -0,0 +1,151 @@
+&gfs_physics_nml
+ fhzero = 6
+ h2o_phys = .true.
+ ldiag3d = .true.
+ fhcyc = 24
+ use_ufo = .true.
+ pre_rad = .false.
+ ncld = 5
+ imp_physics = 11
+ pdfcld = .false.
+ fhswr = 3600.
+ fhlwr = 3600.
+ ialb = 1
+ iems = 1
+ iaer = 5111
+ icliq_sw = 2
+ iovr_lw = 3
+ iovr_sw = 3
+ ico2 = 2
+ isubc_sw = 2
+ isubc_lw = 2
+ isol = 2
+ lwhtr = .true.
+ swhtr = .true.
+ cnvgwd = .true.
+ shal_cnv = .true.
+ cal_pre = .false.
+ redrag = .true.
+ dspheat = .true.
+ hybedmf = .false.
+ satmedmf = .true.
+ isatmedmf = 1
+ lheatstrg = .true.
+ random_clds = .false.
+ trans_trac = .true.
+ cnvcld = .true.
+ imfshalcnv = 2
+ imfdeepcnv = 2
+ cdmbgwd = 4.0,0.15,1.0,1.0
+ prslrd0 = 0.
+ ivegsrc = 1
+ isot = 1
+ lsoil = 4
+ lsm = 1
+ iopt_dveg = 1
+ iopt_crs = 1
+ iopt_btr = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_rad = 1
+ iopt_alb = 2
+ iopt_snf = 4
+ iopt_tbot = 2
+ iopt_stc = 1
+ debug = .false.
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ nstf_name = 2,1,0,0,0
+ nst_anl = .true.
+ psautco = 0.0008,0.0005
+ prautco = 0.00015,0.00015
+ lgfdlmprad = .true.
+ effr_in = .true.
+ ldiag_ugwp = .false.
+ do_ugwp = .false.
+ do_tofd = .true.
+ do_sppt = .false.
+ do_shum = .false.
+ do_skeb = .false.
+ do_sfcperts = .false.
+ do_RRTMGP = .true.
+ active_gases = 'h2o_co2_o3_n2o_ch4_o2'
+ ngases = 6
+ rrtmgp_root = '../../ccpp/physics/physics/rte-rrtmgp/'
+ lw_file_gas = 'rrtmgp/data/rrtmgp-data-lw-g256-2018-12-04.nc'
+ lw_file_clouds = 'extensions/cloud_optics/rrtmgp-cloud-optics-coeffs-lw.nc'
+ sw_file_gas = 'rrtmgp/data/rrtmgp-data-sw-g224-2018-12-04.nc'
+ sw_file_clouds = 'extensions/cloud_optics/rrtmgp-cloud-optics-coeffs-sw.nc'
+ doG_cldoptics = .true.
+ use_LW_jacobian = .true.
+ rrtmgp_ngauss_ang = 3
+ rrtmgp_nrghice = 3
+/
+
+&gfdl_cloud_microphysics_nml
+ sedi_transport = .true.
+ do_sedi_heat = .false.
+ rad_snow = .true.
+ rad_graupel = .true.
+ rad_rain = .true.
+ const_vi = .F.
+ const_vs = .F.
+ const_vg = .F.
+ const_vr = .F.
+ vi_max = 1.
+ vs_max = 2.
+ vg_max = 12.
+ vr_max = 12.
+ qi_lim = 1.
+ prog_ccn = .false.
+ do_qa = .false.
+ fast_sat_adj = .false.
+ tau_l2v = 225.
+ tau_v2l = 150.
+ tau_g2v = 900.
+ rthresh = 10.e-6 ! This is a key parameter for cloud water
+ dw_land = 0.16
+ dw_ocean = 0.10
+ ql_gen = 1.0e-3
+ ql_mlt = 1.0e-3
+ qi0_crt = 8.0E-5
+ qs0_crt = 1.0e-3
+ tau_i2s = 1000.
+ c_psaci = 0.05
+ c_pgacs = 0.01
+ rh_inc = 0.30
+ rh_inr = 0.30
+ rh_ins = 0.30
+ ccn_l = 300.
+ ccn_o = 100.
+ c_paut = 0.5
+ c_cracw = 0.8
+ use_ppm = .false.
+ use_ccn = .true.
+ mono_prof = .true.
+ z_slope_liq = .true.
+ z_slope_ice = .true.
+ de_ice = .false.
+ fix_negative = .true.
+ icloud_f = 1
+ mp_time = 150.
+ reiflag = 2
+/
+
+&cires_ugwp_nml
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1,1,0,0
+ knob_ugwp_wvspec = 1,25,25,25
+ knob_ugwp_azdir = 2,4,4,4
+ knob_ugwp_stoch = 0,0,0,0
+ knob_ugwp_effac = 1,1,1,1
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_version = 0
+ launch_level = 27
+/
+
diff --git a/ccpp/suites/suite_SCM_GFS_v15p2_ACM_ps.xml b/ccpp/suites/suite_SCM_GFS_v15p2_ACM_ps.xml
index 37ec81cf8..c6049c9eb 100644
--- a/ccpp/suites/suite_SCM_GFS_v15p2_ACM_ps.xml
+++ b/ccpp/suites/suite_SCM_GFS_v15p2_ACM_ps.xml
@@ -33,7 +33,7 @@
GFS_suite_interstitial_2
gmtb_scm_sfc_flux_spec
GFS_PBL_generic_pre
- bl_acm
+
GFS_PBL_generic_post
GFS_GWD_generic_pre
cires_ugwp
diff --git a/ccpp/suites/suite_SCM_GFS_v15p2_RRTMGP.xml b/ccpp/suites/suite_SCM_GFS_v15p2_RRTMGP.xml
index 745b1ad44..af97e9951 100644
--- a/ccpp/suites/suite_SCM_GFS_v15p2_RRTMGP.xml
+++ b/ccpp/suites/suite_SCM_GFS_v15p2_RRTMGP.xml
@@ -13,6 +13,8 @@
GFS_suite_interstitial_rad_reset
GFS_rrtmgp_pre
+ GFS_rrtmgp_gfdlmp_pre
+ GFS_cloud_diagnostics
GFS_rrtmgp_sw_pre
rrtmgp_sw_gas_optics
rrtmgp_sw_aerosol_optics
diff --git a/ccpp/suites/suite_SCM_GFS_v15p2_RRTMGP_ps.xml b/ccpp/suites/suite_SCM_GFS_v15p2_RRTMGP_ps.xml
index afc0d0cf2..5288e1835 100644
--- a/ccpp/suites/suite_SCM_GFS_v15p2_RRTMGP_ps.xml
+++ b/ccpp/suites/suite_SCM_GFS_v15p2_RRTMGP_ps.xml
@@ -13,6 +13,8 @@
GFS_suite_interstitial_rad_reset
GFS_rrtmgp_pre
+ GFS_rrtmgp_gfdlmp_pre
+ GFS_cloud_diagnostics
GFS_rrtmgp_sw_pre
rrtmgp_sw_gas_optics
rrtmgp_sw_aerosol_optics
diff --git a/ccpp/suites/suite_SCM_GFS_v16beta_RRTMGP.xml b/ccpp/suites/suite_SCM_GFS_v16beta_RRTMGP.xml
new file mode 100644
index 000000000..3c486e481
--- /dev/null
+++ b/ccpp/suites/suite_SCM_GFS_v16beta_RRTMGP.xml
@@ -0,0 +1,91 @@
+
+
+
+
+
+ GFS_time_vary_pre
+ GFS_rrtmgp_setup
+ GFS_rad_time_vary
+ GFS_phys_time_vary
+
+
+
+
+ GFS_suite_interstitial_rad_reset
+ GFS_rrtmgp_pre
+ GFS_rrtmgp_gfdlmp_pre
+ GFS_cloud_diagnostics
+ GFS_rrtmgp_sw_pre
+ rrtmgp_sw_gas_optics
+ rrtmgp_sw_aerosol_optics
+ rrtmgp_sw_cloud_optics
+ rrtmgp_sw_cloud_sampling
+ rrtmgp_sw_rte
+ GFS_rrtmgp_sw_post
+ rrtmgp_lw_pre
+ rrtmgp_lw_gas_optics
+ rrtmgp_lw_aerosol_optics
+ rrtmgp_lw_cloud_optics
+ rrtmgp_lw_cloud_sampling
+ rrtmgp_lw_rte
+ GFS_rrtmgp_lw_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
+ satmedmfvdifq
+ GFS_PBL_generic_post
+ GFS_GWD_generic_pre
+ cires_ugwp
+ cires_ugwp_post
+ GFS_GWD_generic_post
+ rayleigh_damp
+ GFS_suite_stateout_update
+ ozphys_2015
+ h2ophys
+ get_phi_fv3
+ GFS_suite_interstitial_3
+ GFS_DCNV_generic_pre
+ samfdeepcnv
+ GFS_DCNV_generic_post
+ GFS_SCNV_generic_pre
+ samfshalcnv
+ GFS_SCNV_generic_post
+ GFS_suite_interstitial_4
+ cnvc90
+ GFS_MP_generic_pre
+ gfdl_cloud_microphys
+ GFS_MP_generic_post
+ maximum_hourly_diagnostics
+ phys_tend
+
+
+
diff --git a/ccpp/suites/suite_SCM_GFS_v16beta_RRTMGP_ps.xml b/ccpp/suites/suite_SCM_GFS_v16beta_RRTMGP_ps.xml
new file mode 100644
index 000000000..5abf7a3cd
--- /dev/null
+++ b/ccpp/suites/suite_SCM_GFS_v16beta_RRTMGP_ps.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+ GFS_time_vary_pre
+ GFS_rrtmgp_setup
+ GFS_rad_time_vary
+ GFS_phys_time_vary
+
+
+
+
+ GFS_suite_interstitial_rad_reset
+ GFS_rrtmgp_pre
+ GFS_rrtmgp_gfdlmp_pre
+ GFS_cloud_diagnostics
+ GFS_rrtmgp_sw_pre
+ rrtmgp_sw_gas_optics
+ rrtmgp_sw_aerosol_optics
+ rrtmgp_sw_cloud_optics
+ rrtmgp_sw_cloud_sampling
+ rrtmgp_sw_rte
+ GFS_rrtmgp_sw_post
+ rrtmgp_lw_pre
+ rrtmgp_lw_gas_optics
+ rrtmgp_lw_aerosol_optics
+ rrtmgp_lw_cloud_optics
+ rrtmgp_lw_cloud_sampling
+ rrtmgp_lw_rte
+ GFS_rrtmgp_lw_post
+
+
+
+
+ GFS_suite_interstitial_phys_reset
+ GFS_suite_stateout_reset
+ get_prs_fv3
+ GFS_suite_interstitial_1
+ GFS_surface_generic_pre
+ dcyc2t3
+ GFS_suite_interstitial_2
+ gmtb_scm_sfc_flux_spec
+ GFS_PBL_generic_pre
+ satmedmfvdifq
+ GFS_PBL_generic_post
+ GFS_GWD_generic_pre
+ cires_ugwp
+ cires_ugwp_post
+ GFS_GWD_generic_post
+ rayleigh_damp
+ GFS_suite_stateout_update
+ ozphys_2015
+ h2ophys
+ get_phi_fv3
+ GFS_suite_interstitial_3
+ GFS_DCNV_generic_pre
+ samfdeepcnv
+ GFS_DCNV_generic_post
+ GFS_SCNV_generic_pre
+ samfshalcnv
+ GFS_SCNV_generic_post
+ GFS_suite_interstitial_4
+ cnvc90
+ GFS_MP_generic_pre
+ gfdl_cloud_microphys
+ GFS_MP_generic_post
+ maximum_hourly_diagnostics
+ phys_tend
+
+
+
diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90
index 04e00ac09..6ed22292e 100644
--- a/scm/src/GFS_typedefs.F90
+++ b/scm/src/GFS_typedefs.F90
@@ -651,14 +651,14 @@ module GFS_typedefs
character(len=128) :: sw_file_clouds !< RRTMGP file containing coefficients used to compute clouds optical properties
integer :: rrtmgp_nBandsSW !< Number of RRTMGP SW bands.
integer :: rrtmgp_nGptsSW !< Number of RRTMGP SW spectral points.
- integer :: rrtmgp_cld_optics !< Flag to control which RRTMGP routine to compute cloud-optics.
- !< = 0 ; Use RRTMG implementation
- !< = 1 ; Use RRTMGP (pade)
- !< = 2 ; USE RRTMGP (LUT)
+ logical :: doG_cldoptics !< Use legacy RRTMG cloud-optics?
+ logical :: doGP_cldoptics_PADE !< Use RRTMGP cloud-optics: PADE approximation?
+ logical :: doGP_cldoptics_LUT !< Use RRTMGP cloud-optics: LUTs?
integer :: rrtmgp_nrghice !< Number of ice-roughness categories
integer :: rrtmgp_nGauss_ang !< Number of angles used in Gaussian quadrature
logical :: do_GPsw_Glw ! If set to true use rrtmgp for SW calculation, rrtmg for LW.
character(len=128) :: active_gases_array(100) !< character array for each trace gas name
+ logical :: use_LW_jacobian !< If true, use Jacobian of LW to update radiation tendency.
!--- microphysical switch
integer :: ncld !< choice of cloud scheme
!--- new microphysical switch
@@ -1948,67 +1948,74 @@ module GFS_typedefs
real (kind=kind_phys), pointer :: dudt_tms(:,:) => null() !< daily aver u-wind tend due to TMS
! RRTMGP
- integer :: ipsdlw0 !<
- integer :: ipsdsw0 !<
- real (kind=kind_phys), pointer :: p_lay(:,:) => null() !<
- real (kind=kind_phys), pointer :: p_lev(:,:) => null() !<
- real (kind=kind_phys), pointer :: t_lev(:,:) => null() !<
- real (kind=kind_phys), pointer :: t_lay(:,:) => null() !<
- real (kind=kind_phys), pointer :: relhum(:,:) => null() !<
- real (kind=kind_phys), pointer :: tv_lay(:,:) => null() !<
- real (kind=kind_phys), pointer :: tracer(:,:,:) => null() !<
- real (kind=kind_phys), pointer :: aerosolslw(:,:,:,:) => null() !< Aerosol radiative properties in each LW band.
- real (kind=kind_phys), pointer :: aerosolssw(:,:,:,:) => null() !< Aerosol radiative properties in each SW band.
- real (kind=kind_phys), pointer :: cld_frac(:,:) => null() !< Total cloud fraction
- real (kind=kind_phys), pointer :: cld_lwp(:,:) => null() !< Cloud liquid water path
- real (kind=kind_phys), pointer :: cld_reliq(:,:) => null() !< Cloud liquid effective radius
- real (kind=kind_phys), pointer :: cld_iwp(:,:) => null() !< Cloud ice water path
- real (kind=kind_phys), pointer :: cld_reice(:,:) => null() !< Cloud ice effecive radius
- real (kind=kind_phys), pointer :: cld_swp(:,:) => null() !< Cloud snow water path
- real (kind=kind_phys), pointer :: cld_resnow(:,:) => null() !< Cloud snow effective radius
- real (kind=kind_phys), pointer :: cld_rwp(:,:) => null() !< Cloud rain water path
- real (kind=kind_phys), pointer :: cld_rerain(:,:) => null() !< Cloud rain effective radius
- real (kind=kind_phys), pointer :: hsw0(:,:) => null() !< RRTMGP shortwave heating-rate (clear-sky)
- real (kind=kind_phys), pointer :: hswc(:,:) => null() !< RRTMGP shortwave heating-rate (all-sky)
- real (kind=kind_phys), pointer :: hswb(:,:,:) => null() !< RRTMGP shortwave heating-rate (all-sky), by band
- real (kind=kind_phys), pointer :: hlw0(:,:) => null() !< RRTMGP longwave heating-rate (clear-sky)
- real (kind=kind_phys), pointer :: hlwc(:,:) => null() !< RRTMGP longwave heating-rate (all-sky)
- real (kind=kind_phys), pointer :: hlwb(:,:,:) => null() !< RRTMGP longwave heating-rate (all-sky), by band
- real (kind=kind_phys), pointer :: fluxlwUP_allsky(:,:) => null() !< RRTMGP upward longwave all-sky flux profile
- real (kind=kind_phys), pointer :: fluxlwDOWN_allsky(:,:) => null() !< RRTMGP downward longwave all-sky flux profile
- real (kind=kind_phys), pointer :: fluxlwUP_clrsky(:,:) => null() !< RRTMGP upward longwave clr-sky flux profile
- real (kind=kind_phys), pointer :: fluxlwDOWN_clrsky(:,:) => null() !< RRTMGP downward longwave clr-sky flux profile
- real (kind=kind_phys), pointer :: fluxswUP_allsky(:,:) => null() !< RRTMGP upward shortwave all-sky flux profile
- real (kind=kind_phys), pointer :: fluxswDOWN_allsky(:,:) => null() !< RRTMGP downward shortwave all-sky flux profile
- real (kind=kind_phys), pointer :: fluxswUP_clrsky(:,:) => null() !< RRTMGP upward shortwave clr-sky flux profile
- real (kind=kind_phys), pointer :: fluxswDOWN_clrsky(:,:) => null() !< RRTMGP downward shortwave clr-sky flux profile
- real (kind=kind_phys), pointer :: sfc_emiss_byband(:,:) => null() !<
- real (kind=kind_phys), pointer :: sec_diff_byband(:,:) => null() !<
- real (kind=kind_phys), pointer :: sfc_alb_nir_dir(:,:) => null() !<
- real (kind=kind_phys), pointer :: sfc_alb_nir_dif(:,:) => null() !<
- real (kind=kind_phys), pointer :: sfc_alb_uvvis_dir(:,:) => null() !<
- real (kind=kind_phys), pointer :: sfc_alb_uvvis_dif(:,:) => null() !<
- real (kind=kind_phys), pointer :: toa_src_lw(:,:) => null() !<
- real (kind=kind_phys), pointer :: toa_src_sw(:,:) => null() !<
- character(len=128), pointer :: active_gases_array(:) => null() !< Character array for each trace gas name
- integer, pointer :: icseed_lw(:) => null() !< RRTMGP seed for RNG for longwave radiation
- integer, pointer :: icseed_sw(:) => null() !< RRTMGP seed for RNG for shortwave radiation
- type(proflw_type), pointer :: flxprf_lw(:,:) => null() !< DDT containing RRTMGP longwave fluxes
- type(profsw_type), pointer :: flxprf_sw(:,:) => null() !< DDT containing RRTMGP shortwave fluxes
- type(ty_gas_optics_rrtmgp) :: lw_gas_props !< RRTMGP DDT
- type(ty_gas_optics_rrtmgp) :: sw_gas_props !< RRTMGP DDT
- type(ty_cloud_optics) :: lw_cloud_props !< RRTMGP DDT
- type(ty_cloud_optics) :: sw_cloud_props !< RRTMGP DDT
- type(ty_optical_props_1scl) :: lw_optical_props_cloudsByBand !< RRTMGP DDT
- type(ty_optical_props_1scl) :: lw_optical_props_clouds !< RRTMGP DDT
- type(ty_optical_props_1scl) :: lw_optical_props_clrsky !< RRTMGP DDT
- type(ty_optical_props_1scl) :: lw_optical_props_aerosol !< RRTMGP DDT
- type(ty_optical_props_2str) :: sw_optical_props_cloudsByBand !< RRTMGP DDT
- type(ty_optical_props_2str) :: sw_optical_props_clouds !< RRTMGP DDT
- type(ty_optical_props_2str) :: sw_optical_props_clrsky !< RRTMGP DDT
- type(ty_optical_props_2str) :: sw_optical_props_aerosol !< RRTMGP DDT
- type(ty_gas_concs) :: gas_concentrations !< RRTMGP DDT
- type(ty_source_func_lw) :: sources !< RRTMGP DDT
+ integer :: ipsdlw0 !<
+ integer :: ipsdsw0 !<
+ real (kind=kind_phys), pointer :: sktp1r(:) => null() !<
+ real (kind=kind_phys), pointer :: p_lay(:,:) => null() !<
+ real (kind=kind_phys), pointer :: p_lev(:,:) => null() !<
+ real (kind=kind_phys), pointer :: t_lev(:,:) => null() !<
+ real (kind=kind_phys), pointer :: t_lay(:,:) => null() !<
+ real (kind=kind_phys), pointer :: relhum(:,:) => null() !<
+ real (kind=kind_phys), pointer :: tv_lay(:,:) => null() !<
+ real (kind=kind_phys), pointer :: qs_lay(:,:) => null() !<
+ real (kind=kind_phys), pointer :: q_lay(:,:) => null() !<
+ real (kind=kind_phys), pointer :: deltaZ(:,:) => null() !<
+ real (kind=kind_phys), pointer :: cloud_overlap_param(:,:) => null() !< Cloud overlap parameter
+ real (kind=kind_phys), pointer :: precip_overlap_param(:,:) => null() !< Precipitation overlap parameter
+ real (kind=kind_phys), pointer :: tracer(:,:,:) => null() !<
+ real (kind=kind_phys), pointer :: aerosolslw(:,:,:,:) => null() !< Aerosol radiative properties in each LW band.
+ real (kind=kind_phys), pointer :: aerosolssw(:,:,:,:) => null() !< Aerosol radiative properties in each SW band.
+ real (kind=kind_phys), pointer :: cld_frac(:,:) => null() !< Total cloud fraction
+ real (kind=kind_phys), pointer :: cld_lwp(:,:) => null() !< Cloud liquid water path
+ real (kind=kind_phys), pointer :: cld_reliq(:,:) => null() !< Cloud liquid effective radius
+ real (kind=kind_phys), pointer :: cld_iwp(:,:) => null() !< Cloud ice water path
+ real (kind=kind_phys), pointer :: cld_reice(:,:) => null() !< Cloud ice effecive radius
+ real (kind=kind_phys), pointer :: cld_swp(:,:) => null() !< Cloud snow water path
+ real (kind=kind_phys), pointer :: cld_resnow(:,:) => null() !< Cloud snow effective radius
+ real (kind=kind_phys), pointer :: cld_rwp(:,:) => null() !< Cloud rain water path
+ real (kind=kind_phys), pointer :: cld_rerain(:,:) => null() !< Cloud rain effective radius
+ real (kind=kind_phys), pointer :: precip_frac(:,:) => null() !< Precipitation fraction
+ real (kind=kind_phys), pointer :: fluxlwUP_allsky(:,:) => null() !< RRTMGP upward longwave all-sky flux profile
+ real (kind=kind_phys), pointer :: fluxlwDOWN_allsky(:,:) => null() !< RRTMGP downward longwave all-sky flux profile
+ real (kind=kind_phys), pointer :: fluxlwUP_clrsky(:,:) => null() !< RRTMGP upward longwave clr-sky flux profile
+ real (kind=kind_phys), pointer :: fluxlwDOWN_clrsky(:,:) => null() !< RRTMGP downward longwave clr-sky flux profile
+ real (kind=kind_phys), pointer :: fluxswUP_allsky(:,:) => null() !< RRTMGP upward shortwave all-sky flux profile
+ real (kind=kind_phys), pointer :: fluxswDOWN_allsky(:,:) => null() !< RRTMGP downward shortwave all-sky flux profile
+ real (kind=kind_phys), pointer :: fluxswUP_clrsky(:,:) => null() !< RRTMGP upward shortwave clr-sky flux profile
+ real (kind=kind_phys), pointer :: fluxswDOWN_clrsky(:,:) => null() !< RRTMGP downward shortwave clr-sky flux profile
+ real (kind=kind_phys), pointer :: fluxlwUP_jac(:,:) => null() !< RRTMGP upward Jacobian of longwave flux
+ real (kind=kind_phys), pointer :: fluxlwDOWN_jac(:,:) => null() !< RRTMGP downward Jacobian of longwave flux
+ real (kind=kind_phys), pointer :: sfc_emiss_byband(:,:) => null() !<
+ real (kind=kind_phys), pointer :: sec_diff_byband(:,:) => null() !<
+ real (kind=kind_phys), pointer :: sfc_alb_nir_dir(:,:) => null() !<
+ real (kind=kind_phys), pointer :: sfc_alb_nir_dif(:,:) => null() !<
+ real (kind=kind_phys), pointer :: sfc_alb_uvvis_dir(:,:) => null() !<
+ real (kind=kind_phys), pointer :: sfc_alb_uvvis_dif(:,:) => null() !<
+ real (kind=kind_phys), pointer :: toa_src_lw(:,:) => null() !<
+ real (kind=kind_phys), pointer :: toa_src_sw(:,:) => null() !<
+ character(len=128), pointer :: active_gases_array(:) => null() !< Character array for each trace gas name
+ integer, pointer :: icseed_lw(:) => null() !< RRTMGP seed for RNG for longwave radiation
+ integer, pointer :: icseed_sw(:) => null() !< RRTMGP seed for RNG for shortwave radiation
+ type(proflw_type), pointer :: flxprf_lw(:,:) => null() !< DDT containing RRTMGP longwave fluxes
+ type(profsw_type), pointer :: flxprf_sw(:,:) => null() !< DDT containing RRTMGP shortwave fluxes
+ type(ty_gas_optics_rrtmgp) :: lw_gas_props !< RRTMGP DDT
+ type(ty_gas_optics_rrtmgp) :: sw_gas_props !< RRTMGP DDT
+ type(ty_cloud_optics) :: lw_cloud_props !< RRTMGP DDT
+ type(ty_cloud_optics) :: sw_cloud_props !< RRTMGP DDT
+ type(ty_optical_props_1scl) :: lw_optical_props_cloudsByBand !< RRTMGP DDT
+ type(ty_optical_props_1scl) :: lw_optical_props_clouds !< RRTMGP DDT
+ type(ty_optical_props_1scl) :: lw_optical_props_precipByBand !< RRTMGP DDT
+ type(ty_optical_props_1scl) :: lw_optical_props_precip !< RRTMGP DDT
+ type(ty_optical_props_1scl) :: lw_optical_props_clrsky !< RRTMGP DDT
+ type(ty_optical_props_1scl) :: lw_optical_props_aerosol !< RRTMGP DDT
+ type(ty_optical_props_2str) :: sw_optical_props_cloudsByBand !< RRTMGP DDT
+ type(ty_optical_props_2str) :: sw_optical_props_clouds !< RRTMGP DDT
+ type(ty_optical_props_2str) :: sw_optical_props_precipByBand !< RRTMGP DDT
+ type(ty_optical_props_2str) :: sw_optical_props_precip !< RRTMGP DDT
+ type(ty_optical_props_2str) :: sw_optical_props_clrsky !< RRTMGP DDT
+ type(ty_optical_props_2str) :: sw_optical_props_aerosol !< RRTMGP DDT
+ type(ty_gas_concs) :: gas_concentrations !< RRTMGP DDT
+ type(ty_source_func_lw) :: sources !< RRTMGP DDT
!-- HWRF physics: dry mixing ratios
real (kind=kind_phys), pointer :: qv_r(:,:) => null() !<
@@ -2893,13 +2900,13 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
character(len=128) :: sw_file_clouds = '' !< RRTMGP file containing coefficients used to compute clouds optical properties
integer :: rrtmgp_nBandsSW = 14 !< Number of RRTMGP SW bands.
integer :: rrtmgp_nGptsSW = 224 !< Number of RRTMGP SW spectral points.
- integer :: rrtmgp_cld_optics = 0 !< Flag to control which RRTMGP routine to compute cloud-optics.
- !< = 0 ; Use RRTMGP implementation
- !< = 1 ; Use RRTMGP (pade)
- !< = 2 ; USE RRTMGP (LUT)
+ logical :: doG_cldoptics = .false. !< Use legacy RRTMG cloud-optics?
+ logical :: doGP_cldoptics_PADE = .false. !< Use RRTMGP cloud-optics: PADE approximation?
+ logical :: doGP_cldoptics_LUT = .false. !< Use RRTMGP cloud-optics: LUTs?
integer :: rrtmgp_nrghice = 0 !< Number of ice-roughness categories
integer :: rrtmgp_nGauss_ang=1 !< Number of angles used in Gaussian quadrature
- logical :: do_GPsw_Glw = .false.
+ logical :: do_GPsw_Glw = .false.
+ logical :: use_LW_jacobian = .false. !< Use Jacobian of LW to update LW radiation tendencies.
!--- Z-C microphysical parameters
integer :: ncld = 1 !< choice of cloud scheme
@@ -3268,8 +3275,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
do_RRTMGP, active_gases, nGases, rrtmgp_root, &
lw_file_gas, lw_file_clouds, rrtmgp_nBandsLW, rrtmgp_nGptsLW,&
sw_file_gas, sw_file_clouds, rrtmgp_nBandsSW, rrtmgp_nGptsSW,&
- rrtmgp_cld_optics, rrtmgp_nrghice, rrtmgp_nGauss_ang, &
- do_GPsw_Glw, &
+ doG_cldoptics, doGP_cldoptics_PADE, doGP_cldoptics_LUT, &
+ rrtmgp_nrghice, rrtmgp_nGauss_ang, do_GPsw_Glw, &
+ use_LW_jacobian, &
! IN CCN forcing
iccn, &
!--- microphysical parameterizations
@@ -3618,7 +3626,10 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
Model%sw_file_clouds = sw_file_clouds
Model%rrtmgp_nBandsSW = rrtmgp_nBandsSW
Model%rrtmgp_nGptsSW = rrtmgp_nGptsSW
- Model%rrtmgp_cld_optics = RRTMGP_CLD_OPTICS
+ Model%doG_cldoptics = doG_cldoptics
+ Model%doGP_cldoptics_PADE = doGP_cldoptics_PADE
+ Model%doGP_cldoptics_LUT = doGP_cldoptics_LUT
+ Model%use_LW_jacobian = use_LW_jacobian
! RRTMGP incompatible with levr /= levs
if (Model%do_RRTMGP .and. Model%levr /= Model%levs) then
write(0,*) "Logic error, RRTMGP only works with levr = levs"
@@ -4691,7 +4702,10 @@ subroutine control_print(Model)
print *, ' sw_file_clouds : ', Model%sw_file_clouds
print *, ' rrtmgp_nBandsSW : ', Model%rrtmgp_nBandsSW
print *, ' rrtmgp_nGptsSW : ', Model%rrtmgp_nGptsSW
- print *, ' rrtmgp_cld_optics : ', Model%rrtmgp_cld_optics
+ print *, ' doG_cldoptics : ', Model%doG_cldoptics
+ print *, ' doGP_cldoptics_PADE: ', Model%doGP_cldoptics_PADE
+ print *, ' doGP_cldoptics_LUT : ', Model%doGP_cldoptics_LUT
+ print *, ' use_LW_jacobian : ', Model%use_LW_jacobian
endif
print *, ' '
print *, 'microphysical switch'
@@ -6182,53 +6196,56 @@ subroutine interstitial_create (Interstitial, IM, Model)
allocate (Interstitial%zorl_land (IM))
allocate (Interstitial%zorl_ocean (IM))
allocate (Interstitial%zt1d (IM))
- ! RRTMGP
+ ! RRTMGP
+ allocate (Interstitial%sktp1r (IM))
+ allocate (Interstitial%fluxlwDOWN_jac (IM, Model%levs+1))
+ allocate (Interstitial%fluxlwUP_jac (IM, Model%levs+1))
+ allocate (Interstitial%fluxlwUP_allsky (IM, Model%levs+1))
if (Model%do_RRTMGP) then
- allocate (Interstitial%tracer (IM, Model%levs,Model%ntrac))
- allocate (Interstitial%tv_lay (IM, Model%levs))
- allocate (Interstitial%relhum (IM, Model%levs))
- allocate (Interstitial%p_lev (IM, Model%levs+1))
- allocate (Interstitial%p_lay (IM, Model%levs))
- allocate (Interstitial%t_lev (IM, Model%levs+1))
- allocate (Interstitial%t_lay (IM, Model%levs))
- allocate (Interstitial%fluxlwUP_allsky (IM, Model%levs+1))
- allocate (Interstitial%fluxlwDOWN_allsky (IM, Model%levs+1))
- allocate (Interstitial%fluxlwUP_clrsky (IM, Model%levs+1))
- allocate (Interstitial%fluxlwDOWN_clrsky (IM, Model%levs+1))
- allocate (Interstitial%fluxswUP_allsky (IM, Model%levs+1))
- allocate (Interstitial%fluxswDOWN_allsky (IM, Model%levs+1))
- allocate (Interstitial%fluxswUP_clrsky (IM, Model%levs+1))
- allocate (Interstitial%fluxswDOWN_clrsky (IM, Model%levs+1))
- allocate (Interstitial%aerosolslw (IM, Model%levs, Model%rrtmgp_nBandsLW, NF_AELW))
- allocate (Interstitial%aerosolssw (IM, Model%levs, Model%rrtmgp_nBandsSW, NF_AESW))
- allocate (Interstitial%cld_frac (IM, Model%levs))
- allocate (Interstitial%cld_lwp (IM, Model%levs))
- allocate (Interstitial%cld_reliq (IM, Model%levs))
- allocate (Interstitial%cld_iwp (IM, Model%levs))
- allocate (Interstitial%cld_reice (IM, Model%levs))
- allocate (Interstitial%cld_swp (IM, Model%levs))
- allocate (Interstitial%cld_resnow (IM, Model%levs))
- allocate (Interstitial%cld_rwp (IM, Model%levs))
- allocate (Interstitial%cld_rerain (IM, Model%levs))
- allocate (Interstitial%hsw0 (IM, Model%levs))
- allocate (Interstitial%hswc (IM, Model%levs))
- allocate (Interstitial%hswb (IM, Model%levs, Model%rrtmgp_nGptsSW))
- allocate (Interstitial%hlw0 (IM, Model%levs))
- allocate (Interstitial%hlwc (IM, Model%levs))
- allocate (Interstitial%hlwb (IM, Model%levs, Model%rrtmgp_nGptsLW))
- allocate (Interstitial%icseed_lw (IM))
- allocate (Interstitial%icseed_sw (IM))
- allocate (Interstitial%flxprf_lw (IM, Model%levs+1))
- allocate (Interstitial%flxprf_sw (IM, Model%levs+1))
- allocate (Interstitial%sfc_emiss_byband (Model%rrtmgp_nBandsLW,IM))
- allocate (Interstitial%sec_diff_byband (Model%rrtmgp_nBandsLW,IM))
- allocate (Interstitial%sfc_alb_nir_dir (Model%rrtmgp_nBandsSW,IM))
- allocate (Interstitial%sfc_alb_nir_dif (Model%rrtmgp_nBandsSW,IM))
- allocate (Interstitial%sfc_alb_uvvis_dir (Model%rrtmgp_nBandsSW,IM))
- allocate (Interstitial%sfc_alb_uvvis_dif (Model%rrtmgp_nBandsSW,IM))
- allocate (Interstitial%toa_src_sw (IM,Model%rrtmgp_nGptsSW))
- allocate (Interstitial%toa_src_lw (IM,Model%rrtmgp_nGptsLW))
- allocate (Interstitial%active_gases_array(Model%nGases))
+ allocate (Interstitial%tracer (IM, Model%levs,Model%ntrac))
+ allocate (Interstitial%tv_lay (IM, Model%levs))
+ allocate (Interstitial%relhum (IM, Model%levs))
+ allocate (Interstitial%qs_lay (IM, Model%levs))
+ allocate (Interstitial%q_lay (IM, Model%levs))
+ allocate (Interstitial%deltaZ (IM, Model%levs))
+ allocate (Interstitial%p_lev (IM, Model%levs+1))
+ allocate (Interstitial%p_lay (IM, Model%levs))
+ allocate (Interstitial%t_lev (IM, Model%levs+1))
+ allocate (Interstitial%t_lay (IM, Model%levs))
+ allocate (Interstitial%cloud_overlap_param (IM, Model%levs))
+ allocate (Interstitial%precip_overlap_param (IM, Model%levs))
+ allocate (Interstitial%fluxlwDOWN_allsky (IM, Model%levs+1))
+ allocate (Interstitial%fluxlwUP_clrsky (IM, Model%levs+1))
+ allocate (Interstitial%fluxlwDOWN_clrsky (IM, Model%levs+1))
+ allocate (Interstitial%fluxswUP_allsky (IM, Model%levs+1))
+ allocate (Interstitial%fluxswDOWN_allsky (IM, Model%levs+1))
+ allocate (Interstitial%fluxswUP_clrsky (IM, Model%levs+1))
+ allocate (Interstitial%fluxswDOWN_clrsky (IM, Model%levs+1))
+ allocate (Interstitial%aerosolslw (IM, Model%levs, Model%rrtmgp_nBandsLW, NF_AELW))
+ allocate (Interstitial%aerosolssw (IM, Model%levs, Model%rrtmgp_nBandsSW, NF_AESW))
+ allocate (Interstitial%cld_frac (IM, Model%levs))
+ allocate (Interstitial%cld_lwp (IM, Model%levs))
+ allocate (Interstitial%cld_reliq (IM, Model%levs))
+ allocate (Interstitial%cld_iwp (IM, Model%levs))
+ allocate (Interstitial%cld_reice (IM, Model%levs))
+ allocate (Interstitial%cld_swp (IM, Model%levs))
+ allocate (Interstitial%cld_resnow (IM, Model%levs))
+ allocate (Interstitial%cld_rwp (IM, Model%levs))
+ allocate (Interstitial%cld_rerain (IM, Model%levs))
+ allocate (Interstitial%precip_frac (IM, Model%levs))
+ allocate (Interstitial%icseed_lw (IM))
+ allocate (Interstitial%icseed_sw (IM))
+ allocate (Interstitial%flxprf_lw (IM, Model%levs+1))
+ allocate (Interstitial%flxprf_sw (IM, Model%levs+1))
+ allocate (Interstitial%sfc_emiss_byband (Model%rrtmgp_nBandsLW,IM))
+ allocate (Interstitial%sec_diff_byband (Model%rrtmgp_nBandsLW,IM))
+ allocate (Interstitial%sfc_alb_nir_dir (Model%rrtmgp_nBandsSW,IM))
+ allocate (Interstitial%sfc_alb_nir_dif (Model%rrtmgp_nBandsSW,IM))
+ allocate (Interstitial%sfc_alb_uvvis_dir (Model%rrtmgp_nBandsSW,IM))
+ allocate (Interstitial%sfc_alb_uvvis_dif (Model%rrtmgp_nBandsSW,IM))
+ allocate (Interstitial%toa_src_sw (IM,Model%rrtmgp_nGptsSW))
+ allocate (Interstitial%toa_src_lw (IM,Model%rrtmgp_nGptsLW))
+ allocate (Interstitial%active_gases_array (Model%nGases))
end if
! CIRES UGWP v0
allocate (Interstitial%gw_dudt (IM,Model%levs))
@@ -6614,48 +6631,47 @@ subroutine interstitial_rad_reset (Interstitial, Model)
end if
if (Model%do_RRTMGP) then
- Interstitial%tracer = clear_val
- Interstitial%tv_lay = clear_val
- Interstitial%relhum = clear_val
- Interstitial%p_lev = clear_val
- Interstitial%p_lay = clear_val
- Interstitial%t_lev = clear_val
- Interstitial%t_lay = clear_val
- Interstitial%fluxlwUP_allsky = clear_val
- Interstitial%fluxlwDOWN_allsky = clear_val
- Interstitial%fluxlwUP_clrsky = clear_val
- Interstitial%fluxlwDOWN_clrsky = clear_val
- Interstitial%fluxswUP_allsky = clear_val
- Interstitial%fluxswDOWN_allsky = clear_val
- Interstitial%fluxswUP_clrsky = clear_val
- Interstitial%fluxswDOWN_clrsky = clear_val
- Interstitial%aerosolslw = clear_val
- Interstitial%aerosolssw = clear_val
- Interstitial%cld_frac = clear_val
- Interstitial%cld_lwp = clear_val
- Interstitial%cld_reliq = clear_val
- Interstitial%cld_iwp = clear_val
- Interstitial%cld_reice = clear_val
- Interstitial%cld_swp = clear_val
- Interstitial%cld_resnow = clear_val
- Interstitial%cld_rwp = clear_val
- Interstitial%cld_rerain = clear_val
- Interstitial%hsw0 = clear_val
- Interstitial%hswc = clear_val
- Interstitial%hswb = clear_val
- Interstitial%hlw0 = clear_val
- Interstitial%hlwc = clear_val
- Interstitial%hlwb = clear_val
- Interstitial%icseed_lw = clear_val
- Interstitial%icseed_sw = clear_val
- Interstitial%sfc_emiss_byband = clear_val
- Interstitial%sec_diff_byband = clear_val
- Interstitial%sfc_alb_nir_dir = clear_val
- Interstitial%sfc_alb_nir_dif = clear_val
- Interstitial%sfc_alb_uvvis_dir = clear_val
- Interstitial%sfc_alb_uvvis_dif = clear_val
- Interstitial%toa_src_sw = clear_val
- Interstitial%toa_src_lw = clear_val
+ Interstitial%tracer = clear_val
+ Interstitial%tv_lay = clear_val
+ Interstitial%relhum = clear_val
+ Interstitial%qs_lay = clear_val
+ Interstitial%q_lay = clear_val
+ Interstitial%deltaZ = clear_val
+ Interstitial%p_lev = clear_val
+ Interstitial%p_lay = clear_val
+ Interstitial%t_lev = clear_val
+ Interstitial%t_lay = clear_val
+ Interstitial%cloud_overlap_param = clear_val
+ Interstitial%precip_overlap_param = clear_val
+ Interstitial%fluxlwDOWN_allsky = clear_val
+ Interstitial%fluxlwUP_clrsky = clear_val
+ Interstitial%fluxlwDOWN_clrsky = clear_val
+ Interstitial%fluxswUP_allsky = clear_val
+ Interstitial%fluxswDOWN_allsky = clear_val
+ Interstitial%fluxswUP_clrsky = clear_val
+ Interstitial%fluxswDOWN_clrsky = clear_val
+ Interstitial%aerosolslw = clear_val
+ Interstitial%aerosolssw = clear_val
+ Interstitial%cld_frac = clear_val
+ Interstitial%cld_lwp = clear_val
+ Interstitial%cld_reliq = clear_val
+ Interstitial%cld_iwp = clear_val
+ Interstitial%cld_reice = clear_val
+ Interstitial%cld_swp = clear_val
+ Interstitial%cld_resnow = clear_val
+ Interstitial%cld_rwp = clear_val
+ Interstitial%cld_rerain = clear_val
+ Interstitial%precip_frac = clear_val
+ Interstitial%icseed_lw = clear_val
+ Interstitial%icseed_sw = clear_val
+ Interstitial%sfc_emiss_byband = clear_val
+ Interstitial%sec_diff_byband = clear_val
+ Interstitial%sfc_alb_nir_dir = clear_val
+ Interstitial%sfc_alb_nir_dif = clear_val
+ Interstitial%sfc_alb_uvvis_dir = clear_val
+ Interstitial%sfc_alb_uvvis_dif = clear_val
+ Interstitial%toa_src_sw = clear_val
+ Interstitial%toa_src_lw = clear_val
end if
!
end subroutine interstitial_rad_reset
@@ -6968,6 +6984,7 @@ subroutine interstitial_phys_reset (Interstitial, Model)
Interstitial%radar_reset = mod(Model%kdt-1, nint(Model%nsradar_reset/Model%dtp)) == 0
end if
!
+
end subroutine interstitial_phys_reset
subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno)
@@ -7269,39 +7286,39 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno)
end if
!
! RRTMGP fields
- write (0,*) 'sum(Interstitial%aerosolslw ) = ', sum(Interstitial%aerosolslw )
- write (0,*) 'sum(Interstitial%aerosolssw ) = ', sum(Interstitial%aerosolssw )
- write (0,*) 'sum(Interstitial%cld_frac ) = ', sum(Interstitial%cld_frac )
- write (0,*) 'sum(Interstitial%cld_lwp ) = ', sum(Interstitial%cld_lwp )
- write (0,*) 'sum(Interstitial%cld_reliq ) = ', sum(Interstitial%cld_reliq )
- write (0,*) 'sum(Interstitial%cld_iwp ) = ', sum(Interstitial%cld_iwp )
- write (0,*) 'sum(Interstitial%cld_reice ) = ', sum(Interstitial%cld_reice )
- write (0,*) 'sum(Interstitial%cld_swp ) = ', sum(Interstitial%cld_swp )
- write (0,*) 'sum(Interstitial%cld_resnow ) = ', sum(Interstitial%cld_resnow )
- write (0,*) 'sum(Interstitial%cld_rwp ) = ', sum(Interstitial%cld_rwp )
- write (0,*) 'sum(Interstitial%cld_rerain ) = ', sum(Interstitial%cld_rerain )
- write (0,*) 'sum(Interstitial%hsw0 ) = ', sum(Interstitial%hsw0 )
- write (0,*) 'sum(Interstitial%hswc ) = ', sum(Interstitial%hswc )
- write (0,*) 'sum(Interstitial%hswb ) = ', sum(Interstitial%hswb )
- write (0,*) 'sum(Interstitial%hlw0 ) = ', sum(Interstitial%hlw0 )
- write (0,*) 'sum(Interstitial%hlwc ) = ', sum(Interstitial%hlwc )
- write (0,*) 'sum(Interstitial%hlwb ) = ', sum(Interstitial%hlwb )
- write (0,*) 'sum(Interstitial%icseed_lw ) = ', sum(Interstitial%icseed_lw )
- write (0,*) 'sum(Interstitial%icseed_sw ) = ', sum(Interstitial%icseed_sw )
- write (0,*) 'sum(Interstitial%fluxlwUP_allsky ) = ', sum(Interstitial%fluxlwUP_allsky )
- write (0,*) 'sum(Interstitial%fluxlwDOWN_allsky) = ', sum(Interstitial%fluxlwDOWN_allsky)
- write (0,*) 'sum(Interstitial%fluxlwUP_clrsky ) = ', sum(Interstitial%fluxlwUP_clrsky )
- write (0,*) 'sum(Interstitial%fluxlwDOWN_clrsky) = ', sum(Interstitial%fluxlwDOWN_clrsky)
- write (0,*) 'sum(Interstitial%fluxswUP_allsky ) = ', sum(Interstitial%fluxswUP_allsky )
- write (0,*) 'sum(Interstitial%fluxswDOWN_allsky) = ', sum(Interstitial%fluxswDOWN_allsky)
- write (0,*) 'sum(Interstitial%fluxswUP_clrsky ) = ', sum(Interstitial%fluxswUP_clrsky )
- write (0,*) 'sum(Interstitial%fluxswDOWN_clrsky) = ', sum(Interstitial%fluxswDOWN_clrsky)
- write (0,*) 'sum(Interstitial%relhum ) = ', sum(Interstitial%relhum )
- write (0,*) 'sum(Interstitial%p_lay ) = ', sum(Interstitial%p_lay )
- write (0,*) 'sum(Interstitial%p_lev ) = ', sum(Interstitial%p_lev )
- write (0,*) 'sum(Interstitial%t_lay ) = ', sum(Interstitial%t_lay )
- write (0,*) 'sum(Interstitial%t_lev ) = ', sum(Interstitial%t_lev )
- write (0,*) 'sum(Interstitial%tv_lay ) = ', sum(Interstitial%tv_lay )
+ write (0,*) 'sum(Interstitial%aerosolslw ) = ', sum(Interstitial%aerosolslw )
+ write (0,*) 'sum(Interstitial%aerosolssw ) = ', sum(Interstitial%aerosolssw )
+ write (0,*) 'sum(Interstitial%cld_frac ) = ', sum(Interstitial%cld_frac )
+ write (0,*) 'sum(Interstitial%cld_lwp ) = ', sum(Interstitial%cld_lwp )
+ write (0,*) 'sum(Interstitial%cld_reliq ) = ', sum(Interstitial%cld_reliq )
+ write (0,*) 'sum(Interstitial%cld_iwp ) = ', sum(Interstitial%cld_iwp )
+ write (0,*) 'sum(Interstitial%cld_reice ) = ', sum(Interstitial%cld_reice )
+ write (0,*) 'sum(Interstitial%cld_swp ) = ', sum(Interstitial%cld_swp )
+ write (0,*) 'sum(Interstitial%cld_resnow ) = ', sum(Interstitial%cld_resnow )
+ write (0,*) 'sum(Interstitial%cld_rwp ) = ', sum(Interstitial%cld_rwp )
+ write (0,*) 'sum(Interstitial%cld_rerain ) = ', sum(Interstitial%cld_rerain )
+ write (0,*) 'sum(Interstitial%precip_frac ) = ', sum(Interstitial%precip_frac )
+ write (0,*) 'sum(Interstitial%icseed_lw ) = ', sum(Interstitial%icseed_lw )
+ write (0,*) 'sum(Interstitial%icseed_sw ) = ', sum(Interstitial%icseed_sw )
+ write (0,*) 'sum(Interstitial%fluxlwUP_allsky ) = ', sum(Interstitial%fluxlwUP_allsky )
+ write (0,*) 'sum(Interstitial%fluxlwDOWN_allsky ) = ', sum(Interstitial%fluxlwDOWN_allsky)
+ write (0,*) 'sum(Interstitial%fluxlwUP_clrsky ) = ', sum(Interstitial%fluxlwUP_clrsky )
+ write (0,*) 'sum(Interstitial%fluxlwDOWN_clrsky ) = ', sum(Interstitial%fluxlwDOWN_clrsky)
+ write (0,*) 'sum(Interstitial%fluxswUP_allsky ) = ', sum(Interstitial%fluxswUP_allsky )
+ write (0,*) 'sum(Interstitial%fluxswDOWN_allsky ) = ', sum(Interstitial%fluxswDOWN_allsky)
+ write (0,*) 'sum(Interstitial%fluxswUP_clrsky ) = ', sum(Interstitial%fluxswUP_clrsky )
+ write (0,*) 'sum(Interstitial%fluxswDOWN_clrsky ) = ', sum(Interstitial%fluxswDOWN_clrsky)
+ write (0,*) 'sum(Interstitial%relhum ) = ', sum(Interstitial%relhum )
+ write (0,*) 'sum(Interstitial%q_lay ) = ', sum(Interstitial%q_lay )
+ write (0,*) 'sum(Interstitial%qs_lay ) = ', sum(Interstitial%qs_lay )
+ write (0,*) 'sum(Interstitial%deltaZ ) = ', sum(Interstitial%deltaZ )
+ write (0,*) 'sum(Interstitial%p_lay ) = ', sum(Interstitial%p_lay )
+ write (0,*) 'sum(Interstitial%p_lev ) = ', sum(Interstitial%p_lev )
+ write (0,*) 'sum(Interstitial%t_lay ) = ', sum(Interstitial%t_lay )
+ write (0,*) 'sum(Interstitial%t_lev ) = ', sum(Interstitial%t_lev )
+ write (0,*) 'sum(Interstitial%tv_lay ) = ', sum(Interstitial%tv_lay )
+ write (0,*) 'sum(Interstitial%cloud_overlap_param ) = ', sum(Interstitial%cloud_overlap_param)
+ write (0,*) 'sum(Interstitial%precip_overlap_param ) = ', sum(Interstitial%precip_overlap_param)
! Print arrays that are conditional on physics choices
if (Model%imp_physics == Model%imp_physics_gfdl .or. Model%imp_physics == Model%imp_physics_thompson) then
diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta
index b84caba5c..333fb55d6 100644
--- a/scm/src/GFS_typedefs.meta
+++ b/scm/src/GFS_typedefs.meta
@@ -2452,12 +2452,30 @@
units = count
dimensions = ()
type = integer
-[rrtmgp_cld_optics]
- standard_name = rrtmgp_cloud_optics_flag
- long_name = Flag to control which RRTMGP cloud-optics scheme (Model%rrtmgp_cld_optics)
+[doG_cldoptics]
+ standard_name = flag_to_calc_lw_cld_optics_using_RRTMG
+ long_name = logical flag to control cloud optics scheme.
units = flag
- dimensions = ()
- type = integer
+ dimensions = ()
+ type = logical
+[doGP_cldoptics_PADE]
+ standard_name = flag_to_calc_lw_cld_optics_using_RRTMGP_PADE
+ long_name = logical flag to control cloud optics scheme.
+ units = flag
+ dimensions = ()
+ type = logical
+[doGP_cldoptics_LUT]
+ standard_name = flag_to_calc_lw_cld_optics_using_RRTMGP_LUT
+ long_name = logical flag to control cloud optics scheme.
+ units = flag
+ dimensions = ()
+ type = logical
+[use_LW_jacobian]
+ standard_name = flag_to_calc_RRTMGP_LW_jacobian
+ long_name = logical flag to control RRTMGP LW calculation
+ units = flag
+ dimensions = ()
+ type = logical
[rrtmgp_nrghice]
standard_name = number_of_rrtmgp_ice_roughness
long_name = number of ice-roughness categories in RRTMGP calculation (Model%rrtmgp_nrghice)
@@ -4453,7 +4471,19 @@
units = flag
dimensions = ()
type = logical
-
+[uni_cld]
+ standard_name = flag_for_uni_cld
+ long_name = flag for uni_cld
+ units = flag
+ dimensions = ()
+ type = logical
+[lmfshal]
+ standard_name = flag_for_lmfshal
+ long_name = flag for lmfshal
+ units = flag
+ dimensions = ()
+ type = logical
+
########################################################################
[ccpp-arg-table]
name = GFS_grid_type
@@ -8796,6 +8826,13 @@
dimensions = (horizontal_dimension)
type = real
kind = kind_phys
+[sktp1r]
+ standard_name = surface_ground_temperature_for_radiation_at_previous_rad_time_step
+ long_name = surface ground temperature for radiation at previous radiation time step
+ units = K
+ dimensions = (horizontal_dimension)
+ type = real
+ kind = kind_phys
[tsurf]
standard_name = surface_skin_temperature_after_iteration
long_name = surface skin temperature after iteration
@@ -9149,7 +9186,13 @@
dimensions = (horizontal_dimension,vertical_dimension)
type = real
kind = kind_phys
- optional = F
+[deltaZ]
+ standard_name = layer_thickness
+ long_name = layer_thickness
+ units = m
+ dimensions = (horizontal_dimension,vertical_dimension)
+ type = real
+ kind = kind_phys
[tracer]
standard_name = chemical_tracers
long_name = chemical tracers
@@ -9157,132 +9200,32 @@
dimensions = (horizontal_dimension,vertical_dimension,number_of_tracers)
type = real
kind = kind_phys
- optional = F
-[hsw0]
- standard_name = RRTMGP_sw_heating_rate_clear_sky
- long_name = RRTMGP shortwave clear sky heating rate
- units = K s-1
- dimensions = (horizontal_dimension,vertical_dimension)
- type = real
- kind = kind_phys
- optional = T
-[hswc]
- standard_name = RRTMGP_sw_heating_rate_all_sky
- long_name = RRTMGP shortwave all sky heating rate
- units = K s-1
- dimensions = (horizontal_dimension,vertical_dimension)
- type = real
- kind = kind_phys
- optional = F
-[hswb]
- standard_name = RRTMGP_sw_heating_rate_spectral
- long_name = RRTMGP shortwave total sky heating rate (spectral)
- units = K s-1
- dimensions = (horizontal_dimension,vertical_dimension,number_of_sw_spectral_points_rrtmgp)
- type = real
- kind = kind_phys
- optional = T
-[hlw0]
- standard_name = RRTMGP_lw_heating_rate_clear_sky
- long_name = RRTMGP longwave clear sky heating rate
- units = K s-1
+[cloud_overlap_param]
+ standard_name = cloud_overlap_param
+ long_name = cloud overlap parameter
+ units = km
dimensions = (horizontal_dimension,vertical_dimension)
type = real
kind = kind_phys
- optional = T
-[hlwc]
- standard_name = RRTMGP_lw_heating_rate_all_sky
- long_name = RRTMGP longwave all sky heating rate
- units = K s-1
+[precip_overlap_param]
+ standard_name = precip_overlap_param
+ long_name = precipitation overlap parameter
+ units = km
dimensions = (horizontal_dimension,vertical_dimension)
type = real
kind = kind_phys
- optional = F
-[hlwb]
- standard_name = RRTMGP_lw_heating_rate_spectral
- long_name = RRTMGP longwave total sky heating rate (spectral)
- units = K s-1
- dimensions = (horizontal_dimension,vertical_dimension,number_of_lw_spectral_points_rrtmgp)
- type = real
- kind = kind_phys
- optional = T
[ipsdsw0]
standard_name = initial_permutation_seed_sw
long_name = initial seed for McICA SW
units = none
dimensions = ()
type = integer
- optional = F
[ipsdlw0]
standard_name = initial_permutation_seed_lw
long_name = initial seed for McICA LW
units = none
dimensions = ()
type = integer
- optional = F
-[cld_frac]
- standard_name = RRTMGP_total_cloud_fraction
- long_name = layer total cloud fraction
- units = frac
- dimensions = (horizontal_dimension,vertical_dimension)
- type = real
- kind = kind_phys
-[cld_lwp]
- standard_name = RRTMGP_cloud_liquid_water_path
- long_name = layer cloud liquid water path
- units = g m-2
- dimensions = (horizontal_dimension,vertical_dimension)
- type = real
- kind = kind_phys
-[cld_reliq]
- standard_name = RRTMGP_mean_effective_radius_for_liquid_cloud
- long_name = mean effective radius for liquid cloud
- units = micron
- dimensions = (horizontal_dimension,vertical_dimension)
- type = real
- kind = kind_phys
-[cld_iwp]
- standard_name = RRTMGP_cloud_ice_water_path
- long_name = layer cloud ice water path
- units = g m-2
- dimensions = (horizontal_dimension,vertical_dimension)
- type = real
- kind = kind_phys
-[cld_reice]
- standard_name = RRTMGP_mean_effective_radius_for_ice_cloud
- long_name = mean effective radius for ice cloud
- units = micron
- dimensions = (horizontal_dimension,vertical_dimension)
- type = real
- kind = kind_phys
-[cld_rwp]
- standard_name = RRTMGP_cloud_rain_water_path
- long_name = cloud rain water path
- units = g m-2
- dimensions = (horizontal_dimension,vertical_dimension)
- type = real
- kind = kind_phys
-[cld_rerain]
- standard_name = RRTMGP_mean_effective_radius_for_rain_drop
- long_name = mean effective radius for rain drop
- units = micron
- dimensions = (horizontal_dimension,vertical_dimension)
- type = real
- kind = kind_phys
-[cld_swp]
- standard_name = RRTMGP_cloud_snow_water_path
- long_name = cloud snow water path
- units = g m-2
- dimensions = (horizontal_dimension,vertical_dimension)
- type = real
- kind = kind_phys
-[cld_resnow]
- standard_name = RRTMGP_mean_effective_radius_for_snow_flake
- long_name = mean effective radius for snow flake
- units = micron
- dimensions = (horizontal_dimension,vertical_dimension)
- type = real
- kind = kind_phys
[cldtausw]
standard_name = RRTMGP_cloud_optical_depth_layers_at_0_55mu_band
long_name = approx .55mu band layer cloud optical depth
@@ -9329,7 +9272,27 @@
dimensions = (horizontal_dimension,vertical_dimension_plus_one)
type = real
kind = kind_phys
- optional = F
+[sktp1r]
+ standard_name = surface_skin_temperature_at_previous_time_step
+ long_name = surface skin temperature at previous time step
+ units = K
+ dimensions = (horizontal_dimension)
+ type = real
+ kind = kind_phys
+[fluxlwUP_jac]
+ standard_name = RRTMGP_jacobian_of_lw_flux_profile_upward
+ long_name = RRTMGP Jacobian upward longwave flux profile
+ units = W m-2 K-1
+ dimensions = (horizontal_dimension,vertical_dimension_plus_one)
+ type = real
+ kind = kind_phys
+[fluxlwDOWN_jac]
+ standard_name = RRTMGP_jacobian_of_lw_flux_profile_downward
+ long_name = RRTMGP Jacobian downward of longwave flux profile
+ units = W m-2 K-1
+ dimensions = (horizontal_dimension,vertical_dimension_plus_one)
+ type = real
+ kind = kind_phys
[fluxswUP_allsky]
standard_name = RRTMGP_sw_flux_profile_upward_allsky
long_name = RRTMGP upward shortwave all-sky flux profile
@@ -9439,110 +9402,127 @@
units = none
dimensions = (horizontal_dimension)
type = integer
- optional = F
[icseed_sw]
standard_name = seed_random_numbers_sw_for_RRTMGP
long_name = seed for random number generation for shortwave radiation
units = none
dimensions = (horizontal_dimension)
type = integer
- optional = F
+[precip_frac]
+ standard_name = precipitation_fraction_by_layer
+ long_name = precipitation fraction in each layer
+ units = frac
+ dimensions = (horizontal_dimension,vertical_dimension)
+ type = real
+ kind = kind_phys
[sw_gas_props]
standard_name = coefficients_for_sw_gas_optics
long_name = DDT containing spectral information for RRTMGP SW radiation scheme
units = DDT
dimensions = ()
type = ty_gas_optics_rrtmgp
- optional = F
[sw_cloud_props]
standard_name = coefficients_for_sw_cloud_optics
long_name = DDT containing spectral information for RRTMGP SW radiation scheme
units = DDT
dimensions = ()
type = ty_cloud_optics
- optional = F
[sw_optical_props_clrsky]
standard_name = shortwave_optical_properties_for_clear_sky
long_name = Fortran DDT containing RRTMGP optical properties
units = DDT
dimensions = ()
type = ty_optical_props_2str
- optional = F
[sw_optical_props_cloudsByBand]
standard_name = shortwave_optical_properties_for_cloudy_atmosphere_by_band
long_name = Fortran DDT containing RRTMGP optical properties
units = DDT
dimensions = ()
type = ty_optical_props_2str
+[sw_optical_props_precipByBand]
+ standard_name = shortwave_optical_properties_for_precipitation_by_band
+ long_name = Fortran DDT containing RRTMGP optical properties
+ units = DDT
+ dimensions = ()
+ type = ty_optical_props_2str
+[sw_optical_props_precip]
+ standard_name = shortwave_optical_properties_for_precipitation
+ long_name = Fortran DDT containing RRTMGP optical properties
+ units = DDT
+ dimensions = ()
+ type = ty_optical_props_2str
[sw_optical_props_clouds]
standard_name = shortwave_optical_properties_for_cloudy_atmosphere
long_name = Fortran DDT containing RRTMGP optical properties
units = DDT
dimensions = ()
type = ty_optical_props_2str
- optional = F
[sw_optical_props_aerosol]
standard_name = shortwave_optical_properties_for_aerosols
long_name = Fortran DDT containing RRTMGP optical properties
units = DDT
dimensions = ()
type = ty_optical_props_2str
- optional = F
[gas_concentrations]
standard_name = Gas_concentrations_for_RRTMGP_suite
long_name = DDT containing gas concentrations for RRTMGP radiation scheme
units = DDT
dimensions = ()
type = ty_gas_concs
- optional = F
[sources]
standard_name = longwave_source_function
long_name = Fortran DDT containing RRTMGP source functions
units = DDT
dimensions = ()
type = ty_source_func_lw
- optional = F
[lw_gas_props]
standard_name = coefficients_for_lw_gas_optics
long_name = DDT containing spectral information for RRTMGP LW radiation scheme
units = DDT
dimensions = ()
type = ty_gas_optics_rrtmgp
- optional = F
[lw_cloud_props]
standard_name = coefficients_for_lw_cloud_optics
long_name = DDT containing spectral information for RRTMGP LW radiation scheme
units = DDT
dimensions = ()
type = ty_cloud_optics
- optional = F
[lw_optical_props_clrsky]
standard_name = longwave_optical_properties_for_clear_sky
long_name = Fortran DDT containing RRTMGP optical properties
units = DDT
dimensions = ()
type = ty_optical_props_1scl
- optional = F
[lw_optical_props_clouds]
standard_name = longwave_optical_properties_for_cloudy_atmosphere
long_name = Fortran DDT containing RRTMGP optical properties
units = DDT
dimensions = ()
type = ty_optical_props_1scl
- optional = F
+[lw_optical_props_precip]
+ standard_name = longwave_optical_properties_for_precipitation
+ long_name = Fortran DDT containing RRTMGP optical properties
+ units = DDT
+ dimensions = ()
+ type = ty_optical_props_1scl
[lw_optical_props_cloudsByBand]
standard_name = longwave_optical_properties_for_cloudy_atmosphere_by_band
long_name = Fortran DDT containing RRTMGP optical properties
units = DDT
dimensions = ()
type = ty_optical_props_1scl
+[lw_optical_props_precipByBand]
+ standard_name = longwave_optical_properties_for_precipitation_by_band
+ long_name = Fortran DDT containing RRTMGP optical properties
+ units = DDT
+ dimensions = ()
+ type = ty_optical_props_1scl
[lw_optical_props_aerosol]
standard_name = longwave_optical_properties_for_aerosols
long_name = Fortran DDT containing RRTMGP optical properties
units = DDT
dimensions = ()
type = ty_optical_props_1scl
- optional = F
[sfc_emiss_byband]
standard_name = surface_emissivity_in_each_RRTMGP_LW_band
long_name = surface emissivity in each RRTMGP LW band
@@ -9606,7 +9586,7 @@
dimensions = (number_of_active_gases_used_by_RRTMGP)
type = character
kind = len=128
-
+
########################################################################
[ccpp-arg-table]
name = GFS_data_type
diff --git a/scm/src/default_namelists.py b/scm/src/default_namelists.py
index 7097c4ac7..deaa44142 100644
--- a/scm/src/default_namelists.py
+++ b/scm/src/default_namelists.py
@@ -4,6 +4,8 @@
"SCM_GFS_v16beta":"input_GFS_v16beta.nml",
"SCM_GFS_v15p2_no_nsst":"input_GFS_v15p2.nml",
"SCM_GFS_v16beta_no_nsst":"input_GFS_v16beta.nml",
+ "SCM_GFS_v15p2_RRTMGP":"input_GFS_v15p2_RRTMGP.nml",
+ "SCM_GFS_v16beta_RRTMGP":"input_GFS_v16beta_RRTMGP.nml",
"SCM_GFS_v15p2_noahmp":"input_GFS_v15p2_noahmp.nml",
"SCM_GFS_v15p2_MYJ":"input_GFS_v15p2_MYJ.nml",
"SCM_GFS_v15p2_FA":"input_GFS_v15p2_FA.nml",
diff --git a/scm/src/default_tracers.py b/scm/src/default_tracers.py
index 8bbff40af..dadef830d 100644
--- a/scm/src/default_tracers.py
+++ b/scm/src/default_tracers.py
@@ -1,5 +1,7 @@
default_tracers = {"SCM_GFS_v15p2":"tracers_gfdlmp.txt",
"SCM_GFS_v16beta":"tracers_gfdlmp.txt",
+ "SCM_GFS_v15p2_RRTMGP":"tracers_gfdlmp.txt",
+ "SCM_GFS_v16beta_RRTMGP":"tracers_gfdlmp.txt",
"SCM_csawmg":"tracers_csawmg.txt",
"SCM_GFS_v15p2_no_nsst":"tracers_gfdlmp.txt",
"SCM_GFS_v16beta_no_nsst":"tracers_gfdlmp.txt",
diff --git a/scm/src/gmtb_scm_physical_constants.F90 b/scm/src/gmtb_scm_physical_constants.F90
index f6d85a265..86435a833 100644
--- a/scm/src/gmtb_scm_physical_constants.F90
+++ b/scm/src/gmtb_scm_physical_constants.F90
@@ -26,6 +26,7 @@ module gmtb_scm_physical_constants
real(kind=dp),parameter:: con_t0c =2.7315e+2
real(kind=dp),parameter:: con_ttp =2.7316e+2
real(kind=dp),parameter:: con_epsq =1.0E-12_dp
+ real(kind=dp),parameter:: con_epsqs =1.0E-10_dp
real(kind=dp),parameter:: con_rocp =con_rd/con_cp
real(kind=dp),parameter:: con_fvirt =con_rv/con_rd - 1
diff --git a/scm/src/gmtb_scm_physical_constants.meta b/scm/src/gmtb_scm_physical_constants.meta
index f69c3f30a..dec3b3c95 100644
--- a/scm/src/gmtb_scm_physical_constants.meta
+++ b/scm/src/gmtb_scm_physical_constants.meta
@@ -36,6 +36,13 @@
dimensions = ()
type = real
kind = kind_phys
+[con_epsqs]
+ standard_name = minimum_value_of_saturation_mixing_ratio
+ long_name = floor value for saturation mixing ratio
+ units = kg kg-1
+ dimensions = ()
+ type = real
+ kind = kind_phys
[con_epsm1]
standard_name = ratio_of_dry_air_to_water_vapor_gas_constants_minus_one
long_name = (rd/rv) - 1