diff --git a/.gitignore b/.gitignore
index 00641993b..bf5d7035f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,4 +8,3 @@ non-tracked_files/
scm/data/physics_input_data/qr_acr*.dat
scm/data/physics_input_data/freezeH2O.dat
scm/data/physics_input_data/CCN_ACTIVATE.BIN
-
diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py
index 366706f3b..1e679be24 100755
--- a/ccpp/config/ccpp_prebuild_config.py
+++ b/ccpp/config/ccpp_prebuild_config.py
@@ -9,15 +9,22 @@
HOST_MODEL_IDENTIFIER = "SCM"
-# Add all files with metadata tables on the host model side,
-# relative to basedir = top-level directory of host model
+# Add all files with metadata tables on the host model side and in CCPP,
+# relative to basedir = top-level directory of host model. This includes
+# kind and type definitions used in CCPP physics.
VARIABLE_DEFINITION_FILES = [
'ccpp/physics/physics/machine.F',
'ccpp/physics/physics/radsw_param.f',
'ccpp/physics/physics/radlw_param.f',
'scm/src/GFS_typedefs.F90',
+ 'scm/src/gmtb_scm_kinds.F90',
'scm/src/gmtb_scm_type_defs.F90',
- 'scm/src/gmtb_scm_physical_constants.F90'
+ 'scm/src/gmtb_scm_physical_constants.F90',
+ 'ccpp/physics/physics/rte-rrtmgp/rrtmgp/mo_gas_optics_rrtmgp.F90',
+ 'ccpp/physics/physics/rte-rrtmgp/rrtmgp/mo_gas_concentrations.F90',
+ 'ccpp/physics/physics/rte-rrtmgp/rte/mo_optical_props.F90',
+ 'ccpp/physics/physics/rte-rrtmgp/extensions/cloud_optics/mo_cloud_optics.F90',
+ 'ccpp/physics/physics/rte-rrtmgp/rte/mo_source_functions.F90'
]
TYPEDEFS_NEW_METADATA = {
@@ -55,6 +62,27 @@
'gmtb_scm_type_defs' : '',
'physics_type' : 'physics',
},
+ 'mo_gas_concentrations' : {
+ 'ty_gas_concs' : '',
+ 'mo_gas_concentrations' : '',
+ },
+ 'mo_gas_optics_rrtmgp' : {
+ 'ty_gas_optics_rrtmgp' : '',
+ 'mo_gas_optics_rrtmgp' : '',
+ },
+ 'mo_optical_props' : {
+ 'ty_optical_props_1scl' : '',
+ 'ty_optical_props_2str' : '',
+ 'mo_optical_props' : '',
+ },
+ 'mo_cloud_optics' : {
+ 'ty_cloud_optics' : '',
+ 'mo_cloud_optics' : '',
+ },
+ 'mo_source_functions' : {
+ 'ty_source_func_lw' : '',
+ 'mo_source_functions' : '',
+ },
}
# Add all physics scheme dependencies relative to basedir - note that the CCPP
@@ -142,9 +170,37 @@
'ccpp/physics/physics/namelist_soilveg_ruc.F90',
'ccpp/physics/physics/set_soilveg_ruc.F90',
'ccpp/physics/physics/module_soil_pre.F90',
+ # RRTMGP
+ 'ccpp/physics/physics/rte-rrtmgp/rrtmgp/mo_gas_concentrations.F90',
+ 'ccpp/physics/physics/rte-rrtmgp/rrtmgp/mo_gas_optics.F90',
+ 'ccpp/physics/physics/rte-rrtmgp/rrtmgp/mo_gas_optics_rrtmgp.F90',
+ 'ccpp/physics/physics/rte-rrtmgp/rrtmgp/mo_rrtmgp_constants.F90',
+ 'ccpp/physics/physics/rte-rrtmgp/rrtmgp/mo_rrtmgp_util_reorder.F90',
+ 'ccpp/physics/physics/rte-rrtmgp/rrtmgp/mo_rrtmgp_util_string.F90',
+ 'ccpp/physics/physics/rte-rrtmgp/rrtmgp/kernels/mo_gas_optics_kernels.F90',
+ 'ccpp/physics/physics/rte-rrtmgp/rrtmgp/kernels/mo_rrtmgp_util_reorder_kernels.F90',
+ 'ccpp/physics/physics/rte-rrtmgp/rte/mo_fluxes.F90',
+ 'ccpp/physics/physics/rte-rrtmgp/rte/mo_rte_util_array.F90',
+ 'ccpp/physics/physics/rte-rrtmgp/rte/mo_optical_props.F90',
+ '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_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',
+ 'ccpp/physics/physics/rte-rrtmgp/rte/kernels/mo_rte_solver_kernels.F90',
+ 'ccpp/physics/physics/rte-rrtmgp/extensions/mo_compute_bc.F90',
+ 'ccpp/physics/physics/rte-rrtmgp/extensions/mo_fluxes_byband.F90',
+ 'ccpp/physics/physics/rte-rrtmgp/extensions/mo_fluxes_byband_kernels.F90',
+ 'ccpp/physics/physics/rte-rrtmgp/extensions/mo_fluxes_bygpoint.F90',
+ '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',
# derived data type definitions
'scm/src/GFS_typedefs.F90',
'scm/src/gmtb_scm_kinds.F90',
+ 'scm/src/gmtb_scm_physical_constants.F90',
'scm/src/gmtb_scm_type_defs.F90',
]
@@ -233,12 +289,37 @@
'ccpp/physics/physics/sfc_sice.f' : ['physics'],
'ccpp/physics/physics/mp_fer_hires.F90' : ['physics'],
'ccpp/physics/physics/gmtb_scm_sfc_flux_spec.F90' : ['physics'],
+ # RRTMGP
+ 'ccpp/physics/physics/rrtmg_lw_cloud_optics.F90' : ['physics'],
+ 'ccpp/physics/physics/rrtmg_sw_cloud_optics.F90' : ['physics'],
+ 'ccpp/physics/physics/rrtmgp_aux.F90' : ['physics'],
+ 'ccpp/physics/physics/rrtmgp_lw_gas_optics.F90' : ['physics'],
+ 'ccpp/physics/physics/rrtmgp_lw_cloud_optics.F90' : ['physics'],
+ 'ccpp/physics/physics/rrtmgp_sw_gas_optics.F90' : ['physics'],
+ 'ccpp/physics/physics/rrtmgp_sw_cloud_optics.F90' : ['physics'],
+ 'ccpp/physics/physics/rrtmgp_sw_aerosol_optics.F90' : ['physics'],
+ 'ccpp/physics/physics/rrtmgp_lw_rte.F90' : ['physics'],
+ 'ccpp/physics/physics/rrtmgp_lw_cloud_sampling.F90' : ['physics'],
+ 'ccpp/physics/physics/rrtmgp_sw_rte.F90' : ['physics'],
+ 'ccpp/physics/physics/rrtmgp_sw_cloud_sampling.F90' : ['physics'],
+ 'ccpp/physics/physics/rrtmgp_lw_aerosol_optics.F90' : ['physics'],
+ 'ccpp/physics/physics/GFS_rrtmgp_setup.F90' : ['physics'],
+ 'ccpp/physics/physics/GFS_rrtmgp_pre.F90' : ['physics'],
+ 'ccpp/physics/physics/rrtmgp_lw_pre.F90' : ['physics'],
+ 'ccpp/physics/physics/GFS_rrtmgp_sw_pre.F90' : ['physics'],
+ 'ccpp/physics/physics/GFS_rrtmgp_lw_post.F90' : ['physics'],
+ 'ccpp/physics/physics/GFS_rrtmgp_sw_post.F90' : ['physics'],
}
# Default build dir, relative to current working directory,
# if not specified as command-line argument
DEFAULT_BUILD_DIR = 'scm/bin'
+# Auto-generated makefile/cmakefile snippets that contain all type definitions
+TYPEDEFS_MAKEFILE = 'ccpp/physics/CCPP_TYPEDEFS.mk'
+TYPEDEFS_CMAKEFILE = 'ccpp/physics/CCPP_TYPEDEFS.cmake'
+TYPEDEFS_SOURCEFILE = 'ccpp/physics/CCPP_TYPEDEFS.sh'
+
# Auto-generated makefile/cmakefile snippets that contain all schemes
SCHEMES_MAKEFILE = 'ccpp/physics/CCPP_SCHEMES.mk'
SCHEMES_CMAKEFILE = 'ccpp/physics/CCPP_SCHEMES.cmake'
@@ -328,6 +409,37 @@
'rime_factor',
],
},
+ 'rrtmgp_sw_rte' : {
+ 'rrtmgp_sw_rte_run' : [
+ 'components_of_surface_downward_shortwave_fluxes',
+ 'sw_fluxes_sfc',
+ 'sw_fluxes_toa',
+ ],
+ },
+ 'GFS_rrtmgp_sw_post' : {
+ 'GFS_rrtmgp_sw_post_run' : [
+ 'components_of_surface_downward_shortwave_fluxes',
+ 'sw_fluxes_sfc',
+ 'sw_fluxes_toa',
+ ],
+ },
+ 'rrtmgp_lw_rte' : {
+ 'rrtmgp_lw_rte_run' : [
+ 'lw_fluxes_sfc',
+ 'lw_fluxes_toa',
+ ],
+ },
+ 'GFS_rrtmgp_lw_post' : {
+ 'GFS_rrtmgp_lw_post_run' : [
+ 'lw_fluxes_sfc',
+ 'lw_fluxes_toa',
+ ],
+ },
+ 'GFS_rrtmgp_post' : {
+ 'GFS_rrtmgp_post_run' : [
+ 'components_of_surface_downward_shortwave_fluxes',
+ ],
+ },
#'subroutine_name_1' : 'all',
#'subroutine_name_2' : 'none',
#'subroutine_name_2' : [ 'var1', 'var3'],
diff --git a/ccpp/framework b/ccpp/framework
index f0ae2ae2f..3cd0f1eab 160000
--- a/ccpp/framework
+++ b/ccpp/framework
@@ -1 +1 @@
-Subproject commit f0ae2ae2fc268885555f5e473206594cbc1598e3
+Subproject commit 3cd0f1eab74cd838e93b7e24c87f1d96eb4fe0c4
diff --git a/ccpp/physics b/ccpp/physics
index 82012f608..c075ee662 160000
--- a/ccpp/physics
+++ b/ccpp/physics
@@ -1 +1 @@
-Subproject commit 82012f60829997e18f7bca28e546f8b426e00764
+Subproject commit c075ee662efea0cad4a5e4eb4264062bcc279730
diff --git a/ccpp/physics_namelists/input_GFS_v15p2_RRTMGP.nml b/ccpp/physics_namelists/input_GFS_v15p2_RRTMGP.nml
new file mode 100644
index 000000000..708829108
--- /dev/null
+++ b/ccpp/physics_namelists/input_GFS_v15p2_RRTMGP.nml
@@ -0,0 +1,125 @@
+&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'
+ rrtmgp_cld_optics = 0
+ 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/suites/suite_SCM_GFS_v15p2_RRTMGP.xml b/ccpp/suites/suite_SCM_GFS_v15p2_RRTMGP.xml
new file mode 100644
index 000000000..24f5565eb
--- /dev/null
+++ b/ccpp/suites/suite_SCM_GFS_v15p2_RRTMGP.xml
@@ -0,0 +1,88 @@
+
+
+
+
+
+ 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_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
+ hedmf
+ GFS_PBL_generic_post
+ GFS_GWD_generic_pre
+ cires_ugwp
+ cires_ugwp_post
+ GFS_GWD_generic_post
+ rayleigh_damp
+ GFS_suite_stateout_update
+ ozphys_2015
+ h2ophys
+ GFS_DCNV_generic_pre
+ get_phi_fv3
+ GFS_suite_interstitial_3
+ 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
+
+
+
diff --git a/ccpp/suites/suite_SCM_GFS_v15p2_RRTMGP_ps.xml b/ccpp/suites/suite_SCM_GFS_v15p2_RRTMGP_ps.xml
new file mode 100644
index 000000000..704ae22d3
--- /dev/null
+++ b/ccpp/suites/suite_SCM_GFS_v15p2_RRTMGP_ps.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+ 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_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
+ hedmf
+ GFS_PBL_generic_post
+ GFS_GWD_generic_pre
+ cires_ugwp
+ cires_ugwp_post
+ GFS_GWD_generic_post
+ rayleigh_damp
+ GFS_suite_stateout_update
+ ozphys_2015
+ h2ophys
+ GFS_DCNV_generic_pre
+ get_phi_fv3
+ GFS_suite_interstitial_3
+ 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
+
+
+
diff --git a/scm/etc/scripts/plot_configs/twpice_RRTMG_vs_P.ini b/scm/etc/scripts/plot_configs/twpice_RRTMG_vs_P.ini
new file mode 100644
index 000000000..ed14edf0d
--- /dev/null
+++ b/scm/etc/scripts/plot_configs/twpice_RRTMG_vs_P.ini
@@ -0,0 +1,57 @@
+gmtb_scm_datasets = output_twpice_SCM_GFS_v15p2/output.nc, output_twpice_SCM_GFS_v15p2_RRTMGP_input_GFS_v15p2_RRTMGP/output.nc,
+gmtb_scm_datasets_labels = GFSv15.2, GFSv15.2P
+plot_dir = plots_twpice_g_vs_p/
+obs_file = ../data/raw_case_input/twp180iopsndgvarana_v2.1_C3.c1.20060117.000000.cdf
+obs_compare = True
+plot_ind_datasets = False
+time_series_resample = True
+
+[time_slices]
+ [[active]]
+ start = 2006, 1, 20, 0
+ end = 2006, 1, 25, 12
+
+[time_snapshots]
+
+[plots]
+ [[profiles_mean]]
+ vars = qc, qv, T, dT_dt_PBL, dT_dt_conv, dT_dt_micro, dT_dt_lwrad, dT_dt_swrad
+ vars_labels = 'cloud water mixing ratio ($g$ $kg^{-1}$)', 'specific humidity ($g$ $kg^{-1}$)', 'T (K)', 'PBL tendency (K/day)', 'conv. tendency (K/day)', 'microphysics tendency (K/day)', 'LW tendency (K/day)', 'SW tendency (K/day)'
+ vert_axis = pres_l
+ vert_axis_label = 'average pressure (Pa)'
+ y_inverted = True
+ y_log = False
+ y_min_option = min #min, max, val (if val, add y_min = float value)
+ y_max_option = max #min, max, val (if val, add y_max = float value)
+ conversion_factor = 1000.0, 1000.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0
+
+ [[profiles_mean_multi]]
+ [[[T_forcing]]]
+ vars = T_force_tend, dT_dt_PBL, dT_dt_conv, dT_dt_micro, dT_dt_lwrad, dT_dt_swrad
+ vars_labels = 'force', 'PBL', 'Conv', 'MP', 'LW', 'SW'
+ x_label = 'K/day'
+ [[[conv_tendencies]]]
+ vars = dT_dt_deepconv, dT_dt_shalconv
+ vars_labels = 'deep', 'shallow'
+ x_label = 'K/day'
+
+ [[profiles_instant]]
+
+ [[time_series]]
+ vars = 'pres_s','lhf','shf','rain'
+ vars_labels = 'surface pressure (Pa)','latent heat flux ($W$ $m^{-2}$)','sensible heat flux ($W$ $m^{-2}$)','surface rainfall rate ($mm$ $hr{-1}$)'
+
+ [[contours]]
+ vars = qv,
+ vars_labels = 'Water Vapor ($g$ $kg^{-1}$)',
+ vert_axis = pres_l
+ vert_axis_label = 'p (Pa)'
+ y_inverted = True
+ y_log = False
+ y_min_option = val #min, max, val (if val, add y_min = float value)
+ y_min = 10000.0
+ y_max_option = val #min, max, val (if val, add y_max = float value)
+ y_max = 100000.0
+ x_ticks_num = 10
+ y_ticks_num = 10
+ conversion_factor = 1000.0,
diff --git a/scm/src/CMakeLists.txt b/scm/src/CMakeLists.txt
index 75fa57cb5..0a9698e28 100644
--- a/scm/src/CMakeLists.txt
+++ b/scm/src/CMakeLists.txt
@@ -297,9 +297,6 @@ SET(scm_source_files gmtb_scm.F90
gmtb_scm_forcing.F90
gmtb_scm_time_integration.F90
gmtb_scm_output.F90
- gmtb_scm_kinds.F90
- gmtb_scm_physical_constants.F90
- gmtb_scm_type_defs.F90
)
if(STATIC)
diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90
index bdd0bc819..5cf573f03 100644
--- a/scm/src/GFS_typedefs.F90
+++ b/scm/src/GFS_typedefs.F90
@@ -3,8 +3,13 @@
module GFS_typedefs
use machine, only: kind_phys
- use module_radlw_parameters, only: sfcflw_type, topflw_type, NBDLW
- use module_radsw_parameters, only: cmpfsw_type, sfcfsw_type, topfsw_type, NBDSW
+ use module_radlw_parameters, only: sfcflw_type, topflw_type, NBDLW, proflw_type
+ use module_radsw_parameters, only: cmpfsw_type, sfcfsw_type, topfsw_type, NBDSW, profsw_type
+ use mo_gas_optics_rrtmgp, only: ty_gas_optics_rrtmgp
+ use mo_optical_props, only: ty_optical_props_1scl,ty_optical_props_2str
+ use mo_cloud_optics, only: ty_cloud_optics
+ use mo_gas_concentrations, only: ty_gas_concs
+ use mo_source_functions, only: ty_source_func_lw
implicit none
@@ -620,7 +625,27 @@ module GFS_typedefs
logical :: norad_precip !< radiation precip flag for Ferrier/Moorthi
logical :: lwhtr !< flag to output lw heating rate (Radtend%lwhc)
logical :: swhtr !< flag to output sw heating rate (Radtend%swhc)
-
+ ! RRTMGP
+ logical :: do_RRTMGP !< Use RRTMGP
+ character(len=128) :: active_gases !< Character list of active gases used in RRTMGP
+ integer :: nGases !< Number of active gases
+ character(len=128) :: rrtmgp_root !< Directory of rte+rrtmgp source code
+ character(len=128) :: lw_file_gas !< RRTMGP K-distribution file, coefficients to compute optics for gaseous atmosphere
+ character(len=128) :: lw_file_clouds !< RRTMGP file containing coefficients used to compute clouds optical properties
+ integer :: rrtmgp_nBandsLW !< Number of RRTMGP LW bands.
+ integer :: rrtmgp_nGptsLW !< Number of RRTMGP LW spectral points.
+ character(len=128) :: sw_file_gas !< RRTMGP K-distribution file, coefficients to compute optics for gaseous atmosphere
+ 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)
+ 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
!--- microphysical switch
integer :: ncld !< choice of cloud scheme
!--- new microphysical switch
@@ -653,7 +678,6 @@ module GFS_typedefs
real(kind=kind_phys) :: mg_alf !< tuning factor for alphs in MG macrophysics
real(kind=kind_phys) :: mg_qcmin(2) !< min liquid and ice mixing ratio in Mg macro clouds
character(len=16) :: mg_precip_frac_method ! type of precipitation fraction method
-
real(kind=kind_phys) :: tf
real(kind=kind_phys) :: tcr
real(kind=kind_phys) :: tcrf
@@ -685,10 +709,10 @@ module GFS_typedefs
!--- GFDL microphysical paramters
logical :: lgfdlmprad !< flag for GFDL mp scheme and radiation consistency
-
+
!--- Thompson,GFDL mp parameter
logical :: lrefres !< flag for radar reflectivity in restart file
-
+
!--- land/surface model parameters
integer :: lsm !< flag for land surface model lsm=1 for noah lsm
integer :: lsm_noah=1 !< flag for NOAH land surface model
@@ -1008,8 +1032,8 @@ module GFS_typedefs
logical :: hydrostatic !< flag whether this is a hydrostatic or non-hydrostatic run
integer :: jdat(1:8) !< current forecast date and time
!< (yr, mon, day, t-zone, hr, min, sec, mil-sec)
- real(kind=kind_phys) :: julian !< current forecast julian date
- integer :: yearlen !< current length of the year
+ real(kind=kind_phys) :: julian !< julian day using midnight of January 1 of forecast year as initial epoch
+ integer :: yearlen !< length of the current forecast year in days
!
logical :: iccn !< using IN CCN forcing for MG2/3
real(kind=kind_phys) :: sec !< seconds since model initialization
@@ -1406,7 +1430,6 @@ module GFS_typedefs
real (kind=kind_phys), pointer :: dwn_mf (:,:) => null() !< instantaneous convective downdraft mass flux
real (kind=kind_phys), pointer :: det_mf (:,:) => null() !< instantaneous convective detrainment mass flux
real (kind=kind_phys), pointer :: cldcov (:,:) => null() !< instantaneous 3D cloud fraction
-
!--- F-A MP scheme
real (kind=kind_phys), pointer :: TRAIN (:,:) => null() !< accumulated stratiform T tendency (K s-1)
@@ -1829,6 +1852,69 @@ module GFS_typedefs
real (kind=kind_phys), pointer :: dudt_ogw(:,:) => null() !< daily aver u-wind tend due to orographic gravity wave drag
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
+
!-- HWRF physics: dry mixing ratios
real (kind=kind_phys), pointer :: qv_r(:,:) => null() !<
real (kind=kind_phys), pointer :: qc_r(:,:) => null() !<
@@ -2660,6 +2746,26 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
logical :: norad_precip = .false. !< radiation precip flag for Ferrier/Moorthi
logical :: lwhtr = .true. !< flag to output lw heating rate (Radtend%lwhc)
logical :: swhtr = .true. !< flag to output sw heating rate (Radtend%swhc)
+ ! RRTMGP
+ logical :: do_RRTMGP = .false. !< Use RRTMGP?
+ character(len=128) :: active_gases = '' !< Character list of active gases used in RRTMGP
+ integer :: nGases = 0 !< Number of active gases
+ character(len=128) :: rrtmgp_root = '' !< Directory of rte+rrtmgp source code
+ character(len=128) :: lw_file_gas = '' !< RRTMGP K-distribution file, coefficients to compute optics for gaseous atmosphere
+ character(len=128) :: lw_file_clouds = '' !< RRTMGP file containing coefficients used to compute clouds optical properties
+ integer :: rrtmgp_nBandsLW = 16 !< Number of RRTMGP LW bands.
+ integer :: rrtmgp_nGptsLW = 256 !< Number of RRTMGP LW spectral points.
+ character(len=128) :: sw_file_gas = '' !< RRTMGP K-distribution file, coefficients to compute optics for gaseous atmosphere
+ 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)
+ 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.
!--- Z-C microphysical parameters
integer :: ncld = 1 !< choice of cloud scheme
@@ -2988,6 +3094,12 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
fhswr, fhlwr, levr, nfxr, aero_in, iflip, isol, ico2, ialb, &
isot, iems, iaer, icliq_sw, iovr_sw, iovr_lw, ictm, isubc_sw,&
isubc_lw, crick_proof, ccnorm, lwhtr, swhtr, &
+ ! --- RRTMGP
+ 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, &
! IN CCN forcing
iccn, &
!--- microphysical parameterizations
@@ -3213,6 +3325,23 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
" of the lw/sw heating rates to be turned on (namelist options lwhtr and swhtr)"
stop
end if
+ ! RRTMGP
+ Model%rrtmgp_nrghice = rrtmgp_nrghice
+ Model%rrtmgp_nGauss_ang = rrtmgp_nGauss_ang
+ Model%do_RRTMGP = do_RRTMGP
+ Model%do_GPsw_Glw = do_GPsw_Glw
+ Model%active_gases = active_gases
+ Model%ngases = nGases
+ Model%rrtmgp_root = rrtmgp_root
+ Model%lw_file_gas = lw_file_gas
+ Model%lw_file_clouds = lw_file_clouds
+ Model%rrtmgp_nBandsLW = rrtmgp_nBandsLW
+ Model%rrtmgp_nGptsLW = rrtmgp_nGptsLW
+ Model%sw_file_gas = sw_file_gas
+ Model%sw_file_clouds = sw_file_clouds
+ Model%rrtmgp_nBandsSW = rrtmgp_nBandsSW
+ Model%rrtmgp_nGptsSW = rrtmgp_nGptsSW
+ Model%rrtmgp_cld_optics = RRTMGP_CLD_OPTICS
!--- microphysical switch
Model%ncld = ncld
@@ -3331,10 +3460,10 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
Model%do_aw = do_aw
Model%cs_parm = cs_parm
Model%do_shoc = do_shoc
- if (Model%do_shoc) then
- print *, "Error, update of SHOC from May 22 2019 not yet in CCPP"
- stop
- end if
+! if (Model%do_shoc) then
+! print *, "Error, update of SHOC from May 22 2019 not yet in CCPP"
+! stop
+! end if
Model%shoc_parm = shoc_parm
Model%shocaftcnv = shocaftcnv
Model%shoc_cld = shoc_cld
@@ -3666,7 +3795,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
' rhc_max=',Model%rhcmax
!--- set nrcm
- Model%nrcm = 2
+ Model%nrcm = 2
!--- cal_pre
if (Model%cal_pre) then
@@ -4186,6 +4315,23 @@ subroutine control_print(Model)
print *, ' norad_precip : ', Model%norad_precip
print *, ' lwhtr : ', Model%lwhtr
print *, ' swhtr : ', Model%swhtr
+ if (Model%do_RRTMGP) then
+ print *, ' rrtmgp_nrghice : ', Model%rrtmgp_nrghice
+ print *, ' rrtmgp_nrghice : ', Model%rrtmgp_nrghice
+ print *, ' do_GPsw_Glw : ', Model%do_GPsw_Glw
+ print *, ' active_gases : ', Model%active_gases
+ print *, ' nGases : ', Model%ngases
+ print *, ' rrtmgp_root : ', Model%rrtmgp_root
+ print *, ' lw_file_gas : ', Model%lw_file_gas
+ print *, ' lw_file_clouds : ', Model%lw_file_clouds
+ print *, ' rrtmgp_nBandsLW : ', Model%rrtmgp_nBandsLW
+ print *, ' rrtmgp_nGptsLW : ', Model%rrtmgp_nGptsLW
+ print *, ' sw_file_gas : ', Model%sw_file_gas
+ 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
+ endif
print *, ' '
print *, 'microphysical switch'
print *, ' ncld : ', Model%ncld
@@ -5163,7 +5309,7 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center)
Diag%sppt_wts = zero
Diag%shum_wts = zero
Diag%zmtnblck = zero
-
+
if (Model%imp_physics == Model%imp_physics_fer_hires) then
Diag%TRAIN = zero
end if
@@ -5618,6 +5764,54 @@ subroutine interstitial_create (Interstitial, IM, Model)
allocate (Interstitial%zorl_land (IM))
allocate (Interstitial%zorl_ocean (IM))
allocate (Interstitial%zt1d (IM))
+ ! RRTMGP
+ 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))
+ end if
! CIRES UGWP v0
allocate (Interstitial%gw_dudt (IM,Model%levs))
allocate (Interstitial%gw_dvdt (IM,Model%levs))
@@ -5686,6 +5880,7 @@ subroutine interstitial_create (Interstitial, IM, Model)
allocate (Interstitial%t2mmp (IM))
allocate (Interstitial%q2mp (IM))
end if
+
!
! Set components that do not change
Interstitial%frain = Model%dtf/Model%dtp
@@ -5850,6 +6045,7 @@ subroutine interstitial_setup_tracers(Interstitial, Model)
do n=2,Model%ntrac
if ( n /= Model%ntcw .and. n /= Model%ntiw .and. n /= Model%ntclamt .and. &
n /= Model%ntrw .and. n /= Model%ntsw .and. n /= Model%ntrnc .and. &
+! n /= Model%ntlnc .and. n /= Model%ntinc .and. &
n /= Model%ntsnc .and. n /= Model%ntgl .and. n /= Model%ntgnc) then
tracers = tracers + 1
if (Model%ntke == n ) then
@@ -5934,6 +6130,51 @@ subroutine interstitial_rad_reset (Interstitial, Model)
end if
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
+ end if
+ !
end subroutine interstitial_rad_reset
subroutine interstitial_phys_reset (Interstitial, Model)
@@ -6504,6 +6745,41 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno)
write (0,*) 'sum(Interstitial%dudt_ogw ) = ', sum(Interstitial%dudt_ogw )
write (0,*) 'sum(Interstitial%dudt_tms ) = ', sum(Interstitial%dudt_tms )
!
+ ! 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 )
+
! 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
write (0,*) 'Interstitial_print: values specific to GFDL/Thompson microphysics'
diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta
index 8ceabeb94..0b4a6c2d9 100644
--- a/scm/src/GFS_typedefs.meta
+++ b/scm/src/GFS_typedefs.meta
@@ -1353,6 +1353,34 @@
dimensions = (horizontal_dimension)
type = real
kind = kind_phys
+[alvsf]
+ standard_name = mean_vis_albedo_with_strong_cosz_dependency
+ long_name = mean vis albedo with strong cosz dependency
+ units = frac
+ dimensions = (horizontal_dimension)
+ type = real
+ kind = kind_phys
+[alnsf]
+ standard_name = mean_nir_albedo_with_strong_cosz_dependency
+ long_name = mean nir albedo with strong cosz dependency
+ units = frac
+ dimensions = (horizontal_dimension)
+ type = real
+ kind = kind_phys
+[facsf]
+ standard_name =fractional_coverage_with_strong_cosz_dependency
+ long_name = fractional coverage with strong cosz dependency
+ units = frac
+ dimensions = (horizontal_dimension)
+ type = real
+ kind = kind_phys
+[facwf]
+ standard_name = fractional_coverage_with_weak_cosz_dependency
+ long_name = fractional coverage with weak cosz dependency
+ units = frac
+ dimensions = (horizontal_dimension)
+ type = real
+ kind = kind_phys
########################################################################
[ccpp-arg-table]
@@ -2247,6 +2275,108 @@
units = flag
dimensions = ()
type = logical
+[active_gases]
+ standard_name = active_gases_used_by_RRTMGP
+ long_name = active gases used by RRTMGP
+ units = none
+ dimensions = ()
+ type = character
+ kind = len=128
+[nGases]
+ standard_name = number_of_active_gases_used_by_RRTMGP
+ long_name = number of gases available used by RRTMGP (Model%nGases)
+ units = count
+ dimensions = ()
+ type = integer
+[rrtmgp_root]
+ standard_name = directory_for_rte_rrtmgp_source_code
+ long_name = directory for rte+rrtmgp source code (Model%rrtmgp_root)
+ units = none
+ dimensions = ()
+ type = character
+ kind = len=128
+[lw_file_gas]
+ standard_name = rrtmgp_kdistribution_lw
+ long_name = file containing RRTMGP LW k-distribution (Model%lw_file_gas)
+ units = none
+ dimensions = ()
+ type = character
+ kind = len=128
+[lw_file_clouds]
+ standard_name = rrtmgp_coeff_lw_cloud_optics
+ long_name = file containing coefficients for RRTMGP LW cloud optics (Model%lw_file_clouds)
+ units = none
+ dimensions = ()
+ type = character
+ kind = len=128
+[rrtmgp_nBandsLW]
+ standard_name = number_of_lw_bands_rrtmgp
+ long_name = number of lw bands used in RRTMGP (Model%rrtmgp_nBandsLW)
+ units = count
+ dimensions = ()
+ type = integer
+[rrtmgp_nGptsLW]
+ standard_name = number_of_lw_spectral_points_rrtmgp
+ long_name = number of spectral points in RRTMGP LW calculation (model%rrtmgp_nGptsLW)
+ units = count
+ dimensions = ()
+ type = integer
+[sw_file_gas]
+ standard_name = rrtmgp_kdistribution_sw
+ long_name = file containing RRTMGP SW k-distribution (Model%sw_file_gas)
+ units = none
+ dimensions = ()
+ type = character
+ kind = len=128
+[sw_file_clouds]
+ standard_name = rrtmgp_coeff_sw_cloud_optics
+ long_name = file containing coefficients for RRTMGP SW cloud optics (Model%sw_file_clouds)
+ units = none
+ dimensions = ()
+ type = character
+ kind = len=128
+[rrtmgp_nBandsSW]
+ standard_name = number_of_sw_bands_rrtmgp
+ long_name = number of sw bands used in RRTMGP (Model%rrtmgp_nBandsSW)
+ units = count
+ dimensions = ()
+ type = integer
+[rrtmgp_nGptsSW]
+ standard_name = number_of_sw_spectral_points_rrtmgp
+ long_name = number of spectral points in RRTMGP SW calculation (model%rrtmgp_nGptsSW)
+ 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)
+ units = flag
+ dimensions = ()
+ type = integer
+[rrtmgp_nrghice]
+ standard_name = number_of_rrtmgp_ice_roughness
+ long_name = number of ice-roughness categories in RRTMGP calculation (Model%rrtmgp_nrghice)
+ units = count
+ dimensions = ()
+ type = integer
+[rrtmgp_nGauss_ang]
+ standard_name = number_of_angles_used_in_gaussian_quadrature
+ long_name = Number of angles used in Gaussian quadrature
+ units = count
+ dimensions = ()
+ type = integer
+[do_RRTMGP]
+ standard_name = flag_for_rrtmgp_radiation_scheme
+ long_name = flag for RRTMGP scheme
+ units = flag
+ dimensions = ()
+ type = logical
+[do_GPsw_Glw]
+ standard_name = scheme_flag
+ long_name = When true GP is used for SW calculation and G is used for LW calculation
+ units = flag
+ dimensions = ()
+ type = logical
[ncld]
standard_name = number_of_hydrometeors
long_name = choice of cloud scheme / number of hydrometeors
@@ -4623,6 +4753,13 @@
dimensions = (horizontal_dimension)
type = real
kind = kind_phys
+[coszdg]
+ standard_name = daytime_mean_cosz_over_rad_call_period
+ long_name = daytime mean cosz over rad call period
+ units = none
+ dimensions = (horizontal_dimension)
+ type = real
+ kind = kind_phys
[tsflw]
standard_name = surface_midlayer_air_temperature_in_longwave_radiation
long_name = surface air temp during lw calculation
@@ -8310,6 +8447,510 @@
dimensions = (horizontal_dimension,vertical_dimension)
type = real
kind = kind_phys
+[p_lay]
+ standard_name = air_pressure_at_layer_for_RRTMGP_in_hPa
+ long_name = air pressure layer
+ units = hPa
+ dimensions = (horizontal_dimension,vertical_dimension)
+ type = real
+ kind = kind_phys
+ optional = F
+[p_lev]
+ standard_name = air_pressure_at_interface_for_RRTMGP_in_hPa
+ long_name = air pressure level
+ units = hPa
+ dimensions = (horizontal_dimension,vertical_dimension_plus_one)
+ type = real
+ kind = kind_phys
+ optional = F
+[t_lay]
+ standard_name = air_temperature_at_layer_for_RRTMGP
+ long_name = air temperature layer
+ units = K
+ dimensions = (horizontal_dimension,vertical_dimension)
+ type = real
+ kind = kind_phys
+ optional = F
+[t_lev]
+ standard_name = air_temperature_at_interface_for_RRTMGP
+ long_name = air temperature layer
+ units = K
+ dimensions = (horizontal_dimension,vertical_dimension_plus_one)
+ type = real
+ kind = kind_phys
+ optional = F
+[tv_lay]
+ standard_name = virtual_temperature
+ long_name = layer virtual temperature
+ units = K
+ dimensions = (horizontal_dimension,vertical_dimension)
+ type = real
+ kind = kind_phys
+ optional = F
+[relhum]
+ standard_name = relative_humidity
+ long_name = layer relative humidity
+ units = frac
+ dimensions = (horizontal_dimension,vertical_dimension)
+ type = real
+ kind = kind_phys
+ optional = F
+[tracer]
+ standard_name = chemical_tracers
+ long_name = chemical tracers
+ units = g g-1
+ 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
+ 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
+ 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
+ units = none
+ dimensions = (horizontal_dimension,vertical_dimension)
+ type = real
+ kind = kind_phys
+ optional = F
+[cldtaulw]
+ standard_name = RRTMGP_cloud_optical_depth_layers_at_10mu_band
+ long_name = approx 10mu band layer cloud optical depth
+ units = none
+ dimensions = (horizontal_dimension,vertical_dimension)
+ type = real
+ kind = kind_phys
+[fluxlwUP_allsky]
+ standard_name = RRTMGP_lw_flux_profile_upward_allsky
+ long_name = RRTMGP upward longwave all-sky flux profile
+ units = W m-2
+ dimensions = (horizontal_dimension,vertical_dimension_plus_one)
+ type = real
+ kind = kind_phys
+ optional = F
+[fluxlwDOWN_allsky]
+ standard_name = RRTMGP_lw_flux_profile_downward_allsky
+ long_name = RRTMGP downward longwave all-sky flux profile
+ units = W m-2
+ dimensions = (horizontal_dimension,vertical_dimension_plus_one)
+ type = real
+ kind = kind_phys
+ optional = F
+[fluxlwUP_clrsky]
+ standard_name = RRTMGP_lw_flux_profile_upward_clrsky
+ long_name = RRTMGP upward longwave clr-sky flux profile
+ units = W m-2
+ dimensions = (horizontal_dimension,vertical_dimension_plus_one)
+ type = real
+ kind = kind_phys
+ optional = F
+[fluxlwDOWN_clrsky]
+ standard_name = RRTMGP_lw_flux_profile_downward_clrsky
+ long_name = RRTMGP downward longwave clr-sky flux profile
+ units = W m-2
+ dimensions = (horizontal_dimension,vertical_dimension_plus_one)
+ type = real
+ kind = kind_phys
+ optional = F
+[fluxswUP_allsky]
+ standard_name = RRTMGP_sw_flux_profile_upward_allsky
+ long_name = RRTMGP upward shortwave all-sky flux profile
+ units = W m-2
+ dimensions = (horizontal_dimension,vertical_dimension_plus_one)
+ type = real
+ kind = kind_phys
+ optional = F
+[fluxswDOWN_allsky]
+ standard_name = RRTMGP_sw_flux_profile_downward_allsky
+ long_name = RRTMGP downward shortwave all-sky flux profile
+ units = W m-2
+ dimensions = (horizontal_dimension,vertical_dimension_plus_one)
+ type = real
+ kind = kind_phys
+ optional = F
+[fluxswUP_clrsky]
+ standard_name = RRTMGP_sw_flux_profile_upward_clrsky
+ long_name = RRTMGP upward shortwave clr-sky flux profile
+ units = W m-2
+ dimensions = (horizontal_dimension,vertical_dimension_plus_one)
+ type = real
+ kind = kind_phys
+ optional = F
+[fluxswDOWN_clrsky]
+ standard_name = RRTMGP_sw_flux_profile_downward_clrsky
+ long_name = RRTMGP downward shortwave clr-sky flux profile
+ units = W m-2
+ dimensions = (horizontal_dimension,vertical_dimension_plus_one)
+ type = real
+ kind = kind_phys
+ optional = F
+[flxprf_lw]
+ standard_name = RRTMGP_lw_fluxes
+ long_name = lw fluxes total sky / csk and up / down at levels
+ units = W m-2
+ dimensions = (horizontal_dimension,vertical_dimension_plus_one)
+ type = proflw_type
+ optional = T
+[flxprf_sw]
+ standard_name = RRTMGP_sw_fluxes
+ long_name = sw fluxes total sky / csk and up / down at levels
+ units = W m-2
+ dimensions = (horizontal_dimension,vertical_dimension_plus_one)
+ type = profsw_type
+ optional = T
+[aerosolslw]
+ standard_name = RRTMGP_aerosol_optical_properties_for_longwave_bands_01_16
+ long_name = aerosol optical properties for longwave bands 01-16
+ units = various
+ dimensions = (horizontal_dimension,vertical_dimension, number_of_lw_bands_rrtmgp,number_of_aerosol_output_fields_for_longwave_radiation)
+ type = real
+ kind = kind_phys
+ optional = F
+[aerosolslw(:,:,:,1)]
+ standard_name = RRTMGP_aerosol_optical_depth_for_longwave_bands_01_16
+ long_name = aerosol optical depth for longwave bands 01-16
+ units = none
+ dimensions = (horizontal_dimension,vertical_dimension, number_of_lw_bands_rrtmgp)
+ type = real
+ kind = kind_phys
+[aerosolslw(:,:,:,2)]
+ standard_name = RRTMGP_aerosol_single_scattering_albedo_for_longwave_bands_01_16
+ long_name = aerosol single scattering albedo for longwave bands 01-16
+ units = frac
+ dimensions = (horizontal_dimension,vertical_dimension, number_of_lw_bands_rrtmgp)
+ type = real
+ kind = kind_phys
+[aerosolslw(:,:,:,3)]
+ standard_name = RRTMGP_aerosol_asymmetry_parameter_for_longwave_bands_01_16
+ long_name = aerosol asymmetry parameter for longwave bands 01-16
+ units = none
+ dimensions = (horizontal_dimension,vertical_dimension, number_of_lw_bands_rrtmgp)
+ type = real
+ kind = kind_phys
+[aerosolssw]
+ standard_name = RRTMGP_aerosol_optical_properties_for_shortwave_bands_01_16
+ long_name = aerosol optical properties for shortwave bands 01-16
+ units = various
+ dimensions = (horizontal_dimension,vertical_dimension, number_of_sw_bands_rrtmgp, number_of_aerosol_output_fields_for_shortwave_radiation)
+ type = real
+ kind = kind_phys
+[aerosolssw(:,:,:,1)]
+ standard_name = RRTMGP_aerosol_optical_depth_for_shortwave_bands_01_16
+ long_name = aerosol optical depth for shortwave bands 01-16
+ units = none
+ dimensions = (horizontal_dimension,vertical_dimension, number_of_sw_bands_rrtmgp)
+ type = real
+ kind = kind_phys
+[aerosolssw(:,:,:,2)]
+ standard_name = RRTMGP_aerosol_single_scattering_albedo_for_shortwave_bands_01_16
+ long_name = aerosol single scattering albedo for shortwave bands 01-16
+ units = frac
+ dimensions = (horizontal_dimension,vertical_dimension, number_of_sw_bands_rrtmgp)
+ type = real
+ kind = kind_phys
+[aerosolssw(:,:,:,3)]
+ standard_name = RRTMGP_aerosol_asymmetry_parameter_for_shortwave_bands_01_16
+ long_name = aerosol asymmetry parameter for shortwave bands 01-16
+ units = none
+ dimensions = (horizontal_dimension,vertical_dimension, number_of_sw_bands_rrtmgp)
+ type = real
+ kind = kind_phys
+[icseed_lw]
+ standard_name = seed_random_numbers_lw_for_RRTMGP
+ long_name = seed for random number generation for longwave radiation
+ 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
+[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_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_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_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
+ units = none
+ dimensions = (number_of_lw_bands_rrtmgp,horizontal_dimension)
+ type = real
+ kind = kind_phys
+[sec_diff_byband]
+ standard_name = secant_of_diffusivity_angle_each_RRTMGP_LW_band
+ long_name = secant of diffusivity angle in each RRTMGP LW band
+ units = none
+ dimensions = (number_of_lw_bands_rrtmgp,horizontal_dimension)
+ type = real
+ kind = kind_phys
+[sfc_alb_nir_dir]
+ standard_name = surface_albedo_nearIR_direct
+ long_name = near-IR (direct) surface albedo (sfc_alb_nir_dir)
+ units = none
+ dimensions = (number_of_sw_bands_rrtmgp,horizontal_dimension)
+ type = real
+ kind = kind_phys
+[sfc_alb_nir_dif]
+ standard_name = surface_albedo_nearIR_diffuse
+ long_name = near-IR (diffuse) surface albedo (sfc_alb_nir_dif)
+ units = none
+ dimensions = (number_of_sw_bands_rrtmgp,horizontal_dimension)
+ type = real
+ kind = kind_phys
+[sfc_alb_uvvis_dir]
+ standard_name = surface_albedo_uvvis_dir
+ long_name = UVVIS (direct) surface albedo (sfc_alb_uvvis_dir)
+ units = none
+ dimensions = (number_of_sw_bands_rrtmgp,horizontal_dimension)
+ type = real
+ kind = kind_phys
+[sfc_alb_uvvis_dif]
+ standard_name = surface_albedo_uvvis_dif
+ long_name = UVVIS (diffuse) surface albedo (sfc_alb_uvvis_dif)
+ units = none
+ dimensions = (number_of_sw_bands_rrtmgp,horizontal_dimension)
+ type = real
+ kind = kind_phys
+[toa_src_lw]
+ standard_name = toa_incident_lw_flux_by_spectral_point
+ long_name = TOA longwave incident flux at each spectral points
+ units = W m-2
+ dimensions = (horizontal_dimension,number_of_lw_spectral_points_rrtmgp)
+ type = real
+ kind = kind_phys
+[toa_src_sw]
+ standard_name = toa_incident_sw_flux_by_spectral_point
+ long_name = TOA shortwave incident flux at each spectral points
+ units = W m-2
+ dimensions = (horizontal_dimension,number_of_sw_spectral_points_rrtmgp)
+ type = real
+ kind = kind_phys
+[active_gases_array]
+ standard_name = list_of_active_gases_used_by_RRTMGP
+ long_name = list of active gases used by RRTMGP
+ units = none
+ dimensions = (number_of_active_gases_used_by_RRTMGP)
+ type = character
+ kind = len=128
########################################################################
[ccpp-arg-table]
diff --git a/scm/src/gmtb_scm_kinds.F90 b/scm/src/gmtb_scm_kinds.F90
index 46d01cafb..2e0397810 100644
--- a/scm/src/gmtb_scm_kinds.F90
+++ b/scm/src/gmtb_scm_kinds.F90
@@ -3,8 +3,12 @@
module gmtb_scm_kinds
+!! \section arg_table_gmtb_scm_kinds
+!! \htmlinclude gmtb_scm_kinds.html
+!!
+
integer, parameter :: sp = selected_real_kind(P= 6,R=37)
- integer, parameter :: dp = selected_real_kind(P=13,R=300)
- integer, parameter :: qp = selected_real_kind(P=27,R=2400)
+ integer, parameter :: dp = selected_real_kind(P=13,R=300)
+ integer, parameter :: qp = selected_real_kind(P=27,R=2400)
end module gmtb_scm_kinds
diff --git a/scm/src/gmtb_scm_kinds.meta b/scm/src/gmtb_scm_kinds.meta
new file mode 100644
index 000000000..23807f0c4
--- /dev/null
+++ b/scm/src/gmtb_scm_kinds.meta
@@ -0,0 +1,21 @@
+[ccpp-arg-table]
+ name = gmtb_scm_kinds
+ type = module
+[kind_sp]
+ standard_name = kind_sp
+ long_name = definition of kind_sp
+ units = none
+ dimensions = ()
+ type = integer
+[kind_dp]
+ standard_name = kind_dp
+ long_name = definition of kind_dp
+ units = none
+ dimensions = ()
+ type = integer
+[kind_qp]
+ standard_name = kind_qp
+ long_name = definition of kind_qp
+ units = none
+ dimensions = ()
+ type = integer
diff --git a/scm/src/gmtb_scm_output.F90 b/scm/src/gmtb_scm_output.F90
index 29166d39d..76465db6a 100644
--- a/scm/src/gmtb_scm_output.F90
+++ b/scm/src/gmtb_scm_output.F90
@@ -292,19 +292,19 @@ subroutine output_init(scm_state)
CALL CHECK(NF90_PUT_ATT(NCID=ncid,VARID=dummy_id,NAME="description",VALUES="detrainment mass flux"))
CALL CHECK(NF90_PUT_ATT(NCID=ncid,VARID=dummy_id,NAME="units",VALUES="kg m-2 s-1"))
! CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='PBL_height',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
- ! CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='sw_up_TOA_tot',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
- ! CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='sw_dn_TOA_tot',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
- ! CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='sw_up_TOA_clr',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
- ! CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='sw_up_sfc_tot',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
- ! CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='sw_dn_sfc_tot',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
- ! CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='sw_up_sfc_clr',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
- ! CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='sw_dn_sfc_clr',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
- ! CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='lw_up_TOA_tot',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
- ! CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='lw_up_TOA_clr',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
- ! CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='lw_up_sfc_tot',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
- ! CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='lw_up_sfc_clr',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
- ! CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='lw_dn_sfc_tot',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
- ! CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='lw_dn_sfc_clr',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
+ CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='sw_up_TOA_tot',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
+ CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='sw_dn_TOA_tot',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
+ CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='sw_up_TOA_clr',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
+ CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='sw_up_sfc_tot',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
+ CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='sw_dn_sfc_tot',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
+ CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='sw_up_sfc_clr',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
+ CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='sw_dn_sfc_clr',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
+ CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='lw_up_TOA_tot',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
+ CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='lw_up_TOA_clr',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
+ CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='lw_up_sfc_tot',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
+ CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='lw_up_sfc_clr',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
+ CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='lw_dn_sfc_tot',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
+ CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='lw_dn_sfc_clr',XTYPE=NF90_FLOAT,DIMIDS= (/ hor_dim_id, time_id /), VARID=dummy_id))
CALL CHECK(NF90_DEF_VAR(NCID=ncid,NAME='init_year',XTYPE=NF90_FLOAT,VARID=year_id))
CALL CHECK(NF90_PUT_ATT(NCID=ncid,VARID=year_id,NAME="description",VALUES="model initialization year"))
@@ -636,6 +636,86 @@ subroutine output_append(scm_state, physics)
! CALL CHECK(NF90_INQ_VARID(NCID=ncid,NAME="lw_dn_sfc_clr",VARID=var_id))
! CALL CHECK(NF90_PUT_VAR(NCID=ncid,VARID=var_id,VALUES=lw_dn_sfc_clr(:),START=(/1,scm_state%itt_out /)))
+ ! TOA/SFC fluxes
+ do i=1, scm_state%n_cols
+ dummy_1D(i) = physics%Diag(i)%topfsw(1)%upfxc
+ end do
+ CALL CHECK(NF90_INQ_VARID(NCID=ncid,NAME="sw_up_TOA_tot",VARID=var_id))
+ CALL CHECK(NF90_PUT_VAR(NCID=ncid,VARID=var_id,VALUES=dummy_1D,START=(/1,scm_state%itt_out /)))
+ !
+ do i=1, scm_state%n_cols
+ dummy_1D(i) = physics%Diag(i)%topfsw(1)%dnfxc
+ end do
+ CALL CHECK(NF90_INQ_VARID(NCID=ncid,NAME="sw_dn_TOA_tot",VARID=var_id))
+ CALL CHECK(NF90_PUT_VAR(NCID=ncid,VARID=var_id,VALUES=dummy_1D,START=(/1,scm_state%itt_out /)))
+ !
+ do i=1, scm_state%n_cols
+ dummy_1D(i) = physics%Diag(i)%topfsw(1)%upfx0
+ end do
+ CALL CHECK(NF90_INQ_VARID(NCID=ncid,NAME="sw_up_TOA_clr",VARID=var_id))
+ CALL CHECK(NF90_PUT_VAR(NCID=ncid,VARID=var_id,VALUES=dummy_1D,START=(/1,scm_state%itt_out /)))
+ !
+ do i=1, scm_state%n_cols
+ dummy_1D(i) = physics%Radtend(i)%sfcfsw(1)%upfxc
+ end do
+ CALL CHECK(NF90_INQ_VARID(NCID=ncid,NAME="sw_up_sfc_tot",VARID=var_id))
+ CALL CHECK(NF90_PUT_VAR(NCID=ncid,VARID=var_id,VALUES=dummy_1D,START=(/1,scm_state%itt_out /)))
+ !
+ do i=1, scm_state%n_cols
+ dummy_1D(i) = physics%Radtend(i)%sfcfsw(1)%dnfxc
+ end do
+ CALL CHECK(NF90_INQ_VARID(NCID=ncid,NAME="sw_dn_sfc_tot",VARID=var_id))
+ CALL CHECK(NF90_PUT_VAR(NCID=ncid,VARID=var_id,VALUES=dummy_1D,START=(/1,scm_state%itt_out /)))
+ !
+ do i=1, scm_state%n_cols
+ dummy_1D(i) = physics%Radtend(i)%sfcfsw(1)%upfx0
+ end do
+ CALL CHECK(NF90_INQ_VARID(NCID=ncid,NAME="sw_up_sfc_clr",VARID=var_id))
+ CALL CHECK(NF90_PUT_VAR(NCID=ncid,VARID=var_id,VALUES=dummy_1D,START=(/1,scm_state%itt_out /)))
+ !
+ do i=1, scm_state%n_cols
+ dummy_1D(i) = physics%Radtend(i)%sfcfsw(1)%dnfx0
+ end do
+ CALL CHECK(NF90_INQ_VARID(NCID=ncid,NAME="sw_dn_sfc_clr",VARID=var_id))
+ CALL CHECK(NF90_PUT_VAR(NCID=ncid,VARID=var_id,VALUES=dummy_1D,START=(/1,scm_state%itt_out /)))
+ !
+ do i=1, scm_state%n_cols
+ dummy_1D(i) = physics%Diag(i)%topflw(1)%upfxc
+ end do
+ CALL CHECK(NF90_INQ_VARID(NCID=ncid,NAME="lw_up_TOA_tot",VARID=var_id))
+ CALL CHECK(NF90_PUT_VAR(NCID=ncid,VARID=var_id,VALUES=dummy_1D,START=(/1,scm_state%itt_out /)))
+ !
+ do i=1, scm_state%n_cols
+ dummy_1D(i) = physics%Diag(i)%topflw(1)%upfx0
+ end do
+ CALL CHECK(NF90_INQ_VARID(NCID=ncid,NAME="lw_up_TOA_clr",VARID=var_id))
+ CALL CHECK(NF90_PUT_VAR(NCID=ncid,VARID=var_id,VALUES=dummy_1D,START=(/1,scm_state%itt_out /)))
+ !
+ do i=1, scm_state%n_cols
+ dummy_1D(i) = physics%Radtend(i)%sfcflw(1)%upfxc
+ end do
+ CALL CHECK(NF90_INQ_VARID(NCID=ncid,NAME="lw_up_sfc_tot",VARID=var_id))
+ CALL CHECK(NF90_PUT_VAR(NCID=ncid,VARID=var_id,VALUES=dummy_1D,START=(/1,scm_state%itt_out /)))
+ !
+ do i=1, scm_state%n_cols
+ dummy_1D(i) = physics%Radtend(i)%sfcflw(1)%dnfxc
+ end do
+ CALL CHECK(NF90_INQ_VARID(NCID=ncid,NAME="lw_dn_sfc_tot",VARID=var_id))
+ CALL CHECK(NF90_PUT_VAR(NCID=ncid,VARID=var_id,VALUES=dummy_1D,START=(/1,scm_state%itt_out /)))
+ !
+ do i=1, scm_state%n_cols
+ dummy_1D(i) = physics%Radtend(i)%sfcflw(1)%upfx0
+ end do
+ CALL CHECK(NF90_INQ_VARID(NCID=ncid,NAME="lw_up_sfc_clr",VARID=var_id))
+ CALL CHECK(NF90_PUT_VAR(NCID=ncid,VARID=var_id,VALUES=dummy_1D,START=(/1,scm_state%itt_out /)))
+ !
+ do i=1, scm_state%n_cols
+ dummy_1D(i) = physics%Radtend(i)%sfcflw(1)%upfx0
+ end do
+ CALL CHECK(NF90_INQ_VARID(NCID=ncid,NAME="lw_dn_sfc_clr",VARID=var_id))
+ CALL CHECK(NF90_PUT_VAR(NCID=ncid,VARID=var_id,VALUES=dummy_1D,START=(/1,scm_state%itt_out /)))
+
+
!> - Close the file.
CALL CHECK(NF90_CLOSE(ncid))
diff --git a/scm/src/rrtmgp_multi_run.py b/scm/src/rrtmgp_multi_run.py
new file mode 100644
index 000000000..e1db31f51
--- /dev/null
+++ b/scm/src/rrtmgp_multi_run.py
@@ -0,0 +1,3 @@
+cases = ["arm_sgp_summer_1997_A","astex","bomex","LASSO_2016051812","twpice"]
+suites = ["SCM_GFS_v15p2_RRTMGP"]
+namelists = ["input_GFS_v15p2_RRTMGP.nml"]
\ No newline at end of file