From f9696e1bcc4295556e679e67e4ab2fb133dde2a8 Mon Sep 17 00:00:00 2001 From: Yi-Cheng Teng - NOAA <30629225+clouden90@users.noreply.github.com> Date: Mon, 10 Jul 2023 10:31:00 -0400 Subject: [PATCH 1/6] [develop] Bugfix/metric (#835) Bug fix for forecast metric case due to recently merged verification PRs. --- .cicd/scripts/srw_metric_example.sh | 12 ++++++------ ...Ind_3km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v16.yaml | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.cicd/scripts/srw_metric_example.sh b/.cicd/scripts/srw_metric_example.sh index 3560d99254..7505334ba0 100755 --- a/.cicd/scripts/srw_metric_example.sh +++ b/.cicd/scripts/srw_metric_example.sh @@ -50,15 +50,15 @@ conda activate regional_workflow set -e -u # build srw -cd ${WORKSPACE}/tests +cd ${workspace}/tests ./build.sh ${platform,,} ${SRW_COMPILER} -cd ${WORKSPACE} +cd ${workspace} # run test [[ -d ${we2e_experiment_base_dir} ]] && rm -rf ${we2e_experiment_base_dir} -cd ${WORKSPACE}/tests/WE2E +cd ${workspace}/tests/WE2E ./run_WE2E_tests.py -t ${we2e_test_name} -m ${platform,,} -a ${SRW_PROJECT} --expt_basedir "metric_test" --exec_subdir=install_intel/exec -q -cd ${WORKSPACE} +cd ${workspace} # run skill-score check # first load MET env variables @@ -70,8 +70,8 @@ source ${we2e_experiment_base_dir}/${we2e_test_name}/var_defns.sh # It is computed by aggregating the output from earlier runs of the Point-Stat and/or Grid-Stat tools over one or more cases. # In this example, skill score index is a weighted average of 16 skill scores of RMSE statistics for wind speed, dew point temperature, # temperature, and pressure at lowest level in the atmosphere over 48 hour lead time. -cp ${we2e_experiment_base_dir}/${we2e_test_name}/2019061500/mem000/metprd/PointStat/*.stat ${WORKSPACE}/Indy-Severe-Weather/metprd/point_stat/ -${MET_INSTALL_DIR}/${MET_BIN_EXEC}/stat_analysis -config parm/metplus/STATAnalysisConfig_skill_score -lookin ${WORKSPACE}/Indy-Severe-Weather/metprd/point_stat -v 2 -out skill-score.out +cp ${we2e_experiment_base_dir}/${we2e_test_name}/2019061500/metprd/PointStat/*.stat ${workspace}/Indy-Severe-Weather/metprd/point_stat/ +${MET_INSTALL_DIR}/${MET_BIN_EXEC}/stat_analysis -config parm/metplus/STATAnalysisConfig_skill_score -lookin ${workspace}/Indy-Severe-Weather/metprd/point_stat -v 2 -out skill-score.out # check skill-score.out cat skill-score.out diff --git a/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_SUBCONUS_Ind_3km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v16.yaml b/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_SUBCONUS_Ind_3km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v16.yaml index 44cf2ae52b..05af923cc5 100644 --- a/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_SUBCONUS_Ind_3km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v16.yaml +++ b/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_SUBCONUS_Ind_3km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v16.yaml @@ -16,7 +16,7 @@ workflow: PREEXISTING_DIR_METHOD: rename rocoto: tasks: - taskgroups: '{{ ["parm/wflow/prep.yaml", "parm/wflow/coldstart.yaml", "parm/wflow/post.yaml", "parm/wflow/verify.yaml"]|include }}' + taskgroups: '{{ ["parm/wflow/prep.yaml", "parm/wflow/coldstart.yaml", "parm/wflow/post.yaml", "parm/wflow/verify_pre.yaml", "parm/wflow/verify_det.yaml"]|include }}' metatask_run_ensemble: task_run_fcst_mem#mem#: walltime: 04:00:00 From e565518038a56c5fade8820750b3cb4f10989b63 Mon Sep 17 00:00:00 2001 From: Bruce Kropp - Raytheon <104453151+BruceKropp-Raytheon@users.noreply.github.com> Date: Fri, 21 Jul 2023 09:25:17 -0700 Subject: [PATCH 2/6] [develop] Update Jenkinsfile to run post-build functional tests (#847) This is a new CI gate to ensure that code changes still allow E2E tests to run on supported platforms. It uses the existing CI functional test script, .cicd/scripts/srw_ftest.sh, to setup and try the first few workflow tasks. If these succeed, we can be confident that E2E tests can still be launched as usual. --- .cicd/Jenkinsfile | 13 +++++++++++-- .cicd/scripts/srw_ftest.sh | 28 ++++++++++++++++++++++------ 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/.cicd/Jenkinsfile b/.cicd/Jenkinsfile index ff0b6914e8..04bb2034da 100644 --- a/.cicd/Jenkinsfile +++ b/.cicd/Jenkinsfile @@ -127,12 +127,13 @@ pipeline { } // Run the unittest functional tests that require an HPC platform - stage('Functional Tests') { + stage('Functional UnitTests') { steps { echo "Running unittest on retrieve_data.py" sh 'bash --login "${WORKSPACE}/.cicd/scripts/srw_unittest.sh"' } } + // Run the unified build script; if successful create a tarball of the build and upload to S3 stage('Build') { steps { @@ -148,6 +149,14 @@ pipeline { } } + // Try a few Workflow Task scripts to make sure E2E tests can be launched in a follow-on 'Test' stage + stage('Functional WorkflowTaskTests') { + steps { + echo "Running simple workflow script task tests on ${env.SRW_PLATFORM} (using ${env.WORKSPACE})" + sh 'bash --login "${WORKSPACE}/.cicd/scripts/srw_ftest.sh"' + } + } + // Run the unified test script stage('Test') { environment { @@ -187,7 +196,7 @@ pipeline { sh 'cd "${SRW_WE2E_EXPERIMENT_BASE_DIR}" && tar --create --gzip --verbose --dereference --file "${WORKSPACE}/we2e_test_logs-${SRW_PLATFORM}-${SRW_COMPILER}.tgz" */log.generate_FV3LAM_wflow */log/* ${WORKSPACE}/tests/WE2E/WE2E_tests_*yaml WE2E_summary*txt ${WORKSPACE}/tests/WE2E/log.*' // Remove the data sets from the experiments directory to conserve disk space sh 'find "${SRW_WE2E_EXPERIMENT_BASE_DIR}" -regextype posix-extended -regex "^.*(orog|[0-9]{10})$" -type d | xargs rm -rf' - s3Upload consoleLogLevel: 'INFO', dontSetBuildResultOnFailure: false, dontWaitForConcurrentBuildCompletion: false, entries: [[bucket: 'noaa-epic-prod-jenkins-artifacts', excludedFile: '', flatten: false, gzipFiles: false, keepForever: false, managedArtifacts: true, noUploadOnFailure: false, selectedRegion: 'us-east-1', showDirectlyInBrowser: false, sourceFile: 'we2e_test_results-*-*.txt', storageClass: 'STANDARD', uploadFromSlave: false, useServerSideEncryption: false], [bucket: 'noaa-epic-prod-jenkins-artifacts', excludedFile: '', flatten: false, gzipFiles: false, keepForever: false, managedArtifacts: true, noUploadOnFailure: false, selectedRegion: 'us-east-1', showDirectlyInBrowser: false, sourceFile: 'we2e_test_logs-*-*.tgz', storageClass: 'STANDARD', uploadFromSlave: false, useServerSideEncryption: false]], pluginFailureResultConstraint: 'FAILURE', profileName: 'main', userMetadata: [] + s3Upload consoleLogLevel: 'INFO', dontSetBuildResultOnFailure: false, dontWaitForConcurrentBuildCompletion: false, entries: [[bucket: 'noaa-epic-prod-jenkins-artifacts', excludedFile: '', flatten: false, gzipFiles: false, keepForever: false, managedArtifacts: true, noUploadOnFailure: false, selectedRegion: 'us-east-1', showDirectlyInBrowser: false, sourceFile: '*_test_results-*-*.txt', storageClass: 'STANDARD', uploadFromSlave: false, useServerSideEncryption: false], [bucket: 'noaa-epic-prod-jenkins-artifacts', excludedFile: '', flatten: false, gzipFiles: false, keepForever: false, managedArtifacts: true, noUploadOnFailure: false, selectedRegion: 'us-east-1', showDirectlyInBrowser: false, sourceFile: 'we2e_test_logs-*-*.tgz', storageClass: 'STANDARD', uploadFromSlave: false, useServerSideEncryption: false]], pluginFailureResultConstraint: 'FAILURE', profileName: 'main', userMetadata: [] } } } diff --git a/.cicd/scripts/srw_ftest.sh b/.cicd/scripts/srw_ftest.sh index 3ca2c793a5..4ed136dd78 100755 --- a/.cicd/scripts/srw_ftest.sh +++ b/.cicd/scripts/srw_ftest.sh @@ -7,7 +7,7 @@ # We want this following a normal SRW build in an attempt to exercise environment setup, modules, # data sets, and workflow scripts, without using too much time nor account resources. # We hope to catch any snags that might prevent WE2E fundamental testing, which follows this gate. -# NOTE: At this time, this script is a placeholder for functional test framework. +# NOTE: # At this time, we are leaving the exercise of graphical plotting for a later stage, perhaps WE2E state. # # Required: @@ -71,6 +71,9 @@ echo "DATA_LOCATION=${DATA_LOCATION}" sed "s|^task_get_extrn_ics:|task_get_extrn_ics:\n EXTRN_MDL_SOURCE_BASEDIR_ICS: ${DATA_LOCATION}/FV3GFS/grib2/2019061518|1" -i ush/config.yaml sed "s|^task_get_extrn_lbcs:|task_get_extrn_lbcs:\n EXTRN_MDL_SOURCE_BASEDIR_LBCS: ${DATA_LOCATION}/FV3GFS/grib2/2019061518|1" -i ush/config.yaml +# Use staged data for HPSS supported machines +sed 's|^platform:|platform:\n EXTRN_MDL_DATA_STORES: disk|g' -i ush/config.yaml + # Activate the workflow environment ... source etc/lmod-setup.sh ${platform,,} module use modulefiles @@ -78,12 +81,17 @@ module load build_${platform,,}_${SRW_COMPILER} module load wflow_${platform,,} [[ ${FORGIVE_CONDA} == true ]] && set +e +u # Some platforms have incomplete python3 or conda support, but wouldn't necessarily block workflow tests -conda activate regional_workflow +conda activate workflow_tools set -e -u +export PYTHONPATH=${workspace}/ush/python_utils/workflow-tools:${workspace}/ush/python_utils/workflow-tools/src + +# Adjust for strict limitation of stack size +sed "s|ulimit -s unlimited;|ulimit -S -s unlimited;|" -i ${workspace}/ush/machine/hera.yaml + cd ${workspace}/ush # Consistency check ... - ./config_utils.py -c ./config.yaml -v ./config_defaults.yaml -k "(\!rocoto\b)" + #./config_utils.py -c ./config.yaml -v ./config_defaults.yaml -k "(\!rocoto\b)" # Generate workflow files ... ./generate_FV3LAM_wflow.py cd ${workspace} @@ -115,16 +123,24 @@ export OMP_NUM_THREADS=1 ) set +x -echo "# Try the first few simple SRW tasks ..." results_file=${workspace}/functional_test_results_${SRW_PLATFORM}_${SRW_COMPILER}.txt rm -f ${results_file} + status=0 -for task in ${TASKS[@]:0:${TASK_DEPTH}} ; do + +# Limit to machines that are fully ready +deny_machines=( gaea ) +if [[ ${deny_machines[@]} =~ ${platform,,} ]] ; then + echo "# Deny ${platform} - incomplete configuration." | tee -a ${results_file} +else + echo "# Try ${platform} with the first few simple SRW tasks ..." | tee -a ${results_file} + for task in ${TASKS[@]:0:${TASK_DEPTH}} ; do echo -n "./$task.sh ... " ./$task.sh > $task-log.txt 2>&1 && echo "COMPLETE" || echo "FAIL rc=$(( status+=$? ))" # stop at the first sign of trouble ... [[ 0 != ${status} ]] && echo "$task: FAIL" >> ${results_file} && break || echo "$task: COMPLETE" >> ${results_file} -done + done +fi # Set exit code to number of failures set +e From f28b8b1ea7dd5c85e87bf7e5cec9a4463febbadc Mon Sep 17 00:00:00 2001 From: Will Mayfield <59745143+willmayfield@users.noreply.github.com> Date: Mon, 24 Jul 2023 13:46:52 -0600 Subject: [PATCH 3/6] [develop] Add verification of snowfall accumulation (#853) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR adds relevant METplus configuration files and modifies various scripts to allow for verification via the NOHRSC gridded accumulated snowfall product. The forecast variable created by post is 'TSNOWP' for 6-and 24-hour snowfall accumulation with a fixed density, which will be verified on a 6- and 12-hour cadence, respectively. When the GSL variable-density snowfall product is included in post in the future, the variable in the METplus configuration files may be changed to 'ASNOW'. Currently this addition does not turn on accumulated snowfall verification by default. This is because NOHRSC observations were not located on NOAA HPSS previous to March 2020, as well as the idea that many non-winter cases likely will not desire to run the additional verification tasks. This PR achieves removal of snowfall verification tasks by omitting it by default from the VX_FIELDS variable. Therefore, to turn on snowfall verification, users may simply include VX_FIELDS in their configuration with "ASNOW" added. This PR also turns off all “ncpairs” file creation in METplus configuration files. These files represent the majority of the filespace footprint for METplus outputs, and are not necessary to produce verification statistical output. --- docs/UsersGuide/source/ConfigWorkflow.rst | 16 +- docs/UsersGuide/source/Glossary.rst | 3 + docs/UsersGuide/source/RunSRW.rst | 22 +- jobs/JREGIONAL_GET_OBS_NOHRSC | 91 ++++ parm/metplus/EnsembleStat_ASNOW.conf | 277 +++++++++++ parm/metplus/GenEnsProd_ASNOW.conf | 191 ++++++++ parm/metplus/GridStat_APCP01h.conf | 6 +- parm/metplus/GridStat_APCPgt01h.conf | 6 +- parm/metplus/GridStat_ASNOW.conf | 303 ++++++++++++ parm/metplus/GridStat_REFC.conf | 6 +- parm/metplus/GridStat_RETOP.conf | 6 +- parm/metplus/GridStat_ensmean_APCP01h.conf | 6 +- parm/metplus/GridStat_ensmean_APCPgt01h.conf | 6 +- parm/metplus/GridStat_ensmean_ASNOW.conf | 336 ++++++++++++++ parm/metplus/GridStat_ensmean_REFC.conf | 6 +- parm/metplus/GridStat_ensmean_RETOP.conf | 6 +- parm/metplus/GridStat_ensprob_APCP01h.conf | 6 +- parm/metplus/GridStat_ensprob_APCP03h.conf | 6 +- parm/metplus/GridStat_ensprob_APCP06h.conf | 6 +- parm/metplus/GridStat_ensprob_APCP24h.conf | 6 +- parm/metplus/GridStat_ensprob_ASNOW.conf | 436 ++++++++++++++++++ parm/metplus/GridStat_ensprob_REFC.conf | 6 +- parm/metplus/GridStat_ensprob_RETOP.conf | 6 +- ...ne_fcst.conf => PcpCombine_fcst_APCP.conf} | 0 parm/metplus/PcpCombine_fcst_ASNOW.conf | 137 ++++++ ...bine_obs.conf => PcpCombine_obs_APCP.conf} | 0 parm/wflow/default_workflow.yaml | 1 + parm/wflow/verify_det.yaml | 26 ++ parm/wflow/verify_ens.yaml | 53 +++ parm/wflow/verify_pre.yaml | 41 +- scripts/exregional_get_obs_nohrsc.sh | 133 ++++++ ...onal_run_met_genensprod_or_ensemblestat.sh | 13 +- ...gional_run_met_gridstat_or_pointstat_vx.sh | 16 +- ...un_met_gridstat_or_pointstat_vx_ensmean.sh | 12 +- ...un_met_gridstat_or_pointstat_vx_ensprob.sh | 9 +- scripts/exregional_run_met_pcpcombine.sh | 4 +- ush/config_defaults.yaml | 40 +- ush/python_utils/environment.py | 6 +- ush/set_FV3nml_ens_stoch_seeds.py | 2 +- ush/set_vx_fhr_list.sh | 9 + ush/set_vx_params.sh | 23 + ush/setup.py | 11 +- ush/valid_param_vals.yaml | 3 +- 43 files changed, 2230 insertions(+), 68 deletions(-) create mode 100755 jobs/JREGIONAL_GET_OBS_NOHRSC create mode 100644 parm/metplus/EnsembleStat_ASNOW.conf create mode 100644 parm/metplus/GenEnsProd_ASNOW.conf create mode 100644 parm/metplus/GridStat_ASNOW.conf create mode 100644 parm/metplus/GridStat_ensmean_ASNOW.conf create mode 100644 parm/metplus/GridStat_ensprob_ASNOW.conf rename parm/metplus/{PcpCombine_fcst.conf => PcpCombine_fcst_APCP.conf} (100%) create mode 100644 parm/metplus/PcpCombine_fcst_ASNOW.conf rename parm/metplus/{PcpCombine_obs.conf => PcpCombine_obs_APCP.conf} (100%) create mode 100755 scripts/exregional_get_obs_nohrsc.sh diff --git a/docs/UsersGuide/source/ConfigWorkflow.rst b/docs/UsersGuide/source/ConfigWorkflow.rst index fc7b5e1391..e4355d6f4c 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. @@ -380,7 +388,7 @@ Verification Parameters --------------------------- ``GET_OBS``: (Default: "get_obs") - Set the name of the Rocoto workflow task used to load proper module files for ``GET_OBS_*`` tasks. Users typically do not need to change this value. + Set the name of the Rocoto workflow task used to load proper module files for ``get_obs_*`` tasks. Users typically do not need to change this value. .. _NCOModeParms: diff --git a/docs/UsersGuide/source/Glossary.rst b/docs/UsersGuide/source/Glossary.rst index 81dd82adb7..3406181324 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, 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/docs/UsersGuide/source/RunSRW.rst b/docs/UsersGuide/source/RunSRW.rst index 5bea592809..9b1645c15d 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/nohrsc/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 /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/EnsembleStat_ASNOW.conf b/parm/metplus/EnsembleStat_ASNOW.conf new file mode 100644 index 0000000000..f472a109ff --- /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}} +# +# 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..c552ec047c --- /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}} +# +# 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_APCP01h.conf b/parm/metplus/GridStat_APCP01h.conf index 0ba9399203..d287041e35 100644 --- a/parm/metplus/GridStat_APCP01h.conf +++ b/parm/metplus/GridStat_APCP01h.conf @@ -246,13 +246,13 @@ GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT # 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_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 = TRUE +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 diff --git a/parm/metplus/GridStat_APCPgt01h.conf b/parm/metplus/GridStat_APCPgt01h.conf index d56bd21e23..1fe5412311 100644 --- a/parm/metplus/GridStat_APCPgt01h.conf +++ b/parm/metplus/GridStat_APCPgt01h.conf @@ -257,13 +257,13 @@ GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT # 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_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 = TRUE +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 diff --git a/parm/metplus/GridStat_ASNOW.conf b/parm/metplus/GridStat_ASNOW.conf new file mode 100644 index 0000000000..96c0f97bc3 --- /dev/null +++ b/parm/metplus/GridStat_ASNOW.conf @@ -0,0 +1,303 @@ +# 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 = {{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}} +# +# 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 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 = {{vx_fcst_model_name}}_{{ensmem_name}} + +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. +# +FCST_VAR1_NAME = {{fieldname_in_met_output}} +# +# List of levels to evaluate for forecast variable 1. +# +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 = {{field_thresholds}} +# +# String to search for in the observation input files for observation +# variable 1. +# +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} +# +# 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}_{{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 = 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 + +# 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_REFC.conf b/parm/metplus/GridStat_REFC.conf index ce77614033..3cc6e62d1f 100644 --- a/parm/metplus/GridStat_REFC.conf +++ b/parm/metplus/GridStat_REFC.conf @@ -256,13 +256,13 @@ GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT # 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_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 = TRUE +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 diff --git a/parm/metplus/GridStat_RETOP.conf b/parm/metplus/GridStat_RETOP.conf index 67ed1e8b2b..6a836b1153 100644 --- a/parm/metplus/GridStat_RETOP.conf +++ b/parm/metplus/GridStat_RETOP.conf @@ -257,13 +257,13 @@ GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT # 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_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 = TRUE +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 diff --git a/parm/metplus/GridStat_ensmean_APCP01h.conf b/parm/metplus/GridStat_ensmean_APCP01h.conf index a8408f90d9..e087841431 100644 --- a/parm/metplus/GridStat_ensmean_APCP01h.conf +++ b/parm/metplus/GridStat_ensmean_APCP01h.conf @@ -256,13 +256,13 @@ GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT # 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_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 = TRUE +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 diff --git a/parm/metplus/GridStat_ensmean_APCPgt01h.conf b/parm/metplus/GridStat_ensmean_APCPgt01h.conf index 8eb87fafca..ff277bbcbb 100644 --- a/parm/metplus/GridStat_ensmean_APCPgt01h.conf +++ b/parm/metplus/GridStat_ensmean_APCPgt01h.conf @@ -252,13 +252,13 @@ GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT # 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_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 = TRUE +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 diff --git a/parm/metplus/GridStat_ensmean_ASNOW.conf b/parm/metplus/GridStat_ensmean_ASNOW.conf new file mode 100644 index 0000000000..9b78d6e31f --- /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}} +# +# 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 = 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 + +# 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_ensmean_REFC.conf b/parm/metplus/GridStat_ensmean_REFC.conf index bfd4c65990..d8a6cc83ff 100644 --- a/parm/metplus/GridStat_ensmean_REFC.conf +++ b/parm/metplus/GridStat_ensmean_REFC.conf @@ -251,13 +251,13 @@ GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT # 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_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 = TRUE +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 diff --git a/parm/metplus/GridStat_ensmean_RETOP.conf b/parm/metplus/GridStat_ensmean_RETOP.conf index 04e337e0d4..bc037c4567 100644 --- a/parm/metplus/GridStat_ensmean_RETOP.conf +++ b/parm/metplus/GridStat_ensmean_RETOP.conf @@ -250,13 +250,13 @@ GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT # 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_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 = TRUE +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 diff --git a/parm/metplus/GridStat_ensprob_APCP01h.conf b/parm/metplus/GridStat_ensprob_APCP01h.conf index 289c407d31..621fe93e53 100644 --- a/parm/metplus/GridStat_ensprob_APCP01h.conf +++ b/parm/metplus/GridStat_ensprob_APCP01h.conf @@ -283,12 +283,12 @@ GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT # 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_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_WEIGHT = FALSE -GRID_STAT_NC_PAIRS_FLAG_NBRHD = TRUE +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 diff --git a/parm/metplus/GridStat_ensprob_APCP03h.conf b/parm/metplus/GridStat_ensprob_APCP03h.conf index 145f3e5fa1..de4fef9d52 100644 --- a/parm/metplus/GridStat_ensprob_APCP03h.conf +++ b/parm/metplus/GridStat_ensprob_APCP03h.conf @@ -335,12 +335,12 @@ GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT # 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_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_WEIGHT = FALSE -GRID_STAT_NC_PAIRS_FLAG_NBRHD = TRUE +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 diff --git a/parm/metplus/GridStat_ensprob_APCP06h.conf b/parm/metplus/GridStat_ensprob_APCP06h.conf index f3e2243c15..b56e65a597 100644 --- a/parm/metplus/GridStat_ensprob_APCP06h.conf +++ b/parm/metplus/GridStat_ensprob_APCP06h.conf @@ -335,12 +335,12 @@ GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT # 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_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_WEIGHT = FALSE -GRID_STAT_NC_PAIRS_FLAG_NBRHD = TRUE +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 diff --git a/parm/metplus/GridStat_ensprob_APCP24h.conf b/parm/metplus/GridStat_ensprob_APCP24h.conf index 089b8d3821..91897c590c 100644 --- a/parm/metplus/GridStat_ensprob_APCP24h.conf +++ b/parm/metplus/GridStat_ensprob_APCP24h.conf @@ -335,12 +335,12 @@ GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT # 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_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_WEIGHT = FALSE -GRID_STAT_NC_PAIRS_FLAG_NBRHD = TRUE +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 diff --git a/parm/metplus/GridStat_ensprob_ASNOW.conf b/parm/metplus/GridStat_ensprob_ASNOW.conf new file mode 100644 index 0000000000..e430cb2cf9 --- /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}} +# +# 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 = 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_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 + +# 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_REFC.conf b/parm/metplus/GridStat_ensprob_REFC.conf index 671d351dfb..21a5f2deee 100644 --- a/parm/metplus/GridStat_ensprob_REFC.conf +++ b/parm/metplus/GridStat_ensprob_REFC.conf @@ -343,12 +343,12 @@ GRID_STAT_OUTPUT_FLAG_GRAD = 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_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_WEIGHT = FALSE -GRID_STAT_NC_PAIRS_FLAG_NBRHD = TRUE +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 diff --git a/parm/metplus/GridStat_ensprob_RETOP.conf b/parm/metplus/GridStat_ensprob_RETOP.conf index 581dd4164e..6646b2036d 100644 --- a/parm/metplus/GridStat_ensprob_RETOP.conf +++ b/parm/metplus/GridStat_ensprob_RETOP.conf @@ -342,12 +342,12 @@ GRID_STAT_OUTPUT_FLAG_GRAD = 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_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_WEIGHT = FALSE -GRID_STAT_NC_PAIRS_FLAG_NBRHD = TRUE +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 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_fcst_ASNOW.conf b/parm/metplus/PcpCombine_fcst_ASNOW.conf new file mode 100644 index 0000000000..8433608c1b --- /dev/null +++ b/parm/metplus/PcpCombine_fcst_ASNOW.conf @@ -0,0 +1,137 @@ +# 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. +# NOTE: Currently TSNOWP is used which is a constant-density estimate of snowfall accumulation. +# In future RRFS development, a GSL product with variable-density snowfall accumulation +# is planned for UPP. When that is included and turned on in post, this variable may be changed +# to ASNOW. +# +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/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 diff --git a/parm/wflow/default_workflow.yaml b/parm/wflow/default_workflow.yaml index a2e20174ff..31bd11edac 100644 --- a/parm/wflow/default_workflow.yaml +++ b/parm/wflow/default_workflow.yaml @@ -17,6 +17,7 @@ rocoto: NCORES_PER_NODE: '{{ platform.NCORES_PER_NODE }}' NDAS_OBS_DIR: '{{ platform.NDAS_OBS_DIR }}' NET: '{{ nco.NET_default }}' + 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") }}' diff --git a/parm/wflow/verify_det.yaml b/parm/wflow/verify_det.yaml index 804cc06107..c39a872d5e 100644 --- a/parm/wflow/verify_det.yaml +++ b/parm/wflow/verify_det.yaml @@ -52,6 +52,32 @@ 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: + taskdep_pcpcombine_fcst: + attrs: + task: run_MET_PcpCombine_fcst_ASNOW#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_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/parm/wflow/verify_pre.yaml b/parm/wflow/verify_pre.yaml index 2eccbf8027..22096b328f 100644 --- a/parm/wflow/verify_pre.yaml +++ b/parm/wflow/verify_pre.yaml @@ -34,6 +34,17 @@ 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 + 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"' @@ -193,7 +204,7 @@ 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: 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: @@ -220,3 +231,31 @@ 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_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: + 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: + 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_get_obs_nohrsc.sh b/scripts/exregional_get_obs_nohrsc.sh new file mode 100755 index 0000000000..12ec224fce --- /dev/null +++ b/scripts/exregional_get_obs_nohrsc.sh @@ -0,0 +1,133 @@ +#!/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 available every 6 and 12 hours, respectively. +# +#----------------------------------------------------------------------- +# + +# 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) + + # 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 for files after Mar. 2020. + TarFile="/NCEPPROD/hpssprod/runhistory/rh${vyyyy}/${vyyyy}${vmm}/${vyyyy}${vmm}${vdd}/dcom_prod_${vyyyy}${vmm}${vdd}.tar" + + accum_noZero=$(( 10#$accum )) + 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 + 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.sh b/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh index 5027b54fcc..73f934b796 100755 --- a/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh +++ b/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh @@ -144,6 +144,9 @@ 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" ;; + "ASNOW") + FIELD_THRESHOLDS="gt0.0, ge2.54, ge5.08, ge10.16, ge20.32" + ;; "REFC") FIELD_THRESHOLDS="ge20, ge30, ge40, ge50" ;; @@ -212,17 +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/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/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 39f76501ac..7fe4248eb2 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: "" # @@ -2407,6 +2430,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}' @@ -2418,7 +2442,12 @@ verification: # well as in the contents of those files. # # VX_FIELDS: - # The fields or groups of fields on which to run verification. + # The fields or groups of fields on which to run verification. Because + # ASNOW is often not of interest in cases outside of winter, and + # because observation files are not located for retrospective + # cases on NOAA HPSS before March 2020, ASNOW is not included by default. + # "ASNOW" may be added to this list in order to include + # the related verification tasks in the workflow. # # VX_APCP_ACCUMS_HRS: # The 2-digit accumulation periods (in units of hours) to consider for @@ -2426,9 +2455,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_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) @@ -2452,7 +2488,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/python_utils/environment.py b/ush/python_utils/environment.py index 711934c4ec..c82c0a4fe9 100644 --- a/ush/python_utils/environment.py +++ b/ush/python_utils/environment.py @@ -74,7 +74,11 @@ def str_to_type(s, return_string=0): # int try: v = int(s) - return v + # treat integers that start with 0 as string + if len(s) > 1 and s[0] == "0": + return s + else: + return v except: pass # float diff --git a/ush/set_FV3nml_ens_stoch_seeds.py b/ush/set_FV3nml_ens_stoch_seeds.py index c967418441..8a7a4130eb 100644 --- a/ush/set_FV3nml_ens_stoch_seeds.py +++ b/ush/set_FV3nml_ens_stoch_seeds.py @@ -59,7 +59,7 @@ def set_FV3nml_ens_stoch_seeds(cdate): # fv3_nml_ensmem_fp = f"{os.getcwd()}{os.sep}{FV3_NML_FN}_base" - ensmem_num = ENSMEM_INDX + ensmem_num = int(ENSMEM_INDX) cdate_i = int(cdate.strftime("%Y%m%d%H")) diff --git a/ush/set_vx_fhr_list.sh b/ush/set_vx_fhr_list.sh index 490c7f5374..172b5c52f3 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..15d154d402 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}" + ;; + + *) + 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 637e3b541c..5c34d1d108 100644 --- a/ush/setup.py +++ b/ush/setup.py @@ -551,12 +551,19 @@ def remove_tag(tasks, tag): vx_metatasks_all = {} vx_fields_all["CCPA"] = ["APCP"] - vx_metatasks_all["CCPA"] = ["metatask_PcpCombine_obs", - "metatask_PcpCombine_fcst_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_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 0af5f3c4ac..81eed41853 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 25eb2fa88ba2b2257b4416f7c9bfd6f0c82dab67 Mon Sep 17 00:00:00 2001 From: gsketefian <31046882+gsketefian@users.noreply.github.com> Date: Tue, 25 Jul 2023 08:20:25 -0600 Subject: [PATCH 4/6] [develop] Change the configuration variable NET to NET_default. (#868) The renaming of the configuration variable NET to NET_default by PR #828 broke the WE2E test MET_ensemble_verification_only_vx_time_lag (see Issue #851). This PR fixes the bug and adds that WE2E test to the list of coverage tests on Hera (currently that test is only in the comprehensive tests list). --- .../WE2E/machine_suites/coverage.hera.gnu.com | 1 + ...nsemble_verification_only_vx_time_lag.yaml | 4 ++-- ush/config_defaults.yaml | 22 +++++++++---------- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/tests/WE2E/machine_suites/coverage.hera.gnu.com b/tests/WE2E/machine_suites/coverage.hera.gnu.com index 4a8f765e8c..1417ee2a43 100644 --- a/tests/WE2E/machine_suites/coverage.hera.gnu.com +++ b/tests/WE2E/machine_suites/coverage.hera.gnu.com @@ -6,4 +6,5 @@ grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_RRFS_v1beta grid_SUBCONUS_Ind_3km_ics_HRRR_lbcs_RAP_suite_WoFS_v0 GST_release_public_v1 MET_verification_only_vx +MET_ensemble_verification_only_vx_time_lag nco_grid_RRFS_CONUS_13km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v16 diff --git a/tests/WE2E/test_configs/verification/config.MET_ensemble_verification_only_vx_time_lag.yaml b/tests/WE2E/test_configs/verification/config.MET_ensemble_verification_only_vx_time_lag.yaml index d4a95812bb..ded24b22f4 100644 --- a/tests/WE2E/test_configs/verification/config.MET_ensemble_verification_only_vx_time_lag.yaml +++ b/tests/WE2E/test_configs/verification/config.MET_ensemble_verification_only_vx_time_lag.yaml @@ -24,7 +24,7 @@ rocoto: task_get_obs_ndas: nco: - NET: 'RRFSE_CONUS' + NET_default: 'RRFSE_CONUS' global: DO_ENSEMBLE: true @@ -40,4 +40,4 @@ verification: VX_FCST_MODEL_NAME: FV3_GFS_v15p2_CONUS_25km VX_FCST_INPUT_BASEDIR: '{{ platform.get("TEST_VX_FCST_INPUT_BASEDIR") }}' VX_NDIGITS_ENSMEM_NAMES: 1 - FCST_FN_TEMPLATE: '${NET}.t{init?fmt=%H?shift=-${time_lag}}z{% if user.RUN_ENVIR == "nco" and global.DO_ENSEMBLE %}.${ensmem_name}{% endif %}.bgdawpf{lead?fmt=%HHH?shift=${time_lag}}.tm00.grib2' + FCST_FN_TEMPLATE: '${NET_default}.t{init?fmt=%H?shift=-${time_lag}}z{% if user.RUN_ENVIR == "nco" and global.DO_ENSEMBLE %}.${ensmem_name}{% endif %}.bgdawpf{lead?fmt=%HHH?shift=${time_lag}}.tm00.grib2' diff --git a/ush/config_defaults.yaml b/ush/config_defaults.yaml index 7fe4248eb2..1e726f2fe0 100644 --- a/ush/config_defaults.yaml +++ b/ush/config_defaults.yaml @@ -1017,23 +1017,23 @@ nco: # # Definitions: # - # envir, NET, model_ver, RUN: + # envir_default, NET_default, model_ver_default, RUN_default: # Standard environment variables defined in the NCEP Central Operations WCOSS # Implementation Standards document as follows: # - # envir: + # envir_default: # Set to "test" during the initial testing phase, "para" when running # in parallel (on a schedule), and "prod" in production. # - # NET: + # NET_default: # Model name (first level of com directory structure) # - # model_ver: + # model_ver_default: # Version number of package in three digits (second level of com directory) # - # RUN: + # RUN_default: # Name of model run (third level of com directory structure). - # In general, same as $NET + # In general, same as ${NET_default}. # # OPSROOT: # The operations root directory in NCO mode. @@ -2066,7 +2066,7 @@ task_run_post: # task or by activating the inline post feature (WRITE_DOPOST set to true)]. # The post output files are named as follows: # - # $NET.tHHz.[var_name].f###.${POST_OUTPUT_DOMAIN_NAME}.grib2 + # ${NET_default}.tHHz.[var_name].f###.${POST_OUTPUT_DOMAIN_NAME}.grib2 # # If using a custom grid, POST_OUTPUT_DOMAIN_NAME must be specified by # the user. If using a predefined grid, POST_OUTPUT_DOMAIN_NAME defaults @@ -2461,7 +2461,7 @@ verification: # 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_FCST_MODEL_NAME: '{{ nco.NET_default }}.{{ task_run_post.POST_OUTPUT_DOMAIN_NAME }}' VX_FIELDS: [ "APCP", "REFC", "RETOP", "SFC", "UPA" ] VX_APCP_ACCUMS_HRS: [ 1, 3, 6, 24 ] VX_ASNOW_ACCUMS_HRS: [ 6, 24 ] @@ -2486,9 +2486,9 @@ verification: # # File name and path templates used in the verification tasks. # - 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}_${VAR}_a${ACCUM_HH}h.nc' + FCST_SUBDIR_TEMPLATE: '{% if user.RUN_ENVIR == "nco" %}${NET_default}.{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_default}.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_default}.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 From eb90788320b92dadc92a91e962c981df93b68525 Mon Sep 17 00:00:00 2001 From: gsketefian <31046882+gsketefian@users.noreply.github.com> Date: Wed, 26 Jul 2023 13:54:51 -0600 Subject: [PATCH 5/6] [develop] Bugfix for Issue #867 (when `QUILTING` is set to `false`) (#869) When QUILTING is set to false, the run_fcst task fails because some of the variables needed in the jinja template file parm/model_configure remain undefined in the call to ush/create_model_configure_file.py. This PR fixes that bug and adds a WE2E test for the QUILTING: false case. Note that when QUILTING is set to false, the UFS Weather Model generates output files named fv3_history2d.nc and fv3_history.nc that contain data on the native grid, not the write-component grid. Thus, the run_post and subsequent tasks that depend on Weather Model output on the write-component grid cannot be included in the workflow. For this reason, the new WE2E test that this PR adds includes tasks only up to run_fcst. --- tests/WE2E/machine_suites/comprehensive | 1 + .../WE2E/machine_suites/coverage.hera.gnu.com | 1 + .../wflow_features/config.quilting_false.yaml | 35 +++++++++++++++++++ ush/create_model_configure_file.py | 28 +++++++++++++++ 4 files changed, 65 insertions(+) create mode 100644 tests/WE2E/test_configs/wflow_features/config.quilting_false.yaml diff --git a/tests/WE2E/machine_suites/comprehensive b/tests/WE2E/machine_suites/comprehensive index dfbac222f2..8619223cc8 100644 --- a/tests/WE2E/machine_suites/comprehensive +++ b/tests/WE2E/machine_suites/comprehensive @@ -64,5 +64,6 @@ nco_grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_timeoffset_suite_GFS_v16 nco_grid_RRFS_CONUS_3km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v15_thompson_mynn_lam3km nco_grid_RRFS_CONUScompact_25km_ics_HRRR_lbcs_RAP_suite_HRRR pregen_grid_orog_sfc_climo +quilting_false specify_EXTRN_MDL_SYSBASEDIR_ICS_LBCS specify_template_filenames diff --git a/tests/WE2E/machine_suites/coverage.hera.gnu.com b/tests/WE2E/machine_suites/coverage.hera.gnu.com index 1417ee2a43..bbff016f1e 100644 --- a/tests/WE2E/machine_suites/coverage.hera.gnu.com +++ b/tests/WE2E/machine_suites/coverage.hera.gnu.com @@ -3,6 +3,7 @@ get_from_NOMADS_ics_FV3GFS_lbcs_FV3GFS grid_RRFS_CONUS_13km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_2017_gfdlmp_regional_plot grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_RRFS_v1beta +quilting_false grid_SUBCONUS_Ind_3km_ics_HRRR_lbcs_RAP_suite_WoFS_v0 GST_release_public_v1 MET_verification_only_vx diff --git a/tests/WE2E/test_configs/wflow_features/config.quilting_false.yaml b/tests/WE2E/test_configs/wflow_features/config.quilting_false.yaml new file mode 100644 index 0000000000..76d238846c --- /dev/null +++ b/tests/WE2E/test_configs/wflow_features/config.quilting_false.yaml @@ -0,0 +1,35 @@ +metadata: + description: |- + This test is to ensure that the workflow completes successfully with + QUILTING disabled. The forecast runs on the RRFS_CONUScompact_25km + grid using the RAP physics suite with ICs derived from the FV3GFS and + LBCs derived from the RAP. Note that with QUILTING disabled, the run_post + and subsequent tasks in the SRW App workflow cannot be run. This is + because QUILTING disabled, the output from the UFS Weather Model is on + the Weather Model's native grid, not the write-component grid, and UPP + does not (yet) have the capability to process output on the native grid. +user: + RUN_ENVIR: community +workflow: + CCPP_PHYS_SUITE: FV3_RAP + PREDEF_GRID_NAME: RRFS_CONUScompact_25km + DATE_FIRST_CYCL: '2019061518' + DATE_LAST_CYCL: '2019061518' + FCST_LEN_HRS: 6 + PREEXISTING_DIR_METHOD: rename +rocoto: + tasks: + taskgroups: '{{ ["parm/wflow/prep.yaml", "parm/wflow/coldstart.yaml"]|include }}' +task_get_extrn_ics: + EXTRN_MDL_NAME_ICS: FV3GFS + FV3GFS_FILE_FMT_ICS: grib2 + USE_USER_STAGED_EXTRN_FILES: true +task_get_extrn_lbcs: + EXTRN_MDL_NAME_LBCS: RAP + LBC_SPEC_INTVL_HRS: 1 + EXTRN_MDL_LBCS_OFFSET_HRS: 0 + USE_USER_STAGED_EXTRN_FILES: true +task_run_fcst: + QUILTING: false +verification: + VX_FCST_MODEL_NAME: FV3_GFS_v15p2_CONUS_25km diff --git a/ush/create_model_configure_file.py b/ush/create_model_configure_file.py index e39fff695e..68d68b724e 100644 --- a/ush/create_model_configure_file.py +++ b/ush/create_model_configure_file.py @@ -135,6 +135,34 @@ def create_model_configure_file( } ) # + # If not using the write-component (aka quilting), set those variables + # needed for quilting in the jinja template for the model configuration + # file (MODEL_CONFIG_TMPL_FP) to "None". This is necessary because + # otherwise, the run_fcst task will fail in the call to set_template() + # below with a "variables are not provided" message. + # + else: + settings.update( + { + "write_groups": None, + "write_tasks_per_group": None, + "cen_lon": None, + "cen_lat": None, + "lon1": None, + "lat1": None, + "stdlat1": None, + "stdlat2": None, + "nx": None, + "ny": None, + "dx": None, + "dy": None, + "lon2": None, + "lat2": None, + "dlon": None, + "dlat": None, + } + ) + # # If sub_hourly_post is set to "TRUE", then the forecast model must be # directed to generate output files on a sub-hourly interval. Do this # by specifying the output interval in the model configuration file From 26b3ac89042f4213b697a32a22454c05e7fa7d16 Mon Sep 17 00:00:00 2001 From: Will Mayfield <59745143+willmayfield@users.noreply.github.com> Date: Fri, 28 Jul 2023 11:30:55 -0600 Subject: [PATCH 6/6] [develop] Fixes to enable stochastic physics (#870) These changes allow ensemble mode to use seeds generated to be unique to the forecast cycle and ensemble member, and they also allow stochastic physics to be turned on in deterministic mode. --- scripts/exregional_run_fcst.sh | 7 +++---- tests/test_python/test_set_FV3nml_ens_stoch_seeds.py | 4 ++-- ush/generate_FV3LAM_wflow.py | 2 +- ush/set_FV3nml_ens_stoch_seeds.py | 8 ++++---- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/scripts/exregional_run_fcst.sh b/scripts/exregional_run_fcst.sh index 736a2fc115..44ff6b4e02 100755 --- a/scripts/exregional_run_fcst.sh +++ b/scripts/exregional_run_fcst.sh @@ -444,12 +444,12 @@ fi #----------------------------------------------------------------------- # STOCH="FALSE" -if [ "${DO_ENSEMBLE}" = "TRUE" ] && ([ "${DO_SPP}" = "TRUE" ] || [ "${DO_SPPT}" = "TRUE" ] || [ "${DO_SHUM}" = "TRUE" ] || \ +if ([ "${DO_SPP}" = "TRUE" ] || [ "${DO_SPPT}" = "TRUE" ] || [ "${DO_SHUM}" = "TRUE" ] || \ [ "${DO_SKEB}" = "TRUE" ] || [ "${DO_LSM_SPP}" = "TRUE" ]); then STOCH="TRUE" fi if [ "${STOCH}" == "TRUE" ]; then - ln_vrfy -sf ${FV3_NML_STOCH_FP} ${DATA}/${FV3_NML_FN} + cp_vrfy ${FV3_NML_STOCH_FP} ${DATA}/${FV3_NML_FN} else ln_vrfy -sf ${FV3_NML_FP} ${DATA}/${FV3_NML_FN} fi @@ -461,8 +461,7 @@ fi # #----------------------------------------------------------------------- # -if [ "$STOCH" == "TRUE" ]; then - cp_vrfy ${DATA}/${FV3_NML_FN} ${DATA}/${FV3_NML_FN}_base +if ([ "$STOCH" == "TRUE" ] && [ "${DO_ENSEMBLE}" = "TRUE" ]); then python3 $USHdir/set_FV3nml_ens_stoch_seeds.py \ --path-to-defns ${GLOBAL_VAR_DEFNS_FP} \ --cdate "$CDATE" || print_err_msg_exit "\ diff --git a/tests/test_python/test_set_FV3nml_ens_stoch_seeds.py b/tests/test_python/test_set_FV3nml_ens_stoch_seeds.py index 9a452bc1c2..f87d57d53b 100644 --- a/tests/test_python/test_set_FV3nml_ens_stoch_seeds.py +++ b/tests/test_python/test_set_FV3nml_ens_stoch_seeds.py @@ -51,14 +51,14 @@ def setUp(self): mkdir_vrfy("-p", self.mem_dir) cp_vrfy( os.path.join(PARMdir, "input.nml.FV3"), - os.path.join(EXPTDIR, "input.nml_base"), + os.path.join(self.mem_dir, "input.nml"), ) set_env_var("USHdir", USHdir) set_env_var("ENSMEM_INDX", 2) set_env_var("FV3_NML_FN", "input.nml") - set_env_var("FV3_NML_FP", os.path.join(EXPTDIR, "input.nml_base")) + set_env_var("FV3_NML_FP", os.path.join(self.mem_dir, "input.nml")) set_env_var("DO_SHUM", True) set_env_var("DO_SKEB", True) set_env_var("DO_SPPT", True) diff --git a/ush/generate_FV3LAM_wflow.py b/ush/generate_FV3LAM_wflow.py index 5022bfed4c..f97f06dd6f 100755 --- a/ush/generate_FV3LAM_wflow.py +++ b/ush/generate_FV3LAM_wflow.py @@ -718,7 +718,7 @@ def generate_FV3LAM_wflow( # #----------------------------------------------------------------------- # - if DO_ENSEMBLE and any((DO_SPP, DO_SPPT, DO_SHUM, DO_SKEB, DO_LSM_SPP)): + if any((DO_SPP, DO_SPPT, DO_SHUM, DO_SKEB, DO_LSM_SPP)): set_namelist( [ diff --git a/ush/set_FV3nml_ens_stoch_seeds.py b/ush/set_FV3nml_ens_stoch_seeds.py index 8a7a4130eb..c8a90e2797 100644 --- a/ush/set_FV3nml_ens_stoch_seeds.py +++ b/ush/set_FV3nml_ens_stoch_seeds.py @@ -57,7 +57,7 @@ def set_FV3nml_ens_stoch_seeds(cdate): # # ----------------------------------------------------------------------- # - fv3_nml_ensmem_fp = f"{os.getcwd()}{os.sep}{FV3_NML_FN}_base" + fv3_nml_ensmem_fp = f"{os.getcwd()}{os.sep}{FV3_NML_FN}" ensmem_num = int(ENSMEM_INDX) @@ -93,14 +93,14 @@ def set_FV3nml_ens_stoch_seeds(cdate): if DO_LSM_SPP: iseed_lsm_spp = cdate_i * 1000 + ensmem_num * 10 + 9 - settings["nam_sppperts"] = {"iseed_lndp": [iseed_lsm_spp]} + settings["nam_sfcperts"] = {"iseed_lndp": [iseed_lsm_spp]} settings_str = cfg_to_yaml_str(settings) print_info_msg( dedent( f""" - The variable 'settings' specifying seeds in '{FV3_NML_FP}' + The variable 'settings' specifying seeds in '{fv3_nml_ensmem_fp}' has been set as follows: settings =\n\n""" @@ -111,7 +111,7 @@ def set_FV3nml_ens_stoch_seeds(cdate): try: set_namelist( - ["-q", "-n", FV3_NML_FP, "-u", settings_str, "-o", fv3_nml_ensmem_fp] + ["-q", "-n", fv3_nml_ensmem_fp, "-u", settings_str, "-o", fv3_nml_ensmem_fp] ) except: print_err_msg_exit(