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