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