From 680368def0d3ae64450717bd28ff51ba759d3539 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Wed, 1 May 2024 17:05:42 -0400 Subject: [PATCH 1/2] add script to download and stage climatological aerosol data and fix typo in HR3 namelist --- ...t_GFS_v17_H3.nml => input_GFS_v17_HR3.nml} | 2 +- contrib/get_aerosol_climo.sh | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) rename ccpp/physics_namelists/{input_GFS_v17_H3.nml => input_GFS_v17_HR3.nml} (99%) create mode 100755 contrib/get_aerosol_climo.sh diff --git a/ccpp/physics_namelists/input_GFS_v17_H3.nml b/ccpp/physics_namelists/input_GFS_v17_HR3.nml similarity index 99% rename from ccpp/physics_namelists/input_GFS_v17_H3.nml rename to ccpp/physics_namelists/input_GFS_v17_HR3.nml index 10d60a77..a4761fc3 100644 --- a/ccpp/physics_namelists/input_GFS_v17_H3.nml +++ b/ccpp/physics_namelists/input_GFS_v17_HR3.nml @@ -43,7 +43,7 @@ fhlwr = 1200. ialb = 1 iems = 1 - iaer = 5111 + iaer = 1011 icliq_sw = 2 ico2 = 2 isubc_sw = 2 diff --git a/contrib/get_aerosol_climo.sh b/contrib/get_aerosol_climo.sh new file mode 100755 index 00000000..2039dc73 --- /dev/null +++ b/contrib/get_aerosol_climo.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +#set -ex + +# Directory where this script is located +if [[ $(uname -s) == Darwin ]]; then + if [[ $(sw_vers -productVersion) < 12.3 ]]; then + MYDIR=$(cd "$(dirname "$(greadlink -f -n "${BASH_SOURCE[0]}" )" )" && pwd -P) + else + MYDIR=$(cd "$(dirname "$(readlink -f -n "${BASH_SOURCE[0]}" )" )" && pwd -P) + fi +else + MYDIR=$(cd "$(dirname "$(readlink -f -n "${BASH_SOURCE[0]}" )" )" && pwd -P) +fi +BASEDIR=$MYDIR/.. + +# Change to directory containing the physics input data, download and extract archive +data_files=("FV3_aeroclim1" "FV3_aeroclim2" "FV3_aeroclim3" "FV3_aeroclim_optics") + +cd $BASEDIR/scm/data/physics_input_data/ +for file in "${data_files[@]}"; do + echo "Retrieving $file.tar.gz" + wget https://github.com/NCAR/ccpp-scm/releases/download/v6.0.0/${file}.tar.gz + tar -xvf ${file}.tar.gz + rm -f ${file}.tar.gz +done + +cd $BASEDIR/ + From 7ad487a426f92057905333b05accb040eefaeb0b Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Thu, 2 May 2024 16:45:41 -0400 Subject: [PATCH 2/2] add SCM_RRFS_v1 SDF, nml, tracer file; update suite_info; update scm_type_defs to recgonize new tracers --- ccpp/physics_namelists/input_RRFS_v1.nml | 145 ++++++++++++++++++++++ ccpp/suites/suite_SCM_RRFS_v1.xml | 79 ++++++++++++ ccpp/suites/suite_SCM_RRFS_v1_ps.xml | 63 ++++++++++ scm/etc/tracer_config/tracers_RRFS_v1.txt | 16 +++ scm/src/scm_type_defs.F90 | 6 + scm/src/suite_info.py | 1 + 6 files changed, 310 insertions(+) create mode 100644 ccpp/physics_namelists/input_RRFS_v1.nml create mode 100644 ccpp/suites/suite_SCM_RRFS_v1.xml create mode 100644 ccpp/suites/suite_SCM_RRFS_v1_ps.xml create mode 100644 scm/etc/tracer_config/tracers_RRFS_v1.txt diff --git a/ccpp/physics_namelists/input_RRFS_v1.nml b/ccpp/physics_namelists/input_RRFS_v1.nml new file mode 100644 index 00000000..60de83a4 --- /dev/null +++ b/ccpp/physics_namelists/input_RRFS_v1.nml @@ -0,0 +1,145 @@ +&gfs_physics_nml + addsmoke_flag = 1 + aero_dir_fdb = .true. + aero_ind_fdb = .false. + bl_mynn_edmf = 1 + bl_mynn_edmf_mom = 1 + bl_mynn_tkeadvect = .true. + cal_pre = .false. + cdmbgwd = 3.5, 1.0 + clm_debug_print = .false. + clm_lake_debug = .false. + cnvcld = .false. + cnvgwd = .false. + coarsepm_settling = 1 + cplflx = .false. + diag_log = .true. + debug = .false. + do_deep = .true. + do_gsl_drag_ls_bl = .true. + do_gsl_drag_ss = .true. + do_gsl_drag_tofd = .true. + do_mynnedmf = .true. + do_mynnsfclay = .true. + do_plumerise = .true. + do_smoke_transport = .true. + do_tofd = .false. + do_ugwp = .false. + do_ugwp_v0 = .false. + do_ugwp_v0_nst_only = .false. + do_ugwp_v0_orog_only = .false. + drydep_opt = 1 + dspheat = .true. + dt_inner = 36 + dust_alpha = 10.0 + dust_drylimit_factor = 0.5 + dust_gamma = 1.3 + dust_moist_correction = 2.0 + dust_opt = 1 + ebb_dcycle = 2 + effr_in = .true. + enh_mix = .false. + fhcyc = 0 + fhlwr = 900.0 + fhswr = 900.0 + fhzero = 1.0 + frac_ice = .true. + gwd_opt = 3 + h2o_phys = .true. + hybedmf = .false. + iaer = 1011 + ialb = 2 + iau_delthrs = 6 + iau_inc_files = '' + iaufhrs = 30 + iccn = 2 + icliq_sw = 2 + icloud_bl = 1 + ico2 = 2 + iems = 2 + imfdeepcnv = 3 + imfshalcnv = -1 + imp_physics = 8 + iopt_alb = 2 + iopt_btr = 1 + iopt_crs = 1 + iopt_dveg = 2 + iopt_frz = 1 + iopt_inf = 1 + iopt_lake = 2 + iopt_rad = 1 + iopt_run = 1 + iopt_sfc = 1 + iopt_snf = 4 + iopt_stc = 1 + iopt_tbot = 2 + iovr = 3 + isncond_opt = 2 + isncovr_opt = 3 + isol = 2 + isot = 1 + isubc_lw = 2 + isubc_sw = 2 + ivegsrc = 1 + kice = 9 + ldiag3d = .true. + ldiag_ugwp = .false. + lgfdlmprad = .false. + lheatstrg = .false. + lightning_threat = .true. + lkm = 1 + lradar = .true. + lrefres = .true. + lsm = 3 + lsoil = 9 + lsoil_lsm = 9 + ltaerosol = .true. + lwhtr = .true. + min_lakeice = 0.15 + min_seaice = 0.15 + mix_chem = .true. + mosaic_lu = 1 + mosaic_soil = 1 + nsfullradar_diag = 3600 + oz_phys = .false. + oz_phys_2015 = .true. + pdfcld = .false. + plume_wind_eff = 1 + plumerisefire_frq = 60 + pre_rad = .false. + print_diff_pgr = .true. + prslrd0 = 0.0 + qdiag3d = .true. + random_clds = .false. + redrag = .true. + rrfs_sd = .true. + rrfs_smoke_debug = .false. + satmedmf = .false. + seas_opt = 0 + sfclay_compute_flux = .true. + shal_cnv = .false. + smoke_conv_wet_coef = 0.5, 0.5, 0.5 + smoke_forecast = 1 + swhtr = .true. + thsfc_loc = .false. + trans_trac = .true. + ttendlim = -999 + use_ufo = .true. + wetdep_ls_alpha = 0.5 + wetdep_ls_opt = 1 +/ + +&cires_ugwp_nml + knob_ugwp_azdir = 2, 4, 4, 4 + knob_ugwp_doaxyz = 1 + knob_ugwp_doheat = 1 + knob_ugwp_dokdis = 1 + knob_ugwp_effac = 1, 1, 1, 1 + knob_ugwp_ndx4lh = 1 + knob_ugwp_solver = 2 + knob_ugwp_source = 1, 1, 0, 0 + knob_ugwp_stoch = 0, 0, 0, 0 + knob_ugwp_version = 0 + knob_ugwp_wvspec = 1, 25, 25, 25 + launch_level = 25 +/ diff --git a/ccpp/suites/suite_SCM_RRFS_v1.xml b/ccpp/suites/suite_SCM_RRFS_v1.xml new file mode 100644 index 00000000..ef1c7315 --- /dev/null +++ b/ccpp/suites/suite_SCM_RRFS_v1.xml @@ -0,0 +1,79 @@ + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + sgscloud_radpre + GFS_rrtmg_pre + GFS_radiation_surface + rad_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw + sgscloud_radpost + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + mynnsfc_wrapper + GFS_surface_loop_control_part1 + lsm_ruc + clm_lake + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + rrfs_smoke_wrapper + mynnedmf_wrapper + rrfs_smoke_postpbl + GFS_GWD_generic_pre + drag_suite + GFS_GWD_generic_post + GFS_suite_stateout_update + h2ophys + get_phi_fv3 + GFS_suite_interstitial_3 + GFS_DCNV_generic_pre + cu_gf_driver_pre + cu_gf_driver + GFS_DCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + mp_thompson_pre + mp_thompson + mp_thompson_post + GFS_MP_generic_post + cu_gf_driver_post + maximum_hourly_diagnostics + GFS_physics_post + + + \ No newline at end of file diff --git a/ccpp/suites/suite_SCM_RRFS_v1_ps.xml b/ccpp/suites/suite_SCM_RRFS_v1_ps.xml new file mode 100644 index 00000000..91918a6b --- /dev/null +++ b/ccpp/suites/suite_SCM_RRFS_v1_ps.xml @@ -0,0 +1,63 @@ + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + sgscloud_radpre + GFS_rrtmg_pre + GFS_radiation_surface + rad_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw + sgscloud_radpost + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + scm_sfc_flux_spec + dcyc2t3 + GFS_suite_interstitial_2 + rrfs_smoke_wrapper + mynnedmf_wrapper + rrfs_smoke_postpbl + GFS_GWD_generic_pre + drag_suite + GFS_GWD_generic_post + GFS_suite_stateout_update + h2ophys + get_phi_fv3 + GFS_suite_interstitial_3 + GFS_DCNV_generic_pre + cu_gf_driver_pre + cu_gf_driver + GFS_DCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + mp_thompson_pre + mp_thompson + mp_thompson_post + GFS_MP_generic_post + cu_gf_driver_post + maximum_hourly_diagnostics + GFS_physics_post + + + \ No newline at end of file diff --git a/scm/etc/tracer_config/tracers_RRFS_v1.txt b/scm/etc/tracer_config/tracers_RRFS_v1.txt new file mode 100644 index 00000000..3835c38a --- /dev/null +++ b/scm/etc/tracer_config/tracers_RRFS_v1.txt @@ -0,0 +1,16 @@ +"sphum","water_vapor_specific_humidity","kg kg-1" +"liq_wat","cloud_condensed_water_mixing_ratio","kg kg-1" +"ice_wat","ice_water_mixing_ratio","kg kg-1" +"rainwat","rain_water_mixing_ratio","kg kg-1" +"snowwat","snow_water_mixing_ratio","kg kg-1" +"graupel","graupel_mixing_ratio","kg kg-1" +"water_nc","cloud_droplet_number_concentration","kg-1" +"ice_nc","ice_number_concentration","kg-1" +"rain_nc","rain_number_concentration","kg-1" +"o3mr","ozone_mixing_ratio","kg kg-1" +"liq_aero","water_friendly_aerosol_number_concentration","kg-1" +"ice_aero","ice_friendly_aerosol_number_concentration","kg-1" +"sgs_tke","turbulent_kinetic_energy","m2 s-2" +"smoke","smoke_tracer_concentration","ug kg-1" +"dust","dust_tracer_concentration","ug kg-1" +"coarsepm","coarse_particulate_matter","ug kg-1" \ No newline at end of file diff --git a/scm/src/scm_type_defs.F90 b/scm/src/scm_type_defs.F90 index 550f7d95..ce9805ae 100644 --- a/scm/src/scm_type_defs.F90 +++ b/scm/src/scm_type_defs.F90 @@ -85,6 +85,9 @@ module scm_type_defs integer :: water_friendly_aerosol_index !< index for water-friendly aerosols in the tracer array integer :: ice_friendly_aerosol_index !< index for ice-friendly aerosols in the tracer array integer :: mass_weighted_rime_factor_index !< index for mass-weighted rime factor + integer :: smoke_index !< index for smoke in the tracer array + integer :: dust_index !< index for dust in the tracer array + integer :: coarsepm_index !< index for coarsepm in the tracer array integer :: init_year, init_month, init_day, init_hour, init_min character(len=32), allocatable :: tracer_names(:) !< integer, allocatable :: tracer_types(:) !< @@ -489,6 +492,9 @@ subroutine scm_state_create(scm_state, n_columns, n_levels, n_soil, n_snow, n_ti scm_state%water_friendly_aerosol_index = get_tracer_index(scm_state%tracer_names,"liq_aero") scm_state%ice_friendly_aerosol_index = get_tracer_index(scm_state%tracer_names,"ice_aero") scm_state%mass_weighted_rime_factor_index = get_tracer_index(scm_state%tracer_names,"q_rimef") + scm_state%smoke_index = get_tracer_index(scm_state%tracer_names,"smoke") + scm_state%dust_index = get_tracer_index(scm_state%tracer_names,"dust") + scm_state%coarsepm_index = get_tracer_index(scm_state%tracer_names,"coarsepm") scm_state%nwat = 0 if(scm_state%water_vapor_index /= -99) then diff --git a/scm/src/suite_info.py b/scm/src/suite_info.py index f3420cdf..19dffb02 100755 --- a/scm/src/suite_info.py +++ b/scm/src/suite_info.py @@ -46,6 +46,7 @@ def timestep(self, value): suite_list.append(suite('SCM_GFS_v17_p8', 'tracers_GFS_v17_p8.txt', 'input_GFS_v17_p8.nml', 600.0, 600.0, True )) suite_list.append(suite('SCM_GFS_v17_HR3', 'tracers_GFS_v17_p8.txt', 'input_GFS_v17_HR3.nml', 600.0, 600.0, True )) suite_list.append(suite('SCM_RAP', 'tracers_RAP.txt', 'input_RAP.nml', 600.0, 600.0 , True )) +suite_list.append(suite('SCM_RRFS_v1', 'tracers_RRFS_v1.txt', 'input_RRFS_v1.nml', 600.0, 600.0 , True )) suite_list.append(suite('SCM_RRFS_v1beta', 'tracers_RRFS_v1beta.txt', 'input_RRFS_v1beta.nml', 600.0, 600.0 , True )) suite_list.append(suite('SCM_WoFS_v0', 'tracers_WoFS_v0.txt', 'input_WoFS_v0.nml', 600.0, 600.0 , True )) suite_list.append(suite('SCM_HRRR', 'tracers_HRRR.txt', 'input_HRRR.nml', 600.0, 600.0 , True ))