From cb3a35575f0f004ce7e82263b5e24c779b318655 Mon Sep 17 00:00:00 2001 From: willmayfield Date: Fri, 23 Jun 2023 03:17:59 +0000 Subject: [PATCH 1/9] Initial work to add NOHRSC snowfall accumulation obs pulling and pcpcombine --- parm/wflow/default_workflow.yaml | 1 + parm/wflow/verify_det.yaml | 27 ++++++++++++ parm/wflow/verify_pre.yaml | 42 +++++++++++++++++-- ...gional_run_met_gridstat_or_pointstat_vx.sh | 9 ++++ scripts/exregional_run_met_pcpcombine.sh | 4 +- ush/config_defaults.yaml | 35 +++++++++++++++- ush/set_vx_fhr_list.sh | 9 ++++ ush/set_vx_params.sh | 23 ++++++++++ ush/setup.py | 6 +++ ush/valid_param_vals.yaml | 3 +- 10 files changed, 151 insertions(+), 8 deletions(-) diff --git a/parm/wflow/default_workflow.yaml b/parm/wflow/default_workflow.yaml index 77231f8136..242651fbf8 100644 --- a/parm/wflow/default_workflow.yaml +++ b/parm/wflow/default_workflow.yaml @@ -5,6 +5,7 @@ rocoto: entities: ACCOUNT: '{{ user.ACCOUNT }}' CCPA_OBS_DIR: '{{ platform.CCPA_OBS_DIR }}' + NOHRSC_OBS_DIR: '{{ platform.NOHRSC_OBS_DIR }}' COMIN_DIR: '{% if user.RUN_ENVIR == "nco" %}{{"{}/{}.@Y@m@d/@H".format(nco.COMIN_BASEDIR,nco.RUN)}}{% else %}{{"{}/@Y@m@d@H".format(workflow.EXPTDIR)}}{% endif %}' COMINgfs: '{{ platform.get("COMINgfs") }}' FCST_DIR: '{% if user.RUN_ENVIR == "nco" %}{{"{}/run_fcst_mem#mem#.{}_@Y@m@d@H".format(nco.DATAROOT,workflow.WORKFLOW_ID)}}{% else %}{{"{}/@Y@m@d@H".format(workflow.EXPTDIR)}}{% endif %}' diff --git a/parm/wflow/verify_det.yaml b/parm/wflow/verify_det.yaml index 804cc06107..be5969fe75 100644 --- a/parm/wflow/verify_det.yaml +++ b/parm/wflow/verify_det.yaml @@ -52,6 +52,33 @@ metatask_GridStat_CCPA_all_accums_all_mems: attrs: task: run_MET_PcpCombine_fcst_APCP#ACCUM_HH#h_mem#mem# +metatask_GridStat_NOHRSC_all_accums_all_mems: + var: + ACCUM_HH: '{% for ah in verification.VX_ASNOW_ACCUMS_HRS %}{% if workflow.FCST_LEN_HRS >= ah %}{{ "%02d " % ah }}{% endif %}{% endfor %}' + metatask_GridStat_NOHRSC_ASNOW#ACCUM_HH#h_all_mems: + var: + mem: '{% if global.DO_ENSEMBLE %}{% for m in range(1, global.NUM_ENS_MEMBERS+1) %}{{ "%03d "%m }}{%- endfor -%} {% else %}{{ "000"|string }}{% endif %}' + task_run_MET_GridStat_vx_ASNOW#ACCUM_HH#h_mem#mem#: + <<: *default_task_verify_det + attrs: + maxtries: '2' + command: '&LOAD_MODULES_RUN_TASK_FP; "run_vx" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX"' + envars: + <<: *default_vars + OBS_DIR: '&NOHRSC_OBS_DIR;' + VAR: ASNOW + ACCUM_HH: '#ACCUM_HH#' + MET_TOOL: 'GRIDSTAT' + OBTYPE: 'NOHRSC' + ENSMEM_INDX: "#mem#" + SLASH_ENSMEM_SUBDIR_OR_NULL: '{% if global.DO_ENSEMBLE %}{{ "/mem#mem#" }}{% endif %}' + walltime: 02:00:00 + dependency: + and: + taskdep_pcpcombine_fcst: + attrs: + task: run_MET_PcpCombine_fcst_APCP#ACCUM_HH#h_mem#mem# + metatask_GridStat_MRMS_all_mems: var: mem: '{% if global.DO_ENSEMBLE %}{% for m in range(1, global.NUM_ENS_MEMBERS+1) %}{{ "%03d "%m }}{%- endfor -%} {% else %}{{ "000"|string }}{% endif %}' diff --git a/parm/wflow/verify_pre.yaml b/parm/wflow/verify_pre.yaml index 2eccbf8027..1a0ee92a91 100644 --- a/parm/wflow/verify_pre.yaml +++ b/parm/wflow/verify_pre.yaml @@ -34,6 +34,18 @@ task_get_obs_ccpa: queue: "&QUEUE_HPSS;" walltime: 00:45:00 +task_get_obs_nohrsc: + <<: *default_task_verify_pre + command: '&LOAD_MODULES_RUN_TASK_FP; "get_obs" "&JOBSdir;/JREGIONAL_GET_OBS_NOHRSC"' + envars: + <<: *default_vars + ACCUM_HH: '06' + OBS_DIR: '&NOHRSC_OBS_DIR;' + FHR: '{% for h in range(0, workflow.FCST_LEN_HRS+1) %}{{ " %02d" % h }}{% endfor %}' + partition: '{% if platform.get("PARTITION_HPSS") %}&PARTITION_HPSS;{% else %}None{% endif %}' + queue: "&QUEUE_HPSS;" + walltime: 00:45:00 + task_get_obs_mrms: <<: *default_task_verify_pre command: '&LOAD_MODULES_RUN_TASK_FP; "get_obs" "&JOBSdir;/JREGIONAL_GET_OBS_MRMS"' @@ -195,10 +207,10 @@ metatask_check_post_output_all_mems: metatask_PcpCombine_fcst_all_accums_all_mems: var: - ACCUM_HH: '{% for ah in verification.VX_APCP_ACCUMS_HRS %}{% if workflow.FCST_LEN_HRS >= ah %}{{ "%02d " % ah }}{% endif %}{% endfor %}' - metatask_PcpCombine_fcst_APCP#ACCUM_HH#h_all_mems: + mem: '{% if global.DO_ENSEMBLE %}{% for m in range(1, global.NUM_ENS_MEMBERS+1) %}{{ "%03d "%m }}{%- endfor -%} {% else %}{{ "000"|string }}{% endif %}' + metatask_PcpCombine_fcst_APCP#ACCUM_HH#h_mem#mem#: var: - mem: '{% if global.DO_ENSEMBLE %}{% for m in range(1, global.NUM_ENS_MEMBERS+1) %}{{ "%03d "%m }}{%- endfor -%} {% else %}{{ "000"|string }}{% endif %}' + ACCUM_HH: '{% for ah in verification.VX_APCP_ACCUMS_HRS %}{% if workflow.FCST_LEN_HRS >= ah %}{{ "%02d " % ah }}{% endif %}{% endfor %}' task_run_MET_PcpCombine_fcst_APCP#ACCUM_HH#h_mem#mem#: <<: *default_task_verify_pre attrs: @@ -220,3 +232,27 @@ metatask_PcpCombine_fcst_all_accums_all_mems: age: 00:00:00:30 text: !cycstr '{{ workflow.EXPTDIR }}/@Y@m@d@H/post_files_exist_mem#mem#.txt' walltime: 00:05:00 + metatask_PcpCombine_fcst_ASNOW#ACCUM_HH#h_mem#mem#: + var: + ACCUM_HH: '{% for ah in verification.VX_ASNOW_ACCUMS_HRS %}{% if workflow.FCST_LEN_HRS >= ah %}{{ "%02d " % ah }}{% endif %}{% endfor %}' + task_run_MET_PcpCombine_fcst_ASNOW#ACCUM_HH#h_mem#mem#: + <<: *default_task_verify_pre + attrs: + cycledefs: forecast + maxtries: '2' + command: '&LOAD_MODULES_RUN_TASK_FP; "run_vx" "&JOBSdir;/JREGIONAL_RUN_MET_PCPCOMBINE"' + envars: + <<: *default_vars + VAR: ASNOW + ACCUM_HH: '#ACCUM_HH#' + obs_or_fcst: fcst + OBTYPE: NOHRSC + OBS_DIR: '&NOHRSC_OBS_DIR;' + MET_TOOL: 'PCPCOMBINE' + ENSMEM_INDX: "#mem#" + dependency: + datadep: + attrs: + age: 00:00:00:30 + text: !cycstr '{{ workflow.EXPTDIR }}/@Y@m@d@H/post_files_exist_mem#mem#.txt' + walltime: 00:05:00 diff --git a/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh b/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh index 5027b54fcc..36272a8903 100755 --- a/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh +++ b/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh @@ -144,6 +144,12 @@ if [ "${grid_or_point}" = "grid" ]; then "APCP24h") FIELD_THRESHOLDS="gt0.0, ge0.254, ge0.508, ge1.27, ge2.54, ge3.810, ge6.350, ge8.890, ge12.700, ge25.400" ;; + "ASNOW06h") + FIELD_THRESHOLDS="gt0.0, ge2.54, ge5.08, ge10.16, ge20.32" + ;; + "ASNOW24h") + FIELD_THRESHOLDS="gt0.0, ge2.54, ge5.08, ge10.16, ge20.32" + ;; "REFC") FIELD_THRESHOLDS="ge20, ge30, ge40, ge50" ;; @@ -213,6 +219,9 @@ if [ "${grid_or_point}" = "grid" ]; then "APCP01h") OBS_INPUT_FN_TEMPLATE="${OBS_CCPA_APCP01h_FN_TEMPLATE}" ;; + "ASNOW") + OBS_INPUT_FN_TEMPLATE="${OBS_NOHRSC_ASNOW_FN_TEMPLATE}" + ;; "REFC") OBS_INPUT_FN_TEMPLATE="${OBS_MRMS_REFC_FN_TEMPLATE}" ;; diff --git a/scripts/exregional_run_met_pcpcombine.sh b/scripts/exregional_run_met_pcpcombine.sh index 6951158041..187b953e53 100755 --- a/scripts/exregional_run_met_pcpcombine.sh +++ b/scripts/exregional_run_met_pcpcombine.sh @@ -289,8 +289,8 @@ fi # # Add prefixes and suffixes (extensions) to the base file names. # -metplus_config_tmpl_fn="${metplus_config_tmpl_fn}.conf" -metplus_config_fn="${metplus_config_fn}.conf" +metplus_config_tmpl_fn="${metplus_config_tmpl_fn}_${field}.conf" +metplus_config_fn="${metplus_config_fn}_${field}.conf" metplus_log_fn="metplus.log.${metplus_log_fn}" # #----------------------------------------------------------------------- diff --git a/ush/config_defaults.yaml b/ush/config_defaults.yaml index 7ea9dd501b..9dacc08a0e 100644 --- a/ush/config_defaults.yaml +++ b/ush/config_defaults.yaml @@ -274,6 +274,28 @@ platform: # is provided, it will be accounted for in the # exregional_get_ccpa_files.sh script. # + # NOHRSC_OBS_DIR: + # User-specified location of top-level directory where NOHRSC 6- and 24-h hour + # snowfall accumulation files used by METplus are located. This parameter + # needs to be set for both user-provided observations and for + # observations that are retrieved from the NOAA HPSS (if the user has + # access) via the get_obs_nohrsc task (activated in workflow by + # including the parm/wflow/verify_pre.yaml task set in the wflow config). + # In the case of pulling observations directly from NOAA HPSS, the + # data retrieved will be placed in this directory. Please note, this + # path must be defind as /full-path-to-obs/nohrsc/proc. METplus is + # configured to verify 06- and 24-h accumulated snowfall + # precipitation using 6- and 12-hourly NOHRSC files, respectively. + # METplus configuration files require the use of predetermined + # directory structure and file names. Therefore, if the NOHRSC files are + # user provided, they need to follow the anticipated naming structure: + # + # {YYYYMMDD}/sfav2_CONUS_{AA}h_{YYYYMMDD}{HH}_grid184.grb2 + # + # where AA is the 2-digit accumulation duration, YYYY is the 4-digit + # valid year, MM the 2-digit valid month, DD the 2-digit valid day + # of the month, and HH the 2-digit valid hour of the day. + # # MRMS_OBS_DIR: # User-specified location of top-level directory where MRMS composite # reflectivity files used by METplus are located. This parameter @@ -336,6 +358,7 @@ platform: MET_BIN_EXEC: "" METPLUS_PATH: "" CCPA_OBS_DIR: "" + NOHRSC_OBS_DIR: "" MRMS_OBS_DIR: "" NDAS_OBS_DIR: "" # @@ -2428,6 +2451,7 @@ verification: # OBS_CCPA_APCP01h_FN_TEMPLATE: '{valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2' OBS_CCPA_APCPgt01h_FN_TEMPLATE: '${OBS_CCPA_APCP01h_FN_TEMPLATE}_a${ACCUM_HH}h.nc' + OBS_NOHRSC_ASNOW_FN_TEMPLATE: '{valid?fmt=%Y%m%d}/sfav2_CONUS_${ACCUM_HH}h_{valid?fmt=%Y%m%d%H}_grid184.grb2' OBS_MRMS_REFC_FN_TEMPLATE: '{valid?fmt=%Y%m%d}/MergedReflectivityQCComposite_00.50_{valid?fmt=%Y%m%d}-{valid?fmt=%H%M%S}.grib2' OBS_MRMS_RETOP_FN_TEMPLATE: '{valid?fmt=%Y%m%d}/EchoTop_18_00.50_{valid?fmt=%Y%m%d}-{valid?fmt=%H%M%S}.grib2' OBS_NDAS_SFCorUPA_FN_TEMPLATE: 'prepbufr.ndas.{valid?fmt=%Y%m%d%H}' @@ -2447,9 +2471,16 @@ verification: # VX_APCP_ACCUMS_HRS must contain at least one element. If not, # VX_APCP_ACCUMS_HRS will be ignored. # + # VX_ASNOW_ACCUMS_HRS: + # The 2-digit accumulation periods (in units of hours) to consider for + # ASNOW (accumulated snowfall). If VX_FIELDS contains "ASNOW", then + # VX_ASNOW_ACCUMS_HRS must contain at least one element. If not, + # VX_ASNOW_ACCUMS_HRS will be ignored. + # VX_FCST_MODEL_NAME: '{{ nco.NET }}.{{ task_run_post.POST_OUTPUT_DOMAIN_NAME }}' - VX_FIELDS: [ "APCP", "REFC", "RETOP", "SFC", "UPA" ] + VX_FIELDS: [ "APCP", "ASNOW", "REFC", "RETOP", "SFC", "UPA" ] VX_APCP_ACCUMS_HRS: [ 1, 3, 6, 24 ] + VX_ASNOW_ACCUMS_HRS: [ 6, 24 ] # # VX_FCST_INPUT_BASEDIR: # Template for top-level directory containing forecast (but not obs) @@ -2473,7 +2504,7 @@ verification: # FCST_SUBDIR_TEMPLATE: '{% if user.RUN_ENVIR == "nco" %}${NET}.{init?fmt=%Y%m%d?shift=-${time_lag}}/{init?fmt=%H?shift=-${time_lag}}{% else %}{init?fmt=%Y%m%d%H?shift=-${time_lag}}{% if global.DO_ENSEMBLE %}/${ensmem_name}{% endif %}/postprd{% endif %}' FCST_FN_TEMPLATE: '${NET}.t{init?fmt=%H?shift=-${time_lag}}z{% if user.RUN_ENVIR == "nco" and global.DO_ENSEMBLE %}.${ensmem_name}{% endif %}.prslev.f{lead?fmt=%HHH?shift=${time_lag}}.${POST_OUTPUT_DOMAIN_NAME}.grib2' - FCST_FN_METPROC_TEMPLATE: '${NET}.t{init?fmt=%H}z{% if user.RUN_ENVIR == "nco" and global.DO_ENSEMBLE %}.${ensmem_name}{% endif %}.prslev.f{lead?fmt=%HHH}.${POST_OUTPUT_DOMAIN_NAME}_a${ACCUM_HH}h.nc' + FCST_FN_METPROC_TEMPLATE: '${NET}.t{init?fmt=%H}z{% if user.RUN_ENVIR == "nco" and global.DO_ENSEMBLE %}.${ensmem_name}{% endif %}.prslev.f{lead?fmt=%HHH}.${POST_OUTPUT_DOMAIN_NAME}_${VAR}_a${ACCUM_HH}h.nc' # # For verification tasks that need observational data, this specifies # the maximum number of observation files that may be missing. If more diff --git a/ush/set_vx_fhr_list.sh b/ush/set_vx_fhr_list.sh index 490c7f5374..d824bbcfcb 100644 --- a/ush/set_vx_fhr_list.sh +++ b/ush/set_vx_fhr_list.sh @@ -105,6 +105,15 @@ function set_vx_fhr_list() { fhr_min="${accum_hh}" fhr_int="${accum_hh}" ;; + "ASNOW") + if [ ${accum_hh} = "24" ] ; then + fhr_min="24" + fhr_int="12" + else + fhr_min="${accum_hh}" + fhr_int="${accum_hh}" + fi + ;; "REFC") fhr_min="00" fhr_int="01" diff --git a/ush/set_vx_params.sh b/ush/set_vx_params.sh index 61b74ff4ce..bca58e4c7d 100644 --- a/ush/set_vx_params.sh +++ b/ush/set_vx_params.sh @@ -158,6 +158,29 @@ The accumulation (accum_hh) must be a 2-digit integer: *) print_err_msg_exit "\ A method for setting verification parameters has not been specified for +this observation type (obtype) and field (field) combination: + obtype = \"${obtype}\" + field = \"${field}\"" + ;; + + esac + ;; + + "NOHRSC") + + _grid_or_point_="grid" + case "${field}" in + + "ASNOW") + fieldname_in_obs_input="${field}" + fieldname_in_fcst_input="${field}" + fieldname_in_MET_output="${field}_${accum_hh}" + fieldname_in_MET_filedir_names="${field}${accum_hh}h" + ;; + + *) + print_err_msg_exit "\ +A method for setting verification parameters has not been specified for this observation type (obtype) and field (field) combination: obtype = \"${obtype}\" field = \"${field}\"" diff --git a/ush/setup.py b/ush/setup.py index 41b0e0bb92..3f9c638e20 100644 --- a/ush/setup.py +++ b/ush/setup.py @@ -557,6 +557,12 @@ def remove_tag(tasks, tag): "metatask_GenEnsProd_EnsembleStat_CCPA", "metatask_GridStat_CCPA_ensmeanprob_all_accums"] + vx_fields_all["NOHRSC"] = ["ASNOW"] + vx_metatasks_all["NOHRSC"] = ["metatask_PcpCombine_fcst_all_accums_all_mems", + "metatask_GridStat_NOHRSC_all_accums_all_mems", + "metatask_GenEnsProd_EnsembleStat_NOHRSC", + "metatask_GridStat_NOHRSC_ensmeanprob_all_accums"] + vx_fields_all["MRMS"] = ["REFC", "RETOP"] vx_metatasks_all["MRMS"] = ["metatask_GridStat_MRMS_all_mems", "metatask_GenEnsProd_EnsembleStat_MRMS", diff --git a/ush/valid_param_vals.yaml b/ush/valid_param_vals.yaml index 83563c0f62..a14175a18a 100644 --- a/ush/valid_param_vals.yaml +++ b/ush/valid_param_vals.yaml @@ -87,5 +87,6 @@ valid_vals_DO_AQM_GEFS_LBCS: [True, False] valid_vals_DO_AQM_SAVE_AIRNOW_HIST: [True, False] valid_vals_COLDSTART: [True, False] valid_vals_DO_NLDN_LGHT: [True, False] -valid_vals_VX_FIELDS: [ "APCP", "REFC", "RETOP", "SFC", "UPA" ] +valid_vals_VX_FIELDS: [ "APCP", "ASNOW", "REFC", "RETOP", "SFC", "UPA" ] valid_vals_VX_APCP_ACCUMS_HRS: [ 1, 3, 6, 24 ] +valid_vals_VX_ASNOW_ACCUMS_HRS: [ 6, 24 ] From 338dbdff34f2e6d343a7207ac0148f64a8cfb228 Mon Sep 17 00:00:00 2001 From: willmayfield Date: Fri, 23 Jun 2023 03:20:22 +0000 Subject: [PATCH 2/9] new files for snowfall accumulation obs pulling and pcpcombine --- jobs/JREGIONAL_GET_OBS_NOHRSC | 91 +++++++++++++++ parm/metplus/PcpCombine_fcst_ASNOW.conf | 133 ++++++++++++++++++++++ scripts/exregional_get_obs_nohrsc.sh | 142 ++++++++++++++++++++++++ 3 files changed, 366 insertions(+) create mode 100755 jobs/JREGIONAL_GET_OBS_NOHRSC create mode 100644 parm/metplus/PcpCombine_fcst_ASNOW.conf create mode 100755 scripts/exregional_get_obs_nohrsc.sh diff --git a/jobs/JREGIONAL_GET_OBS_NOHRSC b/jobs/JREGIONAL_GET_OBS_NOHRSC new file mode 100755 index 0000000000..cc892951fd --- /dev/null +++ b/jobs/JREGIONAL_GET_OBS_NOHRSC @@ -0,0 +1,91 @@ +#!/bin/bash + +# +#----------------------------------------------------------------------- +# +# This script pulls NOHRSC observation data for comparison to the model for +# the requested accumulations. Supported accumulations: 01h, 03h, and 06h. +# NOTE: Accumulation is currently hardcoded to 06h. +# The verification uses MET/pcp-combine to sum 06h files into +# desired accumulations. +# +#----------------------------------------------------------------------- +# + +# +#----------------------------------------------------------------------- +# +# Source the variable definitions file and the bash utility functions. +# +#----------------------------------------------------------------------- +# +. $USHdir/source_util_funcs.sh +source_config_for_task " " ${GLOBAL_VAR_DEFNS_FP} +. $USHdir/job_preamble.sh +# +#----------------------------------------------------------------------- +# +# Save current shell options (in a global array). Then set new options +# for this script/function. +# +#----------------------------------------------------------------------- +# +{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 +# +#----------------------------------------------------------------------- +# +# Get the full path to the file in which this script/function is located +# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in +# which the file is located (scrfunc_dir). +# +#----------------------------------------------------------------------- +# +scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) +scrfunc_fn=$( basename "${scrfunc_fp}" ) +scrfunc_dir=$( dirname "${scrfunc_fp}" ) +# +#----------------------------------------------------------------------- +# +# Print message indicating entry into script. +# +#----------------------------------------------------------------------- +# +print_info_msg " +======================================================================== +Entering script: \"${scrfunc_fn}\" +In directory: \"${scrfunc_dir}\" + +This is the J-job script for the task that pulls NOHRSC observation data +for verification purposes. +========================================================================" + +# +# +#----------------------------------------------------------------------- +# +# Call the ex-script for this J-job and pass to it the necessary varia- +# bles. +# +#----------------------------------------------------------------------- +# +$SCRIPTSdir/exregional_get_obs_nohrsc.sh || \ +print_err_msg_exit "\ +Call to ex-script corresponding to J-job \"${scrfunc_fn}\" failed." +# +#----------------------------------------------------------------------- +# +# Run job postamble. +# +#----------------------------------------------------------------------- +# +job_postamble +# +#----------------------------------------------------------------------- +# +# Restore the shell options saved at the beginning of this script/func- +# tion. +# +#----------------------------------------------------------------------- +# +{ restore_shell_opts; } > /dev/null 2>&1 + diff --git a/parm/metplus/PcpCombine_fcst_ASNOW.conf b/parm/metplus/PcpCombine_fcst_ASNOW.conf new file mode 100644 index 0000000000..a77c89de60 --- /dev/null +++ b/parm/metplus/PcpCombine_fcst_ASNOW.conf @@ -0,0 +1,133 @@ +# PcpCombine METplus Configuration for Forecasts + +[config] + +# List of applications (tools) to run. +PROCESS_LIST = PcpCombine + +# time looping - options are INIT, VALID, RETRO, and REALTIME +# If set to INIT or RETRO: +# INIT_TIME_FMT, INIT_BEG, INIT_END, and INIT_INCREMENT must also be set +# If set to VALID or REALTIME: +# VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set +LOOP_BY = INIT + +# Format of INIT_BEG and INIT_END using % items +# %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. +# see www.strftime.org for more information +# %Y%m%d%H expands to YYYYMMDDHH +INIT_TIME_FMT = %Y%m%d%H + +# Start time for METplus run - must match INIT_TIME_FMT +INIT_BEG = {{cdate}} + +# End time for METplus run - must match INIT_TIME_FMT +INIT_END = {{cdate}} + +# Increment between METplus runs (in seconds if no units are specified). +# Must be >= 60 seconds. +INIT_INCREMENT = 3600 + +# List of forecast leads to process for each run time (init or valid) +# In hours if units are not specified +# If unset, defaults to 0 (don't loop through forecast leads) +LEAD_SEQ = {{fhr_list}} + +# Order of loops to process data - Options are times, processes +# Not relevant if only one item is in the PROCESS_LIST +# times = run all wrappers in the PROCESS_LIST for a single run time, then +# increment the run time and run all wrappers again until all times have +# been evaluated. +# processes = run the first wrapper in the PROCESS_LIST for all times +# specified, then repeat for the next item in the PROCESS_LIST until all +# wrappers have been run +LOOP_ORDER = times +# +# Specify the name of the METplus log file. +# +LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}} +# +# Specify the location and name of the final METplus conf file. +# +METPLUS_CONF = {FCST_PCP_COMBINE_OUTPUT_DIR}/metplus_final.{{metplus_config_fn}} +# +# Run PcpCombine on forecast data but not observation (observation input +# files are not provided). +# +OBS_PCP_COMBINE_RUN = False +FCST_PCP_COMBINE_RUN = True +# +# Mode of PcpCombine to use (SUM, ADD, SUBTRACT, DERIVE, or CUSTOM). +# +FCST_PCP_COMBINE_METHOD = ADD +# +# Specify name of variable for Snowfall Accumulation. +# +FCST_PCP_COMBINE_INPUT_NAMES=TSNOWP + +FCST_PCP_COMBINE_INPUT_LEVELS = A01 +# +# Specify how to name the array in the NetCDF file that PcpCombine +# generates. +# +FCST_PCP_COMBINE_OUTPUT_NAME = {{fieldname_in_met_output}} +# +# Accumulation interval available in the forecast input data. +# +FCST_PCP_COMBINE_INPUT_ACCUMS = 01 +# +# Accumulation interval to generate in the output file. +# +FCST_PCP_COMBINE_OUTPUT_ACCUM = {{accum_hh}} + +# If the "bucket" output NetCDF file already exists, DON'T skip the call +# to PcpCombine. +# +# In general, we want to recreate the files when the SRW App workflow +# task that uses this METplus configuration file is relaunched. +# +PCP_COMBINE_SKIP_IF_OUTPUT_EXISTS = False + +# Maximum forecast lead to allow when searching for model data to use in +# PcpCombine. Default is a very large time (4000 years) so setting this +# to a valid maximum value can speed up execution time of numerous runs. +FCST_PCP_COMBINE_MAX_FORECAST = 2d + +# Keep initialization time constant. +FCST_PCP_COMBINE_CONSTANT_INIT = True + +FCST_PCP_COMBINE_INPUT_DATATYPE = GRIB +FCST_NATIVE_DATA_TYPE = GRIB + +# End of [config] section and start of [dir] section. +[dir] +# +# Directory containing forecast input to PcpCombine. +# +FCST_PCP_COMBINE_INPUT_DIR = {{fcst_input_dir}} +# +# Directory in which to write output from PcpCombine. +# +# OUTPUT_BASE apparently has to be set to something; it cannot be left +# to its default value. But it is not explicitly used elsewhere in this +# configuration file. +# +OUTPUT_BASE = {{output_base}} +FCST_PCP_COMBINE_OUTPUT_DIR = {{output_dir}} +# +# Directory for staging data. +# +STAGING_DIR = {{staging_dir}} + +# End of [dir] section and start of [filename_templates] section. +[filename_templates] +# +# Template for forecast input to PcpCombine relative to +# FCST_PCP_COMBINE_INPUT_DIR. +# +FCST_PCP_COMBINE_INPUT_TEMPLATE = {{fcst_input_fn_template}} +# +# Template for output from PCPCOMBINE relative to +# FCST_PCP_COMBINE_OUTPUT_DIR. +# +FCST_PCP_COMBINE_OUTPUT_TEMPLATE = {{output_fn_template}} diff --git a/scripts/exregional_get_obs_nohrsc.sh b/scripts/exregional_get_obs_nohrsc.sh new file mode 100755 index 0000000000..efa3fa0462 --- /dev/null +++ b/scripts/exregional_get_obs_nohrsc.sh @@ -0,0 +1,142 @@ +#!/bin/bash + +# +#----------------------------------------------------------------------- +# +# Source the variable definitions file and the bash utility functions. +# +#----------------------------------------------------------------------- +# +. $USHdir/source_util_funcs.sh +source_config_for_task " " ${GLOBAL_VAR_DEFNS_FP} +# +#----------------------------------------------------------------------- +# +# Save current shell options (in a global array). Then set new options +# for this script/function. +# +#----------------------------------------------------------------------- +# +{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 +# +#----------------------------------------------------------------------- +# +# This script retrieves and organizes the NOHRSC data into a more intuitive structure: +# A valid YYYYMMDD directory is created, and all files for the valid day are placed within the directory. +# NOTE: Accumulation is currently hardcoded to 06h and 24h which are aavailable every 6 and 12 hour, respectively.. +# +#----------------------------------------------------------------------- +# + +set -x + +# Top-level NOHRSC directory +nohrsc_dir=${OBS_DIR}/.. +if [[ ! -d "$nohrsc_dir" ]]; then + mkdir_vrfy -p $nohrsc_dir +fi + +# NOHRSC data from HPSS +nohrsc_raw=$nohrsc_dir/raw +if [[ ! -d "$nohrsc_raw" ]]; then + mkdir_vrfy -p $nohrsc_raw +fi + +# Reorganized NOHRSC location +nohrsc_proc=$nohrsc_dir/proc +if [[ ! -d "$nohrsc_proc" ]]; then + mkdir_vrfy -p $nohrsc_proc +fi + +# Accumulation is for accumulation of NOHRSC data to pull (hardcoded to 06h, see note above.) +#accum=${ACCUM} +accum=06 + +# Initialization +yyyymmdd=${PDY} +hh=${cyc} + +init=${CDATE}${hh} + +fhr_last=`echo ${FHR} | awk '{ print $NF }'` + +# Forecast length +fcst_length=${fhr_last} + +current_fcst=$accum +while [[ ${current_fcst} -le ${fcst_length} ]]; do + # Calculate valid date info + fcst_sec=`expr ${current_fcst} \* 3600` # convert forecast lead hour to seconds + yyyy=`echo ${init} | cut -c1-4` # year (YYYY) of initialization time + mm=`echo ${init} | cut -c5-6` # month (MM) of initialization time + dd=`echo ${init} | cut -c7-8` # day (DD) of initialization time + hh=`echo ${init} | cut -c9-10` # hour (HH) of initialization time + init_ut=`$DATE_UTIL -ud ''${yyyy}-${mm}-${dd}' UTC '${hh}':00:00' +%s` # convert initialization time to universal time + vdate_ut=`expr ${init_ut} + ${fcst_sec}` # calculate current forecast time in universal time + vdate=`$DATE_UTIL -ud '1970-01-01 UTC '${vdate_ut}' seconds' +%Y%m%d%H` # convert universal time to standard time + vyyyymmdd=`echo ${vdate} | cut -c1-8` # forecast time (YYYYMMDD) + vyyyy=`echo ${vdate} | cut -c1-4` # year (YYYY) of valid time + vmm=`echo ${vdate} | cut -c5-6` # month (MM) of valid time + vdd=`echo ${vdate} | cut -c7-8` # day (DD) of valid time + vhh=`echo ${vdate} | cut -c9-10` # forecast hour (HH) + #vhh_noZero=$(( ${vhh} + 0) + + + # Create necessary raw and prop directories + if [[ ! -d "$nohrsc_raw/${vyyyymmdd}" ]]; then + mkdir_vrfy -p $nohrsc_raw/${vyyyymmdd} + fi + + if [[ ! -d "$nohrsc_proc/${vyyyymmdd}" ]]; then + mkdir_vrfy -p $nohrsc_proc/${vyyyymmdd} + fi + + # Name of NOHRSC tar file on HPSS is dependent on date. Logic accounts for files from 2019 until Sept. 2020. + + TarFile="/NCEPPROD/hpssprod/runhistory/rh${vyyyy}/${vyyyy}${vmm}/${vyyyy}${vmm}${vdd}/dcom_prod_${vyyyy}${vmm}${vdd}.tar" + + # Check if file exists on disk; if not, pull it. + #nohrsc_file="$nohrsc_proc/${vyyyymmdd}/nohrsc.t${vhh}z.${accum}h.hrap.conus.gb2" + + #nohrsc_file="$nohrsc_proc/${vyyyymmdd}/./wgrbbul/nohrsc_snowfall/sfav2_CONUS_${accum}h_${vyyyymmdd}${vhh}_grid184.grb2" + accum_noZero=$(( 10#$accum + 0 )) + nohrsc_file="$nohrsc_proc/${vyyyymmdd}/sfav2_CONUS_06h_${vyyyymmdd}${vhh}_grid184.grb2" + echo "NOHRSC FILE:${nohrsc_file}" + if [[ ! -f "${nohrsc_file}" ]]; then + + if (( ${current_fcst} % 6 == 0 )) ; then + cd_vrfy $nohrsc_raw/${vyyyymmdd} + # Pull NOHRSC data from HPSS + TarCommand="htar -xvf ${TarFile} \`htar -tf ${TarFile} | egrep \"sfav2_CONUS_6h_${vyyyymmdd}${vhh}_grid184.grb2\" | awk '{print \$7}'\`" + echo "CALLING: ${TarCommand}" + htar -xvf ${TarFile} `htar -tf ${TarFile} | egrep "sfav2_CONUS_6h_${vyyyymmdd}${vhh}_grid184.grb2" | awk '{print \$7}'` + + cp_vrfy $nohrsc_raw/${vyyyymmdd}/wgrbbul/nohrsc_snowfall/sfav2_CONUS_6h_${vyyyymmdd}${vhh}_grid184.grb2 $nohrsc_proc/${vyyyymmdd}/sfav2_CONUS_06h_${vyyyymmdd}${vhh}_grid184.grb2 + fi + + if (( ${current_fcst} % 12 == 0 )) && (( ${current_fcst} >= 24 )) ; then + cd_vrfy $nohrsc_raw/${vyyyymmdd} + # Pull NOHRSC data from HPSS + TarCommand="htar -xvf ${TarFile} \`htar -tf ${TarFile} | egrep \"sfav2_CONUS_24h_${vyyyymmdd}${vhh}_grid184.grb2\" | awk '{print \$7}'\`" + echo "CALLING: ${TarCommand}" + htar -xvf ${TarFile} `htar -tf ${TarFile} | egrep "sfav2_CONUS_24h_${vyyyymmdd}${vhh}_grid184.grb2" | awk '{print \$7}'` + + cp_vrfy $nohrsc_raw/${vyyyymmdd}/wgrbbul/nohrsc_snowfall/sfav2_CONUS_24h_${vyyyymmdd}${vhh}_grid184.grb2 $nohrsc_proc/${vyyyymmdd}/sfav2_CONUS_24h_${vyyyymmdd}${vhh}_grid184.grb2 + fi + fi + + # Increment to next forecast hour + current_fcst=$((${current_fcst} + 06)) + echo "Current fcst hr=${current_fcst}" + +done +# +#----------------------------------------------------------------------- +# +# Restore the shell options saved at the beginning of this script/func- +# tion. +# +#----------------------------------------------------------------------- +# +{ restore_shell_opts; } > /dev/null 2>&1 + From 6ea427bd0ac97ae71c04d18dcf47386b37a68727 Mon Sep 17 00:00:00 2001 From: willmayfield Date: Fri, 23 Jun 2023 05:22:12 +0000 Subject: [PATCH 3/9] metplus conf files for pcp_combine and gridstat related to accumulated snowfall --- parm/metplus/GridStat_ASNOW06h.conf | 313 ++++++++++++++++++ ...ne_fcst.conf => PcpCombine_fcst_APCP.conf} | 0 ...bine_obs.conf => PcpCombine_obs_APCP.conf} | 0 3 files changed, 313 insertions(+) create mode 100644 parm/metplus/GridStat_ASNOW06h.conf rename parm/metplus/{PcpCombine_fcst.conf => PcpCombine_fcst_APCP.conf} (100%) rename parm/metplus/{PcpCombine_obs.conf => PcpCombine_obs_APCP.conf} (100%) diff --git a/parm/metplus/GridStat_ASNOW06h.conf b/parm/metplus/GridStat_ASNOW06h.conf new file mode 100644 index 0000000000..befa82fe81 --- /dev/null +++ b/parm/metplus/GridStat_ASNOW06h.conf @@ -0,0 +1,313 @@ +# GridStat METplus Configuration + +# section heading for [config] variables - all items below this line and +# before the next section heading correspond to the [config] section +[config] + +# List of applications to run - only GridStat for this case +PROCESS_LIST = GridStat + +# time looping - options are INIT, VALID, RETRO, and REALTIME +# If set to INIT or RETRO: +# INIT_TIME_FMT, INIT_BEG, INIT_END, and INIT_INCREMENT must also be set +# If set to VALID or REALTIME: +# VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set +LOOP_BY = INIT + +# Format of INIT_BEG and INIT_END using % items +# %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. +# see www.strftime.org for more information +# %Y%m%d%H expands to YYYYMMDDHH +INIT_TIME_FMT = %Y%m%d%H + +# Start time for METplus run - must match INIT_TIME_FMT +INIT_BEG = {ENV[CDATE]} + +# End time for METplus run - must match INIT_TIME_FMT +INIT_END = {ENV[CDATE]} + +# Increment between METplus runs (in seconds if no units are specified). +# Must be >= 60 seconds. +INIT_INCREMENT = 3600 + +# List of forecast leads to process for each run time (init or valid) +# In hours if units are not specified +# If unset, defaults to 0 (don't loop through forecast leads) +LEAD_SEQ = {ENV[fhr_list]} + +# Order of loops to process data - Options are times, processes +# Not relevant if only one item is in the PROCESS_LIST +# times = run all wrappers in the PROCESS_LIST for a single run time, then +# increment the run time and run all wrappers again until all times have +# been evaluated. +# processes = run the first wrapper in the PROCESS_LIST for all times +# specified, then repeat for the next item in the PROCESS_LIST until all +# wrappers have been run +LOOP_ORDER = times + +# Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only +#LOG_GRID_STAT_VERBOSITY = 2 + +# +# Specify the name of the METplus log file. +# +LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} +# +# Specify the location and name of the final METplus conf file. +# +METPLUS_CONF = {OUTPUT_BASE}/metprd/GridStat/metplus_final.ASNOW_06h.conf +# +# Location of MET config file to pass to GridStat. +# +GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped + +# grid to remap data. Value is set as the 'to_grid' variable in the 'regrid' dictionary +# See MET User's Guide for more information +GRID_STAT_REGRID_TO_GRID = FCST +GRID_STAT_REGRID_VLD_THRESH = 0.5 +GRID_STAT_REGRID_METHOD = BUDGET +GRID_STAT_REGRID_WIDTH = 2 +GRID_STAT_REGRID_SHAPE = SQUARE + +#GRID_STAT_INTERP_FIELD = BOTH +#GRID_STAT_INTERP_VLD_THRESH = 1.0 +#GRID_STAT_INTERP_SHAPE = SQUARE +#GRID_STAT_INTERP_TYPE_METHOD = NEAREST +#GRID_STAT_INTERP_TYPE_WIDTH = 1 + +#GRID_STAT_GRID_WEIGHT_FLAG = + +# +# Name to identify model (forecast) data in output. +# +# The variable MODEL is recorded in the stat files, and the data in +# these files is then plotted (e.g. using METViewer). Here, we add a +# suffix to MODEL that identifies the forecast ensemble member. This +# makes it easier to identify each curve. +# +MODEL = {ENV[VX_FCST_MODEL_NAME]}_mem{ENV[ENSMEM_INDX]} + +FCST_NATIVE_DATA_TYPE = GRIB +# +# Name to identify observation data in output. +# +OBTYPE = ASNOW +OBS_NATIVE_DATA_TYPE = GRIB +# +# Value to enter under the DESC column in the output stat file. +# +GRID_STAT_DESC = NA + +# List of variables to compare in GridStat - FCST_VAR1 variables correspond +# to OBS_VAR1 variables +# Note [FCST/OBS/BOTH]_GRID_STAT_VAR_NAME can be used instead if different evaluations +# are needed for different tools + +GRID_STAT_MET_CONFIG_OVERRIDES = cat_thresh = [NA]; cnt_thresh = [NA]; cnt_logic = UNION; wind_thresh = [NA]; wind_logic = UNION; ci_alpha = [0.05]; rank_corr_flag = FALSE; +# +# String to search for in the foreast input files for forecast variable +# 1. +# +FCST_VAR1_NAME = ASNOW_06 +# +# List of levels to evaluate for forecast variable 1. +# +FCST_VAR1_LEVELS = A06 + +OBS_VAR1_OPTIONS = convert(x) = 100.0*x; +# +# List of thresholds to evaluate for each name/level combination for +# forecast variable 1. +# +BOTH_VAR1_THRESH = gt0.0,ge2.54,ge5.08,ge10.16,ge20.32 +# +# String to search for in the observation input files for observation +# variable 1. +# +OBS_VAR1_NAME = ASNOW +# +# List of levels to evaluate for observation variable 1. Must be the +# same length as FCST_VAR1_LEVELS. +# +OBS_VAR1_LEVELS = A06 +# +# Time relative to valid time (in seconds) to allow files to be considered +# valid. Set both BEGIN and END to 0 to require the exact time in the +# filename. Not used in this example. +# +FCST_GRID_STAT_FILE_WINDOW_BEGIN = 0 +FCST_GRID_STAT_FILE_WINDOW_END = 0 +OBS_GRID_STAT_FILE_WINDOW_BEGIN = 0 +OBS_GRID_STAT_FILE_WINDOW_END = 0 + +# MET GridStat neighborhood values +# See the MET User's Guide GridStat section for more information +GRID_STAT_NEIGHBORHOOD_FIELD = BOTH + +# width value passed to nbrhd dictionary in the MET config file +GRID_STAT_NEIGHBORHOOD_WIDTH = 5 + +# shape value passed to nbrhd dictionary in the MET config file +GRID_STAT_NEIGHBORHOOD_SHAPE = SQUARE + +# cov thresh list passed to nbrhd dictionary in the MET config file +GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5 + +# Set to true to run GridStat separately for each field specified +# Set to false to create one run of GridStat per run time that +# includes all fields specified. +GRID_STAT_ONCE_PER_FIELD = False +# +# Set to true if forecast data is probabilistic. +# +FCST_IS_PROB = False +# +# Only used if FCST_IS_PROB is true - sets probabilistic threshold +# +FCST_GRID_STAT_PROB_THRESH = ==0.1 + +GRID_STAT_OUTPUT_PREFIX = {MODEL}_{CURRENT_FCST_NAME}_{ENV[acc]}_{OBTYPE} + +# Climatology data +#GRID_STAT_CLIMO_MEAN_FILE_NAME = +#GRID_STAT_CLIMO_MEAN_FIELD = +#GRID_STAT_CLIMO_MEAN_REGRID_METHOD = +#GRID_STAT_CLIMO_MEAN_REGRID_WIDTH = +#GRID_STAT_CLIMO_MEAN_REGRID_VLD_THRESH = +#GRID_STAT_CLIMO_MEAN_REGRID_SHAPE = +#GRID_STAT_CLIMO_MEAN_TIME_INTERP_METHOD = +#GRID_STAT_CLIMO_MEAN_MATCH_MONTH = +#GRID_STAT_CLIMO_MEAN_DAY_INTERVAL = +#GRID_STAT_CLIMO_MEAN_HOUR_INTERVAL = + +#GRID_STAT_CLIMO_STDEV_FILE_NAME = +#GRID_STAT_CLIMO_STDEV_FIELD = +#GRID_STAT_CLIMO_STDEV_REGRID_METHOD = +#GRID_STAT_CLIMO_STDEV_REGRID_WIDTH = +#GRID_STAT_CLIMO_STDEV_REGRID_VLD_THRESH = +#GRID_STAT_CLIMO_STDEV_REGRID_SHAPE = +#GRID_STAT_CLIMO_STDEV_TIME_INTERP_METHOD = +#GRID_STAT_CLIMO_STDEV_MATCH_MONTH = +#GRID_STAT_CLIMO_STDEV_DAY_INTERVAL = +#GRID_STAT_CLIMO_STDEV_HOUR_INTERVAL = + +#GRID_STAT_CLIMO_CDF_BINS = 1 +#GRID_STAT_CLIMO_CDF_CENTER_BINS = False +#GRID_STAT_CLIMO_CDF_WRITE_BINS = True + +GRID_STAT_MASK_GRID = + +# Statistical output types +GRID_STAT_OUTPUT_FLAG_FHO = STAT +GRID_STAT_OUTPUT_FLAG_CTC = STAT +GRID_STAT_OUTPUT_FLAG_CTS = STAT +#GRID_STAT_OUTPUT_FLAG_MCTC = NONE +#GRID_STAT_OUTPUT_FLAG_MCTS = NONE +GRID_STAT_OUTPUT_FLAG_CNT = STAT +#GRID_STAT_OUTPUT_FLAG_SL1L2 = NONE +#GRID_STAT_OUTPUT_FLAG_SAL1L2 = NONE +#GRID_STAT_OUTPUT_FLAG_VL1L2 = NONE +#GRID_STAT_OUTPUT_FLAG_VAL1L2 = NONE +#GRID_STAT_OUTPUT_FLAG_VCNT = NONE +#GRID_STAT_OUTPUT_FLAG_PCT = NONE +#GRID_STAT_OUTPUT_FLAG_PSTD = NONE +#GRID_STAT_OUTPUT_FLAG_PJC = NONE +#GRID_STAT_OUTPUT_FLAG_PRC = NONE +#GRID_STAT_OUTPUT_FLAG_ECLV = BOTH +GRID_STAT_OUTPUT_FLAG_NBRCTC = STAT +GRID_STAT_OUTPUT_FLAG_NBRCTS = STAT +GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT +#GRID_STAT_OUTPUT_FLAG_GRAD = BOTH +#GRID_STAT_OUTPUT_FLAG_DMAP = NONE + +# NetCDF matched pairs output file +##GRID_STAT_NC_PAIRS_VAR_NAME = +#GRID_STAT_NC_PAIRS_FLAG_LATLON = FALSE +#GRID_STAT_NC_PAIRS_FLAG_RAW = FALSE +#GRID_STAT_NC_PAIRS_FLAG_DIFF = FALSE +#GRID_STAT_NC_PAIRS_FLAG_CLIMO = FALSE +##GRID_STAT_NC_PAIRS_FLAG_CLIMO_CDP = FALSE +#GRID_STAT_NC_PAIRS_FLAG_WEIGHT = FALSE +#GRID_STAT_NC_PAIRS_FLAG_NBRHD = FALSE +##GRID_STAT_NC_PAIRS_FLAG_FOURIER = FALSE +##GRID_STAT_NC_PAIRS_FLAG_GRADIENT = FALSE +##GRID_STAT_NC_PAIRS_FLAG_DISTANCE_MAP = FALSE +#GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE + +# NetCDF matched pairs output file +#GRID_STAT_NC_PAIRS_VAR_NAME = +GRID_STAT_NC_PAIRS_FLAG_LATLON = TRUE +GRID_STAT_NC_PAIRS_FLAG_RAW = TRUE +GRID_STAT_NC_PAIRS_FLAG_DIFF = FALSE +GRID_STAT_NC_PAIRS_FLAG_CLIMO = FALSE +#GRID_STAT_NC_PAIRS_FLAG_CLIMO_CDP = FALSE +GRID_STAT_NC_PAIRS_FLAG_WEIGHT = FALSE +GRID_STAT_NC_PAIRS_FLAG_NBRHD = TRUE +#GRID_STAT_NC_PAIRS_FLAG_FOURIER = FALSE +#GRID_STAT_NC_PAIRS_FLAG_GRADIENT = FALSE +#GRID_STAT_NC_PAIRS_FLAG_DISTANCE_MAP = FALSE +GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = TRUE + +# End of [config] section and start of [dir] section. +[dir] +# +# Directory containing observation input to GridStat. +# +#OBS_GRID_STAT_INPUT_DIR = {ENV[EXPTDIR]}/metprd/PcpCombine_obs +OBS_GRID_STAT_INPUT_DIR = {ENV[EXPTDIR]}/../../../snowfall/obs_data_nohrsc/proc/ +# +# Directory containing forecast input to GridStat. +# +FCST_GRID_STAT_INPUT_DIR = {OUTPUT_BASE}/metprd/PcpCombine_fcst +# +# Directory containing climatology mean input to GridStat. Not used in +# this example. +# +GRID_STAT_CLIMO_MEAN_INPUT_DIR = +# +# Directory containing climatology mean input to GridStat. Not used in +# this example. +# +GRID_STAT_CLIMO_STDEV_INPUT_DIR = +# +# Directory in which to write output from GridStat. +# +OUTPUT_BASE = {ENV[OUTPUT_BASE]} +GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} +# +# Directory for staging data. +# +STAGING_DIR = {OUTPUT_BASE}/stage/ASNOW_06h + +# End of [dir] section and start of [filename_templates] section. +[filename_templates] +# +# Template for observation input to GridStat relative to +# OBS_GRID_STAT_INPUT_DIR. +# +#OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/sfav2_CONUS_{level?fmt=%HH}h_{valid?fmt=%Y%m%d}{valid?fmt=%H}_grid184.grb2_a{level?fmt=%HH}h.nc +OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/sfav2_CONUS_{level?fmt=%HH}h_{valid?fmt=%Y%m%d}{valid?fmt=%H}_grid184.grb2 +# +# Template for forecast input to GridStat relative to +# FCST_GRID_STAT_INPUT_DIR. +# +FCST_GRID_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}_a{level?fmt=%HH}h.nc +# +# Template for output from GridStat relative to GRID_STAT_OUTPUT_DIR. +# +GRID_STAT_OUTPUT_TEMPLATE = metprd/GridStat +# +# Template for climatology input to GridStat relative to +# GRID_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. +# +GRID_STAT_CLIMO_MEAN_INPUT_TEMPLATE = +# +# Template for climatology input to GridStat relative to +# GRID_STAT_CLIMO_STDEV_INPUT_DIR. Not used in this example. +# +GRID_STAT_CLIMO_STDEV_INPUT_TEMPLATE = +# +# Variable used to specify one or more verification mask files for +# GridStat. Not used for this example. +# +GRID_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly diff --git a/parm/metplus/PcpCombine_fcst.conf b/parm/metplus/PcpCombine_fcst_APCP.conf similarity index 100% rename from parm/metplus/PcpCombine_fcst.conf rename to parm/metplus/PcpCombine_fcst_APCP.conf diff --git a/parm/metplus/PcpCombine_obs.conf b/parm/metplus/PcpCombine_obs_APCP.conf similarity index 100% rename from parm/metplus/PcpCombine_obs.conf rename to parm/metplus/PcpCombine_obs_APCP.conf From 94fabfd206c2702be3965c9f585783d587e5d8a2 Mon Sep 17 00:00:00 2001 From: willmayfield Date: Tue, 27 Jun 2023 02:17:17 +0000 Subject: [PATCH 4/9] GridStat vx for snowfall accumulation --- ...Stat_ASNOW06h.conf => GridStat_ASNOW.conf} | 50 ++++++++++--------- parm/wflow/verify_det.yaml | 3 +- parm/wflow/verify_pre.yaml | 17 ++++--- ...gional_run_met_gridstat_or_pointstat_vx.sh | 15 +++--- ush/set_vx_params.sh | 4 +- 5 files changed, 49 insertions(+), 40 deletions(-) rename parm/metplus/{GridStat_ASNOW06h.conf => GridStat_ASNOW.conf} (87%) diff --git a/parm/metplus/GridStat_ASNOW06h.conf b/parm/metplus/GridStat_ASNOW.conf similarity index 87% rename from parm/metplus/GridStat_ASNOW06h.conf rename to parm/metplus/GridStat_ASNOW.conf index befa82fe81..df199be5a8 100644 --- a/parm/metplus/GridStat_ASNOW06h.conf +++ b/parm/metplus/GridStat_ASNOW.conf @@ -21,10 +21,10 @@ LOOP_BY = INIT INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} +INIT_BEG = {{cdate}} # End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} +INIT_END = {{cdate}} # Increment between METplus runs (in seconds if no units are specified). # Must be >= 60 seconds. @@ -33,7 +33,7 @@ INIT_INCREMENT = 3600 # List of forecast leads to process for each run time (init or valid) # In hours if units are not specified # If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[fhr_list]} +LEAD_SEQ = {{fhr_list}} # Order of loops to process data - Options are times, processes # Not relevant if only one item is in the PROCESS_LIST @@ -51,11 +51,11 @@ LOOP_ORDER = times # # Specify the name of the METplus log file. # -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} +LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}} # # Specify the location and name of the final METplus conf file. # -METPLUS_CONF = {OUTPUT_BASE}/metprd/GridStat/metplus_final.ASNOW_06h.conf +METPLUS_CONF = {GRID_STAT_OUTPUT_DIR}/metplus_final.{{metplus_config_fn}} # # Location of MET config file to pass to GridStat. # @@ -85,13 +85,13 @@ GRID_STAT_REGRID_SHAPE = SQUARE # suffix to MODEL that identifies the forecast ensemble member. This # makes it easier to identify each curve. # -MODEL = {ENV[VX_FCST_MODEL_NAME]}_mem{ENV[ENSMEM_INDX]} +MODEL = {{vx_fcst_model_name}}_{{ensmem_name}} FCST_NATIVE_DATA_TYPE = GRIB # # Name to identify observation data in output. # -OBTYPE = ASNOW +OBTYPE = {{obtype}} OBS_NATIVE_DATA_TYPE = GRIB # # Value to enter under the DESC column in the output stat file. @@ -108,28 +108,30 @@ GRID_STAT_MET_CONFIG_OVERRIDES = cat_thresh = [NA]; cnt_thresh = [NA]; cnt_logic # String to search for in the foreast input files for forecast variable # 1. # -FCST_VAR1_NAME = ASNOW_06 +FCST_VAR1_NAME = {{fieldname_in_fcst_input}} # # List of levels to evaluate for forecast variable 1. # -FCST_VAR1_LEVELS = A06 +ACCUM_HH = {{accum_hh}} +FCST_VAR1_LEVELS = A{ACCUM_HH} +FCST_VAR1_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; OBS_VAR1_OPTIONS = convert(x) = 100.0*x; # # List of thresholds to evaluate for each name/level combination for # forecast variable 1. # -BOTH_VAR1_THRESH = gt0.0,ge2.54,ge5.08,ge10.16,ge20.32 +BOTH_VAR1_THRESH = {{field_thresholds}} # # String to search for in the observation input files for observation # variable 1. # -OBS_VAR1_NAME = ASNOW +OBS_VAR1_NAME = {{fieldname_in_obs_input}} # # List of levels to evaluate for observation variable 1. Must be the # same length as FCST_VAR1_LEVELS. # -OBS_VAR1_LEVELS = A06 +OBS_VAR1_LEVELS = A{ACCUM_HH} # # Time relative to valid time (in seconds) to allow files to be considered # valid. Set both BEGIN and END to 0 to require the exact time in the @@ -166,7 +168,7 @@ FCST_IS_PROB = False # FCST_GRID_STAT_PROB_THRESH = ==0.1 -GRID_STAT_OUTPUT_PREFIX = {MODEL}_{CURRENT_FCST_NAME}_{ENV[acc]}_{OBTYPE} +GRID_STAT_OUTPUT_PREFIX = {MODEL}_{{fieldname_in_met_filedir_names}}{ACCUM_HH}h_{OBTYPE} # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = @@ -253,12 +255,11 @@ GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = TRUE # # Directory containing observation input to GridStat. # -#OBS_GRID_STAT_INPUT_DIR = {ENV[EXPTDIR]}/metprd/PcpCombine_obs -OBS_GRID_STAT_INPUT_DIR = {ENV[EXPTDIR]}/../../../snowfall/obs_data_nohrsc/proc/ +OBS_GRID_STAT_INPUT_DIR = {{obs_input_dir}} # # Directory containing forecast input to GridStat. # -FCST_GRID_STAT_INPUT_DIR = {OUTPUT_BASE}/metprd/PcpCombine_fcst +FCST_GRID_STAT_INPUT_DIR = {{fcst_input_dir}} # # Directory containing climatology mean input to GridStat. Not used in # this example. @@ -272,12 +273,16 @@ GRID_STAT_CLIMO_STDEV_INPUT_DIR = # # Directory in which to write output from GridStat. # -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} +# OUTPUT_BASE apparently has to be set to something; it cannot be left +# to its default value. But it is not explicitly used elsewhere in this +# configuration file. +# +OUTPUT_BASE = {{output_base}} +GRID_STAT_OUTPUT_DIR = {{output_dir}} # # Directory for staging data. # -STAGING_DIR = {OUTPUT_BASE}/stage/ASNOW_06h +STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. [filename_templates] @@ -285,17 +290,16 @@ STAGING_DIR = {OUTPUT_BASE}/stage/ASNOW_06h # Template for observation input to GridStat relative to # OBS_GRID_STAT_INPUT_DIR. # -#OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/sfav2_CONUS_{level?fmt=%HH}h_{valid?fmt=%Y%m%d}{valid?fmt=%H}_grid184.grb2_a{level?fmt=%HH}h.nc -OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/sfav2_CONUS_{level?fmt=%HH}h_{valid?fmt=%Y%m%d}{valid?fmt=%H}_grid184.grb2 +OBS_GRID_STAT_INPUT_TEMPLATE = {{obs_input_fn_template}} # # Template for forecast input to GridStat relative to # FCST_GRID_STAT_INPUT_DIR. # -FCST_GRID_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}_a{level?fmt=%HH}h.nc +FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # # Template for output from GridStat relative to GRID_STAT_OUTPUT_DIR. # -GRID_STAT_OUTPUT_TEMPLATE = metprd/GridStat +GRID_STAT_OUTPUT_TEMPLATE = # # Template for climatology input to GridStat relative to # GRID_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. diff --git a/parm/wflow/verify_det.yaml b/parm/wflow/verify_det.yaml index be5969fe75..c39a872d5e 100644 --- a/parm/wflow/verify_det.yaml +++ b/parm/wflow/verify_det.yaml @@ -74,10 +74,9 @@ metatask_GridStat_NOHRSC_all_accums_all_mems: SLASH_ENSMEM_SUBDIR_OR_NULL: '{% if global.DO_ENSEMBLE %}{{ "/mem#mem#" }}{% endif %}' walltime: 02:00:00 dependency: - and: taskdep_pcpcombine_fcst: attrs: - task: run_MET_PcpCombine_fcst_APCP#ACCUM_HH#h_mem#mem# + task: run_MET_PcpCombine_fcst_ASNOW#ACCUM_HH#h_mem#mem# metatask_GridStat_MRMS_all_mems: var: diff --git a/parm/wflow/verify_pre.yaml b/parm/wflow/verify_pre.yaml index 1a0ee92a91..22096b328f 100644 --- a/parm/wflow/verify_pre.yaml +++ b/parm/wflow/verify_pre.yaml @@ -39,7 +39,6 @@ task_get_obs_nohrsc: command: '&LOAD_MODULES_RUN_TASK_FP; "get_obs" "&JOBSdir;/JREGIONAL_GET_OBS_NOHRSC"' envars: <<: *default_vars - ACCUM_HH: '06' OBS_DIR: '&NOHRSC_OBS_DIR;' FHR: '{% for h in range(0, workflow.FCST_LEN_HRS+1) %}{{ " %02d" % h }}{% endfor %}' partition: '{% if platform.get("PARTITION_HPSS") %}&PARTITION_HPSS;{% else %}None{% endif %}' @@ -205,12 +204,12 @@ metatask_check_post_output_all_mems: taskvalid: <<: *fcst_task_exists -metatask_PcpCombine_fcst_all_accums_all_mems: +metatask_PcpCombine_fcst_APCP_all_accums_all_mems: var: - mem: '{% if global.DO_ENSEMBLE %}{% for m in range(1, global.NUM_ENS_MEMBERS+1) %}{{ "%03d "%m }}{%- endfor -%} {% else %}{{ "000"|string }}{% endif %}' - metatask_PcpCombine_fcst_APCP#ACCUM_HH#h_mem#mem#: + ACCUM_HH: '{% for ah in verification.VX_APCP_ACCUMS_HRS %}{% if workflow.FCST_LEN_HRS >= ah %}{{ "%02d " % ah }}{% endif %}{% endfor %}' + metatask_PcpCombine_fcst_APCP#ACCUM_HH#h_all_mems: var: - ACCUM_HH: '{% for ah in verification.VX_APCP_ACCUMS_HRS %}{% if workflow.FCST_LEN_HRS >= ah %}{{ "%02d " % ah }}{% endif %}{% endfor %}' + mem: '{% if global.DO_ENSEMBLE %}{% for m in range(1, global.NUM_ENS_MEMBERS+1) %}{{ "%03d "%m }}{%- endfor -%} {% else %}{{ "000"|string }}{% endif %}' task_run_MET_PcpCombine_fcst_APCP#ACCUM_HH#h_mem#mem#: <<: *default_task_verify_pre attrs: @@ -232,9 +231,13 @@ metatask_PcpCombine_fcst_all_accums_all_mems: age: 00:00:00:30 text: !cycstr '{{ workflow.EXPTDIR }}/@Y@m@d@H/post_files_exist_mem#mem#.txt' walltime: 00:05:00 - metatask_PcpCombine_fcst_ASNOW#ACCUM_HH#h_mem#mem#: + +metatask_PcpCombine_fcst_ASNOW_all_accums_all_mems: + var: + ACCUM_HH: '{% for ah in verification.VX_ASNOW_ACCUMS_HRS %}{% if workflow.FCST_LEN_HRS >= ah %}{{ "%02d " % ah }}{% endif %}{% endfor %}' + metatask_PcpCombine_fcst_ASNOW#ACCUM_HH#h_all_mems: var: - ACCUM_HH: '{% for ah in verification.VX_ASNOW_ACCUMS_HRS %}{% if workflow.FCST_LEN_HRS >= ah %}{{ "%02d " % ah }}{% endif %}{% endfor %}' + mem: '{% if global.DO_ENSEMBLE %}{% for m in range(1, global.NUM_ENS_MEMBERS+1) %}{{ "%03d "%m }}{%- endfor -%} {% else %}{{ "000"|string }}{% endif %}' task_run_MET_PcpCombine_fcst_ASNOW#ACCUM_HH#h_mem#mem#: <<: *default_task_verify_pre attrs: diff --git a/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh b/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh index 36272a8903..73f934b796 100755 --- a/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh +++ b/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh @@ -144,10 +144,7 @@ if [ "${grid_or_point}" = "grid" ]; then "APCP24h") FIELD_THRESHOLDS="gt0.0, ge0.254, ge0.508, ge1.27, ge2.54, ge3.810, ge6.350, ge8.890, ge12.700, ge25.400" ;; - "ASNOW06h") - FIELD_THRESHOLDS="gt0.0, ge2.54, ge5.08, ge10.16, ge20.32" - ;; - "ASNOW24h") + "ASNOW") FIELD_THRESHOLDS="gt0.0, ge2.54, ge5.08, ge10.16, ge20.32" ;; "REFC") @@ -218,20 +215,26 @@ if [ "${grid_or_point}" = "grid" ]; then case "${FIELDNAME_IN_MET_FILEDIR_NAMES}" in "APCP01h") OBS_INPUT_FN_TEMPLATE="${OBS_CCPA_APCP01h_FN_TEMPLATE}" + FCST_INPUT_DIR="${vx_fcst_input_basedir}" + FCST_INPUT_FN_TEMPLATE=$( eval echo ${FCST_SUBDIR_TEMPLATE:+${FCST_SUBDIR_TEMPLATE}/}${FCST_FN_TEMPLATE} ) ;; "ASNOW") OBS_INPUT_FN_TEMPLATE="${OBS_NOHRSC_ASNOW_FN_TEMPLATE}" + FCST_INPUT_DIR="${vx_output_basedir}${slash_cdate_or_null}/${slash_ensmem_subdir_or_null}/metprd/PcpCombine_fcst" + FCST_INPUT_FN_TEMPLATE=$( eval echo ${FCST_FN_METPROC_TEMPLATE} ) ;; "REFC") OBS_INPUT_FN_TEMPLATE="${OBS_MRMS_REFC_FN_TEMPLATE}" + FCST_INPUT_DIR="${vx_fcst_input_basedir}" + FCST_INPUT_FN_TEMPLATE=$( eval echo ${FCST_SUBDIR_TEMPLATE:+${FCST_SUBDIR_TEMPLATE}/}${FCST_FN_TEMPLATE} ) ;; "RETOP") OBS_INPUT_FN_TEMPLATE="${OBS_MRMS_RETOP_FN_TEMPLATE}" + FCST_INPUT_DIR="${vx_fcst_input_basedir}" + FCST_INPUT_FN_TEMPLATE=$( eval echo ${FCST_SUBDIR_TEMPLATE:+${FCST_SUBDIR_TEMPLATE}/}${FCST_FN_TEMPLATE} ) ;; esac OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_INPUT_FN_TEMPLATE} ) - FCST_INPUT_DIR="${vx_fcst_input_basedir}" - FCST_INPUT_FN_TEMPLATE=$( eval echo ${FCST_SUBDIR_TEMPLATE:+${FCST_SUBDIR_TEMPLATE}/}${FCST_FN_TEMPLATE} ) fi elif [ "${grid_or_point}" = "point" ]; then diff --git a/ush/set_vx_params.sh b/ush/set_vx_params.sh index bca58e4c7d..d19b753ec2 100644 --- a/ush/set_vx_params.sh +++ b/ush/set_vx_params.sh @@ -173,9 +173,9 @@ this observation type (obtype) and field (field) combination: "ASNOW") fieldname_in_obs_input="${field}" - fieldname_in_fcst_input="${field}" + fieldname_in_fcst_input="${field}_${accum_hh}" fieldname_in_MET_output="${field}_${accum_hh}" - fieldname_in_MET_filedir_names="${field}${accum_hh}h" + fieldname_in_MET_filedir_names="${field}" ;; *) From 412dd335edf89623e1ebd967258a5acba56f222f Mon Sep 17 00:00:00 2001 From: willmayfield Date: Thu, 29 Jun 2023 02:28:52 +0000 Subject: [PATCH 5/9] Changes for ensemble verification of snowfall accumulation --- parm/metplus/EnsembleStat_ASNOW.conf | 277 +++++++++++ parm/metplus/GenEnsProd_ASNOW.conf | 191 ++++++++ parm/metplus/GridStat_ASNOW.conf | 4 +- parm/metplus/GridStat_ensmean_ASNOW.conf | 336 ++++++++++++++ parm/metplus/GridStat_ensprob_ASNOW.conf | 436 ++++++++++++++++++ parm/wflow/verify_ens.yaml | 53 +++ ...onal_run_met_genensprod_or_ensemblestat.sh | 13 +- ...un_met_gridstat_or_pointstat_vx_ensmean.sh | 12 +- ...un_met_gridstat_or_pointstat_vx_ensprob.sh | 9 +- ush/config_defaults.yaml | 2 +- ush/set_vx_params.sh | 2 +- ush/setup.py | 5 +- 12 files changed, 1330 insertions(+), 10 deletions(-) create mode 100644 parm/metplus/EnsembleStat_ASNOW.conf create mode 100644 parm/metplus/GenEnsProd_ASNOW.conf create mode 100644 parm/metplus/GridStat_ensmean_ASNOW.conf create mode 100644 parm/metplus/GridStat_ensprob_ASNOW.conf diff --git a/parm/metplus/EnsembleStat_ASNOW.conf b/parm/metplus/EnsembleStat_ASNOW.conf new file mode 100644 index 0000000000..26511f9894 --- /dev/null +++ b/parm/metplus/EnsembleStat_ASNOW.conf @@ -0,0 +1,277 @@ +# EnsembleStat METplus Configuration + +[config] + +# List of applications (tools) to run. +PROCESS_LIST = EnsembleStat + +# time looping - options are INIT, VALID, RETRO, and REALTIME +# If set to INIT or RETRO: +# INIT_TIME_FMT, INIT_BEG, INIT_END, and INIT_INCREMENT must also be set +# If set to VALID or REALTIME: +# VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set +LOOP_BY = INIT + +# Format of INIT_BEG and INIT_END using % items +# %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. +# see www.strftime.org for more information +# %Y%m%d%H expands to YYYYMMDDHH +INIT_TIME_FMT = %Y%m%d%H + +# Start time for METplus run - must match INIT_TIME_FMT +INIT_BEG = {{cdate}} + +# End time for METplus run - must match INIT_TIME_FMT +INIT_END = {{cdate}} + +# Increment between METplus runs (in seconds if no units are specified). +# Must be >= 60 seconds. +INIT_INCREMENT = 3600 + +# List of forecast leads to process for each run time (init or valid) +# In hours if units are not specified +# If unset, defaults to 0 (don't loop through forecast leads) +LEAD_SEQ = {{fhr_list}} +# +# Order of loops to process data - Options are times, processes +# Not relevant if only one item is in the PROCESS_LIST +# times = run all wrappers in the PROCESS_LIST for a single run time, then +# increment the run time and run all wrappers again until all times have +# been evaluated. +# processes = run the first wrapper in the PROCESS_LIST for all times +# specified, then repeat for the next item in the PROCESS_LIST until all +# wrappers have been run +# +LOOP_ORDER = times +# +# Specify the name of the METplus log file. +# +LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}}{{accum_hh}} +# +# Specify the location and name of the final METplus conf file. +# +METPLUS_CONF = {ENSEMBLE_STAT_OUTPUT_DIR}/metplus_final.{{metplus_config_fn}} +# +# Location of MET configuration file to pass to EnsembleStat. +# +# References PARM_BASE, which is the location of the parm directory +# corresponding to the ush directory of the run_metplus.py script that +# is called or the value of the environment variable METPLUS_PARM_BASE +# if set. +# +ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped +# +# Name to identify model (forecast) data in output. +# +MODEL = {{vx_fcst_model_name}} + +ENSEMBLE_STAT_DESC = NA +# +# Name to identify observation data in output. +# +OBTYPE = {{obtype}} + +# The METplus EnsembleStat logging level +# 0 quiet to 5 loud, Verbosity setting for METplus EnsembleStat output, 2 is default. +# This takes precendence over the general LOG_MET_VERBOSITY set in metplus_logging.conf +#LOG_ENSEMBLE_STAT_VERBOSITY = 2 + +OBS_FILE_WINDOW_BEGIN = 0 +OBS_FILE_WINDOW_END = 0 + +OBS_ENSEMBLE_STAT_WINDOW_BEGIN = 0 +OBS_ENSEMBLE_STAT_WINDOW_END = 0 + +# number of expected members for ensemble. Should correspond with the +# number of items in the list for FCST_ENSEMBLE_STAT_INPUT_TEMPLATE +ENSEMBLE_STAT_N_MEMBERS = {{num_ens_members}} + +# ens.ens_thresh value in the MET config file +# threshold for ratio of valid files to expected files to allow app to run +ENSEMBLE_STAT_ENS_THRESH = 0.05 + +# ens.vld_thresh value in the MET config file +ENSEMBLE_STAT_ENS_VLD_THRESH = 1.0 + +FIELDNAME_IN_MET_FILEDIR_NAMES = {{fieldname_in_met_filedir_names}} + +# ENSEMBLE_STAT_MET_OBS_ERR_TABLE is not required. +# If the variable is not defined, or the value is not set +# than the MET default is used. +ENSEMBLE_STAT_MET_OBS_ERR_TABLE = {MET_BASE}/table_files/obs_error_table.txt + + +# Used in the MET config file for: regrid to_grid field +ENSEMBLE_STAT_REGRID_TO_GRID = FCST +ENSEMBLE_STAT_REGRID_METHOD = BUDGET +ENSEMBLE_STAT_REGRID_WIDTH = 2 +ENSEMBLE_STAT_REGRID_VLD_THRESH = 0.5 +ENSEMBLE_STAT_REGRID_SHAPE = SQUARE + +ENSEMBLE_STAT_CENSOR_THRESH = +ENSEMBLE_STAT_CENSOR_VAL = + +ENSEMBLE_STAT_MESSAGE_TYPE = + +ENSEMBLE_STAT_DUPLICATE_FLAG = UNIQUE +ENSEMBLE_STAT_SKIP_CONST = TRUE + +ENSEMBLE_STAT_OBS_ERROR_FLAG = TRUE + +ENSEMBLE_STAT_ENS_SSVAR_BIN_SIZE = 1.0 +ENSEMBLE_STAT_ENS_PHIST_BIN_SIZE = 0.05 + +#ENSEMBLE_STAT_CLIMO_MEAN_FILE_NAME = +#ENSEMBLE_STAT_CLIMO_MEAN_FIELD = +#ENSEMBLE_STAT_CLIMO_MEAN_REGRID_METHOD = +#ENSEMBLE_STAT_CLIMO_MEAN_REGRID_WIDTH = +#ENSEMBLE_STAT_CLIMO_MEAN_REGRID_VLD_THRESH = +#ENSEMBLE_STAT_CLIMO_MEAN_REGRID_SHAPE = +#ENSEMBLE_STAT_CLIMO_MEAN_TIME_INTERP_METHOD = +#ENSEMBLE_STAT_CLIMO_MEAN_MATCH_MONTH = +#ENSEMBLE_STAT_CLIMO_MEAN_DAY_INTERVAL = 31 +#ENSEMBLE_STAT_CLIMO_MEAN_HOUR_INTERVAL = 6 + +#ENSEMBLE_STAT_CLIMO_STDEV_FILE_NAME = +#ENSEMBLE_STAT_CLIMO_STDEV_FIELD = +#ENSEMBLE_STAT_CLIMO_STDEV_REGRID_METHOD = +#ENSEMBLE_STAT_CLIMO_STDEV_REGRID_WIDTH = +#ENSEMBLE_STAT_CLIMO_STDEV_REGRID_VLD_THRESH = +#ENSEMBLE_STAT_CLIMO_STDEV_REGRID_SHAPE = +#ENSEMBLE_STAT_CLIMO_STDEV_TIME_INTERP_METHOD = +#ENSEMBLE_STAT_CLIMO_STDEV_MATCH_MONTH = +#ENSEMBLE_STAT_CLIMO_STDEV_DAY_INTERVAL = 31 +#ENSEMBLE_STAT_CLIMO_STDEV_HOUR_INTERVAL = 6 + + +ENSEMBLE_STAT_CLIMO_CDF_BINS = 1 +ENSEMBLE_STAT_CLIMO_CDF_CENTER_BINS = False +ENSEMBLE_STAT_CLIMO_CDF_WRITE_BINS = False + +ENSEMBLE_STAT_MASK_GRID = + +ENSEMBLE_STAT_CI_ALPHA = 0.05 + +ENSEMBLE_STAT_INTERP_FIELD = BOTH +ENSEMBLE_STAT_INTERP_VLD_THRESH = 1.0 +ENSEMBLE_STAT_INTERP_SHAPE = SQUARE +ENSEMBLE_STAT_INTERP_METHOD = NEAREST +ENSEMBLE_STAT_INTERP_WIDTH = 1 + +ENSEMBLE_STAT_OUTPUT_FLAG_ECNT = STAT +ENSEMBLE_STAT_OUTPUT_FLAG_RPS = NONE +ENSEMBLE_STAT_OUTPUT_FLAG_RHIST = STAT +ENSEMBLE_STAT_OUTPUT_FLAG_PHIST = STAT +ENSEMBLE_STAT_OUTPUT_FLAG_ORANK = STAT +ENSEMBLE_STAT_OUTPUT_FLAG_SSVAR = STAT +ENSEMBLE_STAT_OUTPUT_FLAG_RELP = STAT + +ENSEMBLE_STAT_ENSEMBLE_FLAG_LATLON = FALSE +ENSEMBLE_STAT_ENSEMBLE_FLAG_MEAN = FALSE +ENSEMBLE_STAT_ENSEMBLE_FLAG_STDEV = FALSE +ENSEMBLE_STAT_ENSEMBLE_FLAG_MINUS = FALSE +ENSEMBLE_STAT_ENSEMBLE_FLAG_PLUS = FALSE +ENSEMBLE_STAT_ENSEMBLE_FLAG_MIN = FALSE +ENSEMBLE_STAT_ENSEMBLE_FLAG_MAX = FALSE +ENSEMBLE_STAT_ENSEMBLE_FLAG_RANGE = FALSE +ENSEMBLE_STAT_ENSEMBLE_FLAG_VLD_COUNT = FALSE +ENSEMBLE_STAT_ENSEMBLE_FLAG_FREQUENCY = FALSE +ENSEMBLE_STAT_ENSEMBLE_FLAG_NEP = FALSE +ENSEMBLE_STAT_ENSEMBLE_FLAG_NMEP = FALSE +ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK = FALSE +ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT = FALSE +# +# Precipitation accumulation interval in 2-digit hours. +# +ACCUM_HH = {{accum_hh}} +# +# Forecast and observation variables and levels as specified in the fcst +# field dictionary of the MET configuration file. Specify as FCST_VARn_NAME, +# FCST_VARn_LEVELS, (optional) FCST_VARn_OPTION and OBS_VARn_NAME, +# OBS_VARn_LEVELS, (optional) OBS_VARn_OPTION. +# +FCST_VAR1_NAME = {{fieldname_in_met_output}} +FCST_VAR1_LEVELS = A{ACCUM_HH} +FCST_VAR1_OPTIONS = ens_ssvar_bin_size = 50.0; ens_phist_bin_size = 0.05; +OBS_VAR1_NAME = {{fieldname_in_obs_input}} +OBS_VAR1_LEVELS = A{ACCUM_HH} +OBS_VAR1_OPTIONS = {FCST_VAR1_OPTIONS}; convert(x) = 100.0*x; + +[dir] +# +# OUTPUT_BASE apparently has to be set to something; it cannot be left +# to its default value. But it is not explicitly used elsewhere in this +# configuration file. +# +OUTPUT_BASE = {{output_base}} +# +# Point observation input directory for EnsembleStat. +# +OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = +# +# Grid observation input directory for EnsembleStat. +# +OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = {{obs_input_dir}} +# +# Forecast model input directory for EnsembleStat. +# +FCST_ENSEMBLE_STAT_INPUT_DIR = {{fcst_input_dir}} +# +# Directory containing climatology mean input to EnsembleStat. Not used +# in this example +# +ENSEMBLE_STAT_CLIMO_MEAN_INPUT_DIR = +# +# Directory containing climatology mean input to EnsembleStat. Not used +# in this example. +# +ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR = +# +# Output directory for EnsembleStat. +# +ENSEMBLE_STAT_OUTPUT_DIR = {{output_dir}} +# +# Directory for staging data. +# +STAGING_DIR = {{staging_dir}} + +# End of [dir] section and start of [filename_templates] section. +[filename_templates] +# +# Template for point observation input to EnsembleStat relative to +# OBS_ENSEMBLE_STAT_POINT_INPUT_DIR. +# +OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = +# +# Template for gridded observation input to EnsembleStat relative to +# OBS_ENSEMBLE_STAT_GRID_INPUT_DIR. +# +OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = {{obs_input_fn_template}} +# +# Template for forecast input to EnsembleStat relative to +# FCST_ENSEMBLE_STAT_INPUT_DIR. +# +# Note that this can be a comma separated list of ensemble members +# or a single line, - filename wildcard characters may be used, ? or *. +# +FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} +# +# Template for output from EnsembleStat relative to ENSEMBLE_STAT_OUTPUT_DIR. +# +ENSEMBLE_STAT_OUTPUT_TEMPLATE = +ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_{FIELDNAME_IN_MET_FILEDIR_NAMES}{{accum_hh}}h_{OBTYPE}_{lead?fmt=%H%M%S}L +# +# Template for climatology input to EnsembleStat relative to +# ENSEMBLE_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. +# +ENSEMBLE_STAT_CLIMO_MEAN_INPUT_TEMPLATE = +# +# Template for climatology input to EnsembleStat relative to +# ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR. Not used in this example. +# +ENSEMBLE_STAT_CLIMO_STDEV_INPUT_TEMPLATE = +# +# Variable used to specify one or more verification mask files for +# EnsembleStat. Not used for this example. +# +ENSEMBLE_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly diff --git a/parm/metplus/GenEnsProd_ASNOW.conf b/parm/metplus/GenEnsProd_ASNOW.conf new file mode 100644 index 0000000000..f0796a6f2d --- /dev/null +++ b/parm/metplus/GenEnsProd_ASNOW.conf @@ -0,0 +1,191 @@ +# GenEnsProd METplus Configuration + +[config] + +# List of applications (tools) to run. +PROCESS_LIST = GenEnsProd + +# time looping - options are INIT, VALID, RETRO, and REALTIME +# If set to INIT or RETRO: +# INIT_TIME_FMT, INIT_BEG, INIT_END, and INIT_INCREMENT must also be set +# If set to VALID or REALTIME: +# VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set +LOOP_BY = INIT + +# Format of INIT_BEG and INIT_END using % items +# %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. +# see www.strftime.org for more information +# %Y%m%d%H expands to YYYYMMDDHH +INIT_TIME_FMT = %Y%m%d%H + +# Start time for METplus run - must match INIT_TIME_FMT +INIT_BEG = {{cdate}} + +# End time for METplus run - must match INIT_TIME_FMT +INIT_END = {{cdate}} + +# Increment between METplus runs (in seconds if no units are specified). +# Must be >= 60 seconds. +INIT_INCREMENT = 3600 + +# List of forecast leads to process for each run time (init or valid) +# In hours if units are not specified +# If unset, defaults to 0 (don't loop through forecast leads) +LEAD_SEQ = {{fhr_list}} +# +# Order of loops to process data - Options are times, processes +# Not relevant if only one item is in the PROCESS_LIST +# times = run all wrappers in the PROCESS_LIST for a single run time, then +# increment the run time and run all wrappers again until all times have +# been evaluated. +# processes = run the first wrapper in the PROCESS_LIST for all times +# specified, then repeat for the next item in the PROCESS_LIST until all +# wrappers have been run +# +LOOP_ORDER = times +# +# Specify the name of the METplus log file. +# +LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}}_{{accum_hh}}h +# +# Specify the location and name of the final METplus conf file. +# +METPLUS_CONF = {GEN_ENS_PROD_OUTPUT_DIR}/metplus_final.{{metplus_config_fn}} +# +# Name to identify model (forecast) data in output. +# +MODEL = {{vx_fcst_model_name}} + +GEN_ENS_PROD_DESC = NA +# +# Name to identify observation data in output. +# +OBTYPE = {{obtype}} + +# The METplus GenEnsProd logging level +# 0 quiet to 5 loud, Verbosity setting for MET gen_ens_prod output, 2 is default. +# This takes precendence over the general LOG_MET_VERBOSITY set in metplus_logging.conf +#LOG_GEN_ENS_PROD_VERBOSITY = 2 + +### +# File I/O +### + +# +# Forecast model input directory for GenEnsProd. +# +GEN_ENS_PROD_INPUT_DIR = {{fcst_input_dir}} +# +# Template for forecast input to GenEnsProd relative to +# GEN_ENS_PROD_INPUT_DIR. +# +# Note that this can be a comma separated list of ensemble members +# or a single line, - filename wildcard characters may be used, ? or *. +# +GEN_ENS_PROD_INPUT_TEMPLATE = {{fcst_input_fn_template}} + +# GEN_ENS_PROD_CTRL_INPUT_DIR = {INPUT_BASE} +# GEN_ENS_PROD_CTRL_INPUT_TEMPLATE = +# {init?fmt=%Y%m%d%H}/mem1/postprd/{ENV[NET]}.t{init?fmt=%H}z.bgdawpf{lead?fmt=%HHH}.tm{init?fmt=%H}.grib2 + +# +# Output directory for GenEnsProd. +# +# OUTPUT_BASE apparently has to be set to something; it cannot be left +# to its default value. But it is not explicitly used elsewhere in this +# configuration file. +# +OUTPUT_BASE = {{output_base}} +GEN_ENS_PROD_OUTPUT_DIR = {{output_dir}} +# +# Template for output from GenEnsProd relative to GEN_ENS_PROD_OUTPUT_DIR. +# +GEN_ENS_PROD_OUTPUT_TEMPLATE = gen_ens_prod_{MODEL}_{{fieldname_in_met_filedir_names}}_{{accum_hh}}h_{OBTYPE}_{lead?fmt=%H%M%S}L_{valid?fmt=%Y%m%d_%H%M%S}V.nc +# +# Directory for staging data. +# +STAGING_DIR = {{staging_dir}} +# +# There are n ensembles but 1 is used as control, so specify n-1 members. +# +GEN_ENS_PROD_N_MEMBERS = {{num_ens_members}} + +### +# Field Info +### + +# Ensemble Variables and levels as specified in the ens field dictionary +# of the MET configuration file. Specify as ENS_VARn_NAME, ENS_VARn_LEVELS, +# (optional) ENS_VARn_OPTION +ENS_VAR1_NAME = {{fieldname_in_met_output}} +ENS_VAR1_LEVELS = A{{accum_hh}} +ENS_VAR1_THRESH = {{field_thresholds}} + +### +# GenEnsProd +### + +# GEN_ENS_PROD_REGRID_TO_GRID = NONE +# GEN_ENS_PROD_REGRID_METHOD = NEAREST +# GEN_ENS_PROD_REGRID_WIDTH = 1 +# GEN_ENS_PROD_REGRID_VLD_THRESH = 0.5 +# GEN_ENS_PROD_REGRID_SHAPE = SQUARE + +# GEN_ENS_PROD_CENSOR_THRESH = +# GEN_ENS_PROD_CENSOR_VAL = +# GEN_ENS_PROD_CAT_THRESH = +# GEN_ENS_PROD_NC_VAR_STR = + +# Threshold for ratio of valid files to expected files to allow app to run +GEN_ENS_PROD_ENS_THRESH = 0.05 + +GEN_ENS_PROD_NBRHD_PROB_WIDTH = 27 +GEN_ENS_PROD_NBRHD_PROB_SHAPE = CIRCLE +GEN_ENS_PROD_NBRHD_PROB_VLD_THRESH = 0.0 + +# GEN_ENS_PROD_NMEP_SMOOTH_VLD_THRESH = 0.0 +# GEN_ENS_PROD_NMEP_SMOOTH_SHAPE = CIRCLE +# GEN_ENS_PROD_NMEP_SMOOTH_GAUSSIAN_DX = 81.27 +# GEN_ENS_PROD_NMEP_SMOOTH_GAUSSIAN_RADIUS = 120 +# GEN_ENS_PROD_NMEP_SMOOTH_METHOD = GAUSSIAN +# GEN_ENS_PROD_NMEP_SMOOTH_WIDTH = 1 + +# GEN_ENS_PROD_CLIMO_MEAN_FILE_NAME = +# GEN_ENS_PROD_CLIMO_MEAN_FIELD = +# GEN_ENS_PROD_CLIMO_MEAN_REGRID_METHOD = +# GEN_ENS_PROD_CLIMO_MEAN_REGRID_WIDTH = +# GEN_ENS_PROD_CLIMO_MEAN_REGRID_VLD_THRESH = +# GEN_ENS_PROD_CLIMO_MEAN_REGRID_SHAPE = +# GEN_ENS_PROD_CLIMO_MEAN_TIME_INTERP_METHOD = +# GEN_ENS_PROD_CLIMO_MEAN_MATCH_MONTH = +# GEN_ENS_PROD_CLIMO_MEAN_DAY_INTERVAL = 31 +# GEN_ENS_PROD_CLIMO_MEAN_HOUR_INTERVAL = 6 + +# GEN_ENS_PROD_CLIMO_STDEV_FILE_NAME = +# GEN_ENS_PROD_CLIMO_STDEV_FIELD = +# GEN_ENS_PROD_CLIMO_STDEV_REGRID_METHOD = +# GEN_ENS_PROD_CLIMO_STDEV_REGRID_WIDTH = +# GEN_ENS_PROD_CLIMO_STDEV_REGRID_VLD_THRESH = +# GEN_ENS_PROD_CLIMO_STDEV_REGRID_SHAPE = +# GEN_ENS_PROD_CLIMO_STDEV_TIME_INTERP_METHOD = +# GEN_ENS_PROD_CLIMO_STDEV_MATCH_MONTH = +# GEN_ENS_PROD_CLIMO_STDEV_DAY_INTERVAL = 31 +# GEN_ENS_PROD_CLIMO_STDEV_HOUR_INTERVAL = 6 + +GEN_ENS_PROD_ENSEMBLE_FLAG_LATLON = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_MEAN = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_STDEV = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_MINUS = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_PLUS = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_MIN = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_MAX = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_RANGE = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_VLD_COUNT = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_FREQUENCY = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_NEP = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_NMEP = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_CLIMO = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_CLIMO_CDF = FALSE + +# GEN_ENS_PROD_ENS_MEMBER_IDS = +# GEN_ENS_PROD_CONTROL_ID = diff --git a/parm/metplus/GridStat_ASNOW.conf b/parm/metplus/GridStat_ASNOW.conf index df199be5a8..645a0acafe 100644 --- a/parm/metplus/GridStat_ASNOW.conf +++ b/parm/metplus/GridStat_ASNOW.conf @@ -51,7 +51,7 @@ LOOP_ORDER = times # # Specify the name of the METplus log file. # -LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}} +LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}}_{{accum_hh}}h # # Specify the location and name of the final METplus conf file. # @@ -108,7 +108,7 @@ GRID_STAT_MET_CONFIG_OVERRIDES = cat_thresh = [NA]; cnt_thresh = [NA]; cnt_logic # String to search for in the foreast input files for forecast variable # 1. # -FCST_VAR1_NAME = {{fieldname_in_fcst_input}} +FCST_VAR1_NAME = {{fieldname_in_met_output}} # # List of levels to evaluate for forecast variable 1. # diff --git a/parm/metplus/GridStat_ensmean_ASNOW.conf b/parm/metplus/GridStat_ensmean_ASNOW.conf new file mode 100644 index 0000000000..ae0a897d49 --- /dev/null +++ b/parm/metplus/GridStat_ensmean_ASNOW.conf @@ -0,0 +1,336 @@ +# Ensemble mean GridStat METplus Configuration + +[config] + +# List of applications (tools) to run. +PROCESS_LIST = GridStat + +# time looping - options are INIT, VALID, RETRO, and REALTIME +# If set to INIT or RETRO: +# INIT_TIME_FMT, INIT_BEG, INIT_END, and INIT_INCREMENT must also be set +# If set to VALID or REALTIME: +# VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set +LOOP_BY = INIT + +# Format of INIT_BEG and INIT_END using % items +# %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. +# see www.strftime.org for more information +# %Y%m%d%H expands to YYYYMMDDHH +INIT_TIME_FMT = %Y%m%d%H + +# Start time for METplus run - must match INIT_TIME_FMT +INIT_BEG = {{cdate}} + +# End time for METplus run - must match INIT_TIME_FMT +INIT_END = {{cdate}} + +# Increment between METplus runs (in seconds if no units are specified). +# Must be >= 60 seconds. +INIT_INCREMENT = 3600 + +# List of forecast leads to process for each run time (init or valid) +# In hours if units are not specified +# If unset, defaults to 0 (don't loop through forecast leads) +LEAD_SEQ = {{fhr_list}} +# +# Order of loops to process data - Options are times, processes +# Not relevant if only one item is in the PROCESS_LIST +# times = run all wrappers in the PROCESS_LIST for a single run time, then +# increment the run time and run all wrappers again until all times have +# been evaluated. +# processes = run the first wrapper in the PROCESS_LIST for all times +# specified, then repeat for the next item in the PROCESS_LIST until all +# wrappers have been run +# +LOOP_ORDER = times + +# Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only +#LOG_GRID_STAT_VERBOSITY = 2 +# +# Specify the name of the METplus log file. +# +LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}}{{accum_hh}}h +# +# Specify the location and name of the final METplus conf file. +# +METPLUS_CONF = {GRID_STAT_OUTPUT_DIR}/metplus_final.{{metplus_config_fn}} +# +# Location of MET configuration file to pass to GridStat. +# +# References PARM_BASE, which is the location of the parm directory +# corresponding to the ush directory of the run_metplus.py script that +# is called or the value of the environment variable METPLUS_PARM_BASE +# if set. +# +GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped + +# grid to remap data. Value is set as the 'to_grid' variable in the 'regrid' dictionary +# See MET User's Guide for more information +GRID_STAT_REGRID_TO_GRID = FCST +GRID_STAT_REGRID_VLD_THRESH = 0.5 +GRID_STAT_REGRID_METHOD = BUDGET +GRID_STAT_REGRID_WIDTH = 2 +GRID_STAT_REGRID_SHAPE = SQUARE + +#GRID_STAT_INTERP_FIELD = BOTH +#GRID_STAT_INTERP_VLD_THRESH = 1.0 +#GRID_STAT_INTERP_SHAPE = SQUARE +#GRID_STAT_INTERP_TYPE_METHOD = NEAREST +#GRID_STAT_INTERP_TYPE_WIDTH = 1 + +#GRID_STAT_GRID_WEIGHT_FLAG = + +# +# Name to identify model (forecast) data in output. +# +# The variable MODEL is recorded in the stat files, and the data in +# these files is then plotted (e.g. using METViewer). Here, we add a +# suffix to MODEL that identifies the data as that for the ensemble +# mean. This makes it easier to identify each curve. +# +MODEL = {{vx_fcst_model_name}}_ensmean + +FCST_NATIVE_DATA_TYPE = GRIB +# +# Name to identify observation data in output. +# +OBTYPE = {{obtype}} +OBS_NATIVE_DATA_TYPE = GRIB +# +# Value to enter under the DESC column in the output stat file. +# +GRID_STAT_DESC = NA + +# List of variables to compare in GridStat - FCST_VAR1 variables correspond +# to OBS_VAR1 variables +# Note [FCST/OBS/BOTH]_GRID_STAT_VAR_NAME can be used instead if different evaluations +# are needed for different tools + +GRID_STAT_MET_CONFIG_OVERRIDES = cat_thresh = [NA]; cnt_thresh = [NA]; cnt_logic = UNION; wind_thresh = [NA]; wind_logic = UNION; ci_alpha = [0.05]; rank_corr_flag = FALSE; +# +# String to search for in the foreast input files for forecast variable +# 1. +# +# Note: +# This is the name of the field in the NetCDF file(s) created by MET's +# gen_ens_prod tool. This tool reads in the grib2 file(s) (in this case +# of forecasts) and outputs NetCDF file(s) in which the array names +# consist of the value of fieldname_in_met_output plus a suffix that +# specifies additional properties of the data in the array such as the +# level (which in this case is the accumulation period), the type of +# statistic, etc. In this case, this suffix is "_A01_ENS_MEAN". Thus, +# below, FCST_VAR1_NAME must be set to the value of fieldname_in_met_output +# with "_A01_ENS_MEAN" appended to it. +#FCST_VAR1_NAME = APCP_01_A01_ENS_MEAN +# +# Question: +# Why is the name of the array in the input NetCDF file (created by +# GenEnsProd) that this task reads contains ..._A01_ENS_MEAN instead of +# ..._A1_ENS_MEAN, as is the case for greater than 1-hour accumulation? +# If that were the case, we could use ACCUM_NO_PAD here instead of hard- +# coding the "A01", which would make it consistent with what is done in +# the METplus conf files for accumulation > 1 hour (e.g. 3, 6, and 24 +# hour). +# +#FCST_VAR1_NAME = {FIELDNAME_IN_MET_OUTPUT}_A{ENV[ACCUM_NO_PAD]}_ENS_MEAN +FCST_VAR1_NAME = {{fieldname_in_met_output}}_A{{accum_no_pad}}_ENS_MEAN +# +# List of levels to evaluate for forecast variable 1. +# +ACCUM_HH = {{accum_hh}} +FCST_VAR1_LEVELS = A{ACCUM_HH} +# +# List of thresholds to evaluate for each name/level combination for +# both obs and forecast variable 1. +# +BOTH_VAR1_THRESH = {{field_thresholds}} +# +# String to search for in the observation input files for observation +# variable 1. +# +# Note: +# This is the name of the field in the grib2 observation file. Thus, +# it should not be set to {{fieldname_in_met_output}} because the +# value of fieldname_in_met_output is in general not the same as the +# name of the field in the grib2 observation file (although it can be +# for certain fields). If you do and it doesn't match, you may get an +# error like this from METplus: +# ERROR : VarInfoGrib2::set_dict() -> unrecognized GRIB2 field abbreviation ... +# +#OBS_VAR1_NAME = APCP +OBS_VAR1_NAME = {{fieldname_in_obs_input}} +# +# List of levels to evaluate for observation variable 1. Must be the +# same length as FCST_VAR1_LEVELS. +# +OBS_VAR1_LEVELS = A{ACCUM_HH} +OBS_VAR1_OPTIONS = convert(x) = 100.0*x; +# +# Time relative to valid time (in seconds) to allow files to be considered +# valid. Set both BEGIN and END to 0 to require the exact time in the +# filename. Not used in this example. +# +FCST_GRID_STAT_FILE_WINDOW_BEGIN = 0 +FCST_GRID_STAT_FILE_WINDOW_END = 0 +OBS_GRID_STAT_FILE_WINDOW_BEGIN = 0 +OBS_GRID_STAT_FILE_WINDOW_END = 0 + +# MET GridStat neighborhood values +# See the MET User's Guide GridStat section for more information +GRID_STAT_NEIGHBORHOOD_FIELD = BOTH + +# width value passed to nbrhd dictionary in the MET config file +GRID_STAT_NEIGHBORHOOD_WIDTH = 3,5,7 + +# shape value passed to nbrhd dictionary in the MET config file +GRID_STAT_NEIGHBORHOOD_SHAPE = SQUARE + +# cov thresh list passed to nbrhd dictionary in the MET config file +GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5 + +# Set to true to run GridStat separately for each field specified +# Set to false to create one run of GridStat per run time that +# includes all fields specified. +GRID_STAT_ONCE_PER_FIELD = False +# +# Set to true if forecast data is probabilistic. +# +FCST_IS_PROB = False +# +# Only used if FCST_IS_PROB is true - sets probabilistic threshold +# +FCST_GRID_STAT_PROB_THRESH = ==0.1 + +GRID_STAT_OUTPUT_PREFIX = {MODEL}_{{fieldname_in_met_filedir_names}}{{accum_hh}}h_{OBTYPE} + +# Climatology data +#GRID_STAT_CLIMO_MEAN_FILE_NAME = +#GRID_STAT_CLIMO_MEAN_FIELD = +#GRID_STAT_CLIMO_MEAN_REGRID_METHOD = +#GRID_STAT_CLIMO_MEAN_REGRID_WIDTH = +#GRID_STAT_CLIMO_MEAN_REGRID_VLD_THRESH = +#GRID_STAT_CLIMO_MEAN_REGRID_SHAPE = +#GRID_STAT_CLIMO_MEAN_TIME_INTERP_METHOD = +#GRID_STAT_CLIMO_MEAN_MATCH_MONTH = +#GRID_STAT_CLIMO_MEAN_DAY_INTERVAL = +#GRID_STAT_CLIMO_MEAN_HOUR_INTERVAL = + +#GRID_STAT_CLIMO_STDEV_FILE_NAME = +#GRID_STAT_CLIMO_STDEV_FIELD = +#GRID_STAT_CLIMO_STDEV_REGRID_METHOD = +#GRID_STAT_CLIMO_STDEV_REGRID_WIDTH = +#GRID_STAT_CLIMO_STDEV_REGRID_VLD_THRESH = +#GRID_STAT_CLIMO_STDEV_REGRID_SHAPE = +#GRID_STAT_CLIMO_STDEV_TIME_INTERP_METHOD = +#GRID_STAT_CLIMO_STDEV_MATCH_MONTH = +#GRID_STAT_CLIMO_STDEV_DAY_INTERVAL = +#GRID_STAT_CLIMO_STDEV_HOUR_INTERVAL = + +#GRID_STAT_CLIMO_CDF_BINS = 1 +#GRID_STAT_CLIMO_CDF_CENTER_BINS = False +#GRID_STAT_CLIMO_CDF_WRITE_BINS = True + +GRID_STAT_MASK_GRID = + +# Statistical output types +GRID_STAT_OUTPUT_FLAG_FHO = STAT +GRID_STAT_OUTPUT_FLAG_CTC = STAT +GRID_STAT_OUTPUT_FLAG_CTS = STAT +#GRID_STAT_OUTPUT_FLAG_MCTC = NONE +#GRID_STAT_OUTPUT_FLAG_MCTS = NONE +GRID_STAT_OUTPUT_FLAG_CNT = STAT +#GRID_STAT_OUTPUT_FLAG_SL1L2 = NONE +#GRID_STAT_OUTPUT_FLAG_SAL1L2 = NONE +#GRID_STAT_OUTPUT_FLAG_VL1L2 = NONE +#GRID_STAT_OUTPUT_FLAG_VAL1L2 = NONE +#GRID_STAT_OUTPUT_FLAG_VCNT = NONE +#GRID_STAT_OUTPUT_FLAG_PCT = NONE +#GRID_STAT_OUTPUT_FLAG_PSTD = NONE +#GRID_STAT_OUTPUT_FLAG_PJC = NONE +#GRID_STAT_OUTPUT_FLAG_PRC = NONE +#GRID_STAT_OUTPUT_FLAG_ECLV = BOTH +GRID_STAT_OUTPUT_FLAG_NBRCTC = STAT +GRID_STAT_OUTPUT_FLAG_NBRCTS = STAT +GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT +#GRID_STAT_OUTPUT_FLAG_GRAD = BOTH +#GRID_STAT_OUTPUT_FLAG_DMAP = NONE + +# NetCDF matched pairs output file +#GRID_STAT_NC_PAIRS_VAR_NAME = +GRID_STAT_NC_PAIRS_FLAG_LATLON = TRUE +GRID_STAT_NC_PAIRS_FLAG_RAW = TRUE +GRID_STAT_NC_PAIRS_FLAG_DIFF = FALSE +GRID_STAT_NC_PAIRS_FLAG_CLIMO = FALSE +#GRID_STAT_NC_PAIRS_FLAG_CLIMO_CDP = FALSE +GRID_STAT_NC_PAIRS_FLAG_WEIGHT = FALSE +GRID_STAT_NC_PAIRS_FLAG_NBRHD = TRUE +#GRID_STAT_NC_PAIRS_FLAG_FOURIER = FALSE +#GRID_STAT_NC_PAIRS_FLAG_GRADIENT = FALSE +#GRID_STAT_NC_PAIRS_FLAG_DISTANCE_MAP = FALSE +GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE + +# End of [config] section and start of [dir] section. +[dir] +# +# Directory containing observation input to GridStat. +# +OBS_GRID_STAT_INPUT_DIR = {{obs_input_dir}} +# +# Directory containing forecast input to GridStat. +# +FCST_GRID_STAT_INPUT_DIR = {{fcst_input_dir}} +# +# Directory containing climatology mean input to GridStat. Not used in +# this example. +# +GRID_STAT_CLIMO_MEAN_INPUT_DIR = +# +# Directory containing climatology mean input to GridStat. Not used in +# this example. +# +GRID_STAT_CLIMO_STDEV_INPUT_DIR = +# +# Directory in which to write output from GridStat. +# +# OUTPUT_BASE apparently has to be set to something; it cannot be left +# to its default value. But it is not explicitly used elsewhere in this +# configuration file. +# +OUTPUT_BASE = {{output_base}} +GRID_STAT_OUTPUT_DIR = {{output_dir}} +# +# Directory for staging data. +# +STAGING_DIR = {{staging_dir}} + +# End of [dir] section and start of [filename_templates] section. +[filename_templates] +# +# Template for observation input to GridStat relative to +# OBS_GRID_STAT_INPUT_DIR. +# +OBS_GRID_STAT_INPUT_TEMPLATE = {{obs_input_fn_template}} +# +# Template for forecast input to GridStat relative to +# FCST_GRID_STAT_INPUT_DIR. +# +FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} +# +# Template for output from GridStat relative to GRID_STAT_OUTPUT_DIR. +# +GRID_STAT_OUTPUT_TEMPLATE = +# +# Template for climatology input to GridStat relative to +# GRID_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. +# +GRID_STAT_CLIMO_MEAN_INPUT_TEMPLATE = +# +# Template for climatology input to GridStat relative to +# GRID_STAT_CLIMO_STDEV_INPUT_DIR. Not used in this example. +# +GRID_STAT_CLIMO_STDEV_INPUT_TEMPLATE = +# +# Variable used to specify one or more verification mask files for +# GridStat. Not used for this example. +# +GRID_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly diff --git a/parm/metplus/GridStat_ensprob_ASNOW.conf b/parm/metplus/GridStat_ensprob_ASNOW.conf new file mode 100644 index 0000000000..44f3f00ee4 --- /dev/null +++ b/parm/metplus/GridStat_ensprob_ASNOW.conf @@ -0,0 +1,436 @@ +# Ensemble probabilistic GridStat METplus Configuration + +[config] + +# List of applications (tools) to run. +PROCESS_LIST = GridStat + +# time looping - options are INIT, VALID, RETRO, and REALTIME +# If set to INIT or RETRO: +# INIT_TIME_FMT, INIT_BEG, INIT_END, and INIT_INCREMENT must also be set +# If set to VALID or REALTIME: +# VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set +LOOP_BY = INIT + +# Format of INIT_BEG and INIT_END using % items +# %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. +# see www.strftime.org for more information +# %Y%m%d%H expands to YYYYMMDDHH +INIT_TIME_FMT = %Y%m%d%H + +# Start time for METplus run - must match INIT_TIME_FMT +INIT_BEG = {{cdate}} + +# End time for METplus run - must match INIT_TIME_FMT +INIT_END = {{cdate}} + +# Increment between METplus runs (in seconds if no units are specified). +# Must be >= 60 seconds. +INIT_INCREMENT = 3600 + +# List of forecast leads to process for each run time (init or valid) +# In hours if units are not specified +# If unset, defaults to 0 (don't loop through forecast leads) +LEAD_SEQ = {{fhr_list}} +# +# Order of loops to process data - Options are times, processes +# Not relevant if only one item is in the PROCESS_LIST +# times = run all wrappers in the PROCESS_LIST for a single run time, then +# increment the run time and run all wrappers again until all times have +# been evaluated. +# processes = run the first wrapper in the PROCESS_LIST for all times +# specified, then repeat for the next item in the PROCESS_LIST until all +# wrappers have been run +# +LOOP_ORDER = times + +# Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only +#LOG_GRID_STAT_VERBOSITY = 2 +# +# Specify the name of the METplus log file. +# +LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}}{{accum_hh}}h +# +# Specify the location and name of the final METplus conf file. +# +METPLUS_CONF = {GRID_STAT_OUTPUT_DIR}/metplus_final.{{metplus_config_fn}} +# +# Location of MET configuration file to pass to GridStat. +# +# References PARM_BASE, which is the location of the parm directory +# corresponding to the ush directory of the run_metplus.py script that +# is called or the value of the environment variable METPLUS_PARM_BASE +# if set. +# +GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped + +# grid to remap data. Value is set as the 'to_grid' variable in the 'regrid' dictionary +# See MET User's Guide for more information +GRID_STAT_REGRID_TO_GRID = FCST +GRID_STAT_REGRID_VLD_THRESH = 0.5 +GRID_STAT_REGRID_METHOD = BUDGET +GRID_STAT_REGRID_WIDTH = 2 +GRID_STAT_REGRID_SHAPE = SQUARE + +#GRID_STAT_INTERP_FIELD = BOTH +#GRID_STAT_INTERP_VLD_THRESH = 1.0 +#GRID_STAT_INTERP_SHAPE = SQUARE +#GRID_STAT_INTERP_TYPE_METHOD = NEAREST +#GRID_STAT_INTERP_TYPE_WIDTH = 1 + +#GRID_STAT_GRID_WEIGHT_FLAG = + +# +# Name to identify model (forecast) data in output. +# +# The variable MODEL is recorded in the stat files, and the data in +# these files is then plotted (e.g. using METViewer). Here, we add a +# suffix to MODEL that identifies the data as ensemble-probabilistic. +# This makes it easier to identify each curve. +# +MODEL = {{vx_fcst_model_name}}_ensprob + +FCST_NATIVE_DATA_TYPE = GRIB +# +# Name to identify observation data in output. +# +OBTYPE = {{obtype}} +OBS_NATIVE_DATA_TYPE = GRIB +# +# Value to enter under the DESC column in the output stat file. +# +GRID_STAT_DESC = NA + +# List of variables to compare in GridStat - FCST_VAR1 variables correspond +# to OBS_VAR1 variables +# Note [FCST/OBS/BOTH]_GRID_STAT_VAR_NAME can be used instead if different evaluations +# are needed for different tools + +GRID_STAT_MET_CONFIG_OVERRIDES = cat_thresh = [NA]; cnt_thresh = [NA]; cnt_logic = UNION; wind_thresh = [NA]; wind_logic = UNION; ci_alpha = [0.05]; rank_corr_flag = FALSE; + +FIELDNAME_IN_MET_OUTPUT = {{fieldname_in_met_output}} +# +# FREQ +# Process as probability + +# +# String to search for in the foreast input files for forecast variable +# 1. +# +# Note: +# This is the name of the field in the NetCDF file(s) created by MET's +# gen_ens_prod tool. This tool reads in the NetCDF file(s) generated by +# MET's pcp_combine tool. The latter reads in grib2 file(s) containing +# 1 hour accumulation data (in this case, from forecasts) and outputs +# NetCDF file(s) with the appropriate > 1 hour accumulation. These +# output NetCDF files from pcp_combine name their arrays as specified by +# FIELDNAME_IN_MET_OUTPUT. The gen_ens_prod tool then takes this array +# name and, in its output NetCDF files, creates arrays whose names consist +# of the original array name in the pcp_combine output (FIELDNAME_IN_MET_OUTPUT) +# plus a suffix that specifies additional properties of the data in the +# array such as the level (which in this case is the accumulation period), +# the type of statistic, etc. In this case, this suffix is "_A{{accum_no_pad}}_ENS_FREQ_gt0.0". +# Thus, below, FCST_VAR1_NAME must be set to the value of FIELDNAME_IN_MET_OUTPUT +# with "_A{{accum_no_pad}}_ENS_FREQ_gt0.0" appended to it. +# The same is true of other forecast fields below except the suffix is +# different. +# +#FCST_VAR1_NAME = APCP_A{{accum_no_pad}}_ENS_FREQ_gt0.0 +FCST_VAR1_NAME = {FIELDNAME_IN_MET_OUTPUT}_A{{accum_no_pad}}_ENS_FREQ_gt0.0 +FCST_VAR1_LEVELS = A{{accum_hh}} +FCST_VAR1_THRESH = ==0.1 +# +# List of levels to evaluate for observation variable 1. Must be the +# same length as FCST_VAR1_LEVELS. +# +# Note: +# This is the name of the field in the NetCDF file created by MET's +# pcp_combine tool. This tool reads in the grib2 file(s) containing +# 1 hour accumulation data (in this case, from observations) and outputs +# NetCDF file(s) with the appropriate > 1 hour accumulation. These +# output NetCDF files name their arrays as specified by the environment +# variable FIELDNAME_IN_MET_OUTPUT. Thus, that is the value we set +# OBS_VAR1_NAME to here, not to the name of the variable in the grib2 +# file. +# +#OBS_VAR1_NAME = APCP +OBS_VAR1_NAME = {{fieldname_in_obs_input}} +OBS_VAR1_LEVELS = A{{accum_hh}} +OBS_VAR1_THRESH = >0.0 +OBS_VAR1_OPTIONS = convert(x) = 100.0*x; + +#FCST_VAR2_NAME = APCP_A{{accum_no_pad}}_ENS_FREQ_ge0.508 +FCST_VAR2_NAME = {FIELDNAME_IN_MET_OUTPUT}_A{{accum_no_pad}}_ENS_FREQ_gt0.0 +FCST_VAR2_LEVELS = A{{accum_hh}} +FCST_VAR2_THRESH = ==0.1 + +#OBS_VAR2_NAME = APCP +OBS_VAR2_NAME = {{fieldname_in_obs_input}} +OBS_VAR2_LEVELS = A{{accum_hh}} +OBS_VAR2_THRESH = >=0.508 +OBS_VAR2_OPTIONS = convert(x) = 100.0*x; + +#FCST_VAR3_NAME = APCP_A{{accum_no_pad}}_ENS_FREQ_ge2.54 +FCST_VAR3_NAME = {FIELDNAME_IN_MET_OUTPUT}_A{{accum_no_pad}}_ENS_FREQ_ge2.54 +FCST_VAR3_LEVELS = A{{accum_hh}} +FCST_VAR3_THRESH = ==0.1 + +#OBS_VAR3_NAME = APCP +OBS_VAR3_NAME = {{fieldname_in_obs_input}} +OBS_VAR3_LEVELS = A{{accum_hh}} +OBS_VAR3_THRESH = >=2.54 +OBS_VAR3_OPTIONS = convert(x) = 100.0*x; + +#FCST_VAR4_NAME = APCP_A{{accum_no_pad}}_ENS_FREQ_ge +FCST_VAR4_NAME = {FIELDNAME_IN_MET_OUTPUT}_A{{accum_no_pad}}_ENS_FREQ_ge5.08 +FCST_VAR4_LEVELS = A{{accum_hh}} +FCST_VAR4_THRESH = ==0.1 + +#OBS_VAR4_NAME = APCP +OBS_VAR4_NAME = {{fieldname_in_obs_input}} +OBS_VAR4_LEVELS = A{{accum_hh}} +OBS_VAR4_THRESH = >=5.08 +OBS_VAR4_OPTIONS = convert(x) = 100.0*x; + +#FCST_VAR5_NAME = APCP_A{{accum_no_pad}}_ENS_FREQ_ge +FCST_VAR5_NAME = {FIELDNAME_IN_MET_OUTPUT}_A{{accum_no_pad}}_ENS_FREQ_ge10.16 +FCST_VAR5_LEVELS = A{{accum_hh}} +FCST_VAR5_THRESH = ==0.1 + +#OBS_VAR5_NAME = APCP +OBS_VAR5_NAME = {{fieldname_in_obs_input}} +OBS_VAR5_LEVELS = A{{accum_hh}} +OBS_VAR5_THRESH = >=10.16 +OBS_VAR5_OPTIONS = convert(x) = 100.0*x; + +#FCST_VAR6_NAME = APCP_A{{accum_no_pad}}_ENS_FREQ_ge +FCST_VAR6_NAME = {FIELDNAME_IN_MET_OUTPUT}_A{{accum_no_pad}}_ENS_FREQ_ge20.32 +FCST_VAR6_LEVELS = A{{accum_hh}} +FCST_VAR6_THRESH = ==0.1 + +#OBS_VAR6_NAME = APCP +OBS_VAR6_NAME = {{fieldname_in_obs_input}} +OBS_VAR6_LEVELS = A{{accum_hh}} +OBS_VAR6_THRESH = >=20.32 +OBS_VAR6_OPTIONS = convert(x) = 100.0*x; + +#Process as scalars for neighborhood methods +## Note that the number of forecast and obs thresholds must match +## but won't actually be applied to NBRCNT outputs with "nbrhd.field = OBS;" +#FCST_VAR75_NAME = APCP_A{{accum_no_pad}}_ENS_FREQ_gt0.0 +FCST_VAR7_NAME = {FIELDNAME_IN_MET_OUTPUT}_A{{accum_no_pad}}_ENS_FREQ_gt0.0 +FCST_VAR7_LEVELS = A{{accum_hh}} +FCST_VAR7_THRESH = ==0.1 +FCST_VAR7_OPTIONS = prob = FALSE; + +#OBS_VAR7_NAME = APCP +OBS_VAR7_NAME = {{fieldname_in_obs_input}} +OBS_VAR7_LEVELS = A{{accum_hh}} +OBS_VAR7_THRESH = >0.0 +OBS_VAR7_OPTIONS = convert(x) = 100.0*x; nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } + +FCST_VAR8_NAME = {FIELDNAME_IN_MET_OUTPUT}_A{{accum_no_pad}}_ENS_FREQ_ge2.54 +FCST_VAR8_LEVELS = A{{accum_hh}} +FCST_VAR8_THRESH = ==0.1 +FCST_VAR8_OPTIONS = prob = FALSE; + +#OBS_VAR8_NAME = APCP +OBS_VAR8_NAME = {{fieldname_in_obs_input}} +OBS_VAR8_LEVELS = A{{accum_hh}} +OBS_VAR8_THRESH = >=2.54 +OBS_VAR8_OPTIONS = convert(x) = 100.0*x; nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } + +FCST_VAR9_NAME = {FIELDNAME_IN_MET_OUTPUT}_A{{accum_no_pad}}_ENS_FREQ_ge5.08 +FCST_VAR9_LEVELS = A{{accum_hh}} +FCST_VAR9_THRESH = ==0.1 +FCST_VAR9_OPTIONS = prob = FALSE; + +#OBS_VAR9_NAME = APCP +OBS_VAR9_NAME = {{fieldname_in_obs_input}} +OBS_VAR9_LEVELS = A{{accum_hh}} +OBS_VAR9_THRESH = >=5.08 +OBS_VAR9_OPTIONS = convert(x) = 100.0*x; nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } + +FCST_VAR10_NAME = {FIELDNAME_IN_MET_OUTPUT}_A{{accum_no_pad}}_ENS_FREQ_ge10.16 +FCST_VAR10_LEVELS = A{{accum_hh}} +FCST_VAR10_THRESH = ==0.1 +FCST_VAR10_OPTIONS = prob = FALSE; + +#OBS_VAR8_NAME = APCP +OBS_VAR10_NAME = {{fieldname_in_obs_input}} +OBS_VAR10_LEVELS = A{{accum_hh}} +OBS_VAR10_THRESH = >=10.16 +OBS_VAR10_OPTIONS = convert(x) = 100.0*x; nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } + +#FCST_GRID_STAT_FILE_TYPE = + +#OBS_GRID_STAT_FILE_TYPE = + +# Time relative to valid time (in seconds) to allow files to be considered +# valid. Set both BEGIN and END to 0 to require the exact time in the +# filename. Not used in this example. +# +FCST_GRID_STAT_FILE_WINDOW_BEGIN = 0 +FCST_GRID_STAT_FILE_WINDOW_END = 0 +OBS_GRID_STAT_FILE_WINDOW_BEGIN = 0 +OBS_GRID_STAT_FILE_WINDOW_END = 0 + +# MET GridStat neighborhood values +# See the MET User's Guide GridStat section for more information +GRID_STAT_NEIGHBORHOOD_FIELD = + +# width value passed to nbrhd dictionary in the MET config file +GRID_STAT_NEIGHBORHOOD_WIDTH = + +# shape value passed to nbrhd dictionary in the MET config file +GRID_STAT_NEIGHBORHOOD_SHAPE = + +# cov thresh list passed to nbrhd dictionary in the MET config file +GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5 + +# Set to true to run GridStat separately for each field specified +# Set to false to create one run of GridStat per run time that +# includes all fields specified. +GRID_STAT_ONCE_PER_FIELD = False +# +# Set to true if forecast data is probabilistic. +# +FCST_IS_PROB = True +FCST_PROB_IN_GRIB_PDS = False +# +# Only used if FCST_IS_PROB is true - sets probabilistic threshold +# +FCST_GRID_STAT_PROB_THRESH = ==0.1 + +GRID_STAT_OUTPUT_PREFIX = {MODEL}_{{fieldname_in_met_filedir_names}}{{accum_hh}}h_{OBTYPE} + +# Climatology data +#GRID_STAT_CLIMO_MEAN_FILE_NAME = +#GRID_STAT_CLIMO_MEAN_FIELD = +#GRID_STAT_CLIMO_MEAN_REGRID_METHOD = +#GRID_STAT_CLIMO_MEAN_REGRID_WIDTH = +#GRID_STAT_CLIMO_MEAN_REGRID_VLD_THRESH = +#GRID_STAT_CLIMO_MEAN_REGRID_SHAPE = +#GRID_STAT_CLIMO_MEAN_TIME_INTERP_METHOD = +#GRID_STAT_CLIMO_MEAN_MATCH_MONTH = +#GRID_STAT_CLIMO_MEAN_DAY_INTERVAL = +#GRID_STAT_CLIMO_MEAN_HOUR_INTERVAL = + +#GRID_STAT_CLIMO_STDEV_FILE_NAME = +#GRID_STAT_CLIMO_STDEV_FIELD = +#GRID_STAT_CLIMO_STDEV_REGRID_METHOD = +#GRID_STAT_CLIMO_STDEV_REGRID_WIDTH = +#GRID_STAT_CLIMO_STDEV_REGRID_VLD_THRESH = +#GRID_STAT_CLIMO_STDEV_REGRID_SHAPE = +#GRID_STAT_CLIMO_STDEV_TIME_INTERP_METHOD = +#GRID_STAT_CLIMO_STDEV_MATCH_MONTH = +#GRID_STAT_CLIMO_STDEV_DAY_INTERVAL = +#GRID_STAT_CLIMO_STDEV_HOUR_INTERVAL = + +#GRID_STAT_CLIMO_CDF_BINS = 1 +#GRID_STAT_CLIMO_CDF_CENTER_BINS = False +#GRID_STAT_CLIMO_CDF_WRITE_BINS = True + +GRID_STAT_MASK_GRID = + +# Statistical output types +GRID_STAT_OUTPUT_FLAG_FHO = NONE +GRID_STAT_OUTPUT_FLAG_CTC = NONE +GRID_STAT_OUTPUT_FLAG_CTS = NONE +#GRID_STAT_OUTPUT_FLAG_MCTC = NONE +#GRID_STAT_OUTPUT_FLAG_MCTS = NONE +GRID_STAT_OUTPUT_FLAG_CNT = NONE +#GRID_STAT_OUTPUT_FLAG_SL1L2 = NONE +#GRID_STAT_OUTPUT_FLAG_SAL1L2 = NONE +#GRID_STAT_OUTPUT_FLAG_VL1L2 = NONE +#GRID_STAT_OUTPUT_FLAG_VAL1L2 = NONE +#GRID_STAT_OUTPUT_FLAG_VCNT = NONE +GRID_STAT_OUTPUT_FLAG_PCT = STAT +GRID_STAT_OUTPUT_FLAG_PSTD = STAT +GRID_STAT_OUTPUT_FLAG_PJC = STAT +GRID_STAT_OUTPUT_FLAG_PRC = STAT +#GRID_STAT_OUTPUT_FLAG_ECLV = BOTH +GRID_STAT_OUTPUT_FLAG_NBRCTC = NONE +GRID_STAT_OUTPUT_FLAG_NBRCTS = NONE +GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT +#GRID_STAT_OUTPUT_FLAG_GRAD = BOTH +#GRID_STAT_OUTPUT_FLAG_DMAP = NONE + +# NetCDF matched pairs output file +#GRID_STAT_NC_PAIRS_VAR_NAME = +GRID_STAT_NC_PAIRS_FLAG_LATLON = TRUE +GRID_STAT_NC_PAIRS_FLAG_RAW = TRUE +GRID_STAT_NC_PAIRS_FLAG_DIFF = FALSE +GRID_STAT_NC_PAIRS_FLAG_CLIMO = FALSE +GRID_STAT_NC_PAIRS_FLAG_WEIGHT = FALSE +GRID_STAT_NC_PAIRS_FLAG_NBRHD = TRUE +#GRID_STAT_NC_PAIRS_FLAG_FOURIER = FALSE +#GRID_STAT_NC_PAIRS_FLAG_GRADIENT = FALSE +#GRID_STAT_NC_PAIRS_FLAG_DISTANCE_MAP = FALSE +GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE + +# End of [config] section and start of [dir] section. +[dir] +# +# Directory containing observation input to GridStat. +# +OBS_GRID_STAT_INPUT_DIR = {{obs_input_dir}} +# +# Directory containing forecast input to GridStat. +# +FCST_GRID_STAT_INPUT_DIR = {{fcst_input_dir}} +# +# Directory containing climatology mean input to GridStat. Not used in +# this example. +# +GRID_STAT_CLIMO_MEAN_INPUT_DIR = +# +# Directory containing climatology mean input to GridStat. Not used in +# this example. +# +GRID_STAT_CLIMO_STDEV_INPUT_DIR = +# +# Directory in which to write output from GridStat. +# +# OUTPUT_BASE apparently has to be set to something; it cannot be left +# to its default value. But it is not explicitly used elsewhere in this +# configuration file. +# +OUTPUT_BASE = {{output_base}} +GRID_STAT_OUTPUT_DIR = {{output_dir}} +# +# Directory for staging data. +# +STAGING_DIR = {{staging_dir}} + +# End of [dir] section and start of [filename_templates] section. +[filename_templates] +# +# Template for observation input to GridStat relative to +# OBS_GRID_STAT_INPUT_DIR. +# +OBS_GRID_STAT_INPUT_TEMPLATE = {{obs_input_fn_template}} +# +# Template for forecast input to GridStat relative to +# FCST_GRID_STAT_INPUT_DIR. +# +FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} +# +# Template for output from GridStat relative to GRID_STAT_OUTPUT_DIR. +# +GRID_STAT_OUTPUT_TEMPLATE = +# +# Template for climatology input to GridStat relative to +# GRID_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. +# +GRID_STAT_CLIMO_MEAN_INPUT_TEMPLATE = +# +# Template for climatology input to GridStat relative to +# GRID_STAT_CLIMO_STDEV_INPUT_DIR. Not used in this example. +# +GRID_STAT_CLIMO_STDEV_INPUT_TEMPLATE = +# +# Variable used to specify one or more verification mask files for +# GridStat. Not used for this example. +# +GRID_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly diff --git a/parm/wflow/verify_ens.yaml b/parm/wflow/verify_ens.yaml index 3dbf924ce8..b45d2e977e 100644 --- a/parm/wflow/verify_ens.yaml +++ b/parm/wflow/verify_ens.yaml @@ -56,6 +56,37 @@ metatask_GenEnsProd_EnsembleStat_CCPA: attrs: task: run_MET_GenEnsProd_vx_APCP#ACCUM_HH#h +metatask_GenEnsProd_EnsembleStat_NOHRSC: + var: + ACCUM_HH: '{% for ah in verification.VX_ASNOW_ACCUMS_HRS %}{% if workflow.FCST_LEN_HRS >= ah %}{{ "%02d " % ah }}{% endif %}{% endfor %}' + task_run_MET_GenEnsProd_vx_ASNOW#ACCUM_HH#h: &task_GenEnsProd_NOHRSC + <<: *default_task_verify_ens + command: '&LOAD_MODULES_RUN_TASK_FP; "run_vx" "&JOBSdir;/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT"' + envars: &envars_GenEnsProd_NOHRSC + <<: *default_vars + ACCUM_HH: '#ACCUM_HH#' + OBS_DIR: '&NOHRSC_OBS_DIR;' + VAR: ASNOW + MET_TOOL: 'GENENSPROD' + OBTYPE: 'NOHRSC' + dependency: + and: + # The PcpCombine task for obs must be complete because this GenEnsProd + # task checks to see the forecast hours for which obs are available before + # processing the forecast for those hours. + metataskdep_pcpcombine_fcst: + attrs: + metatask: PcpCombine_fcst_ASNOW#ACCUM_HH#h_all_mems + task_run_MET_EnsembleStat_vx_ASNOW#ACCUM_HH#h: + <<: *task_GenEnsProd_NOHRSC + envars: + <<: *envars_GenEnsProd_NOHRSC + MET_TOOL: 'ENSEMBLESTAT' + dependency: + taskdep_genensprod: + attrs: + task: run_MET_GenEnsProd_vx_ASNOW#ACCUM_HH#h + metatask_GenEnsProd_EnsembleStat_MRMS: var: VAR: '{% for var in verification.VX_FIELDS %}{% if var in ["REFC", "RETOP"] %}{{ "%s " % var }}{% endif %}{% endfor %}' @@ -148,6 +179,28 @@ metatask_GridStat_CCPA_ensmeanprob_all_accums: attrs: task: run_MET_GenEnsProd_vx_APCP#ACCUM_HH#h +metatask_GridStat_NOHRSC_ensmeanprob_all_accums: + var: + stat: MEAN PROB + statlc: mean prob + metatask_GridStat_NOHRSC_ens#statlc#_all_accums: + var: + ACCUM_HH: '{% for ah in verification.VX_ASNOW_ACCUMS_HRS %}{% if workflow.FCST_LEN_HRS >= ah %}{{ "%02d " % ah }}{% endif %}{% endfor %}' + task_run_MET_GridStat_vx_ens#statlc#_ASNOW#ACCUM_HH#h: + <<: *default_task_verify_ens + command: '&LOAD_MODULES_RUN_TASK_FP; "run_vx" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENS#stat#"' + envars: + <<: *default_vars + OBS_DIR: '&NOHRSC_OBS_DIR;' + VAR: ASNOW + MET_TOOL: 'GRIDSTAT' + OBTYPE: 'NOHRSC' + ACCUM_HH: '#ACCUM_HH#' + dependency: + taskdep: + attrs: + task: run_MET_GenEnsProd_vx_ASNOW#ACCUM_HH#h + metatask_GridStat_MRMS_ensprob: var: VAR: '{% for var in verification.VX_FIELDS %}{% if var in ["REFC", "RETOP"] %}{{ "%s " % var }}{% endif %}{% endfor %}' diff --git a/scripts/exregional_run_met_genensprod_or_ensemblestat.sh b/scripts/exregional_run_met_genensprod_or_ensemblestat.sh index 9631efdb6d..033140c425 100755 --- a/scripts/exregional_run_met_genensprod_or_ensemblestat.sh +++ b/scripts/exregional_run_met_genensprod_or_ensemblestat.sh @@ -133,6 +133,9 @@ if [ "${grid_or_point}" = "grid" ]; then "APCP24h") FIELD_THRESHOLDS="gt0.0, ge6.350, ge12.700, ge25.400" ;; + "ASNOW") + FIELD_THRESHOLDS="gt0.0, ge2.54, ge5.08, ge10.16, ge20.32" + ;; "REFC") FIELD_THRESHOLDS="ge20, ge30, ge40, ge50" ;; @@ -180,16 +183,22 @@ if [ "${grid_or_point}" = "grid" ]; then case "${FIELDNAME_IN_MET_FILEDIR_NAMES}" in "APCP01h") OBS_INPUT_FN_TEMPLATE="${OBS_CCPA_APCP01h_FN_TEMPLATE}" + FCST_INPUT_DIR="${vx_fcst_input_basedir}" + ;; + "ASNOW") + OBS_INPUT_FN_TEMPLATE="${OBS_NOHRSC_ASNOW_FN_TEMPLATE}" + FCST_INPUT_DIR="${vx_output_basedir}" ;; "REFC") OBS_INPUT_FN_TEMPLATE="${OBS_MRMS_REFC_FN_TEMPLATE}" + FCST_INPUT_DIR="${vx_fcst_input_basedir}" ;; "RETOP") OBS_INPUT_FN_TEMPLATE="${OBS_MRMS_RETOP_FN_TEMPLATE}" + FCST_INPUT_DIR="${vx_fcst_input_basedir}" ;; esac OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_INPUT_FN_TEMPLATE} ) - FCST_INPUT_DIR="${vx_fcst_input_basedir}" fi elif [ "${grid_or_point}" = "point" ]; then @@ -219,7 +228,7 @@ for (( i=0; i<${NUM_ENS_MEMBERS}; i++ )); do time_lag=$( bc -l <<< "${ENS_TIME_LAG_HRS[$i]}*${SECS_PER_HOUR}" ) - if [ "${field_is_APCPgt01h}" = "TRUE" ]; then + if [ "${field_is_APCPgt01h}" = "TRUE" ] || [ "${FIELDNAME_IN_MET_FILEDIR_NAMES}" = "ASNOW" ]; then template="${cdate_ensmem_subdir_or_null:+${cdate_ensmem_subdir_or_null}/}metprd/PcpCombine_fcst/${FCST_FN_METPROC_TEMPLATE}" else template="${FCST_SUBDIR_TEMPLATE}/${FCST_FN_TEMPLATE}" diff --git a/scripts/exregional_run_met_gridstat_or_pointstat_vx_ensmean.sh b/scripts/exregional_run_met_gridstat_or_pointstat_vx_ensmean.sh index 45929fbcb6..f2f916fa79 100755 --- a/scripts/exregional_run_met_gridstat_or_pointstat_vx_ensmean.sh +++ b/scripts/exregional_run_met_gridstat_or_pointstat_vx_ensmean.sh @@ -122,6 +122,9 @@ if [ "${grid_or_point}" = "grid" ]; then "APCP24h") FIELD_THRESHOLDS="gt0.0, ge6.350, ge12.700, ge25.400" ;; + "ASNOW") + FIELD_THRESHOLDS="gt0.0, ge2.54, ge5.08, ge10.16, ge20.32" + ;; "REFC") FIELD_THRESHOLDS="ge20, ge30, ge40, ge50" ;; @@ -162,23 +165,30 @@ if [ "${grid_or_point}" = "grid" ]; then if [ "${field_is_APCPgt01h}" = "TRUE" ]; then OBS_INPUT_DIR="${vx_output_basedir}/metprd/PcpCombine_obs" OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_CCPA_APCPgt01h_FN_TEMPLATE} ) + FCST_INPUT_FN_TEMPLATE=$( eval echo 'gen_ens_prod_${VX_FCST_MODEL_NAME}_${FIELDNAME_IN_MET_FILEDIR_NAMES}_${OBTYPE}_{lead?fmt=%H%M%S}L_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V.nc' ) else OBS_INPUT_DIR="${OBS_DIR}" case "${FIELDNAME_IN_MET_FILEDIR_NAMES}" in "APCP01h") OBS_INPUT_FN_TEMPLATE="${OBS_CCPA_APCP01h_FN_TEMPLATE}" + FCST_INPUT_FN_TEMPLATE=$( eval echo 'gen_ens_prod_${VX_FCST_MODEL_NAME}_${FIELDNAME_IN_MET_FILEDIR_NAMES}_${OBTYPE}_{lead?fmt=%H%M%S}L_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V.nc' ) + ;; + "ASNOW") + OBS_INPUT_FN_TEMPLATE="${OBS_NOHRSC_ASNOW_FN_TEMPLATE}" + FCST_INPUT_FN_TEMPLATE=$( eval echo 'gen_ens_prod_${VX_FCST_MODEL_NAME}_${FIELDNAME_IN_MET_FILEDIR_NAMES}_${ACCUM_HH}h_${OBTYPE}_{lead?fmt=%H%M%S}L_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V.nc' ) ;; "REFC") OBS_INPUT_FN_TEMPLATE="${OBS_MRMS_REFC_FN_TEMPLATE}" + FCST_INPUT_FN_TEMPLATE=$( eval echo 'gen_ens_prod_${VX_FCST_MODEL_NAME}_${FIELDNAME_IN_MET_FILEDIR_NAMES}_${OBTYPE}_{lead?fmt=%H%M%S}L_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V.nc' ) ;; "RETOP") OBS_INPUT_FN_TEMPLATE="${OBS_MRMS_RETOP_FN_TEMPLATE}" + FCST_INPUT_FN_TEMPLATE=$( eval echo 'gen_ens_prod_${VX_FCST_MODEL_NAME}_${FIELDNAME_IN_MET_FILEDIR_NAMES}_${OBTYPE}_{lead?fmt=%H%M%S}L_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V.nc' ) ;; esac OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_INPUT_FN_TEMPLATE} ) fi FCST_INPUT_DIR="${vx_output_basedir}${slash_cdate_or_null}/metprd/GenEnsProd" - FCST_INPUT_FN_TEMPLATE=$( eval echo 'gen_ens_prod_${VX_FCST_MODEL_NAME}_${FIELDNAME_IN_MET_FILEDIR_NAMES}_${OBTYPE}_{lead?fmt=%H%M%S}L_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V.nc' ) elif [ "${grid_or_point}" = "point" ]; then diff --git a/scripts/exregional_run_met_gridstat_or_pointstat_vx_ensprob.sh b/scripts/exregional_run_met_gridstat_or_pointstat_vx_ensprob.sh index 7478f35562..69a08d35e3 100755 --- a/scripts/exregional_run_met_gridstat_or_pointstat_vx_ensprob.sh +++ b/scripts/exregional_run_met_gridstat_or_pointstat_vx_ensprob.sh @@ -121,23 +121,30 @@ if [ "${grid_or_point}" = "grid" ]; then if [ "${field_is_APCPgt01h}" = "TRUE" ]; then OBS_INPUT_DIR="${vx_output_basedir}/metprd/PcpCombine_obs" OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_CCPA_APCPgt01h_FN_TEMPLATE} ) + FCST_INPUT_FN_TEMPLATE=$( eval echo 'gen_ens_prod_${VX_FCST_MODEL_NAME}_${FIELDNAME_IN_MET_FILEDIR_NAMES}_${OBTYPE}_{lead?fmt=%H%M%S}L_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V.nc' ) else OBS_INPUT_DIR="${OBS_DIR}" case "${FIELDNAME_IN_MET_FILEDIR_NAMES}" in "APCP01h") OBS_INPUT_FN_TEMPLATE="${OBS_CCPA_APCP01h_FN_TEMPLATE}" + FCST_INPUT_FN_TEMPLATE=$( eval echo 'gen_ens_prod_${VX_FCST_MODEL_NAME}_${FIELDNAME_IN_MET_FILEDIR_NAMES}_${OBTYPE}_{lead?fmt=%H%M%S}L_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V.nc' ) + ;; + "ASNOW") + OBS_INPUT_FN_TEMPLATE="${OBS_NOHRSC_ASNOW_FN_TEMPLATE}" + FCST_INPUT_FN_TEMPLATE=$( eval echo 'gen_ens_prod_${VX_FCST_MODEL_NAME}_${FIELDNAME_IN_MET_FILEDIR_NAMES}_${ACCUM_HH}h_${OBTYPE}_{lead?fmt=%H%M%S}L_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V.nc' ) ;; "REFC") OBS_INPUT_FN_TEMPLATE="${OBS_MRMS_REFC_FN_TEMPLATE}" + FCST_INPUT_FN_TEMPLATE=$( eval echo 'gen_ens_prod_${VX_FCST_MODEL_NAME}_${FIELDNAME_IN_MET_FILEDIR_NAMES}_${OBTYPE}_{lead?fmt=%H%M%S}L_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V.nc' ) ;; "RETOP") OBS_INPUT_FN_TEMPLATE="${OBS_MRMS_RETOP_FN_TEMPLATE}" + FCST_INPUT_FN_TEMPLATE=$( eval echo 'gen_ens_prod_${VX_FCST_MODEL_NAME}_${FIELDNAME_IN_MET_FILEDIR_NAMES}_${OBTYPE}_{lead?fmt=%H%M%S}L_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V.nc' ) ;; esac OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_INPUT_FN_TEMPLATE} ) fi FCST_INPUT_DIR="${vx_output_basedir}${slash_cdate_or_null}/metprd/GenEnsProd" - FCST_INPUT_FN_TEMPLATE=$( eval echo 'gen_ens_prod_${VX_FCST_MODEL_NAME}_${FIELDNAME_IN_MET_FILEDIR_NAMES}_${OBTYPE}_{lead?fmt=%H%M%S}L_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V.nc' ) elif [ "${grid_or_point}" = "point" ]; then diff --git a/ush/config_defaults.yaml b/ush/config_defaults.yaml index 9dacc08a0e..b8c103e32e 100644 --- a/ush/config_defaults.yaml +++ b/ush/config_defaults.yaml @@ -2478,7 +2478,7 @@ verification: # VX_ASNOW_ACCUMS_HRS will be ignored. # VX_FCST_MODEL_NAME: '{{ nco.NET }}.{{ task_run_post.POST_OUTPUT_DOMAIN_NAME }}' - VX_FIELDS: [ "APCP", "ASNOW", "REFC", "RETOP", "SFC", "UPA" ] + VX_FIELDS: [ "APCP", "REFC", "RETOP", "SFC", "UPA" ] VX_APCP_ACCUMS_HRS: [ 1, 3, 6, 24 ] VX_ASNOW_ACCUMS_HRS: [ 6, 24 ] # diff --git a/ush/set_vx_params.sh b/ush/set_vx_params.sh index d19b753ec2..15d154d402 100644 --- a/ush/set_vx_params.sh +++ b/ush/set_vx_params.sh @@ -173,7 +173,7 @@ this observation type (obtype) and field (field) combination: "ASNOW") fieldname_in_obs_input="${field}" - fieldname_in_fcst_input="${field}_${accum_hh}" + fieldname_in_fcst_input="${field}" fieldname_in_MET_output="${field}_${accum_hh}" fieldname_in_MET_filedir_names="${field}" ;; diff --git a/ush/setup.py b/ush/setup.py index 3f9c638e20..6592f39ec9 100644 --- a/ush/setup.py +++ b/ush/setup.py @@ -552,13 +552,14 @@ def remove_tag(tasks, tag): vx_fields_all["CCPA"] = ["APCP"] vx_metatasks_all["CCPA"] = ["metatask_PcpCombine_obs", - "metatask_PcpCombine_fcst_all_accums_all_mems", + "metatask_PcpCombine_fcst_APCP_all_accums_all_mems", "metatask_GridStat_CCPA_all_accums_all_mems", "metatask_GenEnsProd_EnsembleStat_CCPA", "metatask_GridStat_CCPA_ensmeanprob_all_accums"] vx_fields_all["NOHRSC"] = ["ASNOW"] - vx_metatasks_all["NOHRSC"] = ["metatask_PcpCombine_fcst_all_accums_all_mems", + vx_metatasks_all["NOHRSC"] = ["task_get_obs_nohrsc", + "metatask_PcpCombine_fcst_ASNOW_all_accums_all_mems", "metatask_GridStat_NOHRSC_all_accums_all_mems", "metatask_GenEnsProd_EnsembleStat_NOHRSC", "metatask_GridStat_NOHRSC_ensmeanprob_all_accums"] From 6385801a30587249f124fb5316584ccedf7a7db3 Mon Sep 17 00:00:00 2001 From: willmayfield Date: Thu, 6 Jul 2023 06:08:16 +0000 Subject: [PATCH 6/9] documentation and cleanup for snowfall vx --- docs/UsersGuide/source/ConfigWorkflow.rst | 14 +++++++++++--- docs/UsersGuide/source/Glossary.rst | 3 +++ docs/UsersGuide/source/RunSRW.rst | 22 ++++++++++++++++------ parm/metplus/EnsembleStat_ASNOW.conf | 2 +- parm/metplus/GenEnsProd_ASNOW.conf | 2 +- parm/metplus/GridStat_ASNOW.conf | 2 +- parm/metplus/GridStat_ensmean_ASNOW.conf | 2 +- parm/metplus/GridStat_ensprob_ASNOW.conf | 2 +- parm/metplus/PcpCombine_fcst_ASNOW.conf | 4 ++++ scripts/exregional_get_obs_nohrsc.sh | 11 ++--------- ush/config_defaults.yaml | 7 ++++++- 11 files changed, 47 insertions(+), 24 deletions(-) diff --git a/docs/UsersGuide/source/ConfigWorkflow.rst b/docs/UsersGuide/source/ConfigWorkflow.rst index fc7b5e1391..5dc167bd79 100644 --- a/docs/UsersGuide/source/ConfigWorkflow.rst +++ b/docs/UsersGuide/source/ConfigWorkflow.rst @@ -151,15 +151,23 @@ METplus Parameters * ``SS`` refers to the two-digit valid seconds of the hour ``CCPA_OBS_DIR``: (Default: "") - User-specified location of top-level directory where CCPA hourly precipitation files used by METplus are located. This parameter needs to be set for both user-provided observations and for observations that are retrieved from the NOAA :term:`HPSS` (if the user has access) via the ``GET_OBS_CCPA`` task. (This task is activated in the workflow by using the taskgroup file ``parm/wflow/verify.yaml``). + User-specified location of top-level directory where CCPA hourly precipitation files used by METplus are located. This parameter needs to be set for both user-provided observations and for observations that are retrieved from the NOAA :term:`HPSS` (if the user has access) via the ``GET_OBS_CCPA`` task. (This task is activated in the workflow by using the taskgroup file ``parm/wflow/verify_pre.yaml``). METplus configuration files require the use of a predetermined directory structure and file names. If the CCPA files are user-provided, they need to follow the anticipated naming structure: ``{YYYYMMDD}/ccpa.t{HH}z.01h.hrap.conus.gb2``, where YYYYMMDD and HH are as described in the note :ref:`above `. When pulling observations from NOAA HPSS, the data retrieved will be placed in the ``CCPA_OBS_DIR`` directory. This path must be defind as ``//ccpa/proc``. METplus is configured to verify 01-, 03-, 06-, and 24-h accumulated precipitation using hourly CCPA files. .. note:: There is a problem with the valid time in the metadata for files valid from 19 - 00 UTC (i.e., files under the "00" directory). The script to pull the CCPA data from the NOAA HPSS (``scripts/exregional_get_obs_ccpa.sh``) has an example of how to account for this and organize the data into a more intuitive format. When a fix is provided, it will be accounted for in the ``exregional_get_obs_ccpa.sh`` script. +``NOHRSC_OBS_DIR``: (Default: "") + User-specified location of top-level directory where NOHRSC 06- and 24-hour snowfall accumulation files (available every 6 and 12 hours respectively) used by METplus are located. This parameter needs to be set for both user-provided observations and for observations that are retrieved from the NOAA :term:`HPSS` (if the user has access) via the ``GET_OBS_NOHRSC`` task. (This task is activated in the workflow by using the taskgroup file ``parm/wflow/verify_pre.yaml``). + + METplus configuration files require the use of a predetermined directory structure and file names. If the NOHRSC files are user-provided, they need to follow the anticipated naming structure: ``{YYYYMMDD}/sfav2_CONUS_{AA}h_{YYYYMMDD}{HH}_grid184.grb2``, where AA is the 2-digit accumulation duration, and YYYYMMDD and HH are as described in the note :ref:`above `. When pulling observations from NOAA HPSS, the data retrieved will be placed in the ``NOHRSC_OBS_DIR`` directory. This path must be defind as ``//nohrsc/proc``. METplus is configured to verify 06-, and 24-h accumulated precipitation using NOHRSC files. + + .. note:: + Due to limited availability of NOHRSC observation data on NOAA HPSS, and the likelihood that snowfall acumulation verification will not be desired outside of winter cases, this verification option is currently not present in the workflow by default. In order to use it, the verification environment variable VX_FIELDS should be updated to include ``ASNOW``. This will allow the related workflow tasks to be run. + ``MRMS_OBS_DIR``: (Default: "") - User-specified location of top-level directory where MRMS composite reflectivity files used by METplus are located. This parameter needs to be set for both user-provided observations and for observations that are retrieved from the NOAA :term:`HPSS` (if the user has access) via the ``GET_OBS_MRMS`` task (activated in the workflow automatically when using the taskgroup file ``parm/wflow/verify.yaml``). When pulling observations directly from NOAA HPSS, the data retrieved will be placed in this directory. Please note, this path must be defind as ``//mrms/proc``. + User-specified location of top-level directory where MRMS composite reflectivity files used by METplus are located. This parameter needs to be set for both user-provided observations and for observations that are retrieved from the NOAA :term:`HPSS` (if the user has access) via the ``GET_OBS_MRMS`` task (activated in the workflow automatically when using the taskgroup file ``parm/wflow/verify_pre.yaml``). When pulling observations directly from NOAA HPSS, the data retrieved will be placed in this directory. Please note, this path must be defind as ``//mrms/proc``. METplus configuration files require the use of a predetermined directory structure and file names. Therefore, if the MRMS files are user-provided, they need to follow the anticipated naming structure: ``{YYYYMMDD}/MergedReflectivityQCComposite_00.50_{YYYYMMDD}-{HH}{mm}{SS}.grib2``, where YYYYMMDD and {HH}{mm}{SS} are as described in the note :ref:`above `. @@ -167,7 +175,7 @@ METplus Parameters METplus is configured to look for a MRMS composite reflectivity file for the valid time of the forecast being verified; since MRMS composite reflectivity files do not always exactly match the valid time, a script (within the main script that retrieves MRMS data from the NOAA HPSS) is used to identify and rename the MRMS composite reflectivity file to match the valid time of the forecast. The script to pull the MRMS data from the NOAA HPSS has an example of the expected file-naming structure: ``scripts/exregional_get_obs_mrms.sh``. This script calls the script used to identify the MRMS file closest to the valid time: ``ush/mrms_pull_topofhour.py``. ``NDAS_OBS_DIR``: (Default: "") - User-specified location of the top-level directory where NDAS prepbufr files used by METplus are located. This parameter needs to be set for both user-provided observations and for observations that are retrieved from the NOAA :term:`HPSS` (if the user has access) via the ``GET_OBS_NDAS`` task (activated in the workflow automatically when using the taskgroup file ``parm/wflow/verify.yaml``). When pulling observations directly from NOAA HPSS, the data retrieved will be placed in this directory. Please note, this path must be defined as ``//ndas/proc``. METplus is configured to verify near-surface variables hourly and upper-air variables at 00 and 12 UTC with NDAS prepbufr files. + User-specified location of the top-level directory where NDAS prepbufr files used by METplus are located. This parameter needs to be set for both user-provided observations and for observations that are retrieved from the NOAA :term:`HPSS` (if the user has access) via the ``GET_OBS_NDAS`` task (activated in the workflow automatically when using the taskgroup file ``parm/wflow/verify_pre.yaml``). When pulling observations directly from NOAA HPSS, the data retrieved will be placed in this directory. Please note, this path must be defined as ``//ndas/proc``. METplus is configured to verify near-surface variables hourly and upper-air variables at 00 and 12 UTC with NDAS prepbufr files. METplus configuration files require the use of predetermined file names. Therefore, if the NDAS files are user-provided, they need to follow the anticipated naming structure: ``prepbufr.ndas.{YYYYMMDDHH}``, where YYYYMMDDHH is as described in the note :ref:`above `. The script to pull the NDAS data from the NOAA HPSS (``scripts/exregional_get_obs_ndas.sh``) has an example of how to rename the NDAS data into a more intuitive format with the valid time listed in the file name. diff --git a/docs/UsersGuide/source/Glossary.rst b/docs/UsersGuide/source/Glossary.rst index 81dd82adb7..4d12b7d9d1 100644 --- a/docs/UsersGuide/source/Glossary.rst +++ b/docs/UsersGuide/source/Glossary.rst @@ -188,6 +188,9 @@ Glossary netCDF NetCDF (`Network Common Data Form `__) is a file format and community standard for storing multidimensional scientific data. It includes a set of software libraries and machine-independent data formats that support the creation, access, and sharing of array-oriented scientific data. + NOHRSC + The National Operational Hydrologic Remote Sensing Center provides The National Snowfall Analysis, an observation-based, gridded estimate of recent snowfall, is now an operational product. + NSSL The `National Severe Storms Laboratory `__. diff --git a/docs/UsersGuide/source/RunSRW.rst b/docs/UsersGuide/source/RunSRW.rst index 5bea592809..14183d4afc 100644 --- a/docs/UsersGuide/source/RunSRW.rst +++ b/docs/UsersGuide/source/RunSRW.rst @@ -170,7 +170,7 @@ Configuration parameters in the ``config_defaults.yaml`` file appear in :numref: | | PARTITION_HPSS, QUEUE_HPSS, PARTITION_FCST, QUEUE_FCST, | | | RUN_CMD_UTILS, RUN_CMD_FCST, RUN_CMD_POST, SLURM_NATIVE_CMD, | | | MODEL, MET_INSTALL_DIR, METPLUS_PATH, MET_BIN_EXEC, CCPA_OBS_DIR, | - | | MRMS_OBS_DIR, NDAS_OBS_DIR | + | | MRMS_OBS_DIR, NDAS_OBS_DIR, NOHRSC_OBS_DIR | +-----------------------------+-----------------------------------------------------------------------+ | Workflow | WORKFLOW_ID, USE_CRON_TO_RELAUNCH, CRON_RELAUNCH_INTVL_MNTS, | | | EXPT_BASEDIR, EXPT_SUBDIR, EXEC_SUBDIR, DOT_OR_USCORE, | @@ -278,6 +278,8 @@ The user must specify certain basic experiment configuration information in a `` +--------------------------------+-------------------+------------------------------------+ | CCPA_OBS_DIR | "" | "" | +--------------------------------+-------------------+------------------------------------+ + | NOHRSC_OBS_DIR | "" | "" | + +--------------------------------+-------------------+------------------------------------+ | MRMS_OBS_DIR | "" | "" | +--------------------------------+-------------------+------------------------------------+ | NDAS_OBS_DIR | "" | "" | @@ -722,12 +724,14 @@ Users who have already staged the observation data needed for METplus (i.e., the platform: CCPA_OBS_DIR: /path/to/UFS_SRW_App/develop/obs_data/ccpa/proc + NOHRSC_OBS_DIR: /path/to/UFS_SRW_App/develop/obs_data/ccpa/proc MRMS_OBS_DIR: /path/to/UFS_SRW_App/develop/obs_data/mrms/proc NDAS_OBS_DIR: /path/to/UFS_SRW_App/develop/obs_data/ndas/proc rocoto: tasks: taskgroups: '{{ ["parm/wflow/prep.yaml", "parm/wflow/coldstart.yaml", "parm/wflow/post.yaml", "parm/wflow/verify.yaml"]|include }}' task_get_obs_ccpa: + task_get_obs_nohrsc: task_get_obs_mrms: task_get_obs_ndas: @@ -827,18 +831,24 @@ In addition to the baseline tasks described in :numref:`Table %s Date: Thu, 6 Jul 2023 06:15:56 +0000 Subject: [PATCH 7/9] documentation formatting --- docs/UsersGuide/source/RunSRW.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/UsersGuide/source/RunSRW.rst b/docs/UsersGuide/source/RunSRW.rst index 14183d4afc..cd570ff551 100644 --- a/docs/UsersGuide/source/RunSRW.rst +++ b/docs/UsersGuide/source/RunSRW.rst @@ -839,7 +839,7 @@ In addition to the baseline tasks described in :numref:`Table %s Date: Thu, 6 Jul 2023 06:58:52 +0000 Subject: [PATCH 8/9] clean whitespace --- ush/set_vx_fhr_list.sh | 2 +- ush/setup.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ush/set_vx_fhr_list.sh b/ush/set_vx_fhr_list.sh index d824bbcfcb..172b5c52f3 100644 --- a/ush/set_vx_fhr_list.sh +++ b/ush/set_vx_fhr_list.sh @@ -106,7 +106,7 @@ function set_vx_fhr_list() { fhr_int="${accum_hh}" ;; "ASNOW") - if [ ${accum_hh} = "24" ] ; then + if [ ${accum_hh} = "24" ] ; then fhr_min="24" fhr_int="12" else diff --git a/ush/setup.py b/ush/setup.py index 6592f39ec9..70ff1d8f8a 100644 --- a/ush/setup.py +++ b/ush/setup.py @@ -551,15 +551,15 @@ def remove_tag(tasks, tag): vx_metatasks_all = {} vx_fields_all["CCPA"] = ["APCP"] - vx_metatasks_all["CCPA"] = ["metatask_PcpCombine_obs", - "metatask_PcpCombine_fcst_APCP_all_accums_all_mems", + vx_metatasks_all["CCPA"] = ["metatask_PcpCombine_obs", + "metatask_PcpCombine_fcst_APCP_all_accums_all_mems", "metatask_GridStat_CCPA_all_accums_all_mems", "metatask_GenEnsProd_EnsembleStat_CCPA", "metatask_GridStat_CCPA_ensmeanprob_all_accums"] vx_fields_all["NOHRSC"] = ["ASNOW"] vx_metatasks_all["NOHRSC"] = ["task_get_obs_nohrsc", - "metatask_PcpCombine_fcst_ASNOW_all_accums_all_mems", + "metatask_PcpCombine_fcst_ASNOW_all_accums_all_mems", "metatask_GridStat_NOHRSC_all_accums_all_mems", "metatask_GenEnsProd_EnsembleStat_NOHRSC", "metatask_GridStat_NOHRSC_ensmeanprob_all_accums"] From 1d80d7b276b4bf151f0aa618cc20d8c6eec169b4 Mon Sep 17 00:00:00 2001 From: Will Mayfield Date: Thu, 6 Jul 2023 10:55:53 -0600 Subject: [PATCH 9/9] documentation updates and code cleanup --- docs/UsersGuide/source/Glossary.rst | 2 +- parm/wflow/default_workflow.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/UsersGuide/source/Glossary.rst b/docs/UsersGuide/source/Glossary.rst index 4d12b7d9d1..3406181324 100644 --- a/docs/UsersGuide/source/Glossary.rst +++ b/docs/UsersGuide/source/Glossary.rst @@ -189,7 +189,7 @@ Glossary NetCDF (`Network Common Data Form `__) is a file format and community standard for storing multidimensional scientific data. It includes a set of software libraries and machine-independent data formats that support the creation, access, and sharing of array-oriented scientific data. NOHRSC - The National Operational Hydrologic Remote Sensing Center provides The National Snowfall Analysis, an observation-based, gridded estimate of recent snowfall, is now an operational product. + The National Operational Hydrologic Remote Sensing Center, which provides the National Snowfall Analysis, an observation-based, gridded estimate of recent snowfall, now an operational product. NSSL The `National Severe Storms Laboratory `__. diff --git a/parm/wflow/default_workflow.yaml b/parm/wflow/default_workflow.yaml index 242651fbf8..facd5999a9 100644 --- a/parm/wflow/default_workflow.yaml +++ b/parm/wflow/default_workflow.yaml @@ -5,7 +5,6 @@ rocoto: entities: ACCOUNT: '{{ user.ACCOUNT }}' CCPA_OBS_DIR: '{{ platform.CCPA_OBS_DIR }}' - NOHRSC_OBS_DIR: '{{ platform.NOHRSC_OBS_DIR }}' COMIN_DIR: '{% if user.RUN_ENVIR == "nco" %}{{"{}/{}.@Y@m@d/@H".format(nco.COMIN_BASEDIR,nco.RUN)}}{% else %}{{"{}/@Y@m@d@H".format(workflow.EXPTDIR)}}{% endif %}' COMINgfs: '{{ platform.get("COMINgfs") }}' FCST_DIR: '{% if user.RUN_ENVIR == "nco" %}{{"{}/run_fcst_mem#mem#.{}_@Y@m@d@H".format(nco.DATAROOT,workflow.WORKFLOW_ID)}}{% else %}{{"{}/@Y@m@d@H".format(workflow.EXPTDIR)}}{% endif %}' @@ -18,6 +17,7 @@ rocoto: NCORES_PER_NODE: '{{ platform.NCORES_PER_NODE }}' NDAS_OBS_DIR: '{{ platform.NDAS_OBS_DIR }}' NET: '{{ nco.NET }}' + NOHRSC_OBS_DIR: '{{ platform.NOHRSC_OBS_DIR }}' PARTITION_DEFAULT: '{{ platform.get("PARTITION_DEFAULT") }}' PARTITION_FCST: '{{ platform.get("PARTITION_FCST") }}' PARTITION_HPSS: '{{ platform.get("PARTITION_HPSS") }}'