From 7b2ae3b5d57287a647369496beed937f739ed359 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Thu, 9 Feb 2023 13:21:25 -0700 Subject: [PATCH 001/119] Specify location of staged forecast output for vx in the machine file for Hera and modify run_WE2E_tests.py so that this location is obtained in a platform-independent way. --- tests/WE2E/run_WE2E_tests.py | 32 +++++++++++++++++++ .../config.MET_verification_only_vx.yaml | 18 ++++++----- ush/machine/hera.yaml | 3 ++ 3 files changed, 45 insertions(+), 8 deletions(-) diff --git a/tests/WE2E/run_WE2E_tests.py b/tests/WE2E/run_WE2E_tests.py index dc472f8333..6187255b2e 100755 --- a/tests/WE2E/run_WE2E_tests.py +++ b/tests/WE2E/run_WE2E_tests.py @@ -164,6 +164,10 @@ def run_we2e_tests(homedir, args) -> None: test_cfg['task_get_extrn_lbcs'] = check_task_get_extrn_lbcs(test_cfg,machine_defaults,config_defaults) logging.debug(test_cfg['task_get_extrn_lbcs']) + if 'verification' in test_cfg: + logging.debug(test_cfg['verification']) + test_cfg['verification'] = check_task_verification(test_cfg,machine_defaults,config_defaults) + logging.debug(test_cfg['verification']) logging.debug(f"Writing updated config.yaml for test {test_name}\nbased on specified command-line arguments:\n") logging.debug(cfg_to_yaml_str(test_cfg)) @@ -386,6 +390,34 @@ def check_task_get_extrn_lbcs(cfg: dict, mach: dict, dflt: dict) -> dict: return cfg_lbcs +def check_task_verification(cfg: dict, mach: dict, dflt: dict) -> dict: + """ + Function for checking and updating various settings in verification section of test config yaml + + Args: + cfg : Dictionary loaded from test config file + mach : Dictionary loaded from machine settings file + dflt : Dictionary loaded from default config file + Returns: + cfg_vx : Updated dictionary for verification section of test config + """ + + # Make our lives easier by shortening some dictionary calls + if 'verification' in cfg: + cfg_vx = cfg['verification'] + else: + cfg_vx = dict() + + # If VX_FCST_INPUT_BASEDIR is not set in the verification section of + # the test dictionary, set it to the value from the machine file. + if not 'VX_FCST_INPUT_BASEDIR' in cfg_vx: + if 'VX_FCST_INPUT_BASEDIR' in mach['verification']: + cfg_vx['VX_FCST_INPUT_BASEDIR'] = mach['verification']['VX_FCST_INPUT_BASEDIR'] + else: + raise KeyError(f"Non-default forecast file location for verification VX_FCST_INPUT_BASEDIR not set in machine file") + + return cfg_vx + def setup_logging(logfile: str = "log.run_WE2E_tests", debug: bool = False) -> None: """ Sets up logging, printing high-priority (INFO and higher) messages to screen, and printing all diff --git a/tests/WE2E/test_configs/verification/config.MET_verification_only_vx.yaml b/tests/WE2E/test_configs/verification/config.MET_verification_only_vx.yaml index 8421ee39dd..9b93553ee1 100644 --- a/tests/WE2E/test_configs/verification/config.MET_verification_only_vx.yaml +++ b/tests/WE2E/test_configs/verification/config.MET_verification_only_vx.yaml @@ -30,22 +30,24 @@ workflow_switches: RUN_TASK_RUN_POST: false # # This test assumes the observation files are staged. Thus, deactivate -# the GET_OBS_... tasks and instead specify the obs staging directories. +# the GET_OBS_... tasks. Note we do not specify the obs staging directories +# (CCPA_OBS_DIR, MRMS_OBS_DIR, and NDAS_OBS_DIR) because those will be +# automatically set (in a platform-dependent way using the machine file) +# by the script that runs this test. # RUN_TASK_GET_OBS_CCPA: false - CCPA_OBS_DIR: '/scratch2/BMC/det/Gerard.Ketefian/UFS_CAM/DTC_ensemble_task/staged/obs/ccpa/proc' RUN_TASK_GET_OBS_MRMS: false - MRMS_OBS_DIR: '/scratch2/BMC/det/Gerard.Ketefian/UFS_CAM/DTC_ensemble_task/staged/obs/mrms/proc' RUN_TASK_GET_OBS_NDAS: false - NDAS_OBS_DIR: '/scratch2/BMC/det/Gerard.Ketefian/UFS_CAM/DTC_ensemble_task/staged/obs/ndas/proc' # # Turn on verification tasks. # RUN_TASK_VX_GRIDSTAT: true RUN_TASK_VX_POINTSTAT: true -verification: - VX_FCST_MODEL_NAME: FV3_GFS_v15p2_CONUS_25km # -# Since the forecast files are staged, specify the base staging directory. +# In the "verification" section below, we don't explicitly set the location +# of the staged forecast files (specified by VX_FCST_INPUT_BASEDIR) because +# this location gets set automatically (in a platform-dependent way using +# the appropriate machine file) by the script that runs this test. # - VX_FCST_INPUT_BASEDIR: '/scratch2/BMC/det/Gerard.Ketefian/UFS_CAM/DTC_ensemble_task/staged/fcst_det' +verification: + VX_FCST_MODEL_NAME: FV3_GFS_v15p2_CONUS_25km diff --git a/ush/machine/hera.yaml b/ush/machine/hera.yaml index 3a7769a557..e5e035bbe8 100644 --- a/ush/machine/hera.yaml +++ b/ush/machine/hera.yaml @@ -32,3 +32,6 @@ platform: FIXsfc: /scratch2/BMC/det/UFS_SRW_App/develop/fix/fix_sfc_climo FIXshp: /scratch2/BMC/det/UFS_SRW_App/develop/NaturalEarth EXTRN_MDL_DATA_STORES: hpss aws nomads +verification: + VX_FCST_INPUT_BASEDIR: '/scratch2/BMC/det/UFS_SRW_App/develop/output_data/fcst_det/{{workflow.PREDEF_GRID_NAME}}' + From c6bcff026894bd8ec4cf8012eefeb6fa56c44499 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Mon, 13 Feb 2023 14:07:26 -0700 Subject: [PATCH 002/119] Undo unnecessary changes in a previous commit. --- tests/WE2E/run_WE2E_tests.py | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/tests/WE2E/run_WE2E_tests.py b/tests/WE2E/run_WE2E_tests.py index 6187255b2e..dc472f8333 100755 --- a/tests/WE2E/run_WE2E_tests.py +++ b/tests/WE2E/run_WE2E_tests.py @@ -164,10 +164,6 @@ def run_we2e_tests(homedir, args) -> None: test_cfg['task_get_extrn_lbcs'] = check_task_get_extrn_lbcs(test_cfg,machine_defaults,config_defaults) logging.debug(test_cfg['task_get_extrn_lbcs']) - if 'verification' in test_cfg: - logging.debug(test_cfg['verification']) - test_cfg['verification'] = check_task_verification(test_cfg,machine_defaults,config_defaults) - logging.debug(test_cfg['verification']) logging.debug(f"Writing updated config.yaml for test {test_name}\nbased on specified command-line arguments:\n") logging.debug(cfg_to_yaml_str(test_cfg)) @@ -390,34 +386,6 @@ def check_task_get_extrn_lbcs(cfg: dict, mach: dict, dflt: dict) -> dict: return cfg_lbcs -def check_task_verification(cfg: dict, mach: dict, dflt: dict) -> dict: - """ - Function for checking and updating various settings in verification section of test config yaml - - Args: - cfg : Dictionary loaded from test config file - mach : Dictionary loaded from machine settings file - dflt : Dictionary loaded from default config file - Returns: - cfg_vx : Updated dictionary for verification section of test config - """ - - # Make our lives easier by shortening some dictionary calls - if 'verification' in cfg: - cfg_vx = cfg['verification'] - else: - cfg_vx = dict() - - # If VX_FCST_INPUT_BASEDIR is not set in the verification section of - # the test dictionary, set it to the value from the machine file. - if not 'VX_FCST_INPUT_BASEDIR' in cfg_vx: - if 'VX_FCST_INPUT_BASEDIR' in mach['verification']: - cfg_vx['VX_FCST_INPUT_BASEDIR'] = mach['verification']['VX_FCST_INPUT_BASEDIR'] - else: - raise KeyError(f"Non-default forecast file location for verification VX_FCST_INPUT_BASEDIR not set in machine file") - - return cfg_vx - def setup_logging(logfile: str = "log.run_WE2E_tests", debug: bool = False) -> None: """ Sets up logging, printing high-priority (INFO and higher) messages to screen, and printing all From 1cf326683ede368e9937099fb01f453c240bc250 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Tue, 14 Feb 2023 14:13:42 -0700 Subject: [PATCH 003/119] Add experiment variable TEST_VX_FCST_INPUT_BASEDIR that specifies location of staged forecast files; modify code to correctly set VX_FCST_INPUT_BASEDIR in WE2E experiments. --- tests/WE2E/run_WE2E_tests.py | 51 ++++++++++++++++++++++++++++++++++++ ush/config_defaults.yaml | 5 ++-- ush/machine/hera.yaml | 3 +-- 3 files changed, 55 insertions(+), 4 deletions(-) diff --git a/tests/WE2E/run_WE2E_tests.py b/tests/WE2E/run_WE2E_tests.py index dc472f8333..eb3871d4a4 100755 --- a/tests/WE2E/run_WE2E_tests.py +++ b/tests/WE2E/run_WE2E_tests.py @@ -164,6 +164,10 @@ def run_we2e_tests(homedir, args) -> None: test_cfg['task_get_extrn_lbcs'] = check_task_get_extrn_lbcs(test_cfg,machine_defaults,config_defaults) logging.debug(test_cfg['task_get_extrn_lbcs']) + if 'verification' in test_cfg: + logging.debug(test_cfg['verification']) + test_cfg['verification'] = check_task_verification(test_cfg,machine_defaults,config_defaults) + logging.debug(test_cfg['verification']) logging.debug(f"Writing updated config.yaml for test {test_name}\nbased on specified command-line arguments:\n") logging.debug(cfg_to_yaml_str(test_cfg)) @@ -386,6 +390,53 @@ def check_task_get_extrn_lbcs(cfg: dict, mach: dict, dflt: dict) -> dict: return cfg_lbcs +def check_task_verification(cfg: dict, mach: dict, dflt: dict) -> dict: + """ + Function for checking and updating various settings in verification section of test config yaml + + Args: + cfg : Dictionary loaded from test config file + mach : Dictionary loaded from machine settings file + dflt : Dictionary loaded from default config file + Returns: + cfg_vx : Updated dictionary for verification section of test config + """ + + # Make our lives easier by shortening some dictionary calls + if 'verification' in cfg: + cfg_vx = cfg['verification'] + else: + cfg_vx = dict() + + # If VX_FCST_INPUT_BASEDIR is already explicitly set in the test configuration + # dictionary, keep that value and just return. + if 'VX_FCST_INPUT_BASEDIR' in cfg_vx: + return cfg_vx + + # Attempt to obtain the values of RUN_TASK_RUN_FCST, WRITE_DO_POST, and RUN_TASK_RUN_POST + # from the test configuration dictionary. If not available there, get them from the default + # configuration dictionary. + flags = {'RUN_TASK_RUN_FCST': False, 'WRITE_DOPOST': False, 'RUN_TASK_RUN_POST': False} + for section in ['workflow_switches', 'task_run_fcst']: + for flag in flags: + if (section in cfg) and (flag in cfg[section]): + flags[flag] = cfg[section][flag] + elif flag in dflt[section]: + flags[flag] = dflt[section][flag] + + # If UPP is going to be run (either in-line or as a separate set of tasks), set the + # VX_FCST_INPUT_BASEDIR to the default directory for the experiment. Otherwise, set + # it to the value of TEST_VX_FCST_INPUT_BASEDIR in the machine file. + if (flags['RUN_TASK_RUN_FCST'] and flags['WRITE_DOPOST']) or flags['RUN_TASK_RUN_POST']: + cfg_vx['VX_FCST_INPUT_BASEDIR'] = dflt['workflow']['EXPTDIR'] + else: + if 'TEST_VX_FCST_INPUT_BASEDIR' in mach['platform']: + cfg_vx['VX_FCST_INPUT_BASEDIR'] = mach['platform']['TEST_VX_FCST_INPUT_BASEDIR'] + else: + raise KeyError(f"Non-default forecast file location for verification (TEST_VX_FCST_INPUT_BASEDIR) not set in machine file") + + return cfg_vx + def setup_logging(logfile: str = "log.run_WE2E_tests", debug: bool = False) -> None: """ Sets up logging, printing high-priority (INFO and higher) messages to screen, and printing all diff --git a/ush/config_defaults.yaml b/ush/config_defaults.yaml index 18ee973f09..2bc8225744 100644 --- a/ush/config_defaults.yaml +++ b/ush/config_defaults.yaml @@ -347,6 +347,7 @@ platform: TEST_PREGEN_BASEDIR: "" TEST_ALT_EXTRN_MDL_SYSBASEDIR_ICS: "" TEST_ALT_EXTRN_MDL_SYSBASEDIR_LBCS: "" + TEST_VX_FCST_INPUT_BASEDIR: "" # #----------------------------------------------------------------------- # @@ -472,7 +473,7 @@ workflow: EXPT_BASEDIR: '' # This will be set in setup.py prior to extend_yaml() being called EXPT_SUBDIR: '{{ EXPT_SUBDIR }}' EXEC_SUBDIR: "exec" - EXPTDIR: '{{ [EXPT_BASEDIR, EXPT_SUBDIR]|path_join }}' + EXPTDIR: '{{ [workflow.EXPT_BASEDIR, workflow.EXPT_SUBDIR]|path_join }}' # #----------------------------------------------------------------------- # @@ -2389,4 +2390,4 @@ global: #----------------------------- verification: VX_FCST_MODEL_NAME: '{{ nco.NET }}.{{ task_run_post.POST_OUTPUT_DOMAIN_NAME }}' - VX_FCST_INPUT_BASEDIR: '{{ workflow.EXPTDIR }}' + VX_FCST_INPUT_BASEDIR: '{{ workflow.EXPTDIR if (workflow_switches.RUN_TASK_RUN_FCST and (task_run_fcst.WRITE_DOPOST or workflow_switches.RUN_TASK_RUN_POST)) }}' diff --git a/ush/machine/hera.yaml b/ush/machine/hera.yaml index 647359ebf2..8ab4d2d550 100644 --- a/ush/machine/hera.yaml +++ b/ush/machine/hera.yaml @@ -25,6 +25,7 @@ platform: TEST_PREGEN_BASEDIR: /scratch2/BMC/det/UFS_SRW_App/develop/FV3LAM_pregen TEST_ALT_EXTRN_MDL_SYSBASEDIR_ICS: /scratch2/BMC/det/UFS_SRW_app/develop/dummy_FV3GFS_sys_dir TEST_ALT_EXTRN_MDL_SYSBASEDIR_LBCS: /scratch2/BMC/det/UFS_SRW_app/develop/dummy_FV3GFS_sys_dir + TEST_VX_FCST_INPUT_BASEDIR: '/scratch2/BMC/det/UFS_SRW_App/develop/output_data/fcst_det/{{workflow.PREDEF_GRID_NAME}}' FIXaer: /scratch2/BMC/det/UFS_SRW_App/develop/fix/fix_aer FIXgsm: /scratch2/BMC/det/UFS_SRW_App/develop/fix/fix_am FIXlut: /scratch2/BMC/det/UFS_SRW_App/develop/fix/fix_lut @@ -32,8 +33,6 @@ platform: FIXsfc: /scratch2/BMC/det/UFS_SRW_App/develop/fix/fix_sfc_climo FIXshp: /scratch2/BMC/det/UFS_SRW_App/develop/NaturalEarth EXTRN_MDL_DATA_STORES: hpss aws nomads -verification: - VX_FCST_INPUT_BASEDIR: '/scratch2/BMC/det/UFS_SRW_App/develop/output_data/fcst_det/{{workflow.PREDEF_GRID_NAME}}' data: obs: From ea0a4603be5e5e01e3a46e0ad70314ee04da0a24 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Tue, 14 Feb 2023 14:18:18 -0700 Subject: [PATCH 004/119] Change condition for setting default value of VX_FCST_INPUT_BASEDIR so that it is exactly consistent with the one used in run_WE2E_tests.py. --- ush/config_defaults.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ush/config_defaults.yaml b/ush/config_defaults.yaml index 2bc8225744..409a512931 100644 --- a/ush/config_defaults.yaml +++ b/ush/config_defaults.yaml @@ -2390,4 +2390,4 @@ global: #----------------------------- verification: VX_FCST_MODEL_NAME: '{{ nco.NET }}.{{ task_run_post.POST_OUTPUT_DOMAIN_NAME }}' - VX_FCST_INPUT_BASEDIR: '{{ workflow.EXPTDIR if (workflow_switches.RUN_TASK_RUN_FCST and (task_run_fcst.WRITE_DOPOST or workflow_switches.RUN_TASK_RUN_POST)) }}' + VX_FCST_INPUT_BASEDIR: '{{ workflow.EXPTDIR if ((workflow_switches.RUN_TASK_RUN_FCST and task_run_fcst.WRITE_DOPOST) or workflow_switches.RUN_TASK_RUN_POST) }}' From 771092daf04f09ba28304b423205e7fc7a38e491 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Wed, 8 Feb 2023 13:01:36 -0700 Subject: [PATCH 005/119] Ensure that there is a vx task entry defined for each vx task and that each task has its own values for NNODES, PPN, MEM, WTIME, MAXTRIES. --- parm/FV3LAM_wflow.xml | 779 ++++++++++++++++++++------------------- ush/config_defaults.yaml | 454 +++++++++++++---------- 2 files changed, 644 insertions(+), 589 deletions(-) diff --git a/parm/FV3LAM_wflow.xml b/parm/FV3LAM_wflow.xml index 4c430f6c54..24bdeb8091 100644 --- a/parm/FV3LAM_wflow.xml +++ b/parm/FV3LAM_wflow.xml @@ -27,47 +27,47 @@ Workflow task names. {%- else %} {%- endif %} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_GRIDSTAT" - {{ nnodes_vx_gridstat }}:ppn={{ ppn_vx_gridstat }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" + {{ nnodes_run_met_gridstat_vx_apcp01h }}:ppn={{ ppn_run_met_gridstat_vx_apcp01h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_gridstat }} + {{ mem_run_met_gridstat_vx_apcp01h }} {%- endif %} - {{ wtime_vx_gridstat }} + {{ wtime_run_met_gridstat_vx_apcp01h }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_GRIDSTAT; - &LOGDIR;/&TN_VX_GRIDSTAT;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_GRIDSTAT_VX_APCP01H; + &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_APCP01H;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; @@ -924,149 +924,128 @@ it, we'd have to include more jinja if-statements here. FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} VARAPCP ACCUM01 - {%- if do_ensemble %} + {%- if do_ensemble %} SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} ENSMEM_INDX#{{ ensmem_indx_name }}# - {%- endif %} + {%- endif %} {#- Redundant dependency to simplify jinja code. #} TRUETRUE - {%- if run_task_get_obs_ccpa %} + {%- if run_task_get_obs_ccpa %} - {%- endif %} - {%- if write_dopost %} + {%- endif %} + {%- if write_dopost %} - {%- elif run_task_run_post %} + {%- elif run_task_run_post %} - {%- endif %} + {%- endif %} -{%- endif %} -{%- if run_task_vx_gridstat %} + {%- if fcst_len_hrs >= 3 %} - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_GRIDSTAT" - {{ nnodes_vx_gridstat }}:ppn={{ ppn_vx_gridstat }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_gridstat }} - {%- endif %} - {{ wtime_vx_gridstat }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" + {{ nnodes_run_met_gridstat_vx_apcp03h }}:ppn={{ ppn_run_met_gridstat_vx_apcp03h }} + {%- if machine not in ["GAEA", "NOAACLOUD"] %} + {{ mem_run_met_gridstat_vx_apcp03h }} + {%- endif %} + {{ wtime_run_met_gridstat_vx_apcp03h }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_GRIDSTAT_REFC; - &LOGDIR;/&TN_VX_GRIDSTAT_REFC;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_GRIDSTAT_VX_APCP03H; + &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_APCP03H;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; - OBS_DIR&MRMS_OBS_DIR; + OBS_DIR&CCPA_OBS_DIR; PDY@Y@m@d cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} - VARREFC + FHR {% for h in range(3, fcst_len_hrs+1, 3) %}{{ " %02d" % h }}{% endfor %} + VARAPCP + ACCUM03 {%- if do_ensemble %} SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} ENSMEM_INDX#{{ ensmem_indx_name }}# {%- endif %} - -{#- Redundant dependency to simplify jinja code. #} - TRUETRUE - {%- if run_task_get_obs_mrms %} - - {%- endif %} - {%- if write_dopost %} - - {%- elif run_task_run_post %} - - {%- endif %} - + -{%- endif %} + {%- endif %} -{%- if run_task_vx_gridstat %} + {%- if fcst_len_hrs >= 6 %} - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_GRIDSTAT" - {{ nnodes_vx_gridstat }}:ppn={{ ppn_vx_gridstat }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_gridstat }} - {%- endif %} - {{ wtime_vx_gridstat }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" + {{ nnodes_run_met_gridstat_vx_apcp06h }}:ppn={{ ppn_run_met_gridstat_vx_apcp06h }} + {%- if machine not in ["GAEA", "NOAACLOUD"] %} + {{ mem_run_met_gridstat_vx_apcp06h }} + {%- endif %} + {{ wtime_run_met_gridstat_vx_apcp06h }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_GRIDSTAT_RETOP; - &LOGDIR;/&TN_VX_GRIDSTAT_RETOP;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_GRIDSTAT_VX_APCP06H; + &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_APCP06H;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; - OBS_DIR&MRMS_OBS_DIR; + OBS_DIR&CCPA_OBS_DIR; PDY@Y@m@d cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} - VARRETOP + FHR {% for h in range(6, fcst_len_hrs+1, 6) %}{{ " %02d" % h }}{% endfor %} + VARAPCP + ACCUM06 {%- if do_ensemble %} SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} ENSMEM_INDX#{{ ensmem_indx_name }}# {%- endif %} - -{#- Redundant dependency to simplify jinja code. #} - TRUETRUE - {%- if run_task_get_obs_mrms %} - - {%- endif %} - {%- if write_dopost %} - - {%- elif run_task_run_post %} - - {%- endif %} - + -{%- endif %} + {%- endif %} -{%- if run_task_vx_gridstat and fcst_len_hrs >= 3 %} + {%- if fcst_len_hrs >= 24 %} - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_GRIDSTAT" - {{ nnodes_vx_gridstat }}:ppn={{ ppn_vx_gridstat }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_gridstat }} - {%- endif %} - {{ wtime_vx_gridstat }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" + {{ nnodes_run_met_gridstat_vx_apcp24h }}:ppn={{ ppn_run_met_gridstat_vx_apcp24h }} + {%- if machine not in ["GAEA", "NOAACLOUD"] %} + {{ mem_run_met_gridstat_vx_apcp24h }} + {%- endif %} + {{ wtime_run_met_gridstat_vx_apcp24h }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_GRIDSTAT_03h; - &LOGDIR;/&TN_VX_GRIDSTAT_03h;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_GRIDSTAT_VX_APCP24H; + &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_APCP24H;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; @@ -1075,98 +1054,115 @@ it, we'd have to include more jinja if-statements here. cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(3, fcst_len_hrs+1, 3) %}{{ " %02d" % h }}{% endfor %} + FHR {% for h in range(24, fcst_len_hrs+1, 24) %}{{ " %02d" % h }}{% endfor %} VARAPCP - ACCUM03 + ACCUM24 {%- if do_ensemble %} SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} ENSMEM_INDX#{{ ensmem_indx_name }}# {%- endif %} - + -{%- endif %} + {%- endif %} -{%- if run_task_vx_gridstat and fcst_len_hrs >= 6 %} - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_GRIDSTAT" - {{ nnodes_vx_gridstat }}:ppn={{ ppn_vx_gridstat }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" + {{ nnodes_run_met_gridstat_vx_refc }}:ppn={{ ppn_run_met_gridstat_vx_refc }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_gridstat }} + {{ mem_run_met_gridstat_vx_refc }} {%- endif %} - {{ wtime_vx_gridstat }} + {{ wtime_run_met_gridstat_vx_refc }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_GRIDSTAT_06h; - &LOGDIR;/&TN_VX_GRIDSTAT_06h;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_GRIDSTAT_VX_REFC; + &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_REFC;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; - OBS_DIR&CCPA_OBS_DIR; + OBS_DIR&MRMS_OBS_DIR; PDY@Y@m@d cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(6, fcst_len_hrs+1, 6) %}{{ " %02d" % h }}{% endfor %} - VARAPCP - ACCUM06 - {%- if do_ensemble %} + FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + VARREFC + {%- if do_ensemble %} SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} ENSMEM_INDX#{{ ensmem_indx_name }}# - {%- endif %} + {%- endif %} - + +{#- Redundant dependency to simplify jinja code. #} + TRUETRUE + {%- if run_task_get_obs_mrms %} + + {%- endif %} + {%- if write_dopost %} + + {%- elif run_task_run_post %} + + {%- endif %} + -{%- endif %} -{%- if run_task_vx_gridstat and fcst_len_hrs >= 24 %} - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_GRIDSTAT" - {{ nnodes_vx_gridstat }}:ppn={{ ppn_vx_gridstat }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" + {{ nnodes_run_met_gridstat_vx_retop }}:ppn={{ ppn_run_met_gridstat_vx_retop }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_gridstat }} + {{ mem_run_met_gridstat_vx_retop }} {%- endif %} - {{ wtime_vx_gridstat }} + {{ wtime_run_met_gridstat_vx_retop }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_GRIDSTAT_24h; - &LOGDIR;/&TN_VX_GRIDSTAT_24h;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_GRIDSTAT_VX_RETOP; + &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_RETOP;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; - OBS_DIR&CCPA_OBS_DIR; + OBS_DIR&MRMS_OBS_DIR; PDY@Y@m@d cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(24, fcst_len_hrs+1, 24) %}{{ " %02d" % h }}{% endfor %} - VARAPCP - ACCUM24 - {%- if do_ensemble %} + FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + VARRETOP + {%- if do_ensemble %} SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} ENSMEM_INDX#{{ ensmem_indx_name }}# - {%- endif %} + {%- endif %} - + +{#- Redundant dependency to simplify jinja code. #} + TRUETRUE + {%- if run_task_get_obs_mrms %} + + {%- endif %} + {%- if write_dopost %} + + {%- elif run_task_run_post %} + + {%- endif %} + @@ -1177,19 +1173,19 @@ it, we'd have to include more jinja if-statements here. ************************************************************************ ************************************************************************ --> - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_POINTSTAT" - {{ nnodes_vx_pointstat }}:ppn={{ ppn_vx_pointstat }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX" + {{ nnodes_run_met_pointstat_vx_sfc_upa }}:ppn={{ ppn_run_met_pointstat_vx_sfc_upa }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_pointstat }} + {{ mem_run_met_pointstat_vx_sfc_upa }} {%- endif %} - {{ wtime_vx_pointstat }} + {{ wtime_run_met_pointstat_vx_sfc_upa }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_POINTSTAT; - &LOGDIR;/&TN_VX_POINTSTAT;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_POINTSTAT_VX_SFC_UPA; + &LOGDIR;/&TN_RUN_MET_POINTSTAT_VX_SFC_UPA;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; @@ -1199,23 +1195,23 @@ it, we'd have to include more jinja if-statements here. subcyc@M LOGDIR&LOGDIR; FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} - {%- if do_ensemble %} + {%- if do_ensemble %} SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} ENSMEM_INDX#{{ ensmem_indx_name }}# - {%- endif %} + {%- endif %} {#- Redundant dependency to simplify jinja code. #} TRUETRUE - {%- if run_task_get_obs_ndas %} + {%- if run_task_get_obs_ndas %} - {%- endif %} - {%- if write_dopost %} + {%- endif %} + {%- if write_dopost %} - {%- elif run_task_run_post %} + {%- elif run_task_run_post %} - {%- endif %} + {%- endif %} @@ -1231,19 +1227,19 @@ it, we'd have to include more jinja if-statements here. ************************************************************************ ************************************************************************ --> - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_ENSGRID" - {{ nnodes_vx_ensgrid }}:ppn={{ ppn_vx_ensgrid }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" + {{ nnodes_run_met_ensemblestat_vx_apcp01h }}:ppn={{ ppn_run_met_ensemblestat_vx_apcp01h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_ensgrid }} + {{ mem_run_met_ensemblestat_vx_apcp01h }} {%- endif %} - {{ wtime_vx_ensgrid }} + {{ wtime_run_met_ensemblestat_vx_apcp01h }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_ENSGRID; - &LOGDIR;/&TN_VX_ENSGRID;_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_ENSEMBLESTAT_VX_APCP01H; + &LOGDIR;/&TN_RUN_MET_ENSEMBLESTAT_VX_APCP01H;_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; @@ -1262,25 +1258,24 @@ it, we'd have to include more jinja if-statements here. -{%- if fcst_len_hrs >= 3 %} + {%- if fcst_len_hrs >= 3 %} - - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_ENSGRID" - {{ nnodes_vx_ensgrid }}:ppn={{ ppn_vx_ensgrid }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_ensgrid }} - {%- endif %} - {{ wtime_vx_ensgrid }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" + {{ nnodes_run_met_ensemblestat_vx_apcp03h }}:ppn={{ ppn_run_met_ensemblestat_vx_apcp03h }} + {%- if machine not in ["GAEA", "NOAACLOUD"] %} + {{ mem_run_met_ensemblestat_vx_apcp03h }} + {%- endif %} + {{ wtime_run_met_ensemblestat_vx_apcp03h }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_ENSGRID_03h; - &LOGDIR;/&TN_VX_ENSGRID_03h;_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_ENSEMBLESTAT_VX_APCP03H; + &LOGDIR;/&TN_RUN_MET_ENSEMBLESTAT_VX_APCP03H;_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; @@ -1294,30 +1289,30 @@ it, we'd have to include more jinja if-statements here. ACCUM03 - + -{%- endif %} -{%- if fcst_len_hrs >= 6 %} + {%- endif %} + + {%- if fcst_len_hrs >= 6 %} - - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_ENSGRID" - {{ nnodes_vx_ensgrid }}:ppn={{ ppn_vx_ensgrid }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_ensgrid }} - {%- endif %} - {{ wtime_vx_ensgrid }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" + {{ nnodes_run_met_ensemblestat_vx_apcp06h }}:ppn={{ ppn_run_met_ensemblestat_vx_apcp06h }} + {%- if machine not in ["GAEA", "NOAACLOUD"] %} + {{ mem_run_met_ensemblestat_vx_apcp06h }} + {%- endif %} + {{ wtime_run_met_ensemblestat_vx_apcp06h }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_ENSGRID_06h; - &LOGDIR;/&TN_VX_ENSGRID_06h;_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_ENSEMBLESTAT_VX_APCP06H; + &LOGDIR;/&TN_RUN_MET_ENSEMBLESTAT_VX_APCP06H;_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; @@ -1331,30 +1326,30 @@ it, we'd have to include more jinja if-statements here. ACCUM06 - + -{%- endif %} -{%- if fcst_len_hrs >= 24 %} + {%- endif %} + + {%- if fcst_len_hrs >= 24 %} - - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_ENSGRID" - {{ nnodes_vx_ensgrid }}:ppn={{ ppn_vx_ensgrid }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_ensgrid }} - {%- endif %} - {{ wtime_vx_ensgrid }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" + {{ nnodes_run_met_ensemblestat_vx_apcp24h }}:ppn={{ ppn_run_met_ensemblestat_vx_apcp24h }} + {%- if machine not in ["GAEA", "NOAACLOUD"] %} + {{ mem_run_met_ensemblestat_vx_apcp24h }} + {%- endif %} + {{ wtime_run_met_ensemblestat_vx_apcp24h }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_ENSGRID_24h; - &LOGDIR;/&TN_VX_ENSGRID_24h;_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_ENSEMBLESTAT_VX_APCP24H; + &LOGDIR;/&TN_RUN_MET_ENSEMBLESTAT_VX_APCP24H;_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; @@ -1368,29 +1363,29 @@ it, we'd have to include more jinja if-statements here. ACCUM24 - + -{%- endif %} + {%- endif %} + - - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_ENSGRID" - {{ nnodes_vx_ensgrid }}:ppn={{ ppn_vx_ensgrid }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" + {{ nnodes_run_met_ensemblestat_vx_refc }}:ppn={{ ppn_run_met_ensemblestat_vx_refc }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_ensgrid }} + {{ mem_run_met_ensemblestat_vx_refc }} {%- endif %} - {{ wtime_vx_ensgrid }} + {{ wtime_run_met_ensemblestat_vx_refc }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_ENSGRID_REFC; - &LOGDIR;/&TN_VX_ENSGRID_REFC;_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_ENSEMBLESTAT_VX_REFC; + &LOGDIR;/&TN_RUN_MET_ENSEMBLESTAT_VX_REFC;_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; @@ -1412,20 +1407,19 @@ it, we'd have to include more jinja if-statements here. ************************************************************************ ************************************************************************ --> - - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_ENSGRID" - {{ nnodes_vx_ensgrid }}:ppn={{ ppn_vx_ensgrid }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" + {{ nnodes_run_met_ensemblestat_vx_retop }}:ppn={{ ppn_run_met_ensemblestat_vx_retop }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_ensgrid }} + {{ mem_run_met_ensemblestat_vx_retop }} {%- endif %} - {{ wtime_vx_ensgrid }} + {{ wtime_run_met_ensemblestat_vx_retop }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_ENSGRID_RETOP; - &LOGDIR;/&TN_VX_ENSGRID_RETOP;_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_ENSEMBLESTAT_VX_RETOP; + &LOGDIR;/&TN_RUN_MET_ENSEMBLESTAT_VX_RETOP;_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; @@ -1442,60 +1436,61 @@ it, we'd have to include more jinja if-statements here. +{%- endif %} +{%- if run_task_vx_enspoint %} - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_ENSGRID_MEAN" - {{ nnodes_vx_ensgrid_mean }}:ppn={{ ppn_vx_ensgrid_mean }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT" + {{ nnodes_run_met_ensemblestat_vx_sfc_upa }}:ppn={{ ppn_run_met_ensemblestat_vx_sfc_upa }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_ensgrid_mean }} + {{ mem_run_met_ensemblestat_vx_sfc_upa }} {%- endif %} - {{ wtime_vx_ensgrid_mean }} + {{ wtime_run_met_ensemblestat_vx_sfc_upa }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_ENSGRID_MEAN; - &LOGDIR;/&TN_VX_ENSGRID_MEAN;_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_ENSEMBLESTAT_VX_SFC_UPA; + &LOGDIR;/&TN_RUN_MET_ENSEMBLESTAT_VX_SFC_UPA;_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; - OBS_DIR&CCPA_OBS_DIR; + OBS_DIR&NDAS_OBS_DIR; PDY@Y@m@d cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} - VARAPCP - ACCUM01 + FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} - + +{%- endif %} +{%- if run_task_vx_ensgrid %} - - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_ENSGRID_PROB" - {{ nnodes_vx_ensgrid_prob }}:ppn={{ ppn_vx_ensgrid_prob }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN" + {{ nnodes_run_met_gridstat_vx_ensmean_apcp01h }}:ppn={{ ppn_run_met_gridstat_vx_ensmean_apcp01h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_ensgrid_prob }} + {{ mem_run_met_gridstat_vx_ensmean_apcp01h }} {%- endif %} - {{ wtime_vx_ensgrid_prob }} + {{ wtime_run_met_gridstat_vx_ensmean_apcp01h }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_ENSGRID_PROB; - &LOGDIR;/&TN_VX_ENSGRID_PROB;_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP01H; + &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP01H;_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; @@ -1509,29 +1504,29 @@ it, we'd have to include more jinja if-statements here. ACCUM01 - + -{%- if fcst_len_hrs >= 3 %} + + {%- if fcst_len_hrs >= 3 %} - - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_ENSGRID_MEAN" - {{ nnodes_vx_ensgrid_mean }}:ppn={{ ppn_vx_ensgrid_mean }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_ensgrid_mean }} - {%- endif %} - {{ wtime_vx_ensgrid_mean }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN" + {{ nnodes_run_met_gridstat_vx_ensmean_apcp03h }}:ppn={{ ppn_run_met_gridstat_vx_ensmean_apcp03h }} + {%- if machine not in ["GAEA", "NOAACLOUD"] %} + {{ mem_run_met_gridstat_vx_ensmean_apcp03h }} + {%- endif %} + {{ wtime_run_met_gridstat_vx_ensmean_apcp03h }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_ENSGRID_MEAN_03h; - &LOGDIR;/&TN_VX_ENSGRID_MEAN_03h;_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP03H; + &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP03H;_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; @@ -1545,29 +1540,30 @@ it, we'd have to include more jinja if-statements here. ACCUM03 - + + {%- endif %} + {%- if fcst_len_hrs >= 6 %} - - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_ENSGRID_PROB" - {{ nnodes_vx_ensgrid_prob }}:ppn={{ ppn_vx_ensgrid_prob }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_ensgrid_prob }} - {%- endif %} - {{ wtime_vx_ensgrid_prob }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN" + {{ nnodes_run_met_gridstat_vx_ensmean_apcp06h }}:ppn={{ ppn_run_met_gridstat_vx_ensmean_apcp06h }} + {%- if machine not in ["GAEA", "NOAACLOUD"] %} + {{ mem_run_met_gridstat_vx_ensmean_apcp06h }} + {%- endif %} + {{ wtime_run_met_gridstat_vx_ensmean_apcp06h }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_ENSGRID_PROB_03h; - &LOGDIR;/&TN_VX_ENSGRID_PROB_03h;_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP06H; + &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP06H;_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; @@ -1576,35 +1572,35 @@ it, we'd have to include more jinja if-statements here. cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(3, fcst_len_hrs+1, 3) %}{{ " %02d" % h }}{% endfor %} + FHR {% for h in range(6, fcst_len_hrs+1, 6) %}{{ " %02d" % h }}{% endfor %} VARAPCP - ACCUM03 + ACCUM06 - + -{%- endif %} -{%- if fcst_len_hrs >= 6 %} + {%- endif %} + + {%- if fcst_len_hrs >= 24 %} - - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_ENSGRID_MEAN" - {{ nnodes_vx_ensgrid_mean }}:ppn={{ ppn_vx_ensgrid_mean }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_ensgrid_mean }} - {%- endif %} - {{ wtime_vx_ensgrid_mean }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN" + {{ nnodes_run_met_gridstat_vx_ensmean_apcp24h }}:ppn={{ ppn_run_met_gridstat_vx_ensmean_apcp24h }} + {%- if machine not in ["GAEA", "NOAACLOUD"] %} + {{ mem_run_met_gridstat_vx_ensmean_apcp24h }} + {%- endif %} + {{ wtime_run_met_gridstat_vx_ensmean_apcp24h }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_ENSGRID_MEAN_06h; - &LOGDIR;/&TN_VX_ENSGRID_MEAN_06h;_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP24H; + &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP24H;_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; @@ -1613,71 +1609,71 @@ it, we'd have to include more jinja if-statements here. cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(6, fcst_len_hrs+1, 6) %}{{ " %02d" % h }}{% endfor %} + FHR {% for h in range(24, fcst_len_hrs+1, 24) %}{{ " %02d" % h }}{% endfor %} VARAPCP - ACCUM06 + ACCUM24 - + + {%- endif %} +{%- endif %} +{%- if run_task_vx_enspoint %} - - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_ENSGRID_PROB" - {{ nnodes_vx_ensgrid_prob }}:ppn={{ ppn_vx_ensgrid_prob }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN" + {{ nnodes_run_met_pointstat_vx_ensmean_sfc_upa }}:ppn={{ ppn_run_met_pointstat_vx_ensmean_sfc_upa }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_ensgrid_prob }} + {{ mem_run_met_pointstat_vx_ensmean_sfc_upa }} {%- endif %} - {{ wtime_vx_ensgrid_prob }} + {{ wtime_run_met_pointstat_vx_ensmean_sfc_upa }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_ENSGRID_PROB_06h; - &LOGDIR;/&TN_VX_ENSGRID_PROB_06h;_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC_UPA; + &LOGDIR;/&TN_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC_UPA;_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; - OBS_DIR&CCPA_OBS_DIR; + OBS_DIR&NDAS_OBS_DIR; PDY@Y@m@d cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(6, fcst_len_hrs+1, 6) %}{{ " %02d" % h }}{% endfor %} - VARAPCP - ACCUM06 + FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} - + {%- endif %} -{%- if fcst_len_hrs >= 24 %} + +{%- if run_task_vx_ensgrid %} - - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_ENSGRID_MEAN" - {{ nnodes_vx_ensgrid_mean }}:ppn={{ ppn_vx_ensgrid_mean }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" + {{ nnodes_run_met_gridstat_vx_ensprob_apcp01h }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_apcp01h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_ensgrid_mean }} + {{ mem_run_met_gridstat_vx_ensprob_apcp01h }} {%- endif %} - {{ wtime_vx_ensgrid_mean }} + {{ wtime_run_met_gridstat_vx_ensprob_apcp01h }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_ENSGRID_MEAN_24h; - &LOGDIR;/&TN_VX_ENSGRID_MEAN_24h;_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP01H; + &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP01H;_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; @@ -1686,34 +1682,34 @@ it, we'd have to include more jinja if-statements here. cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(24, fcst_len_hrs+1, 24) %}{{ " %02d" % h }}{% endfor %} + FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} VARAPCP - ACCUM24 + ACCUM01 - + + {%- if fcst_len_hrs >= 3 %} - - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_ENSGRID_PROB" - {{ nnodes_vx_ensgrid_prob }}:ppn={{ ppn_vx_ensgrid_prob }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_ensgrid_prob }} - {%- endif %} - {{ wtime_vx_ensgrid_prob }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" + {{ nnodes_run_met_gridstat_vx_ensprob_apcp03h }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_apcp03h }} + {%- if machine not in ["GAEA", "NOAACLOUD"] %} + {{ mem_run_met_gridstat_vx_ensprob_apcp03h }} + {%- endif %} + {{ wtime_run_met_gridstat_vx_ensprob_apcp03h }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_ENSGRID_PROB_24h; - &LOGDIR;/&TN_VX_ENSGRID_PROB_24h;_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP03H; + &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP03H;_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; @@ -1722,117 +1718,121 @@ it, we'd have to include more jinja if-statements here. cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(24, fcst_len_hrs+1, 24) %}{{ " %02d" % h }}{% endfor %} + FHR {% for h in range(3, fcst_len_hrs+1, 3) %}{{ " %02d" % h }}{% endfor %} VARAPCP - ACCUM24 + ACCUM03 - + -{%- endif %} + {%- endif %} + + {%- if fcst_len_hrs >= 6 %} - - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_ENSGRID_PROB" - {{ nnodes_vx_ensgrid_prob }}:ppn={{ ppn_vx_ensgrid_prob }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_ensgrid_prob }} - {%- endif %} - {{ wtime_vx_ensgrid_prob }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" + {{ nnodes_run_met_gridstat_vx_ensprob_apcp06h }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_apcp06h }} + {%- if machine not in ["GAEA", "NOAACLOUD"] %} + {{ mem_run_met_gridstat_vx_ensprob_apcp06h }} + {%- endif %} + {{ wtime_run_met_gridstat_vx_ensprob_apcp06h }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_ENSGRID_PROB_REFC; - &LOGDIR;/&TN_VX_ENSGRID_PROB_REFC;_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP06H; + &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP06H;_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; - OBS_DIR&MRMS_OBS_DIR; + OBS_DIR&CCPA_OBS_DIR; PDY@Y@m@d cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} - VARREFC + FHR {% for h in range(6, fcst_len_hrs+1, 6) %}{{ " %02d" % h }}{% endfor %} + VARAPCP + ACCUM06 - + + {%- endif %} + {%- if fcst_len_hrs >= 24 %} - - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_ENSGRID_PROB" - {{ nnodes_vx_ensgrid_prob }}:ppn={{ ppn_vx_ensgrid_prob }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_ensgrid_prob }} - {%- endif %} - {{ wtime_vx_ensgrid_prob }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" + {{ nnodes_run_met_gridstat_vx_ensprob_apcp24h }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_apcp24h }} + {%- if machine not in ["GAEA", "NOAACLOUD"] %} + {{ mem_run_met_gridstat_vx_ensprob_apcp24h }} + {%- endif %} + {{ wtime_run_met_gridstat_vx_ensprob_apcp24h }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_ENSGRID_PROB_RETOP; - &LOGDIR;/&TN_VX_ENSGRID_PROB_RETOP;_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP24H; + &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP24H;_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; - OBS_DIR&MRMS_OBS_DIR; + OBS_DIR&CCPA_OBS_DIR; PDY@Y@m@d cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} - VARRETOP + FHR {% for h in range(24, fcst_len_hrs+1, 24) %}{{ " %02d" % h }}{% endfor %} + VARAPCP + ACCUM24 - + -{%- endif %} + {%- endif %} -{%- if run_task_vx_enspoint %} - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_ENSPOINT" - {{ nnodes_vx_enspoint }}:ppn={{ ppn_vx_enspoint }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" + {{ nnodes_run_met_gridstat_vx_ensprob_refc }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_refc }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_enspoint }} + {{ mem_run_met_gridstat_vx_ensprob_refc }} {%- endif %} - {{ wtime_vx_enspoint }} + {{ wtime_run_met_gridstat_vx_ensprob_refc }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_ENSPOINT; - &LOGDIR;/&TN_VX_ENSPOINT;_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_GRIDSTAT_VX_ENSPROB_REFC; + &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_ENSPROB_REFC;_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; - OBS_DIR&NDAS_OBS_DIR; + OBS_DIR&MRMS_OBS_DIR; PDY@Y@m@d cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + VARREFC - + @@ -1841,52 +1841,55 @@ it, we'd have to include more jinja if-statements here. ************************************************************************ ************************************************************************ --> - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_ENSPOINT_MEAN" - {{ nnodes_vx_enspoint_mean }}:ppn={{ ppn_vx_enspoint_mean }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" + {{ nnodes_run_met_gridstat_vx_ensprob_retop }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_retop }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_enspoint_mean }} + {{ mem_run_met_gridstat_vx_ensprob_retop }} {%- endif %} - {{ wtime_vx_enspoint_mean }} + {{ wtime_run_met_gridstat_vx_ensprob_retop }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_ENSPOINT_MEAN; - &LOGDIR;/&TN_VX_ENSPOINT_MEAN;_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_GRIDSTAT_VX_ENSPROB_RETOP; + &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_ENSPROB_RETOP;_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; - OBS_DIR&NDAS_OBS_DIR; + OBS_DIR&MRMS_OBS_DIR; PDY@Y@m@d cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + VARRETOP - + +{%- endif %} +{%- if run_task_vx_enspoint %} - + &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_VX_ENSPOINT_PROB" - {{ nnodes_vx_enspoint_prob }}:ppn={{ ppn_vx_enspoint_prob }} + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB" + {{ nnodes_run_met_pointstat_vx_ensprob_sfc_upa }}:ppn={{ ppn_run_met_pointstat_vx_ensprob_sfc_upa }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_vx_enspoint_prob }} + {{ mem_run_met_pointstat_vx_ensprob_sfc_upa }} {%- endif %} - {{ wtime_vx_enspoint_prob }} + {{ wtime_run_met_pointstat_vx_ensprob_sfc_upa }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_VX_ENSPOINT_PROB; - &LOGDIR;/&TN_VX_ENSPOINT_PROB;_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_POINTSTAT_VX_ENSPROB_SFC_UPA; + &LOGDIR;/&TN_RUN_MET_POINTSTAT_VX_ENSPROB_SFC_UPA;_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; @@ -1898,10 +1901,10 @@ it, we'd have to include more jinja if-statements here. FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} - + - {%- endif %} + diff --git a/ush/config_defaults.yaml b/ush/config_defaults.yaml index 409a512931..0bd59b51f6 100644 --- a/ush/config_defaults.yaml +++ b/ush/config_defaults.yaml @@ -1916,6 +1916,38 @@ task_run_post: CUSTOM_POST_CONFIG_FP: "" POST_OUTPUT_DOMAIN_NAME: '{{ workflow.PREDEF_GRID_NAME }}' +#---------------------------- +# PLOT_ALLVARS config parameters +#----------------------------- +task_plot_allvars: + TN_PLOT_ALLVARS: "plot_allvars" + NNODES_PLOT_ALLVARS: 1 + PPN_PLOT_ALLVARS: 24 + WTIME_PLOT_ALLVARS: 01:00:00 + MAXTRIES_PLOT_ALLVARS: 1 + #------------------------------------------------------------------------- + # Reference experiment's COMOUT directory. This is where the GRIB2 files + # from postprocessing are located. Make this a template to compare + # multiple cycle and dates. COMOUT_REF should end with: + # nco mode: $PDY/$cyc + # community mode: $PDY$cyc/postprd + # We don't do this inside the code, so that we can compare nco vs com runs. + #------------------------------------------------------------------------- + COMOUT_REF: "" + #------------------------------ + # Plot fcts start and increment + #------------------------------ + PLOT_FCST_START: 0 + PLOT_FCST_INC: 3 + #----------------------------------- + # By default the end is FCST_LEN_HRS + #----------------------------------- + PLOT_FCST_END: "" + #------------------------------------------------------------------------------ + # Domains to plot. Currently supported are either "conus" or "regional" or both + #------------------------------------------------------------------------------- + PLOT_DOMAINS: ["conus"] + #---------------------------- # GET OBS CCPA config parameters #----------------------------- @@ -1950,270 +1982,290 @@ task_get_obs_ndas: MAXTRIES_GET_OBS_NDAS: 1 #---------------------------- -# VX_GRIDSTAT config parameters +# run_MET_GridStat_vx_APCP01h config parameters #----------------------------- -task_run_vx_gridstat: - TN_VX_GRIDSTAT: "run_gridstatvx" - NNODES_VX_GRIDSTAT: 1 - PPN_VX_GRIDSTAT: 1 - MEM_VX_GRIDSTAT: 2G - WTIME_VX_GRIDSTAT: 02:00:00 - MAXTRIES_VX_GRIDSTAT: 2 +task_run_MET_GridStat_vx_APCP01h: + TN_RUN_MET_GRIDSTAT_VX_APCP01h: "run_MET_GridStat_vx_APCP01h" + NNODES_RUN_MET_GRIDSTAT_VX_APCP01H: 1 + PPN_RUN_MET_GRIDSTAT_VX_APCP01H: 1 + MEM_RUN_MET_GRIDSTAT_VX_APCP01H: 2G + WTIME_RUN_MET_GRIDSTAT_VX_APCP01H: 02:00:00 + MAXTRIES_RUN_MET_GRIDSTAT_VX_APCP01H: 2 #---------------------------- -# VX_GRIDSTAT_REFC config parameters +# run_MET_GridStat_vx_APCP03h config parameters #----------------------------- -task_run_vx_gridstat_refc: - TN_VX_GRIDSTAT_REFC: "run_gridstatvx_refc" - NNODES_VX_GRIDSTAT: 1 - PPN_VX_GRIDSTAT: 1 - MEM_VX_GRIDSTAT: 2G - WTIME_VX_GRIDSTAT: 02:00:00 - MAXTRIES_VX_GRIDSTAT_REFC: 2 +task_run_MET_GridStat_vx_APCP03h: + TN_RUN_MET_GRIDSTAT_VX_APCP03H: "run_MET_GridStat_vx_APCP03h" + NNODES_RUN_MET_GRIDSTAT_VX_APCP03H: 1 + PPN_RUN_MET_GRIDSTAT_VX_APCP03H: 1 + MEM_RUN_MET_GRIDSTAT_VX_APCP03H: 2G + WTIME_RUN_MET_GRIDSTAT_VX_APCP03H: 02:00:00 + MAXTRIES_RUN_MET_GRIDSTAT_VX_APCP03H: 2 #---------------------------- -# VX_GRIDSTAT_RETOP config parameters +# run_MET_GridStat_vx_APCP06h config parameters #----------------------------- -task_run_vx_gridstat_retop: - TN_VX_GRIDSTAT_RETOP: "run_gridstatvx_retop" - NNODES_VX_GRIDSTAT: 1 - PPN_VX_GRIDSTAT: 1 - MEM_VX_GRIDSTAT: 2G - WTIME_VX_GRIDSTAT: 02:00:00 - MAXTRIES_VX_GRIDSTAT_RETOP: 2 +task_run_MET_GridStat_vx_APCP06h: + TN_RUN_MET_GRIDSTAT_VX_APCP06H: "run_MET_GridStat_vx_APCP06h" + NNODES_RUN_MET_GRIDSTAT_VX_APCP06H: 1 + PPN_RUN_MET_GRIDSTAT_VX_APCP06H: 1 + MEM_RUN_MET_GRIDSTAT_VX_APCP06H: 2G + WTIME_RUN_MET_GRIDSTAT_VX_APCP06H: 02:00:00 + MAXTRIES_RUN_MET_GRIDSTAT_VX_APCP06H: 2 #---------------------------- -# VX_GRIDSTAT_03h config parameters +# run_MET_GridStat_vx_APCP24h config parameters #----------------------------- -task_run_vx_gridstat_03h: - TN_VX_GRIDSTAT_03h: "run_gridstatvx_03h" - NNODES_VX_GRIDSTAT: 1 - PPN_VX_GRIDSTAT: 1 - MEM_VX_GRIDSTAT: 2G - WTIME_VX_GRIDSTAT: 02:00:00 - MAXTRIES_VX_GRIDSTAT_03h: 2 +task_run_MET_GridStat_vx_APCP24h: + TN_RUN_MET_GRIDSTAT_VX_APCP24H: "run_MET_GridStat_vx_APCP24h" + NNODES_RUN_MET_GRIDSTAT_VX_APCP24H: 1 + PPN_RUN_MET_GRIDSTAT_VX_APCP24H: 1 + MEM_RUN_MET_GRIDSTAT_VX_APCP24H: 2G + WTIME_RUN_MET_GRIDSTAT_VX_APCP24H: 02:00:00 + MAXTRIES_RUN_MET_GRIDSTAT_VX_APCP24H: 2 #---------------------------- -# VX_GRIDSTAT_06h config parameters +# run_MET_GridStat_vx_REFC config parameters #----------------------------- -task_run_vx_gridstat_06h: - TN_VX_GRIDSTAT_06h: "run_gridstatvx_06h" - NNODES_VX_GRIDSTAT: 1 - PPN_VX_GRIDSTAT: 1 - MEM_VX_GRIDSTAT: 2G - WTIME_VX_GRIDSTAT: 02:00:00 - MAXTRIES_VX_GRIDSTAT_06h: 2 +task_run_MET_GridStat_vx_REFC: + TN_RUN_MET_GRIDSTAT_VX_REFC: "run_MET_GridStat_vx_REFC" + NNODES_RUN_MET_GRIDSTAT_VX_REFC: 1 + PPN_RUN_MET_GRIDSTAT_VX_REFC: 1 + MEM_RUN_MET_GRIDSTAT_VX_REFC: 2G + WTIME_RUN_MET_GRIDSTAT_VX_REFC: 02:00:00 + MAXTRIES_RUN_MET_GRIDSTAT_VX_REFC: 2 #---------------------------- -# VX_GRIDSTAT_24h config parameters +# run_MET_GridStat_vx_RETOP config parameters #----------------------------- -task_run_vx_gridstat_24h: - TN_VX_GRIDSTAT_24h: "run_gridstatvx_24h" - NNODES_VX_GRIDSTAT: 1 - PPN_VX_GRIDSTAT: 1 - MEM_VX_GRIDSTAT: 2G - WTIME_VX_GRIDSTAT: 02:00:00 - MAXTRIES_VX_GRIDSTAT_24h: 2 +task_run_MET_GridStat_vx_RETOP: + TN_RUN_MET_GRIDSTAT_VX_RETOP: "run_MET_GridStat_vx_RETOP" + NNODES_RUN_MET_GRIDSTAT_VX_RETOP: 1 + PPN_RUN_MET_GRIDSTAT_VX_RETOP: 1 + MEM_RUN_MET_GRIDSTAT_VX_RETOP: 2G + WTIME_RUN_MET_GRIDSTAT_VX_RETOP: 02:00:00 + MAXTRIES_RUN_MET_GRIDSTAT_VX_RETOP: 2 #---------------------------- -# VX_POINTSTAT config parameters +# run_MET_PointStat_vx_SFC_UPA config parameters #----------------------------- -task_run_vx_pointstat: - TN_VX_POINTSTAT: "run_pointstatvx" - NNODES_VX_POINTSTAT: 1 - PPN_VX_POINTSTAT: 1 - MEM_VX_POINTSTAT: 2G - WTIME_VX_POINTSTAT: 01:00:00 - MAXTRIES_VX_POINTSTAT: 2 +task_run_MET_PointStat_vx_SFC_UPA: + TN_RUN_MET_POINTSTAT_VX_SFC_UPA: "run_MET_PointStat_vx_SFC_UPA" + NNODES_RUN_MET_POINTSTAT_VX_SFC_UPA: 1 + PPN_RUN_MET_POINTSTAT_VX_SFC_UPA: 1 + MEM_RUN_MET_POINTSTAT_VX_SFC_UPA: 2G + WTIME_RUN_MET_POINTSTAT_VX_SFC_UPA: 01:00:00 + MAXTRIES_RUN_MET_POINTSTAT_VX_SFC_UPA: 2 #---------------------------- -# VX_ENSGRID config parameters +# run_MET_EnsembleStat_vx_APCP01h config parameters #----------------------------- -task_run_vx_ensgrid: - TN_VX_ENSGRID: "run_ensgridvx" - MAXTRIES_VX_ENSGRID: 2 - TN_VX_ENSGRID_03h: "run_ensgridvx_03h" - MAXTRIES_VX_ENSGRID_03h: 2 - TN_VX_ENSGRID_06h: "run_ensgridvx_06h" - MAXTRIES_VX_ENSGRID_06h: 2 - TN_VX_ENSGRID_24h: "run_ensgridvx_24h" - MAXTRIES_VX_ENSGRID_24h: 2 - TN_VX_ENSGRID_RETOP: "run_ensgridvx_retop" - MAXTRIES_VX_ENSGRID_RETOP: 2 - NNODES_VX_ENSGRID: 1 - PPN_VX_ENSGRID: 1 - MEM_VX_ENSGRID: 2G - WTIME_VX_ENSGRID: 01:00:00 +task_run_MET_EnsembleStat_vx_APCP01h: + TN_RUN_MET_ENSEMBLESTAT_VX_APCP01H: "run_MET_EnsembleStat_vx_APCP01h" + NNODES_RUN_MET_ENSEMBLESTAT_VX_APCP01H: 1 + PPN_RUN_MET_ENSEMBLESTAT_VX_APCP01H: 1 + MEM_RUN_MET_ENSEMBLESTAT_VX_APCP01H: 2G + WTIME_RUN_MET_ENSEMBLESTAT_VX_APCP01H: 01:00:00 + MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_APCP01H: 2 +#---------------------------- +# run_MET_EnsembleStat_vx_APCP03h config parameters +#----------------------------- +task_run_MET_EnsembleStat_vx_APCP03h: + TN_RUN_MET_ENSEMBLESTAT_VX_APCP03H: "run_MET_EnsembleStat_vx_APCP03h" + NNODES_RUN_MET_ENSEMBLESTAT_VX_APCP03H: 1 + PPN_RUN_MET_ENSEMBLESTAT_VX_APCP03H: 1 + MEM_RUN_MET_ENSEMBLESTAT_VX_APCP03H: 2G + WTIME_RUN_MET_ENSEMBLESTAT_VX_APCP03H: 01:00:00 + MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_APCP03H: 2 #---------------------------- -# VX_ENSGRID_REFC config parameters +# run_MET_EnsembleStat_vx_APCP06h config parameters #----------------------------- -task_run_vx_ensgrid_refc: - TN_VX_ENSGRID_REFC: "run_ensgridvx_refc" - NNODES_VX_ENSGRID: 1 - PPN_VX_ENSGRID: 1 - MEM_VX_ENSGRID: 2G - WTIME_VX_ENSGRID: 01:00:00 - MAXTRIES_VX_ENSGRID_REFC: 2 +task_run_MET_EnsembleStat_vx_APCP06h: + TN_RUN_MET_ENSEMBLESTAT_VX_APCP06H: "run_MET_EnsembleStat_vx_APCP06h" + NNODES_RUN_MET_ENSEMBLESTAT_VX_APCP06H: 1 + PPN_RUN_MET_ENSEMBLESTAT_VX_APCP06H: 1 + MEM_RUN_MET_ENSEMBLESTAT_VX_APCP06H: 2G + WTIME_RUN_MET_ENSEMBLESTAT_VX_APCP06H: 01:00:00 + MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_APCP06H: 2 #---------------------------- -# VX_ENSGRID_MEAN config parameters +# run_MET_EnsembleStat_vx_APCP24h config parameters #----------------------------- -task_run_vx_ensgrid_mean: - TN_VX_ENSGRID_MEAN: "run_ensgridvx_mean" - NNODES_VX_ENSGRID_MEAN: 1 - PPN_VX_ENSGRID_MEAN: 1 - MEM_VX_ENSGRID_MEAN: 2G - WTIME_VX_ENSGRID_MEAN: 01:00:00 - MAXTRIES_VX_ENSGRID_MEAN: 2 +task_run_MET_EnsembleStat_vx_APCP24h: + TN_RUN_MET_ENSEMBLESTAT_VX_APCP24H: "run_MET_EnsembleStat_vx_APCP24h" + NNODES_RUN_MET_ENSEMBLESTAT_VX_APCP24H: 1 + PPN_RUN_MET_ENSEMBLESTAT_VX_APCP24H: 1 + MEM_RUN_MET_ENSEMBLESTAT_VX_APCP24H: 2G + WTIME_RUN_MET_ENSEMBLESTAT_VX_APCP24H: 01:00:00 + MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_APCP24H: 2 #---------------------------- -# VX_ENSGRID_MEAN_03h config parameters +# run_MET_EnsembleStat_vx_REFC config parameters #----------------------------- -task_run_vx_ensgrid_mean_03h: - TN_VX_ENSGRID_MEAN_03h: "run_ensgridvx_mean_03h" - NNODES_VX_ENSGRID_MEAN: 1 - PPN_VX_ENSGRID_MEAN: 1 - MEM_VX_ENSGRID_MEAN: 2G - WTIME_VX_ENSGRID_MEAN: 01:00:00 - MAXTRIES_VX_ENSGRID_MEAN_03h: 2 +task_run_MET_EnsembleStat_vx_REFC: + TN_RUN_MET_ENSEMBLESTAT_VX_REFC: "run_MET_EnsembleStat_vx_REFC" + NNODES_RUN_MET_ENSEMBLESTAT_VX_REFC: 1 + PPN_RUN_MET_ENSEMBLESTAT_VX_REFC: 1 + MEM_RUN_MET_ENSEMBLESTAT_VX_REFC: 2G + WTIME_RUN_MET_ENSEMBLESTAT_VX_REFC: 01:00:00 + MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_REFC: 2 #---------------------------- -# VX_ENSGRID_MEAN_06h config parameters +# run_MET_EnsembleStat_vx_RETOP config parameters #----------------------------- -task_run_vx_ensgrid_mean_06h: - TN_VX_ENSGRID_MEAN_06h: "run_ensgridvx_mean_06h" - NNODES_VX_ENSGRID_MEAN: 1 - PPN_VX_ENSGRID_MEAN: 1 - MEM_VX_ENSGRID_MEAN: 2G - WTIME_VX_ENSGRID_MEAN: 01:00:00 - MAXTRIES_VX_ENSGRID_MEAN_06h: 2 +task_run_MET_EnsembleStat_vx_RETOP: + TN_RUN_MET_ENSEMBLESTAT_VX_RETOP: "run_MET_EnsembleStat_vx_RETOP" + NNODES_RUN_MET_ENSEMBLESTAT_VX_RETOP: 1 + PPN_RUN_MET_ENSEMBLESTAT_VX_RETOP: 1 + MEM_RUN_MET_ENSEMBLESTAT_VX_RETOP: 2G + WTIME_RUN_MET_ENSEMBLESTAT_VX_RETOP: 01:00:00 + MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_RETOP: 2 #---------------------------- -# VX_ENSGRID_MEAN_24h config parameters +# run_MET_EnsembleStat_vx_SFC_UPA config parameters #----------------------------- -task_run_vx_ensgrid_mean_24h: - TN_VX_ENSGRID_MEAN_24h: "run_ensgridvx_mean_24h" - NNODES_VX_ENSGRID_MEAN: 1 - PPN_VX_ENSGRID_MEAN: 1 - MEM_VX_ENSGRID_MEAN: 2G - WTIME_VX_ENSGRID_MEAN: 01:00:00 - MAXTRIES_VX_ENSGRID_MEAN_24h: 2 +task_run_MET_EnsembleStat_vx_SFC_UPA: + TN_RUN_MET_ENSEMBLESTAT_VX_SFC_UPA: "run_MET_EnsembleStat_vx_SFC_UPA" + NNODES_RUN_MET_ENSEMBLESTAT_VX_SFC_UPA: 1 + PPN_RUN_MET_ENSEMBLESTAT_VX_SFC_UPA: 1 + MEM_RUN_MET_ENSEMBLESTAT_VX_SFC_UPA: 2G + WTIME_RUN_MET_ENSEMBLESTAT_VX_SFC_UPA: 01:00:00 + MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_SFC_UPA: 2 #---------------------------- -# VX_ENSGRID_PROB config parameters +# run_MET_GridStat_vx_ensmean_APCP01h config parameters #----------------------------- -task_run_vx_ensgrid_prob: - TN_VX_ENSGRID_PROB: "run_ensgridvx_prob" - NNODES_VX_ENSGRID_PROB: 1 - TN_VX_ENSGRID_PROB_RETOP: "run_ensgridvx_prob_retop" - MAXTRIES_VX_ENSGRID_PROB_RETOP: 2 - TN_VX_ENSGRID_PROB_REFC: "run_ensgridvx_prob_refc" - MAXTRIES_VX_ENSGRID_PROB_REFC: 2 - PPN_VX_ENSGRID_PROB: 1 - MEM_VX_ENSGRID_PROB: 2G - WTIME_VX_ENSGRID_PROB: 01:00:00 - MAXTRIES_VX_ENSGRID_PROB: 2 +task_run_MET_GridStat_vx_ensmean_APCP01h: + TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP01H: "run_MET_GridStat_vx_ensmean_APCP01h" + NNODES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP01H: 1 + PPN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP01H: 1 + MEM_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP01H: 2G + WTIME_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP01H: 01:00:00 + MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP01H: 2 #---------------------------- -# VX_ENSGRID_PROB_03h config parameters +# run_MET_GridStat_vx_ensmean_APCP03h config parameters #----------------------------- -task_run_vx_ensgrid_prob_03h: - TN_VX_ENSGRID_PROB_03h: "run_ensgridvx_prob_03h" - NNODES_VX_ENSGRID_PROB: 1 - PPN_VX_ENSGRID_PROB: 1 - MEM_VX_ENSGRID_PROB: 2G - WTIME_VX_ENSGRID_PROB: 01:00:00 - MAXTRIES_VX_ENSGRID_PROB_03h: 2 +task_run_MET_GridStat_vx_ensmean_APCP03h: + TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP03H: "run_MET_GridStat_vx_ensmean_APCP03h" + NNODES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP03H: 1 + PPN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP03H: 1 + MEM_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP03H: 2G + WTIME_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP03H: 01:00:00 + MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP03H: 2 #---------------------------- -# VX_ENSGRID_PROB_06h config parameters +# run_MET_GridStat_vx_ensmean_APCP06h config parameters #----------------------------- -task_run_vx_ensgrid_prob_06h: - TN_VX_ENSGRID_PROB_06h: "run_ensgridvx_prob_06h" - NNODES_VX_ENSGRID_PROB: 1 - PPN_VX_ENSGRID_PROB: 1 - MEM_VX_ENSGRID_PROB: 2G - WTIME_VX_ENSGRID_PROB: 01:00:00 - MAXTRIES_VX_ENSGRID_PROB_06h: 2 +task_run_MET_GridStat_vx_ensmean_APCP06h: + TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP06H: "run_MET_GridStat_vx_ensmean_APCP06h" + NNODES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP06H: 1 + PPN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP06H: 1 + MEM_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP06H: 2G + WTIME_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP06H: 01:00:00 + MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP06H: 2 #---------------------------- -# VX_ENSGRID_PROB_24h config parameters +# run_MET_GridStat_vx_ensmean_APCP24h config parameters #----------------------------- -task_run_vx_ensgrid_prob_24h: - TN_VX_ENSGRID_PROB_24h: "run_ensgridvx_prob_24h" - NNODES_VX_ENSGRID_PROB: 1 - PPN_VX_ENSGRID_PROB: 1 - MEM_VX_ENSGRID_PROB: 2G - WTIME_VX_ENSGRID_PROB: 01:00:00 - MAXTRIES_VX_ENSGRID_PROB_24h: 2 +task_run_MET_GridStat_vx_ensmean_APCP24h: + TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP24H: "run_MET_GridStat_vx_ensmean_APCP24h" + NNODES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP24H: 1 + PPN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP24H: 1 + MEM_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP24H: 2G + WTIME_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP24H: 01:00:00 + MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP24H: 2 #---------------------------- -# VX_ENSPOINT config parameters +# run_MET_PointStat_vx_ensmean_SFC_UPA config parameters #----------------------------- -task_run_vx_enspoint: - TN_VX_ENSPOINT: "run_enspointvx" - NNODES_VX_ENSPOINT: 1 - PPN_VX_ENSPOINT: 1 - MEM_VX_ENSPOINT: 2G - WTIME_VX_ENSPOINT: 01:00:00 - MAXTRIES_VX_ENSPOINT: 2 +task_run_MET_PointStat_vx_ensmean_SFC_UPA: + TN_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC_UPA: "run_MET_PointStat_vx_ensmean_SFC_UPA" + NNODES_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC_UPA: 1 + PPN_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC_UPA: 1 + MEM_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC_UPA: 2G + WTIME_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC_UPA: 01:00:00 + MAXTRIES_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC_UPA: 2 #---------------------------- -# VX_ENSPOINT_MEAN config parameters +# run_MET_GridStat_vx_ensprob_APCP01h config parameters #----------------------------- -task_run_vx_enspoint_mean: - TN_VX_ENSPOINT_MEAN: "run_enspointvx_mean" - NNODES_VX_ENSPOINT_MEAN: 1 - PPN_VX_ENSPOINT_MEAN: 1 - MEM_VX_ENSPOINT_MEAN: 2G - WTIME_VX_ENSPOINT_MEAN: 01:00:00 - MAXTRIES_VX_ENSPOINT_MEAN: 2 +task_run_MET_GridStat_vx_ensprob_APCP01h: + TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP01H: "run_MET_GridStat_vx_ensprob_APCP01h" + NNODES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP01H: 1 + PPN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP01H: 1 + MEM_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP01H: 2G + WTIME_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP01H: 01:00:00 + MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP01H: 2 #---------------------------- -# VX_ENSPOINT_PROB config parameters +# run_MET_GridStat_vx_ensprob_APCP03h config parameters #----------------------------- -task_run_vx_enspoint_prob: - TN_VX_ENSPOINT_PROB: "run_enspointvx_prob" - NNODES_VX_ENSPOINT_PROB: 1 - PPN_VX_ENSPOINT_PROB: 1 - MEM_VX_ENSPOINT_PROB: 2G - WTIME_VX_ENSPOINT_PROB: 01:00:00 - MAXTRIES_VX_ENSPOINT_PROB: 2 +task_run_MET_GridStat_vx_ensprob_APCP03h: + TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP03H: "run_MET_GridStat_vx_ensprob_APCP03h" + NNODES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP03H: 1 + PPN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP03H: 1 + MEM_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP03H: 2G + WTIME_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP03H: 01:00:00 + MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP03H: 2 #---------------------------- -# PLOT_ALLVARS config parameters +# run_MET_GridStat_vx_ensprob_APCP06h config parameters #----------------------------- -task_plot_allvars: - TN_PLOT_ALLVARS: "plot_allvars" - NNODES_PLOT_ALLVARS: 1 - PPN_PLOT_ALLVARS: 24 - WTIME_PLOT_ALLVARS: 01:00:00 - MAXTRIES_PLOT_ALLVARS: 1 - #------------------------------------------------------------------------- - # Reference experiment's COMOUT directory. This is where the GRIB2 files - # from postprocessing are located. Make this a template to compare - # multiple cycle and dates. COMOUT_REF should end with: - # nco mode: $PDY/$cyc - # community mode: $PDY$cyc/postprd - # We don't do this inside the code, so that we can compare nco vs com runs. - #------------------------------------------------------------------------- - COMOUT_REF: "" - #------------------------------ - # Plot fcts start and increment - #------------------------------ - PLOT_FCST_START: 0 - PLOT_FCST_INC: 3 - #----------------------------------- - # By default the end is FCST_LEN_HRS - #----------------------------------- - PLOT_FCST_END: "" - #------------------------------------------------------------------------------ - # Domains to plot. Currently supported are either "conus" or "regional" or both - #------------------------------------------------------------------------------- - PLOT_DOMAINS: ["conus"] +task_run_MET_GridStat_vx_ensprob_APCP06h: + TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP06H: "run_MET_GridStat_vx_ensprob_APCP06h" + NNODES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP06H: 1 + PPN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP06H: 1 + MEM_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP06H: 2G + WTIME_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP06H: 01:00:00 + MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP06H: 2 + +#---------------------------- +# run_MET_GridStat_vx_ensprob_APCP24h config parameters +#----------------------------- +task_run_MET_GridStat_vx_ensprob_APCP24h: + TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP24H: "run_MET_GridStat_vx_ensprob_APCP24h" + NNODES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP24H: 1 + PPN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP24H: 1 + MEM_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP24H: 2G + WTIME_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP24H: 01:00:00 + MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP24H: 2 +#---------------------------- +# run_MET_GridStat_vx_ensprob_REFC config parameters +#----------------------------- +task_run_MET_GridStat_vx_ensprob_REFC: + TN_RUN_MET_GRIDSTAT_VX_ENSPROB_REFC: "run_MET_GridStat_vx_ensprob_REFC" + NNODES_RUN_MET_GRIDSTAT_VX_ENSPROB_REFC: 1 + PPN_RUN_MET_GRIDSTAT_VX_ENSPROB_REFC: 1 + MEM_RUN_MET_GRIDSTAT_VX_ENSPROB_REFC: 2G + WTIME_RUN_MET_GRIDSTAT_VX_ENSPROB_REFC: 01:00:00 + MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSPROB_REFC: 2 + +#---------------------------- +# run_MET_GridStat_vx_ensprob_RETOP config parameters +#----------------------------- +task_run_MET_GridStat_vx_ensprob_RETOP: + TN_RUN_MET_GRIDSTAT_VX_ENSPROB_RETOP: "run_MET_GridStat_vx_ensprob_RETOP" + NNODES_RUN_MET_GRIDSTAT_VX_ENSPROB_RETOP: 1 + PPN_RUN_MET_GRIDSTAT_VX_ENSPROB_RETOP: 1 + MEM_RUN_MET_GRIDSTAT_VX_ENSPROB_RETOP: 2G + WTIME_RUN_MET_GRIDSTAT_VX_ENSPROB_RETOP: 01:00:00 + MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSPROB_RETOP: 2 + +#---------------------------- +# run_MET_PointStat_vx_ensprob_SFC_UPA config parameters +#----------------------------- +task_run_MET_PointStat_vx_ensprob_SFC_UPA: + TN_RUN_MET_POINTSTAT_VX_ENSPROB_SFC_UPA: "run_MET_PointStat_vx_ensprob_SFC_UPA" + NNODES_RUN_MET_POINTSTAT_VX_ENSPROB_SFC_UPA: 1 + PPN_RUN_MET_POINTSTAT_VX_ENSPROB_SFC_UPA: 1 + MEM_RUN_MET_POINTSTAT_VX_ENSPROB_SFC_UPA: 2G + WTIME_RUN_MET_POINTSTAT_VX_ENSPROB_SFC_UPA: 01:00:00 + MAXTRIES_RUN_MET_POINTSTAT_VX_ENSPROB_SFC_UPA: 2 #---------------------------- # global config parameters From dfd112266f6db23075c76745c00592d952d418f1 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Fri, 3 Feb 2023 14:33:41 -0700 Subject: [PATCH 006/119] Change vx task names to better match final ones we want. --- ...AL_RUN_VX_ENSGRID => JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID} | 2 +- ..._RUN_VX_ENSPOINT => JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT} | 2 +- ...{JREGIONAL_RUN_VX_GRIDSTAT => JREGIONAL_RUN_MET_GRIDSTAT_VX} | 2 +- ...UN_VX_ENSGRID_MEAN => JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN} | 2 +- ...UN_VX_ENSGRID_PROB => JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB} | 2 +- ...REGIONAL_RUN_VX_POINTSTAT => JREGIONAL_RUN_MET_POINTSTAT_VX} | 2 +- ..._VX_ENSPOINT_MEAN => JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN} | 2 +- ..._VX_ENSPOINT_PROB => JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB} | 2 +- ...vx_ensgrid.sh => exregional_run_MET_EnsembleStat_vx_grid.sh} | 0 ..._enspoint.sh => exregional_run_MET_EnsembleStat_vx_point.sh} | 0 ...nal_run_vx_gridstat.sh => exregional_run_MET_GridStat_vx.sh} | 0 ...nsgrid_mean.sh => exregional_run_MET_GridStat_vx_ensmean.sh} | 0 ...nsgrid_prob.sh => exregional_run_MET_GridStat_vx_ensprob.sh} | 0 ...l_run_vx_pointstat.sh => exregional_run_MET_PointStat_vx.sh} | 0 ...point_mean.sh => exregional_run_MET_PointStat_vx_ensmean.sh} | 0 ...point_prob.sh => exregional_run_MET_PointStat_vx_ensprob.sh} | 0 16 files changed, 8 insertions(+), 8 deletions(-) rename jobs/{JREGIONAL_RUN_VX_ENSGRID => JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID} (97%) rename jobs/{JREGIONAL_RUN_VX_ENSPOINT => JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT} (97%) rename jobs/{JREGIONAL_RUN_VX_GRIDSTAT => JREGIONAL_RUN_MET_GRIDSTAT_VX} (98%) rename jobs/{JREGIONAL_RUN_VX_ENSGRID_MEAN => JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN} (97%) rename jobs/{JREGIONAL_RUN_VX_ENSGRID_PROB => JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB} (97%) rename jobs/{JREGIONAL_RUN_VX_POINTSTAT => JREGIONAL_RUN_MET_POINTSTAT_VX} (97%) rename jobs/{JREGIONAL_RUN_VX_ENSPOINT_MEAN => JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN} (97%) rename jobs/{JREGIONAL_RUN_VX_ENSPOINT_PROB => JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB} (97%) rename scripts/{exregional_run_vx_ensgrid.sh => exregional_run_MET_EnsembleStat_vx_grid.sh} (100%) rename scripts/{exregional_run_vx_enspoint.sh => exregional_run_MET_EnsembleStat_vx_point.sh} (100%) rename scripts/{exregional_run_vx_gridstat.sh => exregional_run_MET_GridStat_vx.sh} (100%) rename scripts/{exregional_run_vx_ensgrid_mean.sh => exregional_run_MET_GridStat_vx_ensmean.sh} (100%) rename scripts/{exregional_run_vx_ensgrid_prob.sh => exregional_run_MET_GridStat_vx_ensprob.sh} (100%) rename scripts/{exregional_run_vx_pointstat.sh => exregional_run_MET_PointStat_vx.sh} (100%) rename scripts/{exregional_run_vx_enspoint_mean.sh => exregional_run_MET_PointStat_vx_ensmean.sh} (100%) rename scripts/{exregional_run_vx_enspoint_prob.sh => exregional_run_MET_PointStat_vx_ensprob.sh} (100%) diff --git a/jobs/JREGIONAL_RUN_VX_ENSGRID b/jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID similarity index 97% rename from jobs/JREGIONAL_RUN_VX_ENSGRID rename to jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID index 0ad9445c1a..b80ae44d7c 100755 --- a/jobs/JREGIONAL_RUN_VX_ENSGRID +++ b/jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID @@ -63,7 +63,7 @@ on gridded fields by initialization time for all forecast hours. # #----------------------------------------------------------------------- # -$SCRIPTSdir/exregional_run_vx_ensgrid.sh || \ +$SCRIPTSdir/exregional_run_MET_EnsembleStat_vx_grid.sh || \ print_err_msg_exit "\ Call to ex-script corresponding to J-job \"${scrfunc_fn}\" failed." # diff --git a/jobs/JREGIONAL_RUN_VX_ENSPOINT b/jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT similarity index 97% rename from jobs/JREGIONAL_RUN_VX_ENSPOINT rename to jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT index 412416729e..b59f122973 100755 --- a/jobs/JREGIONAL_RUN_VX_ENSPOINT +++ b/jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT @@ -54,7 +54,7 @@ by initialitation time for all forecast hours. # #----------------------------------------------------------------------- # -$SCRIPTSdir/exregional_run_vx_enspoint.sh || \ +$SCRIPTSdir/exregional_run_MET_EnsembleStat_vx_point.sh || \ print_err_msg_exit "\ Call to ex-script corresponding to J-job \"${scrfunc_fn}\" failed." # diff --git a/jobs/JREGIONAL_RUN_VX_GRIDSTAT b/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX similarity index 98% rename from jobs/JREGIONAL_RUN_VX_GRIDSTAT rename to jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX index f93c196d4c..c8f80eb016 100755 --- a/jobs/JREGIONAL_RUN_VX_GRIDSTAT +++ b/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX @@ -63,7 +63,7 @@ by initialization time for all forecast hours. # #----------------------------------------------------------------------- # -$SCRIPTSdir/exregional_run_vx_gridstat.sh || \ +$SCRIPTSdir/exregional_run_MET_GridStat_vx.sh || \ print_err_msg_exit "\ Call to ex-script corresponding to J-job \"${scrfunc_fn}\" failed." # diff --git a/jobs/JREGIONAL_RUN_VX_ENSGRID_MEAN b/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN similarity index 97% rename from jobs/JREGIONAL_RUN_VX_ENSGRID_MEAN rename to jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN index a72f7b1bfb..8d911a552b 100755 --- a/jobs/JREGIONAL_RUN_VX_ENSGRID_MEAN +++ b/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN @@ -63,7 +63,7 @@ on gridded fields by initialization time for all forecast hours. # #----------------------------------------------------------------------- # -$SCRIPTSdir/exregional_run_vx_ensgrid_mean.sh || \ +$SCRIPTSdir/exregional_run_MET_GridStat_vx_ensmean.sh || \ print_err_msg_exit "\ Call to ex-script corresponding to J-job \"${scrfunc_fn}\" failed." # diff --git a/jobs/JREGIONAL_RUN_VX_ENSGRID_PROB b/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB similarity index 97% rename from jobs/JREGIONAL_RUN_VX_ENSGRID_PROB rename to jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB index e99ec56676..00377af324 100755 --- a/jobs/JREGIONAL_RUN_VX_ENSGRID_PROB +++ b/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB @@ -63,7 +63,7 @@ on gridded fields by initialization time for all forecast hours. # #----------------------------------------------------------------------- # -$SCRIPTSdir/exregional_run_vx_ensgrid_prob.sh || \ +$SCRIPTSdir/exregional_run_MET_GridStat_vx_ensprob.sh || \ print_err_msg_exit "\ Call to ex-script corresponding to J-job \"${scrfunc_fn}\" failed." # diff --git a/jobs/JREGIONAL_RUN_VX_POINTSTAT b/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX similarity index 97% rename from jobs/JREGIONAL_RUN_VX_POINTSTAT rename to jobs/JREGIONAL_RUN_MET_POINTSTAT_VX index 8ebce34d2c..ffa64147b7 100755 --- a/jobs/JREGIONAL_RUN_VX_POINTSTAT +++ b/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX @@ -54,7 +54,7 @@ by initialitation time for all forecast hours. # #----------------------------------------------------------------------- # -$SCRIPTSdir/exregional_run_vx_pointstat.sh || \ +$SCRIPTSdir/exregional_run_MET_PointStat_vx.sh || \ print_err_msg_exit "\ Call to ex-script corresponding to J-job \"${scrfunc_fn}\" failed." # diff --git a/jobs/JREGIONAL_RUN_VX_ENSPOINT_MEAN b/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN similarity index 97% rename from jobs/JREGIONAL_RUN_VX_ENSPOINT_MEAN rename to jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN index 06f42d11dc..78b0660c00 100755 --- a/jobs/JREGIONAL_RUN_VX_ENSPOINT_MEAN +++ b/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN @@ -54,7 +54,7 @@ by initialitation time for all forecast hours. # #----------------------------------------------------------------------- # -$SCRIPTSdir/exregional_run_vx_enspoint_mean.sh || \ +$SCRIPTSdir/exregional_run_MET_PointStat_vx_ensmean.sh || \ print_err_msg_exit "\ Call to ex-script corresponding to J-job \"${scrfunc_fn}\" failed." # diff --git a/jobs/JREGIONAL_RUN_VX_ENSPOINT_PROB b/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB similarity index 97% rename from jobs/JREGIONAL_RUN_VX_ENSPOINT_PROB rename to jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB index 1935f5599b..43083ba577 100755 --- a/jobs/JREGIONAL_RUN_VX_ENSPOINT_PROB +++ b/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB @@ -54,7 +54,7 @@ by initialitation time for all forecast hours. # #----------------------------------------------------------------------- # -$SCRIPTSdir/exregional_run_vx_enspoint_prob.sh || \ +$SCRIPTSdir/exregional_run_MET_PointStat_vx_ensprob.sh || \ print_err_msg_exit "\ Call to ex-script corresponding to J-job \"${scrfunc_fn}\" failed." # diff --git a/scripts/exregional_run_vx_ensgrid.sh b/scripts/exregional_run_MET_EnsembleStat_vx_grid.sh similarity index 100% rename from scripts/exregional_run_vx_ensgrid.sh rename to scripts/exregional_run_MET_EnsembleStat_vx_grid.sh diff --git a/scripts/exregional_run_vx_enspoint.sh b/scripts/exregional_run_MET_EnsembleStat_vx_point.sh similarity index 100% rename from scripts/exregional_run_vx_enspoint.sh rename to scripts/exregional_run_MET_EnsembleStat_vx_point.sh diff --git a/scripts/exregional_run_vx_gridstat.sh b/scripts/exregional_run_MET_GridStat_vx.sh similarity index 100% rename from scripts/exregional_run_vx_gridstat.sh rename to scripts/exregional_run_MET_GridStat_vx.sh diff --git a/scripts/exregional_run_vx_ensgrid_mean.sh b/scripts/exregional_run_MET_GridStat_vx_ensmean.sh similarity index 100% rename from scripts/exregional_run_vx_ensgrid_mean.sh rename to scripts/exregional_run_MET_GridStat_vx_ensmean.sh diff --git a/scripts/exregional_run_vx_ensgrid_prob.sh b/scripts/exregional_run_MET_GridStat_vx_ensprob.sh similarity index 100% rename from scripts/exregional_run_vx_ensgrid_prob.sh rename to scripts/exregional_run_MET_GridStat_vx_ensprob.sh diff --git a/scripts/exregional_run_vx_pointstat.sh b/scripts/exregional_run_MET_PointStat_vx.sh similarity index 100% rename from scripts/exregional_run_vx_pointstat.sh rename to scripts/exregional_run_MET_PointStat_vx.sh diff --git a/scripts/exregional_run_vx_enspoint_mean.sh b/scripts/exregional_run_MET_PointStat_vx_ensmean.sh similarity index 100% rename from scripts/exregional_run_vx_enspoint_mean.sh rename to scripts/exregional_run_MET_PointStat_vx_ensmean.sh diff --git a/scripts/exregional_run_vx_enspoint_prob.sh b/scripts/exregional_run_MET_PointStat_vx_ensprob.sh similarity index 100% rename from scripts/exregional_run_vx_enspoint_prob.sh rename to scripts/exregional_run_MET_PointStat_vx_ensprob.sh From 1ba6e283e7994bb294dd75e58b707dcabb5220f2 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Wed, 15 Feb 2023 17:23:16 -0700 Subject: [PATCH 007/119] Modify the way the metplus log files are named to be in line with what the DTC team wants. --- parm/FV3LAM_wflow.xml | 7 +++++++ parm/metplus/EnsembleStat_conus_sfc.conf | 2 +- parm/metplus/EnsembleStat_upper_air.conf | 2 +- parm/metplus/PointStat_conus_sfc.conf | 2 +- parm/metplus/PointStat_conus_sfc_mean.conf | 2 +- parm/metplus/PointStat_conus_sfc_prob.conf | 2 +- parm/metplus/PointStat_upper_air.conf | 2 +- parm/metplus/PointStat_upper_air_mean.conf | 2 +- parm/metplus/PointStat_upper_air_prob.conf | 2 +- ...exregional_run_MET_EnsembleStat_vx_grid.sh | 4 ++-- ...xregional_run_MET_EnsembleStat_vx_point.sh | 2 +- scripts/exregional_run_MET_GridStat_vx.sh | 19 +++++++------------ .../exregional_run_MET_GridStat_vx_ensmean.sh | 4 ++-- .../exregional_run_MET_GridStat_vx_ensprob.sh | 4 ++-- scripts/exregional_run_MET_PointStat_vx.sh | 6 ++---- ...exregional_run_MET_PointStat_vx_ensmean.sh | 2 +- ...exregional_run_MET_PointStat_vx_ensprob.sh | 3 +-- 17 files changed, 33 insertions(+), 34 deletions(-) diff --git a/parm/FV3LAM_wflow.xml b/parm/FV3LAM_wflow.xml index 24bdeb8091..dd78556e0e 100644 --- a/parm/FV3LAM_wflow.xml +++ b/parm/FV3LAM_wflow.xml @@ -924,6 +924,7 @@ it, we'd have to include more jinja if-statements here. FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} VARAPCP ACCUM01 + USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} {%- if do_ensemble %} SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} ENSMEM_INDX#{{ ensmem_indx_name }}# @@ -975,6 +976,7 @@ it, we'd have to include more jinja if-statements here. FHR {% for h in range(3, fcst_len_hrs+1, 3) %}{{ " %02d" % h }}{% endfor %} VARAPCP ACCUM03 + USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} {%- if do_ensemble %} SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} ENSMEM_INDX#{{ ensmem_indx_name }}# @@ -1016,6 +1018,7 @@ it, we'd have to include more jinja if-statements here. FHR {% for h in range(6, fcst_len_hrs+1, 6) %}{{ " %02d" % h }}{% endfor %} VARAPCP ACCUM06 + USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} {%- if do_ensemble %} SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} ENSMEM_INDX#{{ ensmem_indx_name }}# @@ -1057,6 +1060,7 @@ it, we'd have to include more jinja if-statements here. FHR {% for h in range(24, fcst_len_hrs+1, 24) %}{{ " %02d" % h }}{% endfor %} VARAPCP ACCUM24 + USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} {%- if do_ensemble %} SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} ENSMEM_INDX#{{ ensmem_indx_name }}# @@ -1096,6 +1100,7 @@ it, we'd have to include more jinja if-statements here. LOGDIR&LOGDIR; FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} VARREFC + USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} {%- if do_ensemble %} SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} ENSMEM_INDX#{{ ensmem_indx_name }}# @@ -1145,6 +1150,7 @@ it, we'd have to include more jinja if-statements here. LOGDIR&LOGDIR; FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} VARRETOP + USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} {%- if do_ensemble %} SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} ENSMEM_INDX#{{ ensmem_indx_name }}# @@ -1195,6 +1201,7 @@ it, we'd have to include more jinja if-statements here. subcyc@M LOGDIR&LOGDIR; FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} {%- if do_ensemble %} SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} ENSMEM_INDX#{{ ensmem_indx_name }}# diff --git a/parm/metplus/EnsembleStat_conus_sfc.conf b/parm/metplus/EnsembleStat_conus_sfc.conf index 1cd9080aec..b8ee60e16a 100644 --- a/parm/metplus/EnsembleStat_conus_sfc.conf +++ b/parm/metplus/EnsembleStat_conus_sfc.conf @@ -347,7 +347,7 @@ ENSEMBLE_STAT_CLIMO_STDEV_INPUT_TEMPLATE = ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat # Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_sfc +LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_SFC_{ENV[CDATE]} # Specify where the location and name of the final metplus_final.conf METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat/metplus_final.conus_surface.conf diff --git a/parm/metplus/EnsembleStat_upper_air.conf b/parm/metplus/EnsembleStat_upper_air.conf index 7a708d8410..536ea3788f 100644 --- a/parm/metplus/EnsembleStat_upper_air.conf +++ b/parm/metplus/EnsembleStat_upper_air.conf @@ -417,7 +417,7 @@ ENSEMBLE_STAT_CLIMO_STDEV_INPUT_TEMPLATE = ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat # Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_upa +LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_UPA_{ENV[CDATE]} # Specify where the location and name of the final metplus_final.conf METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat/metplus_final.upper_air.conf diff --git a/parm/metplus/PointStat_conus_sfc.conf b/parm/metplus/PointStat_conus_sfc.conf index 89e211c49a..b8a0f3bd42 100644 --- a/parm/metplus/PointStat_conus_sfc.conf +++ b/parm/metplus/PointStat_conus_sfc.conf @@ -292,7 +292,7 @@ POINT_STAT_CLIMO_STDEV_INPUT_TEMPLATE = POINT_STAT_OUTPUT_TEMPLATE = metprd/point_stat # Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_sfc +LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_SFC{ENV[USCORE_ENSMEM_NAME_OR_NULL]}_{ENV[CDATE]} # Specify where the location and name of the final metplus_final.conf METPLUS_CONF={OUTPUT_BASE}/metprd/point_stat/metplus_final.conus_surface{ENV[DOT_ENSMEM]}.conf diff --git a/parm/metplus/PointStat_conus_sfc_mean.conf b/parm/metplus/PointStat_conus_sfc_mean.conf index 9bc8b30c57..7f98105a06 100644 --- a/parm/metplus/PointStat_conus_sfc_mean.conf +++ b/parm/metplus/PointStat_conus_sfc_mean.conf @@ -263,7 +263,7 @@ POINT_STAT_CLIMO_STDEV_INPUT_TEMPLATE = POINT_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_mean # Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_sfc +LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_SFC_ensmean_{ENV[CDATE]} # Specify where the location and name of the final metplus_final.conf METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_mean/metplus_final.conus_surface.conf diff --git a/parm/metplus/PointStat_conus_sfc_prob.conf b/parm/metplus/PointStat_conus_sfc_prob.conf index 0374d034be..102313cb1b 100644 --- a/parm/metplus/PointStat_conus_sfc_prob.conf +++ b/parm/metplus/PointStat_conus_sfc_prob.conf @@ -439,7 +439,7 @@ POINT_STAT_CLIMO_STDEV_INPUT_TEMPLATE = POINT_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_prob # Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_sfc +LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_SFC_ensprob_{ENV[CDATE]} # Specify where the location and name of the final metplus_final.conf METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_prob/metplus_final.conus_surface.conf diff --git a/parm/metplus/PointStat_upper_air.conf b/parm/metplus/PointStat_upper_air.conf index 8406274fca..6b72cbcc15 100644 --- a/parm/metplus/PointStat_upper_air.conf +++ b/parm/metplus/PointStat_upper_air.conf @@ -289,7 +289,7 @@ POINT_STAT_CLIMO_STDEV_INPUT_TEMPLATE = POINT_STAT_OUTPUT_TEMPLATE = metprd/point_stat # Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_upa +LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_UPA{ENV[USCORE_ENSMEM_NAME_OR_NULL]}_{ENV[CDATE]} # Specify where the location and name of the final metplus_final.conf METPLUS_CONF={OUTPUT_BASE}/metprd/point_stat/metplus_final.upper_air{ENV[DOT_ENSMEM]}.conf diff --git a/parm/metplus/PointStat_upper_air_mean.conf b/parm/metplus/PointStat_upper_air_mean.conf index c2f181c395..924b55b722 100644 --- a/parm/metplus/PointStat_upper_air_mean.conf +++ b/parm/metplus/PointStat_upper_air_mean.conf @@ -339,7 +339,7 @@ POINT_STAT_CLIMO_STDEV_INPUT_TEMPLATE = POINT_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_mean # Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_upa +LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_UPA_ensmean_{ENV[CDATE]} # Specify where the location and name of the final metplus_final.conf METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_mean/metplus_final.upper_air.conf diff --git a/parm/metplus/PointStat_upper_air_prob.conf b/parm/metplus/PointStat_upper_air_prob.conf index 0e65d35468..3bb619056a 100644 --- a/parm/metplus/PointStat_upper_air_prob.conf +++ b/parm/metplus/PointStat_upper_air_prob.conf @@ -563,7 +563,7 @@ POINT_STAT_CLIMO_STDEV_INPUT_TEMPLATE = POINT_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_prob # Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_upa +LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_UPA_ensprob_{ENV[CDATE]} # Specify where the location and name of the final metplus_final.conf METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_prob/metplus_final.upper_air.conf diff --git a/scripts/exregional_run_MET_EnsembleStat_vx_grid.sh b/scripts/exregional_run_MET_EnsembleStat_vx_grid.sh index 75e301176e..27b37e5ee8 100755 --- a/scripts/exregional_run_MET_EnsembleStat_vx_grid.sh +++ b/scripts/exregional_run_MET_EnsembleStat_vx_grid.sh @@ -117,9 +117,9 @@ export DOT_ENSMEM=${dot_ensmem} # if [ ${VAR} == "APCP" ]; then - LOG_SUFFIX=ensgrid_${CDATE}_${VAR}_${ACCUM}h + LOG_SUFFIX=ensemblestat_${VAR}${ACCUM}h_${CDATE} else - LOG_SUFFIX=ensgrid_${CDATE}_${VAR} + LOG_SUFFIX=ensemblestat_${VAR}_${CDATE} fi # diff --git a/scripts/exregional_run_MET_EnsembleStat_vx_point.sh b/scripts/exregional_run_MET_EnsembleStat_vx_point.sh index 524726c23e..1047a5b57c 100755 --- a/scripts/exregional_run_MET_EnsembleStat_vx_point.sh +++ b/scripts/exregional_run_MET_EnsembleStat_vx_point.sh @@ -111,7 +111,7 @@ export DOT_ENSMEM=${dot_ensmem} # #----------------------------------------------------------------------- # -LOG_SUFFIX=enspoint_${CDATE} +LOG_SUFFIX="ensemblestat" # #----------------------------------------------------------------------- diff --git a/scripts/exregional_run_MET_GridStat_vx.sh b/scripts/exregional_run_MET_GridStat_vx.sh index f325a1de4a..7e7ee05826 100755 --- a/scripts/exregional_run_MET_GridStat_vx.sh +++ b/scripts/exregional_run_MET_GridStat_vx.sh @@ -108,20 +108,15 @@ export DOT_ENSMEM=${dot_ensmem} # #----------------------------------------------------------------------- # -if [[ ${DO_ENSEMBLE} == "FALSE" ]]; then - if [ ${VAR} == "APCP" ]; then - LOG_SUFFIX=gridstat_${CDATE}_${VAR}_${ACCUM}h - else - LOG_SUFFIX=gridstat_${CDATE}_${VAR} - fi -elif [[ ${DO_ENSEMBLE} == "TRUE" ]]; then +if [ ${VAR} == "APCP" ]; then + LOG_SUFFIX=gridstat_${VAR}${ACCUM}h${USCORE_ENSMEM_NAME_OR_NULL}_${CDATE} +else + LOG_SUFFIX=gridstat_${VAR}${USCORE_ENSMEM_NAME_OR_NULL}_${CDATE} +fi + +if [[ ${DO_ENSEMBLE} == "TRUE" ]]; then ENSMEM=`echo ${SLASH_ENSMEM_SUBDIR} | cut -d"/" -f2` VX_FCST_MODEL_NAME=${VX_FCST_MODEL_NAME}_${ENSMEM} - if [ ${VAR} == "APCP" ]; then - LOG_SUFFIX=gridstat_${CDATE}_${ENSMEM}_${VAR}_${ACCUM}h - else - LOG_SUFFIX=gridstat_${CDATE}_${ENSMEM}_${VAR} - fi fi # diff --git a/scripts/exregional_run_MET_GridStat_vx_ensmean.sh b/scripts/exregional_run_MET_GridStat_vx_ensmean.sh index 2f0bde5118..73993f2587 100755 --- a/scripts/exregional_run_MET_GridStat_vx_ensmean.sh +++ b/scripts/exregional_run_MET_GridStat_vx_ensmean.sh @@ -114,9 +114,9 @@ export DOT_ENSMEM=${dot_ensmem} # if [ ${VAR} == "APCP" ]; then - LOG_SUFFIX=ensgrid_mean_${CDATE}_${VAR}_${ACCUM}h + LOG_SUFFIX=gridstat_${VAR}${ACCUM}h_ensmean_${CDATE} else - LOG_SUFFIX=ensgrid_mean_${CDATE}_${VAR} + LOG_SUFFIX=gridstat_${VAR}_ensmean_${CDATE} fi # diff --git a/scripts/exregional_run_MET_GridStat_vx_ensprob.sh b/scripts/exregional_run_MET_GridStat_vx_ensprob.sh index 170b26ad64..9cad7f7b05 100755 --- a/scripts/exregional_run_MET_GridStat_vx_ensprob.sh +++ b/scripts/exregional_run_MET_GridStat_vx_ensprob.sh @@ -114,9 +114,9 @@ export DOT_ENSMEM=${dot_ensmem} # if [ ${VAR} == "APCP" ]; then - LOG_SUFFIX=ensgrid_prob_${CDATE}_${VAR}_${ACCUM}h + LOG_SUFFIX=gridstat_${VAR}${ACCUM}h_ensprob_${CDATE} else - LOG_SUFFIX=ensgrid_prob_${CDATE}_${VAR} + LOG_SUFFIX=gridstat_${VAR}_ensprob_${CDATE} fi # diff --git a/scripts/exregional_run_MET_PointStat_vx.sh b/scripts/exregional_run_MET_PointStat_vx.sh index 8c83309f1e..52de7790db 100755 --- a/scripts/exregional_run_MET_PointStat_vx.sh +++ b/scripts/exregional_run_MET_PointStat_vx.sh @@ -108,12 +108,10 @@ export DOT_ENSMEM=${dot_ensmem} # #----------------------------------------------------------------------- # -if [[ ${DO_ENSEMBLE} == "FALSE" ]]; then - LOG_SUFFIX=pointstat_${CDATE} -elif [[ ${DO_ENSEMBLE} == "TRUE" ]]; then +LOG_SUFFIX="pointstat" +if [[ ${DO_ENSEMBLE} == "TRUE" ]]; then ENSMEM=`echo ${SLASH_ENSMEM_SUBDIR} | cut -d"/" -f2` VX_FCST_MODEL_NAME=${VX_FCST_MODEL_NAME}_${ENSMEM} - LOG_SUFFIX=pointstat_${CDATE}_${ENSMEM} fi # diff --git a/scripts/exregional_run_MET_PointStat_vx_ensmean.sh b/scripts/exregional_run_MET_PointStat_vx_ensmean.sh index c2272bb051..799dc76587 100755 --- a/scripts/exregional_run_MET_PointStat_vx_ensmean.sh +++ b/scripts/exregional_run_MET_PointStat_vx_ensmean.sh @@ -112,7 +112,7 @@ export DOT_ENSMEM=${dot_ensmem} # #----------------------------------------------------------------------- # -LOG_SUFFIX=enspoint_mean_${CDATE} +LOG_SUFFIX="pointstat" # #----------------------------------------------------------------------- diff --git a/scripts/exregional_run_MET_PointStat_vx_ensprob.sh b/scripts/exregional_run_MET_PointStat_vx_ensprob.sh index 9707eb4875..c5d8ee3b1e 100755 --- a/scripts/exregional_run_MET_PointStat_vx_ensprob.sh +++ b/scripts/exregional_run_MET_PointStat_vx_ensprob.sh @@ -112,8 +112,7 @@ export DOT_ENSMEM=${dot_ensmem} # #----------------------------------------------------------------------- # -LOG_SUFFIX=enspoint_prob_${CDATE} - +LOG_SUFFIX="pointstat" # #----------------------------------------------------------------------- # From da84e39a7426eb5e7531a17715fa87107c52d772 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Thu, 16 Feb 2023 23:42:35 -0700 Subject: [PATCH 008/119] Spacing edits. --- .../verification/config.MET_verification_only_vx.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/WE2E/test_configs/verification/config.MET_verification_only_vx.yaml b/tests/WE2E/test_configs/verification/config.MET_verification_only_vx.yaml index 9b93553ee1..72ac199f91 100644 --- a/tests/WE2E/test_configs/verification/config.MET_verification_only_vx.yaml +++ b/tests/WE2E/test_configs/verification/config.MET_verification_only_vx.yaml @@ -4,14 +4,17 @@ metadata: can successfully run the MET deterministic verification tasks but using staged observation and forecast files (i.e. with other tasks such as pre-processing, forecast, and post-processing deactivated). + user: RUN_ENVIR: community + workflow: PREDEF_GRID_NAME: RRFS_CONUS_25km DATE_FIRST_CYCL: '2019061500' DATE_LAST_CYCL: '2019061500' FCST_LEN_HRS: 6 PREEXISTING_DIR_METHOD: rename + workflow_switches: # # This test assumes that the post-processed forecast files are staged @@ -43,6 +46,7 @@ workflow_switches: # RUN_TASK_VX_GRIDSTAT: true RUN_TASK_VX_POINTSTAT: true + # # In the "verification" section below, we don't explicitly set the location # of the staged forecast files (specified by VX_FCST_INPUT_BASEDIR) because From f734eb16d41cde54effd4882c4174471283704d1 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Fri, 17 Feb 2023 14:49:53 -0700 Subject: [PATCH 009/119] Change names of METplus log files so that tool names are camel case. --- scripts/exregional_run_MET_EnsembleStat_vx_grid.sh | 4 ++-- scripts/exregional_run_MET_EnsembleStat_vx_point.sh | 2 +- scripts/exregional_run_MET_GridStat_vx.sh | 4 ++-- scripts/exregional_run_MET_GridStat_vx_ensmean.sh | 4 ++-- scripts/exregional_run_MET_GridStat_vx_ensprob.sh | 4 ++-- scripts/exregional_run_MET_PointStat_vx.sh | 2 +- scripts/exregional_run_MET_PointStat_vx_ensmean.sh | 2 +- scripts/exregional_run_MET_PointStat_vx_ensprob.sh | 2 +- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/scripts/exregional_run_MET_EnsembleStat_vx_grid.sh b/scripts/exregional_run_MET_EnsembleStat_vx_grid.sh index 27b37e5ee8..6b09f0dfe8 100755 --- a/scripts/exregional_run_MET_EnsembleStat_vx_grid.sh +++ b/scripts/exregional_run_MET_EnsembleStat_vx_grid.sh @@ -117,9 +117,9 @@ export DOT_ENSMEM=${dot_ensmem} # if [ ${VAR} == "APCP" ]; then - LOG_SUFFIX=ensemblestat_${VAR}${ACCUM}h_${CDATE} + LOG_SUFFIX=EnsembleStat_${VAR}${ACCUM}h_${CDATE} else - LOG_SUFFIX=ensemblestat_${VAR}_${CDATE} + LOG_SUFFIX=EnsembleStat_${VAR}_${CDATE} fi # diff --git a/scripts/exregional_run_MET_EnsembleStat_vx_point.sh b/scripts/exregional_run_MET_EnsembleStat_vx_point.sh index 1047a5b57c..88f49c7019 100755 --- a/scripts/exregional_run_MET_EnsembleStat_vx_point.sh +++ b/scripts/exregional_run_MET_EnsembleStat_vx_point.sh @@ -111,7 +111,7 @@ export DOT_ENSMEM=${dot_ensmem} # #----------------------------------------------------------------------- # -LOG_SUFFIX="ensemblestat" +LOG_SUFFIX="EnsembleStat" # #----------------------------------------------------------------------- diff --git a/scripts/exregional_run_MET_GridStat_vx.sh b/scripts/exregional_run_MET_GridStat_vx.sh index 7e7ee05826..b4c57fe108 100755 --- a/scripts/exregional_run_MET_GridStat_vx.sh +++ b/scripts/exregional_run_MET_GridStat_vx.sh @@ -109,9 +109,9 @@ export DOT_ENSMEM=${dot_ensmem} #----------------------------------------------------------------------- # if [ ${VAR} == "APCP" ]; then - LOG_SUFFIX=gridstat_${VAR}${ACCUM}h${USCORE_ENSMEM_NAME_OR_NULL}_${CDATE} + LOG_SUFFIX=GridStat_${VAR}${ACCUM}h${USCORE_ENSMEM_NAME_OR_NULL}_${CDATE} else - LOG_SUFFIX=gridstat_${VAR}${USCORE_ENSMEM_NAME_OR_NULL}_${CDATE} + LOG_SUFFIX=GridStat_${VAR}${USCORE_ENSMEM_NAME_OR_NULL}_${CDATE} fi if [[ ${DO_ENSEMBLE} == "TRUE" ]]; then diff --git a/scripts/exregional_run_MET_GridStat_vx_ensmean.sh b/scripts/exregional_run_MET_GridStat_vx_ensmean.sh index 73993f2587..f53b92d3c3 100755 --- a/scripts/exregional_run_MET_GridStat_vx_ensmean.sh +++ b/scripts/exregional_run_MET_GridStat_vx_ensmean.sh @@ -114,9 +114,9 @@ export DOT_ENSMEM=${dot_ensmem} # if [ ${VAR} == "APCP" ]; then - LOG_SUFFIX=gridstat_${VAR}${ACCUM}h_ensmean_${CDATE} + LOG_SUFFIX=GridStat_${VAR}${ACCUM}h_ensmean_${CDATE} else - LOG_SUFFIX=gridstat_${VAR}_ensmean_${CDATE} + LOG_SUFFIX=GridStat_${VAR}_ensmean_${CDATE} fi # diff --git a/scripts/exregional_run_MET_GridStat_vx_ensprob.sh b/scripts/exregional_run_MET_GridStat_vx_ensprob.sh index 9cad7f7b05..c768490dab 100755 --- a/scripts/exregional_run_MET_GridStat_vx_ensprob.sh +++ b/scripts/exregional_run_MET_GridStat_vx_ensprob.sh @@ -114,9 +114,9 @@ export DOT_ENSMEM=${dot_ensmem} # if [ ${VAR} == "APCP" ]; then - LOG_SUFFIX=gridstat_${VAR}${ACCUM}h_ensprob_${CDATE} + LOG_SUFFIX=GridStat_${VAR}${ACCUM}h_ensprob_${CDATE} else - LOG_SUFFIX=gridstat_${VAR}_ensprob_${CDATE} + LOG_SUFFIX=GridStat_${VAR}_ensprob_${CDATE} fi # diff --git a/scripts/exregional_run_MET_PointStat_vx.sh b/scripts/exregional_run_MET_PointStat_vx.sh index 52de7790db..2a4e0c7a54 100755 --- a/scripts/exregional_run_MET_PointStat_vx.sh +++ b/scripts/exregional_run_MET_PointStat_vx.sh @@ -108,7 +108,7 @@ export DOT_ENSMEM=${dot_ensmem} # #----------------------------------------------------------------------- # -LOG_SUFFIX="pointstat" +LOG_SUFFIX="PointStat" if [[ ${DO_ENSEMBLE} == "TRUE" ]]; then ENSMEM=`echo ${SLASH_ENSMEM_SUBDIR} | cut -d"/" -f2` VX_FCST_MODEL_NAME=${VX_FCST_MODEL_NAME}_${ENSMEM} diff --git a/scripts/exregional_run_MET_PointStat_vx_ensmean.sh b/scripts/exregional_run_MET_PointStat_vx_ensmean.sh index 799dc76587..6fa470e7ef 100755 --- a/scripts/exregional_run_MET_PointStat_vx_ensmean.sh +++ b/scripts/exregional_run_MET_PointStat_vx_ensmean.sh @@ -112,7 +112,7 @@ export DOT_ENSMEM=${dot_ensmem} # #----------------------------------------------------------------------- # -LOG_SUFFIX="pointstat" +LOG_SUFFIX="PointStat" # #----------------------------------------------------------------------- diff --git a/scripts/exregional_run_MET_PointStat_vx_ensprob.sh b/scripts/exregional_run_MET_PointStat_vx_ensprob.sh index c5d8ee3b1e..d01fcf9b5b 100755 --- a/scripts/exregional_run_MET_PointStat_vx_ensprob.sh +++ b/scripts/exregional_run_MET_PointStat_vx_ensprob.sh @@ -112,7 +112,7 @@ export DOT_ENSMEM=${dot_ensmem} # #----------------------------------------------------------------------- # -LOG_SUFFIX="pointstat" +LOG_SUFFIX="PointStat" # #----------------------------------------------------------------------- # From 5c00438aef2a7bd546f0c524e40965195099820c Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Thu, 23 Feb 2023 13:54:52 -0700 Subject: [PATCH 010/119] Rename ex-scripts for vx tasks so that they're all lower case (as required by NCO); also rename vx task top-level sections in config_defaults.yaml so that they're all lower case (to match names of ex-scripts). --- jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID | 2 +- jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT | 2 +- jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX | 2 +- jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN | 2 +- jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB | 2 +- jobs/JREGIONAL_RUN_MET_POINTSTAT_VX | 2 +- jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN | 2 +- jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB | 2 +- ...xregional_run_met_ensemblestat_vx_grid.sh} | 0 ...regional_run_met_ensemblestat_vx_point.sh} | 0 ...x.sh => exregional_run_met_gridstat_vx.sh} | 0 ...exregional_run_met_gridstat_vx_ensmean.sh} | 0 ...exregional_run_met_gridstat_vx_ensprob.sh} | 0 ....sh => exregional_run_met_pointstat_vx.sh} | 0 ...xregional_run_met_pointstat_vx_ensmean.sh} | 0 ...xregional_run_met_pointstat_vx_ensprob.sh} | 0 ush/config_defaults.yaml | 104 +++++++++--------- 17 files changed, 60 insertions(+), 60 deletions(-) rename scripts/{exregional_run_MET_EnsembleStat_vx_grid.sh => exregional_run_met_ensemblestat_vx_grid.sh} (100%) rename scripts/{exregional_run_MET_EnsembleStat_vx_point.sh => exregional_run_met_ensemblestat_vx_point.sh} (100%) rename scripts/{exregional_run_MET_GridStat_vx.sh => exregional_run_met_gridstat_vx.sh} (100%) rename scripts/{exregional_run_MET_GridStat_vx_ensmean.sh => exregional_run_met_gridstat_vx_ensmean.sh} (100%) rename scripts/{exregional_run_MET_GridStat_vx_ensprob.sh => exregional_run_met_gridstat_vx_ensprob.sh} (100%) rename scripts/{exregional_run_MET_PointStat_vx.sh => exregional_run_met_pointstat_vx.sh} (100%) rename scripts/{exregional_run_MET_PointStat_vx_ensmean.sh => exregional_run_met_pointstat_vx_ensmean.sh} (100%) rename scripts/{exregional_run_MET_PointStat_vx_ensprob.sh => exregional_run_met_pointstat_vx_ensprob.sh} (100%) diff --git a/jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID b/jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID index b80ae44d7c..1606744259 100755 --- a/jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID +++ b/jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID @@ -63,7 +63,7 @@ on gridded fields by initialization time for all forecast hours. # #----------------------------------------------------------------------- # -$SCRIPTSdir/exregional_run_MET_EnsembleStat_vx_grid.sh || \ +$SCRIPTSdir/exregional_run_met_ensemblestat_vx_grid.sh || \ print_err_msg_exit "\ Call to ex-script corresponding to J-job \"${scrfunc_fn}\" failed." # diff --git a/jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT b/jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT index b59f122973..0e8df9f2f3 100755 --- a/jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT +++ b/jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT @@ -54,7 +54,7 @@ by initialitation time for all forecast hours. # #----------------------------------------------------------------------- # -$SCRIPTSdir/exregional_run_MET_EnsembleStat_vx_point.sh || \ +$SCRIPTSdir/exregional_run_met_ensemblestat_vx_point.sh || \ print_err_msg_exit "\ Call to ex-script corresponding to J-job \"${scrfunc_fn}\" failed." # diff --git a/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX b/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX index c8f80eb016..920319bdce 100755 --- a/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX +++ b/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX @@ -63,7 +63,7 @@ by initialization time for all forecast hours. # #----------------------------------------------------------------------- # -$SCRIPTSdir/exregional_run_MET_GridStat_vx.sh || \ +$SCRIPTSdir/exregional_run_met_gridstat_vx.sh || \ print_err_msg_exit "\ Call to ex-script corresponding to J-job \"${scrfunc_fn}\" failed." # diff --git a/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN b/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN index 8d911a552b..6cc5001d33 100755 --- a/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN +++ b/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN @@ -63,7 +63,7 @@ on gridded fields by initialization time for all forecast hours. # #----------------------------------------------------------------------- # -$SCRIPTSdir/exregional_run_MET_GridStat_vx_ensmean.sh || \ +$SCRIPTSdir/exregional_run_met_gridstat_vx_ensmean.sh || \ print_err_msg_exit "\ Call to ex-script corresponding to J-job \"${scrfunc_fn}\" failed." # diff --git a/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB b/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB index 00377af324..5d8590c09c 100755 --- a/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB +++ b/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB @@ -63,7 +63,7 @@ on gridded fields by initialization time for all forecast hours. # #----------------------------------------------------------------------- # -$SCRIPTSdir/exregional_run_MET_GridStat_vx_ensprob.sh || \ +$SCRIPTSdir/exregional_run_met_gridstat_vx_ensprob.sh || \ print_err_msg_exit "\ Call to ex-script corresponding to J-job \"${scrfunc_fn}\" failed." # diff --git a/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX b/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX index ffa64147b7..37151ff0fd 100755 --- a/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX +++ b/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX @@ -54,7 +54,7 @@ by initialitation time for all forecast hours. # #----------------------------------------------------------------------- # -$SCRIPTSdir/exregional_run_MET_PointStat_vx.sh || \ +$SCRIPTSdir/exregional_run_met_pointstat_vx.sh || \ print_err_msg_exit "\ Call to ex-script corresponding to J-job \"${scrfunc_fn}\" failed." # diff --git a/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN b/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN index 78b0660c00..a73a475a0c 100755 --- a/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN +++ b/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN @@ -54,7 +54,7 @@ by initialitation time for all forecast hours. # #----------------------------------------------------------------------- # -$SCRIPTSdir/exregional_run_MET_PointStat_vx_ensmean.sh || \ +$SCRIPTSdir/exregional_run_met_pointstat_vx_ensmean.sh || \ print_err_msg_exit "\ Call to ex-script corresponding to J-job \"${scrfunc_fn}\" failed." # diff --git a/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB b/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB index 43083ba577..af4874b560 100755 --- a/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB +++ b/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB @@ -54,7 +54,7 @@ by initialitation time for all forecast hours. # #----------------------------------------------------------------------- # -$SCRIPTSdir/exregional_run_MET_PointStat_vx_ensprob.sh || \ +$SCRIPTSdir/exregional_run_met_pointstat_vx_ensprob.sh || \ print_err_msg_exit "\ Call to ex-script corresponding to J-job \"${scrfunc_fn}\" failed." # diff --git a/scripts/exregional_run_MET_EnsembleStat_vx_grid.sh b/scripts/exregional_run_met_ensemblestat_vx_grid.sh similarity index 100% rename from scripts/exregional_run_MET_EnsembleStat_vx_grid.sh rename to scripts/exregional_run_met_ensemblestat_vx_grid.sh diff --git a/scripts/exregional_run_MET_EnsembleStat_vx_point.sh b/scripts/exregional_run_met_ensemblestat_vx_point.sh similarity index 100% rename from scripts/exregional_run_MET_EnsembleStat_vx_point.sh rename to scripts/exregional_run_met_ensemblestat_vx_point.sh diff --git a/scripts/exregional_run_MET_GridStat_vx.sh b/scripts/exregional_run_met_gridstat_vx.sh similarity index 100% rename from scripts/exregional_run_MET_GridStat_vx.sh rename to scripts/exregional_run_met_gridstat_vx.sh diff --git a/scripts/exregional_run_MET_GridStat_vx_ensmean.sh b/scripts/exregional_run_met_gridstat_vx_ensmean.sh similarity index 100% rename from scripts/exregional_run_MET_GridStat_vx_ensmean.sh rename to scripts/exregional_run_met_gridstat_vx_ensmean.sh diff --git a/scripts/exregional_run_MET_GridStat_vx_ensprob.sh b/scripts/exregional_run_met_gridstat_vx_ensprob.sh similarity index 100% rename from scripts/exregional_run_MET_GridStat_vx_ensprob.sh rename to scripts/exregional_run_met_gridstat_vx_ensprob.sh diff --git a/scripts/exregional_run_MET_PointStat_vx.sh b/scripts/exregional_run_met_pointstat_vx.sh similarity index 100% rename from scripts/exregional_run_MET_PointStat_vx.sh rename to scripts/exregional_run_met_pointstat_vx.sh diff --git a/scripts/exregional_run_MET_PointStat_vx_ensmean.sh b/scripts/exregional_run_met_pointstat_vx_ensmean.sh similarity index 100% rename from scripts/exregional_run_MET_PointStat_vx_ensmean.sh rename to scripts/exregional_run_met_pointstat_vx_ensmean.sh diff --git a/scripts/exregional_run_MET_PointStat_vx_ensprob.sh b/scripts/exregional_run_met_pointstat_vx_ensprob.sh similarity index 100% rename from scripts/exregional_run_MET_PointStat_vx_ensprob.sh rename to scripts/exregional_run_met_pointstat_vx_ensprob.sh diff --git a/ush/config_defaults.yaml b/ush/config_defaults.yaml index 7c8d317ee6..71b5c20c8a 100644 --- a/ush/config_defaults.yaml +++ b/ush/config_defaults.yaml @@ -2078,9 +2078,9 @@ task_get_obs_ndas: MAXTRIES_GET_OBS_NDAS: 1 #---------------------------- -# run_MET_GridStat_vx_APCP01h config parameters +# run_met_gridstat_vx_apcp01h config parameters #----------------------------- -task_run_MET_GridStat_vx_APCP01h: +task_run_met_gridstat_vx_apcp01h: TN_RUN_MET_GRIDSTAT_VX_APCP01h: "run_MET_GridStat_vx_APCP01h" NNODES_RUN_MET_GRIDSTAT_VX_APCP01H: 1 PPN_RUN_MET_GRIDSTAT_VX_APCP01H: 1 @@ -2089,9 +2089,9 @@ task_run_MET_GridStat_vx_APCP01h: MAXTRIES_RUN_MET_GRIDSTAT_VX_APCP01H: 2 #---------------------------- -# run_MET_GridStat_vx_APCP03h config parameters +# run_met_gridstat_vx_apcp03h config parameters #----------------------------- -task_run_MET_GridStat_vx_APCP03h: +task_run_met_gridstat_vx_apcp03h: TN_RUN_MET_GRIDSTAT_VX_APCP03H: "run_MET_GridStat_vx_APCP03h" NNODES_RUN_MET_GRIDSTAT_VX_APCP03H: 1 PPN_RUN_MET_GRIDSTAT_VX_APCP03H: 1 @@ -2100,9 +2100,9 @@ task_run_MET_GridStat_vx_APCP03h: MAXTRIES_RUN_MET_GRIDSTAT_VX_APCP03H: 2 #---------------------------- -# run_MET_GridStat_vx_APCP06h config parameters +# run_met_gridstat_vx_apcp06h config parameters #----------------------------- -task_run_MET_GridStat_vx_APCP06h: +task_run_met_gridstat_vx_apcp06h: TN_RUN_MET_GRIDSTAT_VX_APCP06H: "run_MET_GridStat_vx_APCP06h" NNODES_RUN_MET_GRIDSTAT_VX_APCP06H: 1 PPN_RUN_MET_GRIDSTAT_VX_APCP06H: 1 @@ -2111,9 +2111,9 @@ task_run_MET_GridStat_vx_APCP06h: MAXTRIES_RUN_MET_GRIDSTAT_VX_APCP06H: 2 #---------------------------- -# run_MET_GridStat_vx_APCP24h config parameters +# run_met_gridstat_vx_apcp24h config parameters #----------------------------- -task_run_MET_GridStat_vx_APCP24h: +task_run_met_gridstat_vx_apcp24h: TN_RUN_MET_GRIDSTAT_VX_APCP24H: "run_MET_GridStat_vx_APCP24h" NNODES_RUN_MET_GRIDSTAT_VX_APCP24H: 1 PPN_RUN_MET_GRIDSTAT_VX_APCP24H: 1 @@ -2122,9 +2122,9 @@ task_run_MET_GridStat_vx_APCP24h: MAXTRIES_RUN_MET_GRIDSTAT_VX_APCP24H: 2 #---------------------------- -# run_MET_GridStat_vx_REFC config parameters +# run_met_gridstat_vx_refc config parameters #----------------------------- -task_run_MET_GridStat_vx_REFC: +task_run_met_gridstat_vx_refc: TN_RUN_MET_GRIDSTAT_VX_REFC: "run_MET_GridStat_vx_REFC" NNODES_RUN_MET_GRIDSTAT_VX_REFC: 1 PPN_RUN_MET_GRIDSTAT_VX_REFC: 1 @@ -2133,9 +2133,9 @@ task_run_MET_GridStat_vx_REFC: MAXTRIES_RUN_MET_GRIDSTAT_VX_REFC: 2 #---------------------------- -# run_MET_GridStat_vx_RETOP config parameters +# run_met_gridstat_vx_retop config parameters #----------------------------- -task_run_MET_GridStat_vx_RETOP: +task_run_met_gridstat_vx_retop: TN_RUN_MET_GRIDSTAT_VX_RETOP: "run_MET_GridStat_vx_RETOP" NNODES_RUN_MET_GRIDSTAT_VX_RETOP: 1 PPN_RUN_MET_GRIDSTAT_VX_RETOP: 1 @@ -2144,9 +2144,9 @@ task_run_MET_GridStat_vx_RETOP: MAXTRIES_RUN_MET_GRIDSTAT_VX_RETOP: 2 #---------------------------- -# run_MET_PointStat_vx_SFC_UPA config parameters +# run_met_pointstat_vx_sfc_upa config parameters #----------------------------- -task_run_MET_PointStat_vx_SFC_UPA: +task_run_met_pointstat_vx_sfc_upa: TN_RUN_MET_POINTSTAT_VX_SFC_UPA: "run_MET_PointStat_vx_SFC_UPA" NNODES_RUN_MET_POINTSTAT_VX_SFC_UPA: 1 PPN_RUN_MET_POINTSTAT_VX_SFC_UPA: 1 @@ -2155,9 +2155,9 @@ task_run_MET_PointStat_vx_SFC_UPA: MAXTRIES_RUN_MET_POINTSTAT_VX_SFC_UPA: 2 #---------------------------- -# run_MET_EnsembleStat_vx_APCP01h config parameters +# run_met_ensemblestat_vx_apcp01h config parameters #----------------------------- -task_run_MET_EnsembleStat_vx_APCP01h: +task_run_met_ensemblestat_vx_apcp01h: TN_RUN_MET_ENSEMBLESTAT_VX_APCP01H: "run_MET_EnsembleStat_vx_APCP01h" NNODES_RUN_MET_ENSEMBLESTAT_VX_APCP01H: 1 PPN_RUN_MET_ENSEMBLESTAT_VX_APCP01H: 1 @@ -2166,9 +2166,9 @@ task_run_MET_EnsembleStat_vx_APCP01h: MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_APCP01H: 2 #---------------------------- -# run_MET_EnsembleStat_vx_APCP03h config parameters +# run_met_ensemblestat_vx_apcp03h config parameters #----------------------------- -task_run_MET_EnsembleStat_vx_APCP03h: +task_run_met_ensemblestat_vx_apcp03h: TN_RUN_MET_ENSEMBLESTAT_VX_APCP03H: "run_MET_EnsembleStat_vx_APCP03h" NNODES_RUN_MET_ENSEMBLESTAT_VX_APCP03H: 1 PPN_RUN_MET_ENSEMBLESTAT_VX_APCP03H: 1 @@ -2177,9 +2177,9 @@ task_run_MET_EnsembleStat_vx_APCP03h: MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_APCP03H: 2 #---------------------------- -# run_MET_EnsembleStat_vx_APCP06h config parameters +# run_met_ensemblestat_vx_apcp06h config parameters #----------------------------- -task_run_MET_EnsembleStat_vx_APCP06h: +task_run_met_ensemblestat_vx_apcp06h: TN_RUN_MET_ENSEMBLESTAT_VX_APCP06H: "run_MET_EnsembleStat_vx_APCP06h" NNODES_RUN_MET_ENSEMBLESTAT_VX_APCP06H: 1 PPN_RUN_MET_ENSEMBLESTAT_VX_APCP06H: 1 @@ -2188,9 +2188,9 @@ task_run_MET_EnsembleStat_vx_APCP06h: MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_APCP06H: 2 #---------------------------- -# run_MET_EnsembleStat_vx_APCP24h config parameters +# run_met_ensemblestat_vx_apcp24h config parameters #----------------------------- -task_run_MET_EnsembleStat_vx_APCP24h: +task_run_met_ensemblestat_vx_apcp24h: TN_RUN_MET_ENSEMBLESTAT_VX_APCP24H: "run_MET_EnsembleStat_vx_APCP24h" NNODES_RUN_MET_ENSEMBLESTAT_VX_APCP24H: 1 PPN_RUN_MET_ENSEMBLESTAT_VX_APCP24H: 1 @@ -2199,9 +2199,9 @@ task_run_MET_EnsembleStat_vx_APCP24h: MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_APCP24H: 2 #---------------------------- -# run_MET_EnsembleStat_vx_REFC config parameters +# run_met_ensemblestat_vx_refc config parameters #----------------------------- -task_run_MET_EnsembleStat_vx_REFC: +task_run_met_ensemblestat_vx_refc: TN_RUN_MET_ENSEMBLESTAT_VX_REFC: "run_MET_EnsembleStat_vx_REFC" NNODES_RUN_MET_ENSEMBLESTAT_VX_REFC: 1 PPN_RUN_MET_ENSEMBLESTAT_VX_REFC: 1 @@ -2210,9 +2210,9 @@ task_run_MET_EnsembleStat_vx_REFC: MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_REFC: 2 #---------------------------- -# run_MET_EnsembleStat_vx_RETOP config parameters +# run_met_ensemblestat_vx_retop config parameters #----------------------------- -task_run_MET_EnsembleStat_vx_RETOP: +task_run_met_ensemblestat_vx_retop: TN_RUN_MET_ENSEMBLESTAT_VX_RETOP: "run_MET_EnsembleStat_vx_RETOP" NNODES_RUN_MET_ENSEMBLESTAT_VX_RETOP: 1 PPN_RUN_MET_ENSEMBLESTAT_VX_RETOP: 1 @@ -2221,9 +2221,9 @@ task_run_MET_EnsembleStat_vx_RETOP: MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_RETOP: 2 #---------------------------- -# run_MET_EnsembleStat_vx_SFC_UPA config parameters +# run_met_ensemblestat_vx_sfc_upa config parameters #----------------------------- -task_run_MET_EnsembleStat_vx_SFC_UPA: +task_run_met_ensemblestat_vx_sfc_upa: TN_RUN_MET_ENSEMBLESTAT_VX_SFC_UPA: "run_MET_EnsembleStat_vx_SFC_UPA" NNODES_RUN_MET_ENSEMBLESTAT_VX_SFC_UPA: 1 PPN_RUN_MET_ENSEMBLESTAT_VX_SFC_UPA: 1 @@ -2232,9 +2232,9 @@ task_run_MET_EnsembleStat_vx_SFC_UPA: MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_SFC_UPA: 2 #---------------------------- -# run_MET_GridStat_vx_ensmean_APCP01h config parameters +# run_met_gridstat_vx_ensmean_apcp01h config parameters #----------------------------- -task_run_MET_GridStat_vx_ensmean_APCP01h: +task_run_met_gridstat_vx_ensmean_apcp01h: TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP01H: "run_MET_GridStat_vx_ensmean_APCP01h" NNODES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP01H: 1 PPN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP01H: 1 @@ -2243,9 +2243,9 @@ task_run_MET_GridStat_vx_ensmean_APCP01h: MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP01H: 2 #---------------------------- -# run_MET_GridStat_vx_ensmean_APCP03h config parameters +# run_met_gridstat_vx_ensmean_apcp03h config parameters #----------------------------- -task_run_MET_GridStat_vx_ensmean_APCP03h: +task_run_met_gridstat_vx_ensmean_apcp03h: TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP03H: "run_MET_GridStat_vx_ensmean_APCP03h" NNODES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP03H: 1 PPN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP03H: 1 @@ -2254,9 +2254,9 @@ task_run_MET_GridStat_vx_ensmean_APCP03h: MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP03H: 2 #---------------------------- -# run_MET_GridStat_vx_ensmean_APCP06h config parameters +# run_met_gridstat_vx_ensmean_apcp06h config parameters #----------------------------- -task_run_MET_GridStat_vx_ensmean_APCP06h: +task_run_met_gridstat_vx_ensmean_apcp06h: TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP06H: "run_MET_GridStat_vx_ensmean_APCP06h" NNODES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP06H: 1 PPN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP06H: 1 @@ -2265,9 +2265,9 @@ task_run_MET_GridStat_vx_ensmean_APCP06h: MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP06H: 2 #---------------------------- -# run_MET_GridStat_vx_ensmean_APCP24h config parameters +# run_met_gridstat_vx_ensmean_apcp24h config parameters #----------------------------- -task_run_MET_GridStat_vx_ensmean_APCP24h: +task_run_met_gridstat_vx_ensmean_apcp24h: TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP24H: "run_MET_GridStat_vx_ensmean_APCP24h" NNODES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP24H: 1 PPN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP24H: 1 @@ -2276,9 +2276,9 @@ task_run_MET_GridStat_vx_ensmean_APCP24h: MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP24H: 2 #---------------------------- -# run_MET_PointStat_vx_ensmean_SFC_UPA config parameters +# run_met_pointstat_vx_ensmean_sfc_upa config parameters #----------------------------- -task_run_MET_PointStat_vx_ensmean_SFC_UPA: +task_run_met_pointstat_vx_ensmean_sfc_upa: TN_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC_UPA: "run_MET_PointStat_vx_ensmean_SFC_UPA" NNODES_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC_UPA: 1 PPN_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC_UPA: 1 @@ -2287,9 +2287,9 @@ task_run_MET_PointStat_vx_ensmean_SFC_UPA: MAXTRIES_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC_UPA: 2 #---------------------------- -# run_MET_GridStat_vx_ensprob_APCP01h config parameters +# run_met_gridstat_vx_ensprob_apcp01h config parameters #----------------------------- -task_run_MET_GridStat_vx_ensprob_APCP01h: +task_run_met_gridstat_vx_ensprob_apcp01h: TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP01H: "run_MET_GridStat_vx_ensprob_APCP01h" NNODES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP01H: 1 PPN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP01H: 1 @@ -2298,9 +2298,9 @@ task_run_MET_GridStat_vx_ensprob_APCP01h: MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP01H: 2 #---------------------------- -# run_MET_GridStat_vx_ensprob_APCP03h config parameters +# run_met_gridstat_vx_ensprob_apcp03h config parameters #----------------------------- -task_run_MET_GridStat_vx_ensprob_APCP03h: +task_run_met_gridstat_vx_ensprob_apcp03h: TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP03H: "run_MET_GridStat_vx_ensprob_APCP03h" NNODES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP03H: 1 PPN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP03H: 1 @@ -2309,9 +2309,9 @@ task_run_MET_GridStat_vx_ensprob_APCP03h: MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP03H: 2 #---------------------------- -# run_MET_GridStat_vx_ensprob_APCP06h config parameters +# run_met_gridstat_vx_ensprob_apcp06h config parameters #----------------------------- -task_run_MET_GridStat_vx_ensprob_APCP06h: +task_run_met_gridstat_vx_ensprob_apcp06h: TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP06H: "run_MET_GridStat_vx_ensprob_APCP06h" NNODES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP06H: 1 PPN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP06H: 1 @@ -2320,9 +2320,9 @@ task_run_MET_GridStat_vx_ensprob_APCP06h: MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP06H: 2 #---------------------------- -# run_MET_GridStat_vx_ensprob_APCP24h config parameters +# run_met_gridstat_vx_ensprob_apcp24h config parameters #----------------------------- -task_run_MET_GridStat_vx_ensprob_APCP24h: +task_run_met_gridstat_vx_ensprob_apcp24h: TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP24H: "run_MET_GridStat_vx_ensprob_APCP24h" NNODES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP24H: 1 PPN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP24H: 1 @@ -2331,9 +2331,9 @@ task_run_MET_GridStat_vx_ensprob_APCP24h: MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP24H: 2 #---------------------------- -# run_MET_GridStat_vx_ensprob_REFC config parameters +# run_met_gridstat_vx_ensprob_refc config parameters #----------------------------- -task_run_MET_GridStat_vx_ensprob_REFC: +task_run_met_gridstat_vx_ensprob_refc: TN_RUN_MET_GRIDSTAT_VX_ENSPROB_REFC: "run_MET_GridStat_vx_ensprob_REFC" NNODES_RUN_MET_GRIDSTAT_VX_ENSPROB_REFC: 1 PPN_RUN_MET_GRIDSTAT_VX_ENSPROB_REFC: 1 @@ -2342,9 +2342,9 @@ task_run_MET_GridStat_vx_ensprob_REFC: MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSPROB_REFC: 2 #---------------------------- -# run_MET_GridStat_vx_ensprob_RETOP config parameters +# run_met_gridstat_vx_ensprob_retop config parameters #----------------------------- -task_run_MET_GridStat_vx_ensprob_RETOP: +task_run_met_gridstat_vx_ensprob_retop: TN_RUN_MET_GRIDSTAT_VX_ENSPROB_RETOP: "run_MET_GridStat_vx_ensprob_RETOP" NNODES_RUN_MET_GRIDSTAT_VX_ENSPROB_RETOP: 1 PPN_RUN_MET_GRIDSTAT_VX_ENSPROB_RETOP: 1 @@ -2353,9 +2353,9 @@ task_run_MET_GridStat_vx_ensprob_RETOP: MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSPROB_RETOP: 2 #---------------------------- -# run_MET_PointStat_vx_ensprob_SFC_UPA config parameters +# run_met_pointstat_vx_ensprob_sfc_upa config parameters #----------------------------- -task_run_MET_PointStat_vx_ensprob_SFC_UPA: +task_run_met_pointstat_vx_ensprob_sfc_upa: TN_RUN_MET_POINTSTAT_VX_ENSPROB_SFC_UPA: "run_MET_PointStat_vx_ensprob_SFC_UPA" NNODES_RUN_MET_POINTSTAT_VX_ENSPROB_SFC_UPA: 1 PPN_RUN_MET_POINTSTAT_VX_ENSPROB_SFC_UPA: 1 From 3306a03c17bbd8e61d586c603097e2778cc63e59 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Thu, 23 Feb 2023 17:44:00 -0700 Subject: [PATCH 011/119] Remove extra slashes before ${SLASH_ENSMEM_SUBDIR}. --- scripts/exregional_run_met_gridstat_vx.sh | 4 ++-- scripts/exregional_run_met_pointstat_vx.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/exregional_run_met_gridstat_vx.sh b/scripts/exregional_run_met_gridstat_vx.sh index b4c57fe108..2811cfceca 100755 --- a/scripts/exregional_run_met_gridstat_vx.sh +++ b/scripts/exregional_run_met_gridstat_vx.sh @@ -88,8 +88,8 @@ else export INPUT_BASE=${VX_FCST_INPUT_BASEDIR}/${CDATE}/postprd export OUTPUT_BASE=${EXPTDIR}/${CDATE} else - export INPUT_BASE=${VX_FCST_INPUT_BASEDIR}/${CDATE}/${SLASH_ENSMEM_SUBDIR}/postprd - export OUTPUT_BASE=${EXPTDIR}/${CDATE}/${SLASH_ENSMEM_SUBDIR} + export INPUT_BASE=${VX_FCST_INPUT_BASEDIR}/${CDATE}${SLASH_ENSMEM_SUBDIR}/postprd + export OUTPUT_BASE=${EXPTDIR}/${CDATE}${SLASH_ENSMEM_SUBDIR} fi export MEM_BASE=$EXPTDIR/$CDATE export LOG_DIR=${EXPTDIR}/log diff --git a/scripts/exregional_run_met_pointstat_vx.sh b/scripts/exregional_run_met_pointstat_vx.sh index 2a4e0c7a54..f8084974d6 100755 --- a/scripts/exregional_run_met_pointstat_vx.sh +++ b/scripts/exregional_run_met_pointstat_vx.sh @@ -88,8 +88,8 @@ else export INPUT_BASE=${VX_FCST_INPUT_BASEDIR}/${CDATE}/postprd export OUTPUT_BASE=${EXPTDIR}/${CDATE} else - export INPUT_BASE=${VX_FCST_INPUT_BASEDIR}/${CDATE}/${SLASH_ENSMEM_SUBDIR}/postprd - export OUTPUT_BASE=${EXPTDIR}/${CDATE}/${SLASH_ENSMEM_SUBDIR} + export INPUT_BASE=${VX_FCST_INPUT_BASEDIR}/${CDATE}${SLASH_ENSMEM_SUBDIR}/postprd + export OUTPUT_BASE=${EXPTDIR}/${CDATE}${SLASH_ENSMEM_SUBDIR} fi export MEM_BASE=$EXPTDIR/$CDATE export LOG_DIR=${EXPTDIR}/log From d9e425dd3e9470c49df68a0ac9d99ba2fa95cc6e Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Wed, 22 Feb 2023 18:59:43 -0700 Subject: [PATCH 012/119] Bring in changes from another branch for splitting of SFC and UPA tasks; Add ensemble member name (if running ensemble vx) to the names of the vx tasks in the ROCOTO xml. --- parm/FV3LAM_wflow.xml | 228 +++++++++++++++++++++++++++++++++++------- 1 file changed, 192 insertions(+), 36 deletions(-) diff --git a/parm/FV3LAM_wflow.xml b/parm/FV3LAM_wflow.xml index 65272fa27f..7218e284bc 100644 --- a/parm/FV3LAM_wflow.xml +++ b/parm/FV3LAM_wflow.xml @@ -48,26 +48,30 @@ Workflow task names. - + + - + + - + + - + + {%- if run_task_aqm_ics %} @@ -1420,7 +1424,7 @@ it, we'd have to include more jinja if-statements here. {{ wtime_run_met_gridstat_vx_apcp01h }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_RUN_MET_GRIDSTAT_VX_APCP01H; + &TN_RUN_MET_GRIDSTAT_VX_APCP01H;{{ uscore_ensmem_name }} &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_APCP01H;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; @@ -1472,7 +1476,7 @@ it, we'd have to include more jinja if-statements here. {{ wtime_run_met_gridstat_vx_apcp03h }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_RUN_MET_GRIDSTAT_VX_APCP03H; + &TN_RUN_MET_GRIDSTAT_VX_APCP03H;{{ uscore_ensmem_name }} &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_APCP03H;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; @@ -1514,7 +1518,7 @@ it, we'd have to include more jinja if-statements here. {{ wtime_run_met_gridstat_vx_apcp06h }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_RUN_MET_GRIDSTAT_VX_APCP06H; + &TN_RUN_MET_GRIDSTAT_VX_APCP06H;{{ uscore_ensmem_name }} &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_APCP06H;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; @@ -1556,7 +1560,7 @@ it, we'd have to include more jinja if-statements here. {{ wtime_run_met_gridstat_vx_apcp24h }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_RUN_MET_GRIDSTAT_VX_APCP24H; + &TN_RUN_MET_GRIDSTAT_VX_APCP24H;{{ uscore_ensmem_name }} &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_APCP24H;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; @@ -1597,7 +1601,7 @@ it, we'd have to include more jinja if-statements here. {{ wtime_run_met_gridstat_vx_refc }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_RUN_MET_GRIDSTAT_VX_REFC; + &TN_RUN_MET_GRIDSTAT_VX_REFC;{{ uscore_ensmem_name }} &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_REFC;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; @@ -1647,7 +1651,7 @@ it, we'd have to include more jinja if-statements here. {{ wtime_run_met_gridstat_vx_retop }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_RUN_MET_GRIDSTAT_VX_RETOP; + &TN_RUN_MET_GRIDSTAT_VX_RETOP;{{ uscore_ensmem_name }} &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_RETOP;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; @@ -1688,19 +1692,19 @@ it, we'd have to include more jinja if-statements here. ************************************************************************ ************************************************************************ --> - + &RSRV_DEFAULT; &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX" - {{ nnodes_run_met_pointstat_vx_sfc_upa }}:ppn={{ ppn_run_met_pointstat_vx_sfc_upa }} + {{ nnodes_run_met_pointstat_vx_sfc }}:ppn={{ ppn_run_met_pointstat_vx_sfc }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_pointstat_vx_sfc_upa }} + {{ mem_run_met_pointstat_vx_sfc }} {%- endif %} - {{ wtime_run_met_pointstat_vx_sfc_upa }} + {{ wtime_run_met_pointstat_vx_sfc }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_RUN_MET_POINTSTAT_VX_SFC_UPA; - &LOGDIR;/&TN_RUN_MET_POINTSTAT_VX_SFC_UPA;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_POINTSTAT_VX_SFC;{{ uscore_ensmem_name }} + &LOGDIR;/&TN_RUN_MET_POINTSTAT_VX_SFC;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; @@ -1710,6 +1714,56 @@ it, we'd have to include more jinja if-statements here. subcyc@M LOGDIR&LOGDIR; FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + VARSFC + USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} + {%- if do_ensemble %} + SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} + ENSMEM_INDX#{{ ensmem_indx_name }}# + {%- endif %} + + + +{#- Redundant dependency to simplify jinja code. #} + TRUETRUE + {%- if run_task_get_obs_ndas %} + + {%- endif %} + {%- if write_dopost %} + + {%- elif run_task_run_post %} + + {%- endif %} + + + + + + + &RSRV_DEFAULT; + + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX" + {{ nnodes_run_met_pointstat_vx_upa }}:ppn={{ ppn_run_met_pointstat_vx_upa }} + {%- if machine not in ["GAEA", "NOAACLOUD"] %} + {{ mem_run_met_pointstat_vx_upa }} + {%- endif %} + {{ wtime_run_met_pointstat_vx_upa }} + &NCORES_PER_NODE; + &SCHED_NATIVE_CMD; + &TN_RUN_MET_POINTSTAT_VX_UPA;{{ uscore_ensmem_name }} + &LOGDIR;/&TN_RUN_MET_POINTSTAT_VX_UPA;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; + + GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; + USHdir&USHdir; + OBS_DIR&NDAS_OBS_DIR; + PDY@Y@m@d + cyc@H + subcyc@M + LOGDIR&LOGDIR; + FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + VARUPA USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} {%- if do_ensemble %} SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} @@ -1959,19 +2013,52 @@ it, we'd have to include more jinja if-statements here. ************************************************************************ ************************************************************************ --> - + + + &RSRV_DEFAULT; + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT" + {{ nnodes_run_met_ensemblestat_vx_sfc }}:ppn={{ ppn_run_met_ensemblestat_vx_sfc }} + {%- if machine not in ["GAEA", "NOAACLOUD"] %} + {{ mem_run_met_ensemblestat_vx_sfc }} + {%- endif %} + {{ wtime_run_met_ensemblestat_vx_sfc }} + &NCORES_PER_NODE; + &SCHED_NATIVE_CMD; + &TN_RUN_MET_ENSEMBLESTAT_VX_SFC; + &LOGDIR;/&TN_RUN_MET_ENSEMBLESTAT_VX_SFC;_@Y@m@d@H&LOGEXT; + + GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; + USHdir&USHdir; + OBS_DIR&NDAS_OBS_DIR; + PDY@Y@m@d + cyc@H + subcyc@M + LOGDIR&LOGDIR; + FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + VARSFC + + + + + + + + &RSRV_DEFAULT; &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT" - {{ nnodes_run_met_ensemblestat_vx_sfc_upa }}:ppn={{ ppn_run_met_ensemblestat_vx_sfc_upa }} + {{ nnodes_run_met_ensemblestat_vx_upa }}:ppn={{ ppn_run_met_ensemblestat_vx_upa }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_ensemblestat_vx_sfc_upa }} + {{ mem_run_met_ensemblestat_vx_upa }} {%- endif %} - {{ wtime_run_met_ensemblestat_vx_sfc_upa }} + {{ wtime_run_met_ensemblestat_vx_upa }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_RUN_MET_ENSEMBLESTAT_VX_SFC_UPA; - &LOGDIR;/&TN_RUN_MET_ENSEMBLESTAT_VX_SFC_UPA;_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_ENSEMBLESTAT_VX_UPA; + &LOGDIR;/&TN_RUN_MET_ENSEMBLESTAT_VX_UPA;_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; @@ -1981,6 +2068,7 @@ it, we'd have to include more jinja if-statements here. subcyc@M LOGDIR&LOGDIR; FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + VARUPA @@ -2142,19 +2230,19 @@ it, we'd have to include more jinja if-statements here. ************************************************************************ ************************************************************************ --> - + &RSRV_DEFAULT; &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN" - {{ nnodes_run_met_pointstat_vx_ensmean_sfc_upa }}:ppn={{ ppn_run_met_pointstat_vx_ensmean_sfc_upa }} + {{ nnodes_run_met_pointstat_vx_ensmean_sfc }}:ppn={{ ppn_run_met_pointstat_vx_ensmean_sfc }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_pointstat_vx_ensmean_sfc_upa }} + {{ mem_run_met_pointstat_vx_ensmean_sfc }} {%- endif %} - {{ wtime_run_met_pointstat_vx_ensmean_sfc_upa }} + {{ wtime_run_met_pointstat_vx_ensmean_sfc }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC_UPA; - &LOGDIR;/&TN_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC_UPA;_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC; + &LOGDIR;/&TN_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC;_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; @@ -2164,9 +2252,43 @@ it, we'd have to include more jinja if-statements here. subcyc@M LOGDIR&LOGDIR; FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + VARSFC - + + + + + + + + &RSRV_DEFAULT; + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN" + {{ nnodes_run_met_pointstat_vx_ensmean_upa }}:ppn={{ ppn_run_met_pointstat_vx_ensmean_upa }} + {%- if machine not in ["GAEA", "NOAACLOUD"] %} + {{ mem_run_met_pointstat_vx_ensmean_upa }} + {%- endif %} + {{ wtime_run_met_pointstat_vx_ensmean_upa }} + &NCORES_PER_NODE; + &SCHED_NATIVE_CMD; + &TN_RUN_MET_POINTSTAT_VX_ENSMEAN_UPA; + &LOGDIR;/&TN_RUN_MET_POINTSTAT_VX_ENSMEAN_UPA;_@Y@m@d@H&LOGEXT; + + GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; + USHdir&USHdir; + OBS_DIR&NDAS_OBS_DIR; + PDY@Y@m@d + cyc@H + subcyc@M + LOGDIR&LOGDIR; + FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + VARUPA + + + @@ -2393,19 +2515,52 @@ it, we'd have to include more jinja if-statements here. ************************************************************************ ************************************************************************ --> - + + + &RSRV_DEFAULT; + &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB" + {{ nnodes_run_met_pointstat_vx_ensprob_sfc }}:ppn={{ ppn_run_met_pointstat_vx_ensprob_sfc }} + {%- if machine not in ["GAEA", "NOAACLOUD"] %} + {{ mem_run_met_pointstat_vx_ensprob_sfc }} + {%- endif %} + {{ wtime_run_met_pointstat_vx_ensprob_sfc }} + &NCORES_PER_NODE; + &SCHED_NATIVE_CMD; + &TN_RUN_MET_POINTSTAT_VX_ENSPROB_SFC; + &LOGDIR;/&TN_RUN_MET_POINTSTAT_VX_ENSPROB_SFC;_@Y@m@d@H&LOGEXT; + + GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; + USHdir&USHdir; + OBS_DIR&NDAS_OBS_DIR; + PDY@Y@m@d + cyc@H + subcyc@M + LOGDIR&LOGDIR; + FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + VARSFC + + + + + + + + &RSRV_DEFAULT; &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB" - {{ nnodes_run_met_pointstat_vx_ensprob_sfc_upa }}:ppn={{ ppn_run_met_pointstat_vx_ensprob_sfc_upa }} + {{ nnodes_run_met_pointstat_vx_ensprob_upa }}:ppn={{ ppn_run_met_pointstat_vx_ensprob_upa }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_pointstat_vx_ensprob_sfc_upa }} + {{ mem_run_met_pointstat_vx_ensprob_upa }} {%- endif %} - {{ wtime_run_met_pointstat_vx_ensprob_sfc_upa }} + {{ wtime_run_met_pointstat_vx_ensprob_upa }} &NCORES_PER_NODE; &SCHED_NATIVE_CMD; - &TN_RUN_MET_POINTSTAT_VX_ENSPROB_SFC_UPA; - &LOGDIR;/&TN_RUN_MET_POINTSTAT_VX_ENSPROB_SFC_UPA;_@Y@m@d@H&LOGEXT; + &TN_RUN_MET_POINTSTAT_VX_ENSPROB_UPA; + &LOGDIR;/&TN_RUN_MET_POINTSTAT_VX_ENSPROB_UPA;_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; @@ -2415,9 +2570,10 @@ it, we'd have to include more jinja if-statements here. subcyc@M LOGDIR&LOGDIR; FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + VARUPA - + From 6522c5b66d2127dcb25ee7658a421b5adc0de663 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Thu, 23 Feb 2023 18:04:42 -0700 Subject: [PATCH 013/119] Rename METplus configuration files for surface and upper air. --- ...t_conus_sfc.conf => EnsembleStat_SFC.conf} | 0 ...t_upper_air.conf => EnsembleStat_UPA.conf} | 0 ...Stat_conus_sfc.conf => PointStat_SFC.conf} | 0 ...c_mean.conf => PointStat_SFC_ensmean.conf} | 0 ...c_prob.conf => PointStat_SFC_ensprob.conf} | 0 ...Stat_upper_air.conf => PointStat_UPA.conf} | 0 ...r_mean.conf => PointStat_UPA_ensmean.conf} | 0 ...r_prob.conf => PointStat_UPA_ensprob.conf} | 0 ...xregional_run_met_ensemblestat_vx_point.sh | 4 +- scripts/exregional_run_met_pointstat_vx.sh | 4 +- ...exregional_run_met_pointstat_vx_ensmean.sh | 4 +- ...exregional_run_met_pointstat_vx_ensprob.sh | 4 +- ush/config_defaults.yaml | 108 ++++++++++++------ 13 files changed, 84 insertions(+), 40 deletions(-) rename parm/metplus/{EnsembleStat_conus_sfc.conf => EnsembleStat_SFC.conf} (100%) rename parm/metplus/{EnsembleStat_upper_air.conf => EnsembleStat_UPA.conf} (100%) rename parm/metplus/{PointStat_conus_sfc.conf => PointStat_SFC.conf} (100%) rename parm/metplus/{PointStat_conus_sfc_mean.conf => PointStat_SFC_ensmean.conf} (100%) rename parm/metplus/{PointStat_conus_sfc_prob.conf => PointStat_SFC_ensprob.conf} (100%) rename parm/metplus/{PointStat_upper_air.conf => PointStat_UPA.conf} (100%) rename parm/metplus/{PointStat_upper_air_mean.conf => PointStat_UPA_ensmean.conf} (100%) rename parm/metplus/{PointStat_upper_air_prob.conf => PointStat_UPA_ensprob.conf} (100%) diff --git a/parm/metplus/EnsembleStat_conus_sfc.conf b/parm/metplus/EnsembleStat_SFC.conf similarity index 100% rename from parm/metplus/EnsembleStat_conus_sfc.conf rename to parm/metplus/EnsembleStat_SFC.conf diff --git a/parm/metplus/EnsembleStat_upper_air.conf b/parm/metplus/EnsembleStat_UPA.conf similarity index 100% rename from parm/metplus/EnsembleStat_upper_air.conf rename to parm/metplus/EnsembleStat_UPA.conf diff --git a/parm/metplus/PointStat_conus_sfc.conf b/parm/metplus/PointStat_SFC.conf similarity index 100% rename from parm/metplus/PointStat_conus_sfc.conf rename to parm/metplus/PointStat_SFC.conf diff --git a/parm/metplus/PointStat_conus_sfc_mean.conf b/parm/metplus/PointStat_SFC_ensmean.conf similarity index 100% rename from parm/metplus/PointStat_conus_sfc_mean.conf rename to parm/metplus/PointStat_SFC_ensmean.conf diff --git a/parm/metplus/PointStat_conus_sfc_prob.conf b/parm/metplus/PointStat_SFC_ensprob.conf similarity index 100% rename from parm/metplus/PointStat_conus_sfc_prob.conf rename to parm/metplus/PointStat_SFC_ensprob.conf diff --git a/parm/metplus/PointStat_upper_air.conf b/parm/metplus/PointStat_UPA.conf similarity index 100% rename from parm/metplus/PointStat_upper_air.conf rename to parm/metplus/PointStat_UPA.conf diff --git a/parm/metplus/PointStat_upper_air_mean.conf b/parm/metplus/PointStat_UPA_ensmean.conf similarity index 100% rename from parm/metplus/PointStat_upper_air_mean.conf rename to parm/metplus/PointStat_UPA_ensmean.conf diff --git a/parm/metplus/PointStat_upper_air_prob.conf b/parm/metplus/PointStat_UPA_ensprob.conf similarity index 100% rename from parm/metplus/PointStat_upper_air_prob.conf rename to parm/metplus/PointStat_UPA_ensprob.conf diff --git a/scripts/exregional_run_met_ensemblestat_vx_point.sh b/scripts/exregional_run_met_ensemblestat_vx_point.sh index 88f49c7019..6c9fa8f2e1 100755 --- a/scripts/exregional_run_met_ensemblestat_vx_point.sh +++ b/scripts/exregional_run_met_ensemblestat_vx_point.sh @@ -145,11 +145,11 @@ export NUM_ENS_MEMBERS ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/EnsembleStat_conus_sfc.conf + -c ${METPLUS_CONF}/EnsembleStat_SFC.conf ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/EnsembleStat_upper_air.conf + -c ${METPLUS_CONF}/EnsembleStat_UPA.conf # #----------------------------------------------------------------------- diff --git a/scripts/exregional_run_met_pointstat_vx.sh b/scripts/exregional_run_met_pointstat_vx.sh index f8084974d6..efedbc2766 100755 --- a/scripts/exregional_run_met_pointstat_vx.sh +++ b/scripts/exregional_run_met_pointstat_vx.sh @@ -145,11 +145,11 @@ export POST_OUTPUT_DOMAIN_NAME ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/PointStat_conus_sfc.conf + -c ${METPLUS_CONF}/PointStat_SFC.conf ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/PointStat_upper_air.conf + -c ${METPLUS_CONF}/PointStat_UPA.conf # #----------------------------------------------------------------------- diff --git a/scripts/exregional_run_met_pointstat_vx_ensmean.sh b/scripts/exregional_run_met_pointstat_vx_ensmean.sh index 6fa470e7ef..1e2f4dbae2 100755 --- a/scripts/exregional_run_met_pointstat_vx_ensmean.sh +++ b/scripts/exregional_run_met_pointstat_vx_ensmean.sh @@ -145,11 +145,11 @@ export POST_OUTPUT_DOMAIN_NAME ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/PointStat_conus_sfc_mean.conf + -c ${METPLUS_CONF}/PointStat_SFC_ensmean.conf ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/PointStat_upper_air_mean.conf + -c ${METPLUS_CONF}/PointStat_UPA_ensmean.conf # #----------------------------------------------------------------------- # diff --git a/scripts/exregional_run_met_pointstat_vx_ensprob.sh b/scripts/exregional_run_met_pointstat_vx_ensprob.sh index d01fcf9b5b..89ca53ea0b 100755 --- a/scripts/exregional_run_met_pointstat_vx_ensprob.sh +++ b/scripts/exregional_run_met_pointstat_vx_ensprob.sh @@ -144,11 +144,11 @@ export POST_OUTPUT_DOMAIN_NAME ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/PointStat_conus_sfc_prob.conf + -c ${METPLUS_CONF}/PointStat_SFC_ensprob.conf ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/PointStat_upper_air_prob.conf + -c ${METPLUS_CONF}/PointStat_UPA_ensprob.conf # #----------------------------------------------------------------------- # diff --git a/ush/config_defaults.yaml b/ush/config_defaults.yaml index 71b5c20c8a..e8ad30b6e3 100644 --- a/ush/config_defaults.yaml +++ b/ush/config_defaults.yaml @@ -2144,15 +2144,26 @@ task_run_met_gridstat_vx_retop: MAXTRIES_RUN_MET_GRIDSTAT_VX_RETOP: 2 #---------------------------- -# run_met_pointstat_vx_sfc_upa config parameters +# run_met_pointstat_vx_sfc config parameters #----------------------------- -task_run_met_pointstat_vx_sfc_upa: - TN_RUN_MET_POINTSTAT_VX_SFC_UPA: "run_MET_PointStat_vx_SFC_UPA" - NNODES_RUN_MET_POINTSTAT_VX_SFC_UPA: 1 - PPN_RUN_MET_POINTSTAT_VX_SFC_UPA: 1 - MEM_RUN_MET_POINTSTAT_VX_SFC_UPA: 2G - WTIME_RUN_MET_POINTSTAT_VX_SFC_UPA: 01:00:00 - MAXTRIES_RUN_MET_POINTSTAT_VX_SFC_UPA: 2 +task_run_met_pointstat_vx_sfc: + TN_RUN_MET_POINTSTAT_VX_SFC: "run_MET_PointStat_vx_SFC" + NNODES_RUN_MET_POINTSTAT_VX_SFC: 1 + PPN_RUN_MET_POINTSTAT_VX_SFC: 1 + MEM_RUN_MET_POINTSTAT_VX_SFC: 2G + WTIME_RUN_MET_POINTSTAT_VX_SFC: 01:00:00 + MAXTRIES_RUN_MET_POINTSTAT_VX_SFC: 2 + +#---------------------------- +# run_met_pointstat_vx_upa config parameters +#----------------------------- +task_run_met_pointstat_vx_upa: + TN_RUN_MET_POINTSTAT_VX_UPA: "run_MET_PointStat_vx_UPA" + NNODES_RUN_MET_POINTSTAT_VX_UPA: 1 + PPN_RUN_MET_POINTSTAT_VX_UPA: 1 + MEM_RUN_MET_POINTSTAT_VX_UPA: 2G + WTIME_RUN_MET_POINTSTAT_VX_UPA: 01:00:00 + MAXTRIES_RUN_MET_POINTSTAT_VX_UPA: 2 #---------------------------- # run_met_ensemblestat_vx_apcp01h config parameters @@ -2221,15 +2232,26 @@ task_run_met_ensemblestat_vx_retop: MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_RETOP: 2 #---------------------------- -# run_met_ensemblestat_vx_sfc_upa config parameters +# run_met_ensemblestat_vx_sfc config parameters +#----------------------------- +task_run_met_ensemblestat_vx_sfc: + TN_RUN_MET_ENSEMBLESTAT_VX_SFC: "run_MET_EnsembleStat_vx_SFC" + NNODES_RUN_MET_ENSEMBLESTAT_VX_SFC: 1 + PPN_RUN_MET_ENSEMBLESTAT_VX_SFC: 1 + MEM_RUN_MET_ENSEMBLESTAT_VX_SFC: 2G + WTIME_RUN_MET_ENSEMBLESTAT_VX_SFC: 01:00:00 + MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_SFC: 2 + +#---------------------------- +# run_met_ensemblestat_vx_upa config parameters #----------------------------- -task_run_met_ensemblestat_vx_sfc_upa: - TN_RUN_MET_ENSEMBLESTAT_VX_SFC_UPA: "run_MET_EnsembleStat_vx_SFC_UPA" - NNODES_RUN_MET_ENSEMBLESTAT_VX_SFC_UPA: 1 - PPN_RUN_MET_ENSEMBLESTAT_VX_SFC_UPA: 1 - MEM_RUN_MET_ENSEMBLESTAT_VX_SFC_UPA: 2G - WTIME_RUN_MET_ENSEMBLESTAT_VX_SFC_UPA: 01:00:00 - MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_SFC_UPA: 2 +task_run_met_ensemblestat_vx_upa: + TN_RUN_MET_ENSEMBLESTAT_VX_UPA: "run_MET_EnsembleStat_vx_UPA" + NNODES_RUN_MET_ENSEMBLESTAT_VX_UPA: 1 + PPN_RUN_MET_ENSEMBLESTAT_VX_UPA: 1 + MEM_RUN_MET_ENSEMBLESTAT_VX_UPA: 2G + WTIME_RUN_MET_ENSEMBLESTAT_VX_UPA: 01:00:00 + MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_UPA: 2 #---------------------------- # run_met_gridstat_vx_ensmean_apcp01h config parameters @@ -2276,15 +2298,26 @@ task_run_met_gridstat_vx_ensmean_apcp24h: MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP24H: 2 #---------------------------- -# run_met_pointstat_vx_ensmean_sfc_upa config parameters +# run_met_pointstat_vx_ensmean_sfc config parameters #----------------------------- -task_run_met_pointstat_vx_ensmean_sfc_upa: - TN_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC_UPA: "run_MET_PointStat_vx_ensmean_SFC_UPA" - NNODES_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC_UPA: 1 - PPN_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC_UPA: 1 - MEM_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC_UPA: 2G - WTIME_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC_UPA: 01:00:00 - MAXTRIES_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC_UPA: 2 +task_run_met_pointstat_vx_ensmean_sfc: + TN_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC: "run_MET_PointStat_vx_ensmean_SFC" + NNODES_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC: 1 + PPN_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC: 1 + MEM_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC: 2G + WTIME_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC: 01:00:00 + MAXTRIES_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC: 2 + +#---------------------------- +# run_met_pointstat_vx_ensmean_upa config parameters +#----------------------------- +task_run_met_pointstat_vx_ensmean_upa: + TN_RUN_MET_POINTSTAT_VX_ENSMEAN_UPA: "run_MET_PointStat_vx_ensmean_UPA" + NNODES_RUN_MET_POINTSTAT_VX_ENSMEAN_UPA: 1 + PPN_RUN_MET_POINTSTAT_VX_ENSMEAN_UPA: 1 + MEM_RUN_MET_POINTSTAT_VX_ENSMEAN_UPA: 2G + WTIME_RUN_MET_POINTSTAT_VX_ENSMEAN_UPA: 01:00:00 + MAXTRIES_RUN_MET_POINTSTAT_VX_ENSMEAN_UPA: 2 #---------------------------- # run_met_gridstat_vx_ensprob_apcp01h config parameters @@ -2353,15 +2386,26 @@ task_run_met_gridstat_vx_ensprob_retop: MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSPROB_RETOP: 2 #---------------------------- -# run_met_pointstat_vx_ensprob_sfc_upa config parameters +# run_met_pointstat_vx_ensprob_sfc config parameters +#----------------------------- +task_run_met_pointstat_vx_ensprob_sfc: + TN_RUN_MET_POINTSTAT_VX_ENSPROB_SFC: "run_MET_PointStat_vx_ensprob_SFC" + NNODES_RUN_MET_POINTSTAT_VX_ENSPROB_SFC: 1 + PPN_RUN_MET_POINTSTAT_VX_ENSPROB_SFC: 1 + MEM_RUN_MET_POINTSTAT_VX_ENSPROB_SFC: 2G + WTIME_RUN_MET_POINTSTAT_VX_ENSPROB_SFC: 01:00:00 + MAXTRIES_RUN_MET_POINTSTAT_VX_ENSPROB_SFC: 2 + +#---------------------------- +# run_met_pointstat_vx_ensprob_upa config parameters #----------------------------- -task_run_met_pointstat_vx_ensprob_sfc_upa: - TN_RUN_MET_POINTSTAT_VX_ENSPROB_SFC_UPA: "run_MET_PointStat_vx_ensprob_SFC_UPA" - NNODES_RUN_MET_POINTSTAT_VX_ENSPROB_SFC_UPA: 1 - PPN_RUN_MET_POINTSTAT_VX_ENSPROB_SFC_UPA: 1 - MEM_RUN_MET_POINTSTAT_VX_ENSPROB_SFC_UPA: 2G - WTIME_RUN_MET_POINTSTAT_VX_ENSPROB_SFC_UPA: 01:00:00 - MAXTRIES_RUN_MET_POINTSTAT_VX_ENSPROB_SFC_UPA: 2 +task_run_met_pointstat_vx_ensprob_upa: + TN_RUN_MET_POINTSTAT_VX_ENSPROB_UPA: "run_MET_PointStat_vx_ensprob_UPA" + NNODES_RUN_MET_POINTSTAT_VX_ENSPROB_UPA: 1 + PPN_RUN_MET_POINTSTAT_VX_ENSPROB_UPA: 1 + MEM_RUN_MET_POINTSTAT_VX_ENSPROB_UPA: 2G + WTIME_RUN_MET_POINTSTAT_VX_ENSPROB_UPA: 01:00:00 + MAXTRIES_RUN_MET_POINTSTAT_VX_ENSPROB_UPA: 2 #---------------------------- # AQM_ICS config parameters From 01eeeda06144a22161503e17469b1e564d1729f4 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Sat, 25 Feb 2023 09:31:46 -0700 Subject: [PATCH 014/119] Change names of METplus conf and log files to follow a more consistent convention; fix bugs in the two ex-scripts exregional_run_met_pointstat_ens[mean|prob].sh that call METplus twice. --- ...at_APCP01h_mean.conf => GridStat_ensmean_APCP01h.conf} | 0 ...at_APCP03h_mean.conf => GridStat_ensmean_APCP03h.conf} | 0 ...at_APCP06h_mean.conf => GridStat_ensmean_APCP06h.conf} | 0 ...at_APCP24h_mean.conf => GridStat_ensmean_APCP24h.conf} | 0 ...GridStat_REFC_mean.conf => GridStat_ensmean_REFC.conf} | 0 ...idStat_RETOP_mean.conf => GridStat_ensmean_RETOP.conf} | 0 ...at_APCP01h_prob.conf => GridStat_ensprob_APCP01h.conf} | 0 ...at_APCP03h_prob.conf => GridStat_ensprob_APCP03h.conf} | 0 ...at_APCP06h_prob.conf => GridStat_ensprob_APCP06h.conf} | 0 ...at_APCP24h_prob.conf => GridStat_ensprob_APCP24h.conf} | 0 ...GridStat_REFC_prob.conf => GridStat_ensprob_REFC.conf} | 0 ...idStat_RETOP_prob.conf => GridStat_ensprob_RETOP.conf} | 0 ...ntStat_SFC_ensmean.conf => PointStat_ensmean_SFC.conf} | 2 +- ...ntStat_UPA_ensmean.conf => PointStat_ensmean_UPA.conf} | 2 +- ...ntStat_SFC_ensprob.conf => PointStat_ensprob_SFC.conf} | 2 +- ...ntStat_UPA_ensprob.conf => PointStat_ensprob_UPA.conf} | 2 +- scripts/exregional_run_met_gridstat_vx_ensmean.sh | 8 ++++---- scripts/exregional_run_met_gridstat_vx_ensprob.sh | 8 ++++---- scripts/exregional_run_met_pointstat_vx_ensmean.sh | 6 +----- scripts/exregional_run_met_pointstat_vx_ensprob.sh | 6 +----- 20 files changed, 14 insertions(+), 22 deletions(-) rename parm/metplus/{GridStat_APCP01h_mean.conf => GridStat_ensmean_APCP01h.conf} (100%) rename parm/metplus/{GridStat_APCP03h_mean.conf => GridStat_ensmean_APCP03h.conf} (100%) rename parm/metplus/{GridStat_APCP06h_mean.conf => GridStat_ensmean_APCP06h.conf} (100%) rename parm/metplus/{GridStat_APCP24h_mean.conf => GridStat_ensmean_APCP24h.conf} (100%) rename parm/metplus/{GridStat_REFC_mean.conf => GridStat_ensmean_REFC.conf} (100%) rename parm/metplus/{GridStat_RETOP_mean.conf => GridStat_ensmean_RETOP.conf} (100%) rename parm/metplus/{GridStat_APCP01h_prob.conf => GridStat_ensprob_APCP01h.conf} (100%) rename parm/metplus/{GridStat_APCP03h_prob.conf => GridStat_ensprob_APCP03h.conf} (100%) rename parm/metplus/{GridStat_APCP06h_prob.conf => GridStat_ensprob_APCP06h.conf} (100%) rename parm/metplus/{GridStat_APCP24h_prob.conf => GridStat_ensprob_APCP24h.conf} (100%) rename parm/metplus/{GridStat_REFC_prob.conf => GridStat_ensprob_REFC.conf} (100%) rename parm/metplus/{GridStat_RETOP_prob.conf => GridStat_ensprob_RETOP.conf} (100%) rename parm/metplus/{PointStat_SFC_ensmean.conf => PointStat_ensmean_SFC.conf} (99%) rename parm/metplus/{PointStat_UPA_ensmean.conf => PointStat_ensmean_UPA.conf} (99%) rename parm/metplus/{PointStat_SFC_ensprob.conf => PointStat_ensprob_SFC.conf} (99%) rename parm/metplus/{PointStat_UPA_ensprob.conf => PointStat_ensprob_UPA.conf} (99%) diff --git a/parm/metplus/GridStat_APCP01h_mean.conf b/parm/metplus/GridStat_ensmean_APCP01h.conf similarity index 100% rename from parm/metplus/GridStat_APCP01h_mean.conf rename to parm/metplus/GridStat_ensmean_APCP01h.conf diff --git a/parm/metplus/GridStat_APCP03h_mean.conf b/parm/metplus/GridStat_ensmean_APCP03h.conf similarity index 100% rename from parm/metplus/GridStat_APCP03h_mean.conf rename to parm/metplus/GridStat_ensmean_APCP03h.conf diff --git a/parm/metplus/GridStat_APCP06h_mean.conf b/parm/metplus/GridStat_ensmean_APCP06h.conf similarity index 100% rename from parm/metplus/GridStat_APCP06h_mean.conf rename to parm/metplus/GridStat_ensmean_APCP06h.conf diff --git a/parm/metplus/GridStat_APCP24h_mean.conf b/parm/metplus/GridStat_ensmean_APCP24h.conf similarity index 100% rename from parm/metplus/GridStat_APCP24h_mean.conf rename to parm/metplus/GridStat_ensmean_APCP24h.conf diff --git a/parm/metplus/GridStat_REFC_mean.conf b/parm/metplus/GridStat_ensmean_REFC.conf similarity index 100% rename from parm/metplus/GridStat_REFC_mean.conf rename to parm/metplus/GridStat_ensmean_REFC.conf diff --git a/parm/metplus/GridStat_RETOP_mean.conf b/parm/metplus/GridStat_ensmean_RETOP.conf similarity index 100% rename from parm/metplus/GridStat_RETOP_mean.conf rename to parm/metplus/GridStat_ensmean_RETOP.conf diff --git a/parm/metplus/GridStat_APCP01h_prob.conf b/parm/metplus/GridStat_ensprob_APCP01h.conf similarity index 100% rename from parm/metplus/GridStat_APCP01h_prob.conf rename to parm/metplus/GridStat_ensprob_APCP01h.conf diff --git a/parm/metplus/GridStat_APCP03h_prob.conf b/parm/metplus/GridStat_ensprob_APCP03h.conf similarity index 100% rename from parm/metplus/GridStat_APCP03h_prob.conf rename to parm/metplus/GridStat_ensprob_APCP03h.conf diff --git a/parm/metplus/GridStat_APCP06h_prob.conf b/parm/metplus/GridStat_ensprob_APCP06h.conf similarity index 100% rename from parm/metplus/GridStat_APCP06h_prob.conf rename to parm/metplus/GridStat_ensprob_APCP06h.conf diff --git a/parm/metplus/GridStat_APCP24h_prob.conf b/parm/metplus/GridStat_ensprob_APCP24h.conf similarity index 100% rename from parm/metplus/GridStat_APCP24h_prob.conf rename to parm/metplus/GridStat_ensprob_APCP24h.conf diff --git a/parm/metplus/GridStat_REFC_prob.conf b/parm/metplus/GridStat_ensprob_REFC.conf similarity index 100% rename from parm/metplus/GridStat_REFC_prob.conf rename to parm/metplus/GridStat_ensprob_REFC.conf diff --git a/parm/metplus/GridStat_RETOP_prob.conf b/parm/metplus/GridStat_ensprob_RETOP.conf similarity index 100% rename from parm/metplus/GridStat_RETOP_prob.conf rename to parm/metplus/GridStat_ensprob_RETOP.conf diff --git a/parm/metplus/PointStat_SFC_ensmean.conf b/parm/metplus/PointStat_ensmean_SFC.conf similarity index 99% rename from parm/metplus/PointStat_SFC_ensmean.conf rename to parm/metplus/PointStat_ensmean_SFC.conf index 7f98105a06..b1bc1767ca 100644 --- a/parm/metplus/PointStat_SFC_ensmean.conf +++ b/parm/metplus/PointStat_ensmean_SFC.conf @@ -263,7 +263,7 @@ POINT_STAT_CLIMO_STDEV_INPUT_TEMPLATE = POINT_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_mean # Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_SFC_ensmean_{ENV[CDATE]} +LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_ensmean_SFC_{ENV[CDATE]} # Specify where the location and name of the final metplus_final.conf METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_mean/metplus_final.conus_surface.conf diff --git a/parm/metplus/PointStat_UPA_ensmean.conf b/parm/metplus/PointStat_ensmean_UPA.conf similarity index 99% rename from parm/metplus/PointStat_UPA_ensmean.conf rename to parm/metplus/PointStat_ensmean_UPA.conf index 924b55b722..4d8fd295ad 100644 --- a/parm/metplus/PointStat_UPA_ensmean.conf +++ b/parm/metplus/PointStat_ensmean_UPA.conf @@ -339,7 +339,7 @@ POINT_STAT_CLIMO_STDEV_INPUT_TEMPLATE = POINT_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_mean # Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_UPA_ensmean_{ENV[CDATE]} +LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_ensmean_UPA_{ENV[CDATE]} # Specify where the location and name of the final metplus_final.conf METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_mean/metplus_final.upper_air.conf diff --git a/parm/metplus/PointStat_SFC_ensprob.conf b/parm/metplus/PointStat_ensprob_SFC.conf similarity index 99% rename from parm/metplus/PointStat_SFC_ensprob.conf rename to parm/metplus/PointStat_ensprob_SFC.conf index 102313cb1b..18a6fc9031 100644 --- a/parm/metplus/PointStat_SFC_ensprob.conf +++ b/parm/metplus/PointStat_ensprob_SFC.conf @@ -439,7 +439,7 @@ POINT_STAT_CLIMO_STDEV_INPUT_TEMPLATE = POINT_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_prob # Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_SFC_ensprob_{ENV[CDATE]} +LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_ensprob_SFC_{ENV[CDATE]} # Specify where the location and name of the final metplus_final.conf METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_prob/metplus_final.conus_surface.conf diff --git a/parm/metplus/PointStat_UPA_ensprob.conf b/parm/metplus/PointStat_ensprob_UPA.conf similarity index 99% rename from parm/metplus/PointStat_UPA_ensprob.conf rename to parm/metplus/PointStat_ensprob_UPA.conf index 3bb619056a..1c7889a37f 100644 --- a/parm/metplus/PointStat_UPA_ensprob.conf +++ b/parm/metplus/PointStat_ensprob_UPA.conf @@ -563,7 +563,7 @@ POINT_STAT_CLIMO_STDEV_INPUT_TEMPLATE = POINT_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_prob # Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_UPA_ensprob_{ENV[CDATE]} +LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_ensprob_UPA_{ENV[CDATE]} # Specify where the location and name of the final metplus_final.conf METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_prob/metplus_final.upper_air.conf diff --git a/scripts/exregional_run_met_gridstat_vx_ensmean.sh b/scripts/exregional_run_met_gridstat_vx_ensmean.sh index f53b92d3c3..8ba358b05b 100755 --- a/scripts/exregional_run_met_gridstat_vx_ensmean.sh +++ b/scripts/exregional_run_met_gridstat_vx_ensmean.sh @@ -114,9 +114,9 @@ export DOT_ENSMEM=${dot_ensmem} # if [ ${VAR} == "APCP" ]; then - LOG_SUFFIX=GridStat_${VAR}${ACCUM}h_ensmean_${CDATE} + LOG_SUFFIX=GridStat_ensmean_${VAR}${ACCUM}h_${CDATE} else - LOG_SUFFIX=GridStat_${VAR}_ensmean_${CDATE} + LOG_SUFFIX=GridStat_ensmean_${VAR}_${CDATE} fi # @@ -159,11 +159,11 @@ if [ ${VAR} == "APCP" ]; then export acc="${ACCUM}h" ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/GridStat_${VAR}${acc}_mean.conf + -c ${METPLUS_CONF}/GridStat_ensmean_${VAR}${acc}.conf else ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/GridStat_${VAR}_mean.conf + -c ${METPLUS_CONF}/GridStat_ensmean_${VAR}.conf fi # diff --git a/scripts/exregional_run_met_gridstat_vx_ensprob.sh b/scripts/exregional_run_met_gridstat_vx_ensprob.sh index c768490dab..207d69db5f 100755 --- a/scripts/exregional_run_met_gridstat_vx_ensprob.sh +++ b/scripts/exregional_run_met_gridstat_vx_ensprob.sh @@ -114,9 +114,9 @@ export DOT_ENSMEM=${dot_ensmem} # if [ ${VAR} == "APCP" ]; then - LOG_SUFFIX=GridStat_${VAR}${ACCUM}h_ensprob_${CDATE} + LOG_SUFFIX=GridStat_ensprob_${VAR}${ACCUM}h_${CDATE} else - LOG_SUFFIX=GridStat_${VAR}_ensprob_${CDATE} + LOG_SUFFIX=GridStat_ensprob_${VAR}_${CDATE} fi # @@ -159,11 +159,11 @@ if [ ${VAR} == "APCP" ]; then export acc="${ACCUM}h" ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/GridStat_${VAR}${acc}_prob.conf + -c ${METPLUS_CONF}/GridStat_ensprob_${VAR}${acc}.conf else ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/GridStat_${VAR}_prob.conf + -c ${METPLUS_CONF}/GridStat_ensprob_${VAR}.conf fi # diff --git a/scripts/exregional_run_met_pointstat_vx_ensmean.sh b/scripts/exregional_run_met_pointstat_vx_ensmean.sh index 1e2f4dbae2..67c952d38a 100755 --- a/scripts/exregional_run_met_pointstat_vx_ensmean.sh +++ b/scripts/exregional_run_met_pointstat_vx_ensmean.sh @@ -145,11 +145,7 @@ export POST_OUTPUT_DOMAIN_NAME ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/PointStat_SFC_ensmean.conf - -${METPLUS_PATH}/ush/run_metplus.py \ - -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/PointStat_UPA_ensmean.conf + -c ${METPLUS_CONF}/PointStat_ensmean_${VAR}.conf # #----------------------------------------------------------------------- # diff --git a/scripts/exregional_run_met_pointstat_vx_ensprob.sh b/scripts/exregional_run_met_pointstat_vx_ensprob.sh index 89ca53ea0b..a3d4a36a70 100755 --- a/scripts/exregional_run_met_pointstat_vx_ensprob.sh +++ b/scripts/exregional_run_met_pointstat_vx_ensprob.sh @@ -144,11 +144,7 @@ export POST_OUTPUT_DOMAIN_NAME ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/PointStat_SFC_ensprob.conf - -${METPLUS_PATH}/ush/run_metplus.py \ - -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/PointStat_UPA_ensprob.conf + -c ${METPLUS_CONF}/PointStat_ensprob_${VAR}.conf # #----------------------------------------------------------------------- # From 5fb1d72958c89ebec062a5c1d93c18dd387b44e1 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Mon, 27 Feb 2023 16:31:49 -0700 Subject: [PATCH 015/119] Allow some of the EnsembleStat tasks to use staged ensemble forecast output. Details below. In the ex-scripts for EnsembleStat: (1) generate a new variable FCST_INPUT_FN_TEMPLATE that contains a list of forecast input template files for each of the ensemble members and use this in the METplus configuration files, and (2) change the input base directory (INPUT_BASE) to use VX_FCST_INPUT_BASEDIR, which depending on whether forecasts are being run is set either to the location of the UPP output from the forecasts or to the staged forecast UPP output (this allows staged ensemble staged files to be used to perform ensemble vx). In config_defaults.yaml, introduce new template variables (FCST_SUBDIR_TEMPLATE, FCST_FN_TEMPLATE, and FCST_FN_METPROC_TEMPLATE) that are/will be used in forming the variable FCST_INPUT_FN_TEMPLATE in the EnsembleStat ex-scripts. --- parm/metplus/EnsembleStat_APCP01h.conf | 3 +- parm/metplus/EnsembleStat_REFC.conf | 3 +- parm/metplus/EnsembleStat_RETOP.conf | 3 +- parm/metplus/EnsembleStat_SFC.conf | 5 +-- parm/metplus/EnsembleStat_UPA.conf | 5 +-- ...exregional_run_met_ensemblestat_vx_grid.sh | 34 +++++++++++++++++- ...xregional_run_met_ensemblestat_vx_point.sh | 36 +++++++++++++++++-- .../config.MET_ensemble_verification.yaml | 7 ++++ ush/config_defaults.yaml | 3 ++ 9 files changed, 88 insertions(+), 11 deletions(-) diff --git a/parm/metplus/EnsembleStat_APCP01h.conf b/parm/metplus/EnsembleStat_APCP01h.conf index fc1e92566a..bfd88f0ee2 100644 --- a/parm/metplus/EnsembleStat_APCP01h.conf +++ b/parm/metplus/EnsembleStat_APCP01h.conf @@ -221,7 +221,8 @@ STAGING_DIR = {OUTPUT_BASE}/stage/APCP_01 # FCST_ENSEMBLE_STAT_INPUT_TEMPLATE - comma separated list of ensemble members # or a single line, - filename wildcard characters may be used, ? or *. -FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[MEM_STAR]}{ENV[POSTPRD]}{ENV[NET]}.t{init?fmt=%H}z*.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 +#FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[MEM_STAR]}{ENV[POSTPRD]}{ENV[NET]}.t{init?fmt=%H}z*.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 +FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[FCST_INPUT_FN_TEMPLATE]} # Template to look for point observations. # Example precip24_2010010112.nc diff --git a/parm/metplus/EnsembleStat_REFC.conf b/parm/metplus/EnsembleStat_REFC.conf index 7bda1db6dd..e1c779183e 100644 --- a/parm/metplus/EnsembleStat_REFC.conf +++ b/parm/metplus/EnsembleStat_REFC.conf @@ -220,7 +220,8 @@ STAGING_DIR = {OUTPUT_BASE}/stage/REFC # FCST_ENSEMBLE_STAT_INPUT_TEMPLATE - comma separated list of ensemble members # or a single line, - filename wildcard characters may be used, ? or *. -FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[MEM_STAR]}{ENV[POSTPRD]}{ENV[NET]}.t{init?fmt=%H}z*.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 +#FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[MEM_STAR]}{ENV[POSTPRD]}{ENV[NET]}.t{init?fmt=%H}z*.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 +FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[FCST_INPUT_FN_TEMPLATE]} # Template to look for point observations. # Example precip24_2010010112.nc diff --git a/parm/metplus/EnsembleStat_RETOP.conf b/parm/metplus/EnsembleStat_RETOP.conf index 0f81607b8e..f22ea67f80 100644 --- a/parm/metplus/EnsembleStat_RETOP.conf +++ b/parm/metplus/EnsembleStat_RETOP.conf @@ -223,7 +223,8 @@ STAGING_DIR = {OUTPUT_BASE}/stage/RETOP # FCST_ENSEMBLE_STAT_INPUT_TEMPLATE - comma separated list of ensemble members # or a single line, - filename wildcard characters may be used, ? or *. -FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[MEM_STAR]}{ENV[POSTPRD]}{ENV[NET]}.t{init?fmt=%H}z*.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 +#FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[MEM_STAR]}{ENV[POSTPRD]}{ENV[NET]}.t{init?fmt=%H}z*.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 +FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[FCST_INPUT_FN_TEMPLATE]} # Template to look for point observations. # Example precip24_2010010112.nc diff --git a/parm/metplus/EnsembleStat_SFC.conf b/parm/metplus/EnsembleStat_SFC.conf index b8ee60e16a..6154f8d887 100644 --- a/parm/metplus/EnsembleStat_SFC.conf +++ b/parm/metplus/EnsembleStat_SFC.conf @@ -322,8 +322,9 @@ PB2NC_OUTPUT_TEMPLATE = prepbufr.ndas.{valid?fmt=%Y%m%d%H}.nc # FCST_ENSEMBLE_STAT_INPUT_TEMPLATE - comma separated list of ensemble members # or a single line, - filename wildcard characters may be used, ? or *. -FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = - {ENV[MEM_STAR]}{ENV[POSTPRD]}{ENV[NET]}.t{init?fmt=%H}z*.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 +#FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = +# {ENV[MEM_STAR]}{ENV[POSTPRD]}{ENV[NET]}.t{init?fmt=%H}z*.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 +FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[FCST_INPUT_FN_TEMPLATE]} # Template to look for point observations. # Example precip24_2010010112.nc diff --git a/parm/metplus/EnsembleStat_UPA.conf b/parm/metplus/EnsembleStat_UPA.conf index 536ea3788f..acce0567f2 100644 --- a/parm/metplus/EnsembleStat_UPA.conf +++ b/parm/metplus/EnsembleStat_UPA.conf @@ -392,8 +392,9 @@ PB2NC_OUTPUT_TEMPLATE = prepbufr.ndas.{valid?fmt=%Y%m%d%H}.nc # FCST_ENSEMBLE_STAT_INPUT_TEMPLATE - comma separated list of ensemble members # or a single line, - filename wildcard characters may be used, ? or *. -FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = - {ENV[MEM_STAR]}{ENV[POSTPRD]}{ENV[NET]}.t{init?fmt=%H}z*.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 +#FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = +# {ENV[MEM_STAR]}{ENV[POSTPRD]}{ENV[NET]}.t{init?fmt=%H}z*.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 +FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[FCST_INPUT_FN_TEMPLATE]} # Template to look for point observations. # Example precip24_2010010112.nc diff --git a/scripts/exregional_run_met_ensemblestat_vx_grid.sh b/scripts/exregional_run_met_ensemblestat_vx_grid.sh index 6b09f0dfe8..a24ed81760 100755 --- a/scripts/exregional_run_met_ensemblestat_vx_grid.sh +++ b/scripts/exregional_run_met_ensemblestat_vx_grid.sh @@ -96,7 +96,7 @@ if [ $RUN_ENVIR = "nco" ]; then export MEM_CUSTOM= export DOT_MEM_CUSTOM=".{custom?fmt=%s}" else - export INPUT_BASE=$EXPTDIR/$CDATE + export INPUT_BASE=${VX_FCST_INPUT_BASEDIR} export OUTPUT_BASE=$EXPTDIR export MEM_BASE=$EXPTDIR/$CDATE export LOG_DIR=${EXPTDIR}/log @@ -105,6 +105,35 @@ else export MEM_STAR="mem*/" export MEM_CUSTOM="{custom?fmt=%s}/" export DOT_MEM_CUSTOM= +# +# Construct variable that contains a METplus template of the paths to +# the forecast files that are inputs to the EnsembleStat tool. This +# variable will be exported to the environment and read by the METplus +# configuration files. +# + NDIGITS_ENSMEM_NAMES=3 + time_lag=0 + + FCST_INPUT_FN_TEMPLATE="" + for (( i=0; i<${NUM_ENS_MEMBERS}; i++ )); do + + mem_indx=$(($i+1)) + mem_indx_fmt=$(printf "%0${NDIGITS_ENSMEM_NAMES}d" "${mem_indx}") +# time_lag=$(( ${ENS_TIME_LAG_HRS[$i]}*${secs_per_hour} )) + + SLASH_ENSMEM_SUBDIR_OR_NULL="/mem${mem_indx_fmt}" + template="${CDATE}${SLASH_ENSMEM_SUBDIR_OR_NULL}/postprd/${FCST_FN_TEMPLATE}" + + if [ -z "${FCST_INPUT_FN_TEMPLATE}" ]; then + FCST_INPUT_FN_TEMPLATE=" $(eval echo ${template})" + else + FCST_INPUT_FN_TEMPLATE="\ +${FCST_INPUT_FN_TEMPLATE}, + $(eval echo ${template})" + fi + + done + fi export DOT_ENSMEM=${dot_ensmem} @@ -141,6 +170,9 @@ export NUM_ENS_MEMBERS export NUM_PAD export LOG_SUFFIX +export FCST_INPUT_FN_TEMPLATE +#export FCST_FN_METPROC_TEMPLATE +#export FCST_INPUT_FN_TEMPLATE_METPROC # #----------------------------------------------------------------------- # diff --git a/scripts/exregional_run_met_ensemblestat_vx_point.sh b/scripts/exregional_run_met_ensemblestat_vx_point.sh index 6c9fa8f2e1..bc77a1dbbe 100755 --- a/scripts/exregional_run_met_ensemblestat_vx_point.sh +++ b/scripts/exregional_run_met_ensemblestat_vx_point.sh @@ -92,7 +92,7 @@ if [ $RUN_ENVIR = "nco" ]; then export MEM_CUSTOM= export DOT_MEM_CUSTOM=".{custom?fmt=%s}" else - export INPUT_BASE=$EXPTDIR/$CDATE + export INPUT_BASE=${VX_FCST_INPUT_BASEDIR} export OUTPUT_BASE=$EXPTDIR export MEM_BASE=$EXPTDIR/$CDATE export LOG_DIR=${EXPTDIR}/log @@ -101,6 +101,35 @@ else export MEM_STAR="mem*/" export MEM_CUSTOM="{custom?fmt=%s}/" export DOT_MEM_CUSTOM= +# +# Construct variable that contains a METplus template of the paths to +# the forecast files that are inputs to the EnsembleStat tool. This +# variable will be exported to the environment and read by the METplus +# configuration files. +# + NDIGITS_ENSMEM_NAMES=3 + time_lag=0 + + FCST_INPUT_FN_TEMPLATE="" + for (( i=0; i<${NUM_ENS_MEMBERS}; i++ )); do + + mem_indx=$(($i+1)) + mem_indx_fmt=$(printf "%0${NDIGITS_ENSMEM_NAMES}d" "${mem_indx}") +# time_lag=$(( ${ENS_TIME_LAG_HRS[$i]}*${secs_per_hour} )) + + SLASH_ENSMEM_SUBDIR_OR_NULL="/mem${mem_indx_fmt}" + template="${CDATE}${SLASH_ENSMEM_SUBDIR_OR_NULL}/postprd/${FCST_FN_TEMPLATE}" + + if [ -z "${FCST_INPUT_FN_TEMPLATE}" ]; then + FCST_INPUT_FN_TEMPLATE=" $(eval echo ${template})" + else + FCST_INPUT_FN_TEMPLATE="\ +${FCST_INPUT_FN_TEMPLATE}, + $(eval echo ${template})" + fi + + done + fi export DOT_ENSMEM=${dot_ensmem} @@ -116,7 +145,7 @@ LOG_SUFFIX="EnsembleStat" # #----------------------------------------------------------------------- # -# Check for existence of top-level OBS_DIR +# Check for existence of top-level OBS_DIR # #----------------------------------------------------------------------- # @@ -128,7 +157,7 @@ fi # #----------------------------------------------------------------------- # -# Export some environment variables passed in by the XML and run METplus +# Export some environment variables passed in by the XML and run METplus # #----------------------------------------------------------------------- # @@ -142,6 +171,7 @@ export VX_FCST_MODEL_NAME export NET export POST_OUTPUT_DOMAIN_NAME export NUM_ENS_MEMBERS +export FCST_INPUT_FN_TEMPLATE ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ diff --git a/tests/WE2E/test_configs/verification/config.MET_ensemble_verification.yaml b/tests/WE2E/test_configs/verification/config.MET_ensemble_verification.yaml index d5b01f6816..2749e360ba 100644 --- a/tests/WE2E/test_configs/verification/config.MET_ensemble_verification.yaml +++ b/tests/WE2E/test_configs/verification/config.MET_ensemble_verification.yaml @@ -4,6 +4,7 @@ metadata: completes successfully with MET ensemble verification. user: RUN_ENVIR: community + workflow: CCPP_PHYS_SUITE: FV3_GFS_v15p2 PREDEF_GRID_NAME: RRFS_CONUS_25km @@ -11,24 +12,30 @@ workflow: DATE_LAST_CYCL: '2019061500' FCST_LEN_HRS: 6 PREEXISTING_DIR_METHOD: rename + workflow_switches: RUN_TASK_VX_GRIDSTAT: true RUN_TASK_VX_POINTSTAT: true RUN_TASK_VX_ENSGRID: true RUN_TASK_VX_ENSPOINT: true + 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: FV3GFS LBC_SPEC_INTVL_HRS: 6 FV3GFS_FILE_FMT_LBCS: grib2 USE_USER_STAGED_EXTRN_FILES: true + task_run_fcst: WTIME_RUN_FCST: 01:00:00 + global: DO_ENSEMBLE: true NUM_ENS_MEMBERS: 2 + verification: VX_FCST_MODEL_NAME: FV3_GFS_v15p2_CONUS_25km diff --git a/ush/config_defaults.yaml b/ush/config_defaults.yaml index fbb59040a7..6261c6cc9c 100644 --- a/ush/config_defaults.yaml +++ b/ush/config_defaults.yaml @@ -2724,6 +2724,9 @@ global: verification: VX_FCST_MODEL_NAME: '{{ nco.NET }}.{{ task_run_post.POST_OUTPUT_DOMAIN_NAME }}' VX_FCST_INPUT_BASEDIR: '{{ workflow.EXPTDIR if ((workflow_switches.RUN_TASK_RUN_FCST and task_run_fcst.WRITE_DOPOST) or workflow_switches.RUN_TASK_RUN_POST) }}' + FCST_SUBDIR_TEMPLATE: '{init?fmt=%Y%m%d%H?shift=-${time_lag}}${SLASH_ENSMEM_SUBDIR_OR_NULL}/postprd' + FCST_FN_TEMPLATE: '${NET}.t{init?fmt=%H?shift=-${time_lag}}z.prslev.f{lead?fmt=%HHH?shift=${time_lag}}.${POST_OUTPUT_DOMAIN_NAME}.grib2' + FCST_FN_METPROC_TEMPLATE: '${NET}.t{init?fmt=%H}z.prslev.f{lead?fmt=%HHH}.${POST_OUTPUT_DOMAIN_NAME}_a${ACCUM}h.nc' #---------------------------- # CPL_AQM config parameters From b5f4cc50486b91aa97cf246afffaf75a7a242a47 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Mon, 27 Feb 2023 17:24:31 -0700 Subject: [PATCH 016/119] In the ex-scripts for deterministic PointStat verification and EnsmebleStat for point-obs, ensure that METplus is called only once and for the correct variable (instead of for both SFC and UPA). --- scripts/exregional_run_met_ensemblestat_vx_point.sh | 6 +----- scripts/exregional_run_met_pointstat_vx.sh | 6 +----- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/scripts/exregional_run_met_ensemblestat_vx_point.sh b/scripts/exregional_run_met_ensemblestat_vx_point.sh index bc77a1dbbe..6df50feed0 100755 --- a/scripts/exregional_run_met_ensemblestat_vx_point.sh +++ b/scripts/exregional_run_met_ensemblestat_vx_point.sh @@ -175,11 +175,7 @@ export FCST_INPUT_FN_TEMPLATE ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/EnsembleStat_SFC.conf - -${METPLUS_PATH}/ush/run_metplus.py \ - -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/EnsembleStat_UPA.conf + -c ${METPLUS_CONF}/EnsembleStat_${VAR}.conf # #----------------------------------------------------------------------- diff --git a/scripts/exregional_run_met_pointstat_vx.sh b/scripts/exregional_run_met_pointstat_vx.sh index efedbc2766..556a20ddfb 100755 --- a/scripts/exregional_run_met_pointstat_vx.sh +++ b/scripts/exregional_run_met_pointstat_vx.sh @@ -145,11 +145,7 @@ export POST_OUTPUT_DOMAIN_NAME ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/PointStat_SFC.conf - -${METPLUS_PATH}/ush/run_metplus.py \ - -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/PointStat_UPA.conf + -c ${METPLUS_CONF}/PointStat_${VAR}.conf # #----------------------------------------------------------------------- From 55362d035caa2cb9d54407f377f36a1ae54fba22 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Wed, 1 Mar 2023 15:29:58 -0700 Subject: [PATCH 017/119] Fix for when the value in a bash script input key-value pair contains an equal sign. --- ush/bash_utils/process_args.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ush/bash_utils/process_args.sh b/ush/bash_utils/process_args.sh index 40cc68f4f0..a917109453 100644 --- a/ush/bash_utils/process_args.sh +++ b/ush/bash_utils/process_args.sh @@ -310,7 +310,13 @@ but the element with index i=${i} is empty: for arg_val_pair in "${@:2}"; do arg_name=$(echo ${arg_val_pair} | cut -f1 -d=) - arg_value=$(echo ${arg_val_pair} | cut -f2 -d=) +# The following method with sed also works. +# arg_name=$(echo ${arg_val_pair} | $SED -n -r "s|^([^=]*)(=)(.*)|\1|p") +# The "cut" method of obtaining the value doesn't work when the value +# also contains an equal sign (e.g. when a template of some sort is being +# passed in). So switch to using sed. +# arg_value=$(echo ${arg_val_pair} | cut -f2 -d=) + arg_value=$(echo ${arg_val_pair} | $SED -n -r "s|^([^=]*)(=)(.*)|\3|p") # # If the first character of the argument's value is an opening parenthe- # sis and its last character is a closing parenthesis, then the argument From 3e68fb5c7251350b7013683240d1359b5e31d15a Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Wed, 1 Mar 2023 15:32:19 -0700 Subject: [PATCH 018/119] Add a bash utility script for parsing a METplus time-string template. This should later be replaced with a python version. --- ush/bash_utils/eval_METplus_timestr_tmpl.sh | 238 ++++++++++++++++++++ ush/bash_utils/source_config.sh | 11 +- 2 files changed, 248 insertions(+), 1 deletion(-) create mode 100644 ush/bash_utils/eval_METplus_timestr_tmpl.sh diff --git a/ush/bash_utils/eval_METplus_timestr_tmpl.sh b/ush/bash_utils/eval_METplus_timestr_tmpl.sh new file mode 100644 index 0000000000..bf9280d7e1 --- /dev/null +++ b/ush/bash_utils/eval_METplus_timestr_tmpl.sh @@ -0,0 +1,238 @@ +# +#----------------------------------------------------------------------- +# +# This file defines a function that +# +#----------------------------------------------------------------------- +# +function eval_METplus_timestr_tmpl() { +# +#----------------------------------------------------------------------- +# +# Save current shell options (in a global array). Then set new options +# for this script/function. +# +#----------------------------------------------------------------------- +# + { save_shell_opts; . ${USHdir}/preamble.sh; } > /dev/null 2>&1 +# +#----------------------------------------------------------------------- +# +# Get the full path to the file in which this script/function is located +# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in +# which the file is located (scrfunc_dir). +# +#----------------------------------------------------------------------- +# + local scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) + local scrfunc_fn=$( basename "${scrfunc_fp}" ) + local scrfunc_dir=$( dirname "${scrfunc_fp}" ) +# +#----------------------------------------------------------------------- +# +# Get the name of this function. +# +#----------------------------------------------------------------------- +# + local func_name="${FUNCNAME[0]}" +# +#----------------------------------------------------------------------- +# +# Specify the set of valid argument names for this script/function. Then +# process the arguments provided to this script/function (which should +# consist of a set of name-value pairs of the form arg1="value1", etc). +# +#----------------------------------------------------------------------- +# + local valid_args=( \ + "init_time" \ + "fhr" \ + "METplus_timestr_tmpl" \ + "outvarname_formatted_time" \ + ) + process_args valid_args "$@" +# +#----------------------------------------------------------------------- +# +# For debugging purposes, print out values of arguments passed to this +# script. Note that these will be printed out only if VERBOSE is set to +# TRUE. +# +#----------------------------------------------------------------------- +# + print_input_args valid_args +# +#----------------------------------------------------------------------- +# +# Declare local variables. +# +#----------------------------------------------------------------------- +# + local fmt \ + formatted_time \ + hh_init \ + init_time_str \ + lead_hrs \ + len \ + mn_init \ + METplus_time_fmt \ + METplus_time_shift \ + METplus_time_type \ + regex_search \ + ss_init \ + valid_time_str \ + yyyymmdd_init +# +#----------------------------------------------------------------------- +# +# Run checks on input arguments. +# +#----------------------------------------------------------------------- +# + if [ -z "${METplus_timestr_tmpl}" ]; then + print_err_msg_exit "\ +The specified METplus time string template (METplus_timestr_tmpl) cannot be empty: + METplus_timestr_tmpl = \"${METplus_timestr_tmpl}\"" + fi + + len=${#init_time} + if [[ ${init_time} =~ ^[0-9]+$ ]]; then + if [ "$len" -ne 10 ] && [ "$len" -ne 12 ] && [ "$len" -ne 14 ]; then + print_err_msg_exit "\ +The specified initial time string (init_time) must contain exactly 10, +12, or 14 integers (but contains $len): + init_time = \"${init_time}\"" + fi + else + print_err_msg_exit "\ +The specified initial time string (init_time) must consist of only +integers and cannot be empty: + init_time = \"${init_time}\"" + fi + + if ! [[ $fhr =~ ^[0-9]+$ ]]; then + print_err_msg_exit "\ +The specified forecast hour (fhr) must consist of only integers and +cannot be empty: + fhr = \"${fhr}\"" + fi +# +#----------------------------------------------------------------------- +# +# Set strings for the initial and valid times that can be passed to the +# "date" utility for evaluation. +# +#----------------------------------------------------------------------- +# + yyyymmdd_init=${init_time:0:8} + hh_init=${init_time:8:2} + + mn_init="00" + if [ "$len" -gt "10" ]; then + mn_init=${init_time:10:2} + fi + + ss_init="00" + if [ "$len" -gt "12" ]; then + ss_init=${init_time:12:2} + fi + + init_time_str=$( printf "%s" "${yyyymmdd_init} + ${hh_init} hours + ${mn_init} minutes + ${ss_init} seconds" ) + valid_time_str=$( printf "%s" "${init_time_str} + ${fhr} hours" ) +# +#----------------------------------------------------------------------- +# +# Parse the input METplus time string template. +# +#----------------------------------------------------------------------- +# + regex_search="^\{(init|valid|lead)(\?)(fmt=)([^\?]*)(\?)?(shift=)?([^\?]*)?\}" + METplus_time_type=$( \ + printf "%s" "${METplus_timestr_tmpl}" | $SED -n -r -e "s/${regex_search}/\1/p" ) + METplus_time_fmt=$( \ + printf "%s" "${METplus_timestr_tmpl}" | $SED -n -r -e "s/${regex_search}/\4/p" ) + METplus_time_shift=$( \ + printf "%s" "${METplus_timestr_tmpl}" | $SED -n -r -e "s/${regex_search}/\7/p" ) +# +#----------------------------------------------------------------------- +# +# Get strings for the time format and time shift that can be passed to +# the "date" utility or the "printf" command. +# +#----------------------------------------------------------------------- +# + case "${METplus_time_fmt}" in + "%Y%m%d%H"|"%Y%m%d"|"%H%M%S"|"%H") + fmt="${METplus_time_fmt}" + ;; + "%HHH") + fmt="%03d" + ;; + *) + print_err_msg_exit "\ +Unsupported METplus time format: + METplus_time_fmt = \"${METplus_time_fmt}\" +METplus time string template passed to this function is: + METplus_timestr_tmpl = \"${METplus_timestr_tmpl}\"" + ;; + esac + + time_shift_str=$(( ${METplus_time_shift} + 0 ))" seconds" +# +#----------------------------------------------------------------------- +# +# Set the formatted time string. +# +#----------------------------------------------------------------------- +# + case "${METplus_time_type}" in + "init") + formatted_time=$( ${DATE_UTIL} --date="${init_time_str} + ${time_shift_str}" +"${fmt}" ) + ;; + "valid") + formatted_time=$( ${DATE_UTIL} --date="${valid_time_str} + ${time_shift_str}" +"${fmt}" ) + ;; + "lead") + lead_hrs=$(( ($( ${DATE_UTIL} --date="${valid_time_str} + ${time_shift_str}" +"%s" ) \ + - $( ${DATE_UTIL} --date="${init_time_str}" +"%s" ) \ + )/${secs_per_hour} )) + formatted_time=$( printf "${fmt}" "${lead_hrs}" ) + ;; + *) + print_err_msg_exit "\ +Unsupported METplus time type: + METplus_time_type = \"${METplus_time_type}\" +METplus time string template passed to this function is: + METplus_timestr_tmpl = \"${METplus_timestr_tmpl}\"" + ;; + esac + + if [ -z "${formatted_time}" ]; then + print_err_msg_exit "\ +The specified METplus time string template (METplus_timestr_tmpl) could +not be evaluated for the given initial time (init_time) and forecast +hour (fhr): + METplus_timestr_tmpl = \"${METplus_timestr_tmpl}\" + init_time = \"${init_time}\" + fhr = \"${fhr}\"" + fi +# +#----------------------------------------------------------------------- +# +# Set output variables. +# +#----------------------------------------------------------------------- +# + if [ ! -z "${outvarname_formatted_time}" ]; then + printf -v ${outvarname_formatted_time} "%s" "${formatted_time}" + fi +# +#----------------------------------------------------------------------- +# +# Restore the shell options saved at the beginning of this script/function. +# +#----------------------------------------------------------------------- +# + { restore_shell_opts; } > /dev/null 2>&1 + +} diff --git a/ush/bash_utils/source_config.sh b/ush/bash_utils/source_config.sh index df5a79a0df..a239927c86 100644 --- a/ush/bash_utils/source_config.sh +++ b/ush/bash_utils/source_config.sh @@ -4,8 +4,12 @@ # into the calling shell script #----------------------------------------------------------------------- # - +tmpfn="bbbbbb.txt" function config_to_str() { + echo "cccccccccccccccc" >> ${tmpfn} + echo " $1" >> ${tmpfn} + echo " $2" >> ${tmpfn} + echo " ${@:3}" >> ${tmpfn} $USHdir/config_utils.py -o $1 -c $2 "${@:3}" } @@ -15,6 +19,8 @@ function config_to_str() { #----------------------------------------------------------------------- # function config_to_shell_str() { + echo "bbbbbbbbbbbbbbbb" >> ${tmpfn} + echo " $@" >> ${tmpfn} config_to_str shell "$@" } function config_to_ini_str() { @@ -48,6 +54,9 @@ function source_config() { # function source_config_for_task() { + rm ${tmpfn} + echo "aaaaaaaaaaaaaaa" >> ${tmpfn} + echo " $@" >> ${tmpfn} source <( config_to_shell_str "${@:2}" -k "(^(?!task_)|$1).*" ) } From 747eb8ce9c01fee04d90c8244cbe630b2163e7a5 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Wed, 1 Mar 2023 15:38:43 -0700 Subject: [PATCH 019/119] Add a bash utility script for parsing a METplus time-string template. This should later be replaced with a python version. --- ush/bash_utils/eval_METplus_timestr_tmpl.sh | 238 ++++++++++++++++++++ ush/source_util_funcs.sh | 11 +- 2 files changed, 248 insertions(+), 1 deletion(-) create mode 100644 ush/bash_utils/eval_METplus_timestr_tmpl.sh diff --git a/ush/bash_utils/eval_METplus_timestr_tmpl.sh b/ush/bash_utils/eval_METplus_timestr_tmpl.sh new file mode 100644 index 0000000000..bf9280d7e1 --- /dev/null +++ b/ush/bash_utils/eval_METplus_timestr_tmpl.sh @@ -0,0 +1,238 @@ +# +#----------------------------------------------------------------------- +# +# This file defines a function that +# +#----------------------------------------------------------------------- +# +function eval_METplus_timestr_tmpl() { +# +#----------------------------------------------------------------------- +# +# Save current shell options (in a global array). Then set new options +# for this script/function. +# +#----------------------------------------------------------------------- +# + { save_shell_opts; . ${USHdir}/preamble.sh; } > /dev/null 2>&1 +# +#----------------------------------------------------------------------- +# +# Get the full path to the file in which this script/function is located +# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in +# which the file is located (scrfunc_dir). +# +#----------------------------------------------------------------------- +# + local scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) + local scrfunc_fn=$( basename "${scrfunc_fp}" ) + local scrfunc_dir=$( dirname "${scrfunc_fp}" ) +# +#----------------------------------------------------------------------- +# +# Get the name of this function. +# +#----------------------------------------------------------------------- +# + local func_name="${FUNCNAME[0]}" +# +#----------------------------------------------------------------------- +# +# Specify the set of valid argument names for this script/function. Then +# process the arguments provided to this script/function (which should +# consist of a set of name-value pairs of the form arg1="value1", etc). +# +#----------------------------------------------------------------------- +# + local valid_args=( \ + "init_time" \ + "fhr" \ + "METplus_timestr_tmpl" \ + "outvarname_formatted_time" \ + ) + process_args valid_args "$@" +# +#----------------------------------------------------------------------- +# +# For debugging purposes, print out values of arguments passed to this +# script. Note that these will be printed out only if VERBOSE is set to +# TRUE. +# +#----------------------------------------------------------------------- +# + print_input_args valid_args +# +#----------------------------------------------------------------------- +# +# Declare local variables. +# +#----------------------------------------------------------------------- +# + local fmt \ + formatted_time \ + hh_init \ + init_time_str \ + lead_hrs \ + len \ + mn_init \ + METplus_time_fmt \ + METplus_time_shift \ + METplus_time_type \ + regex_search \ + ss_init \ + valid_time_str \ + yyyymmdd_init +# +#----------------------------------------------------------------------- +# +# Run checks on input arguments. +# +#----------------------------------------------------------------------- +# + if [ -z "${METplus_timestr_tmpl}" ]; then + print_err_msg_exit "\ +The specified METplus time string template (METplus_timestr_tmpl) cannot be empty: + METplus_timestr_tmpl = \"${METplus_timestr_tmpl}\"" + fi + + len=${#init_time} + if [[ ${init_time} =~ ^[0-9]+$ ]]; then + if [ "$len" -ne 10 ] && [ "$len" -ne 12 ] && [ "$len" -ne 14 ]; then + print_err_msg_exit "\ +The specified initial time string (init_time) must contain exactly 10, +12, or 14 integers (but contains $len): + init_time = \"${init_time}\"" + fi + else + print_err_msg_exit "\ +The specified initial time string (init_time) must consist of only +integers and cannot be empty: + init_time = \"${init_time}\"" + fi + + if ! [[ $fhr =~ ^[0-9]+$ ]]; then + print_err_msg_exit "\ +The specified forecast hour (fhr) must consist of only integers and +cannot be empty: + fhr = \"${fhr}\"" + fi +# +#----------------------------------------------------------------------- +# +# Set strings for the initial and valid times that can be passed to the +# "date" utility for evaluation. +# +#----------------------------------------------------------------------- +# + yyyymmdd_init=${init_time:0:8} + hh_init=${init_time:8:2} + + mn_init="00" + if [ "$len" -gt "10" ]; then + mn_init=${init_time:10:2} + fi + + ss_init="00" + if [ "$len" -gt "12" ]; then + ss_init=${init_time:12:2} + fi + + init_time_str=$( printf "%s" "${yyyymmdd_init} + ${hh_init} hours + ${mn_init} minutes + ${ss_init} seconds" ) + valid_time_str=$( printf "%s" "${init_time_str} + ${fhr} hours" ) +# +#----------------------------------------------------------------------- +# +# Parse the input METplus time string template. +# +#----------------------------------------------------------------------- +# + regex_search="^\{(init|valid|lead)(\?)(fmt=)([^\?]*)(\?)?(shift=)?([^\?]*)?\}" + METplus_time_type=$( \ + printf "%s" "${METplus_timestr_tmpl}" | $SED -n -r -e "s/${regex_search}/\1/p" ) + METplus_time_fmt=$( \ + printf "%s" "${METplus_timestr_tmpl}" | $SED -n -r -e "s/${regex_search}/\4/p" ) + METplus_time_shift=$( \ + printf "%s" "${METplus_timestr_tmpl}" | $SED -n -r -e "s/${regex_search}/\7/p" ) +# +#----------------------------------------------------------------------- +# +# Get strings for the time format and time shift that can be passed to +# the "date" utility or the "printf" command. +# +#----------------------------------------------------------------------- +# + case "${METplus_time_fmt}" in + "%Y%m%d%H"|"%Y%m%d"|"%H%M%S"|"%H") + fmt="${METplus_time_fmt}" + ;; + "%HHH") + fmt="%03d" + ;; + *) + print_err_msg_exit "\ +Unsupported METplus time format: + METplus_time_fmt = \"${METplus_time_fmt}\" +METplus time string template passed to this function is: + METplus_timestr_tmpl = \"${METplus_timestr_tmpl}\"" + ;; + esac + + time_shift_str=$(( ${METplus_time_shift} + 0 ))" seconds" +# +#----------------------------------------------------------------------- +# +# Set the formatted time string. +# +#----------------------------------------------------------------------- +# + case "${METplus_time_type}" in + "init") + formatted_time=$( ${DATE_UTIL} --date="${init_time_str} + ${time_shift_str}" +"${fmt}" ) + ;; + "valid") + formatted_time=$( ${DATE_UTIL} --date="${valid_time_str} + ${time_shift_str}" +"${fmt}" ) + ;; + "lead") + lead_hrs=$(( ($( ${DATE_UTIL} --date="${valid_time_str} + ${time_shift_str}" +"%s" ) \ + - $( ${DATE_UTIL} --date="${init_time_str}" +"%s" ) \ + )/${secs_per_hour} )) + formatted_time=$( printf "${fmt}" "${lead_hrs}" ) + ;; + *) + print_err_msg_exit "\ +Unsupported METplus time type: + METplus_time_type = \"${METplus_time_type}\" +METplus time string template passed to this function is: + METplus_timestr_tmpl = \"${METplus_timestr_tmpl}\"" + ;; + esac + + if [ -z "${formatted_time}" ]; then + print_err_msg_exit "\ +The specified METplus time string template (METplus_timestr_tmpl) could +not be evaluated for the given initial time (init_time) and forecast +hour (fhr): + METplus_timestr_tmpl = \"${METplus_timestr_tmpl}\" + init_time = \"${init_time}\" + fhr = \"${fhr}\"" + fi +# +#----------------------------------------------------------------------- +# +# Set output variables. +# +#----------------------------------------------------------------------- +# + if [ ! -z "${outvarname_formatted_time}" ]; then + printf -v ${outvarname_formatted_time} "%s" "${formatted_time}" + fi +# +#----------------------------------------------------------------------- +# +# Restore the shell options saved at the beginning of this script/function. +# +#----------------------------------------------------------------------- +# + { restore_shell_opts; } > /dev/null 2>&1 + +} diff --git a/ush/source_util_funcs.sh b/ush/source_util_funcs.sh index 1157664c06..fa097de34d 100644 --- a/ush/source_util_funcs.sh +++ b/ush/source_util_funcs.sh @@ -224,7 +224,16 @@ function source_util_funcs() { # #----------------------------------------------------------------------- # -# Source the file containing the function that sources config files +# Source the file containing the function that evaluates a METplus time +# string template. +# +#----------------------------------------------------------------------- +# + . ${bashutils_dir}/eval_METplus_timestr_tmpl.sh +# +#----------------------------------------------------------------------- +# +# Source the file containing the function that sources config files. # #----------------------------------------------------------------------- # From 561cfa8b4a74720122e926eed79b9cf246702ce8 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Wed, 1 Mar 2023 15:41:06 -0700 Subject: [PATCH 020/119] Add METplus variable LOG_DIR to common.conf since it is used in all METplus tasks. --- parm/metplus/common.conf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/parm/metplus/common.conf b/parm/metplus/common.conf index 01cc667460..52a0dbdadc 100644 --- a/parm/metplus/common.conf +++ b/parm/metplus/common.conf @@ -14,6 +14,9 @@ METPLUS_PARM_BASE = {ENV[METPLUS_CONF]} # Location of configuration files used by MET applications CONFIG_DIR = {METPLUS_BASE}/parm/met_config +# Location of LOG_DIR +LOG_DIR = {ENV[LOGDIR]} + # Other directories TMP_DIR = /tmp From 93c48b0734983a02f63486b56586e5be902fc8a2 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Thu, 2 Mar 2023 03:12:49 -0700 Subject: [PATCH 021/119] Remove debugging code. --- ush/bash_utils/source_config.sh | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/ush/bash_utils/source_config.sh b/ush/bash_utils/source_config.sh index a239927c86..df5a79a0df 100644 --- a/ush/bash_utils/source_config.sh +++ b/ush/bash_utils/source_config.sh @@ -4,12 +4,8 @@ # into the calling shell script #----------------------------------------------------------------------- # -tmpfn="bbbbbb.txt" + function config_to_str() { - echo "cccccccccccccccc" >> ${tmpfn} - echo " $1" >> ${tmpfn} - echo " $2" >> ${tmpfn} - echo " ${@:3}" >> ${tmpfn} $USHdir/config_utils.py -o $1 -c $2 "${@:3}" } @@ -19,8 +15,6 @@ function config_to_str() { #----------------------------------------------------------------------- # function config_to_shell_str() { - echo "bbbbbbbbbbbbbbbb" >> ${tmpfn} - echo " $@" >> ${tmpfn} config_to_str shell "$@" } function config_to_ini_str() { @@ -54,9 +48,6 @@ function source_config() { # function source_config_for_task() { - rm ${tmpfn} - echo "aaaaaaaaaaaaaaa" >> ${tmpfn} - echo " $@" >> ${tmpfn} source <( config_to_shell_str "${@:2}" -k "(^(?!task_)|$1).*" ) } From 68de47eef0b8a221bbf82b08aca51d63ac61cf85 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Thu, 2 Mar 2023 17:02:33 -0700 Subject: [PATCH 022/119] Clean up METplus conf file for APCP01h to make it more similar to the shell version. --- parm/metplus/GridStat_APCP01h.conf | 180 ++++++++++++++++------------- 1 file changed, 99 insertions(+), 81 deletions(-) diff --git a/parm/metplus/GridStat_APCP01h.conf b/parm/metplus/GridStat_APCP01h.conf index 0fc402ed67..8ed23dda15 100644 --- a/parm/metplus/GridStat_APCP01h.conf +++ b/parm/metplus/GridStat_APCP01h.conf @@ -14,7 +14,7 @@ PROCESS_LIST = GridStat # VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set LOOP_BY = INIT -# Format of INIT_BEG and INT_END using % items +# 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 @@ -26,14 +26,14 @@ INIT_BEG = {ENV[CDATE]} # End time for METplus run - must match INIT_TIME_FMT INIT_END = {ENV[CDATE]} -# Increment between METplus runs (in seconds if no units are specified) -# Must be >= 60 seconds +# Increment between METplus runs (in seconds if no units are specified). +# Must be >= 60 seconds. INIT_INCREMENT = 3600 # List of forecast leads to process for each run time (init or valid) # In hours if units are not specified # If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[fhr_list]} +LEAD_SEQ = {ENV[fhr_list]} # Order of loops to process data - Options are times, processes # Not relevant if only one item is in the PROCESS_LIST @@ -45,27 +45,25 @@ LEAD_SEQ = {ENV[fhr_list]} # wrappers have been run LOOP_ORDER = times -# Run pcp_combine on forecast/obs data? -FCST_PCP_COMBINE_RUN = False -OBS_PCP_COMBINE_RUN = False - # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 -LOG_DIR = {ENV[LOG_DIR]} - -# Specify the name of the metplus.log file +# +# Specify the name of the METplus log file. +# LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/metprd/grid_stat/metplus_final.APCP_01h{ENV[DOT_ENSMEM]}.conf - -# Location of MET config file to pass to GridStat +# +# Specify the location and name of the final METplus conf file. +# +METPLUS_CONF = {OUTPUT_BASE}/metprd/grid_stat/metplus_final.APCP_01h{ENV[DOT_ENSMEM]}.conf +# +# Location of MET config file to pass to GridStat. +# GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped # grid to remap data. Value is set as the 'to_grid' variable in the 'regrid' dictionary # See MET User's Guide for more information -GRID_STAT_REGRID_TO_GRID = FCST +GRID_STAT_REGRID_TO_GRID = FCST GRID_STAT_REGRID_VLD_THRESH = 0.5 GRID_STAT_REGRID_METHOD = BUDGET GRID_STAT_REGRID_WIDTH = 2 @@ -79,15 +77,23 @@ GRID_STAT_REGRID_SHAPE = SQUARE #GRID_STAT_GRID_WEIGHT_FLAG = -# Name to identify model (forecast) data in output +# +# 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). +# MODEL = {ENV[VX_FCST_MODEL_NAME]} -FCST_NATIVE_DATA_TYPE = GRIB -# Name to identify observation data in output +FCST_NATIVE_DATA_TYPE = GRIB +# +# Name to identify observation data in output. +# OBTYPE = CCPA OBS_NATIVE_DATA_TYPE = GRIB - -# set the desc value in the GridStat MET config file +# +# 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 @@ -96,38 +102,35 @@ GRID_STAT_DESC = NA # 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; - -# Name of forecast variable 1 +# +# String to search for in the foreast input files for forecast variable +# 1. +# FCST_VAR1_NAME = APCP - -# List of levels to evaluate for forecast variable 1 -# A03 = 3 hour accumulation in GRIB file +# +# List of levels to evaluate for forecast variable 1. +# FCST_VAR1_LEVELS = A01 - +# # List of thresholds to evaluate for each name/level combination for -# forecast variable 1 -#FCST_VAR1_THRESH = gt12.7, gt25.4, gt50.8, gt76.2 +# forecast variable 1. +# BOTH_VAR1_THRESH = gt0.0,ge0.254,ge0.508,ge1.27,ge2.54 - -#FCST_GRID_STAT_FILE_TYPE = - -# Name of observation variable 1 +# +# String to search for in the observation input files for observation +# variable 1. +# OBS_VAR1_NAME = APCP - -# List of levels to evaluate for observation variable 1 -# (*,*) is NetCDF notation - must include quotes around these values! -# must be the same length as FCST_VAR1_LEVELS +# +# List of levels to evaluate for observation variable 1. Must be the +# same length as FCST_VAR1_LEVELS. +# OBS_VAR1_LEVELS = A01 - -# List of thresholds to evaluate for each name/level combination for -# observation variable 1 -#OBS_VAR1_THRESH = gt12.7, gt25.4, gt50.8, gt76.2 - -#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. +# 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 @@ -150,11 +153,13 @@ GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5 # 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 +# +# Set to true if forecast data is probabilistic. +# FCST_IS_PROB = False - +# # Only used if FCST_IS_PROB is true - sets probabilistic threshold +# FCST_GRID_STAT_PROB_THRESH = ==0.1 GRID_STAT_OUTPUT_PREFIX = {MODEL}_{CURRENT_FCST_NAME}_{ENV[acc]}_{OBTYPE} @@ -189,7 +194,7 @@ GRID_STAT_OUTPUT_PREFIX = {MODEL}_{CURRENT_FCST_NAME}_{ENV[acc]}_{OBTYPE} GRID_STAT_MASK_GRID = # Statistical output types -GRID_STAT_OUTPUT_FLAG_FHO = STAT +GRID_STAT_OUTPUT_FLAG_FHO = STAT GRID_STAT_OUTPUT_FLAG_CTC = STAT GRID_STAT_OUTPUT_FLAG_CTS = STAT #GRID_STAT_OUTPUT_FLAG_MCTC = NONE @@ -225,50 +230,63 @@ GRID_STAT_NC_PAIRS_FLAG_NBRHD = 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 +# End of [config] section and start of [dir] section. [dir] - -# directory containing forecast input to GridStat +# +# Directory containing observation input to GridStat. +# +OBS_GRID_STAT_INPUT_DIR = {ENV[OBS_DIR]} +# +# Directory containing forecast input to GridStat. +# INPUT_BASE = {ENV[INPUT_BASE]} FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} - -# directory containing observation input to GridStat -OBS_GRID_STAT_INPUT_DIR = {ENV[OBS_DIR]} - -# directory containing climatology mean input to GridStat -# Not used in this example +# +# 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 +# +# Directory containing climatology mean input to GridStat. Not used in +# this example. +# GRID_STAT_CLIMO_STDEV_INPUT_DIR = - -# directory to write output from GridStat +# +# Directory in which to write output from GridStat. +# OUTPUT_BASE = {ENV[OUTPUT_BASE]} GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} STAGING_DIR = {OUTPUT_BASE}/stage/APCP_01h -# End of [dir] section and start of [filename_templates] section +# End of [dir] section and start of [filename_templates] section. [filename_templates] - -# Template to look for forecast input to GridStat relative to FCST_GRID_STAT_INPUT_DIR +# +# Template to look for forecast input to GridStat relative to +# FCST_GRID_STAT_INPUT_DIR. +# FCST_GRID_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_ENSMEM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 - -# Template to look for observation input to GridStat relative to OBS_GRID_STAT_INPUT_DIR +# +# Template to look for observation input to GridStat relative to +# OBS_GRID_STAT_INPUT_DIR. +# OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2 - -# Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat +# +# Template for output from GridStat relative to GRID_STAT_OUTPUT_DIR. +# GRID_STAT_OUTPUT_TEMPLATE = metprd/grid_stat - -# Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# 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 to look for climatology input to GridStat relative to GRID_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# 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 = - -# Used to specify one or more verification mask files for GridStat -# Not used for this example +# +# 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 From 50642131981999d74cc0894b940d78893d75d5d8 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Thu, 2 Mar 2023 17:10:04 -0700 Subject: [PATCH 023/119] In the output of the GridStat tool for APCP01h, add to the MODEL variable the ensemble member name (if doing an ensemble forecast). This makes it easier in METviewer to identify curves corresponding to different members. --- parm/metplus/GridStat_APCP01h.conf | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/parm/metplus/GridStat_APCP01h.conf b/parm/metplus/GridStat_APCP01h.conf index 8ed23dda15..4beb99196d 100644 --- a/parm/metplus/GridStat_APCP01h.conf +++ b/parm/metplus/GridStat_APCP01h.conf @@ -81,9 +81,11 @@ GRID_STAT_REGRID_SHAPE = SQUARE # 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). +# these files is then plotted (e.g. using METViewer). Here, we add a +# suffix to MODEL that identifies the forecast ensemble member. This +# makes it easier to identify each curve. # -MODEL = {ENV[VX_FCST_MODEL_NAME]} +MODEL = {ENV[VX_FCST_MODEL_NAME]}{ENV[USCORE_ENSMEM_NAME_OR_NULL]} FCST_NATIVE_DATA_TYPE = GRIB # From 91e394ad1282cc08de219f57da7d9478e816c216 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Mon, 6 Mar 2023 15:27:25 -0700 Subject: [PATCH 024/119] Replace GET_OBS and TN_VX with the more descriptive variables GET_OBS_LOCAL_MODULE_FN and VX_LOCAL_MODULE_FN; fix spacing. --- parm/FV3LAM_wflow.xml | 77 ++++++++++++++++++++-------------------- ush/config_defaults.yaml | 10 ------ 2 files changed, 38 insertions(+), 49 deletions(-) diff --git a/parm/FV3LAM_wflow.xml b/parm/FV3LAM_wflow.xml index bbf4450931..76ffffa112 100644 --- a/parm/FV3LAM_wflow.xml +++ b/parm/FV3LAM_wflow.xml @@ -23,9 +23,9 @@ Parameters needed by the job scheduler. Workflow task names. --> {%- if sched_native_cmd %} - + {%- else %} - + {%- endif %} @@ -41,7 +41,6 @@ Workflow task names. - @@ -1321,7 +1320,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_HPSS; - &LOAD_MODULES_RUN_TASK_FP; "&GET_OBS;" "&JOBSdir;/JREGIONAL_GET_OBS_CCPA" + &LOAD_MODULES_RUN_TASK_FP; "&GET_OBS_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_GET_OBS_CCPA" {{ nnodes_get_obs_ccpa }}:ppn={{ ppn_get_obs_ccpa }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_get_obs_ccpa }} @@ -1353,7 +1352,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_HPSS; - &LOAD_MODULES_RUN_TASK_FP; "&GET_OBS;" "&JOBSdir;/JREGIONAL_GET_OBS_MRMS" + &LOAD_MODULES_RUN_TASK_FP; "&GET_OBS_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_GET_OBS_MRMS" {{ nnodes_get_obs_mrms }}:ppn={{ ppn_get_obs_mrms }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_get_obs_mrms }} @@ -1386,7 +1385,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_HPSS; - &LOAD_MODULES_RUN_TASK_FP; "&GET_OBS;" "&JOBSdir;/JREGIONAL_GET_OBS_NDAS" + &LOAD_MODULES_RUN_TASK_FP; "&GET_OBS_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_GET_OBS_NDAS" {{ nnodes_get_obs_ndas }}:ppn={{ ppn_get_obs_ndas }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_get_obs_ndas }} @@ -1417,7 +1416,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" {{ nnodes_run_met_gridstat_vx_apcp01h }}:ppn={{ ppn_run_met_gridstat_vx_apcp01h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_apcp01h }} @@ -1469,7 +1468,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" {{ nnodes_run_met_gridstat_vx_apcp03h }}:ppn={{ ppn_run_met_gridstat_vx_apcp03h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_apcp03h }} @@ -1511,7 +1510,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" {{ nnodes_run_met_gridstat_vx_apcp06h }}:ppn={{ ppn_run_met_gridstat_vx_apcp06h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_apcp06h }} @@ -1553,7 +1552,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" {{ nnodes_run_met_gridstat_vx_apcp24h }}:ppn={{ ppn_run_met_gridstat_vx_apcp24h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_apcp24h }} @@ -1594,7 +1593,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" {{ nnodes_run_met_gridstat_vx_refc }}:ppn={{ ppn_run_met_gridstat_vx_refc }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_refc }} @@ -1644,7 +1643,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" {{ nnodes_run_met_gridstat_vx_retop }}:ppn={{ ppn_run_met_gridstat_vx_retop }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_retop }} @@ -1673,7 +1672,7 @@ it, we'd have to include more jinja if-statements here. {#- Redundant dependency to simplify jinja code. #} - TRUETRUE + TRUETRUE {%- if run_task_get_obs_mrms %} {%- endif %} @@ -1696,7 +1695,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX" {{ nnodes_run_met_pointstat_vx_sfc }}:ppn={{ ppn_run_met_pointstat_vx_sfc }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_pointstat_vx_sfc }} @@ -1725,7 +1724,7 @@ it, we'd have to include more jinja if-statements here. {#- Redundant dependency to simplify jinja code. #} - TRUETRUE + TRUETRUE {%- if run_task_get_obs_ndas %} {%- endif %} @@ -1745,7 +1744,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX" {{ nnodes_run_met_pointstat_vx_upa }}:ppn={{ ppn_run_met_pointstat_vx_upa }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_pointstat_vx_upa }} @@ -1774,7 +1773,7 @@ it, we'd have to include more jinja if-statements here. {#- Redundant dependency to simplify jinja code. #} - TRUETRUE + TRUETRUE {%- if run_task_get_obs_ndas %} {%- endif %} @@ -1801,7 +1800,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" {{ nnodes_run_met_ensemblestat_vx_apcp01h }}:ppn={{ ppn_run_met_ensemblestat_vx_apcp01h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_ensemblestat_vx_apcp01h }} @@ -1837,7 +1836,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" {{ nnodes_run_met_ensemblestat_vx_apcp03h }}:ppn={{ ppn_run_met_ensemblestat_vx_apcp03h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_ensemblestat_vx_apcp03h }} @@ -1874,7 +1873,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" {{ nnodes_run_met_ensemblestat_vx_apcp06h }}:ppn={{ ppn_run_met_ensemblestat_vx_apcp06h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_ensemblestat_vx_apcp06h }} @@ -1911,7 +1910,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" {{ nnodes_run_met_ensemblestat_vx_apcp24h }}:ppn={{ ppn_run_met_ensemblestat_vx_apcp24h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_ensemblestat_vx_apcp24h }} @@ -1947,7 +1946,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" {{ nnodes_run_met_ensemblestat_vx_refc }}:ppn={{ ppn_run_met_ensemblestat_vx_refc }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_ensemblestat_vx_refc }} @@ -1981,7 +1980,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" {{ nnodes_run_met_ensemblestat_vx_retop }}:ppn={{ ppn_run_met_ensemblestat_vx_retop }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_ensemblestat_vx_retop }} @@ -2017,7 +2016,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT" {{ nnodes_run_met_ensemblestat_vx_sfc }}:ppn={{ ppn_run_met_ensemblestat_vx_sfc }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_ensemblestat_vx_sfc }} @@ -2050,7 +2049,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT" {{ nnodes_run_met_ensemblestat_vx_upa }}:ppn={{ ppn_run_met_ensemblestat_vx_upa }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_ensemblestat_vx_upa }} @@ -2086,7 +2085,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN" {{ nnodes_run_met_gridstat_vx_ensmean_apcp01h }}:ppn={{ ppn_run_met_gridstat_vx_ensmean_apcp01h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_ensmean_apcp01h }} @@ -2122,7 +2121,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN" {{ nnodes_run_met_gridstat_vx_ensmean_apcp03h }}:ppn={{ ppn_run_met_gridstat_vx_ensmean_apcp03h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_ensmean_apcp03h }} @@ -2159,7 +2158,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN" {{ nnodes_run_met_gridstat_vx_ensmean_apcp06h }}:ppn={{ ppn_run_met_gridstat_vx_ensmean_apcp06h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_ensmean_apcp06h }} @@ -2196,7 +2195,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN" {{ nnodes_run_met_gridstat_vx_ensmean_apcp24h }}:ppn={{ ppn_run_met_gridstat_vx_ensmean_apcp24h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_ensmean_apcp24h }} @@ -2234,7 +2233,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN" {{ nnodes_run_met_pointstat_vx_ensmean_sfc }}:ppn={{ ppn_run_met_pointstat_vx_ensmean_sfc }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_pointstat_vx_ensmean_sfc }} @@ -2267,7 +2266,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN" {{ nnodes_run_met_pointstat_vx_ensmean_upa }}:ppn={{ ppn_run_met_pointstat_vx_ensmean_upa }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_pointstat_vx_ensmean_upa }} @@ -2303,7 +2302,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" {{ nnodes_run_met_gridstat_vx_ensprob_apcp01h }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_apcp01h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_ensprob_apcp01h }} @@ -2339,7 +2338,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" {{ nnodes_run_met_gridstat_vx_ensprob_apcp03h }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_apcp03h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_ensprob_apcp03h }} @@ -2376,7 +2375,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" {{ nnodes_run_met_gridstat_vx_ensprob_apcp06h }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_apcp06h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_ensprob_apcp06h }} @@ -2413,7 +2412,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" {{ nnodes_run_met_gridstat_vx_ensprob_apcp24h }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_apcp24h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_ensprob_apcp24h }} @@ -2449,7 +2448,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" {{ nnodes_run_met_gridstat_vx_ensprob_refc }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_refc }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_ensprob_refc }} @@ -2483,7 +2482,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" {{ nnodes_run_met_gridstat_vx_ensprob_retop }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_retop }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_ensprob_retop }} @@ -2519,7 +2518,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB" {{ nnodes_run_met_pointstat_vx_ensprob_sfc }}:ppn={{ ppn_run_met_pointstat_vx_ensprob_sfc }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_pointstat_vx_ensprob_sfc }} @@ -2552,7 +2551,7 @@ it, we'd have to include more jinja if-statements here. &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_VX;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB" {{ nnodes_run_met_pointstat_vx_ensprob_upa }}:ppn={{ ppn_run_met_pointstat_vx_ensprob_upa }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_pointstat_vx_ensprob_upa }} diff --git a/ush/config_defaults.yaml b/ush/config_defaults.yaml index 6261c6cc9c..a0fda7362b 100644 --- a/ush/config_defaults.yaml +++ b/ush/config_defaults.yaml @@ -879,20 +879,10 @@ workflow: # SYMLINK_FIX_FILES: # Symlink fix files to experiment directory if true; otherwise copy the files. # - # GET_OBS: - # Task modulefile name for all get_obs_* tasks - # - # TN_VX: - # Task name to use in forming the modulefile name for all verification - # tasks. - # #------------------------------------------------------------------------ # COMPILER: "intel" SYMLINK_FIX_FILES: true - - GET_OBS: "get_obs" - TN_VX: "run_vx" # #----------------------------------------------------------------------- # From 28e50eb4e4a4eee6c5c0a6c08037c4312f6c76ed Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Mon, 6 Mar 2023 15:48:52 -0700 Subject: [PATCH 025/119] Include changes inadvertantly left out of previous commit. --- parm/FV3LAM_wflow.xml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/parm/FV3LAM_wflow.xml b/parm/FV3LAM_wflow.xml index 76ffffa112..f47f85d770 100644 --- a/parm/FV3LAM_wflow.xml +++ b/parm/FV3LAM_wflow.xml @@ -37,7 +37,6 @@ Workflow task names. - @@ -71,6 +70,13 @@ Workflow task names. + + + + {%- if run_task_aqm_ics %} From 03307b44446372ce195dfbd48ad9b6f5e00e6623 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Mon, 6 Mar 2023 16:09:03 -0700 Subject: [PATCH 026/119] Include more changes inadvertantly left out of previous commit. --- ush/config_defaults.yaml | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/ush/config_defaults.yaml b/ush/config_defaults.yaml index a0fda7362b..e51fc5a1c4 100644 --- a/ush/config_defaults.yaml +++ b/ush/config_defaults.yaml @@ -2699,21 +2699,37 @@ global: #---------------------------- # verification parameters -# -# VX_FCST_MODEL_NAME: -# String that specifies a descriptive name for the model being verified. -# This is used in forming the names of the verification output files as -# well as in the contents of those files. -# -# VX_FCST_INPUT_BASEDIR: -# Location of top-level directory containing forecast (but not obs) files -# that will be used as input into METplus for verification. If not -# specified, this gets set to EXPTDIR. -# #----------------------------- verification: + # Move some of the following to another section at some point. + # + # GET_OBS_LOCAL_MODULE_FN: + # Local task modulefile name for all GET_OBS_* tasks. + # + GET_OBS_LOCAL_MODULE_FN: 'get_obs' + # + # VX_LOCAL_MODULE_FN: + # Name (without extension) of the local module file for running the vx + # tasks in the workflow. + # + VX_LOCAL_MODULE_FN: 'run_vx' + # + # VX_FCST_MODEL_NAME: + # String that specifies a descriptive name for the model being verified. + # This is used in forming the names of the verification output files as + # well as in the contents of those files. + # VX_FCST_MODEL_NAME: '{{ nco.NET }}.{{ task_run_post.POST_OUTPUT_DOMAIN_NAME }}' + # + # VX_FCST_INPUT_BASEDIR: + # Location of top-level directory containing forecast (but not obs) files + # that will be used as input into METplus for verification. If not + # specified, this gets set to EXPTDIR. + # VX_FCST_INPUT_BASEDIR: '{{ workflow.EXPTDIR if ((workflow_switches.RUN_TASK_RUN_FCST and task_run_fcst.WRITE_DOPOST) or workflow_switches.RUN_TASK_RUN_POST) }}' + # + # File name and path templates are used in the verification tasks. + # FCST_SUBDIR_TEMPLATE: '{init?fmt=%Y%m%d%H?shift=-${time_lag}}${SLASH_ENSMEM_SUBDIR_OR_NULL}/postprd' FCST_FN_TEMPLATE: '${NET}.t{init?fmt=%H?shift=-${time_lag}}z.prslev.f{lead?fmt=%HHH?shift=${time_lag}}.${POST_OUTPUT_DOMAIN_NAME}.grib2' FCST_FN_METPROC_TEMPLATE: '${NET}.t{init?fmt=%H}z.prslev.f{lead?fmt=%HHH}.${POST_OUTPUT_DOMAIN_NAME}_a${ACCUM}h.nc' From c6552f12015a34099f6899ffba47b8d1644830b8 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Mon, 6 Mar 2023 17:01:18 -0700 Subject: [PATCH 027/119] Split calls to METplus's PcpCombine tool out of the tasks that run deterministic calls to the GridStat tool. Details below. 1) Create new PcpCombine tasks (both for obs and forecasts) in the ROCOTO template XML. 2) Create new METplus configuration files for the PcpCombine tasks. 3) Disable PcpCombine from the METplus configuration files for the GridStat tool running on APCP 03-hour, 06-hour, and 24-hour forecast data. 4) In the ROCOTO template XML, add dependencies in the deterministic GridStat APCP 03, 06, and 24 hour tasks on the PcpCombine tasks. 5) Add PcpCombine task sections to config_defaults.sh. 6) Add several new vx experiment variables to config_defaults.sh that are needed to run the new PcpCombine tasks: a) RUN_TASKS_METVX_DET: This flag is to enable the deterministic verification tasks in the workflow. If using a single deterministic forecast (either generated by running a forecast or using staged output), setting this flag to True will cause deterministic verification to be run on the post-processed forecast files. If using an ensemble forecast (again either generated by running an ensemble forecast or using staged output), setting this flag to True will cause deterministic verification to be run on the post-processed forecast files of each member of the ensemble. b) RUN_TASKS_METVX_ENS: This flag is to enable the ensemble verification tasks in the workflow. It is relevant only if ensemble forecast files are availabe (either generated by running an ensemble forecast or using staged output). In this case, setting this flag to True will cause ensemble verification to be run on the ensemble as a whole (not on each member of the ensemble). c) VX_FIELDS: This is a list of the fields or groups of fields for which vx will be run. d) VX_APCP_ACCUMS_HH: If VX_FIELDS includes "APCP" (accumulated precipitation), this specifies the accumulation periods (in double-digit hours) to consider. e) VX_OUTPUT_BASEDIR: The base directory under which output from vx tasks will be placed. f) NUM_MISSING_OBS_FILES_MAX: The maximum number of missing observation files to allow before assuming that there aren't enough to perform a meaningful verification. Note that METplus can still perform verification even when some obs files are missing, but we don't want too many to be missing. This is a crude way of controlling how much obs data is allowed to be missing. g) OBS_CCPA_APCP01h_FN_TEMPLATE: File name template used to obtain the input observation files (in the PcpCombine_obs tasks) that contain the 01-hour APCP from which APCP for longer accumulations will be generated. h) OBS_CCPA_APCPgt01h_FN_TEMPLATE: File name template used to generate the obs files (in the PcpCombine_obs tasks) containing APCP for longer than 01-hour accumulation periods. Note that many of these variables will also be used in later PRs in vx tasks other than the ones that use METplus's PcpCombine tool. --- parm/FV3LAM_wflow.xml | 210 +++++++++++++++++++++++++- parm/metplus/GridStat_APCP03h.conf | 233 ++++++++++++++--------------- parm/metplus/GridStat_APCP06h.conf | 233 ++++++++++++++--------------- parm/metplus/GridStat_APCP24h.conf | 233 ++++++++++++++--------------- parm/metplus/PcpCombine_fcst.conf | 126 ++++++++++++++++ parm/metplus/PcpCombine_obs.conf | 138 +++++++++++++++++ ush/config_defaults.yaml | 75 +++++++++- 7 files changed, 873 insertions(+), 375 deletions(-) create mode 100644 parm/metplus/PcpCombine_fcst.conf create mode 100644 parm/metplus/PcpCombine_obs.conf diff --git a/parm/FV3LAM_wflow.xml b/parm/FV3LAM_wflow.xml index f47f85d770..0989412cfc 100644 --- a/parm/FV3LAM_wflow.xml +++ b/parm/FV3LAM_wflow.xml @@ -40,6 +40,7 @@ Workflow task names. + @@ -1318,6 +1319,113 @@ it, we'd have to include more jinja if-statements here. {%- endif %} + + + +{#- +Tasks for pre-processing of APCP forecasts. These must be run either if +deterministic or ensemble verification tasks are going to be run. +#} +{%- if run_tasks_metvx_det or run_tasks_metvx_ens %} +{#- +Tasks for combining (adding) hourly APCP (accumulated precipitation) from +forecasts to obtain APCP obs for longer accumulation periods (3 hours, +6 hours, etc). +#} + {%- if ("APCP" in vx_fields) %} + + {%- for accum_hh in vx_apcp_accums_hh -%} + {%- set obtype = "CCPA" %} + {%- set field = "APCP" %} + {%- set accum = accum_hh|int %} + {%- set fieldname = field ~ accum_hh ~ "h" %} + {%- set base_tn = tn_run_met_pcpcombine -%} + {%- set tn = base_tn ~ "_fcst_" ~ fieldname ~ uscore_ensmem_name -%} + {%- set maxtries = maxtries_run_met_pcpcombine_fcst -%} + {%- set nnodes = nnodes_run_met_pcpcombine_fcst -%} + {%- set ppn = ppn_run_met_pcpcombine_fcst -%} + {%- set wtime = wtime_run_met_pcpcombine_fcst -%} + + {%- set is_ens_fcst = false -%} + + {%- if (accum > 1) and (fcst_len_hrs >= accum) %} + + + + &RSRV_DEFAULT; + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_PCPCOMBINE" + {{nnodes}}:ppn={{ppn}} + {{wtime}} + &NCORES_PER_NODE; + &SCHED_NATIVE_CMD; + {{tn}} + &LOGDIR;/{{tn}}_@Y@m@d@H.log + + GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; + USHdir&USHdir; + LOGDIR&LOGDIR; + OBS_DIR&{{obtype}}_OBS_DIR; + PDY@Y@m@d + cyc@H + subcyc@M + TN{{tn}} + VAR{{field}} + ACCUM_HH{{accum_hh}} + OBTYPE{{obtype}} + obs_or_fcstfcst + USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} + SLASH_ENSMEM_SUBDIR_OR_NULL{{slash_ensmem_subdir}} + {%- if is_ens_fcst or run_tasks_metvx_ens %} + MEM_INDX_OR_NULL#{{ensmem_indx_name}}# + {%- else %} + MEM_INDX_OR_NULL + {%- endif %} + + + +{#- Redundant dependency to simplify jinja code. #} + TRUETRUE +{#- +If the post-processed forecast output needed for verification is being +generated by the TN_RUN_FCST task (by having RUN_TASK_RUN_FCST and +WRITE_DOPOST both set to TRUE, which causes UPP to be called inline, +i.e. from within the weather model), then include a dependency on the +TN_RUN_FCST task. +#} + {%- if run_task_run_fcst and write_dopost %} + +{#- +Otherwise, if UPP is being called separately from the forecast (by +having RUN_TASK_RUN_POST set to TRUE), then inlude a dependency on the +TN_RUN_POST metatask (which runs UPP for all forecast output hours). + +Note that in this case, we have to wait until the whole TN_RUN_POST +metatask is complete before this task can launch, i.e. we cannot launch +this task as the UPP output files for each forecast output hour become +available. This is because the loop over forecast hours for this task +is performed within MET/METplus, not here in rocoto, whereas the loop +over forecast hours for the post-processing is done by rocoto in this +xml. This may be changed in the future. +#} + {%- elif run_task_run_post %} + + {%- endif %} + + + + + {%- endif %} + {%- endfor %} + + {%- endif %} + +{%- endif %} + + + {%- if run_task_get_obs_ccpa %} + + + &RSRV_DEFAULT; + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_PCPCOMBINE" + {{nnodes}}:ppn={{ppn}} + {{wtime}} + &NCORES_PER_NODE; + &SCHED_NATIVE_CMD; + {{tn}} + &LOGDIR;/{{tn}}_@Y@m@d@H.log + + GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; + USHdir&USHdir; + LOGDIR&LOGDIR; + OBS_DIR&{{obtype}}_OBS_DIR; + PDY@Y@m@d + cyc@H + subcyc@M + TN{{tn}} + VAR{{field}} + ACCUM_HH{{accum_hh}} + OBTYPE{{obtype}} + obs_or_fcstobs + USCORE_ENSMEM_NAME_OR_NULL + SLASH_ENSMEM_SUBDIR_OR_NULL + + + + {%- if run_task_get_obs_ccpa %} + + {%- else %} +{#- +We only check for the existence of the top-level CCPA observations +directory, not the individual daily subdirectories within. This is +because this and other downstream vx tasks can complete successfully +even when some obs files are missing (the check for individual files is +done by the scripts that this task calls). +#} + &CCPA_OBS_DIR; + {%- endif %} + + + + + {%- endif %} + + {%- endfor %} + {%- endif %} + +{%- endif %} + + + + + {%- if run_task_vx_gridstat %} + + + &RSRV_DEFAULT; + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_PB2NC_OBS" + {{nnodes}}:ppn={{ppn}} + {{wtime}} + &NCORES_PER_NODE; + &SCHED_NATIVE_CMD; + {{tn}} + &LOGDIR;/{{tn}}_@Y@m@d@H.log + + GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; + USHdir&USHdir; + LOGDIR&LOGDIR; + PDY@Y@m@d + cyc@H + subcyc@M + VARSFC + ACCUM_HH01 + obs_or_fcstobs + OBTYPE{{obtype}} + OBS_DIR&{{obtype}}_OBS_DIR; + + + + {%- if run_task_get_obs_ndas %} + + {%- else %} +{#- +We only check for the existence of the NDAS observations directory, not +for individual prepbufr files within. This is because this and other +downstream vx tasks can complete successfully even when some obs files +are missing (the check for individual files is done by the scripts that +this task calls). +#} + &NDAS_OBS_DIR; + {%- endif %} + + + + + {%- endfor %} + + {%- endif %} + {#- Tasks for combining (adding) hourly APCP (accumulated precipitation) from CCPA observations to obtain APCP obs for longer accumulation periods @@ -1715,10 +1785,10 @@ done by the scripts that this task calls). LOGDIR&LOGDIR; FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} VARAPCP - ACCUM01 + ACCUM_HH01 USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} + SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} {%- if do_ensemble %} - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} ENSMEM_INDX#{{ ensmem_indx_name }}# {%- endif %} @@ -1767,10 +1837,10 @@ done by the scripts that this task calls). LOGDIR&LOGDIR; FHR {% for h in range(3, fcst_len_hrs+1, 3) %}{{ " %02d" % h }}{% endfor %} VARAPCP - ACCUM03 + ACCUM_HH03 USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} + SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} {%- if do_ensemble %} - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} ENSMEM_INDX#{{ ensmem_indx_name }}# {%- endif %} @@ -1812,10 +1882,10 @@ done by the scripts that this task calls). LOGDIR&LOGDIR; FHR {% for h in range(6, fcst_len_hrs+1, 6) %}{{ " %02d" % h }}{% endfor %} VARAPCP - ACCUM06 + ACCUM_HH06 USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} + SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} {%- if do_ensemble %} - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} ENSMEM_INDX#{{ ensmem_indx_name }}# {%- endif %} @@ -1857,10 +1927,10 @@ done by the scripts that this task calls). LOGDIR&LOGDIR; FHR {% for h in range(24, fcst_len_hrs+1, 24) %}{{ " %02d" % h }}{% endfor %} VARAPCP - ACCUM24 + ACCUM_HH24 USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} + SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} {%- if do_ensemble %} - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} ENSMEM_INDX#{{ ensmem_indx_name }}# {%- endif %} @@ -1902,8 +1972,8 @@ done by the scripts that this task calls). FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} VARREFC USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} + SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} {%- if do_ensemble %} - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} ENSMEM_INDX#{{ ensmem_indx_name }}# {%- endif %} @@ -1952,8 +2022,8 @@ done by the scripts that this task calls). FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} VARRETOP USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} + SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} {%- if do_ensemble %} - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} ENSMEM_INDX#{{ ensmem_indx_name }}# {%- endif %} @@ -2001,11 +2071,11 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} VARSFC + ACCUM_HH USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} + SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} {%- if do_ensemble %} - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} ENSMEM_INDX#{{ ensmem_indx_name }}# {%- endif %} @@ -2021,6 +2091,7 @@ done by the scripts that this task calls). {%- elif run_task_run_post %} {%- endif %} + @@ -2050,11 +2121,11 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} VARUPA + ACCUM_HH USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} + SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} {%- if do_ensemble %} - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} ENSMEM_INDX#{{ ensmem_indx_name }}# {%- endif %} @@ -2070,6 +2141,7 @@ done by the scripts that this task calls). {%- elif run_task_run_post %} {%- endif %} + @@ -2108,7 +2180,7 @@ done by the scripts that this task calls). LOGDIR&LOGDIR; FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} VARAPCP - ACCUM01 + ACCUM_HH01 @@ -2144,7 +2216,7 @@ done by the scripts that this task calls). LOGDIR&LOGDIR; FHR {% for h in range(3, fcst_len_hrs+1, 3) %}{{ " %02d" % h }}{% endfor %} VARAPCP - ACCUM03 + ACCUM_HH03 @@ -2181,7 +2253,7 @@ done by the scripts that this task calls). LOGDIR&LOGDIR; FHR {% for h in range(6, fcst_len_hrs+1, 6) %}{{ " %02d" % h }}{% endfor %} VARAPCP - ACCUM06 + ACCUM_HH06 @@ -2218,7 +2290,7 @@ done by the scripts that this task calls). LOGDIR&LOGDIR; FHR {% for h in range(24, fcst_len_hrs+1, 24) %}{{ " %02d" % h }}{% endfor %} VARAPCP - ACCUM24 + ACCUM_HH24 @@ -2326,7 +2398,10 @@ done by the scripts that this task calls). VARSFC - + + + + @@ -2359,7 +2434,10 @@ done by the scripts that this task calls). VARUPA - + + + + @@ -2393,7 +2471,7 @@ done by the scripts that this task calls). LOGDIR&LOGDIR; FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} VARAPCP - ACCUM01 + ACCUM_HH01 @@ -2429,7 +2507,7 @@ done by the scripts that this task calls). LOGDIR&LOGDIR; FHR {% for h in range(3, fcst_len_hrs+1, 3) %}{{ " %02d" % h }}{% endfor %} VARAPCP - ACCUM03 + ACCUM_HH03 @@ -2466,7 +2544,7 @@ done by the scripts that this task calls). LOGDIR&LOGDIR; FHR {% for h in range(6, fcst_len_hrs+1, 6) %}{{ " %02d" % h }}{% endfor %} VARAPCP - ACCUM06 + ACCUM_HH06 @@ -2503,7 +2581,7 @@ done by the scripts that this task calls). LOGDIR&LOGDIR; FHR {% for h in range(24, fcst_len_hrs+1, 24) %}{{ " %02d" % h }}{% endfor %} VARAPCP - ACCUM24 + ACCUM_HH24 @@ -2539,8 +2617,8 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} VARSFC + ACCUM_HH @@ -2572,8 +2650,8 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} VARUPA + ACCUM_HH @@ -2610,7 +2688,7 @@ done by the scripts that this task calls). LOGDIR&LOGDIR; FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} VARAPCP - ACCUM01 + ACCUM_HH01 @@ -2646,7 +2724,7 @@ done by the scripts that this task calls). LOGDIR&LOGDIR; FHR {% for h in range(3, fcst_len_hrs+1, 3) %}{{ " %02d" % h }}{% endfor %} VARAPCP - ACCUM03 + ACCUM_HH03 @@ -2683,7 +2761,7 @@ done by the scripts that this task calls). LOGDIR&LOGDIR; FHR {% for h in range(6, fcst_len_hrs+1, 6) %}{{ " %02d" % h }}{% endfor %} VARAPCP - ACCUM06 + ACCUM_HH06 @@ -2720,7 +2798,7 @@ done by the scripts that this task calls). LOGDIR&LOGDIR; FHR {% for h in range(24, fcst_len_hrs+1, 24) %}{{ " %02d" % h }}{% endfor %} VARAPCP - ACCUM24 + ACCUM_HH24 @@ -2824,8 +2902,8 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} VARSFC + ACCUM_HH @@ -2857,8 +2935,8 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} VARUPA + ACCUM_HH diff --git a/parm/metplus/EnsembleStat_APCP01h.conf b/parm/metplus/EnsembleStat_APCP01h.conf index fc1e92566a..f0de205047 100644 --- a/parm/metplus/EnsembleStat_APCP01h.conf +++ b/parm/metplus/EnsembleStat_APCP01h.conf @@ -1,4 +1,4 @@ -# Ensemble-Stat METplus Configuration +# EnsembleStat METplus Configuration [config] @@ -37,8 +37,8 @@ OBTYPE = CCPA #ENSEMBLE_STAT_DESC = # not in other file -# The MET ensemble_stat logging level -# 0 quiet to 5 loud, Verbosity setting for MET ensemble_stat output, 2 is default. +# 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 @@ -189,13 +189,13 @@ OBS_VAR1_OPTIONS = {FCST_VAR1_OPTIONS} INPUT_BASE = {ENV[INPUT_BASE]} OUTPUT_BASE = {ENV[OUTPUT_BASE]} -# Forecast model input directory for ensemble_stat +# Forecast model input directory for EnsembleStat FCST_ENSEMBLE_STAT_INPUT_DIR = {INPUT_BASE} -# Point observation input dir for ensemble_stat +# Point observation input dir for EnsembleStat OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = -# Grid observation input dir for ensemble_stat +# Grid observation input dir for EnsembleStat OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = {ENV[OBS_DIR]} # directory containing climatology mean input to EnsembleStat @@ -206,7 +206,7 @@ ENSEMBLE_STAT_CLIMO_MEAN_INPUT_DIR = # Not used in this example ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR = -# output directory for ensemble_stat +# output directory for EnsembleStat ENSEMBLE_STAT_OUTPUT_DIR = {OUTPUT_BASE} # directory containing log files @@ -241,11 +241,11 @@ ENSEMBLE_STAT_CLIMO_MEAN_INPUT_TEMPLATE = # Not used in this example ENSEMBLE_STAT_CLIMO_STDEV_INPUT_TEMPLATE = -ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat +ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/EnsembleStat # Specify the name of the metplus.log file LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat/metplus_final.ensgrid_APCP_01h.conf +METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/EnsembleStat/metplus_final.APCP_01h.conf diff --git a/parm/metplus/EnsembleStat_APCP03h.conf b/parm/metplus/EnsembleStat_APCP03h.conf index 626fa5b593..ff339bdcdf 100644 --- a/parm/metplus/EnsembleStat_APCP03h.conf +++ b/parm/metplus/EnsembleStat_APCP03h.conf @@ -1,4 +1,4 @@ -# Ensemble-Stat METplus Configuration +# EnsembleStat METplus Configuration [config] @@ -48,8 +48,8 @@ FCST_IS_PROB = false #ENSEMBLE_STAT_DESC = # not in other file -# The MET ensemble_stat logging level -# 0 quiet to 5 loud, Verbosity setting for MET ensemble_stat output, 2 is default. +# The MET EnsembleStat logging level +# 0 quiet to 5 loud, Verbosity setting for MET EnsembleStat output, 2 is default. # This takes precendence over the general LOG_MET_VERBOSITY set in metplus_logging.conf #LOG_ENSEMBLE_STAT_VERBOSITY = 2 @@ -72,7 +72,7 @@ ENSEMBLE_STAT_ENS_VLD_THRESH = 1.0 ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_APCP_03h_{OBTYPE} -# MET Configuration file for ensemble_stat +# MET Configuration file for EnsembleStat ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped # ENSEMBLE_STAT_MET_OBS_ERR_TABLE is not required. @@ -199,16 +199,16 @@ OBS_VAR1_OPTIONS = {FCST_VAR1_OPTIONS} INPUT_BASE = {ENV[INPUT_BASE]} OUTPUT_BASE = {ENV[OUTPUT_BASE]} # -# Forecast model input directory for ensemble_stat +# Forecast model input directory for EnsembleStat # FCST_ENSEMBLE_STAT_INPUT_DIR = {ENV[MEM_BASE]} # -# Point observation input dir for ensemble_stat +# Point observation input dir for EnsembleStat # OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = -# Grid observation input dir for ensemble_stat -OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/pcp_combine_obs +# Grid observation input dir for EnsembleStat +OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/PcpCombine_obs # directory containing climatology mean input to EnsembleStat # Not used in this example @@ -218,7 +218,7 @@ ENSEMBLE_STAT_CLIMO_MEAN_INPUT_DIR = # Not used in this example ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR = -# output directory for ensemble_stat +# output directory for EnsembleStat ENSEMBLE_STAT_OUTPUT_DIR = {OUTPUT_BASE} # # Directory for staging data. @@ -233,7 +233,7 @@ STAGING_DIR = {OUTPUT_BASE}/stage/APCP_03 # The template FCST_ENSEMBLE_STAT_INPUT_TEMPLATE is relative to # FCST_ENSEMBLE_STAT_INPUT_DIR. # -FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[MEM_CUSTOM]}metprd/pcp_combine_fcst/{ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_MEM_CUSTOM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}_a03h.nc +FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[MEM_CUSTOM]}metprd/PcpCombine_fcst/{ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_MEM_CUSTOM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}_a03h.nc # Template to look for point observations. # Example precip24_2010010112.nc @@ -258,7 +258,7 @@ ENSEMBLE_STAT_CLIMO_STDEV_INPUT_TEMPLATE = # The template ENSEMBLE_STAT_OUTPUT_TEMPLATE is relative to # ENSEMBLE_STAT_OUTPUT_DIR. # -ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat +ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/EnsembleStat # # Specify the name of the METplus log file. # @@ -266,4 +266,4 @@ LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # # Specify the location and name of the final METplus conf file. # -METPLUS_CONF = {OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat/metplus_final.ensgrid_APCP_03h.conf +METPLUS_CONF = {OUTPUT_BASE}/{ENV[CDATE]}/metprd/EnsembleStat/metplus_final.APCP_03h.conf diff --git a/parm/metplus/EnsembleStat_APCP06h.conf b/parm/metplus/EnsembleStat_APCP06h.conf index 6a2fd2c3ec..d087fcef3a 100644 --- a/parm/metplus/EnsembleStat_APCP06h.conf +++ b/parm/metplus/EnsembleStat_APCP06h.conf @@ -1,4 +1,4 @@ -# Ensemble-Stat METplus Configuration +# EnsembleStat METplus Configuration [config] @@ -48,8 +48,8 @@ FCST_IS_PROB = false #ENSEMBLE_STAT_DESC = # not in other file -# The MET ensemble_stat logging level -# 0 quiet to 5 loud, Verbosity setting for MET ensemble_stat output, 2 is default. +# The MET EnsembleStat logging level +# 0 quiet to 5 loud, Verbosity setting for MET EnsembleStat output, 2 is default. # This takes precendence over the general LOG_MET_VERBOSITY set in metplus_logging.conf #LOG_ENSEMBLE_STAT_VERBOSITY = 2 @@ -72,7 +72,7 @@ ENSEMBLE_STAT_ENS_VLD_THRESH = 1.0 ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_APCP_06h_{OBTYPE} -# MET Configuration file for ensemble_stat +# MET Configuration file for EnsembleStat ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped # ENSEMBLE_STAT_MET_OBS_ERR_TABLE is not required. @@ -199,16 +199,16 @@ OBS_VAR1_OPTIONS = {FCST_VAR1_OPTIONS} INPUT_BASE = {ENV[INPUT_BASE]} OUTPUT_BASE = {ENV[OUTPUT_BASE]} # -# Forecast model input directory for ensemble_stat +# Forecast model input directory for EnsembleStat # FCST_ENSEMBLE_STAT_INPUT_DIR = {ENV[MEM_BASE]} # -# Point observation input dir for ensemble_stat +# Point observation input dir for EnsembleStat # OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = -# Grid observation input dir for ensemble_stat -OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/pcp_combine_obs +# Grid observation input dir for EnsembleStat +OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/PcpCombine_obs # directory containing climatology mean input to EnsembleStat # Not used in this example @@ -218,7 +218,7 @@ ENSEMBLE_STAT_CLIMO_MEAN_INPUT_DIR = # Not used in this example ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR = -# output directory for ensemble_stat +# output directory for EnsembleStat ENSEMBLE_STAT_OUTPUT_DIR = {OUTPUT_BASE} # # Directory for staging data. @@ -233,7 +233,7 @@ STAGING_DIR = {OUTPUT_BASE}/stage/APCP_06 # The template FCST_ENSEMBLE_STAT_INPUT_TEMPLATE is relative to # FCST_ENSEMBLE_STAT_INPUT_DIR. # -FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[MEM_CUSTOM]}metprd/pcp_combine_fcst/{ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_MEM_CUSTOM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}_a06h.nc +FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[MEM_CUSTOM]}metprd/PcpCombine_fcst/{ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_MEM_CUSTOM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}_a06h.nc # Template to look for point observations. # Example precip24_2010010112.nc @@ -258,7 +258,7 @@ ENSEMBLE_STAT_CLIMO_STDEV_INPUT_TEMPLATE = # The template ENSEMBLE_STAT_OUTPUT_TEMPLATE is relative to # ENSEMBLE_STAT_OUTPUT_DIR. # -ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat +ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/EnsembleStat # # Specify the name of the METplus log file. # @@ -266,4 +266,4 @@ LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # # Specify the location and name of the final METplus conf file. # -METPLUS_CONF = {OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat/metplus_final.ensgrid_APCP_06h.conf +METPLUS_CONF = {OUTPUT_BASE}/{ENV[CDATE]}/metprd/EnsembleStat/metplus_final.APCP_06h.conf diff --git a/parm/metplus/EnsembleStat_APCP24h.conf b/parm/metplus/EnsembleStat_APCP24h.conf index 9bfa2f1f52..760419d852 100644 --- a/parm/metplus/EnsembleStat_APCP24h.conf +++ b/parm/metplus/EnsembleStat_APCP24h.conf @@ -1,4 +1,4 @@ -# Ensemble-Stat METplus Configuration +# EnsembleStat METplus Configuration [config] @@ -48,8 +48,8 @@ FCST_IS_PROB = false #ENSEMBLE_STAT_DESC = # not in other file -# The MET ensemble_stat logging level -# 0 quiet to 5 loud, Verbosity setting for MET ensemble_stat output, 2 is default. +# The MET EnsembleStat logging level +# 0 quiet to 5 loud, Verbosity setting for MET EnsembleStat output, 2 is default. # This takes precendence over the general LOG_MET_VERBOSITY set in metplus_logging.conf #LOG_ENSEMBLE_STAT_VERBOSITY = 2 @@ -72,7 +72,7 @@ ENSEMBLE_STAT_ENS_VLD_THRESH = 1.0 ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_APCP_24h_{OBTYPE} -# MET Configuration file for ensemble_stat +# MET Configuration file for EnsembleStat ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped # ENSEMBLE_STAT_MET_OBS_ERR_TABLE is not required. @@ -199,16 +199,16 @@ OBS_VAR1_OPTIONS = {FCST_VAR1_OPTIONS} INPUT_BASE = {ENV[INPUT_BASE]} OUTPUT_BASE = {ENV[OUTPUT_BASE]} # -# Forecast model input directory for ensemble_stat +# Forecast model input directory for EnsembleStat # FCST_ENSEMBLE_STAT_INPUT_DIR = {ENV[MEM_BASE]} # -# Point observation input dir for ensemble_stat +# Point observation input dir for EnsembleStat # OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = -# Grid observation input dir for ensemble_stat -OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/pcp_combine_obs +# Grid observation input dir for EnsembleStat +OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/PcpCombine_obs # directory containing climatology mean input to EnsembleStat # Not used in this example @@ -218,7 +218,7 @@ ENSEMBLE_STAT_CLIMO_MEAN_INPUT_DIR = # Not used in this example ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR = -# output directory for ensemble_stat +# output directory for EnsembleStat ENSEMBLE_STAT_OUTPUT_DIR = {OUTPUT_BASE} # # Directory for staging data. @@ -233,7 +233,7 @@ STAGING_DIR = {OUTPUT_BASE}/stage/APCP_24 # The template FCST_ENSEMBLE_STAT_INPUT_TEMPLATE is relative to # FCST_ENSEMBLE_STAT_INPUT_DIR. # -FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[MEM_CUSTOM]}metprd/pcp_combine_fcst/{ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_MEM_CUSTOM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}_a24h.nc +FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[MEM_CUSTOM]}metprd/PcpCombine_fcst/{ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_MEM_CUSTOM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}_a24h.nc # Template to look for point observations. # Example precip24_2010010112.nc @@ -258,7 +258,7 @@ ENSEMBLE_STAT_CLIMO_STDEV_INPUT_TEMPLATE = # The template ENSEMBLE_STAT_OUTPUT_TEMPLATE is relative to # ENSEMBLE_STAT_OUTPUT_DIR. # -ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat +ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/EnsembleStat # # Specify the name of the METplus log file. # @@ -266,4 +266,4 @@ LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # # Specify the location and name of the final METplus conf file. # -METPLUS_CONF = {OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat/metplus_final.ensgrid_APCP_24h.conf +METPLUS_CONF = {OUTPUT_BASE}/{ENV[CDATE]}/metprd/EnsembleStat/metplus_final.APCP_24h.conf diff --git a/parm/metplus/EnsembleStat_REFC.conf b/parm/metplus/EnsembleStat_REFC.conf index 7bda1db6dd..4ccab0c980 100644 --- a/parm/metplus/EnsembleStat_REFC.conf +++ b/parm/metplus/EnsembleStat_REFC.conf @@ -1,4 +1,4 @@ -# Ensemble-Stat METplus Configuration +# EnsembleStat METplus Configuration [config] @@ -37,8 +37,8 @@ OBTYPE = MRMS #ENSEMBLE_STAT_DESC = # not in other file -# The MET ensemble_stat logging level -# 0 quiet to 5 loud, Verbosity setting for MET ensemble_stat output, 2 is default. +# The MET EnsembleStat logging level +# 0 quiet to 5 loud, Verbosity setting for MET EnsembleStat output, 2 is default. # This takes precendence over the general LOG_MET_VERBOSITY set in metplus_logging.conf #LOG_ENSEMBLE_STAT_VERBOSITY = 2 @@ -188,13 +188,13 @@ OBS_VAR1_OPTIONS = censor_thresh = lt-20; censor_val = -20.0; cnt_thresh = [ >15 INPUT_BASE = {ENV[INPUT_BASE]} OUTPUT_BASE = {ENV[OUTPUT_BASE]} -# Forecast model input directory for ensemble_stat +# Forecast model input directory for EnsembleStat FCST_ENSEMBLE_STAT_INPUT_DIR = {INPUT_BASE} -# Point observation input dir for ensemble_stat +# Point observation input dir for EnsembleStat OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = -# Grid observation input dir for ensemble_stat +# Grid observation input dir for EnsembleStat OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = {ENV[OBS_DIR]} # directory containing climatology mean input to EnsembleStat @@ -205,7 +205,7 @@ ENSEMBLE_STAT_CLIMO_MEAN_INPUT_DIR = # Not used in this example ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR = -# output directory for ensemble_stat +# output directory for EnsembleStat ENSEMBLE_STAT_OUTPUT_DIR = {OUTPUT_BASE} # directory containing log files @@ -240,11 +240,11 @@ ENSEMBLE_STAT_CLIMO_MEAN_INPUT_TEMPLATE = # Not used in this example ENSEMBLE_STAT_CLIMO_STDEV_INPUT_TEMPLATE = -ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat +ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/EnsembleStat # Specify the name of the metplus.log file LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat/metplus_final.ensgrid_REFC.conf +METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/EnsembleStat/metplus_final.REFC.conf diff --git a/parm/metplus/EnsembleStat_RETOP.conf b/parm/metplus/EnsembleStat_RETOP.conf index 0f81607b8e..e05fbeffc7 100644 --- a/parm/metplus/EnsembleStat_RETOP.conf +++ b/parm/metplus/EnsembleStat_RETOP.conf @@ -1,4 +1,4 @@ -# Ensemble-Stat METplus Configuration +# EnsembleStat METplus Configuration [config] @@ -37,8 +37,8 @@ OBTYPE = MRMS #ENSEMBLE_STAT_DESC = # not in other file -# The MET ensemble_stat logging level -# 0 quiet to 5 loud, Verbosity setting for MET ensemble_stat output, 2 is default. +# The MET EnsembleStat logging level +# 0 quiet to 5 loud, Verbosity setting for MET EnsembleStat output, 2 is default. # This takes precendence over the general LOG_MET_VERBOSITY set in metplus_logging.conf #LOG_ENSEMBLE_STAT_VERBOSITY = 2 @@ -191,13 +191,13 @@ OBS_VAR1_OPTIONS = censor_thresh = lt-20; censor_val = -20.0; cnt_thresh = [ >15 INPUT_BASE = {ENV[INPUT_BASE]} OUTPUT_BASE = {ENV[OUTPUT_BASE]} -# Forecast model input directory for ensemble_stat +# Forecast model input directory for EnsembleStat FCST_ENSEMBLE_STAT_INPUT_DIR = {INPUT_BASE} -# Point observation input dir for ensemble_stat +# Point observation input dir for EnsembleStat OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = -# Grid observation input dir for ensemble_stat +# Grid observation input dir for EnsembleStat OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = {ENV[OBS_DIR]} # directory containing climatology mean input to EnsembleStat @@ -208,7 +208,7 @@ ENSEMBLE_STAT_CLIMO_MEAN_INPUT_DIR = # Not used in this example ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR = -# output directory for ensemble_stat +# output directory for EnsembleStat ENSEMBLE_STAT_OUTPUT_DIR = {OUTPUT_BASE} # directory containing log files @@ -243,11 +243,11 @@ ENSEMBLE_STAT_CLIMO_MEAN_INPUT_TEMPLATE = # Not used in this example ENSEMBLE_STAT_CLIMO_STDEV_INPUT_TEMPLATE = -ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat +ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/EnsembleStat # Specify the name of the metplus.log file LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat/metplus_final.ensgrid_RETOP.conf +METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/EnsembleStat/metplus_final.RETOP.conf diff --git a/parm/metplus/EnsembleStat_SFC.conf b/parm/metplus/EnsembleStat_SFC.conf index b8ee60e16a..78ded851a3 100644 --- a/parm/metplus/EnsembleStat_SFC.conf +++ b/parm/metplus/EnsembleStat_SFC.conf @@ -1,9 +1,9 @@ -# Ensemble-Stat METplus Configuration +# EnsembleStat METplus Configuration [config] ## Configuration-related settings such as the process list, begin and end times, etc. -PROCESS_LIST = PB2NC, EnsembleStat +PROCESS_LIST = EnsembleStat # Looping by times: steps through each 'task' in the PROCESS_LIST for each # defined time, and repeats until all times have been evaluated. @@ -12,22 +12,23 @@ LOOP_ORDER = times # LOOP_BY: Set to INIT to loop over initialization times LOOP_BY = INIT -# Format of INIT_BEG and INT_END +# Format of INIT_BEG and INIT_END INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run -INIT_BEG={ENV[CDATE]} +INIT_BEG = {ENV[CDATE]} # End time for METplus run -INIT_END={ENV[CDATE]} +INIT_END = {ENV[CDATE]} # Increment between METplus runs in seconds. Must be >= 60 -INIT_INCREMENT=3600 +INIT_INCREMENT = 3600 # List of forecast leads to process LEAD_SEQ = {ENV[fhr_list]} - +# # Used in the MET config file for: model, output_prefix +# MODEL = {ENV[VX_FCST_MODEL_NAME]} ENSEMBLE_STAT_DESC = NA @@ -37,41 +38,14 @@ OBTYPE = NDAS #ENSEMBLE_STAT_DESC = -# The MET ensemble_stat logging level -# 0 quiet to 5 loud, Verbosity setting for MET ensemble_stat output, 2 is default. +# The MET EnsembleStat logging level +# 0 quiet to 5 loud, Verbosity setting for MET EnsembleStat output, 2 is default. # This takes precendence over the general LOG_MET_VERBOSITY set in metplus_logging.conf LOG_ENSEMBLE_STAT_VERBOSITY = 3 -# Values to pass to pb2nc config file using environment variables of the same name. -PB2NC_GRID = -PB2NC_POLY = -PB2NC_STATION_ID = -PB2NC_MESSAGE_TYPE = ADPSFC, ADPUPA -PB2NC_LEVEL_CATEGORY = 0, 1, 4, 5, 6 -PB2NC_QUALITY_MARK_THRESH = 9 - -PB2NC_PB_REPORT_TYPE = 120, 220, 221, 122, 222, 223, 224, 131, 133, 233, 153, 156, 157, 188, 288, 180, 280, 181, 182, 281, 282, 183, 284, 187, 287 - -# Leave empty to process all -PB2NC_OBS_BUFR_VAR_LIST = PMO, ZOB, TOB, D_DPT, QOB, UOB, VOB, PWO, TOCC, D_RH, HOVI, CEILING, D_PBL, D_CAPE, MXGS, D_WIND, D_PRMSL - -# Mapping of input BUFR variable names to output variables names. -# The default PREPBUFR map, obs_prepbufr_map, is appended to this map. -PB2NC_OBS_BUFR_MAP = [{ key = "PWO"; val = "PWAT"; },{ key = "MXGS"; val = "GUST"; }, { key = "CEILING"; val = "CEILING"; }] - -# False for no time summary, True otherwise -PB2NC_TIME_SUMMARY_FLAG = False -PB2NC_TIME_SUMMARY_BEG = 000000 ;; start time of time summary in HHMMSS format -PB2NC_TIME_SUMMARY_END = 235959 ;; end time of time summary in HHMMSS format -PB2NC_TIME_SUMMARY_VAR_NAMES = PMO,TOB,TDO,UOB,VOB,PWO,TOCC -PB2NC_TIME_SUMMARY_TYPES = min, max, range, mean, stdev, median, p80 ;; a list of the statistics to summarize - OBS_WINDOW_BEGIN = -1799 OBS_WINDOW_END = 1800 -PB2NC_WINDOW_BEGIN = {OBS_WINDOW_BEGIN} -PB2NC_WINDOW_END = {OBS_WINDOW_END} - OBS_ENSEMBLE_STAT_WINDOW_BEGIN = {OBS_WINDOW_BEGIN} OBS_ENSEMBLE_STAT_WINDOW_END = {OBS_WINDOW_END} @@ -88,17 +62,12 @@ ENSEMBLE_STAT_ENS_VLD_THRESH = 1.0 ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_ADPSFC_{OBTYPE} -# MET Configuration files for pb2nc and ensemble_stat -PB2NC_CONFIG_FILE = {PARM_BASE}/met_config/PB2NCConfig_wrapped +# MET Configuration file for EnsembleStat ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped ENSEMBLE_STAT_OBS_QUALITY_INC = 0, 1, 2, 3, 9, NA #ENSEMBLE_STAT_OBS_QUALITY_EXC = -# if True, pb2nc will skip processing a file if the output already exists -# used to speed up runs and reduce redundancy -PB2NC_SKIP_IF_OUTPUT_EXISTS = True - # 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. @@ -115,17 +84,6 @@ ENSEMBLE_STAT_REGRID_TO_GRID = NONE ENSEMBLE_STAT_CENSOR_THRESH = ENSEMBLE_STAT_CENSOR_VAL = -#ENSEMBLE_STAT_NBRHD_PROB_WIDTH = 5 -#ENSEMBLE_STAT_NBRHD_PROB_SHAPE = CIRCLE -#ENSEMBLE_STAT_NBRHD_PROB_VLD_THRESH = 0.0 - -#ENSEMBLE_STAT_NMEP_SMOOTH_VLD_THRESH = 0.0 -#ENSEMBLE_STAT_NMEP_SMOOTH_SHAPE = CIRCLE -#ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_DX = 81.27 -#ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_RADIUS = 120 -#ENSEMBLE_STAT_NMEP_SMOOTH_METHOD = GAUSSIAN -#ENSEMBLE_STAT_NMEP_SMOOTH_WIDTH = 1 - ENSEMBLE_STAT_MESSAGE_TYPE = ADPSFC ENSEMBLE_STAT_DUPLICATE_FLAG = NONE @@ -163,7 +121,7 @@ ENSEMBLE_STAT_ENS_PHIST_BIN_SIZE = 0.05 #ENSEMBLE_STAT_CLIMO_CDF_CENTER_BINS = False #ENSEMBLE_STAT_CLIMO_CDF_WRITE_BINS = True -ENSEMBLE_STAT_MASK_GRID = +ENSEMBLE_STAT_MASK_GRID = ENSEMBLE_STAT_CI_ALPHA = 0.05 @@ -196,7 +154,7 @@ ENSEMBLE_STAT_ENSEMBLE_FLAG_NMEP = FALSE ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK = TRUE ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT = FALSE -# Ensemble Variables and levels as specified in the ens field dictionary +# 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 = TMP @@ -228,7 +186,7 @@ ENS_VAR6_THRESH = <152, <1520, >=914 ENS_VAR6_OPTIONS = GRIB_lvl_typ = 215; desc = "CEILING"; -# Forecast and observation variables and levels as specified in the fcst field dictionary +# 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 @@ -281,18 +239,14 @@ OBS_VAR6_OPTIONS = GRIB_lvl_typ = 215; interp = { type = [ { method = NEAREST; w OBS_VAR6_THRESH = <152, <305, >=914 [dir] -# Input and output directories for pb2nc -PB2NC_INPUT_DIR = {ENV[OBS_DIR]} -PB2NC_OUTPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/pb2nc - -# Forecast model input directory for ensemble_stat +# Forecast model input directory for EnsembleStat FCST_ENSEMBLE_STAT_INPUT_DIR = {ENV[INPUT_BASE]} -# Point observation input dir for ensemble_stat -OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = {PB2NC_OUTPUT_DIR} +# Point observation input dir for EnsembleStat +OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/Pb2nc_obs -# Grid observation input dir for ensemble_stat -OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = +# Grid observation input dir for EnsembleStat +OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = # directory containing climatology mean input to EnsembleStat # Not used in this example @@ -302,53 +256,54 @@ ENSEMBLE_STAT_CLIMO_MEAN_INPUT_DIR = # Not used in this example ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR = -# output directory for ensemble_stat +# output directory for EnsembleStat OUTPUT_BASE = {ENV[OUTPUT_BASE]} ENSEMBLE_STAT_OUTPUT_DIR = {OUTPUT_BASE} - -# directory containing log files -LOG_DIR = {ENV[LOG_DIR]} - -# directory for staging data -STAGING_DIR = {OUTPUT_BASE}/stage/conus_sfc - +# +# Directory for staging data. +# +STAGING_DIR = {OUTPUT_BASE}/stage/SFC [filename_templates] - -# Input and output templates for pb2nc -PB2NC_INPUT_TEMPLATE = prepbufr.ndas.{valid?fmt=%Y%m%d%H} -PB2NC_OUTPUT_TEMPLATE = prepbufr.ndas.{valid?fmt=%Y%m%d%H}.nc - +# # FCST_ENSEMBLE_STAT_INPUT_TEMPLATE - comma separated list of ensemble members # or a single line, - filename wildcard characters may be used, ? or *. - +# +# The template FCST_ENSEMBLE_STAT_INPUT_TEMPLATE is relative to +# FCST_ENSEMBLE_STAT_INPUT_DIR. +# FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[MEM_STAR]}{ENV[POSTPRD]}{ENV[NET]}.t{init?fmt=%H}z*.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 # Template to look for point observations. # Example precip24_2010010112.nc -OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = {PB2NC_OUTPUT_TEMPLATE} +OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = prepbufr.ndas.{valid?fmt=%Y%m%d%H}.nc # Template to look for gridded observations. # Example ST4.2010010112.24h -OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = +OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = ENSEMBLE_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly - -# Template to look for climatology input to EnsembleStat relative to ENSEMBLE_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# Template to look 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 to look for climatology input to EnsembleStat relative to ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# Template to look for climatology input to EnsembleStat relative to +# ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR. Not used in this example. +# ENSEMBLE_STAT_CLIMO_STDEV_INPUT_TEMPLATE = - -# Template for where ensemble-stat output is written -ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat - -# Specify the name of the metplus.log file +# +# The template ENSEMBLE_STAT_OUTPUT_TEMPLATE is relative to +# ENSEMBLE_STAT_OUTPUT_DIR. +# +ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/EnsembleStat +# +# Specify the name of the METplus log file. +# LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_SFC_{ENV[CDATE]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat/metplus_final.conus_surface.conf - +# +# Specify the location and name of the final METplus conf file. +# +METPLUS_CONF = {OUTPUT_BASE}/{ENV[CDATE]}/metprd/EnsembleStat/metplus_final.SFC.conf diff --git a/parm/metplus/EnsembleStat_UPA.conf b/parm/metplus/EnsembleStat_UPA.conf index 536ea3788f..41823a1984 100644 --- a/parm/metplus/EnsembleStat_UPA.conf +++ b/parm/metplus/EnsembleStat_UPA.conf @@ -1,9 +1,9 @@ -# Ensemble-Stat METplus Configuration +# EnsembleStat METplus Configuration [config] ## Configuration-related settings such as the process list, begin and end times, etc. -PROCESS_LIST = PB2NC, EnsembleStat +PROCESS_LIST = EnsembleStat # Looping by times: steps through each 'task' in the PROCESS_LIST for each # defined time, and repeats until all times have been evaluated. @@ -12,22 +12,23 @@ LOOP_ORDER = times # LOOP_BY: Set to INIT to loop over initialization times LOOP_BY = INIT -# Format of INIT_BEG and INT_END +# Format of INIT_BEG and INIT_END INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run -INIT_BEG={ENV[CDATE]} +INIT_BEG = {ENV[CDATE]} # End time for METplus run -INIT_END={ENV[CDATE]} +INIT_END = {ENV[CDATE]} # Increment between METplus runs in seconds. Must be >= 60 -INIT_INCREMENT=3600 +INIT_INCREMENT = 3600 # List of forecast leads to process LEAD_SEQ = begin_end_incr(0,{ENV[fhr_last]},6) - +# # Used in the MET config file for: model, output_prefix +# MODEL = {ENV[VX_FCST_MODEL_NAME]} ENSEMBLE_STAT_DESC = NA @@ -37,41 +38,14 @@ OBTYPE = NDAS #ENSEMBLE_STAT_DESC = -# The MET ensemble_stat logging level -# 0 quiet to 5 loud, Verbosity setting for MET ensemble_stat output, 2 is default. +# The MET EnsembleStat logging level +# 0 quiet to 5 loud, Verbosity setting for MET EnsembleStat output, 2 is default. # This takes precendence over the general LOG_MET_VERBOSITY set in metplus_logging.conf LOG_ENSEMBLE_STAT_VERBOSITY = 3 -# Values to pass to pb2nc config file using environment variables of the same name. -PB2NC_GRID = -PB2NC_POLY = -PB2NC_STATION_ID = -PB2NC_MESSAGE_TYPE = ADPSFC, ADPUPA -PB2NC_LEVEL_CATEGORY = 0, 1, 4, 5, 6 -PB2NC_QUALITY_MARK_THRESH = 9 - -PB2NC_PB_REPORT_TYPE = 120, 220, 221, 122, 222, 223, 224, 131, 133, 233, 153, 156, 157, 188, 288, 180, 280, 181, 182, 281, 282, 183, 284, 187, 287 - -# Leave empty to process all -PB2NC_OBS_BUFR_VAR_LIST = PMO, ZOB, TOB, D_DPT, QOB, UOB, VOB, PWO, TOCC, D_RH, HOVI, CEILING, D_PBL, D_CAPE, MXGS, D_WIND, D_PRMSL - -# Mapping of input BUFR variable names to output variables names. -# The default PREPBUFR map, obs_prepbufr_map, is appended to this map. -PB2NC_OBS_BUFR_MAP = [{ key = "PWO"; val = "PWAT"; },{ key = "MXGS"; val = "GUST"; }, { key = "CEILING"; val = "CEILING"; }] - -# False for no time summary, True otherwise -PB2NC_TIME_SUMMARY_FLAG = False -PB2NC_TIME_SUMMARY_BEG = 000000 ;; start time of time summary in HHMMSS format -PB2NC_TIME_SUMMARY_END = 235959 ;; end time of time summary in HHMMSS format -PB2NC_TIME_SUMMARY_VAR_NAMES = PMO,TOB,TDO,UOB,VOB,PWO,TOCC -PB2NC_TIME_SUMMARY_TYPES = min, max, range, mean, stdev, median, p80 ;; a list of the statistics to summarize - OBS_WINDOW_BEGIN = -1799 OBS_WINDOW_END = 1800 -PB2NC_WINDOW_BEGIN = {OBS_WINDOW_BEGIN} -PB2NC_WINDOW_END = {OBS_WINDOW_END} - OBS_ENSEMBLE_STAT_WINDOW_BEGIN = {OBS_WINDOW_BEGIN} OBS_ENSEMBLE_STAT_WINDOW_END = {OBS_WINDOW_END} @@ -88,17 +62,12 @@ ENSEMBLE_STAT_ENS_VLD_THRESH = 1.0 ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_ADPUPA_{OBTYPE} -# MET Configuration files for pb2nc and ensemble_stat -PB2NC_CONFIG_FILE = {PARM_BASE}/met_config/PB2NCConfig_wrapped +# MET Configuration file for EnsembleStat ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped ENSEMBLE_STAT_OBS_QUALITY_INC = 0, 1, 2, 3, 9, NA #ENSEMBLE_STAT_OBS_QUALITY_EXC = -# if True, pb2nc will skip processing a file if the output already exists -# used to speed up runs and reduce redundancy -PB2NC_SKIP_IF_OUTPUT_EXISTS = True - # 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. @@ -115,17 +84,6 @@ ENSEMBLE_STAT_REGRID_TO_GRID = NONE ENSEMBLE_STAT_CENSOR_THRESH = ENSEMBLE_STAT_CENSOR_VAL = -#ENSEMBLE_STAT_NBRHD_PROB_WIDTH = 5 -#ENSEMBLE_STAT_NBRHD_PROB_SHAPE = CIRCLE -#ENSEMBLE_STAT_NBRHD_PROB_VLD_THRESH = 0.0 - -#ENSEMBLE_STAT_NMEP_SMOOTH_VLD_THRESH = 0.0 -#ENSEMBLE_STAT_NMEP_SMOOTH_SHAPE = CIRCLE -#ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_DX = 81.27 -#ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_RADIUS = 120 -#ENSEMBLE_STAT_NMEP_SMOOTH_METHOD = GAUSSIAN -#ENSEMBLE_STAT_NMEP_SMOOTH_WIDTH = 1 - ENSEMBLE_STAT_MESSAGE_TYPE = ADPUPA ENSEMBLE_STAT_DUPLICATE_FLAG = NONE @@ -163,7 +121,7 @@ ENSEMBLE_STAT_ENS_PHIST_BIN_SIZE = 0.05 #ENSEMBLE_STAT_CLIMO_CDF_CENTER_BINS = False #ENSEMBLE_STAT_CLIMO_CDF_WRITE_BINS = True -ENSEMBLE_STAT_MASK_GRID = +ENSEMBLE_STAT_MASK_GRID = ENSEMBLE_STAT_CI_ALPHA = 0.05 @@ -196,7 +154,7 @@ ENSEMBLE_STAT_ENSEMBLE_FLAG_NMEP = FALSE ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK = TRUE ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT = FALSE -# Ensemble Variables and levels as specified in the ens field dictionary +# 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 = TMP @@ -351,18 +309,14 @@ OBS_VAR12_OPTIONS = desc = "TKE"; OBS_VAR12_THRESH = <500, <1500, >1500 [dir] -# Input and output directories for pb2nc -PB2NC_INPUT_DIR = {ENV[OBS_DIR]} -PB2NC_OUTPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/pb2nc - -# Forecast model input directory for ensemble_stat +# Forecast model input directory for EnsembleStat FCST_ENSEMBLE_STAT_INPUT_DIR = {ENV[INPUT_BASE]} -# Point observation input dir for ensemble_stat -OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = {PB2NC_OUTPUT_DIR} +# Point observation input dir for EnsembleStat +OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/Pb2nc_obs -# Grid observation input dir for ensemble_stat -OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = +# Grid observation input dir for EnsembleStat +OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = # directory containing climatology mean input to EnsembleStat # Not used in this example @@ -372,53 +326,54 @@ ENSEMBLE_STAT_CLIMO_MEAN_INPUT_DIR = # Not used in this example ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR = -# output directory for ensemble_stat +# output directory for EnsembleStat OUTPUT_BASE = {ENV[OUTPUT_BASE]} ENSEMBLE_STAT_OUTPUT_DIR = {OUTPUT_BASE} - -# directory containing log files -LOG_DIR = {ENV[LOG_DIR]} - -# directory for staging data -STAGING_DIR = {OUTPUT_BASE}/stage/upper_air - +# +# Directory for staging data. +# +STAGING_DIR = {OUTPUT_BASE}/stage/UPA [filename_templates] - -# Input and output templates for pb2nc -PB2NC_INPUT_TEMPLATE = prepbufr.ndas.{valid?fmt=%Y%m%d%H} -PB2NC_OUTPUT_TEMPLATE = prepbufr.ndas.{valid?fmt=%Y%m%d%H}.nc - +# # FCST_ENSEMBLE_STAT_INPUT_TEMPLATE - comma separated list of ensemble members # or a single line, - filename wildcard characters may be used, ? or *. - +# +# The template FCST_ENSEMBLE_STAT_INPUT_TEMPLATE is relative to +# FCST_ENSEMBLE_STAT_INPUT_DIR. +# FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[MEM_STAR]}{ENV[POSTPRD]}{ENV[NET]}.t{init?fmt=%H}z*.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 # Template to look for point observations. # Example precip24_2010010112.nc -OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = {PB2NC_OUTPUT_TEMPLATE} +OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = prepbufr.ndas.{valid?fmt=%Y%m%d%H}.nc # Template to look for gridded observations. # Example ST4.2010010112.24h -OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = +OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = ENSEMBLE_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly - -# Template to look for climatology input to EnsembleStat relative to ENSEMBLE_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# Template to look 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 to look for climatology input to EnsembleStat relative to ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# Template to look for climatology input to EnsembleStat relative to +# ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR. Not used in this example. +# ENSEMBLE_STAT_CLIMO_STDEV_INPUT_TEMPLATE = - -# Template for where ensemble-stat output is written -ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat - -# Specify the name of the metplus.log file +# +# The template ENSEMBLE_STAT_OUTPUT_TEMPLATE is relative to +# ENSEMBLE_STAT_OUTPUT_DIR. +# +ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/EnsembleStat +# +# Specify the name of the METplus log file. +# LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_UPA_{ENV[CDATE]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat/metplus_final.upper_air.conf - +# +# Specify the location and name of the final METplus conf file. +# +METPLUS_CONF = {OUTPUT_BASE}/{ENV[CDATE]}/metprd/EnsembleStat/metplus_final.UPA.conf diff --git a/parm/metplus/GridStat_APCP01h.conf b/parm/metplus/GridStat_APCP01h.conf index 95e9b46bb0..7a5b61ed5e 100644 --- a/parm/metplus/GridStat_APCP01h.conf +++ b/parm/metplus/GridStat_APCP01h.conf @@ -45,10 +45,6 @@ LEAD_SEQ = {ENV[fhr_list]} # wrappers have been run LOOP_ORDER = times -# Run pcp_combine on forecast/obs data? -FCST_PCP_COMBINE_RUN = False -OBS_PCP_COMBINE_RUN = False - # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 @@ -58,7 +54,7 @@ LOG_DIR = {ENV[LOG_DIR]} LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/metprd/grid_stat/metplus_final.APCP_01h{ENV[DOT_ENSMEM]}.conf +METPLUS_CONF={OUTPUT_BASE}/metprd/GridStat/metplus_final.APCP_01h{ENV[DOT_ENSMEM]}.conf # Location of MET config file to pass to GridStat GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped @@ -259,7 +255,7 @@ FCST_GRID_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_ENSMEM]}.prsl OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2 # Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = metprd/grid_stat +GRID_STAT_OUTPUT_TEMPLATE = metprd/GridStat # Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR # Not used in this example diff --git a/parm/metplus/GridStat_APCP03h.conf b/parm/metplus/GridStat_APCP03h.conf index 747314d863..f861ea584c 100644 --- a/parm/metplus/GridStat_APCP03h.conf +++ b/parm/metplus/GridStat_APCP03h.conf @@ -55,7 +55,7 @@ LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # # Specify the location and name of the final METplus conf file. # -METPLUS_CONF = {OUTPUT_BASE}/metprd/grid_stat/metplus_final.APCP_03h.conf +METPLUS_CONF = {OUTPUT_BASE}/metprd/GridStat/metplus_final.APCP_03h.conf # # Location of MET config file to pass to GridStat. # @@ -237,11 +237,11 @@ GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE # # Directory containing observation input to GridStat. # -OBS_GRID_STAT_INPUT_DIR = {ENV[EXPTDIR]}/metprd/pcp_combine_obs +OBS_GRID_STAT_INPUT_DIR = {ENV[EXPTDIR]}/metprd/PcpCombine_obs # # Directory containing forecast input to GridStat. # -FCST_GRID_STAT_INPUT_DIR = {OUTPUT_BASE}/metprd/pcp_combine_fcst +FCST_GRID_STAT_INPUT_DIR = {OUTPUT_BASE}/metprd/PcpCombine_fcst # # Directory containing climatology mean input to GridStat. Not used in # this example. @@ -277,7 +277,7 @@ FCST_GRID_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z.prslev.f{lead?fmt=%HH # # Template for output from GridStat relative to GRID_STAT_OUTPUT_DIR. # -GRID_STAT_OUTPUT_TEMPLATE = metprd/grid_stat +GRID_STAT_OUTPUT_TEMPLATE = metprd/GridStat # # Template for climatology input to GridStat relative to # GRID_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. diff --git a/parm/metplus/GridStat_APCP06h.conf b/parm/metplus/GridStat_APCP06h.conf index b75114dda2..6c02a0dfdf 100644 --- a/parm/metplus/GridStat_APCP06h.conf +++ b/parm/metplus/GridStat_APCP06h.conf @@ -55,7 +55,7 @@ LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # # Specify the location and name of the final METplus conf file. # -METPLUS_CONF = {OUTPUT_BASE}/metprd/grid_stat/metplus_final.APCP_06h.conf +METPLUS_CONF = {OUTPUT_BASE}/metprd/GridStat/metplus_final.APCP_06h.conf # # Location of MET config file to pass to GridStat. # @@ -237,11 +237,11 @@ GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE # # Directory containing observation input to GridStat. # -OBS_GRID_STAT_INPUT_DIR = {ENV[EXPTDIR]}/metprd/pcp_combine_obs +OBS_GRID_STAT_INPUT_DIR = {ENV[EXPTDIR]}/metprd/PcpCombine_obs # # Directory containing forecast input to GridStat. # -FCST_GRID_STAT_INPUT_DIR = {OUTPUT_BASE}/metprd/pcp_combine_fcst +FCST_GRID_STAT_INPUT_DIR = {OUTPUT_BASE}/metprd/PcpCombine_fcst # # Directory containing climatology mean input to GridStat. Not used in # this example. @@ -277,7 +277,7 @@ FCST_GRID_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z.prslev.f{lead?fmt=%HH # # Template for output from GridStat relative to GRID_STAT_OUTPUT_DIR. # -GRID_STAT_OUTPUT_TEMPLATE = metprd/grid_stat +GRID_STAT_OUTPUT_TEMPLATE = metprd/GridStat # # Template for climatology input to GridStat relative to # GRID_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. diff --git a/parm/metplus/GridStat_APCP24h.conf b/parm/metplus/GridStat_APCP24h.conf index cd5aee6f7a..f45ec4037a 100644 --- a/parm/metplus/GridStat_APCP24h.conf +++ b/parm/metplus/GridStat_APCP24h.conf @@ -55,7 +55,7 @@ LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # # Specify the location and name of the final METplus conf file. # -METPLUS_CONF = {OUTPUT_BASE}/metprd/grid_stat/metplus_final.APCP_24h.conf +METPLUS_CONF = {OUTPUT_BASE}/metprd/GridStat/metplus_final.APCP_24h.conf # # Location of MET config file to pass to GridStat. # @@ -237,11 +237,11 @@ GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE # # Directory containing observation input to GridStat. # -OBS_GRID_STAT_INPUT_DIR = {ENV[EXPTDIR]}/metprd/pcp_combine_obs +OBS_GRID_STAT_INPUT_DIR = {ENV[EXPTDIR]}/metprd/PcpCombine_obs # # Directory containing forecast input to GridStat. # -FCST_GRID_STAT_INPUT_DIR = {OUTPUT_BASE}/metprd/pcp_combine_fcst +FCST_GRID_STAT_INPUT_DIR = {OUTPUT_BASE}/metprd/PcpCombine_fcst # # Directory containing climatology mean input to GridStat. Not used in # this example. @@ -277,7 +277,7 @@ FCST_GRID_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z.prslev.f{lead?fmt=%HH # # Template for output from GridStat relative to GRID_STAT_OUTPUT_DIR. # -GRID_STAT_OUTPUT_TEMPLATE = metprd/grid_stat +GRID_STAT_OUTPUT_TEMPLATE = metprd/GridStat # # Template for climatology input to GridStat relative to # GRID_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. diff --git a/parm/metplus/GridStat_REFC.conf b/parm/metplus/GridStat_REFC.conf index aeee7909ed..5d0c20693d 100644 --- a/parm/metplus/GridStat_REFC.conf +++ b/parm/metplus/GridStat_REFC.conf @@ -45,10 +45,6 @@ LEAD_SEQ = {ENV[fhr_list]} # wrappers have been run LOOP_ORDER = times -# Run pcp_combine on forecast/obs data? -FCST_PCP_COMBINE_RUN = False -OBS_PCP_COMBINE_RUN = False - # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 @@ -58,7 +54,7 @@ LOG_DIR = {ENV[LOG_DIR]} LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/metprd/grid_stat/metplus_final.REFC{ENV[DOT_ENSMEM]}.conf +METPLUS_CONF={OUTPUT_BASE}/metprd/GridStat/metplus_final.REFC{ENV[DOT_ENSMEM]}.conf # Location of MET config file to pass to GridStat GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped @@ -269,7 +265,7 @@ FCST_GRID_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_ENSMEM]}.prsl OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/MergedReflectivityQCComposite_00.50_{valid?fmt=%Y%m%d}-{valid?fmt=%H}0000.grib2 # Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = metprd/grid_stat +GRID_STAT_OUTPUT_TEMPLATE = metprd/GridStat # Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR # Not used in this example diff --git a/parm/metplus/GridStat_RETOP.conf b/parm/metplus/GridStat_RETOP.conf index e144fb22a7..1851623361 100644 --- a/parm/metplus/GridStat_RETOP.conf +++ b/parm/metplus/GridStat_RETOP.conf @@ -45,10 +45,6 @@ LEAD_SEQ = {ENV[fhr_list]} # wrappers have been run LOOP_ORDER = times -# Run pcp_combine on forecast/obs data? -FCST_PCP_COMBINE_RUN = False -OBS_PCP_COMBINE_RUN = False - # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 @@ -58,7 +54,7 @@ LOG_DIR = {ENV[LOG_DIR]} LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/metprd/grid_stat/metplus_final.RETOP{ENV[DOT_ENSMEM]}.conf +METPLUS_CONF={OUTPUT_BASE}/metprd/GridStat/metplus_final.RETOP{ENV[DOT_ENSMEM]}.conf # Location of MET config file to pass to GridStat GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped @@ -269,7 +265,7 @@ FCST_GRID_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_ENSMEM]}.prsl OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/EchoTop_18_00.50_{valid?fmt=%Y%m%d}-{valid?fmt=%H%M%S}.grib2 # Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = metprd/grid_stat +GRID_STAT_OUTPUT_TEMPLATE = metprd/GridStat # Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR # Not used in this example diff --git a/parm/metplus/GridStat_ensmean_APCP01h.conf b/parm/metplus/GridStat_ensmean_APCP01h.conf index 0713c6bada..fb97133fc1 100644 --- a/parm/metplus/GridStat_ensmean_APCP01h.conf +++ b/parm/metplus/GridStat_ensmean_APCP01h.conf @@ -45,10 +45,6 @@ LEAD_SEQ = {ENV[fhr_list]} # wrappers have been run LOOP_ORDER = times -# Run pcp_combine on forecast/obs data? -FCST_PCP_COMBINE_RUN = False -OBS_PCP_COMBINE_RUN = False - # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 @@ -58,7 +54,7 @@ LOG_DIR = {OUTPUT_BASE}/log LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_mean/metplus_final.APCP01.conf +METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensmean/metplus_final.APCP01.conf # Location of MET config file to pass to GridStat GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped @@ -80,7 +76,7 @@ GRID_STAT_REGRID_SHAPE = SQUARE #GRID_STAT_GRID_WEIGHT_FLAG = # Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_mean +MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensmean FCST_NATIVE_DATA_TYPE = GRIB # Name to identify observation data in output @@ -157,7 +153,7 @@ 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 = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_mean +GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_ensmean # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = @@ -247,7 +243,7 @@ GRID_STAT_CLIMO_STDEV_INPUT_DIR = OUTPUT_BASE = {ENV[OUTPUT_BASE]} GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_01h_mean +STAGING_DIR = {OUTPUT_BASE}/stage/APCP_01h_ensmean # End of [dir] section and start of [filename_templates] section [filename_templates] @@ -259,7 +255,7 @@ FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_APCP_{EN OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2 # Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_mean +GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensmean # Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR # Not used in this example diff --git a/parm/metplus/GridStat_ensmean_APCP03h.conf b/parm/metplus/GridStat_ensmean_APCP03h.conf index 689b8be8db..09d16759a6 100644 --- a/parm/metplus/GridStat_ensmean_APCP03h.conf +++ b/parm/metplus/GridStat_ensmean_APCP03h.conf @@ -45,10 +45,6 @@ LEAD_SEQ = {ENV[fhr_list]} # wrappers have been run LOOP_ORDER = times -# Run pcp_combine on forecast/obs data? -FCST_PCP_COMBINE_RUN = False -OBS_PCP_COMBINE_RUN = False - # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 @@ -58,7 +54,7 @@ LOG_DIR = {OUTPUT_BASE}/log LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_mean/metplus_final.APCP03.conf +METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensmean/metplus_final.APCP03.conf # Location of MET config file to pass to GridStat GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped @@ -80,7 +76,7 @@ GRID_STAT_REGRID_SHAPE = SQUARE #GRID_STAT_GRID_WEIGHT_FLAG = # Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_mean +MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensmean FCST_NATIVE_DATA_TYPE = GRIB # Name to identify observation data in output @@ -157,7 +153,7 @@ 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 = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_mean +GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_ensmean # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = @@ -233,7 +229,7 @@ INPUT_BASE = {ENV[INPUT_BASE]} FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} # directory containing observation input to GridStat -OBS_GRID_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/pcp_combine_obs +OBS_GRID_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/PcpCombine_obs # directory containing climatology mean input to GridStat # Not used in this example @@ -247,7 +243,7 @@ GRID_STAT_CLIMO_STDEV_INPUT_DIR = OUTPUT_BASE = {ENV[OUTPUT_BASE]} GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_03h_mean +STAGING_DIR = {OUTPUT_BASE}/stage/APCP_03h_ensmean # End of [dir] section and start of [filename_templates] section [filename_templates] @@ -259,7 +255,7 @@ FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_APCP_{EN OBS_GRID_STAT_INPUT_TEMPLATE = {OBS_GRID_STAT_INPUT_DIR}/{valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2_a03h.nc # Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_mean +GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensmean # Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR # Not used in this example diff --git a/parm/metplus/GridStat_ensmean_APCP06h.conf b/parm/metplus/GridStat_ensmean_APCP06h.conf index 16c8e23f1a..363327eb4a 100644 --- a/parm/metplus/GridStat_ensmean_APCP06h.conf +++ b/parm/metplus/GridStat_ensmean_APCP06h.conf @@ -45,10 +45,6 @@ LEAD_SEQ = {ENV[fhr_list]} # wrappers have been run LOOP_ORDER = times -# Run pcp_combine on forecast/obs data? -FCST_PCP_COMBINE_RUN = False -OBS_PCP_COMBINE_RUN = False - # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 @@ -58,7 +54,7 @@ LOG_DIR = {OUTPUT_BASE}/log LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_mean/metplus_final.APCP06.conf +METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensmean/metplus_final.APCP06.conf # Location of MET config file to pass to GridStat GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped @@ -80,7 +76,7 @@ GRID_STAT_REGRID_SHAPE = SQUARE #GRID_STAT_GRID_WEIGHT_FLAG = # Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_mean +MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensmean FCST_NATIVE_DATA_TYPE = GRIB # Name to identify observation data in output @@ -157,7 +153,7 @@ 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 = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_mean +GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_ensmean # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = @@ -233,7 +229,7 @@ INPUT_BASE = {ENV[INPUT_BASE]} FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} # directory containing observation input to GridStat -OBS_GRID_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/pcp_combine_obs +OBS_GRID_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/PcpCombine_obs # directory containing climatology mean input to GridStat # Not used in this example @@ -247,7 +243,7 @@ GRID_STAT_CLIMO_STDEV_INPUT_DIR = OUTPUT_BASE = {ENV[OUTPUT_BASE]} GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_06h_mean +STAGING_DIR = {OUTPUT_BASE}/stage/APCP_06h_ensmean # End of [dir] section and start of [filename_templates] section [filename_templates] @@ -259,7 +255,7 @@ FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_APCP_{EN OBS_GRID_STAT_INPUT_TEMPLATE = {OBS_GRID_STAT_INPUT_DIR}/{valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2_a06h.nc # Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_mean +GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensmean # Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR # Not used in this example diff --git a/parm/metplus/GridStat_ensmean_APCP24h.conf b/parm/metplus/GridStat_ensmean_APCP24h.conf index 3a3ffefcbf..5d36222efd 100644 --- a/parm/metplus/GridStat_ensmean_APCP24h.conf +++ b/parm/metplus/GridStat_ensmean_APCP24h.conf @@ -45,10 +45,6 @@ LEAD_SEQ = {ENV[fhr_list]} # wrappers have been run LOOP_ORDER = times -# Run pcp_combine on forecast/obs data? -FCST_PCP_COMBINE_RUN = False -OBS_PCP_COMBINE_RUN = False - # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 @@ -58,7 +54,7 @@ LOG_DIR = {OUTPUT_BASE}/log LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_mean/metplus_final.APCP24.conf +METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensmean/metplus_final.APCP24.conf # Location of MET config file to pass to GridStat GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped @@ -80,7 +76,7 @@ GRID_STAT_REGRID_SHAPE = SQUARE #GRID_STAT_GRID_WEIGHT_FLAG = # Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_mean +MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensmean FCST_NATIVE_DATA_TYPE = GRIB # Name to identify observation data in output @@ -157,7 +153,7 @@ 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 = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_mean +GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_ensmean # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = @@ -233,7 +229,7 @@ INPUT_BASE = {ENV[INPUT_BASE]} FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} # directory containing observation input to GridStat -OBS_GRID_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/pcp_combine_obs +OBS_GRID_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/PcpCombine_obs # directory containing climatology mean input to GridStat # Not used in this example @@ -247,7 +243,7 @@ GRID_STAT_CLIMO_STDEV_INPUT_DIR = OUTPUT_BASE = {ENV[OUTPUT_BASE]} GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_24h_mean +STAGING_DIR = {OUTPUT_BASE}/stage/APCP_24h_ensmean # End of [dir] section and start of [filename_templates] section [filename_templates] @@ -259,7 +255,7 @@ FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_APCP_{EN OBS_GRID_STAT_INPUT_TEMPLATE = {OBS_GRID_STAT_INPUT_DIR}/{valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2_a24h.nc # Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_mean +GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensmean # Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR # Not used in this example diff --git a/parm/metplus/GridStat_ensmean_REFC.conf b/parm/metplus/GridStat_ensmean_REFC.conf index d39d383e39..d7a8df1063 100644 --- a/parm/metplus/GridStat_ensmean_REFC.conf +++ b/parm/metplus/GridStat_ensmean_REFC.conf @@ -45,10 +45,6 @@ LEAD_SEQ = {ENV[fhr_list]} # wrappers have been run LOOP_ORDER = times -# Run pcp_combine on forecast/obs data? -FCST_PCP_COMBINE_RUN = False -OBS_PCP_COMBINE_RUN = False - # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 @@ -58,7 +54,7 @@ LOG_DIR = {OUTPUT_BASE}/log LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_mean/metplus_final.REFC.conf +METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensmean/metplus_final.REFC.conf # Location of MET config file to pass to GridStat GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped @@ -80,7 +76,7 @@ GRID_STAT_INTERP_TYPE_WIDTH = 1 GRID_STAT_GRID_WEIGHT_FLAG = NONE # Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_mean +MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensmean #FCST_NATIVE_DATA_TYPE = GRIB # Name to identify observation data in output @@ -167,7 +163,7 @@ OBS_IS_PROB = false # Only used if OBS_IS_PROB is true - sets probabilistic threshold OBS_GRID_STAT_PROB_THRESH = ==0.1 -GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_REFC_{OBTYPE}_mean +GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_REFC_{OBTYPE}_ensmean # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = @@ -257,7 +253,7 @@ GRID_STAT_CLIMO_STDEV_INPUT_DIR = OUTPUT_BASE = {ENV[OUTPUT_BASE]} GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} -STAGING_DIR = {OUTPUT_BASE}/stage/REFC_mean +STAGING_DIR = {OUTPUT_BASE}/stage/REFC_ensmean # End of [dir] section and start of [filename_templates] section [filename_templates] @@ -269,7 +265,7 @@ FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_REFC_{OB OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/MergedReflectivityQCComposite_00.50_{valid?fmt=%Y%m%d}-{valid?fmt=%H}0000.grib2 # Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_mean +GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensmean # Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR # Not used in this example diff --git a/parm/metplus/GridStat_ensmean_RETOP.conf b/parm/metplus/GridStat_ensmean_RETOP.conf index 032c5a7d8a..bf61b5d0a2 100644 --- a/parm/metplus/GridStat_ensmean_RETOP.conf +++ b/parm/metplus/GridStat_ensmean_RETOP.conf @@ -45,10 +45,6 @@ LEAD_SEQ = {ENV[fhr_list]} # wrappers have been run LOOP_ORDER = times -# Run pcp_combine on forecast/obs data? -FCST_PCP_COMBINE_RUN = False -OBS_PCP_COMBINE_RUN = False - # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 @@ -58,7 +54,7 @@ LOG_DIR = {OUTPUT_BASE}/log LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_mean/metplus_final.RETOP.conf +METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensmean/metplus_final.RETOP.conf # Location of MET config file to pass to GridStat GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped @@ -80,7 +76,7 @@ GRID_STAT_INTERP_TYPE_WIDTH = 1 GRID_STAT_GRID_WEIGHT_FLAG = NONE # Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_mean +MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensmean #FCST_NATIVE_DATA_TYPE = GRIB # Name to identify observation data in output @@ -167,7 +163,7 @@ OBS_IS_PROB = false # Only used if OBS_IS_PROB is true - sets probabilistic threshold OBS_GRID_STAT_PROB_THRESH = ==0.1 -GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_RETOP_{OBTYPE}_mean +GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_RETOP_{OBTYPE}_ensmean # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = @@ -257,7 +253,7 @@ GRID_STAT_CLIMO_STDEV_INPUT_DIR = OUTPUT_BASE = {ENV[OUTPUT_BASE]} GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} -STAGING_DIR = {OUTPUT_BASE}/stage/RETOP_mean +STAGING_DIR = {OUTPUT_BASE}/stage/RETOP_ensmean # End of [dir] section and start of [filename_templates] section [filename_templates] @@ -269,7 +265,7 @@ FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_RETOP_{O OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/EchoTop_18_00.50_{valid?fmt=%Y%m%d}-{valid?fmt=%H}0000.grib2 # Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_mean +GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensmean # Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR # Not used in this example diff --git a/parm/metplus/GridStat_ensprob_APCP01h.conf b/parm/metplus/GridStat_ensprob_APCP01h.conf index 087fc77123..01c8ae7404 100644 --- a/parm/metplus/GridStat_ensprob_APCP01h.conf +++ b/parm/metplus/GridStat_ensprob_APCP01h.conf @@ -45,10 +45,6 @@ LEAD_SEQ = {ENV[fhr_list]} # wrappers have been run LOOP_ORDER = times -# Run pcp_combine on forecast/obs data? -FCST_PCP_COMBINE_RUN = False -OBS_PCP_COMBINE_RUN = False - # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 @@ -58,7 +54,7 @@ LOG_DIR = {OUTPUT_BASE}/log LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_prob/metplus_final.APCP01.conf +METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensprob/metplus_final.APCP01.conf # Location of MET config file to pass to GridStat GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped @@ -80,7 +76,7 @@ GRID_STAT_REGRID_SHAPE = SQUARE #GRID_STAT_GRID_WEIGHT_FLAG = # Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_prob +MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensprob FCST_NATIVE_DATA_TYPE = GRIB # Name to identify observation data in output @@ -168,7 +164,7 @@ 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 = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_prob +GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_ensprob # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = @@ -258,7 +254,7 @@ GRID_STAT_CLIMO_STDEV_INPUT_DIR = OUTPUT_BASE = {ENV[OUTPUT_BASE]} GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_01h_prob +STAGING_DIR = {OUTPUT_BASE}/stage/APCP_01h_ensprob # End of [dir] section and start of [filename_templates] section [filename_templates] @@ -270,7 +266,7 @@ FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_APCP_{EN OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2 # Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_prob +GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensprob # Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR # Not used in this example diff --git a/parm/metplus/GridStat_ensprob_APCP03h.conf b/parm/metplus/GridStat_ensprob_APCP03h.conf index 0cf2588582..f9a23196f5 100644 --- a/parm/metplus/GridStat_ensprob_APCP03h.conf +++ b/parm/metplus/GridStat_ensprob_APCP03h.conf @@ -45,10 +45,6 @@ LEAD_SEQ = {ENV[fhr_list]} # wrappers have been run LOOP_ORDER = times -# Run pcp_combine on forecast/obs data? -FCST_PCP_COMBINE_RUN = False -OBS_PCP_COMBINE_RUN = False - # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 @@ -58,7 +54,7 @@ LOG_DIR = {OUTPUT_BASE}/log LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_prob/metplus_final.APCP03.conf +METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensprob/metplus_final.APCP03.conf # Location of MET config file to pass to GridStat GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped @@ -80,7 +76,7 @@ GRID_STAT_REGRID_SHAPE = SQUARE #GRID_STAT_GRID_WEIGHT_FLAG = # Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_prob +MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensprob FCST_NATIVE_DATA_TYPE = GRIB # Name to identify observation data in output @@ -167,7 +163,7 @@ 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 = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_prob +GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_ensprob # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = @@ -243,7 +239,7 @@ INPUT_BASE = {ENV[INPUT_BASE]} FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} # directory containing observation input to GridStat -OBS_GRID_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/pcp_combine_obs +OBS_GRID_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/PcpCombine_obs # directory containing climatology mean input to GridStat # Not used in this example @@ -257,7 +253,7 @@ GRID_STAT_CLIMO_STDEV_INPUT_DIR = OUTPUT_BASE = {ENV[OUTPUT_BASE]} GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_03h_prob +STAGING_DIR = {OUTPUT_BASE}/stage/APCP_03h_ensprob # End of [dir] section and start of [filename_templates] section [filename_templates] @@ -269,7 +265,7 @@ FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_APCP_{EN OBS_GRID_STAT_INPUT_TEMPLATE = {OBS_GRID_STAT_INPUT_DIR}/{valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2_a03h.nc # Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_prob +GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensprob # Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR # Not used in this example diff --git a/parm/metplus/GridStat_ensprob_APCP06h.conf b/parm/metplus/GridStat_ensprob_APCP06h.conf index a04ed19c38..739c0d08af 100644 --- a/parm/metplus/GridStat_ensprob_APCP06h.conf +++ b/parm/metplus/GridStat_ensprob_APCP06h.conf @@ -45,10 +45,6 @@ LEAD_SEQ = {ENV[fhr_list]} # wrappers have been run LOOP_ORDER = times -# Run pcp_combine on forecast/obs data? -FCST_PCP_COMBINE_RUN = False -OBS_PCP_COMBINE_RUN = False - # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 @@ -58,7 +54,7 @@ LOG_DIR = {OUTPUT_BASE}/log LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_prob/metplus_final.APCP06.conf +METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensprob/metplus_final.APCP06.conf # Location of MET config file to pass to GridStat GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped @@ -80,7 +76,7 @@ GRID_STAT_REGRID_SHAPE = SQUARE #GRID_STAT_GRID_WEIGHT_FLAG = # Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_prob +MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensprob FCST_NATIVE_DATA_TYPE = GRIB # Name to identify observation data in output @@ -167,7 +163,7 @@ 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 = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_prob +GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_ensprob # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = @@ -243,7 +239,7 @@ INPUT_BASE = {ENV[INPUT_BASE]} FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} # directory containing observation input to GridStat -OBS_GRID_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/pcp_combine_obs +OBS_GRID_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/PcpCombine_obs # directory containing climatology mean input to GridStat # Not used in this example @@ -257,7 +253,7 @@ GRID_STAT_CLIMO_STDEV_INPUT_DIR = OUTPUT_BASE = {ENV[OUTPUT_BASE]} GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_06h_prob +STAGING_DIR = {OUTPUT_BASE}/stage/APCP_06h_ensprob # End of [dir] section and start of [filename_templates] section [filename_templates] @@ -269,7 +265,7 @@ FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_APCP_{EN OBS_GRID_STAT_INPUT_TEMPLATE = {OBS_GRID_STAT_INPUT_DIR}/{valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2_a06h.nc # Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_prob +GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensprob # Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR # Not used in this example diff --git a/parm/metplus/GridStat_ensprob_APCP24h.conf b/parm/metplus/GridStat_ensprob_APCP24h.conf index febd22a387..11befbad4c 100644 --- a/parm/metplus/GridStat_ensprob_APCP24h.conf +++ b/parm/metplus/GridStat_ensprob_APCP24h.conf @@ -45,10 +45,6 @@ LEAD_SEQ = {ENV[fhr_list]} # wrappers have been run LOOP_ORDER = times -# Run pcp_combine on forecast/obs data? -FCST_PCP_COMBINE_RUN = False -OBS_PCP_COMBINE_RUN = False - # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 @@ -58,7 +54,7 @@ LOG_DIR = {OUTPUT_BASE}/log LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_prob/metplus_final.APCP24.conf +METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensprob/metplus_final.APCP24.conf # Location of MET config file to pass to GridStat GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped @@ -80,7 +76,7 @@ GRID_STAT_REGRID_SHAPE = SQUARE #GRID_STAT_GRID_WEIGHT_FLAG = # Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_prob +MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensprob FCST_NATIVE_DATA_TYPE = GRIB # Name to identify observation data in output @@ -167,7 +163,7 @@ 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 = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_prob +GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_ensprob # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = @@ -243,7 +239,7 @@ INPUT_BASE = {ENV[INPUT_BASE]} FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} # directory containing observation input to GridStat -OBS_GRID_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/pcp_combine_obs +OBS_GRID_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/PcpCombine_obs # directory containing climatology mean input to GridStat # Not used in this example @@ -257,7 +253,7 @@ GRID_STAT_CLIMO_STDEV_INPUT_DIR = OUTPUT_BASE = {ENV[OUTPUT_BASE]} GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_24h_prob +STAGING_DIR = {OUTPUT_BASE}/stage/APCP_24h_ensprob # End of [dir] section and start of [filename_templates] section [filename_templates] @@ -269,7 +265,7 @@ FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_APCP_{EN OBS_GRID_STAT_INPUT_TEMPLATE = {OBS_GRID_STAT_INPUT_DIR}/{valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2_a24h.nc # Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_prob +GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensprob # Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR # Not used in this example diff --git a/parm/metplus/GridStat_ensprob_REFC.conf b/parm/metplus/GridStat_ensprob_REFC.conf index cec1ad5682..32dcea2ba5 100644 --- a/parm/metplus/GridStat_ensprob_REFC.conf +++ b/parm/metplus/GridStat_ensprob_REFC.conf @@ -45,10 +45,6 @@ LEAD_SEQ = {ENV[fhr_list]} # wrappers have been run LOOP_ORDER = times -# Run pcp_combine on forecast/obs data? -FCST_PCP_COMBINE_RUN = False -OBS_PCP_COMBINE_RUN = False - # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 @@ -58,7 +54,7 @@ LOG_DIR = {OUTPUT_BASE}/log LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_prob/metplus_final.REFC.conf +METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensprob/metplus_final.REFC.conf # Location of MET config file to pass to GridStat GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped @@ -80,7 +76,7 @@ GRID_STAT_INTERP_TYPE_WIDTH = 1 GRID_STAT_GRID_WEIGHT_FLAG = NONE # Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_prob +MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensprob #FCST_NATIVE_DATA_TYPE = GRIB # Name to identify observation data in output @@ -194,7 +190,7 @@ OBS_IS_PROB = false # Only used if OBS_IS_PROB is true - sets probabilistic threshold OBS_GRID_STAT_PROB_THRESH = ==0.1 -GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_REFC_{OBTYPE}_prob +GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_REFC_{OBTYPE}_ensprob # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = @@ -282,7 +278,7 @@ GRID_STAT_CLIMO_STDEV_INPUT_DIR = OUTPUT_BASE = {ENV[OUTPUT_BASE]} GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} -STAGING_DIR = {OUTPUT_BASE}/stage/REFC_prob +STAGING_DIR = {OUTPUT_BASE}/stage/REFC_ensprob # End of [dir] section and start of [filename_templates] section [filename_templates] @@ -294,7 +290,7 @@ FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_REFC_{OB OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/MergedReflectivityQCComposite_00.50_{valid?fmt=%Y%m%d}-{valid?fmt=%H}0000.grib2 # Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_prob +GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensprob # Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR # Not used in this example diff --git a/parm/metplus/GridStat_ensprob_RETOP.conf b/parm/metplus/GridStat_ensprob_RETOP.conf index 9c757badcd..26e203e8ae 100644 --- a/parm/metplus/GridStat_ensprob_RETOP.conf +++ b/parm/metplus/GridStat_ensprob_RETOP.conf @@ -45,10 +45,6 @@ LEAD_SEQ = {ENV[fhr_list]} # wrappers have been run LOOP_ORDER = times -# Run pcp_combine on forecast/obs data? -FCST_PCP_COMBINE_RUN = False -OBS_PCP_COMBINE_RUN = False - # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 @@ -58,7 +54,7 @@ LOG_DIR = {OUTPUT_BASE}/log LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} # Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_prob/metplus_final.RETOP.conf +METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensprob/metplus_final.RETOP.conf # Location of MET config file to pass to GridStat GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped @@ -80,7 +76,7 @@ GRID_STAT_INTERP_TYPE_WIDTH = 1 GRID_STAT_GRID_WEIGHT_FLAG = NONE # Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_prob +MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensprob #FCST_NATIVE_DATA_TYPE = GRIB # Name to identify observation data in output @@ -177,7 +173,7 @@ OBS_IS_PROB = false # Only used if OBS_IS_PROB is true - sets probabilistic threshold OBS_GRID_STAT_PROB_THRESH = ==0.1 -GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_RETOP_{OBTYPE}_prob +GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_RETOP_{OBTYPE}_ensprob # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = @@ -265,7 +261,7 @@ GRID_STAT_CLIMO_STDEV_INPUT_DIR = OUTPUT_BASE = {ENV[OUTPUT_BASE]} GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} -STAGING_DIR = {OUTPUT_BASE}/stage/RETOP_prob +STAGING_DIR = {OUTPUT_BASE}/stage/RETOP_ensprob # End of [dir] section and start of [filename_templates] section [filename_templates] @@ -277,7 +273,7 @@ FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_RETOP_{O OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/EchoTop_18_00.50_{valid?fmt=%Y%m%d}-{valid?fmt=%H}0000.grib2 # Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_prob +GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensprob # Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR # Not used in this example diff --git a/parm/metplus/Pb2nc_obs.conf b/parm/metplus/Pb2nc_obs.conf index 3849ad49c7..be19983b90 100644 --- a/parm/metplus/Pb2nc_obs.conf +++ b/parm/metplus/Pb2nc_obs.conf @@ -59,7 +59,7 @@ PB2NC_WINDOW_END = {OBS_WINDOW_END} # default is. PB2NC_SKIP_IF_OUTPUT_EXISTS = False -# Values to pass to pb2nc config file using environment variables of the same name. +# Values to pass to Pb2nc config file using environment variables of the same name. PB2NC_GRID = PB2NC_POLY = PB2NC_STATION_ID = @@ -112,8 +112,6 @@ PB2NC_OUTPUT_DIR = {{output_dir}} # OUTPUT_BASE = {{output_base}} -#STAGING_DIR = {OUTPUT_BASE}/stage_nopointstat/conus_sfc - # End of [dir] section and start of [filename_templates] section. [filename_templates] # diff --git a/parm/metplus/PointStat_SFC.conf b/parm/metplus/PointStat_SFC.conf index 0b38cce536..975eda6c3f 100644 --- a/parm/metplus/PointStat_SFC.conf +++ b/parm/metplus/PointStat_SFC.conf @@ -1,7 +1,9 @@ +# PointStat METplus Configuration + [config] # List of applications to run - only PointStat for this case -PROCESS_LIST = PB2NC, PointStat +PROCESS_LIST = PointStat # time looping - options are INIT, VALID, RETRO, and REALTIME # If set to INIT or RETRO: @@ -14,7 +16,7 @@ LOOP_BY = INIT # %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 +INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT INIT_BEG = {ENV[CDATE]} @@ -23,13 +25,13 @@ INIT_BEG = {ENV[CDATE]} INIT_END = {ENV[CDATE]} # Increment between METplus runs (in seconds if no units are specified) -# Must be >= 60 seconds +# Must be >= 60 seconds. INIT_INCREMENT = 3600 # List of forecast leads to process for each run time (init or valid) # In hours if units are not specified # If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[fhr_list]} +LEAD_SEQ = {ENV[FHR_LIST]} # Order of loops to process data - Options are times, processes # Not relevant if only one item is in the PROCESS_LIST @@ -39,56 +41,26 @@ LEAD_SEQ = {ENV[fhr_list]} # 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 +LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for PointStat only LOG_POINT_STAT_VERBOSITY = 2 -# Location of MET config file to pass to PB2NC -PB2NC_CONFIG_FILE = {PARM_BASE}/met_config/PB2NCConfig_wrapped - -# For both PB2NC and point_stat -OBS_WINDOW_BEGIN = -1799 -OBS_WINDOW_END = 1800 - -PB2NC_WINDOW_BEGIN = {OBS_WINDOW_BEGIN} -PB2NC_WINDOW_END = {OBS_WINDOW_END} - -# If set to True, skip run if the output file determined by the output directory and -# filename template already exists -PB2NC_SKIP_IF_OUTPUT_EXISTS = True - -# Values to pass to pb2nc config file using environment variables of the same name. -PB2NC_GRID = -PB2NC_POLY = -PB2NC_STATION_ID = -PB2NC_MESSAGE_TYPE = ADPSFC, ADPUPA -PB2NC_LEVEL_CATEGORY = 0, 1, 4, 5, 6 -PB2NC_QUALITY_MARK_THRESH = 9 - -PB2NC_PB_REPORT_TYPE = 120, 220, 221, 122, 222, 223, 224, 131, 133, 233, 153, 156, 157, 188, 288, 180, 280, 181, 182, 281, 282, 183, 284, 187, 287 - -# Leave empty to process all -PB2NC_OBS_BUFR_VAR_LIST = PMO, ZOB, TOB, D_DPT, QOB, UOB, VOB, PWO, TOCC, D_RH, HOVI, CEILING, D_PBL, D_CAPE, D_MLCAPE, MXGS, D_WIND, D_PRMSL - -# Mapping of input BUFR variable names to output variables names. -# The default PREPBUFR map, obs_prepbufr_map, is appended to this map. -PB2NC_OBS_BUFR_MAP = [{ key = "PWO"; val = "PWAT"; },{ key = "MXGS"; val = "GUST"; }, { key = "CEILING"; val = "CEILING"; }] - -# For defining the time periods for summarization -# False for no time summary, True otherwise -# The rest of the PB2NC_TIME_SUMMARY variables are ignored if set to False -PB2NC_TIME_SUMMARY_FLAG = False -PB2NC_TIME_SUMMARY_BEG = 000000 -PB2NC_TIME_SUMMARY_END = 235959 -PB2NC_TIME_SUMMARY_VAR_NAMES = PMO,TOB,TDO,UOB,VOB,PWO,TOCC -PB2NC_TIME_SUMMARY_TYPES = min, max, range, mean, stdev, median, p80 +# +# Specify the name of the METplus log file. +# +LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_SFC{ENV[USCORE_ENSMEM_NAME_OR_NULL]}_{ENV[CDATE]} +# +# Specify the location and name of the final METplus conf file. +# +METPLUS_CONF = {OUTPUT_BASE}/metprd/PointStat/metplus_final.SFC{ENV[DOT_ENSMEM]}.conf # Location of MET config 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 -POINT_STAT_CONFIG_FILE ={PARM_BASE}/met_config/PointStatConfig_wrapped +# 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. +POINT_STAT_CONFIG_FILE = {PARM_BASE}/met_config/PointStatConfig_wrapped POINT_STAT_OBS_QUALITY_INC = 0, 1, 2, 3, 9, NA #POINT_STAT_OBS_QUALITY_EXC = @@ -128,18 +100,33 @@ POINT_STAT_CLIMO_CDF_BINS = 1 #POINT_STAT_HSS_EC_VALUE = -# Time relative to each input file's valid time (in seconds if no units are specified) for data within the file to be -# considered valid. Values are set in the 'obs_window' dictionary in the PointStat config file +# +# Time relative to each input file's valid time (in seconds if no units +# are specified) for data within the file to be considered valid. Values +# are set in the 'obs_window' dictionary in the PointStat config file. +# Set both BEGIN and END to 0 to require the exact time in the filename. +# +OBS_WINDOW_BEGIN = -1799 +OBS_WINDOW_END = 1800 OBS_POINT_STAT_WINDOW_BEGIN = {OBS_WINDOW_BEGIN} OBS_POINT_STAT_WINDOW_END = {OBS_WINDOW_END} # Optional list of offsets to look for point observation data POINT_STAT_OFFSETS = 0 - -# Model/fcst and obs name, e.g. GFS, NAM, GDAS, etc. +# +# Name to identify model (forecast) data in output. +# +# The variable MODEL is recorded in the stat files, and the data in +# these files is then plotted (e.g. using METViewer). Here, we add a +# suffix to MODEL that identifies the forecast ensemble member. This +# makes it easier to identify each curve. +# MODEL = {ENV[VX_FCST_MODEL_NAME]}{ENV[USCORE_ENSMEM_NAME_OR_NULL]} POINT_STAT_DESC = NA +# +# Name to identify observation data in output. +# OBTYPE = NDAS # Regrid to specified grid. Indicate NONE if no regridding, or the grid id @@ -166,15 +153,15 @@ POINT_STAT_GRID = # files work (those that fit on one line), a long list will result in an # environment variable that is too long, resulting in an error. For long # lists of poly masking files (i.e. all the mask files in the NCEP_mask -# directory), define these in the MET point_stat configuration file. +# directory), define these in the METplus PointStat configuration file. POINT_STAT_POLY = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly POINT_STAT_STATION_ID = # Message types, if all message types are to be returned, leave this empty, # otherwise indicate the message types of interest. POINT_STAT_MESSAGE_TYPE = ADPSFC -# Variables and levels as specified in the field dictionary of the MET -# point_stat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, +# Variables and levels as specified in the field dictionary of the METplus +# PointStat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, # (optional) FCST_VARn_OPTION # set to True to run PointStat once for each name/level combination @@ -237,62 +224,66 @@ BOTH_VAR12_NAME = SPFH BOTH_VAR12_LEVELS = Z2 -# End of [config] section and start of [dir] section +# End of [config] section and start of [dir] section. [dir] - -# directory containing input to PB2NC -PB2NC_INPUT_DIR = {ENV[OBS_DIR]} - -# directory to write output from -PB2NC_OUTPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/pb2nc - -INPUT_BASE = {ENV[INPUT_BASE]} - -FCST_POINT_STAT_INPUT_DIR = {INPUT_BASE} -OBS_POINT_STAT_INPUT_DIR = {PB2NC_OUTPUT_DIR} - -# directory containing climatology mean input to PointStat -# Not used in this example +# +# Directory containing observation input to PointStat. +# +#OBS_POINT_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/Pb2nc_obs +OBS_POINT_STAT_INPUT_DIR = {ENV[OBS_INPUT_DIR]} +# +# Directory containing forecast input to PointStat. +# +FCST_POINT_STAT_INPUT_DIR = {ENV[INPUT_BASE]} +# +# Directory containing climatology mean input to PointStat. Not used in +# this example. +# POINT_STAT_CLIMO_MEAN_INPUT_DIR = - -# directory containing climatology mean input to PointStat -# Not used in this example +# +# Directory containing climatology mean input to PointStat. Not used in +# this example. +# POINT_STAT_CLIMO_STDEV_INPUT_DIR = - +# +# Directory in which to write output from PointStat. +# OUTPUT_BASE = {ENV[OUTPUT_BASE]} +# +# OUTPUT_BASE apparently has to be set to something; it cannot be left +# to its default value. But it is not explicitly used elsewhere in this +# configuration file. +# POINT_STAT_OUTPUT_DIR = {OUTPUT_BASE} +# +# Directory for staging data. +# +STAGING_DIR = {OUTPUT_BASE}/stage/SFC -LOG_DIR = {ENV[LOG_DIR]} - -STAGING_DIR = {OUTPUT_BASE}/stage/conus_sfc - -# End of [dir] section and start of [filename_templates] section +# End of [dir] section and start of [filename_templates] section. [filename_templates] - -# Template to look for prepbvur input to PB2NC relative to PB2NC_INPUT_DIR -PB2NC_INPUT_TEMPLATE = prepbufr.ndas.{valid?fmt=%Y%m%d%H} -# Template to use to write output from PB2NC -PB2NC_OUTPUT_TEMPLATE = prepbufr.ndas{ENV[DOT_ENSMEM]}.{valid?fmt=%Y%m%d%H}.nc - -# Template to look for forecast input to PointStat relative to FCST_POINT_STAT_INPUT_DIR +# +# Template for forecast input to PointStat relative to +# FCST_POINT_STAT_INPUT_DIR. +# FCST_POINT_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_ENSMEM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 - -# Template to look for observation input to PointStat relative to OBS_POINT_STAT_INPUT_DIR -OBS_POINT_STAT_INPUT_TEMPLATE = prepbufr.ndas{ENV[DOT_ENSMEM]}.{valid?fmt=%Y%m%d%H}.nc - -# Template to look for climatology input to PointStat relative to POINT_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# Template for observation input to PointStat relative to +# OBS_POINT_STAT_INPUT_DIR. +# +#OBS_POINT_STAT_INPUT_TEMPLATE = prepbufr.ndas{ENV[DOT_ENSMEM]}.{valid?fmt=%Y%m%d%H}.nc +OBS_POINT_STAT_INPUT_TEMPLATE = {ENV[OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE]} +# +# Template for output from PointStat relative to POINT_STAT_OUTPUT_DIR. +# +POINT_STAT_OUTPUT_TEMPLATE = metprd/PointStat +# +# Template for climatology input to PointStat relative to +# POINT_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. +# POINT_STAT_CLIMO_MEAN_INPUT_TEMPLATE = - -# Template to look for climatology input to PointStat relative to POINT_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# Template for climatology input to PointStat relative to +# POINT_STAT_CLIMO_STDEV_INPUT_DIR. Not used in this example. +# POINT_STAT_CLIMO_STDEV_INPUT_TEMPLATE = - -#Template for where point-stat output is written -POINT_STAT_OUTPUT_TEMPLATE = metprd/point_stat - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_SFC{ENV[USCORE_ENSMEM_NAME_OR_NULL]}_{ENV[CDATE]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/metprd/point_stat/metplus_final.conus_surface{ENV[DOT_ENSMEM]}.conf diff --git a/parm/metplus/PointStat_UPA.conf b/parm/metplus/PointStat_UPA.conf index 566820ce67..4d0ac259f4 100644 --- a/parm/metplus/PointStat_UPA.conf +++ b/parm/metplus/PointStat_UPA.conf @@ -1,7 +1,9 @@ +# PointStat METplus Configuration + [config] # List of applications to run - only PointStat for this case -PROCESS_LIST = PB2NC, PointStat +PROCESS_LIST = PointStat # time looping - options are INIT, VALID, RETRO, and REALTIME # If set to INIT or RETRO: @@ -14,7 +16,7 @@ LOOP_BY = INIT # %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 +INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT INIT_BEG = {ENV[CDATE]} @@ -23,13 +25,13 @@ INIT_BEG = {ENV[CDATE]} INIT_END = {ENV[CDATE]} # Increment between METplus runs (in seconds if no units are specified) -# Must be >= 60 seconds +# 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 = begin_end_incr(0,{ENV[fhr_last]},6) +LEAD_SEQ = {ENV[FHR_LIST]} # Order of loops to process data - Options are times, processes # Not relevant if only one item is in the PROCESS_LIST @@ -39,56 +41,25 @@ LEAD_SEQ = begin_end_incr(0,{ENV[fhr_last]},6) # 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 +LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for PointStat only LOG_POINT_STAT_VERBOSITY = 2 - -# Location of MET config file to pass to PB2NC -PB2NC_CONFIG_FILE = {PARM_BASE}/met_config/PB2NCConfig_wrapped - -# For both PB2NC and point_stat -OBS_WINDOW_BEGIN = -1799 -OBS_WINDOW_END = 1800 - -PB2NC_WINDOW_BEGIN = {OBS_WINDOW_BEGIN} -PB2NC_WINDOW_END = {OBS_WINDOW_END} - -# If set to True, skip run if the output file determined by the output directory and -# filename template already exists -PB2NC_SKIP_IF_OUTPUT_EXISTS = True - -# Values to pass to pb2nc config file using environment variables of the same name. -PB2NC_GRID = -PB2NC_POLY = -PB2NC_STATION_ID = -PB2NC_MESSAGE_TYPE = ADPSFC, ADPUPA -PB2NC_LEVEL_CATEGORY = 0, 1, 4, 5, 6 -PB2NC_QUALITY_MARK_THRESH = 9 - -PB2NC_PB_REPORT_TYPE = 120, 220, 221, 122, 222, 223, 224, 131, 133, 233, 153, 156, 157, 188, 288, 180, 280, 181, 182, 281, 282, 183, 284, 187, 287 - -# Leave empty to process all -PB2NC_OBS_BUFR_VAR_LIST = PMO, ZOB, TOB, D_DPT, QOB, UOB, VOB, PWO, TOCC, D_RH, HOVI, CEILING, D_PBL, D_CAPE, D_MLCAPE, MXGS, D_WIND, D_PRMSL - -# Mapping of input BUFR variable names to output variables names. -# The default PREPBUFR map, obs_prepbufr_map, is appended to this map. -PB2NC_OBS_BUFR_MAP = [{ key = "PWO"; val = "PWAT"; },{ key = "MXGS"; val = "GUST"; }, { key = "CEILING"; val = "CEILING"; }] - -# For defining the time periods for summarization -# False for no time summary, True otherwise -# The rest of the PB2NC_TIME_SUMMARY variables are ignored if set to False -PB2NC_TIME_SUMMARY_FLAG = False -PB2NC_TIME_SUMMARY_BEG = 000000 -PB2NC_TIME_SUMMARY_END = 235959 -PB2NC_TIME_SUMMARY_VAR_NAMES = PMO,TOB,TDO,UOB,VOB,PWO,TOCC -PB2NC_TIME_SUMMARY_TYPES = min, max, range, mean, stdev, median, p80 +# +# Specify the name of the METplus log file. +# +LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_UPA{ENV[USCORE_ENSMEM_NAME_OR_NULL]}_{ENV[CDATE]} +# +# Specify the location and name of the final METplus conf file. +# +METPLUS_CONF = {OUTPUT_BASE}/metprd/PointStat/metplus_final.UPA{ENV[DOT_ENSMEM]}.conf # Location of MET config 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 -POINT_STAT_CONFIG_FILE ={PARM_BASE}/met_config/PointStatConfig_wrapped +# 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. +POINT_STAT_CONFIG_FILE = {PARM_BASE}/met_config/PointStatConfig_wrapped POINT_STAT_OBS_QUALITY_INC = 0, 1, 2, 3, 9, NA #POINT_STAT_OBS_QUALITY_EXC = @@ -128,18 +99,33 @@ POINT_STAT_CLIMO_CDF_BINS = 1 #POINT_STAT_HSS_EC_VALUE = -# Time relative to each input file's valid time (in seconds if no units are specified) for data within the file to be -# considered valid. Values are set in the 'obs_window' dictionary in the PointStat config file +# +# Time relative to each input file's valid time (in seconds if no units +# are specified) for data within the file to be considered valid. Values +# are set in the 'obs_window' dictionary in the PointStat config file. +# Set both BEGIN and END to 0 to require the exact time in the filename. +# +OBS_WINDOW_BEGIN = -1799 +OBS_WINDOW_END = 1800 OBS_POINT_STAT_WINDOW_BEGIN = {OBS_WINDOW_BEGIN} OBS_POINT_STAT_WINDOW_END = {OBS_WINDOW_END} # Optional list of offsets to look for point observation data POINT_STAT_OFFSETS = 0 - -# Model/fcst and obs name, e.g. GFS, NAM, GDAS, etc. +# +# Name to identify model (forecast) data in output. +# +# The variable MODEL is recorded in the stat files, and the data in +# these files is then plotted (e.g. using METViewer). Here, we add a +# suffix to MODEL that identifies the forecast ensemble member. This +# makes it easier to identify each curve. +# MODEL = {ENV[VX_FCST_MODEL_NAME]}{ENV[USCORE_ENSMEM_NAME_OR_NULL]} POINT_STAT_DESC = NA +# +# Name to identify observation data in output. +# OBTYPE = NDAS # Regrid to specified grid. Indicate NONE if no regridding, or the grid id @@ -166,15 +152,15 @@ POINT_STAT_GRID = # files work (those that fit on one line), a long list will result in an # environment variable that is too long, resulting in an error. For long # lists of poly masking files (i.e. all the mask files in the NCEP_mask -# directory), define these in the MET point_stat configuration file. +# directory), define these in the METplus PointStat configuration file. POINT_STAT_POLY = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly POINT_STAT_STATION_ID = # Message types, if all message types are to be returned, leave this empty, # otherwise indicate the message types of interest. POINT_STAT_MESSAGE_TYPE = ADPUPA -# Variables and levels as specified in the field dictionary of the MET -# point_stat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, +# Variables and levels as specified in the field dictionary of the METplus +# PointStat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, # (optional) FCST_VARn_OPTION # set to True to run PointStat once for each name/level combination @@ -184,13 +170,14 @@ POINT_STAT_ONCE_PER_FIELD = False # fields to compare # Note: If FCST_VAR_* is set, then a corresponding OBS_VAR_* variable must be set # To use one variables for both forecast and observation data, set BOTH_VAR_* instead + BOTH_VAR1_NAME = TMP BOTH_VAR1_LEVELS = P1000, P925, P850, P700, P500, P400, P300, P250, P200, P150, P100, P50, P20, P10 BOTH_VAR2_NAME = RH BOTH_VAR2_LEVELS = P1000, P925, P850, P700, P500, P400, P300, P250 -BOTH_VAR3_NAME = DPT +BOTH_VAR3_NAME = DPT BOTH_VAR3_LEVELS = P1000, P925, P850, P700, P500, P400, P300 BOTH_VAR4_NAME = UGRD @@ -242,63 +229,66 @@ OBS_VAR12_LEVELS = L0 OBS_VAR12_OPTIONS = cnt_thresh = [ >0 ]; cnt_logic = UNION; OBS_VAR12_THRESH = >500, >1000, >1500, >2000, >3000, >4000 -# End of [config] section and start of [dir] section +# End of [config] section and start of [dir] section. [dir] - -# directory containing input to PB2NC -PB2NC_INPUT_DIR = {ENV[OBS_DIR]} - -# directory to write output from -PB2NC_OUTPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/pb2nc - -INPUT_BASE = {ENV[INPUT_BASE]} - -FCST_POINT_STAT_INPUT_DIR = {INPUT_BASE} -OBS_POINT_STAT_INPUT_DIR = {PB2NC_OUTPUT_DIR} - -# directory containing climatology mean input to PointStat -# Not used in this example +# +# Directory containing observation input to PointStat. +# +#OBS_POINT_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/Pb2nc_obs +OBS_POINT_STAT_INPUT_DIR = {ENV[OBS_INPUT_DIR]} +# +# Directory containing forecast input to PointStat. +# +FCST_POINT_STAT_INPUT_DIR = {ENV[INPUT_BASE]} +# +# Directory containing climatology mean input to PointStat. Not used in +# this example. +# POINT_STAT_CLIMO_MEAN_INPUT_DIR = - -# directory containing climatology mean input to PointStat -# Not used in this example +# +# Directory containing climatology mean input to PointStat. Not used in +# this example. +# POINT_STAT_CLIMO_STDEV_INPUT_DIR = - -OUTPUT_BASE = {ENV[OUTPUT_BASE]} +# +# Directory in which to write output from PointStat. +# POINT_STAT_OUTPUT_DIR = {OUTPUT_BASE} +# +# OUTPUT_BASE apparently has to be set to something; it cannot be left +# to its default value. But it is not explicitly used elsewhere in this +# configuration file. +# +OUTPUT_BASE = {ENV[OUTPUT_BASE]} +# +# Directory for staging data. +# +STAGING_DIR = {OUTPUT_BASE}/stage/UPA -LOG_DIR = {ENV[LOG_DIR]} - -STAGING_DIR = {OUTPUT_BASE}/stage/upper_air - -# End of [dir] section and start of [filename_templates] section +# End of [dir] section and start of [filename_templates] section. [filename_templates] - -# Template to look for prepbvur input to PB2NC relative to PB2NC_INPUT_DIR -PB2NC_INPUT_TEMPLATE = prepbufr.ndas.{valid?fmt=%Y%m%d%H} - -# Template to use to write output from PB2NC -PB2NC_OUTPUT_TEMPLATE = prepbufr.ndas{ENV[DOT_ENSMEM]}.{valid?fmt=%Y%m%d%H}.nc - -# Template to look for forecast input to PointStat relative to FCST_POINT_STAT_INPUT_DIR +# +# Template for observation input to PointStat relative to +# OBS_POINT_STAT_INPUT_DIR. +# +#OBS_POINT_STAT_INPUT_TEMPLATE = prepbufr.ndas{ENV[DOT_ENSMEM]}.{valid?fmt=%Y%m%d%H}.nc +OBS_POINT_STAT_INPUT_TEMPLATE = {ENV[OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE]} +# +# Template for forecast input to PointStat relative to +# FCST_POINT_STAT_INPUT_DIR. +# FCST_POINT_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_ENSMEM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 - -# Template to look for observation input to PointStat relative to OBS_POINT_STAT_INPUT_DIR -OBS_POINT_STAT_INPUT_TEMPLATE = prepbufr.ndas{ENV[DOT_ENSMEM]}.{valid?fmt=%Y%m%d%H}.nc - -# Template to look for climatology input to PointStat relative to POINT_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# Template for output from PointStat relative to POINT_STAT_OUTPUT_DIR. +# +POINT_STAT_OUTPUT_TEMPLATE = metprd/PointStat +# +# Template for climatology input to PointStat relative to +# POINT_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. +# POINT_STAT_CLIMO_MEAN_INPUT_TEMPLATE = - -# Template to look for climatology input to PointStat relative to POINT_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# Template for climatology input to PointStat relative to +# POINT_STAT_CLIMO_STDEV_INPUT_DIR. Not used in this example. +# POINT_STAT_CLIMO_STDEV_INPUT_TEMPLATE = - -#Template for where point-stat output is written -POINT_STAT_OUTPUT_TEMPLATE = metprd/point_stat - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_UPA{ENV[USCORE_ENSMEM_NAME_OR_NULL]}_{ENV[CDATE]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/metprd/point_stat/metplus_final.upper_air{ENV[DOT_ENSMEM]}.conf diff --git a/parm/metplus/PointStat_ensmean_SFC.conf b/parm/metplus/PointStat_ensmean_SFC.conf index b1bc1767ca..7f149d618d 100644 --- a/parm/metplus/PointStat_ensmean_SFC.conf +++ b/parm/metplus/PointStat_ensmean_SFC.conf @@ -1,7 +1,9 @@ +# Ensemble mean PointStat METplus Configuration + [config] # List of applications to run - only PointStat for this case -PROCESS_LIST = PB2NC, PointStat +PROCESS_LIST = PointStat # time looping - options are INIT, VALID, RETRO, and REALTIME # If set to INIT or RETRO: @@ -14,7 +16,7 @@ LOOP_BY = INIT # %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 +INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT INIT_BEG = {ENV[CDATE]} @@ -22,14 +24,14 @@ INIT_BEG = {ENV[CDATE]} # End time for METplus run - must match INIT_TIME_FMT INIT_END = {ENV[CDATE]} -# Increment between METplus runs (in seconds if no units are specified) -# Must be >= 60 seconds +# Increment between METplus runs (in seconds if no units are specified). +# Must be >= 60 seconds. INIT_INCREMENT = 3600 # List of forecast leads to process for each run time (init or valid) # In hours if units are not specified # If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[fhr_list]} +LEAD_SEQ = {ENV[FHR_LIST]} # Order of loops to process data - Options are times, processes # Not relevant if only one item is in the PROCESS_LIST @@ -39,56 +41,26 @@ LEAD_SEQ = {ENV[fhr_list]} # 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 +LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for PointStat only LOG_POINT_STAT_VERBOSITY = 2 - -# Location of MET config file to pass to PB2NC -PB2NC_CONFIG_FILE = {PARM_BASE}/met_config/PB2NCConfig_wrapped - -# For both PB2NC and point_stat -OBS_WINDOW_BEGIN = -1799 -OBS_WINDOW_END = 1800 - -PB2NC_WINDOW_BEGIN = {OBS_WINDOW_BEGIN} -PB2NC_WINDOW_END = {OBS_WINDOW_END} - -# If set to True, skip run if the output file determined by the output directory and -# filename template already exists -PB2NC_SKIP_IF_OUTPUT_EXISTS = True - -# Values to pass to pb2nc config file using environment variables of the same name. -PB2NC_GRID = -PB2NC_POLY = -PB2NC_STATION_ID = -PB2NC_MESSAGE_TYPE = ADPSFC, ADPUPA -PB2NC_LEVEL_CATEGORY = 0, 1, 4, 5, 6 -PB2NC_QUALITY_MARK_THRESH = 9 - -PB2NC_PB_REPORT_TYPE = 120, 220, 221, 122, 222, 223, 224, 131, 133, 233, 153, 156, 157, 188, 288, 180, 280, 181, 182, 281, 282, 183, 284, 187, 287 - -# Leave empty to process all -PB2NC_OBS_BUFR_VAR_LIST = PMO, ZOB, TOB, D_DPT, QOB, UOB, VOB, PWO, TOCC, D_RH, HOVI, CEILING, D_PBL, D_CAPE, MXGS, D_WIND, D_PRMSL - -# Mapping of input BUFR variable names to output variables names. -# The default PREPBUFR map, obs_prepbufr_map, is appended to this map. -PB2NC_OBS_BUFR_MAP = [{ key = "PWO"; val = "PWAT"; },{ key = "MXGS"; val = "GUST"; }, { key = "CEILING"; val = "CEILING"; }] - -# For defining the time periods for summarization -# False for no time summary, True otherwise -# The rest of the PB2NC_TIME_SUMMARY variables are ignored if set to False -PB2NC_TIME_SUMMARY_FLAG = False -PB2NC_TIME_SUMMARY_BEG = 000000 -PB2NC_TIME_SUMMARY_END = 235959 -PB2NC_TIME_SUMMARY_VAR_NAMES = PMO,TOB,TDO,UOB,VOB,PWO,TOCC -PB2NC_TIME_SUMMARY_TYPES = min, max, range, mean, stdev, median, p80 - +# +# Specify the name of the METplus log file. +# +LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_ensmean_SFC_{ENV[CDATE]} +# +# Specify the location and name of the final METplus conf file. +# +METPLUS_CONF = {OUTPUT_BASE}/{ENV[CDATE]}/metprd/PointStat_ensmean/metplus_final.SFC.conf +# # Location of MET config 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 -POINT_STAT_CONFIG_FILE ={PARM_BASE}/met_config/PointStatConfig_wrapped +# 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. +# +POINT_STAT_CONFIG_FILE = {PARM_BASE}/met_config/PointStatConfig_wrapped POINT_STAT_OBS_QUALITY_INC = 0, 1, 2, 3, 9, NA #POINT_STAT_OBS_QUALITY_EXC = @@ -101,9 +73,9 @@ POINT_STAT_CLIMO_MEAN_TIME_INTERP_METHOD = NEAREST POINT_STAT_INTERP_TYPE_METHOD = BILIN POINT_STAT_INTERP_TYPE_WIDTH = 2 -#POINT_STAT_OUTPUT_FLAG_FHO = -#POINT_STAT_OUTPUT_FLAG_CTC = -#POINT_STAT_OUTPUT_FLAG_CTS = +#POINT_STAT_OUTPUT_FLAG_FHO = +#POINT_STAT_OUTPUT_FLAG_CTC = +#POINT_STAT_OUTPUT_FLAG_CTS = #POINT_STAT_OUTPUT_FLAG_MCTC = #POINT_STAT_OUTPUT_FLAG_MCTS = POINT_STAT_OUTPUT_FLAG_CNT = STAT @@ -128,18 +100,33 @@ POINT_STAT_CLIMO_CDF_BINS = 1 #POINT_STAT_HSS_EC_VALUE = -# Time relative to each input file's valid time (in seconds if no units are specified) for data within the file to be -# considered valid. Values are set in the 'obs_window' dictionary in the PointStat config file +# +# Time relative to each input file's valid time (in seconds if no units +# are specified) for data within the file to be considered valid. Values +# are set in the 'obs_window' dictionary in the PointStat config file. +# Set both BEGIN and END to 0 to require the exact time in the filename. +# +OBS_WINDOW_BEGIN = -1799 +OBS_WINDOW_END = 1800 OBS_POINT_STAT_WINDOW_BEGIN = {OBS_WINDOW_BEGIN} OBS_POINT_STAT_WINDOW_END = {OBS_WINDOW_END} # Optional list of offsets to look for point observation data POINT_STAT_OFFSETS = 0 - -# Model/fcst and obs name, e.g. GFS, NAM, GDAS, etc. -MODEL = {ENV[VX_FCST_MODEL_NAME]}_mean +# +# 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 = {ENV[VX_FCST_MODEL_NAME]}_ensmean POINT_STAT_DESC = NA +# +# Name to identify observation data in output. +# OBTYPE = NDAS # Regrid to specified grid. Indicate NONE if no regridding, or the grid id @@ -148,7 +135,7 @@ POINT_STAT_REGRID_TO_GRID = NONE POINT_STAT_REGRID_METHOD = BILIN POINT_STAT_REGRID_WIDTH = 2 -POINT_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_ADPSFC_{OBTYPE}_mean +POINT_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_ADPSFC_{OBTYPE}_ensmean # sets the -obs_valid_beg command line argument (optional) # not used for this example @@ -166,15 +153,15 @@ POINT_STAT_GRID = # files work (those that fit on one line), a long list will result in an # environment variable that is too long, resulting in an error. For long # lists of poly masking files (i.e. all the mask files in the NCEP_mask -# directory), define these in the MET point_stat configuration file. +# directory), define these in the METplus PointStat configuration file. POINT_STAT_POLY = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly POINT_STAT_STATION_ID = # Message types, if all message types are to be returned, leave this empty, # otherwise indicate the message types of interest. POINT_STAT_MESSAGE_TYPE = ADPSFC -# Variables and levels as specified in the field dictionary of the MET -# point_stat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, +# Variables and levels as specified in the field dictionary of the METplus +# PointStat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, # (optional) FCST_VARn_OPTION # set to True to run PointStat once for each name/level combination @@ -208,62 +195,58 @@ OBS_VAR3_NAME = WIND OBS_VAR3_LEVELS = Z10 OBS_VAR3_THRESH = >=5, >=10, >=15 -# End of [config] section and start of [dir] section +# End of [config] section and start of [dir] section. [dir] - -# directory containing input to PB2NC_INPUT_DIR = {ENV[OBS_DIR]} -PB2NC_INPUT_DIR = {ENV[OBS_DIR]} - -# directory to write output from -PB2NC_OUTPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/pb2nc - +# +# Directory containing observation input to PointStat. +# +OBS_POINT_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/Pb2nc_obs +# +# Directory containing forecast input to PointStat. +# INPUT_BASE = {ENV[INPUT_BASE]} - FCST_POINT_STAT_INPUT_DIR = {INPUT_BASE} -OBS_POINT_STAT_INPUT_DIR = {PB2NC_OUTPUT_DIR} - -# directory containing climatology mean input to PointStat -# Not used in this example +# +# Directory containing climatology mean input to PointStat. Not used in +# this example. +# POINT_STAT_CLIMO_MEAN_INPUT_DIR = - -# directory containing climatology mean input to PointStat -# Not used in this example +# +# Directory containing climatology mean input to PointStat. Not used in +# this example. +# POINT_STAT_CLIMO_STDEV_INPUT_DIR = - +# +# Directory in which to write output from PointStat. +# OUTPUT_BASE = {ENV[OUTPUT_BASE]} POINT_STAT_OUTPUT_DIR = {OUTPUT_BASE} -LOG_DIR = {ENV[LOG_DIR]} +STAGING_DIR = {OUTPUT_BASE}/stage/SFC_ensmean -STAGING_DIR = {OUTPUT_BASE}/stage/conus_sfc_mean - -# End of [dir] section and start of [filename_templates] section +# End of [dir] section and start of [filename_templates] section. [filename_templates] - -# Template to look for prepbvur input to PB2NC relative to PB2NC_INPUT_DIR -PB2NC_INPUT_TEMPLATE = prepbufr.ndas.{valid?fmt=%Y%m%d%H} -# Template to use to write output from PB2NC -PB2NC_OUTPUT_TEMPLATE = prepbufr.ndas{ENV[DOT_ENSMEM]}.{valid?fmt=%Y%m%d%H}.nc - -# Template to look for forecast input to PointStat relative to FCST_POINT_STAT_INPUT_DIR +# +# Template for forecast input to PointStat relative to +# FCST_POINT_STAT_INPUT_DIR. +# FCST_POINT_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_ADPSFC_{OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc - -# Template to look for observation input to PointStat relative to OBS_POINT_STAT_INPUT_DIR +# +# Template for observation input to PointStat relative to +# OBS_POINT_STAT_INPUT_DIR. +# OBS_POINT_STAT_INPUT_TEMPLATE = prepbufr.ndas{ENV[DOT_ENSMEM]}.{valid?fmt=%Y%m%d%H}.nc - -# Template to look for climatology input to PointStat relative to POINT_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# Template for output from PointStat relative to POINT_STAT_OUTPUT_DIR. +# +POINT_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/PointStat_ensmean +# +# Template for climatology input to PointStat relative to +# POINT_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. +# POINT_STAT_CLIMO_MEAN_INPUT_TEMPLATE = - -# Template to look for climatology input to PointStat relative to POINT_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# Template for climatology input to PointStat relative to +# POINT_STAT_CLIMO_STDEV_INPUT_DIR. Not used in this example. +# POINT_STAT_CLIMO_STDEV_INPUT_TEMPLATE = - -#Template for where point-stat output is written -POINT_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_mean - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_ensmean_SFC_{ENV[CDATE]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_mean/metplus_final.conus_surface.conf diff --git a/parm/metplus/PointStat_ensmean_UPA.conf b/parm/metplus/PointStat_ensmean_UPA.conf index 4d8fd295ad..0ab545d0a8 100644 --- a/parm/metplus/PointStat_ensmean_UPA.conf +++ b/parm/metplus/PointStat_ensmean_UPA.conf @@ -1,7 +1,9 @@ +# Ensemble mean PointStat METplus Configuration + [config] # List of applications to run - only PointStat for this case -PROCESS_LIST = PB2NC, PointStat +PROCESS_LIST = PointStat # time looping - options are INIT, VALID, RETRO, and REALTIME # If set to INIT or RETRO: @@ -14,7 +16,7 @@ LOOP_BY = INIT # %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 +INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT INIT_BEG = {ENV[CDATE]} @@ -22,14 +24,14 @@ INIT_BEG = {ENV[CDATE]} # End time for METplus run - must match INIT_TIME_FMT INIT_END = {ENV[CDATE]} -# Increment between METplus runs (in seconds if no units are specified) -# Must be >= 60 seconds +# 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 = begin_end_incr(0,{ENV[fhr_last]},6) +LEAD_SEQ = {ENV[FHR_LIST]} # Order of loops to process data - Options are times, processes # Not relevant if only one item is in the PROCESS_LIST @@ -39,56 +41,26 @@ LEAD_SEQ = begin_end_incr(0,{ENV[fhr_last]},6) # 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 +LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for PointStat only LOG_POINT_STAT_VERBOSITY = 2 - -# Location of MET config file to pass to PB2NC -PB2NC_CONFIG_FILE = {PARM_BASE}/met_config/PB2NCConfig_wrapped - -# For both PB2NC and point_stat -OBS_WINDOW_BEGIN = -1799 -OBS_WINDOW_END = 1800 - -PB2NC_WINDOW_BEGIN = {OBS_WINDOW_BEGIN} -PB2NC_WINDOW_END = {OBS_WINDOW_END} - -# If set to True, skip run if the output file determined by the output directory and -# filename template already exists -PB2NC_SKIP_IF_OUTPUT_EXISTS = True - -# Values to pass to pb2nc config file using environment variables of the same name. -PB2NC_GRID = -PB2NC_POLY = -PB2NC_STATION_ID = -PB2NC_MESSAGE_TYPE = ADPSFC, ADPUPA -PB2NC_LEVEL_CATEGORY = 0, 1, 4, 5, 6 -PB2NC_QUALITY_MARK_THRESH = 9 - -PB2NC_PB_REPORT_TYPE = 120, 220, 221, 122, 222, 223, 224, 131, 133, 233, 153, 156, 157, 188, 288, 180, 280, 181, 182, 281, 282, 183, 284, 187, 287 - -# Leave empty to process all -PB2NC_OBS_BUFR_VAR_LIST = PMO, ZOB, TOB, D_DPT, QOB, UOB, VOB, PWO, TOCC, D_RH, HOVI, CEILING, D_PBL, D_CAPE, MXGS, D_WIND, D_PRMSL - -# Mapping of input BUFR variable names to output variables names. -# The default PREPBUFR map, obs_prepbufr_map, is appended to this map. -PB2NC_OBS_BUFR_MAP = [{ key = "PWO"; val = "PWAT"; },{ key = "MXGS"; val = "GUST"; }, { key = "CEILING"; val = "CEILING"; }] - -# For defining the time periods for summarization -# False for no time summary, True otherwise -# The rest of the PB2NC_TIME_SUMMARY variables are ignored if set to False -PB2NC_TIME_SUMMARY_FLAG = False -PB2NC_TIME_SUMMARY_BEG = 000000 -PB2NC_TIME_SUMMARY_END = 235959 -PB2NC_TIME_SUMMARY_VAR_NAMES = PMO,TOB,TDO,UOB,VOB,PWO,TOCC -PB2NC_TIME_SUMMARY_TYPES = min, max, range, mean, stdev, median, p80 - +# +# Specify the name of the METplus log file. +# +LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_ensmean_UPA_{ENV[CDATE]} +# +# Specify the location and name of the final METplus conf file. +# +METPLUS_CONF = {OUTPUT_BASE}/{ENV[CDATE]}/metprd/PointStat_ensmean/metplus_final.UPA.conf +# # Location of MET config 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 -POINT_STAT_CONFIG_FILE ={PARM_BASE}/met_config/PointStatConfig_wrapped +# 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. +# +POINT_STAT_CONFIG_FILE = {PARM_BASE}/met_config/PointStatConfig_wrapped POINT_STAT_OBS_QUALITY_INC = 0, 1, 2, 3, 9, NA #POINT_STAT_OBS_QUALITY_EXC = @@ -128,18 +100,33 @@ POINT_STAT_CLIMO_CDF_BINS = 1 #POINT_STAT_HSS_EC_VALUE = -# Time relative to each input file's valid time (in seconds if no units are specified) for data within the file to be -# considered valid. Values are set in the 'obs_window' dictionary in the PointStat config file +# +# Time relative to each input file's valid time (in seconds if no units +# are specified) for data within the file to be considered valid. Values +# are set in the 'obs_window' dictionary in the PointStat config file. +# Set both BEGIN and END to 0 to require the exact time in the filename. +# +OBS_WINDOW_BEGIN = -1799 +OBS_WINDOW_END = 1800 OBS_POINT_STAT_WINDOW_BEGIN = {OBS_WINDOW_BEGIN} OBS_POINT_STAT_WINDOW_END = {OBS_WINDOW_END} # Optional list of offsets to look for point observation data POINT_STAT_OFFSETS = 0 - -# Model/fcst and obs name, e.g. GFS, NAM, GDAS, etc. -MODEL = {ENV[VX_FCST_MODEL_NAME]}_mean +# +# 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 = {ENV[VX_FCST_MODEL_NAME]}_ensmean POINT_STAT_DESC = NA +# +# Name to identify observation data in output. +# OBTYPE = NDAS # Regrid to specified grid. Indicate NONE if no regridding, or the grid id @@ -148,7 +135,7 @@ POINT_STAT_REGRID_TO_GRID = NONE POINT_STAT_REGRID_METHOD = BILIN POINT_STAT_REGRID_WIDTH = 2 -POINT_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_ADPUPA_{OBTYPE}_mean +POINT_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_ADPUPA_{OBTYPE}_ensmean # sets the -obs_valid_beg command line argument (optional) # not used for this example @@ -166,15 +153,15 @@ POINT_STAT_GRID = # files work (those that fit on one line), a long list will result in an # environment variable that is too long, resulting in an error. For long # lists of poly masking files (i.e. all the mask files in the NCEP_mask -# directory), define these in the MET point_stat configuration file. +# directory), define these in the METplus PointStat configuration file. POINT_STAT_POLY = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly POINT_STAT_STATION_ID = # Message types, if all message types are to be returned, leave this empty, # otherwise indicate the message types of interest. POINT_STAT_MESSAGE_TYPE = ADPUPA -# Variables and levels as specified in the field dictionary of the MET -# point_stat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, +# Variables and levels as specified in the field dictionary of the METplus +# PointStat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, # (optional) FCST_VARn_OPTION # set to True to run PointStat once for each name/level combination @@ -283,63 +270,58 @@ OBS_VAR12_LEVELS = L0 OBS_VAR12_OPTIONS = desc = "TKE"; OBS_VAR12_THRESH = <500, <1500, >1500 -# End of [config] section and start of [dir] section +# End of [config] section and start of [dir] section. [dir] - -# directory containing input to PB2NC -PB2NC_INPUT_DIR = {ENV[OBS_DIR]} - -# directory to write output from -PB2NC_OUTPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/pb2nc - +# +# Directory containing observation input to PointStat. +# +OBS_POINT_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/Pb2nc_obs +# +# Directory containing forecast input to PointStat. +# INPUT_BASE = {ENV[INPUT_BASE]} - FCST_POINT_STAT_INPUT_DIR = {INPUT_BASE} -OBS_POINT_STAT_INPUT_DIR = {PB2NC_OUTPUT_DIR} - -# directory containing climatology mean input to PointStat -# Not used in this example +# +# Directory containing climatology mean input to PointStat. Not used in +# this example. +# POINT_STAT_CLIMO_MEAN_INPUT_DIR = - -# directory containing climatology mean input to PointStat -# Not used in this example +# +# Directory containing climatology mean input to PointStat. Not used in +# this example. +# POINT_STAT_CLIMO_STDEV_INPUT_DIR = - +# +# Directory in which to write output from PointStat. +# OUTPUT_BASE = {ENV[OUTPUT_BASE]} POINT_STAT_OUTPUT_DIR = {OUTPUT_BASE} -LOG_DIR = {ENV[LOG_DIR]} - -STAGING_DIR = {OUTPUT_BASE}/stage/upper_air_mean +STAGING_DIR = {OUTPUT_BASE}/stage/UPA_ensmean -# End of [dir] section and start of [filename_templates] section +# End of [dir] section and start of [filename_templates] section. [filename_templates] - -# Template to look for prepbvur input to PB2NC relative to PB2NC_INPUT_DIR -PB2NC_INPUT_TEMPLATE = prepbufr.ndas.{valid?fmt=%Y%m%d%H} - -# Template to use to write output from PB2NC -PB2NC_OUTPUT_TEMPLATE = prepbufr.ndas{ENV[DOT_ENSMEM]}.{valid?fmt=%Y%m%d%H}.nc - -# Template to look for forecast input to PointStat relative to FCST_POINT_STAT_INPUT_DIR +# +# Template for forecast input to PointStat relative to +# FCST_POINT_STAT_INPUT_DIR. +# FCST_POINT_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_ADPUPA_{OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc - -# Template to look for observation input to PointStat relative to OBS_POINT_STAT_INPUT_DIR +# +# Template for observation input to PointStat relative to +# OBS_POINT_STAT_INPUT_DIR. +# OBS_POINT_STAT_INPUT_TEMPLATE = prepbufr.ndas{ENV[DOT_ENSMEM]}.{valid?fmt=%Y%m%d%H}.nc - -# Template to look for climatology input to PointStat relative to POINT_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# Template for output from PointStat relative to POINT_STAT_OUTPUT_DIR. +# +POINT_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/PointStat_ensmean +# +# Template for climatology input to PointStat relative to +# POINT_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. +# POINT_STAT_CLIMO_MEAN_INPUT_TEMPLATE = - -# Template to look for climatology input to PointStat relative to POINT_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# Template for climatology input to PointStat relative to +# POINT_STAT_CLIMO_STDEV_INPUT_DIR. Not used in this example. +# POINT_STAT_CLIMO_STDEV_INPUT_TEMPLATE = - -#Template for where point-stat output is written -POINT_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_mean - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_ensmean_UPA_{ENV[CDATE]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_mean/metplus_final.upper_air.conf diff --git a/parm/metplus/PointStat_ensprob_SFC.conf b/parm/metplus/PointStat_ensprob_SFC.conf index 18a6fc9031..100bfa2313 100644 --- a/parm/metplus/PointStat_ensprob_SFC.conf +++ b/parm/metplus/PointStat_ensprob_SFC.conf @@ -1,7 +1,9 @@ +# Ensemble probabilistic PointStat METplus Configuration + [config] # List of applications to run - only PointStat for this case -PROCESS_LIST = PB2NC, PointStat +PROCESS_LIST = PointStat # time looping - options are INIT, VALID, RETRO, and REALTIME # If set to INIT or RETRO: @@ -14,7 +16,7 @@ LOOP_BY = INIT # %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 +INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT INIT_BEG = {ENV[CDATE]} @@ -22,14 +24,14 @@ INIT_BEG = {ENV[CDATE]} # End time for METplus run - must match INIT_TIME_FMT INIT_END = {ENV[CDATE]} -# Increment between METplus runs (in seconds if no units are specified) -# Must be >= 60 seconds +# Increment between METplus runs (in seconds if no units are specified). +# Must be >= 60 seconds. INIT_INCREMENT = 3600 # List of forecast leads to process for each run time (init or valid) # In hours if units are not specified # If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[fhr_list]} +LEAD_SEQ = {ENV[FHR_LIST]} # Order of loops to process data - Options are times, processes # Not relevant if only one item is in the PROCESS_LIST @@ -39,56 +41,26 @@ LEAD_SEQ = {ENV[fhr_list]} # 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 +LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for PointStat only LOG_POINT_STAT_VERBOSITY = 2 - -# Location of MET config file to pass to PB2NC -PB2NC_CONFIG_FILE = {PARM_BASE}/met_config/PB2NCConfig_wrapped - -# For both PB2NC and point_stat -OBS_WINDOW_BEGIN = -1799 -OBS_WINDOW_END = 1800 - -PB2NC_WINDOW_BEGIN = {OBS_WINDOW_BEGIN} -PB2NC_WINDOW_END = {OBS_WINDOW_END} - -# If set to True, skip run if the output file determined by the output directory and -# filename template already exists -PB2NC_SKIP_IF_OUTPUT_EXISTS = True - -# Values to pass to pb2nc config file using environment variables of the same name. -PB2NC_GRID = -PB2NC_POLY = -PB2NC_STATION_ID = -PB2NC_MESSAGE_TYPE = ADPSFC, ADPUPA -PB2NC_LEVEL_CATEGORY = 0, 1, 4, 5, 6 -PB2NC_QUALITY_MARK_THRESH = 9 - -PB2NC_PB_REPORT_TYPE = 120, 220, 221, 122, 222, 223, 224, 131, 133, 233, 153, 156, 157, 188, 288, 180, 280, 181, 182, 281, 282, 183, 284, 187, 287 - -# Leave empty to process all -PB2NC_OBS_BUFR_VAR_LIST = PMO, ZOB, TOB, D_DPT, QOB, UOB, VOB, PWO, TOCC, D_RH, HOVI, CEILING, D_PBL, D_CAPE, MXGS, D_WIND, D_PRMSL - -# Mapping of input BUFR variable names to output variables names. -# The default PREPBUFR map, obs_prepbufr_map, is appended to this map. -PB2NC_OBS_BUFR_MAP = [{ key = "PWO"; val = "PWAT"; },{ key = "MXGS"; val = "GUST"; }, { key = "CEILING"; val = "CEILING"; }] - -# For defining the time periods for summarization -# False for no time summary, True otherwise -# The rest of the PB2NC_TIME_SUMMARY variables are ignored if set to False -PB2NC_TIME_SUMMARY_FLAG = False -PB2NC_TIME_SUMMARY_BEG = 000000 -PB2NC_TIME_SUMMARY_END = 235959 -PB2NC_TIME_SUMMARY_VAR_NAMES = PMO,TOB,TDO,UOB,VOB,PWO,TOCC -PB2NC_TIME_SUMMARY_TYPES = min, max, range, mean, stdev, median, p80 - +# +# Specify the name of the METplus log file. +# +LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_ensprob_SFC_{ENV[CDATE]} +# +# Specify the location and name of the final METplus conf file. +# +METPLUS_CONF = {OUTPUT_BASE}/{ENV[CDATE]}/metprd/PointStat_ensprob/metplus_final.SFC.conf +# # Location of MET config 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 -POINT_STAT_CONFIG_FILE ={PARM_BASE}/met_config/PointStatConfig_wrapped +# 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. +# +POINT_STAT_CONFIG_FILE = {PARM_BASE}/met_config/PointStatConfig_wrapped POINT_STAT_OBS_QUALITY_INC = 0, 1, 2, 3, 9, NA #POINT_STAT_OBS_QUALITY_EXC = @@ -128,18 +100,33 @@ POINT_STAT_CLIMO_CDF_BINS = 1 #POINT_STAT_HSS_EC_VALUE = -# Time relative to each input file's valid time (in seconds if no units are specified) for data within the file to be -# considered valid. Values are set in the 'obs_window' dictionary in the PointStat config file +# +# Time relative to each input file's valid time (in seconds if no units +# are specified) for data within the file to be considered valid. Values +# are set in the 'obs_window' dictionary in the PointStat config file. +# Set both BEGIN and END to 0 to require the exact time in the filename. +# +OBS_WINDOW_BEGIN = -1799 +OBS_WINDOW_END = 1800 OBS_POINT_STAT_WINDOW_BEGIN = {OBS_WINDOW_BEGIN} OBS_POINT_STAT_WINDOW_END = {OBS_WINDOW_END} # Optional list of offsets to look for point observation data POINT_STAT_OFFSETS = 0 - -# Model/fcst and obs name, e.g. GFS, NAM, GDAS, etc. -MODEL = {ENV[VX_FCST_MODEL_NAME]}_prob +# +# 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 = {ENV[VX_FCST_MODEL_NAME]}_ensprob POINT_STAT_DESC = NA +# +# Name to identify observation data in output. +# OBTYPE = NDAS # Regrid to specified grid. Indicate NONE if no regridding, or the grid id @@ -148,7 +135,7 @@ POINT_STAT_REGRID_TO_GRID = NONE POINT_STAT_REGRID_METHOD = BILIN POINT_STAT_REGRID_WIDTH = 2 -POINT_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_ADPSFC_{OBTYPE}_prob +POINT_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_ADPSFC_{OBTYPE}_ensprob # sets the -obs_valid_beg command line argument (optional) # not used for this example @@ -166,15 +153,15 @@ POINT_STAT_GRID = # files work (those that fit on one line), a long list will result in an # environment variable that is too long, resulting in an error. For long # lists of poly masking files (i.e. all the mask files in the NCEP_mask -# directory), define these in the MET point_stat configuration file. +# directory), define these in the METplus PointStat configuration file. POINT_STAT_POLY = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly POINT_STAT_STATION_ID = # Message types, if all message types are to be returned, leave this empty, # otherwise indicate the message types of interest. POINT_STAT_MESSAGE_TYPE = ADPSFC -# Variables and levels as specified in the field dictionary of the MET -# point_stat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, +# Variables and levels as specified in the field dictionary of the METplus +# PointStat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, # (optional) FCST_VARn_OPTION # set to True to run PointStat once for each name/level combination @@ -184,6 +171,8 @@ POINT_STAT_ONCE_PER_FIELD = False # fields to compare # Note: If FCST_VAR_* is set, then a corresponding OBS_VAR_* variable must be set # To use one variables for both forecast and observation data, set BOTH_VAR_* instead + +# FREQ FCST_VAR1_NAME = TMP_Z2_ENS_FREQ_ge268 FCST_VAR1_LEVELS = Z2 FCST_VAR1_THRESH = ==0.1 @@ -384,62 +373,58 @@ OBS_VAR23_OPTIONS = GRIB_lvl_typ = 215; interp = { type = [ { method = NEAREST; FCST_IS_PROB = True FCST_PROB_IN_GRIB_PDS = False -# End of [config] section and start of [dir] section +# End of [config] section and start of [dir] section. [dir] - -# directory containing input to PB2NC_INPUT_DIR = {ENV[OBS_DIR]} -PB2NC_INPUT_DIR = {ENV[OBS_DIR]} - -# directory to write output from -PB2NC_OUTPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/pb2nc - +# +# Directory containing observation input to PointStat. +# +OBS_POINT_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/Pb2nc_obs +# +# Directory containing forecast input to PointStat. +# INPUT_BASE = {ENV[INPUT_BASE]} - FCST_POINT_STAT_INPUT_DIR = {INPUT_BASE} -OBS_POINT_STAT_INPUT_DIR = {PB2NC_OUTPUT_DIR} - -# directory containing climatology mean input to PointStat -# Not used in this example +# +# Directory containing climatology mean input to PointStat. Not used in +# this example. +# POINT_STAT_CLIMO_MEAN_INPUT_DIR = - -# directory containing climatology mean input to PointStat -# Not used in this example +# +# Directory containing climatology mean input to PointStat. Not used in +# this example. +# POINT_STAT_CLIMO_STDEV_INPUT_DIR = - +# +# Directory in which to write output from PointStat. +# OUTPUT_BASE = {ENV[OUTPUT_BASE]} POINT_STAT_OUTPUT_DIR = {OUTPUT_BASE} -LOG_DIR = {ENV[LOG_DIR]} +STAGING_DIR = {OUTPUT_BASE}/stage/SFC_ensprob -STAGING_DIR = {OUTPUT_BASE}/stage/conus_sfc_prob - -# End of [dir] section and start of [filename_templates] section +# End of [dir] section and start of [filename_templates] section. [filename_templates] - -# Template to look for prepbvur input to PB2NC relative to PB2NC_INPUT_DIR -PB2NC_INPUT_TEMPLATE = prepbufr.ndas.{valid?fmt=%Y%m%d%H} -# Template to use to write output from PB2NC -PB2NC_OUTPUT_TEMPLATE = prepbufr.ndas{ENV[DOT_ENSMEM]}.{valid?fmt=%Y%m%d%H}.nc - -# Template to look for forecast input to PointStat relative to FCST_POINT_STAT_INPUT_DIR +# +# Template for forecast input to PointStat relative to +# FCST_POINT_STAT_INPUT_DIR. +# FCST_POINT_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_ADPSFC_{OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc - -# Template to look for observation input to PointStat relative to OBS_POINT_STAT_INPUT_DIR +# +# Template for observation input to PointStat relative to +# OBS_POINT_STAT_INPUT_DIR. +# OBS_POINT_STAT_INPUT_TEMPLATE = prepbufr.ndas{ENV[DOT_ENSMEM]}.{valid?fmt=%Y%m%d%H}.nc - -# Template to look for climatology input to PointStat relative to POINT_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# Template for output from PointStat relative to POINT_STAT_OUTPUT_DIR. +# +POINT_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/PointStat_ensprob +# +# Template for climatology input to PointStat relative to +# POINT_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. +# POINT_STAT_CLIMO_MEAN_INPUT_TEMPLATE = - -# Template to look for climatology input to PointStat relative to POINT_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# Template for climatology input to PointStat relative to +# POINT_STAT_CLIMO_STDEV_INPUT_DIR. Not used in this example. +# POINT_STAT_CLIMO_STDEV_INPUT_TEMPLATE = - -#Template for where point-stat output is written -POINT_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_prob - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_ensprob_SFC_{ENV[CDATE]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_prob/metplus_final.conus_surface.conf diff --git a/parm/metplus/PointStat_ensprob_UPA.conf b/parm/metplus/PointStat_ensprob_UPA.conf index 1c7889a37f..3cb0a49375 100644 --- a/parm/metplus/PointStat_ensprob_UPA.conf +++ b/parm/metplus/PointStat_ensprob_UPA.conf @@ -1,7 +1,9 @@ +# Ensemble probabilistic PointStat METplus Configuration + [config] # List of applications to run - only PointStat for this case -PROCESS_LIST = PB2NC, PointStat +PROCESS_LIST = PointStat # time looping - options are INIT, VALID, RETRO, and REALTIME # If set to INIT or RETRO: @@ -14,7 +16,7 @@ LOOP_BY = INIT # %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 +INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT INIT_BEG = {ENV[CDATE]} @@ -22,14 +24,14 @@ INIT_BEG = {ENV[CDATE]} # End time for METplus run - must match INIT_TIME_FMT INIT_END = {ENV[CDATE]} -# Increment between METplus runs (in seconds if no units are specified) -# Must be >= 60 seconds +# 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 = begin_end_incr(0,{ENV[fhr_last]},6) +LEAD_SEQ = {ENV[FHR_LIST]} # Order of loops to process data - Options are times, processes # Not relevant if only one item is in the PROCESS_LIST @@ -39,56 +41,26 @@ LEAD_SEQ = begin_end_incr(0,{ENV[fhr_last]},6) # 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 +LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for PointStat only LOG_POINT_STAT_VERBOSITY = 2 - -# Location of MET config file to pass to PB2NC -PB2NC_CONFIG_FILE = {PARM_BASE}/met_config/PB2NCConfig_wrapped - -# For both PB2NC and point_stat -OBS_WINDOW_BEGIN = -1799 -OBS_WINDOW_END = 1800 - -PB2NC_WINDOW_BEGIN = {OBS_WINDOW_BEGIN} -PB2NC_WINDOW_END = {OBS_WINDOW_END} - -# If set to True, skip run if the output file determined by the output directory and -# filename template already exists -PB2NC_SKIP_IF_OUTPUT_EXISTS = True - -# Values to pass to pb2nc config file using environment variables of the same name. -PB2NC_GRID = -PB2NC_POLY = -PB2NC_STATION_ID = -PB2NC_MESSAGE_TYPE = ADPSFC, ADPUPA -PB2NC_LEVEL_CATEGORY = 0, 1, 4, 5, 6 -PB2NC_QUALITY_MARK_THRESH = 9 - -PB2NC_PB_REPORT_TYPE = 120, 220, 221, 122, 222, 223, 224, 131, 133, 233, 153, 156, 157, 188, 288, 180, 280, 181, 182, 281, 282, 183, 284, 187, 287 - -# Leave empty to process all -PB2NC_OBS_BUFR_VAR_LIST = PMO, ZOB, TOB, D_DPT, QOB, UOB, VOB, PWO, TOCC, D_RH, HOVI, CEILING, D_PBL, D_CAPE, MXGS, D_WIND, D_PRMSL - -# Mapping of input BUFR variable names to output variables names. -# The default PREPBUFR map, obs_prepbufr_map, is appended to this map. -PB2NC_OBS_BUFR_MAP = [{ key = "PWO"; val = "PWAT"; },{ key = "MXGS"; val = "GUST"; }, { key = "CEILING"; val = "CEILING"; }] - -# For defining the time periods for summarization -# False for no time summary, True otherwise -# The rest of the PB2NC_TIME_SUMMARY variables are ignored if set to False -PB2NC_TIME_SUMMARY_FLAG = False -PB2NC_TIME_SUMMARY_BEG = 000000 -PB2NC_TIME_SUMMARY_END = 235959 -PB2NC_TIME_SUMMARY_VAR_NAMES = PMO,TOB,TDO,UOB,VOB,PWO,TOCC -PB2NC_TIME_SUMMARY_TYPES = min, max, range, mean, stdev, median, p80 - +# +# Specify the name of the METplus log file. +# +LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_ensprob_UPA_{ENV[CDATE]} +# +# Specify the location and name of the final METplus conf file. +# +METPLUS_CONF = {OUTPUT_BASE}/{ENV[CDATE]}/metprd/PointStat_ensprob/metplus_final.UPA.conf +# # Location of MET config 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 -POINT_STAT_CONFIG_FILE ={PARM_BASE}/met_config/PointStatConfig_wrapped +# 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. +# +POINT_STAT_CONFIG_FILE = {PARM_BASE}/met_config/PointStatConfig_wrapped POINT_STAT_OBS_QUALITY_INC = 0, 1, 2, 3, 9, NA #POINT_STAT_OBS_QUALITY_EXC = @@ -128,18 +100,33 @@ POINT_STAT_CLIMO_CDF_BINS = 1 #POINT_STAT_HSS_EC_VALUE = -# Time relative to each input file's valid time (in seconds if no units are specified) for data within the file to be -# considered valid. Values are set in the 'obs_window' dictionary in the PointStat config file +# +# Time relative to each input file's valid time (in seconds if no units +# are specified) for data within the file to be considered valid. Values +# are set in the 'obs_window' dictionary in the PointStat config file. +# Set both BEGIN and END to 0 to require the exact time in the filename. +# +OBS_WINDOW_BEGIN = -1799 +OBS_WINDOW_END = 1800 OBS_POINT_STAT_WINDOW_BEGIN = {OBS_WINDOW_BEGIN} OBS_POINT_STAT_WINDOW_END = {OBS_WINDOW_END} # Optional list of offsets to look for point observation data POINT_STAT_OFFSETS = 0 - -# Model/fcst and obs name, e.g. GFS, NAM, GDAS, etc. -MODEL = {ENV[VX_FCST_MODEL_NAME]}_prob +# +# 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 = {ENV[VX_FCST_MODEL_NAME]}_ensprob POINT_STAT_DESC = NA +# +# Name to identify observation data in output. +# OBTYPE = NDAS # Regrid to specified grid. Indicate NONE if no regridding, or the grid id @@ -148,7 +135,7 @@ POINT_STAT_REGRID_TO_GRID = NONE POINT_STAT_REGRID_METHOD = BILIN POINT_STAT_REGRID_WIDTH = 2 -POINT_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_ADPUPA_{OBTYPE}_prob +POINT_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_ADPUPA_{OBTYPE}_ensprob # sets the -obs_valid_beg command line argument (optional) # not used for this example @@ -166,15 +153,15 @@ POINT_STAT_GRID = # files work (those that fit on one line), a long list will result in an # environment variable that is too long, resulting in an error. For long # lists of poly masking files (i.e. all the mask files in the NCEP_mask -# directory), define these in the MET point_stat configuration file. +# directory), define these in the METplus PointStat configuration file. POINT_STAT_POLY = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly POINT_STAT_STATION_ID = # Message types, if all message types are to be returned, leave this empty, # otherwise indicate the message types of interest. POINT_STAT_MESSAGE_TYPE = ADPUPA -# Variables and levels as specified in the field dictionary of the MET -# point_stat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, +# Variables and levels as specified in the field dictionary of the METplus +# PointStat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, # (optional) FCST_VARn_OPTION # set to True to run PointStat once for each name/level combination @@ -507,63 +494,58 @@ OBS_VAR39_THRESH = >1500 FCST_IS_PROB = True FCST_PROB_IN_GRIB_PDS = False -# End of [config] section and start of [dir] section +# End of [config] section and start of [dir] section. [dir] - -# directory containing input to PB2NC -PB2NC_INPUT_DIR = {ENV[OBS_DIR]} - -# directory to write output from -PB2NC_OUTPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/pb2nc - +# +# Directory containing observation input to PointStat. +# +OBS_POINT_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/Pb2nc_obs +# +# Directory containing forecast input to PointStat. +# INPUT_BASE = {ENV[INPUT_BASE]} - FCST_POINT_STAT_INPUT_DIR = {INPUT_BASE} -OBS_POINT_STAT_INPUT_DIR = {PB2NC_OUTPUT_DIR} - -# directory containing climatology mean input to PointStat -# Not used in this example +# +# Directory containing climatology mean input to PointStat. Not used in +# this example. +# POINT_STAT_CLIMO_MEAN_INPUT_DIR = - -# directory containing climatology mean input to PointStat -# Not used in this example +# +# Directory containing climatology mean input to PointStat. Not used in +# this example. +# POINT_STAT_CLIMO_STDEV_INPUT_DIR = - +# +# Directory in which to write output from PointStat. +# OUTPUT_BASE = {ENV[OUTPUT_BASE]} POINT_STAT_OUTPUT_DIR = {OUTPUT_BASE} -LOG_DIR = {ENV[LOG_DIR]} - -STAGING_DIR = {OUTPUT_BASE}/stage/upper_air_prob +STAGING_DIR = {OUTPUT_BASE}/stage/UPA_ensprob -# End of [dir] section and start of [filename_templates] section +# End of [dir] section and start of [filename_templates] section. [filename_templates] - -# Template to look for prepbvur input to PB2NC relative to PB2NC_INPUT_DIR -PB2NC_INPUT_TEMPLATE = prepbufr.ndas.{valid?fmt=%Y%m%d%H} - -# Template to use to write output from PB2NC -PB2NC_OUTPUT_TEMPLATE = prepbufr.ndas{ENV[DOT_ENSMEM]}.{valid?fmt=%Y%m%d%H}.nc - -# Template to look for forecast input to PointStat relative to FCST_POINT_STAT_INPUT_DIR +# +# Template for forecast input to PointStat relative to +# FCST_POINT_STAT_INPUT_DIR. +# FCST_POINT_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_ADPUPA_{OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc - -# Template to look for observation input to PointStat relative to OBS_POINT_STAT_INPUT_DIR +# +# Template for observation input to PointStat relative to +# OBS_POINT_STAT_INPUT_DIR. +# OBS_POINT_STAT_INPUT_TEMPLATE = prepbufr.ndas{ENV[DOT_ENSMEM]}.{valid?fmt=%Y%m%d%H}.nc - -# Template to look for climatology input to PointStat relative to POINT_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# Template for output from PointStat relative to POINT_STAT_OUTPUT_DIR. +# +POINT_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/PointStat_ensprob +# +# Template for climatology input to PointStat relative to +# POINT_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. +# POINT_STAT_CLIMO_MEAN_INPUT_TEMPLATE = - -# Template to look for climatology input to PointStat relative to POINT_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# Template for climatology input to PointStat relative to +# POINT_STAT_CLIMO_STDEV_INPUT_DIR. Not used in this example. +# POINT_STAT_CLIMO_STDEV_INPUT_TEMPLATE = - -#Template for where point-stat output is written -POINT_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/ensemble_stat_prob - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_ensprob_UPA_{ENV[CDATE]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/ensemble_stat_prob/metplus_final.upper_air.conf diff --git a/scripts/exregional_run_met_ensemblestat_vx_grid.sh b/scripts/exregional_run_met_ensemblestat_vx_grid.sh index df3542ece7..75b52676af 100755 --- a/scripts/exregional_run_met_ensemblestat_vx_grid.sh +++ b/scripts/exregional_run_met_ensemblestat_vx_grid.sh @@ -117,7 +117,7 @@ export DOT_ENSMEM=${dot_ensmem} # if [ ${VAR} == "APCP" ]; then - LOG_SUFFIX=EnsembleStat_${VAR}${ACCUM}h_${CDATE} + LOG_SUFFIX=EnsembleStat_${VAR}${ACCUM_HH}h_${CDATE} else LOG_SUFFIX=EnsembleStat_${VAR}_${CDATE} fi @@ -149,7 +149,7 @@ export LOG_SUFFIX #----------------------------------------------------------------------- # if [ ${VAR} == "APCP" ]; then - acc="${ACCUM}h" # for stats output prefix in EnsembleStatConfig + acc="${ACCUM_HH}h" # for stats output prefix in EnsembleStatConfig ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ -c ${METPLUS_CONF}/EnsembleStat_${VAR}${acc}.conf diff --git a/scripts/exregional_run_met_gridstat_vx.sh b/scripts/exregional_run_met_gridstat_vx.sh index 133981db04..2b0216d41a 100755 --- a/scripts/exregional_run_met_gridstat_vx.sh +++ b/scripts/exregional_run_met_gridstat_vx.sh @@ -84,13 +84,8 @@ if [ $RUN_ENVIR = "nco" ]; then export MEM_CUSTOM= export DOT_MEM_CUSTOM=".{custom?fmt=%s}" else - if [[ ${DO_ENSEMBLE} == "FALSE" ]]; then - export INPUT_BASE=${VX_FCST_INPUT_BASEDIR}/${CDATE}/postprd - export OUTPUT_BASE=${EXPTDIR}/${CDATE} - else - export INPUT_BASE=${VX_FCST_INPUT_BASEDIR}/${CDATE}${SLASH_ENSMEM_SUBDIR}/postprd - export OUTPUT_BASE=${EXPTDIR}/${CDATE}${SLASH_ENSMEM_SUBDIR} - fi + export INPUT_BASE=${VX_FCST_INPUT_BASEDIR}/${CDATE}${SLASH_ENSMEM_SUBDIR_OR_NULL}/postprd + export OUTPUT_BASE=${EXPTDIR}/${CDATE}${SLASH_ENSMEM_SUBDIR_OR_NULL} export MEM_BASE=$EXPTDIR/$CDATE export LOG_DIR=${EXPTDIR}/log @@ -109,15 +104,15 @@ export DOT_ENSMEM=${dot_ensmem} #----------------------------------------------------------------------- # if [ ${VAR} == "APCP" ]; then - LOG_SUFFIX=GridStat_${VAR}${ACCUM}h${USCORE_ENSMEM_NAME_OR_NULL}_${CDATE} + LOG_SUFFIX=GridStat_${VAR}${ACCUM_HH}h${USCORE_ENSMEM_NAME_OR_NULL}_${CDATE} else LOG_SUFFIX=GridStat_${VAR}${USCORE_ENSMEM_NAME_OR_NULL}_${CDATE} fi -if [[ ${DO_ENSEMBLE} == "TRUE" ]]; then - ENSMEM=`echo ${SLASH_ENSMEM_SUBDIR} | cut -d"/" -f2` - VX_FCST_MODEL_NAME=${VX_FCST_MODEL_NAME}_${ENSMEM} -fi +#if [[ ${DO_ENSEMBLE} == "TRUE" ]]; then +# ENSMEM=`echo ${SLASH_ENSMEM_SUBDIR_OR_NULL} | cut -d"/" -f2` +# VX_FCST_MODEL_NAME=${VX_FCST_MODEL_NAME}_${ENSMEM} +#fi # #----------------------------------------------------------------------- @@ -158,7 +153,7 @@ export POST_OUTPUT_DOMAIN_NAME #----------------------------------------------------------------------- # if [ ${VAR} == "APCP" ]; then - export acc="${ACCUM}h" # for stats output prefix in GridStatConfig + export acc="${ACCUM_HH}h" # for stats output prefix in GridStatConfig ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ -c ${METPLUS_CONF}/GridStat_${VAR}${acc}.conf diff --git a/scripts/exregional_run_met_gridstat_vx_ensmean.sh b/scripts/exregional_run_met_gridstat_vx_ensmean.sh index 8ba358b05b..eab1f3a4e1 100755 --- a/scripts/exregional_run_met_gridstat_vx_ensmean.sh +++ b/scripts/exregional_run_met_gridstat_vx_ensmean.sh @@ -83,7 +83,7 @@ export fhr_list #----------------------------------------------------------------------- # if [ $RUN_ENVIR = "nco" ]; then - export INPUT_BASE=$COMOUT/metout/${CDATE}/metprd/ensemble_stat + export INPUT_BASE=$COMOUT/metout/${CDATE}/metprd/EnsembleStat export OUTPUT_BASE=$COMOUT/metout export MEM_BASE=$OUTPUT_BASE export LOG_DIR=$LOGDIR @@ -93,7 +93,7 @@ if [ $RUN_ENVIR = "nco" ]; then export MEM_CUSTOM= export DOT_MEM_CUSTOM=".{custom?fmt=%s}" else - export INPUT_BASE=${EXPTDIR}/${CDATE}/metprd/ensemble_stat + export INPUT_BASE=${EXPTDIR}/${CDATE}/metprd/EnsembleStat export OUTPUT_BASE=$EXPTDIR export MEM_BASE=$EXPTDIR/$CDATE export LOG_DIR=${EXPTDIR}/log @@ -114,7 +114,7 @@ export DOT_ENSMEM=${dot_ensmem} # if [ ${VAR} == "APCP" ]; then - LOG_SUFFIX=GridStat_ensmean_${VAR}${ACCUM}h_${CDATE} + LOG_SUFFIX=GridStat_ensmean_${VAR}${ACCUM_HH}h_${CDATE} else LOG_SUFFIX=GridStat_ensmean_${VAR}_${CDATE} fi @@ -156,7 +156,7 @@ export LOG_SUFFIX #----------------------------------------------------------------------- # if [ ${VAR} == "APCP" ]; then - export acc="${ACCUM}h" + export acc="${ACCUM_HH}h" ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ -c ${METPLUS_CONF}/GridStat_ensmean_${VAR}${acc}.conf diff --git a/scripts/exregional_run_met_gridstat_vx_ensprob.sh b/scripts/exregional_run_met_gridstat_vx_ensprob.sh index 207d69db5f..9450ae1195 100755 --- a/scripts/exregional_run_met_gridstat_vx_ensprob.sh +++ b/scripts/exregional_run_met_gridstat_vx_ensprob.sh @@ -83,7 +83,7 @@ export fhr_list #----------------------------------------------------------------------- # if [ $RUN_ENVIR = "nco" ]; then - export INPUT_BASE=$COMOUT/metout/${CDATE}/metprd/ensemble_stat + export INPUT_BASE=$COMOUT/metout/${CDATE}/metprd/EnsembleStat export OUTPUT_BASE=$COMOUT/metout export MEM_BASE=$OUTPUT_BASE export LOG_DIR=$LOGDIR @@ -93,7 +93,7 @@ if [ $RUN_ENVIR = "nco" ]; then export MEM_CUSTOM= export DOT_MEM_CUSTOM=".{custom?fmt=%s}" else - export INPUT_BASE=${EXPTDIR}/${CDATE}/metprd/ensemble_stat + export INPUT_BASE=${EXPTDIR}/${CDATE}/metprd/EnsembleStat export OUTPUT_BASE=$EXPTDIR export MEM_BASE=$EXPTDIR/$CDATE export LOG_DIR=${EXPTDIR}/log @@ -114,7 +114,7 @@ export DOT_ENSMEM=${dot_ensmem} # if [ ${VAR} == "APCP" ]; then - LOG_SUFFIX=GridStat_ensprob_${VAR}${ACCUM}h_${CDATE} + LOG_SUFFIX=GridStat_ensprob_${VAR}${ACCUM_HH}h_${CDATE} else LOG_SUFFIX=GridStat_ensprob_${VAR}_${CDATE} fi @@ -156,7 +156,7 @@ export LOG_SUFFIX #----------------------------------------------------------------------- # if [ ${VAR} == "APCP" ]; then - export acc="${ACCUM}h" + export acc="${ACCUM_HH}h" ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ -c ${METPLUS_CONF}/GridStat_ensprob_${VAR}${acc}.conf diff --git a/scripts/exregional_run_met_pb2nc_obs.sh b/scripts/exregional_run_met_pb2nc_obs.sh index f7583b54a8..9c6eaf4709 100755 --- a/scripts/exregional_run_met_pb2nc_obs.sh +++ b/scripts/exregional_run_met_pb2nc_obs.sh @@ -63,7 +63,7 @@ print_info_msg " Entering script: \"${scrfunc_fn}\" In directory: \"${scrfunc_dir}\" -This is the ex-script for the task that runs the MET/METplus tool ${met_tool_sc} +This is the ex-script for the task that runs the METplus tool ${met_tool_pc} to convert NDAS prep buffer observation files to NetCDF format. ========================================================================" # @@ -110,9 +110,9 @@ OBS_INPUT_DIR="${OBS_DIR}" OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_NDAS_SFCorUPA_FN_TEMPLATE} ) OUTPUT_BASE="${VX_OUTPUT_BASEDIR}" -OUTPUT_DIR="${OUTPUT_BASE}/metprd/${met_tool_sc}_obs" +OUTPUT_DIR="${OUTPUT_BASE}/metprd/${met_tool_pc}_obs" OUTPUT_FN_TEMPLATE="${OBS_INPUT_FN_TEMPLATE}.nc" -STAGING_DIR="${OUTPUT_BASE}/stage/${met_tool_sc}_obs" +STAGING_DIR="${OUTPUT_BASE}/stage/${met_tool_pc}_obs" # #----------------------------------------------------------------------- # @@ -301,7 +301,7 @@ METplus configuration file used is: # print_info_msg " ======================================================================== -MET/METplus ${met_tool_sc} tool completed successfully. +METplus ${met_tool_pc} tool completed successfully. Exiting script: \"${scrfunc_fn}\" In directory: \"${scrfunc_dir}\" diff --git a/scripts/exregional_run_met_pcpcombine.sh b/scripts/exregional_run_met_pcpcombine.sh index 17fe12f03a..b9d12abb66 100755 --- a/scripts/exregional_run_met_pcpcombine.sh +++ b/scripts/exregional_run_met_pcpcombine.sh @@ -63,7 +63,7 @@ print_info_msg " Entering script: \"${scrfunc_fn}\" In directory: \"${scrfunc_dir}\" -This is the ex-script for the task that runs the MET/METplus ${met_tool_sc} +This is the ex-script for the task that runs the METplus ${met_tool_pc} that combines hourly accumulated precipitation (APCP) data to generate files containing multi-hour accumulated precipitation (e.g. 3-hour, 6- hour, 24-hour). The input files can come from either observations or @@ -144,7 +144,7 @@ if [ "${obs_or_fcst}" = "obs" ]; then OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_CCPA_APCP01h_FN_TEMPLATE} ) OUTPUT_BASE="${VX_OUTPUT_BASEDIR}" - OUTPUT_DIR="${OUTPUT_BASE}/metprd/${met_tool_sc}_obs" + OUTPUT_DIR="${OUTPUT_BASE}/metprd/${met_tool_pc}_obs" OUTPUT_FN_TEMPLATE=$( eval echo ${OBS_CCPA_APCPgt01h_FN_TEMPLATE} ) STAGING_DIR="${OUTPUT_BASE}/stage/${FIELDNAME_IN_MET_FILEDIR_NAMES}" @@ -154,7 +154,7 @@ elif [ "${obs_or_fcst}" = "fcst" ]; then FCST_INPUT_FN_TEMPLATE=$( eval echo ${FCST_SUBDIR_TEMPLATE}/${FCST_FN_TEMPLATE} ) OUTPUT_BASE="${VX_OUTPUT_BASEDIR}/${CDATE}${SLASH_ENSMEM_SUBDIR_OR_NULL}" - OUTPUT_DIR="${OUTPUT_BASE}/metprd/${met_tool_sc}_fcst" + OUTPUT_DIR="${OUTPUT_BASE}/metprd/${met_tool_pc}_fcst" OUTPUT_FN_TEMPLATE=$( eval echo ${FCST_FN_METPROC_TEMPLATE} ) STAGING_DIR="${OUTPUT_BASE}/stage/${FIELDNAME_IN_MET_FILEDIR_NAMES}" @@ -357,7 +357,7 @@ METplus configuration file used is: # print_info_msg " ======================================================================== -MET/METplus ${met_tool_sc} tool completed successfully. +METplus ${met_tool_pc} tool completed successfully. Exiting script: \"${scrfunc_fn}\" In directory: \"${scrfunc_dir}\" diff --git a/scripts/exregional_run_met_pointstat_vx.sh b/scripts/exregional_run_met_pointstat_vx.sh index 556a20ddfb..d58e37a5bf 100755 --- a/scripts/exregional_run_met_pointstat_vx.sh +++ b/scripts/exregional_run_met_pointstat_vx.sh @@ -12,6 +12,15 @@ source_config_for_task "task_run_vx_pointstat|task_run_post" ${GLOBAL_VAR_DEFNS_ # #----------------------------------------------------------------------- # +# Source files defining auxiliary functions for verification. +# +#----------------------------------------------------------------------- +# +. $USHdir/set_vx_params.sh +. $USHdir/set_vx_fhr_list.sh +# +#----------------------------------------------------------------------- +# # Save current shell options (in a global array). Then set new options # for this script/function. # @@ -21,7 +30,7 @@ source_config_for_task "task_run_vx_pointstat|task_run_post" ${GLOBAL_VAR_DEFNS_ # #----------------------------------------------------------------------- # -# Get the full path to the file in which this script/function is located +# 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). # @@ -59,13 +68,6 @@ yyyymmdd=${PDY} hh=${cyc} export CDATE export hh - -fhr_last=`echo ${FHR} | awk '{ print $NF }'` -export fhr_last - -fhr_list=`echo ${FHR} | $SED "s/ /,/g"` -export fhr_list - # #----------------------------------------------------------------------- # @@ -84,13 +86,8 @@ if [ $RUN_ENVIR = "nco" ]; then export MEM_CUSTOM= export DOT_MEM_CUSTOM=".{custom?fmt=%s}" else - if [[ ${DO_ENSEMBLE} == "FALSE" ]]; then - export INPUT_BASE=${VX_FCST_INPUT_BASEDIR}/${CDATE}/postprd - export OUTPUT_BASE=${EXPTDIR}/${CDATE} - else - export INPUT_BASE=${VX_FCST_INPUT_BASEDIR}/${CDATE}${SLASH_ENSMEM_SUBDIR}/postprd - export OUTPUT_BASE=${EXPTDIR}/${CDATE}${SLASH_ENSMEM_SUBDIR} - fi + export INPUT_BASE=${VX_FCST_INPUT_BASEDIR}/${CDATE}${SLASH_ENSMEM_SUBDIR_OR_NULL}/postprd + export OUTPUT_BASE=${VX_OUTPUT_BASEDIR}/${CDATE}${SLASH_ENSMEM_SUBDIR_OR_NULL} export MEM_BASE=$EXPTDIR/$CDATE export LOG_DIR=${EXPTDIR}/log @@ -109,11 +106,30 @@ export DOT_ENSMEM=${dot_ensmem} #----------------------------------------------------------------------- # LOG_SUFFIX="PointStat" -if [[ ${DO_ENSEMBLE} == "TRUE" ]]; then - ENSMEM=`echo ${SLASH_ENSMEM_SUBDIR} | cut -d"/" -f2` - VX_FCST_MODEL_NAME=${VX_FCST_MODEL_NAME}_${ENSMEM} -fi +#if [[ ${DO_ENSEMBLE} == "TRUE" ]]; then +# ENSMEM=`echo ${SLASH_ENSMEM_SUBDIR_OR_NULL} | cut -d"/" -f2` +# VX_FCST_MODEL_NAME=${VX_FCST_MODEL_NAME}_${ENSMEM} +#fi +# +#----------------------------------------------------------------------- +# +# Set the array of forecast hours for which to run the MET/METplus tool. +# +#----------------------------------------------------------------------- +# +export OBS_INPUT_DIR="${VX_OUTPUT_BASEDIR}/metprd/Pb2nc_obs" +OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE} ) + +set_vx_fhr_list \ + cdate="${CDATE}" \ + fcst_len_hrs="${FCST_LEN_HRS}" \ + field="$VAR" \ + accum_hh="${ACCUM_HH}" \ + base_dir="${OBS_INPUT_DIR}" \ + fn_template="${OBS_INPUT_FN_TEMPLATE}" \ + check_hourly_files="FALSE" \ + outvarname_fhr_list="FHR_LIST" # #----------------------------------------------------------------------- # @@ -142,11 +158,12 @@ export MET_CONFIG export VX_FCST_MODEL_NAME export NET export POST_OUTPUT_DOMAIN_NAME +export OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE=$( eval echo ${OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE} ) +export FHR_LIST ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ -c ${METPLUS_CONF}/PointStat_${VAR}.conf - # #----------------------------------------------------------------------- # diff --git a/scripts/exregional_run_met_pointstat_vx_ensmean.sh b/scripts/exregional_run_met_pointstat_vx_ensmean.sh index 67c952d38a..ef814b480c 100755 --- a/scripts/exregional_run_met_pointstat_vx_ensmean.sh +++ b/scripts/exregional_run_met_pointstat_vx_ensmean.sh @@ -12,6 +12,15 @@ source_config_for_task "task_run_vx_enspoint_mean|task_run_post" ${GLOBAL_VAR_DE # #----------------------------------------------------------------------- # +# Source files defining auxiliary functions for verification. +# +#----------------------------------------------------------------------- +# +. $USHdir/set_vx_params.sh +. $USHdir/set_vx_fhr_list.sh +# +#----------------------------------------------------------------------- +# # Save current shell options (in a global array). Then set new options # for this script/function. # @@ -21,7 +30,7 @@ source_config_for_task "task_run_vx_enspoint_mean|task_run_post" ${GLOBAL_VAR_DE # #----------------------------------------------------------------------- # -# Get the full path to the file in which this script/function is located +# 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). # @@ -68,13 +77,6 @@ yyyymmdd=${PDY} hh=${cyc} export CDATE export hh - -fhr_last=`echo ${FHR} | awk '{ print $NF }'` -export fhr_last - -fhr_list=`echo ${FHR} | $SED "s/ /,/g"` -export fhr_list - # #----------------------------------------------------------------------- # @@ -83,7 +85,7 @@ export fhr_list #----------------------------------------------------------------------- # if [ $RUN_ENVIR = "nco" ]; then - export INPUT_BASE=$COMOUT/metout/${CDATE}/metprd/ensemble_stat + export INPUT_BASE=$COMOUT/metout/${CDATE}/metprd/EnsembleStat export OUTPUT_BASE=$COMOUT/metout export MEM_BASE=$OUTPUT_BASE export LOG_DIR=$LOGDIR @@ -93,7 +95,7 @@ if [ $RUN_ENVIR = "nco" ]; then export MEM_CUSTOM= export DOT_MEM_CUSTOM=".{custom?fmt=%s}" else - export INPUT_BASE=${EXPTDIR}/${CDATE}/metprd/ensemble_stat + export INPUT_BASE=${EXPTDIR}/${CDATE}/metprd/EnsembleStat export OUTPUT_BASE=$EXPTDIR export MEM_BASE=$EXPTDIR/$CDATE export LOG_DIR=${EXPTDIR}/log @@ -114,6 +116,25 @@ export DOT_ENSMEM=${dot_ensmem} # LOG_SUFFIX="PointStat" +# +#----------------------------------------------------------------------- +# +# Set the array of forecast hours for which to run the MET/METplus tool. +# +#----------------------------------------------------------------------- +# +export OBS_INPUT_DIR="${VX_OUTPUT_BASEDIR}/metprd/Pb2nc_obs" +OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE} ) + +set_vx_fhr_list \ + cdate="${CDATE}" \ + fcst_len_hrs="${FCST_LEN_HRS}" \ + field="$VAR" \ + accum_hh="${ACCUM_HH}" \ + base_dir="${OBS_INPUT_DIR}" \ + fn_template="${OBS_INPUT_FN_TEMPLATE}" \ + check_hourly_files="FALSE" \ + outvarname_fhr_list="FHR_LIST" # #----------------------------------------------------------------------- # @@ -142,6 +163,7 @@ export MET_CONFIG export VX_FCST_MODEL_NAME export NET export POST_OUTPUT_DOMAIN_NAME +export FHR_LIST ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ diff --git a/scripts/exregional_run_met_pointstat_vx_ensprob.sh b/scripts/exregional_run_met_pointstat_vx_ensprob.sh index a3d4a36a70..649051ab96 100755 --- a/scripts/exregional_run_met_pointstat_vx_ensprob.sh +++ b/scripts/exregional_run_met_pointstat_vx_ensprob.sh @@ -12,6 +12,15 @@ source_config_for_task "task_run_vx_enspoint_prob|task_run_post" ${GLOBAL_VAR_DE # #----------------------------------------------------------------------- # +# Source files defining auxiliary functions for verification. +# +#----------------------------------------------------------------------- +# +. $USHdir/set_vx_params.sh +. $USHdir/set_vx_fhr_list.sh +# +#----------------------------------------------------------------------- +# # Save current shell options (in a global array). Then set new options # for this script/function. # @@ -21,7 +30,7 @@ source_config_for_task "task_run_vx_enspoint_prob|task_run_post" ${GLOBAL_VAR_DE # #----------------------------------------------------------------------- # -# Get the full path to the file in which this script/function is located +# 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). # @@ -68,13 +77,6 @@ yyyymmdd=${PDY} hh=${cyc} export CDATE export hh - -fhr_last=`echo ${FHR} | awk '{ print $NF }'` -export fhr_last - -fhr_list=`echo ${FHR} | $SED "s/ /,/g"` -export fhr_list - # #----------------------------------------------------------------------- # @@ -83,7 +85,7 @@ export fhr_list #----------------------------------------------------------------------- # if [ $RUN_ENVIR = "nco" ]; then - export INPUT_BASE=$COMOUT/metout/${CDATE}/metprd/ensemble_stat + export INPUT_BASE=$COMOUT/metout/${CDATE}/metprd/EnsembleStat export OUTPUT_BASE=$COMOUT/metout export MEM_BASE=$OUTPUT_BASE export LOG_DIR=$LOGDIR @@ -93,7 +95,7 @@ if [ $RUN_ENVIR = "nco" ]; then export MEM_CUSTOM= export DOT_MEM_CUSTOM=".{custom?fmt=%s}" else - export INPUT_BASE=${EXPTDIR}/${CDATE}/metprd/ensemble_stat + export INPUT_BASE=${EXPTDIR}/${CDATE}/metprd/EnsembleStat export OUTPUT_BASE=$EXPTDIR export MEM_BASE=$EXPTDIR/$CDATE export LOG_DIR=${EXPTDIR}/log @@ -113,6 +115,26 @@ export DOT_ENSMEM=${dot_ensmem} #----------------------------------------------------------------------- # LOG_SUFFIX="PointStat" + +# +#----------------------------------------------------------------------- +# +# Set the array of forecast hours for which to run the MET/METplus tool. +# +#----------------------------------------------------------------------- +# +export OBS_INPUT_DIR="${VX_OUTPUT_BASEDIR}/metprd/Pb2nc_obs" +OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE} ) + +set_vx_fhr_list \ + cdate="${CDATE}" \ + fcst_len_hrs="${FCST_LEN_HRS}" \ + field="$VAR" \ + accum_hh="${ACCUM_HH}" \ + base_dir="${OBS_INPUT_DIR}" \ + fn_template="${OBS_INPUT_FN_TEMPLATE}" \ + check_hourly_files="FALSE" \ + outvarname_fhr_list="FHR_LIST" # #----------------------------------------------------------------------- # @@ -141,6 +163,7 @@ export MET_CONFIG export VX_FCST_MODEL_NAME export NET export POST_OUTPUT_DOMAIN_NAME +export FHR_LIST ${METPLUS_PATH}/ush/run_metplus.py \ -c ${METPLUS_CONF}/common.conf \ diff --git a/ush/config_defaults.yaml b/ush/config_defaults.yaml index 059039ad70..1b1d62b73f 100644 --- a/ush/config_defaults.yaml +++ b/ush/config_defaults.yaml @@ -2067,6 +2067,17 @@ task_get_obs_ndas: WTIME_GET_OBS_NDAS: 02:00:00 MAXTRIES_GET_OBS_NDAS: 1 +#---------------------------- +# tn_run_met_pb2nc_obs config parameters +#----------------------------- +task_tn_run_met_pb2nc_obs: + TN_RUN_MET_PB2NC_OBS: "run_MET_Pb2nc_obs" + NNODES_RUN_MET_PB2NC_OBS: 1 + PPN_RUN_MET_PB2NC_OBS: 1 + MEM_RUN_MET_PB2NC_OBS: 2G + WTIME_RUN_MET_PB2NC_OBS: 00:30:00 + MAXTRIES_RUN_MET_PB2NC_OBS: 2 + #---------------------------- # tn_run_met_pcpcombine config parameters #----------------------------- @@ -2733,6 +2744,8 @@ 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_NDAS_SFCorUPA_FN_TEMPLATE: 'prepbufr.ndas.{valid?fmt=%Y%m%d%H}' + OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE: '${OBS_NDAS_SFCorUPA_FN_TEMPLATE}.nc' # # VX_LOCAL_MODULE_FN: # Name (without extension) of the local module file for running the vx diff --git a/ush/set_vx_params.sh b/ush/set_vx_params.sh index d05ef5266e..61b74ff4ce 100644 --- a/ush/set_vx_params.sh +++ b/ush/set_vx_params.sh @@ -6,7 +6,7 @@ # the field being verified and, if the field is accumulated precipitation, # the accumulation period (both of which are inputs to this function). # -# As of 20220928, the verification tasks in the SRW App workflow use the +# As of 20220928, the verification tasks in the SRW App workflow use the # MET/METplus software (MET = Model Evaluation Tools) developed at the # DTC (Developmental Testbed Center). # @@ -144,7 +144,7 @@ The accumulation (accum_hh) must be a 2-digit integer: _grid_or_point_="grid" case "${field}" in - + "APCP") fieldname_in_obs_input="${field}" fieldname_in_fcst_input="${field}" @@ -177,7 +177,7 @@ this observation type (obtype) and field (field) combination: fieldname_in_MET_output="${field}" fieldname_in_MET_filedir_names="${field}" ;; - + "RETOP") fieldname_in_obs_input="EchoTop18" fieldname_in_fcst_input="${field}" @@ -207,7 +207,7 @@ this observation type (obtype) and field (field) combination: fieldname_in_MET_output="${field}" fieldname_in_MET_filedir_names="${field}" ;; - + "UPA") fieldname_in_obs_input="" fieldname_in_fcst_input="" From 81160776c00ce9d8c73d5dc9f91e6a3a28b5f173 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Fri, 17 Mar 2023 12:28:21 -0600 Subject: [PATCH 063/119] Address PR comments. --- parm/FV3LAM_wflow.xml | 2 +- parm/metplus/PointStat_SFC.conf | 2 -- parm/metplus/PointStat_UPA.conf | 2 -- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/parm/FV3LAM_wflow.xml b/parm/FV3LAM_wflow.xml index cfb18a9af1..6b9c62ddf1 100644 --- a/parm/FV3LAM_wflow.xml +++ b/parm/FV3LAM_wflow.xml @@ -1643,7 +1643,7 @@ this case). So here we opt for a redundant for-loop. &NCORES_PER_NODE; &SCHED_NATIVE_CMD; {{tn}} - &LOGDIR;/{{tn}}_@Y@m@d@H.log + &LOGDIR;/{{tn}}_@Y@m@d@H&LOGEXT; GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; USHdir&USHdir; diff --git a/parm/metplus/PointStat_SFC.conf b/parm/metplus/PointStat_SFC.conf index 975eda6c3f..07f96a1558 100644 --- a/parm/metplus/PointStat_SFC.conf +++ b/parm/metplus/PointStat_SFC.conf @@ -229,7 +229,6 @@ BOTH_VAR12_LEVELS = Z2 # # Directory containing observation input to PointStat. # -#OBS_POINT_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/Pb2nc_obs OBS_POINT_STAT_INPUT_DIR = {ENV[OBS_INPUT_DIR]} # # Directory containing forecast input to PointStat. @@ -271,7 +270,6 @@ FCST_POINT_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_ENSMEM]}.prs # Template for observation input to PointStat relative to # OBS_POINT_STAT_INPUT_DIR. # -#OBS_POINT_STAT_INPUT_TEMPLATE = prepbufr.ndas{ENV[DOT_ENSMEM]}.{valid?fmt=%Y%m%d%H}.nc OBS_POINT_STAT_INPUT_TEMPLATE = {ENV[OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE]} # # Template for output from PointStat relative to POINT_STAT_OUTPUT_DIR. diff --git a/parm/metplus/PointStat_UPA.conf b/parm/metplus/PointStat_UPA.conf index 4d0ac259f4..8479d102f8 100644 --- a/parm/metplus/PointStat_UPA.conf +++ b/parm/metplus/PointStat_UPA.conf @@ -234,7 +234,6 @@ OBS_VAR12_THRESH = >500, >1000, >1500, >2000, >3000, >4000 # # Directory containing observation input to PointStat. # -#OBS_POINT_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/Pb2nc_obs OBS_POINT_STAT_INPUT_DIR = {ENV[OBS_INPUT_DIR]} # # Directory containing forecast input to PointStat. @@ -271,7 +270,6 @@ STAGING_DIR = {OUTPUT_BASE}/stage/UPA # Template for observation input to PointStat relative to # OBS_POINT_STAT_INPUT_DIR. # -#OBS_POINT_STAT_INPUT_TEMPLATE = prepbufr.ndas{ENV[DOT_ENSMEM]}.{valid?fmt=%Y%m%d%H}.nc OBS_POINT_STAT_INPUT_TEMPLATE = {ENV[OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE]} # # Template for forecast input to PointStat relative to From 8f67a95bf569fc9da1e6542c4aa3b3fbaeb0dc26 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Fri, 17 Mar 2023 17:31:31 -0600 Subject: [PATCH 064/119] Jinja templates for GridStat running on APCP01h, REFC, and RETOP. --- parm/metplus/GridStat_APCP01h.conf | 256 ++++++++++++++++----------- parm/metplus/GridStat_REFC.conf | 269 +++++++++++++++++------------ parm/metplus/GridStat_RETOP.conf | 269 +++++++++++++++++------------ 3 files changed, 475 insertions(+), 319 deletions(-) diff --git a/parm/metplus/GridStat_APCP01h.conf b/parm/metplus/GridStat_APCP01h.conf index 7a5b61ed5e..84058f4dab 100644 --- a/parm/metplus/GridStat_APCP01h.conf +++ b/parm/metplus/GridStat_APCP01h.conf @@ -14,26 +14,26 @@ PROCESS_LIST = GridStat # VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set LOOP_BY = INIT -# Format of INIT_BEG and INT_END using % items +# Format of INIT_BEG and INIT_END using % items # %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. # see www.strftime.org for more information # %Y%m%d%H expands to YYYYMMDDHH INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} +INIT_BEG = {{cdate}} # End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} +INIT_END = {{cdate}} -# Increment between METplus runs (in seconds if no units are specified) -# Must be >= 60 seconds +# Increment between METplus runs (in seconds if no units are specified). +# Must be >= 60 seconds. INIT_INCREMENT = 3600 # List of forecast leads to process for each run time (init or valid) # In hours if units are not specified # If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[fhr_list]} +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 @@ -48,20 +48,24 @@ LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 -LOG_DIR = {ENV[LOG_DIR]} - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/metprd/GridStat/metplus_final.APCP_01h{ENV[DOT_ENSMEM]}.conf - -# Location of MET config file to pass to GridStat +# +# Specify the name of the METplus log file. +# +#LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} +LOG_METPLUS = {LOG_DIR}/metplus.log.gridstat{{log_suffix}} +# +# Specify the location and name of the final METplus conf file. +# +#METPLUS_CONF = {OUTPUT_BASE}/metprd/GridStat/metplus_final.APCP_01h{ENV[DOT_ENSMEM]}.conf +METPLUS_CONF = {GRID_STAT_OUTPUT_DIR}/metplus_final.{{fieldname_in_met_filedir_names}}.conf +# +# Location of MET config file to pass to GridStat. +# GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped # grid to remap data. Value is set as the 'to_grid' variable in the 'regrid' dictionary # See MET User's Guide for more information -GRID_STAT_REGRID_TO_GRID = FCST +GRID_STAT_REGRID_TO_GRID = FCST GRID_STAT_REGRID_VLD_THRESH = 0.5 GRID_STAT_REGRID_METHOD = BUDGET GRID_STAT_REGRID_WIDTH = 2 @@ -75,15 +79,25 @@ GRID_STAT_REGRID_SHAPE = SQUARE #GRID_STAT_GRID_WEIGHT_FLAG = -# Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}{ENV[USCORE_ENSMEM_NAME_OR_NULL]} -FCST_NATIVE_DATA_TYPE = GRIB +# +# 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}}{{uscore_ensmem_name_or_null}} -# Name to identify observation data in output -OBTYPE = CCPA +FCST_NATIVE_DATA_TYPE = GRIB +# +# Name to identify observation data in output. +# +OBTYPE = {{obtype}} OBS_NATIVE_DATA_TYPE = GRIB - -# set the desc value in the GridStat MET config file +# +# 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 @@ -92,38 +106,51 @@ GRID_STAT_DESC = NA # 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; - -# Name of forecast variable 1 -FCST_VAR1_NAME = APCP - -# List of levels to evaluate for forecast variable 1 -# A03 = 3 hour accumulation in GRIB file -FCST_VAR1_LEVELS = A01 - -# List of thresholds to evaluate for each name/level combination for -# forecast variable 1 -#FCST_VAR1_THRESH = gt12.7, gt25.4, gt50.8, gt76.2 -BOTH_VAR1_THRESH = gt0.0,ge0.254,ge0.508,ge1.27,ge2.54 - -#FCST_GRID_STAT_FILE_TYPE = - -# Name of observation variable 1 -OBS_VAR1_NAME = APCP - -# List of levels to evaluate for observation variable 1 -# (*,*) is NetCDF notation - must include quotes around these values! -# must be the same length as FCST_VAR1_LEVELS -OBS_VAR1_LEVELS = A01 - +# +# String to search for in the foreast input files for forecast variable +# 1. +# +FCST_VAR1_NAME = {{fieldname_in_fcst_input}} +# +# List of levels to evaluate for forecast variable 1. +# +ACCUM_HH = {{accum_hh}} +FCST_VAR1_LEVELS = A{ACCUM_HH} +# +# Lead to use both in naming of the output .stat and .nc files and for +# lead values in those files. +# +# The specification of set_attr_lead below causes MET/METplus to use the +# lead values in the variable LEAD_SEQ set above, which are the same for +# all ensemble forecast members (i.e. regardless of whether members are +# time lagged with respect to the nominal cycle date specified by cdate). +# If set_attr_lead were not specified as below, then MET/METplus would +# get the lead from the input forecast file, and that would in general +# differ from one ensemble member to the next depending on whether the +# member is time-lagged. That would cause confusion, so here, we always +# use lead values with zero lead corresponding to cdate. +# +FCST_VAR1_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; +# # List of thresholds to evaluate for each name/level combination for -# observation variable 1 -#OBS_VAR1_THRESH = gt12.7, gt25.4, gt50.8, gt76.2 - -#OBS_GRID_STAT_FILE_TYPE = - +# both obs and 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. +# 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 @@ -146,14 +173,16 @@ GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5 # 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 +# +# Set to true if forecast data is probabilistic. +# FCST_IS_PROB = False - +# # Only used if FCST_IS_PROB is true - sets probabilistic threshold +# FCST_GRID_STAT_PROB_THRESH = ==0.1 -GRID_STAT_OUTPUT_PREFIX = {MODEL}_{CURRENT_FCST_NAME}_{ENV[acc]}_{OBTYPE} +GRID_STAT_OUTPUT_PREFIX = {MODEL}_{{fieldname_in_met_filedir_names}}_{OBTYPE} # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = @@ -185,7 +214,7 @@ GRID_STAT_OUTPUT_PREFIX = {MODEL}_{CURRENT_FCST_NAME}_{ENV[acc]}_{OBTYPE} GRID_STAT_MASK_GRID = # Statistical output types -GRID_STAT_OUTPUT_FLAG_FHO = STAT +GRID_STAT_OUTPUT_FLAG_FHO = STAT GRID_STAT_OUTPUT_FLAG_CTC = STAT GRID_STAT_OUTPUT_FLAG_CTS = STAT #GRID_STAT_OUTPUT_FLAG_MCTC = NONE @@ -209,62 +238,87 @@ GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT # 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_LATLON = TRUE +GRID_STAT_NC_PAIRS_FLAG_RAW = TRUE GRID_STAT_NC_PAIRS_FLAG_DIFF = FALSE GRID_STAT_NC_PAIRS_FLAG_CLIMO = FALSE #GRID_STAT_NC_PAIRS_FLAG_CLIMO_CDP = FALSE GRID_STAT_NC_PAIRS_FLAG_WEIGHT = FALSE -GRID_STAT_NC_PAIRS_FLAG_NBRHD = FALSE +GRID_STAT_NC_PAIRS_FLAG_NBRHD = TRUE #GRID_STAT_NC_PAIRS_FLAG_FOURIER = FALSE #GRID_STAT_NC_PAIRS_FLAG_GRADIENT = FALSE #GRID_STAT_NC_PAIRS_FLAG_DISTANCE_MAP = FALSE GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE -# End of [config] section and start of [dir] section +# End of [config] section and start of [dir] section. [dir] - -# directory containing forecast input to GridStat -INPUT_BASE = {ENV[INPUT_BASE]} -FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} - -# directory containing observation input to GridStat -OBS_GRID_STAT_INPUT_DIR = {ENV[OBS_DIR]} - -# directory containing climatology mean input to GridStat -# Not used in this example +# +# Directory containing observation input to GridStat. +# +#OBS_GRID_STAT_INPUT_DIR = {ENV[OBS_DIR]} +OBS_GRID_STAT_INPUT_DIR = {{obs_input_dir}} +# +# Directory containing forecast input to GridStat. +# +#INPUT_BASE = {ENV[INPUT_BASE]} +#FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} +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 +# +# Directory containing climatology mean input to GridStat. Not used in +# this example. +# GRID_STAT_CLIMO_STDEV_INPUT_DIR = - -# directory to write output from GridStat -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} - -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_01h - -# End of [dir] section and start of [filename_templates] section +# +# 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 = {ENV[OUTPUT_BASE]} +#GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} +OUTPUT_BASE = {{output_base}} +GRID_STAT_OUTPUT_DIR = {{output_dir}} + +#STAGING_DIR = {OUTPUT_BASE}/stage/APCP_01h +STAGING_DIR = {{staging_dir}} + +# End of [dir] section and start of [filename_templates] section. [filename_templates] - -# Template to look for forecast input to GridStat relative to FCST_GRID_STAT_INPUT_DIR -FCST_GRID_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_ENSMEM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 - -# Template to look for observation input to GridStat relative to OBS_GRID_STAT_INPUT_DIR -OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2 - -# Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = metprd/GridStat - -# Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# Template to look for forecast input to GridStat relative to +# FCST_GRID_STAT_INPUT_DIR. +# +#FCST_GRID_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_ENSMEM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 +FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} +# +# Template to look for observation input to GridStat relative to +# OBS_GRID_STAT_INPUT_DIR. +# +#OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2 +OBS_GRID_STAT_INPUT_TEMPLATE = {{obs_input_fn_template}} +# +# Template for output from GridStat relative to GRID_STAT_OUTPUT_DIR. +# +#GRID_STAT_OUTPUT_TEMPLATE = metprd/GridStat +GRID_STAT_OUTPUT_TEMPLATE = +# +# Template for climatology input to GridStat relative to +# GRID_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. +# GRID_STAT_CLIMO_MEAN_INPUT_TEMPLATE = - -# Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# 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 = - -# Used to specify one or more verification mask files for GridStat -# Not used for this example +# +# 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 5d0c20693d..2724f1e02a 100644 --- a/parm/metplus/GridStat_REFC.conf +++ b/parm/metplus/GridStat_REFC.conf @@ -14,26 +14,26 @@ PROCESS_LIST = GridStat # VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set LOOP_BY = INIT -# Format of INIT_BEG and INT_END using % items +# Format of INIT_BEG and INIT_END using % items # %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. # see www.strftime.org for more information # %Y%m%d%H expands to YYYYMMDDHH INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} +INIT_BEG = {{cdate}} # End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} +INIT_END = {{cdate}} -# Increment between METplus runs (in seconds if no units are specified) -# Must be >= 60 seconds +# Increment between METplus runs (in seconds if no units are specified). +# Must be >= 60 seconds. INIT_INCREMENT = 3600 # List of forecast leads to process for each run time (init or valid) # In hours if units are not specified # If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[fhr_list]} +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 @@ -48,20 +48,24 @@ LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 -LOG_DIR = {ENV[LOG_DIR]} - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/metprd/GridStat/metplus_final.REFC{ENV[DOT_ENSMEM]}.conf - -# Location of MET config file to pass to GridStat +# +# Specify the name of the METplus log file. +# +#LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} +LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}} +# +# Specify the location and name of the final METplus conf file. +# +#METPLUS_CONF = {OUTPUT_BASE}/metprd/GridStat/metplus_final.REFC{ENV[DOT_ENSMEM]}.conf +METPLUS_CONF = {GRID_STAT_OUTPUT_DIR}/metplus_final.{{fieldname_in_met_filedir_names}}.conf +# +# Location of MET config file to pass to GridStat. +# GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped # grid to remap data. Value is set as the 'to_grid' variable in the 'regrid' dictionary # See MET User's Guide for more information -GRID_STAT_REGRID_TO_GRID = FCST +GRID_STAT_REGRID_TO_GRID = FCST GRID_STAT_REGRID_VLD_THRESH = 0.5 GRID_STAT_REGRID_METHOD = BUDGET GRID_STAT_REGRID_WIDTH = 2 @@ -74,16 +78,25 @@ GRID_STAT_INTERP_TYPE_METHOD = NEAREST GRID_STAT_INTERP_TYPE_WIDTH = 1 GRID_STAT_GRID_WEIGHT_FLAG = NONE +# +# 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}}{{uscore_ensmem_name_or_null}} -# Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}{ENV[USCORE_ENSMEM_NAME_OR_NULL]} FCST_NATIVE_DATA_TYPE = GRIB - -# Name to identify observation data in output -OBTYPE = MRMS +# +# Name to identify observation data in output. +# +OBTYPE = {{obtype}} OBS_NATIVE_DATA_TYPE = GRIB - -# set the desc value in the GridStat MET config file +# +# 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 @@ -92,52 +105,63 @@ GRID_STAT_DESC = NA # are needed for different tools GRID_STAT_MET_CONFIG_OVERRIDES = cat_thresh = []; cnt_thresh = [NA]; cnt_logic = UNION; wind_thresh = [NA]; wind_logic = UNION; ci_alpha = [0.05]; rank_corr_flag = FALSE; - -# Name of forecast variable 1 -FCST_VAR1_NAME = REFC - -# List of levels to evaluate for forecast variable 1 -# A03 = 3 hour accumulation in GRIB file +# +# String to search for in the foreast input files for forecast variable +# 1. +# +FCST_VAR1_NAME = {{fieldname_in_fcst_input}} +# +# List of levels to evaluate for forecast variable 1. +# FCST_VAR1_LEVELS = L0 - -FCST_VAR1_OPTIONS = cnt_thresh = [ >15 ]; cnt_logic = UNION; - +# +# Lead to use both in naming of the output .stat and .nc files and for +# lead values in those files. +# +# The specification of set_attr_lead below causes MET/METplus to use the +# lead values in the variable LEAD_SEQ set above, which are the same for +# all ensemble forecast members (i.e. regardless of whether members are +# time lagged with respect to the nominal cycle date specified by cdate). +# If set_attr_lead were not specified as below, then MET/METplus would +# get the lead from the input forecast file, and that would in general +# differ from one ensemble member to the next depending on whether the +# member is time-lagged. That would cause confusion, so here, we always +# use lead values with zero lead corresponding to cdate. +# +FCST_VAR1_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; + cnt_thresh = [ >15 ]; + cnt_logic = UNION; +# # List of thresholds to evaluate for each name/level combination for -# forecast variable 1 -BOTH_VAR1_THRESH = ge20, ge30, ge40, ge50 - -#FCST_GRID_STAT_FILE_TYPE = - -# Name of observation variable 1 -OBS_VAR1_NAME = MergedReflectivityQCComposite - -# List of levels to evaluate for observation variable 1 -# (*,*) is NetCDF notation - must include quotes around these values! -# must be the same length as FCST_VAR1_LEVELS -OBS_VAR1_LEVELS = Z500 - +# both obs and 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 = Z500 OBS_VAR1_OPTIONS = censor_thresh = [eq-999, <-20]; censor_val = [-9999, -20]; cnt_thresh = [ >15 ]; cnt_logic = UNION; - -# List of thresholds to evaluate for each name/level combination for -# observation variable 1 -#OBS_VAR1_THRESH = gt12.7, gt25.4, gt50.8, gt76.2 - -#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. +# 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 = -300 -OBS_GRID_STAT_FILE_WINDOW_END = 300 +OBS_GRID_STAT_FILE_WINDOW_BEGIN = -300 +OBS_GRID_STAT_FILE_WINDOW_END = 300 # 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 = 1, 3, 5, 7 +GRID_STAT_NEIGHBORHOOD_WIDTH = 1,3,5,7 # shape value passed to nbrhd dictionary in the MET config file GRID_STAT_NEIGHBORHOOD_SHAPE = SQUARE @@ -149,22 +173,24 @@ GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5 # 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 +# +# 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 -# Set to true if observation data is probabilistic -# Only used if configuring forecast data as the 'OBS' input +GRID_STAT_OUTPUT_PREFIX = {MODEL}_{{fieldname_in_met_filedir_names}}_{OBTYPE} + +# Set to true if observation data is probabilistic. +# Only used if configuring forecast data as the 'OBS' input. OBS_IS_PROB = false -# Only used if OBS_IS_PROB is true - sets probabilistic threshold +# Only used if OBS_IS_PROB is true - sets probabilistic threshold. OBS_GRID_STAT_PROB_THRESH = ==0.1 -GRID_STAT_OUTPUT_PREFIX = {MODEL}_{CURRENT_FCST_NAME}_{OBTYPE} - # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = #GRID_STAT_CLIMO_MEAN_FIELD = @@ -195,7 +221,7 @@ GRID_STAT_CLIMO_CDF_BINS = 1 GRID_STAT_MASK_GRID = # Statistical output types -GRID_STAT_OUTPUT_FLAG_FHO = STAT +GRID_STAT_OUTPUT_FLAG_FHO = STAT GRID_STAT_OUTPUT_FLAG_CTC = STAT GRID_STAT_OUTPUT_FLAG_CTS = STAT #GRID_STAT_OUTPUT_FLAG_MCTC = NONE @@ -219,62 +245,87 @@ GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT # 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_LATLON = TRUE +GRID_STAT_NC_PAIRS_FLAG_RAW = TRUE GRID_STAT_NC_PAIRS_FLAG_DIFF = FALSE GRID_STAT_NC_PAIRS_FLAG_CLIMO = FALSE #GRID_STAT_NC_PAIRS_FLAG_CLIMO_CDP = FALSE GRID_STAT_NC_PAIRS_FLAG_WEIGHT = FALSE -GRID_STAT_NC_PAIRS_FLAG_NBRHD = FALSE +GRID_STAT_NC_PAIRS_FLAG_NBRHD = TRUE #GRID_STAT_NC_PAIRS_FLAG_FOURIER = FALSE #GRID_STAT_NC_PAIRS_FLAG_GRADIENT = FALSE #GRID_STAT_NC_PAIRS_FLAG_DISTANCE_MAP = FALSE GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE -# End of [config] section and start of [dir] section +# End of [config] section and start of [dir] section. [dir] - -# directory containing forecast input to GridStat -INPUT_BASE = {ENV[INPUT_BASE]} -FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} - -# directory containing observation input to GridStat -OBS_GRID_STAT_INPUT_DIR = {ENV[OBS_DIR]} - -# directory containing climatology mean input to GridStat -# Not used in this example +# +# Directory containing observation input to GridStat. +# +#OBS_GRID_STAT_INPUT_DIR = {ENV[OBS_DIR]} +OBS_GRID_STAT_INPUT_DIR = {{obs_input_dir}} +# +# Directory containing forecast input to GridStat. +# +#INPUT_BASE = {ENV[INPUT_BASE]} +#FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} +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 +# +# Directory containing climatology mean input to GridStat. Not used in +# this example. +# GRID_STAT_CLIMO_STDEV_INPUT_DIR = - -# directory to write output from GridStat -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} - -STAGING_DIR = {OUTPUT_BASE}/stage/REFC - -# End of [dir] section and start of [filename_templates] section +# +# 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 = {ENV[OUTPUT_BASE]} +#GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} +OUTPUT_BASE = {{output_base}} +GRID_STAT_OUTPUT_DIR = {{output_dir}} + +#STAGING_DIR = {OUTPUT_BASE}/stage/REFC +STAGING_DIR = {{staging_dir}} + +# End of [dir] section and start of [filename_templates] section. [filename_templates] - -# Template to look for forecast input to GridStat relative to FCST_GRID_STAT_INPUT_DIR -FCST_GRID_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_ENSMEM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 - -# Template to look for observation input to GridStat relative to OBS_GRID_STAT_INPUT_DIR -OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/MergedReflectivityQCComposite_00.50_{valid?fmt=%Y%m%d}-{valid?fmt=%H}0000.grib2 - -# Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = metprd/GridStat - -# Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# Template to look for forecast input to GridStat relative to +# FCST_GRID_STAT_INPUT_DIR. +# +#FCST_GRID_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_ENSMEM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 +FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} +# +# Template to look for observation input to GridStat relative to +# OBS_GRID_STAT_INPUT_DIR. +# +#OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/MergedReflectivityQCComposite_00.50_{valid?fmt=%Y%m%d}-{valid?fmt=%H}0000.grib2 +OBS_GRID_STAT_INPUT_TEMPLATE = {{obs_input_fn_template}} +# +# Template for output from GridStat relative to GRID_STAT_OUTPUT_DIR. +# +#GRID_STAT_OUTPUT_TEMPLATE = metprd/GridStat +GRID_STAT_OUTPUT_TEMPLATE = +# +# Template for climatology input to GridStat relative to +# GRID_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. +# GRID_STAT_CLIMO_MEAN_INPUT_TEMPLATE = - -# Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# 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 = - -# Used to specify one or more verification mask files for GridStat -# Not used for this example +# +# 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_RETOP.conf b/parm/metplus/GridStat_RETOP.conf index 1851623361..a6b8016058 100644 --- a/parm/metplus/GridStat_RETOP.conf +++ b/parm/metplus/GridStat_RETOP.conf @@ -14,26 +14,26 @@ PROCESS_LIST = GridStat # VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set LOOP_BY = INIT -# Format of INIT_BEG and INT_END using % items +# Format of INIT_BEG and INIT_END using % items # %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. # see www.strftime.org for more information # %Y%m%d%H expands to YYYYMMDDHH INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} +INIT_BEG = {{cdate}} # End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} +INIT_END = {{cdate}} -# Increment between METplus runs (in seconds if no units are specified) -# Must be >= 60 seconds +# Increment between METplus runs (in seconds if no units are specified). +# Must be >= 60 seconds. INIT_INCREMENT = 3600 # List of forecast leads to process for each run time (init or valid) # In hours if units are not specified # If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[fhr_list]} +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 @@ -48,20 +48,23 @@ LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 -LOG_DIR = {ENV[LOG_DIR]} - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/metprd/GridStat/metplus_final.RETOP{ENV[DOT_ENSMEM]}.conf - -# Location of MET config file to pass to GridStat +# +# Specify the name of the METplus log file. +# +#LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} +LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}} +# +# Specify the location and name of the final METplus conf file. +# +METPLUS_CONF = {GRID_STAT_OUTPUT_DIR}/metplus_final.{{fieldname_in_met_filedir_names}}.conf +# +# Location of MET config file to pass to GridStat. +# GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped # grid to remap data. Value is set as the 'to_grid' variable in the 'regrid' dictionary # See MET User's Guide for more information -GRID_STAT_REGRID_TO_GRID = FCST +GRID_STAT_REGRID_TO_GRID = FCST GRID_STAT_REGRID_VLD_THRESH = 0.5 GRID_STAT_REGRID_METHOD = BUDGET GRID_STAT_REGRID_WIDTH = 2 @@ -74,16 +77,25 @@ GRID_STAT_INTERP_TYPE_METHOD = NEAREST GRID_STAT_INTERP_TYPE_WIDTH = 1 GRID_STAT_GRID_WEIGHT_FLAG = NONE +# +# 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}}{{uscore_ensmem_name_or_null}} -# Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}{ENV[USCORE_ENSMEM_NAME_OR_NULL]} FCST_NATIVE_DATA_TYPE = GRIB - -# Name to identify observation data in output -OBTYPE = MRMS +# +# Name to identify observation data in output. +# +OBTYPE = {{obtype}} OBS_NATIVE_DATA_TYPE = GRIB - -# set the desc value in the GridStat MET config file +# +# 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 @@ -92,52 +104,64 @@ GRID_STAT_DESC = NA # are needed for different tools GRID_STAT_MET_CONFIG_OVERRIDES = cat_thresh = []; cnt_thresh = [NA]; cnt_logic = UNION; wind_thresh = [NA]; wind_logic = UNION; ci_alpha = [0.05]; rank_corr_flag = FALSE; - -# Name of forecast variable 1 -FCST_VAR1_NAME = RETOP - -# List of levels to evaluate for forecast variable 1 -# A03 = 3 hour accumulation in GRIB file +# +# String to search for in the foreast input files for forecast variable +# 1. +# +FCST_VAR1_NAME = {{fieldname_in_fcst_input}} +# +# List of levels to evaluate for forecast variable 1. +# FCST_VAR1_LEVELS = L0 - -FCST_VAR1_OPTIONS = convert(x) = x * 3.28084 * 0.001; cnt_thresh = [ >0 ]; cnt_logic = UNION; - +# +# Lead to use both in naming of the output .stat and .nc files and for +# lead values in those files. +# +# The specification of set_attr_lead below causes MET/METplus to use the +# lead values in the variable LEAD_SEQ set above, which are the same for +# all ensemble forecast members (i.e. regardless of whether members are +# time lagged with respect to the nominal cycle date specified by cdate). +# If set_attr_lead were not specified as below, then MET/METplus would +# get the lead from the input forecast file, and that would in general +# differ from one ensemble member to the next depending on whether the +# member is time-lagged. That would cause confusion, so here, we always +# use lead values with zero lead corresponding to cdate. +# +FCST_VAR1_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; + convert(x) = x * 3.28084 * 0.001; + cnt_thresh = [ >0 ]; + cnt_logic = UNION; +# # List of thresholds to evaluate for each name/level combination for -# forecast variable 1 -BOTH_VAR1_THRESH = ge20, ge30, ge40, ge50 - -#FCST_GRID_STAT_FILE_TYPE = - -# Name of observation variable 1 -OBS_VAR1_NAME = EchoTop18 - -# List of levels to evaluate for observation variable 1 -# (*,*) is NetCDF notation - must include quotes around these values! -# must be the same length as FCST_VAR1_LEVELS -OBS_VAR1_LEVELS = Z500 - +# both obs and 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 = Z500 OBS_VAR1_OPTIONS = convert(x) = x * 3280.84 * 0.001; censor_thresh = [<=-9.84252,eq-3.28084]; censor_val = [-9999,-16.4042]; cnt_thresh = [ >0 ]; cnt_logic = UNION; - -# List of thresholds to evaluate for each name/level combination for -# observation variable 1 -#OBS_VAR1_THRESH = gt12.7, gt25.4, gt50.8, gt76.2 - -#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. +# 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 = -300 -OBS_GRID_STAT_FILE_WINDOW_END = 300 +OBS_GRID_STAT_FILE_WINDOW_BEGIN = -300 +OBS_GRID_STAT_FILE_WINDOW_END = 300 # 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 = 1, 3, 5, 7 +GRID_STAT_NEIGHBORHOOD_WIDTH = 1,3,5,7 # shape value passed to nbrhd dictionary in the MET config file GRID_STAT_NEIGHBORHOOD_SHAPE = SQUARE @@ -149,22 +173,24 @@ GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5 # 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 +# +# 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 -# Set to true if observation data is probabilistic -# Only used if configuring forecast data as the 'OBS' input +GRID_STAT_OUTPUT_PREFIX = {MODEL}_{{fieldname_in_met_filedir_names}}_{OBTYPE} + +# Set to true if observation data is probabilistic. +# Only used if configuring forecast data as the 'OBS' input. OBS_IS_PROB = false -# Only used if OBS_IS_PROB is true - sets probabilistic threshold +# Only used if OBS_IS_PROB is true - sets probabilistic threshold. OBS_GRID_STAT_PROB_THRESH = ==0.1 -GRID_STAT_OUTPUT_PREFIX = {MODEL}_{CURRENT_FCST_NAME}_{OBTYPE} - # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = #GRID_STAT_CLIMO_MEAN_FIELD = @@ -195,7 +221,7 @@ GRID_STAT_CLIMO_CDF_BINS = 1 GRID_STAT_MASK_GRID = # Statistical output types -GRID_STAT_OUTPUT_FLAG_FHO = STAT +GRID_STAT_OUTPUT_FLAG_FHO = STAT GRID_STAT_OUTPUT_FLAG_CTC = STAT GRID_STAT_OUTPUT_FLAG_CTS = STAT #GRID_STAT_OUTPUT_FLAG_MCTC = NONE @@ -219,62 +245,87 @@ GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT # 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_LATLON = TRUE +GRID_STAT_NC_PAIRS_FLAG_RAW = TRUE GRID_STAT_NC_PAIRS_FLAG_DIFF = FALSE GRID_STAT_NC_PAIRS_FLAG_CLIMO = FALSE #GRID_STAT_NC_PAIRS_FLAG_CLIMO_CDP = FALSE GRID_STAT_NC_PAIRS_FLAG_WEIGHT = FALSE -GRID_STAT_NC_PAIRS_FLAG_NBRHD = FALSE +GRID_STAT_NC_PAIRS_FLAG_NBRHD = TRUE #GRID_STAT_NC_PAIRS_FLAG_FOURIER = FALSE #GRID_STAT_NC_PAIRS_FLAG_GRADIENT = FALSE #GRID_STAT_NC_PAIRS_FLAG_DISTANCE_MAP = FALSE GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE -# End of [config] section and start of [dir] section +# End of [config] section and start of [dir] section. [dir] - -# directory containing forecast input to GridStat -INPUT_BASE = {ENV[INPUT_BASE]} -FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} - -# directory containing observation input to GridStat -OBS_GRID_STAT_INPUT_DIR = {ENV[OBS_DIR]} - -# directory containing climatology mean input to GridStat -# Not used in this example +# +# Directory containing observation input to GridStat. +# +#OBS_GRID_STAT_INPUT_DIR = {ENV[OBS_DIR]} +OBS_GRID_STAT_INPUT_DIR = {{obs_input_dir}} +# +# Directory containing forecast input to GridStat. +# +#INPUT_BASE = {ENV[INPUT_BASE]} +#FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} +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 +# +# Directory containing climatology mean input to GridStat. Not used in +# this example. +# GRID_STAT_CLIMO_STDEV_INPUT_DIR = - -# directory to write output from GridStat -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} - -STAGING_DIR = {OUTPUT_BASE}/stage/RETOP - -# End of [dir] section and start of [filename_templates] section +# +# 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 = {ENV[OUTPUT_BASE]} +#GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} +OUTPUT_BASE = {{output_base}} +GRID_STAT_OUTPUT_DIR = {{output_dir}} + +#STAGING_DIR = {OUTPUT_BASE}/stage/RETOP +STAGING_DIR = {{staging_dir}} + +# End of [dir] section and start of [filename_templates] section. [filename_templates] - -# Template to look for forecast input to GridStat relative to FCST_GRID_STAT_INPUT_DIR -FCST_GRID_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_ENSMEM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 - -# Template to look for observation input to GridStat relative to OBS_GRID_STAT_INPUT_DIR -OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/EchoTop_18_00.50_{valid?fmt=%Y%m%d}-{valid?fmt=%H%M%S}.grib2 - -# Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = metprd/GridStat - -# Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# Template to look for forecast input to GridStat relative to +# FCST_GRID_STAT_INPUT_DIR. +# +#FCST_GRID_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_ENSMEM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 +FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} +# +# Template to look for observation input to GridStat relative to +# OBS_GRID_STAT_INPUT_DIR. +# +#OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/EchoTop_18_00.50_{valid?fmt=%Y%m%d}-{valid?fmt=%H%M%S}.grib2 +OBS_GRID_STAT_INPUT_TEMPLATE = {{obs_input_fn_template}} +# +# Template for output from GridStat relative to GRID_STAT_OUTPUT_DIR. +# +#GRID_STAT_OUTPUT_TEMPLATE = metprd/GridStat +GRID_STAT_OUTPUT_TEMPLATE = +# +# Template for climatology input to GridStat relative to +# GRID_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. +# GRID_STAT_CLIMO_MEAN_INPUT_TEMPLATE = - -# Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# 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 = - -# Used to specify one or more verification mask files for GridStat -# Not used for this example +# +# 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 From bbfd59fde37cbdd2dddaa2229b7a1d208673b8ed Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Fri, 17 Mar 2023 17:35:35 -0600 Subject: [PATCH 065/119] Changes to ROCOTO xml to get templated versions of GridStat tasks for APCP01, REFC, and RETOP to work. --- parm/FV3LAM_wflow.xml | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/parm/FV3LAM_wflow.xml b/parm/FV3LAM_wflow.xml index 6b9c62ddf1..f266721a40 100644 --- a/parm/FV3LAM_wflow.xml +++ b/parm/FV3LAM_wflow.xml @@ -1765,7 +1765,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX" {{ nnodes_run_met_gridstat_vx_apcp01h }}:ppn={{ ppn_run_met_gridstat_vx_apcp01h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_apcp01h }} @@ -1783,9 +1783,11 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + OBTYPECCPA VARAPCP ACCUM_HH01 + MET_TOOLGRIDSTAT + obs_or_fcstobs USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} {%- if do_ensemble %} @@ -1951,7 +1953,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX" {{ nnodes_run_met_gridstat_vx_refc }}:ppn={{ ppn_run_met_gridstat_vx_refc }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_refc }} @@ -1969,8 +1971,11 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + OBTYPEMRMS VARREFC + ACCUM_HH01 + MET_TOOLGRIDSTAT + obs_or_fcstobs USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} {%- if do_ensemble %} @@ -2001,7 +2006,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX" {{ nnodes_run_met_gridstat_vx_retop }}:ppn={{ ppn_run_met_gridstat_vx_retop }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_retop }} @@ -2019,8 +2024,11 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + OBTYPEMRMS VARRETOP + ACCUM_HH01 + MET_TOOLGRIDSTAT + obs_or_fcstobs USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} {%- if do_ensemble %} From f0c035ee8eef27e9ce4741faae4d38d6d7a1f2d5 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Fri, 17 Mar 2023 17:39:40 -0600 Subject: [PATCH 066/119] Remove trailing whitespace. --- jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX | 2 +- scripts/exregional_run_met_pcpcombine.sh | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX b/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX index 920319bdce..a51a44dae2 100755 --- a/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX +++ b/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX @@ -59,7 +59,7 @@ by initialization time for all forecast hours. #----------------------------------------------------------------------- # # Call the ex-script for this J-job and pass to it the necessary varia- -# bles. +# bles. # #----------------------------------------------------------------------- # diff --git a/scripts/exregional_run_met_pcpcombine.sh b/scripts/exregional_run_met_pcpcombine.sh index b9d12abb66..9e93e64bd7 100755 --- a/scripts/exregional_run_met_pcpcombine.sh +++ b/scripts/exregional_run_met_pcpcombine.sh @@ -30,7 +30,7 @@ source_config_for_task "task_run_met_pcpcombine|task_run_post" ${GLOBAL_VAR_DEFN # #----------------------------------------------------------------------- # -# Get the full path to the file in which this script/function is located +# 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). # @@ -112,7 +112,7 @@ set_vx_params \ # was initialized 1 hour before the current CDATE, while a time lag of 0 # means the current member was initialized on CDATE. # -# Note that if we're not running ensemble verification (i.e. if we're +# Note that if we're not running ensemble verification (i.e. if we're # running verification for a single deterministic forecast), the time # lag gets set to 0. # @@ -121,7 +121,7 @@ set_vx_params \ time_lag="0" if [ "${obs_or_fcst}" = "fcst" ]; then time_lag=$(( (${MEM_INDX_OR_NULL:+${ENS_TIME_LAG_HRS[${MEM_INDX_OR_NULL}-1]}}+0) )) -# Convert to seconds. We do this as a separate step using bc because +# Convert to seconds. We do this as a separate step using bc because # bash's $((...)) arithmetic operator can't handle floats well. time_lag=$( bc -l <<< "${time_lag}*${SECS_PER_HOUR}" ) fi @@ -140,13 +140,13 @@ FCST_INPUT_FN_TEMPLATE="" if [ "${obs_or_fcst}" = "obs" ]; then - OBS_INPUT_DIR="${OBS_DIR}" - OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_CCPA_APCP01h_FN_TEMPLATE} ) + OBS_INPUT_DIR="${OBS_DIR}" + OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_CCPA_APCP01h_FN_TEMPLATE} ) - OUTPUT_BASE="${VX_OUTPUT_BASEDIR}" - OUTPUT_DIR="${OUTPUT_BASE}/metprd/${met_tool_pc}_obs" - OUTPUT_FN_TEMPLATE=$( eval echo ${OBS_CCPA_APCPgt01h_FN_TEMPLATE} ) - STAGING_DIR="${OUTPUT_BASE}/stage/${FIELDNAME_IN_MET_FILEDIR_NAMES}" + OUTPUT_BASE="${VX_OUTPUT_BASEDIR}" + OUTPUT_DIR="${OUTPUT_BASE}/metprd/${met_tool_pc}_obs" + OUTPUT_FN_TEMPLATE=$( eval echo ${OBS_CCPA_APCPgt01h_FN_TEMPLATE} ) + STAGING_DIR="${OUTPUT_BASE}/stage/${FIELDNAME_IN_MET_FILEDIR_NAMES}" elif [ "${obs_or_fcst}" = "fcst" ]; then From 45d64aa242aea00abe493d28a3981821d6172b65 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Fri, 17 Mar 2023 17:40:51 -0600 Subject: [PATCH 067/119] Add MRMS obs file name templates. --- ush/config_defaults.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ush/config_defaults.yaml b/ush/config_defaults.yaml index c46ab7dfe2..be11b1b0c8 100644 --- a/ush/config_defaults.yaml +++ b/ush/config_defaults.yaml @@ -2744,10 +2744,12 @@ verification: # GET_OBS_LOCAL_MODULE_FN: 'get_obs' # - # Templates for CCPA observation files. + # Templates for CCPA, MRMS, and NDAS observation files. # 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_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}' OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE: '${OBS_NDAS_SFCorUPA_FN_TEMPLATE}.nc' # From 1b9b3c467a0b1facc627e88ffc1b07c54f7d222b Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Fri, 17 Mar 2023 21:00:57 -0600 Subject: [PATCH 068/119] Bug fixes. --- parm/metplus/GridStat_APCP01h.conf | 4 ++-- parm/metplus/GridStat_REFC.conf | 2 +- parm/metplus/GridStat_RETOP.conf | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/parm/metplus/GridStat_APCP01h.conf b/parm/metplus/GridStat_APCP01h.conf index 84058f4dab..30550a7da3 100644 --- a/parm/metplus/GridStat_APCP01h.conf +++ b/parm/metplus/GridStat_APCP01h.conf @@ -52,12 +52,12 @@ LOOP_ORDER = times # Specify the name of the METplus log file. # #LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} -LOG_METPLUS = {LOG_DIR}/metplus.log.gridstat{{log_suffix}} +LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}} # # Specify the location and name of the final METplus conf file. # #METPLUS_CONF = {OUTPUT_BASE}/metprd/GridStat/metplus_final.APCP_01h{ENV[DOT_ENSMEM]}.conf -METPLUS_CONF = {GRID_STAT_OUTPUT_DIR}/metplus_final.{{fieldname_in_met_filedir_names}}.conf +METPLUS_CONF = {GRID_STAT_OUTPUT_DIR}/metplus_final.{{metplus_config_fn}} # # Location of MET config file to pass to GridStat. # diff --git a/parm/metplus/GridStat_REFC.conf b/parm/metplus/GridStat_REFC.conf index 2724f1e02a..c64916a7d6 100644 --- a/parm/metplus/GridStat_REFC.conf +++ b/parm/metplus/GridStat_REFC.conf @@ -57,7 +57,7 @@ LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}} # Specify the location and name of the final METplus conf file. # #METPLUS_CONF = {OUTPUT_BASE}/metprd/GridStat/metplus_final.REFC{ENV[DOT_ENSMEM]}.conf -METPLUS_CONF = {GRID_STAT_OUTPUT_DIR}/metplus_final.{{fieldname_in_met_filedir_names}}.conf +METPLUS_CONF = {GRID_STAT_OUTPUT_DIR}/metplus_final.{{metplus_config_fn}} # # Location of MET config file to pass to GridStat. # diff --git a/parm/metplus/GridStat_RETOP.conf b/parm/metplus/GridStat_RETOP.conf index a6b8016058..8511bda890 100644 --- a/parm/metplus/GridStat_RETOP.conf +++ b/parm/metplus/GridStat_RETOP.conf @@ -56,7 +56,7 @@ 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.{{fieldname_in_met_filedir_names}}.conf +METPLUS_CONF = {GRID_STAT_OUTPUT_DIR}/metplus_final.{{metplus_config_fn}} # # Location of MET config file to pass to GridStat. # From e657394a44a7201cc283e3a59df06e110d373c63 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Fri, 17 Mar 2023 21:33:49 -0600 Subject: [PATCH 069/119] Modify deterministic PointStat tasks in ROCOTO XML and the corresponding configuration files so that the files are Jinja templates. --- parm/FV3LAM_wflow.xml | 14 ++-- parm/metplus/PointStat_SFC.conf | 112 +++++++++++++++++++++++--------- parm/metplus/PointStat_UPA.conf | 98 +++++++++++++++++++++------- 3 files changed, 164 insertions(+), 60 deletions(-) diff --git a/parm/FV3LAM_wflow.xml b/parm/FV3LAM_wflow.xml index f266721a40..abea178dfa 100644 --- a/parm/FV3LAM_wflow.xml +++ b/parm/FV3LAM_wflow.xml @@ -2061,7 +2061,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX" {{ nnodes_run_met_pointstat_vx_sfc }}:ppn={{ ppn_run_met_pointstat_vx_sfc }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_pointstat_vx_sfc }} @@ -2079,8 +2079,11 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; + OBTYPENDAS VARSFC - ACCUM_HH + ACCUM_HH01 + MET_TOOLPOINTSTAT + obs_or_fcstobs USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} {%- if do_ensemble %} @@ -2111,7 +2114,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX" {{ nnodes_run_met_pointstat_vx_upa }}:ppn={{ ppn_run_met_pointstat_vx_upa }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_pointstat_vx_upa }} @@ -2129,8 +2132,11 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; + OBTYPENDAS VARUPA - ACCUM_HH + ACCUM_HH01 + MET_TOOLPOINTSTAT + obs_or_fcstobs USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} {%- if do_ensemble %} diff --git a/parm/metplus/PointStat_SFC.conf b/parm/metplus/PointStat_SFC.conf index 07f96a1558..29631ac672 100644 --- a/parm/metplus/PointStat_SFC.conf +++ b/parm/metplus/PointStat_SFC.conf @@ -19,10 +19,10 @@ LOOP_BY = INIT INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} +INIT_BEG = {{cdate}} # End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} +INIT_END = {{cdate}} # Increment between METplus runs (in seconds if no units are specified) # Must be >= 60 seconds. @@ -31,7 +31,7 @@ INIT_INCREMENT = 3600 # List of forecast leads to process for each run time (init or valid) # In hours if units are not specified # If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[FHR_LIST]} +LEAD_SEQ = {{fhr_list}} # Order of loops to process data - Options are times, processes # Not relevant if only one item is in the PROCESS_LIST @@ -46,14 +46,17 @@ LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for PointStat only LOG_POINT_STAT_VERBOSITY = 2 +FIELDNAME_IN_MET_FILEDIR_NAMES = {{fieldname_in_met_filedir_names}} # # Specify the name of the METplus log file. # -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_SFC{ENV[USCORE_ENSMEM_NAME_OR_NULL]}_{ENV[CDATE]} +#LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_SFC{ENV[USCORE_ENSMEM_NAME_OR_NULL]}_{ENV[CDATE]} +LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}} # # Specify the location and name of the final METplus conf file. # -METPLUS_CONF = {OUTPUT_BASE}/metprd/PointStat/metplus_final.SFC{ENV[DOT_ENSMEM]}.conf +#METPLUS_CONF = {OUTPUT_BASE}/metprd/PointStat/metplus_final.SFC{ENV[DOT_ENSMEM]}.conf +METPLUS_CONF = {POINT_STAT_OUTPUT_DIR}/metplus_final.{{metplus_config_fn}} # Location of MET config file to pass to GridStat # References PARM_BASE, which is the location of the parm directory @@ -121,13 +124,15 @@ POINT_STAT_OFFSETS = 0 # suffix to MODEL that identifies the forecast ensemble member. This # makes it easier to identify each curve. # -MODEL = {ENV[VX_FCST_MODEL_NAME]}{ENV[USCORE_ENSMEM_NAME_OR_NULL]} - +MODEL = {{vx_fcst_model_name}}{{uscore_ensmem_name_or_null}} +# +# Value to enter under the DESC column in the output stat file. +# POINT_STAT_DESC = NA # # Name to identify observation data in output. # -OBTYPE = NDAS +OBTYPE = {{obtype}} # Regrid to specified grid. Indicate NONE if no regridding, or the grid id # (e.g. G212) @@ -135,7 +140,7 @@ POINT_STAT_REGRID_TO_GRID = NONE POINT_STAT_REGRID_METHOD = BILIN POINT_STAT_REGRID_WIDTH = 2 -POINT_STAT_OUTPUT_PREFIX = {MODEL}_{OBTYPE}_ADPSFC +POINT_STAT_OUTPUT_PREFIX = {MODEL}_ADP{FIELDNAME_IN_MET_FILEDIR_NAMES}_{OBTYPE} # sets the -obs_valid_beg command line argument (optional) # not used for this example @@ -159,14 +164,16 @@ POINT_STAT_STATION_ID = # Message types, if all message types are to be returned, leave this empty, # otherwise indicate the message types of interest. -POINT_STAT_MESSAGE_TYPE = ADPSFC -# Variables and levels as specified in the field dictionary of the METplus -# PointStat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, -# (optional) FCST_VARn_OPTION +POINT_STAT_MESSAGE_TYPE = ADP{FIELDNAME_IN_MET_FILEDIR_NAMES} # set to True to run PointStat once for each name/level combination # set to False to run PointStat once per run time including all fields POINT_STAT_ONCE_PER_FIELD = False +# +# Variables and levels as specified in the field dictionary of the METplus +# PointStat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, +# (optional) FCST_VARn_OPTION +# # fields to compare # Note: If FCST_VAR_* is set, then a corresponding OBS_VAR_* variable must be set @@ -174,51 +181,87 @@ POINT_STAT_ONCE_PER_FIELD = False BOTH_VAR1_NAME = TMP BOTH_VAR1_LEVELS = Z2 +# +# Lead to use both in naming of the output .stat and .nc files and for +# lead values in those files. +# +# The specification of set_attr_lead below causes MET/METplus to use the +# lead values in the variable LEAD_SEQ set above, which are the same for +# all ensemble forecast members (i.e. regardless of whether members are +# time lagged with respect to the nominal cycle date specified by cdate). +# If set_attr_lead were not specified as below, then MET/METplus would +# get the lead from the input forecast file, and that would in general +# differ from one ensemble member to the next depending on whether the +# member is time-lagged. That would cause confusion, so here, we always +# use lead values with zero lead corresponding to cdate. +# +FCST_VAR1_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; BOTH_VAR2_NAME = DPT BOTH_VAR2_LEVELS = Z2 +FCST_VAR2_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; BOTH_VAR3_NAME = RH BOTH_VAR3_LEVELS = Z2 +FCST_VAR3_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; BOTH_VAR4_NAME = UGRD BOTH_VAR4_LEVELS = Z10 BOTH_VAR4_THRESH = >=2.572 ;; m/s or 5kts +FCST_VAR4_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; BOTH_VAR5_NAME = VGRD BOTH_VAR5_LEVELS = Z10 BOTH_VAR5_THRESH = >=2.572 ;; m/s or 5kts +FCST_VAR5_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; BOTH_VAR6_NAME = WIND BOTH_VAR6_LEVELS = Z10 BOTH_VAR6_THRESH = >=2.572, >=2.572&&<5.144, >=5.144, >=10.288, >=15.433 ;; m/s or 5, 10, 20, 30kts -BOTH_VAR6_OPTIONS = GRIB2_pdt = 0; ;; derive instantaneous 10-m wind from U/V components, overriding max 10-m wind +FCST_VAR6_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; + GRIB2_pdt = 0; ;; derive instantaneous 10-m wind from U/V components, overriding max 10-m wind +OBS_VAR6_OPTIONS = GRIB2_pdt = 0; ;; derive instantaneous 10-m wind from U/V components, overriding max 10-m wind BOTH_VAR7_NAME = PRMSL BOTH_VAR7_LEVELS = Z0 +FCST_VAR7_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; FCST_VAR8_NAME = TCDC FCST_VAR8_LEVELS = L0 -FCST_VAR8_OPTIONS = GRIB_lvl_typ = 200; GRIB2_ipdtmpl_index=[27]; GRIB2_ipdtmpl_val=[255]; interp = { type = [ { method = NEAREST; width = 1; } ]; } +FCST_VAR8_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; + GRIB_lvl_typ = 200; + GRIB2_ipdtmpl_index=[27]; + GRIB2_ipdtmpl_val=[255]; + interp = { type = [ { method = NEAREST; width = 1; } ]; } OBS_VAR8_NAME = TCDC OBS_VAR8_LEVELS = L0 BOTH_VAR9_NAME = VIS BOTH_VAR9_LEVELS = L0 BOTH_VAR9_THRESH = <805, <1609, <4828, <8045 ,>=8045, <16090 -BOTH_VAR9_OPTIONS = censor_thresh = [>16090]; censor_val = [16090]; interp = { type = [ { method = NEAREST; width = 1; } ]; } +FCST_VAR9_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; + censor_thresh = [>16090]; + censor_val = [16090]; + interp = { type = [ { method = NEAREST; width = 1; } ]; } +OBS_VAR9_OPTIONS = censor_thresh = [>16090]; + censor_val = [16090]; + interp = { type = [ { method = NEAREST; width = 1; } ]; } BOTH_VAR10_NAME = GUST BOTH_VAR10_LEVELS = Z0 +FCST_VAR10_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; FCST_VAR11_NAME = HGT FCST_VAR11_LEVELS = L0 -FCST_VAR11_OPTIONS = GRIB_lvl_typ = 215; desc = "CEILING"; FCST_VAR11_THRESH = <152, <305, <914, <1520, <3040, >=914 +FCST_VAR11_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; + GRIB_lvl_typ = 215; + desc = "CEILING"; OBS_VAR11_NAME = CEILING OBS_VAR11_LEVELS = L0 -OBS_VAR11_OPTIONS = GRIB_lvl_typ = 215; interp = { type = [ { method = NEAREST; width = 1; } ]; } OBS_VAR11_THRESH = <152, <305, <914, <1520, <3040, >=914 +OBS_VAR11_OPTIONS = GRIB_lvl_typ = 215; + interp = { type = [ { method = NEAREST; width = 1; } ]; } BOTH_VAR12_NAME = SPFH BOTH_VAR12_LEVELS = Z2 @@ -229,11 +272,13 @@ BOTH_VAR12_LEVELS = Z2 # # Directory containing observation input to PointStat. # -OBS_POINT_STAT_INPUT_DIR = {ENV[OBS_INPUT_DIR]} +#OBS_POINT_STAT_INPUT_DIR = {ENV[OBS_INPUT_DIR]} +OBS_POINT_STAT_INPUT_DIR = {{obs_input_dir}} # # Directory containing forecast input to PointStat. # -FCST_POINT_STAT_INPUT_DIR = {ENV[INPUT_BASE]} +#FCST_POINT_STAT_INPUT_DIR = {ENV[INPUT_BASE]} +FCST_POINT_STAT_INPUT_DIR = {{fcst_input_dir}} # # Directory containing climatology mean input to PointStat. Not used in # this example. @@ -247,34 +292,39 @@ POINT_STAT_CLIMO_STDEV_INPUT_DIR = # # Directory in which to write output from PointStat. # -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -# # OUTPUT_BASE apparently has to be set to something; it cannot be left # to its default value. But it is not explicitly used elsewhere in this # configuration file. # -POINT_STAT_OUTPUT_DIR = {OUTPUT_BASE} +#OUTPUT_BASE = {ENV[OUTPUT_BASE]} +#POINT_STAT_OUTPUT_DIR = {OUTPUT_BASE} +OUTPUT_BASE = {{output_base}} +POINT_STAT_OUTPUT_DIR = {{output_dir}} # # Directory for staging data. # -STAGING_DIR = {OUTPUT_BASE}/stage/SFC +#STAGING_DIR = {OUTPUT_BASE}/stage/SFC +STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. [filename_templates] # -# Template for forecast input to PointStat relative to -# FCST_POINT_STAT_INPUT_DIR. -# -FCST_POINT_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_ENSMEM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 -# # Template for observation input to PointStat relative to # OBS_POINT_STAT_INPUT_DIR. # -OBS_POINT_STAT_INPUT_TEMPLATE = {ENV[OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE]} +#OBS_POINT_STAT_INPUT_TEMPLATE = {ENV[OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE]} +OBS_POINT_STAT_INPUT_TEMPLATE = {{obs_input_fn_template}} +# +# Template for forecast input to PointStat relative to +# FCST_POINT_STAT_INPUT_DIR. +# +#FCST_POINT_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_ENSMEM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 +FCST_POINT_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # # Template for output from PointStat relative to POINT_STAT_OUTPUT_DIR. # -POINT_STAT_OUTPUT_TEMPLATE = metprd/PointStat +#POINT_STAT_OUTPUT_TEMPLATE = metprd/PointStat +POINT_STAT_OUTPUT_TEMPLATE = # # Template for climatology input to PointStat relative to # POINT_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. diff --git a/parm/metplus/PointStat_UPA.conf b/parm/metplus/PointStat_UPA.conf index 8479d102f8..da3f2ee84a 100644 --- a/parm/metplus/PointStat_UPA.conf +++ b/parm/metplus/PointStat_UPA.conf @@ -19,10 +19,10 @@ LOOP_BY = INIT INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} +INIT_BEG = {{cdate}} # End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} +INIT_END = {{cdate}} # Increment between METplus runs (in seconds if no units are specified) # Must be >= 60 seconds. @@ -31,7 +31,7 @@ INIT_INCREMENT = 3600 # List of forecast leads to process for each run time (init or valid) # In hours if units are not specified # If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[FHR_LIST]} +LEAD_SEQ = {{fhr_list}} # Order of loops to process data - Options are times, processes # Not relevant if only one item is in the PROCESS_LIST @@ -45,14 +45,18 @@ LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for PointStat only LOG_POINT_STAT_VERBOSITY = 2 + +FIELDNAME_IN_MET_FILEDIR_NAMES = {{fieldname_in_met_filedir_names}} # # Specify the name of the METplus log file. # -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_UPA{ENV[USCORE_ENSMEM_NAME_OR_NULL]}_{ENV[CDATE]} +#LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_UPA{ENV[USCORE_ENSMEM_NAME_OR_NULL]}_{ENV[CDATE]} +LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}} # # Specify the location and name of the final METplus conf file. # -METPLUS_CONF = {OUTPUT_BASE}/metprd/PointStat/metplus_final.UPA{ENV[DOT_ENSMEM]}.conf +#METPLUS_CONF = {OUTPUT_BASE}/metprd/PointStat/metplus_final.UPA{ENV[DOT_ENSMEM]}.conf +METPLUS_CONF = {POINT_STAT_OUTPUT_DIR}/metplus_final.{{metplus_config_fn}} # Location of MET config file to pass to GridStat # References PARM_BASE, which is the location of the parm directory @@ -120,13 +124,22 @@ POINT_STAT_OFFSETS = 0 # suffix to MODEL that identifies the forecast ensemble member. This # makes it easier to identify each curve. # -MODEL = {ENV[VX_FCST_MODEL_NAME]}{ENV[USCORE_ENSMEM_NAME_OR_NULL]} - +MODEL = {{vx_fcst_model_name}}{{uscore_ensmem_name_or_null}} +# +# Value to enter under the DESC column in the output stat file. Here, +# we store the value of the original lead in this column, i.e. the lead +# with zero corresponding to the actual start time of the forecast (which +# is (cdate - time_lag)), not to cdate. This is just the lead in +# LEAD_SEQ with the time lag (time_lag) of the current forecast member +# added on. +# +# Uncomment this line only after upgrading to METplus 5.x. +#POINT_STAT_DESC = {lead?fmt=%H%M%S?shift={{time_lag}}} POINT_STAT_DESC = NA # # Name to identify observation data in output. # -OBTYPE = NDAS +OBTYPE = {{obtype}} # Regrid to specified grid. Indicate NONE if no regridding, or the grid id # (e.g. G212) @@ -134,7 +147,7 @@ POINT_STAT_REGRID_TO_GRID = NONE POINT_STAT_REGRID_METHOD = BILIN POINT_STAT_REGRID_WIDTH = 2 -POINT_STAT_OUTPUT_PREFIX = {MODEL}_{OBTYPE}_ADPUPA +POINT_STAT_OUTPUT_PREFIX = {MODEL}_ADP{FIELDNAME_IN_MET_FILEDIR_NAMES}_{OBTYPE} # sets the -obs_valid_beg command line argument (optional) # not used for this example @@ -158,14 +171,16 @@ POINT_STAT_STATION_ID = # Message types, if all message types are to be returned, leave this empty, # otherwise indicate the message types of interest. -POINT_STAT_MESSAGE_TYPE = ADPUPA -# Variables and levels as specified in the field dictionary of the METplus -# PointStat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, -# (optional) FCST_VARn_OPTION +POINT_STAT_MESSAGE_TYPE = ADP{FIELDNAME_IN_MET_FILEDIR_NAMES} # set to True to run PointStat once for each name/level combination # set to False to run PointStat once per run time including all fields POINT_STAT_ONCE_PER_FIELD = False +# +# Variables and levels as specified in the field dictionary of the METplus +# PointStat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, +# (optional) FCST_VARn_OPTION +# # fields to compare # Note: If FCST_VAR_* is set, then a corresponding OBS_VAR_* variable must be set @@ -173,49 +188,75 @@ POINT_STAT_ONCE_PER_FIELD = False BOTH_VAR1_NAME = TMP BOTH_VAR1_LEVELS = P1000, P925, P850, P700, P500, P400, P300, P250, P200, P150, P100, P50, P20, P10 +# +# Lead to use both in naming of the output .stat and .nc files and for +# lead values in those files. +# +# The specification of set_attr_lead below causes MET/METplus to use the +# lead values in the variable LEAD_SEQ set above, which are the same for +# all ensemble forecast members (i.e. regardless of whether members are +# time lagged with respect to the nominal cycle date specified by cdate). +# If set_attr_lead were not specified as below, then MET/METplus would +# get the lead from the input forecast file, and that would in general +# differ from one ensemble member to the next depending on whether the +# member is time-lagged. That would cause confusion, so here, we always +# use lead values with zero lead corresponding to cdate. +# +FCST_VAR1_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; BOTH_VAR2_NAME = RH BOTH_VAR2_LEVELS = P1000, P925, P850, P700, P500, P400, P300, P250 +FCST_VAR2_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; BOTH_VAR3_NAME = DPT BOTH_VAR3_LEVELS = P1000, P925, P850, P700, P500, P400, P300 +FCST_VAR3_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; BOTH_VAR4_NAME = UGRD BOTH_VAR4_LEVELS = P1000, P925, P850, P700, P500, P400, P300, P250, P200, P150, P100, P50, P20, P10 BOTH_VAR4_THRESH = >=2.572 ;; m/s or 5kts +FCST_VAR4_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; BOTH_VAR5_NAME = VGRD BOTH_VAR5_LEVELS = P1000, P925, P850, P700, P500, P400, P300, P250, P200, P150, P100, P50, P20, P10 BOTH_VAR5_THRESH = >=2.572 ;; m/s or 5kts +FCST_VAR5_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; BOTH_VAR6_NAME = WIND BOTH_VAR6_LEVELS = P1000, P925, P850, P700, P500, P400, P300, P250, P200, P150, P100, P50, P20, P10 BOTH_VAR6_THRESH = >=2.572, >=2.572&&<5.144, >=5.144, >=10.288, >=15.433, >=20.577, >=25.722 ;; m/s or 5, 10, 20, 30, 40, 50kts +FCST_VAR6_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; BOTH_VAR7_NAME = HGT BOTH_VAR7_LEVELS = P1000, P950, P925, P850, P700, P500, P400, P300, P250, P200, P150, P100, P50, P20, P10 +FCST_VAR7_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; BOTH_VAR8_NAME = SPFH BOTH_VAR8_LEVELS = P1000, P850, P700, P500, P400, P300 +FCST_VAR8_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; FCST_VAR9_NAME = CAPE FCST_VAR9_LEVELS = L0 -FCST_VAR9_OPTIONS = cnt_thresh = [ >0 ]; FCST_VAR9_THRESH = >500, >1000, >1500, >2000, >3000, >4000 +FCST_VAR9_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; + cnt_thresh = [ >0 ]; OBS_VAR9_NAME = CAPE OBS_VAR9_LEVELS = L0-100000 -OBS_VAR9_OPTIONS = cnt_thresh = [ >0 ]; cnt_logic = UNION; OBS_VAR9_THRESH = >500, >1000, >1500, >2000, >3000, >4000 +OBS_VAR9_OPTIONS = cnt_thresh = [ >0 ]; + cnt_logic = UNION; FCST_VAR10_NAME = HPBL FCST_VAR10_LEVELS = Z0 +FCST_VAR10_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; OBS_VAR10_NAME = PBL OBS_VAR10_LEVELS = L0 OBS_VAR10_OPTIONS = desc = "TKE"; FCST_VAR11_NAME = HGT FCST_VAR11_LEVELS = L0 -FCST_VAR11_OPTIONS = GRIB_lvl_typ = 220; +FCST_VAR11_OPTIONS = set_attr_lead = "{lead?fmt=%H%M%S}"; + GRIB_lvl_typ = 220; OBS_VAR11_NAME = PBL OBS_VAR11_LEVELS = L0 OBS_VAR11_OPTIONS = desc = "RI"; @@ -234,11 +275,13 @@ OBS_VAR12_THRESH = >500, >1000, >1500, >2000, >3000, >4000 # # Directory containing observation input to PointStat. # -OBS_POINT_STAT_INPUT_DIR = {ENV[OBS_INPUT_DIR]} +#OBS_POINT_STAT_INPUT_DIR = {ENV[OBS_INPUT_DIR]} +OBS_POINT_STAT_INPUT_DIR = {{obs_input_dir}} # # Directory containing forecast input to PointStat. # -FCST_POINT_STAT_INPUT_DIR = {ENV[INPUT_BASE]} +#FCST_POINT_STAT_INPUT_DIR = {ENV[INPUT_BASE]} +FCST_POINT_STAT_INPUT_DIR = {{fcst_input_dir}} # # Directory containing climatology mean input to PointStat. Not used in # this example. @@ -252,17 +295,19 @@ POINT_STAT_CLIMO_STDEV_INPUT_DIR = # # Directory in which to write output from PointStat. # -POINT_STAT_OUTPUT_DIR = {OUTPUT_BASE} -# # OUTPUT_BASE apparently has to be set to something; it cannot be left # to its default value. But it is not explicitly used elsewhere in this # configuration file. # -OUTPUT_BASE = {ENV[OUTPUT_BASE]} +#OUTPUT_BASE = {ENV[OUTPUT_BASE]} +#POINT_STAT_OUTPUT_DIR = {OUTPUT_BASE} +OUTPUT_BASE = {{output_base}} +POINT_STAT_OUTPUT_DIR = {{output_dir}} # # Directory for staging data. # -STAGING_DIR = {OUTPUT_BASE}/stage/UPA +#STAGING_DIR = {OUTPUT_BASE}/stage/UPA +STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. [filename_templates] @@ -270,16 +315,19 @@ STAGING_DIR = {OUTPUT_BASE}/stage/UPA # Template for observation input to PointStat relative to # OBS_POINT_STAT_INPUT_DIR. # -OBS_POINT_STAT_INPUT_TEMPLATE = {ENV[OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE]} +#OBS_POINT_STAT_INPUT_TEMPLATE = {ENV[OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE]} +OBS_POINT_STAT_INPUT_TEMPLATE = {{obs_input_fn_template}} # # Template for forecast input to PointStat relative to # FCST_POINT_STAT_INPUT_DIR. # -FCST_POINT_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_ENSMEM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 +#FCST_POINT_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_ENSMEM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 +FCST_POINT_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # # Template for output from PointStat relative to POINT_STAT_OUTPUT_DIR. # -POINT_STAT_OUTPUT_TEMPLATE = metprd/PointStat +#POINT_STAT_OUTPUT_TEMPLATE = metprd/PointStat +POINT_STAT_OUTPUT_TEMPLATE = # # Template for climatology input to PointStat relative to # POINT_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. From 5e7c27729249b03ddae195dc99ba07ee28b7b8ee Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Fri, 17 Mar 2023 21:50:58 -0600 Subject: [PATCH 070/119] Clean up commented out code. --- parm/metplus/GridStat_APCP01h.conf | 20 ++++++++------------ parm/metplus/GridStat_REFC.conf | 20 ++++++++------------ parm/metplus/GridStat_RETOP.conf | 19 ++++++++----------- parm/metplus/PointStat_SFC.conf | 19 ++++++++----------- parm/metplus/PointStat_UPA.conf | 10 ---------- 5 files changed, 32 insertions(+), 56 deletions(-) diff --git a/parm/metplus/GridStat_APCP01h.conf b/parm/metplus/GridStat_APCP01h.conf index 30550a7da3..007cffb230 100644 --- a/parm/metplus/GridStat_APCP01h.conf +++ b/parm/metplus/GridStat_APCP01h.conf @@ -51,12 +51,10 @@ LOOP_ORDER = times # # Specify the name of the METplus log file. # -#LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}} # # Specify the location and name of the final METplus conf file. # -#METPLUS_CONF = {OUTPUT_BASE}/metprd/GridStat/metplus_final.APCP_01h{ENV[DOT_ENSMEM]}.conf METPLUS_CONF = {GRID_STAT_OUTPUT_DIR}/metplus_final.{{metplus_config_fn}} # # Location of MET config file to pass to GridStat. @@ -96,8 +94,15 @@ FCST_NATIVE_DATA_TYPE = GRIB OBTYPE = {{obtype}} OBS_NATIVE_DATA_TYPE = GRIB # -# Value to enter under the DESC column in the output stat file. +# Value to enter under the DESC column in the output stat file. Here, +# we store the value of the original lead in this column, i.e. the lead +# with zero corresponding to the actual start time of the forecast (which +# is (cdate - time_lag)), not to cdate. This is just the lead in +# LEAD_SEQ with the time lag (time_lag) of the current forecast member +# added on. # +# Uncomment this line only after upgrading to METplus 5.x. +#GRID_STAT_DESC = {lead?fmt=%H%M%S?shift={{time_lag}}} GRID_STAT_DESC = NA # List of variables to compare in GridStat - FCST_VAR1 variables correspond @@ -255,13 +260,10 @@ GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE # # Directory containing observation input to GridStat. # -#OBS_GRID_STAT_INPUT_DIR = {ENV[OBS_DIR]} OBS_GRID_STAT_INPUT_DIR = {{obs_input_dir}} # # Directory containing forecast input to GridStat. # -#INPUT_BASE = {ENV[INPUT_BASE]} -#FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} FCST_GRID_STAT_INPUT_DIR = {{fcst_input_dir}} # # Directory containing climatology mean input to GridStat. Not used in @@ -280,12 +282,9 @@ GRID_STAT_CLIMO_STDEV_INPUT_DIR = # to its default value. But it is not explicitly used elsewhere in this # configuration file. # -#OUTPUT_BASE = {ENV[OUTPUT_BASE]} -#GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} OUTPUT_BASE = {{output_base}} GRID_STAT_OUTPUT_DIR = {{output_dir}} -#STAGING_DIR = {OUTPUT_BASE}/stage/APCP_01h STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. @@ -294,18 +293,15 @@ STAGING_DIR = {{staging_dir}} # Template to look for forecast input to GridStat relative to # FCST_GRID_STAT_INPUT_DIR. # -#FCST_GRID_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_ENSMEM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # # Template to look for observation input to GridStat relative to # OBS_GRID_STAT_INPUT_DIR. # -#OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2 OBS_GRID_STAT_INPUT_TEMPLATE = {{obs_input_fn_template}} # # Template for output from GridStat relative to GRID_STAT_OUTPUT_DIR. # -#GRID_STAT_OUTPUT_TEMPLATE = metprd/GridStat GRID_STAT_OUTPUT_TEMPLATE = # # Template for climatology input to GridStat relative to diff --git a/parm/metplus/GridStat_REFC.conf b/parm/metplus/GridStat_REFC.conf index c64916a7d6..6eb6f5e2fc 100644 --- a/parm/metplus/GridStat_REFC.conf +++ b/parm/metplus/GridStat_REFC.conf @@ -51,12 +51,10 @@ LOOP_ORDER = times # # Specify the name of the METplus log file. # -#LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}} # # Specify the location and name of the final METplus conf file. # -#METPLUS_CONF = {OUTPUT_BASE}/metprd/GridStat/metplus_final.REFC{ENV[DOT_ENSMEM]}.conf METPLUS_CONF = {GRID_STAT_OUTPUT_DIR}/metplus_final.{{metplus_config_fn}} # # Location of MET config file to pass to GridStat. @@ -95,8 +93,15 @@ FCST_NATIVE_DATA_TYPE = GRIB OBTYPE = {{obtype}} OBS_NATIVE_DATA_TYPE = GRIB # -# Value to enter under the DESC column in the output stat file. +# Value to enter under the DESC column in the output stat file. Here, +# we store the value of the original lead in this column, i.e. the lead +# with zero corresponding to the actual start time of the forecast (which +# is (cdate - time_lag)), not to cdate. This is just the lead in +# LEAD_SEQ with the time lag (time_lag) of the current forecast member +# added on. # +# Uncomment this line only after upgrading to METplus 5.x. +#GRID_STAT_DESC = {lead?fmt=%H%M%S?shift={{time_lag}}} GRID_STAT_DESC = NA # List of variables to compare in GridStat - FCST_VAR1 variables correspond @@ -262,13 +267,10 @@ GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE # # Directory containing observation input to GridStat. # -#OBS_GRID_STAT_INPUT_DIR = {ENV[OBS_DIR]} OBS_GRID_STAT_INPUT_DIR = {{obs_input_dir}} # # Directory containing forecast input to GridStat. # -#INPUT_BASE = {ENV[INPUT_BASE]} -#FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} FCST_GRID_STAT_INPUT_DIR = {{fcst_input_dir}} # # Directory containing climatology mean input to GridStat. Not used in @@ -287,12 +289,9 @@ GRID_STAT_CLIMO_STDEV_INPUT_DIR = # to its default value. But it is not explicitly used elsewhere in this # configuration file. # -#OUTPUT_BASE = {ENV[OUTPUT_BASE]} -#GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} OUTPUT_BASE = {{output_base}} GRID_STAT_OUTPUT_DIR = {{output_dir}} -#STAGING_DIR = {OUTPUT_BASE}/stage/REFC STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. @@ -301,18 +300,15 @@ STAGING_DIR = {{staging_dir}} # Template to look for forecast input to GridStat relative to # FCST_GRID_STAT_INPUT_DIR. # -#FCST_GRID_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_ENSMEM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # # Template to look for observation input to GridStat relative to # OBS_GRID_STAT_INPUT_DIR. # -#OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/MergedReflectivityQCComposite_00.50_{valid?fmt=%Y%m%d}-{valid?fmt=%H}0000.grib2 OBS_GRID_STAT_INPUT_TEMPLATE = {{obs_input_fn_template}} # # Template for output from GridStat relative to GRID_STAT_OUTPUT_DIR. # -#GRID_STAT_OUTPUT_TEMPLATE = metprd/GridStat GRID_STAT_OUTPUT_TEMPLATE = # # Template for climatology input to GridStat relative to diff --git a/parm/metplus/GridStat_RETOP.conf b/parm/metplus/GridStat_RETOP.conf index 8511bda890..a7d82f3929 100644 --- a/parm/metplus/GridStat_RETOP.conf +++ b/parm/metplus/GridStat_RETOP.conf @@ -51,7 +51,6 @@ LOOP_ORDER = times # # Specify the name of the METplus log file. # -#LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}} # # Specify the location and name of the final METplus conf file. @@ -94,8 +93,15 @@ FCST_NATIVE_DATA_TYPE = GRIB OBTYPE = {{obtype}} OBS_NATIVE_DATA_TYPE = GRIB # -# Value to enter under the DESC column in the output stat file. +# Value to enter under the DESC column in the output stat file. Here, +# we store the value of the original lead in this column, i.e. the lead +# with zero corresponding to the actual start time of the forecast (which +# is (cdate - time_lag)), not to cdate. This is just the lead in +# LEAD_SEQ with the time lag (time_lag) of the current forecast member +# added on. # +# Uncomment this line only after upgrading to METplus 5.x. +#GRID_STAT_DESC = {lead?fmt=%H%M%S?shift={{time_lag}}} GRID_STAT_DESC = NA # List of variables to compare in GridStat - FCST_VAR1 variables correspond @@ -262,13 +268,10 @@ GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE # # Directory containing observation input to GridStat. # -#OBS_GRID_STAT_INPUT_DIR = {ENV[OBS_DIR]} OBS_GRID_STAT_INPUT_DIR = {{obs_input_dir}} # # Directory containing forecast input to GridStat. # -#INPUT_BASE = {ENV[INPUT_BASE]} -#FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} FCST_GRID_STAT_INPUT_DIR = {{fcst_input_dir}} # # Directory containing climatology mean input to GridStat. Not used in @@ -287,12 +290,9 @@ GRID_STAT_CLIMO_STDEV_INPUT_DIR = # to its default value. But it is not explicitly used elsewhere in this # configuration file. # -#OUTPUT_BASE = {ENV[OUTPUT_BASE]} -#GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} OUTPUT_BASE = {{output_base}} GRID_STAT_OUTPUT_DIR = {{output_dir}} -#STAGING_DIR = {OUTPUT_BASE}/stage/RETOP STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. @@ -301,18 +301,15 @@ STAGING_DIR = {{staging_dir}} # Template to look for forecast input to GridStat relative to # FCST_GRID_STAT_INPUT_DIR. # -#FCST_GRID_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_ENSMEM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # # Template to look for observation input to GridStat relative to # OBS_GRID_STAT_INPUT_DIR. # -#OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/EchoTop_18_00.50_{valid?fmt=%Y%m%d}-{valid?fmt=%H%M%S}.grib2 OBS_GRID_STAT_INPUT_TEMPLATE = {{obs_input_fn_template}} # # Template for output from GridStat relative to GRID_STAT_OUTPUT_DIR. # -#GRID_STAT_OUTPUT_TEMPLATE = metprd/GridStat GRID_STAT_OUTPUT_TEMPLATE = # # Template for climatology input to GridStat relative to diff --git a/parm/metplus/PointStat_SFC.conf b/parm/metplus/PointStat_SFC.conf index 29631ac672..30ec3f878e 100644 --- a/parm/metplus/PointStat_SFC.conf +++ b/parm/metplus/PointStat_SFC.conf @@ -50,12 +50,10 @@ FIELDNAME_IN_MET_FILEDIR_NAMES = {{fieldname_in_met_filedir_names}} # # Specify the name of the METplus log file. # -#LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_SFC{ENV[USCORE_ENSMEM_NAME_OR_NULL]}_{ENV[CDATE]} LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}} # # Specify the location and name of the final METplus conf file. # -#METPLUS_CONF = {OUTPUT_BASE}/metprd/PointStat/metplus_final.SFC{ENV[DOT_ENSMEM]}.conf METPLUS_CONF = {POINT_STAT_OUTPUT_DIR}/metplus_final.{{metplus_config_fn}} # Location of MET config file to pass to GridStat @@ -126,8 +124,15 @@ POINT_STAT_OFFSETS = 0 # MODEL = {{vx_fcst_model_name}}{{uscore_ensmem_name_or_null}} # -# Value to enter under the DESC column in the output stat file. +# Value to enter under the DESC column in the output stat file. Here, +# we store the value of the original lead in this column, i.e. the lead +# with zero corresponding to the actual start time of the forecast (which +# is (cdate - time_lag)), not to cdate. This is just the lead in +# LEAD_SEQ with the time lag (time_lag) of the current forecast member +# added on. # +# Uncomment this line only after upgrading to METplus 5.x. +#POINT_STAT_DESC = {lead?fmt=%H%M%S?shift={{time_lag}}} POINT_STAT_DESC = NA # # Name to identify observation data in output. @@ -272,12 +277,10 @@ BOTH_VAR12_LEVELS = Z2 # # Directory containing observation input to PointStat. # -#OBS_POINT_STAT_INPUT_DIR = {ENV[OBS_INPUT_DIR]} OBS_POINT_STAT_INPUT_DIR = {{obs_input_dir}} # # Directory containing forecast input to PointStat. # -#FCST_POINT_STAT_INPUT_DIR = {ENV[INPUT_BASE]} FCST_POINT_STAT_INPUT_DIR = {{fcst_input_dir}} # # Directory containing climatology mean input to PointStat. Not used in @@ -296,14 +299,11 @@ POINT_STAT_CLIMO_STDEV_INPUT_DIR = # to its default value. But it is not explicitly used elsewhere in this # configuration file. # -#OUTPUT_BASE = {ENV[OUTPUT_BASE]} -#POINT_STAT_OUTPUT_DIR = {OUTPUT_BASE} OUTPUT_BASE = {{output_base}} POINT_STAT_OUTPUT_DIR = {{output_dir}} # # Directory for staging data. # -#STAGING_DIR = {OUTPUT_BASE}/stage/SFC STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. @@ -312,18 +312,15 @@ STAGING_DIR = {{staging_dir}} # Template for observation input to PointStat relative to # OBS_POINT_STAT_INPUT_DIR. # -#OBS_POINT_STAT_INPUT_TEMPLATE = {ENV[OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE]} OBS_POINT_STAT_INPUT_TEMPLATE = {{obs_input_fn_template}} # # Template for forecast input to PointStat relative to # FCST_POINT_STAT_INPUT_DIR. # -#FCST_POINT_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_ENSMEM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 FCST_POINT_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # # Template for output from PointStat relative to POINT_STAT_OUTPUT_DIR. # -#POINT_STAT_OUTPUT_TEMPLATE = metprd/PointStat POINT_STAT_OUTPUT_TEMPLATE = # # Template for climatology input to PointStat relative to diff --git a/parm/metplus/PointStat_UPA.conf b/parm/metplus/PointStat_UPA.conf index da3f2ee84a..64994d0af3 100644 --- a/parm/metplus/PointStat_UPA.conf +++ b/parm/metplus/PointStat_UPA.conf @@ -50,12 +50,10 @@ FIELDNAME_IN_MET_FILEDIR_NAMES = {{fieldname_in_met_filedir_names}} # # Specify the name of the METplus log file. # -#LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_UPA{ENV[USCORE_ENSMEM_NAME_OR_NULL]}_{ENV[CDATE]} LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}} # # Specify the location and name of the final METplus conf file. # -#METPLUS_CONF = {OUTPUT_BASE}/metprd/PointStat/metplus_final.UPA{ENV[DOT_ENSMEM]}.conf METPLUS_CONF = {POINT_STAT_OUTPUT_DIR}/metplus_final.{{metplus_config_fn}} # Location of MET config file to pass to GridStat @@ -275,12 +273,10 @@ OBS_VAR12_THRESH = >500, >1000, >1500, >2000, >3000, >4000 # # Directory containing observation input to PointStat. # -#OBS_POINT_STAT_INPUT_DIR = {ENV[OBS_INPUT_DIR]} OBS_POINT_STAT_INPUT_DIR = {{obs_input_dir}} # # Directory containing forecast input to PointStat. # -#FCST_POINT_STAT_INPUT_DIR = {ENV[INPUT_BASE]} FCST_POINT_STAT_INPUT_DIR = {{fcst_input_dir}} # # Directory containing climatology mean input to PointStat. Not used in @@ -299,14 +295,11 @@ POINT_STAT_CLIMO_STDEV_INPUT_DIR = # to its default value. But it is not explicitly used elsewhere in this # configuration file. # -#OUTPUT_BASE = {ENV[OUTPUT_BASE]} -#POINT_STAT_OUTPUT_DIR = {OUTPUT_BASE} OUTPUT_BASE = {{output_base}} POINT_STAT_OUTPUT_DIR = {{output_dir}} # # Directory for staging data. # -#STAGING_DIR = {OUTPUT_BASE}/stage/UPA STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. @@ -315,18 +308,15 @@ STAGING_DIR = {{staging_dir}} # Template for observation input to PointStat relative to # OBS_POINT_STAT_INPUT_DIR. # -#OBS_POINT_STAT_INPUT_TEMPLATE = {ENV[OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE]} OBS_POINT_STAT_INPUT_TEMPLATE = {{obs_input_fn_template}} # # Template for forecast input to PointStat relative to # FCST_POINT_STAT_INPUT_DIR. # -#FCST_POINT_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_ENSMEM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 FCST_POINT_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # # Template for output from PointStat relative to POINT_STAT_OUTPUT_DIR. # -#POINT_STAT_OUTPUT_TEMPLATE = metprd/PointStat POINT_STAT_OUTPUT_TEMPLATE = # # Template for climatology input to PointStat relative to From eb4c75e7f328b489ffedff9f1e1c932ed883ed3d Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Fri, 17 Mar 2023 22:46:20 -0600 Subject: [PATCH 071/119] In ROCOTO template XML, modify GridStat tasks for APCP > 01 hour so that the tasks work with Jinja template METplus conf file; remove unneeded variables from other tasks. --- parm/FV3LAM_wflow.xml | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/parm/FV3LAM_wflow.xml b/parm/FV3LAM_wflow.xml index abea178dfa..05f6a8cef9 100644 --- a/parm/FV3LAM_wflow.xml +++ b/parm/FV3LAM_wflow.xml @@ -1787,7 +1787,6 @@ done by the scripts that this task calls). VARAPCP ACCUM_HH01 MET_TOOLGRIDSTAT - obs_or_fcstobs USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} {%- if do_ensemble %} @@ -1819,7 +1818,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX" {{ nnodes_run_met_gridstat_vx_apcp03h }}:ppn={{ ppn_run_met_gridstat_vx_apcp03h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_apcp03h }} @@ -1837,9 +1836,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(3, fcst_len_hrs+1, 3) %}{{ " %02d" % h }}{% endfor %} + OBTYPECCPA VARAPCP ACCUM_HH03 + MET_TOOLGRIDSTAT USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} {%- if do_ensemble %} @@ -1864,7 +1864,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX" {{ nnodes_run_met_gridstat_vx_apcp06h }}:ppn={{ ppn_run_met_gridstat_vx_apcp06h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_apcp06h }} @@ -1882,9 +1882,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(6, fcst_len_hrs+1, 6) %}{{ " %02d" % h }}{% endfor %} + OBTYPECCPA VARAPCP ACCUM_HH06 + MET_TOOLGRIDSTAT USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} {%- if do_ensemble %} @@ -1909,7 +1910,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX" {{ nnodes_run_met_gridstat_vx_apcp24h }}:ppn={{ ppn_run_met_gridstat_vx_apcp24h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_apcp24h }} @@ -1927,9 +1928,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(24, fcst_len_hrs+1, 24) %}{{ " %02d" % h }}{% endfor %} + OBTYPECCPA VARAPCP ACCUM_HH24 + MET_TOOLGRIDSTAT USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} {%- if do_ensemble %} @@ -1975,7 +1977,6 @@ done by the scripts that this task calls). VARREFC ACCUM_HH01 MET_TOOLGRIDSTAT - obs_or_fcstobs USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} {%- if do_ensemble %} @@ -2028,7 +2029,6 @@ done by the scripts that this task calls). VARRETOP ACCUM_HH01 MET_TOOLGRIDSTAT - obs_or_fcstobs USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} {%- if do_ensemble %} @@ -2083,7 +2083,6 @@ done by the scripts that this task calls). VARSFC ACCUM_HH01 MET_TOOLPOINTSTAT - obs_or_fcstobs USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} {%- if do_ensemble %} @@ -2136,7 +2135,6 @@ done by the scripts that this task calls). VARUPA ACCUM_HH01 MET_TOOLPOINTSTAT - obs_or_fcstobs USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} {%- if do_ensemble %} From ffec5ac34fe407523e37fc142fc0aea466d5f8f6 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Sat, 18 Mar 2023 00:39:07 -0600 Subject: [PATCH 072/119] Minor edits to comments and spacing. --- scripts/exregional_run_met_gridstat_vx_ensmean.sh | 5 ++--- scripts/exregional_run_met_pcpcombine.sh | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/scripts/exregional_run_met_gridstat_vx_ensmean.sh b/scripts/exregional_run_met_gridstat_vx_ensmean.sh index eab1f3a4e1..9c8a3d6370 100755 --- a/scripts/exregional_run_met_gridstat_vx_ensmean.sh +++ b/scripts/exregional_run_met_gridstat_vx_ensmean.sh @@ -21,7 +21,7 @@ source_config_for_task "task_run_vx_ensgrid_mean|task_run_post" ${GLOBAL_VAR_DEF # #----------------------------------------------------------------------- # -# Get the full path to the file in which this script/function is located +# 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). # @@ -122,7 +122,7 @@ fi # #----------------------------------------------------------------------- # -# Check for existence of top-level OBS_DIR +# Check for existence of top-level OBS_DIR. # #----------------------------------------------------------------------- # @@ -130,7 +130,6 @@ if [[ ! -d "$OBS_DIR" ]]; then print_err_msg_exit "\ Exiting: OBS_DIR does not exist." fi - # #----------------------------------------------------------------------- # diff --git a/scripts/exregional_run_met_pcpcombine.sh b/scripts/exregional_run_met_pcpcombine.sh index 9e93e64bd7..8889d113c7 100755 --- a/scripts/exregional_run_met_pcpcombine.sh +++ b/scripts/exregional_run_met_pcpcombine.sh @@ -64,7 +64,7 @@ Entering script: \"${scrfunc_fn}\" In directory: \"${scrfunc_dir}\" This is the ex-script for the task that runs the METplus ${met_tool_pc} -that combines hourly accumulated precipitation (APCP) data to generate +tool to combine hourly accumulated precipitation (APCP) data to generate files containing multi-hour accumulated precipitation (e.g. 3-hour, 6- hour, 24-hour). The input files can come from either observations or a forecast. From 8110865c32e7c168ecbc4b1457167f101c04fc6a Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Sat, 18 Mar 2023 00:40:02 -0600 Subject: [PATCH 073/119] Modify PointStat_ensmean tasks for SFC and UPA in ROCOTO XML and corresponding METplus conf files to allow use of templates. --- parm/FV3LAM_wflow.xml | 12 ++++-- parm/metplus/PointStat_ensmean_SFC.conf | 43 +++++++++++++--------- parm/metplus/PointStat_ensmean_UPA.conf | 49 ++++++++++++++----------- 3 files changed, 61 insertions(+), 43 deletions(-) diff --git a/parm/FV3LAM_wflow.xml b/parm/FV3LAM_wflow.xml index 05f6a8cef9..1126d1f65b 100644 --- a/parm/FV3LAM_wflow.xml +++ b/parm/FV3LAM_wflow.xml @@ -2611,7 +2611,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSMEAN" {{ nnodes_run_met_pointstat_vx_ensmean_sfc }}:ppn={{ ppn_run_met_pointstat_vx_ensmean_sfc }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_pointstat_vx_ensmean_sfc }} @@ -2629,8 +2629,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; + OBTYPENDAS VARSFC - ACCUM_HH + ACCUM_HH01 + MET_TOOLPOINTSTAT @@ -2644,7 +2646,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSMEAN" {{ nnodes_run_met_pointstat_vx_ensmean_upa }}:ppn={{ ppn_run_met_pointstat_vx_ensmean_upa }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_pointstat_vx_ensmean_upa }} @@ -2662,8 +2664,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; + OBTYPENDAS VARUPA - ACCUM_HH + ACCUM_HH01 + MET_TOOLPOINTSTAT diff --git a/parm/metplus/PointStat_ensmean_SFC.conf b/parm/metplus/PointStat_ensmean_SFC.conf index 7f149d618d..ab16a84e43 100644 --- a/parm/metplus/PointStat_ensmean_SFC.conf +++ b/parm/metplus/PointStat_ensmean_SFC.conf @@ -19,10 +19,10 @@ LOOP_BY = INIT INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} +INIT_BEG = {{cdate}} # End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} +INIT_END = {{cdate}} # Increment between METplus runs (in seconds if no units are specified). # Must be >= 60 seconds. @@ -31,7 +31,7 @@ INIT_INCREMENT = 3600 # List of forecast leads to process for each run time (init or valid) # In hours if units are not specified # If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[FHR_LIST]} +LEAD_SEQ = {{fhr_list}} # Order of loops to process data - Options are times, processes # Not relevant if only one item is in the PROCESS_LIST @@ -45,14 +45,16 @@ LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for PointStat only LOG_POINT_STAT_VERBOSITY = 2 + +FIELDNAME_IN_MET_FILEDIR_NAMES = {{fieldname_in_met_filedir_names}} # # Specify the name of the METplus log file. # -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_ensmean_SFC_{ENV[CDATE]} +LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}} # # Specify the location and name of the final METplus conf file. # -METPLUS_CONF = {OUTPUT_BASE}/{ENV[CDATE]}/metprd/PointStat_ensmean/metplus_final.SFC.conf +METPLUS_CONF = {POINT_STAT_OUTPUT_DIR}/metplus_final.{{metplus_config_fn}} # # Location of MET config file to pass to GridStat # References PARM_BASE, which is the location of the parm directory @@ -121,13 +123,13 @@ POINT_STAT_OFFSETS = 0 # suffix to MODEL that identifies the data as that for the ensemble # mean. This makes it easier to identify each curve. # -MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensmean +MODEL = {{vx_fcst_model_name}}_ensmean POINT_STAT_DESC = NA # # Name to identify observation data in output. # -OBTYPE = NDAS +OBTYPE = {{obtype}} # Regrid to specified grid. Indicate NONE if no regridding, or the grid id # (e.g. G212) @@ -135,7 +137,7 @@ POINT_STAT_REGRID_TO_GRID = NONE POINT_STAT_REGRID_METHOD = BILIN POINT_STAT_REGRID_WIDTH = 2 -POINT_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_ADPSFC_{OBTYPE}_ensmean +POINT_STAT_OUTPUT_PREFIX = {MODEL}_ADP{FIELDNAME_IN_MET_FILEDIR_NAMES}_{OBTYPE} # sets the -obs_valid_beg command line argument (optional) # not used for this example @@ -159,10 +161,12 @@ POINT_STAT_STATION_ID = # Message types, if all message types are to be returned, leave this empty, # otherwise indicate the message types of interest. -POINT_STAT_MESSAGE_TYPE = ADPSFC +POINT_STAT_MESSAGE_TYPE = ADP{FIELDNAME_IN_MET_FILEDIR_NAMES} +# # Variables and levels as specified in the field dictionary of the METplus # PointStat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, # (optional) FCST_VARn_OPTION +# # set to True to run PointStat once for each name/level combination # set to False to run PointStat once per run time including all fields @@ -200,12 +204,11 @@ OBS_VAR3_THRESH = >=5, >=10, >=15 # # Directory containing observation input to PointStat. # -OBS_POINT_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/Pb2nc_obs +OBS_POINT_STAT_INPUT_DIR = {{obs_input_dir}} # # Directory containing forecast input to PointStat. # -INPUT_BASE = {ENV[INPUT_BASE]} -FCST_POINT_STAT_INPUT_DIR = {INPUT_BASE} +FCST_POINT_STAT_INPUT_DIR = {{fcst_input_dir}} # # Directory containing climatology mean input to PointStat. Not used in # this example. @@ -219,10 +222,14 @@ POINT_STAT_CLIMO_STDEV_INPUT_DIR = # # Directory in which to write output from PointStat. # -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -POINT_STAT_OUTPUT_DIR = {OUTPUT_BASE} +# OUTPUT_BASE apparently has to be set to something; it cannot be left +# to its default value. But it is not explicitly used elsewhere in this +# configuration file. +# +OUTPUT_BASE = {{output_base}} +POINT_STAT_OUTPUT_DIR = {{output_dir}} -STAGING_DIR = {OUTPUT_BASE}/stage/SFC_ensmean +STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. [filename_templates] @@ -230,16 +237,16 @@ STAGING_DIR = {OUTPUT_BASE}/stage/SFC_ensmean # Template for forecast input to PointStat relative to # FCST_POINT_STAT_INPUT_DIR. # -FCST_POINT_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_ADPSFC_{OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc +FCST_POINT_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # # Template for observation input to PointStat relative to # OBS_POINT_STAT_INPUT_DIR. # -OBS_POINT_STAT_INPUT_TEMPLATE = prepbufr.ndas{ENV[DOT_ENSMEM]}.{valid?fmt=%Y%m%d%H}.nc +OBS_POINT_STAT_INPUT_TEMPLATE = {{obs_input_fn_template}} # # Template for output from PointStat relative to POINT_STAT_OUTPUT_DIR. # -POINT_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/PointStat_ensmean +POINT_STAT_OUTPUT_TEMPLATE = # # Template for climatology input to PointStat relative to # POINT_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. diff --git a/parm/metplus/PointStat_ensmean_UPA.conf b/parm/metplus/PointStat_ensmean_UPA.conf index 0ab545d0a8..d9513c8d5c 100644 --- a/parm/metplus/PointStat_ensmean_UPA.conf +++ b/parm/metplus/PointStat_ensmean_UPA.conf @@ -19,10 +19,10 @@ LOOP_BY = INIT INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} +INIT_BEG = {{cdate}} # End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} +INIT_END = {{cdate}} # Increment between METplus runs (in seconds if no units are specified). # Must be >= 60 seconds. @@ -31,7 +31,7 @@ INIT_INCREMENT = 3600 # List of forecast leads to process for each run time (init or valid) # In hours if units are not specified # If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[FHR_LIST]} +LEAD_SEQ = {{fhr_list}} # Order of loops to process data - Options are times, processes # Not relevant if only one item is in the PROCESS_LIST @@ -45,14 +45,16 @@ LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for PointStat only LOG_POINT_STAT_VERBOSITY = 2 + +FIELDNAME_IN_MET_FILEDIR_NAMES = {{fieldname_in_met_filedir_names}} # # Specify the name of the METplus log file. # -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_ensmean_UPA_{ENV[CDATE]} +LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}} # # Specify the location and name of the final METplus conf file. # -METPLUS_CONF = {OUTPUT_BASE}/{ENV[CDATE]}/metprd/PointStat_ensmean/metplus_final.UPA.conf +METPLUS_CONF = {POINT_STAT_OUTPUT_DIR}/metplus_final.{{metplus_config_fn}} # # Location of MET config file to pass to GridStat # References PARM_BASE, which is the location of the parm directory @@ -121,13 +123,13 @@ POINT_STAT_OFFSETS = 0 # suffix to MODEL that identifies the data as that for the ensemble # mean. This makes it easier to identify each curve. # -MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensmean +MODEL = {{vx_fcst_model_name}}_mean POINT_STAT_DESC = NA # # Name to identify observation data in output. # -OBTYPE = NDAS +OBTYPE = {{obtype}} # Regrid to specified grid. Indicate NONE if no regridding, or the grid id # (e.g. G212) @@ -135,7 +137,7 @@ POINT_STAT_REGRID_TO_GRID = NONE POINT_STAT_REGRID_METHOD = BILIN POINT_STAT_REGRID_WIDTH = 2 -POINT_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_ADPUPA_{OBTYPE}_ensmean +POINT_STAT_OUTPUT_PREFIX = {MODEL}_ADP{FIELDNAME_IN_MET_FILEDIR_NAMES}_{OBTYPE} # sets the -obs_valid_beg command line argument (optional) # not used for this example @@ -159,14 +161,16 @@ POINT_STAT_STATION_ID = # Message types, if all message types are to be returned, leave this empty, # otherwise indicate the message types of interest. -POINT_STAT_MESSAGE_TYPE = ADPUPA -# Variables and levels as specified in the field dictionary of the METplus -# PointStat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, -# (optional) FCST_VARn_OPTION +POINT_STAT_MESSAGE_TYPE = ADP{FIELDNAME_IN_MET_FILEDIR_NAMES} # set to True to run PointStat once for each name/level combination # set to False to run PointStat once per run time including all fields POINT_STAT_ONCE_PER_FIELD = False +# +# Variables and levels as specified in the field dictionary of the METplus +# PointStat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, +# (optional) FCST_VARn_OPTION +# # fields to compare # Note: If FCST_VAR_* is set, then a corresponding OBS_VAR_* variable must be set @@ -275,12 +279,11 @@ OBS_VAR12_THRESH = <500, <1500, >1500 # # Directory containing observation input to PointStat. # -OBS_POINT_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/Pb2nc_obs +OBS_POINT_STAT_INPUT_DIR = {{obs_input_dir}} # # Directory containing forecast input to PointStat. # -INPUT_BASE = {ENV[INPUT_BASE]} -FCST_POINT_STAT_INPUT_DIR = {INPUT_BASE} +FCST_POINT_STAT_INPUT_DIR = {{fcst_input_dir}} # # Directory containing climatology mean input to PointStat. Not used in # this example. @@ -294,10 +297,14 @@ POINT_STAT_CLIMO_STDEV_INPUT_DIR = # # Directory in which to write output from PointStat. # -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -POINT_STAT_OUTPUT_DIR = {OUTPUT_BASE} +# OUTPUT_BASE apparently has to be set to something; it cannot be left +# to its default value. But it is not explicitly used elsewhere in this +# configuration file. +# +OUTPUT_BASE = {{output_base}} +POINT_STAT_OUTPUT_DIR = {{output_dir}} -STAGING_DIR = {OUTPUT_BASE}/stage/UPA_ensmean +STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. [filename_templates] @@ -305,16 +312,16 @@ STAGING_DIR = {OUTPUT_BASE}/stage/UPA_ensmean # Template for forecast input to PointStat relative to # FCST_POINT_STAT_INPUT_DIR. # -FCST_POINT_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_ADPUPA_{OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc +FCST_POINT_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # # Template for observation input to PointStat relative to # OBS_POINT_STAT_INPUT_DIR. # -OBS_POINT_STAT_INPUT_TEMPLATE = prepbufr.ndas{ENV[DOT_ENSMEM]}.{valid?fmt=%Y%m%d%H}.nc +OBS_POINT_STAT_INPUT_TEMPLATE = {{obs_input_fn_template}} # # Template for output from PointStat relative to POINT_STAT_OUTPUT_DIR. # -POINT_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/PointStat_ensmean +POINT_STAT_OUTPUT_TEMPLATE = # # Template for climatology input to PointStat relative to # POINT_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. From 7e3f56eae718527304e2c548d15bfe35b542d0f2 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Sat, 18 Mar 2023 03:23:47 -0600 Subject: [PATCH 074/119] Modify GridStat_ensmean tasks for APCP 01, 03, 06, and 24 hours such that they use templates for the METplus config files. --- parm/FV3LAM_wflow.xml | 20 +- parm/metplus/GridStat_ensmean_APCP01h.conf | 254 +++++++++------ parm/metplus/GridStat_ensmean_APCPgt01h.conf | 322 +++++++++++++++++++ 3 files changed, 489 insertions(+), 107 deletions(-) create mode 100644 parm/metplus/GridStat_ensmean_APCPgt01h.conf diff --git a/parm/FV3LAM_wflow.xml b/parm/FV3LAM_wflow.xml index 1126d1f65b..04089934d6 100644 --- a/parm/FV3LAM_wflow.xml +++ b/parm/FV3LAM_wflow.xml @@ -2463,7 +2463,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSMEAN" {{ nnodes_run_met_gridstat_vx_ensmean_apcp01h }}:ppn={{ ppn_run_met_gridstat_vx_ensmean_apcp01h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_ensmean_apcp01h }} @@ -2481,9 +2481,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + OBTYPECCPA VARAPCP ACCUM_HH01 + MET_TOOLGRIDSTAT @@ -2499,7 +2500,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSMEAN" {{ nnodes_run_met_gridstat_vx_ensmean_apcp03h }}:ppn={{ ppn_run_met_gridstat_vx_ensmean_apcp03h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_ensmean_apcp03h }} @@ -2517,9 +2518,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(3, fcst_len_hrs+1, 3) %}{{ " %02d" % h }}{% endfor %} + OBTYPECCPA VARAPCP ACCUM_HH03 + MET_TOOLGRIDSTAT @@ -2536,7 +2538,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSMEAN" {{ nnodes_run_met_gridstat_vx_ensmean_apcp06h }}:ppn={{ ppn_run_met_gridstat_vx_ensmean_apcp06h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_ensmean_apcp06h }} @@ -2554,9 +2556,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(6, fcst_len_hrs+1, 6) %}{{ " %02d" % h }}{% endfor %} + OBTYPECCPA VARAPCP ACCUM_HH06 + MET_TOOLGRIDSTAT @@ -2573,7 +2576,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSMEAN" {{ nnodes_run_met_gridstat_vx_ensmean_apcp24h }}:ppn={{ ppn_run_met_gridstat_vx_ensmean_apcp24h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_ensmean_apcp24h }} @@ -2591,9 +2594,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(24, fcst_len_hrs+1, 24) %}{{ " %02d" % h }}{% endfor %} + OBTYPECCPA VARAPCP ACCUM_HH24 + MET_TOOLGRIDSTAT diff --git a/parm/metplus/GridStat_ensmean_APCP01h.conf b/parm/metplus/GridStat_ensmean_APCP01h.conf index fb97133fc1..5e215f5395 100644 --- a/parm/metplus/GridStat_ensmean_APCP01h.conf +++ b/parm/metplus/GridStat_ensmean_APCP01h.conf @@ -1,4 +1,4 @@ -# Ensemble Mean GridStat METplus Configuration +# Ensemble mean GridStat METplus Configuration # section heading for [config] variables - all items below this line and # before the next section heading correspond to the [config] section @@ -14,26 +14,26 @@ PROCESS_LIST = GridStat # VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set LOOP_BY = INIT -# Format of INIT_BEG and INT_END using % items +# Format of INIT_BEG and INIT_END using % items # %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. # see www.strftime.org for more information # %Y%m%d%H expands to YYYYMMDDHH INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} +INIT_BEG = {{cdate}} # End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} +INIT_END = {{cdate}} -# Increment between METplus runs (in seconds if no units are specified) -# Must be >= 60 seconds +# Increment between METplus runs (in seconds if no units are specified). +# Must be >= 60 seconds. INIT_INCREMENT = 3600 # List of forecast leads to process for each run time (init or valid) # In hours if units are not specified # If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[fhr_list]} +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 @@ -48,20 +48,22 @@ LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 -LOG_DIR = {OUTPUT_BASE}/log - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensmean/metplus_final.APCP01.conf - -# Location of MET config file to pass to GridStat +# +# 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_TO_GRID = FCST GRID_STAT_REGRID_VLD_THRESH = 0.5 GRID_STAT_REGRID_METHOD = BUDGET GRID_STAT_REGRID_WIDTH = 2 @@ -75,12 +77,21 @@ GRID_STAT_REGRID_SHAPE = SQUARE #GRID_STAT_GRID_WEIGHT_FLAG = -# Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensmean -FCST_NATIVE_DATA_TYPE = GRIB +# +# 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 -# Name to identify observation data in output -OBTYPE = CCPA +FCST_NATIVE_DATA_TYPE = GRIB +# +# Name to identify observation data in output. +# +OBTYPE = {{obtype}} OBS_NATIVE_DATA_TYPE = GRIB # set the desc value in the GridStat MET config file @@ -92,38 +103,65 @@ GRID_STAT_DESC = NA # 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; - +# # Name of forecast variable 1 -FCST_VAR1_NAME = APCP_01_A01_ENS_MEAN - -# List of levels to evaluate for forecast variable 1 -# A03 = 3 hour accumulation in GRIB file -FCST_VAR1_LEVELS = A01 - +# 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}}_A01_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 -# forecast variable 1 -#FCST_VAR1_THRESH = gt12.7, gt25.4, gt50.8, gt76.2 -BOTH_VAR1_THRESH = gt0.0,ge0.254,ge0.508,ge2.54 - -#FCST_GRID_STAT_FILE_TYPE = - -# Name of observation variable 1 -OBS_VAR1_NAME = APCP - -# List of levels to evaluate for observation variable 1 -# (*,*) is NetCDF notation - must include quotes around these values! -# must be the same length as FCST_VAR1_LEVELS -OBS_VAR1_LEVELS = A01 - -# List of thresholds to evaluate for each name/level combination for -# observation variable 1 -#OBS_VAR1_THRESH = gt12.7, gt25.4, gt50.8, gt76.2 - -#OBS_GRID_STAT_FILE_TYPE = - +# observation and forecast variable 1. +# +BOTH_VAR1_THRESH = {{field_thresholds}} +# +# Name of 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} +# # 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. +# 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 @@ -146,14 +184,16 @@ GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5 # 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 +# +# 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 = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_ensmean +GRID_STAT_OUTPUT_PREFIX = {MODEL}_{{fieldname_in_met_filedir_names}}_{OBTYPE} # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = @@ -185,7 +225,7 @@ GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_ens GRID_STAT_MASK_GRID = # Statistical output types -GRID_STAT_OUTPUT_FLAG_FHO = STAT +GRID_STAT_OUTPUT_FLAG_FHO = STAT GRID_STAT_OUTPUT_FLAG_CTC = STAT GRID_STAT_OUTPUT_FLAG_CTS = STAT #GRID_STAT_OUTPUT_FLAG_MCTC = NONE @@ -209,62 +249,78 @@ GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT # 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_LATLON = TRUE +GRID_STAT_NC_PAIRS_FLAG_RAW = TRUE GRID_STAT_NC_PAIRS_FLAG_DIFF = FALSE GRID_STAT_NC_PAIRS_FLAG_CLIMO = FALSE #GRID_STAT_NC_PAIRS_FLAG_CLIMO_CDP = FALSE GRID_STAT_NC_PAIRS_FLAG_WEIGHT = FALSE -GRID_STAT_NC_PAIRS_FLAG_NBRHD = FALSE +GRID_STAT_NC_PAIRS_FLAG_NBRHD = TRUE #GRID_STAT_NC_PAIRS_FLAG_FOURIER = FALSE #GRID_STAT_NC_PAIRS_FLAG_GRADIENT = FALSE #GRID_STAT_NC_PAIRS_FLAG_DISTANCE_MAP = FALSE GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE -# End of [config] section and start of [dir] section +# End of [config] section and start of [dir] section. [dir] - -# directory containing forecast input to GridStat -INPUT_BASE = {ENV[INPUT_BASE]} -FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} - -# directory containing observation input to GridStat -OBS_GRID_STAT_INPUT_DIR = {ENV[OBS_DIR]} - -# directory containing climatology mean input to GridStat -# Not used in this example +# +# 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 +# +# Directory containing climatology mean input to GridStat. Not used in +# this example. +# GRID_STAT_CLIMO_STDEV_INPUT_DIR = - -# directory to write output from GridStat -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} - -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_01h_ensmean - -# End of [dir] section and start of [filename_templates] section +# +# 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}} + +STAGING_DIR = {{staging_dir}} + +# End of [dir] section and start of [filename_templates] section. [filename_templates] - -# Template to look for forecast input to GridStat relative to FCST_GRID_STAT_INPUT_DIR -FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc - -# Template to look for observation input to GridStat relative to OBS_GRID_STAT_INPUT_DIR -OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2 - -# Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensmean - -# Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# Template for forecast input to GridStat relative to +# FCST_GRID_STAT_INPUT_DIR. +# +FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} +# +# Template for observation input to GridStat relative to +# OBS_GRID_STAT_INPUT_DIR. +# +OBS_GRID_STAT_INPUT_TEMPLATE = {{obs_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 to look for climatology input to GridStat relative to GRID_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# 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 = - -# Used to specify one or more verification mask files for GridStat -# Not used for this example +# +# 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_APCPgt01h.conf b/parm/metplus/GridStat_ensmean_APCPgt01h.conf new file mode 100644 index 0000000000..ab112fb3d3 --- /dev/null +++ b/parm/metplus/GridStat_ensmean_APCPgt01h.conf @@ -0,0 +1,322 @@ +# Ensemble mean 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 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 + +# set the desc value in the GridStat MET config 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; +# +# Name of 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 +# the environment variable 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 "_A3_ENS_MEAN". Thus, below, FCST_VAR1_NAME +# must be set to the value of FIELDNAME_IN_MET_OUTPUT with "_A3_ENS_MEAN" +# appended to it. +# +#FCST_VAR1_NAME = APCP_A3_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 +# observation and forecast variable 1. +# +BOTH_VAR1_THRESH = {{field_thresholds}} +# +# Name of observation variable 1. +# +# 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 = {{fieldname_in_met_output}} +# +# 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 = 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}}_{OBTYPE} + +# Climatology data +#GRID_STAT_CLIMO_MEAN_FILE_NAME = +#GRID_STAT_CLIMO_MEAN_FIELD = +#GRID_STAT_CLIMO_MEAN_REGRID_METHOD = +#GRID_STAT_CLIMO_MEAN_REGRID_WIDTH = +#GRID_STAT_CLIMO_MEAN_REGRID_VLD_THRESH = +#GRID_STAT_CLIMO_MEAN_REGRID_SHAPE = +#GRID_STAT_CLIMO_MEAN_TIME_INTERP_METHOD = +#GRID_STAT_CLIMO_MEAN_MATCH_MONTH = +#GRID_STAT_CLIMO_MEAN_DAY_INTERVAL = +#GRID_STAT_CLIMO_MEAN_HOUR_INTERVAL = + +#GRID_STAT_CLIMO_STDEV_FILE_NAME = +#GRID_STAT_CLIMO_STDEV_FIELD = +#GRID_STAT_CLIMO_STDEV_REGRID_METHOD = +#GRID_STAT_CLIMO_STDEV_REGRID_WIDTH = +#GRID_STAT_CLIMO_STDEV_REGRID_VLD_THRESH = +#GRID_STAT_CLIMO_STDEV_REGRID_SHAPE = +#GRID_STAT_CLIMO_STDEV_TIME_INTERP_METHOD = +#GRID_STAT_CLIMO_STDEV_MATCH_MONTH = +#GRID_STAT_CLIMO_STDEV_DAY_INTERVAL = +#GRID_STAT_CLIMO_STDEV_HOUR_INTERVAL = + +#GRID_STAT_CLIMO_CDF_BINS = 1 +#GRID_STAT_CLIMO_CDF_CENTER_BINS = False +#GRID_STAT_CLIMO_CDF_WRITE_BINS = True + +GRID_STAT_MASK_GRID = + +# Statistical output types +GRID_STAT_OUTPUT_FLAG_FHO = STAT +GRID_STAT_OUTPUT_FLAG_CTC = STAT +GRID_STAT_OUTPUT_FLAG_CTS = STAT +#GRID_STAT_OUTPUT_FLAG_MCTC = NONE +#GRID_STAT_OUTPUT_FLAG_MCTS = NONE +GRID_STAT_OUTPUT_FLAG_CNT = STAT +#GRID_STAT_OUTPUT_FLAG_SL1L2 = NONE +#GRID_STAT_OUTPUT_FLAG_SAL1L2 = NONE +#GRID_STAT_OUTPUT_FLAG_VL1L2 = NONE +#GRID_STAT_OUTPUT_FLAG_VAL1L2 = NONE +#GRID_STAT_OUTPUT_FLAG_VCNT = NONE +#GRID_STAT_OUTPUT_FLAG_PCT = NONE +#GRID_STAT_OUTPUT_FLAG_PSTD = NONE +#GRID_STAT_OUTPUT_FLAG_PJC = NONE +#GRID_STAT_OUTPUT_FLAG_PRC = NONE +#GRID_STAT_OUTPUT_FLAG_ECLV = BOTH +GRID_STAT_OUTPUT_FLAG_NBRCTC = STAT +GRID_STAT_OUTPUT_FLAG_NBRCTS = STAT +GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT +#GRID_STAT_OUTPUT_FLAG_GRAD = BOTH +#GRID_STAT_OUTPUT_FLAG_DMAP = NONE + +# NetCDF matched pairs output file +#GRID_STAT_NC_PAIRS_VAR_NAME = +GRID_STAT_NC_PAIRS_FLAG_LATLON = TRUE +GRID_STAT_NC_PAIRS_FLAG_RAW = TRUE +GRID_STAT_NC_PAIRS_FLAG_DIFF = FALSE +GRID_STAT_NC_PAIRS_FLAG_CLIMO = FALSE +#GRID_STAT_NC_PAIRS_FLAG_CLIMO_CDP = FALSE +GRID_STAT_NC_PAIRS_FLAG_WEIGHT = FALSE +GRID_STAT_NC_PAIRS_FLAG_NBRHD = TRUE +#GRID_STAT_NC_PAIRS_FLAG_FOURIER = FALSE +#GRID_STAT_NC_PAIRS_FLAG_GRADIENT = FALSE +#GRID_STAT_NC_PAIRS_FLAG_DISTANCE_MAP = FALSE +GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE + +# End of [config] section and start of [dir] section. +[dir] +# +# Directory containing observation input to GridStat. +# +OBS_GRID_STAT_INPUT_DIR = {{obs_input_dir}} +# +# Directory containing forecast input to GridStat. +# +FCST_GRID_STAT_INPUT_DIR = {{fcst_input_dir}} +# +# Directory containing climatology mean input to GridStat. Not used in +# this example. +# +GRID_STAT_CLIMO_MEAN_INPUT_DIR = +# +# Directory containing climatology mean input to GridStat. Not used in +# this example. +# +GRID_STAT_CLIMO_STDEV_INPUT_DIR = +# +# Directory in which to write output from GridStat. +# +# OUTPUT_BASE apparently has to be set to something; it cannot be left +# to its default value. But it is not explicitly used elsewhere in this +# configuration file. +# +OUTPUT_BASE = {{output_base}} +GRID_STAT_OUTPUT_DIR = {{output_dir}} + +STAGING_DIR = {{staging_dir}} + +# End of [dir] section and start of [filename_templates] section. +[filename_templates] +# +# Template for forecast input to GridStat relative to +# FCST_GRID_STAT_INPUT_DIR. +# +FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} +# +# Template for observation input to GridStat relative to +# OBS_GRID_STAT_INPUT_DIR. +# +OBS_GRID_STAT_INPUT_TEMPLATE = {{obs_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 From 6a7235398668e33eb07acadbdce0f0d763a854f8 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Sat, 18 Mar 2023 03:25:38 -0600 Subject: [PATCH 075/119] Modify the EnsembleStat METplus config files for APCP so that the names of the output files are consistent with what the GridStat_ensmean and PointStat_ensmean tasks expect to read in. --- parm/metplus/EnsembleStat_APCP01h.conf | 2 +- parm/metplus/EnsembleStat_APCP03h.conf | 2 +- parm/metplus/EnsembleStat_APCP06h.conf | 2 +- parm/metplus/EnsembleStat_APCP24h.conf | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/parm/metplus/EnsembleStat_APCP01h.conf b/parm/metplus/EnsembleStat_APCP01h.conf index f0de205047..d786a798e7 100644 --- a/parm/metplus/EnsembleStat_APCP01h.conf +++ b/parm/metplus/EnsembleStat_APCP01h.conf @@ -59,7 +59,7 @@ ENSEMBLE_STAT_ENS_THRESH = 0.05 # ens.vld_thresh value in the MET config file ENSEMBLE_STAT_ENS_VLD_THRESH = 1.0 -ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_APCP_01h_{OBTYPE} +ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_APCP01h_{OBTYPE} ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped diff --git a/parm/metplus/EnsembleStat_APCP03h.conf b/parm/metplus/EnsembleStat_APCP03h.conf index ff339bdcdf..7f19d221c7 100644 --- a/parm/metplus/EnsembleStat_APCP03h.conf +++ b/parm/metplus/EnsembleStat_APCP03h.conf @@ -70,7 +70,7 @@ ENSEMBLE_STAT_ENS_THRESH = 0.05 # ens.vld_thresh value in the MET config file ENSEMBLE_STAT_ENS_VLD_THRESH = 1.0 -ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_APCP_03h_{OBTYPE} +ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_APCP03h_{OBTYPE} # MET Configuration file for EnsembleStat ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped diff --git a/parm/metplus/EnsembleStat_APCP06h.conf b/parm/metplus/EnsembleStat_APCP06h.conf index d087fcef3a..2f74b3ba66 100644 --- a/parm/metplus/EnsembleStat_APCP06h.conf +++ b/parm/metplus/EnsembleStat_APCP06h.conf @@ -70,7 +70,7 @@ ENSEMBLE_STAT_ENS_THRESH = 0.05 # ens.vld_thresh value in the MET config file ENSEMBLE_STAT_ENS_VLD_THRESH = 1.0 -ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_APCP_06h_{OBTYPE} +ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_APCP06h_{OBTYPE} # MET Configuration file for EnsembleStat ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped diff --git a/parm/metplus/EnsembleStat_APCP24h.conf b/parm/metplus/EnsembleStat_APCP24h.conf index 760419d852..a503fbdc02 100644 --- a/parm/metplus/EnsembleStat_APCP24h.conf +++ b/parm/metplus/EnsembleStat_APCP24h.conf @@ -70,7 +70,7 @@ ENSEMBLE_STAT_ENS_THRESH = 0.05 # ens.vld_thresh value in the MET config file ENSEMBLE_STAT_ENS_VLD_THRESH = 1.0 -ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_APCP_24h_{OBTYPE} +ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_APCP24h_{OBTYPE} # MET Configuration file for EnsembleStat ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped From 8b8620781e642178f4f21aaae0de96f449113296 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Sat, 18 Mar 2023 03:28:09 -0600 Subject: [PATCH 076/119] Change the METplus config file for the GridStat_ensmean task for REFC into a jinja template although it will not be used. --- parm/metplus/GridStat_ensmean_REFC.conf | 258 ++++++++++++++---------- 1 file changed, 150 insertions(+), 108 deletions(-) diff --git a/parm/metplus/GridStat_ensmean_REFC.conf b/parm/metplus/GridStat_ensmean_REFC.conf index d7a8df1063..b11d503dac 100644 --- a/parm/metplus/GridStat_ensmean_REFC.conf +++ b/parm/metplus/GridStat_ensmean_REFC.conf @@ -1,4 +1,4 @@ -# GridStat METplus Configuration +# Ensemble mean GridStat METplus Configuration # section heading for [config] variables - all items below this line and # before the next section heading correspond to the [config] section @@ -14,26 +14,26 @@ PROCESS_LIST = GridStat # VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set LOOP_BY = INIT -# Format of INIT_BEG and INT_END using % items +# Format of INIT_BEG and INIT_END using % items # %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. # see www.strftime.org for more information # %Y%m%d%H expands to YYYYMMDDHH INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} +INIT_BEG = {{cdate}} # End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} +INIT_END = {{cdate}} -# Increment between METplus runs (in seconds if no units are specified) -# Must be >= 60 seconds +# Increment between METplus runs (in seconds if no units are specified). +# Must be >= 60 seconds. INIT_INCREMENT = 3600 # List of forecast leads to process for each run time (init or valid) # In hours if units are not specified # If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[fhr_list]} +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 @@ -48,20 +48,22 @@ LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 -LOG_DIR = {OUTPUT_BASE}/log - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensmean/metplus_final.REFC.conf - -# Location of MET config file to pass to GridStat +# +# 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_TO_GRID = FCST GRID_STAT_REGRID_VLD_THRESH = 0.5 GRID_STAT_REGRID_METHOD = BUDGET GRID_STAT_REGRID_WIDTH = 2 @@ -74,13 +76,19 @@ GRID_STAT_INTERP_TYPE_METHOD = NEAREST GRID_STAT_INTERP_TYPE_WIDTH = 1 GRID_STAT_GRID_WEIGHT_FLAG = NONE - -# Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensmean -#FCST_NATIVE_DATA_TYPE = GRIB - -# Name to identify observation data in output -OBTYPE = MRMS +# +# 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 +# +# Name to identify observation data in output. +# +OBTYPE = {{obtype}} OBS_NATIVE_DATA_TYPE = GRIB # set the desc value in the GridStat MET config file @@ -92,52 +100,66 @@ GRID_STAT_DESC = NA # are needed for different tools GRID_STAT_MET_CONFIG_OVERRIDES = cat_thresh = []; cnt_thresh = [NA]; cnt_logic = UNION; wind_thresh = [NA]; wind_logic = UNION; ci_alpha = [0.05]; rank_corr_flag = FALSE; - -# Name of forecast variable 1 -FCST_VAR1_NAME = REFC_L0_ENS_MEAN - -# List of levels to evaluate for forecast variable 1 -# A03 = 3 hour accumulation in GRIB file +# +# Name of 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, the type of statistic, etc. In this case, this suffix is +# "_L0_ENS_MEAN". Thus, below, FCST_VAR1_NAME must be set to the value +# of FIELDNAME_IN_MET_OUTPUT with "_L0_ENS_MEAN" appended to it. +# +FCST_VAR1_NAME = {{fieldname_in_met_output}}_L0_ENS_MEAN +# +# List of levels to evaluate for forecast variable 1. +# FCST_VAR1_LEVELS = L0 #FCST_VAR1_OPTIONS = cnt_thresh = [ >15 ]; cnt_logic = UNION; - +# # List of thresholds to evaluate for each name/level combination for -# forecast variable 1 -BOTH_VAR1_THRESH = ge20, ge30, ge40, ge50 - -#FCST_GRID_STAT_FILE_TYPE = - -# Name of observation variable 1 -OBS_VAR1_NAME = MergedReflectivityQCComposite - -# List of levels to evaluate for observation variable 1 -# (*,*) is NetCDF notation - must include quotes around these values! -# must be the same length as FCST_VAR1_LEVELS -OBS_VAR1_LEVELS = Z500 +# observation and forecast variable 1. +# +BOTH_VAR1_THRESH = {{field_thresholds}} +# +# Name of 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 = {{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 = Z500 OBS_VAR1_OPTIONS = censor_thresh = lt-20; censor_val = -20.0; cnt_thresh = [ >15 ]; cnt_logic = UNION; - -# List of thresholds to evaluate for each name/level combination for -# observation variable 1 -#OBS_VAR1_THRESH = gt12.7, gt25.4, gt50.8, gt76.2 - -#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. +# 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 = -300 -OBS_GRID_STAT_FILE_WINDOW_END = 300 +OBS_GRID_STAT_FILE_WINDOW_BEGIN = -300 +OBS_GRID_STAT_FILE_WINDOW_END = 300 # 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 +GRID_STAT_NEIGHBORHOOD_WIDTH = 3,5,7 # shape value passed to nbrhd dictionary in the MET config file GRID_STAT_NEIGHBORHOOD_SHAPE = SQUARE @@ -149,21 +171,25 @@ GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5 # 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 +# +# 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 - -# Set to true if observation data is probabilistic -# Only used if configuring forecast data as the 'OBS' input +# +# Set to true if observation data is probabilistic. Only used if +# configuring forecast data as the 'OBS' input. +# OBS_IS_PROB = false - -# Only used if OBS_IS_PROB is true - sets probabilistic threshold +# +# Only used if OBS_IS_PROB is true - sets probabilistic threshold. +# OBS_GRID_STAT_PROB_THRESH = ==0.1 -GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_REFC_{OBTYPE}_ensmean +GRID_STAT_OUTPUT_PREFIX = {MODEL}_{{fieldname_in_met_filedir_names}}_{OBTYPE} # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = @@ -195,7 +221,7 @@ GRID_STAT_CLIMO_CDF_BINS = 1 GRID_STAT_MASK_GRID = # Statistical output types -GRID_STAT_OUTPUT_FLAG_FHO = STAT +GRID_STAT_OUTPUT_FLAG_FHO = STAT GRID_STAT_OUTPUT_FLAG_CTC = STAT GRID_STAT_OUTPUT_FLAG_CTS = STAT #GRID_STAT_OUTPUT_FLAG_MCTC = NONE @@ -219,62 +245,78 @@ GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT # 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_LATLON = TRUE +GRID_STAT_NC_PAIRS_FLAG_RAW = TRUE GRID_STAT_NC_PAIRS_FLAG_DIFF = FALSE GRID_STAT_NC_PAIRS_FLAG_CLIMO = FALSE #GRID_STAT_NC_PAIRS_FLAG_CLIMO_CDP = FALSE GRID_STAT_NC_PAIRS_FLAG_WEIGHT = FALSE -GRID_STAT_NC_PAIRS_FLAG_NBRHD = FALSE +GRID_STAT_NC_PAIRS_FLAG_NBRHD = TRUE #GRID_STAT_NC_PAIRS_FLAG_FOURIER = FALSE #GRID_STAT_NC_PAIRS_FLAG_GRADIENT = FALSE #GRID_STAT_NC_PAIRS_FLAG_DISTANCE_MAP = FALSE GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE -# End of [config] section and start of [dir] section +# End of [config] section and start of [dir] section. [dir] - -# directory containing forecast input to GridStat -INPUT_BASE = {ENV[INPUT_BASE]} -FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} - -# directory containing observation input to GridStat -OBS_GRID_STAT_INPUT_DIR = {ENV[OBS_DIR]} - -# directory containing climatology mean input to GridStat -# Not used in this example +# +# 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 +# +# Directory containing climatology mean input to GridStat. Not used in +# this example. +# GRID_STAT_CLIMO_STDEV_INPUT_DIR = - -# directory to write output from GridStat -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} - -STAGING_DIR = {OUTPUT_BASE}/stage/REFC_ensmean - -# End of [dir] section and start of [filename_templates] section +# +# 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}} + +STAGING_DIR = {{staging_dir}} + +# End of [dir] section and start of [filename_templates] section. [filename_templates] - -# Template to look for forecast input to GridStat relative to FCST_GRID_STAT_INPUT_DIR -FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_REFC_{OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc - -# Template to look for observation input to GridStat relative to OBS_GRID_STAT_INPUT_DIR -OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/MergedReflectivityQCComposite_00.50_{valid?fmt=%Y%m%d}-{valid?fmt=%H}0000.grib2 - -# Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensmean - -# Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# Template for forecast input to GridStat relative to +# FCST_GRID_STAT_INPUT_DIR. +# +FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} +# +# Template for observation input to GridStat relative to +# OBS_GRID_STAT_INPUT_DIR. +# +OBS_GRID_STAT_INPUT_TEMPLATE = {{obs_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 to look for climatology input to GridStat relative to GRID_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# 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 = - -# Used to specify one or more verification mask files for GridStat -# Not used for this example +# +# 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 From c7cf2dad2dcebe1bc14ba9fa50a770083fea98dd Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Sat, 18 Mar 2023 11:11:13 -0600 Subject: [PATCH 077/119] Add J-jobs for ensemble mean and probabilistic GridStat and PointStat tasks. --- ...L_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSMEAN | 108 ++++++++++++++++++ ...L_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSPROB | 108 ++++++++++++++++++ 2 files changed, 216 insertions(+) create mode 100755 jobs/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSMEAN create mode 100755 jobs/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSPROB diff --git a/jobs/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSMEAN b/jobs/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSMEAN new file mode 100755 index 0000000000..c216a1f0ca --- /dev/null +++ b/jobs/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSMEAN @@ -0,0 +1,108 @@ +#!/bin/bash + +# +#----------------------------------------------------------------------- +# +# +# +#----------------------------------------------------------------------- +# + +# +#----------------------------------------------------------------------- +# +# Source the variable definitions file and the bash utility functions. +# +#----------------------------------------------------------------------- +# +. $USHdir/source_util_funcs.sh +source_config_for_task "task_run_vx_ensgrid_mean" ${GLOBAL_VAR_DEFNS_FP} +. $USHdir/job_preamble.sh +# +#----------------------------------------------------------------------- +# +# Save current shell options (in a global array). Then set new options +# for this script/function. +# +#----------------------------------------------------------------------- +# +{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 +# +#----------------------------------------------------------------------- +# +# Get the full path to the file in which this script/function is located +# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in +# which the file is located (scrfunc_dir). +# +#----------------------------------------------------------------------- +# +scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) +scrfunc_fn=$( basename "${scrfunc_fp}" ) +scrfunc_dir=$( dirname "${scrfunc_fp}" ) +# +#----------------------------------------------------------------------- +# +# Print message indicating entry into script. +# +#----------------------------------------------------------------------- +# +print_info_msg " +======================================================================== +Entering script: \"${scrfunc_fn}\" +In directory: \"${scrfunc_dir}\" + +This is the J-job script for the task that runs MET/METplus's GridStat +or PointStat tool to perform verification on the ensemble mean of a +specified field (or group of fields). +========================================================================" +# +#----------------------------------------------------------------------- +# +# Set the name of the MET/METplus tool this task will call. (Note: "sc" +# is for "snake case", i.e. using underscores as separators, and "pc" is +# for "Pascal case", i.e. no separators but first letter of each word +# capitalized.) +# +#----------------------------------------------------------------------- +# +valid_vals_MET_TOOL=( "GRIDSTAT" "POINTSTAT" ) +check_var_valid_value "MET_TOOL" "valid_vals_MET_TOOL" + +if [ "${MET_TOOL}" = "GRIDSTAT" ]; then + met_tool_sc="grid_stat" + met_tool_pc="GridStat" +elif [ "${MET_TOOL}" = "POINTSTAT" ]; then + met_tool_sc="point_stat" + met_tool_pc="PointStat" +fi +# +#----------------------------------------------------------------------- +# +# Call the ex-script for this J-job and pass to it the necessary varia- +# bles. +# +#----------------------------------------------------------------------- +# +$SCRIPTSdir/exregional_run_met_gridstat_or_pointstat_vx_ensmean.sh \ + met_tool_sc="${met_tool_sc}" \ + met_tool_pc="${met_tool_pc}" || \ +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/jobs/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSPROB b/jobs/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSPROB new file mode 100755 index 0000000000..64e39f36c7 --- /dev/null +++ b/jobs/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSPROB @@ -0,0 +1,108 @@ +#!/bin/bash + +# +#----------------------------------------------------------------------- +# +# +# +#----------------------------------------------------------------------- +# + +# +#----------------------------------------------------------------------- +# +# Source the variable definitions file and the bash utility functions. +# +#----------------------------------------------------------------------- +# +. $USHdir/source_util_funcs.sh +source_config_for_task "task_run_vx_ensgrid_prob" ${GLOBAL_VAR_DEFNS_FP} +. $USHdir/job_preamble.sh +# +#----------------------------------------------------------------------- +# +# Save current shell options (in a global array). Then set new options +# for this script/function. +# +#----------------------------------------------------------------------- +# +{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 +# +#----------------------------------------------------------------------- +# +# Get the full path to the file in which this script/function is located +# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in +# which the file is located (scrfunc_dir). +# +#----------------------------------------------------------------------- +# +scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) +scrfunc_fn=$( basename "${scrfunc_fp}" ) +scrfunc_dir=$( dirname "${scrfunc_fp}" ) +# +#----------------------------------------------------------------------- +# +# Print message indicating entry into script. +# +#----------------------------------------------------------------------- +# +print_info_msg " +======================================================================== +Entering script: \"${scrfunc_fn}\" +In directory: \"${scrfunc_dir}\" + +This is the J-job script for the task that runs METplus's GridStat or +PointStat tool to perform verification on the ensemble frequencies/ +probabilities of a specified field (or group of fields). +========================================================================" +# +#----------------------------------------------------------------------- +# +# Set the name of the MET/METplus tool this task will call. (Note: "sc" +# is for "snake case", i.e. using underscores as separators, and "pc" is +# for "Pascal case", i.e. no separators but first letter of each word +# capitalized.) +# +#----------------------------------------------------------------------- +# +valid_vals_MET_TOOL=( "GRIDSTAT" "POINTSTAT" ) +check_var_valid_value "MET_TOOL" "valid_vals_MET_TOOL" + +if [ "${MET_TOOL}" = "GRIDSTAT" ]; then + met_tool_sc="grid_stat" + met_tool_pc="GridStat" +elif [ "${MET_TOOL}" = "POINTSTAT" ]; then + met_tool_sc="point_stat" + met_tool_pc="PointStat" +fi +# +#----------------------------------------------------------------------- +# +# Call the ex-script for this J-job and pass to it the necessary varia- +# bles. +# +#----------------------------------------------------------------------- +# +$SCRIPTSdir/exregional_run_met_gridstat_or_pointstat_vx_ensprob.sh \ + met_tool_sc="${met_tool_sc}" \ + met_tool_pc="${met_tool_pc}" || \ +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 + From e49845f75590f5c873910b34f27ab330e62b4245 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Sat, 18 Mar 2023 12:36:14 -0600 Subject: [PATCH 078/119] Modify ROCOTO XML and conf files to have GridStat_ensprob tasks for all four APCP variables (01, 03, 06, and 24 hour accums) use templates for the METplus conf files. --- parm/FV3LAM_wflow.xml | 20 +- parm/metplus/GridStat_ensprob_APCP01h.conf | 244 +++++++++----- parm/metplus/GridStat_ensprob_APCP03h.conf | 299 ++++++++++++----- parm/metplus/GridStat_ensprob_APCP06h.conf | 299 ++++++++++++----- parm/metplus/GridStat_ensprob_APCP24h.conf | 301 ++++++++++++------ .../exregional_run_met_gridstat_vx_ensprob.sh | 2 +- 6 files changed, 806 insertions(+), 359 deletions(-) diff --git a/parm/FV3LAM_wflow.xml b/parm/FV3LAM_wflow.xml index 04089934d6..f9827543e8 100644 --- a/parm/FV3LAM_wflow.xml +++ b/parm/FV3LAM_wflow.xml @@ -2688,7 +2688,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSPROB" {{ nnodes_run_met_gridstat_vx_ensprob_apcp01h }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_apcp01h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_ensprob_apcp01h }} @@ -2706,9 +2706,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + OBTYPECCPA VARAPCP ACCUM_HH01 + MET_TOOLGRIDSTAT @@ -2724,7 +2725,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSPROB" {{ nnodes_run_met_gridstat_vx_ensprob_apcp03h }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_apcp03h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_ensprob_apcp03h }} @@ -2742,9 +2743,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(3, fcst_len_hrs+1, 3) %}{{ " %02d" % h }}{% endfor %} + OBTYPECCPA VARAPCP ACCUM_HH03 + MET_TOOLGRIDSTAT @@ -2761,7 +2763,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSPROB" {{ nnodes_run_met_gridstat_vx_ensprob_apcp06h }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_apcp06h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_ensprob_apcp06h }} @@ -2779,9 +2781,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(6, fcst_len_hrs+1, 6) %}{{ " %02d" % h }}{% endfor %} + OBTYPECCPA VARAPCP ACCUM_HH06 + MET_TOOLGRIDSTAT @@ -2798,7 +2801,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSPROB" {{ nnodes_run_met_gridstat_vx_ensprob_apcp24h }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_apcp24h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_ensprob_apcp24h }} @@ -2816,9 +2819,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(24, fcst_len_hrs+1, 24) %}{{ " %02d" % h }}{% endfor %} + OBTYPECCPA VARAPCP ACCUM_HH24 + MET_TOOLGRIDSTAT diff --git a/parm/metplus/GridStat_ensprob_APCP01h.conf b/parm/metplus/GridStat_ensprob_APCP01h.conf index 01c8ae7404..b82b49ae10 100644 --- a/parm/metplus/GridStat_ensprob_APCP01h.conf +++ b/parm/metplus/GridStat_ensprob_APCP01h.conf @@ -1,4 +1,4 @@ -# Ensemble Prob GridStat METplus Configuration +# Ensemble probabilistic GridStat METplus Configuration # section heading for [config] variables - all items below this line and # before the next section heading correspond to the [config] section @@ -14,26 +14,26 @@ PROCESS_LIST = GridStat # VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set LOOP_BY = INIT -# Format of INIT_BEG and INT_END using % items +# Format of INIT_BEG and INIT_END using % items # %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. # see www.strftime.org for more information # %Y%m%d%H expands to YYYYMMDDHH INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} +INIT_BEG = {{cdate}} # End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} +INIT_END = {{cdate}} -# Increment between METplus runs (in seconds if no units are specified) -# Must be >= 60 seconds +# Increment between METplus runs (in seconds if no units are specified). +# Must be >= 60 seconds. INIT_INCREMENT = 3600 # List of forecast leads to process for each run time (init or valid) # In hours if units are not specified # If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[fhr_list]} +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 @@ -48,20 +48,22 @@ LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 -LOG_DIR = {OUTPUT_BASE}/log - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensprob/metplus_final.APCP01.conf - -# Location of MET config file to pass to GridStat +# +# 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_TO_GRID = FCST GRID_STAT_REGRID_VLD_THRESH = 0.5 GRID_STAT_REGRID_METHOD = BUDGET GRID_STAT_REGRID_WIDTH = 2 @@ -75,12 +77,21 @@ GRID_STAT_REGRID_SHAPE = SQUARE #GRID_STAT_GRID_WEIGHT_FLAG = -# Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensprob -FCST_NATIVE_DATA_TYPE = GRIB +# +# 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 -# Name to identify observation data in output -OBTYPE = CCPA +FCST_NATIVE_DATA_TYPE = GRIB +# +# Name to identify observation data in output. +# +OBTYPE = {{obtype}} OBS_NATIVE_DATA_TYPE = GRIB # set the desc value in the GridStat MET config file @@ -95,45 +106,91 @@ GRID_STAT_MET_CONFIG_OVERRIDES = cat_thresh = [NA]; cnt_thresh = [NA]; cnt_logic # Name of forecast variables # thresholds in mm, equal to >0, .01",.05",.10" -FCST_VAR1_NAME = APCP_01_A01_ENS_FREQ_gt0.0 +# FREQ +# Process as probability +FCST_VAR1_NAME = {{fieldname_in_met_output}}_A01_ENS_FREQ_gt0.0 FCST_VAR1_LEVELS = A01 FCST_VAR1_THRESH = ==0.1 -OBS_VAR1_NAME = APCP +OBS_VAR1_NAME = {{fieldname_in_obs_input}} OBS_VAR1_LEVELS = A01 OBS_VAR1_THRESH = >0.0 -FCST_VAR2_NAME = APCP_01_A01_ENS_FREQ_ge0.254 +FCST_VAR2_NAME = {{fieldname_in_met_output}}_A01_ENS_FREQ_ge0.254 FCST_VAR2_LEVELS = A01 FCST_VAR2_THRESH = ==0.1 -OBS_VAR2_NAME = APCP +OBS_VAR2_NAME = {{fieldname_in_obs_input}} OBS_VAR2_LEVELS = A01 OBS_VAR2_THRESH = >=0.254 -FCST_VAR3_NAME = APCP_01_A01_ENS_FREQ_ge0.508 +FCST_VAR3_NAME = {{fieldname_in_met_output}}_A01_ENS_FREQ_ge0.508 FCST_VAR3_LEVELS = A01 FCST_VAR3_THRESH = ==0.1 -OBS_VAR3_NAME = APCP +OBS_VAR3_NAME = {{fieldname_in_obs_input}} OBS_VAR3_LEVELS = A01 OBS_VAR3_THRESH = >=0.508 -FCST_VAR4_NAME = APCP_01_A01_ENS_FREQ_ge2.54 +FCST_VAR4_NAME = {{fieldname_in_met_output}}_A01_ENS_FREQ_ge2.54 FCST_VAR4_LEVELS = A01 FCST_VAR4_THRESH = ==0.1 -OBS_VAR4_NAME = APCP +OBS_VAR4_NAME = {{fieldname_in_obs_input}} OBS_VAR4_LEVELS = A01 OBS_VAR4_THRESH = >=2.54 +#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_VAR5_NAME = {{fieldname_in_met_output}}_A01_ENS_FREQ_gt0.0 +FCST_VAR5_LEVELS = A01 +FCST_VAR5_THRESH = ==0.1 +FCST_VAR5_OPTIONS = prob = FALSE; + +OBS_VAR5_NAME = {{fieldname_in_obs_input}} +OBS_VAR5_LEVELS = A01 +OBS_VAR5_THRESH = >0.0 +OBS_VAR5_OPTIONS = nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } + +FCST_VAR6_NAME = {{fieldname_in_met_output}}_A01_ENS_FREQ_ge0.254 +FCST_VAR6_LEVELS = A01 +FCST_VAR6_THRESH = ==0.1 +FCST_VAR6_OPTIONS = prob = FALSE; + +OBS_VAR6_NAME = {{fieldname_in_obs_input}} +OBS_VAR6_LEVELS = A01 +OBS_VAR6_THRESH = >=0.254 +OBS_VAR6_OPTIONS = nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } + +FCST_VAR7_NAME = {{fieldname_in_met_output}}_A01_ENS_FREQ_ge0.508 +FCST_VAR7_LEVELS = A01 +FCST_VAR7_THRESH = ==0.1 +FCST_VAR7_OPTIONS = prob = FALSE; + +OBS_VAR7_NAME = {{fieldname_in_obs_input}} +OBS_VAR7_LEVELS = A01 +OBS_VAR7_THRESH = >=0.508 +OBS_VAR7_OPTIONS = nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } + +FCST_VAR8_NAME = {{fieldname_in_met_output}}_A01_ENS_FREQ_ge2.54 +FCST_VAR8_LEVELS = A01 +FCST_VAR8_THRESH = ==0.1 +FCST_VAR8_OPTIONS = prob = FALSE; + +OBS_VAR8_NAME = {{fieldname_in_obs_input}} +OBS_VAR8_LEVELS = A01 +OBS_VAR8_THRESH = >=2.54 +OBS_VAR8_OPTIONS = 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. +# 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 @@ -141,13 +198,13 @@ 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 +GRID_STAT_NEIGHBORHOOD_FIELD = # width value passed to nbrhd dictionary in the MET config file -GRID_STAT_NEIGHBORHOOD_WIDTH = 3,5,7 +GRID_STAT_NEIGHBORHOOD_WIDTH = # shape value passed to nbrhd dictionary in the MET config file -GRID_STAT_NEIGHBORHOOD_SHAPE = SQUARE +GRID_STAT_NEIGHBORHOOD_SHAPE = # cov thresh list passed to nbrhd dictionary in the MET config file GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5 @@ -156,15 +213,17 @@ GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5 # 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 +# +# 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 = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_ensprob +GRID_STAT_OUTPUT_PREFIX = {MODEL}_{{fieldname_in_met_filedir_names}}_{OBTYPE} # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = @@ -196,7 +255,7 @@ GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_ens GRID_STAT_MASK_GRID = # Statistical output types -GRID_STAT_OUTPUT_FLAG_FHO = NONE +GRID_STAT_OUTPUT_FLAG_FHO = NONE GRID_STAT_OUTPUT_FLAG_CTC = NONE GRID_STAT_OUTPUT_FLAG_CTS = NONE #GRID_STAT_OUTPUT_FLAG_MCTC = NONE @@ -214,68 +273,83 @@ 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 = 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_LATLON = TRUE +GRID_STAT_NC_PAIRS_FLAG_RAW = TRUE GRID_STAT_NC_PAIRS_FLAG_DIFF = FALSE GRID_STAT_NC_PAIRS_FLAG_CLIMO = FALSE -#GRID_STAT_NC_PAIRS_FLAG_CLIMO_CDP = FALSE GRID_STAT_NC_PAIRS_FLAG_WEIGHT = FALSE -GRID_STAT_NC_PAIRS_FLAG_NBRHD = FALSE +GRID_STAT_NC_PAIRS_FLAG_NBRHD = TRUE #GRID_STAT_NC_PAIRS_FLAG_FOURIER = FALSE #GRID_STAT_NC_PAIRS_FLAG_GRADIENT = FALSE #GRID_STAT_NC_PAIRS_FLAG_DISTANCE_MAP = FALSE GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE -# End of [config] section and start of [dir] section +# End of [config] section and start of [dir] section. [dir] - -# directory containing forecast input to GridStat -INPUT_BASE = {ENV[INPUT_BASE]} -FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} - -# directory containing observation input to GridStat -OBS_GRID_STAT_INPUT_DIR = {ENV[OBS_DIR]} - -# directory containing climatology mean input to GridStat -# Not used in this example +# +# 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 +# +# Directory containing climatology mean input to GridStat. Not used in +# this example. +# GRID_STAT_CLIMO_STDEV_INPUT_DIR = - -# directory to write output from GridStat -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} - -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_01h_ensprob - -# End of [dir] section and start of [filename_templates] section +# +# 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}} + +STAGING_DIR = {{staging_dir}} + +# End of [dir] section and start of [filename_templates] section. [filename_templates] - -# Template to look for forecast input to GridStat relative to FCST_GRID_STAT_INPUT_DIR -FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc - -# Template to look for observation input to GridStat relative to OBS_GRID_STAT_INPUT_DIR -OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2 - -# Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensprob - -# Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# Template for forecast input to GridStat relative to +# FCST_GRID_STAT_INPUT_DIR. +# +FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} +# +# Template for observation input to GridStat relative to +# OBS_GRID_STAT_INPUT_DIR. +# +OBS_GRID_STAT_INPUT_TEMPLATE = {{obs_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 to look for climatology input to GridStat relative to GRID_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# 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 = - -# Used to specify one or more verification mask files for GridStat -# Not used for this example +# +# 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_APCP03h.conf b/parm/metplus/GridStat_ensprob_APCP03h.conf index f9a23196f5..3522457945 100644 --- a/parm/metplus/GridStat_ensprob_APCP03h.conf +++ b/parm/metplus/GridStat_ensprob_APCP03h.conf @@ -1,4 +1,4 @@ -# Ensemble Prob GridStat METplus Configuration +# Ensemble probabilistic GridStat METplus Configuration # section heading for [config] variables - all items below this line and # before the next section heading correspond to the [config] section @@ -14,26 +14,26 @@ PROCESS_LIST = GridStat # VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set LOOP_BY = INIT -# Format of INIT_BEG and INT_END using % items +# Format of INIT_BEG and INIT_END using % items # %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. # see www.strftime.org for more information # %Y%m%d%H expands to YYYYMMDDHH INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} +INIT_BEG = {{cdate}} # End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} +INIT_END = {{cdate}} -# Increment between METplus runs (in seconds if no units are specified) -# Must be >= 60 seconds +# Increment between METplus runs (in seconds if no units are specified). +# Must be >= 60 seconds. INIT_INCREMENT = 3600 # List of forecast leads to process for each run time (init or valid) # In hours if units are not specified # If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[fhr_list]} +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 @@ -48,20 +48,22 @@ LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 -LOG_DIR = {OUTPUT_BASE}/log - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensprob/metplus_final.APCP03.conf - -# Location of MET config file to pass to GridStat +# +# 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_TO_GRID = FCST GRID_STAT_REGRID_VLD_THRESH = 0.5 GRID_STAT_REGRID_METHOD = BUDGET GRID_STAT_REGRID_WIDTH = 2 @@ -75,12 +77,21 @@ GRID_STAT_REGRID_SHAPE = SQUARE #GRID_STAT_GRID_WEIGHT_FLAG = -# Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensprob -FCST_NATIVE_DATA_TYPE = GRIB +# +# 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 -# Name to identify observation data in output -OBTYPE = CCPA +FCST_NATIVE_DATA_TYPE = GRIB +# +# Name to identify observation data in output. +# +OBTYPE = {{obtype}} OBS_NATIVE_DATA_TYPE = GRIB # set the desc value in the GridStat MET config file @@ -93,46 +104,141 @@ GRID_STAT_DESC = NA 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; -# Name of forecast variables -FCST_VAR1_NAME = APCP_03_A3_ENS_FREQ_gt0.0 +FIELDNAME_IN_MET_OUTPUT = {{fieldname_in_met_output}} +# +# FREQ +# Process as probability + +# +# Name of 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 "_A3_ENS_FREQ_gt0.0". +# Thus, below, FCST_VAR1_NAME must be set to the value of FIELDNAME_IN_MET_OUTPUT +# with "_A3_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_A3_ENS_FREQ_gt0.0 +FCST_VAR1_NAME = {FIELDNAME_IN_MET_OUTPUT}_A3_ENS_FREQ_gt0.0 FCST_VAR1_LEVELS = A03 FCST_VAR1_THRESH = ==0.1 - -OBS_VAR1_NAME = APCP_03 +# +# Name of observation variable 1 +# 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_MET_OUTPUT} OBS_VAR1_LEVELS = A03 OBS_VAR1_THRESH = >0.0 -FCST_VAR2_NAME = APCP_03_A3_ENS_FREQ_ge0.508 +#FCST_VAR2_NAME = APCP_A3_ENS_FREQ_ge0.508 +FCST_VAR2_NAME = {FIELDNAME_IN_MET_OUTPUT}_A3_ENS_FREQ_ge0.508 FCST_VAR2_LEVELS = A03 FCST_VAR2_THRESH = ==0.1 -OBS_VAR2_NAME = APCP_03 +#OBS_VAR2_NAME = APCP +OBS_VAR2_NAME = {FIELDNAME_IN_MET_OUTPUT} OBS_VAR2_LEVELS = A03 OBS_VAR2_THRESH = >=0.508 -FCST_VAR3_NAME = APCP_03_A3_ENS_FREQ_ge2.54 +#FCST_VAR3_NAME = APCP_A3_ENS_FREQ_ge2.54 +FCST_VAR3_NAME = {FIELDNAME_IN_MET_OUTPUT}_A3_ENS_FREQ_ge2.54 FCST_VAR3_LEVELS = A03 FCST_VAR3_THRESH = ==0.1 -OBS_VAR3_NAME = APCP_03 +#OBS_VAR3_NAME = APCP +OBS_VAR3_NAME = {FIELDNAME_IN_MET_OUTPUT} OBS_VAR3_LEVELS = A03 OBS_VAR3_THRESH = >=2.54 -FCST_VAR4_NAME = APCP_03_A3_ENS_FREQ_ge6.350 +#FCST_VAR4_NAME = APCP_A3_ENS_FREQ_ge6.350 +FCST_VAR4_NAME = {FIELDNAME_IN_MET_OUTPUT}_A3_ENS_FREQ_ge6.350 FCST_VAR4_LEVELS = A03 FCST_VAR4_THRESH = ==0.1 -OBS_VAR4_NAME = APCP_03 +#OBS_VAR4_NAME = APCP +OBS_VAR4_NAME = {FIELDNAME_IN_MET_OUTPUT} OBS_VAR4_LEVELS = A03 OBS_VAR4_THRESH = >=6.350 +#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_VAR5_NAME = APCP_A3_ENS_FREQ_gt0.0 +FCST_VAR5_NAME = {FIELDNAME_IN_MET_OUTPUT}_A3_ENS_FREQ_gt0.0 +FCST_VAR5_LEVELS = A03 +FCST_VAR5_THRESH = ==0.1 +FCST_VAR5_OPTIONS = prob = FALSE; + +#OBS_VAR5_NAME = APCP +OBS_VAR5_NAME = {FIELDNAME_IN_MET_OUTPUT} +OBS_VAR5_LEVELS = A03 +OBS_VAR5_THRESH = >0.0 +OBS_VAR5_OPTIONS = nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } + +#FCST_VAR6_NAME = APCP_A3_ENS_FREQ_ge0.508 +FCST_VAR6_NAME = {FIELDNAME_IN_MET_OUTPUT}_A3_ENS_FREQ_ge0.508 +FCST_VAR6_LEVELS = A03 +FCST_VAR6_THRESH = ==0.1 +FCST_VAR6_OPTIONS = prob = FALSE; + +#OBS_VAR6_NAME = APCP +OBS_VAR6_NAME = {FIELDNAME_IN_MET_OUTPUT} +OBS_VAR6_LEVELS = A03 +OBS_VAR6_THRESH = >=0.508 +OBS_VAR6_OPTIONS = nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } + +#FCST_VAR7_NAME = APCP_A3_ENS_FREQ_ge2.54 +FCST_VAR7_NAME = {FIELDNAME_IN_MET_OUTPUT}_A3_ENS_FREQ_ge2.54 +FCST_VAR7_LEVELS = A03 +FCST_VAR7_THRESH = ==0.1 +FCST_VAR7_OPTIONS = prob = FALSE; + +#OBS_VAR7_NAME = APCP +OBS_VAR7_NAME = {FIELDNAME_IN_MET_OUTPUT} +OBS_VAR7_LEVELS = A03 +OBS_VAR7_THRESH = >=2.54 +OBS_VAR7_OPTIONS = nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } + +#FCST_VAR8_NAME = APCP_A3_ENS_FREQ_ge6.350 +FCST_VAR8_NAME = {FIELDNAME_IN_MET_OUTPUT}_A3_ENS_FREQ_ge6.350 +FCST_VAR8_LEVELS = A03 +FCST_VAR8_THRESH = ==0.1 +FCST_VAR8_OPTIONS = prob = FALSE; + +#OBS_VAR8_NAME = APCP +OBS_VAR8_NAME = {FIELDNAME_IN_MET_OUTPUT} +OBS_VAR8_LEVELS = A03 +OBS_VAR8_THRESH = >=6.350 +OBS_VAR8_OPTIONS = 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. +# 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 @@ -140,13 +246,13 @@ 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 +GRID_STAT_NEIGHBORHOOD_FIELD = # width value passed to nbrhd dictionary in the MET config file -GRID_STAT_NEIGHBORHOOD_WIDTH = 3,5,7 +GRID_STAT_NEIGHBORHOOD_WIDTH = # shape value passed to nbrhd dictionary in the MET config file -GRID_STAT_NEIGHBORHOOD_SHAPE = SQUARE +GRID_STAT_NEIGHBORHOOD_SHAPE = # cov thresh list passed to nbrhd dictionary in the MET config file GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5 @@ -155,15 +261,17 @@ GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5 # 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 +# +# Set to true if forecast data is probabilistic. +# FCST_IS_PROB = True -FCST_PROB_IN_GRIB_PDS = False - +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 = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_ensprob +GRID_STAT_OUTPUT_PREFIX = {MODEL}_{{fieldname_in_met_filedir_names}}_{OBTYPE} # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = @@ -195,7 +303,7 @@ GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_ens GRID_STAT_MASK_GRID = # Statistical output types -GRID_STAT_OUTPUT_FLAG_FHO = NONE +GRID_STAT_OUTPUT_FLAG_FHO = NONE GRID_STAT_OUTPUT_FLAG_CTC = NONE GRID_STAT_OUTPUT_FLAG_CTS = NONE #GRID_STAT_OUTPUT_FLAG_MCTC = NONE @@ -213,68 +321,83 @@ 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 = 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_LATLON = TRUE +GRID_STAT_NC_PAIRS_FLAG_RAW = TRUE GRID_STAT_NC_PAIRS_FLAG_DIFF = FALSE GRID_STAT_NC_PAIRS_FLAG_CLIMO = FALSE -#GRID_STAT_NC_PAIRS_FLAG_CLIMO_CDP = FALSE GRID_STAT_NC_PAIRS_FLAG_WEIGHT = FALSE -GRID_STAT_NC_PAIRS_FLAG_NBRHD = FALSE +GRID_STAT_NC_PAIRS_FLAG_NBRHD = TRUE #GRID_STAT_NC_PAIRS_FLAG_FOURIER = FALSE #GRID_STAT_NC_PAIRS_FLAG_GRADIENT = FALSE #GRID_STAT_NC_PAIRS_FLAG_DISTANCE_MAP = FALSE GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE -# End of [config] section and start of [dir] section +# End of [config] section and start of [dir] section. [dir] - -# directory containing forecast input to GridStat -INPUT_BASE = {ENV[INPUT_BASE]} -FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} - -# directory containing observation input to GridStat -OBS_GRID_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/PcpCombine_obs - -# directory containing climatology mean input to GridStat -# Not used in this example +# +# 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 +# +# Directory containing climatology mean input to GridStat. Not used in +# this example. +# GRID_STAT_CLIMO_STDEV_INPUT_DIR = - -# directory to write output from GridStat -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} - -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_03h_ensprob - -# End of [dir] section and start of [filename_templates] section +# +# 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}} + +STAGING_DIR = {{staging_dir}} + +# End of [dir] section and start of [filename_templates] section. [filename_templates] - -# Template to look for forecast input to GridStat relative to FCST_GRID_STAT_INPUT_DIR -FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc - -# Template to look for observation input to GridStat relative to OBS_GRID_STAT_INPUT_DIR -OBS_GRID_STAT_INPUT_TEMPLATE = {OBS_GRID_STAT_INPUT_DIR}/{valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2_a03h.nc - -# Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensprob - -# Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# Template for forecast input to GridStat relative to +# FCST_GRID_STAT_INPUT_DIR. +# +FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} +# +# Template for observation input to GridStat relative to +# OBS_GRID_STAT_INPUT_DIR. +# +OBS_GRID_STAT_INPUT_TEMPLATE = {{obs_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 to look for climatology input to GridStat relative to GRID_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# 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 = - -# Used to specify one or more verification mask files for GridStat -# Not used for this example +# +# 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_APCP06h.conf b/parm/metplus/GridStat_ensprob_APCP06h.conf index 739c0d08af..ac3233b885 100644 --- a/parm/metplus/GridStat_ensprob_APCP06h.conf +++ b/parm/metplus/GridStat_ensprob_APCP06h.conf @@ -1,4 +1,4 @@ -# Ensemble Prob GridStat METplus Configuration +# Ensemble probabilistic GridStat METplus Configuration # section heading for [config] variables - all items below this line and # before the next section heading correspond to the [config] section @@ -14,26 +14,26 @@ PROCESS_LIST = GridStat # VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set LOOP_BY = INIT -# Format of INIT_BEG and INT_END using % items +# Format of INIT_BEG and INIT_END using % items # %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. # see www.strftime.org for more information # %Y%m%d%H expands to YYYYMMDDHH INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} +INIT_BEG = {{cdate}} # End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} +INIT_END = {{cdate}} -# Increment between METplus runs (in seconds if no units are specified) -# Must be >= 60 seconds +# Increment between METplus runs (in seconds if no units are specified). +# Must be >= 60 seconds. INIT_INCREMENT = 3600 # List of forecast leads to process for each run time (init or valid) # In hours if units are not specified # If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[fhr_list]} +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 @@ -48,20 +48,22 @@ LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 -LOG_DIR = {OUTPUT_BASE}/log - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensprob/metplus_final.APCP06.conf - -# Location of MET config file to pass to GridStat +# +# 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_TO_GRID = FCST GRID_STAT_REGRID_VLD_THRESH = 0.5 GRID_STAT_REGRID_METHOD = BUDGET GRID_STAT_REGRID_WIDTH = 2 @@ -75,12 +77,21 @@ GRID_STAT_REGRID_SHAPE = SQUARE #GRID_STAT_GRID_WEIGHT_FLAG = -# Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensprob -FCST_NATIVE_DATA_TYPE = GRIB +# +# 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 -# Name to identify observation data in output -OBTYPE = CCPA +FCST_NATIVE_DATA_TYPE = GRIB +# +# Name to identify observation data in output. +# +OBTYPE = {{obtype}} OBS_NATIVE_DATA_TYPE = GRIB # set the desc value in the GridStat MET config file @@ -93,46 +104,141 @@ GRID_STAT_DESC = NA 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; -# Name of forecast variables -FCST_VAR1_NAME = APCP_06_A6_ENS_FREQ_gt0.0 +FIELDNAME_IN_MET_OUTPUT = {{fieldname_in_met_output}} +# +# FREQ +# Process as probability + +# +# Name of 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 "_A6_ENS_FREQ_gt0.0". +# Thus, below, FCST_VAR1_NAME must be set to the value of FIELDNAME_IN_MET_OUTPUT +# with "_A6_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_A6_ENS_FREQ_gt0.0 +FCST_VAR1_NAME = {FIELDNAME_IN_MET_OUTPUT}_A6_ENS_FREQ_gt0.0 FCST_VAR1_LEVELS = A06 FCST_VAR1_THRESH = ==0.1 - -OBS_VAR1_NAME = APCP_06 +# +# Name of observation variable 1 +# 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_MET_OUTPUT} OBS_VAR1_LEVELS = A06 OBS_VAR1_THRESH = >0.0 -FCST_VAR2_NAME = APCP_06_A6_ENS_FREQ_ge2.54 +#FCST_VAR2_NAME = APCP_A6_ENS_FREQ_ge2.54 +FCST_VAR2_NAME = {FIELDNAME_IN_MET_OUTPUT}_A6_ENS_FREQ_ge2.54 FCST_VAR2_LEVELS = A06 FCST_VAR2_THRESH = ==0.1 -OBS_VAR2_NAME = APCP_06 +#OBS_VAR2_NAME = APCP +OBS_VAR2_NAME = {FIELDNAME_IN_MET_OUTPUT} OBS_VAR2_LEVELS = A06 OBS_VAR2_THRESH = >=2.54 -FCST_VAR3_NAME = APCP_06_A6_ENS_FREQ_ge6.350 +#FCST_VAR3_NAME = APCP_A6_ENS_FREQ_ge6.350 +FCST_VAR3_NAME = {FIELDNAME_IN_MET_OUTPUT}_A6_ENS_FREQ_ge6.350 FCST_VAR3_LEVELS = A06 FCST_VAR3_THRESH = ==0.1 -OBS_VAR3_NAME = APCP_06 +#OBS_VAR3_NAME = APCP +OBS_VAR3_NAME = {FIELDNAME_IN_MET_OUTPUT} OBS_VAR3_LEVELS = A06 OBS_VAR3_THRESH = >=6.350 -FCST_VAR4_NAME = APCP_06_A6_ENS_FREQ_ge12.700 +#FCST_VAR4_NAME = APCP_A6_ENS_FREQ_ge12.700 +FCST_VAR4_NAME = {FIELDNAME_IN_MET_OUTPUT}_A6_ENS_FREQ_ge12.700 FCST_VAR4_LEVELS = A06 FCST_VAR4_THRESH = ==0.1 -OBS_VAR4_NAME = APCP_06 +#OBS_VAR4_NAME = APCP +OBS_VAR4_NAME = {FIELDNAME_IN_MET_OUTPUT} OBS_VAR4_LEVELS = A06 OBS_VAR4_THRESH = >=12.700 +#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_VAR5_NAME = APCP_A6_ENS_FREQ_gt0.0 +FCST_VAR5_NAME = {FIELDNAME_IN_MET_OUTPUT}_A6_ENS_FREQ_gt0.0 +FCST_VAR5_LEVELS = A06 +FCST_VAR5_THRESH = ==0.1 +FCST_VAR5_OPTIONS = prob = FALSE; + +#OBS_VAR5_NAME = APCP +OBS_VAR5_NAME = {FIELDNAME_IN_MET_OUTPUT} +OBS_VAR5_LEVELS = A06 +OBS_VAR5_THRESH = >0.0 +OBS_VAR5_OPTIONS = nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } + +#FCST_VAR6_NAME = APCP_A6_ENS_FREQ_ge2.54 +FCST_VAR6_NAME = {FIELDNAME_IN_MET_OUTPUT}_A6_ENS_FREQ_ge2.54 +FCST_VAR6_LEVELS = A06 +FCST_VAR6_THRESH = ==0.1 +FCST_VAR6_OPTIONS = prob = FALSE; + +#OBS_VAR6_NAME = APCP +OBS_VAR6_NAME = {FIELDNAME_IN_MET_OUTPUT} +OBS_VAR6_LEVELS = A06 +OBS_VAR6_THRESH = >=2.54 +OBS_VAR6_OPTIONS = nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } + +#FCST_VAR7_NAME = APCP_A6_ENS_FREQ_ge6.350 +FCST_VAR7_NAME = {FIELDNAME_IN_MET_OUTPUT}_A6_ENS_FREQ_ge6.350 +FCST_VAR7_LEVELS = A06 +FCST_VAR7_THRESH = ==0.1 +FCST_VAR7_OPTIONS = prob = FALSE; + +#OBS_VAR7_NAME = APCP +OBS_VAR7_NAME = {FIELDNAME_IN_MET_OUTPUT} +OBS_VAR7_LEVELS = A06 +OBS_VAR7_THRESH = >=6.350 +OBS_VAR7_OPTIONS = nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } + +#FCST_VAR8_NAME = APCP_A6_ENS_FREQ_ge12.700 +FCST_VAR8_NAME = {FIELDNAME_IN_MET_OUTPUT}_A6_ENS_FREQ_ge12.700 +FCST_VAR8_LEVELS = A06 +FCST_VAR8_THRESH = ==0.1 +FCST_VAR8_OPTIONS = prob = FALSE; + +#OBS_VAR8_NAME = APCP +OBS_VAR8_NAME = {FIELDNAME_IN_MET_OUTPUT} +OBS_VAR8_LEVELS = A06 +OBS_VAR8_THRESH = >=12.700 +OBS_VAR8_OPTIONS = 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. +# 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 @@ -140,13 +246,13 @@ 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 +GRID_STAT_NEIGHBORHOOD_FIELD = # width value passed to nbrhd dictionary in the MET config file -GRID_STAT_NEIGHBORHOOD_WIDTH = 3,5,7 +GRID_STAT_NEIGHBORHOOD_WIDTH = # shape value passed to nbrhd dictionary in the MET config file -GRID_STAT_NEIGHBORHOOD_SHAPE = SQUARE +GRID_STAT_NEIGHBORHOOD_SHAPE = # cov thresh list passed to nbrhd dictionary in the MET config file GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5 @@ -155,15 +261,17 @@ GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5 # 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 +# +# Set to true if forecast data is probabilistic. +# FCST_IS_PROB = True -FCST_PROB_IN_GRIB_PDS = False - +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 = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_ensprob +GRID_STAT_OUTPUT_PREFIX = {MODEL}_{{fieldname_in_met_filedir_names}}_{OBTYPE} # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = @@ -195,7 +303,7 @@ GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_ens GRID_STAT_MASK_GRID = # Statistical output types -GRID_STAT_OUTPUT_FLAG_FHO = NONE +GRID_STAT_OUTPUT_FLAG_FHO = NONE GRID_STAT_OUTPUT_FLAG_CTC = NONE GRID_STAT_OUTPUT_FLAG_CTS = NONE #GRID_STAT_OUTPUT_FLAG_MCTC = NONE @@ -213,68 +321,83 @@ 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 = 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_LATLON = TRUE +GRID_STAT_NC_PAIRS_FLAG_RAW = TRUE GRID_STAT_NC_PAIRS_FLAG_DIFF = FALSE GRID_STAT_NC_PAIRS_FLAG_CLIMO = FALSE -#GRID_STAT_NC_PAIRS_FLAG_CLIMO_CDP = FALSE GRID_STAT_NC_PAIRS_FLAG_WEIGHT = FALSE -GRID_STAT_NC_PAIRS_FLAG_NBRHD = FALSE +GRID_STAT_NC_PAIRS_FLAG_NBRHD = TRUE #GRID_STAT_NC_PAIRS_FLAG_FOURIER = FALSE #GRID_STAT_NC_PAIRS_FLAG_GRADIENT = FALSE #GRID_STAT_NC_PAIRS_FLAG_DISTANCE_MAP = FALSE GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE -# End of [config] section and start of [dir] section +# End of [config] section and start of [dir] section. [dir] - -# directory containing forecast input to GridStat -INPUT_BASE = {ENV[INPUT_BASE]} -FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} - -# directory containing observation input to GridStat -OBS_GRID_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/PcpCombine_obs - -# directory containing climatology mean input to GridStat -# Not used in this example +# +# 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 +# +# Directory containing climatology mean input to GridStat. Not used in +# this example. +# GRID_STAT_CLIMO_STDEV_INPUT_DIR = - -# directory to write output from GridStat -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} - -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_06h_ensprob - -# End of [dir] section and start of [filename_templates] section +# +# 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}} + +STAGING_DIR = {{staging_dir}} + +# End of [dir] section and start of [filename_templates] section. [filename_templates] - -# Template to look for forecast input to GridStat relative to FCST_GRID_STAT_INPUT_DIR -FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc - -# Template to look for observation input to GridStat relative to OBS_GRID_STAT_INPUT_DIR -OBS_GRID_STAT_INPUT_TEMPLATE = {OBS_GRID_STAT_INPUT_DIR}/{valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2_a06h.nc - -# Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensprob - -# Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# Template for forecast input to GridStat relative to +# FCST_GRID_STAT_INPUT_DIR. +# +FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} +# +# Template for observation input to GridStat relative to +# OBS_GRID_STAT_INPUT_DIR. +# +OBS_GRID_STAT_INPUT_TEMPLATE = {{obs_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 to look for climatology input to GridStat relative to GRID_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# 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 = - -# Used to specify one or more verification mask files for GridStat -# Not used for this example +# +# 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_APCP24h.conf b/parm/metplus/GridStat_ensprob_APCP24h.conf index 11befbad4c..7464940687 100644 --- a/parm/metplus/GridStat_ensprob_APCP24h.conf +++ b/parm/metplus/GridStat_ensprob_APCP24h.conf @@ -1,4 +1,4 @@ -# Ensemble Prob GridStat METplus Configuration +# Ensemble probabilistic GridStat METplus Configuration # section heading for [config] variables - all items below this line and # before the next section heading correspond to the [config] section @@ -14,26 +14,26 @@ PROCESS_LIST = GridStat # VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set LOOP_BY = INIT -# Format of INIT_BEG and INT_END using % items +# Format of INIT_BEG and INIT_END using % items # %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. # see www.strftime.org for more information # %Y%m%d%H expands to YYYYMMDDHH INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} +INIT_BEG = {{cdate}} # End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} +INIT_END = {{cdate}} -# Increment between METplus runs (in seconds if no units are specified) -# Must be >= 60 seconds +# Increment between METplus runs (in seconds if no units are specified). +# Must be >= 60 seconds. INIT_INCREMENT = 3600 # List of forecast leads to process for each run time (init or valid) # In hours if units are not specified # If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[fhr_list]} +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 @@ -48,20 +48,22 @@ LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 -LOG_DIR = {OUTPUT_BASE}/log - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensprob/metplus_final.APCP24.conf - -# Location of MET config file to pass to GridStat +# +# 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_TO_GRID = FCST GRID_STAT_REGRID_VLD_THRESH = 0.5 GRID_STAT_REGRID_METHOD = BUDGET GRID_STAT_REGRID_WIDTH = 2 @@ -75,12 +77,21 @@ GRID_STAT_REGRID_SHAPE = SQUARE #GRID_STAT_GRID_WEIGHT_FLAG = -# Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensprob -FCST_NATIVE_DATA_TYPE = GRIB +# +# 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 -# Name to identify observation data in output -OBTYPE = CCPA +FCST_NATIVE_DATA_TYPE = GRIB +# +# Name to identify observation data in output. +# +OBTYPE = {{obtype}} OBS_NATIVE_DATA_TYPE = GRIB # set the desc value in the GridStat MET config file @@ -93,46 +104,141 @@ GRID_STAT_DESC = NA 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; -# Name of forecast variables -FCST_VAR1_NAME = APCP_24_A24_ENS_FREQ_gt0.0 +FIELDNAME_IN_MET_OUTPUT = {{fieldname_in_met_output}} +# +# FREQ +# Process as probability + +# +# Name of 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 "_A24_ENS_FREQ_gt0.0". +# Thus, below, FCST_VAR1_NAME must be set to the value of FIELDNAME_IN_MET_OUTPUT +# with "_A24_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_A24_ENS_FREQ_gt0.0 +FCST_VAR1_NAME = {FIELDNAME_IN_MET_OUTPUT}_A24_ENS_FREQ_gt0.0 FCST_VAR1_LEVELS = A24 FCST_VAR1_THRESH = ==0.1 - -OBS_VAR1_NAME = APCP_24 +# +# Name of observation variable 1 +# 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_MET_OUTPUT} OBS_VAR1_LEVELS = A24 OBS_VAR1_THRESH = >0.0 -FCST_VAR2_NAME = APCP_24_A24_ENS_FREQ_ge6.350 +#FCST_VAR2_NAME = APCP_A24_ENS_FREQ_ge6.350 +FCST_VAR2_NAME = {FIELDNAME_IN_MET_OUTPUT}_A24_ENS_FREQ_ge6.350 FCST_VAR2_LEVELS = A24 FCST_VAR2_THRESH = ==0.1 -OBS_VAR2_NAME = APCP_24 +#OBS_VAR2_NAME = APCP +OBS_VAR2_NAME = {FIELDNAME_IN_MET_OUTPUT} OBS_VAR2_LEVELS = A24 OBS_VAR2_THRESH = >=6.350 -FCST_VAR3_NAME = APCP_24_A24_ENS_FREQ_ge12.700 +#FCST_VAR3_NAME = APCP_A24_ENS_FREQ_ge12.700 +FCST_VAR3_NAME = {FIELDNAME_IN_MET_OUTPUT}_A24_ENS_FREQ_ge12.700 FCST_VAR3_LEVELS = A24 FCST_VAR3_THRESH = ==0.1 -OBS_VAR3_NAME = APCP_24 +#OBS_VAR3_NAME = APCP +OBS_VAR3_NAME = {FIELDNAME_IN_MET_OUTPUT} OBS_VAR3_LEVELS = A24 OBS_VAR3_THRESH = >=12.700 -FCST_VAR4_NAME = APCP_24_A24_ENS_FREQ_ge25.400 +#FCST_VAR4_NAME = APCP_A24_ENS_FREQ_ge25.400 +FCST_VAR4_NAME = {FIELDNAME_IN_MET_OUTPUT}_A24_ENS_FREQ_ge25.400 FCST_VAR4_LEVELS = A24 FCST_VAR4_THRESH = ==0.1 -OBS_VAR4_NAME = APCP_24 +#OBS_VAR4_NAME = APCP +OBS_VAR4_NAME = {FIELDNAME_IN_MET_OUTPUT} OBS_VAR4_LEVELS = A24 OBS_VAR4_THRESH = >=25.400 +#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_VAR5_NAME = APCP_A24_ENS_FREQ_gt0.0 +FCST_VAR5_NAME = {FIELDNAME_IN_MET_OUTPUT}_A24_ENS_FREQ_gt0.0 +FCST_VAR5_LEVELS = A24 +FCST_VAR5_THRESH = ==0.1 +FCST_VAR5_OPTIONS = prob = FALSE; + +#OBS_VAR5_NAME = APCP +OBS_VAR5_NAME = {FIELDNAME_IN_MET_OUTPUT} +OBS_VAR5_LEVELS = A24 +OBS_VAR5_THRESH = >0.0 +OBS_VAR5_OPTIONS = nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } + +#FCST_VAR6_NAME = APCP_A24_ENS_FREQ_ge6.350 +FCST_VAR6_NAME = {FIELDNAME_IN_MET_OUTPUT}_A24_ENS_FREQ_ge6.350 +FCST_VAR6_LEVELS = A24 +FCST_VAR6_THRESH = ==0.1 +FCST_VAR6_OPTIONS = prob = FALSE; + +#OBS_VAR6_NAME = APCP +OBS_VAR6_NAME = {FIELDNAME_IN_MET_OUTPUT} +OBS_VAR6_LEVELS = A24 +OBS_VAR6_THRESH = >=6.350 +OBS_VAR6_OPTIONS = nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } + +#FCST_VAR7_NAME = APCP_A24_ENS_FREQ_ge12.700 +FCST_VAR7_NAME = {FIELDNAME_IN_MET_OUTPUT}_A24_ENS_FREQ_ge12.700 +FCST_VAR7_LEVELS = A24 +FCST_VAR7_THRESH = ==0.1 +FCST_VAR7_OPTIONS = prob = FALSE; + +#OBS_VAR7_NAME = APCP +OBS_VAR7_NAME = {FIELDNAME_IN_MET_OUTPUT} +OBS_VAR7_LEVELS = A24 +OBS_VAR7_THRESH = >=12.700 +OBS_VAR7_OPTIONS = nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } + +#FCST_VAR8_NAME = APCP_A24_ENS_FREQ_ge25.400 +FCST_VAR8_NAME = {FIELDNAME_IN_MET_OUTPUT}_A24_ENS_FREQ_ge25.400 +FCST_VAR8_LEVELS = A24 +FCST_VAR8_THRESH = ==0.1 +FCST_VAR8_OPTIONS = prob = FALSE; + +#OBS_VAR8_NAME = APCP +OBS_VAR8_NAME = {FIELDNAME_IN_MET_OUTPUT} +OBS_VAR8_LEVELS = A24 +OBS_VAR8_THRESH = >=25.400 +OBS_VAR8_OPTIONS = 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. +# 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 @@ -140,13 +246,13 @@ 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 +GRID_STAT_NEIGHBORHOOD_FIELD = # width value passed to nbrhd dictionary in the MET config file -GRID_STAT_NEIGHBORHOOD_WIDTH = 3,5,7 +GRID_STAT_NEIGHBORHOOD_WIDTH = # shape value passed to nbrhd dictionary in the MET config file -GRID_STAT_NEIGHBORHOOD_SHAPE = SQUARE +GRID_STAT_NEIGHBORHOOD_SHAPE = # cov thresh list passed to nbrhd dictionary in the MET config file GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5 @@ -155,15 +261,17 @@ GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5 # 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 +# +# Set to true if forecast data is probabilistic. +# FCST_IS_PROB = True -FCST_PROB_IN_GRIB_PDS = False - +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 = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_ensprob +GRID_STAT_OUTPUT_PREFIX = {MODEL}_{{fieldname_in_met_filedir_names}}_{OBTYPE} # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = @@ -195,12 +303,12 @@ GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_ens GRID_STAT_MASK_GRID = # Statistical output types -GRID_STAT_OUTPUT_FLAG_FHO = NONE +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_CNT = NONE #GRID_STAT_OUTPUT_FLAG_SL1L2 = NONE #GRID_STAT_OUTPUT_FLAG_SAL1L2 = NONE #GRID_STAT_OUTPUT_FLAG_VL1L2 = NONE @@ -213,68 +321,83 @@ 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 = 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_LATLON = TRUE +GRID_STAT_NC_PAIRS_FLAG_RAW = TRUE GRID_STAT_NC_PAIRS_FLAG_DIFF = FALSE GRID_STAT_NC_PAIRS_FLAG_CLIMO = FALSE -#GRID_STAT_NC_PAIRS_FLAG_CLIMO_CDP = FALSE GRID_STAT_NC_PAIRS_FLAG_WEIGHT = FALSE -GRID_STAT_NC_PAIRS_FLAG_NBRHD = FALSE +GRID_STAT_NC_PAIRS_FLAG_NBRHD = TRUE #GRID_STAT_NC_PAIRS_FLAG_FOURIER = FALSE #GRID_STAT_NC_PAIRS_FLAG_GRADIENT = FALSE #GRID_STAT_NC_PAIRS_FLAG_DISTANCE_MAP = FALSE GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE -# End of [config] section and start of [dir] section +# End of [config] section and start of [dir] section. [dir] - -# directory containing forecast input to GridStat -INPUT_BASE = {ENV[INPUT_BASE]} -FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} - -# directory containing observation input to GridStat -OBS_GRID_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/PcpCombine_obs - -# directory containing climatology mean input to GridStat -# Not used in this example +# +# 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 +# +# Directory containing climatology mean input to GridStat. Not used in +# this example. +# GRID_STAT_CLIMO_STDEV_INPUT_DIR = - -# directory to write output from GridStat -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} - -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_24h_ensprob - -# End of [dir] section and start of [filename_templates] section +# +# 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}} + +STAGING_DIR = {{staging_dir}} + +# End of [dir] section and start of [filename_templates] section. [filename_templates] - -# Template to look for forecast input to GridStat relative to FCST_GRID_STAT_INPUT_DIR -FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc - -# Template to look for observation input to GridStat relative to OBS_GRID_STAT_INPUT_DIR -OBS_GRID_STAT_INPUT_TEMPLATE = {OBS_GRID_STAT_INPUT_DIR}/{valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2_a24h.nc - -# Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensprob - -# Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# Template for forecast input to GridStat relative to +# FCST_GRID_STAT_INPUT_DIR. +# +FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} +# +# Template for observation input to GridStat relative to +# OBS_GRID_STAT_INPUT_DIR. +# +OBS_GRID_STAT_INPUT_TEMPLATE = {{obs_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 to look for climatology input to GridStat relative to GRID_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# 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 = - -# Used to specify one or more verification mask files for GridStat -# Not used for this example +# +# 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/scripts/exregional_run_met_gridstat_vx_ensprob.sh b/scripts/exregional_run_met_gridstat_vx_ensprob.sh index 9450ae1195..914c67824b 100755 --- a/scripts/exregional_run_met_gridstat_vx_ensprob.sh +++ b/scripts/exregional_run_met_gridstat_vx_ensprob.sh @@ -21,7 +21,7 @@ source_config_for_task "task_run_vx_ensgrid_prob|task_run_post" ${GLOBAL_VAR_DEF # #----------------------------------------------------------------------- # -# Get the full path to the file in which this script/function is located +# 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). # From ba9fa7629782af2c847586f0dece65c64297cc5d Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Sat, 18 Mar 2023 18:16:32 -0600 Subject: [PATCH 079/119] Modify GridStat_enspoint tasks for REFC and RETOP so they can use Jinja template METplus conf files. --- parm/FV3LAM_wflow.xml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/parm/FV3LAM_wflow.xml b/parm/FV3LAM_wflow.xml index f9827543e8..afecc5af7f 100644 --- a/parm/FV3LAM_wflow.xml +++ b/parm/FV3LAM_wflow.xml @@ -2838,7 +2838,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSPROB" {{ nnodes_run_met_gridstat_vx_ensprob_refc }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_refc }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_ensprob_refc }} @@ -2856,8 +2856,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + OBTYPEMRMS VARREFC + ACCUM_HH01 + MET_TOOLGRIDSTAT @@ -2872,7 +2874,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSPROB" {{ nnodes_run_met_gridstat_vx_ensprob_retop }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_retop }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_gridstat_vx_ensprob_retop }} @@ -2890,8 +2892,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + OBTYPEMRMS VARRETOP + ACCUM_HH01 + MET_TOOLGRIDSTAT From 2b9ee61ea3f91f3d07035140520417b215b9e07d Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Sat, 18 Mar 2023 18:17:35 -0600 Subject: [PATCH 080/119] Change METplus config files for GridStat_ensprob tasks so that they're Jinja templates. --- parm/metplus/GridStat_ensprob_APCP01h.conf | 10 +- parm/metplus/GridStat_ensprob_APCP03h.conf | 10 +- parm/metplus/GridStat_ensprob_APCP06h.conf | 10 +- parm/metplus/GridStat_ensprob_APCP24h.conf | 10 +- parm/metplus/GridStat_ensprob_REFC.conf | 310 ++++++++++++++------- parm/metplus/GridStat_ensprob_RETOP.conf | 291 +++++++++++++------ 6 files changed, 435 insertions(+), 206 deletions(-) diff --git a/parm/metplus/GridStat_ensprob_APCP01h.conf b/parm/metplus/GridStat_ensprob_APCP01h.conf index b82b49ae10..728a80275c 100644 --- a/parm/metplus/GridStat_ensprob_APCP01h.conf +++ b/parm/metplus/GridStat_ensprob_APCP01h.conf @@ -325,16 +325,16 @@ STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. [filename_templates] # -# Template for forecast input to GridStat relative to -# FCST_GRID_STAT_INPUT_DIR. -# -FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} -# # 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 = diff --git a/parm/metplus/GridStat_ensprob_APCP03h.conf b/parm/metplus/GridStat_ensprob_APCP03h.conf index 3522457945..a028e90932 100644 --- a/parm/metplus/GridStat_ensprob_APCP03h.conf +++ b/parm/metplus/GridStat_ensprob_APCP03h.conf @@ -373,16 +373,16 @@ STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. [filename_templates] # -# Template for forecast input to GridStat relative to -# FCST_GRID_STAT_INPUT_DIR. -# -FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} -# # 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 = diff --git a/parm/metplus/GridStat_ensprob_APCP06h.conf b/parm/metplus/GridStat_ensprob_APCP06h.conf index ac3233b885..84c058e449 100644 --- a/parm/metplus/GridStat_ensprob_APCP06h.conf +++ b/parm/metplus/GridStat_ensprob_APCP06h.conf @@ -373,16 +373,16 @@ STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. [filename_templates] # -# Template for forecast input to GridStat relative to -# FCST_GRID_STAT_INPUT_DIR. -# -FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} -# # 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 = diff --git a/parm/metplus/GridStat_ensprob_APCP24h.conf b/parm/metplus/GridStat_ensprob_APCP24h.conf index 7464940687..463a8a4033 100644 --- a/parm/metplus/GridStat_ensprob_APCP24h.conf +++ b/parm/metplus/GridStat_ensprob_APCP24h.conf @@ -373,16 +373,16 @@ STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. [filename_templates] # -# Template for forecast input to GridStat relative to -# FCST_GRID_STAT_INPUT_DIR. -# -FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} -# # 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 = diff --git a/parm/metplus/GridStat_ensprob_REFC.conf b/parm/metplus/GridStat_ensprob_REFC.conf index 32dcea2ba5..2348b46832 100644 --- a/parm/metplus/GridStat_ensprob_REFC.conf +++ b/parm/metplus/GridStat_ensprob_REFC.conf @@ -1,4 +1,4 @@ -# GridStat METplus Configuration +# Ensemble probabilistic GridStat METplus Configuration # section heading for [config] variables - all items below this line and # before the next section heading correspond to the [config] section @@ -14,26 +14,26 @@ PROCESS_LIST = GridStat # VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set LOOP_BY = INIT -# Format of INIT_BEG and INT_END using % items +# Format of INIT_BEG and INIT_END using % items # %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. # see www.strftime.org for more information # %Y%m%d%H expands to YYYYMMDDHH INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} +INIT_BEG = {{cdate}} # End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} +INIT_END = {{cdate}} -# Increment between METplus runs (in seconds if no units are specified) -# Must be >= 60 seconds +# Increment between METplus runs (in seconds if no units are specified). +# Must be >= 60 seconds. INIT_INCREMENT = 3600 # List of forecast leads to process for each run time (init or valid) # In hours if units are not specified # If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[fhr_list]} +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 @@ -48,20 +48,22 @@ LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 -LOG_DIR = {OUTPUT_BASE}/log - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensprob/metplus_final.REFC.conf - -# Location of MET config file to pass to GridStat +# +# 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_TO_GRID = FCST GRID_STAT_REGRID_VLD_THRESH = 0.5 GRID_STAT_REGRID_METHOD = BUDGET GRID_STAT_REGRID_WIDTH = 2 @@ -74,13 +76,21 @@ GRID_STAT_INTERP_TYPE_METHOD = NEAREST GRID_STAT_INTERP_TYPE_WIDTH = 1 GRID_STAT_GRID_WEIGHT_FLAG = NONE +# +# 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 -# Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensprob #FCST_NATIVE_DATA_TYPE = GRIB - -# Name to identify observation data in output -OBTYPE = MRMS +# +# Name to identify observation data in output. +# +OBTYPE = {{obtype}} OBS_NATIVE_DATA_TYPE = GRIB # set the desc value in the GridStat MET config file @@ -93,35 +103,65 @@ GRID_STAT_DESC = NA GRID_STAT_MET_CONFIG_OVERRIDES = cat_thresh = []; cnt_thresh = [NA]; cnt_logic = UNION; wind_thresh = [NA]; wind_logic = UNION; ci_alpha = [0.05]; rank_corr_flag = FALSE; +# FREQ +# Process as probability + +# # Name of forecast variable 1 -FCST_VAR1_NAME = REFC_L0_ENS_FREQ_ge20 +# 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, the type of statistic, etc. In this case, this suffix is +# "_L0_ENS_FREQ_ge20". Thus, below, FCST_VAR1_NAME must be set to the value +# of fieldname_in_met_output with "_L0_ENS_FREQ_ge20" appended to it. +# The same is true of other forecast fields below except the suffix is +# different. +# +#FCST_VAR1_NAME = REFC_L0_ENS_FREQ_ge20 +FCST_VAR1_NAME = {{fieldname_in_met_output}}_L0_ENS_FREQ_ge20 # List of levels to evaluate for forecast variable 1 -# A03 = 3 hour accumulation in GRIB file FCST_VAR1_LEVELS = L0 #FCST_VAR1_OPTIONS = cnt_thresh = [ >15 ]; cnt_logic = UNION; - +# # List of thresholds to evaluate for each name/level combination for -# forecast variable 1 +# forecast variable 1. +# FCST_VAR1_THRESH = ==0.1 #FCST_GRID_STAT_FILE_TYPE = - -# Name of observation variable 1 +# +# Name of 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 ... +# The same is true of other observation fields below. +# OBS_VAR1_NAME = MergedReflectivityQCComposite - -# List of levels to evaluate for observation variable 1 -# (*,*) is NetCDF notation - must include quotes around these values! -# must be the same length as FCST_VAR1_LEVELS -OBS_VAR1_LEVELS = Z500 +# +# List of levels to evaluate for observation variable 1. Must be the +# same length as FCST_VAR1_LEVELS. +# +OBS_VAR1_LEVELS = Z500 +# +# List of thresholds to evaluate for each name/level combination for +# observation variable 1. +# OBS_VAR1_THRESH = >=20.0 OBS_VAR1_OPTIONS = censor_thresh = lt-20; censor_val = -20.0; cnt_thresh = [ >15 ]; cnt_logic = UNION; -# List of thresholds to evaluate for each name/level combination for -# observation variable 1 - -FCST_VAR2_NAME = REFC_L0_ENS_FREQ_ge30 +#FCST_VAR2_NAME = REFC_L0_ENS_FREQ_ge30 +FCST_VAR2_NAME = {{fieldname_in_met_output}}_L0_ENS_FREQ_ge30 FCST_VAR2_LEVELS = L0 FCST_VAR2_THRESH = ==0.1 @@ -130,7 +170,8 @@ OBS_VAR2_LEVELS = Z500 OBS_VAR2_THRESH = >=30.0 OBS_VAR2_OPTIONS = censor_thresh = lt-20; censor_val = -20.0; cnt_thresh = [ >15 ]; cnt_logic = UNION; -FCST_VAR3_NAME = REFC_L0_ENS_FREQ_ge40 +#FCST_VAR3_NAME = REFC_L0_ENS_FREQ_ge40 +FCST_VAR3_NAME = {{fieldname_in_met_output}}_L0_ENS_FREQ_ge40 FCST_VAR3_LEVELS = L0 FCST_VAR3_THRESH = ==0.1 @@ -139,7 +180,8 @@ OBS_VAR3_LEVELS = Z500 OBS_VAR3_THRESH = >=40.0 OBS_VAR3_OPTIONS = censor_thresh = lt-20; censor_val = -20.0; cnt_thresh = [ >15 ]; cnt_logic = UNION; -FCST_VAR4_NAME = REFC_L0_ENS_FREQ_ge50 +#FCST_VAR4_NAME = REFC_L0_ENS_FREQ_ge50 +FCST_VAR4_NAME = {{fieldname_in_met_output}}_L0_ENS_FREQ_ge50 FCST_VAR4_LEVELS = L0 FCST_VAR4_THRESH = ==0.1 @@ -148,25 +190,73 @@ OBS_VAR4_LEVELS = Z500 OBS_VAR4_THRESH = >=50.0 OBS_VAR4_OPTIONS = censor_thresh = lt-20; censor_val = -20.0; cnt_thresh = [ >15 ]; cnt_logic = UNION; +#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_VAR5_NAME = REFC_L0_ENS_FREQ_ge20 +FCST_VAR5_NAME = {{fieldname_in_met_output}}_L0_ENS_FREQ_ge20 +FCST_VAR5_LEVELS = L0 +FCST_VAR5_THRESH = ==0.1 +FCST_VAR5_OPTIONS = prob = FALSE; + +OBS_VAR5_NAME = MergedReflectivityQCComposite +OBS_VAR5_LEVELS = Z500 +OBS_VAR5_THRESH = >=20.0 +OBS_VAR5_OPTIONS = censor_thresh = lt-20; censor_val = -20.0; cnt_thresh = [ >15 ]; cnt_logic = UNION; nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } + +#FCST_VAR6_NAME = REFC_L0_ENS_FREQ_ge30 +FCST_VAR6_NAME = {{fieldname_in_met_output}}_L0_ENS_FREQ_ge30 +FCST_VAR6_LEVELS = L0 +FCST_VAR6_THRESH = ==0.1 +FCST_VAR6_OPTIONS = prob = FALSE; + +OBS_VAR6_NAME = MergedReflectivityQCComposite +OBS_VAR6_LEVELS = Z500 +OBS_VAR6_THRESH = >=30.0 +OBS_VAR6_OPTIONS = censor_thresh = lt-20; censor_val = -20.0; cnt_thresh = [ >15 ]; cnt_logic = UNION; nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } + +#FCST_VAR7_NAME = REFC_L0_ENS_FREQ_ge40 +FCST_VAR7_NAME = {{fieldname_in_met_output}}_L0_ENS_FREQ_ge40 +FCST_VAR7_LEVELS = L0 +FCST_VAR7_THRESH = ==0.1 +FCST_VAR7_OPTIONS = prob = FALSE; + +OBS_VAR7_NAME = MergedReflectivityQCComposite +OBS_VAR7_LEVELS = Z500 +OBS_VAR7_THRESH = >=40.0 +OBS_VAR7_OPTIONS = censor_thresh = lt-20; censor_val = -20.0; cnt_thresh = [ >15 ]; cnt_logic = UNION; nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } + +#FCST_VAR8_NAME = REFC_L0_ENS_FREQ_ge50 +FCST_VAR8_NAME = {{fieldname_in_met_output}}_L0_ENS_FREQ_ge50 +FCST_VAR8_LEVELS = L0 +FCST_VAR8_THRESH = ==0.1 +FCST_VAR8_OPTIONS = prob = FALSE; + +OBS_VAR8_NAME = MergedReflectivityQCComposite +OBS_VAR8_LEVELS = Z500 +OBS_VAR8_THRESH = >=50.0 +OBS_VAR8_OPTIONS = censor_thresh = lt-20; censor_val = -20.0; cnt_thresh = [ >15 ]; cnt_logic = UNION; nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } + #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. +# 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 = -300 -OBS_GRID_STAT_FILE_WINDOW_END = 300 +OBS_GRID_STAT_FILE_WINDOW_BEGIN = -300 +OBS_GRID_STAT_FILE_WINDOW_END = 300 # MET GridStat neighborhood values # See the MET User's Guide GridStat section for more information -GRID_STAT_NEIGHBORHOOD_FIELD = BOTH +GRID_STAT_NEIGHBORHOOD_FIELD = # width value passed to nbrhd dictionary in the MET config file -GRID_STAT_NEIGHBORHOOD_WIDTH = 3, 5, 7 +GRID_STAT_NEIGHBORHOOD_WIDTH = # shape value passed to nbrhd dictionary in the MET config file -GRID_STAT_NEIGHBORHOOD_SHAPE = SQUARE +GRID_STAT_NEIGHBORHOOD_SHAPE = # cov thresh list passed to nbrhd dictionary in the MET config file GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5 @@ -175,22 +265,26 @@ GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5 # 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 +# +# 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 - -# Set to true if observation data is probabilistic -# Only used if configuring forecast data as the 'OBS' input +# +# Set to true if observation data is probabilistic. Only used if +# configuring forecast data as the 'OBS' input. +# OBS_IS_PROB = false - -# Only used if OBS_IS_PROB is true - sets probabilistic threshold +# +# Only used if OBS_IS_PROB is true - sets probabilistic threshold. +# OBS_GRID_STAT_PROB_THRESH = ==0.1 -GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_REFC_{OBTYPE}_ensprob +GRID_STAT_OUTPUT_PREFIX = {MODEL}_{{fieldname_in_met_filedir_names}}_{OBTYPE} # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = @@ -222,7 +316,7 @@ GRID_STAT_CLIMO_CDF_BINS = 1 GRID_STAT_MASK_GRID = # Statistical output types -GRID_STAT_OUTPUT_FLAG_FHO = NONE +GRID_STAT_OUTPUT_FLAG_FHO = NONE GRID_STAT_OUTPUT_FLAG_CTC = NONE GRID_STAT_OUTPUT_FLAG_CTS = NONE GRID_STAT_OUTPUT_FLAG_MCTC = NONE @@ -240,66 +334,82 @@ GRID_STAT_OUTPUT_FLAG_PRC = STAT GRID_STAT_OUTPUT_FLAG_ECLV = NONE GRID_STAT_OUTPUT_FLAG_NBRCTC = NONE GRID_STAT_OUTPUT_FLAG_NBRCTS = NONE -GRID_STAT_OUTPUT_FLAG_NBRCNT = NONE +GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT GRID_STAT_OUTPUT_FLAG_GRAD = 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_LATLON = TRUE +GRID_STAT_NC_PAIRS_FLAG_RAW = TRUE GRID_STAT_NC_PAIRS_FLAG_DIFF = FALSE GRID_STAT_NC_PAIRS_FLAG_CLIMO = FALSE GRID_STAT_NC_PAIRS_FLAG_WEIGHT = FALSE -GRID_STAT_NC_PAIRS_FLAG_NBRHD = FALSE +GRID_STAT_NC_PAIRS_FLAG_NBRHD = TRUE GRID_STAT_NC_PAIRS_FLAG_FOURIER = FALSE GRID_STAT_NC_PAIRS_FLAG_GRADIENT = FALSE GRID_STAT_NC_PAIRS_FLAG_DISTANCE_MAP = FALSE GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE -# End of [config] section and start of [dir] section +# End of [config] section and start of [dir] section. [dir] - -# directory containing forecast input to GridStat -INPUT_BASE = {ENV[INPUT_BASE]} -FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} - -# directory containing observation input to GridStat -OBS_GRID_STAT_INPUT_DIR = {ENV[OBS_DIR]} - -# directory containing climatology mean input to GridStat -# Not used in this example +# +# 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 +# +# Directory containing climatology mean input to GridStat. Not used in +# this example. +# GRID_STAT_CLIMO_STDEV_INPUT_DIR = - -# directory to write output from GridStat -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} - -STAGING_DIR = {OUTPUT_BASE}/stage/REFC_ensprob - -# End of [dir] section and start of [filename_templates] section +# +# 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}} + +STAGING_DIR = {{staging_dir}} + +# End of [dir] section and start of [filename_templates] section. [filename_templates] - -# Template to look for forecast input to GridStat relative to FCST_GRID_STAT_INPUT_DIR -FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_REFC_{OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc - -# Template to look for observation input to GridStat relative to OBS_GRID_STAT_INPUT_DIR -OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/MergedReflectivityQCComposite_00.50_{valid?fmt=%Y%m%d}-{valid?fmt=%H}0000.grib2 - -# Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensprob - -# Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# 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 to look for climatology input to GridStat relative to GRID_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# 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 = - -# Used to specify one or more verification mask files for GridStat -# Not used for this example +# +# 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_RETOP.conf b/parm/metplus/GridStat_ensprob_RETOP.conf index 26e203e8ae..a338e7f29e 100644 --- a/parm/metplus/GridStat_ensprob_RETOP.conf +++ b/parm/metplus/GridStat_ensprob_RETOP.conf @@ -1,4 +1,4 @@ -# GridStat METplus Configuration +# Ensemble probabilistic GridStat METplus Configuration # section heading for [config] variables - all items below this line and # before the next section heading correspond to the [config] section @@ -14,26 +14,26 @@ PROCESS_LIST = GridStat # VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set LOOP_BY = INIT -# Format of INIT_BEG and INT_END using % items +# Format of INIT_BEG and INIT_END using % items # %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. # see www.strftime.org for more information # %Y%m%d%H expands to YYYYMMDDHH INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} +INIT_BEG = {{cdate}} # End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} +INIT_END = {{cdate}} -# Increment between METplus runs (in seconds if no units are specified) -# Must be >= 60 seconds +# Increment between METplus runs (in seconds if no units are specified). +# Must be >= 60 seconds. INIT_INCREMENT = 3600 # List of forecast leads to process for each run time (init or valid) # In hours if units are not specified # If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[fhr_list]} +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 @@ -48,20 +48,22 @@ LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 -LOG_DIR = {OUTPUT_BASE}/log - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensprob/metplus_final.RETOP.conf - -# Location of MET config file to pass to GridStat +# +# 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_TO_GRID = FCST GRID_STAT_REGRID_VLD_THRESH = 0.5 GRID_STAT_REGRID_METHOD = BUDGET GRID_STAT_REGRID_WIDTH = 2 @@ -74,13 +76,21 @@ GRID_STAT_INTERP_TYPE_METHOD = NEAREST GRID_STAT_INTERP_TYPE_WIDTH = 1 GRID_STAT_GRID_WEIGHT_FLAG = NONE +# +# 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 -# Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensprob #FCST_NATIVE_DATA_TYPE = GRIB - -# Name to identify observation data in output -OBTYPE = MRMS +# +# Name to identify observation data in output. +# +OBTYPE = {{obtype}} OBS_NATIVE_DATA_TYPE = GRIB # set the desc value in the GridStat MET config file @@ -93,17 +103,57 @@ GRID_STAT_DESC = NA GRID_STAT_MET_CONFIG_OVERRIDES = cat_thresh = []; cnt_thresh = [NA]; cnt_logic = UNION; wind_thresh = [NA]; wind_logic = UNION; ci_alpha = [0.05]; rank_corr_flag = FALSE; +# FREQ +# Process as probability + +# # Name of forecast variable 1 -FCST_VAR1_NAME = RETOP_L0_ENS_FREQ_ge20 +# 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, the type of statistic, etc. In this case, this suffix is +# "_L0_ENS_FREQ_ge20". Thus, below, FCST_VAR1_NAME must be set to the value +# of fieldname_in_met_output with "_L0_ENS_FREQ_ge20" appended to it. +# The same is true of other forecast fields below except the suffix is +# different. +# +#FCST_VAR1_NAME = RETOP_L0_ENS_FREQ_ge20 +FCST_VAR1_NAME = {{fieldname_in_met_output}}_L0_ENS_FREQ_ge20 FCST_VAR1_LEVELS = L0 FCST_VAR1_THRESH = ==0.1 +#FCST_GRID_STAT_FILE_TYPE = +# +# Name of 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 ... +# The same is true of other observation fields below. +# OBS_VAR1_NAME = EchoTop18 +# +# List of levels to evaluate for observation variable 1. Must be the +# same length as FCST_VAR1_LEVELS. +# OBS_VAR1_LEVELS = Z500 +# +# List of thresholds to evaluate for each name/level combination for +# observation variable 1. +# OBS_VAR1_THRESH = >=20.0 OBS_VAR1_OPTIONS = censor_thresh = lt-20.0; censor_val = -20.0; cnt_thresh = [ >15 ]; cnt_logic = UNION; convert(x) = x * 3280.84 * 0.001; -FCST_VAR2_NAME = RETOP_L0_ENS_FREQ_ge30 +#FCST_VAR2_NAME = RETOP_L0_ENS_FREQ_ge30 +FCST_VAR2_NAME = {{fieldname_in_met_output}}_L0_ENS_FREQ_ge30 FCST_VAR2_LEVELS = L0 FCST_VAR2_THRESH = ==0.1 @@ -112,7 +162,8 @@ OBS_VAR2_LEVELS = Z500 OBS_VAR2_THRESH = >=30.0 OBS_VAR2_OPTIONS = censor_thresh = lt-20.0; censor_val = -20.0; cnt_thresh = [ >15 ]; cnt_logic = UNION; convert(x) = x * 3280.84 * 0.001; -FCST_VAR3_NAME = RETOP_L0_ENS_FREQ_ge40 +#FCST_VAR3_NAME = RETOP_L0_ENS_FREQ_ge40 +FCST_VAR3_NAME = {{fieldname_in_met_output}}_L0_ENS_FREQ_ge40 FCST_VAR3_LEVELS = L0 FCST_VAR3_THRESH = ==0.1 @@ -121,7 +172,8 @@ OBS_VAR3_LEVELS = Z500 OBS_VAR3_THRESH = >=40.0 OBS_VAR3_OPTIONS = censor_thresh = lt-20.0; censor_val = -20.0; cnt_thresh = [ >15 ]; cnt_logic = UNION; convert(x) = x * 3280.84 * 0.001; -FCST_VAR4_NAME = RETOP_L0_ENS_FREQ_ge50 +#FCST_VAR4_NAME = RETOP_L0_ENS_FREQ_ge50 +FCST_VAR4_NAME = {{fieldname_in_met_output}}_L0_ENS_FREQ_ge50 FCST_VAR4_LEVELS = L0 FCST_VAR4_THRESH = ==0.1 @@ -130,26 +182,73 @@ OBS_VAR4_LEVELS = Z500 OBS_VAR4_THRESH = >=50.0 OBS_VAR4_OPTIONS = censor_thresh = lt-20.0; censor_val = -20.0; cnt_thresh = [ >15 ]; cnt_logic = UNION; convert(x) = x * 3280.84 * 0.001; +#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_VAR5_NAME = RETOP_L0_ENS_FREQ_ge20 +FCST_VAR5_NAME = {{fieldname_in_met_output}}_L0_ENS_FREQ_ge20 +FCST_VAR5_LEVELS = L0 +FCST_VAR5_THRESH = ==0.1 +FCST_VAR5_OPTIONS = prob = FALSE; + +OBS_VAR5_NAME = EchoTop18 +OBS_VAR5_LEVELS = Z500 +OBS_VAR5_THRESH = >=20.0 +OBS_VAR5_OPTIONS = censor_thresh = lt-20.0; censor_val = -20.0; cnt_thresh = [ >15 ]; cnt_logic = UNION; convert(x) = x * 3280.84 * 0.001; nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } + +#FCST_VAR6_NAME = RETOP_L0_ENS_FREQ_ge30 +FCST_VAR6_NAME = {{fieldname_in_met_output}}_L0_ENS_FREQ_ge30 +FCST_VAR6_LEVELS = L0 +FCST_VAR6_THRESH = ==0.1 +FCST_VAR6_OPTIONS = prob = FALSE; + +OBS_VAR6_NAME = EchoTop18 +OBS_VAR6_LEVELS = Z500 +OBS_VAR6_THRESH = >=30.0 +OBS_VAR6_OPTIONS = censor_thresh = lt-20.0; censor_val = -20.0; cnt_thresh = [ >15 ]; cnt_logic = UNION; convert(x) = x * 3280.84 * 0.001; nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } + +#FCST_VAR7_NAME = RETOP_L0_ENS_FREQ_ge40 +FCST_VAR7_NAME = {{fieldname_in_met_output}}_L0_ENS_FREQ_ge40 +FCST_VAR7_LEVELS = L0 +FCST_VAR7_THRESH = ==0.1 +FCST_VAR7_OPTIONS = prob = FALSE; + +OBS_VAR7_NAME = EchoTop18 +OBS_VAR7_LEVELS = Z500 +OBS_VAR7_THRESH = >=40.0 +OBS_VAR7_OPTIONS = censor_thresh = lt-20.0; censor_val = -20.0; cnt_thresh = [ >15 ]; cnt_logic = UNION; convert(x) = x * 3280.84 * 0.001; nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } + +#FCST_VAR8_NAME = RETOP_L0_ENS_FREQ_ge50 +FCST_VAR8_NAME = {{fieldname_in_met_output}}_L0_ENS_FREQ_ge50 +FCST_VAR8_LEVELS = L0 +FCST_VAR8_THRESH = ==0.1 +FCST_VAR8_OPTIONS = prob = FALSE; + +OBS_VAR8_NAME = EchoTop18 +OBS_VAR8_LEVELS = Z500 +OBS_VAR8_THRESH = >=50.0 +OBS_VAR8_OPTIONS = censor_thresh = lt-20.0; censor_val = -20.0; cnt_thresh = [ >15 ]; cnt_logic = UNION; convert(x) = x * 3280.84 * 0.001; nbrhd = { field = OBS; shape = SQUARE; width = [ 1 ]; vld_thresh = 1.0; } #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. +# 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 = -300 -OBS_GRID_STAT_FILE_WINDOW_END = 300 +OBS_GRID_STAT_FILE_WINDOW_BEGIN = -300 +OBS_GRID_STAT_FILE_WINDOW_END = 300 # MET GridStat neighborhood values # See the MET User's Guide GridStat section for more information -GRID_STAT_NEIGHBORHOOD_FIELD = BOTH +GRID_STAT_NEIGHBORHOOD_FIELD = # width value passed to nbrhd dictionary in the MET config file -GRID_STAT_NEIGHBORHOOD_WIDTH = 3, 5, 7 +GRID_STAT_NEIGHBORHOOD_WIDTH = # shape value passed to nbrhd dictionary in the MET config file -GRID_STAT_NEIGHBORHOOD_SHAPE = SQUARE +GRID_STAT_NEIGHBORHOOD_SHAPE = # cov thresh list passed to nbrhd dictionary in the MET config file GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5 @@ -158,22 +257,26 @@ GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5 # 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 +# +# 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 - -# Set to true if observation data is probabilistic -# Only used if configuring forecast data as the 'OBS' input +# +# Set to true if observation data is probabilistic. Only used if +# configuring forecast data as the 'OBS' input. +# OBS_IS_PROB = false - -# Only used if OBS_IS_PROB is true - sets probabilistic threshold +# +# Only used if OBS_IS_PROB is true - sets probabilistic threshold. +# OBS_GRID_STAT_PROB_THRESH = ==0.1 -GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_RETOP_{OBTYPE}_ensprob +GRID_STAT_OUTPUT_PREFIX = {MODEL}_{{fieldname_in_met_filedir_names}}_{OBTYPE} # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = @@ -223,66 +326,82 @@ GRID_STAT_OUTPUT_FLAG_PRC = STAT GRID_STAT_OUTPUT_FLAG_ECLV = NONE GRID_STAT_OUTPUT_FLAG_NBRCTC = NONE GRID_STAT_OUTPUT_FLAG_NBRCTS = NONE -GRID_STAT_OUTPUT_FLAG_NBRCNT = NONE +GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT GRID_STAT_OUTPUT_FLAG_GRAD = 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_LATLON = TRUE +GRID_STAT_NC_PAIRS_FLAG_RAW = TRUE GRID_STAT_NC_PAIRS_FLAG_DIFF = FALSE GRID_STAT_NC_PAIRS_FLAG_CLIMO = FALSE GRID_STAT_NC_PAIRS_FLAG_WEIGHT = FALSE -GRID_STAT_NC_PAIRS_FLAG_NBRHD = FALSE +GRID_STAT_NC_PAIRS_FLAG_NBRHD = TRUE GRID_STAT_NC_PAIRS_FLAG_FOURIER = FALSE GRID_STAT_NC_PAIRS_FLAG_GRADIENT = FALSE GRID_STAT_NC_PAIRS_FLAG_DISTANCE_MAP = FALSE GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE -# End of [config] section and start of [dir] section +# End of [config] section and start of [dir] section. [dir] - -# directory containing forecast input to GridStat -INPUT_BASE = {ENV[INPUT_BASE]} -FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} - -# directory containing observation input to GridStat -OBS_GRID_STAT_INPUT_DIR = {ENV[OBS_DIR]} - -# directory containing climatology mean input to GridStat -# Not used in this example +# +# 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 +# +# Directory containing climatology mean input to GridStat. Not used in +# this example. +# GRID_STAT_CLIMO_STDEV_INPUT_DIR = - -# directory to write output from GridStat -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} - -STAGING_DIR = {OUTPUT_BASE}/stage/RETOP_ensprob - -# End of [dir] section and start of [filename_templates] section +# +# 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}} + +STAGING_DIR = {{staging_dir}} + +# End of [dir] section and start of [filename_templates] section. [filename_templates] - -# Template to look for forecast input to GridStat relative to FCST_GRID_STAT_INPUT_DIR -FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_RETOP_{OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc - -# Template to look for observation input to GridStat relative to OBS_GRID_STAT_INPUT_DIR -OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/EchoTop_18_00.50_{valid?fmt=%Y%m%d}-{valid?fmt=%H}0000.grib2 - -# Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensprob - -# Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# 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 to look for climatology input to GridStat relative to GRID_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# 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 = - -# Used to specify one or more verification mask files for GridStat -# Not used for this example +# +# 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 From d56d07cf1cd52df80e1ff13eab0fd905349cac77 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Sun, 19 Mar 2023 03:20:47 -0600 Subject: [PATCH 081/119] Modificataions to allow PointStat_ensprob tasks for SFC and UPA to use templates from which to generate METplus config files. --- parm/FV3LAM_wflow.xml | 12 ++++-- parm/metplus/PointStat_ensprob_SFC.conf | 51 +++++++++++++----------- parm/metplus/PointStat_ensprob_UPA.conf | 52 ++++++++++++++----------- 3 files changed, 67 insertions(+), 48 deletions(-) diff --git a/parm/FV3LAM_wflow.xml b/parm/FV3LAM_wflow.xml index afecc5af7f..68f16e2da3 100644 --- a/parm/FV3LAM_wflow.xml +++ b/parm/FV3LAM_wflow.xml @@ -2912,7 +2912,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSPROB" {{ nnodes_run_met_pointstat_vx_ensprob_sfc }}:ppn={{ ppn_run_met_pointstat_vx_ensprob_sfc }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_pointstat_vx_ensprob_sfc }} @@ -2930,8 +2930,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; + OBTYPENDAS VARSFC - ACCUM_HH + ACCUM_HH01 + MET_TOOLPOINTSTAT @@ -2945,7 +2947,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSPROB" {{ nnodes_run_met_pointstat_vx_ensprob_upa }}:ppn={{ ppn_run_met_pointstat_vx_ensprob_upa }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_pointstat_vx_ensprob_upa }} @@ -2963,8 +2965,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; + OBTYPENDAS VARUPA - ACCUM_HH + ACCUM_HH01 + MET_TOOLPOINTSTAT diff --git a/parm/metplus/PointStat_ensprob_SFC.conf b/parm/metplus/PointStat_ensprob_SFC.conf index 100bfa2313..0c8a44ae9f 100644 --- a/parm/metplus/PointStat_ensprob_SFC.conf +++ b/parm/metplus/PointStat_ensprob_SFC.conf @@ -19,10 +19,10 @@ LOOP_BY = INIT INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} +INIT_BEG = {{cdate}} # End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} +INIT_END = {{cdate}} # Increment between METplus runs (in seconds if no units are specified). # Must be >= 60 seconds. @@ -31,7 +31,7 @@ INIT_INCREMENT = 3600 # List of forecast leads to process for each run time (init or valid) # In hours if units are not specified # If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[FHR_LIST]} +LEAD_SEQ = {{fhr_list}} # Order of loops to process data - Options are times, processes # Not relevant if only one item is in the PROCESS_LIST @@ -45,14 +45,16 @@ LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for PointStat only LOG_POINT_STAT_VERBOSITY = 2 + +FIELDNAME_IN_MET_FILEDIR_NAMES = {{fieldname_in_met_filedir_names}} # # Specify the name of the METplus log file. # -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_ensprob_SFC_{ENV[CDATE]} +LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}} # # Specify the location and name of the final METplus conf file. # -METPLUS_CONF = {OUTPUT_BASE}/{ENV[CDATE]}/metprd/PointStat_ensprob/metplus_final.SFC.conf +METPLUS_CONF = {POINT_STAT_OUTPUT_DIR}/metplus_final.{{metplus_config_fn}} # # Location of MET config file to pass to GridStat # References PARM_BASE, which is the location of the parm directory @@ -121,13 +123,13 @@ POINT_STAT_OFFSETS = 0 # suffix to MODEL that identifies the data as ensemble-probabilistic. # This makes it easier to identify each curve. # -MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensprob +MODEL = {{vx_fcst_model_name}}_ensprob POINT_STAT_DESC = NA # # Name to identify observation data in output. # -OBTYPE = NDAS +OBTYPE = {{obtype}} # Regrid to specified grid. Indicate NONE if no regridding, or the grid id # (e.g. G212) @@ -135,7 +137,7 @@ POINT_STAT_REGRID_TO_GRID = NONE POINT_STAT_REGRID_METHOD = BILIN POINT_STAT_REGRID_WIDTH = 2 -POINT_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_ADPSFC_{OBTYPE}_ensprob +POINT_STAT_OUTPUT_PREFIX = {MODEL}_ADP{FIELDNAME_IN_MET_FILEDIR_NAMES}_{OBTYPE} # sets the -obs_valid_beg command line argument (optional) # not used for this example @@ -159,10 +161,12 @@ POINT_STAT_STATION_ID = # Message types, if all message types are to be returned, leave this empty, # otherwise indicate the message types of interest. -POINT_STAT_MESSAGE_TYPE = ADPSFC +POINT_STAT_MESSAGE_TYPE = ADP{FIELDNAME_IN_MET_FILEDIR_NAMES} +# # Variables and levels as specified in the field dictionary of the METplus # PointStat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, # (optional) FCST_VARn_OPTION +# # set to True to run PointStat once for each name/level combination # set to False to run PointStat once per run time including all fields @@ -378,12 +382,11 @@ FCST_PROB_IN_GRIB_PDS = False # # Directory containing observation input to PointStat. # -OBS_POINT_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/Pb2nc_obs +OBS_POINT_STAT_INPUT_DIR = {{obs_input_dir}} # # Directory containing forecast input to PointStat. # -INPUT_BASE = {ENV[INPUT_BASE]} -FCST_POINT_STAT_INPUT_DIR = {INPUT_BASE} +FCST_POINT_STAT_INPUT_DIR = {{fcst_input_dir}} # # Directory containing climatology mean input to PointStat. Not used in # this example. @@ -397,27 +400,31 @@ POINT_STAT_CLIMO_STDEV_INPUT_DIR = # # Directory in which to write output from PointStat. # -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -POINT_STAT_OUTPUT_DIR = {OUTPUT_BASE} +# OUTPUT_BASE apparently has to be set to something; it cannot be left +# to its default value. But it is not explicitly used elsewhere in this +# configuration file. +# +OUTPUT_BASE = {{output_base}} +POINT_STAT_OUTPUT_DIR = {{output_dir}} -STAGING_DIR = {OUTPUT_BASE}/stage/SFC_ensprob +STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. [filename_templates] # -# Template for forecast input to PointStat relative to -# FCST_POINT_STAT_INPUT_DIR. -# -FCST_POINT_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_ADPSFC_{OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc -# # Template for observation input to PointStat relative to # OBS_POINT_STAT_INPUT_DIR. # -OBS_POINT_STAT_INPUT_TEMPLATE = prepbufr.ndas{ENV[DOT_ENSMEM]}.{valid?fmt=%Y%m%d%H}.nc +OBS_POINT_STAT_INPUT_TEMPLATE = {{obs_input_fn_template}} +# +# Template for forecast input to PointStat relative to +# FCST_POINT_STAT_INPUT_DIR. +# +FCST_POINT_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # # Template for output from PointStat relative to POINT_STAT_OUTPUT_DIR. # -POINT_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/PointStat_ensprob +POINT_STAT_OUTPUT_TEMPLATE = # # Template for climatology input to PointStat relative to # POINT_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. diff --git a/parm/metplus/PointStat_ensprob_UPA.conf b/parm/metplus/PointStat_ensprob_UPA.conf index 3cb0a49375..6da69cc271 100644 --- a/parm/metplus/PointStat_ensprob_UPA.conf +++ b/parm/metplus/PointStat_ensprob_UPA.conf @@ -19,10 +19,10 @@ LOOP_BY = INIT INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} +INIT_BEG = {{cdate}} # End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} +INIT_END = {{cdate}} # Increment between METplus runs (in seconds if no units are specified). # Must be >= 60 seconds. @@ -31,7 +31,7 @@ INIT_INCREMENT = 3600 # List of forecast leads to process for each run time (init or valid) # In hours if units are not specified # If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[FHR_LIST]} +LEAD_SEQ = {{fhr_list}} # Order of loops to process data - Options are times, processes # Not relevant if only one item is in the PROCESS_LIST @@ -45,14 +45,16 @@ LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for PointStat only LOG_POINT_STAT_VERBOSITY = 2 + +FIELDNAME_IN_MET_FILEDIR_NAMES = {{fieldname_in_met_filedir_names}} # # Specify the name of the METplus log file. # -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_ensprob_UPA_{ENV[CDATE]} +LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}} # # Specify the location and name of the final METplus conf file. # -METPLUS_CONF = {OUTPUT_BASE}/{ENV[CDATE]}/metprd/PointStat_ensprob/metplus_final.UPA.conf +METPLUS_CONF = {POINT_STAT_OUTPUT_DIR}/metplus_final.{{metplus_config_fn}} # # Location of MET config file to pass to GridStat # References PARM_BASE, which is the location of the parm directory @@ -121,13 +123,13 @@ POINT_STAT_OFFSETS = 0 # suffix to MODEL that identifies the data as ensemble-probabilistic. # This makes it easier to identify each curve. # -MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensprob +MODEL = {{vx_fcst_model_name}}_prob POINT_STAT_DESC = NA # # Name to identify observation data in output. # -OBTYPE = NDAS +OBTYPE = {{obtype}} # Regrid to specified grid. Indicate NONE if no regridding, or the grid id # (e.g. G212) @@ -135,7 +137,7 @@ POINT_STAT_REGRID_TO_GRID = NONE POINT_STAT_REGRID_METHOD = BILIN POINT_STAT_REGRID_WIDTH = 2 -POINT_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_ADPUPA_{OBTYPE}_ensprob +POINT_STAT_OUTPUT_PREFIX = {MODEL}_ADP{FIELDNAME_IN_MET_FILEDIR_NAMES}_{OBTYPE} # sets the -obs_valid_beg command line argument (optional) # not used for this example @@ -159,10 +161,12 @@ POINT_STAT_STATION_ID = # Message types, if all message types are to be returned, leave this empty, # otherwise indicate the message types of interest. -POINT_STAT_MESSAGE_TYPE = ADPUPA +POINT_STAT_MESSAGE_TYPE = ADP{FIELDNAME_IN_MET_FILEDIR_NAMES} +# # Variables and levels as specified in the field dictionary of the METplus # PointStat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, # (optional) FCST_VARn_OPTION +# # set to True to run PointStat once for each name/level combination # set to False to run PointStat once per run time including all fields @@ -171,6 +175,7 @@ POINT_STAT_ONCE_PER_FIELD = False # fields to compare # Note: If FCST_VAR_* is set, then a corresponding OBS_VAR_* variable must be set # To use one variables for both forecast and observation data, set BOTH_VAR_* instead +#FREQ FCST_VAR1_NAME = TMP_P850_ENS_FREQ_ge288 FCST_VAR1_LEVELS = P850 FCST_VAR1_THRESH = ==0.1 @@ -499,12 +504,11 @@ FCST_PROB_IN_GRIB_PDS = False # # Directory containing observation input to PointStat. # -OBS_POINT_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/Pb2nc_obs +OBS_POINT_STAT_INPUT_DIR = {{obs_input_dir}} # # Directory containing forecast input to PointStat. # -INPUT_BASE = {ENV[INPUT_BASE]} -FCST_POINT_STAT_INPUT_DIR = {INPUT_BASE} +FCST_POINT_STAT_INPUT_DIR = {{fcst_input_dir}} # # Directory containing climatology mean input to PointStat. Not used in # this example. @@ -518,27 +522,31 @@ POINT_STAT_CLIMO_STDEV_INPUT_DIR = # # Directory in which to write output from PointStat. # -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -POINT_STAT_OUTPUT_DIR = {OUTPUT_BASE} +# OUTPUT_BASE apparently has to be set to something; it cannot be left +# to its default value. But it is not explicitly used elsewhere in this +# configuration file. +# +OUTPUT_BASE = {{output_base}} +POINT_STAT_OUTPUT_DIR = {{output_dir}} -STAGING_DIR = {OUTPUT_BASE}/stage/UPA_ensprob +STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. [filename_templates] # -# Template for forecast input to PointStat relative to -# FCST_POINT_STAT_INPUT_DIR. -# -FCST_POINT_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_ADPUPA_{OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc -# # Template for observation input to PointStat relative to # OBS_POINT_STAT_INPUT_DIR. # -OBS_POINT_STAT_INPUT_TEMPLATE = prepbufr.ndas{ENV[DOT_ENSMEM]}.{valid?fmt=%Y%m%d%H}.nc +OBS_POINT_STAT_INPUT_TEMPLATE = {{obs_input_fn_template}} +# +# Template for forecast input to PointStat relative to +# FCST_POINT_STAT_INPUT_DIR. +# +FCST_POINT_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # # Template for output from PointStat relative to POINT_STAT_OUTPUT_DIR. # -POINT_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/PointStat_ensprob +POINT_STAT_OUTPUT_TEMPLATE = # # Template for climatology input to PointStat relative to # POINT_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. From 300a88b2ec663742669789586978d258178cffeb Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Sun, 19 Mar 2023 05:09:26 -0600 Subject: [PATCH 082/119] Minor edits to comments. --- parm/metplus/GridStat_APCP01h.conf | 6 ++---- parm/metplus/GridStat_REFC.conf | 6 ++---- parm/metplus/GridStat_RETOP.conf | 6 ++---- parm/metplus/Pb2nc_obs.conf | 2 +- 4 files changed, 7 insertions(+), 13 deletions(-) diff --git a/parm/metplus/GridStat_APCP01h.conf b/parm/metplus/GridStat_APCP01h.conf index 007cffb230..6537cd520d 100644 --- a/parm/metplus/GridStat_APCP01h.conf +++ b/parm/metplus/GridStat_APCP01h.conf @@ -290,13 +290,11 @@ STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. [filename_templates] # -# Template to look for forecast input to GridStat relative to -# FCST_GRID_STAT_INPUT_DIR. +# Template for forecast input to GridStat relative to FCST_GRID_STAT_INPUT_DIR. # FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # -# Template to look for observation input to GridStat relative to -# OBS_GRID_STAT_INPUT_DIR. +# Template for observation input to GridStat relative to OBS_GRID_STAT_INPUT_DIR. # OBS_GRID_STAT_INPUT_TEMPLATE = {{obs_input_fn_template}} # diff --git a/parm/metplus/GridStat_REFC.conf b/parm/metplus/GridStat_REFC.conf index 6eb6f5e2fc..80497a8713 100644 --- a/parm/metplus/GridStat_REFC.conf +++ b/parm/metplus/GridStat_REFC.conf @@ -297,13 +297,11 @@ STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. [filename_templates] # -# Template to look for forecast input to GridStat relative to -# FCST_GRID_STAT_INPUT_DIR. +# Template for forecast input to GridStat relative to FCST_GRID_STAT_INPUT_DIR. # FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # -# Template to look for observation input to GridStat relative to -# OBS_GRID_STAT_INPUT_DIR. +# Template for observation input to GridStat relative to OBS_GRID_STAT_INPUT_DIR. # OBS_GRID_STAT_INPUT_TEMPLATE = {{obs_input_fn_template}} # diff --git a/parm/metplus/GridStat_RETOP.conf b/parm/metplus/GridStat_RETOP.conf index a7d82f3929..a41ef130c4 100644 --- a/parm/metplus/GridStat_RETOP.conf +++ b/parm/metplus/GridStat_RETOP.conf @@ -298,13 +298,11 @@ STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. [filename_templates] # -# Template to look for forecast input to GridStat relative to -# FCST_GRID_STAT_INPUT_DIR. +# Template for forecast input to GridStat relative to FCST_GRID_STAT_INPUT_DIR. # FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # -# Template to look for observation input to GridStat relative to -# OBS_GRID_STAT_INPUT_DIR. +# Template for observation input to GridStat relative to OBS_GRID_STAT_INPUT_DIR. # OBS_GRID_STAT_INPUT_TEMPLATE = {{obs_input_fn_template}} # diff --git a/parm/metplus/Pb2nc_obs.conf b/parm/metplus/Pb2nc_obs.conf index be19983b90..ac16e62f2a 100644 --- a/parm/metplus/Pb2nc_obs.conf +++ b/parm/metplus/Pb2nc_obs.conf @@ -115,7 +115,7 @@ OUTPUT_BASE = {{output_base}} # End of [dir] section and start of [filename_templates] section. [filename_templates] # -# Template to look for prepbvur input to PB2NC relative to PB2NC_INPUT_DIR. +# Template for prepbvur input to PB2NC relative to PB2NC_INPUT_DIR. # PB2NC_INPUT_TEMPLATE = {{obs_input_fn_template}} # From 1c95a37be5a00c3dd18d3fc63059b3f266e6134f Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Sun, 19 Mar 2023 05:10:43 -0600 Subject: [PATCH 083/119] Remove files that are now replaced by GridStat_ensmean_APCPgt01h.conf. --- parm/metplus/GridStat_ensmean_APCP03h.conf | 270 --------------------- parm/metplus/GridStat_ensmean_APCP06h.conf | 270 --------------------- parm/metplus/GridStat_ensmean_APCP24h.conf | 270 --------------------- 3 files changed, 810 deletions(-) delete mode 100644 parm/metplus/GridStat_ensmean_APCP03h.conf delete mode 100644 parm/metplus/GridStat_ensmean_APCP06h.conf delete mode 100644 parm/metplus/GridStat_ensmean_APCP24h.conf diff --git a/parm/metplus/GridStat_ensmean_APCP03h.conf b/parm/metplus/GridStat_ensmean_APCP03h.conf deleted file mode 100644 index 09d16759a6..0000000000 --- a/parm/metplus/GridStat_ensmean_APCP03h.conf +++ /dev/null @@ -1,270 +0,0 @@ -# Ensemble Mean 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 INT_END using % items -# %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. -# see www.strftime.org for more information -# %Y%m%d%H expands to YYYYMMDDHH -INIT_TIME_FMT = %Y%m%d%H - -# Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} - -# End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} - -# Increment between METplus runs (in seconds if no units are specified) -# Must be >= 60 seconds -INIT_INCREMENT = 3600 - -# List of forecast leads to process for each run time (init or valid) -# In hours if units are not specified -# If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[fhr_list]} - -# Order of loops to process data - Options are times, processes -# Not relevant if only one item is in the PROCESS_LIST -# times = run all wrappers in the PROCESS_LIST for a single run time, then -# increment the run time and run all wrappers again until all times have -# been evaluated. -# processes = run the first wrapper in the PROCESS_LIST for all times -# specified, then repeat for the next item in the PROCESS_LIST until all -# wrappers have been run -LOOP_ORDER = times - -# Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only -#LOG_GRID_STAT_VERBOSITY = 2 - -LOG_DIR = {OUTPUT_BASE}/log - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensmean/metplus_final.APCP03.conf - -# Location of MET config file to pass to GridStat -GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped - -# grid to remap data. Value is set as the 'to_grid' variable in the 'regrid' dictionary -# See MET User's Guide for more information -GRID_STAT_REGRID_TO_GRID = FCST -GRID_STAT_REGRID_VLD_THRESH = 0.5 -GRID_STAT_REGRID_METHOD = BUDGET -GRID_STAT_REGRID_WIDTH = 2 -GRID_STAT_REGRID_SHAPE = SQUARE - -#GRID_STAT_INTERP_FIELD = BOTH -#GRID_STAT_INTERP_VLD_THRESH = 1.0 -#GRID_STAT_INTERP_SHAPE = SQUARE -#GRID_STAT_INTERP_TYPE_METHOD = NEAREST -#GRID_STAT_INTERP_TYPE_WIDTH = 1 - -#GRID_STAT_GRID_WEIGHT_FLAG = - -# Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensmean -FCST_NATIVE_DATA_TYPE = GRIB - -# Name to identify observation data in output -OBTYPE = CCPA -OBS_NATIVE_DATA_TYPE = GRIB - -# set the desc value in the GridStat MET config 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; - -# Name of forecast variable 1 -FCST_VAR1_NAME = APCP_03_A3_ENS_MEAN - -# List of levels to evaluate for forecast variable 1 -# A03 = 3 hour accumulation in GRIB file -FCST_VAR1_LEVELS = A3 - -# List of thresholds to evaluate for each name/level combination for -# forecast variable 1 -#FCST_VAR1_THRESH = gt12.7, gt25.4, gt50.8, gt76.2 -BOTH_VAR1_THRESH = gt0.0,ge0.508,ge2.54,ge6.350 - -#FCST_GRID_STAT_FILE_TYPE = - -# Name of observation variable 1 -OBS_VAR1_NAME = APCP_03 - -# List of levels to evaluate for observation variable 1 -# (*,*) is NetCDF notation - must include quotes around these values! -# must be the same length as FCST_VAR1_LEVELS -OBS_VAR1_LEVELS = A3 - -# List of thresholds to evaluate for each name/level combination for -# observation variable 1 -#OBS_VAR1_THRESH = gt12.7, gt25.4, gt50.8, gt76.2 - -#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 = 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 = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_ensmean - -# 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 forecast input to GridStat -INPUT_BASE = {ENV[INPUT_BASE]} -FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} - -# directory containing observation input to GridStat -OBS_GRID_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/PcpCombine_obs - -# 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 to write output from GridStat -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} - -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_03h_ensmean - -# End of [dir] section and start of [filename_templates] section -[filename_templates] - -# Template to look for forecast input to GridStat relative to FCST_GRID_STAT_INPUT_DIR -FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc - -# Template to look for observation input to GridStat relative to OBS_GRID_STAT_INPUT_DIR -OBS_GRID_STAT_INPUT_TEMPLATE = {OBS_GRID_STAT_INPUT_DIR}/{valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2_a03h.nc - -# Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensmean - -# Template to look 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 to look for climatology input to GridStat relative to GRID_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example -GRID_STAT_CLIMO_STDEV_INPUT_TEMPLATE = - -# 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_APCP06h.conf b/parm/metplus/GridStat_ensmean_APCP06h.conf deleted file mode 100644 index 363327eb4a..0000000000 --- a/parm/metplus/GridStat_ensmean_APCP06h.conf +++ /dev/null @@ -1,270 +0,0 @@ -# Ensemble Mean 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 INT_END using % items -# %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. -# see www.strftime.org for more information -# %Y%m%d%H expands to YYYYMMDDHH -INIT_TIME_FMT = %Y%m%d%H - -# Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} - -# End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} - -# Increment between METplus runs (in seconds if no units are specified) -# Must be >= 60 seconds -INIT_INCREMENT = 3600 - -# List of forecast leads to process for each run time (init or valid) -# In hours if units are not specified -# If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[fhr_list]} - -# Order of loops to process data - Options are times, processes -# Not relevant if only one item is in the PROCESS_LIST -# times = run all wrappers in the PROCESS_LIST for a single run time, then -# increment the run time and run all wrappers again until all times have -# been evaluated. -# processes = run the first wrapper in the PROCESS_LIST for all times -# specified, then repeat for the next item in the PROCESS_LIST until all -# wrappers have been run -LOOP_ORDER = times - -# Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only -#LOG_GRID_STAT_VERBOSITY = 2 - -LOG_DIR = {OUTPUT_BASE}/log - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensmean/metplus_final.APCP06.conf - -# Location of MET config file to pass to GridStat -GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped - -# grid to remap data. Value is set as the 'to_grid' variable in the 'regrid' dictionary -# See MET User's Guide for more information -GRID_STAT_REGRID_TO_GRID = FCST -GRID_STAT_REGRID_VLD_THRESH = 0.5 -GRID_STAT_REGRID_METHOD = BUDGET -GRID_STAT_REGRID_WIDTH = 2 -GRID_STAT_REGRID_SHAPE = SQUARE - -#GRID_STAT_INTERP_FIELD = BOTH -#GRID_STAT_INTERP_VLD_THRESH = 1.0 -#GRID_STAT_INTERP_SHAPE = SQUARE -#GRID_STAT_INTERP_TYPE_METHOD = NEAREST -#GRID_STAT_INTERP_TYPE_WIDTH = 1 - -#GRID_STAT_GRID_WEIGHT_FLAG = - -# Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensmean -FCST_NATIVE_DATA_TYPE = GRIB - -# Name to identify observation data in output -OBTYPE = CCPA -OBS_NATIVE_DATA_TYPE = GRIB - -# set the desc value in the GridStat MET config 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; - -# Name of forecast variable 1 -FCST_VAR1_NAME = APCP_06_A6_ENS_MEAN - -# List of levels to evaluate for forecast variable 1 -# A03 = 3 hour accumulation in GRIB file -FCST_VAR1_LEVELS = A06 - -# List of thresholds to evaluate for each name/level combination for -# forecast variable 1 -#FCST_VAR1_THRESH = gt12.7, gt25.4, gt50.8, gt76.2 -BOTH_VAR1_THRESH = gt0.0,ge2.54,ge6.350,ge12.700 - -#FCST_GRID_STAT_FILE_TYPE = - -# Name of observation variable 1 -OBS_VAR1_NAME = APCP_06 - -# List of levels to evaluate for observation variable 1 -# (*,*) is NetCDF notation - must include quotes around these values! -# must be the same length as FCST_VAR1_LEVELS -OBS_VAR1_LEVELS = A06 - -# List of thresholds to evaluate for each name/level combination for -# observation variable 1 -#OBS_VAR1_THRESH = gt12.7, gt25.4, gt50.8, gt76.2 - -#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 = 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 = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_ensmean - -# 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 forecast input to GridStat -INPUT_BASE = {ENV[INPUT_BASE]} -FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} - -# directory containing observation input to GridStat -OBS_GRID_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/PcpCombine_obs - -# 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 to write output from GridStat -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} - -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_06h_ensmean - -# End of [dir] section and start of [filename_templates] section -[filename_templates] - -# Template to look for forecast input to GridStat relative to FCST_GRID_STAT_INPUT_DIR -FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc - -# Template to look for observation input to GridStat relative to OBS_GRID_STAT_INPUT_DIR -OBS_GRID_STAT_INPUT_TEMPLATE = {OBS_GRID_STAT_INPUT_DIR}/{valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2_a06h.nc - -# Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensmean - -# Template to look 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 to look for climatology input to GridStat relative to GRID_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example -GRID_STAT_CLIMO_STDEV_INPUT_TEMPLATE = - -# 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_APCP24h.conf b/parm/metplus/GridStat_ensmean_APCP24h.conf deleted file mode 100644 index 5d36222efd..0000000000 --- a/parm/metplus/GridStat_ensmean_APCP24h.conf +++ /dev/null @@ -1,270 +0,0 @@ -# Ensemble Mean 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 INT_END using % items -# %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. -# see www.strftime.org for more information -# %Y%m%d%H expands to YYYYMMDDHH -INIT_TIME_FMT = %Y%m%d%H - -# Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} - -# End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} - -# Increment between METplus runs (in seconds if no units are specified) -# Must be >= 60 seconds -INIT_INCREMENT = 3600 - -# List of forecast leads to process for each run time (init or valid) -# In hours if units are not specified -# If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[fhr_list]} - -# Order of loops to process data - Options are times, processes -# Not relevant if only one item is in the PROCESS_LIST -# times = run all wrappers in the PROCESS_LIST for a single run time, then -# increment the run time and run all wrappers again until all times have -# been evaluated. -# processes = run the first wrapper in the PROCESS_LIST for all times -# specified, then repeat for the next item in the PROCESS_LIST until all -# wrappers have been run -LOOP_ORDER = times - -# Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only -#LOG_GRID_STAT_VERBOSITY = 2 - -LOG_DIR = {OUTPUT_BASE}/log - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensmean/metplus_final.APCP24.conf - -# Location of MET config file to pass to GridStat -GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped - -# grid to remap data. Value is set as the 'to_grid' variable in the 'regrid' dictionary -# See MET User's Guide for more information -GRID_STAT_REGRID_TO_GRID = FCST -GRID_STAT_REGRID_VLD_THRESH = 0.5 -GRID_STAT_REGRID_METHOD = BUDGET -GRID_STAT_REGRID_WIDTH = 2 -GRID_STAT_REGRID_SHAPE = SQUARE - -#GRID_STAT_INTERP_FIELD = BOTH -#GRID_STAT_INTERP_VLD_THRESH = 1.0 -#GRID_STAT_INTERP_SHAPE = SQUARE -#GRID_STAT_INTERP_TYPE_METHOD = NEAREST -#GRID_STAT_INTERP_TYPE_WIDTH = 1 - -#GRID_STAT_GRID_WEIGHT_FLAG = - -# Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensmean -FCST_NATIVE_DATA_TYPE = GRIB - -# Name to identify observation data in output -OBTYPE = CCPA -OBS_NATIVE_DATA_TYPE = GRIB - -# set the desc value in the GridStat MET config 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; - -# Name of forecast variable 1 -FCST_VAR1_NAME = APCP_24_A24_ENS_MEAN - -# List of levels to evaluate for forecast variable 1 -# A03 = 3 hour accumulation in GRIB file -FCST_VAR1_LEVELS = A24 - -# List of thresholds to evaluate for each name/level combination for -# forecast variable 1 -#FCST_VAR1_THRESH = gt12.7, gt25.4, gt50.8, gt76.2 -BOTH_VAR1_THRESH = gt0.0,ge6.350,ge12.700,ge25.400 - -#FCST_GRID_STAT_FILE_TYPE = - -# Name of observation variable 1 -OBS_VAR1_NAME = APCP_24 - -# List of levels to evaluate for observation variable 1 -# (*,*) is NetCDF notation - must include quotes around these values! -# must be the same length as FCST_VAR1_LEVELS -OBS_VAR1_LEVELS = A24 - -# List of thresholds to evaluate for each name/level combination for -# observation variable 1 -#OBS_VAR1_THRESH = gt12.7, gt25.4, gt50.8, gt76.2 - -#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 = 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 = {ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_ensmean - -# 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 forecast input to GridStat -INPUT_BASE = {ENV[INPUT_BASE]} -FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} - -# directory containing observation input to GridStat -OBS_GRID_STAT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/PcpCombine_obs - -# 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 to write output from GridStat -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} - -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_24h_ensmean - -# End of [dir] section and start of [filename_templates] section -[filename_templates] - -# Template to look for forecast input to GridStat relative to FCST_GRID_STAT_INPUT_DIR -FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_APCP_{ENV[acc]}_{OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc - -# Template to look for observation input to GridStat relative to OBS_GRID_STAT_INPUT_DIR -OBS_GRID_STAT_INPUT_TEMPLATE = {OBS_GRID_STAT_INPUT_DIR}/{valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2_a24h.nc - -# Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensmean - -# Template to look 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 to look for climatology input to GridStat relative to GRID_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example -GRID_STAT_CLIMO_STDEV_INPUT_TEMPLATE = - -# 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 From d2a1e1b93fa8a4097a3b4ec025e1c0a0aa428931 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Sun, 19 Mar 2023 05:12:22 -0600 Subject: [PATCH 084/119] Change the METplus config file for the GridStat_ensmean task for RETOP into a jinja template although it is currently not used in the workflow. --- parm/metplus/GridStat_ensmean_RETOP.conf | 258 +++++++++++++---------- 1 file changed, 150 insertions(+), 108 deletions(-) diff --git a/parm/metplus/GridStat_ensmean_RETOP.conf b/parm/metplus/GridStat_ensmean_RETOP.conf index bf61b5d0a2..5888e0a611 100644 --- a/parm/metplus/GridStat_ensmean_RETOP.conf +++ b/parm/metplus/GridStat_ensmean_RETOP.conf @@ -1,4 +1,4 @@ -# GridStat METplus Configuration +# Ensemble mean GridStat METplus Configuration # section heading for [config] variables - all items below this line and # before the next section heading correspond to the [config] section @@ -14,26 +14,26 @@ PROCESS_LIST = GridStat # VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set LOOP_BY = INIT -# Format of INIT_BEG and INT_END using % items +# Format of INIT_BEG and INIT_END using % items # %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. # see www.strftime.org for more information # %Y%m%d%H expands to YYYYMMDDHH INIT_TIME_FMT = %Y%m%d%H # Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} +INIT_BEG = {{cdate}} # End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} +INIT_END = {{cdate}} -# Increment between METplus runs (in seconds if no units are specified) -# Must be >= 60 seconds +# Increment between METplus runs (in seconds if no units are specified). +# Must be >= 60 seconds. INIT_INCREMENT = 3600 # List of forecast leads to process for each run time (init or valid) # In hours if units are not specified # If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[fhr_list]} +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 @@ -48,20 +48,22 @@ LOOP_ORDER = times # Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only #LOG_GRID_STAT_VERBOSITY = 2 -LOG_DIR = {OUTPUT_BASE}/log - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/GridStat_ensmean/metplus_final.RETOP.conf - -# Location of MET config file to pass to GridStat +# +# 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_TO_GRID = FCST GRID_STAT_REGRID_VLD_THRESH = 0.5 GRID_STAT_REGRID_METHOD = BUDGET GRID_STAT_REGRID_WIDTH = 2 @@ -74,13 +76,19 @@ GRID_STAT_INTERP_TYPE_METHOD = NEAREST GRID_STAT_INTERP_TYPE_WIDTH = 1 GRID_STAT_GRID_WEIGHT_FLAG = NONE - -# Name to identify model (forecast) data in output -MODEL = {ENV[VX_FCST_MODEL_NAME]}_ensmean -#FCST_NATIVE_DATA_TYPE = GRIB - -# Name to identify observation data in output -OBTYPE = MRMS +# +# 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 +# +# Name to identify observation data in output. +# +OBTYPE = {{obtype}} OBS_NATIVE_DATA_TYPE = GRIB # set the desc value in the GridStat MET config file @@ -92,52 +100,66 @@ GRID_STAT_DESC = NA # are needed for different tools GRID_STAT_MET_CONFIG_OVERRIDES = cat_thresh = []; cnt_thresh = [NA]; cnt_logic = UNION; wind_thresh = [NA]; wind_logic = UNION; ci_alpha = [0.05]; rank_corr_flag = FALSE; - -# Name of forecast variable 1 -FCST_VAR1_NAME = RETOP_L0_ENS_MEAN - -# List of levels to evaluate for forecast variable 1 -# A03 = 3 hour accumulation in GRIB file +# +# Name of 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, the type of statistic, etc. In this case, this suffix is +# "_L0_ENS_MEAN". Thus, below, FCST_VAR1_NAME must be set to the value +# of FIELDNAME_IN_MET_OUTPUT with "_L0_ENS_MEAN" appended to it. +# +FCST_VAR1_NAME = {{fieldname_in_met_output}}_L0_ENS_MEAN +# +# List of levels to evaluate for forecast variable 1. +# FCST_VAR1_LEVELS = L0 FCST_VAR1_OPTIONS = convert(x) = x * 3.28084 * 0.001; - +# # List of thresholds to evaluate for each name/level combination for -# forecast variable 1 -BOTH_VAR1_THRESH = ge20, ge30, ge40, ge50 - -#FCST_GRID_STAT_FILE_TYPE = - -# Name of observation variable 1 -OBS_VAR1_NAME = EchoTop18 - -# List of levels to evaluate for observation variable 1 -# (*,*) is NetCDF notation - must include quotes around these values! -# must be the same length as FCST_VAR1_LEVELS -OBS_VAR1_LEVELS = Z500 +# observation and forecast variable 1. +# +BOTH_VAR1_THRESH = {{field_thresholds}} +# +# Name of 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 = {{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 = Z500 OBS_VAR1_OPTIONS = censor_thresh = lt-20.0; censor_val = -20.0; cnt_thresh = [ >15 ]; cnt_logic = UNION; convert(x) = x * 3280.84 * 0.001; - -# List of thresholds to evaluate for each name/level combination for -# observation variable 1 -#OBS_VAR1_THRESH = gt12.7, gt25.4, gt50.8, gt76.2 - -#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. +# 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 = -300 -OBS_GRID_STAT_FILE_WINDOW_END = 300 +OBS_GRID_STAT_FILE_WINDOW_BEGIN = -300 +OBS_GRID_STAT_FILE_WINDOW_END = 300 # 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 +GRID_STAT_NEIGHBORHOOD_WIDTH = 3,5,7 # shape value passed to nbrhd dictionary in the MET config file GRID_STAT_NEIGHBORHOOD_SHAPE = SQUARE @@ -149,21 +171,25 @@ GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5 # 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 +# +# 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 - -# Set to true if observation data is probabilistic -# Only used if configuring forecast data as the 'OBS' input +# +# Set to true if observation data is probabilistic. Only used if +# configuring forecast data as the 'OBS' input. +# OBS_IS_PROB = false - -# Only used if OBS_IS_PROB is true - sets probabilistic threshold +# +# Only used if OBS_IS_PROB is true - sets probabilistic threshold. +# OBS_GRID_STAT_PROB_THRESH = ==0.1 -GRID_STAT_OUTPUT_PREFIX = {ENV[VX_FCST_MODEL_NAME]}_RETOP_{OBTYPE}_ensmean +GRID_STAT_OUTPUT_PREFIX = {MODEL}_{{fieldname_in_met_filedir_names}}_{OBTYPE} # Climatology data #GRID_STAT_CLIMO_MEAN_FILE_NAME = @@ -195,7 +221,7 @@ GRID_STAT_CLIMO_CDF_BINS = 1 GRID_STAT_MASK_GRID = # Statistical output types -GRID_STAT_OUTPUT_FLAG_FHO = STAT +GRID_STAT_OUTPUT_FLAG_FHO = STAT GRID_STAT_OUTPUT_FLAG_CTC = STAT GRID_STAT_OUTPUT_FLAG_CTS = STAT #GRID_STAT_OUTPUT_FLAG_MCTC = NONE @@ -219,62 +245,78 @@ GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT # 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_LATLON = TRUE +GRID_STAT_NC_PAIRS_FLAG_RAW = TRUE GRID_STAT_NC_PAIRS_FLAG_DIFF = FALSE GRID_STAT_NC_PAIRS_FLAG_CLIMO = FALSE #GRID_STAT_NC_PAIRS_FLAG_CLIMO_CDP = FALSE GRID_STAT_NC_PAIRS_FLAG_WEIGHT = FALSE -GRID_STAT_NC_PAIRS_FLAG_NBRHD = FALSE +GRID_STAT_NC_PAIRS_FLAG_NBRHD = TRUE #GRID_STAT_NC_PAIRS_FLAG_FOURIER = FALSE #GRID_STAT_NC_PAIRS_FLAG_GRADIENT = FALSE #GRID_STAT_NC_PAIRS_FLAG_DISTANCE_MAP = FALSE GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE -# End of [config] section and start of [dir] section +# End of [config] section and start of [dir] section. [dir] - -# directory containing forecast input to GridStat -INPUT_BASE = {ENV[INPUT_BASE]} -FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE} - -# directory containing observation input to GridStat -OBS_GRID_STAT_INPUT_DIR = {ENV[OBS_DIR]} - -# directory containing climatology mean input to GridStat -# Not used in this example +# +# 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 +# +# Directory containing climatology mean input to GridStat. Not used in +# this example. +# GRID_STAT_CLIMO_STDEV_INPUT_DIR = - -# directory to write output from GridStat -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} - -STAGING_DIR = {OUTPUT_BASE}/stage/RETOP_ensmean - -# End of [dir] section and start of [filename_templates] section +# +# 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}} + +STAGING_DIR = {{staging_dir}} + +# End of [dir] section and start of [filename_templates] section. [filename_templates] - -# Template to look for forecast input to GridStat relative to FCST_GRID_STAT_INPUT_DIR -FCST_GRID_STAT_INPUT_TEMPLATE = ensemble_stat_{ENV[VX_FCST_MODEL_NAME]}_RETOP_{OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc - -# Template to look for observation input to GridStat relative to OBS_GRID_STAT_INPUT_DIR -OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/EchoTop_18_00.50_{valid?fmt=%Y%m%d}-{valid?fmt=%H}0000.grib2 - -# Optional subdirectories relative to GRID_STAT_OUTPUT_DIR to write output from GridStat -GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/GridStat_ensmean - -# Template to look for climatology input to GridStat relative to GRID_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# Template for forecast input to GridStat relative to +# FCST_GRID_STAT_INPUT_DIR. +# +FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} +# +# Template for observation input to GridStat relative to +# OBS_GRID_STAT_INPUT_DIR. +# +OBS_GRID_STAT_INPUT_TEMPLATE = {{obs_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 to look for climatology input to GridStat relative to GRID_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# 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 = - -# Used to specify one or more verification mask files for GridStat -# Not used for this example +# +# 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 From 87445648a649e535a6e68a0a8fbb196d9eee6f03 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Sun, 19 Mar 2023 11:31:05 -0600 Subject: [PATCH 085/119] Minor edits to comments. --- parm/metplus/EnsembleStat_APCP03h.conf | 2 +- parm/metplus/EnsembleStat_APCP24h.conf | 6 +++--- parm/metplus/GridStat_APCP01h.conf | 2 +- scripts/exregional_run_met_ensemblestat_vx_grid.sh | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/parm/metplus/EnsembleStat_APCP03h.conf b/parm/metplus/EnsembleStat_APCP03h.conf index 7f19d221c7..2e1238400b 100644 --- a/parm/metplus/EnsembleStat_APCP03h.conf +++ b/parm/metplus/EnsembleStat_APCP03h.conf @@ -176,7 +176,7 @@ ENS_VAR1_NAME = APCP_03 ENS_VAR1_LEVELS = A03 ENS_VAR1_THRESH = gt0.0,ge0.508,ge2.54,ge6.350 # -# Forecast variables and levels as specified in the fcst field dictionary +# Forecast 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. # diff --git a/parm/metplus/EnsembleStat_APCP24h.conf b/parm/metplus/EnsembleStat_APCP24h.conf index a503fbdc02..64c765cacd 100644 --- a/parm/metplus/EnsembleStat_APCP24h.conf +++ b/parm/metplus/EnsembleStat_APCP24h.conf @@ -176,9 +176,9 @@ ENS_VAR1_NAME = APCP_24 ENS_VAR1_LEVELS = A24 ENS_VAR1_THRESH = gt0.0,ge6.350,ge12.700,ge25.400 # -# Forecast 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 +# Forecast 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. # FCST_VAR1_NAME = APCP_24 FCST_VAR1_LEVELS = A24 diff --git a/parm/metplus/GridStat_APCP01h.conf b/parm/metplus/GridStat_APCP01h.conf index 6537cd520d..666bb5c26c 100644 --- a/parm/metplus/GridStat_APCP01h.conf +++ b/parm/metplus/GridStat_APCP01h.conf @@ -57,7 +57,7 @@ LOG_METPLUS = {LOG_DIR}/{{metplus_log_fn}} # METPLUS_CONF = {GRID_STAT_OUTPUT_DIR}/metplus_final.{{metplus_config_fn}} # -# Location of MET config file to pass to GridStat. +# Location of MET configuration file to pass to GridStat. # GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped diff --git a/scripts/exregional_run_met_ensemblestat_vx_grid.sh b/scripts/exregional_run_met_ensemblestat_vx_grid.sh index 75b52676af..65fdaf4891 100755 --- a/scripts/exregional_run_met_ensemblestat_vx_grid.sh +++ b/scripts/exregional_run_met_ensemblestat_vx_grid.sh @@ -21,7 +21,7 @@ source_config_for_task "task_run_vx_ensgrid|task_run_post" ${GLOBAL_VAR_DEFNS_FP # #----------------------------------------------------------------------- # -# Get the full path to the file in which this script/function is located +# 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). # From 0627d6bbb39ecd4245de7d5697f0aa86dabe730d Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Sun, 19 Mar 2023 13:27:39 -0600 Subject: [PATCH 086/119] Add j-job and ex-script for running EnsembleStat for APCP, all accumulations (01, 03, 06, and 24); modify METplus conf file for accumulation of 01 hour so it's a template; add template Metplus conf file for accumulatons > 01hour; modify ROCOTO xml to run with new j-job. --- ...EGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT | 107 +++++ parm/FV3LAM_wflow.xml | 20 +- parm/metplus/EnsembleStat_APCP01h.conf | 254 ++++++----- parm/metplus/EnsembleStat_APCPgt01h.conf | 293 ++++++++++++ ...onal_run_met_genensprod_or_ensemblestat.sh | 429 ++++++++++++++++++ 5 files changed, 986 insertions(+), 117 deletions(-) create mode 100755 jobs/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT create mode 100644 parm/metplus/EnsembleStat_APCPgt01h.conf create mode 100755 scripts/exregional_run_met_genensprod_or_ensemblestat.sh diff --git a/jobs/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT b/jobs/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT new file mode 100755 index 0000000000..66cda7f532 --- /dev/null +++ b/jobs/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT @@ -0,0 +1,107 @@ +#!/bin/bash + +# +#----------------------------------------------------------------------- +# +# +# +#----------------------------------------------------------------------- +# + +# +#----------------------------------------------------------------------- +# +# Source the variable definitions file and the bash utility functions. +# +#----------------------------------------------------------------------- +# +. $USHdir/source_util_funcs.sh +source_config_for_task "task_run_vx_ensgrid|task_run_vx_enspoint" ${GLOBAL_VAR_DEFNS_FP} +. $USHdir/job_preamble.sh +# +#----------------------------------------------------------------------- +# +# Save current shell options (in a global array). Then set new options +# for this script/function. +# +#----------------------------------------------------------------------- +# +{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 +# +#----------------------------------------------------------------------- +# +# Get the full path to the file in which this script/function is located +# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in +# which the file is located (scrfunc_dir). +# +#----------------------------------------------------------------------- +# +scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) +scrfunc_fn=$( basename "${scrfunc_fp}" ) +scrfunc_dir=$( dirname "${scrfunc_fp}" ) +# +#----------------------------------------------------------------------- +# +# Print message indicating entry into script. +# +#----------------------------------------------------------------------- +# +print_info_msg " +======================================================================== +Entering script: \"${scrfunc_fn}\" +In directory: \"${scrfunc_dir}\" + +This is the J-job script for the task that runs either METplus's +gen_ens_prod tool or its ensemble_stat tool for ensemble verification. +========================================================================" +# +#----------------------------------------------------------------------- +# +# Set the name of the MET/METplus tool this task will call. (Note: "sc" +# is for "snake case", i.e. using underscores as separators, and "pc" is +# for "Pascal case", i.e. no separators but first letter of each word +# capitalized.) +# +#----------------------------------------------------------------------- +# +valid_vals_MET_TOOL=( "GENENSPROD" "ENSEMBLESTAT" ) +check_var_valid_value "MET_TOOL" "valid_vals_MET_TOOL" + +if [ "${MET_TOOL}" = "GENENSPROD" ]; then + met_tool_sc="gen_ens_prod" + met_tool_pc="GenEnsProd" +elif [ "${MET_TOOL}" = "ENSEMBLESTAT" ]; then + met_tool_sc="ensemble_stat" + met_tool_pc="EnsembleStat" +fi +# +#----------------------------------------------------------------------- +# +# Call the ex-script for this J-job and pass to it the necessary varia- +# bles. +# +#----------------------------------------------------------------------- +# +$SCRIPTSdir/exregional_run_met_genensprod_or_ensemblestat.sh \ + met_tool_sc="${met_tool_sc}" \ + met_tool_pc="${met_tool_pc}" || \ +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/FV3LAM_wflow.xml b/parm/FV3LAM_wflow.xml index 68f16e2da3..312be65c68 100644 --- a/parm/FV3LAM_wflow.xml +++ b/parm/FV3LAM_wflow.xml @@ -2172,7 +2172,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT" {{ nnodes_run_met_ensemblestat_vx_apcp01h }}:ppn={{ ppn_run_met_ensemblestat_vx_apcp01h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_ensemblestat_vx_apcp01h }} @@ -2190,9 +2190,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + OBTYPECCPA VARAPCP ACCUM_HH01 + MET_TOOLENSEMBLESTAT @@ -2208,7 +2209,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT" {{ nnodes_run_met_ensemblestat_vx_apcp03h }}:ppn={{ ppn_run_met_ensemblestat_vx_apcp03h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_ensemblestat_vx_apcp03h }} @@ -2226,9 +2227,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(3, fcst_len_hrs+1, 3) %}{{ " %02d" % h }}{% endfor %} + OBTYPECCPA VARAPCP ACCUM_HH03 + MET_TOOLENSEMBLESTAT @@ -2245,7 +2247,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT" {{ nnodes_run_met_ensemblestat_vx_apcp06h }}:ppn={{ ppn_run_met_ensemblestat_vx_apcp06h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_ensemblestat_vx_apcp06h }} @@ -2263,9 +2265,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(6, fcst_len_hrs+1, 6) %}{{ " %02d" % h }}{% endfor %} + OBTYPECCPA VARAPCP ACCUM_HH06 + MET_TOOLENSEMBLESTAT @@ -2282,7 +2285,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT" {{ nnodes_run_met_ensemblestat_vx_apcp24h }}:ppn={{ ppn_run_met_ensemblestat_vx_apcp24h }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_ensemblestat_vx_apcp24h }} @@ -2300,9 +2303,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(24, fcst_len_hrs+1, 24) %}{{ " %02d" % h }}{% endfor %} + OBTYPECCPA VARAPCP ACCUM_HH24 + MET_TOOLENSEMBLESTAT diff --git a/parm/metplus/EnsembleStat_APCP01h.conf b/parm/metplus/EnsembleStat_APCP01h.conf index d786a798e7..db8ff2dbb1 100644 --- a/parm/metplus/EnsembleStat_APCP01h.conf +++ b/parm/metplus/EnsembleStat_APCP01h.conf @@ -2,38 +2,67 @@ [config] -## Configuration-related settings such as the process list, begin and end times, etc. +# List of applications to run - only GridStat for this case PROCESS_LIST = EnsembleStat -# Looping by times: steps through each 'task' in the PROCESS_LIST for each -# defined time, and repeats until all times have been evaluated. -LOOP_ORDER = times - -# LOOP_BY: Set to INIT to loop over initialization times +# 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 INT_END +# 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 -INIT_BEG={ENV[CDATE]} - -# End time for METplus run -INIT_END={ENV[CDATE]} - -# Increment between METplus runs in seconds. Must be >= 60 -INIT_INCREMENT=3600 - -# List of forecast leads to process -LEAD_SEQ = {ENV[fhr_list]} - +# 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. +# +ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped +# # Used in the MET config file for: model, output_prefix -MODEL = {ENV[VX_FCST_MODEL_NAME]} +# +MODEL = {{vx_fcst_model_name}} ENSEMBLE_STAT_DESC = NA ;; not in other file # Name to identify observation data in output -OBTYPE = CCPA +OBTYPE = {{obtype}} #ENSEMBLE_STAT_DESC = # not in other file @@ -50,7 +79,7 @@ OBS_FILE_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 = {ENV[NUM_ENS_MEMBERS]} +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 @@ -59,9 +88,8 @@ ENSEMBLE_STAT_ENS_THRESH = 0.05 # ens.vld_thresh value in the MET config file ENSEMBLE_STAT_ENS_VLD_THRESH = 1.0 -ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_APCP01h_{OBTYPE} - -ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped +FIELDNAME_IN_MET_FILEDIR_NAMES = {{fieldname_in_met_filedir_names}} +ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_{FIELDNAME_IN_MET_FILEDIR_NAMES}_{OBTYPE} # ENSEMBLE_STAT_MET_OBS_ERR_TABLE is not required. # If the variable is not defined, or the value is not set @@ -79,17 +107,6 @@ ENSEMBLE_STAT_REGRID_SHAPE = SQUARE ENSEMBLE_STAT_CENSOR_THRESH = ENSEMBLE_STAT_CENSOR_VAL = -#ENSEMBLE_STAT_NBRHD_PROB_WIDTH = 5 -#ENSEMBLE_STAT_NBRHD_PROB_SHAPE = CIRCLE -#ENSEMBLE_STAT_NBRHD_PROB_VLD_THRESH = 0.0 - -#ENSEMBLE_STAT_NMEP_SMOOTH_VLD_THRESH = 0.0 -#ENSEMBLE_STAT_NMEP_SMOOTH_SHAPE = CIRCLE -#ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_DX = 81.27 -#ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_RADIUS = 120 -#ENSEMBLE_STAT_NMEP_SMOOTH_METHOD = GAUSSIAN -#ENSEMBLE_STAT_NMEP_SMOOTH_WIDTH = 1 - ENSEMBLE_STAT_MESSAGE_TYPE = ENSEMBLE_STAT_DUPLICATE_FLAG = UNIQUE @@ -125,7 +142,7 @@ ENSEMBLE_STAT_ENS_PHIST_BIN_SIZE = 0.05 ENSEMBLE_STAT_CLIMO_CDF_BINS = 1 ENSEMBLE_STAT_CLIMO_CDF_CENTER_BINS = False -ENSEMBLE_STAT_CLIMO_CDF_WRITE_BINS = True +ENSEMBLE_STAT_CLIMO_CDF_WRITE_BINS = False ENSEMBLE_STAT_MASK_GRID = @@ -145,83 +162,104 @@ ENSEMBLE_STAT_OUTPUT_FLAG_ORANK = STAT ENSEMBLE_STAT_OUTPUT_FLAG_SSVAR = STAT ENSEMBLE_STAT_OUTPUT_FLAG_RELP = STAT -ENSEMBLE_STAT_ENSEMBLE_FLAG_LATLON = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MEAN = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_STDEV = TRUE +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 = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_FREQUENCY = TRUE +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 = TRUE +ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK = FALSE ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT = FALSE - -# 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 = APCP -ENS_VAR1_LEVELS = A01 -ENS_VAR1_THRESH = gt0.0,ge0.254,ge0.508,ge2.54 - -# Forecast 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 -FCST_VAR1_NAME = APCP -FCST_VAR1_LEVELS = A01 - +# +# 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_VARn_THRESH must be included here in order for the netCDF file +# generated by EnsembleStat to include the ensemble probability (aka +# ensembe frequency) fields corresponding to the specified thresholds. +# These must be included because the corresonding GridStat task for +# ensemble probabilities (GridStat_ensprob_APCP03h) expects to read them +# in as input. +# +ENS_VAR1_NAME = {{fieldname_in_fcst_input}} +ENS_VAR1_LEVELS = A{ACCUM_HH} +ENS_VAR1_THRESH = {{field_thresholds}} +# +# Get the variable ACCUM_HH from the environment. +# +ACCUM_HH = {{accum_hh}} +# +# Forecast 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. +# +FCST_VAR1_NAME = {{fieldname_in_fcst_input}} +FCST_VAR1_LEVELS = A{ACCUM_HH} FCST_VAR1_OPTIONS = ens_ssvar_bin_size = 50.0; ens_phist_bin_size = 0.05; - -# Observation Variables and levels as specified in the obs field dictionary +# +# Observation variables and levels as specified in the obs field dictionary # of the MET configuration file. Specify as OBS_VARn_NAME, OBS_VARn_LEVELS, # (optional) OBS_VARn_OPTION -OBS_VAR1_NAME = {FCST_VAR1_NAME} -OBS_VAR1_LEVELS = {FCST_VAR1_LEVELS} - +# +OBS_VAR1_NAME = {{fieldname_in_obs_input}} +OBS_VAR1_LEVELS = A{ACCUM_HH} OBS_VAR1_OPTIONS = {FCST_VAR1_OPTIONS} - [dir] -# Input and output data directories -INPUT_BASE = {ENV[INPUT_BASE]} -OUTPUT_BASE = {ENV[OUTPUT_BASE]} - -# Forecast model input directory for EnsembleStat -FCST_ENSEMBLE_STAT_INPUT_DIR = {INPUT_BASE} - -# Point observation input dir for EnsembleStat +# +# 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}} +OUTPUT_DIR = {{output_dir}} +# +# Point observation input dir for EnsembleStat. +# OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = - -# Grid observation input dir for EnsembleStat -OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = {ENV[OBS_DIR]} - -# directory containing climatology mean input to EnsembleStat -# Not used in this example +# +# Grid observation input dir 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 +# +# 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_BASE} - -# directory containing log files -LOG_DIR = {OUTPUT_BASE}/log - -# directory for staging data -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_01 - +# +# Output directory for EnsembleStat. +# +ENSEMBLE_STAT_OUTPUT_DIR = {OUTPUT_DIR} +# +# Directory for staging data. +# +STAGING_DIR = {{staging_dir}} [filename_templates] - +# # FCST_ENSEMBLE_STAT_INPUT_TEMPLATE - comma separated list of ensemble members # or a single line, - filename wildcard characters may be used, ? or *. - -FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[MEM_STAR]}{ENV[POSTPRD]}{ENV[NET]}.t{init?fmt=%H}z*.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 +# +# The template FCST_ENSEMBLE_STAT_INPUT_TEMPLATE is relative to +# FCST_ENSEMBLE_STAT_INPUT_DIR. +# +FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # Template to look for point observations. # Example precip24_2010010112.nc @@ -229,23 +267,21 @@ OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = # Template to look for gridded observations. # Example ST4.2010010112.24h -OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2 +OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = {{obs_input_fn_template}} ENSEMBLE_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly - -# Template to look for climatology input to EnsembleStat relative to ENSEMBLE_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# Template to look 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 to look for climatology input to EnsembleStat relative to ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# Template to look for climatology input to EnsembleStat relative to +# ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR. Not used in this example. +# ENSEMBLE_STAT_CLIMO_STDEV_INPUT_TEMPLATE = - -ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/EnsembleStat - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/EnsembleStat/metplus_final.APCP_01h.conf - +# +# The template ENSEMBLE_STAT_OUTPUT_TEMPLATE is relative to +# ENSEMBLE_STAT_OUTPUT_DIR. +# +ENSEMBLE_STAT_OUTPUT_TEMPLATE = diff --git a/parm/metplus/EnsembleStat_APCPgt01h.conf b/parm/metplus/EnsembleStat_APCPgt01h.conf new file mode 100644 index 0000000000..115cfb945e --- /dev/null +++ b/parm/metplus/EnsembleStat_APCPgt01h.conf @@ -0,0 +1,293 @@ +# EnsembleStat METplus Configuration + +[config] + +# List of applications to run - only GridStat for this case +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. +# +ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped +# +# Used in the MET config file for: model, output_prefix +# +MODEL = {{vx_fcst_model_name}} + +FCST_NATIVE_DATA_TYPE = GRIB + +ENSEMBLE_STAT_DESC = NA ;; not in other file + +# Name to identify observation data in output +OBTYPE = {{obtype}} +OBS_NATIVE_DATA_TYPE = GRIB + +# Forecast data description variables +FCST_IS_PROB = false + +#ENSEMBLE_STAT_DESC = # not in other file + +# 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_ENSEMBLE_STAT_WINDOW_BEGIN = 0 +OBS_ENSEMBLE_STAT_WINDOW_END = 0 + +OBS_FILE_WINDOW_BEGIN = 0 +OBS_FILE_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_OUTPUT_PREFIX = {MODEL}_{FIELDNAME_IN_MET_FILEDIR_NAMES}_{OBTYPE} + +# 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 +# +# 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_VARn_THRESH must be included here in order for the netCDF file +# generated by EnsembleStat to include the ensemble probability (aka +# ensembe frequency) fields corresponding to the specified thresholds. +# These must be included because the corresonding GridStat task for +# ensemble probabilities (GridStat_ensprob_APCP03h) expects to read them +# in as input. +# +ENS_VAR1_NAME = {{fieldname_in_met_output}} +ENS_VAR1_LEVELS = A{ACCUM_HH} +ENS_VAR1_THRESH = {{field_thresholds}} +# +# Get the variable ACCUM_HH from the environment. +# +ACCUM_HH = {{accum_hh}} +# +# Forecast 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. +# +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; +# +# Observation variables and levels as specified in the obs field dictionary +# of the MET configuration file. Specify as OBS_VARn_NAME, OBS_VARn_LEVELS, +# (optional) OBS_VARn_OPTION +# +OBS_VAR1_NAME = {{fieldname_in_met_output}} +OBS_VAR1_LEVELS = A{ACCUM_HH} +OBS_VAR1_OPTIONS = {FCST_VAR1_OPTIONS} + +[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}} +OUTPUT_DIR = {{output_dir}} +# +# Point observation input dir for EnsembleStat. +# +OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = +# +# Grid observation input dir 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}} + +[filename_templates] +# +# FCST_ENSEMBLE_STAT_INPUT_TEMPLATE - comma separated list of ensemble members +# or a single line, - filename wildcard characters may be used, ? or *. +# +# The template FCST_ENSEMBLE_STAT_INPUT_TEMPLATE is relative to +# FCST_ENSEMBLE_STAT_INPUT_DIR. +# +FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} + +# Template to look for point observations. +# Example precip24_2010010112.nc +OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = + +# Template to look for gridded observations. +# Example ST4.2010010112.24h +OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = {{obs_input_fn_template}} + +ENSEMBLE_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly +# +# Template to look 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 to look for climatology input to EnsembleStat relative to +# ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR. Not used in this example. +# +ENSEMBLE_STAT_CLIMO_STDEV_INPUT_TEMPLATE = +# +# The template ENSEMBLE_STAT_OUTPUT_TEMPLATE is relative to +# ENSEMBLE_STAT_OUTPUT_DIR. +# +ENSEMBLE_STAT_OUTPUT_TEMPLATE = diff --git a/scripts/exregional_run_met_genensprod_or_ensemblestat.sh b/scripts/exregional_run_met_genensprod_or_ensemblestat.sh new file mode 100755 index 0000000000..05c293a80c --- /dev/null +++ b/scripts/exregional_run_met_genensprod_or_ensemblestat.sh @@ -0,0 +1,429 @@ +#!/bin/bash + +# +#----------------------------------------------------------------------- +# +# Source the variable definitions file and the bash utility functions. +# +#----------------------------------------------------------------------- +# +. $USHdir/source_util_funcs.sh +source_config_for_task "task_run_vx_ensgrid|task_run_post" ${GLOBAL_VAR_DEFNS_FP} +# +#----------------------------------------------------------------------- +# +# Source files defining auxiliary functions for verification. +# +#----------------------------------------------------------------------- +# +. $USHdir/set_vx_params.sh +. $USHdir/set_vx_fhr_list.sh +# +#----------------------------------------------------------------------- +# +# Save current shell options (in a global array). Then set new options +# for this script/function. +# +#----------------------------------------------------------------------- +# +{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 +# +#----------------------------------------------------------------------- +# +# Get the full path to the file in which this script/function is located +# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in +# which the file is located (scrfunc_dir). +# +#----------------------------------------------------------------------- +# +scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) +scrfunc_fn=$( basename "${scrfunc_fp}" ) +scrfunc_dir=$( dirname "${scrfunc_fp}" ) +# +#----------------------------------------------------------------------- +# +# Specify the set of valid argument names for this script/function. +# Then process the arguments provided to this script/function (which +# should consist of a set of name-value pairs of the form arg1="value1", +# etc). +# +#----------------------------------------------------------------------- +# +valid_args=( \ + "met_tool_sc" \ + "met_tool_pc" \ + ) +process_args valid_args "$@" +# +#----------------------------------------------------------------------- +# +# For debugging purposes, print out values of arguments passed to this +# script. Note that these will be printed out only if VERBOSE is set to +# TRUE. +# +#----------------------------------------------------------------------- +# +print_input_args "valid_args" +# +#----------------------------------------------------------------------- +# +# Print message indicating entry into script. +# +#----------------------------------------------------------------------- +# +print_info_msg " +======================================================================== +Entering script: \"${scrfunc_fn}\" +In directory: \"${scrfunc_dir}\" + +This is the ex-script for the task that runs the METplus ${met_tool_pc} +tool either to generate ensemble products without performing verification +(if running the GenEnsProd tool) or to perform ensemble-based verification +(if running the EnsembleStat tool). +========================================================================" +# +#----------------------------------------------------------------------- +# +# Get the cycle date and time in YYYYMMDDHH format. +# +#----------------------------------------------------------------------- +# +CDATE="${PDY}${cyc}" +# +#----------------------------------------------------------------------- +# +# Set various verification parameters associated with the field to be +# verified. Not all of these are necessarily used later below but are +# set here for consistency with other verification ex-scripts. +# +#----------------------------------------------------------------------- +# +FIELDNAME_IN_OBS_INPUT="" +FIELDNAME_IN_FCST_INPUT="" +FIELDNAME_IN_MET_OUTPUT="" +FIELDNAME_IN_MET_FILEDIR_NAMES="" + +set_vx_params \ + obtype="${OBTYPE}" \ + field="$VAR" \ + accum_hh="${ACCUM_HH}" \ + outvarname_grid_or_point="grid_or_point" \ + outvarname_field_is_APCPgt01h="field_is_APCPgt01h" \ + outvarname_fieldname_in_obs_input="FIELDNAME_IN_OBS_INPUT" \ + outvarname_fieldname_in_fcst_input="FIELDNAME_IN_FCST_INPUT" \ + outvarname_fieldname_in_MET_output="FIELDNAME_IN_MET_OUTPUT" \ + outvarname_fieldname_in_MET_filedir_names="FIELDNAME_IN_MET_FILEDIR_NAMES" +# +#----------------------------------------------------------------------- +# +# Set additional field-dependent verification parameters. +# +#----------------------------------------------------------------------- +# +if [ "${grid_or_point}" = "grid" ]; then + + case "${FIELDNAME_IN_MET_FILEDIR_NAMES}" in + "APCP01h") + FIELD_THRESHOLDS="gt0.0, ge0.254, ge0.508, ge2.54" + ;; + "APCP03h") + FIELD_THRESHOLDS="gt0.0, ge0.508, ge2.54, ge6.350" + ;; + "APCP06h") + FIELD_THRESHOLDS="gt0.0, ge2.54, ge6.350, ge12.700" + ;; + "APCP24h") + FIELD_THRESHOLDS="gt0.0, ge6.350, ge12.700, ge25.400" + ;; + "REFC") + FIELD_THRESHOLDS="ge20, ge30, ge40, ge50" + ;; + "RETOP") + FIELD_THRESHOLDS="ge20, ge30, ge40, ge50" + ;; + *) + print_err_msg_exit "\ +Verification parameters have not been defined for this field +(FIELDNAME_IN_MET_FILEDIR_NAMES): + FIELDNAME_IN_MET_FILEDIR_NAMES = \"${FIELDNAME_IN_MET_FILEDIR_NAMES}\"" + ;; + esac + +elif [ "${grid_or_point}" = "point" ]; then + + FIELD_THRESHOLDS="" + +fi +# +#----------------------------------------------------------------------- +# +# Set paths and file templates for input to and output from the MET/ +# METplus tool to be run as well as other file/directory parameters. +# +#----------------------------------------------------------------------- +# +if [ "${grid_or_point}" = "grid" ]; then + + OBS_INPUT_FN_TEMPLATE="" + 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_DIR="${VX_OUTPUT_BASEDIR}" + else + OBS_INPUT_DIR="${OBS_DIR}" + case "${FIELDNAME_IN_MET_FILEDIR_NAMES}" in + "APCP01h") + OBS_INPUT_FN_TEMPLATE="${OBS_CCPA_APCP01h_FN_TEMPLATE}" + ;; + "REFC") + OBS_INPUT_FN_TEMPLATE="${OBS_MRMS_REFC_FN_TEMPLATE}" + ;; + "RETOP") + OBS_INPUT_FN_TEMPLATE="${OBS_MRMS_RETOP_FN_TEMPLATE}" + ;; + 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 + + OBS_INPUT_DIR="${VX_OUTPUT_BASEDIR}/metprd/Pb2nc_obs" + OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE} ) + FCST_INPUT_DIR="${VX_FCST_INPUT_BASEDIR}" + +fi +# +# Construct variable that contains a METplus template of the paths to +# the files that the PcpCombine tool has generated (in previous workflow +# tasks). This will be exported to the environment and read by the +# METplus configuration files. +# +NDIGITS_ENSMEM_NAMES=3 +FCST_INPUT_FN_TEMPLATE="" +for (( i=0; i<${NUM_ENS_MEMBERS}; i++ )); do + + mem_indx=$(($i+1)) + mem_indx_fmt=$(printf "%0${NDIGITS_ENSMEM_NAMES}d" "${mem_indx}") + time_lag=$( bc -l <<< "${ENS_TIME_LAG_HRS[$i]}*${SECS_PER_HOUR}" ) + + SLASH_ENSMEM_SUBDIR_OR_NULL="/mem${mem_indx_fmt}" + if [ "${field_is_APCPgt01h}" = "TRUE" ]; then + template="${CDATE}${SLASH_ENSMEM_SUBDIR_OR_NULL}/metprd/PcpCombine_fcst/${FCST_FN_METPROC_TEMPLATE}" + else + template="${FCST_SUBDIR_TEMPLATE}/${FCST_FN_TEMPLATE}" + fi + + if [ -z "${FCST_INPUT_FN_TEMPLATE}" ]; then + FCST_INPUT_FN_TEMPLATE=" $(eval echo ${template})" + else + FCST_INPUT_FN_TEMPLATE="\ +${FCST_INPUT_FN_TEMPLATE}, + $(eval echo ${template})" + fi + +done + +OUTPUT_BASE="${VX_OUTPUT_BASEDIR}/${CDATE}" +OUTPUT_DIR="${OUTPUT_BASE}/metprd/${met_tool_pc}" +STAGING_DIR="${OUTPUT_BASE}/stage/${FIELDNAME_IN_MET_FILEDIR_NAMES}" +LOG_SUFFIX="_${FIELDNAME_IN_MET_FILEDIR_NAMES}_${CDATE}" +# +#----------------------------------------------------------------------- +# +# Set the array of forecast hours for which to run the MET/METplus tool. +# +#----------------------------------------------------------------------- +# +set_vx_fhr_list \ + cdate="${CDATE}" \ + fcst_len_hrs="${FCST_LEN_HRS}" \ + field="$VAR" \ + accum_hh="${ACCUM_HH}" \ + base_dir="${OBS_INPUT_DIR}" \ + fn_template="${OBS_INPUT_FN_TEMPLATE}" \ + check_hourly_files="FALSE" \ + outvarname_fhr_list="FHR_LIST" +# +#----------------------------------------------------------------------- +# +# Make sure the MET/METplus output directory(ies) exists. +# +#----------------------------------------------------------------------- +# +mkdir_vrfy -p "${OUTPUT_DIR}" +# +#----------------------------------------------------------------------- +# +# Check for existence of top-level OBS_DIR. +# +#----------------------------------------------------------------------- +# +if [ ! -d "${OBS_DIR}" ]; then + print_err_msg_exit "\ +OBS_DIR does not exist or is not a directory: + OBS_DIR = \"${OBS_DIR}\"" +fi +# +#----------------------------------------------------------------------- +# +# Export variables needed in the common METplus configuration file (at +# ${METPLUS_CONF}/common.conf). +# +#----------------------------------------------------------------------- +# +export MET_INSTALL_DIR +export METPLUS_PATH +export MET_BIN_EXEC +export METPLUS_CONF +export LOGDIR +# +#----------------------------------------------------------------------- +# +# Do not run METplus if there isn't at least one valid forecast hour for +# which to run it. +# +#----------------------------------------------------------------------- +# +if [ -z "${FHR_LIST}" ]; then + print_err_msg_exit "\ +The list of forecast hours for which to run METplus is empty: + FHR_LIST = [${FHR_LIST}]" +fi +# +#----------------------------------------------------------------------- +# +# Set the names of the template METplus configuration file, the METplus +# configuration file generated from this template, and the METplus log +# file. +# +#----------------------------------------------------------------------- +# +# First, set the base file names. +# +if [ "${field_is_APCPgt01h}" = "TRUE" ]; then + metplus_config_tmpl_fn="APCPgt01h" +else + metplus_config_tmpl_fn="${FIELDNAME_IN_MET_FILEDIR_NAMES}" +fi +metplus_config_tmpl_fn="${met_tool_pc}_${metplus_config_tmpl_fn}" +metplus_config_fn="${met_tool_pc}_${FIELDNAME_IN_MET_FILEDIR_NAMES}" +metplus_log_fn="${metplus_config_fn}" +# +# 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_log_fn="metplus.log.${metplus_log_fn}" +# +#----------------------------------------------------------------------- +# +# Generate the METplus configuration file from its jinja template. +# +#----------------------------------------------------------------------- +# +# Set the full paths to the jinja template METplus configuration file +# (which already exists) and the METplus configuration file that will be +# generated from it. +# +metplus_config_tmpl_fp="${METPLUS_CONF}/${metplus_config_tmpl_fn}" +metplus_config_fp="${OUTPUT_DIR}/${metplus_config_fn}" +# +# Define variables that appear in the jinja template. +# +settings="\ +# +# Date and forecast hour information. +# + 'cdate': '$CDATE' + 'fhr_list': '${FHR_LIST}' +# +# Input and output directory/file information. +# + 'metplus_config_fn': '${metplus_config_fn:-}' + 'metplus_log_fn': '${metplus_log_fn:-}' + 'obs_input_dir': '${OBS_INPUT_DIR:-}' + 'obs_input_fn_template': '${OBS_INPUT_FN_TEMPLATE:-}' + 'fcst_input_dir': '${FCST_INPUT_DIR:-}' + 'fcst_input_fn_template': '${FCST_INPUT_FN_TEMPLATE:-}' + 'output_base': '${OUTPUT_BASE}' + 'output_dir': '${OUTPUT_DIR}' + 'output_fn_template': '${OUTPUT_FN_TEMPLATE:-}' + 'staging_dir': '${STAGING_DIR}' + 'vx_fcst_model_name': '${VX_FCST_MODEL_NAME}' +# +# Ensemble and member-specific information. +# + 'num_ens_members': '${NUM_ENS_MEMBERS}' + 'uscore_ensmem_name_or_null': '${USCORE_ENSMEM_NAME_OR_NULL:-}' + 'time_lag': '${time_lag:-}' +# +# Field information. +# + 'fieldname_in_obs_input': '${FIELDNAME_IN_OBS_INPUT}' + 'fieldname_in_fcst_input': '${FIELDNAME_IN_FCST_INPUT}' + 'fieldname_in_met_output': '${FIELDNAME_IN_MET_OUTPUT}' + 'fieldname_in_met_filedir_names': '${FIELDNAME_IN_MET_FILEDIR_NAMES}' + 'obtype': '${OBTYPE}' + 'accum_hh': '${ACCUM_HH:-}' + 'accum_no_pad': '${ACCUM_NO_PAD:-}' + 'field_thresholds': '${FIELD_THRESHOLDS:-}' +" +# +# Call the python script to generate the METplus configuration file from +# the jinja template. +# +$USHdir/fill_jinja_template.py -q \ + -u "${settings}" \ + -t ${metplus_config_tmpl_fp} \ + -o ${metplus_config_fp} || \ +print_err_msg_exit "\ +Call to python script fill_jinja_template.py to generate a METplus +configuration file from a jinja template failed. Parameters passed +to this script are: + Full path to template METplus configuration file: + metplus_config_tmpl_fp = \"${metplus_config_tmpl_fp}\" + Full path to output METplus configuration file: + metplus_config_fp = \"${metplus_config_fp}\" + Namelist settings specified on command line: + settings = +$settings" +# +#----------------------------------------------------------------------- +# +# Call METplus. +# +#----------------------------------------------------------------------- +# +print_info_msg "$VERBOSE" " +Calling METplus to run MET's ${met_tool_sc} tool for field(s): ${FIELDNAME_IN_MET_FILEDIR_NAMES}" +${METPLUS_PATH}/ush/run_metplus.py \ + -c ${METPLUS_CONF}/common.conf \ + -c ${metplus_config_fp} || \ +print_err_msg_exit " +Call to METplus failed with return code: $? +METplus configuration file used is: + metplus_config_fp = \"${metplus_config_fp}\"" +# +#----------------------------------------------------------------------- +# +# Print message indicating successful completion of script. +# +#----------------------------------------------------------------------- +# +print_info_msg " +======================================================================== +METplus ${met_tool_pc} tool completed successfully. + +Exiting script: \"${scrfunc_fn}\" +In directory: \"${scrfunc_dir}\" +========================================================================" +# +#----------------------------------------------------------------------- +# +# Restore the shell options saved at the beginning of this script/func- +# tion. +# +#----------------------------------------------------------------------- +# +{ restore_shell_opts; } > /dev/null 2>&1 From 3a1d8b80ce411b2d0ba5cd842d9afc1086b39cd9 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Sun, 19 Mar 2023 14:31:50 -0600 Subject: [PATCH 087/119] Minor bug fixes. --- parm/metplus/PointStat_ensmean_SFC.conf | 8 ++++---- parm/metplus/PointStat_ensmean_UPA.conf | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/parm/metplus/PointStat_ensmean_SFC.conf b/parm/metplus/PointStat_ensmean_SFC.conf index ab16a84e43..9656cd8708 100644 --- a/parm/metplus/PointStat_ensmean_SFC.conf +++ b/parm/metplus/PointStat_ensmean_SFC.conf @@ -162,16 +162,16 @@ POINT_STAT_STATION_ID = # Message types, if all message types are to be returned, leave this empty, # otherwise indicate the message types of interest. POINT_STAT_MESSAGE_TYPE = ADP{FIELDNAME_IN_MET_FILEDIR_NAMES} + +# set to True to run PointStat once for each name/level combination +# set to False to run PointStat once per run time including all fields +POINT_STAT_ONCE_PER_FIELD = False # # Variables and levels as specified in the field dictionary of the METplus # PointStat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, # (optional) FCST_VARn_OPTION # -# set to True to run PointStat once for each name/level combination -# set to False to run PointStat once per run time including all fields -POINT_STAT_ONCE_PER_FIELD = False - # fields to compare # Note: If FCST_VAR_* is set, then a corresponding OBS_VAR_* variable must be set # To use one variables for both forecast and observation data, set BOTH_VAR_* instead diff --git a/parm/metplus/PointStat_ensmean_UPA.conf b/parm/metplus/PointStat_ensmean_UPA.conf index d9513c8d5c..ac29be9b55 100644 --- a/parm/metplus/PointStat_ensmean_UPA.conf +++ b/parm/metplus/PointStat_ensmean_UPA.conf @@ -123,7 +123,7 @@ POINT_STAT_OFFSETS = 0 # 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}}_mean +MODEL = {{vx_fcst_model_name}}_ensmean POINT_STAT_DESC = NA # From 834f0a79f911eb04ab2e9652a114595e69c86652 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Sun, 19 Mar 2023 15:10:33 -0600 Subject: [PATCH 088/119] Bug fixes to get EnsembleStat to output all the fields required by downstream tasks. --- parm/metplus/EnsembleStat_APCP01h.conf | 14 +++++++------- parm/metplus/EnsembleStat_APCPgt01h.conf | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/parm/metplus/EnsembleStat_APCP01h.conf b/parm/metplus/EnsembleStat_APCP01h.conf index db8ff2dbb1..fa95a3baf6 100644 --- a/parm/metplus/EnsembleStat_APCP01h.conf +++ b/parm/metplus/EnsembleStat_APCP01h.conf @@ -142,7 +142,7 @@ ENSEMBLE_STAT_ENS_PHIST_BIN_SIZE = 0.05 ENSEMBLE_STAT_CLIMO_CDF_BINS = 1 ENSEMBLE_STAT_CLIMO_CDF_CENTER_BINS = False -ENSEMBLE_STAT_CLIMO_CDF_WRITE_BINS = False +ENSEMBLE_STAT_CLIMO_CDF_WRITE_BINS = True ENSEMBLE_STAT_MASK_GRID = @@ -162,19 +162,19 @@ 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_LATLON = TRUE +ENSEMBLE_STAT_ENSEMBLE_FLAG_MEAN = TRUE +ENSEMBLE_STAT_ENSEMBLE_FLAG_STDEV = TRUE 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_VLD_COUNT = TRUE +ENSEMBLE_STAT_ENSEMBLE_FLAG_FREQUENCY = TRUE ENSEMBLE_STAT_ENSEMBLE_FLAG_NEP = FALSE ENSEMBLE_STAT_ENSEMBLE_FLAG_NMEP = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK = FALSE +ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK = TRUE ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT = FALSE # # Ensemble variables and levels as specified in the ens field dictionary diff --git a/parm/metplus/EnsembleStat_APCPgt01h.conf b/parm/metplus/EnsembleStat_APCPgt01h.conf index 115cfb945e..cb3f258344 100644 --- a/parm/metplus/EnsembleStat_APCPgt01h.conf +++ b/parm/metplus/EnsembleStat_APCPgt01h.conf @@ -148,7 +148,7 @@ ENSEMBLE_STAT_ENS_PHIST_BIN_SIZE = 0.05 ENSEMBLE_STAT_CLIMO_CDF_BINS = 1 ENSEMBLE_STAT_CLIMO_CDF_CENTER_BINS = False -ENSEMBLE_STAT_CLIMO_CDF_WRITE_BINS = False +ENSEMBLE_STAT_CLIMO_CDF_WRITE_BINS = True ENSEMBLE_STAT_MASK_GRID = @@ -168,19 +168,19 @@ 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_LATLON = TRUE +ENSEMBLE_STAT_ENSEMBLE_FLAG_MEAN = TRUE +ENSEMBLE_STAT_ENSEMBLE_FLAG_STDEV = TRUE 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_VLD_COUNT = TRUE +ENSEMBLE_STAT_ENSEMBLE_FLAG_FREQUENCY = TRUE ENSEMBLE_STAT_ENSEMBLE_FLAG_NEP = FALSE ENSEMBLE_STAT_ENSEMBLE_FLAG_NMEP = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK = FALSE +ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK = TRUE ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT = FALSE # # Ensemble variables and levels as specified in the ens field dictionary From 4591b61f90d4e7d42da63386785368400eea96c5 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Sun, 19 Mar 2023 23:37:19 -0600 Subject: [PATCH 089/119] Edits to comments. --- parm/metplus/EnsembleStat_APCP01h.conf | 17 +++++++++-------- parm/metplus/EnsembleStat_APCPgt01h.conf | 17 +++++++++-------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/parm/metplus/EnsembleStat_APCP01h.conf b/parm/metplus/EnsembleStat_APCP01h.conf index fa95a3baf6..35f9b0dd48 100644 --- a/parm/metplus/EnsembleStat_APCP01h.conf +++ b/parm/metplus/EnsembleStat_APCP01h.conf @@ -32,7 +32,7 @@ INIT_INCREMENT = 3600 # 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 @@ -41,6 +41,7 @@ LEAD_SEQ = {{fhr_list}} # 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. @@ -88,9 +89,10 @@ 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_OUTPUT_PREFIX = {MODEL}_{FIELDNAME_IN_MET_FILEDIR_NAMES}_{OBTYPE} +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. @@ -185,8 +187,7 @@ ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT = FALSE # generated by EnsembleStat to include the ensemble probability (aka # ensembe frequency) fields corresponding to the specified thresholds. # These must be included because the corresonding GridStat task for -# ensemble probabilities (GridStat_ensprob_APCP03h) expects to read them -# in as input. +# ensemble probabilities expects to read them in as input. # ENS_VAR1_NAME = {{fieldname_in_fcst_input}} ENS_VAR1_LEVELS = A{ACCUM_HH} @@ -205,8 +206,8 @@ FCST_VAR1_LEVELS = A{ACCUM_HH} FCST_VAR1_OPTIONS = ens_ssvar_bin_size = 50.0; ens_phist_bin_size = 0.05; # # Observation variables and levels as specified in the obs field dictionary -# of the MET configuration file. Specify as OBS_VARn_NAME, OBS_VARn_LEVELS, -# (optional) OBS_VARn_OPTION +# of the MET configuration file. Specify as OBS_VARn_NAME, OBS_VARn_LEVELS, +# (optional) OBS_VARn_OPTION. # OBS_VAR1_NAME = {{fieldname_in_obs_input}} OBS_VAR1_LEVELS = A{ACCUM_HH} @@ -221,11 +222,11 @@ OBS_VAR1_OPTIONS = {FCST_VAR1_OPTIONS} OUTPUT_BASE = {{output_base}} OUTPUT_DIR = {{output_dir}} # -# Point observation input dir for EnsembleStat. +# Point observation input directory for EnsembleStat. # OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = # -# Grid observation input dir for EnsembleStat. +# Grid observation input directory for EnsembleStat. # OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = {{obs_input_dir}} # diff --git a/parm/metplus/EnsembleStat_APCPgt01h.conf b/parm/metplus/EnsembleStat_APCPgt01h.conf index cb3f258344..adefb5609c 100644 --- a/parm/metplus/EnsembleStat_APCPgt01h.conf +++ b/parm/metplus/EnsembleStat_APCPgt01h.conf @@ -32,7 +32,7 @@ INIT_INCREMENT = 3600 # 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 @@ -41,6 +41,7 @@ LEAD_SEQ = {{fhr_list}} # 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. @@ -94,9 +95,10 @@ 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_OUTPUT_PREFIX = {MODEL}_{FIELDNAME_IN_MET_FILEDIR_NAMES}_{OBTYPE} +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. @@ -191,8 +193,7 @@ ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT = FALSE # generated by EnsembleStat to include the ensemble probability (aka # ensembe frequency) fields corresponding to the specified thresholds. # These must be included because the corresonding GridStat task for -# ensemble probabilities (GridStat_ensprob_APCP03h) expects to read them -# in as input. +# ensemble probabilities expects to read them in as input. # ENS_VAR1_NAME = {{fieldname_in_met_output}} ENS_VAR1_LEVELS = A{ACCUM_HH} @@ -211,8 +212,8 @@ FCST_VAR1_LEVELS = A{ACCUM_HH} FCST_VAR1_OPTIONS = ens_ssvar_bin_size = 50.0; ens_phist_bin_size = 0.05; # # Observation variables and levels as specified in the obs field dictionary -# of the MET configuration file. Specify as OBS_VARn_NAME, OBS_VARn_LEVELS, -# (optional) OBS_VARn_OPTION +# of the MET configuration file. Specify as OBS_VARn_NAME, OBS_VARn_LEVELS, +# (optional) OBS_VARn_OPTION. # OBS_VAR1_NAME = {{fieldname_in_met_output}} OBS_VAR1_LEVELS = A{ACCUM_HH} @@ -227,11 +228,11 @@ OBS_VAR1_OPTIONS = {FCST_VAR1_OPTIONS} OUTPUT_BASE = {{output_base}} OUTPUT_DIR = {{output_dir}} # -# Point observation input dir for EnsembleStat. +# Point observation input directory for EnsembleStat. # OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = # -# Grid observation input dir for EnsembleStat. +# Grid observation input directory for EnsembleStat. # OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = {{obs_input_dir}} # From dd97a283f8866648a4d924de6aed3de70bd41fb8 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Sun, 19 Mar 2023 23:37:45 -0600 Subject: [PATCH 090/119] Change METplus conf files for EnsembleStat operating on REFC and RETOP to templates and add necessary variables to correspondig ROCOTO template XML tasks. --- parm/FV3LAM_wflow.xml | 12 +- parm/metplus/EnsembleStat_REFC.conf | 238 +++++++++++++++------------ parm/metplus/EnsembleStat_RETOP.conf | 235 +++++++++++++++----------- 3 files changed, 281 insertions(+), 204 deletions(-) diff --git a/parm/FV3LAM_wflow.xml b/parm/FV3LAM_wflow.xml index 312be65c68..5f630575a5 100644 --- a/parm/FV3LAM_wflow.xml +++ b/parm/FV3LAM_wflow.xml @@ -2322,7 +2322,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT" {{ nnodes_run_met_ensemblestat_vx_refc }}:ppn={{ ppn_run_met_ensemblestat_vx_refc }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_ensemblestat_vx_refc }} @@ -2340,8 +2340,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + OBTYPEMRMS VARREFC + ACCUM_HH01 + MET_TOOLENSEMBLESTAT @@ -2356,7 +2358,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT" {{ nnodes_run_met_ensemblestat_vx_retop }}:ppn={{ ppn_run_met_ensemblestat_vx_retop }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_ensemblestat_vx_retop }} @@ -2374,8 +2376,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(1, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + OBTYPEMRMS VARRETOP + ACCUM_HH01 + MET_TOOLENSEMBLESTAT diff --git a/parm/metplus/EnsembleStat_REFC.conf b/parm/metplus/EnsembleStat_REFC.conf index 4ccab0c980..4d050749c4 100644 --- a/parm/metplus/EnsembleStat_REFC.conf +++ b/parm/metplus/EnsembleStat_REFC.conf @@ -2,43 +2,73 @@ [config] -## Configuration-related settings such as the process list, begin and end times, etc. +# List of applications to run - only GridStat for this case PROCESS_LIST = EnsembleStat -# Looping by times: steps through each 'task' in the PROCESS_LIST for each -# defined time, and repeats until all times have been evaluated. -LOOP_ORDER = times - -# LOOP_BY: Set to INIT to loop over initialization times +# 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 INT_END +# 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 -INIT_BEG={ENV[CDATE]} - -# End time for METplus run -INIT_END={ENV[CDATE]} - -# Increment between METplus runs in seconds. Must be >= 60 -INIT_INCREMENT=3600 - -# List of forecast leads to process -LEAD_SEQ = {ENV[fhr_list]} - +# 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. +# +ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped +# # Used in the MET config file for: model, output_prefix -MODEL = {ENV[VX_FCST_MODEL_NAME]} +# +MODEL = {{vx_fcst_model_name}} ENSEMBLE_STAT_DESC = NA ;; not in other file # Name to identify observation data in output -OBTYPE = MRMS +OBTYPE = {{obtype}} #ENSEMBLE_STAT_DESC = # not in other file -# The MET EnsembleStat logging level -# 0 quiet to 5 loud, Verbosity setting for MET EnsembleStat output, 2 is default. +# 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 @@ -50,7 +80,7 @@ OBS_FILE_WINDOW_END = 300 # 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 = {ENV[NUM_ENS_MEMBERS]} +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 @@ -59,9 +89,9 @@ ENSEMBLE_STAT_ENS_THRESH = 0.05 # ens.vld_thresh value in the MET config file ENSEMBLE_STAT_ENS_VLD_THRESH = 1.0 -ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_REFC_{OBTYPE} +ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_{FIELDNAME_IN_MET_FILEDIR_NAMES}_{OBTYPE} -ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped +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 @@ -79,17 +109,8 @@ ENSEMBLE_STAT_REGRID_SHAPE = SQUARE ENSEMBLE_STAT_CENSOR_THRESH = ENSEMBLE_STAT_CENSOR_VAL = -#ENSEMBLE_STAT_NBRHD_PROB_WIDTH = 5 -#ENSEMBLE_STAT_NBRHD_PROB_SHAPE = CIRCLE -#ENSEMBLE_STAT_NBRHD_PROB_VLD_THRESH = 0.0 - -#ENSEMBLE_STAT_NMEP_SMOOTH_VLD_THRESH = 0.0 -#ENSEMBLE_STAT_NMEP_SMOOTH_SHAPE = CIRCLE -#ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_DX = 81.27 -#ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_RADIUS = 120 -#ENSEMBLE_STAT_NMEP_SMOOTH_METHOD = GAUSSIAN -#ENSEMBLE_STAT_NMEP_SMOOTH_WIDTH = 1 - +# Should this parameter be set to something other than ADPSFC (maybe +# just leave empty) since we are not verifying surface fields? ENSEMBLE_STAT_MESSAGE_TYPE = ADPSFC ENSEMBLE_STAT_DUPLICATE_FLAG = NONE @@ -159,68 +180,85 @@ ENSEMBLE_STAT_ENSEMBLE_FLAG_NEP = FALSE ENSEMBLE_STAT_ENSEMBLE_FLAG_NMEP = FALSE ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK = TRUE ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT = FALSE - -# 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 = REFC +# +# 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_VARn_THRESH must be included here in order for the netCDF file +# generated by EnsembleStat to include the ensemble probability (aka +# ensembe frequency) fields corresponding to the specified thresholds. +# These must be included because the corresonding GridStat task for +# ensemble probabilities expects to read them in as input. +# +ENS_VAR1_NAME = {{fieldname_in_fcst_input}} ENS_VAR1_LEVELS = L0 -ENS_VAR1_THRESH = ge20, ge30, ge40, ge50 - -# Forecast 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 -FCST_VAR1_NAME = REFC +ENS_VAR1_THRESH = {{field_thresholds}} +# +# Forecast 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. +# +FCST_VAR1_NAME = {{fieldname_in_fcst_input}} FCST_VAR1_LEVELS = L0 - FCST_VAR1_OPTIONS = ens_ssvar_bin_size = 50.0; ens_phist_bin_size = 0.05; - -# Observation Variables and levels as specified in the obs field dictionary -# of the MET configuration file. Specify as OBS_VARn_NAME, OBS_VARn_LEVELS, -# (optional) OBS_VARn_OPTION -OBS_VAR1_NAME = MergedReflectivityQCComposite +# +# Observation variables and levels as specified in the obs field dictionary +# of the MET configuration file. Specify as OBS_VARn_NAME, OBS_VARn_LEVELS, +# (optional) OBS_VARn_OPTION. +# +OBS_VAR1_NAME = {{fieldname_in_obs_input}} OBS_VAR1_LEVELS = Z500 - OBS_VAR1_OPTIONS = censor_thresh = lt-20; censor_val = -20.0; cnt_thresh = [ >15 ]; cnt_logic = UNION; ens_ssvar_bin_size = 50.0; ens_phist_bin_size = 0.05; [dir] -# Input and output data directories -INPUT_BASE = {ENV[INPUT_BASE]} -OUTPUT_BASE = {ENV[OUTPUT_BASE]} - -# Forecast model input directory for EnsembleStat -FCST_ENSEMBLE_STAT_INPUT_DIR = {INPUT_BASE} - -# Point observation input dir for EnsembleStat +# +# 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}} +OUTPUT_DIR = {{output_dir}} +# +# Point observation input directory for EnsembleStat. +# OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = - -# Grid observation input dir for EnsembleStat -OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = {ENV[OBS_DIR]} - -# directory containing climatology mean input to EnsembleStat -# Not used in this example +# +# 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 +# +# 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_BASE} - -# directory containing log files -LOG_DIR = {OUTPUT_BASE}/log - -# directory for staging data -STAGING_DIR = {OUTPUT_BASE}/stage/REFC - +# +# Output directory for EnsembleStat. +# +ENSEMBLE_STAT_OUTPUT_DIR = {OUTPUT_DIR} +# +# Directory for staging data. +# +STAGING_DIR = {{staging_dir}} [filename_templates] - +# # FCST_ENSEMBLE_STAT_INPUT_TEMPLATE - comma separated list of ensemble members # or a single line, - filename wildcard characters may be used, ? or *. - -FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[MEM_STAR]}{ENV[POSTPRD]}{ENV[NET]}.t{init?fmt=%H}z*.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 +# +# The template FCST_ENSEMBLE_STAT_INPUT_TEMPLATE is relative to +# FCST_ENSEMBLE_STAT_INPUT_DIR. +# +FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # Template to look for point observations. # Example precip24_2010010112.nc @@ -228,23 +266,21 @@ OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = # Template to look for gridded observations. # Example ST4.2010010112.24h -OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/MergedReflectivityQCComposite_00.50_{valid?fmt=%Y%m%d}-{valid?fmt=%H}0000.grib2 +OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = {{obs_input_fn_template}} ENSEMBLE_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly - -# Template to look for climatology input to EnsembleStat relative to ENSEMBLE_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# Template to look 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 to look for climatology input to EnsembleStat relative to ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# Template to look for climatology input to EnsembleStat relative to +# ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR. Not used in this example. +# ENSEMBLE_STAT_CLIMO_STDEV_INPUT_TEMPLATE = - -ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/EnsembleStat - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/EnsembleStat/metplus_final.REFC.conf - +# +# The template ENSEMBLE_STAT_OUTPUT_TEMPLATE is relative to +# ENSEMBLE_STAT_OUTPUT_DIR. +# +ENSEMBLE_STAT_OUTPUT_TEMPLATE = diff --git a/parm/metplus/EnsembleStat_RETOP.conf b/parm/metplus/EnsembleStat_RETOP.conf index e05fbeffc7..f5617fc138 100644 --- a/parm/metplus/EnsembleStat_RETOP.conf +++ b/parm/metplus/EnsembleStat_RETOP.conf @@ -2,43 +2,73 @@ [config] -## Configuration-related settings such as the process list, begin and end times, etc. +# List of applications to run - only GridStat for this case PROCESS_LIST = EnsembleStat -# Looping by times: steps through each 'task' in the PROCESS_LIST for each -# defined time, and repeats until all times have been evaluated. -LOOP_ORDER = times - -# LOOP_BY: Set to INIT to loop over initialization times +# 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 INT_END +# 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 -INIT_BEG={ENV[CDATE]} - -# End time for METplus run -INIT_END={ENV[CDATE]} - -# Increment between METplus runs in seconds. Must be >= 60 -INIT_INCREMENT=3600 - -# List of forecast leads to process -LEAD_SEQ = {ENV[fhr_list]} - +# 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. +# +ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped +# # Used in the MET config file for: model, output_prefix -MODEL = {ENV[VX_FCST_MODEL_NAME]} +# +MODEL = {{vx_fcst_model_name}} ENSEMBLE_STAT_DESC = NA ;; not in other file # Name to identify observation data in output -OBTYPE = MRMS +OBTYPE = {{obtype}} #ENSEMBLE_STAT_DESC = # not in other file -# The MET EnsembleStat logging level -# 0 quiet to 5 loud, Verbosity setting for MET EnsembleStat output, 2 is default. +# 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 @@ -50,7 +80,7 @@ OBS_FILE_WINDOW_END = 300 # 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 = {ENV[NUM_ENS_MEMBERS]} +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 @@ -59,9 +89,9 @@ ENSEMBLE_STAT_ENS_THRESH = 0.05 # ens.vld_thresh value in the MET config file ENSEMBLE_STAT_ENS_VLD_THRESH = 1.0 -ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_RETOP_{OBTYPE} +ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_{FIELDNAME_IN_MET_FILEDIR_NAMES}_{OBTYPE} -ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped +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 @@ -79,17 +109,8 @@ ENSEMBLE_STAT_REGRID_SHAPE = SQUARE ENSEMBLE_STAT_CENSOR_THRESH = ENSEMBLE_STAT_CENSOR_VAL = -#ENSEMBLE_STAT_NBRHD_PROB_WIDTH = 5 -#ENSEMBLE_STAT_NBRHD_PROB_SHAPE = CIRCLE -#ENSEMBLE_STAT_NBRHD_PROB_VLD_THRESH = 0.0 - -#ENSEMBLE_STAT_NMEP_SMOOTH_VLD_THRESH = 0.0 -#ENSEMBLE_STAT_NMEP_SMOOTH_SHAPE = CIRCLE -#ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_DX = 81.27 -#ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_RADIUS = 120 -#ENSEMBLE_STAT_NMEP_SMOOTH_METHOD = GAUSSIAN -#ENSEMBLE_STAT_NMEP_SMOOTH_WIDTH = 1 - +# Should this parameter be set to something other than ADPSFC (maybe +# just leave empty) since we are not verifying surface fields? ENSEMBLE_STAT_MESSAGE_TYPE = ADPSFC ENSEMBLE_STAT_DUPLICATE_FLAG = NONE @@ -159,71 +180,89 @@ ENSEMBLE_STAT_ENSEMBLE_FLAG_NEP = FALSE ENSEMBLE_STAT_ENSEMBLE_FLAG_NMEP = FALSE ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK = TRUE ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT = FALSE - -# 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 = RETOP +# +# 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_VARn_THRESH must be included here in order for the netCDF file +# generated by EnsembleStat to include the ensemble probability (aka +# ensembe frequency) fields corresponding to the specified thresholds. +# These must be included because the corresonding GridStat task for +# ensemble probabilities expects to read them in as input. +# +ENS_VAR1_NAME = {{fieldname_in_fcst_input}} ENS_VAR1_LEVELS = L0 -ENS_VAR1_THRESH = ge20, ge30, ge40, ge50 +ENS_VAR1_THRESH = {{field_thresholds}} # convert from meters to kilofeet: M_to_KFT(x) = x * 3.28084 * 0.001; ENS_VAR1_OPTIONS = convert(x) = x * 3.28084 * 0.001; - -# Forecast 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 -FCST_VAR1_NAME = RETOP +# +# Forecast 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. +# +FCST_VAR1_NAME = {{fieldname_in_fcst_input}} FCST_VAR1_LEVELS = L0 # convert from meters to kilofeet: M_to_KFT(x) = x * 3.28084 * 0.001; FCST_VAR1_OPTIONS = convert(x) = x * 3.28084 * 0.001; ens_ssvar_bin_size = 50.0; ens_phist_bin_size = 0.05; -# Observation Variables and levels as specified in the obs field dictionary -# of the MET configuration file. Specify as OBS_VARn_NAME, OBS_VARn_LEVELS, -# (optional) OBS_VARn_OPTION - -OBS_VAR1_NAME = EchoTop18 +# Observation variables and levels as specified in the obs field dictionary +# of the MET configuration file. Specify as OBS_VARn_NAME, OBS_VARn_LEVELS, +# (optional) OBS_VARn_OPTION. +# +OBS_VAR1_NAME = {{fieldname_in_obs_input}} OBS_VAR1_LEVELS = Z500 # convert from kilometers to kilofeet: KM_to_KFT(x) = x * 3280.84 * 0.001; OBS_VAR1_OPTIONS = censor_thresh = lt-20; censor_val = -20.0; cnt_thresh = [ >15 ]; cnt_logic = UNION; convert(x) = x * 3280.84 * 0.001; ens_ssvar_bin_size = 50.0; ens_phist_bin_size = 0.05; [dir] -# Input and output data directories -INPUT_BASE = {ENV[INPUT_BASE]} -OUTPUT_BASE = {ENV[OUTPUT_BASE]} - -# Forecast model input directory for EnsembleStat -FCST_ENSEMBLE_STAT_INPUT_DIR = {INPUT_BASE} - -# Point observation input dir for EnsembleStat +# +# 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}} +OUTPUT_DIR = {{output_dir}} +# +# Point observation input directory for EnsembleStat. +# OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = - -# Grid observation input dir for EnsembleStat -OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = {ENV[OBS_DIR]} - -# directory containing climatology mean input to EnsembleStat -# Not used in this example +# +# 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 +# +# 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_BASE} - -# directory containing log files -LOG_DIR = {OUTPUT_BASE}/log - -# directory for staging data -STAGING_DIR = {OUTPUT_BASE}/stage/RETOP - +# +# Output directory for EnsembleStat. +# +ENSEMBLE_STAT_OUTPUT_DIR = {OUTPUT_DIR} +# +# Directory for staging data. +# +STAGING_DIR = {{staging_dir}} [filename_templates] - +# # FCST_ENSEMBLE_STAT_INPUT_TEMPLATE - comma separated list of ensemble members # or a single line, - filename wildcard characters may be used, ? or *. - -FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[MEM_STAR]}{ENV[POSTPRD]}{ENV[NET]}.t{init?fmt=%H}z*.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 +# +# The template FCST_ENSEMBLE_STAT_INPUT_TEMPLATE is relative to +# FCST_ENSEMBLE_STAT_INPUT_DIR. +# +FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # Template to look for point observations. # Example precip24_2010010112.nc @@ -231,23 +270,21 @@ OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = # Template to look for gridded observations. # Example ST4.2010010112.24h -OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/EchoTop_18_00.50_{valid?fmt=%Y%m%d}-{valid?fmt=%H}0000.grib2 +OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = {{obs_input_fn_template}} ENSEMBLE_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly - -# Template to look for climatology input to EnsembleStat relative to ENSEMBLE_STAT_CLIMO_MEAN_INPUT_DIR -# Not used in this example +# +# Template to look 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 to look for climatology input to EnsembleStat relative to ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR -# Not used in this example +# +# Template to look for climatology input to EnsembleStat relative to +# ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR. Not used in this example. +# ENSEMBLE_STAT_CLIMO_STDEV_INPUT_TEMPLATE = - -ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/EnsembleStat - -# Specify the name of the metplus.log file -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} - -# Specify where the location and name of the final metplus_final.conf -METPLUS_CONF={OUTPUT_BASE}/{ENV[CDATE]}/metprd/EnsembleStat/metplus_final.RETOP.conf - +# +# The template ENSEMBLE_STAT_OUTPUT_TEMPLATE is relative to +# ENSEMBLE_STAT_OUTPUT_DIR. +# +ENSEMBLE_STAT_OUTPUT_TEMPLATE = From a153a3a62a51a477db9ba80861816e0cab8f1f0a Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Mon, 20 Mar 2023 00:57:28 -0600 Subject: [PATCH 091/119] Fix up comments and spacing. --- parm/metplus/EnsembleStat_APCP01h.conf | 28 +++++++++++------------- parm/metplus/EnsembleStat_APCPgt01h.conf | 28 +++++++++++------------- parm/metplus/EnsembleStat_REFC.conf | 28 +++++++++++------------- parm/metplus/EnsembleStat_RETOP.conf | 28 +++++++++++------------- 4 files changed, 52 insertions(+), 60 deletions(-) diff --git a/parm/metplus/EnsembleStat_APCP01h.conf b/parm/metplus/EnsembleStat_APCP01h.conf index 35f9b0dd48..b88f7082e7 100644 --- a/parm/metplus/EnsembleStat_APCP01h.conf +++ b/parm/metplus/EnsembleStat_APCP01h.conf @@ -60,24 +60,24 @@ ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped # MODEL = {{vx_fcst_model_name}} -ENSEMBLE_STAT_DESC = NA ;; not in other file +ENSEMBLE_STAT_DESC = NA # Name to identify observation data in output OBTYPE = {{obtype}} -#ENSEMBLE_STAT_DESC = # not in other file +#ENSEMBLE_STAT_DESC = # 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_ENSEMBLE_STAT_WINDOW_BEGIN = 0 -OBS_ENSEMBLE_STAT_WINDOW_END = 0 - 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}} @@ -197,18 +197,14 @@ ENS_VAR1_THRESH = {{field_thresholds}} # ACCUM_HH = {{accum_hh}} # -# Forecast 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. +# 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_fcst_input}} FCST_VAR1_LEVELS = A{ACCUM_HH} FCST_VAR1_OPTIONS = ens_ssvar_bin_size = 50.0; ens_phist_bin_size = 0.05; -# -# Observation variables and levels as specified in the obs field dictionary -# of the MET configuration file. Specify as OBS_VARn_NAME, OBS_VARn_LEVELS, -# (optional) OBS_VARn_OPTION. -# OBS_VAR1_NAME = {{fieldname_in_obs_input}} OBS_VAR1_LEVELS = A{ACCUM_HH} OBS_VAR1_OPTIONS = {FCST_VAR1_OPTIONS} @@ -261,13 +257,15 @@ STAGING_DIR = {{staging_dir}} # FCST_ENSEMBLE_STAT_INPUT_DIR. # FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} - +# # Template to look for point observations. # Example precip24_2010010112.nc +# OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = - +# # Template to look for gridded observations. # Example ST4.2010010112.24h +# OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = {{obs_input_fn_template}} ENSEMBLE_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly diff --git a/parm/metplus/EnsembleStat_APCPgt01h.conf b/parm/metplus/EnsembleStat_APCPgt01h.conf index adefb5609c..e467ef3e9d 100644 --- a/parm/metplus/EnsembleStat_APCPgt01h.conf +++ b/parm/metplus/EnsembleStat_APCPgt01h.conf @@ -62,7 +62,7 @@ MODEL = {{vx_fcst_model_name}} FCST_NATIVE_DATA_TYPE = GRIB -ENSEMBLE_STAT_DESC = NA ;; not in other file +ENSEMBLE_STAT_DESC = NA # Name to identify observation data in output OBTYPE = {{obtype}} @@ -71,19 +71,19 @@ OBS_NATIVE_DATA_TYPE = GRIB # Forecast data description variables FCST_IS_PROB = false -#ENSEMBLE_STAT_DESC = # not in other file +#ENSEMBLE_STAT_DESC = # 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_ENSEMBLE_STAT_WINDOW_BEGIN = 0 -OBS_ENSEMBLE_STAT_WINDOW_END = 0 - 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}} @@ -203,18 +203,14 @@ ENS_VAR1_THRESH = {{field_thresholds}} # ACCUM_HH = {{accum_hh}} # -# Forecast 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. +# 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; -# -# Observation variables and levels as specified in the obs field dictionary -# of the MET configuration file. Specify as OBS_VARn_NAME, OBS_VARn_LEVELS, -# (optional) OBS_VARn_OPTION. -# OBS_VAR1_NAME = {{fieldname_in_met_output}} OBS_VAR1_LEVELS = A{ACCUM_HH} OBS_VAR1_OPTIONS = {FCST_VAR1_OPTIONS} @@ -267,13 +263,15 @@ STAGING_DIR = {{staging_dir}} # FCST_ENSEMBLE_STAT_INPUT_DIR. # FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} - +# # Template to look for point observations. # Example precip24_2010010112.nc +# OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = - +# # Template to look for gridded observations. # Example ST4.2010010112.24h +# OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = {{obs_input_fn_template}} ENSEMBLE_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly diff --git a/parm/metplus/EnsembleStat_REFC.conf b/parm/metplus/EnsembleStat_REFC.conf index 4d050749c4..70e0990ec5 100644 --- a/parm/metplus/EnsembleStat_REFC.conf +++ b/parm/metplus/EnsembleStat_REFC.conf @@ -60,24 +60,24 @@ ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped # MODEL = {{vx_fcst_model_name}} -ENSEMBLE_STAT_DESC = NA ;; not in other file +ENSEMBLE_STAT_DESC = NA # Name to identify observation data in output OBTYPE = {{obtype}} -#ENSEMBLE_STAT_DESC = # not in other file +#ENSEMBLE_STAT_DESC = # 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_ENSEMBLE_STAT_WINDOW_BEGIN = 0 -OBS_ENSEMBLE_STAT_WINDOW_END = 0 - OBS_FILE_WINDOW_BEGIN = -300 OBS_FILE_WINDOW_END = 300 +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}} @@ -195,18 +195,14 @@ ENS_VAR1_NAME = {{fieldname_in_fcst_input}} ENS_VAR1_LEVELS = L0 ENS_VAR1_THRESH = {{field_thresholds}} # -# Forecast 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. +# 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_fcst_input}} FCST_VAR1_LEVELS = L0 FCST_VAR1_OPTIONS = ens_ssvar_bin_size = 50.0; ens_phist_bin_size = 0.05; -# -# Observation variables and levels as specified in the obs field dictionary -# of the MET configuration file. Specify as OBS_VARn_NAME, OBS_VARn_LEVELS, -# (optional) OBS_VARn_OPTION. -# OBS_VAR1_NAME = {{fieldname_in_obs_input}} OBS_VAR1_LEVELS = Z500 OBS_VAR1_OPTIONS = censor_thresh = lt-20; censor_val = -20.0; cnt_thresh = [ >15 ]; cnt_logic = UNION; ens_ssvar_bin_size = 50.0; ens_phist_bin_size = 0.05; @@ -259,13 +255,15 @@ STAGING_DIR = {{staging_dir}} # FCST_ENSEMBLE_STAT_INPUT_DIR. # FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} - +# # Template to look for point observations. # Example precip24_2010010112.nc +# OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = - +# # Template to look for gridded observations. # Example ST4.2010010112.24h +# OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = {{obs_input_fn_template}} ENSEMBLE_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly diff --git a/parm/metplus/EnsembleStat_RETOP.conf b/parm/metplus/EnsembleStat_RETOP.conf index f5617fc138..dc034e983f 100644 --- a/parm/metplus/EnsembleStat_RETOP.conf +++ b/parm/metplus/EnsembleStat_RETOP.conf @@ -60,24 +60,24 @@ ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped # MODEL = {{vx_fcst_model_name}} -ENSEMBLE_STAT_DESC = NA ;; not in other file +ENSEMBLE_STAT_DESC = NA # Name to identify observation data in output OBTYPE = {{obtype}} -#ENSEMBLE_STAT_DESC = # not in other file +#ENSEMBLE_STAT_DESC = # 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_ENSEMBLE_STAT_WINDOW_BEGIN = 0 -OBS_ENSEMBLE_STAT_WINDOW_END = 0 - OBS_FILE_WINDOW_BEGIN = -300 OBS_FILE_WINDOW_END = 300 +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}} @@ -197,19 +197,15 @@ ENS_VAR1_THRESH = {{field_thresholds}} # convert from meters to kilofeet: M_to_KFT(x) = x * 3.28084 * 0.001; ENS_VAR1_OPTIONS = convert(x) = x * 3.28084 * 0.001; # -# Forecast 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. +# 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_fcst_input}} FCST_VAR1_LEVELS = L0 # convert from meters to kilofeet: M_to_KFT(x) = x * 3.28084 * 0.001; FCST_VAR1_OPTIONS = convert(x) = x * 3.28084 * 0.001; ens_ssvar_bin_size = 50.0; ens_phist_bin_size = 0.05; - -# Observation variables and levels as specified in the obs field dictionary -# of the MET configuration file. Specify as OBS_VARn_NAME, OBS_VARn_LEVELS, -# (optional) OBS_VARn_OPTION. -# OBS_VAR1_NAME = {{fieldname_in_obs_input}} OBS_VAR1_LEVELS = Z500 # convert from kilometers to kilofeet: KM_to_KFT(x) = x * 3280.84 * 0.001; @@ -263,13 +259,15 @@ STAGING_DIR = {{staging_dir}} # FCST_ENSEMBLE_STAT_INPUT_DIR. # FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} - +# # Template to look for point observations. # Example precip24_2010010112.nc +# OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = - +# # Template to look for gridded observations. # Example ST4.2010010112.24h +# OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = {{obs_input_fn_template}} ENSEMBLE_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly From fcabf7290abb02db4e293d6f32605274008a928a Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Mon, 20 Mar 2023 01:23:27 -0600 Subject: [PATCH 092/119] Change METplus conf files for EnsembleStat operating on SFC and UPA to templates and add necessary variables to the correspondig ROCOTO template XML tasks. --- parm/FV3LAM_wflow.xml | 12 +- parm/metplus/EnsembleStat_SFC.conf | 184 ++++++++++++++++++----------- parm/metplus/EnsembleStat_UPA.conf | 165 ++++++++++++++++---------- 3 files changed, 221 insertions(+), 140 deletions(-) diff --git a/parm/FV3LAM_wflow.xml b/parm/FV3LAM_wflow.xml index 5f630575a5..56ec6fdc47 100644 --- a/parm/FV3LAM_wflow.xml +++ b/parm/FV3LAM_wflow.xml @@ -2396,7 +2396,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT" {{ nnodes_run_met_ensemblestat_vx_sfc }}:ppn={{ ppn_run_met_ensemblestat_vx_sfc }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_ensemblestat_vx_sfc }} @@ -2414,8 +2414,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + OBTYPENDAS VARSFC + ACCUM_HH01 + MET_TOOLENSEMBLESTAT @@ -2432,7 +2434,7 @@ done by the scripts that this task calls). &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT" + &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT" {{ nnodes_run_met_ensemblestat_vx_upa }}:ppn={{ ppn_run_met_ensemblestat_vx_upa }} {%- if machine not in ["GAEA", "NOAACLOUD"] %} {{ mem_run_met_ensemblestat_vx_upa }} @@ -2450,8 +2452,10 @@ done by the scripts that this task calls). cyc@H subcyc@M LOGDIR&LOGDIR; - FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} + OBTYPENDAS VARUPA + ACCUM_HH01 + MET_TOOLENSEMBLESTAT diff --git a/parm/metplus/EnsembleStat_SFC.conf b/parm/metplus/EnsembleStat_SFC.conf index 78ded851a3..26e4dae80b 100644 --- a/parm/metplus/EnsembleStat_SFC.conf +++ b/parm/metplus/EnsembleStat_SFC.conf @@ -2,44 +2,73 @@ [config] -## Configuration-related settings such as the process list, begin and end times, etc. +# List of applications to run - only GridStat for this case PROCESS_LIST = EnsembleStat -# Looping by times: steps through each 'task' in the PROCESS_LIST for each -# defined time, and repeats until all times have been evaluated. -LOOP_ORDER = times - -# LOOP_BY: Set to INIT to loop over initialization times +# 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 +# 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 -INIT_BEG = {ENV[CDATE]} +# Start time for METplus run - must match INIT_TIME_FMT +INIT_BEG = {{cdate}} -# End time for METplus run -INIT_END = {ENV[CDATE]} +# End time for METplus run - must match INIT_TIME_FMT +INIT_END = {{cdate}} -# Increment between METplus runs in seconds. Must be >= 60 +# Increment between METplus runs (in seconds if no units are specified). +# Must be >= 60 seconds. INIT_INCREMENT = 3600 -# List of forecast leads to process -LEAD_SEQ = {ENV[fhr_list]} +# 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. +# +ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped # # Used in the MET config file for: model, output_prefix # -MODEL = {ENV[VX_FCST_MODEL_NAME]} +MODEL = {{vx_fcst_model_name}} ENSEMBLE_STAT_DESC = NA # Name to identify observation data in output -OBTYPE = NDAS +OBTYPE = {{obtype}} #ENSEMBLE_STAT_DESC = -# The MET EnsembleStat logging level -# 0 quiet to 5 loud, Verbosity setting for MET EnsembleStat output, 2 is default. +# 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 = 3 @@ -51,7 +80,7 @@ OBS_ENSEMBLE_STAT_WINDOW_END = {OBS_WINDOW_END} # 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 = {ENV[NUM_ENS_MEMBERS]} +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 @@ -60,10 +89,9 @@ ENSEMBLE_STAT_ENS_THRESH = 0.05 # ens.vld_thresh value in the MET config file ENSEMBLE_STAT_ENS_VLD_THRESH = 1.0 -ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_ADPSFC_{OBTYPE} +ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_ADP{FIELDNAME_IN_MET_FILEDIR_NAMES}_{OBTYPE} -# MET Configuration file for EnsembleStat -ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped +FIELDNAME_IN_MET_FILEDIR_NAMES = {{fieldname_in_met_filedir_names}} ENSEMBLE_STAT_OBS_QUALITY_INC = 0, 1, 2, 3, 9, NA #ENSEMBLE_STAT_OBS_QUALITY_EXC = @@ -84,7 +112,7 @@ ENSEMBLE_STAT_REGRID_TO_GRID = NONE ENSEMBLE_STAT_CENSOR_THRESH = ENSEMBLE_STAT_CENSOR_VAL = -ENSEMBLE_STAT_MESSAGE_TYPE = ADPSFC +ENSEMBLE_STAT_MESSAGE_TYPE = ADP{FIELDNAME_IN_MET_FILEDIR_NAMES} ENSEMBLE_STAT_DUPLICATE_FLAG = NONE ENSEMBLE_STAT_SKIP_CONST = FALSE @@ -153,10 +181,11 @@ ENSEMBLE_STAT_ENSEMBLE_FLAG_NEP = FALSE ENSEMBLE_STAT_ENSEMBLE_FLAG_NMEP = FALSE ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK = TRUE ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT = FALSE - -# 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 +# +# 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 = TMP ENS_VAR1_LEVELS = Z02 ENS_VAR1_THRESH = >=268, >=273, >=278, >=293, >=298, >=303 @@ -184,13 +213,12 @@ ENS_VAR6_NAME = HGT ENS_VAR6_LEVELS = L0 ENS_VAR6_THRESH = <152, <1520, >=914 ENS_VAR6_OPTIONS = GRIB_lvl_typ = 215; desc = "CEILING"; - - -# 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 - +# +# 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 = TMP FCST_VAR1_LEVELS = Z2 FCST_VAR1_THRESH = >=268, >=273, >=278, >=293, >=298, >=303 @@ -224,10 +252,17 @@ OBS_VAR4_NAME = TCDC OBS_VAR4_LEVELS = L0 OBS_VAR4_THRESH = <25, >75 -BOTH_VAR5_NAME = VIS -BOTH_VAR5_LEVELS = L0 -BOTH_VAR5_THRESH = <1609, <8045, >=8045 -BOTH_VAR5_OPTIONS = interp = { type = [ { method = NEAREST; width = 1; } ]; } +#BOTH_VAR5_NAME = VIS +#BOTH_VAR5_LEVELS = L0 +#BOTH_VAR5_THRESH = <1609, <8045, >=8045 +#BOTH_VAR5_OPTIONS = interp = { type = [ { method = NEAREST; width = 1; } ]; } +FCST_VAR5_NAME = VIS +FCST_VAR5_LEVELS = L0 +FCST_VAR5_THRESH = <1609, <8045, >=8045 +FCST_VAR5_OPTIONS = interp = { type = [ { method = NEAREST; width = 1; } ]; } +OBS_VAR5_NAME = VIS +OBS_VAR5_LEVELS = L0 +OBS_VAR5_THRESH = <1609, <8045, >=8045 FCST_VAR6_NAME = HGT FCST_VAR6_LEVELS = L0 @@ -235,34 +270,48 @@ FCST_VAR6_THRESH = <152, <1520, >=914 FCST_VAR6_OPTIONS = GRIB_lvl_typ = 215; desc = "CEILING"; OBS_VAR6_NAME = CEILING OBS_VAR6_LEVELS = L0 -OBS_VAR6_OPTIONS = GRIB_lvl_typ = 215; interp = { type = [ { method = NEAREST; width = 1; } ]; } +#OBS_VAR6_OPTIONS = GRIB_lvl_typ = 215; interp = { type = [ { method = NEAREST; width = 1; } ]; } +OBS_VAR6_OPTIONS = GRIB_lvl_typ = 215 OBS_VAR6_THRESH = <152, <305, >=914 [dir] -# Forecast model input directory for EnsembleStat -FCST_ENSEMBLE_STAT_INPUT_DIR = {ENV[INPUT_BASE]} - -# Point observation input dir for EnsembleStat -OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/Pb2nc_obs - -# Grid observation input dir for EnsembleStat +# +# 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}} +OUTPUT_DIR = {{output_dir}} +# +# Point observation input directory for EnsembleStat. +# +OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = {{obs_input_dir}} +# +# Grid observation input directory for EnsembleStat. +# OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = - -# directory containing climatology mean input to EnsembleStat -# Not used in this example +# +# 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 +# +# Directory containing climatology mean input to EnsembleStat. Not used +# in this example. +# ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR = - -# output directory for EnsembleStat -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -ENSEMBLE_STAT_OUTPUT_DIR = {OUTPUT_BASE} +# +# Output directory for EnsembleStat. +# +ENSEMBLE_STAT_OUTPUT_DIR = {OUTPUT_DIR} # # Directory for staging data. # -STAGING_DIR = {OUTPUT_BASE}/stage/SFC +STAGING_DIR = {{staging_dir}} [filename_templates] # @@ -272,15 +321,16 @@ STAGING_DIR = {OUTPUT_BASE}/stage/SFC # The template FCST_ENSEMBLE_STAT_INPUT_TEMPLATE is relative to # FCST_ENSEMBLE_STAT_INPUT_DIR. # -FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = - {ENV[MEM_STAR]}{ENV[POSTPRD]}{ENV[NET]}.t{init?fmt=%H}z*.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 - +FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} +# # Template to look for point observations. # Example precip24_2010010112.nc -OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = prepbufr.ndas.{valid?fmt=%Y%m%d%H}.nc - +# +OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = {{obs_input_fn_template}} +# # Template to look for gridded observations. # Example ST4.2010010112.24h +# OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = ENSEMBLE_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly @@ -298,12 +348,4 @@ ENSEMBLE_STAT_CLIMO_STDEV_INPUT_TEMPLATE = # The template ENSEMBLE_STAT_OUTPUT_TEMPLATE is relative to # ENSEMBLE_STAT_OUTPUT_DIR. # -ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/EnsembleStat -# -# Specify the name of the METplus log file. -# -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_SFC_{ENV[CDATE]} -# -# Specify the location and name of the final METplus conf file. -# -METPLUS_CONF = {OUTPUT_BASE}/{ENV[CDATE]}/metprd/EnsembleStat/metplus_final.SFC.conf +ENSEMBLE_STAT_OUTPUT_TEMPLATE = diff --git a/parm/metplus/EnsembleStat_UPA.conf b/parm/metplus/EnsembleStat_UPA.conf index 41823a1984..a8d903e6f1 100644 --- a/parm/metplus/EnsembleStat_UPA.conf +++ b/parm/metplus/EnsembleStat_UPA.conf @@ -2,44 +2,73 @@ [config] -## Configuration-related settings such as the process list, begin and end times, etc. +# List of applications to run - only GridStat for this case PROCESS_LIST = EnsembleStat -# Looping by times: steps through each 'task' in the PROCESS_LIST for each -# defined time, and repeats until all times have been evaluated. -LOOP_ORDER = times - -# LOOP_BY: Set to INIT to loop over initialization times +# 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 +# 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 -INIT_BEG = {ENV[CDATE]} +# Start time for METplus run - must match INIT_TIME_FMT +INIT_BEG = {{cdate}} -# End time for METplus run -INIT_END = {ENV[CDATE]} +# End time for METplus run - must match INIT_TIME_FMT +INIT_END = {{cdate}} -# Increment between METplus runs in seconds. Must be >= 60 +# Increment between METplus runs (in seconds if no units are specified). +# Must be >= 60 seconds. INIT_INCREMENT = 3600 -# List of forecast leads to process -LEAD_SEQ = begin_end_incr(0,{ENV[fhr_last]},6) +# 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. +# +ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped # # Used in the MET config file for: model, output_prefix # -MODEL = {ENV[VX_FCST_MODEL_NAME]} +MODEL = {{vx_fcst_model_name}} ENSEMBLE_STAT_DESC = NA # Name to identify observation data in output -OBTYPE = NDAS +OBTYPE = {{obtype}} #ENSEMBLE_STAT_DESC = -# The MET EnsembleStat logging level -# 0 quiet to 5 loud, Verbosity setting for MET EnsembleStat output, 2 is default. +# 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 = 3 @@ -51,7 +80,7 @@ OBS_ENSEMBLE_STAT_WINDOW_END = {OBS_WINDOW_END} # 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 = {ENV[NUM_ENS_MEMBERS]} +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 @@ -60,10 +89,9 @@ ENSEMBLE_STAT_ENS_THRESH = 0.05 # ens.vld_thresh value in the MET config file ENSEMBLE_STAT_ENS_VLD_THRESH = 1.0 -ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_ADPUPA_{OBTYPE} +ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_ADP{FIELDNAME_IN_MET_FILEDIR_NAMES}_{OBTYPE} -# MET Configuration file for EnsembleStat -ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped +FIELDNAME_IN_MET_FILEDIR_NAMES = {{fieldname_in_met_filedir_names}} ENSEMBLE_STAT_OBS_QUALITY_INC = 0, 1, 2, 3, 9, NA #ENSEMBLE_STAT_OBS_QUALITY_EXC = @@ -84,7 +112,7 @@ ENSEMBLE_STAT_REGRID_TO_GRID = NONE ENSEMBLE_STAT_CENSOR_THRESH = ENSEMBLE_STAT_CENSOR_VAL = -ENSEMBLE_STAT_MESSAGE_TYPE = ADPUPA +ENSEMBLE_STAT_MESSAGE_TYPE = ADP{FIELDNAME_IN_MET_FILEDIR_NAMES} ENSEMBLE_STAT_DUPLICATE_FLAG = NONE ENSEMBLE_STAT_SKIP_CONST = FALSE @@ -153,10 +181,11 @@ ENSEMBLE_STAT_ENSEMBLE_FLAG_NEP = FALSE ENSEMBLE_STAT_ENSEMBLE_FLAG_NMEP = FALSE ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK = TRUE ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT = FALSE - -# 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 +# +# 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 = TMP ENS_VAR1_LEVELS = P850 ENS_VAR1_THRESH = >=288, >=293, >=298 @@ -205,12 +234,12 @@ ENS_VAR11_THRESH = <=1000, >1000&&<2500, >2500&&<4000, >2500 ENS_VAR12_NAME = HPBL ENS_VAR12_LEVELS = Z0 ENS_VAR12_THRESH = <500, <1500, >1500 - -# 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 - +# +# 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 = TMP FCST_VAR1_LEVELS = P850 FCST_VAR1_THRESH = >=288, >=293, >=298 @@ -309,30 +338,43 @@ OBS_VAR12_OPTIONS = desc = "TKE"; OBS_VAR12_THRESH = <500, <1500, >1500 [dir] -# Forecast model input directory for EnsembleStat -FCST_ENSEMBLE_STAT_INPUT_DIR = {ENV[INPUT_BASE]} - -# Point observation input dir for EnsembleStat -OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/Pb2nc_obs - -# Grid observation input dir for EnsembleStat +# +# 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}} +OUTPUT_DIR = {{output_dir}} +# +# Point observation input directory for EnsembleStat. +# +OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = {{obs_input_dir}} +# +# Grid observation input directory for EnsembleStat. +# OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = - -# directory containing climatology mean input to EnsembleStat -# Not used in this example +# +# 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 +# +# Directory containing climatology mean input to EnsembleStat. Not used +# in this example. +# ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR = - -# output directory for EnsembleStat -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -ENSEMBLE_STAT_OUTPUT_DIR = {OUTPUT_BASE} +# +# Output directory for EnsembleStat. +# +ENSEMBLE_STAT_OUTPUT_DIR = {OUTPUT_DIR} # # Directory for staging data. # -STAGING_DIR = {OUTPUT_BASE}/stage/UPA +STAGING_DIR = {{staging_dir}} [filename_templates] # @@ -342,15 +384,16 @@ STAGING_DIR = {OUTPUT_BASE}/stage/UPA # The template FCST_ENSEMBLE_STAT_INPUT_TEMPLATE is relative to # FCST_ENSEMBLE_STAT_INPUT_DIR. # -FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = - {ENV[MEM_STAR]}{ENV[POSTPRD]}{ENV[NET]}.t{init?fmt=%H}z*.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}.grib2 - +FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} +# # Template to look for point observations. # Example precip24_2010010112.nc -OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = prepbufr.ndas.{valid?fmt=%Y%m%d%H}.nc - +# +OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = {{obs_input_fn_template}} +# # Template to look for gridded observations. # Example ST4.2010010112.24h +# OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = ENSEMBLE_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly @@ -368,12 +411,4 @@ ENSEMBLE_STAT_CLIMO_STDEV_INPUT_TEMPLATE = # The template ENSEMBLE_STAT_OUTPUT_TEMPLATE is relative to # ENSEMBLE_STAT_OUTPUT_DIR. # -ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/EnsembleStat -# -# Specify the name of the METplus log file. -# -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]}_UPA_{ENV[CDATE]} -# -# Specify the location and name of the final METplus conf file. -# -METPLUS_CONF = {OUTPUT_BASE}/{ENV[CDATE]}/metprd/EnsembleStat/metplus_final.UPA.conf +ENSEMBLE_STAT_OUTPUT_TEMPLATE = From ffb7d252330570888f6b464d35e6816140e8349a Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Mon, 20 Mar 2023 01:55:06 -0600 Subject: [PATCH 093/119] Edits to comments. --- parm/metplus/EnsembleStat_APCP01h.conf | 10 ++++------ parm/metplus/EnsembleStat_APCPgt01h.conf | 10 ++++------ parm/metplus/EnsembleStat_REFC.conf | 10 ++++------ parm/metplus/EnsembleStat_RETOP.conf | 10 ++++------ parm/metplus/EnsembleStat_SFC.conf | 10 ++++------ parm/metplus/EnsembleStat_UPA.conf | 10 ++++------ 6 files changed, 24 insertions(+), 36 deletions(-) diff --git a/parm/metplus/EnsembleStat_APCP01h.conf b/parm/metplus/EnsembleStat_APCP01h.conf index b88f7082e7..4f78827e08 100644 --- a/parm/metplus/EnsembleStat_APCP01h.conf +++ b/parm/metplus/EnsembleStat_APCP01h.conf @@ -258,24 +258,22 @@ STAGING_DIR = {{staging_dir}} # FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # -# Template to look for point observations. -# Example precip24_2010010112.nc +# Template for point observations relative to OBS_ENSEMBLE_STAT_POINT_INPUT_DIR. # OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = # -# Template to look for gridded observations. -# Example ST4.2010010112.24h +# Template for gridded observations relative to OBS_ENSEMBLE_STAT_GRID_INPUT_DIR. # OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = {{obs_input_fn_template}} ENSEMBLE_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly # -# Template to look for climatology input to EnsembleStat relative to +# 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 to look for climatology input to EnsembleStat relative to +# 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 = diff --git a/parm/metplus/EnsembleStat_APCPgt01h.conf b/parm/metplus/EnsembleStat_APCPgt01h.conf index e467ef3e9d..e8b64b6763 100644 --- a/parm/metplus/EnsembleStat_APCPgt01h.conf +++ b/parm/metplus/EnsembleStat_APCPgt01h.conf @@ -264,24 +264,22 @@ STAGING_DIR = {{staging_dir}} # FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # -# Template to look for point observations. -# Example precip24_2010010112.nc +# Template for point observations relative to OBS_ENSEMBLE_STAT_POINT_INPUT_DIR. # OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = # -# Template to look for gridded observations. -# Example ST4.2010010112.24h +# Template for gridded observations relative to OBS_ENSEMBLE_STAT_GRID_INPUT_DIR. # OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = {{obs_input_fn_template}} ENSEMBLE_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly # -# Template to look for climatology input to EnsembleStat relative to +# 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 to look for climatology input to EnsembleStat relative to +# 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 = diff --git a/parm/metplus/EnsembleStat_REFC.conf b/parm/metplus/EnsembleStat_REFC.conf index 70e0990ec5..5379540b76 100644 --- a/parm/metplus/EnsembleStat_REFC.conf +++ b/parm/metplus/EnsembleStat_REFC.conf @@ -256,24 +256,22 @@ STAGING_DIR = {{staging_dir}} # FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # -# Template to look for point observations. -# Example precip24_2010010112.nc +# Template for point observations relative to OBS_ENSEMBLE_STAT_POINT_INPUT_DIR. # OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = # -# Template to look for gridded observations. -# Example ST4.2010010112.24h +# Template for gridded observations relative to OBS_ENSEMBLE_STAT_GRID_INPUT_DIR. # OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = {{obs_input_fn_template}} ENSEMBLE_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly # -# Template to look for climatology input to EnsembleStat relative to +# 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 to look for climatology input to EnsembleStat relative to +# 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 = diff --git a/parm/metplus/EnsembleStat_RETOP.conf b/parm/metplus/EnsembleStat_RETOP.conf index dc034e983f..46286e1632 100644 --- a/parm/metplus/EnsembleStat_RETOP.conf +++ b/parm/metplus/EnsembleStat_RETOP.conf @@ -260,24 +260,22 @@ STAGING_DIR = {{staging_dir}} # FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # -# Template to look for point observations. -# Example precip24_2010010112.nc +# Template for point observations relative to OBS_ENSEMBLE_STAT_POINT_INPUT_DIR. # OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = # -# Template to look for gridded observations. -# Example ST4.2010010112.24h +# Template for gridded observations relative to OBS_ENSEMBLE_STAT_GRID_INPUT_DIR. # OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = {{obs_input_fn_template}} ENSEMBLE_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly # -# Template to look for climatology input to EnsembleStat relative to +# 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 to look for climatology input to EnsembleStat relative to +# 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 = diff --git a/parm/metplus/EnsembleStat_SFC.conf b/parm/metplus/EnsembleStat_SFC.conf index 26e4dae80b..1cd1495ca6 100644 --- a/parm/metplus/EnsembleStat_SFC.conf +++ b/parm/metplus/EnsembleStat_SFC.conf @@ -323,24 +323,22 @@ STAGING_DIR = {{staging_dir}} # FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # -# Template to look for point observations. -# Example precip24_2010010112.nc +# Template for point observations relative to OBS_ENSEMBLE_STAT_POINT_INPUT_DIR. # OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = {{obs_input_fn_template}} # -# Template to look for gridded observations. -# Example ST4.2010010112.24h +# Template for gridded observations relative to OBS_ENSEMBLE_STAT_GRID_INPUT_DIR. # OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = ENSEMBLE_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly # -# Template to look for climatology input to EnsembleStat relative to +# 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 to look for climatology input to EnsembleStat relative to +# 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 = diff --git a/parm/metplus/EnsembleStat_UPA.conf b/parm/metplus/EnsembleStat_UPA.conf index a8d903e6f1..9a60c5ae0f 100644 --- a/parm/metplus/EnsembleStat_UPA.conf +++ b/parm/metplus/EnsembleStat_UPA.conf @@ -386,24 +386,22 @@ STAGING_DIR = {{staging_dir}} # FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} # -# Template to look for point observations. -# Example precip24_2010010112.nc +# Template for point observations relative to OBS_ENSEMBLE_STAT_POINT_INPUT_DIR. # OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = {{obs_input_fn_template}} # -# Template to look for gridded observations. -# Example ST4.2010010112.24h +# Template for gridded observations relative to OBS_ENSEMBLE_STAT_GRID_INPUT_DIR. # OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = ENSEMBLE_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly # -# Template to look for climatology input to EnsembleStat relative to +# 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 to look for climatology input to EnsembleStat relative to +# 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 = From 82f709e775bd5dd5093e5dbdaf0bc84ac7751efe Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Mon, 20 Mar 2023 09:57:47 -0600 Subject: [PATCH 094/119] Delete unneeded METplus config files (replaced by generic "_gt01h" version). --- parm/metplus/EnsembleStat_APCP03h.conf | 269 ---------------------- parm/metplus/EnsembleStat_APCP06h.conf | 269 ---------------------- parm/metplus/EnsembleStat_APCP24h.conf | 269 ---------------------- parm/metplus/GridStat_APCP03h.conf | 295 ------------------------- parm/metplus/GridStat_APCP06h.conf | 295 ------------------------- parm/metplus/GridStat_APCP24h.conf | 295 ------------------------- 6 files changed, 1692 deletions(-) delete mode 100644 parm/metplus/EnsembleStat_APCP03h.conf delete mode 100644 parm/metplus/EnsembleStat_APCP06h.conf delete mode 100644 parm/metplus/EnsembleStat_APCP24h.conf delete mode 100644 parm/metplus/GridStat_APCP03h.conf delete mode 100644 parm/metplus/GridStat_APCP06h.conf delete mode 100644 parm/metplus/GridStat_APCP24h.conf diff --git a/parm/metplus/EnsembleStat_APCP03h.conf b/parm/metplus/EnsembleStat_APCP03h.conf deleted file mode 100644 index 2e1238400b..0000000000 --- a/parm/metplus/EnsembleStat_APCP03h.conf +++ /dev/null @@ -1,269 +0,0 @@ -# EnsembleStat METplus Configuration - -[config] - -## Configuration-related settings such as the process list, begin and end times, etc. -PROCESS_LIST = EnsembleStat - -# Looping by times: steps through each 'task' in the PROCESS_LIST for each -# defined time, and repeats until all times have been evaluated. -LOOP_ORDER = times - -# Loop through ensmeble members for making precip buckets -ENSEMBLE_STAT_CUSTOM_LOOP_LIST = membegin_end_incr(1,{ENV[NUM_ENS_MEMBERS]},1,{ENV[NUM_PAD]}) - -# LOOP_BY: Set to INIT to loop over initialization times -LOOP_BY = INIT - -# Format of INIT_BEG and INIT_END -INIT_TIME_FMT = %Y%m%d%H - -# Start time for METplus run -INIT_BEG = {ENV[CDATE]} - -# End time for METplus run -INIT_END = {ENV[CDATE]} - -# Increment between METplus runs in seconds. Must be >= 60 -INIT_INCREMENT = 3600 -# -# List of forecast leads to process -# -LEAD_SEQ = {ENV[fhr_list]} -# -# Used in the MET config file for: model, output_prefix -# -MODEL = {ENV[VX_FCST_MODEL_NAME]} - -FCST_NATIVE_DATA_TYPE = GRIB - -ENSEMBLE_STAT_DESC = NA ;; not in other file - -# Name to identify observation data in output -OBTYPE = CCPA -OBS_NATIVE_DATA_TYPE = GRIB - -# Forecast data description variables -FCST_IS_PROB = false - -#ENSEMBLE_STAT_DESC = # not in other file - -# The MET EnsembleStat logging level -# 0 quiet to 5 loud, Verbosity setting for MET 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 = {ENV[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 - -ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_APCP03h_{OBTYPE} - -# MET Configuration file for EnsembleStat -ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped - -# 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 = True - -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 = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MEAN = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_STDEV = TRUE -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 = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_FREQUENCY = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_NEP = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_NMEP = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT = FALSE -# -# 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_VARn_THRESH must be included here in order for the netCDF file -# generated by EnsembleStat to include the ensemble probability (aka -# ensembe frequency) fields corresponding to the specified thresholds -# for 03-hour APCP. These must be included because the corresonding -# GridStat task for ensemble probabilities (GridStat_vx_ensprob_APCP03h) -# expects to read them in as input. -# -ENS_VAR1_NAME = APCP_03 -ENS_VAR1_LEVELS = A03 -ENS_VAR1_THRESH = gt0.0,ge0.508,ge2.54,ge6.350 -# -# Forecast 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. -# -FCST_VAR1_NAME = APCP_03 -FCST_VAR1_LEVELS = A03 -FCST_VAR1_OPTIONS = ens_ssvar_bin_size = 50.0; ens_phist_bin_size = 0.05; -# -# Observation variables and levels as specified in the obs field dictionary -# of the MET configuration file. Specify as OBS_VARn_NAME, OBS_VARn_LEVELS, -# (optional) OBS_VARn_OPTION -# -OBS_VAR1_NAME = {FCST_VAR1_NAME} -OBS_VAR1_LEVELS = {FCST_VAR1_LEVELS} -OBS_VAR1_OPTIONS = {FCST_VAR1_OPTIONS} - -[dir] -# -# Input and output data directories -# -INPUT_BASE = {ENV[INPUT_BASE]} -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -# -# Forecast model input directory for EnsembleStat -# -FCST_ENSEMBLE_STAT_INPUT_DIR = {ENV[MEM_BASE]} -# -# Point observation input dir for EnsembleStat -# -OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = - -# Grid observation input dir for EnsembleStat -OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/PcpCombine_obs - -# 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_BASE} -# -# Directory for staging data. -# -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_03 - -[filename_templates] -# -# FCST_ENSEMBLE_STAT_INPUT_TEMPLATE - comma separated list of ensemble members -# or a single line, - filename wildcard characters may be used, ? or *. -# -# The template FCST_ENSEMBLE_STAT_INPUT_TEMPLATE is relative to -# FCST_ENSEMBLE_STAT_INPUT_DIR. -# -FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[MEM_CUSTOM]}metprd/PcpCombine_fcst/{ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_MEM_CUSTOM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}_a03h.nc - -# Template to look for point observations. -# Example precip24_2010010112.nc -OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = - -# Template to look for gridded observations. -# Example ST4.2010010112.24h -OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = {OBS_ENSEMBLE_STAT_GRID_INPUT_DIR}/{valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2_a03h.nc - -ENSEMBLE_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly -# -# Template to look 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 to look for climatology input to EnsembleStat relative to -# ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR. Not used in this example. -# -ENSEMBLE_STAT_CLIMO_STDEV_INPUT_TEMPLATE = -# -# The template ENSEMBLE_STAT_OUTPUT_TEMPLATE is relative to -# ENSEMBLE_STAT_OUTPUT_DIR. -# -ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/EnsembleStat -# -# Specify the name of the METplus log file. -# -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} -# -# Specify the location and name of the final METplus conf file. -# -METPLUS_CONF = {OUTPUT_BASE}/{ENV[CDATE]}/metprd/EnsembleStat/metplus_final.APCP_03h.conf diff --git a/parm/metplus/EnsembleStat_APCP06h.conf b/parm/metplus/EnsembleStat_APCP06h.conf deleted file mode 100644 index 2f74b3ba66..0000000000 --- a/parm/metplus/EnsembleStat_APCP06h.conf +++ /dev/null @@ -1,269 +0,0 @@ -# EnsembleStat METplus Configuration - -[config] - -## Configuration-related settings such as the process list, begin and end times, etc. -PROCESS_LIST = EnsembleStat - -# Looping by times: steps through each 'task' in the PROCESS_LIST for each -# defined time, and repeats until all times have been evaluated. -LOOP_ORDER = times - -# Loop through ensmeble members for making precip buckets -ENSEMBLE_STAT_CUSTOM_LOOP_LIST = membegin_end_incr(1,{ENV[NUM_ENS_MEMBERS]},1,{ENV[NUM_PAD]}) - -# LOOP_BY: Set to INIT to loop over initialization times -LOOP_BY = INIT - -# Format of INIT_BEG and INIT_END -INIT_TIME_FMT = %Y%m%d%H - -# Start time for METplus run -INIT_BEG = {ENV[CDATE]} - -# End time for METplus run -INIT_END = {ENV[CDATE]} - -# Increment between METplus runs in seconds. Must be >= 60 -INIT_INCREMENT = 3600 -# -# List of forecast leads to process -# -LEAD_SEQ = {ENV[fhr_list]} -# -# Used in the MET config file for: model, output_prefix -# -MODEL = {ENV[VX_FCST_MODEL_NAME]} - -FCST_NATIVE_DATA_TYPE = GRIB - -ENSEMBLE_STAT_DESC = NA ;; not in other file - -# Name to identify observation data in output -OBTYPE = CCPA -OBS_NATIVE_DATA_TYPE = GRIB - -# Forecast data description variables -FCST_IS_PROB = false - -#ENSEMBLE_STAT_DESC = # not in other file - -# The MET EnsembleStat logging level -# 0 quiet to 5 loud, Verbosity setting for MET 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 = {ENV[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 - -ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_APCP06h_{OBTYPE} - -# MET Configuration file for EnsembleStat -ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped - -# 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 = True - -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 = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MEAN = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_STDEV = TRUE -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 = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_FREQUENCY = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_NEP = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_NMEP = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT = FALSE -# -# 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_VARn_THRESH must be included here in order for the netCDF file -# generated by EnsembleStat to include the ensemble probability (aka -# ensembe frequency) fields corresponding to the specified thresholds -# for 06-hour APCP. These must be included because the corresonding -# GridStat task for ensemble probabilities (GridStat_vx_ensprob_APCP06h) -# expects to read them in as input. -# -ENS_VAR1_NAME = APCP_06 -ENS_VAR1_LEVELS = A06 -ENS_VAR1_THRESH = gt0.0,ge2.54,ge6.350,ge12.700 -# -# Forecast 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. -# -FCST_VAR1_NAME = APCP_06 -FCST_VAR1_LEVELS = A06 -FCST_VAR1_OPTIONS = ens_ssvar_bin_size = 50.0; ens_phist_bin_size = 0.05; -# -# Observation variables and levels as specified in the obs field dictionary -# of the MET configuration file. Specify as OBS_VARn_NAME, OBS_VARn_LEVELS, -# (optional) OBS_VARn_OPTION -# -OBS_VAR1_NAME = {FCST_VAR1_NAME} -OBS_VAR1_LEVELS = {FCST_VAR1_LEVELS} -OBS_VAR1_OPTIONS = {FCST_VAR1_OPTIONS} - -[dir] -# -# Input and output data directories -# -INPUT_BASE = {ENV[INPUT_BASE]} -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -# -# Forecast model input directory for EnsembleStat -# -FCST_ENSEMBLE_STAT_INPUT_DIR = {ENV[MEM_BASE]} -# -# Point observation input dir for EnsembleStat -# -OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = - -# Grid observation input dir for EnsembleStat -OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/PcpCombine_obs - -# 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_BASE} -# -# Directory for staging data. -# -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_06 - -[filename_templates] -# -# FCST_ENSEMBLE_STAT_INPUT_TEMPLATE - comma separated list of ensemble members -# or a single line, - filename wildcard characters may be used, ? or *. -# -# The template FCST_ENSEMBLE_STAT_INPUT_TEMPLATE is relative to -# FCST_ENSEMBLE_STAT_INPUT_DIR. -# -FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[MEM_CUSTOM]}metprd/PcpCombine_fcst/{ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_MEM_CUSTOM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}_a06h.nc - -# Template to look for point observations. -# Example precip24_2010010112.nc -OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = - -# Template to look for gridded observations. -# Example ST4.2010010112.24h -OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = {OBS_ENSEMBLE_STAT_GRID_INPUT_DIR}/{valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2_a06h.nc - -ENSEMBLE_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly -# -# Template to look 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 to look for climatology input to EnsembleStat relative to -# ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR. Not used in this example. -# -ENSEMBLE_STAT_CLIMO_STDEV_INPUT_TEMPLATE = -# -# The template ENSEMBLE_STAT_OUTPUT_TEMPLATE is relative to -# ENSEMBLE_STAT_OUTPUT_DIR. -# -ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/EnsembleStat -# -# Specify the name of the METplus log file. -# -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} -# -# Specify the location and name of the final METplus conf file. -# -METPLUS_CONF = {OUTPUT_BASE}/{ENV[CDATE]}/metprd/EnsembleStat/metplus_final.APCP_06h.conf diff --git a/parm/metplus/EnsembleStat_APCP24h.conf b/parm/metplus/EnsembleStat_APCP24h.conf deleted file mode 100644 index 64c765cacd..0000000000 --- a/parm/metplus/EnsembleStat_APCP24h.conf +++ /dev/null @@ -1,269 +0,0 @@ -# EnsembleStat METplus Configuration - -[config] - -## Configuration-related settings such as the process list, begin and end times, etc. -PROCESS_LIST = EnsembleStat - -# Looping by times: steps through each 'task' in the PROCESS_LIST for each -# defined time, and repeats until all times have been evaluated. -LOOP_ORDER = times - -# Loop through ensmeble members for making precip buckets -ENSEMBLE_STAT_CUSTOM_LOOP_LIST = membegin_end_incr(1,{ENV[NUM_ENS_MEMBERS]},1,{ENV[NUM_PAD]}) - -# LOOP_BY: Set to INIT to loop over initialization times -LOOP_BY = INIT - -# Format of INIT_BEG and INIT_END -INIT_TIME_FMT = %Y%m%d%H - -# Start time for METplus run -INIT_BEG = {ENV[CDATE]} - -# End time for METplus run -INIT_END = {ENV[CDATE]} - -# Increment between METplus runs in seconds. Must be >= 60 -INIT_INCREMENT = 3600 -# -# List of forecast leads to process -# -LEAD_SEQ = {ENV[fhr_list]} -# -# Used in the MET config file for: model, output_prefix -# -MODEL = {ENV[VX_FCST_MODEL_NAME]} - -FCST_NATIVE_DATA_TYPE = GRIB - -ENSEMBLE_STAT_DESC = NA ;; not in other file - -# Name to identify observation data in output -OBTYPE = CCPA -OBS_NATIVE_DATA_TYPE = GRIB - -# Forecast data description variables -FCST_IS_PROB = false - -#ENSEMBLE_STAT_DESC = # not in other file - -# The MET EnsembleStat logging level -# 0 quiet to 5 loud, Verbosity setting for MET 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 = {ENV[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 - -ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_APCP24h_{OBTYPE} - -# MET Configuration file for EnsembleStat -ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped - -# 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 = True - -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 = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MEAN = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_STDEV = TRUE -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 = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_FREQUENCY = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_NEP = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_NMEP = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT = FALSE -# -# 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_VARn_THRESH must be included here in order for the netCDF file -# generated by EnsembleStat to include the ensemble probability (aka -# ensembe frequency) fields corresponding to the specified thresholds -# for 24-hour APCP. These must be included because the corresonding -# GridStat task for ensemble probabilities (GridStat_vx_ensprob_APCP24h) -# expects to read them in as input. -# -ENS_VAR1_NAME = APCP_24 -ENS_VAR1_LEVELS = A24 -ENS_VAR1_THRESH = gt0.0,ge6.350,ge12.700,ge25.400 -# -# Forecast 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. -# -FCST_VAR1_NAME = APCP_24 -FCST_VAR1_LEVELS = A24 -FCST_VAR1_OPTIONS = ens_ssvar_bin_size = 50.0; ens_phist_bin_size = 0.05; -# -# Observation variables and levels as specified in the obs field dictionary -# of the MET configuration file. Specify as OBS_VARn_NAME, OBS_VARn_LEVELS, -# (optional) OBS_VARn_OPTION -# -OBS_VAR1_NAME = {FCST_VAR1_NAME} -OBS_VAR1_LEVELS = {FCST_VAR1_LEVELS} -OBS_VAR1_OPTIONS = {FCST_VAR1_OPTIONS} - -[dir] -# -# Input and output data directories -# -INPUT_BASE = {ENV[INPUT_BASE]} -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -# -# Forecast model input directory for EnsembleStat -# -FCST_ENSEMBLE_STAT_INPUT_DIR = {ENV[MEM_BASE]} -# -# Point observation input dir for EnsembleStat -# -OBS_ENSEMBLE_STAT_POINT_INPUT_DIR = - -# Grid observation input dir for EnsembleStat -OBS_ENSEMBLE_STAT_GRID_INPUT_DIR = {ENV[OUTPUT_BASE]}/metprd/PcpCombine_obs - -# 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_BASE} -# -# Directory for staging data. -# -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_24 - -[filename_templates] -# -# FCST_ENSEMBLE_STAT_INPUT_TEMPLATE - comma separated list of ensemble members -# or a single line, - filename wildcard characters may be used, ? or *. -# -# The template FCST_ENSEMBLE_STAT_INPUT_TEMPLATE is relative to -# FCST_ENSEMBLE_STAT_INPUT_DIR. -# -FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {ENV[MEM_CUSTOM]}metprd/PcpCombine_fcst/{ENV[NET]}.t{init?fmt=%H}z{ENV[DOT_MEM_CUSTOM]}.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}_a24h.nc - -# Template to look for point observations. -# Example precip24_2010010112.nc -OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = - -# Template to look for gridded observations. -# Example ST4.2010010112.24h -OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE = {OBS_ENSEMBLE_STAT_GRID_INPUT_DIR}/{valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2_a24h.nc - -ENSEMBLE_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly -# -# Template to look 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 to look for climatology input to EnsembleStat relative to -# ENSEMBLE_STAT_CLIMO_STDEV_INPUT_DIR. Not used in this example. -# -ENSEMBLE_STAT_CLIMO_STDEV_INPUT_TEMPLATE = -# -# The template ENSEMBLE_STAT_OUTPUT_TEMPLATE is relative to -# ENSEMBLE_STAT_OUTPUT_DIR. -# -ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/metprd/EnsembleStat -# -# Specify the name of the METplus log file. -# -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} -# -# Specify the location and name of the final METplus conf file. -# -METPLUS_CONF = {OUTPUT_BASE}/{ENV[CDATE]}/metprd/EnsembleStat/metplus_final.APCP_24h.conf diff --git a/parm/metplus/GridStat_APCP03h.conf b/parm/metplus/GridStat_APCP03h.conf deleted file mode 100644 index f861ea584c..0000000000 --- a/parm/metplus/GridStat_APCP03h.conf +++ /dev/null @@ -1,295 +0,0 @@ -# GridStat METplus Configuration - -# section heading for [config] variables - all items below this line and -# before the next section heading correspond to the [config] section -[config] - -# List of applications to run - only GridStat for this case -PROCESS_LIST = GridStat - -# time looping - options are INIT, VALID, RETRO, and REALTIME -# If set to INIT or RETRO: -# INIT_TIME_FMT, INIT_BEG, INIT_END, and INIT_INCREMENT must also be set -# If set to VALID or REALTIME: -# VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set -LOOP_BY = INIT - -# Format of INIT_BEG and INIT_END using % items -# %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. -# see www.strftime.org for more information -# %Y%m%d%H expands to YYYYMMDDHH -INIT_TIME_FMT = %Y%m%d%H - -# Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} - -# End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} - -# Increment between METplus runs (in seconds if no units are specified). -# Must be >= 60 seconds. -INIT_INCREMENT = 3600 - -# List of forecast leads to process for each run time (init or valid) -# In hours if units are not specified -# If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[fhr_list]} - -# Order of loops to process data - Options are times, processes -# Not relevant if only one item is in the PROCESS_LIST -# times = run all wrappers in the PROCESS_LIST for a single run time, then -# increment the run time and run all wrappers again until all times have -# been evaluated. -# processes = run the first wrapper in the PROCESS_LIST for all times -# specified, then repeat for the next item in the PROCESS_LIST until all -# wrappers have been run -LOOP_ORDER = times - -# Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only -#LOG_GRID_STAT_VERBOSITY = 2 - -# -# Specify the name of the METplus log file. -# -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} -# -# Specify the location and name of the final METplus conf file. -# -METPLUS_CONF = {OUTPUT_BASE}/metprd/GridStat/metplus_final.APCP_03h.conf -# -# Location of MET config file to pass to GridStat. -# -GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped - -# grid to remap data. Value is set as the 'to_grid' variable in the 'regrid' dictionary -# See MET User's Guide for more information -GRID_STAT_REGRID_TO_GRID = FCST -GRID_STAT_REGRID_VLD_THRESH = 0.5 -GRID_STAT_REGRID_METHOD = BUDGET -GRID_STAT_REGRID_WIDTH = 2 -GRID_STAT_REGRID_SHAPE = SQUARE - -#GRID_STAT_INTERP_FIELD = BOTH -#GRID_STAT_INTERP_VLD_THRESH = 1.0 -#GRID_STAT_INTERP_SHAPE = SQUARE -#GRID_STAT_INTERP_TYPE_METHOD = NEAREST -#GRID_STAT_INTERP_TYPE_WIDTH = 1 - -#GRID_STAT_GRID_WEIGHT_FLAG = - -# -# Name to identify model (forecast) data in output. -# -# The variable MODEL is recorded in the stat files, and the data in -# these files is then plotted (e.g. using METViewer). Here, we add a -# suffix to MODEL that identifies the forecast ensemble member. This -# makes it easier to identify each curve. -# -MODEL = {ENV[VX_FCST_MODEL_NAME]}{ENV[USCORE_ENSMEM_NAME_OR_NULL]} - -FCST_NATIVE_DATA_TYPE = GRIB -# -# Name to identify observation data in output. -# -OBTYPE = CCPA -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 = APCP_03 -# -# List of levels to evaluate for forecast variable 1. -# -FCST_VAR1_LEVELS = A03 -# -# List of thresholds to evaluate for each name/level combination for -# forecast variable 1. -# -BOTH_VAR1_THRESH = gt0.0,ge0.254,ge0.508,ge1.27,ge2.54,ge3.810,ge6.350 -# -# String to search for in the observation input files for observation -# variable 1. -# -OBS_VAR1_NAME = APCP_03 -# -# List of levels to evaluate for observation variable 1. Must be the -# same length as FCST_VAR1_LEVELS. -# -OBS_VAR1_LEVELS = A03 -# -# 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}_{CURRENT_FCST_NAME}_{ENV[acc]}_{OBTYPE} - -# Climatology data -#GRID_STAT_CLIMO_MEAN_FILE_NAME = -#GRID_STAT_CLIMO_MEAN_FIELD = -#GRID_STAT_CLIMO_MEAN_REGRID_METHOD = -#GRID_STAT_CLIMO_MEAN_REGRID_WIDTH = -#GRID_STAT_CLIMO_MEAN_REGRID_VLD_THRESH = -#GRID_STAT_CLIMO_MEAN_REGRID_SHAPE = -#GRID_STAT_CLIMO_MEAN_TIME_INTERP_METHOD = -#GRID_STAT_CLIMO_MEAN_MATCH_MONTH = -#GRID_STAT_CLIMO_MEAN_DAY_INTERVAL = -#GRID_STAT_CLIMO_MEAN_HOUR_INTERVAL = - -#GRID_STAT_CLIMO_STDEV_FILE_NAME = -#GRID_STAT_CLIMO_STDEV_FIELD = -#GRID_STAT_CLIMO_STDEV_REGRID_METHOD = -#GRID_STAT_CLIMO_STDEV_REGRID_WIDTH = -#GRID_STAT_CLIMO_STDEV_REGRID_VLD_THRESH = -#GRID_STAT_CLIMO_STDEV_REGRID_SHAPE = -#GRID_STAT_CLIMO_STDEV_TIME_INTERP_METHOD = -#GRID_STAT_CLIMO_STDEV_MATCH_MONTH = -#GRID_STAT_CLIMO_STDEV_DAY_INTERVAL = -#GRID_STAT_CLIMO_STDEV_HOUR_INTERVAL = - -#GRID_STAT_CLIMO_CDF_BINS = 1 -#GRID_STAT_CLIMO_CDF_CENTER_BINS = False -#GRID_STAT_CLIMO_CDF_WRITE_BINS = True - -GRID_STAT_MASK_GRID = - -# Statistical output types -GRID_STAT_OUTPUT_FLAG_FHO = STAT -GRID_STAT_OUTPUT_FLAG_CTC = STAT -GRID_STAT_OUTPUT_FLAG_CTS = STAT -#GRID_STAT_OUTPUT_FLAG_MCTC = NONE -#GRID_STAT_OUTPUT_FLAG_MCTS = NONE -GRID_STAT_OUTPUT_FLAG_CNT = STAT -#GRID_STAT_OUTPUT_FLAG_SL1L2 = NONE -#GRID_STAT_OUTPUT_FLAG_SAL1L2 = NONE -#GRID_STAT_OUTPUT_FLAG_VL1L2 = NONE -#GRID_STAT_OUTPUT_FLAG_VAL1L2 = NONE -#GRID_STAT_OUTPUT_FLAG_VCNT = NONE -#GRID_STAT_OUTPUT_FLAG_PCT = NONE -#GRID_STAT_OUTPUT_FLAG_PSTD = NONE -#GRID_STAT_OUTPUT_FLAG_PJC = NONE -#GRID_STAT_OUTPUT_FLAG_PRC = NONE -#GRID_STAT_OUTPUT_FLAG_ECLV = BOTH -GRID_STAT_OUTPUT_FLAG_NBRCTC = STAT -GRID_STAT_OUTPUT_FLAG_NBRCTS = STAT -GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT -#GRID_STAT_OUTPUT_FLAG_GRAD = BOTH -#GRID_STAT_OUTPUT_FLAG_DMAP = NONE - -# NetCDF matched pairs output file -#GRID_STAT_NC_PAIRS_VAR_NAME = -GRID_STAT_NC_PAIRS_FLAG_LATLON = FALSE -GRID_STAT_NC_PAIRS_FLAG_RAW = FALSE -GRID_STAT_NC_PAIRS_FLAG_DIFF = FALSE -GRID_STAT_NC_PAIRS_FLAG_CLIMO = FALSE -#GRID_STAT_NC_PAIRS_FLAG_CLIMO_CDP = FALSE -GRID_STAT_NC_PAIRS_FLAG_WEIGHT = FALSE -GRID_STAT_NC_PAIRS_FLAG_NBRHD = FALSE -#GRID_STAT_NC_PAIRS_FLAG_FOURIER = FALSE -#GRID_STAT_NC_PAIRS_FLAG_GRADIENT = FALSE -#GRID_STAT_NC_PAIRS_FLAG_DISTANCE_MAP = FALSE -GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE - -# End of [config] section and start of [dir] section. -[dir] -# -# Directory containing observation input to GridStat. -# -OBS_GRID_STAT_INPUT_DIR = {ENV[EXPTDIR]}/metprd/PcpCombine_obs -# -# Directory containing forecast input to GridStat. -# -FCST_GRID_STAT_INPUT_DIR = {OUTPUT_BASE}/metprd/PcpCombine_fcst -# -# Directory containing climatology mean input to GridStat. Not used in -# this example. -# -GRID_STAT_CLIMO_MEAN_INPUT_DIR = -# -# Directory containing climatology mean input to GridStat. Not used in -# this example. -# -GRID_STAT_CLIMO_STDEV_INPUT_DIR = -# -# Directory in which to write output from GridStat. -# -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} -# -# Directory for staging data. -# -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_03h - -# End of [dir] section and start of [filename_templates] section. -[filename_templates] -# -# Template for observation input to GridStat relative to -# OBS_GRID_STAT_INPUT_DIR. -# -OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2_a{level?fmt=%HH}h.nc -# -# Template for forecast input to GridStat relative to -# FCST_GRID_STAT_INPUT_DIR. -# -FCST_GRID_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}_a{level?fmt=%HH}h.nc -# -# Template for output from GridStat relative to GRID_STAT_OUTPUT_DIR. -# -GRID_STAT_OUTPUT_TEMPLATE = metprd/GridStat -# -# Template for climatology input to GridStat relative to -# GRID_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. -# -GRID_STAT_CLIMO_MEAN_INPUT_TEMPLATE = -# -# Template for climatology input to GridStat relative to -# GRID_STAT_CLIMO_STDEV_INPUT_DIR. Not used in this example. -# -GRID_STAT_CLIMO_STDEV_INPUT_TEMPLATE = -# -# Variable used to specify one or more verification mask files for -# GridStat. Not used for this example. -# -GRID_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly diff --git a/parm/metplus/GridStat_APCP06h.conf b/parm/metplus/GridStat_APCP06h.conf deleted file mode 100644 index 6c02a0dfdf..0000000000 --- a/parm/metplus/GridStat_APCP06h.conf +++ /dev/null @@ -1,295 +0,0 @@ -# GridStat METplus Configuration - -# section heading for [config] variables - all items below this line and -# before the next section heading correspond to the [config] section -[config] - -# List of applications to run - only GridStat for this case -PROCESS_LIST = GridStat - -# time looping - options are INIT, VALID, RETRO, and REALTIME -# If set to INIT or RETRO: -# INIT_TIME_FMT, INIT_BEG, INIT_END, and INIT_INCREMENT must also be set -# If set to VALID or REALTIME: -# VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set -LOOP_BY = INIT - -# Format of INIT_BEG and INIT_END using % items -# %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. -# see www.strftime.org for more information -# %Y%m%d%H expands to YYYYMMDDHH -INIT_TIME_FMT = %Y%m%d%H - -# Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} - -# End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} - -# Increment between METplus runs (in seconds if no units are specified). -# Must be >= 60 seconds. -INIT_INCREMENT = 3600 - -# List of forecast leads to process for each run time (init or valid) -# In hours if units are not specified -# If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[fhr_list]} - -# Order of loops to process data - Options are times, processes -# Not relevant if only one item is in the PROCESS_LIST -# times = run all wrappers in the PROCESS_LIST for a single run time, then -# increment the run time and run all wrappers again until all times have -# been evaluated. -# processes = run the first wrapper in the PROCESS_LIST for all times -# specified, then repeat for the next item in the PROCESS_LIST until all -# wrappers have been run -LOOP_ORDER = times - -# Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only -#LOG_GRID_STAT_VERBOSITY = 2 - -# -# Specify the name of the METplus log file. -# -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} -# -# Specify the location and name of the final METplus conf file. -# -METPLUS_CONF = {OUTPUT_BASE}/metprd/GridStat/metplus_final.APCP_06h.conf -# -# Location of MET config file to pass to GridStat. -# -GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped - -# grid to remap data. Value is set as the 'to_grid' variable in the 'regrid' dictionary -# See MET User's Guide for more information -GRID_STAT_REGRID_TO_GRID = FCST -GRID_STAT_REGRID_VLD_THRESH = 0.5 -GRID_STAT_REGRID_METHOD = BUDGET -GRID_STAT_REGRID_WIDTH = 2 -GRID_STAT_REGRID_SHAPE = SQUARE - -#GRID_STAT_INTERP_FIELD = BOTH -#GRID_STAT_INTERP_VLD_THRESH = 1.0 -#GRID_STAT_INTERP_SHAPE = SQUARE -#GRID_STAT_INTERP_TYPE_METHOD = NEAREST -#GRID_STAT_INTERP_TYPE_WIDTH = 1 - -#GRID_STAT_GRID_WEIGHT_FLAG = - -# -# Name to identify model (forecast) data in output. -# -# The variable MODEL is recorded in the stat files, and the data in -# these files is then plotted (e.g. using METViewer). Here, we add a -# suffix to MODEL that identifies the forecast ensemble member. This -# makes it easier to identify each curve. -# -MODEL = {ENV[VX_FCST_MODEL_NAME]}{ENV[USCORE_ENSMEM_NAME_OR_NULL]} - -FCST_NATIVE_DATA_TYPE = GRIB -# -# Name to identify observation data in output. -# -OBTYPE = CCPA -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 = APCP_06 -# -# List of levels to evaluate for forecast variable 1. -# -FCST_VAR1_LEVELS = A06 -# -# List of thresholds to evaluate for each name/level combination for -# forecast variable 1. -# -BOTH_VAR1_THRESH = gt0.0,ge0.254,ge0.508,ge1.27,ge2.54,ge3.810,ge6.350,ge8.890,ge12.700 -# -# String to search for in the observation input files for observation -# variable 1. -# -OBS_VAR1_NAME = APCP_06 -# -# List of levels to evaluate for observation variable 1. Must be the -# same length as FCST_VAR1_LEVELS. -# -OBS_VAR1_LEVELS = A06 -# -# Time relative to valid time (in seconds) to allow files to be considered -# valid. Set both BEGIN and END to 0 to require the exact time in the -# filename. Not used in this example. -# -FCST_GRID_STAT_FILE_WINDOW_BEGIN = 0 -FCST_GRID_STAT_FILE_WINDOW_END = 0 -OBS_GRID_STAT_FILE_WINDOW_BEGIN = 0 -OBS_GRID_STAT_FILE_WINDOW_END = 0 - -# MET GridStat neighborhood values -# See the MET User's Guide GridStat section for more information -GRID_STAT_NEIGHBORHOOD_FIELD = BOTH - -# width value passed to nbrhd dictionary in the MET config file -GRID_STAT_NEIGHBORHOOD_WIDTH = 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}_{CURRENT_FCST_NAME}_{ENV[acc]}_{OBTYPE} - -# Climatology data -#GRID_STAT_CLIMO_MEAN_FILE_NAME = -#GRID_STAT_CLIMO_MEAN_FIELD = -#GRID_STAT_CLIMO_MEAN_REGRID_METHOD = -#GRID_STAT_CLIMO_MEAN_REGRID_WIDTH = -#GRID_STAT_CLIMO_MEAN_REGRID_VLD_THRESH = -#GRID_STAT_CLIMO_MEAN_REGRID_SHAPE = -#GRID_STAT_CLIMO_MEAN_TIME_INTERP_METHOD = -#GRID_STAT_CLIMO_MEAN_MATCH_MONTH = -#GRID_STAT_CLIMO_MEAN_DAY_INTERVAL = -#GRID_STAT_CLIMO_MEAN_HOUR_INTERVAL = - -#GRID_STAT_CLIMO_STDEV_FILE_NAME = -#GRID_STAT_CLIMO_STDEV_FIELD = -#GRID_STAT_CLIMO_STDEV_REGRID_METHOD = -#GRID_STAT_CLIMO_STDEV_REGRID_WIDTH = -#GRID_STAT_CLIMO_STDEV_REGRID_VLD_THRESH = -#GRID_STAT_CLIMO_STDEV_REGRID_SHAPE = -#GRID_STAT_CLIMO_STDEV_TIME_INTERP_METHOD = -#GRID_STAT_CLIMO_STDEV_MATCH_MONTH = -#GRID_STAT_CLIMO_STDEV_DAY_INTERVAL = -#GRID_STAT_CLIMO_STDEV_HOUR_INTERVAL = - -#GRID_STAT_CLIMO_CDF_BINS = 1 -#GRID_STAT_CLIMO_CDF_CENTER_BINS = False -#GRID_STAT_CLIMO_CDF_WRITE_BINS = True - -GRID_STAT_MASK_GRID = - -# Statistical output types -GRID_STAT_OUTPUT_FLAG_FHO = STAT -GRID_STAT_OUTPUT_FLAG_CTC = STAT -GRID_STAT_OUTPUT_FLAG_CTS = STAT -#GRID_STAT_OUTPUT_FLAG_MCTC = NONE -#GRID_STAT_OUTPUT_FLAG_MCTS = NONE -GRID_STAT_OUTPUT_FLAG_CNT = STAT -#GRID_STAT_OUTPUT_FLAG_SL1L2 = NONE -#GRID_STAT_OUTPUT_FLAG_SAL1L2 = NONE -#GRID_STAT_OUTPUT_FLAG_VL1L2 = NONE -#GRID_STAT_OUTPUT_FLAG_VAL1L2 = NONE -#GRID_STAT_OUTPUT_FLAG_VCNT = NONE -#GRID_STAT_OUTPUT_FLAG_PCT = NONE -#GRID_STAT_OUTPUT_FLAG_PSTD = NONE -#GRID_STAT_OUTPUT_FLAG_PJC = NONE -#GRID_STAT_OUTPUT_FLAG_PRC = NONE -#GRID_STAT_OUTPUT_FLAG_ECLV = BOTH -GRID_STAT_OUTPUT_FLAG_NBRCTC = STAT -GRID_STAT_OUTPUT_FLAG_NBRCTS = STAT -GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT -#GRID_STAT_OUTPUT_FLAG_GRAD = BOTH -#GRID_STAT_OUTPUT_FLAG_DMAP = NONE - -# NetCDF matched pairs output file -#GRID_STAT_NC_PAIRS_VAR_NAME = -GRID_STAT_NC_PAIRS_FLAG_LATLON = FALSE -GRID_STAT_NC_PAIRS_FLAG_RAW = FALSE -GRID_STAT_NC_PAIRS_FLAG_DIFF = FALSE -GRID_STAT_NC_PAIRS_FLAG_CLIMO = FALSE -#GRID_STAT_NC_PAIRS_FLAG_CLIMO_CDP = FALSE -GRID_STAT_NC_PAIRS_FLAG_WEIGHT = FALSE -GRID_STAT_NC_PAIRS_FLAG_NBRHD = FALSE -#GRID_STAT_NC_PAIRS_FLAG_FOURIER = FALSE -#GRID_STAT_NC_PAIRS_FLAG_GRADIENT = FALSE -#GRID_STAT_NC_PAIRS_FLAG_DISTANCE_MAP = FALSE -GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE - -# End of [config] section and start of [dir] section. -[dir] -# -# Directory containing observation input to GridStat. -# -OBS_GRID_STAT_INPUT_DIR = {ENV[EXPTDIR]}/metprd/PcpCombine_obs -# -# Directory containing forecast input to GridStat. -# -FCST_GRID_STAT_INPUT_DIR = {OUTPUT_BASE}/metprd/PcpCombine_fcst -# -# Directory containing climatology mean input to GridStat. Not used in -# this example. -# -GRID_STAT_CLIMO_MEAN_INPUT_DIR = -# -# Directory containing climatology mean input to GridStat. Not used in -# this example. -# -GRID_STAT_CLIMO_STDEV_INPUT_DIR = -# -# Directory in which to write output from GridStat. -# -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} -# -# Directory for staging data. -# -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_06h - -# End of [dir] section and start of [filename_templates] section. -[filename_templates] -# -# Template for observation input to GridStat relative to -# OBS_GRID_STAT_INPUT_DIR. -# -OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2_a{level?fmt=%HH}h.nc -# -# Template for forecast input to GridStat relative to -# FCST_GRID_STAT_INPUT_DIR. -# -FCST_GRID_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}_a{level?fmt=%HH}h.nc -# -# Template for output from GridStat relative to GRID_STAT_OUTPUT_DIR. -# -GRID_STAT_OUTPUT_TEMPLATE = metprd/GridStat -# -# Template for climatology input to GridStat relative to -# GRID_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. -# -GRID_STAT_CLIMO_MEAN_INPUT_TEMPLATE = -# -# Template for climatology input to GridStat relative to -# GRID_STAT_CLIMO_STDEV_INPUT_DIR. Not used in this example. -# -GRID_STAT_CLIMO_STDEV_INPUT_TEMPLATE = -# -# Variable used to specify one or more verification mask files for -# GridStat. Not used for this example. -# -GRID_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly diff --git a/parm/metplus/GridStat_APCP24h.conf b/parm/metplus/GridStat_APCP24h.conf deleted file mode 100644 index f45ec4037a..0000000000 --- a/parm/metplus/GridStat_APCP24h.conf +++ /dev/null @@ -1,295 +0,0 @@ -# GridStat METplus Configuration - -# section heading for [config] variables - all items below this line and -# before the next section heading correspond to the [config] section -[config] - -# List of applications to run - only GridStat for this case -PROCESS_LIST = GridStat - -# time looping - options are INIT, VALID, RETRO, and REALTIME -# If set to INIT or RETRO: -# INIT_TIME_FMT, INIT_BEG, INIT_END, and INIT_INCREMENT must also be set -# If set to VALID or REALTIME: -# VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set -LOOP_BY = INIT - -# Format of INIT_BEG and INIT_END using % items -# %Y = 4 digit year, %m = 2 digit month, %d = 2 digit day, etc. -# see www.strftime.org for more information -# %Y%m%d%H expands to YYYYMMDDHH -INIT_TIME_FMT = %Y%m%d%H - -# Start time for METplus run - must match INIT_TIME_FMT -INIT_BEG = {ENV[CDATE]} - -# End time for METplus run - must match INIT_TIME_FMT -INIT_END = {ENV[CDATE]} - -# Increment between METplus runs (in seconds if no units are specified). -# Must be >= 60 seconds. -INIT_INCREMENT = 3600 - -# List of forecast leads to process for each run time (init or valid) -# In hours if units are not specified -# If unset, defaults to 0 (don't loop through forecast leads) -LEAD_SEQ = {ENV[fhr_list]} - -# Order of loops to process data - Options are times, processes -# Not relevant if only one item is in the PROCESS_LIST -# times = run all wrappers in the PROCESS_LIST for a single run time, then -# increment the run time and run all wrappers again until all times have -# been evaluated. -# processes = run the first wrapper in the PROCESS_LIST for all times -# specified, then repeat for the next item in the PROCESS_LIST until all -# wrappers have been run -LOOP_ORDER = times - -# Verbosity of MET output - overrides LOG_VERBOSITY for GridStat only -#LOG_GRID_STAT_VERBOSITY = 2 - -# -# Specify the name of the METplus log file. -# -LOG_METPLUS = {LOG_DIR}/metplus.log.{ENV[LOG_SUFFIX]} -# -# Specify the location and name of the final METplus conf file. -# -METPLUS_CONF = {OUTPUT_BASE}/metprd/GridStat/metplus_final.APCP_24h.conf -# -# Location of MET config file to pass to GridStat. -# -GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped - -# grid to remap data. Value is set as the 'to_grid' variable in the 'regrid' dictionary -# See MET User's Guide for more information -GRID_STAT_REGRID_TO_GRID = FCST -GRID_STAT_REGRID_VLD_THRESH = 0.5 -GRID_STAT_REGRID_METHOD = BUDGET -GRID_STAT_REGRID_WIDTH = 2 -GRID_STAT_REGRID_SHAPE = SQUARE - -#GRID_STAT_INTERP_FIELD = BOTH -#GRID_STAT_INTERP_VLD_THRESH = 1.0 -#GRID_STAT_INTERP_SHAPE = SQUARE -#GRID_STAT_INTERP_TYPE_METHOD = NEAREST -#GRID_STAT_INTERP_TYPE_WIDTH = 1 - -#GRID_STAT_GRID_WEIGHT_FLAG = - -# -# Name to identify model (forecast) data in output. -# -# The variable MODEL is recorded in the stat files, and the data in -# these files is then plotted (e.g. using METViewer). Here, we add a -# suffix to MODEL that identifies the forecast ensemble member. This -# makes it easier to identify each curve. -# -MODEL = {ENV[VX_FCST_MODEL_NAME]}{ENV[USCORE_ENSMEM_NAME_OR_NULL]} - -FCST_NATIVE_DATA_TYPE = GRIB -# -# Name to identify observation data in output. -# -OBTYPE = CCPA -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 = APCP_24 -# -# List of levels to evaluate for forecast variable 1. -# -FCST_VAR1_LEVELS = A24 -# -# List of thresholds to evaluate for each name/level combination for -# forecast variable 1. -# -BOTH_VAR1_THRESH = gt0.0,ge0.254,ge0.508,ge1.27,ge2.54,ge3.810,ge6.350,ge8.890,ge12.700,ge25.400 -# -# String to search for in the observation input files for observation -# variable 1. -# -OBS_VAR1_NAME = APCP_24 -# -# List of levels to evaluate for observation variable 1. Must be the -# same length as FCST_VAR1_LEVELS. -# -OBS_VAR1_LEVELS = A24 -# -# 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}_{CURRENT_FCST_NAME}_{ENV[acc]}_{OBTYPE} - -# Climatology data -#GRID_STAT_CLIMO_MEAN_FILE_NAME = -#GRID_STAT_CLIMO_MEAN_FIELD = -#GRID_STAT_CLIMO_MEAN_REGRID_METHOD = -#GRID_STAT_CLIMO_MEAN_REGRID_WIDTH = -#GRID_STAT_CLIMO_MEAN_REGRID_VLD_THRESH = -#GRID_STAT_CLIMO_MEAN_REGRID_SHAPE = -#GRID_STAT_CLIMO_MEAN_TIME_INTERP_METHOD = -#GRID_STAT_CLIMO_MEAN_MATCH_MONTH = -#GRID_STAT_CLIMO_MEAN_DAY_INTERVAL = -#GRID_STAT_CLIMO_MEAN_HOUR_INTERVAL = - -#GRID_STAT_CLIMO_STDEV_FILE_NAME = -#GRID_STAT_CLIMO_STDEV_FIELD = -#GRID_STAT_CLIMO_STDEV_REGRID_METHOD = -#GRID_STAT_CLIMO_STDEV_REGRID_WIDTH = -#GRID_STAT_CLIMO_STDEV_REGRID_VLD_THRESH = -#GRID_STAT_CLIMO_STDEV_REGRID_SHAPE = -#GRID_STAT_CLIMO_STDEV_TIME_INTERP_METHOD = -#GRID_STAT_CLIMO_STDEV_MATCH_MONTH = -#GRID_STAT_CLIMO_STDEV_DAY_INTERVAL = -#GRID_STAT_CLIMO_STDEV_HOUR_INTERVAL = - -#GRID_STAT_CLIMO_CDF_BINS = 1 -#GRID_STAT_CLIMO_CDF_CENTER_BINS = False -#GRID_STAT_CLIMO_CDF_WRITE_BINS = True - -GRID_STAT_MASK_GRID = - -# Statistical output types -GRID_STAT_OUTPUT_FLAG_FHO = STAT -GRID_STAT_OUTPUT_FLAG_CTC = STAT -GRID_STAT_OUTPUT_FLAG_CTS = STAT -#GRID_STAT_OUTPUT_FLAG_MCTC = NONE -#GRID_STAT_OUTPUT_FLAG_MCTS = NONE -GRID_STAT_OUTPUT_FLAG_CNT = STAT -#GRID_STAT_OUTPUT_FLAG_SL1L2 = NONE -#GRID_STAT_OUTPUT_FLAG_SAL1L2 = NONE -#GRID_STAT_OUTPUT_FLAG_VL1L2 = NONE -#GRID_STAT_OUTPUT_FLAG_VAL1L2 = NONE -#GRID_STAT_OUTPUT_FLAG_VCNT = NONE -#GRID_STAT_OUTPUT_FLAG_PCT = NONE -#GRID_STAT_OUTPUT_FLAG_PSTD = NONE -#GRID_STAT_OUTPUT_FLAG_PJC = NONE -#GRID_STAT_OUTPUT_FLAG_PRC = NONE -#GRID_STAT_OUTPUT_FLAG_ECLV = BOTH -GRID_STAT_OUTPUT_FLAG_NBRCTC = STAT -GRID_STAT_OUTPUT_FLAG_NBRCTS = STAT -GRID_STAT_OUTPUT_FLAG_NBRCNT = STAT -#GRID_STAT_OUTPUT_FLAG_GRAD = BOTH -#GRID_STAT_OUTPUT_FLAG_DMAP = NONE - -# NetCDF matched pairs output file -#GRID_STAT_NC_PAIRS_VAR_NAME = -GRID_STAT_NC_PAIRS_FLAG_LATLON = FALSE -GRID_STAT_NC_PAIRS_FLAG_RAW = FALSE -GRID_STAT_NC_PAIRS_FLAG_DIFF = FALSE -GRID_STAT_NC_PAIRS_FLAG_CLIMO = FALSE -#GRID_STAT_NC_PAIRS_FLAG_CLIMO_CDP = FALSE -GRID_STAT_NC_PAIRS_FLAG_WEIGHT = FALSE -GRID_STAT_NC_PAIRS_FLAG_NBRHD = FALSE -#GRID_STAT_NC_PAIRS_FLAG_FOURIER = FALSE -#GRID_STAT_NC_PAIRS_FLAG_GRADIENT = FALSE -#GRID_STAT_NC_PAIRS_FLAG_DISTANCE_MAP = FALSE -GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE - -# End of [config] section and start of [dir] section. -[dir] -# -# Directory containing observation input to GridStat. -# -OBS_GRID_STAT_INPUT_DIR = {ENV[EXPTDIR]}/metprd/PcpCombine_obs -# -# Directory containing forecast input to GridStat. -# -FCST_GRID_STAT_INPUT_DIR = {OUTPUT_BASE}/metprd/PcpCombine_fcst -# -# Directory containing climatology mean input to GridStat. Not used in -# this example. -# -GRID_STAT_CLIMO_MEAN_INPUT_DIR = -# -# Directory containing climatology mean input to GridStat. Not used in -# this example. -# -GRID_STAT_CLIMO_STDEV_INPUT_DIR = -# -# Directory in which to write output from GridStat. -# -OUTPUT_BASE = {ENV[OUTPUT_BASE]} -GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE} -# -# Directory for staging data. -# -STAGING_DIR = {OUTPUT_BASE}/stage/APCP_24h - -# End of [dir] section and start of [filename_templates] section. -[filename_templates] -# -# Template for observation input to GridStat relative to -# OBS_GRID_STAT_INPUT_DIR. -# -OBS_GRID_STAT_INPUT_TEMPLATE = {valid?fmt=%Y%m%d}/ccpa.t{valid?fmt=%H}z.01h.hrap.conus.gb2_a{level?fmt=%HH}h.nc -# -# Template for forecast input to GridStat relative to -# FCST_GRID_STAT_INPUT_DIR. -# -FCST_GRID_STAT_INPUT_TEMPLATE = {ENV[NET]}.t{init?fmt=%H}z.prslev.f{lead?fmt=%HHH}.{ENV[POST_OUTPUT_DOMAIN_NAME]}_a{level?fmt=%HH}h.nc -# -# Template for output from GridStat relative to GRID_STAT_OUTPUT_DIR. -# -GRID_STAT_OUTPUT_TEMPLATE = metprd/GridStat -# -# Template for climatology input to GridStat relative to -# GRID_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example. -# -GRID_STAT_CLIMO_MEAN_INPUT_TEMPLATE = -# -# Template for climatology input to GridStat relative to -# GRID_STAT_CLIMO_STDEV_INPUT_DIR. Not used in this example. -# -GRID_STAT_CLIMO_STDEV_INPUT_TEMPLATE = -# -# Variable used to specify one or more verification mask files for -# GridStat. Not used for this example. -# -GRID_STAT_VERIFICATION_MASK_TEMPLATE = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly From 8b237808f96c0184417b5d4c7507ed09507a3bd3 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Mon, 20 Mar 2023 09:59:49 -0600 Subject: [PATCH 095/119] Minor edits for consistency between METplus config files. --- parm/metplus/GridStat_ensmean_APCPgt01h.conf | 10 +++++----- parm/metplus/GridStat_ensmean_REFC.conf | 10 +++++----- parm/metplus/GridStat_ensmean_RETOP.conf | 15 ++++++++------- parm/metplus/GridStat_ensprob_APCP03h.conf | 1 + parm/metplus/GridStat_ensprob_APCP06h.conf | 1 + parm/metplus/GridStat_ensprob_APCP24h.conf | 1 + parm/metplus/GridStat_ensprob_RETOP.conf | 3 ++- parm/metplus/PointStat_ensmean_SFC.conf | 10 +++++----- parm/metplus/PointStat_ensmean_UPA.conf | 10 +++++----- parm/metplus/PointStat_ensprob_SFC.conf | 8 ++++---- parm/metplus/PointStat_ensprob_UPA.conf | 8 ++++---- 11 files changed, 41 insertions(+), 36 deletions(-) diff --git a/parm/metplus/GridStat_ensmean_APCPgt01h.conf b/parm/metplus/GridStat_ensmean_APCPgt01h.conf index ab112fb3d3..09dd54d68c 100644 --- a/parm/metplus/GridStat_ensmean_APCPgt01h.conf +++ b/parm/metplus/GridStat_ensmean_APCPgt01h.conf @@ -292,16 +292,16 @@ STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. [filename_templates] # -# Template for forecast input to GridStat relative to -# FCST_GRID_STAT_INPUT_DIR. -# -FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} -# # 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 = diff --git a/parm/metplus/GridStat_ensmean_REFC.conf b/parm/metplus/GridStat_ensmean_REFC.conf index b11d503dac..17a1996211 100644 --- a/parm/metplus/GridStat_ensmean_REFC.conf +++ b/parm/metplus/GridStat_ensmean_REFC.conf @@ -292,16 +292,16 @@ STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. [filename_templates] # -# Template for forecast input to GridStat relative to -# FCST_GRID_STAT_INPUT_DIR. -# -FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} -# # 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 = diff --git a/parm/metplus/GridStat_ensmean_RETOP.conf b/parm/metplus/GridStat_ensmean_RETOP.conf index 5888e0a611..36c6282671 100644 --- a/parm/metplus/GridStat_ensmean_RETOP.conf +++ b/parm/metplus/GridStat_ensmean_RETOP.conf @@ -102,15 +102,16 @@ GRID_STAT_DESC = NA GRID_STAT_MET_CONFIG_OVERRIDES = cat_thresh = []; cnt_thresh = [NA]; cnt_logic = UNION; wind_thresh = [NA]; wind_logic = UNION; ci_alpha = [0.05]; rank_corr_flag = FALSE; # # Name of 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 +# 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, the type of statistic, etc. In this case, this suffix is # "_L0_ENS_MEAN". Thus, below, FCST_VAR1_NAME must be set to the value -# of FIELDNAME_IN_MET_OUTPUT with "_L0_ENS_MEAN" appended to it. +# of fieldname_in_met_output with "_L0_ENS_MEAN" appended to it. # FCST_VAR1_NAME = {{fieldname_in_met_output}}_L0_ENS_MEAN # @@ -292,16 +293,16 @@ STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. [filename_templates] # -# Template for forecast input to GridStat relative to -# FCST_GRID_STAT_INPUT_DIR. -# -FCST_GRID_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} -# # 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 = diff --git a/parm/metplus/GridStat_ensprob_APCP03h.conf b/parm/metplus/GridStat_ensprob_APCP03h.conf index a028e90932..3b3f9a3e20 100644 --- a/parm/metplus/GridStat_ensprob_APCP03h.conf +++ b/parm/metplus/GridStat_ensprob_APCP03h.conf @@ -135,6 +135,7 @@ FCST_VAR1_LEVELS = A03 FCST_VAR1_THRESH = ==0.1 # # Name of observation variable 1 +# # 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 diff --git a/parm/metplus/GridStat_ensprob_APCP06h.conf b/parm/metplus/GridStat_ensprob_APCP06h.conf index 84c058e449..d9856518c6 100644 --- a/parm/metplus/GridStat_ensprob_APCP06h.conf +++ b/parm/metplus/GridStat_ensprob_APCP06h.conf @@ -135,6 +135,7 @@ FCST_VAR1_LEVELS = A06 FCST_VAR1_THRESH = ==0.1 # # Name of observation variable 1 +# # 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 diff --git a/parm/metplus/GridStat_ensprob_APCP24h.conf b/parm/metplus/GridStat_ensprob_APCP24h.conf index 463a8a4033..4c82f06829 100644 --- a/parm/metplus/GridStat_ensprob_APCP24h.conf +++ b/parm/metplus/GridStat_ensprob_APCP24h.conf @@ -135,6 +135,7 @@ FCST_VAR1_LEVELS = A24 FCST_VAR1_THRESH = ==0.1 # # Name of observation variable 1 +# # 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 diff --git a/parm/metplus/GridStat_ensprob_RETOP.conf b/parm/metplus/GridStat_ensprob_RETOP.conf index a338e7f29e..071d47fdc7 100644 --- a/parm/metplus/GridStat_ensprob_RETOP.conf +++ b/parm/metplus/GridStat_ensprob_RETOP.conf @@ -107,7 +107,8 @@ GRID_STAT_MET_CONFIG_OVERRIDES = cat_thresh = []; cnt_thresh = [NA]; cnt_logic = # Process as probability # -# Name of forecast variable 1 +# Name of 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 diff --git a/parm/metplus/PointStat_ensmean_SFC.conf b/parm/metplus/PointStat_ensmean_SFC.conf index 9656cd8708..9771081456 100644 --- a/parm/metplus/PointStat_ensmean_SFC.conf +++ b/parm/metplus/PointStat_ensmean_SFC.conf @@ -234,16 +234,16 @@ STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. [filename_templates] # -# Template for forecast input to PointStat relative to -# FCST_POINT_STAT_INPUT_DIR. -# -FCST_POINT_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} -# # Template for observation input to PointStat relative to # OBS_POINT_STAT_INPUT_DIR. # OBS_POINT_STAT_INPUT_TEMPLATE = {{obs_input_fn_template}} # +# Template for forecast input to PointStat relative to +# FCST_POINT_STAT_INPUT_DIR. +# +FCST_POINT_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} +# # Template for output from PointStat relative to POINT_STAT_OUTPUT_DIR. # POINT_STAT_OUTPUT_TEMPLATE = diff --git a/parm/metplus/PointStat_ensmean_UPA.conf b/parm/metplus/PointStat_ensmean_UPA.conf index ac29be9b55..3fb3f1b790 100644 --- a/parm/metplus/PointStat_ensmean_UPA.conf +++ b/parm/metplus/PointStat_ensmean_UPA.conf @@ -309,16 +309,16 @@ STAGING_DIR = {{staging_dir}} # End of [dir] section and start of [filename_templates] section. [filename_templates] # -# Template for forecast input to PointStat relative to -# FCST_POINT_STAT_INPUT_DIR. -# -FCST_POINT_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} -# # Template for observation input to PointStat relative to # OBS_POINT_STAT_INPUT_DIR. # OBS_POINT_STAT_INPUT_TEMPLATE = {{obs_input_fn_template}} # +# Template for forecast input to PointStat relative to +# FCST_POINT_STAT_INPUT_DIR. +# +FCST_POINT_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}} +# # Template for output from PointStat relative to POINT_STAT_OUTPUT_DIR. # POINT_STAT_OUTPUT_TEMPLATE = diff --git a/parm/metplus/PointStat_ensprob_SFC.conf b/parm/metplus/PointStat_ensprob_SFC.conf index 0c8a44ae9f..10937c2ec7 100644 --- a/parm/metplus/PointStat_ensprob_SFC.conf +++ b/parm/metplus/PointStat_ensprob_SFC.conf @@ -162,16 +162,16 @@ POINT_STAT_STATION_ID = # Message types, if all message types are to be returned, leave this empty, # otherwise indicate the message types of interest. POINT_STAT_MESSAGE_TYPE = ADP{FIELDNAME_IN_MET_FILEDIR_NAMES} + +# set to True to run PointStat once for each name/level combination +# set to False to run PointStat once per run time including all fields +POINT_STAT_ONCE_PER_FIELD = False # # Variables and levels as specified in the field dictionary of the METplus # PointStat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, # (optional) FCST_VARn_OPTION # -# set to True to run PointStat once for each name/level combination -# set to False to run PointStat once per run time including all fields -POINT_STAT_ONCE_PER_FIELD = False - # fields to compare # Note: If FCST_VAR_* is set, then a corresponding OBS_VAR_* variable must be set # To use one variables for both forecast and observation data, set BOTH_VAR_* instead diff --git a/parm/metplus/PointStat_ensprob_UPA.conf b/parm/metplus/PointStat_ensprob_UPA.conf index 6da69cc271..c586cb27c5 100644 --- a/parm/metplus/PointStat_ensprob_UPA.conf +++ b/parm/metplus/PointStat_ensprob_UPA.conf @@ -162,16 +162,16 @@ POINT_STAT_STATION_ID = # Message types, if all message types are to be returned, leave this empty, # otherwise indicate the message types of interest. POINT_STAT_MESSAGE_TYPE = ADP{FIELDNAME_IN_MET_FILEDIR_NAMES} + +# set to True to run PointStat once for each name/level combination +# set to False to run PointStat once per run time including all fields +POINT_STAT_ONCE_PER_FIELD = False # # Variables and levels as specified in the field dictionary of the METplus # PointStat configuration file. Specify as FCST_VARn_NAME, FCST_VARn_LEVELS, # (optional) FCST_VARn_OPTION # -# set to True to run PointStat once for each name/level combination -# set to False to run PointStat once per run time including all fields -POINT_STAT_ONCE_PER_FIELD = False - # fields to compare # Note: If FCST_VAR_* is set, then a corresponding OBS_VAR_* variable must be set # To use one variables for both forecast and observation data, set BOTH_VAR_* instead From 3da6fd1e765ed61e0274a9eef485c861e4e72f24 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Mon, 20 Mar 2023 10:12:47 -0600 Subject: [PATCH 096/119] Remove unneeded ex-scripts. --- ...exregional_run_met_ensemblestat_vx_grid.sh | 184 ----------------- ...xregional_run_met_ensemblestat_vx_point.sh | 172 ---------------- scripts/exregional_run_met_gridstat_vx.sh | 188 ----------------- .../exregional_run_met_gridstat_vx_ensmean.sh | 190 ----------------- .../exregional_run_met_gridstat_vx_ensprob.sh | 191 ----------------- scripts/exregional_run_met_pointstat_vx.sh | 189 ----------------- ...exregional_run_met_pointstat_vx_ensmean.sh | 193 ------------------ ...exregional_run_met_pointstat_vx_ensprob.sh | 193 ------------------ 8 files changed, 1500 deletions(-) delete mode 100755 scripts/exregional_run_met_ensemblestat_vx_grid.sh delete mode 100755 scripts/exregional_run_met_ensemblestat_vx_point.sh delete mode 100755 scripts/exregional_run_met_gridstat_vx.sh delete mode 100755 scripts/exregional_run_met_gridstat_vx_ensmean.sh delete mode 100755 scripts/exregional_run_met_gridstat_vx_ensprob.sh delete mode 100755 scripts/exregional_run_met_pointstat_vx.sh delete mode 100755 scripts/exregional_run_met_pointstat_vx_ensmean.sh delete mode 100755 scripts/exregional_run_met_pointstat_vx_ensprob.sh diff --git a/scripts/exregional_run_met_ensemblestat_vx_grid.sh b/scripts/exregional_run_met_ensemblestat_vx_grid.sh deleted file mode 100755 index 65fdaf4891..0000000000 --- a/scripts/exregional_run_met_ensemblestat_vx_grid.sh +++ /dev/null @@ -1,184 +0,0 @@ -#!/bin/bash - -# -#----------------------------------------------------------------------- -# -# Source the variable definitions file and the bash utility functions. -# -#----------------------------------------------------------------------- -# -. $USHdir/source_util_funcs.sh -source_config_for_task "task_run_vx_ensgrid|task_run_post" ${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 -# -#----------------------------------------------------------------------- -# -# 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 ex-script for the task that runs METplus for ensemble-stat on -the UPP output files by initialization time for all forecast hours for -gridded data. -========================================================================" - -#----------------------------------------------------------------------- -# -# Begin grid-to-grid ensemble vx. -# -#----------------------------------------------------------------------- -# -print_info_msg "$VERBOSE" "Starting ensemble-stat verification" - -# -#----------------------------------------------------------------------- -# -# Get the cycle date and hour (in formats of yyyymmdd and hh, respect- -# ively) from CDATE. Read in FHR and create a comma-separated list -# for METplus to run over. Determine the number padding needed based -# on number of ensemble members. -# -#----------------------------------------------------------------------- -# -yyyymmdd=${PDY} -hh=${cyc} -export CDATE -export hh - -fhr_last=`echo ${FHR} | awk '{ print $NF }'` -export fhr_last - -fhr_list=`echo ${FHR} | $SED "s/ /,/g"` -export fhr_list - -NUM_PAD=3 - -# -#----------------------------------------------------------------------- -# -# Pick a directory structure for METplus output files -# -#----------------------------------------------------------------------- -# -if [ $RUN_ENVIR = "nco" ]; then - export INPUT_BASE=$COMIN - export OUTPUT_BASE=$COMOUT/metout - export MEM_BASE=$OUTPUT_BASE - export LOG_DIR=$LOGDIR - - export POSTPRD= - export MEM_STAR= - export MEM_CUSTOM= - export DOT_MEM_CUSTOM=".{custom?fmt=%s}" -else - export INPUT_BASE=${VX_FCST_INPUT_BASEDIR}/$CDATE - export OUTPUT_BASE=$EXPTDIR - export MEM_BASE=$EXPTDIR/$CDATE - export LOG_DIR=${EXPTDIR}/log - - export POSTPRD="postprd/" - export MEM_STAR="mem*/" - export MEM_CUSTOM="{custom?fmt=%s}/" - export DOT_MEM_CUSTOM= -fi -export DOT_ENSMEM=${dot_ensmem} - -# -#----------------------------------------------------------------------- -# -# Create LOG_SUFFIX to read into METplus conf files. -# -#----------------------------------------------------------------------- -# - -if [ ${VAR} == "APCP" ]; then - LOG_SUFFIX=EnsembleStat_${VAR}${ACCUM_HH}h_${CDATE} -else - LOG_SUFFIX=EnsembleStat_${VAR}_${CDATE} -fi - -# -#----------------------------------------------------------------------- -# -# Export some environment variables passed in by the XML -# -#----------------------------------------------------------------------- -# -export MET_INSTALL_DIR -export MET_BIN_EXEC -export METPLUS_PATH -export METPLUS_CONF -export MET_CONFIG -export VX_FCST_MODEL_NAME -export NET -export POST_OUTPUT_DOMAIN_NAME -export NUM_ENS_MEMBERS -export NUM_PAD -export LOG_SUFFIX - -# -#----------------------------------------------------------------------- -# -# Run METplus -# -#----------------------------------------------------------------------- -# -if [ ${VAR} == "APCP" ]; then - acc="${ACCUM_HH}h" # for stats output prefix in EnsembleStatConfig - ${METPLUS_PATH}/ush/run_metplus.py \ - -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/EnsembleStat_${VAR}${acc}.conf -else - ${METPLUS_PATH}/ush/run_metplus.py \ - -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/EnsembleStat_${VAR}.conf -fi - -# -#----------------------------------------------------------------------- -# -# Print message indicating successful completion of script. -# -#----------------------------------------------------------------------- -# -print_info_msg " -======================================================================== -METplus ensemble-stat grid completed successfully. - -Exiting script: \"${scrfunc_fn}\" -In directory: \"${scrfunc_dir}\" -========================================================================" -# -#----------------------------------------------------------------------- -# -# 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_ensemblestat_vx_point.sh b/scripts/exregional_run_met_ensemblestat_vx_point.sh deleted file mode 100755 index 6476848608..0000000000 --- a/scripts/exregional_run_met_ensemblestat_vx_point.sh +++ /dev/null @@ -1,172 +0,0 @@ -#!/bin/bash - -# -#----------------------------------------------------------------------- -# -# Source the variable definitions file and the bash utility functions. -# -#----------------------------------------------------------------------- -# -. $USHdir/source_util_funcs.sh -source_config_for_task "task_run_vx_enspoint|task_run_post" ${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 -# -#----------------------------------------------------------------------- -# -# 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 ex-script for the task that runs METplus for point-stat on -the UPP output files by initialization time for all forecast hours. -========================================================================" - -#----------------------------------------------------------------------- -# -# Begin grid-to-point ensemble vx. -# -#----------------------------------------------------------------------- -# -print_info_msg "$VERBOSE" "Starting point-based ensemble-stat verification" - -# -#----------------------------------------------------------------------- -# -# Get the cycle date and hour (in formats of yyyymmdd and hh, respect- -# ively) from CDATE. Also read in FHR and create a comma-separated list -# for METplus to run over. -# -#----------------------------------------------------------------------- -# -yyyymmdd=${PDY} -hh=${cyc} -export CDATE -export hh - -fhr_last=`echo ${FHR} | awk '{ print $NF }'` -export fhr_last - -fhr_list=`echo ${FHR} | $SED "s/ /,/g"` -export fhr_list - -# -#----------------------------------------------------------------------- -# -# Pick a directory structure for METplus output files -# -#----------------------------------------------------------------------- -# -if [ $RUN_ENVIR = "nco" ]; then - export INPUT_BASE=$COMIN - export OUTPUT_BASE=$COMOUT/metout - export MEM_BASE=$OUTPUT_BASE - export LOG_DIR=$LOGDIR - - export POSTPRD= - export MEM_STAR= - export MEM_CUSTOM= - export DOT_MEM_CUSTOM=".{custom?fmt=%s}" -else - export INPUT_BASE=${VX_FCST_INPUT_BASEDIR}/$CDATE - export OUTPUT_BASE=$EXPTDIR - export MEM_BASE=$EXPTDIR/$CDATE - export LOG_DIR=${EXPTDIR}/log - - export POSTPRD="postprd/" - export MEM_STAR="mem*/" - export MEM_CUSTOM="{custom?fmt=%s}/" - export DOT_MEM_CUSTOM= -fi -export DOT_ENSMEM=${dot_ensmem} - -# -#----------------------------------------------------------------------- -# -# Create LOG_SUFFIX to read into METplus conf files. -# -#----------------------------------------------------------------------- -# -LOG_SUFFIX="EnsembleStat" - -# -#----------------------------------------------------------------------- -# -# Check for existence of top-level OBS_DIR -# -#----------------------------------------------------------------------- -# -if [[ ! -d "$OBS_DIR" ]]; then - print_err_msg_exit "\ - Exiting: OBS_DIR does not exist." -fi - -# -#----------------------------------------------------------------------- -# -# Export some environment variables passed in by the XML and run METplus -# -#----------------------------------------------------------------------- -# -export LOG_SUFFIX -export MET_INSTALL_DIR -export MET_BIN_EXEC -export METPLUS_PATH -export METPLUS_CONF -export MET_CONFIG -export VX_FCST_MODEL_NAME -export NET -export POST_OUTPUT_DOMAIN_NAME -export NUM_ENS_MEMBERS - -${METPLUS_PATH}/ush/run_metplus.py \ - -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/EnsembleStat_${VAR}.conf - -# -#----------------------------------------------------------------------- -# -# Print message indicating successful completion of script. -# -#----------------------------------------------------------------------- -# -print_info_msg " -======================================================================== -METplus ensemble-stat completed successfully. - -Exiting script: \"${scrfunc_fn}\" -In directory: \"${scrfunc_dir}\" -========================================================================" -# -#----------------------------------------------------------------------- -# -# 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_gridstat_vx.sh b/scripts/exregional_run_met_gridstat_vx.sh deleted file mode 100755 index 2b0216d41a..0000000000 --- a/scripts/exregional_run_met_gridstat_vx.sh +++ /dev/null @@ -1,188 +0,0 @@ -#!/bin/bash - -# -#----------------------------------------------------------------------- -# -# Source the variable definitions file and the bash utility functions. -# -#----------------------------------------------------------------------- -# -. $USHdir/source_util_funcs.sh -source_config_for_task "task_run_vx_gridstat|task_run_post" ${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 -# -#----------------------------------------------------------------------- -# -# 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 ex-script for the task that runs METplus for grid-stat on -the UPP output files by initialization time for all forecast hours. -========================================================================" - -# -#----------------------------------------------------------------------- -# -# Get the cycle date and hour (in formats of yyyymmdd and hh, respect- -# ively) from CDATE. Also read in FHR and create a comma-separated list -# for METplus to run over. -# -#----------------------------------------------------------------------- -# -yyyymmdd=${PDY} -hh=${cyc} -export CDATE -export hh - -fhr_last=`echo ${FHR} | awk '{ print $NF }'` -export fhr_last - -fhr_list=`echo ${FHR} | $SED "s/ /,/g"` -export fhr_list - -# -#----------------------------------------------------------------------- -# -# Pick a directory structure for METplus output files -# -#----------------------------------------------------------------------- -# -if [ $RUN_ENVIR = "nco" ]; then - export INPUT_BASE=$COMIN - export OUTPUT_BASE=$COMOUT/metout - export MEM_BASE=$OUTPUT_BASE - export LOG_DIR=$LOGDIR - - export POSTPRD= - export MEM_STAR= - export MEM_CUSTOM= - export DOT_MEM_CUSTOM=".{custom?fmt=%s}" -else - export INPUT_BASE=${VX_FCST_INPUT_BASEDIR}/${CDATE}${SLASH_ENSMEM_SUBDIR_OR_NULL}/postprd - export OUTPUT_BASE=${EXPTDIR}/${CDATE}${SLASH_ENSMEM_SUBDIR_OR_NULL} - export MEM_BASE=$EXPTDIR/$CDATE - export LOG_DIR=${EXPTDIR}/log - - export POSTPRD="postprd/" - export MEM_STAR="mem*/" - export MEM_CUSTOM="{custom?fmt=%s}/" - export DOT_MEM_CUSTOM= -fi -export DOT_ENSMEM=${dot_ensmem} - -# -#----------------------------------------------------------------------- -# -# Create INPUT_BASE and LOG_SUFFIX to read into METplus conf files. -# -#----------------------------------------------------------------------- -# -if [ ${VAR} == "APCP" ]; then - LOG_SUFFIX=GridStat_${VAR}${ACCUM_HH}h${USCORE_ENSMEM_NAME_OR_NULL}_${CDATE} -else - LOG_SUFFIX=GridStat_${VAR}${USCORE_ENSMEM_NAME_OR_NULL}_${CDATE} -fi - -#if [[ ${DO_ENSEMBLE} == "TRUE" ]]; then -# ENSMEM=`echo ${SLASH_ENSMEM_SUBDIR_OR_NULL} | cut -d"/" -f2` -# VX_FCST_MODEL_NAME=${VX_FCST_MODEL_NAME}_${ENSMEM} -#fi - -# -#----------------------------------------------------------------------- -# -# Check for existence of top-level OBS_DIR -# -#----------------------------------------------------------------------- -# -if [[ ! -d "$OBS_DIR" ]]; then - print_err_msg_exit "\ - Exiting: OBS_DIR does not exist." - exit -fi - -# -#----------------------------------------------------------------------- -# -# Export some environment variables passed in by the XML -# -#----------------------------------------------------------------------- -# -export EXPTDIR -export LOG_SUFFIX -export MET_INSTALL_DIR -export MET_BIN_EXEC -export METPLUS_PATH -export METPLUS_CONF -export MET_CONFIG -export VX_FCST_MODEL_NAME -export NET -export POST_OUTPUT_DOMAIN_NAME - -# -#----------------------------------------------------------------------- -# -# Run METplus -# -#----------------------------------------------------------------------- -# -if [ ${VAR} == "APCP" ]; then - export acc="${ACCUM_HH}h" # for stats output prefix in GridStatConfig - ${METPLUS_PATH}/ush/run_metplus.py \ - -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/GridStat_${VAR}${acc}.conf -else - ${METPLUS_PATH}/ush/run_metplus.py \ - -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/GridStat_${VAR}.conf -fi - -# -#----------------------------------------------------------------------- -# -# Print message indicating successful completion of script. -# -#----------------------------------------------------------------------- -# -print_info_msg " -======================================================================== -METplus grid-stat completed successfully. - -Exiting script: \"${scrfunc_fn}\" -In directory: \"${scrfunc_dir}\" -========================================================================" -# -#----------------------------------------------------------------------- -# -# 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_gridstat_vx_ensmean.sh b/scripts/exregional_run_met_gridstat_vx_ensmean.sh deleted file mode 100755 index 9c8a3d6370..0000000000 --- a/scripts/exregional_run_met_gridstat_vx_ensmean.sh +++ /dev/null @@ -1,190 +0,0 @@ -#!/bin/bash - -# -#----------------------------------------------------------------------- -# -# Source the variable definitions file and the bash utility functions. -# -#----------------------------------------------------------------------- -# -. $USHdir/source_util_funcs.sh -source_config_for_task "task_run_vx_ensgrid_mean|task_run_post" ${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 -# -#----------------------------------------------------------------------- -# -# 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 ex-script for the task that runs METplus for grid-stat on -the UPP output files by initialization time for all forecast hours for -gridded data. -========================================================================" - -#----------------------------------------------------------------------- -# -# Begin grid-to-grid vx on ensemble output. -# -#----------------------------------------------------------------------- -# -print_info_msg "$VERBOSE" "Starting grid-stat verification" - -# -#----------------------------------------------------------------------- -# -# Get the cycle date and hour (in formats of yyyymmdd and hh, respect- -# ively) from CDATE. Also read in FHR and create a comma-separated list -# for METplus to run over. -# -#----------------------------------------------------------------------- -# -yyyymmdd=${PDY} -hh=${cyc} -export CDATE -export hh - -fhr_last=`echo ${FHR} | awk '{ print $NF }'` -export fhr_last - -fhr_list=`echo ${FHR} | $SED "s/ /,/g"` -export fhr_list - -# -#----------------------------------------------------------------------- -# -# Pick a directory structure for METplus output files -# -#----------------------------------------------------------------------- -# -if [ $RUN_ENVIR = "nco" ]; then - export INPUT_BASE=$COMOUT/metout/${CDATE}/metprd/EnsembleStat - export OUTPUT_BASE=$COMOUT/metout - export MEM_BASE=$OUTPUT_BASE - export LOG_DIR=$LOGDIR - - export POSTPRD= - export MEM_STAR= - export MEM_CUSTOM= - export DOT_MEM_CUSTOM=".{custom?fmt=%s}" -else - export INPUT_BASE=${EXPTDIR}/${CDATE}/metprd/EnsembleStat - export OUTPUT_BASE=$EXPTDIR - export MEM_BASE=$EXPTDIR/$CDATE - export LOG_DIR=${EXPTDIR}/log - - export POSTPRD="postprd/" - export MEM_STAR="mem*/" - export MEM_CUSTOM="{custom?fmt=%s}/" - export DOT_MEM_CUSTOM= -fi -export DOT_ENSMEM=${dot_ensmem} - -# -#----------------------------------------------------------------------- -# -# Create INPUT_BASE and LOG_SUFFIX to read into METplus conf files. -# -#----------------------------------------------------------------------- -# - -if [ ${VAR} == "APCP" ]; then - LOG_SUFFIX=GridStat_ensmean_${VAR}${ACCUM_HH}h_${CDATE} -else - LOG_SUFFIX=GridStat_ensmean_${VAR}_${CDATE} -fi - -# -#----------------------------------------------------------------------- -# -# Check for existence of top-level OBS_DIR. -# -#----------------------------------------------------------------------- -# -if [[ ! -d "$OBS_DIR" ]]; then - print_err_msg_exit "\ - Exiting: OBS_DIR does not exist." -fi -# -#----------------------------------------------------------------------- -# -# Export some environment variables passed in by the XML -# -#----------------------------------------------------------------------- -# -export MET_INSTALL_DIR -export MET_BIN_EXEC -export METPLUS_PATH -export METPLUS_CONF -export MET_CONFIG -export VX_FCST_MODEL_NAME -export NET -export POST_OUTPUT_DOMAIN_NAME -export LOG_SUFFIX - -# -#----------------------------------------------------------------------- -# -# Run METplus -# -#----------------------------------------------------------------------- -# -if [ ${VAR} == "APCP" ]; then - export acc="${ACCUM_HH}h" - ${METPLUS_PATH}/ush/run_metplus.py \ - -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/GridStat_ensmean_${VAR}${acc}.conf -else - ${METPLUS_PATH}/ush/run_metplus.py \ - -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/GridStat_ensmean_${VAR}.conf -fi - -# -#----------------------------------------------------------------------- -# -# Print message indicating successful completion of script. -# -#----------------------------------------------------------------------- -# -print_info_msg " -======================================================================== -METplus grid-stat completed successfully. - -Exiting script: \"${scrfunc_fn}\" -In directory: \"${scrfunc_dir}\" -========================================================================" -# -#----------------------------------------------------------------------- -# -# 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_gridstat_vx_ensprob.sh b/scripts/exregional_run_met_gridstat_vx_ensprob.sh deleted file mode 100755 index 914c67824b..0000000000 --- a/scripts/exregional_run_met_gridstat_vx_ensprob.sh +++ /dev/null @@ -1,191 +0,0 @@ -#!/bin/bash - -# -#----------------------------------------------------------------------- -# -# Source the variable definitions file and the bash utility functions. -# -#----------------------------------------------------------------------- -# -. $USHdir/source_util_funcs.sh -source_config_for_task "task_run_vx_ensgrid_prob|task_run_post" ${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 -# -#----------------------------------------------------------------------- -# -# 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 ex-script for the task that runs METplus for grid-stat on -the UPP output files by initialization time for all forecast hours for -gridded data. -========================================================================" - -#----------------------------------------------------------------------- -# -# Begin grid-to-grid vx on ensemble output. -# -#----------------------------------------------------------------------- -# -print_info_msg "$VERBOSE" "Starting grid-stat verification" - -# -#----------------------------------------------------------------------- -# -# Get the cycle date and hour (in formats of yyyymmdd and hh, respect- -# ively) from CDATE. Also read in FHR and create a comma-separated list -# for METplus to run over. -# -#----------------------------------------------------------------------- -# -yyyymmdd=${PDY} -hh=${cyc} -export CDATE -export hh - -fhr_last=`echo ${FHR} | awk '{ print $NF }'` -export fhr_last - -fhr_list=`echo ${FHR} | $SED "s/ /,/g"` -export fhr_list - -# -#----------------------------------------------------------------------- -# -# Pick a directory structure for METplus output files -# -#----------------------------------------------------------------------- -# -if [ $RUN_ENVIR = "nco" ]; then - export INPUT_BASE=$COMOUT/metout/${CDATE}/metprd/EnsembleStat - export OUTPUT_BASE=$COMOUT/metout - export MEM_BASE=$OUTPUT_BASE - export LOG_DIR=$LOGDIR - - export POSTPRD= - export MEM_STAR= - export MEM_CUSTOM= - export DOT_MEM_CUSTOM=".{custom?fmt=%s}" -else - export INPUT_BASE=${EXPTDIR}/${CDATE}/metprd/EnsembleStat - export OUTPUT_BASE=$EXPTDIR - export MEM_BASE=$EXPTDIR/$CDATE - export LOG_DIR=${EXPTDIR}/log - - export POSTPRD="postprd/" - export MEM_STAR="mem*/" - export MEM_CUSTOM="{custom?fmt=%s}/" - export DOT_MEM_CUSTOM= -fi -export DOT_ENSMEM=${dot_ensmem} - -# -#----------------------------------------------------------------------- -# -# Create INPUT_BASE and LOG_SUFFIX to read into METplus conf files. -# -#----------------------------------------------------------------------- -# - -if [ ${VAR} == "APCP" ]; then - LOG_SUFFIX=GridStat_ensprob_${VAR}${ACCUM_HH}h_${CDATE} -else - LOG_SUFFIX=GridStat_ensprob_${VAR}_${CDATE} -fi - -# -#----------------------------------------------------------------------- -# -# Check for existence of top-level OBS_DIR -# -#----------------------------------------------------------------------- -# -if [[ ! -d "$OBS_DIR" ]]; then - print_err_msg_exit "\ - Exiting: OBS_DIR does not exist." -fi - -# -#----------------------------------------------------------------------- -# -# Export some environment variables passed in by the XML -# -#----------------------------------------------------------------------- -# -export MET_INSTALL_DIR -export MET_BIN_EXEC -export METPLUS_PATH -export METPLUS_CONF -export MET_CONFIG -export VX_FCST_MODEL_NAME -export NET -export POST_OUTPUT_DOMAIN_NAME -export LOG_SUFFIX - -# -#----------------------------------------------------------------------- -# -# Run METplus -# -#----------------------------------------------------------------------- -# -if [ ${VAR} == "APCP" ]; then - export acc="${ACCUM_HH}h" - ${METPLUS_PATH}/ush/run_metplus.py \ - -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/GridStat_ensprob_${VAR}${acc}.conf -else - ${METPLUS_PATH}/ush/run_metplus.py \ - -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/GridStat_ensprob_${VAR}.conf -fi - -# -#----------------------------------------------------------------------- -# -# Print message indicating successful completion of script. -# -#----------------------------------------------------------------------- -# -print_info_msg " -======================================================================== -METplus grid-stat completed successfully. - -Exiting script: \"${scrfunc_fn}\" -In directory: \"${scrfunc_dir}\" -========================================================================" -# -#----------------------------------------------------------------------- -# -# 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_pointstat_vx.sh b/scripts/exregional_run_met_pointstat_vx.sh deleted file mode 100755 index d58e37a5bf..0000000000 --- a/scripts/exregional_run_met_pointstat_vx.sh +++ /dev/null @@ -1,189 +0,0 @@ -#!/bin/bash - -# -#----------------------------------------------------------------------- -# -# Source the variable definitions file and the bash utility functions. -# -#----------------------------------------------------------------------- -# -. $USHdir/source_util_funcs.sh -source_config_for_task "task_run_vx_pointstat|task_run_post" ${GLOBAL_VAR_DEFNS_FP} -# -#----------------------------------------------------------------------- -# -# Source files defining auxiliary functions for verification. -# -#----------------------------------------------------------------------- -# -. $USHdir/set_vx_params.sh -. $USHdir/set_vx_fhr_list.sh -# -#----------------------------------------------------------------------- -# -# Save current shell options (in a global array). Then set new options -# for this script/function. -# -#----------------------------------------------------------------------- -# -{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 -# -#----------------------------------------------------------------------- -# -# Get the full path to the file in which this script/function is located -# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in -# which the file is located (scrfunc_dir). -# -#----------------------------------------------------------------------- -# -scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) -scrfunc_fn=$( basename "${scrfunc_fp}" ) -scrfunc_dir=$( dirname "${scrfunc_fp}" ) -# -#----------------------------------------------------------------------- -# -# Print message indicating entry into script. -# -#----------------------------------------------------------------------- -# -print_info_msg " -======================================================================== -Entering script: \"${scrfunc_fn}\" -In directory: \"${scrfunc_dir}\" - -This is the ex-script for the task that runs METplus for point-stat on -the UPP output files by initialization time for all forecast hours. -========================================================================" - -# -#----------------------------------------------------------------------- -# -# Get the cycle date and hour (in formats of yyyymmdd and hh, respect- -# ively) from CDATE. Also read in FHR and create a comma-separated list -# for METplus to run over. -# -#----------------------------------------------------------------------- -# -yyyymmdd=${PDY} -hh=${cyc} -export CDATE -export hh -# -#----------------------------------------------------------------------- -# -# Pick a directory structure for METplus output files -# -#----------------------------------------------------------------------- -# -if [ $RUN_ENVIR = "nco" ]; then - export INPUT_BASE=$COMIN - export OUTPUT_BASE=$COMOUT/metout - export MEM_BASE=$OUTPUT_BASE - export LOG_DIR=$LOGDIR - - export POSTPRD= - export MEM_STAR= - export MEM_CUSTOM= - export DOT_MEM_CUSTOM=".{custom?fmt=%s}" -else - export INPUT_BASE=${VX_FCST_INPUT_BASEDIR}/${CDATE}${SLASH_ENSMEM_SUBDIR_OR_NULL}/postprd - export OUTPUT_BASE=${VX_OUTPUT_BASEDIR}/${CDATE}${SLASH_ENSMEM_SUBDIR_OR_NULL} - export MEM_BASE=$EXPTDIR/$CDATE - export LOG_DIR=${EXPTDIR}/log - - export POSTPRD="postprd/" - export MEM_STAR="mem*/" - export MEM_CUSTOM="{custom?fmt=%s}/" - export DOT_MEM_CUSTOM= -fi -export DOT_ENSMEM=${dot_ensmem} - -# -#----------------------------------------------------------------------- -# -# Create INPUT_BASE to read into METplus conf files. -# -#----------------------------------------------------------------------- -# -LOG_SUFFIX="PointStat" -#if [[ ${DO_ENSEMBLE} == "TRUE" ]]; then -# ENSMEM=`echo ${SLASH_ENSMEM_SUBDIR_OR_NULL} | cut -d"/" -f2` -# VX_FCST_MODEL_NAME=${VX_FCST_MODEL_NAME}_${ENSMEM} -#fi - -# -#----------------------------------------------------------------------- -# -# Set the array of forecast hours for which to run the MET/METplus tool. -# -#----------------------------------------------------------------------- -# -export OBS_INPUT_DIR="${VX_OUTPUT_BASEDIR}/metprd/Pb2nc_obs" -OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE} ) - -set_vx_fhr_list \ - cdate="${CDATE}" \ - fcst_len_hrs="${FCST_LEN_HRS}" \ - field="$VAR" \ - accum_hh="${ACCUM_HH}" \ - base_dir="${OBS_INPUT_DIR}" \ - fn_template="${OBS_INPUT_FN_TEMPLATE}" \ - check_hourly_files="FALSE" \ - outvarname_fhr_list="FHR_LIST" -# -#----------------------------------------------------------------------- -# -# Check for existence of top-level OBS_DIR -# -#----------------------------------------------------------------------- -# -if [[ ! -d "$OBS_DIR" ]]; then - print_err_msg_exit "\ - Exiting: OBS_DIR does not exist." -fi - -# -#----------------------------------------------------------------------- -# -# Export some environment variables passed in by the XML and run METplus -# -#----------------------------------------------------------------------- -# -export LOG_SUFFIX -export MET_INSTALL_DIR -export MET_BIN_EXEC -export METPLUS_PATH -export METPLUS_CONF -export MET_CONFIG -export VX_FCST_MODEL_NAME -export NET -export POST_OUTPUT_DOMAIN_NAME -export OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE=$( eval echo ${OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE} ) -export FHR_LIST - -${METPLUS_PATH}/ush/run_metplus.py \ - -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/PointStat_${VAR}.conf -# -#----------------------------------------------------------------------- -# -# Print message indicating successful completion of script. -# -#----------------------------------------------------------------------- -# -print_info_msg " -======================================================================== -METplus point-stat completed successfully. - -Exiting script: \"${scrfunc_fn}\" -In directory: \"${scrfunc_dir}\" -========================================================================" -# -#----------------------------------------------------------------------- -# -# 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_pointstat_vx_ensmean.sh b/scripts/exregional_run_met_pointstat_vx_ensmean.sh deleted file mode 100755 index ef814b480c..0000000000 --- a/scripts/exregional_run_met_pointstat_vx_ensmean.sh +++ /dev/null @@ -1,193 +0,0 @@ -#!/bin/bash - -# -#----------------------------------------------------------------------- -# -# Source the variable definitions file and the bash utility functions. -# -#----------------------------------------------------------------------- -# -. $USHdir/source_util_funcs.sh -source_config_for_task "task_run_vx_enspoint_mean|task_run_post" ${GLOBAL_VAR_DEFNS_FP} -# -#----------------------------------------------------------------------- -# -# Source files defining auxiliary functions for verification. -# -#----------------------------------------------------------------------- -# -. $USHdir/set_vx_params.sh -. $USHdir/set_vx_fhr_list.sh -# -#----------------------------------------------------------------------- -# -# Save current shell options (in a global array). Then set new options -# for this script/function. -# -#----------------------------------------------------------------------- -# -{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 -# -#----------------------------------------------------------------------- -# -# Get the full path to the file in which this script/function is located -# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in -# which the file is located (scrfunc_dir). -# -#----------------------------------------------------------------------- -# -scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) -scrfunc_fn=$( basename "${scrfunc_fp}" ) -scrfunc_dir=$( dirname "${scrfunc_fp}" ) -# -#----------------------------------------------------------------------- -# -# Print message indicating entry into script. -# -#----------------------------------------------------------------------- -# -print_info_msg " -======================================================================== -Entering script: \"${scrfunc_fn}\" -In directory: \"${scrfunc_dir}\" - -This is the ex-script for the task that runs METplus for point-stat on -the UPP output files by initialization time for all forecast hours. -========================================================================" - -# -#----------------------------------------------------------------------- -# -# Begin grid-to-point vx on ensemble output. -# -#----------------------------------------------------------------------- -# -print_info_msg "$VERBOSE" "Starting point-stat verification" - -# -#----------------------------------------------------------------------- -# -# Get the cycle date and hour (in formats of yyyymmdd and hh, respect- -# ively) from CDATE. Also read in FHR and create a comma-separated list -# for METplus to run over. -# -#----------------------------------------------------------------------- -# -yyyymmdd=${PDY} -hh=${cyc} -export CDATE -export hh -# -#----------------------------------------------------------------------- -# -# Pick a directory structure for METplus output files -# -#----------------------------------------------------------------------- -# -if [ $RUN_ENVIR = "nco" ]; then - export INPUT_BASE=$COMOUT/metout/${CDATE}/metprd/EnsembleStat - export OUTPUT_BASE=$COMOUT/metout - export MEM_BASE=$OUTPUT_BASE - export LOG_DIR=$LOGDIR - - export POSTPRD= - export MEM_STAR= - export MEM_CUSTOM= - export DOT_MEM_CUSTOM=".{custom?fmt=%s}" -else - export INPUT_BASE=${EXPTDIR}/${CDATE}/metprd/EnsembleStat - export OUTPUT_BASE=$EXPTDIR - export MEM_BASE=$EXPTDIR/$CDATE - export LOG_DIR=${EXPTDIR}/log - - export POSTPRD="postprd/" - export MEM_STAR="mem*/" - export MEM_CUSTOM="{custom?fmt=%s}/" - export DOT_MEM_CUSTOM= -fi -export DOT_ENSMEM=${dot_ensmem} - -# -#----------------------------------------------------------------------- -# -# Create INPUT_BASE and LOG_SUFFIX to read into METplus conf files. -# -#----------------------------------------------------------------------- -# -LOG_SUFFIX="PointStat" - -# -#----------------------------------------------------------------------- -# -# Set the array of forecast hours for which to run the MET/METplus tool. -# -#----------------------------------------------------------------------- -# -export OBS_INPUT_DIR="${VX_OUTPUT_BASEDIR}/metprd/Pb2nc_obs" -OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE} ) - -set_vx_fhr_list \ - cdate="${CDATE}" \ - fcst_len_hrs="${FCST_LEN_HRS}" \ - field="$VAR" \ - accum_hh="${ACCUM_HH}" \ - base_dir="${OBS_INPUT_DIR}" \ - fn_template="${OBS_INPUT_FN_TEMPLATE}" \ - check_hourly_files="FALSE" \ - outvarname_fhr_list="FHR_LIST" -# -#----------------------------------------------------------------------- -# -# Check for existence of top-level OBS_DIR -# -#----------------------------------------------------------------------- -# -if [[ ! -d "$OBS_DIR" ]]; then - print_err_msg_exit "\ - Exiting: OBS_DIR does not exist." -fi - -# -#----------------------------------------------------------------------- -# -# Export some environment variables passed in by the XML and run METplus -# -#----------------------------------------------------------------------- -# -export LOG_SUFFIX -export MET_INSTALL_DIR -export MET_BIN_EXEC -export METPLUS_PATH -export METPLUS_CONF -export MET_CONFIG -export VX_FCST_MODEL_NAME -export NET -export POST_OUTPUT_DOMAIN_NAME -export FHR_LIST - -${METPLUS_PATH}/ush/run_metplus.py \ - -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/PointStat_ensmean_${VAR}.conf -# -#----------------------------------------------------------------------- -# -# Print message indicating successful completion of script. -# -#----------------------------------------------------------------------- -# -print_info_msg " -======================================================================== -METplus ensemble-stat completed successfully. - -Exiting script: \"${scrfunc_fn}\" -In directory: \"${scrfunc_dir}\" -========================================================================" -# -#----------------------------------------------------------------------- -# -# 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_pointstat_vx_ensprob.sh b/scripts/exregional_run_met_pointstat_vx_ensprob.sh deleted file mode 100755 index 649051ab96..0000000000 --- a/scripts/exregional_run_met_pointstat_vx_ensprob.sh +++ /dev/null @@ -1,193 +0,0 @@ -#!/bin/bash - -# -#----------------------------------------------------------------------- -# -# Source the variable definitions file and the bash utility functions. -# -#----------------------------------------------------------------------- -# -. $USHdir/source_util_funcs.sh -source_config_for_task "task_run_vx_enspoint_prob|task_run_post" ${GLOBAL_VAR_DEFNS_FP} -# -#----------------------------------------------------------------------- -# -# Source files defining auxiliary functions for verification. -# -#----------------------------------------------------------------------- -# -. $USHdir/set_vx_params.sh -. $USHdir/set_vx_fhr_list.sh -# -#----------------------------------------------------------------------- -# -# Save current shell options (in a global array). Then set new options -# for this script/function. -# -#----------------------------------------------------------------------- -# -{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 -# -#----------------------------------------------------------------------- -# -# Get the full path to the file in which this script/function is located -# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in -# which the file is located (scrfunc_dir). -# -#----------------------------------------------------------------------- -# -scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) -scrfunc_fn=$( basename "${scrfunc_fp}" ) -scrfunc_dir=$( dirname "${scrfunc_fp}" ) -# -#----------------------------------------------------------------------- -# -# Print message indicating entry into script. -# -#----------------------------------------------------------------------- -# -print_info_msg " -======================================================================== -Entering script: \"${scrfunc_fn}\" -In directory: \"${scrfunc_dir}\" - -This is the ex-script for the task that runs METplus for point-stat on -the UPP output files by initialization time for all forecast hours. -========================================================================" - -# -#----------------------------------------------------------------------- -# -# Begin grid-to-point vx on ensemble output. -# -#----------------------------------------------------------------------- -# -print_info_msg "$VERBOSE" "Starting point-stat verification" - -# -#----------------------------------------------------------------------- -# -# Get the cycle date and hour (in formats of yyyymmdd and hh, respect- -# ively) from CDATE. Also read in FHR and create a comma-separated list -# for METplus to run over. -# -#----------------------------------------------------------------------- -# -yyyymmdd=${PDY} -hh=${cyc} -export CDATE -export hh -# -#----------------------------------------------------------------------- -# -# Pick a directory structure for METplus output files -# -#----------------------------------------------------------------------- -# -if [ $RUN_ENVIR = "nco" ]; then - export INPUT_BASE=$COMOUT/metout/${CDATE}/metprd/EnsembleStat - export OUTPUT_BASE=$COMOUT/metout - export MEM_BASE=$OUTPUT_BASE - export LOG_DIR=$LOGDIR - - export POSTPRD= - export MEM_STAR= - export MEM_CUSTOM= - export DOT_MEM_CUSTOM=".{custom?fmt=%s}" -else - export INPUT_BASE=${EXPTDIR}/${CDATE}/metprd/EnsembleStat - export OUTPUT_BASE=$EXPTDIR - export MEM_BASE=$EXPTDIR/$CDATE - export LOG_DIR=${EXPTDIR}/log - - export POSTPRD="postprd/" - export MEM_STAR="mem*/" - export MEM_CUSTOM="{custom?fmt=%s}/" - export DOT_MEM_CUSTOM= -fi -export DOT_ENSMEM=${dot_ensmem} - -# -#----------------------------------------------------------------------- -# -# Create INPUT_BASE and LOG_SUFFIX to read into METplus conf files. -# -#----------------------------------------------------------------------- -# -LOG_SUFFIX="PointStat" - -# -#----------------------------------------------------------------------- -# -# Set the array of forecast hours for which to run the MET/METplus tool. -# -#----------------------------------------------------------------------- -# -export OBS_INPUT_DIR="${VX_OUTPUT_BASEDIR}/metprd/Pb2nc_obs" -OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE} ) - -set_vx_fhr_list \ - cdate="${CDATE}" \ - fcst_len_hrs="${FCST_LEN_HRS}" \ - field="$VAR" \ - accum_hh="${ACCUM_HH}" \ - base_dir="${OBS_INPUT_DIR}" \ - fn_template="${OBS_INPUT_FN_TEMPLATE}" \ - check_hourly_files="FALSE" \ - outvarname_fhr_list="FHR_LIST" -# -#----------------------------------------------------------------------- -# -# Check for existence of top-level OBS_DIR -# -#----------------------------------------------------------------------- -# -if [[ ! -d "$OBS_DIR" ]]; then - print_err_msg_exit "\ - Exiting: OBS_DIR does not exist." -fi - -# -#----------------------------------------------------------------------- -# -# Export some environment variables passed in by the XML and run METplus -# -#----------------------------------------------------------------------- -# -export LOG_SUFFIX -export MET_INSTALL_DIR -export MET_BIN_EXEC -export METPLUS_PATH -export METPLUS_CONF -export MET_CONFIG -export VX_FCST_MODEL_NAME -export NET -export POST_OUTPUT_DOMAIN_NAME -export FHR_LIST - -${METPLUS_PATH}/ush/run_metplus.py \ - -c ${METPLUS_CONF}/common.conf \ - -c ${METPLUS_CONF}/PointStat_ensprob_${VAR}.conf -# -#----------------------------------------------------------------------- -# -# Print message indicating successful completion of script. -# -#----------------------------------------------------------------------- -# -print_info_msg " -======================================================================== -METplus ensemble-stat completed successfully. - -Exiting script: \"${scrfunc_fn}\" -In directory: \"${scrfunc_dir}\" -========================================================================" -# -#----------------------------------------------------------------------- -# -# Restore the shell options saved at the beginning of this script/func- -# tion. -# -#----------------------------------------------------------------------- -# -{ restore_shell_opts; } > /dev/null 2>&1 From 757513269a736671d0030cfd1001c4b3a4057312 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Mon, 20 Mar 2023 10:14:47 -0600 Subject: [PATCH 097/119] Remove unneeded j-jobs. --- jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID | 86 -------------------- jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT | 77 ------------------ jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX | 86 -------------------- jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN | 86 -------------------- jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB | 86 -------------------- jobs/JREGIONAL_RUN_MET_POINTSTAT_VX | 77 ------------------ jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN | 77 ------------------ jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB | 77 ------------------ 8 files changed, 652 deletions(-) delete mode 100755 jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID delete mode 100755 jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT delete mode 100755 jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX delete mode 100755 jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN delete mode 100755 jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB delete mode 100755 jobs/JREGIONAL_RUN_MET_POINTSTAT_VX delete mode 100755 jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN delete mode 100755 jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB diff --git a/jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID b/jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID deleted file mode 100755 index 1606744259..0000000000 --- a/jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_GRID +++ /dev/null @@ -1,86 +0,0 @@ -#!/bin/bash - -# -#----------------------------------------------------------------------- -# -# This script runs METplus for ensemble-stat on the UPP output files by -# initialization time for all forecast hours for gridded analysis. -# -#----------------------------------------------------------------------- -# - -# -#----------------------------------------------------------------------- -# -# Source the variable definitions file and the bash utility functions. -# -#----------------------------------------------------------------------- -# -. $USHdir/source_util_funcs.sh -source_config_for_task "task_run_vx_ensgrid" ${GLOBAL_VAR_DEFNS_FP} -. $USHdir/job_preamble.sh -# -#----------------------------------------------------------------------- -# -# Save current shell options (in a global array). Then set new options -# for this script/function. -# -#----------------------------------------------------------------------- -# -{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 -# -#----------------------------------------------------------------------- -# -# Get the full path to the file in which this script/function is located -# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in -# which the file is located (scrfunc_dir). -# -#----------------------------------------------------------------------- -# -scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) -scrfunc_fn=$( basename "${scrfunc_fp}" ) -scrfunc_dir=$( dirname "${scrfunc_fp}" ) -# -#----------------------------------------------------------------------- -# -# Print message indicating entry into script. -# -#----------------------------------------------------------------------- -# -print_info_msg " -======================================================================== -Entering script: \"${scrfunc_fn}\" -In directory: \"${scrfunc_dir}\" - -This is the J-job script for the task that runs METplus for ensemble-stat -on gridded fields by initialization time for all forecast hours. -========================================================================" -# -#----------------------------------------------------------------------- -# -# Call the ex-script for this J-job and pass to it the necessary varia- -# bles. -# -#----------------------------------------------------------------------- -# -$SCRIPTSdir/exregional_run_met_ensemblestat_vx_grid.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/jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT b/jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT deleted file mode 100755 index 0e8df9f2f3..0000000000 --- a/jobs/JREGIONAL_RUN_MET_ENSEMBLESTAT_VX_POINT +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash - -# -#----------------------------------------------------------------------- -# -# Source the variable definitions file and the bash utility functions. -# -#----------------------------------------------------------------------- -# -. $USHdir/source_util_funcs.sh -source_config_for_task "task_run_vx_enspoint" ${GLOBAL_VAR_DEFNS_FP} -. $USHdir/job_preamble.sh -# -#----------------------------------------------------------------------- -# -# Save current shell options (in a global array). Then set new options -# for this script/function. -# -#----------------------------------------------------------------------- -# -{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 -# -#----------------------------------------------------------------------- -# -# Get the full path to the file in which this script/function is located -# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in -# which the file is located (scrfunc_dir). -# -#----------------------------------------------------------------------- -# -scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) -scrfunc_fn=$( basename "${scrfunc_fp}" ) -scrfunc_dir=$( dirname "${scrfunc_fp}" ) -# -#----------------------------------------------------------------------- -# -# Print message indicating entry into script. -# -#----------------------------------------------------------------------- -# -print_info_msg " -======================================================================== -Entering script: \"${scrfunc_fn}\" -In directory: \"${scrfunc_dir}\" - -This is the J-job script for the task that runs METplus for point-stat -by initialitation time for all forecast hours. -========================================================================" -# -#----------------------------------------------------------------------- -# -# Call the ex-script for this J-job and pass to it the necessary varia- -# bles. -# -#----------------------------------------------------------------------- -# -$SCRIPTSdir/exregional_run_met_ensemblestat_vx_point.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/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX b/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX deleted file mode 100755 index a51a44dae2..0000000000 --- a/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX +++ /dev/null @@ -1,86 +0,0 @@ -#!/bin/bash - -# -#----------------------------------------------------------------------- -# -# This script runs METplus for grid-stat on the UPP output files by -# initialization time for all forecast hours. -# -#----------------------------------------------------------------------- -# - -# -#----------------------------------------------------------------------- -# -# Source the variable definitions file and the bash utility functions. -# -#----------------------------------------------------------------------- -# -. $USHdir/source_util_funcs.sh -source_config_for_task "task_run_vx_gridstat" ${GLOBAL_VAR_DEFNS_FP} -. $USHdir/job_preamble.sh -# -#----------------------------------------------------------------------- -# -# Save current shell options (in a global array). Then set new options -# for this script/function. -# -#----------------------------------------------------------------------- -# -{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 -# -#----------------------------------------------------------------------- -# -# Get the full path to the file in which this script/function is located -# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in -# which the file is located (scrfunc_dir). -# -#----------------------------------------------------------------------- -# -scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) -scrfunc_fn=$( basename "${scrfunc_fp}" ) -scrfunc_dir=$( dirname "${scrfunc_fp}" ) -# -#----------------------------------------------------------------------- -# -# Print message indicating entry into script. -# -#----------------------------------------------------------------------- -# -print_info_msg " -======================================================================== -Entering script: \"${scrfunc_fn}\" -In directory: \"${scrfunc_dir}\" - -This is the J-job script for the task that runs METplus for grid-stat -by initialization time for all forecast hours. -========================================================================" -# -#----------------------------------------------------------------------- -# -# Call the ex-script for this J-job and pass to it the necessary varia- -# bles. -# -#----------------------------------------------------------------------- -# -$SCRIPTSdir/exregional_run_met_gridstat_vx.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/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN b/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN deleted file mode 100755 index 6cc5001d33..0000000000 --- a/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSMEAN +++ /dev/null @@ -1,86 +0,0 @@ -#!/bin/bash - -# -#----------------------------------------------------------------------- -# -# This script runs METplus for grid-stat on the UPP output files by -# initialization time for all forecast hours for gridded analysis. -# -#----------------------------------------------------------------------- -# - -# -#----------------------------------------------------------------------- -# -# Source the variable definitions file and the bash utility functions. -# -#----------------------------------------------------------------------- -# -. $USHdir/source_util_funcs.sh -source_config_for_task "task_run_vx_ensgrid_mean" ${GLOBAL_VAR_DEFNS_FP} -. $USHdir/job_preamble.sh -# -#----------------------------------------------------------------------- -# -# Save current shell options (in a global array). Then set new options -# for this script/function. -# -#----------------------------------------------------------------------- -# -{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 -# -#----------------------------------------------------------------------- -# -# Get the full path to the file in which this script/function is located -# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in -# which the file is located (scrfunc_dir). -# -#----------------------------------------------------------------------- -# -scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) -scrfunc_fn=$( basename "${scrfunc_fp}" ) -scrfunc_dir=$( dirname "${scrfunc_fp}" ) -# -#----------------------------------------------------------------------- -# -# Print message indicating entry into script. -# -#----------------------------------------------------------------------- -# -print_info_msg " -======================================================================== -Entering script: \"${scrfunc_fn}\" -In directory: \"${scrfunc_dir}\" - -This is the J-job script for the task that runs METplus for grid-stat -on gridded fields by initialization time for all forecast hours. -========================================================================" -# -#----------------------------------------------------------------------- -# -# Call the ex-script for this J-job and pass to it the necessary varia- -# bles. -# -#----------------------------------------------------------------------- -# -$SCRIPTSdir/exregional_run_met_gridstat_vx_ensmean.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/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB b/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB deleted file mode 100755 index 5d8590c09c..0000000000 --- a/jobs/JREGIONAL_RUN_MET_GRIDSTAT_VX_ENSPROB +++ /dev/null @@ -1,86 +0,0 @@ -#!/bin/bash - -# -#----------------------------------------------------------------------- -# -# This script runs METplus for grid-stat on the UPP output files by -# initialization time for all forecast hours for gridded analysis. -# -#----------------------------------------------------------------------- -# - -# -#----------------------------------------------------------------------- -# -# Source the variable definitions file and the bash utility functions. -# -#----------------------------------------------------------------------- -# -. $USHdir/source_util_funcs.sh -source_config_for_task "task_run_vx_ensgrid_prob" ${GLOBAL_VAR_DEFNS_FP} -. $USHdir/job_preamble.sh -# -#----------------------------------------------------------------------- -# -# Save current shell options (in a global array). Then set new options -# for this script/function. -# -#----------------------------------------------------------------------- -# -{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 -# -#----------------------------------------------------------------------- -# -# Get the full path to the file in which this script/function is located -# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in -# which the file is located (scrfunc_dir). -# -#----------------------------------------------------------------------- -# -scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) -scrfunc_fn=$( basename "${scrfunc_fp}" ) -scrfunc_dir=$( dirname "${scrfunc_fp}" ) -# -#----------------------------------------------------------------------- -# -# Print message indicating entry into script. -# -#----------------------------------------------------------------------- -# -print_info_msg " -======================================================================== -Entering script: \"${scrfunc_fn}\" -In directory: \"${scrfunc_dir}\" - -This is the J-job script for the task that runs METplus for grid-stat -on gridded fields by initialization time for all forecast hours. -========================================================================" -# -#----------------------------------------------------------------------- -# -# Call the ex-script for this J-job and pass to it the necessary varia- -# bles. -# -#----------------------------------------------------------------------- -# -$SCRIPTSdir/exregional_run_met_gridstat_vx_ensprob.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/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX b/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX deleted file mode 100755 index 37151ff0fd..0000000000 --- a/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash - -# -#----------------------------------------------------------------------- -# -# Source the variable definitions file and the bash utility functions. -# -#----------------------------------------------------------------------- -# -. $USHdir/source_util_funcs.sh -source_config_for_task "task_run_vx_pointstat" ${GLOBAL_VAR_DEFNS_FP} -. $USHdir/job_preamble.sh -# -#----------------------------------------------------------------------- -# -# Save current shell options (in a global array). Then set new options -# for this script/function. -# -#----------------------------------------------------------------------- -# -{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 -# -#----------------------------------------------------------------------- -# -# Get the full path to the file in which this script/function is located -# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in -# which the file is located (scrfunc_dir). -# -#----------------------------------------------------------------------- -# -scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) -scrfunc_fn=$( basename "${scrfunc_fp}" ) -scrfunc_dir=$( dirname "${scrfunc_fp}" ) -# -#----------------------------------------------------------------------- -# -# Print message indicating entry into script. -# -#----------------------------------------------------------------------- -# -print_info_msg " -======================================================================== -Entering script: \"${scrfunc_fn}\" -In directory: \"${scrfunc_dir}\" - -This is the J-job script for the task that runs METplus for point-stat -by initialitation time for all forecast hours. -========================================================================" -# -#----------------------------------------------------------------------- -# -# Call the ex-script for this J-job and pass to it the necessary varia- -# bles. -# -#----------------------------------------------------------------------- -# -$SCRIPTSdir/exregional_run_met_pointstat_vx.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/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN b/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN deleted file mode 100755 index a73a475a0c..0000000000 --- a/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSMEAN +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash - -# -#----------------------------------------------------------------------- -# -# Source the variable definitions file and the bash utility functions. -# -#----------------------------------------------------------------------- -# -. $USHdir/source_util_funcs.sh -source_config_for_task "task_run_vx_enspoint_mean" ${GLOBAL_VAR_DEFNS_FP} -. $USHdir/job_preamble.sh -# -#----------------------------------------------------------------------- -# -# Save current shell options (in a global array). Then set new options -# for this script/function. -# -#----------------------------------------------------------------------- -# -{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 -# -#----------------------------------------------------------------------- -# -# Get the full path to the file in which this script/function is located -# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in -# which the file is located (scrfunc_dir). -# -#----------------------------------------------------------------------- -# -scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) -scrfunc_fn=$( basename "${scrfunc_fp}" ) -scrfunc_dir=$( dirname "${scrfunc_fp}" ) -# -#----------------------------------------------------------------------- -# -# Print message indicating entry into script. -# -#----------------------------------------------------------------------- -# -print_info_msg " -======================================================================== -Entering script: \"${scrfunc_fn}\" -In directory: \"${scrfunc_dir}\" - -This is the J-job script for the task that runs METplus for point-stat -by initialitation time for all forecast hours. -========================================================================" -# -#----------------------------------------------------------------------- -# -# Call the ex-script for this J-job and pass to it the necessary varia- -# bles. -# -#----------------------------------------------------------------------- -# -$SCRIPTSdir/exregional_run_met_pointstat_vx_ensmean.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/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB b/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB deleted file mode 100755 index af4874b560..0000000000 --- a/jobs/JREGIONAL_RUN_MET_POINTSTAT_VX_ENSPROB +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash - -# -#----------------------------------------------------------------------- -# -# Source the variable definitions file and the bash utility functions. -# -#----------------------------------------------------------------------- -# -. $USHdir/source_util_funcs.sh -source_config_for_task "task_run_vx_enspoint_prob" ${GLOBAL_VAR_DEFNS_FP} -. $USHdir/job_preamble.sh -# -#----------------------------------------------------------------------- -# -# Save current shell options (in a global array). Then set new options -# for this script/function. -# -#----------------------------------------------------------------------- -# -{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 -# -#----------------------------------------------------------------------- -# -# Get the full path to the file in which this script/function is located -# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in -# which the file is located (scrfunc_dir). -# -#----------------------------------------------------------------------- -# -scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) -scrfunc_fn=$( basename "${scrfunc_fp}" ) -scrfunc_dir=$( dirname "${scrfunc_fp}" ) -# -#----------------------------------------------------------------------- -# -# Print message indicating entry into script. -# -#----------------------------------------------------------------------- -# -print_info_msg " -======================================================================== -Entering script: \"${scrfunc_fn}\" -In directory: \"${scrfunc_dir}\" - -This is the J-job script for the task that runs METplus for point-stat -by initialitation time for all forecast hours. -========================================================================" -# -#----------------------------------------------------------------------- -# -# Call the ex-script for this J-job and pass to it the necessary varia- -# bles. -# -#----------------------------------------------------------------------- -# -$SCRIPTSdir/exregional_run_met_pointstat_vx_ensprob.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 - From afa4d886c3addc3e0f0eee0f8c5526a991a921e4 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Mon, 20 Mar 2023 11:20:07 -0600 Subject: [PATCH 098/119] Add files left out of previous commits. --- ...JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX | 109 +++++ ...gional_run_met_gridstat_or_pointstat_vx.sh | 422 ++++++++++++++++++ ...un_met_gridstat_or_pointstat_vx_ensmean.sh | 414 +++++++++++++++++ ...un_met_gridstat_or_pointstat_vx_ensprob.sh | 376 ++++++++++++++++ 4 files changed, 1321 insertions(+) create mode 100755 jobs/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX create mode 100755 scripts/exregional_run_met_gridstat_or_pointstat_vx.sh create mode 100755 scripts/exregional_run_met_gridstat_or_pointstat_vx_ensmean.sh create mode 100755 scripts/exregional_run_met_gridstat_or_pointstat_vx_ensprob.sh diff --git a/jobs/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX b/jobs/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX new file mode 100755 index 0000000000..5b327fcd33 --- /dev/null +++ b/jobs/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX @@ -0,0 +1,109 @@ +#!/bin/bash + +# +#----------------------------------------------------------------------- +# +# This script runs the METplus GridStat or PointStat tool for deterministic +# verification. +# +#----------------------------------------------------------------------- +# + +# +#----------------------------------------------------------------------- +# +# Source the variable definitions file and the bash utility functions. +# +#----------------------------------------------------------------------- +# +. $USHdir/source_util_funcs.sh +source_config_for_task "task_run_vx_gridstat" ${GLOBAL_VAR_DEFNS_FP} +. $USHdir/job_preamble.sh +# +#----------------------------------------------------------------------- +# +# Save current shell options (in a global array). Then set new options +# for this script/function. +# +#----------------------------------------------------------------------- +# +{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 +# +#----------------------------------------------------------------------- +# +# Get the full path to the file in which this script/function is located +# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in +# which the file is located (scrfunc_dir). +# +#----------------------------------------------------------------------- +# +scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) +scrfunc_fn=$( basename "${scrfunc_fp}" ) +scrfunc_dir=$( dirname "${scrfunc_fp}" ) +# +#----------------------------------------------------------------------- +# +# Print message indicating entry into script. +# +#----------------------------------------------------------------------- +# +print_info_msg " +======================================================================== +Entering script: \"${scrfunc_fn}\" +In directory: \"${scrfunc_dir}\" + +This is the J-job script for the task that runs MET/METplus's GridStat +or PointStat tool to perform deterministic verification on a specified +field (or group of fields). +========================================================================" +# +#----------------------------------------------------------------------- +# +# Set the name of the MET/METplus tool this task will call. (Note: "sc" +# is for "snake case", i.e. using underscores as separators, and "pc" is +# for "Pascal case", i.e. no separators but first letter of each word +# capitalized.) +# +#----------------------------------------------------------------------- +# +valid_vals_MET_TOOL=( "GRIDSTAT" "POINTSTAT" ) +check_var_valid_value "MET_TOOL" "valid_vals_MET_TOOL" + +if [ "${MET_TOOL}" = "GRIDSTAT" ]; then + met_tool_sc="grid_stat" + met_tool_pc="GridStat" +elif [ "${MET_TOOL}" = "POINTSTAT" ]; then + met_tool_sc="point_stat" + met_tool_pc="PointStat" +fi +# +#----------------------------------------------------------------------- +# +# Call the ex-script for this J-job and pass to it the necessary varia- +# bles. +# +#----------------------------------------------------------------------- +# +$SCRIPTSdir/exregional_run_met_gridstat_or_pointstat_vx.sh \ + met_tool_sc="${met_tool_sc}" \ + met_tool_pc="${met_tool_pc}" || \ +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/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh b/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh new file mode 100755 index 0000000000..5c549ffd06 --- /dev/null +++ b/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh @@ -0,0 +1,422 @@ +#!/bin/bash + +# +#----------------------------------------------------------------------- +# +# Source the variable definitions file and the bash utility functions. +# +#----------------------------------------------------------------------- +# +. $USHdir/source_util_funcs.sh +source_config_for_task "task_run_vx_gridstat|task_run_vx_pointstat|task_run_post" ${GLOBAL_VAR_DEFNS_FP} +# +#----------------------------------------------------------------------- +# +# Source files defining auxiliary functions for verification. +# +#----------------------------------------------------------------------- +# +. $USHdir/set_vx_params.sh +. $USHdir/set_vx_fhr_list.sh +# +#----------------------------------------------------------------------- +# +# Save current shell options (in a global array). Then set new options +# for this script/function. +# +#----------------------------------------------------------------------- +# +{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 +# +#----------------------------------------------------------------------- +# +# Get the full path to the file in which this script/function is located +# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in +# which the file is located (scrfunc_dir). +# +#----------------------------------------------------------------------- +# +scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) +scrfunc_fn=$( basename "${scrfunc_fp}" ) +scrfunc_dir=$( dirname "${scrfunc_fp}" ) +# +#----------------------------------------------------------------------- +# +# Specify the set of valid argument names for this script/function. +# Then process the arguments provided to this script/function (which +# should consist of a set of name-value pairs of the form arg1="value1", +# etc). +# +#----------------------------------------------------------------------- +# +valid_args=( \ + "met_tool_sc" \ + "met_tool_pc" \ + ) +process_args valid_args "$@" +# +#----------------------------------------------------------------------- +# +# For debugging purposes, print out values of arguments passed to this +# script. Note that these will be printed out only if VERBOSE is set to +# TRUE. +# +#----------------------------------------------------------------------- +# +print_input_args "valid_args" +# +#----------------------------------------------------------------------- +# +# Print message indicating entry into script. +# +#----------------------------------------------------------------------- +# +print_info_msg " +======================================================================== +Entering script: \"${scrfunc_fn}\" +In directory: \"${scrfunc_dir}\" + +This is the ex-script for the task that runs the METplus ${met_tool_pc} +tool to perform deterministic verification of the specified field (VAR) +for a single forecast. +========================================================================" +# +#----------------------------------------------------------------------- +# +# Get the cycle date and time in YYYYMMDDHH format. +# +#----------------------------------------------------------------------- +# +CDATE="${PDY}${cyc}" +# +#----------------------------------------------------------------------- +# +# Set various verification parameters associated with the field to be +# verified. Not all of these are necessarily used later below but are +# set here for consistency with other verification ex-scripts. +# +#----------------------------------------------------------------------- +# +FIELDNAME_IN_OBS_INPUT="" +FIELDNAME_IN_FCST_INPUT="" +FIELDNAME_IN_MET_OUTPUT="" +FIELDNAME_IN_MET_FILEDIR_NAMES="" + +set_vx_params \ + obtype="${OBTYPE}" \ + field="$VAR" \ + accum_hh="${ACCUM_HH}" \ + outvarname_grid_or_point="grid_or_point" \ + outvarname_field_is_APCPgt01h="field_is_APCPgt01h" \ + outvarname_fieldname_in_obs_input="FIELDNAME_IN_OBS_INPUT" \ + outvarname_fieldname_in_fcst_input="FIELDNAME_IN_FCST_INPUT" \ + outvarname_fieldname_in_MET_output="FIELDNAME_IN_MET_OUTPUT" \ + outvarname_fieldname_in_MET_filedir_names="FIELDNAME_IN_MET_FILEDIR_NAMES" +# +#----------------------------------------------------------------------- +# +# If performing ensemble verification, get the time lag (if any) of the +# current ensemble forecast member. The time lag is the duration (in +# seconds) by which the current forecast member was initialized before +# the current cycle date and time (with the latter specified by CDATE). +# For example, a time lag of 3600 means that the current member was +# initialized 1 hour before the current CDATE, while a time lag of 0 +# means the current member was initialized on CDATE. +# +# Note that if we're not running ensemble verification (i.e. if we're +# running verification for a single deterministic forecast), the time +# lag gets set to 0. +# +#----------------------------------------------------------------------- +# +time_lag=$(( (${MEM_INDX_OR_NULL:+${ENS_TIME_LAG_HRS[${MEM_INDX_OR_NULL}-1]}}+0) )) +# Convert to seconds. We do this as a separate step using bc because +# bash's $((...)) arithmetic operator can't handle floats well. +time_lag=$( bc -l <<< "${time_lag}*${SECS_PER_HOUR}" ) +# +#----------------------------------------------------------------------- +# +# Set additional field-dependent verification parameters. +# +#----------------------------------------------------------------------- +# +if [ "${grid_or_point}" = "grid" ]; then + + case "${FIELDNAME_IN_MET_FILEDIR_NAMES}" in + "APCP01h") + FIELD_THRESHOLDS="gt0.0, ge0.254, ge0.508, ge1.27, ge2.54" + ;; + "APCP03h") + FIELD_THRESHOLDS="gt0.0, ge0.254, ge0.508, ge1.27, ge2.54, ge3.810, ge6.350" + ;; + "APCP06h") + FIELD_THRESHOLDS="gt0.0, ge0.254, ge0.508, ge1.27, ge2.54, ge3.810, ge6.350, ge8.890, ge12.700" + ;; + "APCP24h") + FIELD_THRESHOLDS="gt0.0, ge0.254, ge0.508, ge1.27, ge2.54, ge3.810, ge6.350, ge8.890, ge12.700, ge25.400" + ;; + "REFC") + FIELD_THRESHOLDS="ge20, ge30, ge40, ge50" + ;; + "RETOP") + FIELD_THRESHOLDS="ge20, ge30, ge40, ge50" + ;; + *) + print_err_msg_exit "\ +Verification parameters have not been defined for this field +(FIELDNAME_IN_MET_FILEDIR_NAMES): + FIELDNAME_IN_MET_FILEDIR_NAMES = \"${FIELDNAME_IN_MET_FILEDIR_NAMES}\"" + ;; + esac + +elif [ "${grid_or_point}" = "point" ]; then + + FIELD_THRESHOLDS="" + +fi +# +#----------------------------------------------------------------------- +# +# Set paths and file templates for input to and output from the MET/ +# METplus tool to be run as well as other file/directory parameters. +# +#----------------------------------------------------------------------- +# +if [ "${grid_or_point}" = "grid" ]; then + + OBS_INPUT_FN_TEMPLATE="" + 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_DIR="${VX_OUTPUT_BASEDIR}/${CDATE}${SLASH_ENSMEM_SUBDIR_OR_NULL}/metprd/PcpCombine_fcst" + FCST_INPUT_FN_TEMPLATE=$( eval echo ${FCST_FN_METPROC_TEMPLATE} ) + else + OBS_INPUT_DIR="${OBS_DIR}" + case "${FIELDNAME_IN_MET_FILEDIR_NAMES}" in + "APCP01h") + OBS_INPUT_FN_TEMPLATE="${OBS_CCPA_APCP01h_FN_TEMPLATE}" + ;; + "REFC") + OBS_INPUT_FN_TEMPLATE="${OBS_MRMS_REFC_FN_TEMPLATE}" + ;; + "RETOP") + OBS_INPUT_FN_TEMPLATE="${OBS_MRMS_RETOP_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_FN_TEMPLATE} ) + fi + +elif [ "${grid_or_point}" = "point" ]; then + + OBS_INPUT_DIR="${VX_OUTPUT_BASEDIR}/metprd/Pb2nc_obs" + OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE} ) + FCST_INPUT_DIR="${VX_FCST_INPUT_BASEDIR}" + FCST_INPUT_FN_TEMPLATE=$( eval echo ${FCST_SUBDIR_TEMPLATE}/${FCST_FN_TEMPLATE} ) + +fi + +OUTPUT_BASE="${VX_OUTPUT_BASEDIR}/${CDATE}${SLASH_ENSMEM_SUBDIR_OR_NULL}" +OUTPUT_DIR="${OUTPUT_BASE}/metprd/${met_tool_pc}" +STAGING_DIR="${OUTPUT_BASE}/stage/${FIELDNAME_IN_MET_FILEDIR_NAMES}" +LOG_SUFFIX="_${FIELDNAME_IN_MET_FILEDIR_NAMES}${USCORE_ENSMEM_NAME_OR_NULL}_${CDATE}" +# +#----------------------------------------------------------------------- +# +# Set the array of forecast hours for which to run the MET/METplus tool. +# +#----------------------------------------------------------------------- +# +set_vx_fhr_list \ + cdate="${CDATE}" \ + fcst_len_hrs="${FCST_LEN_HRS}" \ + field="$VAR" \ + accum_hh="${ACCUM_HH}" \ + base_dir="${OBS_INPUT_DIR}" \ + fn_template="${OBS_INPUT_FN_TEMPLATE}" \ + check_hourly_files="FALSE" \ + outvarname_fhr_list="FHR_LIST" +# +#----------------------------------------------------------------------- +# +# Make sure the MET/METplus output directory(ies) exists. +# +#----------------------------------------------------------------------- +# +mkdir_vrfy -p "${OUTPUT_DIR}" +# +#----------------------------------------------------------------------- +# +# Check for existence of top-level OBS_DIR. +# +#----------------------------------------------------------------------- +# +if [ ! -d "${OBS_DIR}" ]; then + print_err_msg_exit "\ +OBS_DIR does not exist or is not a directory: + OBS_DIR = \"${OBS_DIR}\"" +fi +# +#----------------------------------------------------------------------- +# +# Export variables needed in the common METplus configuration file (at +# ${METPLUS_CONF}/common.conf). +# +#----------------------------------------------------------------------- +# +export MET_INSTALL_DIR +export METPLUS_PATH +export MET_BIN_EXEC +export METPLUS_CONF +export LOGDIR +# +#----------------------------------------------------------------------- +# +# Do not run METplus if there isn't at least one valid forecast hour for +# which to run it. +# +#----------------------------------------------------------------------- +# +if [ -z "${FHR_LIST}" ]; then + print_err_msg_exit "\ +The list of forecast hours for which to run METplus is empty: + FHR_LIST = [${FHR_LIST}]" +fi +# +#----------------------------------------------------------------------- +# +# Set the names of the template METplus configuration file, the METplus +# configuration file generated from this template, and the METplus log +# file. +# +#----------------------------------------------------------------------- +# +# First, set the base file names. +# +if [ "${field_is_APCPgt01h}" = "TRUE" ]; then + metplus_config_tmpl_fn="APCPgt01h" +else + metplus_config_tmpl_fn="${FIELDNAME_IN_MET_FILEDIR_NAMES}" +fi +metplus_config_tmpl_fn="${met_tool_pc}_${metplus_config_tmpl_fn}" +metplus_config_fn="${met_tool_pc}_${FIELDNAME_IN_MET_FILEDIR_NAMES}" +metplus_log_fn="${metplus_config_fn}${USCORE_ENSMEM_NAME_OR_NULL}" +# +# 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_log_fn="metplus.log.${metplus_log_fn}" +# +#----------------------------------------------------------------------- +# +# Generate the METplus configuration file from its jinja template. +# +#----------------------------------------------------------------------- +# +# Set the full paths to the jinja template METplus configuration file +# (which already exists) and the METplus configuration file that will be +# generated from it. +# +metplus_config_tmpl_fp="${METPLUS_CONF}/${metplus_config_tmpl_fn}" +metplus_config_fp="${OUTPUT_DIR}/${metplus_config_fn}" +# +# Define variables that appear in the jinja template. +# +settings="\ +# +# Date and forecast hour information. +# + 'cdate': '$CDATE' + 'fhr_list': '${FHR_LIST}' +# +# Input and output directory/file information. +# + 'metplus_config_fn': '${metplus_config_fn:-}' + 'metplus_log_fn': '${metplus_log_fn:-}' + 'obs_input_dir': '${OBS_INPUT_DIR:-}' + 'obs_input_fn_template': '${OBS_INPUT_FN_TEMPLATE:-}' + 'fcst_input_dir': '${FCST_INPUT_DIR:-}' + 'fcst_input_fn_template': '${FCST_INPUT_FN_TEMPLATE:-}' + 'output_base': '${OUTPUT_BASE}' + 'output_dir': '${OUTPUT_DIR}' + 'output_fn_template': '${OUTPUT_FN_TEMPLATE:-}' + 'staging_dir': '${STAGING_DIR}' + 'vx_fcst_model_name': '${VX_FCST_MODEL_NAME}' +# +# Ensemble and member-specific information. +# + 'num_ens_members': '${NUM_ENS_MEMBERS}' + 'uscore_ensmem_name_or_null': '${USCORE_ENSMEM_NAME_OR_NULL:-}' + 'time_lag': '${time_lag:-}' +# +# Field information. +# + 'fieldname_in_obs_input': '${FIELDNAME_IN_OBS_INPUT}' + 'fieldname_in_fcst_input': '${FIELDNAME_IN_FCST_INPUT}' + 'fieldname_in_met_output': '${FIELDNAME_IN_MET_OUTPUT}' + 'fieldname_in_met_filedir_names': '${FIELDNAME_IN_MET_FILEDIR_NAMES}' + 'obtype': '${OBTYPE}' + 'accum_hh': '${ACCUM_HH:-}' + 'accum_no_pad': '${ACCUM_NO_PAD:-}' + 'field_thresholds': '${FIELD_THRESHOLDS:-}' +" +# +# Call the python script to generate the METplus configuration file from +# the jinja template. +# +$USHdir/fill_jinja_template.py -q \ + -u "${settings}" \ + -t ${metplus_config_tmpl_fp} \ + -o ${metplus_config_fp} || \ +print_err_msg_exit "\ +Call to python script fill_jinja_template.py to generate a METplus +configuration file from a jinja template failed. Parameters passed +to this script are: + Full path to template METplus configuration file: + metplus_config_tmpl_fp = \"${metplus_config_tmpl_fp}\" + Full path to output METplus configuration file: + metplus_config_fp = \"${metplus_config_fp}\" + Namelist settings specified on command line: + settings = +$settings" +# +#----------------------------------------------------------------------- +# +# Call METplus. +# +#----------------------------------------------------------------------- +# +print_info_msg "$VERBOSE" " +Calling METplus to run MET's ${met_tool_sc} tool for field(s): ${FIELDNAME_IN_MET_FILEDIR_NAMES}" +${METPLUS_PATH}/ush/run_metplus.py \ + -c ${METPLUS_CONF}/common.conf \ + -c ${metplus_config_fp} || \ +print_err_msg_exit " +Call to METplus failed with return code: $? +METplus configuration file used is: + metplus_config_fp = \"${metplus_config_fp}\"" +# +#----------------------------------------------------------------------- +# +# Print message indicating successful completion of script. +# +#----------------------------------------------------------------------- +# +print_info_msg " +======================================================================== +METplus ${met_tool_pc} tool completed successfully. + +Exiting script: \"${scrfunc_fn}\" +In directory: \"${scrfunc_dir}\" +========================================================================" +# +#----------------------------------------------------------------------- +# +# 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_gridstat_or_pointstat_vx_ensmean.sh b/scripts/exregional_run_met_gridstat_or_pointstat_vx_ensmean.sh new file mode 100755 index 0000000000..095304e42a --- /dev/null +++ b/scripts/exregional_run_met_gridstat_or_pointstat_vx_ensmean.sh @@ -0,0 +1,414 @@ +#!/bin/bash + +# +#----------------------------------------------------------------------- +# +# Source the variable definitions file and the bash utility functions. +# +#----------------------------------------------------------------------- +# +. $USHdir/source_util_funcs.sh +source_config_for_task "task_run_vx_ensgrid_mean|task_run_vx_enspoint_mean|task_run_post" ${GLOBAL_VAR_DEFNS_FP} +# +#----------------------------------------------------------------------- +# +# Source files defining auxiliary functions for verification. +# +#----------------------------------------------------------------------- +# +. $USHdir/set_vx_params.sh +. $USHdir/set_vx_fhr_list.sh +# +#----------------------------------------------------------------------- +# +# Save current shell options (in a global array). Then set new options +# for this script/function. +# +#----------------------------------------------------------------------- +# +{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 +# +#----------------------------------------------------------------------- +# +# Get the full path to the file in which this script/function is located +# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in +# which the file is located (scrfunc_dir). +# +#----------------------------------------------------------------------- +# +scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) +scrfunc_fn=$( basename "${scrfunc_fp}" ) +scrfunc_dir=$( dirname "${scrfunc_fp}" ) +# +#----------------------------------------------------------------------- +# +# Specify the set of valid argument names for this script/function. +# Then process the arguments provided to this script/function (which +# should consist of a set of name-value pairs of the form arg1="value1", +# etc). +# +#----------------------------------------------------------------------- +# +valid_args=( \ + "met_tool_sc" \ + "met_tool_pc" \ + ) +process_args valid_args "$@" +# +#----------------------------------------------------------------------- +# +# For debugging purposes, print out values of arguments passed to this +# script. Note that these will be printed out only if VERBOSE is set to +# TRUE. +# +#----------------------------------------------------------------------- +# +print_input_args "valid_args" +# +#----------------------------------------------------------------------- +# +# Print message indicating entry into script. +# +#----------------------------------------------------------------------- +# +print_info_msg " +======================================================================== +Entering script: \"${scrfunc_fn}\" +In directory: \"${scrfunc_dir}\" + +This is the ex-script for the task that runs the METplus ${met_tool_pc} +tool to perform verification of the specified field (VAR) on the ensemble +mean. +========================================================================" +# +#----------------------------------------------------------------------- +# +# Get the cycle date and time in YYYYMMDDHH format. +# +#----------------------------------------------------------------------- +# +CDATE="${PDY}${cyc}" +# +#----------------------------------------------------------------------- +# +# Set various verification parameters associated with the field to be +# verified. Not all of these are necessarily used later below but are +# set here for consistency with other verification ex-scripts. +# +#----------------------------------------------------------------------- +# +FIELDNAME_IN_OBS_INPUT="" +FIELDNAME_IN_FCST_INPUT="" +FIELDNAME_IN_MET_OUTPUT="" +FIELDNAME_IN_MET_FILEDIR_NAMES="" + +set_vx_params \ + obtype="${OBTYPE}" \ + field="$VAR" \ + accum_hh="${ACCUM_HH}" \ + outvarname_grid_or_point="grid_or_point" \ + outvarname_field_is_APCPgt01h="field_is_APCPgt01h" \ + outvarname_fieldname_in_obs_input="FIELDNAME_IN_OBS_INPUT" \ + outvarname_fieldname_in_fcst_input="FIELDNAME_IN_FCST_INPUT" \ + outvarname_fieldname_in_MET_output="FIELDNAME_IN_MET_OUTPUT" \ + outvarname_fieldname_in_MET_filedir_names="FIELDNAME_IN_MET_FILEDIR_NAMES" +# +#----------------------------------------------------------------------- +# +# Set additional field-dependent verification parameters. +# +#----------------------------------------------------------------------- +# +if [ "${grid_or_point}" = "grid" ]; then + + case "${FIELDNAME_IN_MET_FILEDIR_NAMES}" in + "APCP01h") + FIELD_THRESHOLDS="gt0.0, ge0.254, ge0.508, ge2.54" + ;; + "APCP03h") + FIELD_THRESHOLDS="gt0.0, ge0.508, ge2.54, ge6.350" + ;; + "APCP06h") + FIELD_THRESHOLDS="gt0.0, ge2.54, ge6.350, ge12.700" + ;; + "APCP24h") + FIELD_THRESHOLDS="gt0.0, ge6.350, ge12.700, ge25.400" + ;; + "REFC") + FIELD_THRESHOLDS="ge20, ge30, ge40, ge50" + ;; + "RETOP") + FIELD_THRESHOLDS="ge20, ge30, ge40, ge50" + ;; + *) + print_err_msg_exit "\ +Verification parameters have not been defined for this field +(FIELDNAME_IN_MET_FILEDIR_NAMES): + FIELDNAME_IN_MET_FILEDIR_NAMES = \"${FIELDNAME_IN_MET_FILEDIR_NAMES}\"" + ;; + esac + +elif [ "${grid_or_point}" = "point" ]; then + + FIELD_THRESHOLDS="" + +fi +# +#----------------------------------------------------------------------- +# +# Set paths and file templates for input to and output from the MET/ +# METplus tool to be run as well as other file/directory parameters. +# +#----------------------------------------------------------------------- +# +if [ "${grid_or_point}" = "grid" ]; then + + OBS_INPUT_FN_TEMPLATE="" + 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} ) + else + OBS_INPUT_DIR="${OBS_DIR}" + case "${FIELDNAME_IN_MET_FILEDIR_NAMES}" in + "APCP01h") + OBS_INPUT_FN_TEMPLATE="${OBS_CCPA_APCP01h_FN_TEMPLATE}" + ;; + "REFC") + OBS_INPUT_FN_TEMPLATE="${OBS_MRMS_REFC_FN_TEMPLATE}" + ;; + "RETOP") + OBS_INPUT_FN_TEMPLATE="${OBS_MRMS_RETOP_FN_TEMPLATE}" + ;; + esac + OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_INPUT_FN_TEMPLATE} ) + fi +# Keep for when splitting GenEnsProd from EnsembleStat. +# FCST_INPUT_DIR="${VX_OUTPUT_BASEDIR}/$CDATE/metprd/gen_ens_prod" +# FCST_INPUT_FN_TEMPLATE=$( eval echo 'gen_ens_prod_${VX_FCST_MODEL_NAME}_${FIELDNAME_IN_MET_FILEDIR_NAMES}_${OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V.nc' ) + FCST_INPUT_DIR="${VX_OUTPUT_BASEDIR}/$CDATE/metprd/EnsembleStat" + FCST_INPUT_FN_TEMPLATE=$( eval echo 'ensemble_stat_${VX_FCST_MODEL_NAME}_${FIELDNAME_IN_MET_FILEDIR_NAMES}_${OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc' ) + +elif [ "${grid_or_point}" = "point" ]; then + + OBS_INPUT_DIR="${VX_OUTPUT_BASEDIR}/metprd/Pb2nc_obs" + OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE} ) +# Keep for when splitting GenEnsProd from EnsembleStat. +# FCST_INPUT_DIR="${VX_OUTPUT_BASEDIR}/${CDATE}/metprd/gen_ens_prod" +# FCST_INPUT_FN_TEMPLATE=$( eval echo 'gen_ens_prod_${VX_FCST_MODEL_NAME}_ADP${FIELDNAME_IN_MET_FILEDIR_NAMES}_${OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V.nc' ) + FCST_INPUT_DIR="${VX_OUTPUT_BASEDIR}/${CDATE}/metprd/EnsembleStat" + FCST_INPUT_FN_TEMPLATE=$( eval echo 'ensemble_stat_${VX_FCST_MODEL_NAME}_ADP${FIELDNAME_IN_MET_FILEDIR_NAMES}_${OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc' ) + +fi + +OUTPUT_BASE="${VX_OUTPUT_BASEDIR}/${CDATE}" +OUTPUT_DIR="${OUTPUT_BASE}/metprd/${met_tool_pc}_ensmean" +STAGING_DIR="${OUTPUT_BASE}/stage/${FIELDNAME_IN_MET_FILEDIR_NAMES}_ensmean" +LOG_SUFFIX="_${FIELDNAME_IN_MET_FILEDIR_NAMES}_ensmean_${CDATE}" +# +#----------------------------------------------------------------------- +# +# Set the array of forecast hours for which to run the MET/METplus tool. +# +#----------------------------------------------------------------------- +# +set_vx_fhr_list \ + cdate="${CDATE}" \ + fcst_len_hrs="${FCST_LEN_HRS}" \ + field="$VAR" \ + accum_hh="${ACCUM_HH}" \ + base_dir="${OBS_INPUT_DIR}" \ + fn_template="${OBS_INPUT_FN_TEMPLATE}" \ + check_hourly_files="FALSE" \ + outvarname_fhr_list="FHR_LIST" +# +#----------------------------------------------------------------------- +# +# Make sure the MET/METplus output directory(ies) exists. +# +#----------------------------------------------------------------------- +# +mkdir_vrfy -p "${OUTPUT_DIR}" +# +#----------------------------------------------------------------------- +# +# Check for existence of top-level OBS_DIR. +# +#----------------------------------------------------------------------- +# +if [ ! -d "${OBS_DIR}" ]; then + print_err_msg_exit "\ +OBS_DIR does not exist or is not a directory: + OBS_DIR = \"${OBS_DIR}\"" +fi +# +#----------------------------------------------------------------------- +# +# Set variable containing accumulation period without leading zero +# padding. This may be needed in the METplus configuration files. +# +#----------------------------------------------------------------------- +# +ACCUM_NO_PAD=$( printf "%0d" "${ACCUM_HH}" ) +# +#----------------------------------------------------------------------- +# +# Export variables needed in the common METplus configuration file (at +# ${METPLUS_CONF}/common.conf). +# +#----------------------------------------------------------------------- +# +export MET_INSTALL_DIR +export METPLUS_PATH +export MET_BIN_EXEC +export METPLUS_CONF +export LOGDIR +# +#----------------------------------------------------------------------- +# +# Do not run METplus if there isn't at least one valid forecast hour for +# which to run it. +# +#----------------------------------------------------------------------- +# +if [ -z "${FHR_LIST}" ]; then + print_err_msg_exit "\ +The list of forecast hours for which to run METplus is empty: + FHR_LIST = [${FHR_LIST}]" +fi +# +#----------------------------------------------------------------------- +# +# Set the names of the template METplus configuration file, the METplus +# configuration file generated from this template, and the METplus log +# file. +# +#----------------------------------------------------------------------- +# +# First, set the base file names. +# +if [ "${field_is_APCPgt01h}" = "TRUE" ]; then + metplus_config_tmpl_fn="APCPgt01h" +else + metplus_config_tmpl_fn="${FIELDNAME_IN_MET_FILEDIR_NAMES}" +fi +metplus_config_tmpl_fn="${met_tool_pc}_ensmean_${metplus_config_tmpl_fn}" +metplus_config_fn="${met_tool_pc}_ensmean_${FIELDNAME_IN_MET_FILEDIR_NAMES}" +metplus_log_fn="${metplus_config_fn}" +# +# 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_log_fn="metplus.log.${metplus_log_fn}" +# +#----------------------------------------------------------------------- +# +# Generate the METplus configuration file from its jinja template. +# +#----------------------------------------------------------------------- +# +# Set the full paths to the jinja template METplus configuration file +# (which already exists) and the METplus configuration file that will be +# generated from it. +# +metplus_config_tmpl_fp="${METPLUS_CONF}/${metplus_config_tmpl_fn}" +metplus_config_fp="${OUTPUT_DIR}/${metplus_config_fn}" +# +# Define variables that appear in the jinja template. +# +settings="\ +# +# Date and forecast hour information. +# + 'cdate': '$CDATE' + 'fhr_list': '${FHR_LIST}' +# +# Input and output directory/file information. +# + 'metplus_config_fn': '${metplus_config_fn:-}' + 'metplus_log_fn': '${metplus_log_fn:-}' + 'obs_input_dir': '${OBS_INPUT_DIR:-}' + 'obs_input_fn_template': '${OBS_INPUT_FN_TEMPLATE:-}' + 'fcst_input_dir': '${FCST_INPUT_DIR:-}' + 'fcst_input_fn_template': '${FCST_INPUT_FN_TEMPLATE:-}' + 'output_base': '${OUTPUT_BASE}' + 'output_dir': '${OUTPUT_DIR}' + 'output_fn_template': '${OUTPUT_FN_TEMPLATE:-}' + 'staging_dir': '${STAGING_DIR}' + 'vx_fcst_model_name': '${VX_FCST_MODEL_NAME}' +# +# Ensemble and member-specific information. +# + 'num_ens_members': '${NUM_ENS_MEMBERS}' + 'uscore_ensmem_name_or_null': '${USCORE_ENSMEM_NAME_OR_NULL:-}' + 'time_lag': '${time_lag:-}' +# +# Field information. +# + 'fieldname_in_obs_input': '${FIELDNAME_IN_OBS_INPUT}' + 'fieldname_in_fcst_input': '${FIELDNAME_IN_FCST_INPUT}' + 'fieldname_in_met_output': '${FIELDNAME_IN_MET_OUTPUT}' + 'fieldname_in_met_filedir_names': '${FIELDNAME_IN_MET_FILEDIR_NAMES}' + 'obtype': '${OBTYPE}' + 'accum_hh': '${ACCUM_HH:-}' + 'accum_no_pad': '${ACCUM_NO_PAD:-}' + 'field_thresholds': '${FIELD_THRESHOLDS:-}' +" +# +# Call the python script to generate the METplus configuration file from +# the jinja template. +# +$USHdir/fill_jinja_template.py -q \ + -u "${settings}" \ + -t ${metplus_config_tmpl_fp} \ + -o ${metplus_config_fp} || \ +print_err_msg_exit "\ +Call to python script fill_jinja_template.py to generate a METplus +configuration file from a jinja template failed. Parameters passed +to this script are: + Full path to template METplus configuration file: + metplus_config_tmpl_fp = \"${metplus_config_tmpl_fp}\" + Full path to output METplus configuration file: + metplus_config_fp = \"${metplus_config_fp}\" + Namelist settings specified on command line: + settings = +$settings" +# +#----------------------------------------------------------------------- +# +# Call METplus. +# +#----------------------------------------------------------------------- +# +print_info_msg "$VERBOSE" " +Calling METplus to run MET's ${met_tool_sc} tool for field(s): ${FIELDNAME_IN_MET_FILEDIR_NAMES}" +${METPLUS_PATH}/ush/run_metplus.py \ + -c ${METPLUS_CONF}/common.conf \ + -c ${metplus_config_fp} || \ +print_err_msg_exit " +Call to METplus failed with return code: $? +METplus configuration file used is: + metplus_config_fp = \"${metplus_config_fp}\"" +# +#----------------------------------------------------------------------- +# +# Print message indicating successful completion of script. +# +#----------------------------------------------------------------------- +# +print_info_msg " +======================================================================== +METplus ${met_tool_pc} tool completed successfully. + +Exiting script: \"${scrfunc_fn}\" +In directory: \"${scrfunc_dir}\" +========================================================================" +# +#----------------------------------------------------------------------- +# +# 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_gridstat_or_pointstat_vx_ensprob.sh b/scripts/exregional_run_met_gridstat_or_pointstat_vx_ensprob.sh new file mode 100755 index 0000000000..16f4c64d70 --- /dev/null +++ b/scripts/exregional_run_met_gridstat_or_pointstat_vx_ensprob.sh @@ -0,0 +1,376 @@ +#!/bin/bash + +# +#----------------------------------------------------------------------- +# +# Source the variable definitions file and the bash utility functions. +# +#----------------------------------------------------------------------- +# +. $USHdir/source_util_funcs.sh +source_config_for_task "task_run_vx_ensgrid_prob|task_run_vx_enspoint_prob|task_run_post" ${GLOBAL_VAR_DEFNS_FP} +# +#----------------------------------------------------------------------- +# +# Source files defining auxiliary functions for verification. +# +#----------------------------------------------------------------------- +# +. $USHdir/set_vx_params.sh +. $USHdir/set_vx_fhr_list.sh +# +#----------------------------------------------------------------------- +# +# Save current shell options (in a global array). Then set new options +# for this script/function. +# +#----------------------------------------------------------------------- +# +{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 +# +#----------------------------------------------------------------------- +# +# Get the full path to the file in which this script/function is located +# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in +# which the file is located (scrfunc_dir). +# +#----------------------------------------------------------------------- +# +scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) +scrfunc_fn=$( basename "${scrfunc_fp}" ) +scrfunc_dir=$( dirname "${scrfunc_fp}" ) +# +#----------------------------------------------------------------------- +# +# Specify the set of valid argument names for this script/function. +# Then process the arguments provided to this script/function (which +# should consist of a set of name-value pairs of the form arg1="value1", +# etc). +# +#----------------------------------------------------------------------- +# +valid_args=( \ + "met_tool_sc" \ + "met_tool_pc" \ + ) +process_args valid_args "$@" +# +#----------------------------------------------------------------------- +# +# For debugging purposes, print out values of arguments passed to this +# script. Note that these will be printed out only if VERBOSE is set to +# TRUE. +# +#----------------------------------------------------------------------- +# +print_input_args "valid_args" +# +#----------------------------------------------------------------------- +# +# Print message indicating entry into script. +# +#----------------------------------------------------------------------- +# +print_info_msg " +======================================================================== +Entering script: \"${scrfunc_fn}\" +In directory: \"${scrfunc_dir}\" + +This is the ex-script for the task that runs the METplus ${met_tool_pc} +tool to perform verification of the specified field (VAR) on the ensemble +frequencies/probabilities. +========================================================================" +# +#----------------------------------------------------------------------- +# +# Get the cycle date and time in YYYYMMDDHH format. +# +#----------------------------------------------------------------------- +# +CDATE="${PDY}${cyc}" +# +#----------------------------------------------------------------------- +# +# Set various verification parameters associated with the field to be +# verified. Not all of these are necessarily used later below but are +# set here for consistency with other verification ex-scripts. +# +#----------------------------------------------------------------------- +# +FIELDNAME_IN_OBS_INPUT="" +FIELDNAME_IN_FCST_INPUT="" +FIELDNAME_IN_MET_OUTPUT="" +FIELDNAME_IN_MET_FILEDIR_NAMES="" + +set_vx_params \ + obtype="${OBTYPE}" \ + field="$VAR" \ + accum_hh="${ACCUM_HH}" \ + outvarname_grid_or_point="grid_or_point" \ + outvarname_field_is_APCPgt01h="field_is_APCPgt01h" \ + outvarname_fieldname_in_obs_input="FIELDNAME_IN_OBS_INPUT" \ + outvarname_fieldname_in_fcst_input="FIELDNAME_IN_FCST_INPUT" \ + outvarname_fieldname_in_MET_output="FIELDNAME_IN_MET_OUTPUT" \ + outvarname_fieldname_in_MET_filedir_names="FIELDNAME_IN_MET_FILEDIR_NAMES" +# +#----------------------------------------------------------------------- +# +# Set paths and file templates for input to and output from the MET/ +# METplus tool to be run as well as other file/directory parameters. +# +#----------------------------------------------------------------------- +# +if [ "${grid_or_point}" = "grid" ]; then + + OBS_INPUT_FN_TEMPLATE="" + 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} ) + else + OBS_INPUT_DIR="${OBS_DIR}" + case "${FIELDNAME_IN_MET_FILEDIR_NAMES}" in + "APCP01h") + OBS_INPUT_FN_TEMPLATE="${OBS_CCPA_APCP01h_FN_TEMPLATE}" + ;; + "REFC") + OBS_INPUT_FN_TEMPLATE="${OBS_MRMS_REFC_FN_TEMPLATE}" + ;; + "RETOP") + OBS_INPUT_FN_TEMPLATE="${OBS_MRMS_RETOP_FN_TEMPLATE}" + ;; + esac + OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_INPUT_FN_TEMPLATE} ) + fi +# Keep for when splitting GenEnsProd from EnsembleStat. +# FCST_INPUT_DIR="${VX_OUTPUT_BASEDIR}/$CDATE/metprd/gen_ens_prod" +# FCST_INPUT_FN_TEMPLATE=$( eval echo 'gen_ens_prod_${VX_FCST_MODEL_NAME}_${FIELDNAME_IN_MET_FILEDIR_NAMES}_${OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V.nc' ) + FCST_INPUT_DIR="${VX_OUTPUT_BASEDIR}/$CDATE/metprd/EnsembleStat" + FCST_INPUT_FN_TEMPLATE=$( eval echo 'ensemble_stat_${VX_FCST_MODEL_NAME}_${FIELDNAME_IN_MET_FILEDIR_NAMES}_${OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc' ) + +elif [ "${grid_or_point}" = "point" ]; then + + OBS_INPUT_DIR="${VX_OUTPUT_BASEDIR}/metprd/Pb2nc_obs" + OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE} ) +# Keep for when splitting GenEnsProd from EnsembleStat. +# FCST_INPUT_DIR="${VX_OUTPUT_BASEDIR}/${CDATE}/metprd/gen_ens_prod" +# FCST_INPUT_FN_TEMPLATE=$( eval echo 'gen_ens_prod_${VX_FCST_MODEL_NAME}_ADP${FIELDNAME_IN_MET_FILEDIR_NAMES}_${OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V.nc' ) + FCST_INPUT_DIR="${VX_OUTPUT_BASEDIR}/${CDATE}/metprd/EnsembleStat" + FCST_INPUT_FN_TEMPLATE=$( eval echo 'ensemble_stat_${VX_FCST_MODEL_NAME}_ADP${FIELDNAME_IN_MET_FILEDIR_NAMES}_${OBTYPE}_{valid?fmt=%Y%m%d}_{valid?fmt=%H%M%S}V_ens.nc' ) + +fi + +OUTPUT_BASE="${VX_OUTPUT_BASEDIR}/${CDATE}" +OUTPUT_DIR="${OUTPUT_BASE}/metprd/${met_tool_pc}_ensprob" +STAGING_DIR="${OUTPUT_BASE}/stage/${FIELDNAME_IN_MET_FILEDIR_NAMES}_ensprob" +LOG_SUFFIX="_${FIELDNAME_IN_MET_FILEDIR_NAMES}_ensprob_${CDATE}" +# +#----------------------------------------------------------------------- +# +# Set the array of forecast hours for which to run the MET/METplus tool. +# +#----------------------------------------------------------------------- +# +set_vx_fhr_list \ + cdate="${CDATE}" \ + fcst_len_hrs="${FCST_LEN_HRS}" \ + field="$VAR" \ + accum_hh="${ACCUM_HH}" \ + base_dir="${OBS_INPUT_DIR}" \ + fn_template="${OBS_INPUT_FN_TEMPLATE}" \ + check_hourly_files="FALSE" \ + outvarname_fhr_list="FHR_LIST" +# +#----------------------------------------------------------------------- +# +# Make sure the MET/METplus output directory(ies) exists. +# +#----------------------------------------------------------------------- +# +mkdir_vrfy -p "${OUTPUT_DIR}" +# +#----------------------------------------------------------------------- +# +# Check for existence of top-level OBS_DIR. +# +#----------------------------------------------------------------------- +# +if [ ! -d "${OBS_DIR}" ]; then + print_err_msg_exit "\ +OBS_DIR does not exist or is not a directory: + OBS_DIR = \"${OBS_DIR}\"" +fi +# +#----------------------------------------------------------------------- +# +# Set variable containing accumulation period without leading zero +# padding. This may be needed in the METplus configuration files. +# +#----------------------------------------------------------------------- +# +ACCUM_NO_PAD=$( printf "%0d" "${ACCUM_HH}" ) +# +#----------------------------------------------------------------------- +# +# Export variables needed in the common METplus configuration file (at +# ${METPLUS_CONF}/common.conf). +# +#----------------------------------------------------------------------- +# +export MET_INSTALL_DIR +export METPLUS_PATH +export MET_BIN_EXEC +export METPLUS_CONF +export LOGDIR +# +#----------------------------------------------------------------------- +# +# Do not run METplus if there isn't at least one valid forecast hour for +# which to run it. +# +#----------------------------------------------------------------------- +# +if [ -z "${FHR_LIST}" ]; then + print_err_msg_exit "\ +The list of forecast hours for which to run METplus is empty: + FHR_LIST = [${FHR_LIST}]" +fi +# +#----------------------------------------------------------------------- +# +# Set the names of the template METplus configuration file, the METplus +# configuration file generated from this template, and the METplus log +# file. +# +#----------------------------------------------------------------------- +# +# First, set the base file names. +# +if [ "${field_is_APCPgt01h}" = "TRUE" ]; then +# Haven't combined the METplus conf jinja template files for APCP > 01h +# for probabilistic ensemble vx tasks yet... +# metplus_config_tmpl_fn="APCPgt01h" + metplus_config_tmpl_fn="${FIELDNAME_IN_MET_FILEDIR_NAMES}" +else + metplus_config_tmpl_fn="${FIELDNAME_IN_MET_FILEDIR_NAMES}" +fi +metplus_config_tmpl_fn="${met_tool_pc}_ensprob_${metplus_config_tmpl_fn}" +metplus_config_fn="${met_tool_pc}_ensprob_${FIELDNAME_IN_MET_FILEDIR_NAMES}" +metplus_log_fn="${metplus_config_fn}" +# +# 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_log_fn="metplus.log.${metplus_log_fn}" +# +#----------------------------------------------------------------------- +# +# Generate the METplus configuration file from its jinja template. +# +#----------------------------------------------------------------------- +# +# Set the full paths to the jinja template METplus configuration file +# (which already exists) and the METplus configuration file that will be +# generated from it. +# +metplus_config_tmpl_fp="${METPLUS_CONF}/${metplus_config_tmpl_fn}" +metplus_config_fp="${OUTPUT_DIR}/${metplus_config_fn}" +# +# Define variables that appear in the jinja template. +# +settings="\ +# +# Date and forecast hour information. +# + 'cdate': '$CDATE' + 'fhr_list': '${FHR_LIST}' +# +# Input and output directory/file information. +# + 'metplus_config_fn': '${metplus_config_fn:-}' + 'metplus_log_fn': '${metplus_log_fn:-}' + 'obs_input_dir': '${OBS_INPUT_DIR:-}' + 'obs_input_fn_template': '${OBS_INPUT_FN_TEMPLATE:-}' + 'fcst_input_dir': '${FCST_INPUT_DIR:-}' + 'fcst_input_fn_template': '${FCST_INPUT_FN_TEMPLATE:-}' + 'output_base': '${OUTPUT_BASE}' + 'output_dir': '${OUTPUT_DIR}' + 'output_fn_template': '${OUTPUT_FN_TEMPLATE:-}' + 'staging_dir': '${STAGING_DIR}' + 'vx_fcst_model_name': '${VX_FCST_MODEL_NAME}' +# +# Ensemble and member-specific information. +# + 'num_ens_members': '${NUM_ENS_MEMBERS}' + 'uscore_ensmem_name_or_null': '${USCORE_ENSMEM_NAME_OR_NULL:-}' + 'time_lag': '${time_lag:-}' +# +# Field information. +# + 'fieldname_in_obs_input': '${FIELDNAME_IN_OBS_INPUT}' + 'fieldname_in_fcst_input': '${FIELDNAME_IN_FCST_INPUT}' + 'fieldname_in_met_output': '${FIELDNAME_IN_MET_OUTPUT}' + 'fieldname_in_met_filedir_names': '${FIELDNAME_IN_MET_FILEDIR_NAMES}' + 'obtype': '${OBTYPE}' + 'accum_hh': '${ACCUM_HH:-}' + 'accum_no_pad': '${ACCUM_NO_PAD:-}' + 'field_thresholds': '${FIELD_THRESHOLDS:-}' +" +# +# Call the python script to generate the METplus configuration file from +# the jinja template. +# +$USHdir/fill_jinja_template.py -q \ + -u "${settings}" \ + -t ${metplus_config_tmpl_fp} \ + -o ${metplus_config_fp} || \ +print_err_msg_exit "\ +Call to python script fill_jinja_template.py to generate a METplus +configuration file from a jinja template failed. Parameters passed +to this script are: + Full path to template METplus configuration file: + metplus_config_tmpl_fp = \"${metplus_config_tmpl_fp}\" + Full path to output METplus configuration file: + metplus_config_fp = \"${metplus_config_fp}\" + Namelist settings specified on command line: + settings = +$settings" +# +#----------------------------------------------------------------------- +# +# Call METplus. +# +#----------------------------------------------------------------------- +# +print_info_msg "$VERBOSE" " +Calling METplus to run MET's ${met_tool_sc} tool for field(s): ${FIELDNAME_IN_MET_FILEDIR_NAMES}" +${METPLUS_PATH}/ush/run_metplus.py \ + -c ${METPLUS_CONF}/common.conf \ + -c ${metplus_config_fp} || \ +print_err_msg_exit " +Call to METplus failed with return code: $? +METplus configuration file used is: + metplus_config_fp = \"${metplus_config_fp}\"" +# +#----------------------------------------------------------------------- +# +# Print message indicating successful completion of script. +# +#----------------------------------------------------------------------- +# +print_info_msg " +======================================================================== +METplus ${met_tool_pc} tool completed successfully. + +Exiting script: \"${scrfunc_fn}\" +In directory: \"${scrfunc_dir}\" +========================================================================" +# +#----------------------------------------------------------------------- +# +# Restore the shell options saved at the beginning of this script/func- +# tion. +# +#----------------------------------------------------------------------- +# +{ restore_shell_opts; } > /dev/null 2>&1 From 53c9c750e0f18aa7a490bd683332d109697e997b Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Mon, 20 Mar 2023 14:58:25 -0600 Subject: [PATCH 099/119] Remove LOG_SUFFIX from vx ex-scripts since it is no longer used in the METplus conf files. --- scripts/exregional_run_met_genensprod_or_ensemblestat.sh | 1 - scripts/exregional_run_met_gridstat_or_pointstat_vx.sh | 1 - scripts/exregional_run_met_gridstat_or_pointstat_vx_ensmean.sh | 1 - scripts/exregional_run_met_gridstat_or_pointstat_vx_ensprob.sh | 1 - 4 files changed, 4 deletions(-) diff --git a/scripts/exregional_run_met_genensprod_or_ensemblestat.sh b/scripts/exregional_run_met_genensprod_or_ensemblestat.sh index 05c293a80c..04e083acf7 100755 --- a/scripts/exregional_run_met_genensprod_or_ensemblestat.sh +++ b/scripts/exregional_run_met_genensprod_or_ensemblestat.sh @@ -227,7 +227,6 @@ done OUTPUT_BASE="${VX_OUTPUT_BASEDIR}/${CDATE}" OUTPUT_DIR="${OUTPUT_BASE}/metprd/${met_tool_pc}" STAGING_DIR="${OUTPUT_BASE}/stage/${FIELDNAME_IN_MET_FILEDIR_NAMES}" -LOG_SUFFIX="_${FIELDNAME_IN_MET_FILEDIR_NAMES}_${CDATE}" # #----------------------------------------------------------------------- # diff --git a/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh b/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh index 5c549ffd06..012967dfa8 100755 --- a/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh +++ b/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh @@ -220,7 +220,6 @@ fi OUTPUT_BASE="${VX_OUTPUT_BASEDIR}/${CDATE}${SLASH_ENSMEM_SUBDIR_OR_NULL}" OUTPUT_DIR="${OUTPUT_BASE}/metprd/${met_tool_pc}" STAGING_DIR="${OUTPUT_BASE}/stage/${FIELDNAME_IN_MET_FILEDIR_NAMES}" -LOG_SUFFIX="_${FIELDNAME_IN_MET_FILEDIR_NAMES}${USCORE_ENSMEM_NAME_OR_NULL}_${CDATE}" # #----------------------------------------------------------------------- # 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 095304e42a..d9d277db6b 100755 --- a/scripts/exregional_run_met_gridstat_or_pointstat_vx_ensmean.sh +++ b/scripts/exregional_run_met_gridstat_or_pointstat_vx_ensmean.sh @@ -203,7 +203,6 @@ fi OUTPUT_BASE="${VX_OUTPUT_BASEDIR}/${CDATE}" OUTPUT_DIR="${OUTPUT_BASE}/metprd/${met_tool_pc}_ensmean" STAGING_DIR="${OUTPUT_BASE}/stage/${FIELDNAME_IN_MET_FILEDIR_NAMES}_ensmean" -LOG_SUFFIX="_${FIELDNAME_IN_MET_FILEDIR_NAMES}_ensmean_${CDATE}" # #----------------------------------------------------------------------- # 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 16f4c64d70..1e6efabda3 100755 --- a/scripts/exregional_run_met_gridstat_or_pointstat_vx_ensprob.sh +++ b/scripts/exregional_run_met_gridstat_or_pointstat_vx_ensprob.sh @@ -162,7 +162,6 @@ fi OUTPUT_BASE="${VX_OUTPUT_BASEDIR}/${CDATE}" OUTPUT_DIR="${OUTPUT_BASE}/metprd/${met_tool_pc}_ensprob" STAGING_DIR="${OUTPUT_BASE}/stage/${FIELDNAME_IN_MET_FILEDIR_NAMES}_ensprob" -LOG_SUFFIX="_${FIELDNAME_IN_MET_FILEDIR_NAMES}_ensprob_${CDATE}" # #----------------------------------------------------------------------- # From e60213c4a94b02064e07b6498e1062ceeba31540 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Tue, 21 Mar 2023 13:08:50 -0600 Subject: [PATCH 100/119] Modifications to get NCO mode to work with staged files. --- parm/FV3LAM_wflow.xml | 10 ++++--- parm/metplus/PointStat_ensprob_UPA.conf | 2 +- ...onal_run_met_genensprod_or_ensemblestat.sh | 27 +++++++++++++---- ...gional_run_met_gridstat_or_pointstat_vx.sh | 30 +++++++++++++------ ...un_met_gridstat_or_pointstat_vx_ensmean.sh | 23 +++++++++----- ...un_met_gridstat_or_pointstat_vx_ensprob.sh | 23 +++++++++----- scripts/exregional_run_met_pb2nc_obs.sh | 18 +++++++++-- scripts/exregional_run_met_pcpcombine.sh | 22 ++++++++++---- ush/config_defaults.yaml | 10 +++---- ush/machine/hera.yaml | 2 +- 10 files changed, 117 insertions(+), 50 deletions(-) diff --git a/parm/FV3LAM_wflow.xml b/parm/FV3LAM_wflow.xml index 56ec6fdc47..d0382a9e54 100644 --- a/parm/FV3LAM_wflow.xml +++ b/parm/FV3LAM_wflow.xml @@ -1656,6 +1656,8 @@ this case). So here we opt for a redundant for-loop. obs_or_fcstobs OBTYPE{{obtype}} OBS_DIR&{{obtype}}_OBS_DIR; + USCORE_ENSMEM_NAME_OR_NULL + SLASH_ENSMEM_SUBDIR_OR_NULL @@ -2233,13 +2235,13 @@ done by the scripts that this task calls). MET_TOOLENSEMBLESTAT - + {%- endif %} - {%- if fcst_len_hrs >= 6 %} + {%- if fcst_len_hrs >= 6 %} - - - - - - - -{%- if sched_native_cmd %} - -{%- else %} - -{%- endif %} - - - - - - - - - -{%- if fcst_len_hrs == -1 %} - - - - -{%- endif%} - - - - - -{%- if run_tasks_metvx_det or run_tasks_metvx_ens %} - - -{%- endif%} -{%- if run_tasks_metvx_det %} - - - - - - - - -{%- endif%} -{%- if run_tasks_metvx_ens %} - - - - - - - - - - - - - - - - - - - - - - -{%- endif%} - -{%- if run_tasks_metvx_det or run_tasks_metvx_ens %} - -{%- endif %} -{%- if run_task_aqm_ics %} - - -{%- endif %} -{%- if run_task_aqm_lbcs %} - -{%- endif %} -{%- if run_task_nexus_gfs_sfc %} - -{%- endif %} -{%- if run_task_nexus_emission %} - - -{%- endif %} -{%- if run_task_fire_emission %} - -{%- endif %} -{%- if run_task_point_source %} - -{%- endif %} -{%- if run_task_pre_post_stat %} - -{%- endif %} -{%- if run_task_post_stat_o3 %} - -{%- endif %} -{%- if run_task_post_stat_pm25 %} - -{%- endif %} -{%- if run_task_bias_correction_o3 %} - -{%- endif %} -{%- if run_task_bias_correction_pm25 %} - -{%- endif %} - - - - - - - - - - - - - - - - - - - - -{%- if run_envir == "nco" %} -{%- if do_ensemble %} -@Y@m@d@H/dyn"> -@Y@m@d@H/phy"> -{%- else %} -@Y@m@d@H/dyn"> -@Y@m@d@H/phy"> -{%- endif %} - -{%- else %} -@Y@m@d@H{{ slash_ensmem_subdir }}/dyn"> -@Y@m@d@H{{ slash_ensmem_subdir }}/phy"> - -{%- endif %} - -{%- if run_envir == "nco" %} -@Y@m@d"> - -{%- else %} - - -{%- endif %} - - - - - - - - - - - -{%- if do_real_time %} - -{%- endif %} - - - -{%- if partition_default is not none %} -&ACCOUNT;&QUEUE_DEFAULT;{{ partition_default }}"> -{%- else %} -&ACCOUNT;&QUEUE_DEFAULT;"> -{%- endif %} -{%- if partition_hpss is not none %} -&ACCOUNT;&QUEUE_HPSS;{{ partition_hpss }}"> -{%- else %} -&ACCOUNT;&QUEUE_HPSS;"> -{%- endif %} -{%- if partition_fcst is not none %} -&ACCOUNT;&QUEUE_FCST;{{ partition_fcst }}"> -{%- else %} -&ACCOUNT;&QUEUE_FCST;"> -{%- endif %} - -]> - - -{# Double quotes are required inside the strftime! Expect an error from reading the template if using single quotes. #} - {{ cdate_first_cycl.strftime("%M %H %d %m %Y *") }} - - {{- date_first_cycl ~ " " ~ date_last_cycl ~ " " ~ cycl_freq -}} - -{%- if cycl_next != date_first_cycl %} - - {{- cycl_next ~ " " ~ date_last_cycl ~ " " ~ cycl_freq -}} - -{%- endif %} -{%- if fcst_len_hrs == -1 %} - {%- if num_fcst_len_cycl >= 1 %} - {{- date_first_cycl ~ " " ~ date_1st_last_cycl ~ " " ~ "24:00:00" -}} - {%- endif %} - {%- if num_fcst_len_cycl >= 2 %} - {{- date_2nd_cycl ~ " " ~ date_2nd_last_cycl ~ " " ~ "24:00:00" -}} - {%- endif %} - {%- if num_fcst_len_cycl >= 3 %} - {{- date_3rd_cycl ~ " " ~ date_3rd_last_cycl ~ " " ~ "24:00:00" -}} - {%- endif %} - {%- if num_fcst_len_cycl >= 4 %} - {{- date_4th_cycl ~ " " ~ date_4th_last_cycl ~ " " ~ "24:00:00" -}} - {%- endif %} -{%- endif %} - - {%- if run_envir == "nco" %} - &LOGDIR;/FV3LAM_wflow.{{ workflow_id }}.log - {%- else %} - &LOGDIR;/FV3LAM_wflow.log - {%- endif %} - - - - - - -{%- if run_task_make_grid %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_MAKE_GRID;" "&JOBSdir;/JREGIONAL_MAKE_GRID" - {{ nnodes_make_grid }}:ppn={{ ppn_make_grid }} - {{ wtime_make_grid }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_MAKE_GRID; - &LOGDIR;/&TN_MAKE_GRID;&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - - -{%- endif %} -{%- if run_task_make_orog %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_MAKE_OROG;" "&JOBSdir;/JREGIONAL_MAKE_OROG" - {{ nnodes_make_orog }}:ppn={{ ppn_make_orog }} - {{ wtime_make_orog }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_MAKE_OROG; - &LOGDIR;/&TN_MAKE_OROG;&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - - - - - &EXPTDIR;/grid/&TN_MAKE_GRID;&CMPEXT; - &RUN_TASK_MAKE_GRID;FALSE - - - - -{%- endif %} -{%- if run_task_make_sfc_climo %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_MAKE_SFC_CLIMO;" "&JOBSdir;/JREGIONAL_MAKE_SFC_CLIMO" - {{ nnodes_make_sfc_climo }}:ppn={{ ppn_make_sfc_climo }} - {{ wtime_make_sfc_climo }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_MAKE_SFC_CLIMO; - &LOGDIR;/&TN_MAKE_SFC_CLIMO;&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - - - - - - &EXPTDIR;/grid/&TN_MAKE_GRID;&CMPEXT; - &RUN_TASK_MAKE_GRID;FALSE - - - - &EXPTDIR;/orog/&TN_MAKE_OROG;&CMPEXT; - &RUN_TASK_MAKE_OROG;FALSE - - - - - -{%- endif %} -{%- if run_task_nexus_gfs_sfc %} - - - - {%- if do_real_time %} - &RSRV_DEFAULT; - {%- else %} - &RSRV_HPSS; - {%- endif %} - &LOAD_MODULES_RUN_TASK_FP; "&TN_NEXUS_GFS_SFC;" "&JOBSdir;/JREGIONAL_NEXUS_GFS_SFC" - {{ nnodes_nexus_gfs_sfc }}:ppn={{ ppn_nexus_gfs_sfc }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {%- if not do_real_time %} - {{ mem_nexus_gfs_sfc }} +{%- macro dependency_tree(dep_dict) %} +{%- if dep_dict is mapping %} + {%- for tag, values in dep_dict.items() %} + {%- set tag_type = tag.split("_")[0] %} + {%- if values is mapping %} + <{{ tag_type -}} {% for attr, val in values.pop("attrs", {}).items() %} {{ attr }}="{{ val }}"{%- endfor -%}{%- if tag_type in ["taskdep", "metataskdep", "taskvalid"] %}/{%- endif %}> + {%- if values.get("text") %} + {{ values.pop("text") }} + + {%- elif values %} + {{- dependency_tree(values)|indent(2) }} + + {%- endif %} + {%- else %} + <{{ tag_type|indent(2) -}}> + {{- values -}} + {%- endif %} - {%- endif %} - {{ wtime_nexus_gfs_sfc }} - &NCORES_PER_NODE; - {%- if machine not in ["WCOSS2"] %} - &SCHED_NATIVE_CMD; - {%- endif %} - &TN_NEXUS_GFS_SFC; - &LOGDIR;/&TN_NEXUS_GFS_SFC;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} - -{%- if do_real_time %} - - &COMINgfs;/gfs.@Y@m@d/@H/atmos - -{%- endif %} - - -{%- endif %} -{%- if run_task_nexus_emission %} - - - {% for h in range(0, num_split_nexus) %}{{ " %02d" % h }}{% endfor %} - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_NEXUS_EMISSION;" "&JOBSdir;/JREGIONAL_NEXUS_EMISSION" - {%- if machine in ["HERA"] %} - {{ nnodes_nexus_emission }}:ppn={{ ppn_nexus_emission }} - {{ native_nexus_emission }} - {%- elif machine in ["WCOSS2"] %} - {{ nnodes_nexus_emission }}:ppn={{ ppn_nexus_emission }}:tpp={{ omp_num_threads_nexus_emission }} - &SCHED_NATIVE_CMD; - {%- else %} - {{ nnodes_nexus_emission }}:ppn={{ ppn_nexus_emission }} - {%- endif %} - {{ wtime_nexus_emission }} - &NCORES_PER_NODE; - &TN_NEXUS_EMISSION;_#nspt# - &LOGDIR;/&TN_NEXUS_EMISSION;_@Y@m@d@H_s#nspt#&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - nspt#nspt# - LOGDIR&LOGDIR; - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} - -{%- if run_task_nexus_gfs_sfc %} - - - -{%- endif %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_NEXUS_POST_SPLIT;" "&JOBSdir;/JREGIONAL_NEXUS_POST_SPLIT" - {{ nnodes_nexus_post_split }}:ppn={{ ppn_nexus_post_split }} - {{ wtime_nexus_post_split }} - &NCORES_PER_NODE; - &TN_NEXUS_POST_SPLIT; - &LOGDIR;/&TN_NEXUS_POST_SPLIT;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} - - - - - - -{%- endif %} -{%- if run_task_fire_emission %} - - - - {%- if do_aqm_save_fire %} - &RSRV_HPSS; - {%- else %} - &RSRV_DEFAULT; - {%- endif %} - &LOAD_MODULES_RUN_TASK_FP; "&TN_FIRE_EMISSION;" "&JOBSdir;/JREGIONAL_FIRE_EMISSION" - {{ nnodes_fire_emission }}:ppn={{ ppn_fire_emission }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {%- if not do_real_time %} - {{ mem_fire_emission }} - {%- endif %} - {%- endif %} - {{ wtime_fire_emission }} - &NCORES_PER_NODE; - {%- if machine not in ["WCOSS2"] %} - &SCHED_NATIVE_CMD; - {%- endif %} - &TN_FIRE_EMISSION; - &LOGDIR;/&TN_FIRE_EMISSION;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} - -{%- endif %} -{%- if run_task_point_source %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_POINT_SOURCE;" "&JOBSdir;/JREGIONAL_POINT_SOURCE" - {{ nnodes_point_source }}:ppn={{ ppn_point_source }} - {{ wtime_point_source }} - &NCORES_PER_NODE; - &TN_POINT_SOURCE; - &LOGDIR;/&TN_POINT_SOURCE;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} - - - - - &EXPTDIR;/grid/&TN_MAKE_GRID;&CMPEXT; - &RUN_TASK_MAKE_GRID;FALSE - - - - -{%- endif %} -{%- if run_task_get_extrn_ics %} - - - - &RSRV_HPSS; - &LOAD_MODULES_RUN_TASK_FP; "&TN_GET_EXTRN_ICS;" "&JOBSdir;/JREGIONAL_GET_EXTRN_MDL_FILES" - {{ nnodes_get_extrn_ics }}:ppn={{ ppn_get_extrn_ics }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_get_extrn_ics }} - {%- endif %} - {{ wtime_get_extrn_ics }} - &NCORES_PER_NODE; - {%- if machine not in ["WCOSS2"] %} - &SCHED_NATIVE_CMD; - {%- endif %} - &TN_GET_EXTRN_ICS; - &LOGDIR;/&TN_GET_EXTRN_ICS;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - ICS_OR_LBCSICS -{%- if do_real_time %} - - &COMINgfs;/gfs.@Y@m@d/@H/atmos - -{%- endif %} - -{%- endif %} -{%- if run_task_get_extrn_lbcs %} - - - - &RSRV_HPSS; - &LOAD_MODULES_RUN_TASK_FP; "&TN_GET_EXTRN_LBCS;" "&JOBSdir;/JREGIONAL_GET_EXTRN_MDL_FILES" - {{ nnodes_get_extrn_lbcs }}:ppn={{ ppn_get_extrn_lbcs }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_get_extrn_lbcs }} - {%- endif %} - {{ wtime_get_extrn_lbcs }} - &NCORES_PER_NODE; - {%- if machine not in ["WCOSS2"] %} - &SCHED_NATIVE_CMD; - {%- endif %} - &TN_GET_EXTRN_LBCS; - &LOGDIR;/&TN_GET_EXTRN_LBCS;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - ICS_OR_LBCSLBCS - -{%- if do_real_time %} - - &COMINgfs;/gfs.@Y@m@d/@H/atmos - -{%- endif %} - - -{%- endif %} - -{%- if do_ensemble %} - - - {% for m in range(1, num_ens_members+1) %}{{ "%03d " % m }}{% endfor %} - -{%- endif %} - -{%- if run_task_make_ics %} - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_MAKE_ICS;" "&JOBSdir;/JREGIONAL_MAKE_ICS" - {{ nnodes_make_ics }}:ppn={{ ppn_make_ics }} - {{ wtime_make_ics }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_MAKE_ICS;{{ uscore_ensmem_name }} - &LOGDIR;/&TN_MAKE_ICS;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} - ENSMEM_INDX#{{ ensmem_indx_name }}# - - - - - - - &EXPTDIR;/grid/&TN_MAKE_GRID;&CMPEXT; - &RUN_TASK_MAKE_GRID;FALSE - - - - &EXPTDIR;/orog/&TN_MAKE_OROG;&CMPEXT; - &RUN_TASK_MAKE_OROG;FALSE - - - - &EXPTDIR;/sfc_climo/&TN_MAKE_SFC_CLIMO;&CMPEXT; - &RUN_TASK_MAKE_SFC_CLIMO;FALSE - - - - - -{%- endif %} -{%- if run_task_make_lbcs %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_MAKE_LBCS;" "&JOBSdir;/JREGIONAL_MAKE_LBCS" - {{ nnodes_make_lbcs }}:ppn={{ ppn_make_lbcs }} - {{ wtime_make_lbcs }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_MAKE_LBCS;{{ uscore_ensmem_name }} - &LOGDIR;/&TN_MAKE_LBCS;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} - ENSMEM_INDX#{{ ensmem_indx_name }}# - - - - - - - &EXPTDIR;/grid/&TN_MAKE_GRID;&CMPEXT; - &RUN_TASK_MAKE_GRID;FALSE - - - - &EXPTDIR;/orog/&TN_MAKE_OROG;&CMPEXT; - &RUN_TASK_MAKE_OROG;FALSE - - - - &EXPTDIR;/sfc_climo/&TN_MAKE_SFC_CLIMO;&CMPEXT; - &RUN_TASK_MAKE_SFC_CLIMO;FALSE - - - - - + {%- endfor %} {%- endif %} -{%- if run_task_aqm_ics %} - {%- if not coldstart %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_AQM_ICS;" "&JOBSdir;/JREGIONAL_AQM_ICS" - {{ nnodes_aqm_ics }}:ppn={{ ppn_aqm_ics }} - {{ wtime_aqm_ics }} - &NCORES_PER_NODE; - &TN_AQM_EXTRN_ICS; - &LOGDIR;/&TN_AQM_EXTRN_ICS;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - PREV_CYCLE_DIR&WARMSTART_CYCLE_DIR; - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} - - - - - - &WARMSTART_CYCLE_DIR;/RESTART/@Y@m@d.@H@M@S.fv_tracer.res.tile1.nc - &WARMSTART_CYCLE_DIR;/RESTART/fv_tracer.res.tile1.nc - - - - - - {%- endif %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_AQM_ICS;" "&JOBSdir;/JREGIONAL_AQM_ICS" - {{ nnodes_aqm_ics }}:ppn={{ ppn_aqm_ics }} - {{ wtime_aqm_ics }} - &NCORES_PER_NODE; - &TN_AQM_ICS; - &LOGDIR;/&TN_AQM_ICS;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - PREV_CYCLE_DIR&COMIN_DIR; - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} - - - - - - &COMIN_DIR;/RESTART/@Y@m@d.@H@M@S.fv_tracer.res.tile1.nc - &COMIN_DIR;/RESTART/fv_tracer.res.tile1.nc - - - +{%- endmacro -%} - -{%- endif %} -{%- if run_task_aqm_lbcs %} - - +{%- macro task(name, settings) %} + - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_AQM_LBCS;" "&JOBSdir;/JREGIONAL_AQM_LBCS" - {{ nnodes_aqm_lbcs }}:ppn={{ ppn_aqm_lbcs }} - {{ wtime_aqm_lbcs }} - &NCORES_PER_NODE; - &TN_AQM_LBCS; - &LOGDIR;/&TN_AQM_LBCS;_@Y@m@d@H&LOGEXT; + {%- for key, value in settings.items() -%} + {%- if key not in ["envars", "attrs", "dependency", "nnodes", "ppn"] %} + <{{ key }}>{{ value }} + {%- endif %} + {%- endfor %} - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} + {% for var, value in settings.get("envars", {}).items() %} + {{ var }}{{ value }} + {%- endfor %} + {% if settings.get("dependency") -%} - + {{- dependency_tree(dep_dict=settings.get("dependency")) }} - + {%- endif %} -{%- endif %} -{%- if run_task_run_fcst %} - - - - &RSRV_FCST; - &LOAD_MODULES_RUN_TASK_FP; "&TN_RUN_FCST;" "&JOBSdir;/JREGIONAL_RUN_FCST" - {%- if machine in ["JET", "HERA", "LINUX"] %} - {{ ncores_run_fcst }} - {{ native_run_fcst }} - {%- elif machine in ["WCOSS2"] %} - {{ nnodes_run_fcst }}:ppn={{ ppn_run_fcst }}:tpp={{ omp_num_threads_run_fcst }} - &SCHED_NATIVE_CMD; - &NCORES_PER_NODE; - {%- else %} - {{ nnodes_run_fcst }}:ppn={{ ppn_run_fcst }} - &NCORES_PER_NODE; - {%- endif %} - &SCHED_NATIVE_CMD; - {{ wtime_run_fcst }} - &TN_RUN_FCST;{{ uscore_ensmem_name }} - &LOGDIR;/&TN_RUN_FCST;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} - ENSMEM_INDX#{{ ensmem_indx_name }}# - - - - - -{%- if run_task_nexus_emission %} - -{%- endif %} -{%- if run_task_fire_emission %} - -{%- endif %} -{%- if run_task_point_source %} - -{%- endif %} -{%- if run_task_aqm_ics %} - - -{%- if not coldstart %} - - - - -{%- else %} - -{%- endif %} - -{%- endif %} -{%- if run_task_aqm_lbcs %} - -{%- endif %} - - +{%- endmacro -%} - -{%- endif %} - -{%- if run_task_run_post %} -{%- if fcst_len_hrs == -1 %} - {%- for icyc in range(num_fcst_len_cycl) %} - - {% for h in range(0, fcst_len_cycl[icyc]+1) %}{{ " %03d" % h }}{% endfor %} - {%- if icyc == 0 %} - - {%- elif icyc == 1 %} - - {%- elif icyc == 2 %} - - {%- elif icyc == 3 %} - +{%- macro metatask(name, settings) %} + + {% for varname, value in settings.get("var", {}).items() %} + {{ value }} + {%- endfor %} + {%- for item, task_settings in settings.items() %} + {%- if item.split("_", 1)[0] == "task" %} + {%- if task_settings.get("command") %} + {{ task(name=item.split("_", 1)[-1], settings=task_settings)|indent(2) }} {%- endif %} - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_RUN_POST;" "&JOBSdir;/JREGIONAL_RUN_POST" - {{ nnodes_run_post }}:ppn={{ ppn_run_post }} - {{ wtime_run_post }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - {%- if icyc == 0 %} - &TN_RUN_POST_CYC1;{{ uscore_ensmem_name }}_f#fhr# - {%- elif icyc == 1 %} - &TN_RUN_POST_CYC2;{{ uscore_ensmem_name }}_f#fhr# - {%- elif icyc == 2 %} - &TN_RUN_POST_CYC3;{{ uscore_ensmem_name }}_f#fhr# - {%- elif icyc == 3 %} - &TN_RUN_POST_CYC4;{{ uscore_ensmem_name }}_f#fhr# + {%- elif item.split("_", 1)[0] == "metatask" %} + {{ metatask(name=item.split("_", 1)[-1], settings=task_settings)|indent(2) }} {%- endif %} - &LOGDIR;/&TN_RUN_POST;{{ uscore_ensmem_name }}_f#fhr#_@Y@m@d@H&LOGEXT; - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - fhr#fhr# - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} - ENSMEM_INDX#{{ ensmem_indx_name }}# - - - - - - &DYN_DIR;f#fhr#.nc - &PHY_DIR;f#fhr#.nc - - - - - - - {%- endfor %} - -{%- else %} - {%- if sub_hourly_post %} - - - - 000 - 00 - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_RUN_POST;" "&JOBSdir;/JREGIONAL_RUN_POST" - {{ nnodes_run_post }}:ppn={{ ppn_run_post }} - {{ wtime_run_post }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_POST;{{ uscore_ensmem_name }}_f#fhr##fmn# - &LOGDIR;/&TN_RUN_POST;{{ uscore_ensmem_name }}_f#fhr##fmn#_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - fhr#fhr# - fmn#fmn# - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} - ENSMEM_INDX#{{ ensmem_indx_name }}# - - - - - - - &DYN_DIR;f{{ first_fv3_file_tstr }}.nc - &PHY_DIR;f{{ first_fv3_file_tstr }}.nc - - - - - - - - - - - - 000 - - - {% for min in range(delta_min, 60, delta_min) %}{{ " %02d" % min }}{% endfor %} - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_RUN_POST;" "&JOBSdir;/JREGIONAL_RUN_POST" - {{ nnodes_run_post }}:ppn={{ ppn_run_post }} - {{ wtime_run_post }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_POST;{{ uscore_ensmem_name }}_f#fhr##fmn# - &LOGDIR;/&TN_RUN_POST;{{ uscore_ensmem_name }}_f#fhr##fmn#_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - fhr#fhr# - fmn#fmn# - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} - ENSMEM_INDX#{{ ensmem_indx_name }}# - - - - - - &DYN_DIR;f#fhr#:#fmn#:00.nc - &PHY_DIR;f#fhr#:#fmn#:00.nc - - - - - - - - - - {%- endif %} - - - {%- if sub_hourly_post %} - - {% for h in range(1, fcst_len_hrs) %}{{ " %03d" % h }}{% endfor %} - - {% for min in range(0, 60, delta_min) %}{{ " %02d" % min }}{% endfor %} - - {%- else %} - - {% for h in range(0, fcst_len_hrs+1) %}{{ " %03d" % h }}{% endfor %} - - {%- endif %} - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_RUN_POST;" "&JOBSdir;/JREGIONAL_RUN_POST" - {{ nnodes_run_post }}:ppn={{ ppn_run_post }} - {{ wtime_run_post }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - {%- if sub_hourly_post %} - &TN_RUN_POST;{{ uscore_ensmem_name }}_f#fhr##fmn# - &LOGDIR;/&TN_RUN_POST;{{ uscore_ensmem_name }}_f#fhr##fmn#_@Y@m@d@H&LOGEXT; - {%- else %} - &TN_RUN_POST;{{ uscore_ensmem_name }}_f#fhr# - &LOGDIR;/&TN_RUN_POST;{{ uscore_ensmem_name }}_f#fhr#_@Y@m@d@H&LOGEXT; - {%- endif %} - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - {%- if sub_hourly_post %} - fhr#fhr# - fmn#fmn# - {%- else %} - fhr#fhr# - {%- endif %} - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} - ENSMEM_INDX#{{ ensmem_indx_name }}# - - - - - - {%- if sub_hourly_post %} - &DYN_DIR;f#fhr#:#fmn#:00.nc - &PHY_DIR;f#fhr#:#fmn#:00.nc - {%- else %} - &DYN_DIR;f#fhr#.nc - &PHY_DIR;f#fhr#.nc - {%- endif %} - - - - - - - {%- if sub_hourly_post %} - - {%- else %} - {%- endif %} - - - {%- if sub_hourly_post %} - - - - {{ "%03d" % fcst_len_hrs }} - 00 - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_RUN_POST;" "&JOBSdir;/JREGIONAL_RUN_POST" - {{ nnodes_run_post }}:ppn={{ ppn_run_post }} - {{ wtime_run_post }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_POST;{{ uscore_ensmem_name }}_f#fhr##fmn# - &LOGDIR;/&TN_RUN_POST;{{ uscore_ensmem_name }}_f#fhr##fmn#_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - fhr#fhr# - fmn#fmn# - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} - ENSMEM_INDX#{{ ensmem_indx_name }}# - - - - - - &DYN_DIR;f#fhr#:#fmn#:00.nc - &PHY_DIR;f#fhr#:#fmn#:00.nc - - - - - - - - {%- endif %} -{%- endif %} -{%- endif %} -{%- if run_task_run_prdgen %} - - - - {% for h in range(0, fcst_len_hrs+1) %}{{ " %03d" % h }}{% endfor %} - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_RUN_PRDGEN;" "&JOBSdir;/JREGIONAL_RUN_PRDGEN" - - {{ nnodes_run_prdgen }}:ppn={{ ppn_run_prdgen }} - {{ wtime_run_prdgen }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - - &TN_RUN_PRDGEN;{{ uscore_ensmem_name }}_f#fhr# - &LOGDIR;/&TN_RUN_PRDGEN;{{ uscore_ensmem_name }}_f#fhr#_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} - ENSMEM_INDX#{{ ensmem_indx_name }}# - fhr#fhr# - - - - - - + {%- endfor %} -{%- endif %} -{%- if run_task_plot_allvars %} - - +{%- endmacro -%} - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_PLOT_ALLVARS;" "&JOBSdir;/JREGIONAL_PLOT_ALLVARS" - {{ nnodes_plot_allvars }}:ppn={{ ppn_plot_allvars }} - {{ wtime_plot_allvars }} - &NCORES_PER_NODE; - {%- if machine not in ["WCOSS2"] %} - &SCHED_NATIVE_CMD; - {%- endif %} - &TN_PLOT_ALLVARS; - &LOGDIR;/&TN_PLOT_ALLVARS;_@Y@m@d@H&LOGEXT; + +GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} - ENSMEM_INDX#{{ ensmem_indx_name }}# +{%- for entity, value in entities.items() %} + +{%- endfor %} - - -{#- Redundant dependency to simplify jinja code. -This dependency will always evaluate to true. It is included because -rocoto does not allow empty , , and other tags. Without -it, we'd have to include more jinja if-statements here. -#} - TRUETRUE - {%- if write_dopost %} - - {%- elif run_task_run_post %} - - {%- endif %} - - +]> + - -{%- endif %} -{%- if run_task_pre_post_stat %} - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_PRE_POST_STAT;" "&JOBSdir;/JREGIONAL_PRE_POST_STAT" - {{ nnodes_pre_post_stat }}:ppn={{ ppn_pre_post_stat }} - {{ wtime_pre_post_stat }} - &NCORES_PER_NODE; - &TN_PRE_POST_STAT; - &LOGDIR;/&TN_PRE_POST_STAT;_@Y@m@d@H&LOGEXT; + {%- for group, cdefs in cycledefs.items() %} + {%- for cdef in cdefs %} + {{ cdef }} + {%- endfor %} + {%- endfor %} - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} + {{ log }} - -{%- if run_task_run_post %} - {%- if fcst_len_hrs == -1 %} - &COMIN_DIR;/&TN_RUN_POST;_@Y@m@d@H&CMPEXT; - {%- else %} - +{%- for item, settings in tasks.items() %} + {%- if item.split("_", 1)[0] == "task" %} + {{ task(name=item.split("_", 1)[-1], settings=settings ) }} + {%- elif item.split("_", 1)[0] == "metatask" %} + {{ metatask(name=item.split("_", 1)[-1], settings=settings ) }} {%- endif %} -{%- else %} - -{%- endif %} - - -{%- endif %} -{%- if run_task_post_stat_o3 %} - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_POST_STAT_O3;" "&JOBSdir;/JREGIONAL_POST_STAT_O3" - {{ nnodes_post_stat_o3 }}:ppn={{ ppn_post_stat_o3 }} -{%- if machine not in ["GAEA"] %} - {{ mem_post_stat_o3 }} -{%- endif %} - {{ wtime_post_stat_o3 }} - &NCORES_PER_NODE; - &TN_POST_STAT_O3; - &LOGDIR;/&TN_POST_STAT_O3;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} - - - - - - -{%- endif %} -{%- if run_task_post_stat_pm25 %} - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_POST_STAT_PM25;" "&JOBSdir;/JREGIONAL_POST_STAT_PM25" - {{ nnodes_post_stat_pm25 }}:ppn={{ ppn_post_stat_pm25 }} -{%- if machine not in ["GAEA"] %} - {{ mem_post_stat_pm25 }} -{%- endif %} - {{ wtime_post_stat_pm25 }} - &NCORES_PER_NODE; - &TN_POST_STAT_PM25; - &LOGDIR;/&TN_POST_STAT_PM25;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} - - - - - - -{%- endif %} -{%- if run_task_bias_correction_o3 %} - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_BIAS_CORRECTION_O3;" "&JOBSdir;/JREGIONAL_BIAS_CORRECTION_O3" - {{ nnodes_bias_correction_o3 }}:ppn={{ ppn_bias_correction_o3 }} -{%- if machine not in ["GAEA"] %} - {{ mem_bias_correction_o3 }} -{%- endif %} - {{ wtime_bias_correction_o3 }} - &NCORES_PER_NODE; - &TN_BIAS_CORRECTION_O3; - &LOGDIR;/&TN_BIAS_CORRECTION_O3;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} - - - - - - -{%- endif %} -{%- if run_task_bias_correction_pm25 %} - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&TN_BIAS_CORRECTION_PM25;" "&JOBSdir;/JREGIONAL_BIAS_CORRECTION_PM25" - {{ nnodes_bias_correction_pm25 }}:ppn={{ ppn_bias_correction_pm25 }} -{%- if machine not in ["GAEA"] %} - {{ mem_bias_correction_pm25 }} -{%- endif %} - {{ wtime_bias_correction_pm25 }} - &NCORES_PER_NODE; - &TN_BIAS_CORRECTION_PM25; - &LOGDIR;/&TN_BIAS_CORRECTION_PM25;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} - - - - - - -{%- endif %} - - - -{#- -Tasks for combining (adding) hourly APCP (accumulated precipitation) from -forecasts to obtain APCP obs for longer accumulation periods (3 hours, -6 hours, etc). These are needed for downstream verification tasks (both -deterministic and ensemble). -#} -{%- if run_tasks_metvx_det or run_tasks_metvx_ens %} - - {%- if ("APCP" in vx_fields) %} - - {%- for accum_hh in vx_apcp_accums_hh -%} - {%- set obtype = "CCPA" %} - {%- set field = "APCP" %} - {%- set accum = accum_hh|int %} - {%- set fieldname = field ~ accum_hh ~ "h" %} - {%- set base_tn = tn_run_met_pcpcombine -%} - {%- set tn = base_tn ~ "_fcst_" ~ fieldname ~ uscore_ensmem_name -%} - {%- set maxtries = maxtries_run_met_pcpcombine_fcst -%} - {%- set nnodes = nnodes_run_met_pcpcombine_fcst -%} - {%- set ppn = ppn_run_met_pcpcombine_fcst -%} - {%- set wtime = wtime_run_met_pcpcombine_fcst -%} - - {%- set is_ens_fcst = false -%} - - {%- if (accum > 1) and (fcst_len_hrs >= accum) %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_PCPCOMBINE" - {{nnodes}}:ppn={{ppn}} - {{wtime}} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - {{tn}} - &LOGDIR;/{{tn}}_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&{{obtype}}_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPE{{obtype}} - VAR{{field}} - ACCUM_HH{{accum_hh}} - MET_TOOLPCPCOMBINE - obs_or_fcstfcst - USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} - SLASH_ENSMEM_SUBDIR_OR_NULL{{slash_ensmem_subdir}} - {%- if is_ens_fcst or run_tasks_metvx_ens %} - MEM_INDX_OR_NULL#{{ensmem_indx_name}}# - {%- else %} - MEM_INDX_OR_NULL - {%- endif %} - - - -{#- Redundant dependency to simplify jinja code. #} - TRUETRUE -{#- -If the post-processed forecast output needed for verification is being -generated by the TN_RUN_FCST task (by having RUN_TASK_RUN_FCST and -WRITE_DOPOST both set to TRUE, which causes UPP to be called inline, -i.e. from within the weather model), then include a dependency on the -TN_RUN_FCST task. -#} - {%- if run_task_run_fcst and write_dopost %} - -{#- -Otherwise, if UPP is being called separately from the forecast (by -having RUN_TASK_RUN_POST set to TRUE), then inlude a dependency on the -TN_RUN_POST metatask (which runs UPP for all forecast output hours). - -Note that in this case, we have to wait until the whole TN_RUN_POST -metatask is complete before this task can launch, i.e. we cannot launch -this task as the UPP output files for each forecast output hour become -available. This is because the loop over forecast hours for this task -is performed within MET/METplus, not here in rocoto, whereas the loop -over forecast hours for the post-processing is done by rocoto in this -xml. This may be changed in the future. -#} - {%- elif run_task_run_post %} - - {%- endif %} - - - - - {%- endif %} - {%- endfor %} - - {%- endif %} - -{%- endif %} - - - -{%- if run_task_get_obs_ccpa %} - - - - &RSRV_HPSS; - &LOAD_MODULES_RUN_TASK_FP; "&GET_OBS_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_GET_OBS_CCPA" - {{ nnodes_get_obs_ccpa }}:ppn={{ ppn_get_obs_ccpa }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_get_obs_ccpa }} - {%- endif %} - {{ wtime_get_obs_ccpa }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_GET_OBS_CCPA; - &LOGDIR;/&TN_GET_OBS_CCPA;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&CCPA_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} - ACCUM01 - - -{%- endif %} - -{%- if run_task_get_obs_mrms %} - - - - &RSRV_HPSS; - &LOAD_MODULES_RUN_TASK_FP; "&GET_OBS_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_GET_OBS_MRMS" - {{ nnodes_get_obs_mrms }}:ppn={{ ppn_get_obs_mrms }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_get_obs_mrms }} - {%- endif %} - {{ wtime_get_obs_mrms }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_GET_OBS_MRMS; - &LOGDIR;/&TN_GET_OBS_MRMS;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&MRMS_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} - SCRIPTSdir&SCRIPTSdir; - VARREFC RETOP - - -{%- endif %} - -{%- if run_task_get_obs_ndas %} - - - - &RSRV_HPSS; - &LOAD_MODULES_RUN_TASK_FP; "&GET_OBS_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_GET_OBS_NDAS" - {{ nnodes_get_obs_ndas }}:ppn={{ ppn_get_obs_ndas }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_get_obs_ndas }} - {%- endif %} - {{ wtime_get_obs_ndas }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_GET_OBS_NDAS; - &LOGDIR;/&TN_GET_OBS_NDAS;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&NDAS_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - FHR {% for h in range(0, fcst_len_hrs+1) %}{{ " %02d" % h }}{% endfor %} - - -{%- endif %} - - - - -{#- -Obs processing tasks that must be run if either deterministic or ensemble -verification tasks are going to be run. -#} -{%- if run_tasks_metvx_det or run_tasks_metvx_ens %} - -{#- -Task for pre-processing of NDAS observations to convert prep-buffer files -to NetCDF format. - {%- set obtype = "NDAS" %} -#} - {%- if ("SFC" in vx_fields) or ("UPA" in vx_fields) %} -{#- -This for-loop isn't strictly necessary because it loops over only one -item, but having it allows for the use of the "set" tag to define new -variables within the loop (in Jinja, it is not possible to define variables -outside a loop unless one uses a namespace, which would be overkill in -this case). So here we opt for a redundant for-loop. -#} - {%- for obtype in ["NDAS"] -%} - {%- set tn = tn_run_met_pb2nc_obs -%} - {%- set maxtries = maxtries_run_met_pb2nc_obs -%} - {%- set nnodes = nnodes_run_met_pb2nc_obs -%} - {%- set ppn = ppn_run_met_pb2nc_obs -%} - {%- set wtime = wtime_run_met_pb2nc_obs -%} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_PB2NC_OBS" - {{nnodes}}:ppn={{ppn}} - {{wtime}} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - {{tn}} - &LOGDIR;/{{tn}}_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&{{obtype}}_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPE{{obtype}} - VARSFC - ACCUM_HH01 - MET_TOOLPB2NC - obs_or_fcstobs - USCORE_ENSMEM_NAME_OR_NULL - SLASH_ENSMEM_SUBDIR_OR_NULL - - - - {%- if run_task_get_obs_ndas %} - - {%- else %} -{#- -We only check for the existence of the NDAS observations directory, not -for individual prepbufr files within. This is because this and other -downstream vx tasks can complete successfully even when some obs files -are missing (the check for individual files is done by the scripts that -this task calls). -#} - &NDAS_OBS_DIR; - {%- endif %} - - - - - {%- endfor %} - - {%- endif %} - -{#- -Tasks for combining (adding) hourly APCP (accumulated precipitation) from -CCPA observations to obtain APCP obs for longer accumulation periods -(3 hours, 6 hours, etc). -#} - {%- if ("APCP" in vx_fields) %} - - {%- for accum_hh in vx_apcp_accums_hh -%} - {%- set obtype = "CCPA" %} - {%- set field = "APCP" -%} - {%- set accum = accum_hh|int %} - {%- set fieldname = field ~ accum_hh ~ "h" -%} - {%- set base_tn = tn_run_met_pcpcombine -%} - {%- set tn = base_tn ~ "_obs_" ~ fieldname -%} - {%- set maxtries = maxtries_run_met_pcpcombine_obs -%} - {%- set nnodes = nnodes_run_met_pcpcombine_obs -%} - {%- set ppn = ppn_run_met_pcpcombine_obs -%} - {%- set wtime = wtime_run_met_pcpcombine_obs -%} - - {%- if (accum > 1) and (fcst_len_hrs >= accum) %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_PCPCOMBINE" - {{nnodes}}:ppn={{ppn}} - {{wtime}} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - {{tn}} - &LOGDIR;/{{tn}}_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&{{obtype}}_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPE{{obtype}} - VAR{{field}} - ACCUM_HH{{accum_hh}} - MET_TOOLPCPCOMBINE - obs_or_fcstobs - USCORE_ENSMEM_NAME_OR_NULL - SLASH_ENSMEM_SUBDIR_OR_NULL - - - - {%- if run_task_get_obs_ccpa %} - - {%- else %} -{#- -We only check for the existence of the top-level CCPA observations -directory, not the individual daily subdirectories within. This is -because this and other downstream vx tasks can complete successfully -even when some obs files are missing (the check for individual files is -done by the scripts that this task calls). -#} - &CCPA_OBS_DIR; - {%- endif %} - - - - - {%- endif %} - - {%- endfor %} - {%- endif %} - -{%- endif %} - - - - - -{%- if run_task_vx_gridstat %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX" - {{ nnodes_run_met_gridstat_vx_apcp01h }}:ppn={{ ppn_run_met_gridstat_vx_apcp01h }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_gridstat_vx_apcp01h }} - {%- endif %} - {{ wtime_run_met_gridstat_vx_apcp01h }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_GRIDSTAT_VX_APCP01H;{{ uscore_ensmem_name }} - &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_APCP01H;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&CCPA_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPECCPA - VARAPCP - ACCUM_HH01 - MET_TOOLGRIDSTAT - USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} - SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} - {%- if do_ensemble %} - ENSMEM_INDX#{{ ensmem_indx_name }}# - {%- endif %} - - - -{#- Redundant dependency to simplify jinja code. #} - TRUETRUE - {%- if run_task_get_obs_ccpa %} - - {%- endif %} - {%- if write_dopost %} - - {%- elif run_task_run_post %} - - {%- endif %} - - - - - - {%- if fcst_len_hrs >= 3 %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX" - {{ nnodes_run_met_gridstat_vx_apcp03h }}:ppn={{ ppn_run_met_gridstat_vx_apcp03h }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_gridstat_vx_apcp03h }} - {%- endif %} - {{ wtime_run_met_gridstat_vx_apcp03h }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_GRIDSTAT_VX_APCP03H;{{ uscore_ensmem_name }} - &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_APCP03H;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&CCPA_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPECCPA - VARAPCP - ACCUM_HH03 - MET_TOOLGRIDSTAT - USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} - SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} - {%- if do_ensemble %} - ENSMEM_INDX#{{ ensmem_indx_name }}# - {%- endif %} - - - - - - - - - - {%- endif %} - - {%- if fcst_len_hrs >= 6 %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX" - {{ nnodes_run_met_gridstat_vx_apcp06h }}:ppn={{ ppn_run_met_gridstat_vx_apcp06h }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_gridstat_vx_apcp06h }} - {%- endif %} - {{ wtime_run_met_gridstat_vx_apcp06h }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_GRIDSTAT_VX_APCP06H;{{ uscore_ensmem_name }} - &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_APCP06H;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&CCPA_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPECCPA - VARAPCP - ACCUM_HH06 - MET_TOOLGRIDSTAT - USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} - SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} - {%- if do_ensemble %} - ENSMEM_INDX#{{ ensmem_indx_name }}# - {%- endif %} - - - - - - - - - - {%- endif %} - - {%- if fcst_len_hrs >= 24 %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX" - {{ nnodes_run_met_gridstat_vx_apcp24h }}:ppn={{ ppn_run_met_gridstat_vx_apcp24h }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_gridstat_vx_apcp24h }} - {%- endif %} - {{ wtime_run_met_gridstat_vx_apcp24h }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_GRIDSTAT_VX_APCP24H;{{ uscore_ensmem_name }} - &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_APCP24H;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&CCPA_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPECCPA - VARAPCP - ACCUM_HH24 - MET_TOOLGRIDSTAT - USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} - SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} - {%- if do_ensemble %} - ENSMEM_INDX#{{ ensmem_indx_name }}# - {%- endif %} - - - - - - - - - - {%- endif %} - - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX" - {{ nnodes_run_met_gridstat_vx_refc }}:ppn={{ ppn_run_met_gridstat_vx_refc }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_gridstat_vx_refc }} - {%- endif %} - {{ wtime_run_met_gridstat_vx_refc }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_GRIDSTAT_VX_REFC;{{ uscore_ensmem_name }} - &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_REFC;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&MRMS_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPEMRMS - VARREFC - ACCUM_HH01 - MET_TOOLGRIDSTAT - USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} - SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} - {%- if do_ensemble %} - ENSMEM_INDX#{{ ensmem_indx_name }}# - {%- endif %} - - - -{#- Redundant dependency to simplify jinja code. #} - TRUETRUE - {%- if run_task_get_obs_mrms %} - - {%- endif %} - {%- if write_dopost %} - - {%- elif run_task_run_post %} - - {%- endif %} - - - - - - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX" - {{ nnodes_run_met_gridstat_vx_retop }}:ppn={{ ppn_run_met_gridstat_vx_retop }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_gridstat_vx_retop }} - {%- endif %} - {{ wtime_run_met_gridstat_vx_retop }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_GRIDSTAT_VX_RETOP;{{ uscore_ensmem_name }} - &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_RETOP;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&MRMS_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPEMRMS - VARRETOP - ACCUM_HH01 - MET_TOOLGRIDSTAT - USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} - SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} - {%- if do_ensemble %} - ENSMEM_INDX#{{ ensmem_indx_name }}# - {%- endif %} - - - -{#- Redundant dependency to simplify jinja code. #} - TRUETRUE - {%- if run_task_get_obs_mrms %} - - {%- endif %} - {%- if write_dopost %} - - {%- elif run_task_run_post %} - - {%- endif %} - - - - -{%- endif %} - -{%- if run_task_vx_pointstat %} - - - &RSRV_DEFAULT; - - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX" - {{ nnodes_run_met_pointstat_vx_sfc }}:ppn={{ ppn_run_met_pointstat_vx_sfc }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_pointstat_vx_sfc }} - {%- endif %} - {{ wtime_run_met_pointstat_vx_sfc }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_POINTSTAT_VX_SFC;{{ uscore_ensmem_name }} - &LOGDIR;/&TN_RUN_MET_POINTSTAT_VX_SFC;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&NDAS_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPENDAS - VARSFC - ACCUM_HH01 - MET_TOOLPOINTSTAT - USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} - SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} - {%- if do_ensemble %} - ENSMEM_INDX#{{ ensmem_indx_name }}# - {%- endif %} - - - -{#- Redundant dependency to simplify jinja code. #} - TRUETRUE - {%- if run_task_get_obs_ndas %} - - {%- endif %} - {%- if write_dopost %} - - {%- elif run_task_run_post %} - - {%- endif %} - - - - - - - - &RSRV_DEFAULT; - - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX" - {{ nnodes_run_met_pointstat_vx_upa }}:ppn={{ ppn_run_met_pointstat_vx_upa }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_pointstat_vx_upa }} - {%- endif %} - {{ wtime_run_met_pointstat_vx_upa }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_POINTSTAT_VX_UPA;{{ uscore_ensmem_name }} - &LOGDIR;/&TN_RUN_MET_POINTSTAT_VX_UPA;{{ uscore_ensmem_name }}_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&NDAS_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPENDAS - VARUPA - ACCUM_HH01 - MET_TOOLPOINTSTAT - USCORE_ENSMEM_NAME_OR_NULL{{uscore_ensmem_name}} - SLASH_ENSMEM_SUBDIR_OR_NULL{{ slash_ensmem_subdir }} - {%- if do_ensemble %} - ENSMEM_INDX#{{ ensmem_indx_name }}# - {%- endif %} - - - -{#- Redundant dependency to simplify jinja code. #} - TRUETRUE - {%- if run_task_get_obs_ndas %} - - {%- endif %} - {%- if write_dopost %} - - {%- elif run_task_run_post %} - - {%- endif %} - - - - - -{%- endif %} - -{%- if do_ensemble %} - -{%- endif %} - -{%- if run_task_vx_ensgrid %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT" - {{ nnodes_run_met_ensemblestat_vx_apcp01h }}:ppn={{ ppn_run_met_ensemblestat_vx_apcp01h }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_ensemblestat_vx_apcp01h }} - {%- endif %} - {{ wtime_run_met_ensemblestat_vx_apcp01h }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_ENSEMBLESTAT_VX_APCP01H; - &LOGDIR;/&TN_RUN_MET_ENSEMBLESTAT_VX_APCP01H;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&CCPA_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPECCPA - VARAPCP - ACCUM_HH01 - MET_TOOLENSEMBLESTAT - - - - - - - - {%- if fcst_len_hrs >= 3 %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT" - {{ nnodes_run_met_ensemblestat_vx_apcp03h }}:ppn={{ ppn_run_met_ensemblestat_vx_apcp03h }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_ensemblestat_vx_apcp03h }} - {%- endif %} - {{ wtime_run_met_ensemblestat_vx_apcp03h }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_ENSEMBLESTAT_VX_APCP03H; - &LOGDIR;/&TN_RUN_MET_ENSEMBLESTAT_VX_APCP03H;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&CCPA_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPECCPA - VARAPCP - ACCUM_HH03 - MET_TOOLENSEMBLESTAT - - - - - - - {%- endif %} - - {%- if fcst_len_hrs >= 6 %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT" - {{ nnodes_run_met_ensemblestat_vx_apcp06h }}:ppn={{ ppn_run_met_ensemblestat_vx_apcp06h }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_ensemblestat_vx_apcp06h }} - {%- endif %} - {{ wtime_run_met_ensemblestat_vx_apcp06h }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_ENSEMBLESTAT_VX_APCP06H; - &LOGDIR;/&TN_RUN_MET_ENSEMBLESTAT_VX_APCP06H;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&CCPA_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPECCPA - VARAPCP - ACCUM_HH06 - MET_TOOLENSEMBLESTAT - - - - - - - {%- endif %} - - {%- if fcst_len_hrs >= 24 %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT" - {{ nnodes_run_met_ensemblestat_vx_apcp24h }}:ppn={{ ppn_run_met_ensemblestat_vx_apcp24h }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_ensemblestat_vx_apcp24h }} - {%- endif %} - {{ wtime_run_met_ensemblestat_vx_apcp24h }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_ENSEMBLESTAT_VX_APCP24H; - &LOGDIR;/&TN_RUN_MET_ENSEMBLESTAT_VX_APCP24H;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&CCPA_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPECCPA - VARAPCP - ACCUM_HH24 - MET_TOOLENSEMBLESTAT - - - - - - - {%- endif %} - - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT" - {{ nnodes_run_met_ensemblestat_vx_refc }}:ppn={{ ppn_run_met_ensemblestat_vx_refc }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_ensemblestat_vx_refc }} - {%- endif %} - {{ wtime_run_met_ensemblestat_vx_refc }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_ENSEMBLESTAT_VX_REFC; - &LOGDIR;/&TN_RUN_MET_ENSEMBLESTAT_VX_REFC;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&MRMS_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPEMRMS - VARREFC - ACCUM_HH01 - MET_TOOLENSEMBLESTAT - - - - - - - - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT" - {{ nnodes_run_met_ensemblestat_vx_retop }}:ppn={{ ppn_run_met_ensemblestat_vx_retop }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_ensemblestat_vx_retop }} - {%- endif %} - {{ wtime_run_met_ensemblestat_vx_retop }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_ENSEMBLESTAT_VX_RETOP; - &LOGDIR;/&TN_RUN_MET_ENSEMBLESTAT_VX_RETOP;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&MRMS_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPEMRMS - VARRETOP - ACCUM_HH01 - MET_TOOLENSEMBLESTAT - - - - - - -{%- endif %} - -{%- if run_task_vx_enspoint %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT" - {{ nnodes_run_met_ensemblestat_vx_sfc }}:ppn={{ ppn_run_met_ensemblestat_vx_sfc }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_ensemblestat_vx_sfc }} - {%- endif %} - {{ wtime_run_met_ensemblestat_vx_sfc }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_ENSEMBLESTAT_VX_SFC; - &LOGDIR;/&TN_RUN_MET_ENSEMBLESTAT_VX_SFC;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&NDAS_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPENDAS - VARSFC - ACCUM_HH01 - MET_TOOLENSEMBLESTAT - - - - - - - - - - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT" - {{ nnodes_run_met_ensemblestat_vx_upa }}:ppn={{ ppn_run_met_ensemblestat_vx_upa }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_ensemblestat_vx_upa }} - {%- endif %} - {{ wtime_run_met_ensemblestat_vx_upa }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_ENSEMBLESTAT_VX_UPA; - &LOGDIR;/&TN_RUN_MET_ENSEMBLESTAT_VX_UPA;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&NDAS_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPENDAS - VARUPA - ACCUM_HH01 - MET_TOOLENSEMBLESTAT - - - - - - - - - -{%- endif %} - -{%- if run_task_vx_ensgrid %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSMEAN" - {{ nnodes_run_met_gridstat_vx_ensmean_apcp01h }}:ppn={{ ppn_run_met_gridstat_vx_ensmean_apcp01h }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_gridstat_vx_ensmean_apcp01h }} - {%- endif %} - {{ wtime_run_met_gridstat_vx_ensmean_apcp01h }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP01H; - &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP01H;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&CCPA_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPECCPA - VARAPCP - ACCUM_HH01 - MET_TOOLGRIDSTAT - - - - - - - - {%- if fcst_len_hrs >= 3 %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSMEAN" - {{ nnodes_run_met_gridstat_vx_ensmean_apcp03h }}:ppn={{ ppn_run_met_gridstat_vx_ensmean_apcp03h }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_gridstat_vx_ensmean_apcp03h }} - {%- endif %} - {{ wtime_run_met_gridstat_vx_ensmean_apcp03h }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP03H; - &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP03H;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&CCPA_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPECCPA - VARAPCP - ACCUM_HH03 - MET_TOOLGRIDSTAT - - - - - - - {%- endif %} - - {%- if fcst_len_hrs >= 6 %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSMEAN" - {{ nnodes_run_met_gridstat_vx_ensmean_apcp06h }}:ppn={{ ppn_run_met_gridstat_vx_ensmean_apcp06h }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_gridstat_vx_ensmean_apcp06h }} - {%- endif %} - {{ wtime_run_met_gridstat_vx_ensmean_apcp06h }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP06H; - &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP06H;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&CCPA_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPECCPA - VARAPCP - ACCUM_HH06 - MET_TOOLGRIDSTAT - - - - - - - {%- endif %} - - {%- if fcst_len_hrs >= 24 %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSMEAN" - {{ nnodes_run_met_gridstat_vx_ensmean_apcp24h }}:ppn={{ ppn_run_met_gridstat_vx_ensmean_apcp24h }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_gridstat_vx_ensmean_apcp24h }} - {%- endif %} - {{ wtime_run_met_gridstat_vx_ensmean_apcp24h }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP24H; - &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP24H;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&CCPA_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPECCPA - VARAPCP - ACCUM_HH24 - MET_TOOLGRIDSTAT - - - - - - - {%- endif %} -{%- endif %} - -{%- if run_task_vx_enspoint %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSMEAN" - {{ nnodes_run_met_pointstat_vx_ensmean_sfc }}:ppn={{ ppn_run_met_pointstat_vx_ensmean_sfc }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_pointstat_vx_ensmean_sfc }} - {%- endif %} - {{ wtime_run_met_pointstat_vx_ensmean_sfc }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC; - &LOGDIR;/&TN_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&NDAS_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPENDAS - VARSFC - ACCUM_HH01 - MET_TOOLPOINTSTAT - - - - - - - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSMEAN" - {{ nnodes_run_met_pointstat_vx_ensmean_upa }}:ppn={{ ppn_run_met_pointstat_vx_ensmean_upa }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_pointstat_vx_ensmean_upa }} - {%- endif %} - {{ wtime_run_met_pointstat_vx_ensmean_upa }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_POINTSTAT_VX_ENSMEAN_UPA; - &LOGDIR;/&TN_RUN_MET_POINTSTAT_VX_ENSMEAN_UPA;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&NDAS_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPENDAS - VARUPA - ACCUM_HH01 - MET_TOOLPOINTSTAT - - - - - - -{%- endif %} - -{%- if run_task_vx_ensgrid %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSPROB" - {{ nnodes_run_met_gridstat_vx_ensprob_apcp01h }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_apcp01h }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_gridstat_vx_ensprob_apcp01h }} - {%- endif %} - {{ wtime_run_met_gridstat_vx_ensprob_apcp01h }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP01H; - &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP01H;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&CCPA_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPECCPA - VARAPCP - ACCUM_HH01 - MET_TOOLGRIDSTAT - - - - - - - - {%- if fcst_len_hrs >= 3 %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSPROB" - {{ nnodes_run_met_gridstat_vx_ensprob_apcp03h }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_apcp03h }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_gridstat_vx_ensprob_apcp03h }} - {%- endif %} - {{ wtime_run_met_gridstat_vx_ensprob_apcp03h }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP03H; - &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP03H;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&CCPA_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPECCPA - VARAPCP - ACCUM_HH03 - MET_TOOLGRIDSTAT - - - - - - - {%- endif %} - - {%- if fcst_len_hrs >= 6 %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSPROB" - {{ nnodes_run_met_gridstat_vx_ensprob_apcp06h }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_apcp06h }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_gridstat_vx_ensprob_apcp06h }} - {%- endif %} - {{ wtime_run_met_gridstat_vx_ensprob_apcp06h }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP06H; - &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP06H;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&CCPA_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPECCPA - VARAPCP - ACCUM_HH06 - MET_TOOLGRIDSTAT - - - - - - - {%- endif %} - - {%- if fcst_len_hrs >= 24 %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSPROB" - {{ nnodes_run_met_gridstat_vx_ensprob_apcp24h }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_apcp24h }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_gridstat_vx_ensprob_apcp24h }} - {%- endif %} - {{ wtime_run_met_gridstat_vx_ensprob_apcp24h }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP24H; - &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP24H;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&CCPA_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPECCPA - VARAPCP - ACCUM_HH24 - MET_TOOLGRIDSTAT - - - - - - - {%- endif %} - - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSPROB" - {{ nnodes_run_met_gridstat_vx_ensprob_refc }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_refc }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_gridstat_vx_ensprob_refc }} - {%- endif %} - {{ wtime_run_met_gridstat_vx_ensprob_refc }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_GRIDSTAT_VX_ENSPROB_REFC; - &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_ENSPROB_REFC;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&MRMS_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPEMRMS - VARREFC - ACCUM_HH01 - MET_TOOLGRIDSTAT - - - - - - - - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSPROB" - {{ nnodes_run_met_gridstat_vx_ensprob_retop }}:ppn={{ ppn_run_met_gridstat_vx_ensprob_retop }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_gridstat_vx_ensprob_retop }} - {%- endif %} - {{ wtime_run_met_gridstat_vx_ensprob_retop }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_GRIDSTAT_VX_ENSPROB_RETOP; - &LOGDIR;/&TN_RUN_MET_GRIDSTAT_VX_ENSPROB_RETOP;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&MRMS_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPEMRMS - VARRETOP - ACCUM_HH01 - MET_TOOLGRIDSTAT - - - - - - -{%- endif %} - -{%- if run_task_vx_enspoint %} - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSPROB" - {{ nnodes_run_met_pointstat_vx_ensprob_sfc }}:ppn={{ ppn_run_met_pointstat_vx_ensprob_sfc }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_pointstat_vx_ensprob_sfc }} - {%- endif %} - {{ wtime_run_met_pointstat_vx_ensprob_sfc }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_POINTSTAT_VX_ENSPROB_SFC; - &LOGDIR;/&TN_RUN_MET_POINTSTAT_VX_ENSPROB_SFC;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&NDAS_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPENDAS - VARSFC - ACCUM_HH01 - MET_TOOLPOINTSTAT - - - - - - - - - - &RSRV_DEFAULT; - &LOAD_MODULES_RUN_TASK_FP; "&VX_LOCAL_MODULE_FN;" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSPROB" - {{ nnodes_run_met_pointstat_vx_ensprob_upa }}:ppn={{ ppn_run_met_pointstat_vx_ensprob_upa }} - {%- if machine not in ["GAEA", "NOAACLOUD"] %} - {{ mem_run_met_pointstat_vx_ensprob_upa }} - {%- endif %} - {{ wtime_run_met_pointstat_vx_ensprob_upa }} - &NCORES_PER_NODE; - &SCHED_NATIVE_CMD; - &TN_RUN_MET_POINTSTAT_VX_ENSPROB_UPA; - &LOGDIR;/&TN_RUN_MET_POINTSTAT_VX_ENSPROB_UPA;_@Y@m@d@H&LOGEXT; - - GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP; - USHdir&USHdir; - OBS_DIR&NDAS_OBS_DIR; - PDY@Y@m@d - cyc@H - subcyc@M - LOGDIR&LOGDIR; - OBTYPENDAS - VARUPA - ACCUM_HH01 - MET_TOOLPOINTSTAT - - - - - - -{%- endif %} +{%- endfor %} diff --git a/parm/metplus/GridStat_APCP01h.conf b/parm/metplus/GridStat_APCP01h.conf index 666bb5c26c..d8a686ab00 100644 --- a/parm/metplus/GridStat_APCP01h.conf +++ b/parm/metplus/GridStat_APCP01h.conf @@ -85,7 +85,7 @@ GRID_STAT_REGRID_SHAPE = SQUARE # suffix to MODEL that identifies the forecast ensemble member. This # makes it easier to identify each curve. # -MODEL = {{vx_fcst_model_name}}{{uscore_ensmem_name_or_null}} +MODEL = {{vx_fcst_model_name}}_mem{ENV[ENSMEM_INDX]} FCST_NATIVE_DATA_TYPE = GRIB # diff --git a/parm/metplus/GridStat_APCPgt01h.conf b/parm/metplus/GridStat_APCPgt01h.conf index a0279e8a98..6d8968796d 100644 --- a/parm/metplus/GridStat_APCPgt01h.conf +++ b/parm/metplus/GridStat_APCPgt01h.conf @@ -85,7 +85,7 @@ GRID_STAT_REGRID_SHAPE = SQUARE # suffix to MODEL that identifies the forecast ensemble member. This # makes it easier to identify each curve. # -MODEL = {{vx_fcst_model_name}}{{uscore_ensmem_name_or_null}} +MODEL = {{vx_fcst_model_name}}_mem{ENV[ENSMEM_INDX]} FCST_NATIVE_DATA_TYPE = GRIB # diff --git a/parm/metplus/GridStat_REFC.conf b/parm/metplus/GridStat_REFC.conf index 80497a8713..9fd7e2f86c 100644 --- a/parm/metplus/GridStat_REFC.conf +++ b/parm/metplus/GridStat_REFC.conf @@ -84,7 +84,7 @@ GRID_STAT_GRID_WEIGHT_FLAG = NONE # suffix to MODEL that identifies the forecast ensemble member. This # makes it easier to identify each curve. # -MODEL = {{vx_fcst_model_name}}{{uscore_ensmem_name_or_null}} +MODEL = {{vx_fcst_model_name}}_mem{ENV[ENSMEM_INDX]} FCST_NATIVE_DATA_TYPE = GRIB # diff --git a/parm/metplus/GridStat_RETOP.conf b/parm/metplus/GridStat_RETOP.conf index a41ef130c4..fde17ded5d 100644 --- a/parm/metplus/GridStat_RETOP.conf +++ b/parm/metplus/GridStat_RETOP.conf @@ -84,7 +84,7 @@ GRID_STAT_GRID_WEIGHT_FLAG = NONE # suffix to MODEL that identifies the forecast ensemble member. This # makes it easier to identify each curve. # -MODEL = {{vx_fcst_model_name}}{{uscore_ensmem_name_or_null}} +MODEL = {{vx_fcst_model_name}}_mem{ENV[ENSMEM_INDX]} FCST_NATIVE_DATA_TYPE = GRIB # diff --git a/parm/metplus/PointStat_SFC.conf b/parm/metplus/PointStat_SFC.conf index 30ec3f878e..0dbcfde260 100644 --- a/parm/metplus/PointStat_SFC.conf +++ b/parm/metplus/PointStat_SFC.conf @@ -122,7 +122,7 @@ POINT_STAT_OFFSETS = 0 # suffix to MODEL that identifies the forecast ensemble member. This # makes it easier to identify each curve. # -MODEL = {{vx_fcst_model_name}}{{uscore_ensmem_name_or_null}} +MODEL = {{vx_fcst_model_name}}_mem{ENV[ENSMEM_INDX]} # # Value to enter under the DESC column in the output stat file. Here, # we store the value of the original lead in this column, i.e. the lead diff --git a/parm/metplus/PointStat_UPA.conf b/parm/metplus/PointStat_UPA.conf index 64994d0af3..1d20b16fd8 100644 --- a/parm/metplus/PointStat_UPA.conf +++ b/parm/metplus/PointStat_UPA.conf @@ -122,7 +122,7 @@ POINT_STAT_OFFSETS = 0 # suffix to MODEL that identifies the forecast ensemble member. This # makes it easier to identify each curve. # -MODEL = {{vx_fcst_model_name}}{{uscore_ensmem_name_or_null}} +MODEL = {{vx_fcst_model_name}}_mem{ENV[ENSMEM_INDX]} # # Value to enter under the DESC column in the output stat file. Here, # we store the value of the original lead in this column, i.e. the lead diff --git a/parm/wflow/aqm_all.yaml b/parm/wflow/aqm_all.yaml new file mode 100644 index 0000000000..b41d7e39be --- /dev/null +++ b/parm/wflow/aqm_all.yaml @@ -0,0 +1,209 @@ +default_aqm_task: &default_aqm + account: '&ACCOUNT;' + attrs: + cycledefs: forecast + maxtries: '2' + envars: &default_vars + GLOBAL_VAR_DEFNS_FP: '&GLOBAL_VAR_DEFNS_FP;' + USHdir: '&USHdir;' + PDY: !cycstr "@Y@m@d" + cyc: !cycstr "@H" + nprocs: '{{ parent.nnodes * parent.ppn // 1 }}' + subcyc: !cycstr "@M" + LOGDIR: !cycstr "&LOGDIR;" + SLASH_ENSMEM_SUBDIR: '&SLASH_ENSMEM_SUBDIR;' + memory: 2G + native: '{{ platform.SCHED_NATIVE_CMD }}' + nnodes: 1 + nodes: '{{ nnodes }}:ppn={{ ppn }}' + nodesize: "&NCORES_PER_NODE;" + partition: '{% if platform.get("PARTITION_DEFAULT") %}&PARTITION_DEFAULT;{% else %}None{% endif %}' + ppn: 1 + queue: '&QUEUE_DEFAULT;' + walltime: 00:30:00 + +task_nexus_gfs_sfc: + <<: *default_aqm + command: '&LOAD_MODULES_RUN_TASK_FP; "nexus_gfs_sfc" "&JOBSdir;/JREGIONAL_NEXUS_GFS_SFC"' + partition: '{% if platform.get("PARTITION_HPSS") %}&PARTITION_HPSS;{% else %}None{% endif %}' + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + dependency: + or: + and: + streq: + left: do_real_time + right: '{% if workflow.DO_REAL_TIME %}do_real_time{% endif %}' + datadep_gfs: + attrs: + age: 00:00:00:05 + text: '&COMINgfs;/gfs.@Y@m@d/@H/atmos' + streq: + left: retro + right: '{% if not workflow.DO_REAL_TIME %}retro{% endif %}' + +metatask_nexus_emission: + var: + nspt: '{% for h in range(0, cpl_aqm_parm.NUM_SPLIT_NEXUS) %}{{ " %02d" % h }}{% endfor %}' + task_nexus_emission_#nspt#: + <<: *default_aqm + command: '&LOAD_MODULES_RUN_TASK_FP; "nexus_emission" "&JOBSdir;/JREGIONAL_NEXUS_EMISSION"' + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + nnodes: 4 + ppn: '{{ task_nexus_emission.PPN_NEXUS_EMISSION // 1 }}' + walltime: 01:00:00 + envars: + <<: *default_vars + nspt: "#nspt#" + dependency: + taskdep: + attrs: + task: nexus_gfs_sfc + +task_nexus_post_split: + <<: *default_aqm + command: '&LOAD_MODULES_RUN_TASK_FP; "nexus_post_split" "&JOBSdir;/JREGIONAL_NEXUS_POST_SPLIT"' + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + dependency: + metataskdep: + attrs: + metatask: nexus_emission + +task_fire_emission: + <<: *default_aqm + command: '&LOAD_MODULES_RUN_TASK_FP; "fire_emission" "&JOBSdir;/JREGIONAL_FIRE_EMISSION"' + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + +task_point_source: + <<: *default_aqm + command: '&LOAD_MODULES_RUN_TASK_FP; "point_source" "&JOBSdir;/JREGIONAL_POINT_SOURCE"' + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + walltime: 01:00:00 + dependency: + or_make_grid: + datadep_grid: + attrs: + age: 00:00:00:05 + text: '{{ task_make_grid.GRID_DIR }}/make_grid_task_complete.txt' + streq: + left: staged_grid + right: '{% if not rocoto.get("tasks", {}).get("task_make_grid") %}staged_grid{% endif %}' + +task_aqm_ics_ext: + <<: *default_aqm + attrs: + cycledefs: at_start + maxtries: '2' + command: '&LOAD_MODULES_RUN_TASK_FP; "aqm_ics" "&JOBSdir;/JREGIONAL_AQM_ICS"' + envars: + <<: *default_vars + PREV_CYCLE_DIR: '&WARMSTART_CYCLE_DIR;' + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + dependency: + and: + taskdep: + attrs: + task: make_ics_mem000 + or: + datadep_date_tag_tracer: + attrs: + age: 00:00:00:05 + text: !cycstr '&WARMSTART_CYCLE_DIR;/RESTART/@Y@m@d.@H@M@S.fv_tracer.res.tile1.nc' + datadep_tracer: + attrs: + age: 00:00:00:05 + text: !cycstr '&WARMSTART_CYCLE_DIR;/RESTART/fv_tracer.res.tile1.nc' + +task_aqm_ics: + <<: *default_aqm + attrs: + cycledefs: cycled + maxtries: '2' + command: '&LOAD_MODULES_RUN_TASK_FP; "aqm_ics" "&JOBSdir;/JREGIONAL_AQM_ICS"' + envars: + <<: *default_vars + PREV_CYCLE_DIR: '&COMIN_DIR;' + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + dependency: + and: + taskdep: + attrs: + task: make_ics_mem000 + or: + datadep_date_tag_tracer: + attrs: + age: 00:00:00:05 + text: '&COMIN_DIR;/RESTART/@Y@m@d.@H@M@S.fv_tracer.res.tile1.nc' + datadep_tracer: + attrs: + age: 00:00:00:05 + text: &COMIN_DIR;/RESTART/fv_tracer.res.tile1.nc + +task_aqm_lbcs: + <<: *default_aqm + command: '&LOAD_MODULES_RUN_TASK_FP; "aqm_lbcs" "&JOBSdir;/JREGIONAL_AQM_LBCS"' + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + ppn: 24 + dependency: + taskdep: + attrs: + task: make_lbcs + +task_pre_post_stat: + <<: *default_aqm + command: '&LOAD_MODULES_RUN_TASK_FP; "pre_post_stat" "&JOBSdir;/JREGIONAL_PRE_POST_STAT"' + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + dependency: + taskdep: + attrs: + task: run_fcst_mem000 + #or_do_post: + # and_inline_post: # If inline post ran, wait on the forecast task to complete + # not: + # taskvalid: + # attrs: + # task: run_post_mem000_f000 + # and_run_post: # If post was meant to run, wait on the whole post metatask + # taskvalid: + # attrs: + # task: run_post_mem000_f000 + # metataskdep: + # attrs: + # metatask: run_post_mem000 + +task_post_stat_o3: + <<: *default_aqm + command: '&LOAD_MODULES_RUN_TASK_FP; "post_stat_o3" "&JOBSdir;/JREGIONAL_POST_STAT_O3"' + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + memory: 120G + dependency: + taskdep: + attrs: + task: pre_post_stat + +task_post_stat_pm25: + <<: *default_aqm + command: '&LOAD_MODULES_RUN_TASK_FP; "post_stat_pm25" "&JOBSdir;/JREGIONAL_POST_STAT_PM25"' + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + memory: 120G + dependency: + attrs: + task: pre_post_stat + +task_bias_correction_o3: + <<: *default_aqm + command: '&LOAD_MODULES_RUN_TASK_FP; "bias_correction_o3" "&JOBSdir;/JREGIONAL_BIAS_CORRECTION_O3"' + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + memory: 120G + dependency: + attrs: + task: pre_post_stat + +task_bias_correction_pm25: + <<: *default_aqm + command: '&LOAD_MODULES_RUN_TASK_FP; "bias_correction_pm25" "&JOBSdir;/JREGIONAL_BIAS_CORRECTION_PM25"' + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + memory: 120G + dependency: + attrs: + task: pre_post_stat + diff --git a/parm/wflow/coldstart.yaml b/parm/wflow/coldstart.yaml new file mode 100644 index 0000000000..aae31a07a7 --- /dev/null +++ b/parm/wflow/coldstart.yaml @@ -0,0 +1,212 @@ +default_task: &default_task + account: '&ACCOUNT;' + attrs: + cycledefs: forecast + maxtries: '1' + envars: &default_vars + GLOBAL_VAR_DEFNS_FP: '&GLOBAL_VAR_DEFNS_FP;' + USHdir: '&USHdir;' + PDY: !cycstr "@Y@m@d" + cyc: !cycstr "@H" + nprocs: '{{ parent.nnodes * parent.ppn }}' + subcyc: !cycstr "@M" + LOGDIR: !cycstr "&LOGDIR;" + ENSMEM_INDX: '#mem#' + native: '{{ platform.SCHED_NATIVE_CMD }}' + nodes: '{{ nnodes }}:ppn={{ ppn }}' + nodesize: "&NCORES_PER_NODE;" + partition: '{% if platform.get("PARTITION_DEFAULT") %}&PARTITION_DEFAULT;{% else %}None{% endif %}' + queue: '&QUEUE_DEFAULT;' + walltime: 00:30:00 + +task_get_extrn_ics: + <<: *default_task + command: '&LOAD_MODULES_RUN_TASK_FP; "get_extrn_ics" "&JOBSdir;/JREGIONAL_GET_EXTRN_MDL_FILES"' + envars: + <<: *default_vars + ICS_OR_LBCS: ICS + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + memory: 2G + nnodes: 1 + partition: '{% if platform.get("PARTITION_HPSS") %}&PARTITION_HPSS;{% else %}None{% endif %}' + ppn: 1 + queue: '&QUEUE_HPSS;' + walltime: 00:45:00 + dependency: + or: + and: + streq: + left: do_real_time + right: '{% if workflow.DO_REAL_TIME %}do_real_time{% endif %}' + datadep_gfs: + attrs: + age: 00:00:00:05 + text: '&COMINgfs;/gfs.@Y@m@d/@H/atmos' + streq: + left: retro + right: '{% if not workflow.DO_REAL_TIME %}retro{% endif %}' + +task_get_extrn_lbcs: + <<: *default_task + command: '&LOAD_MODULES_RUN_TASK_FP; "get_extrn_lbcs" "&JOBSdir;/JREGIONAL_GET_EXTRN_MDL_FILES"' + envars: + <<: *default_vars + ICS_OR_LBCS: LBCS + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + memory: 2G + nnodes: 1 + partition: '{% if platform.get("PARTITION_HPSS") %}&PARTITION_HPSS;{% else %}None{% endif %}' + ppn: 1 + queue: '&QUEUE_HPSS;' + walltime: 00:45:00 + dependency: + or: + and: + streq: + left: do_real_time + right: '{% if workflow.DO_REAL_TIME %}do_real_time{% endif %}' + datadep_gfs: + attrs: + age: 00:00:00:05 + text: '&COMINgfs;/gfs.@Y@m@d/@H/atmos' + streq: + left: retro + right: '{% if not workflow.DO_REAL_TIME %}retro{% endif %}' + +metatask_run_ensemble: + var: + mem: '{% if global.DO_ENSEMBLE %}{%- for m in range(1, global.NUM_ENS_MEMBERS+1) -%}{{ "%03d "%m }}{%- endfor -%} {% else %}{{ "000"|string }}{% endif %}' + task_make_ics_mem#mem#: + <<: *default_task + command: '&LOAD_MODULES_RUN_TASK_FP; "make_ics" "&JOBSdir;/JREGIONAL_MAKE_ICS"' + envars: + <<: *default_vars + SLASH_ENSMEM_SUBDIR: '&SLASH_ENSMEM_SUBDIR;' + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + nnodes: 4 + ppn: 12 + dependency: + and: &make_ics_deps + taskdep_get_extrn: + attrs: + task: get_extrn_ics + or_grid: + datadep_grid: + attrs: + age: 00:00:00:05 + text: '{{ task_make_grid.GRID_DIR }}/make_grid_task_complete.txt' + streq: + left: staged_grid + right: '{% if not rocoto.get("tasks", {}).get("task_make_grid") %}staged_grid{% endif %}' + or_orog: + datadep_orog: + attrs: + age: 00:00:00:05 + text: '{{ task_make_orog.OROG_DIR }}/make_orog_task_complete.txt' + streq: + left: staged_orog + right: '{% if not rocoto.get("tasks", {}).get("task_make_orog") %}staged_orog{% endif %}' + or_sfc_climo: + datadep_sfc_climo: + attrs: + age: 00:00:00:05 + text: '{{ task_make_sfc_climo.SFC_CLIMO_DIR }}/make_sfc_climo_task_complete.txt' + streq: + left: staged_sfc_climo + right: '{% if not rocoto.get("tasks", {}).get("task_make_sfc_climo") %}staged_sfc_climo{% endif %}' + + task_make_lbcs_mem#mem#: + <<: *default_task + command: '&LOAD_MODULES_RUN_TASK_FP; "make_lbcs" "&JOBSdir;/JREGIONAL_MAKE_LBCS"' + envars: + <<: *default_vars + SLASH_ENSMEM_SUBDIR: '&SLASH_ENSMEM_SUBDIR;' + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + nnodes: 4 + ppn: 12 + dependency: + and: + <<: *make_ics_deps + taskdep_get_extrn: + attrs: + task: get_extrn_lbcs + + task_run_fcst_mem#mem#: + <<: *default_task + command: '&LOAD_MODULES_RUN_TASK_FP; "run_fcst" "&JOBSdir;/JREGIONAL_RUN_FCST"' + envars: + <<: *default_vars + SLASH_ENSMEM_SUBDIR: '&SLASH_ENSMEM_SUBDIR;' + nprocs: + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + nodesize: '&NCORES_PER_NODE;' + nnodes: '{{ task_run_fcst.NNODES_RUN_FCST // 1 }}' + partition: '{% if platform.get("PARTITION_FCST") %}&PARTITION_FCST;{% else %}None{% endif %}' + ppn: '{{ task_run_fcst.PPN_RUN_FCST // 1 }}' + queue: '&QUEUE_FCST;' + walltime: 04:30:00 + dependency: + and: + taskdep_make_ics: + attrs: + task: make_ics_mem#mem# + taskdep_make_lbcs: + attrs: + task: make_lbcs_mem#mem# + or_nexus_emission: + not: + taskvalid: + attrs: + task: nexus_post_split + taskdep: + attrs: + task: nexus_post_split + or_fire_emission: + not: + taskvalid: + attrs: + task: fire_emission + taskdep: + attrs: + task: fire_emission + or_point_source: + not: + taskvalid: + attrs: + task: point_source + taskdep: + attrs: + task: point_source + or_aqm_ics: + and_no_aqm_ics: + not: + taskvalid: + attrs: + task: aqm_ics_ext + not: + taskvalid: + attrs: + task: aqm_ics + and_aqm_atstart: + taskvalid: + attrs: + task: aqm_ics_ext + taskdep: + attrs: + task: aqm_ics_ext + and_aqm_cycled: + taskvalid: + attrs: + task: aqm_ics + taskdep: + attrs: + task: aqm_ics + or_aqm_lbcs: + not: + taskvalid: + attrs: + task: aqm_lbcs + taskdep: + attrs: + task: aqm_lbcs + diff --git a/parm/wflow/default_workflow.yaml b/parm/wflow/default_workflow.yaml new file mode 100644 index 0000000000..fa64250320 --- /dev/null +++ b/parm/wflow/default_workflow.yaml @@ -0,0 +1,44 @@ +# +# The defaults that cover a majority of our workflow test experiments. +# +rocoto: + entities: + ACCOUNT: '{{ user.ACCOUNT }}' + CCPA_OBS_DIR: '{{ platform.CCPA_OBS_DIR }}' + COMIN_DIR: '{% if user.RUN_ENVIR == "nco" %}{{ nco.COMIN_BASEDIR }}/{{ nco.RUN }}.@Y@m@d/@H {% else %}{{ nco.COMIN_BASEDIR }}/@Y@m@d@H{% endif %}' + COMINgfs: '{{ platform.get("COMINgfs") }}' + FCST_DIR: '{{ nco.DATAROOT }}/run_fcst.{{ workflow.WORKFLOW_ID }}_@Y@m@d@H' + GLOBAL_VAR_DEFNS_FP: '{{ workflow.GLOBAL_VAR_DEFNS_FP }}' + JOBSdir: '{{ user.JOBSdir }}' + LOAD_MODULES_RUN_TASK_FP: '{{ workflow.LOAD_MODULES_RUN_TASK_FP }}' + LOGDIR: '{% if user.RUN_ENVIR == "nco" %}{{"{}/@Y@m@d".format(nco.LOGBASEDIR)}}{% else %}{{nco.LOGBASEDIR }}{% endif %}' + LOGEXT: '{% if user.RUN_ENVIR == "nco" %}{{".{}.log".format(workflow.WORKFLOW_ID)}}{% else %}{{".log"}}{% endif %}' + MRMS_OBS_DIR: '{{ platform.MRMS_OBS_DIR }}' + NCORES_PER_NODE: '{{ platform.NCORES_PER_NODE }}' + NDAS_OBS_DIR: '{{ platform.NDAS_OBS_DIR }}' + NET: '{{ nco.NET }}' + PARTITION_DEFAULT: '{{ platform.get("PARTITION_DEFAULT") }}' + PARTITION_FCST: '{{ platform.get("PARTITION_FCST") }}' + PARTITION_HPSS: '{{ platform.get("PARTITION_HPSS") }}' + QUEUE_DEFAULT: '{{ platform.get("QUEUE_DEFAULT") }}' + QUEUE_FCST: '{{ platform.get("QUEUE_FCST") }}' + QUEUE_HPSS: '{{ platform.get("QUEUE_HPSS") }}' + RUN: '{{ nco.RUN }}' + SCRIPTSdir: '{{ user.SCRIPTSdir }}' + SLASH_ENSMEM_SUBDIR: '{% if global.DO_ENSEMBLE %}{{ "/mem#mem#" }}{% else %}{{ "/" }}{% endif %}' + USHdir: '{{ user.USHdir }}' + WARMSTART_CYCLE_DIR: '{{ workflow.WARMSTART_CYCLE_DIR }}' + WORKFLOW_ID: '{{ workflow.WORKFLOW_ID }}' + attrs: + cyclethrottle: "20" + realtime: "F" + scheduler: '{{ platform.SCHED }}' + taskthrottle: "1000" + cycledefs: + at_start: + - !startstopfreq ['{{workflow.DATE_FIRST_CYCL}}', '{{workflow.DATE_FIRST_CYCL}}', '{{workflow.INCR_CYCL_FREQ}}'] + forecast: + - !startstopfreq ['{{workflow.DATE_FIRST_CYCL}}', '{{workflow.DATE_LAST_CYCL}}', '{{workflow.INCR_CYCL_FREQ}}'] + log: !cycstr '&LOGDIR;/FV3LAM_wflow.{% if user.RUN_ENVIR == "nco" %}{{ workflow.WORKFLOW_ID + "." }}{% endif %}log' + tasks: + taskgroups: '{{ ["parm/wflow/prep.yaml", "parm/wflow/coldstart.yaml", "parm/wflow/post.yaml"]|include }}' diff --git a/parm/wflow/plot.yaml b/parm/wflow/plot.yaml new file mode 100644 index 0000000000..7433d49362 --- /dev/null +++ b/parm/wflow/plot.yaml @@ -0,0 +1,49 @@ +# Settings that will run tasks needed per-experiment to create "fix +# files" for the stationary grid. + +default_task_plot: &default_task + account: '&ACCOUNT;' + attrs: + cycledefs: forecast + maxtries: '1' + envars: &default_envars + GLOBAL_VAR_DEFNS_FP: '&GLOBAL_VAR_DEFNS_FP;' + USHdir: '&USHdir;' + PDY: !cycstr "@Y@m@d" + cyc: !cycstr "@H" + subcyc: !cycstr "@M" + LOGDIR: !cycstr "&LOGDIR;" + SLASH_ENSMEM_SUBDIR: '&SLASH_ENSMEM_SUBDIR;' + ENSMEM_INDX: '#mem#' + nprocs: '{{ nnodes * ppn }}' + native: '{{ platform.SCHED_NATIVE_CMD }}' + nnodes: 1 + nodes: '{{ nnodes }}:ppn={{ ppn }}' + nodesize: "&NCORES_PER_NODE;" + partition: '{% if platform.get("PARTITION_DEFAULT") %}&PARTITION_DEFAULT;{% else %}None{% endif %}' + ppn: 24 + queue: '&QUEUE_DEFAULT;' + walltime: 01:00:00 + +task_plot_allvars: + <<: *default_task + command: '&LOAD_MODULES_RUN_TASK_FP; "plot_allvars" "&JOBSdir;/JREGIONAL_MAKE_GRID"' + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + dependency: + or_do_post: &post_files_exist + and_run_post: # If post was meant to run, wait on the whole post metatask + taskvalid: + attrs: + task: run_post_mem000_f000 + metataskdep: + attrs: + metatask: run_ens_post + and_inline_post: # If inline post ran, wait on the forecast task to complete + not: + taskvalid: + attrs: + task: run_post_mem000_f000 + taskdep: + attrs: + task: run_fcst_mem000 + diff --git a/parm/wflow/post.yaml b/parm/wflow/post.yaml new file mode 100644 index 0000000000..0f80981a8c --- /dev/null +++ b/parm/wflow/post.yaml @@ -0,0 +1,81 @@ +default_task_post: &default_task + account: '&ACCOUNT;' + attrs: + cycledefs: '#cycledef#' + maxtries: '2' + command: '&LOAD_MODULES_RUN_TASK_FP; "run_post" "&JOBSdir;/JREGIONAL_RUN_POST"' + envars: &default_vars + GLOBAL_VAR_DEFNS_FP: '&GLOBAL_VAR_DEFNS_FP;' + USHdir: '&USHdir;' + PDY: !cycstr '@Y@m@d' + cyc: !cycstr '@H' + fhr: '#fhr#' + SLASH_ENSMEM_SUBDIR: '&SLASH_ENSMEM_SUBDIR;' + ENSMEM_INDX: '#mem#' + nprocs: '{{ parent.nnodes * parent.ppn }}' + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + native: '{{ platform.SCHED_NATIVE_CMD }}' + nodes: '{{ nnodes }}:ppn={{ ppn }}' + nnodes: 2 + ppn: 24 + nodesize: "&NCORES_PER_NODE;" + partition: '{% if platform.get("PARTITION_DEFAULT") %}&PARTITION_DEFAULT;{% else %}None{% endif %}' + queue: '&QUEUE_DEFAULT;' + walltime: 00:15:00 + +metatask_run_ens_post: + var: + mem: '{% if global.DO_ENSEMBLE %}{%- for m in range(1, global.NUM_ENS_MEMBERS+1) -%}{{ "%03d "%m }}{%- endfor -%} {% else %}{{ "000"|string }}{% endif %}' + metatask_run_post: + var: + fhr: '{% for h in range(0, workflow.LONG_FCST_LEN+1) %}{{ " %03d" % h }}{% endfor %}' + cycledef: '{% for h in range(0, workflow.LONG_FCST_LEN+1) %}{% if h <= workflow.FCST_LEN_HRS %}forecast {% else %}long_forecast {% endif %}{% endfor %}' + task_run_post_mem#mem#_f#fhr#: + <<: *default_task + dependency: + or: + taskdep: + attrs: + task: run_fcst_mem#mem# + and: + datadep_dyn: + text: !cycstr '&FCST_DIR;&SLASH_ENSMEM_SUBDIR;/dynf#fhr#.nc' + attrs: + age: '05:00' + datadep_phy: + text: !cycstr '&FCST_DIR;&SLASH_ENSMEM_SUBDIR;/phyf#fhr#.nc' + attrs: + age: '05:00' + + metatask_run_sub_hourly_post: + var: + fhr: '{% for h in range(workflow.FCST_LEN_HRS) %}{{ " %03d" % h }}{% endfor %}' + metatask_sub_hourly_post: + var: + fmn: '{% for min in range(0, 60, task_run_post.DT_SUBHOURLY_POST_MNTS) %}{{ " %02d" % min }}{% endfor %}' + task_run_post_mem#mem#_f#fhr##fmn#: &subhourly_run_post_task + <<: *default_task + envars: + <<: *default_vars + fmn: '#fmn#' + dependency: + or: + taskdep: + attrs: + task: run_fcst_mem#mem# + and: + datadep_dyn: + text: !cycstr '&FCST_DIR;&SLASH_ENSMEM_SUBDIR;/dynf#fhr#:#fmn#:00.nc' + attrs: + age: '05:00' + datadep_phy: + text: !cycstr '&FCST_DIR;&SLASH_ENSMEM_SUBDIR;/phyf#fhr#:#fmn#:00.nc' + attrs: + age: '05:00' + + metatask_sub_hourly_last_hour_post: + var: + fhr: '{{ " %03d" % workflow.FCST_LEN_HRS }}' + fmn: '00' + task_run_post_mem#mem#_f#fhr##fmn#: + <<: *subhourly_run_post_task diff --git a/parm/wflow/prdgen.yaml b/parm/wflow/prdgen.yaml new file mode 100644 index 0000000000..c88455ad4c --- /dev/null +++ b/parm/wflow/prdgen.yaml @@ -0,0 +1,35 @@ +metatask_run_prdgen: + var: + mem: '{% if global.DO_ENSEMBLE %}{%- for m in range(1, global.NUM_ENS_MEMBERS+1) -%}{{ "%03d "%m }}{%- endfor -%} {% else %}{{ "000"|string }}{% endif %}' + metatask_run_prdgen_hrs_mem#mem#: + var: + fhr: '{% for h in range(0, workflow.LONG_FCST_LEN+1) %}{{ " %03d" % h }}{% endfor %}' + cycledef: '{% for h in range(0, workflow.LONG_FCST_LEN+1) %}{% if h <= workflow.FCST_LEN_HRS %}forecast {% else %}long_forecast {% endif %}{% endfor %}' + task_run_prdgen_mem#mem#_f#fhr#: + account: '&ACCOUNT;' + attrs: + cycledefs: '#cycledef#' + maxtries: 1 + command: '&LOAD_MODULES_RUN_TASK_FP; "run_prdgen" "&JOBSdir;/JREGIONAL_RUN_PRDGEN"' + envars: + GLOBAL_VAR_DEFNS_FP: '&GLOBAL_VAR_DEFNS_FP;' + USHdir: '&USHdir;' + PDY: !cycstr '@Y@m@d' + cyc: !cycstr '@H' + fhr: '#fhr#' + SLASH_ENSMEM_SUBDIR: '&SLASH_ENSMEM_SUBDIR;' + ENSMEM_INDX: '#mem#' + nprocs: '{{ parent.nnodes * parent.ppn }}' + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + native: '{{ platform.SCHED_NATIVE_CMD }}' + nodes: '{{ nnodes }}:ppn={{ ppn }}' + nodesize: "&NCORES_PER_NODE;" + nnodes: 1 + partition: '{% if platform.get("PARTITION_DEFAULT") %}&PARTITION_DEFAULT;{% else %}None{% endif %}' + ppn: 22 + queue: '&QUEUE_DEFAULT;' + walltime: 00:30:00 + dependency: + taskdep: + attrs: + task: run_post_mem#mem#_f#fhr# diff --git a/parm/wflow/prep.yaml b/parm/wflow/prep.yaml new file mode 100644 index 0000000000..e22fa2dd52 --- /dev/null +++ b/parm/wflow/prep.yaml @@ -0,0 +1,70 @@ +# Settings that will run tasks needed per-experiment to create "fix +# files" for the stationary grid. + +default_task_prep: &default_task + account: '&ACCOUNT;' + attrs: + cycledefs: at_start + maxtries: '2' + envars: &default_envars + GLOBAL_VAR_DEFNS_FP: '&GLOBAL_VAR_DEFNS_FP;' + USHdir: '&USHdir;' + PDY: !cycstr "@Y@m@d" + cyc: !cycstr "@H" + subcyc: !cycstr "@M" + LOGDIR: !cycstr "&LOGDIR;" + nprocs: '{{ parent.nnodes * parent.ppn }}' + native: '{{ platform.SCHED_NATIVE_CMD }}' + nodes: '{{ nnodes }}:ppn={{ ppn }}' + nnodes: 1 + nodesize: "&NCORES_PER_NODE;" + ppn: 24 + partition: '{% if platform.get("PARTITION_DEFAULT") %}&PARTITION_DEFAULT;{% else %}None{% endif %}' + queue: '&QUEUE_DEFAULT;' + walltime: 00:20:00 + +task_make_grid: + <<: *default_task + command: '&LOAD_MODULES_RUN_TASK_FP; "make_grid" "&JOBSdir;/JREGIONAL_MAKE_GRID"' + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + +task_make_orog: + <<: *default_task + command: '&LOAD_MODULES_RUN_TASK_FP; "make_orog" "&JOBSdir;/JREGIONAL_MAKE_OROG"' + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + dependency: + or: &make_grid_satisfied + and: + taskvalid: + attrs: + task: make_grid + taskdep_make_grid: + attrs: + task: make_grid + datadep: + attrs: + age: 00:00:00:05 + text: '{{ task_make_grid.GRID_DIR }}/make_grid_task_complete.txt' + +task_make_sfc_climo: + <<: *default_task + command: '&LOAD_MODULES_RUN_TASK_FP; "make_sfc_climo" "&JOBSdir;/JREGIONAL_MAKE_SFC_CLIMO"' + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + nnodes: 2 + dependency: + and: + or_make_grid: + <<: *make_grid_satisfied + or_make_orog: + and: + taskvalid: + attrs: + task: make_orog + taskdep_make_orog: + attrs: + task: make_orog + datadep: + attrs: + age: 00:00:00:05 + text: '{{ task_make_orog.OROG_DIR }}/make_orog_task_complete.txt' + diff --git a/parm/wflow/verify.yaml b/parm/wflow/verify.yaml new file mode 100644 index 0000000000..86e0f0174d --- /dev/null +++ b/parm/wflow/verify.yaml @@ -0,0 +1,245 @@ +default_task_verify: &default_task + account: '&ACCOUNT;' + attrs: + cycledefs: forecast + maxtries: '1' + envars: &default_vars + GLOBAL_VAR_DEFNS_FP: '&GLOBAL_VAR_DEFNS_FP;' + USHdir: '&USHdir;' + PDY: !cycstr '@Y@m@d' + cyc: !cycstr "@H" + subcyc: !cycstr "@M" + LOGDIR: !cycstr "&LOGDIR;" + nprocs: '{{ parent.nnodes * parent.ppn }}' + FHR: '{% for h in range(0, workflow.FCST_LEN_HRS+1) %}{{ " %02d" % h }}{% endfor %}' + SLASH_ENSMEM_SUBDIR: '&SLASH_ENSMEM_SUBDIR;' + ENSMEM_INDX: "#mem#" + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + memory: '{% if user.MACHINE not in ["WCOSS2", "NOAACLOUD"] %}{{ "2G" }}{% endif %}' + native: '{{ platform.SCHED_NATIVE_CMD }}' + nnodes: 1 + nodes: '{{ nnodes }}:ppn={{ ppn }}' + nodesize: '&NCORES_PER_NODE;' + partition: '{% if platform.get("PARTITION_DEFAULT") %}&PARTITION_DEFAULT;{% else %}None{% endif %}' + ppn: 1 + queue: '&QUEUE_DEFAULT;' + walltime: 00:30:00 + +task_get_obs_ccpa: + <<: *default_task + command: '&LOAD_MODULES_RUN_TASK_FP; "get_obs" "&JOBSdir;/JREGIONAL_GET_OBS_CCPA"' + envars: + <<: *default_vars + ACCUM_HH: '01' + OBS_DIR: '&CCPA_OBS_DIR;' + partition: '{% if platform.get("PARTITION_HPSS") %}&PARTITION_HPSS;{% else %}None{% endif %}' + queue: "&QUEUE_HPSS;" + walltime: 00:45:00 + +task_get_obs_mrms: + <<: *default_task + command: '&LOAD_MODULES_RUN_TASK_FP; "get_obs" "&JOBSdir;/JREGIONAL_GET_OBS_MRMS"' + envars: + <<: *default_vars + OBS_DIR: '&MRMS_OBS_DIR;' + VAR: 'REFC RETOP' + partition: '{% if platform.get("PARTITION_HPSS") %}&PARTITION_HPSS;{% else %}None{% endif %}' + queue: "&QUEUE_HPSS;" + walltime: 00:45:00 + +task_get_obs_ndas: + <<: *default_task + envars: + <<: *default_vars + OBS_DIR: '&NDAS_OBS_DIR;' + command: '&LOAD_MODULES_RUN_TASK_FP; "get_obs" "&JOBSdir;/JREGIONAL_GET_OBS_NDAS"' + queue: "&QUEUE_HPSS;" + partition: '{% if platform.get("PARTITION_HPSS") %}&PARTITION_HPSS;{% else %}None{% endif %}' + walltime: 02:00:00 + +task_run_MET_Pb2nc_obs: + <<: *default_task + attrs: + cycledefs: forecast + maxtries: '2' + command: '&LOAD_MODULES_RUN_TASK_FP; "run_vx" "&JOBSdir;/JREGIONAL_RUN_MET_PB2NC_OBS"' + envars: + <<: *default_vars + VAR: SFC + ACCUM_HH: '01' + obs_or_fcst: obs + OBTYPE: NDAS + OBS_DIR: '&NDAS_OBS_DIR;' + MET_TOOL: 'PB2NC' + dependency: + and: + datadep: + text: "&NDAS_OBS_DIR;" + or: + not: + taskvalid: + attrs: + task: get_obs_ndas + taskdep: + attrs: + task: get_obs_ndas + +metatask_vx_ens_member: + attrs: + mode: serial + var: + mem: '{% if global.DO_ENSEMBLE %}{% for m in range(1, global.NUM_ENS_MEMBERS+1) %}{{ "%03d "%m }}{%- endfor -%} {% else %}{{ "000"|string }}{% endif %}' + metatask_GridStat_MRMS_mem#mem#: + var: + VAR: REFC RETOP + task_run_MET_GridStat_vx_#VAR#_mem#mem#: + <<: *default_task + command: '&LOAD_MODULES_RUN_TASK_FP; "run_vx" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX"' + envars: + <<: *default_vars + OBS_DIR: '&MRMS_OBS_DIR;' + VAR: '#VAR#' + ACCUM_HH: '01' + MET_TOOL: 'GRIDSTAT' + OBTYPE: 'MRMS' + walltime: 02:00:00 + dependency: + and: + or_get_obs: # Ensure get_obs task is complete if it's turned on + not: + taskvalid: + attrs: + task: get_obs_mrms + and: + taskvalid: + attrs: + task: get_obs_mrms + taskdep: + attrs: + task: get_obs_mrms + or_do_post: &post_files_exist + and_run_post: # If post was meant to run, wait on the whole post metatask + taskvalid: + attrs: + task: run_post_mem#mem#_f000 + metataskdep: + attrs: + metatask: run_ens_post + and_inline_post: # If inline post ran, wait on the forecast task to complete + not: + taskvalid: + attrs: + task: run_post_mem#mem#_f000 + taskdep: + attrs: + task: run_fcst_mem#mem# + + metatask_PointStat_mem#mem#: + var: + VAR: SFC UPA + task_run_MET_PointStat_vx_#VAR#_mem#mem#: + <<: *default_task + command: '&LOAD_MODULES_RUN_TASK_FP; "run_vx" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX"' + envars: + <<: *default_vars + FHR: '#FCST_HR_LIST#' + OBS_DIR: '&NDAS_OBS_DIR;' + VAR: '#VAR#' + MET_TOOL: 'POINTSTAT' + OBTYPE: 'NDAS' + ACCUM_HH: '01' + walltime: 01:00:00 + dependency: + and: + or_do_post: + <<: *post_files_exist + or_get_obs: # Get obs complete if turned on + not: + taskvalid: + attrs: + task: get_obs_ndas + and: + taskvalid: + attrs: + task: get_obs_ndas + taskdep: + attrs: + task: get_obs_ndas + +metatask_GridStat_APCP_acc: + attrs: + mode: serial + var: + ACCUM_HR: '{% for ah in [1, 3, 6, 24] %}{% if workflow.FCST_LEN_HRS >= ah %}{{ "%02d " % ah }}{% endif %}{% endfor %}' + FCST_HR_LIST: '{% for ah in [1, 3, 6, 24] %}{% if workflow.FCST_LEN_HRS >= ah %}{% for h in range(ah, workflow.FCST_LEN_HRS+1, ah) %}{{ "%02d," % h }}{% endfor %}{% endif %} {% endfor %}' + + + task_run_MET_PcpCombine_obs_APCP#ACCUM_HR#h: + <<: *default_task + attrs: + cycledefs: forecast + maxtries: '2' + command: '&LOAD_MODULES_RUN_TASK_FP; "run_vx" "&JOBSdir;/JREGIONAL_RUN_MET_PCPCOMBINE"' + envars: + <<: *default_vars + VAR: APCP + ACCUM_HH: '#ACCUM_HR#' + obs_or_fcst: obs + OBTYPE: CCPA + OBS_DIR: '&CCPA_OBS_DIR;' + MET_TOOL: 'PCPCOMBINE' + dependency: + or: + not: + taskvalid: + attrs: + task: get_obs_ccpa + and: + taskdep: + attrs: + task: get_obs_ccpa + datadep: + text: "&CCPA_OBS_DIR;" + + metatask_vx_ens_member_acc: + 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_APCP#ACCUM_HR#h_mem#mem#: + <<: *default_task + attrs: + cycledefs: forecast + maxtries: '2' + command: '&LOAD_MODULES_RUN_TASK_FP; "run_vx" "&JOBSdir;/JREGIONAL_RUN_MET_PCPCOMBINE"' + envars: + <<: *default_vars + VAR: APCP + ACCUM_HH: '#ACCUM_HR#' + obs_or_fcst: fcst + OBTYPE: CCPA + OBS_DIR: '&CCPA_OBS_DIR;' + MET_TOOL: 'PCPCOMBINE' + dependency: + or_do_post: + <<: *post_files_exist + + task_run_MET_GridStat_vx_APCP#ACCUM_HR#h_mem#mem#: + <<: *default_task + command: '&LOAD_MODULES_RUN_TASK_FP; "run_vx" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX"' + envars: + <<: *default_vars + FHR: '#FCST_HR_LIST#' + OBS_DIR: '&CCPA_OBS_DIR;' + VAR: APCP + ACCUM_HH: '#ACCUM_HR#' + MET_TOOL: 'GRIDSTAT' + OBTYPE: 'CCPA' + walltime: 02:00:00 + dependency: + and: + taskdep_obs: + attrs: + task: run_MET_PcpCombine_obs_APCP#ACCUM_HR#h + taskdep_fcst: + attrs: + task: run_MET_PcpCombine_fcst_APCP#ACCUM_HR#h_mem#mem# diff --git a/parm/wflow/verify_ensgrid.yaml b/parm/wflow/verify_ensgrid.yaml new file mode 100644 index 0000000000..f9006ca273 --- /dev/null +++ b/parm/wflow/verify_ensgrid.yaml @@ -0,0 +1,162 @@ +default_task_verify_ens: &default_task_verify_ens + account: '&ACCOUNT;' + attrs: + cycledefs: forecast + maxtries: '1' + envars: &default_vars + GLOBAL_VAR_DEFNS_FP: '&GLOBAL_VAR_DEFNS_FP;' + USHdir: '&USHdir;' + PDY: !cycstr '@Y@m@d' + cyc: !cycstr "@H" + subcyc: !cycstr "@M" + LOGDIR: !cycstr "&LOGDIR;" + FHR: '{% for h in range(0, workflow.FCST_LEN_HRS+1) %}{{ " %02d" % h }}{% endfor %}' + SLASH_ENSMEM_SUBDIR: '&SLASH_ENSMEM_SUBDIR;' + nprocs: '{{ parent.nnodes * parent.ppn }}' + join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' + memory: '{% if user.MACHINE not in ["WCOSS2", "NOAACLOUD"] %}{{ "2G" }}{% endif %}' + native: '{{ platform.SCHED_NATIVE_CMD }}' + nnodes: 1 + nodes: '{{ nnodes }}:ppn={{ ppn }}' + nodesize: '&NCORES_PER_NODE;' + partition: '{% if platform.get("PARTITION_DEFAULT") %}&PARTITION_DEFAULT;{% else %}None{% endif %}' + ppn: 1 + queue: '&QUEUE_DEFAULT;' + walltime: 01:00:00 + +metatask_EnsembleStat: + var: + VAR: REFC RETOP + task_run_MET_EnsembleStat_vx_#VAR#: + <<: *default_task_verify_ens + command: '&LOAD_MODULES_RUN_TASK_FP; "run_vx" "&JOBSdir;/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT"' + envars: + <<: *default_vars + ACCUM_HH: '01' + OBS_DIR: '&MRMS_OBS_DIR;' + VAR: '#VAR#' + MET_TOOL: 'ENSEMBLESTAT' + OBTYPE: 'MRMS' + ENSMEM_INDX: '#mem#' + dependency: + metataskdep: + attrs: + metatask: run_ens_post + +metatask_GridStat_ensprob: + var: + VAR: REFC RETOP + task_run_MET_GridStat_vx_ensprob_#VAR#: + <<: *default_task_verify_ens + command: '&LOAD_MODULES_RUN_TASK_FP; "run_vx" "&JOBSdir;/JREGIONAL_RUN_MET_GRIDSTAT_OR_POINTSTAT_VX_ENSPROB"' + envars: + <<: *default_vars + ACCUM_HH: '01' + OBS_DIR: '&MRMS_OBS_DIR;' + VAR: '#VAR#' + MET_TOOL: 'GRIDSTAT' + OBTYPE: 'MRMS' + dependency: + taskdep: + attrs: + task: run_MET_EnsembleStat_vx_#VAR# + +metatask_EnsembleStat_acc: + var: + ACCUM_HR: '{% for ah in [1, 3, 6, 24] %}{% if workflow.FCST_LEN_HRS >= ah %}{{ "%02d " % ah }}{% endif %}{% endfor %}' + FCST_HR_LIST: '{% for ah in [1, 3, 6, 24] %}{% if workflow.FCST_LEN_HRS >= ah %}{% for h in range(ah, workflow.FCST_LEN_HRS+1, ah) %}{{ "%02d," % h }}{% endfor %}{% endif %} {% endfor %}' + task_run_MET_EnsembleStat_vx_APCP#ACCUM_HR#h: + <<: *default_task_verify_ens + command: '&LOAD_MODULES_RUN_TASK_FP; "run_vx" "&JOBSdir;/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT"' + envars: + <<: *default_vars + ACCUM_HH: '#ACCUM_HR#' + FHR: '#FCST_HR_LIST#' + OBS_DIR: '&CCPA_OBS_DIR;' + VAR: APCP + MET_TOOL: 'ENSEMBLESTAT' + OBTYPE: 'CCPA' + dependency: + and: + or_do_post: &post_files_exist + and_run_post: # If post was meant to run, wait on the whole post metatask + taskvalid: + attrs: + task: run_post_mem001_f000 + metataskdep: + attrs: + metatask: run_ens_post + and_inline_post: # If inline post ran, wait on the forecast ensemble to complete + not: + taskvalid: + attrs: + task: run_post_mem001_f000 + metataskdep: + attrs: + metatask: run_ensemble + metataskdep: + attrs: + metatask: GridStat_APCP_acc + +metatask_ensemble_vx_stats: + var: + stat: MEAN PROB + statlc: mean prob + metatask_GridStat_ens_acc: + var: + ACCUM_HR: '{% for ah in [1, 3, 6, 24] %}{% if workflow.FCST_LEN_HRS >= ah %}{{ "%02d " % ah }}{% endif %}{% endfor %}' + FCST_HR_LIST: '{% for ah in [1, 3, 6, 24] %}{% if workflow.FCST_LEN_HRS >= ah %}{% for h in range(ah, workflow.FCST_LEN_HRS+1, ah) %}{{ "%02d," % h }}{% endfor %}{% endif %} {% endfor %}' + task_run_MET_GridStat_vx_ens#statlc#_APCP#ACCUM_HR#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 + ACCUM_HH: '#ACCUM_HR#' + FHR: '#FCST_HR_LIST#' + OBS_DIR: '&CCPA_OBS_DIR;' + VAR: APCP + MET_TOOL: 'GRIDSTAT' + OBTYPE: 'CCPA' + dependency: + taskdep: + attrs: + task: run_MET_EnsembleStat_vx_APCP#ACCUM_HR#h + metatask_PointStat_ens: + var: + VAR: SFC UPA + task_run_MET_PointStat_vx_ens#statlc#_#VAR#: + <<: *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: '&NDAS_OBS_DIR;' + VAR: '#VAR#' + MET_TOOL: 'POINTSTAT' + OBTYPE: 'NDAS' + ACCUM_HH: '01' + dependency: + taskdep: + attrs: + task: run_MET_EnsembleStat_vx_#VAR# + +metatask_EnsembleStat_point: + var: + VAR: SFC UPA + task_run_MET_EnsembleStat_vx_#VAR#: + <<: *default_task_verify_ens + command: '&LOAD_MODULES_RUN_TASK_FP; "run_vx" "&JOBSdir;/JREGIONAL_RUN_MET_GENENSPROD_OR_ENSEMBLESTAT"' + envars: + <<: *default_vars + OBS_DIR: '&NDAS_OBS_DIR;' + VAR: '#VAR#' + MET_TOOL: 'ENSEMBLESTAT' + OBTYPE: 'NDAS' + ACCUM_HH: '01' + dependency: + and: + metataskdep: + attrs: + metatask: run_ens_post + taskdep: + attrs: + task: run_MET_Pb2nc_obs diff --git a/scripts/exregional_aqm_lbcs.sh b/scripts/exregional_aqm_lbcs.sh index 79dbd1663f..71f72d2045 100755 --- a/scripts/exregional_aqm_lbcs.sh +++ b/scripts/exregional_aqm_lbcs.sh @@ -94,13 +94,10 @@ cd_vrfy $DATA yyyymmdd="${PDY}" mm="${PDY:4:2}" + if [ "${FCST_LEN_HRS}" = "-1" ]; then - for i_cdate in "${!ALL_CDATES[@]}"; do - if [ "${ALL_CDATES[$i_cdate]}" = "${PDY}${cyc}" ]; then - FCST_LEN_HRS="${FCST_LEN_CYCL_ALL[$i_cdate]}" - break - fi - done + CYCLE_IDX=$(( ${cyc} / ${INCR_CYCL_FREQ} )) + FCST_LEN_HRS=${FCST_LEN_CYCL[$CYCLE_IDX]} fi LBC_SPEC_FCST_HRS=() for i_lbc in $(seq ${LBC_SPEC_INTVL_HRS} ${LBC_SPEC_INTVL_HRS} ${FCST_LEN_HRS} ); do diff --git a/scripts/exregional_bias_correction_o3.sh b/scripts/exregional_bias_correction_o3.sh index 7a40658700..e265851c49 100755 --- a/scripts/exregional_bias_correction_o3.sh +++ b/scripts/exregional_bias_correction_o3.sh @@ -107,12 +107,8 @@ if [ "${PREDEF_GRID_NAME}" = "AQM_NA_13km" ]; then fi if [ "${FCST_LEN_HRS}" = "-1" ]; then - for i_cdate in "${!ALL_CDATES[@]}"; do - if [ "${ALL_CDATES[$i_cdate]}" = "${PDY}${cyc}" ]; then - FCST_LEN_HRS="${FCST_LEN_CYCL_ALL[$i_cdate]}" - break - fi - done + CYCLE_IDX=$(( ${cyc} / ${INCR_CYCL_FREQ} )) + FCST_LEN_HRS=${FCST_LEN_CYCL[$CYCLE_IDX]} fi #----------------------------------------------------------------------------- diff --git a/scripts/exregional_bias_correction_pm25.sh b/scripts/exregional_bias_correction_pm25.sh index ca3b130154..57fc639952 100755 --- a/scripts/exregional_bias_correction_pm25.sh +++ b/scripts/exregional_bias_correction_pm25.sh @@ -105,16 +105,12 @@ yyyymm_m3=${PDYm3:0:6} if [ "${PREDEF_GRID_NAME}" = "AQM_NA_13km" ]; then id_domain=793 fi - if [ "${FCST_LEN_HRS}" = "-1" ]; then - for i_cdate in "${!ALL_CDATES[@]}"; do - if [ "${ALL_CDATES[$i_cdate]}" = "${PDY}${cyc}" ]; then - FCST_LEN_HRS="${FCST_LEN_CYCL_ALL[$i_cdate]}" - break - fi - done + CYCLE_IDX=$(( ${cyc} / ${INCR_CYCL_FREQ} )) + FCST_LEN_HRS=${FCST_LEN_CYCL[$CYCLE_IDX]} fi + #----------------------------------------------------------------------------- # STEP 1: Retrieve AIRNOW observation data #----------------------------------------------------------------------------- diff --git a/scripts/exregional_get_extrn_mdl_files.sh b/scripts/exregional_get_extrn_mdl_files.sh index ed0984b6d1..9b43bb34fe 100755 --- a/scripts/exregional_get_extrn_mdl_files.sh +++ b/scripts/exregional_get_extrn_mdl_files.sh @@ -72,12 +72,8 @@ elif [ "${ICS_OR_LBCS}" = "LBCS" ]; then file_set="fcst" first_time=$((TIME_OFFSET_HRS + LBC_SPEC_INTVL_HRS)) if [ "${FCST_LEN_HRS}" = "-1" ]; then - for i_cdate in "${!ALL_CDATES[@]}"; do - if [ "${ALL_CDATES[$i_cdate]}" = "${PDY}${cyc}" ]; then - FCST_LEN_HRS="${FCST_LEN_CYCL_ALL[$i_cdate]}" - break - fi - done + CYCLE_IDX=$(( ${cyc} / ${INCR_CYCL_FREQ} )) + FCST_LEN_HRS=${FCST_LEN_CYCL[$CYCLE_IDX]} fi last_time=$((TIME_OFFSET_HRS + FCST_LEN_HRS)) fcst_hrs="${first_time} ${last_time} ${LBC_SPEC_INTVL_HRS}" diff --git a/scripts/exregional_get_obs_ccpa.sh b/scripts/exregional_get_obs_ccpa.sh index ccb7e78297..d3f53c8d5a 100755 --- a/scripts/exregional_get_obs_ccpa.sh +++ b/scripts/exregional_get_obs_ccpa.sh @@ -8,7 +8,7 @@ #----------------------------------------------------------------------- # . $USHdir/source_util_funcs.sh -source_config_for_task "task_get_obs_ccpa" ${GLOBAL_VAR_DEFNS_FP} +source_config_for_task " " ${GLOBAL_VAR_DEFNS_FP} # #----------------------------------------------------------------------- # diff --git a/scripts/exregional_get_obs_mrms.sh b/scripts/exregional_get_obs_mrms.sh index 89ea7a7a19..2f2d7afb4f 100755 --- a/scripts/exregional_get_obs_mrms.sh +++ b/scripts/exregional_get_obs_mrms.sh @@ -8,7 +8,7 @@ #----------------------------------------------------------------------- # . $USHdir/source_util_funcs.sh -source_config_for_task "task_get_obs_mrms" ${GLOBAL_VAR_DEFNS_FP} +source_config_for_task " " ${GLOBAL_VAR_DEFNS_FP} # #----------------------------------------------------------------------- # @@ -61,12 +61,12 @@ s_dd=`echo ${start_valid} | cut -c7-8` # day (DD) of start time s_hh=`echo ${start_valid} | cut -c9-10` # hour (HH) of start time start_valid_ut=`$DATE_UTIL -ud ''${s_yyyy}-${s_mm}-${s_dd}' UTC '${s_hh}':00:00' +%s` # convert start time to universal time -end_fcst_sec=`expr ${fcst_length} \* 3600` # convert last forecast lead hour to seconds -end_valid_ut=`expr ${start_valid_ut} + ${end_fcst_sec}` # calculate current forecast time in universal time +end_fcst_sec=$(( ${fcst_length} * 3600 )) # convert last forecast lead hour to seconds +end_valid_ut=$(( ${start_valid_ut} + ${end_fcst_sec} )) # calculate current forecast time in universal time cur_ut=${start_valid_ut} current_fcst=0 -fcst_sec=`expr ${current_fcst} \* 3600` # convert forecast lead hour to seconds +fcst_sec=$(( ${current_fcst} * 3600 )) # convert forecast lead hour to seconds while [[ ${cur_ut} -le ${end_valid_ut} ]]; do cur_time=`$DATE_UTIL -ud '1970-01-01 UTC '${cur_ut}' seconds' +%Y%m%d%H` # convert universal time to standard time @@ -155,8 +155,8 @@ Did you forget to run \"module load hpss\"?\ # Increment current_fcst=$((${current_fcst} + 1)) # hourly increment - fcst_sec=`expr ${current_fcst} \* 3600` # convert forecast lead hour to seconds - cur_ut=`expr ${start_valid_ut} + ${fcst_sec}` + fcst_sec=$(( ${current_fcst} * 3600 )) # convert forecast lead hour to seconds + cur_ut=$(( ${start_valid_ut} + ${fcst_sec} )) done # diff --git a/scripts/exregional_get_obs_ndas.sh b/scripts/exregional_get_obs_ndas.sh index 6c5f4ed31c..401013a9ce 100755 --- a/scripts/exregional_get_obs_ndas.sh +++ b/scripts/exregional_get_obs_ndas.sh @@ -8,7 +8,7 @@ #----------------------------------------------------------------------- # . $USHdir/source_util_funcs.sh -source_config_for_task "task_get_obs_ndas" ${GLOBAL_VAR_DEFNS_FP} +source_config_for_task " " ${GLOBAL_VAR_DEFNS_FP} # #----------------------------------------------------------------------- # @@ -26,7 +26,6 @@ source_config_for_task "task_get_obs_ndas" ${GLOBAL_VAR_DEFNS_FP} # #----------------------------------------------------------------------- # - # Top-level NDAS directory ndas_dir=${OBS_DIR}/.. if [[ ! -d "$ndas_dir" ]]; then @@ -58,68 +57,27 @@ fcst_length=${fhr_last} current_fcst=00 while [[ ${current_fcst} -le ${fcst_length} ]]; do - 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 + fcst_sec=$(( ${current_fcst} * 3600 )) # convert forecast lead hour to seconds + yyyy=${init:0:4} # year (YYYY) of initialization time + mm=${init:4:2} # month (MM) of initialization time + dd=${init:6:2} # day (DD) of initialization time + hh=${init:8:2} # 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_ut=$(( ${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) + vyyyymmdd=${vdate:0:8} # forecast time (YYYYMMDD) + vyyyy=${vdate:0:4} # year (YYYY) of valid time + vmm=${vdate:4:2} # month (MM) of valid time + vdd=${vdate:6:2} # day (DD) of valid time + vhh=${vdate:8:2} # forecast hour (HH) + vhh_noZero=$(( ${vhh} + 0 )) echo "yyyy mm dd hh= $yyyy $mm $dd $hh" echo "vyyyy vmm vdd vhh= $vyyyy $vmm $vdd $vhh" - - vdate_ut_m1h=`expr ${vdate_ut} - 3600` # calculate current forecast time in universal time - vdate_m1h=`$DATE_UTIL -ud '1970-01-01 UTC '${vdate_ut_m1h}' seconds' +%Y%m%d%H` # convert universal time to standard time - vyyyymmdd_m1h=`echo ${vdate_m1h} | cut -c1-8` # forecast time (YYYYMMDD) - vyyyy_m1h=`echo ${vdate_m1h} | cut -c1-4` # year (YYYY) of valid time - vmm_m1h=`echo ${vdate_m1h} | cut -c5-6` # month (MM) of valid time - vdd_m1h=`echo ${vdate_m1h} | cut -c7-8` # day (DD) of valid time - vhh_m1h=`echo ${vdate_m1h} | cut -c9-10` # forecast hour (HH) - - vdate_ut_m2h=`expr ${vdate_ut} - 7200` # calculate current forecast time in universal time - vdate_m2h=`$DATE_UTIL -ud '1970-01-01 UTC '${vdate_ut_m2h}' seconds' +%Y%m%d%H` # convert universal time to standard time - vyyyymmdd_m2h=`echo ${vdate_m2h} | cut -c1-8` # forecast time (YYYYMMDD) - vyyyy_m2h=`echo ${vdate_m2h} | cut -c1-4` # year (YYYY) of valid time - vmm_m2h=`echo ${vdate_m2h} | cut -c5-6` # month (MM) of valid time - vdd_m2h=`echo ${vdate_m2h} | cut -c7-8` # day (DD) of valid time - vhh_m2h=`echo ${vdate_m2h} | cut -c9-10` # forecast hour (HH) - - vdate_ut_m3h=`expr ${vdate_ut} - 10800` # calculate current forecast time in universal time - vdate_m3h=`$DATE_UTIL -ud '1970-01-01 UTC '${vdate_ut_m3h}' seconds' +%Y%m%d%H` # convert universal time to standard time - vyyyymmdd_m3h=`echo ${vdate_m3h} | cut -c1-8` # forecast time (YYYYMMDD) - vyyyy_m3h=`echo ${vdate_m3h} | cut -c1-4` # year (YYYY) of valid time - vmm_m3h=`echo ${vdate_m3h} | cut -c5-6` # month (MM) of valid time - vdd_m3h=`echo ${vdate_m3h} | cut -c7-8` # day (DD) of valid time - vhh_m3h=`echo ${vdate_m3h} | cut -c9-10` # forecast hour (HH) - - vdate_ut_m4h=`expr ${vdate_ut} - 14400` # calculate current forecast time in universal time - vdate_m4h=`$DATE_UTIL -ud '1970-01-01 UTC '${vdate_ut_m4h}' seconds' +%Y%m%d%H` # convert universal time to standard time - vyyyymmdd_m4h=`echo ${vdate_m4h} | cut -c1-8` # forecast time (YYYYMMDD) - vyyyy_m4h=`echo ${vdate_m4h} | cut -c1-4` # year (YYYY) of valid time - vmm_m4h=`echo ${vdate_m4h} | cut -c5-6` # month (MM) of valid time - vdd_m4h=`echo ${vdate_m4h} | cut -c7-8` # day (DD) of valid time - vhh_m4h=`echo ${vdate_m4h} | cut -c9-10` # forecast hour (HH) - - vdate_ut_m5h=`expr ${vdate_ut} - 18000` # calculate current forecast time in universal time - vdate_m5h=`$DATE_UTIL -ud '1970-01-01 UTC '${vdate_ut_m5h}' seconds' +%Y%m%d%H` # convert universal time to standard time - vyyyymmdd_m5h=`echo ${vdate_m5h} | cut -c1-8` # forecast time (YYYYMMDD) - vyyyy_m5h=`echo ${vdate_m5h} | cut -c1-4` # year (YYYY) of valid time - vmm_m5h=`echo ${vdate_m5h} | cut -c5-6` # month (MM) of valid time - vdd_m5h=`echo ${vdate_m5h} | cut -c7-8` # day (DD) of valid time - vhh_m5h=`echo ${vdate_m5h} | cut -c9-10` # forecast hour (HH) - - vhh_noZero=$(expr ${vhh} + 0) - -echo "vyyyymmdd_m1h vhh_m1h=$vyyyymmdd_m1h $vhh_m1h" echo "vhh_noZero=$vhh_noZero" + + # Check if file exists on disk ndas_file="$ndas_proc/prepbufr.ndas.${vyyyymmdd}${vhh}" echo "NDAS PB FILE:${ndas_file}" @@ -127,7 +85,7 @@ echo "vhh_noZero=$vhh_noZero" if [[ ! -f "${ndas_file}" ]]; then if [[ ! -d "$ndas_raw/${vyyyymmdd}${vhh}" ]]; then mkdir_vrfy -p $ndas_raw/${vyyyymmdd}${vhh} - fi + fi cd_vrfy $ndas_raw/${vyyyymmdd}${vhh} # Name of NDAS tar file on HPSS is dependent on date. Logic accounts for files from 2019 until July 2020. @@ -158,13 +116,15 @@ echo "vhh_noZero=$vhh_noZero" fi if [[ ${vhh_noZero} -eq 0 || ${vhh} -eq 6 || ${vhh} -eq 12 || ${vhh} -eq 18 ]]; then - #echo "$ndas_raw/${vyyyymmdd}${vhh}/nam.t${vhh}z.prepbufr.tm00.nr $ndas_proc/prepbufr.ndas.${vyyyymmdd}${vhh}" - cp_vrfy $ndas_raw/${vyyyymmdd}${vhh}/nam.t${vhh}z.prepbufr.tm00.nr $ndas_proc/prepbufr.ndas.${vyyyymmdd}${vhh} - cp_vrfy $ndas_raw/${vyyyymmdd}${vhh}/nam.t${vhh}z.prepbufr.tm01.nr $ndas_proc/prepbufr.ndas.${vyyyymmdd_m1h}${vhh_m1h} - cp_vrfy $ndas_raw/${vyyyymmdd}${vhh}/nam.t${vhh}z.prepbufr.tm02.nr $ndas_proc/prepbufr.ndas.${vyyyymmdd_m2h}${vhh_m2h} - cp_vrfy $ndas_raw/${vyyyymmdd}${vhh}/nam.t${vhh}z.prepbufr.tm03.nr $ndas_proc/prepbufr.ndas.${vyyyymmdd_m3h}${vhh_m3h} - cp_vrfy $ndas_raw/${vyyyymmdd}${vhh}/nam.t${vhh}z.prepbufr.tm04.nr $ndas_proc/prepbufr.ndas.${vyyyymmdd_m4h}${vhh_m4h} - cp_vrfy $ndas_raw/${vyyyymmdd}${vhh}/nam.t${vhh}z.prepbufr.tm05.nr $ndas_proc/prepbufr.ndas.${vyyyymmdd_m5h}${vhh_m5h} + # copy files from the previous 6 hours + for tm in $(seq 0 5); do + vdate_ut_tm=$(( ${vdate_ut} - $tm * 3600 )) + vdate_tm=$($DATE_UTIL -ud '1970-01-01 UTC '${vdate_ut_tm}' seconds' +%Y%m%d%H) + vyyyymmddhh_tm=${vdate_tm:0:10} + tm2=$(echo $tm | awk '{printf "%02d\n", $0;}') + + cp_vrfy $ndas_raw/${vyyyymmdd}${vhh}/nam.t${vhh}z.prepbufr.tm${tm2}.nr $ndas_proc/prepbufr.ndas.${vyyyymmddhh_tm} + done fi fi current_fcst=$((${current_fcst} + 6)) diff --git a/scripts/exregional_make_grid.sh b/scripts/exregional_make_grid.sh index eef3518056..88472a8343 100755 --- a/scripts/exregional_make_grid.sh +++ b/scripts/exregional_make_grid.sh @@ -394,11 +394,11 @@ mv_vrfy "${grid_fp_orig}" "${grid_fp}" #----------------------------------------------------------------------- # # If there are pre-existing orography or climatology files that we will -# be using (i.e. if RUN_TASK_MAKE_OROG or RUN_TASK_MAKE_SURF_CLIMO is set -# to "FALSE", in which case RES_IN_FIXLAM_FILENAMES will not be set to a -# null string), check that the grid resolution contained in the variable -# CRES set above matches the resolution appearing in the names of the -# preexisting orography and/or surface climatology files. +# be using (i.e. if task_make_grid or task_make_sfc_climo ran in the +# experiment, RES_IN_FIXLAM_FILENAMES will not be set to a null string), +# check that the grid resolution contained in the variable CRES set +# above matches the resolution appearing in the names of the preexisting +# orography and/or surface climatology files. # #----------------------------------------------------------------------- # diff --git a/scripts/exregional_make_ics.sh b/scripts/exregional_make_ics.sh index 3fa42a8f93..25c4a03f95 100755 --- a/scripts/exregional_make_ics.sh +++ b/scripts/exregional_make_ics.sh @@ -65,8 +65,6 @@ export OMP_STACKSIZE=${OMP_STACKSIZE_MAKE_ICS} # eval ${PRE_TASK_CMDS} -nprocs=$(( NNODES_MAKE_ICS*PPN_MAKE_ICS )) - if [ -z "${RUN_CMD_UTILS:-}" ] ; then print_err_msg_exit "\ Run command was not set in machine file. \ diff --git a/scripts/exregional_make_lbcs.sh b/scripts/exregional_make_lbcs.sh index cf32af3f0b..bb43a22714 100755 --- a/scripts/exregional_make_lbcs.sh +++ b/scripts/exregional_make_lbcs.sh @@ -65,8 +65,6 @@ export OMP_STACKSIZE=${OMP_STACKSIZE_MAKE_LBCS} # eval ${PRE_TASK_CMDS} -nprocs=$(( NNODES_MAKE_LBCS*PPN_MAKE_LBCS )) - if [ -z "${RUN_CMD_UTILS:-}" ] ; then print_err_msg_exit "\ Run command was not set in machine file. \ @@ -103,12 +101,8 @@ mkdir_vrfy -p "$DATA" cd_vrfy $DATA if [ "${FCST_LEN_HRS}" = "-1" ]; then - for i_cdate in "${!ALL_CDATES[@]}"; do - if [ "${ALL_CDATES[$i_cdate]}" = "${PDY}${cyc}" ]; then - FCST_LEN_HRS="${FCST_LEN_CYCL_ALL[$i_cdate]}" - break - fi - done + CYCLE_IDX=$(( ${cyc} / ${INCR_CYCL_FREQ} )) + FCST_LEN_HRS=${FCST_LEN_CYCL[$CYCLE_IDX]} fi LBC_SPEC_FCST_HRS=() for i_lbc in $(seq ${LBC_SPEC_INTVL_HRS} ${LBC_SPEC_INTVL_HRS} $(( FCST_LEN_HRS+LBC_SPEC_INTVL_HRS )) ); do diff --git a/scripts/exregional_make_sfc_climo.sh b/scripts/exregional_make_sfc_climo.sh index ad00e307ef..d641fd6267 100755 --- a/scripts/exregional_make_sfc_climo.sh +++ b/scripts/exregional_make_sfc_climo.sh @@ -108,8 +108,6 @@ EOF # eval ${PRE_TASK_CMDS} -nprocs=$(( NNODES_MAKE_SFC_CLIMO*PPN_MAKE_SFC_CLIMO )) - if [ -z "${RUN_CMD_UTILS:-}" ] ; then print_err_msg_exit "\ Run command was not set in machine file. \ diff --git a/scripts/exregional_nexus_emission.sh b/scripts/exregional_nexus_emission.sh index e0698650ce..9d3f04b86f 100755 --- a/scripts/exregional_nexus_emission.sh +++ b/scripts/exregional_nexus_emission.sh @@ -64,8 +64,6 @@ export OMP_STACKSIZE=${OMP_STACKSIZE_NEXUS_EMISSION} set -x eval ${PRE_TASK_CMDS} -nprocs=$(( NNODES_NEXUS_EMISSION*PPN_NEXUS_EMISSION )) -ppn_run_aqm="${PPN_NEXUS_EMISSION}" omp_num_threads_run_aqm="${OMP_NUM_THREADS_NEXUS_EMISSION}" if [ -z "${RUN_CMD_AQM:-}" ] ; then @@ -136,13 +134,10 @@ hh="${cyc}" yyyymmdd="${PDY}" NUM_SPLIT_NEXUS=$( printf "%02d" ${NUM_SPLIT_NEXUS} ) + if [ "${FCST_LEN_HRS}" = "-1" ]; then - for i_cdate in "${!ALL_CDATES[@]}"; do - if [ "${ALL_CDATES[$i_cdate]}" = "${PDY}${cyc}" ]; then - FCST_LEN_HRS="${FCST_LEN_CYCL_ALL[$i_cdate]}" - break - fi - done + CYCLE_IDX=$(( ${cyc} / ${INCR_CYCL_FREQ} )) + FCST_LEN_HRS=${FCST_LEN_CYCL[$CYCLE_IDX]} fi if [ "${NUM_SPLIT_NEXUS}" = "01" ]; then diff --git a/scripts/exregional_nexus_gfs_sfc.sh b/scripts/exregional_nexus_gfs_sfc.sh index 98329ca018..adf3ef5f2d 100755 --- a/scripts/exregional_nexus_gfs_sfc.sh +++ b/scripts/exregional_nexus_gfs_sfc.sh @@ -63,13 +63,10 @@ yyyymmdd=${GFS_SFC_CDATE:0:8} yyyymm=${GFS_SFC_CDATE:0:6} yyyy=${GFS_SFC_CDATE:0:4} hh=${GFS_SFC_CDATE:8:2} + if [ "${FCST_LEN_HRS}" = "-1" ]; then - for i_cdate in "${!ALL_CDATES[@]}"; do - if [ "${ALL_CDATES[$i_cdate]}" = "${PDY}${cyc}" ]; then - FCST_LEN_HRS="${FCST_LEN_CYCL_ALL[$i_cdate]}" - break - fi - done + CYCLE_IDX=$(( ${cyc} / ${INCR_CYCL_FREQ} )) + FCST_LEN_HRS=${FCST_LEN_CYCL[$CYCLE_IDX]} fi # #----------------------------------------------------------------------- diff --git a/scripts/exregional_nexus_post_split.sh b/scripts/exregional_nexus_post_split.sh index 207169a730..29fc57e314 100755 --- a/scripts/exregional_nexus_post_split.sh +++ b/scripts/exregional_nexus_post_split.sh @@ -70,13 +70,10 @@ hh="${cyc}" yyyymmdd="${PDY}" NUM_SPLIT_NEXUS=$( printf "%02d" ${NUM_SPLIT_NEXUS} ) + if [ "${FCST_LEN_HRS}" = "-1" ]; then - for i_cdate in "${!ALL_CDATES[@]}"; do - if [ "${ALL_CDATES[$i_cdate]}" = "${PDY}${cyc}" ]; then - FCST_LEN_HRS="${FCST_LEN_CYCL_ALL[$i_cdate]}" - break - fi - done + CYCLE_IDX=$(( ${cyc} / ${INCR_CYCL_FREQ} )) + FCST_LEN_HRS=${FCST_LEN_CYCL[$CYCLE_IDX]} fi start_date=$( $DATE_UTIL --utc --date "${yyyymmdd} ${hh} UTC" "+%Y%m%d%H" ) end_date=$( $DATE_UTIL --utc --date "${yyyymmdd} ${hh} UTC + ${FCST_LEN_HRS} hours" "+%Y%m%d%H" ) diff --git a/scripts/exregional_point_source.sh b/scripts/exregional_point_source.sh index 1b2bd54265..a5191a1647 100755 --- a/scripts/exregional_point_source.sh +++ b/scripts/exregional_point_source.sh @@ -54,12 +54,8 @@ This is the ex-script for the task that runs PT_SOURCE. eval ${PRE_TASK_CMDS} if [ "${FCST_LEN_HRS}" = "-1" ]; then - for i_cdate in "${!ALL_CDATES[@]}"; do - if [ "${ALL_CDATES[$i_cdate]}" = "${PDY}${cyc}" ]; then - FCST_LEN_HRS="${FCST_LEN_CYCL_ALL[$i_cdate]}" - break - fi - done + CYCLE_IDX=$(( ${cyc} / ${INCR_CYCL_FREQ} )) + FCST_LEN_HRS=${FCST_LEN_CYCL[$CYCLE_IDX]} fi nstep=$(( FCST_LEN_HRS+1 )) yyyymmddhh="${PDY}${cyc}" diff --git a/scripts/exregional_post_stat_o3.sh b/scripts/exregional_post_stat_o3.sh index dd1e02473b..402f2a064e 100755 --- a/scripts/exregional_post_stat_o3.sh +++ b/scripts/exregional_post_stat_o3.sh @@ -115,12 +115,8 @@ Call to executable to run AQM_POST_GRIB2 returned with nonzero exit code." POST_STEP if [ "${FCST_LEN_HRS}" = "-1" ]; then - for i_cdate in "${!ALL_CDATES[@]}"; do - if [ "${ALL_CDATES[$i_cdate]}" = "${PDY}${cyc}" ]; then - FCST_LEN_HRS="${FCST_LEN_CYCL_ALL[$i_cdate]}" - break - fi - done + CYCLE_IDX=$(( ${cyc} / ${INCR_CYCL_FREQ} )) + FCST_LEN_HRS=${FCST_LEN_CYCL[$CYCLE_IDX]} fi fhr=01 diff --git a/scripts/exregional_pre_post_stat.sh b/scripts/exregional_pre_post_stat.sh index a651884576..12bebfd345 100755 --- a/scripts/exregional_pre_post_stat.sh +++ b/scripts/exregional_pre_post_stat.sh @@ -65,14 +65,12 @@ mkdir_vrfy -p "$DATA" cd_vrfy $DATA if [ "${FCST_LEN_HRS}" = "-1" ]; then - for i_cdate in "${!ALL_CDATES[@]}"; do - if [ "${ALL_CDATES[$i_cdate]}" = "${PDY}${cyc}" ]; then - FCST_LEN_HRS="${FCST_LEN_CYCL_ALL[$i_cdate]}" - break - fi - done - if [ "${RUN_TASK_RUN_POST}" = "TRUE" ]; then - rm_vrfy -f "${COMIN}/${TN_RUN_POST}_${PDY}${cyc}_task_complete.txt" + CYCLE_IDX=$(( ${cyc} / ${INCR_CYCL_FREQ} )) + FCST_LEN_HRS=${FCST_LEN_CYCL[$CYCLE_IDX]} + + post_complete_file=${COMIN}/${TN_RUN_POST}_${PDY}${cyc}_task_complete.txt + if [ -f ${post_complete_file} ] ; then + rm_vrfy -f ${post_complete_file} fi fi diff --git a/scripts/exregional_run_fcst.sh b/scripts/exregional_run_fcst.sh index 6ae2447e87..7708c5d217 100755 --- a/scripts/exregional_run_fcst.sh +++ b/scripts/exregional_run_fcst.sh @@ -64,8 +64,6 @@ export OMP_STACKSIZE=${OMP_STACKSIZE_RUN_FCST} # eval ${PRE_TASK_CMDS} -nprocs=$(( NNODES_RUN_FCST*PPN_RUN_FCST )) - if [ -z "${RUN_CMD_FCST:-}" ] ; then print_err_msg_exit "\ Run command was not set in machine file. \ @@ -76,12 +74,8 @@ else fi if [ "${FCST_LEN_HRS}" = "-1" ]; then - for i_cdate in "${!ALL_CDATES[@]}"; do - if [ "${ALL_CDATES[$i_cdate]}" = "${PDY}${cyc}" ]; then - FCST_LEN_HRS="${FCST_LEN_CYCL_ALL[$i_cdate]}" - break - fi - done + CYCLE_IDX=$(( ${cyc} / ${INCR_CYCL_FREQ} )) + FCST_LEN_HRS=${FCST_LEN_CYCL[$CYCLE_IDX]} fi # @@ -113,7 +107,7 @@ cd_vrfy ${DATA}/INPUT # in this case, there isn't really an advantage to using relative symlinks, # so we use symlinks with absolute paths. # -if [ "${RUN_TASK_MAKE_GRID}" = "TRUE" ]; then +if [[ -d "${EXPTDIR}/grid" ]]; then relative_link_flag="TRUE" else relative_link_flag="FALSE" @@ -126,16 +120,6 @@ symlink="grid_spec.nc" create_symlink_to_file target="$target" symlink="$symlink" \ relative="${relative_link_flag}" -## Symlink to halo-3 grid file with "halo3" stripped from name. -#target="${FIXlam}/${CRES}${DOT_OR_USCORE}grid.tile${TILE_RGNL}.halo${NH3}.nc" -#if [ "${RUN_TASK_MAKE_SFC_CLIMO}" = "TRUE" ] && \ -# [ "${GRID_GEN_METHOD}" = "GFDLgrid" ] && \ -# [ "${GFDLgrid_USE_NUM_CELLS_IN_FILENAMES}" = "FALSE" ]; then -# symlink="C${GFDLgrid_NUM_CELLS}${DOT_OR_USCORE}grid.tile${TILE_RGNL}.nc" -#else -# symlink="${CRES}${DOT_OR_USCORE}grid.tile${TILE_RGNL}.nc" -#fi - # Symlink to halo-3 grid file with "halo3" stripped from name. mosaic_fn="grid_spec.nc" grid_fn=$( get_charvar_from_netcdf "${mosaic_fn}" "gridfiles" ) @@ -168,7 +152,7 @@ create_symlink_to_file target="$target" symlink="$symlink" \ # the orography files, use relative paths if running the TN_MAKE_OROG # task and absolute paths otherwise. # -if [ "${RUN_TASK_MAKE_OROG}" = "TRUE" ]; then +if [ -d "${EXPTDIR}/orog" ]; then relative_link_flag="TRUE" else relative_link_flag="FALSE" @@ -277,8 +261,8 @@ if [ "${CPL_AQM}" = "TRUE" ]; then relative="${relative_link_flag}" # create symlink to PT for point source in Online-CMAQ - if [ "${RUN_TASK_POINT_SOURCE}" = "TRUE" ]; then - target="${INPUT_DATA}/${NET}.${cycle}${dot_ensmem}.PT.nc" + target="${INPUT_DATA}/${NET}.${cycle}${dot_ensmem}.PT.nc" + if [ -f ${target} ]; then symlink="PT.nc" create_symlink_to_file target="$target" symlink="$symlink" \ relative="${relative_link_flag}" @@ -597,12 +581,6 @@ if [ "${CPL_AQM}" = "TRUE" ]; then mv_vrfy ${DATA}/${AQM_RC_PRODUCT_FN} ${COMOUT}/${NET}.${cycle}${dot_ensmem}.${AQM_RC_PRODUCT_FN} - if [ "${RUN_TASK_RUN_POST}" = "FALSE" ] && [ "${WRITE_DOPOST}" = "FALSE" ]; then - for fhr in $(seq -f "%03g" 0 ${FCST_LEN_HRS}); do - mv_vrfy ${DATA}/dynf${fhr}.nc ${COMIN}/${NET}.${cycle}${dot_ensmem}.dyn.f${fhr}.nc - mv_vrfy ${DATA}/phyf${fhr}.nc ${COMIN}/${NET}.${cycle}${dot_ensmem}.phy.f${fhr}.nc - done - fi fi # #----------------------------------------------------------------------- @@ -664,13 +642,16 @@ if [ ${WRITE_DOPOST} = "TRUE" ]; then fi done - if [ "${CPL_AQM}" = "TRUE" ]; then - mv_vrfy ${DATA}/dynf${fhr}.nc ${COMIN}/${NET}.${cycle}${dot_ensmem}.dyn.f${fhr}.nc - mv_vrfy ${DATA}/phyf${fhr}.nc ${COMIN}/${NET}.${cycle}${dot_ensmem}.phy.f${fhr}.nc - fi done fi +if [ "${CPL_AQM}" = "TRUE" ]; then + for fhr in $(seq -f "%03g" 0 ${FCST_LEN_HRS}); do + mv_vrfy ${DATA}/dynf${fhr}.nc ${COMIN}/${NET}.${cycle}${dot_ensmem}.dyn.f${fhr}.nc + mv_vrfy ${DATA}/phyf${fhr}.nc ${COMIN}/${NET}.${cycle}${dot_ensmem}.phy.f${fhr}.nc + done +fi + # #----------------------------------------------------------------------- # diff --git a/scripts/exregional_run_met_genensprod_or_ensemblestat.sh b/scripts/exregional_run_met_genensprod_or_ensemblestat.sh index 8812475d43..3812a1aeeb 100755 --- a/scripts/exregional_run_met_genensprod_or_ensemblestat.sh +++ b/scripts/exregional_run_met_genensprod_or_ensemblestat.sh @@ -160,7 +160,7 @@ fi # #----------------------------------------------------------------------- # -vx_fcst_input_basedir=$( eval echo "${VX_FCST_INPUT_BASEDIR}" ) +vx_fcst_input_basedir=$( eval echo "${VX_FCST_INPUT_DIR}" ) vx_output_basedir=$( eval echo "${VX_OUTPUT_BASEDIR}" ) if [ "${RUN_ENVIR}" = "nco" ]; then slash_cdate_or_null="" @@ -213,19 +213,16 @@ for (( i=0; i<${NUM_ENS_MEMBERS}; i++ )); do mem_indx_fmt=$(printf "%0${NDIGITS_ENSMEM_NAMES}d" "${mem_indx}") time_lag=$( bc -l <<< "${ENS_TIME_LAG_HRS[$i]}*${SECS_PER_HOUR}" ) - SLASH_ENSMEM_SUBDIR_OR_NULL="/mem${mem_indx_fmt}" if [ "${RUN_ENVIR}" = "nco" ]; then cdate_ensmem_subdir_or_null="" - DOT_ENSMEM_OR_NULL=".mem${mem_indx_fmt}" else - cdate_ensmem_subdir_or_null="${CDATE}${SLASH_ENSMEM_SUBDIR_OR_NULL}" - DOT_ENSMEM_OR_NULL="" + cdate_ensmem_subdir_or_null="${CDATE}/mem${mem_indx_fmt}" fi if [ "${field_is_APCPgt01h}" = "TRUE" ]; then - template="${cdate_ensmem_subdir_or_null:+${cdate_ensmem_subdir_or_null}/}metprd/PcpCombine_fcst/${FCST_FN_METPROC_TEMPLATE}" + template="${cdate_ensmem_subdir_or_null}/metprd/PcpCombine_fcst/${FCST_FN_METPROC_TEMPLATE}" else - template="${FCST_SUBDIR_TEMPLATE}/${FCST_FN_TEMPLATE}" + template="${CDATE}/mem${mem_indx_fmt}/postprd/${FCST_FN_TEMPLATE}" fi if [ -z "${FCST_INPUT_FN_TEMPLATE}" ]; then @@ -368,7 +365,6 @@ settings="\ # Ensemble and member-specific information. # 'num_ens_members': '${NUM_ENS_MEMBERS}' - 'uscore_ensmem_name_or_null': '${USCORE_ENSMEM_NAME_OR_NULL:-}' 'time_lag': '${time_lag:-}' # # Field information. diff --git a/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh b/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh index c7a0f708aa..cc45791923 100755 --- a/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh +++ b/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh @@ -170,10 +170,9 @@ fi # #----------------------------------------------------------------------- # -vx_fcst_input_basedir=$( eval echo "${VX_FCST_INPUT_BASEDIR}" ) +vx_fcst_input_basedir=$( eval echo "${VX_FCST_INPUT_DIR}" ) vx_output_basedir=$( eval echo "${VX_OUTPUT_BASEDIR}" ) if [ "${RUN_ENVIR}" = "nco" ]; then - slash_cdate_ensmem_subdir_or_null="" if [[ ${DO_ENSEMBLE} == "TRUE" ]]; then ENSMEM=$( echo ${SLASH_ENSMEM_SUBDIR_OR_NULL} | cut -d"/" -f2 ) DOT_ENSMEM_OR_NULL=".$ENSMEM" @@ -181,17 +180,15 @@ if [ "${RUN_ENVIR}" = "nco" ]; then DOT_ENSMEM_OR_NULL="" fi else - slash_cdate_ensmem_subdir_or_null="/${CDATE}${SLASH_ENSMEM_SUBDIR_OR_NULL}" DOT_ENSMEM_OR_NULL="" fi - if [ "${grid_or_point}" = "grid" ]; then OBS_INPUT_FN_TEMPLATE="" 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_DIR="${vx_output_basedir}${slash_cdate_ensmem_subdir_or_null}/metprd/PcpCombine_fcst" + FCST_INPUT_DIR="${vx_output_basedir}/${CDATE}/mem${ENSMEM_INDX}/metprd/PcpCombine_fcst" FCST_INPUT_FN_TEMPLATE=$( eval echo ${FCST_FN_METPROC_TEMPLATE} ) else OBS_INPUT_DIR="${OBS_DIR}" @@ -208,7 +205,7 @@ if [ "${grid_or_point}" = "grid" ]; then 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} ) + FCST_INPUT_FN_TEMPLATE=$( eval echo ${CDATE}${SLASH_ENSMEM_SUBDIR}/postprd/${FCST_FN_TEMPLATE} ) fi elif [ "${grid_or_point}" = "point" ]; then @@ -216,11 +213,11 @@ elif [ "${grid_or_point}" = "point" ]; then OBS_INPUT_DIR="${vx_output_basedir}/metprd/Pb2nc_obs" OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE} ) FCST_INPUT_DIR="${vx_fcst_input_basedir}" - FCST_INPUT_FN_TEMPLATE=$( eval echo ${FCST_SUBDIR_TEMPLATE:+${FCST_SUBDIR_TEMPLATE}/}${FCST_FN_TEMPLATE} ) + FCST_INPUT_FN_TEMPLATE=$( eval echo ${CDATE}${SLASH_ENSMEM_SUBDIR}/postprd/${FCST_FN_TEMPLATE} ) fi -OUTPUT_BASE="${vx_output_basedir}${slash_cdate_ensmem_subdir_or_null}" +OUTPUT_BASE="${vx_output_basedir}/${CDATE}/mem${ENSMEM_INDX}" OUTPUT_DIR="${OUTPUT_BASE}/metprd/${metplus_tool_name}" STAGING_DIR="${OUTPUT_BASE}/stage/${FIELDNAME_IN_MET_FILEDIR_NAMES}" # @@ -302,7 +299,7 @@ else metplus_config_tmpl_fn="${FIELDNAME_IN_MET_FILEDIR_NAMES}" fi metplus_config_tmpl_fn="${metplus_tool_name}_${metplus_config_tmpl_fn}" -metplus_config_fn="${metplus_tool_name}_${FIELDNAME_IN_MET_FILEDIR_NAMES}${USCORE_ENSMEM_NAME_OR_NULL}" +metplus_config_fn="${metplus_tool_name}_${FIELDNAME_IN_MET_FILEDIR_NAMES}_mem${ENSMEM_INDX}" metplus_log_fn="${metplus_config_fn}" # # Add prefixes and suffixes (extensions) to the base file names. @@ -350,7 +347,6 @@ settings="\ # Ensemble and member-specific information. # 'num_ens_members': '${NUM_ENS_MEMBERS}' - 'uscore_ensmem_name_or_null': '${USCORE_ENSMEM_NAME_OR_NULL:-}' 'time_lag': '${time_lag:-}' # # Field information. 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 25edcef6c6..15c2e34a56 100755 --- a/scripts/exregional_run_met_gridstat_or_pointstat_vx_ensmean.sh +++ b/scripts/exregional_run_met_gridstat_or_pointstat_vx_ensmean.sh @@ -334,7 +334,6 @@ settings="\ # Ensemble and member-specific information. # 'num_ens_members': '${NUM_ENS_MEMBERS}' - 'uscore_ensmem_name_or_null': '${USCORE_ENSMEM_NAME_OR_NULL:-}' 'time_lag': '${time_lag:-}' # # Field information. 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 f2701d4303..fb33760892 100755 --- a/scripts/exregional_run_met_gridstat_or_pointstat_vx_ensprob.sh +++ b/scripts/exregional_run_met_gridstat_or_pointstat_vx_ensprob.sh @@ -296,7 +296,6 @@ settings="\ # Ensemble and member-specific information. # 'num_ens_members': '${NUM_ENS_MEMBERS}' - 'uscore_ensmem_name_or_null': '${USCORE_ENSMEM_NAME_OR_NULL:-}' 'time_lag': '${time_lag:-}' # # Field information. diff --git a/scripts/exregional_run_met_pb2nc_obs.sh b/scripts/exregional_run_met_pb2nc_obs.sh index f6c1c9153b..123fc663a7 100755 --- a/scripts/exregional_run_met_pb2nc_obs.sh +++ b/scripts/exregional_run_met_pb2nc_obs.sh @@ -217,7 +217,7 @@ metplus_config_tmpl_fn="${metplus_tool_name}_obs" # information, but we still include that info in the file name so that # the behavior in the two modes is as similar as possible. # -metplus_config_fn="${metplus_config_tmpl_fn}${USCORE_ENSMEM_NAME_OR_NULL}_${CDATE}" +metplus_config_fn="${metplus_config_tmpl_fn}_mem${ENSMEM_INDX}_${CDATE}" metplus_log_fn="${metplus_config_fn}" # # Add prefixes and suffixes (extensions) to the base file names. @@ -265,7 +265,6 @@ settings="\ # Ensemble and member-specific information. # 'num_ens_members': '${NUM_ENS_MEMBERS}' - 'uscore_ensmem_name_or_null': '${USCORE_ENSMEM_NAME_OR_NULL:-}' 'time_lag': '${time_lag:-}' # # Field information. diff --git a/scripts/exregional_run_met_pcpcombine.sh b/scripts/exregional_run_met_pcpcombine.sh index 4d6d5457f9..80f68486da 100755 --- a/scripts/exregional_run_met_pcpcombine.sh +++ b/scripts/exregional_run_met_pcpcombine.sh @@ -134,10 +134,9 @@ fi # #----------------------------------------------------------------------- # -vx_fcst_input_basedir=$( eval echo "${VX_FCST_INPUT_BASEDIR}" ) +vx_fcst_input_basedir=$( eval echo "${VX_FCST_INPUT_DIR}" ) vx_output_basedir=$( eval echo "${VX_OUTPUT_BASEDIR}" ) if [ "${RUN_ENVIR}" = "nco" ]; then - slash_cdate_ensmem_subdir_or_null="" if [[ ${DO_ENSEMBLE} == "TRUE" ]]; then ENSMEM=$( echo ${SLASH_ENSMEM_SUBDIR_OR_NULL} | cut -d"/" -f2 ) DOT_ENSMEM_OR_NULL=".$ENSMEM" @@ -145,7 +144,6 @@ if [ "${RUN_ENVIR}" = "nco" ]; then DOT_ENSMEM_OR_NULL="" fi else - slash_cdate_ensmem_subdir_or_null="/${CDATE}${SLASH_ENSMEM_SUBDIR_OR_NULL}" DOT_ENSMEM_OR_NULL="" fi @@ -166,10 +164,10 @@ if [ "${obs_or_fcst}" = "obs" ]; then elif [ "${obs_or_fcst}" = "fcst" ]; then - FCST_INPUT_DIR="${vx_fcst_input_basedir}" - FCST_INPUT_FN_TEMPLATE=$( eval echo ${FCST_SUBDIR_TEMPLATE:+${FCST_SUBDIR_TEMPLATE}/}${FCST_FN_TEMPLATE} ) + FCST_INPUT_DIR="$( eval echo ${vx_fcst_input_basedir})" + FCST_INPUT_FN_TEMPLATE=$( eval echo ${CDATE}${SLASH_ENSMEM_SUBDIR}/postprd/${FCST_FN_TEMPLATE} ) - OUTPUT_BASE="${vx_output_basedir}${slash_cdate_ensmem_subdir_or_null}" + OUTPUT_BASE="${VX_OUTPUT_BASEDIR}/${CDATE}/mem${ENSMEM_INDX}" OUTPUT_DIR="${OUTPUT_BASE}/metprd/${metplus_tool_name}_fcst" OUTPUT_FN_TEMPLATE=$( eval echo ${FCST_FN_METPROC_TEMPLATE} ) STAGING_DIR="${OUTPUT_BASE}/stage/${FIELDNAME_IN_MET_FILEDIR_NAMES}" @@ -257,8 +255,8 @@ fi # First, set the base file names. # metplus_config_tmpl_fn="${metplus_tool_name}_${obs_or_fcst}" -metplus_config_fn="${metplus_config_tmpl_fn}_${FIELDNAME_IN_MET_FILEDIR_NAMES}${USCORE_ENSMEM_NAME_OR_NULL}" -metplus_log_fn="${metplus_config_fn}_$CDATE" +metplus_config_fn="${metplus_config_tmpl_fn}_${FIELDNAME_IN_MET_FILEDIR_NAMES}" +metplus_log_fn="${metplus_config_fn}_mem${ENSMEM_INDX}_$CDATE" # # If operating on observation files, append the cycle date to the name # of the configuration file because in this case, the output files from @@ -315,7 +313,6 @@ settings="\ # Ensemble and member-specific information. # 'num_ens_members': '${NUM_ENS_MEMBERS}' - 'uscore_ensmem_name_or_null': '${USCORE_ENSMEM_NAME_OR_NULL:-}' 'time_lag': '${time_lag:-}' # # Field information. diff --git a/scripts/exregional_run_post.sh b/scripts/exregional_run_post.sh index 673ac861d7..de2f3edef4 100755 --- a/scripts/exregional_run_post.sh +++ b/scripts/exregional_run_post.sh @@ -64,7 +64,6 @@ export OMP_STACKSIZE=${OMP_STACKSIZE_RUN_POST} # eval ${PRE_TASK_CMDS} -nprocs=$(( NNODES_RUN_POST*PPN_RUN_POST )) if [ -z "${RUN_CMD_POST:-}" ] ; then print_err_msg_exit "\ Run command was not set in machine file. \ diff --git a/scripts/exregional_run_prdgen.sh b/scripts/exregional_run_prdgen.sh index 980a9c4b94..2632b659fd 100755 --- a/scripts/exregional_run_prdgen.sh +++ b/scripts/exregional_run_prdgen.sh @@ -63,7 +63,6 @@ export OMP_STACKSIZE=${OMP_STACKSIZE_RUN_PRDGEN} # eval ${PRE_TASK_CMDS} -nprocs=$(( NNODES_RUN_PRDGEN*PPN_RUN_PRDGEN )) if [ -z "${RUN_CMD_PRDGEN:-}" ] ; then print_err_msg_exit "\ Run command was not set in machine file. \ diff --git a/tests/WE2E/machine_suites/comprehensive b/tests/WE2E/machine_suites/comprehensive index 5a46e770f6..4fbe1e392a 100644 --- a/tests/WE2E/machine_suites/comprehensive +++ b/tests/WE2E/machine_suites/comprehensive @@ -6,7 +6,6 @@ grid_RRFS_CONUS_25km_ics_NAM_lbcs_NAM_suite_RRFS_v1beta grid_RRFS_CONUScompact_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v16 grid_RRFS_CONUScompact_25km_ics_HRRR_lbcs_HRRR_suite_HRRR grid_RRFS_CONUScompact_25km_ics_HRRR_lbcs_RAP_suite_RRFS_v1beta -grid_SUBCONUS_Ind_3km_ics_FV3GFS_lbcs_FV3GFS_suite_WoFS_v0 grid_SUBCONUS_Ind_3km_ics_HRRR_lbcs_HRRR_suite_HRRR grid_SUBCONUS_Ind_3km_ics_HRRR_lbcs_RAP_suite_WoFS_v0 grid_SUBCONUS_Ind_3km_ics_NAM_lbcs_NAM_suite_GFS_v16 @@ -44,3 +43,5 @@ grid_RRFS_CONUScompact_3km_ics_HRRR_lbcs_RAP_suite_RRFS_v1beta grid_RRFS_NA_13km_ics_FV3GFS_lbcs_FV3GFS_suite_RRFS_v1beta nco_grid_RRFS_CONUS_13km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v16 nco_grid_RRFS_CONUS_3km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v15_thompson_mynn_lam3km +grid_RRFS_NA_3km_ics_FV3GFS_lbcs_FV3GFS_suite_RRFS_v1beta +nco_ensemble diff --git a/tests/WE2E/monitor_jobs.py b/tests/WE2E/monitor_jobs.py index 181b93e2b1..b0f58709ef 100755 --- a/tests/WE2E/monitor_jobs.py +++ b/tests/WE2E/monitor_jobs.py @@ -79,6 +79,19 @@ def monitor_jobs(expts_dict: dict, monitor_file: str = '', procs: int = 1, debug running_expts[expt]["walltime"] = str(walltime) logging.info(f'Experiment {expt} is {running_expts[expt]["status"]}') + + # If failures, check how many experiments were successful + if debug: + if running_expts[expt]["status"] != "COMPLETE": + i=j=0 + for task in running_expts[expt]: + # Skip non-task entries + if task in ["expt_dir","status","start_time","walltime"]: + continue + j+=1 + if running_expts[expt][task]["status"] == "SUCCEEDED": + i+=1 + logging.debug(f'{i} of {j} tasks were successful') logging.info(f'{walltimestr}will no longer monitor.') running_expts.pop(expt) continue diff --git a/tests/WE2E/run_WE2E_tests.py b/tests/WE2E/run_WE2E_tests.py index 4f4806e14b..b8d5acc353 100755 --- a/tests/WE2E/run_WE2E_tests.py +++ b/tests/WE2E/run_WE2E_tests.py @@ -186,8 +186,7 @@ def run_we2e_tests(homedir, args) -> None: config_defaults,"lbcs") if 'verification' in test_cfg: - test_cfg['verification'] = check_task_verification(test_cfg,machine_defaults, - config_defaults) + logging.debug(test_cfg['verification']) logging.debug(f"Writing updated config.yaml for test {test_name}\n"\ "based on specified command-line arguments:\n") @@ -324,15 +323,22 @@ def check_task_get_extrn_bcs(cfg: dict, mach: dict, dflt: dict, ics_or_lbcs: str if ics_or_lbcs not in ["lbcs", "ics"]: raise ValueError("ics_or_lbcs must be set to 'lbcs' or 'ics'") - I_OR_L = ics_or_lbcs.upper() - #Make our lives easier by shortening some dictionary calls cfg_bcs = cfg[f'task_get_extrn_{ics_or_lbcs}'] - # If RUN_TASK_GET_EXTRN_* is explicitly set to false, do nothing and return - if cfg.get('workflow_switches', {}).get(f'RUN_TASK_GET_EXTRN_{I_OR_L}', True) is False: + # If the task is turned off explicitly, do nothing and return + # To turn off that task, taskgroups is included without the + # coldstart group, or task_get_extrn_{ics_or_lbcs} is included + # without a value + taskgroups = cfg.get('rocoto', {}).get('taskgroups') + if taskgroups is not None and "coldstart.yaml" not in taskgroups: + return cfg_bcs + rocoto_tasks = cfg.get('rocoto', {}).get('tasks',{}) + if rocoto_tasks.get(f"task_get_extrn_{ics_or_lbcs}", "NA") is None: return cfg_bcs + I_OR_L = ics_or_lbcs.upper() + # If USE_USER_STAGED_EXTRN_FILES not specified or false, do nothing and return if not cfg_bcs.get('USE_USER_STAGED_EXTRN_FILES'): logging.debug('USE_USER_STAGED_EXTRN_FILES not specified or False in '\ @@ -383,58 +389,6 @@ def check_task_get_extrn_bcs(cfg: dict, mach: dict, dflt: dict, ics_or_lbcs: str return cfg_bcs -def check_task_verification(cfg: dict, mach: dict, dflt: dict) -> dict: - """ - Function for checking and updating various settings in verification section of test config yaml - - Args: - cfg : Dictionary loaded from test config file - mach : Dictionary loaded from machine settings file - dflt : Dictionary loaded from default config file - Returns: - cfg_vx : Updated dictionary for verification section of test config - """ - - # Make our lives easier by shortening some dictionary calls - if 'verification' in cfg: - cfg_vx = cfg['verification'] - else: - cfg_vx = dict() - - # If VX_FCST_INPUT_BASEDIR is already explicitly set in the test configuration - # dictionary, keep that value and just return. - if 'VX_FCST_INPUT_BASEDIR' in cfg_vx: - return cfg_vx - - # Attempt to obtain the values of RUN_TASK_RUN_FCST, WRITE_DO_POST, and RUN_TASK_RUN_POST - # from the test configuration dictionary. If not available there, get them from the default - # configuration dictionary. - flags = {'RUN_TASK_RUN_FCST': False, 'WRITE_DOPOST': False, 'RUN_TASK_RUN_POST': False} - for section in ['workflow_switches', 'task_run_fcst']: - for flag in flags: - if (section in cfg) and (flag in cfg[section]): - flags[flag] = cfg[section][flag] - elif flag in dflt[section]: - flags[flag] = dflt[section][flag] - - # If UPP is going to be run (either in-line or as a separate set of tasks), set the - # VX_FCST_INPUT_BASEDIR to the default directory for the experiment. Otherwise, set - # it to the value of TEST_VX_FCST_INPUT_BASEDIR in the machine file. - if (flags['RUN_TASK_RUN_FCST'] and flags['WRITE_DOPOST']) or flags['RUN_TASK_RUN_POST']: - # In NCO mode, the UPP output files are placed in a different location than in - # community mode. Thus, set VX_FCST_INPUT_BASEDIR accordingly. - if cfg['user']['RUN_ENVIR'] == 'nco': - cfg_vx['VX_FCST_INPUT_BASEDIR'] = '$COMOUT/../..' - else: - cfg_vx['VX_FCST_INPUT_BASEDIR'] = dflt['workflow']['EXPTDIR'] - else: - if 'TEST_VX_FCST_INPUT_BASEDIR' in mach['platform']: - cfg_vx['VX_FCST_INPUT_BASEDIR'] = mach['platform']['TEST_VX_FCST_INPUT_BASEDIR'] - else: - cfg_vx['VX_FCST_INPUT_BASEDIR'] = '' - - return cfg_vx - def setup_logging(logfile: str = "log.run_WE2E_tests", debug: bool = False) -> None: """ diff --git a/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_2017_gfdlmp_regional_plot.yaml b/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_2017_gfdlmp_regional_plot.yaml index 1c837100e5..927fc442f4 100644 --- a/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_2017_gfdlmp_regional_plot.yaml +++ b/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_2017_gfdlmp_regional_plot.yaml @@ -12,8 +12,9 @@ workflow: DATE_LAST_CYCL: '2019070100' FCST_LEN_HRS: 6 PREEXISTING_DIR_METHOD: rename -workflow_switches: - RUN_TASK_PLOT_ALLVARS: true +rocoto: + tasks: + taskgroups: '{{ ["parm/wflow/prep.yaml", "parm/wflow/coldstart.yaml", "parm/wflow/post.yaml", "parm/wflow/plot.yaml"]|include }}' task_get_extrn_ics: EXTRN_MDL_NAME_ICS: FV3GFS USE_USER_STAGED_EXTRN_FILES: true diff --git a/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_RAP_suite_HRRR.yaml b/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_RAP_suite_HRRR.yaml index 53e1ff1763..2d2ee706a1 100644 --- a/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_RAP_suite_HRRR.yaml +++ b/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_RAP_suite_HRRR.yaml @@ -15,9 +15,15 @@ workflow: DATE_LAST_CYCL: '2019061518' FCST_LEN_HRS: 6 PREEXISTING_DIR_METHOD: rename -workflow_switches: - RUN_TASK_VX_GRIDSTAT: true - RUN_TASK_VX_POINTSTAT: true +rocoto: + tasks: + taskgroups: '{{ ["parm/wflow/prep.yaml", "parm/wflow/coldstart.yaml", "parm/wflow/post.yaml", "parm/wflow/verify.yaml"]|include }}' + metatask_run_ensemble: + task_run_fcst_mem#mem#: + walltime: 01:00:00 + task_get_obs_ccpa: + task_get_obs_mrms: + task_get_obs_ndas: task_get_extrn_ics: EXTRN_MDL_NAME_ICS: FV3GFS FV3GFS_FILE_FMT_ICS: grib2 @@ -28,5 +34,4 @@ task_get_extrn_lbcs: EXTRN_MDL_LBCS_OFFSET_HRS: 0 USE_USER_STAGED_EXTRN_FILES: true verification: - RUN_TASKS_METVX_DET: true VX_FCST_MODEL_NAME: FV3_GFS_v15p2_CONUS_25km diff --git a/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_RRFS_CONUS_25km_ics_NAM_lbcs_NAM_suite_GFS_v16.yaml b/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_RRFS_CONUS_25km_ics_NAM_lbcs_NAM_suite_GFS_v16.yaml index af33066fa0..9ec3925c59 100644 --- a/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_RRFS_CONUS_25km_ics_NAM_lbcs_NAM_suite_GFS_v16.yaml +++ b/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_RRFS_CONUS_25km_ics_NAM_lbcs_NAM_suite_GFS_v16.yaml @@ -14,11 +14,12 @@ workflow: DATE_LAST_CYCL: '2021051212' FCST_LEN_HRS: 6 PREEXISTING_DIR_METHOD: rename -workflow_switches: - RUN_TASK_VX_GRIDSTAT: true - RUN_TASK_VX_POINTSTAT: true - RUN_TASK_VX_ENSGRID: true - RUN_TASK_VX_ENSPOINT: true +rocoto: + tasks: + taskgroups: '{{ ["parm/wflow/prep.yaml", "parm/wflow/coldstart.yaml", "parm/wflow/post.yaml", "parm/wflow/verify.yaml", "parm/wflow/verify_ensgrid.yaml"]|include }}' + metatask_run_ensemble: + task_run_fcst_mem#mem#: + walltime: 01:00:00 task_get_extrn_ics: EXTRN_MDL_NAME_ICS: NAM USE_USER_STAGED_EXTRN_FILES: true @@ -30,7 +31,5 @@ global: DO_ENSEMBLE: true NUM_ENS_MEMBERS: 2 verification: - RUN_TASKS_METVX_DET: true - RUN_TASKS_METVX_ENS: true VX_FCST_MODEL_NAME: FV3_GFS_v15p2_CONUS_25km diff --git a/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_RRFS_NA_13km_ics_FV3GFS_lbcs_FV3GFS_suite_RRFS_v1beta.yaml b/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_RRFS_NA_13km_ics_FV3GFS_lbcs_FV3GFS_suite_RRFS_v1beta.yaml index 0d0d6a847b..fa3c5ff504 100644 --- a/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_RRFS_NA_13km_ics_FV3GFS_lbcs_FV3GFS_suite_RRFS_v1beta.yaml +++ b/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_RRFS_NA_13km_ics_FV3GFS_lbcs_FV3GFS_suite_RRFS_v1beta.yaml @@ -23,15 +23,21 @@ task_get_extrn_lbcs: LBC_SPEC_INTVL_HRS: 6 USE_USER_STAGED_EXTRN_FILES: true task_make_ics: - NNODES_MAKE_ICS: 12 - PPN_MAKE_ICS: 4 OMP_STACKSIZE_MAKE_ICS: 2048m -task_make_lbcs: - NNODES_MAKE_LBCS: 12 - PPN_MAKE_LBCS: 4 - WTIME_MAKE_LBCS: 01:00:00 task_run_fcst: OMP_STACKSIZE_RUN_FCST: 2048m -task_run_post: - NNODES_RUN_POST: 6 - PPN_RUN_POST: 12 +rocoto: + tasks: + metatask_run_ensemble: + task_make_ics_mem#mem#: + nnodes: 12 + ppn: 4 + task_make_lbcs_mem#mem#: + nnodes: 12 + ppn: 4 + walltime: 01:00:00 + metatask_run_ens_post: + metatask_run_post: + task_run_post_mem#mem#_f#fhr#: + nnodes: 6 + ppn: 12 diff --git a/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_RRFS_NA_3km_ics_FV3GFS_lbcs_FV3GFS_suite_RRFS_v1beta.yaml b/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_RRFS_NA_3km_ics_FV3GFS_lbcs_FV3GFS_suite_RRFS_v1beta.yaml index 56d1587595..459535b0c6 100644 --- a/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_RRFS_NA_3km_ics_FV3GFS_lbcs_FV3GFS_suite_RRFS_v1beta.yaml +++ b/tests/WE2E/test_configs/grids_extrn_mdls_suites_community/config.grid_RRFS_NA_3km_ics_FV3GFS_lbcs_FV3GFS_suite_RRFS_v1beta.yaml @@ -15,8 +15,6 @@ workflow: DATE_LAST_CYCL: '2019070100' FCST_LEN_HRS: 3 PREEXISTING_DIR_METHOD: rename -workflow_switches: - RUN_TASK_RUN_PRDGEN: true task_make_orog: OMP_NUM_THREADS_MAKE_OROG: 24 task_get_extrn_ics: @@ -27,20 +25,30 @@ task_get_extrn_lbcs: LBC_SPEC_INTVL_HRS: 3 USE_USER_STAGED_EXTRN_FILES: true task_make_ics: - NNODES_MAKE_ICS: 16 - PPN_MAKE_ICS: 4 OMP_STACKSIZE_MAKE_ICS: 2048m -task_make_lbcs: - NNODES_MAKE_LBCS: 12 - PPN_MAKE_LBCS: 4 - WTIME_MAKE_LBCS: 01:00:00 task_run_fcst: OMP_STACKSIZE_RUN_FCST: 2048m DT_ATMOS: 40 - WTIME_RUN_FCST: 01:00:00 -task_run_post: - NNODES_RUN_POST: 8 - PPN_RUN_POST: 12 task_run_prdgen: DO_PARALLEL_PRDGEN: true - PPN_RUN_PRDGEN: 22 +rocoto: + tasks: + taskgroups: '{{ ["parm/wflow/prep.yaml", "parm/wflow/coldstart.yaml", "parm/wflow/post.yaml", "parm/wflow/prdgen.yaml"]|include }}' + task_make_orog: + walltime: 01:00:00 + metatask_run_ensemble: + task_make_ics_mem#mem#: + nnodes: 16 + ppn: 4 + task_make_lbcs_mem#mem#: + nnodes: 12 + ppn: 4 + walltime: 01:00:00 + task_run_fcst_mem#mem#: + walltime: 01:00:00 + metatask_run_ens_post: + metatask_run_post: + task_run_post_mem#mem#_f#fhr#: + ppn: 12 + nnodes: 8 + diff --git a/tests/WE2E/test_configs/grids_extrn_mdls_suites_nco/config.nco_grid_RRFS_CONUS_13km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v16.yaml b/tests/WE2E/test_configs/grids_extrn_mdls_suites_nco/config.nco_grid_RRFS_CONUS_13km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v16.yaml index 4ef3f80834..ea5d319ede 100644 --- a/tests/WE2E/test_configs/grids_extrn_mdls_suites_nco/config.nco_grid_RRFS_CONUS_13km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v16.yaml +++ b/tests/WE2E/test_configs/grids_extrn_mdls_suites_nco/config.nco_grid_RRFS_CONUS_13km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v16.yaml @@ -12,10 +12,9 @@ workflow: DATE_LAST_CYCL: '2019061500' FCST_LEN_HRS: 6 PREEXISTING_DIR_METHOD: rename -workflow_switches: - RUN_TASK_MAKE_GRID: false - RUN_TASK_MAKE_OROG: false - RUN_TASK_MAKE_SFC_CLIMO: false +rocoto: + tasks: + taskgroups: '{{ ["parm/wflow/coldstart.yaml", "parm/wflow/post.yaml"]|include }}' task_get_extrn_ics: EXTRN_MDL_NAME_ICS: FV3GFS FV3GFS_FILE_FMT_ICS: grib2 diff --git a/tests/WE2E/test_configs/grids_extrn_mdls_suites_nco/config.nco_grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_timeoffset_suite_GFS_v16.yaml b/tests/WE2E/test_configs/grids_extrn_mdls_suites_nco/config.nco_grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_timeoffset_suite_GFS_v16.yaml index 9709986da7..79af5461e3 100644 --- a/tests/WE2E/test_configs/grids_extrn_mdls_suites_nco/config.nco_grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_timeoffset_suite_GFS_v16.yaml +++ b/tests/WE2E/test_configs/grids_extrn_mdls_suites_nco/config.nco_grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_timeoffset_suite_GFS_v16.yaml @@ -12,10 +12,9 @@ workflow: DATE_LAST_CYCL: '2022081012' FCST_LEN_HRS: 6 PREEXISTING_DIR_METHOD: rename -workflow_switches: - RUN_TASK_MAKE_GRID: false - RUN_TASK_MAKE_OROG: false - RUN_TASK_MAKE_SFC_CLIMO: false +rocoto: + tasks: + taskgroups: '{{ ["parm/wflow/coldstart.yaml", "parm/wflow/post.yaml"]|include }}' task_get_extrn_ics: EXTRN_MDL_NAME_ICS: FV3GFS EXTRN_MDL_ICS_OFFSET_HRS: 6 diff --git a/tests/WE2E/test_configs/grids_extrn_mdls_suites_nco/config.nco_grid_RRFS_CONUS_3km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v15_thompson_mynn_lam3km.yaml b/tests/WE2E/test_configs/grids_extrn_mdls_suites_nco/config.nco_grid_RRFS_CONUS_3km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v15_thompson_mynn_lam3km.yaml index 350bac9fd2..00a36c70bd 100644 --- a/tests/WE2E/test_configs/grids_extrn_mdls_suites_nco/config.nco_grid_RRFS_CONUS_3km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v15_thompson_mynn_lam3km.yaml +++ b/tests/WE2E/test_configs/grids_extrn_mdls_suites_nco/config.nco_grid_RRFS_CONUS_3km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v15_thompson_mynn_lam3km.yaml @@ -12,10 +12,9 @@ workflow: DATE_LAST_CYCL: '2019061500' FCST_LEN_HRS: 6 PREEXISTING_DIR_METHOD: rename -workflow_switches: - RUN_TASK_MAKE_GRID: false - RUN_TASK_MAKE_OROG: false - RUN_TASK_MAKE_SFC_CLIMO: false +rocoto: + tasks: + taskgroups: '{{ ["parm/wflow/coldstart.yaml", "parm/wflow/post.yaml"]|include }}' task_get_extrn_ics: EXTRN_MDL_NAME_ICS: FV3GFS FV3GFS_FILE_FMT_ICS: grib2 diff --git a/tests/WE2E/test_configs/grids_extrn_mdls_suites_nco/config.nco_grid_RRFS_CONUScompact_25km_ics_HRRR_lbcs_RAP_suite_HRRR.yaml b/tests/WE2E/test_configs/grids_extrn_mdls_suites_nco/config.nco_grid_RRFS_CONUScompact_25km_ics_HRRR_lbcs_RAP_suite_HRRR.yaml index 287465aeea..be68e9d45e 100644 --- a/tests/WE2E/test_configs/grids_extrn_mdls_suites_nco/config.nco_grid_RRFS_CONUScompact_25km_ics_HRRR_lbcs_RAP_suite_HRRR.yaml +++ b/tests/WE2E/test_configs/grids_extrn_mdls_suites_nco/config.nco_grid_RRFS_CONUScompact_25km_ics_HRRR_lbcs_RAP_suite_HRRR.yaml @@ -12,10 +12,9 @@ workflow: DATE_LAST_CYCL: '2020081000' FCST_LEN_HRS: 6 PREEXISTING_DIR_METHOD: rename -workflow_switches: - RUN_TASK_MAKE_GRID: false - RUN_TASK_MAKE_OROG: false - RUN_TASK_MAKE_SFC_CLIMO: false +rocoto: + tasks: + taskgroups: '{{ ["parm/wflow/coldstart.yaml", "parm/wflow/post.yaml"]|include }}' task_get_extrn_ics: EXTRN_MDL_NAME_ICS: HRRR USE_USER_STAGED_EXTRN_FILES: true diff --git a/tests/WE2E/test_configs/release_SRW_v1/config.GST_release_public_v1.yaml b/tests/WE2E/test_configs/release_SRW_v1/config.GST_release_public_v1.yaml index 72dc3e169e..80715593d4 100644 --- a/tests/WE2E/test_configs/release_SRW_v1/config.GST_release_public_v1.yaml +++ b/tests/WE2E/test_configs/release_SRW_v1/config.GST_release_public_v1.yaml @@ -20,5 +20,8 @@ task_get_extrn_lbcs: LBC_SPEC_INTVL_HRS: 6 FV3GFS_FILE_FMT_LBCS: grib2 USE_USER_STAGED_EXTRN_FILES: true -task_run_fcst: - WTIME_RUN_FCST: 01:00:00 +rocoto: + tasks: + metatask_run_ensemble: + task_run_fcst_mem#mem#: + walltime: 01:00:00 diff --git a/tests/WE2E/test_configs/verification/config.MET_ensemble_verification.yaml b/tests/WE2E/test_configs/verification/config.MET_ensemble_verification.yaml index e5004911fe..b2b8d75dda 120000 --- a/tests/WE2E/test_configs/verification/config.MET_ensemble_verification.yaml +++ b/tests/WE2E/test_configs/verification/config.MET_ensemble_verification.yaml @@ -1 +1 @@ -../grids_extrn_mdls_suites_community/config.grid_RRFS_CONUS_25km_ics_NAM_lbcs_NAM_suite_HRRR.yaml \ No newline at end of file +../grids_extrn_mdls_suites_community/config.grid_RRFS_CONUS_25km_ics_NAM_lbcs_NAM_suite_GFS_v16.yaml \ No newline at end of file diff --git a/tests/WE2E/test_configs/verification/config.MET_ensemble_verification_only_vx.yaml b/tests/WE2E/test_configs/verification/config.MET_ensemble_verification_only_vx.yaml index d06d106629..a15e1d0273 100644 --- a/tests/WE2E/test_configs/verification/config.MET_ensemble_verification_only_vx.yaml +++ b/tests/WE2E/test_configs/verification/config.MET_ensemble_verification_only_vx.yaml @@ -15,45 +15,49 @@ workflow: FCST_LEN_HRS: 6 PREEXISTING_DIR_METHOD: rename -workflow_switches: -# -# This test assumes that the post-processed forecast files are staged -# (i.e., not generated by running the forecast model). Thus, turn off -# pre-processing, forecast, post-processing, and other tasks ordinarily -# needed for generation of post-processed forecast files. -# - RUN_TASK_MAKE_GRID: false - RUN_TASK_MAKE_OROG: false - RUN_TASK_MAKE_SFC_CLIMO: false - RUN_TASK_GET_EXTRN_ICS: false - RUN_TASK_GET_EXTRN_LBCS: false - RUN_TASK_MAKE_ICS: false - RUN_TASK_MAKE_LBCS: false - RUN_TASK_RUN_FCST: false - RUN_TASK_RUN_POST: false -# -# This test assumes the observation files are staged. Thus, deactivate -# the GET_OBS_... tasks. Note we do not specify the obs staging directories -# (CCPA_OBS_DIR, MRMS_OBS_DIR, and NDAS_OBS_DIR) because those will be -# automatically set (in a platform-dependent way using the machine file) -# by the script that runs the WE2E tests. -# - RUN_TASK_GET_OBS_CCPA: false - RUN_TASK_GET_OBS_MRMS: false - RUN_TASK_GET_OBS_NDAS: false -# -# Turn on verification tasks. -# - RUN_TASK_VX_GRIDSTAT: true - RUN_TASK_VX_POINTSTAT: true - RUN_TASK_VX_ENSGRID: true - RUN_TASK_VX_ENSPOINT: true +rocoto: + tasks: + taskgroups: '{{ ["parm/wflow/verify.yaml", "parm/wflow/verify_ensgrid.yaml"]|include }}' + task_get_obs_ccpa: + task_get_obs_mrms: + task_get_obs_ndas: + metatask_vx_ens_member: + metatask_GridStat_MRMS_mem#mem#: + task_run_MET_GridStat_vx_#VAR#_mem#mem#: + dependency: + metatask_PointStat_mem#mem#: + task_run_MET_PointStat_vx_#VAR#_mem#mem#: + dependency: + metatask_GridStat_APCP_acc: + metatask_vx_ens_member_acc: + task_run_MET_PcpCombine_fcst_APCP#ACCUM_HR#h_mem#mem#: + dependency: + metatask_EnsembleStat_acc: + task_run_MET_GridStat_vx_ensprob_#VAR#: + dependency: + task_run_MET_EnsembleStat_vx_APCP#ACCUM_HR#h: + dependency: + and: + metataskdep: + attrs: + metatask: GridStat_APCP_acc + metatask_EnsembleStat: + task_run_MET_EnsembleStat_vx_#VAR#: + dependency: + metatask_EnsembleStat_point: + task_run_MET_EnsembleStat_vx_#VAR#: + dependency: + and: + metataskdep: + taskdep: + attrs: + task: run_MET_Pb2nc_obs + global: DO_ENSEMBLE: true NUM_ENS_MEMBERS: 2 verification: - RUN_TASKS_METVX_DET: true - RUN_TASKS_METVX_ENS: true VX_FCST_MODEL_NAME: FV3_GFS_v15p2_CONUS_25km + VX_FCST_INPUT_DIR: '{{ platform.get("TEST_VX_FCST_INPUT_DIR") }}' diff --git a/tests/WE2E/test_configs/verification/config.MET_verification_only_vx.yaml b/tests/WE2E/test_configs/verification/config.MET_verification_only_vx.yaml index 87c68c8bad..44fea42c25 100644 --- a/tests/WE2E/test_configs/verification/config.MET_verification_only_vx.yaml +++ b/tests/WE2E/test_configs/verification/config.MET_verification_only_vx.yaml @@ -15,45 +15,29 @@ workflow: FCST_LEN_HRS: 6 PREEXISTING_DIR_METHOD: rename -workflow_switches: # # This test assumes that the post-processed forecast files are staged -# (i.e., not generated by running the forecast model). Thus, turn off -# pre-processing, forecast, post-processing, and other tasks ordinarily -# needed for generation of post-processed forecast files. -# - RUN_TASK_MAKE_GRID: false - RUN_TASK_MAKE_OROG: false - RUN_TASK_MAKE_SFC_CLIMO: false - RUN_TASK_GET_EXTRN_ICS: false - RUN_TASK_GET_EXTRN_LBCS: false - RUN_TASK_MAKE_ICS: false - RUN_TASK_MAKE_LBCS: false - RUN_TASK_RUN_FCST: false - RUN_TASK_RUN_POST: false -# -# This test assumes the observation files are staged. Thus, deactivate -# the GET_OBS_... tasks. Note we do not specify the obs staging directories -# (CCPA_OBS_DIR, MRMS_OBS_DIR, and NDAS_OBS_DIR) because those will be -# automatically set (in a platform-dependent way using the machine file) -# by the script that runs the WE2E tests. -# - RUN_TASK_GET_OBS_CCPA: false - RUN_TASK_GET_OBS_MRMS: false - RUN_TASK_GET_OBS_NDAS: false -# -# Turn on verification tasks. -# - RUN_TASK_VX_GRIDSTAT: true - RUN_TASK_VX_POINTSTAT: true +# (i.e., not generated by running the forecast model). +# It also assumes staged observations, so turn off those tasks. +rocoto: + tasks: + taskgroups: '{{ ["parm/wflow/verify.yaml"]|include }}' + task_get_obs_ccpa: + task_get_obs_mrms: + task_get_obs_ndas: + metatask_vx_ens_member: + metatask_GridStat_MRMS_mem#mem#: + task_run_MET_GridStat_vx_#VAR#_mem#mem#: + dependency: + metatask_PointStat_mem#mem#: + task_run_MET_PointStat_vx_#VAR#_mem#mem#: + dependency: + metatask_GridStat_APCP_acc: + metatask_vx_ens_member_acc: + task_run_MET_PcpCombine_fcst_APCP#ACCUM_HR#h_mem#mem#: + dependency: -# -# In the "verification" section below, we don't explicitly set the location -# of the staged forecast files (via VX_FCST_INPUT_BASEDIR) because this -# location gets set automatically by the script that runs the WE2E tests. -# The script sets the location in a platform-dependent way using the -# appropriate machine file. -# verification: - RUN_TASKS_METVX_DET: true VX_FCST_MODEL_NAME: FV3_GFS_v15p2_CONUS_25km + VX_FCST_INPUT_DIR: '{{ platform.get("TEST_VX_FCST_INPUT_DIR") }}' + diff --git a/tests/WE2E/test_configs/wflow_features/config.deactivate_tasks.yaml b/tests/WE2E/test_configs/wflow_features/config.deactivate_tasks.yaml index f17039df85..53d10f002a 100644 --- a/tests/WE2E/test_configs/wflow_features/config.deactivate_tasks.yaml +++ b/tests/WE2E/test_configs/wflow_features/config.deactivate_tasks.yaml @@ -25,10 +25,9 @@ workflow: DATE_LAST_CYCL: '2019070100' FCST_LEN_HRS: 6 PREEXISTING_DIR_METHOD: rename -workflow_switches: - RUN_TASK_GET_EXTRN_ICS: false - RUN_TASK_GET_EXTRN_LBCS: false - RUN_TASK_MAKE_ICS: false - RUN_TASK_MAKE_LBCS: false - RUN_TASK_RUN_FCST: false - RUN_TASK_RUN_POST: false +rocoto: + tasks: + task_get_extrn_ics: + task_get_extrn_lbcs: + metatask_run_ensemble: + metatask_run_ens_post: diff --git a/tests/WE2E/test_configs/wflow_features/config.nco_ensemble.yaml b/tests/WE2E/test_configs/wflow_features/config.nco_ensemble.yaml index d12aeb80f6..739b6bb3c5 100644 --- a/tests/WE2E/test_configs/wflow_features/config.nco_ensemble.yaml +++ b/tests/WE2E/test_configs/wflow_features/config.nco_ensemble.yaml @@ -19,10 +19,6 @@ workflow: INCR_CYCL_FREQ: 12 FCST_LEN_HRS: 6 PREEXISTING_DIR_METHOD: rename -workflow_switches: - RUN_TASK_MAKE_GRID: false - RUN_TASK_MAKE_OROG: false - RUN_TASK_MAKE_SFC_CLIMO: false task_get_extrn_ics: EXTRN_MDL_NAME_ICS: FV3GFS USE_USER_STAGED_EXTRN_FILES: true @@ -33,3 +29,6 @@ task_get_extrn_lbcs: global: DO_ENSEMBLE: true NUM_ENS_MEMBERS: 2 +rocoto: + tasks: + taskgroups: '{{ ["parm/wflow/coldstart.yaml", "parm/wflow/post.yaml"]|include }}' diff --git a/tests/WE2E/test_configs/wflow_features/config.pregen_grid_orog_sfc_climo.yaml b/tests/WE2E/test_configs/wflow_features/config.pregen_grid_orog_sfc_climo.yaml index 8ccf1a4bd6..e3e6a794e3 100644 --- a/tests/WE2E/test_configs/wflow_features/config.pregen_grid_orog_sfc_climo.yaml +++ b/tests/WE2E/test_configs/wflow_features/config.pregen_grid_orog_sfc_climo.yaml @@ -11,10 +11,6 @@ workflow: DATE_LAST_CYCL: '2019070100' FCST_LEN_HRS: 6 PREEXISTING_DIR_METHOD: rename -workflow_switches: - RUN_TASK_MAKE_GRID: false - RUN_TASK_MAKE_OROG: false - RUN_TASK_MAKE_SFC_CLIMO: false task_get_extrn_ics: EXTRN_MDL_NAME_ICS: FV3GFS USE_USER_STAGED_EXTRN_FILES: true @@ -22,3 +18,8 @@ task_get_extrn_lbcs: EXTRN_MDL_NAME_LBCS: FV3GFS LBC_SPEC_INTVL_HRS: 3 USE_USER_STAGED_EXTRN_FILES: true +rocoto: + tasks: + task_make_grid: + task_make_orog: + task_make_sfc_climo: diff --git a/tests/WE2E/utils.py b/tests/WE2E/utils.py index e6a9148fb2..c70f8e5560 100755 --- a/tests/WE2E/utils.py +++ b/tests/WE2E/utils.py @@ -344,7 +344,7 @@ def update_expt_status(expt: dict, name: str, refresh: bool = False, debug: bool # are past the first initial iteration of job submissions if not refresh: logging.warning(dedent( - """WARNING:Tasks have not yet been submitted for experiment {name}; + f"""WARNING:Tasks have not yet been submitted for experiment {name}; it could be that your jobs are being throttled at the system level. If you continue to see this message, there may be an error with your diff --git a/ush/config.aqm.community.yaml b/ush/config.aqm.community.yaml index 173cee64f9..a6dd2f22be 100644 --- a/ush/config.aqm.community.yaml +++ b/ush/config.aqm.community.yaml @@ -5,7 +5,7 @@ user: MACHINE: [hera or wcoss2] ACCOUNT: [account name] workflow: - USE_CRON_TO_RELAUNCH: true + USE_CRON_TO_RELAUNCH: false CRON_RELAUNCH_INTVL_MNTS: 3 EXPT_SUBDIR: aqm_community_aqmna13 PREDEF_GRID_NAME: AQM_NA_13km @@ -25,22 +25,16 @@ workflow: DO_REAL_TIME: false nco: NET: aqm -workflow_switches: - RUN_TASK_MAKE_GRID: true - RUN_TASK_MAKE_OROG: true - RUN_TASK_MAKE_SFC_CLIMO: true - RUN_TASK_RUN_POST: true - RUN_TASK_AQM_ICS: true - RUN_TASK_AQM_LBCS: true - RUN_TASK_NEXUS_GFS_SFC: true - RUN_TASK_NEXUS_EMISSION: true - RUN_TASK_FIRE_EMISSION: true - RUN_TASK_POINT_SOURCE: true - RUN_TASK_PRE_POST_STAT: true - RUN_TASK_POST_STAT_O3: false - RUN_TASK_POST_STAT_PM25: false - RUN_TASK_BIAS_CORRECTION_O3: false - RUN_TASK_BIAS_CORRECTION_PM25: false +rocoto: + tasks: + taskgroups: '{{ ["parm/wflow/prep.yaml", "parm/wflow/coldstart.yaml", "parm/wflow/aqm_all.yaml"]|include }}' + task_post_stat_o3: + task_post_stat_pm25: + task_bias_correction_o3: + task_bias_correction_pm25: + metatask_run_ensemble: + task_run_fcst_mem#mem#: + walltime: 02:00:00 task_get_extrn_ics: EXTRN_MDL_NAME_ICS: FV3GFS FV3GFS_FILE_FMT_ICS: netcdf @@ -56,7 +50,6 @@ task_run_fcst: LAYOUT_Y: 34 BLOCKSIZE: 16 RESTART_INTERVAL: 6 - WTIME_RUN_FCST: 02:00:00 QUILTING: true PRINT_ESMF: false task_run_post: diff --git a/ush/config.aqm.nco.realtime.yaml b/ush/config.aqm.nco.realtime.yaml index 0d6cee3cb4..55043cad4a 100644 --- a/ush/config.aqm.nco.realtime.yaml +++ b/ush/config.aqm.nco.realtime.yaml @@ -5,7 +5,7 @@ user: MACHINE: wcoss2 ACCOUNT: [account name] workflow: - USE_CRON_TO_RELAUNCH: true + USE_CRON_TO_RELAUNCH: false CRON_RELAUNCH_INTVL_MNTS: 3 EXPT_SUBDIR: aqm_nco_aqmna13km PREDEF_GRID_NAME: AQM_NA_13km @@ -33,22 +33,16 @@ nco: model_ver: v7.0 RUN: aqm_nco_aqmna13km OPSROOT: /path/to/custom/opsroot -workflow_switches: - RUN_TASK_MAKE_GRID: false - RUN_TASK_MAKE_OROG: false - RUN_TASK_MAKE_SFC_CLIMO: false - RUN_TASK_RUN_POST: true - RUN_TASK_AQM_ICS: true - RUN_TASK_AQM_LBCS: true - RUN_TASK_NEXUS_GFS_SFC: true - RUN_TASK_NEXUS_EMISSION: true - RUN_TASK_FIRE_EMISSION: true - RUN_TASK_POINT_SOURCE: true - RUN_TASK_PRE_POST_STAT: true - RUN_TASK_POST_STAT_O3: true - RUN_TASK_POST_STAT_PM25: true - RUN_TASK_BIAS_CORRECTION_O3: true - RUN_TASK_BIAS_CORRECTION_PM25: true +rocoto: + taskgroups: '{{ ["parm/wflow/all_aqm.yaml", "parm/wflow/coldstart.yaml"]|include }}' + tasks: + task_get_extrn_lbcs: + walltime: 02:00:00 + metatask_run_ensemble: + task_run_fcst_mem#mem#: + walltime: 04:00:00 + task_aqm_lbcs: + walltime: 01:00:00 task_make_grid: GRID_DIR: /lfs/h2/emc/lam/noscrub/RRFS_CMAQ/DOMAIN_DATA/AQM_NA_13km task_make_orog: @@ -64,21 +58,17 @@ task_get_extrn_lbcs: LBC_SPEC_INTVL_HRS: 6 FV3GFS_FILE_FMT_LBCS: netcdf EXTRN_MDL_LBCS_OFFSET_HRS: 0 - WTIME_GET_EXTRN_LBCS: 02:00:00 task_run_fcst: DT_ATMOS: 180 LAYOUT_X: 50 LAYOUT_Y: 34 BLOCKSIZE: 16 RESTART_INTERVAL: 6 18 - WTIME_RUN_FCST: 04:00:00 OMP_NUM_THREADS_RUN_FCST: 1 QUILTING: true PRINT_ESMF: false task_run_post: POST_OUTPUT_DOMAIN_NAME: 793 -task_aqm_lbcs: - WTIME_AQM_LBCS: 01:00:00 global: DO_ENSEMBLE: false NUM_ENS_MEMBERS: 2 diff --git a/ush/config.community.yaml b/ush/config.community.yaml index 0ac4ec9d77..565f8ec613 100644 --- a/ush/config.community.yaml +++ b/ush/config.community.yaml @@ -22,19 +22,6 @@ workflow: PREEXISTING_DIR_METHOD: rename VERBOSE: true COMPILER: intel -workflow_switches: - RUN_TASK_MAKE_GRID: true - RUN_TASK_MAKE_OROG: true - RUN_TASK_MAKE_SFC_CLIMO: true - RUN_TASK_RUN_PRDGEN: false - RUN_TASK_GET_OBS_CCPA: false - RUN_TASK_GET_OBS_MRMS: false - RUN_TASK_GET_OBS_NDAS: false - RUN_TASK_VX_GRIDSTAT: false - RUN_TASK_VX_POINTSTAT: false - RUN_TASK_VX_ENSGRID: false - RUN_TASK_VX_ENSPOINT: false - RUN_TASK_PLOT_ALLVARS: false task_get_extrn_ics: EXTRN_MDL_NAME_ICS: FV3GFS FV3GFS_FILE_FMT_ICS: grib2 @@ -43,7 +30,6 @@ task_get_extrn_lbcs: LBC_SPEC_INTVL_HRS: 6 FV3GFS_FILE_FMT_LBCS: grib2 task_run_fcst: - WTIME_RUN_FCST: 02:00:00 QUILTING: true task_plot_allvars: COMOUT_REF: "" @@ -52,3 +38,8 @@ global: NUM_ENS_MEMBERS: 2 verification: VX_FCST_MODEL_NAME: FV3_GFS_v16_CONUS_25km +rocoto: + tasks: + metatask_run_ensemble: + task_run_fcst_mem#mem#: + walltime: 02:00:00 diff --git a/ush/config.nco.yaml b/ush/config.nco.yaml index 7955c00255..0019cf989c 100644 --- a/ush/config.nco.yaml +++ b/ush/config.nco.yaml @@ -16,12 +16,6 @@ workflow: PREEXISTING_DIR_METHOD: rename VERBOSE: true COMPILER: intel -workflow_switches: - RUN_TASK_MAKE_GRID: false - RUN_TASK_MAKE_OROG: false - RUN_TASK_MAKE_SFC_CLIMO: false - RUN_TASK_RUN_PRDGEN: false - RUN_TASK_PLOT_ALLVARS: false nco: NET: rrfs model_ver: v1.0 @@ -34,10 +28,15 @@ task_get_extrn_lbcs: LBC_SPEC_INTVL_HRS: 3 FV3GFS_FILE_FMT_LBCS: grib2 task_run_fcst: - WTIME_RUN_FCST: 01:00:00 WRITE_DOPOST: true QUILTING: true task_plot_allvars: COMOUT_REF: "" task_run_post: POST_OUTPUT_DOMAIN_NAME: conus_25km +rocoto: + tasks: + taskgroups: '{{ ["parm/wflow/coldstart.yaml", "parm/wflow/post.yaml"]|include }}' + metatask_run_ensemble: + task_run_fcst_mem#mem#: + walltime: 01:00:00 diff --git a/ush/config_defaults.yaml b/ush/config_defaults.yaml index 045a096675..477044769a 100644 --- a/ush/config_defaults.yaml +++ b/ush/config_defaults.yaml @@ -159,6 +159,10 @@ platform: # If this is not set or set to an empty string, it will be (re)set to a # machine-dependent value. # + # REMOVE_MEMORY: + # Boolean flag determining whether to remove the memory flag for the + # Rocoto XML. Some platforms are not configured to accept the memory + # flag, so must not be included at all in the XML. #----------------------------------------------------------------------- # WORKFLOW_MANAGER: "" @@ -175,6 +179,7 @@ platform: QUEUE_HPSS: "" PARTITION_FCST: "" QUEUE_FCST: "" + REMOVE_MEMORY: False # #----------------------------------------------------------------------- # @@ -242,78 +247,88 @@ platform: # # CCPA_OBS_DIR: # 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 HPSS (if the user has access) via - # the TN_GET_OBS_CCPA task (activated in workflow by setting - # RUN_TASK_GET_OBS_CCPA=true). 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/ccpa/proc. METplus is configured to verify 01-, - # 03-, 06-, and 24-h accumulated precipitation using hourly CCPA files. - # METplus configuration files require the use of predetermined directory - # structure and file names. Therefore, 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 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. In addition, a - # caveat is noted for using hourly CCPA data. There is a problem with - # the valid time in the metadata for files valid from 19 - 00 UTC (or - # files under the '00' directory). The script to pull the CCPA data - # from the NOAA HPSS has an example of how to account for this as well - # as organizing the data into a more intuitive format: - # scripts/exregional_get_ccpa_files.sh. When a fix is provided, it will - # be accounted for in the exregional_get_ccpa_files.sh script. + # 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 HPSS (if the user has + # access) via the get_obs_ccpa task (activated in workflow by + # including the parm/wflow/verify.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/ccpa/proc. METplus is + # configured to verify 01-, 03-, 06-, and 24-h accumulated + # precipitation using hourly CCPA files. + # METplus configuration files require the use of predetermined + # directory structure and file names. Therefore, 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 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. In addition, a caveat is noted for using hourly CCPA data. + # There is a problem with the valid time in the metadata for files + # valid from 19 - 00 UTC (or files under the '00' directory). The + # script to pull the CCPA data from the NOAA HPSS has an example of + # how to account for this as well as organizing the data into a more + # intuitive format: scripts/exregional_get_ccpa_files.sh. When a fix + # is provided, it will be accounted for in the + # exregional_get_ccpa_files.sh script. # # MRMS_OBS_DIR: # 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 HPSS (if the user has access) via the - # TN_GET_OBS_MRMS task (activated in workflow by setting - # RUN_TASK_GET_OBS_MRMS=true). 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/mrms/proc. METplus configuration files require the - # use of predetermined directory structure and file names. Therefore, if - # the MRMS files are user provided, they need to follow the anticipated - # naming structure: + # 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 HPSS (if the user has + # access) via the get_obs_mrms task (activated in workflow by + # including the parm/wflow/verify.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/mrms/proc. + # METplus configuration files require the use of 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 YYYY is the 4-digit valid year, MM the 2-digit valid month, DD - # the 2-digit valid day of the month, HH the 2-digit valid hour of the - # day, mm the 2-digit valid minutes of the hour, and SS is the two-digit - # valid seconds of the hour. In addition, 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 to retrieve 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_mrms_files.sh. This script calls the script - # used to identify the MRMS file closest to the valid time: - # ush/mrms_pull_topofhour.py. + # + # where YYYY is the 4-digit valid year, MM the 2-digit valid month, DD + # the 2-digit valid day of the month, HH the 2-digit valid hour of the + # day, mm the 2-digit valid minutes of the hour, and SS is the + # two-digit valid seconds of the hour. In addition, 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 to retrieve 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_mrms_files.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: # User-specified location of 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 HPSS (if the user has access) via the - # TN_GET_OBS_NDAS task (activated in workflow by setting  - # RUN_TASK_GET_OBS_NDAS=true). 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/ndas/proc. METplus is configured to verify - # near-surface variables hourly and upper-air variables at times valid - # 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 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. The script to pull - # the NDAS data from the NOAA HPSS has an example of how to rename the - # NDAS data into a more intuitive format with the valid time listed in - # the file name: scripts/exregional_get_ndas_files.sh + # get_obs_ndas task (activated in workflow by includeing the + # parm/wflow/verify.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/ndas/proc. METplus is + # configured to verify near-surface variables hourly and upper-air + # variables at times valid 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 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. The script to pull the NDAS data from the NOAA HPSS has an + # example of how to rename the NDAS data into a more intuitive format + # with the valid time listed in the file name: + # scripts/exregional_get_ndas_files.sh # #----------------------------------------------------------------------- # @@ -432,7 +447,7 @@ workflow: # #----------------------------------------------------------------------- # - WORKFLOW_ID: "" + WORKFLOW_ID: !nowtimestamp '' # #----------------------------------------------------------------------- # @@ -586,12 +601,16 @@ workflow: # to each workflow task) in order to make all the experiment variables # available in those scripts. # + # ROCOTO_YAML_FN: + # Name of the YAML file containing the YAML workflow definition from + # which the Rocoto XML file is created. + # # EXTRN_MDL_VAR_DEFNS_FN: # Name of file (a shell script) containing the defintions of variables # associated with the external model from which ICs or LBCs are generated. This - # file is created by the TN_GET_EXTRN_* task because the values of the variables + # file is created by the get_extrn_* task because the values of the variables # it contains are not known before this task runs. The file is then sourced by - # the TN_MAKE_ICS and TN_MAKE_LBCS tasks. + # the make_ics and make_lbcs tasks. # # WFLOW_LAUNCH_SCRIPT_FN: # Name of the script that can be used to (re)launch the experiment's rocoto @@ -643,11 +662,13 @@ workflow: FCST_MODEL: "ufs-weather-model" WFLOW_XML_FN: "FV3LAM_wflow.xml" GLOBAL_VAR_DEFNS_FN: "var_defns.sh" + ROCOTO_YAML_FN: "rocoto_defns.yaml" EXTRN_MDL_VAR_DEFNS_FN: "extrn_mdl_var_defns" WFLOW_LAUNCH_SCRIPT_FN: "launch_FV3LAM_wflow.sh" WFLOW_LAUNCH_LOG_FN: "log.launch_FV3LAM_wflow" GLOBAL_VAR_DEFNS_FP: '{{ [EXPTDIR, GLOBAL_VAR_DEFNS_FN] |path_join }}' + ROCOTO_YAML_FP: '{{ [EXPTDIR, ROCOTO_YAML_FN] |path_join }}' WFLOW_LAUNCH_SCRIPT_FP: '{{ [user.USHdir, WFLOW_LAUNCH_SCRIPT_FN] |path_join }}' WFLOW_LAUNCH_LOG_FP: '{{ [EXPTDIR, WFLOW_LAUNCH_LOG_FN] |path_join }}' # @@ -680,7 +701,7 @@ workflow: # #----------------------------------------------------------------------- # - FIXdir: '{{ EXPTDIR if workflow_switches.RUN_TASK_MAKE_GRID else [user.HOMEdir, "fix"]|path_join }}' + FIXdir: '{{ EXPTDIR if rocoto.tasks.get("task_make_grid") else [user.HOMEdir, "fix"]|path_join }}' FIXam: '{{ [FIXdir, "fix_am"]|path_join }}' FIXclim: '{{ [FIXdir, "fix_clim"]|path_join }}' FIXlam: '{{ [FIXdir, "fix_lam"]|path_join }}' @@ -810,12 +831,22 @@ workflow: # Default is 24, which means cycle_freq=24:00:00 # # FCST_LEN_HRS: - # The length of each forecast, in integer hours. + # The length of each forecast, in integer hours. The short forecast + # length when there are different lengths. + # + # LONG_FCST_LEN_HRS: + # The length of the longer forecast in integer hours in a system that + # varies the length of the forecast by time of day forecasts for a + # shorter period. There is no need for the user to update this value + # directly, as it is derived from FCST_LEN_CYCL when FCST_LEN_HRS=-1 # # FCST_LEN_CYCL: # The length of forecast for each cycle date in integer hours. # This is valid only when FCST_LEN_HRS = -1. # This pattern is recurred for all cycle dates. + # Must have the same number of entries as cycles per day, or if less + # than one day the entries must include the length of each cycle to be + # run. # #----------------------------------------------------------------------- # @@ -828,6 +859,7 @@ workflow: - 12 - 12 - 6 + LONG_FCST_LEN: '{% if FCST_LEN_HRS < 0 %}{{ FCST_LEN_CYCL|min }}{% else %}{{ FCST_LEN_HRS }}{% endif %}' # #----------------------------------------------------------------------- @@ -963,7 +995,7 @@ nco: PACKAGEROOT: '{{ OPSROOT }}/packages' DATAROOT: '{{ OPSROOT }}/tmp' DCOMROOT: '{{ OPSROOT }}/dcom' - LOGBASEDIR: '{{ OPSROOT }}/output' + LOGBASEDIR: '{% if user.RUN_ENVIR == "nco" %}{{ [OPSROOT, "output"]|path_join }}{% else %}{{ [workflow.EXPTDIR, "log"]|path_join }}{% endif %}' EXTROOT: '{{ OPSROOT }}/ext' COMIN_BASEDIR: '{{ COMROOT }}/{{ NET }}/{{ model_ver }}' COMOUT_BASEDIR: '{{ COMROOT }}/{{ NET }}/{{ model_ver }}' @@ -985,176 +1017,20 @@ nco: MAILTO: "" MAILCC: "" - -#---------------------------- -# WORKFLOW SWITCHES config parameters -#----------------------------- -workflow_switches: - # - #----------------------------------------------------------------------- - # - # Set flags (and related directories) that determine whether various - # workflow tasks should be run. Note that the TN_MAKE_GRID, TN_MAKE_OROG, - # and TN_MAKE_SFC_CLIMO are all cycle-independent tasks, i.e. if they - # are to be run, they do so only once at the beginning of the workflow - # before any cycles are run. Definitions: - # - # RUN_TASK_MAKE_GRID: - # Flag that determines whether the TN_MAKE_GRID task is to be run. If - # this is set to true, the grid generation task is run and new grid - # files are generated. If it is set to false, then the scripts look - # for pregenerated grid files in the directory specified by GRID_DIR - # (see below). - # - # RUN_TASK_MAKE_OROG: - # Same as RUN_TASK_MAKE_GRID but for the TN_MAKE_OROG task. - # - # RUN_TASK_MAKE_SFC_CLIMO: - # Same as RUN_TASK_MAKE_GRID but for the TN_MAKE_SFC_CLIMO task. - # - # RUN_TASK_GET_EXTRN_ICS: - # Flag that determines whether the TN_GET_EXTRN_ICS task is to be run. - # - # RUN_TASK_GET_EXTRN_LBCS: - # Flag that determines whether the TN_GET_EXTRN_LBCS task is to be run. - # - # RUN_TASK_MAKE_ICS: - # Flag that determines whether the TN_MAKE_ICS task is to be run. - # - # RUN_TASK_MAKE_LBCS: - # Flag that determines whether the TN_MAKE_LBCS task is to be run. - # - # RUN_TASK_RUN_FCST: - # Flag that determines whether the TN_RUN_FCST task is to be run. - # - # RUN_TASK_RUN_POST: - # Flag that determines whether the TN_RUN_POST task is to be run. - # - # RUN_TASK_RUN_PRDGEN: - # Flag that determines whether the TN_RUN_PRDGEN task is to be run. - # - # RUN_TASK_GET_OBS_CCPA: - # Flag that determines whether to run the TN_GET_OBS_CCPA task, which - # retrieves the CCPA hourly precipitation files used by METplus from NOAA HPSS. - # - # RUN_TASK_GET_OBS_MRMS: - # Flag that determines whether to run the TN_GET_OBS_MRMS task, which - # retrieves the MRMS composite reflectivity files used by METplus from NOAA HPSS. - # - # RUN_TASK_GET_OBS_NDAS: - # Flag that determines whether to run the TN_GET_OBS_NDAS task, which - # retrieves the NDAS PrepBufr files used by METplus from NOAA HPSS. - # - # RUN_TASK_VX_GRIDSTAT: - # Flag that determines whether the grid-stat verification task is to be - # run. - # - # RUN_TASK_VX_POINTSTAT: - # Flag that determines whether the point-stat verification task is to be - # run. - # - # RUN_TASK_VX_ENSGRID: - # Flag that determines whether the ensemble-stat verification for gridded - # data task is to be run. - # - # RUN_TASK_VX_ENSPOINT: - # Flag that determines whether the ensemble point verification task is - # to be run. If this flag is set, both ensemble-stat point verification - # and point verification of ensemble-stat output is computed. - # - # RUN_TASK_PLOT_ALLVARS: - # Flag that determines whether to run python plotting scripts - # - # RUN_TASK_AQM_ICS: - # Flag that determines whether the TN_AQM_ICS task is to be run for air quality modeling. - # - # RUN_TASK_AQM_LBCS: - # Flag that determines whether the TN_AQM_LBCS task is to be run for air quality modeling. - # - # RUN_TASK_NEXUS_GFS_SFC: - # Flag that determines whether the TN_NEXUS_GFS_SFC task is to be run for air quality modeling. - # - # RUN_TASK_NEXUS_EMISSION: - # Flag that determines whether the TN_NEXUS_EMISSION task is to be run for air quality modeling. - # - # RUN_TASK_FIRE_EMISSION: - # Flag that determines whether the TN_FIRE_EMISSION task is to be run for air quality modeling. - # - # RUN_TASK_POINT_SOURCE: - # Flag that determines whether the TN_POINT_SOURCE task is to be run for air quality modeling. - # - # RUN_TASK_PRE_POST_STAT: - # Flag that determines whether the TN_PRE_POST_STAT task is to be run for air quality modeling. - # - # RUN_TASK_POST_STAT_O3: - # Flag that determines whether the TN_POST_STAT_O3 task is to be run for air quality modeling. - # - # RUN_TASK_POST_STAT_PM25: - # Flag that determines whether the TN_POST_STAT_PM25 task is to be run for air quality modeling. - # - # RUN_TASK_BIAS_CORRECTION_O3: - # Flag that determines whether the TN_BIAS_CORRECTION_O3 task is to be run for air quality modeling. - # - # RUN_TASK_BIAS_CORRECTION_PM25: - # Flag that determines whether the TN_BIAS_CORRECTION_PM25 task is to be run for air quality modeling. - # - #----------------------------------------------------------------------- - # - RUN_TASK_MAKE_GRID: true - RUN_TASK_MAKE_OROG: true - RUN_TASK_MAKE_SFC_CLIMO: true - - RUN_TASK_GET_EXTRN_ICS: true - RUN_TASK_GET_EXTRN_LBCS: true - RUN_TASK_MAKE_ICS: true - RUN_TASK_MAKE_LBCS: true - RUN_TASK_RUN_FCST: true - RUN_TASK_RUN_POST: true - - RUN_TASK_RUN_PRDGEN: false - - RUN_TASK_GET_OBS_CCPA: false - RUN_TASK_GET_OBS_MRMS: false - RUN_TASK_GET_OBS_NDAS: false - RUN_TASK_VX_GRIDSTAT: false - RUN_TASK_VX_POINTSTAT: false - RUN_TASK_VX_ENSGRID: false - RUN_TASK_VX_ENSPOINT: false - - RUN_TASK_PLOT_ALLVARS: false - - RUN_TASK_AQM_ICS: false - RUN_TASK_AQM_LBCS: false - RUN_TASK_NEXUS_GFS_SFC: false - RUN_TASK_NEXUS_EMISSION: false - RUN_TASK_FIRE_EMISSION: false - RUN_TASK_POINT_SOURCE: false - RUN_TASK_PRE_POST_STAT: false - RUN_TASK_POST_STAT_O3: false - RUN_TASK_POST_STAT_PM25: false - RUN_TASK_BIAS_CORRECTION_O3: false - RUN_TASK_BIAS_CORRECTION_PM25: false - - #---------------------------- # MAKE GRID config parameters #----------------------------- task_make_grid: - TN_MAKE_GRID: "make_grid" - NNODES_MAKE_GRID: 1 - PPN_MAKE_GRID: 24 - WTIME_MAKE_GRID: 00:20:00 - MAXTRIES_MAKE_GRID: 2 # #----------------------------------------------------------------------- # # GRID_DIR: - # The directory in which to look for pregenerated grid files if - # RUN_TASK_MAKE_GRID is set to false. + # The directory in which to look for pregenerated grid files if the + # make_grid task is not set to run. # #----------------------------------------------------------------------- # - GRID_DIR: '{{ [workflow.EXPTDIR, "grid"]|path_join if workflow_switches.RUN_TASK_MAKE_GRID else "" }}' + GRID_DIR: '{{ [workflow.EXPTDIR, "grid"]|path_join if rocoto.tasks.get("task_make_grid") else "" }}' # #----------------------------------------------------------------------- # @@ -1427,40 +1303,24 @@ task_make_grid: # MAKE OROG config parameters #----------------------------- task_make_orog: - TN_MAKE_OROG: "make_orog" - NNODES_MAKE_OROG: 1 - PPN_MAKE_OROG: 24 - WTIME_MAKE_OROG: 00:20:00 - MAXTRIES_MAKE_OROG: 2 KMP_AFFINITY_MAKE_OROG: "disabled" OMP_NUM_THREADS_MAKE_OROG: 6 OMP_STACKSIZE_MAKE_OROG: "2048m" - OROG_DIR: '{{ [workflow.EXPTDIR, "orog"]|path_join if workflow_switches.RUN_TASK_MAKE_OROG else "" }}' + OROG_DIR: '{{ [workflow.EXPTDIR, "orog"]|path_join if rocoto.tasks.get("task_make_orog") else "" }}' #---------------------------- # MAKE SFC CLIMO config parameters #----------------------------- task_make_sfc_climo: - TN_MAKE_SFC_CLIMO: "make_sfc_climo" - NNODES_MAKE_SFC_CLIMO: 2 - PPN_MAKE_SFC_CLIMO: 24 - WTIME_MAKE_SFC_CLIMO: 00:20:00 - MAXTRIES_MAKE_SFC_CLIMO: 2 KMP_AFFINITY_MAKE_SFC_CLIMO: "scatter" OMP_NUM_THREADS_MAKE_SFC_CLIMO: 1 OMP_STACKSIZE_MAKE_SFC_CLIMO: "1024m" - SFC_CLIMO_DIR: '{{ [workflow.EXPTDIR, "sfc_climo"]|path_join if workflow_switches.RUN_TASK_MAKE_SFC_CLIMO else "" }}' + SFC_CLIMO_DIR: '{{ [workflow.EXPTDIR, "sfc_climo"]|path_join if rocoto.tasks.get("task_make_sfc_climo") else "" }}' #---------------------------- # EXTRN ICS config parameters #----------------------------- task_get_extrn_ics: - TN_GET_EXTRN_ICS: "get_extrn_ics" - NNODES_GET_EXTRN_ICS: 1 - PPN_GET_EXTRN_ICS: 1 - MEM_GET_EXTRN_ICS: 2G - WTIME_GET_EXTRN_ICS: 00:45:00 - MAXTRIES_GET_EXTRN_ICS: 1 # #----------------------------------------------------------------------- # @@ -1554,12 +1414,6 @@ task_get_extrn_ics: # EXTRN LBCS config parameters #----------------------------- task_get_extrn_lbcs: - TN_GET_EXTRN_LBCS: "get_extrn_lbcs" - NNODES_GET_EXTRN_LBCS: 1 - PPN_GET_EXTRN_LBCS: 1 - MEM_GET_EXTRN_LBCS: 2G - WTIME_GET_EXTRN_LBCS: 00:45:00 - MAXTRIES_GET_EXTRN_LBCS: 1 # #----------------------------------------------------------------------- # @@ -1635,11 +1489,6 @@ task_get_extrn_lbcs: # MAKE ICS config parameters #----------------------------- task_make_ics: - TN_MAKE_ICS: "make_ics" - NNODES_MAKE_ICS: 4 - PPN_MAKE_ICS: 12 - WTIME_MAKE_ICS: 00:30:00 - MAXTRIES_MAKE_ICS: 1 KMP_AFFINITY_MAKE_ICS: "scatter" OMP_NUM_THREADS_MAKE_ICS: 1 OMP_STACKSIZE_MAKE_ICS: "1024m" @@ -1680,11 +1529,6 @@ task_make_ics: # MAKE LBCS config parameters #----------------------------- task_make_lbcs: - TN_MAKE_LBCS: "make_lbcs" - NNODES_MAKE_LBCS: 4 - PPN_MAKE_LBCS: 12 - WTIME_MAKE_LBCS: 00:30:00 - MAXTRIES_MAKE_LBCS: 1 KMP_AFFINITY_MAKE_LBCS: "scatter" OMP_NUM_THREADS_MAKE_LBCS: 1 OMP_STACKSIZE_MAKE_LBCS: "1024m" @@ -1693,11 +1537,8 @@ task_make_lbcs: # FORECAST config parameters #----------------------------- task_run_fcst: - TN_RUN_FCST: "run_fcst" NNODES_RUN_FCST: '{{ (PE_MEMBER01 + PPN_RUN_FCST - 1) // PPN_RUN_FCST }}' PPN_RUN_FCST: '{{ platform.NCORES_PER_NODE // OMP_NUM_THREADS_RUN_FCST }}' - WTIME_RUN_FCST: 04:30:00 - MAXTRIES_RUN_FCST: 1 FV3_EXEC_FP: '{{ [user.EXECdir, workflow.FV3_EXEC_FN]|path_join }}' # #----------------------------------------------------------------------- @@ -1755,11 +1596,10 @@ task_run_fcst: # fh = 1, 2, and 5. # # WRITE_DOPOST: - # Flag that determines whether or not to use the inline post feature - # [i.e. calling the Unified Post Processor (UPP) from within the weather - # model]. If this is set to true, the TN_RUN_POST task is deactivated - # (i.e. RUN_TASK_RUN_POST is set to false) to avoid unnecessary - # computations. + # Flag that determines whether or not to use the inline post feature + # [i.e. calling the Unified Post Processor (UPP) from within the + # weather model]. If this is set to true, the the run_post task will + # be deactivated. # #----------------------------------------------------------------------- # @@ -1945,11 +1785,6 @@ task_run_fcst: # POST config parameters #----------------------------- task_run_post: - TN_RUN_POST: "run_post" - NNODES_RUN_POST: 2 - PPN_RUN_POST: 24 - WTIME_RUN_POST: 00:15:00 - MAXTRIES_RUN_POST: 2 KMP_AFFINITY_RUN_POST: "scatter" OMP_NUM_THREADS_RUN_POST: 1 OMP_STACKSIZE_RUN_POST: "1024m" @@ -2003,7 +1838,7 @@ task_run_post: # # POST_OUTPUT_DOMAIN_NAME: # Domain name (in lowercase) used in constructing the names of the output - # files generated by UPP [which is called either by running the TN_RUN_POST + # files generated by UPP [which is called either by running the run_post # task or by activating the inline post feature (WRITE_DOPOST set to true)]. # The post output files are named as follows: # @@ -2021,15 +1856,20 @@ task_run_post: POST_OUTPUT_DOMAIN_NAME: '{{ workflow.PREDEF_GRID_NAME }}' TESTBED_FIELDS_FN: "" +#---------------------------- +# NEXUS_EMISSION config parameters +#----------------------------- +task_nexus_emission: + PPN_NEXUS_EMISSION: '{{ platform.NCORES_PER_NODE // OMP_NUM_THREADS_NEXUS_EMISSION }}' + KMP_AFFINITY_NEXUS_EMISSION: "scatter" + OMP_NUM_THREADS_NEXUS_EMISSION: 2 + OMP_STACKSIZE_NEXUS_EMISSION: "1024m" + + #---------------------------- # RUN PRDGEN config parameters #----------------------------- task_run_prdgen: - TN_RUN_PRDGEN: "run_prdgen" - NNODES_RUN_PRDGEN: 1 - PPN_RUN_PRDGEN: 22 - WTIME_RUN_PRDGEN: 00:30:00 - MAXTRIES_RUN_PRDGEN: 1 KMP_AFFINITY_RUN_PRDGEN: "scatter" OMP_NUM_THREADS_RUN_PRDGEN: 1 OMP_STACKSIZE_RUN_PRDGEN: "1024m" @@ -2068,11 +1908,6 @@ task_run_prdgen: # PLOT_ALLVARS config parameters #----------------------------- task_plot_allvars: - TN_PLOT_ALLVARS: "plot_allvars" - NNODES_PLOT_ALLVARS: 1 - PPN_PLOT_ALLVARS: 24 - WTIME_PLOT_ALLVARS: 01:00:00 - MAXTRIES_PLOT_ALLVARS: 1 #------------------------------------------------------------------------- # Reference experiment's COMOUT directory. This is where the GRIB2 files # from postprocessing are located. Make this a template to compare @@ -2096,539 +1931,6 @@ task_plot_allvars: #------------------------------------------------------------------------------- PLOT_DOMAINS: ["conus"] -#---------------------------- -# GET OBS CCPA config parameters -#----------------------------- -task_get_obs_ccpa: - TN_GET_OBS_CCPA: "get_obs_ccpa" - NNODES_GET_OBS_CCPA: 1 - PPN_GET_OBS_CCPA: 1 - MEM_GET_OBS_CCPA: 2G - WTIME_GET_OBS_CCPA: 00:45:00 - MAXTRIES_GET_OBS_CCPA: 1 - -#---------------------------- -# GET OBS MRMS config parameters -#----------------------------- -task_get_obs_mrms: - TN_GET_OBS_MRMS: "get_obs_mrms" - NNODES_GET_OBS_MRMS: 1 - PPN_GET_OBS_MRMS: 1 - MEM_GET_OBS_MRMS: 2G - WTIME_GET_OBS_MRMS: 00:45:00 - MAXTRIES_GET_OBS_MRMS: 1 - -#---------------------------- -# GET OBS NDAS config parameters -#----------------------------- -task_get_obs_ndas: - TN_GET_OBS_NDAS: "get_obs_ndas" - NNODES_GET_OBS_NDAS: 1 - PPN_GET_OBS_NDAS: 1 - MEM_GET_OBS_NDAS: 2G - WTIME_GET_OBS_NDAS: 02:00:00 - MAXTRIES_GET_OBS_NDAS: 1 - -#---------------------------- -# tn_run_met_pb2nc_obs config parameters -#----------------------------- -task_tn_run_met_pb2nc_obs: - TN_RUN_MET_PB2NC_OBS: "run_MET_Pb2nc_obs" - NNODES_RUN_MET_PB2NC_OBS: 1 - PPN_RUN_MET_PB2NC_OBS: 1 - MEM_RUN_MET_PB2NC_OBS: 2G - WTIME_RUN_MET_PB2NC_OBS: 00:30:00 - MAXTRIES_RUN_MET_PB2NC_OBS: 2 - -#---------------------------- -# tn_run_met_pcpcombine config parameters -#----------------------------- -task_tn_run_met_pcpcombine: - TN_RUN_MET_PCPCOMBINE: "run_MET_PcpCombine" -# - NNODES_RUN_MET_PCPCOMBINE_OBS: 1 - PPN_RUN_MET_PCPCOMBINE_OBS: 1 - MEM_RUN_MET_PCPCOMBINE_OBS: 2G - WTIME_RUN_MET_PCPCOMBINE_OBS: 00:30:00 - MAXTRIES_RUN_MET_PCPCOMBINE_OBS: 2 -# - NNODES_RUN_MET_PCPCOMBINE_FCST: 1 - PPN_RUN_MET_PCPCOMBINE_FCST: 1 - MEM_RUN_MET_PCPCOMBINE_FCST: 2G - WTIME_RUN_MET_PCPCOMBINE_FCST: 00:30:00 - MAXTRIES_RUN_MET_PCPCOMBINE_FCST: 2 - -#---------------------------- -# run_met_gridstat_vx_apcp01h config parameters -#----------------------------- -task_run_met_gridstat_vx_apcp01h: - TN_RUN_MET_GRIDSTAT_VX_APCP01H: "run_MET_GridStat_vx_APCP01h" - NNODES_RUN_MET_GRIDSTAT_VX_APCP01H: 1 - PPN_RUN_MET_GRIDSTAT_VX_APCP01H: 1 - MEM_RUN_MET_GRIDSTAT_VX_APCP01H: 2G - WTIME_RUN_MET_GRIDSTAT_VX_APCP01H: 02:00:00 - MAXTRIES_RUN_MET_GRIDSTAT_VX_APCP01H: 2 - -#---------------------------- -# run_met_gridstat_vx_apcp03h config parameters -#----------------------------- -task_run_met_gridstat_vx_apcp03h: - TN_RUN_MET_GRIDSTAT_VX_APCP03H: "run_MET_GridStat_vx_APCP03h" - NNODES_RUN_MET_GRIDSTAT_VX_APCP03H: 1 - PPN_RUN_MET_GRIDSTAT_VX_APCP03H: 1 - MEM_RUN_MET_GRIDSTAT_VX_APCP03H: 2G - WTIME_RUN_MET_GRIDSTAT_VX_APCP03H: 02:00:00 - MAXTRIES_RUN_MET_GRIDSTAT_VX_APCP03H: 2 - -#---------------------------- -# run_met_gridstat_vx_apcp06h config parameters -#----------------------------- -task_run_met_gridstat_vx_apcp06h: - TN_RUN_MET_GRIDSTAT_VX_APCP06H: "run_MET_GridStat_vx_APCP06h" - NNODES_RUN_MET_GRIDSTAT_VX_APCP06H: 1 - PPN_RUN_MET_GRIDSTAT_VX_APCP06H: 1 - MEM_RUN_MET_GRIDSTAT_VX_APCP06H: 2G - WTIME_RUN_MET_GRIDSTAT_VX_APCP06H: 02:00:00 - MAXTRIES_RUN_MET_GRIDSTAT_VX_APCP06H: 2 - -#---------------------------- -# run_met_gridstat_vx_apcp24h config parameters -#----------------------------- -task_run_met_gridstat_vx_apcp24h: - TN_RUN_MET_GRIDSTAT_VX_APCP24H: "run_MET_GridStat_vx_APCP24h" - NNODES_RUN_MET_GRIDSTAT_VX_APCP24H: 1 - PPN_RUN_MET_GRIDSTAT_VX_APCP24H: 1 - MEM_RUN_MET_GRIDSTAT_VX_APCP24H: 2G - WTIME_RUN_MET_GRIDSTAT_VX_APCP24H: 02:00:00 - MAXTRIES_RUN_MET_GRIDSTAT_VX_APCP24H: 2 - -#---------------------------- -# run_met_gridstat_vx_refc config parameters -#----------------------------- -task_run_met_gridstat_vx_refc: - TN_RUN_MET_GRIDSTAT_VX_REFC: "run_MET_GridStat_vx_REFC" - NNODES_RUN_MET_GRIDSTAT_VX_REFC: 1 - PPN_RUN_MET_GRIDSTAT_VX_REFC: 1 - MEM_RUN_MET_GRIDSTAT_VX_REFC: 2G - WTIME_RUN_MET_GRIDSTAT_VX_REFC: 02:00:00 - MAXTRIES_RUN_MET_GRIDSTAT_VX_REFC: 2 - -#---------------------------- -# run_met_gridstat_vx_retop config parameters -#----------------------------- -task_run_met_gridstat_vx_retop: - TN_RUN_MET_GRIDSTAT_VX_RETOP: "run_MET_GridStat_vx_RETOP" - NNODES_RUN_MET_GRIDSTAT_VX_RETOP: 1 - PPN_RUN_MET_GRIDSTAT_VX_RETOP: 1 - MEM_RUN_MET_GRIDSTAT_VX_RETOP: 2G - WTIME_RUN_MET_GRIDSTAT_VX_RETOP: 02:00:00 - MAXTRIES_RUN_MET_GRIDSTAT_VX_RETOP: 2 - -#---------------------------- -# run_met_pointstat_vx_sfc config parameters -#----------------------------- -task_run_met_pointstat_vx_sfc: - TN_RUN_MET_POINTSTAT_VX_SFC: "run_MET_PointStat_vx_SFC" - NNODES_RUN_MET_POINTSTAT_VX_SFC: 1 - PPN_RUN_MET_POINTSTAT_VX_SFC: 1 - MEM_RUN_MET_POINTSTAT_VX_SFC: 2G - WTIME_RUN_MET_POINTSTAT_VX_SFC: 01:00:00 - MAXTRIES_RUN_MET_POINTSTAT_VX_SFC: 2 - -#---------------------------- -# run_met_pointstat_vx_upa config parameters -#----------------------------- -task_run_met_pointstat_vx_upa: - TN_RUN_MET_POINTSTAT_VX_UPA: "run_MET_PointStat_vx_UPA" - NNODES_RUN_MET_POINTSTAT_VX_UPA: 1 - PPN_RUN_MET_POINTSTAT_VX_UPA: 1 - MEM_RUN_MET_POINTSTAT_VX_UPA: 2G - WTIME_RUN_MET_POINTSTAT_VX_UPA: 01:00:00 - MAXTRIES_RUN_MET_POINTSTAT_VX_UPA: 2 - -#---------------------------- -# run_met_ensemblestat_vx_apcp01h config parameters -#----------------------------- -task_run_met_ensemblestat_vx_apcp01h: - TN_RUN_MET_ENSEMBLESTAT_VX_APCP01H: "run_MET_EnsembleStat_vx_APCP01h" - NNODES_RUN_MET_ENSEMBLESTAT_VX_APCP01H: 1 - PPN_RUN_MET_ENSEMBLESTAT_VX_APCP01H: 1 - MEM_RUN_MET_ENSEMBLESTAT_VX_APCP01H: 2G - WTIME_RUN_MET_ENSEMBLESTAT_VX_APCP01H: 01:00:00 - MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_APCP01H: 2 - -#---------------------------- -# run_met_ensemblestat_vx_apcp03h config parameters -#----------------------------- -task_run_met_ensemblestat_vx_apcp03h: - TN_RUN_MET_ENSEMBLESTAT_VX_APCP03H: "run_MET_EnsembleStat_vx_APCP03h" - NNODES_RUN_MET_ENSEMBLESTAT_VX_APCP03H: 1 - PPN_RUN_MET_ENSEMBLESTAT_VX_APCP03H: 1 - MEM_RUN_MET_ENSEMBLESTAT_VX_APCP03H: 2G - WTIME_RUN_MET_ENSEMBLESTAT_VX_APCP03H: 01:00:00 - MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_APCP03H: 2 - -#---------------------------- -# run_met_ensemblestat_vx_apcp06h config parameters -#----------------------------- -task_run_met_ensemblestat_vx_apcp06h: - TN_RUN_MET_ENSEMBLESTAT_VX_APCP06H: "run_MET_EnsembleStat_vx_APCP06h" - NNODES_RUN_MET_ENSEMBLESTAT_VX_APCP06H: 1 - PPN_RUN_MET_ENSEMBLESTAT_VX_APCP06H: 1 - MEM_RUN_MET_ENSEMBLESTAT_VX_APCP06H: 2G - WTIME_RUN_MET_ENSEMBLESTAT_VX_APCP06H: 01:00:00 - MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_APCP06H: 2 - -#---------------------------- -# run_met_ensemblestat_vx_apcp24h config parameters -#----------------------------- -task_run_met_ensemblestat_vx_apcp24h: - TN_RUN_MET_ENSEMBLESTAT_VX_APCP24H: "run_MET_EnsembleStat_vx_APCP24h" - NNODES_RUN_MET_ENSEMBLESTAT_VX_APCP24H: 1 - PPN_RUN_MET_ENSEMBLESTAT_VX_APCP24H: 1 - MEM_RUN_MET_ENSEMBLESTAT_VX_APCP24H: 2G - WTIME_RUN_MET_ENSEMBLESTAT_VX_APCP24H: 01:00:00 - MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_APCP24H: 2 - -#---------------------------- -# run_met_ensemblestat_vx_refc config parameters -#----------------------------- -task_run_met_ensemblestat_vx_refc: - TN_RUN_MET_ENSEMBLESTAT_VX_REFC: "run_MET_EnsembleStat_vx_REFC" - NNODES_RUN_MET_ENSEMBLESTAT_VX_REFC: 1 - PPN_RUN_MET_ENSEMBLESTAT_VX_REFC: 1 - MEM_RUN_MET_ENSEMBLESTAT_VX_REFC: 2G - WTIME_RUN_MET_ENSEMBLESTAT_VX_REFC: 01:00:00 - MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_REFC: 2 - -#---------------------------- -# run_met_ensemblestat_vx_retop config parameters -#----------------------------- -task_run_met_ensemblestat_vx_retop: - TN_RUN_MET_ENSEMBLESTAT_VX_RETOP: "run_MET_EnsembleStat_vx_RETOP" - NNODES_RUN_MET_ENSEMBLESTAT_VX_RETOP: 1 - PPN_RUN_MET_ENSEMBLESTAT_VX_RETOP: 1 - MEM_RUN_MET_ENSEMBLESTAT_VX_RETOP: 2G - WTIME_RUN_MET_ENSEMBLESTAT_VX_RETOP: 01:00:00 - MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_RETOP: 2 - -#---------------------------- -# run_met_ensemblestat_vx_sfc config parameters -#----------------------------- -task_run_met_ensemblestat_vx_sfc: - TN_RUN_MET_ENSEMBLESTAT_VX_SFC: "run_MET_EnsembleStat_vx_SFC" - NNODES_RUN_MET_ENSEMBLESTAT_VX_SFC: 1 - PPN_RUN_MET_ENSEMBLESTAT_VX_SFC: 1 - MEM_RUN_MET_ENSEMBLESTAT_VX_SFC: 2G - WTIME_RUN_MET_ENSEMBLESTAT_VX_SFC: 01:00:00 - MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_SFC: 2 - -#---------------------------- -# run_met_ensemblestat_vx_upa config parameters -#----------------------------- -task_run_met_ensemblestat_vx_upa: - TN_RUN_MET_ENSEMBLESTAT_VX_UPA: "run_MET_EnsembleStat_vx_UPA" - NNODES_RUN_MET_ENSEMBLESTAT_VX_UPA: 1 - PPN_RUN_MET_ENSEMBLESTAT_VX_UPA: 1 - MEM_RUN_MET_ENSEMBLESTAT_VX_UPA: 2G - WTIME_RUN_MET_ENSEMBLESTAT_VX_UPA: 01:00:00 - MAXTRIES_RUN_MET_ENSEMBLESTAT_VX_UPA: 2 - -#---------------------------- -# run_met_gridstat_vx_ensmean_apcp01h config parameters -#----------------------------- -task_run_met_gridstat_vx_ensmean_apcp01h: - TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP01H: "run_MET_GridStat_vx_ensmean_APCP01h" - NNODES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP01H: 1 - PPN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP01H: 1 - MEM_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP01H: 2G - WTIME_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP01H: 01:00:00 - MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP01H: 2 - -#---------------------------- -# run_met_gridstat_vx_ensmean_apcp03h config parameters -#----------------------------- -task_run_met_gridstat_vx_ensmean_apcp03h: - TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP03H: "run_MET_GridStat_vx_ensmean_APCP03h" - NNODES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP03H: 1 - PPN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP03H: 1 - MEM_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP03H: 2G - WTIME_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP03H: 01:00:00 - MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP03H: 2 - -#---------------------------- -# run_met_gridstat_vx_ensmean_apcp06h config parameters -#----------------------------- -task_run_met_gridstat_vx_ensmean_apcp06h: - TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP06H: "run_MET_GridStat_vx_ensmean_APCP06h" - NNODES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP06H: 1 - PPN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP06H: 1 - MEM_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP06H: 2G - WTIME_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP06H: 01:00:00 - MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP06H: 2 - -#---------------------------- -# run_met_gridstat_vx_ensmean_apcp24h config parameters -#----------------------------- -task_run_met_gridstat_vx_ensmean_apcp24h: - TN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP24H: "run_MET_GridStat_vx_ensmean_APCP24h" - NNODES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP24H: 1 - PPN_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP24H: 1 - MEM_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP24H: 2G - WTIME_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP24H: 01:00:00 - MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSMEAN_APCP24H: 2 - -#---------------------------- -# run_met_pointstat_vx_ensmean_sfc config parameters -#----------------------------- -task_run_met_pointstat_vx_ensmean_sfc: - TN_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC: "run_MET_PointStat_vx_ensmean_SFC" - NNODES_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC: 1 - PPN_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC: 1 - MEM_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC: 2G - WTIME_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC: 01:00:00 - MAXTRIES_RUN_MET_POINTSTAT_VX_ENSMEAN_SFC: 2 - -#---------------------------- -# run_met_pointstat_vx_ensmean_upa config parameters -#----------------------------- -task_run_met_pointstat_vx_ensmean_upa: - TN_RUN_MET_POINTSTAT_VX_ENSMEAN_UPA: "run_MET_PointStat_vx_ensmean_UPA" - NNODES_RUN_MET_POINTSTAT_VX_ENSMEAN_UPA: 1 - PPN_RUN_MET_POINTSTAT_VX_ENSMEAN_UPA: 1 - MEM_RUN_MET_POINTSTAT_VX_ENSMEAN_UPA: 2G - WTIME_RUN_MET_POINTSTAT_VX_ENSMEAN_UPA: 01:00:00 - MAXTRIES_RUN_MET_POINTSTAT_VX_ENSMEAN_UPA: 2 - -#---------------------------- -# run_met_gridstat_vx_ensprob_apcp01h config parameters -#----------------------------- -task_run_met_gridstat_vx_ensprob_apcp01h: - TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP01H: "run_MET_GridStat_vx_ensprob_APCP01h" - NNODES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP01H: 1 - PPN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP01H: 1 - MEM_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP01H: 2G - WTIME_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP01H: 01:00:00 - MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP01H: 2 - -#---------------------------- -# run_met_gridstat_vx_ensprob_apcp03h config parameters -#----------------------------- -task_run_met_gridstat_vx_ensprob_apcp03h: - TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP03H: "run_MET_GridStat_vx_ensprob_APCP03h" - NNODES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP03H: 1 - PPN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP03H: 1 - MEM_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP03H: 2G - WTIME_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP03H: 01:00:00 - MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP03H: 2 - -#---------------------------- -# run_met_gridstat_vx_ensprob_apcp06h config parameters -#----------------------------- -task_run_met_gridstat_vx_ensprob_apcp06h: - TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP06H: "run_MET_GridStat_vx_ensprob_APCP06h" - NNODES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP06H: 1 - PPN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP06H: 1 - MEM_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP06H: 2G - WTIME_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP06H: 01:00:00 - MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP06H: 2 - -#---------------------------- -# run_met_gridstat_vx_ensprob_apcp24h config parameters -#----------------------------- -task_run_met_gridstat_vx_ensprob_apcp24h: - TN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP24H: "run_MET_GridStat_vx_ensprob_APCP24h" - NNODES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP24H: 1 - PPN_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP24H: 1 - MEM_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP24H: 2G - WTIME_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP24H: 01:00:00 - MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSPROB_APCP24H: 2 - -#---------------------------- -# run_met_gridstat_vx_ensprob_refc config parameters -#----------------------------- -task_run_met_gridstat_vx_ensprob_refc: - TN_RUN_MET_GRIDSTAT_VX_ENSPROB_REFC: "run_MET_GridStat_vx_ensprob_REFC" - NNODES_RUN_MET_GRIDSTAT_VX_ENSPROB_REFC: 1 - PPN_RUN_MET_GRIDSTAT_VX_ENSPROB_REFC: 1 - MEM_RUN_MET_GRIDSTAT_VX_ENSPROB_REFC: 2G - WTIME_RUN_MET_GRIDSTAT_VX_ENSPROB_REFC: 01:00:00 - MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSPROB_REFC: 2 - -#---------------------------- -# run_met_gridstat_vx_ensprob_retop config parameters -#----------------------------- -task_run_met_gridstat_vx_ensprob_retop: - TN_RUN_MET_GRIDSTAT_VX_ENSPROB_RETOP: "run_MET_GridStat_vx_ensprob_RETOP" - NNODES_RUN_MET_GRIDSTAT_VX_ENSPROB_RETOP: 1 - PPN_RUN_MET_GRIDSTAT_VX_ENSPROB_RETOP: 1 - MEM_RUN_MET_GRIDSTAT_VX_ENSPROB_RETOP: 2G - WTIME_RUN_MET_GRIDSTAT_VX_ENSPROB_RETOP: 01:00:00 - MAXTRIES_RUN_MET_GRIDSTAT_VX_ENSPROB_RETOP: 2 - -#---------------------------- -# run_met_pointstat_vx_ensprob_sfc config parameters -#----------------------------- -task_run_met_pointstat_vx_ensprob_sfc: - TN_RUN_MET_POINTSTAT_VX_ENSPROB_SFC: "run_MET_PointStat_vx_ensprob_SFC" - NNODES_RUN_MET_POINTSTAT_VX_ENSPROB_SFC: 1 - PPN_RUN_MET_POINTSTAT_VX_ENSPROB_SFC: 1 - MEM_RUN_MET_POINTSTAT_VX_ENSPROB_SFC: 2G - WTIME_RUN_MET_POINTSTAT_VX_ENSPROB_SFC: 01:00:00 - MAXTRIES_RUN_MET_POINTSTAT_VX_ENSPROB_SFC: 2 - -#---------------------------- -# run_met_pointstat_vx_ensprob_upa config parameters -#----------------------------- -task_run_met_pointstat_vx_ensprob_upa: - TN_RUN_MET_POINTSTAT_VX_ENSPROB_UPA: "run_MET_PointStat_vx_ensprob_UPA" - NNODES_RUN_MET_POINTSTAT_VX_ENSPROB_UPA: 1 - PPN_RUN_MET_POINTSTAT_VX_ENSPROB_UPA: 1 - MEM_RUN_MET_POINTSTAT_VX_ENSPROB_UPA: 2G - WTIME_RUN_MET_POINTSTAT_VX_ENSPROB_UPA: 01:00:00 - MAXTRIES_RUN_MET_POINTSTAT_VX_ENSPROB_UPA: 2 - -#---------------------------- -# AQM_ICS config parameters -#----------------------------- -task_aqm_ics: - TN_AQM_ICS: "aqm_ics" - NNODES_AQM_ICS: 1 - PPN_AQM_ICS: 1 - WTIME_AQM_ICS: 00:30:00 - MAXTRIES_AQM_ICS: 2 - -#---------------------------- -# AQM_LBCS config parameters -#----------------------------- -task_aqm_lbcs: - TN_AQM_LBCS: "aqm_lbcs" - NNODES_AQM_LBCS: 1 - PPN_AQM_LBCS: 24 - WTIME_AQM_LBCS: 00:30:00 - MAXTRIES_AQM_LBCS: 2 - -#---------------------------- -# NEXUS_GFS_SFC config parameters -#----------------------------- -task_nexus_gfs_sfc: - TN_NEXUS_GFS_SFC: "nexus_gfs_sfc" - NNODES_NEXUS_GFS_SFC: 1 - PPN_NEXUS_GFS_SFC: 1 - MEM_NEXUS_GFS_SFC: 2G - WTIME_NEXUS_GFS_SFC: 00:30:00 - MAXTRIES_NEXUS_GFS_SFC: 2 - -#---------------------------- -# NEXUS_EMISSION config parameters -#----------------------------- -task_nexus_emission: - TN_NEXUS_EMISSION: "nexus_emission" - NNODES_NEXUS_EMISSION: 4 - PPN_NEXUS_EMISSION: '{{ platform.NCORES_PER_NODE // OMP_NUM_THREADS_NEXUS_EMISSION }}' - WTIME_NEXUS_EMISSION: 01:00:00 - MAXTRIES_NEXUS_EMISSION: 2 - KMP_AFFINITY_NEXUS_EMISSION: "scatter" - OMP_NUM_THREADS_NEXUS_EMISSION: 2 - OMP_STACKSIZE_NEXUS_EMISSION: "1024m" - -#---------------------------- -# NEXUS_POST_SPLIT config parameters -#----------------------------- -task_nexus_post_split: - TN_NEXUS_POST_SPLIT: "nexus_post_split" - NNODES_NEXUS_POST_SPLIT: 1 - PPN_NEXUS_POST_SPLIT: 1 - WTIME_NEXUS_POST_SPLIT: 00:30:00 - MAXTRIES_NEXUS_POST_SPLIT: 2 - -#---------------------------- -# FIRE_EMISSION config parameters -#----------------------------- -task_fire_emission: - TN_FIRE_EMISSION: "fire_emission" - NNODES_FIRE_EMISSION: 1 - PPN_FIRE_EMISSION: 1 - MEM_FIRE_EMISSION: 2G - WTIME_FIRE_EMISSION: 00:30:00 - MAXTRIES_FIRE_EMISSION: 2 - -#---------------------------- -# POINT_SOURCE config parameters -#----------------------------- -task_point_source: - TN_POINT_SOURCE: "point_source" - NNODES_POINT_SOURCE: 1 - PPN_POINT_SOURCE: 1 - WTIME_POINT_SOURCE: 01:00:00 - MAXTRIES_POINT_SOURCE: 2 - -#---------------------------- -# PRE_POST_STAT config parameters -#----------------------------- -task_pre_post_stat: - TN_PRE_POST_STAT: "pre_post_stat" - NNODES_PRE_POST_STAT: 1 - PPN_PRE_POST_STAT: 1 - WTIME_PRE_POST_STAT: 00:30:00 - MAXTRIES_PRE_POST_STAT: 2 - -#---------------------------- -# POST_STAT_O3 config parameters -#----------------------------- -task_post_stat_o3: - TN_POST_STAT_O3: "post_stat_o3" - NNODES_POST_STAT_O3: 1 - PPN_POST_STAT_O3: 1 - MEM_POST_STAT_O3: 120G - WTIME_POST_STAT_O3: 00:30:00 - MAXTRIES_POST_STAT_O3: 2 - KMP_AFFINITY_POST_STAT_O3: "scatter" - OMP_NUM_THREADS_POST_STAT_O3: 1 - OMP_STACKSIZE_POST_STAT_O3: "2056M" - -#---------------------------- -# POST_STAT_PM25 config parameters -#----------------------------- -task_post_stat_pm25: - TN_POST_STAT_PM25: "post_stat_pm25" - NNODES_POST_STAT_PM25: 1 - PPN_POST_STAT_PM25: 1 - MEM_POST_STAT_PM25: 120G - WTIME_POST_STAT_PM25: 00:30:00 - MAXTRIES_POST_STAT_PM25: 2 - KMP_AFFINITY_POST_STAT_PM25: "scatter" - OMP_NUM_THREADS_POST_STAT_PM25: 1 - OMP_STACKSIZE_POST_STAT_PM25: "2056M" - -#---------------------------- -# BIAS_CORRECTION_O3 config parameters -#----------------------------- -task_bias_correction_o3: - TN_BIAS_CORRECTION_O3: "bias_correction_o3" - NNODES_BIAS_CORRECTION_O3: 1 - PPN_BIAS_CORRECTION_O3: 1 - MEM_BIAS_CORRECTION_O3: 120G - WTIME_BIAS_CORRECTION_O3: 00:30:00 - MAXTRIES_BIAS_CORRECTION_O3: 2 - KMP_AFFINITY_BIAS_CORRECTION_O3: "scatter" - OMP_NUM_THREADS_BIAS_CORRECTION_O3: 128 - OMP_STACKSIZE_BIAS_CORRECTION_O3: "2056M" - -#---------------------------- -# BIAS_CORRECTION_PM25 config parameters -#----------------------------- -task_bias_correction_pm25: - TN_BIAS_CORRECTION_PM25: "bias_correction_pm25" - NNODES_BIAS_CORRECTION_PM25: 1 - PPN_BIAS_CORRECTION_PM25: 1 - MEM_BIAS_CORRECTION_PM25: 120G - WTIME_BIAS_CORRECTION_PM25: 00:30:00 - MAXTRIES_BIAS_CORRECTION_PM25: 2 - KMP_AFFINITY_BIAS_CORRECTION_PM25: "scatter" - OMP_NUM_THREADS_BIAS_CORRECTION_PM25: 128 - OMP_STACKSIZE_BIAS_CORRECTION_PM25: "2056M" - #---------------------------- # global config parameters #----------------------------- @@ -2687,7 +1989,7 @@ global: # DO_ENSEMBLE: false NUM_ENS_MEMBERS: 0 - ENSMEM_NAMES: '{% for m in range(NUM_ENS_MEMBERS) %} "mem%03d, " % m {% endfor %}' + ENSMEM_NAMES: '{% for m in range(NUM_ENS_MEMBERS) %}{{ "mem%03d, " % m }}{% endfor %}' FV3_NML_ENSMEM_FPS: '{% for mem in ENSMEM_NAMES %}{{ [EXPTDIR, "%s_%s" % FV3_NML_FN, mem]|path_join }}{% endfor %}' ENS_TIME_LAG_HRS: '[ {% for m in range(NUM_ENS_MEMBERS) %} 0, {% endfor %} ]' # @@ -2795,12 +2097,6 @@ global: # verification (vx) parameters #----------------------------- verification: - # Move some of the following to another section at some point. - # - # GET_OBS_LOCAL_MODULE_FN: - # Local task modulefile name for all GET_OBS_* tasks. - # - GET_OBS_LOCAL_MODULE_FN: 'get_obs' # # Templates for CCPA, MRMS, and NDAS observation files. # @@ -2811,63 +2107,27 @@ verification: OBS_NDAS_SFCorUPA_FN_TEMPLATE: 'prepbufr.ndas.{valid?fmt=%Y%m%d%H}' OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE: '${OBS_NDAS_SFCorUPA_FN_TEMPLATE}.nc' # - # VX_LOCAL_MODULE_FN: - # Name (without extension) of the local module file for running the vx - # tasks in the workflow. - # - VX_LOCAL_MODULE_FN: 'run_vx' - # - # RUN_TASKS_METVX_DET: - # Flag that specifies whether to run deterministic verification. If set - # to True, this will run deterministic vx on the post-processed forecast - # output. This post-processed output may consist of a single forecast - # or an ensemble of foreasts, and it may be staged from previous runs of - # the SRW App or may be generated by running the TN_RUN_FCST task as part - # of the current SRW-App-generated experiment. - # - # RUN_TASKS_METVX_ENS: - # Flag that specifies whether to run ensemble verification. The ensemble - # forecast output on which vx will be run may be staged or generated by - # running an ensemble of forecasts with the weather model as part of the - # current SRW-App-generated experiment. - # - RUN_TASKS_METVX_DET: False - RUN_TASKS_METVX_ENS: False - # # VX_FCST_MODEL_NAME: # String that specifies a descriptive name for the model being verified. # This is used in forming the names of the verification output files as # well as in the contents of those files. # - # VX_FIELDS: - # The fields or groups of fields on which to run verification. - # - # VX_APCP_ACCUMS_HH: - # The 2-digit accumulation periods (in units of hours) to consider for - # APCP (accumulated precipitation). If VX_FIELDS contains "APCP", then - # VX_APCP_ACCUMS_HH must contain at least one element. If not, - # VX_APCP_ACCUMS_HH 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_HH: [ "01", "03", "06", "24" ] # - # VX_FCST_INPUT_BASEDIR: - # Location of top-level directory containing forecast (but not obs) files - # that will be used as input into METplus for verification. If not - # specified, this gets set to EXPTDIR. + # VX_FCST_INPUT_DIR: + # Directory template for the path containing forecast (but not obs) files + # that will be used as input into METplus for verification. # # VX_OUTPUT_BASEDIR: # Top-level directory in which METplus will place its output. # - VX_FCST_INPUT_BASEDIR: '{{ "$COMOUT/../.." if user.RUN_ENVIR == "nco" else ( workflow.EXPTDIR if ((workflow_switches.RUN_TASK_RUN_FCST and task_run_fcst.WRITE_DOPOST) or workflow_switches.RUN_TASK_RUN_POST) ) }}' - VX_OUTPUT_BASEDIR: '{{ "$COMOUT/metout" if user.RUN_ENVIR == "nco" else workflow.EXPTDIR }}' + VX_FCST_INPUT_DIR: '{% if user.RUN_ENVIR == "nco" %}$COMOUT/../..{% else %}{{ workflow.EXPTDIR }}{% endif %}' + VX_OUTPUT_BASEDIR: '{% if user.RUN_ENVIR == "nco" %}$COMOUT/metout{% else %}{{ workflow.EXPTDIR }}{% endif %}' # # File name and path templates used in the verification tasks. # - FCST_SUBDIR_TEMPLATE: '{{ "${NET}.{init?fmt=%Y%m%d?shift=-${time_lag}}/{init?fmt=%H?shift=-${time_lag}}" if user.RUN_ENVIR == "nco" else "{init?fmt=%Y%m%d%H?shift=-${time_lag}}${SLASH_ENSMEM_SUBDIR_OR_NULL}/postprd" }}{% raw %}{% endraw %}' - FCST_FN_TEMPLATE: '{{ "${NET}.t{init?fmt=%H?shift=-${time_lag}}z" }}{{ "${DOT_ENSMEM_OR_NULL}" if user.RUN_ENVIR == "nco" else "" }}{{ ".prslev.f{lead?fmt=%HHH?shift=${time_lag}}.${POST_OUTPUT_DOMAIN_NAME}.grib2" }}{% raw %}{% endraw %}' - FCST_FN_METPROC_TEMPLATE: '{{ "${NET}.t{init?fmt=%H?}z" }}{{ "${DOT_ENSMEM_OR_NULL}" if user.RUN_ENVIR == "nco" else "" }}{{ ".prslev.f{lead?fmt=%HHH?}.${POST_OUTPUT_DOMAIN_NAME}_a${ACCUM_HH}h.nc" }}{% raw %}{% endraw %}' + FCST_FN_TEMPLATE: '${NET}.t{init?fmt=%H?shift=-${time_lag}}z.prslev.f{lead?fmt=%HHH?shift=${time_lag}}.${POST_OUTPUT_DOMAIN_NAME}.grib2' + FCST_FN_METPROC_TEMPLATE: '${NET}.t{init?fmt=%H}z.prslev.f{lead?fmt=%HHH}.${POST_OUTPUT_DOMAIN_NAME}_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 @@ -3058,3 +2318,11 @@ cpl_aqm_parm: AQM_AIRNOW_HIST_DIR: "/path/to/historical/airnow/data/dir" +rocoto: + attrs: "" + cycledefs: "" + entities: "" + log: "" + tasks: + taskgroups: "" + diff --git a/ush/fill_jinja_template.py b/ush/fill_jinja_template.py index d7a9673f36..f810136753 100755 --- a/ush/fill_jinja_template.py +++ b/ush/fill_jinja_template.py @@ -246,7 +246,7 @@ def update_dict(dest, newdict, quiet=False): print("*" * 50) -def fill_jinja_template(argv): +def fill_jinja_template(argv, config_dict=None): """ Loads a Jinja template, determines its necessary undefined variables, @@ -259,7 +259,8 @@ def fill_jinja_template(argv): cla.config = config_exists(cla.config) # Create a Jinja Environment to load the template. - env = j2.Environment(loader=j2.FileSystemLoader(cla.template)) + env = j2.Environment(loader=j2.FileSystemLoader(cla.template, + encoding='utf-8')) template_source = env.loader.get_source(env, "") template = env.get_template("") parsed_content = env.parse(template_source) @@ -270,6 +271,9 @@ def fill_jinja_template(argv): # Read in the config options from the provided (optional) YAML file cfg = cla.config if cla.config is not None else {} + if config_dict is not None: + update_dict(cfg, config_dict, quiet=cla.quiet) + # Update cfg with (optional) command-line entries, overriding those in YAML file if cla.user_config: update_dict(cfg, cla.user_config, quiet=cla.quiet) diff --git a/ush/generate_FV3LAM_wflow.py b/ush/generate_FV3LAM_wflow.py index 2355468d21..a4d43a70e4 100755 --- a/ush/generate_FV3LAM_wflow.py +++ b/ush/generate_FV3LAM_wflow.py @@ -102,140 +102,31 @@ def generate_FV3LAM_wflow(ushdir, logfile: str = "log.generate_FV3LAM_wflow", de expt_config["user"]["PARMdir"], wflow_xml_fn, ) + global_var_defns_fp = expt_config["workflow"]["GLOBAL_VAR_DEFNS_FP"] log_info( f""" - Creating rocoto workflow XML file (WFLOW_XML_FP) from jinja template XML - file (template_xml_fp): - template_xml_fp = '{template_xml_fp}' + Creating rocoto workflow XML file (WFLOW_XML_FP): WFLOW_XML_FP = '{wflow_xml_fp}'""" ) # - # Dictionary of settings to pass to fill_jinja + # Call the python script to generate the experiment's XML file # - settings = {} - for k, v in flatten_dict(expt_config).items(): - settings[lowercase(k)] = v - - ensmem_indx_name = "" - uscore_ensmem_name = "" - slash_ensmem_subdir = "" - if expt_config["global"]["DO_ENSEMBLE"]: - ensmem_indx_name = "mem" - uscore_ensmem_name = f"_mem#{ensmem_indx_name}#" - slash_ensmem_subdir = f"/mem#{ensmem_indx_name}#" - - dt_atmos = expt_config["task_run_fcst"]["DT_ATMOS"] - date_first_cycl = expt_config["workflow"]["DATE_FIRST_CYCL"] - date_last_cycl = expt_config["workflow"]["DATE_LAST_CYCL"] - first_file_time = date_first_cycl + timedelta(seconds=dt_atmos) - fcst_threads = expt_config["task_run_fcst"]["OMP_NUM_THREADS_RUN_FCST"] - - if date_first_cycl == date_last_cycl: - cycl_next = date_to_str(date_first_cycl, format="%Y%m%d%H00") - else: - cycl_next = date_to_str(date_first_cycl + timedelta(hours=expt_config['workflow']['INCR_CYCL_FREQ']), format="%Y%m%d%H00") - - incr_cycl_freq = expt_config["workflow"]["INCR_CYCL_FREQ"] - date_2nd_cycl = date_to_str(date_first_cycl + timedelta(hours=incr_cycl_freq), format="%Y%m%d%H00") - date_3rd_cycl = date_to_str(date_first_cycl + timedelta(hours=incr_cycl_freq*2), format="%Y%m%d%H00") - date_4th_cycl = date_to_str(date_first_cycl + timedelta(hours=incr_cycl_freq*3), format="%Y%m%d%H00") - fcst_len_hrs = expt_config["workflow"]["FCST_LEN_HRS"] - fcst_len_cycl = expt_config["workflow"]["FCST_LEN_CYCL"] - num_fcst_len_cycl = len(fcst_len_cycl) - if fcst_len_hrs == -1: - all_cdates = expt_config["workflow"]["ALL_CDATES"] - num_all_cdates = len(all_cdates) - num_cyc_days = num_all_cdates // num_fcst_len_cycl -1 - else: - num_cyc_days = 0 - date_1st_last_cycl = date_to_str(date_first_cycl + timedelta(hours=24*num_cyc_days), format="%Y%m%d%H00") - date_2nd_last_cycl = date_to_str(date_first_cycl + timedelta(hours=incr_cycl_freq) + timedelta(hours=24*num_cyc_days), format="%Y%m%d%H00") - date_3rd_last_cycl = date_to_str(date_first_cycl + timedelta(hours=incr_cycl_freq*2) + timedelta(hours=24*num_cyc_days), format="%Y%m%d%H00") - date_4th_last_cycl = date_to_str(date_first_cycl + timedelta(hours=incr_cycl_freq*3) + timedelta(hours=24*num_cyc_days), format="%Y%m%d%H00") - - settings.update( - { - # - # Number of cores used for a task - # - "ncores_run_fcst": expt_config["task_run_fcst"]["PE_MEMBER01"], - "native_run_fcst": f"--cpus-per-task {fcst_threads} --exclusive", - "native_nexus_emission": f"--cpus-per-task {expt_config['task_nexus_emission']['OMP_NUM_THREADS_NEXUS_EMISSION']}", - # - # Parameters that determine the set of cycles to run. - # - "date_first_cycl": date_to_str(date_first_cycl, format="%Y%m%d%H00"), - "date_last_cycl": date_to_str(date_last_cycl, format="%Y%m%d%H00"), - "cdate_first_cycl": date_first_cycl, - "cycl_freq": f"{expt_config['workflow']['INCR_CYCL_FREQ']:02d}:00:00", - "cycl_next": cycl_next, - "date_2nd_cycl": date_2nd_cycl, - "date_3rd_cycl": date_3rd_cycl, - "date_4th_cycl": date_4th_cycl, - "date_1st_last_cycl": date_1st_last_cycl, - "date_2nd_last_cycl": date_2nd_last_cycl, - "date_3rd_last_cycl": date_3rd_last_cycl, - "date_4th_last_cycl": date_4th_last_cycl, - "fcst_len_hrs": fcst_len_hrs, - "fcst_len_cycl": fcst_len_cycl, - "num_fcst_len_cycl": num_fcst_len_cycl, - # - # Ensemble-related parameters. - # - "ensmem_indx_name": ensmem_indx_name, - "uscore_ensmem_name": uscore_ensmem_name, - "slash_ensmem_subdir": slash_ensmem_subdir, - # - # Parameters associated with subhourly post-processed output - # - "delta_min": expt_config["task_run_post"]["DT_SUBHOURLY_POST_MNTS"], - "first_fv3_file_tstr": first_file_time.strftime("000:%M:%S"), - } - ) - - # Log "settings" variable. - settings_str = cfg_to_yaml_str(settings) + rocoto_yaml_fp = expt_config["workflow"]["ROCOTO_YAML_FP"] + args = ["-o", wflow_xml_fp, + "-t", template_xml_fp, + "-c", rocoto_yaml_fp ] + if not debug: + args.append("-q") - log_info( - f""" - The variable 'settings' specifying values of the rococo XML variables - has been set as follows: - #----------------------------------------------------------------------- - settings =\n\n""", - verbose=verbose, - ) - log_info(settings_str, verbose=verbose) - - # - # Call the python script to generate the experiment's actual XML file - # from the jinja template file. - # try: - fill_jinja_template( - ["-q", "-u", settings_str, "-t", template_xml_fp, "-o", wflow_xml_fp] - ) + fill_jinja_template(args) except: - logging.info( - dedent( - f""" - Variable settings specified on command line for - fill_jinja_template.py:\n - settings =\n\n""" - ) - + settings_str - ) raise Exception( dedent( f""" - Call to python script fill_jinja_template.py to create a rocoto workflow - XML file from a template file failed. Parameters passed to this script - are: - Full path to template rocoto XML file: - template_xml_fp = '{template_xml_fp}' - Full path to output rocoto XML file: - WFLOW_XML_FP = '{wflow_xml_fp}' + Call to fill_jinja_template failed. """ ) ) @@ -763,7 +654,7 @@ def generate_FV3LAM_wflow(ushdir, logfile: str = "log.generate_FV3LAM_wflow", de # the C-resolution of the grid), and this parameter is in most workflow # configurations is not known until the grid is created. # - if not RUN_TASK_MAKE_GRID: + if not expt_config['rocoto']['tasks'].get('task_make_grid'): set_FV3nml_sfc_climo_filenames() @@ -883,6 +774,7 @@ def setup_logging(logfile: str = "log.generate_FV3LAM_wflow", debug: bool = Fals """ ) ) + raise # Note workflow generation completion log_info( @@ -931,10 +823,11 @@ def run_workflow(USHdir, logfile): "user": { "MACHINE": "linux", }, - "workflow_switches": { - "RUN_TASK_MAKE_GRID": True, - "RUN_TASK_MAKE_OROG": True, - "RUN_TASK_MAKE_SFC_CLIMO": True, + "rocoto": { + "tasks": { + "taskgroups": \ + '\'{{ ["parm/wflow/prep.yaml","parm/wflow/coldstart.yaml", "parm/wflow/post.yaml"]|include }}\'' + }, }, } update_dict(cfg_updates, nco_test_config) diff --git a/ush/machine/gaea.yaml b/ush/machine/gaea.yaml index bac487dbf0..9653d74c45 100644 --- a/ush/machine/gaea.yaml +++ b/ush/machine/gaea.yaml @@ -12,6 +12,7 @@ platform: QUEUE_DEFAULT: normal QUEUE_FCST: normal QUEUE_HPSS: normal + REMOVE_MEMORY: True RUN_CMD_FCST: srun --export=ALL --mpi=pmi2 -n ${PE_MEMBER01} RUN_CMD_POST: srun --export=ALL --mpi=pmi2 -n $nprocs RUN_CMD_PRDGEN: srun --export=ALL --mpi=pmi2 -n $nprocs diff --git a/ush/machine/hera.yaml b/ush/machine/hera.yaml index 6b27fb8584..d0c5fd5e29 100644 --- a/ush/machine/hera.yaml +++ b/ush/machine/hera.yaml @@ -28,7 +28,7 @@ platform: TEST_PREGEN_BASEDIR: /scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/FV3LAM_pregen TEST_ALT_EXTRN_MDL_SYSBASEDIR_ICS: /scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/dummy_FV3GFS_sys_dir TEST_ALT_EXTRN_MDL_SYSBASEDIR_LBCS: /scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/dummy_FV3GFS_sys_dir - TEST_VX_FCST_INPUT_BASEDIR: '{{ "/scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/output_data/fcst_" }}{{ "ens" if (global.NUM_ENS_MEMBERS > 0) else "det" }}{{ "/{{workflow.PREDEF_GRID_NAME}}" }}{% raw %}{% endraw %}' + TEST_VX_FCST_INPUT_DIR: '{{ "/scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/output_data/fcst_" }}{{ "ens" if (global.NUM_ENS_MEMBERS > 0) else "det" }}{{ "/{{workflow.PREDEF_GRID_NAME}}" }}{% raw %}{% endraw %}' FIXaer: /scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_aer FIXgsi: /scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_gsi FIXgsm: /scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am @@ -38,6 +38,18 @@ platform: FIXshp: /scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/NaturalEarth EXTRN_MDL_DATA_STORES: hpss aws nomads + +rocoto: + tasks: + metatask_run_ensemble: + task_run_fcst_mem#mem#: + cores: '{{ task_run_fcst.PE_MEMBER01 // 1 }}' + native: '--cpus-per-task {{ task_run_fcst.OMP_NUM_THREADS_RUN_FCST|int }} --exclusive {{ platform.SCHED_NATIVE_CMD }}' + nodes: + nnodes: + nodesize: + ppn: + data: obs: RAP_obs: /scratch2/BMC/public/data/grids/rap/obs @@ -53,3 +65,4 @@ cpl_aqm_parm: NEXUS_FIX_DIR: /scratch2/NCEPDEV/naqfc/RRFS_CMAQ/nexus/fix PT_SRC_BASEDIR: /scratch1/RDARCH/rda-arl-gpu/YouHua.Tang/nei2016v1-pt + diff --git a/ush/machine/jet.yaml b/ush/machine/jet.yaml index 3d5027f1fa..b8f8a3b921 100644 --- a/ush/machine/jet.yaml +++ b/ush/machine/jet.yaml @@ -47,3 +47,14 @@ data: GFS_obs: prepbufr: /public/data/grids/gfs/prepbufr tcvitals: /public/data/grids/gfs/bufr + +rocoto: + tasks: + metatask_run_ensemble: + task_run_fcst_mem#mem#: + cores: '{{ task_run_fcst.PE_MEMBER01 // 1 }}' + native: '--cpus-per-task {{ task_run_fcst.OMP_NUM_THREADS_RUN_FCST|int }} --exclusive {{ platform.SCHED_NATIVE_CMD }}' + nodes: + nnodes: + nodesize: + ppn: diff --git a/ush/machine/linux.yaml b/ush/machine/linux.yaml index b6c274f9db..ae18b57b19 100644 --- a/ush/machine/linux.yaml +++ b/ush/machine/linux.yaml @@ -30,3 +30,14 @@ platform: data: ics_lbcs: FV3GFS: /home/username/DATA/UFS/FV3GFS + +rocoto: + tasks: + metatask_run_ensemble: + task_run_fcst_mem#mem#: + cores: '{{ task_run_fcst.PE_MEMBER01 // 1 }}' + native: '--cpus-per-task {{ task_run_fcst.OMP_NUM_THREADS_RUN_FCST|int }} --exclusive' + nodes: + nnodes: + nodesize: + ppn: diff --git a/ush/machine/noaacloud.yaml b/ush/machine/noaacloud.yaml index ecdd2982a8..6f35de59d8 100644 --- a/ush/machine/noaacloud.yaml +++ b/ush/machine/noaacloud.yaml @@ -8,6 +8,7 @@ platform: METPLUS_PATH: /contrib/EPIC/spack-stack/envs/srw-develop-intel/install/intel/2021.3.0/metplus MET_BIN_EXEC: bin MET_INSTALL_DIR: /contrib/EPIC/spack-stack/envs/srw-develop-intel/install/intel/2021.3.0/met + REMOVE_MEMORY: True RUN_CMD_FCST: mpiexec -np ${PE_MEMBER01} RUN_CMD_POST: mpiexec -np $nprocs RUN_CMD_PRDGEN: mpiexec -np $nprocs diff --git a/ush/machine/wcoss2.yaml b/ush/machine/wcoss2.yaml index 994a0f0fb9..9ba28b4d3d 100644 --- a/ush/machine/wcoss2.yaml +++ b/ush/machine/wcoss2.yaml @@ -54,3 +54,21 @@ cpl_aqm_parm: NEXUS_GFS_SFC_DIR: /lfs/h2/emc/lam/noscrub/RRFS_CMAQ/GFS_DATA PT_SRC_BASEDIR: /lfs/h2/emc/physics/noscrub/Youhua.Tang/nei2016v1-pt +rocoto: + tasks: + task_get_extrn_ics: + native: + task_get_extrn_lbcs: + native: + task_plot_allvars: + native: + metatask_run_ensemble: + task_run_fcst_mem#mem#: + cores: + native: '{{ platform.SCHED_NATIVE_CMD }}' + nodes: '{{ parent.nnodes }}:ppn={{ parent.ppn }}:tpp={{ task_run_fcst.OMP_NUM_THREADS_RUN_FCST }}' + nodesize: '{{ platform.NCORES_PER_NODE }}' + task_nexus_emission_#nspt#: + nodes: '{{ parent.nnodes }}:ppn={{ parent.ppn }}:tpp={{ task_nexus_emission.OMP_NUM_THREADS_NEXUS_EMISSION }}' + task_fire_emission: + native: diff --git a/ush/python_utils/config_parser.py b/ush/python_utils/config_parser.py index a66be884f2..bbabeee3db 100644 --- a/ush/python_utils/config_parser.py +++ b/ush/python_utils/config_parser.py @@ -15,10 +15,19 @@ """ import argparse +import configparser import datetime +import json +import os +import pathlib +import re +from textwrap import dedent +import xml.etree.ElementTree as ET +from xml.dom import minidom +import jinja2 # -# Note: Yaml maynot be available in which case we suppress +# Note: yaml may not be available in which case we suppress # the exception, so that we can have other functionality # provided by this module. # @@ -26,19 +35,8 @@ import yaml except ModuleNotFoundError: pass -# The rest of the formats: JSON/SHELL/INI/XML do not need -# external packages -import json -import os -import re -from textwrap import dedent -import configparser -import xml.etree.ElementTree as ET -from xml.dom import minidom -import jinja2 - -from .environment import list_to_str, str_to_list +from .environment import list_to_str, str_to_list, str_to_type from .run_command import run_command ########## @@ -76,28 +74,73 @@ def cfg_to_yaml_str(cfg): """Get contents of config file as a yaml string""" return yaml.dump( - cfg, Dumper=custom_dumper, sort_keys=False, default_flow_style=False + cfg, sort_keys=False, default_flow_style=False ) +def cycstr(loader, node): + + ''' Returns a cyclestring Element whose content corresponds to the + input node argument ''' + + arg = loader.construct_scalar(node) + return f'{arg}' + +def include(filepaths): + + ''' Returns a dictionary that includes the contents of the referenced + YAML file(s). ''' + + srw_path = pathlib.Path(__file__).resolve().parents[0].parents[0] + + cfg = {} + for filepath in filepaths: + abs_path = filepath + if not os.path.isabs(filepath): + abs_path = os.path.join(os.path.dirname(srw_path), filepath) + with open(abs_path, 'r') as fp: + contents = yaml.load(fp, Loader=yaml.SafeLoader) + for key, value in contents.items(): + cfg[key] = value + return yaml.dump(cfg, sort_keys=False) def join_str(loader, node): """Custom tag hangler to join strings""" seq = loader.construct_sequence(node) return "".join([str(i) for i in seq]) +def startstopfreq(loader, node): + + ''' Returns a Rocoto-formatted string for the contents of a cycledef + tag. Assume that the items in the node are env variables, and return + a Rocoto-formatted string''' + + args = loader.construct_sequence(node) + + # Try to fill the values from environment values, default to the + # value provided in the entry. + start, stop, freq = (os.environ.get(arg, arg) for arg in args) + + return f'{start}00 {stop}00 {freq}:00:00' + +def nowtimestamp(loader, node): + return "id_" + str(int(datetime.datetime.now().timestamp())) try: + yaml.add_constructor("!cycstr", cycstr, Loader=yaml.SafeLoader) + yaml.add_constructor("!include", include, Loader=yaml.SafeLoader) yaml.add_constructor("!join_str", join_str, Loader=yaml.SafeLoader) + yaml.add_constructor("!startstopfreq", startstopfreq, Loader=yaml.SafeLoader) + yaml.add_constructor("!nowtimestamp", nowtimestamp ,Loader=yaml.SafeLoader) except NameError: pass + def path_join(arg): """A filter for jinja2 that joins paths""" return os.path.join(*arg) - def days_ago(arg): """A filter for jinja2 that gives us a date string for x number of days ago""" @@ -105,9 +148,7 @@ def days_ago(arg): return (datetime.date.today() - datetime.timedelta(days=arg)).strftime("%Y%m%d00") - -def extend_yaml(yaml_dict, full_dict=None): - +def extend_yaml(yaml_dict, full_dict=None, parent=None): """ Updates yaml_dict inplace by rendering any existing Jinja2 templates that exist in a value. @@ -116,64 +157,93 @@ def extend_yaml(yaml_dict, full_dict=None): if full_dict is None: full_dict = yaml_dict + if parent is None: + full_dict = yaml_dict + if not isinstance(yaml_dict, dict): return - for k, v in yaml_dict.items(): + for k, val in yaml_dict.items(): - if isinstance(v, dict): - extend_yaml(v, full_dict) + if isinstance(val, dict): + extend_yaml(val, full_dict, yaml_dict) else: - # Save a bit of compute and only do this part for strings that - # contain the jinja double brackets. - v_str = str(v.text) if isinstance(v, ET.Element) else str(v) - is_a_template = any((ele for ele in ["{{", "{%"] if ele in v_str)) - if is_a_template: - - # Find expressions first, and process them as a single template - # if they exist - # Find individual double curly brace template in the string - # otherwise. We need one substitution template at a time so that - # we can opt to leave some un-filled when they are not yet set. - # For example, we can save cycle-dependent templates to fill in - # at run time. - if "{%" in v: - templates = [v_str] - else: - # Separates out all the double curly bracket pairs - templates = re.findall(r"{{[^}]*}}|\S", v_str) - data = [] - for template in templates: - j2env = jinja2.Environment( - loader=jinja2.BaseLoader, undefined=jinja2.StrictUndefined - ) - j2env.filters["path_join"] = path_join - j2env.filters["days_ago"] = days_ago - j2tmpl = j2env.from_string(template) - try: - # Fill in a template that has the appropriate variables - # set. - template = j2tmpl.render(**yaml_dict, **full_dict) - except jinja2.exceptions.UndefinedError as e: - # Leave a templated field as-is in the resulting dict - pass - except TypeError: - pass - except ZeroDivisionError: - pass - except: - print(f"{k}: {template}") - raise - - data.append(template) + if not isinstance(val, list): + val = [val] + for v_idx, v in enumerate(val): + # Save a bit of compute and only do this part for strings that + # contain the jinja double brackets. + v_str = str(v.text) if isinstance(v, ET.Element) else str(v) if isinstance(v, ET.Element): - v.text = "".join(data) - else: - # Put the full template line back together as it was, - # filled or not - yaml_dict[k] = "".join(data) + print('ELEMENT VSTR', v_str, v.text, yaml_dict) + is_a_template = any((ele for ele in ["{{", "{%"] if ele in v_str)) + if is_a_template: + # Find expressions first, and process them as a single template + # if they exist + # Find individual double curly brace template in the string + # otherwise. We need one substitution template at a time so that + # we can opt to leave some un-filled when they are not yet set. + # For example, we can save cycle-dependent templates to fill in + # at run time. + if "{%" in v_str: + templates = [v_str] + else: + # Separates out all the double curly bracket pairs + templates = [m.group() for m in + re.finditer(r"{{[^}]*}}|\S", v_str) if '{{' + in m.group()] + data = [] + for template in templates: + j2env = jinja2.Environment( + loader=jinja2.BaseLoader, undefined=jinja2.StrictUndefined + ) + j2env.filters["path_join"] = path_join + j2env.filters["days_ago"] = days_ago + j2env.filters["include"] = include + try: + j2tmpl = j2env.from_string(template) + except: + print(f"ERROR filling template: {template}, {v_str}") + raise + try: + # Fill in a template that has the appropriate variables + # set. + template = j2tmpl.render(parent=parent, **yaml_dict, **full_dict) + except jinja2.exceptions.UndefinedError as e: + # Leave a templated field as-is in the resulting dict + pass + except ValueError: + pass + except TypeError: + pass + except ZeroDivisionError: + pass + except: + print(f"{k}: {template}") + raise + + data.append(template) + + convert_type = True + for tmpl, rendered in zip(templates, data): + v_str = v_str.replace(tmpl, rendered) + if "string" in tmpl: + convert_type = False + + if convert_type: + v_str = str_to_type(v_str) + + if isinstance(v, ET.Element): + print('Replacing ET text with', v_str) + v.text = v_str + elif isinstance(yaml_dict[k], list): + yaml_dict[k][v_idx] = v_str + else: + # Put the full template line back together as it was, + # filled or not + yaml_dict[k] = v_str ########## @@ -457,12 +527,15 @@ def update_dict(dict_o, dict_t, provide_default=False): Returns: None """ - for k, v in dict_o.items(): + for k, v in dict_o.copy().items(): if isinstance(v, dict): if isinstance(dict_t.get(k), dict): update_dict(v, dict_t[k], provide_default) else: dict_t[k] = v + elif v is None and k in dict_t.keys(): + # remove the key if the source dict has null entry + del dict_t[k] elif k in dict_t.keys(): if ( (not provide_default) @@ -471,11 +544,13 @@ def update_dict(dict_o, dict_t, provide_default=False): or ("{{" in dict_t[k]) ): dict_t[k] = v + elif k not in dict_t.keys(): + dict_t[k] = v def check_structure_dict(dict_o, dict_t): """Check if a dictionary's structure follows a template. - The invalid entries are returned as a list of lists. + The invalid entries are returned as a dictionary. If all entries are valid, returns an empty dictionary Args: diff --git a/ush/python_utils/environment.py b/ush/python_utils/environment.py index da50085933..711934c4ec 100644 --- a/ush/python_utils/environment.py +++ b/ush/python_utils/environment.py @@ -64,6 +64,8 @@ def str_to_type(s, return_string=0): return True if s.lower() in ["false", "no", "nope"]: return False + if s in ["None", "null"]: + return None v = str_to_date(s) if v is not None: if return_string == 2: diff --git a/ush/set_vx_fhr_list.sh b/ush/set_vx_fhr_list.sh index 3b86cf1022..d3403d09f2 100644 --- a/ush/set_vx_fhr_list.sh +++ b/ush/set_vx_fhr_list.sh @@ -256,7 +256,7 @@ Final (i.e. after filtering for missing files) set of foreast hours is if [ "${num_missing_files}" -gt "${NUM_MISSING_OBS_FILES_MAX}" ]; then print_err_msg_exit "\ The number of missing files (num_missing_files) is greater than the -maximum allowed number (NUM_MISSING_OBS_MAS): +maximum allowed number (NUM_MISSING_OBS_FILES_MAX): num_missing_files = ${num_missing_files} NUM_MISSING_OBS_FILES_MAX = ${NUM_MISSING_OBS_FILES_MAX}" fi diff --git a/ush/setup.py b/ush/setup.py index c6ea815d9d..b133612bef 100644 --- a/ush/setup.py +++ b/ush/setup.py @@ -1,5 +1,7 @@ #!/usr/bin/env python3 +import copy +import json import os import sys import datetime @@ -7,6 +9,8 @@ import logging from textwrap import dedent +import yaml + from python_utils import ( log_info, cd_vrfy, @@ -86,6 +90,14 @@ def load_config_for_setup(ushdir, default_config, user_config): # Make sure the keys in user config match those in the default # config. invalid = check_structure_dict(cfg_u, cfg_d) + + # Task and metatask entries can be added arbitrarily under the + # rocoto section. Remove those from invalid if they exist + for key in invalid.copy().keys(): + if key.split("_", maxsplit=1)[0] in ["task", "metatask"]: + invalid.pop(key) + logging.info(f"Found and allowing key {key}") + if invalid: errmsg = f"Invalid key(s) specified in {user_config}:\n" for entry in invalid: @@ -130,6 +142,54 @@ def load_config_for_setup(ushdir, default_config, user_config): # Load the constants file cfg_c = load_config_file(os.path.join(ushdir, "constants.yaml")) + + # Load the rocoto workflow default file + cfg_wflow = load_config_file(os.path.join(ushdir, os.pardir, "parm", + "wflow", "default_workflow.yaml")) + + # Takes care of removing any potential "null" entries, i.e., + # unsetting a default value from an anchored default_task + update_dict(cfg_wflow, cfg_wflow) + + + # Take any user-specified taskgroups entry here. + taskgroups = cfg_u.get('rocoto', {}).get('tasks', {}).get('taskgroups') + if taskgroups: + cfg_wflow['rocoto']['tasks']['taskgroups'] = taskgroups + + # Extend yaml here on just the rocoto section to include the + # appropriate groups of tasks + extend_yaml(cfg_wflow) + + + # Put the entries expanded under taskgroups in tasks + rocoto_tasks = cfg_wflow["rocoto"]["tasks"] + cfg_wflow["rocoto"]["tasks"] = yaml.load(rocoto_tasks.pop("taskgroups"),Loader=yaml.SafeLoader) + + # Update wflow config from user one more time to make sure any of + # the "null" settings are removed, i.e., tasks turned off. + update_dict(cfg_u.get('rocoto', {}), cfg_wflow["rocoto"]) + + def add_jobname(tasks): + """ Add the jobname entry for all the tasks in the workflow """ + + if not isinstance(tasks, dict): + return + for task, task_settings in tasks.items(): + task_type = task.split("_", maxsplit=1)[0] + if task_type == "task": + # Use the provided attribute if it is present, otherwise use + # the name in the key + tasks[task]["jobname"] = \ + task_settings.get("attrs", {}).get("name") or \ + task.split("_", maxsplit=1)[1] + elif task_type == "metatask": + add_jobname(task_settings) + + + # Add jobname entry to each remaining task + add_jobname(cfg_wflow["rocoto"]["tasks"]) + # Update default config with the constants, the machine config, and # then the user_config # Recall: update_dict updates the second dictionary with the first, @@ -139,6 +199,9 @@ def load_config_for_setup(ushdir, default_config, user_config): # Constants update_dict(cfg_c, cfg_d) + # Default workflow settings + update_dict(cfg_wflow, cfg_d) + # Machine settings update_dict(machine_cfg, cfg_d) @@ -148,6 +211,10 @@ def load_config_for_setup(ushdir, default_config, user_config): # User settings (take precedence over all others) update_dict(cfg_u, cfg_d) + # Update the cfg_d against itself now, to remove any "null" + # stranglers. + update_dict(cfg_d, cfg_d) + # Set "Home" directory, the top-level ufs-srweather-app directory homedir = os.path.abspath(os.path.dirname(__file__) + os.sep + os.pardir) cfg_d["user"]["HOMEdir"] = homedir @@ -327,10 +394,7 @@ def setup(USHdir, user_config_fn="config.yaml", debug: bool = False): # Workflow workflow_config = expt_config["workflow"] - # Generate a unique number for this workflow run. This may be used to - # get unique log file names for example - workflow_id = "id_" + str(int(datetime.datetime.now().timestamp())) - workflow_config["WORKFLOW_ID"] = workflow_id + workflow_id = workflow_config["WORKFLOW_ID"] log_info(f"""WORKFLOW ID = {workflow_id}""") debug = workflow_config.get("DEBUG") @@ -419,23 +483,24 @@ def setup(USHdir, user_config_fn="config.yaml", debug: bool = False): # ----------------------------------------------------------------------- # - workflow_switches = expt_config["workflow_switches"] - run_task_make_grid = workflow_switches['RUN_TASK_MAKE_GRID'] - run_task_make_orog = workflow_switches['RUN_TASK_MAKE_OROG'] - run_task_make_sfc_climo = workflow_switches['RUN_TASK_MAKE_SFC_CLIMO'] + rocoto_config = expt_config.get('rocoto', {}) + rocoto_tasks = rocoto_config.get("tasks") + run_make_grid = rocoto_tasks.get('task_make_grid') is not None + run_make_orog = rocoto_tasks.get('task_make_orog') is not None + run_make_sfc_climo = rocoto_tasks.get('task_make_sfc_climo') is not None # Necessary tasks are turned on pregen_basedir = expt_config["platform"].get("DOMAIN_PREGEN_BASEDIR") if pregen_basedir is None and not ( - run_task_make_grid and run_task_make_orog and run_task_make_sfc_climo + run_make_grid and run_make_orog and run_make_sfc_climo ): raise Exception( f""" DOMAIN_PREGEN_BASEDIR must be set when any of the following - tasks are turned off: - RUN_TASK_MAKE_GRID = {run_task_make_grid} - RUN_TASK_MAKE_OROG = {run_task_make_orog} - RUN_TASK_MAKE_SFC_CLIMO = {run_task_make_sfc_climo}""" + tasks are not included in the workflow: + RUN_MAKE_GRID = {run_make_grid} + RUN_MAKE_OROG = {run_make_orog} + RUN_MAKE_SFC_CLIMO = {run_make_sfc_climo}""" ) # A batch system account is specified @@ -449,6 +514,34 @@ def setup(USHdir, user_config_fn="config.yaml", debug: bool = False): ) ) + def remove_tag(tasks, tag): + """ Remove the tag for all the tasks in the workflow """ + + if not isinstance(tasks, dict): + return + for task, task_settings in tasks.items(): + task_type = task.split("_", maxsplit=1)[0] + if task_type == "task": + task_settings.pop(tag, None) + elif task_type == "metatask": + remove_tag(task_settings, tag) + + # Remove all memory tags for platforms that do not support them + remove_memory = expt_config["platform"].get("REMOVE_MEMORY") + if remove_memory: + remove_tag(rocoto_tasks, "memory") + + for part in ['PARTITION_HPSS', 'PARTITION_DEFAULT', 'PARTITION_FCST']: + partition = expt_config["platform"].get(part) + if not partition: + remove_tag(rocoto_tasks, 'partition') + + # When not running subhourly post, remove those tasks, if they exist + if not expt_config.get("task_run_post", {}).get("SUB_HOURLY_POST"): + post_meta = rocoto_tasks.get("metatask_run_ens_post", {}) + post_meta.pop("metatask_run_sub_hourly_post", None) + post_meta.pop("metatask_sub_hourly_last_hour_post", None) + # # ----------------------------------------------------------------------- # @@ -581,41 +674,59 @@ def get_location(xcs, fmt, expt_cfg): run_envir = expt_config["user"].get("RUN_ENVIR", "") # set varying forecast lengths only when fcst_len_hrs=-1 + fcst_len_hrs = workflow_config.get("FCST_LEN_HRS") if fcst_len_hrs == -1: - # Create a full list of cycle dates + + # Check that the number of entries divides into a day fcst_len_cycl = workflow_config.get("FCST_LEN_CYCL") - num_fcst_len_cycl = len(fcst_len_cycl) + incr_cycl_freq = int(workflow_config.get("INCR_CYCL_FREQ")) + date_first_cycl = workflow_config.get("DATE_FIRST_CYCL") date_last_cycl = workflow_config.get("DATE_LAST_CYCL") - incr_cycl_freq = workflow_config.get("INCR_CYCL_FREQ") - all_cdates = set_cycle_dates(date_first_cycl,date_last_cycl,incr_cycl_freq) - num_all_cdates = len(all_cdates) - # Create a full list of forecast hours - num_recur = num_all_cdates // num_fcst_len_cycl - rem_recur = num_all_cdates % num_fcst_len_cycl - if rem_recur == 0: - fcst_len_cycl = fcst_len_cycl * num_recur - num_fcst_len_cycl = len(fcst_len_cycl) - workflow_config.update({"FCST_LEN_CYCL_ALL": fcst_len_cycl}) - workflow_config.update({"ALL_CDATES": all_cdates}) - else: - raise Exception( - f""" - The number of the cycle dates is not evenly divisible by the - number of the forecast lengths: - num_all_cdates = {num_all_cdates} - num_fcst_len_cycl = {num_fcst_len_cycl} - rem = num_all_cdates%%num_fcst_len_cycl = {rem_recur}""" - ) - if num_fcst_len_cycl != num_all_cdates: - raise Exception( - f""" - The number of the cycle dates does not match with the number of - the forecast lengths: - num_all_cdates = {num_all_cdates} - num_fcst_len_cycl = {num_fcst_len_cycl}""" - ) + + if 24 / incr_cycl_freq != len(fcst_len_cycl): + + # Also allow for the possibility that the user is running + # cycles for less than a day: + num_cycles = len(set_cycle_dates( + date_first_cycl, + date_last_cycl, + incr_cycl_freq)) + + if num_cycles != len(fcst_len_cycl): + logger.error(f""" The number of entries in FCST_LEN_CYCL does + not divide evenly into a 24 hour day or the number of cycles + in your experiment! + FCST_LEN_CYCL = {fcst_len_cycl} + """ + ) + raise ValueError + + # Build cycledefs entries for the long forecasts + # Short forecast cycles will be relevant to all intended + # forecasts...after all, a 12 hour forecast also encompasses a 3 + # hour forecast, so the short ones will be consistent with the + # existing default forecast cycledef + + # Reset the hours to the short forecast length + workflow_config["FCST_LEN_HRS"] = min(fcst_len_cycl) + + # Find the entries that match the long forecast, and map them to + # their time of day. + long_fcst_len = max(fcst_len_cycl) + long_indices = [i for i,x in enumerate(fcst_len_cycl) if x == long_fcst_len] + long_cycles = [i * incr_cycl_freq for i in long_indices] + + # add one forecast entry per cycle per day + fcst_cdef = [] + + for hh in long_cycles: + first = date_first_cycl.replace(hour=hh).strftime("%Y%m%d%H") + last = date_last_cycl.replace(hour=hh).strftime("%Y%m%d%H") + fcst_cdef.append(f'{first}00 {last}00 24:00:00') + + rocoto_config['cycledefs']['long_forecast'] = fcst_cdef # # ----------------------------------------------------------------------- @@ -977,7 +1088,8 @@ def get_location(xcs, fmt, expt_cfg): for nco_var in nco_vars: nco_config[nco_var.upper()] = exptdir - nco_config["LOGBASEDIR"] = os.path.join(exptdir, "log") + # Set the rocoto string for the fcst output location + rocoto_config["entities"]["FCST_DIR"] = "{{ nco.COMOUT_BASEDIR }}/@Y@m@d@H" # Use env variables for NCO variables and create NCO directories if run_envir == "nco": @@ -992,11 +1104,18 @@ def get_location(xcs, fmt, expt_cfg): mkdir_vrfy(f' -p "{nco_config.get("PACKAGEROOT")}"') mkdir_vrfy(f' -p "{nco_config.get("DATAROOT")}"') mkdir_vrfy(f' -p "{nco_config.get("DCOMROOT")}"') - mkdir_vrfy(f' -p "{nco_config.get("LOGBASEDIR")}"') mkdir_vrfy(f' -p "{nco_config.get("EXTROOT")}"') + + # Update the rocoto string for the fcst output location if + # running an ensemble in nco mode + if global_sect["DO_ENSEMBLE"]: + rocoto_config["entities"]["FCST_DIR"] = \ + "{{ nco.DATAROOT }}/run_fcst_mem#mem#.{{ workflow.WORKFLOW_ID }}_@Y@m@d@H" + if nco_config["DBNROOT"]: mkdir_vrfy(f' -p "{nco_config["DBNROOT"]}"') + mkdir_vrfy(f' -p "{nco_config.get("LOGBASEDIR")}"') # create experiment dir mkdir_vrfy(f' -p "{exptdir}"') @@ -1103,17 +1222,23 @@ def get_location(xcs, fmt, expt_cfg): # ----------------------------------------------------------------------- # + task_defs = rocoto_config.get('tasks') + # Ensemble verification can only be run in ensemble mode do_ensemble = global_sect["DO_ENSEMBLE"] - run_task_vx_ensgrid = workflow_switches["RUN_TASK_VX_ENSGRID"] - run_task_vx_enspoint = workflow_switches["RUN_TASK_VX_ENSPOINT"] - if (not do_ensemble) and (run_task_vx_ensgrid or run_task_vx_enspoint): + + + # Gather all the tasks/metatasks that are defined for verifying + # ensembles + ens_vx_tasks = [task for task in task_defs if "MET_GridStat_vx_ens" in task] + if (not do_ensemble) and ens_vx_tasks: + task_str = "\n".join(ens_vx_tasks) raise Exception( f''' Ensemble verification can not be run unless running in ensemble mode: DO_ENSEMBLE = \"{do_ensemble}\" - RUN_TASK_VX_ENSGRID = \"{run_task_vx_ensgrid}\" - RUN_TASK_VX_ENSPOINT = \"{run_task_vx_enspoint}\"''' + Ensemble verification tasks: {task_str} + ''' ) # @@ -1129,35 +1254,48 @@ def get_location(xcs, fmt, expt_cfg): mkdir_vrfy(f' -p "{fixlam}"') # - # Use the pregenerated domain files if the RUN_TASK_MAKE* tasks are - # turned off. Link the files, and check that they all contain the - # same resolution input. + # Use the pregenerated domain files if the tasks to generate them + # are turned off. Link the files, and check that they all contain + # the same resolution input. # - run_task_make_ics = workflow_switches['RUN_TASK_MAKE_LBCS'] - run_task_make_lbcs = workflow_switches['RUN_TASK_MAKE_ICS'] - run_task_run_fcst = workflow_switches['RUN_TASK_RUN_FCST'] - run_task_makeics_or_makelbcs_or_runfcst = run_task_make_ics or \ - run_task_make_lbcs or \ - run_task_run_fcst + + def dict_find(user_dict, substring): + + if not isinstance(user_dict, dict): + return + + for key, value in user_dict.items(): + if substring in key: + return True + if isinstance(value, dict): + dict_find(value, substring) + return False + + run_make_ics = dict_find(rocoto_tasks, "task_make_ics") + run_make_lbcs = dict_find(rocoto_tasks, "task_make_ics") + run_run_fcst = dict_find(rocoto_tasks, "task_run_fcst") + run_any_coldstart_task = run_make_ics or \ + run_make_lbcs or \ + run_run_fcst # Flags for creating symlinks to pre-generated grid, orography, and sfc_climo files. # These consider dependencies of other tasks on each pre-processing task. create_symlinks_to_pregen_files = { - "GRID": (not workflow_switches['RUN_TASK_MAKE_GRID']) and \ - (run_task_make_orog or run_task_make_sfc_climo or run_task_makeics_or_makelbcs_or_runfcst), - "OROG": (not workflow_switches['RUN_TASK_MAKE_OROG']) and \ - (run_task_make_sfc_climo or run_task_makeics_or_makelbcs_or_runfcst), - "SFC_CLIMO": (not workflow_switches['RUN_TASK_MAKE_SFC_CLIMO']) and \ - (run_task_make_ics or run_task_make_lbcs), + "GRID": (not run_make_grid) and \ + (run_make_orog or run_make_sfc_climo or run_any_coldstart_task), + "OROG": (not run_make_orog) and \ + (run_make_sfc_climo or run_any_coldstart_task), + "SFC_CLIMO": (not run_make_sfc_climo) and \ + (run_make_ics or run_make_lbcs), } prep_tasks = ["GRID", "OROG", "SFC_CLIMO"] res_in_fixlam_filenames = None for prep_task in prep_tasks: res_in_fns = "" + sect_key = f"task_make_{prep_task.lower()}" # If the user doesn't want to run the given task, link the fix # file from the staged files. - if create_symlinks_to_pregen_files[prep_task]: - sect_key = f"task_make_{prep_task.lower()}" + if not task_defs.get(sect_key): dir_key = f"{prep_task}_DIR" task_dir = expt_config[sect_key].get(dir_key) @@ -1233,16 +1371,18 @@ def get_location(xcs, fmt, expt_cfg): # if fcst_config["WRITE_DOPOST"]: # Turn off run_post - if workflow_switches["RUN_TASK_RUN_POST"]: + task_name = 'metatask_run_ens_post' + removed_task = task_defs.pop(task_name, None) + if removed_task: logger.warning( dedent( f""" - Inline post is turned on, deactivating post-processing tasks: - RUN_TASK_RUN_POST = False - """ + Inline post is turned on, deactivating post-processing tasks: + Removing {task_name} from task definitions + list. + """ ) ) - workflow_switches["RUN_TASK_RUN_POST"] = False # Check if SUB_HOURLY_POST is on if expt_config["task_run_post"]["SUB_HOURLY_POST"]: @@ -1345,8 +1485,20 @@ def get_location(xcs, fmt, expt_cfg): configuration file ('{user_config_fn}').""" ) + # Final failsafe before writing rocoto yaml to ensure we don't have any invalid dicts + # (e.g. metatasks with no tasks, tasks with no associated commands) + clean_rocoto_dict(expt_config["rocoto"]["tasks"]) + + rocoto_yaml_fp = workflow_config["ROCOTO_YAML_FP"] + with open(rocoto_yaml_fp, 'w') as f: + yaml.Dumper.ignore_aliases = lambda *args : True + yaml.dump(expt_config.get("rocoto"), f, sort_keys=False) + + var_defns_cfg = copy.deepcopy(expt_config) + del var_defns_cfg["rocoto"] with open(global_var_defns_fp, "a") as f: - f.write(cfg_to_shell_str(expt_config)) + f.write(cfg_to_shell_str(var_defns_cfg)) + # # ----------------------------------------------------------------------- @@ -1372,6 +1524,40 @@ def get_location(xcs, fmt, expt_cfg): return expt_config +def clean_rocoto_dict(rocotodict): + """Removes any invalid entries from rocoto_dict. Examples of invalid entries are: + + 1. A task dictionary containing no "command" key + 2. A metatask dictionary containing no task dictionaries""" + + # Loop 1: search for tasks with no command key, iterating over metatasks + for key in list(rocotodict.keys()): + if key.split("_", maxsplit=1)[0] == "metatask": + clean_rocoto_dict(rocotodict[key]) + elif key.split("_", maxsplit=1)[0] in ["task"]: + if not rocotodict[key].get("command"): + popped = rocotodict.pop(key) + logging.warning(f"Invalid task {key} removed due to empty/unset run command") + logging.debug(f"Removed entry:\n{popped}") + + # Loop 2: search for metatasks with no tasks in them + for key in list(rocotodict.keys()): + if key.split("_", maxsplit=1)[0] == "metatask": + valid = False + for key2 in list(rocotodict[key].keys()): + if key2.split("_", maxsplit=1)[0] == "metatask": + clean_rocoto_dict(rocotodict[key][key2]) + #After above recursion, any nested empty metatasks will have popped themselves + if rocotodict[key].get(key2): + valid = True + elif key2.split("_", maxsplit=1)[0] == "task": + valid = True + if not valid: + popped = rocotodict.pop(key) + logging.warning(f"Invalid/empty metatask {key} removed") + logging.debug(f"Removed entry:\n{popped}") + + # # ----------------------------------------------------------------------- diff --git a/ush/valid_param_vals.yaml b/ush/valid_param_vals.yaml index 237031e3d9..92cca29288 100644 --- a/ush/valid_param_vals.yaml +++ b/ush/valid_param_vals.yaml @@ -55,17 +55,7 @@ valid_vals_GRID_GEN_METHOD: ["GFDLgrid", "ESGgrid"] valid_vals_PREEXISTING_DIR_METHOD: ["delete", "rename", "quit"] valid_vals_GTYPE: ["regional"] valid_vals_WRTCMP_output_grid: ["rotated_latlon", "lambert_conformal", "regional_latlon"] -valid_vals_RUN_TASK_MAKE_GRID: [True, False] -valid_vals_RUN_TASK_MAKE_OROG: [True, False] -valid_vals_RUN_TASK_MAKE_SFC_CLIMO: [True, False] -valid_vals_RUN_TASK_RUN_POST: [True, False] -valid_vals_RUN_TASK_RUN_PRDGEN: [True, False] -valid_vals_DO_PARALLEL_PRDGEN: [True, False] valid_vals_WRITE_DOPOST: [True, False] -valid_vals_RUN_TASK_VX_GRIDSTAT: [True, False] -valid_vals_RUN_TASK_VX_POINTSTAT: [True, False] -valid_vals_RUN_TASK_VX_ENSGRID: [True, False] -valid_vals_RUN_TASK_VX_ENSPOINT: [True, False] valid_vals_QUILTING: [True, False] valid_vals_PRINT_ESMF: [True, False] valid_vals_USE_CRON_TO_RELAUNCH: [True, False] @@ -88,17 +78,6 @@ valid_vals_SUB_HOURLY_POST: [True, False] valid_vals_DT_SUBHOURLY_POST_MNTS: [0, 1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30] valid_vals_USE_MERRA_CLIMO: [True, False] valid_vals_CPL_AQM: [True, False] -valid_vals_RUN_TASK_AQM_ICS: [True, False] -valid_vals_RUN_TASK_AQM_LBCS: [True, False] -valid_vals_RUN_TASK_NEXUS_GFS_SFC: [True, False] -valid_vals_RUN_TASK_NEXUS_EMISSION: [True, False] -valid_vals_RUN_TASK_FIRE_EMISSION: [True, False] -valid_vals_RUN_TASK_POINT_SOURCE: [True, False] -valid_vals_RUN_TASK_PRE_POST_STAT: [True, False] -valid_vals_RUN_TASK_POST_STAT_O3: [True, False] -valid_vals_RUN_TASK_POST_STAT_PM25: [True, False] -valid_vals_RUN_TASK_BIAS_CORRECTION_O3: [True, False] -valid_vals_RUN_TASK_BIAS_CORRECTION_PM25: [True, False] valid_vals_DO_AQM_DUST: [True, False] valid_vals_DO_AQM_CANOPY: [True, False] valid_vals_DO_AQM_PRODUCT: [True, False] From d16b046278e5e20cb9b4765dc62b162610400d02 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Thu, 4 May 2023 18:08:05 -0600 Subject: [PATCH 109/119] For clarity, rename VX_FCST_INPUT_DIR to VX_FCST_INPUT_BASEDIR. --- .../exregional_run_met_genensprod_or_ensemblestat.sh | 2 +- .../exregional_run_met_gridstat_or_pointstat_vx.sh | 2 +- scripts/exregional_run_met_pcpcombine.sh | 2 +- .../config.MET_ensemble_verification_only_vx.yaml | 2 +- .../verification/config.MET_verification_only_vx.yaml | 2 +- ush/config_defaults.yaml | 11 ++++++----- ush/machine/hera.yaml | 2 +- 7 files changed, 12 insertions(+), 11 deletions(-) diff --git a/scripts/exregional_run_met_genensprod_or_ensemblestat.sh b/scripts/exregional_run_met_genensprod_or_ensemblestat.sh index 3812a1aeeb..66cbfeba67 100755 --- a/scripts/exregional_run_met_genensprod_or_ensemblestat.sh +++ b/scripts/exregional_run_met_genensprod_or_ensemblestat.sh @@ -160,7 +160,7 @@ fi # #----------------------------------------------------------------------- # -vx_fcst_input_basedir=$( eval echo "${VX_FCST_INPUT_DIR}" ) +vx_fcst_input_basedir=$( eval echo "${VX_FCST_INPUT_BASEDIR}" ) vx_output_basedir=$( eval echo "${VX_OUTPUT_BASEDIR}" ) if [ "${RUN_ENVIR}" = "nco" ]; then slash_cdate_or_null="" diff --git a/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh b/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh index cc45791923..362f59246e 100755 --- a/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh +++ b/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh @@ -170,7 +170,7 @@ fi # #----------------------------------------------------------------------- # -vx_fcst_input_basedir=$( eval echo "${VX_FCST_INPUT_DIR}" ) +vx_fcst_input_basedir=$( eval echo "${VX_FCST_INPUT_BASEDIR}" ) vx_output_basedir=$( eval echo "${VX_OUTPUT_BASEDIR}" ) if [ "${RUN_ENVIR}" = "nco" ]; then if [[ ${DO_ENSEMBLE} == "TRUE" ]]; then diff --git a/scripts/exregional_run_met_pcpcombine.sh b/scripts/exregional_run_met_pcpcombine.sh index 80f68486da..217ef48292 100755 --- a/scripts/exregional_run_met_pcpcombine.sh +++ b/scripts/exregional_run_met_pcpcombine.sh @@ -134,7 +134,7 @@ fi # #----------------------------------------------------------------------- # -vx_fcst_input_basedir=$( eval echo "${VX_FCST_INPUT_DIR}" ) +vx_fcst_input_basedir=$( eval echo "${VX_FCST_INPUT_BASEDIR}" ) vx_output_basedir=$( eval echo "${VX_OUTPUT_BASEDIR}" ) if [ "${RUN_ENVIR}" = "nco" ]; then if [[ ${DO_ENSEMBLE} == "TRUE" ]]; then diff --git a/tests/WE2E/test_configs/verification/config.MET_ensemble_verification_only_vx.yaml b/tests/WE2E/test_configs/verification/config.MET_ensemble_verification_only_vx.yaml index a15e1d0273..18fa23cf35 100644 --- a/tests/WE2E/test_configs/verification/config.MET_ensemble_verification_only_vx.yaml +++ b/tests/WE2E/test_configs/verification/config.MET_ensemble_verification_only_vx.yaml @@ -60,4 +60,4 @@ global: verification: VX_FCST_MODEL_NAME: FV3_GFS_v15p2_CONUS_25km - VX_FCST_INPUT_DIR: '{{ platform.get("TEST_VX_FCST_INPUT_DIR") }}' + VX_FCST_INPUT_BASEDIR: '{{ platform.get("TEST_VX_FCST_INPUT_BASEDIR") }}' diff --git a/tests/WE2E/test_configs/verification/config.MET_verification_only_vx.yaml b/tests/WE2E/test_configs/verification/config.MET_verification_only_vx.yaml index 44fea42c25..e0c266c96b 100644 --- a/tests/WE2E/test_configs/verification/config.MET_verification_only_vx.yaml +++ b/tests/WE2E/test_configs/verification/config.MET_verification_only_vx.yaml @@ -39,5 +39,5 @@ rocoto: verification: VX_FCST_MODEL_NAME: FV3_GFS_v15p2_CONUS_25km - VX_FCST_INPUT_DIR: '{{ platform.get("TEST_VX_FCST_INPUT_DIR") }}' + VX_FCST_INPUT_BASEDIR: '{{ platform.get("TEST_VX_FCST_INPUT_BASEDIR") }}' diff --git a/ush/config_defaults.yaml b/ush/config_defaults.yaml index 477044769a..8d6bd0b9ac 100644 --- a/ush/config_defaults.yaml +++ b/ush/config_defaults.yaml @@ -2114,14 +2114,15 @@ verification: # VX_FCST_MODEL_NAME: '{{ nco.NET }}.{{ task_run_post.POST_OUTPUT_DOMAIN_NAME }}' # - # VX_FCST_INPUT_DIR: - # Directory template for the path containing forecast (but not obs) files - # that will be used as input into METplus for verification. + # VX_FCST_INPUT_BASEDIR: + # Template for top-level directory containing forecast (but not obs) + # files that will be used as input into METplus for verification. # # VX_OUTPUT_BASEDIR: - # Top-level directory in which METplus will place its output. + # Template for top-level directory in which METplus will place its + # output. # - VX_FCST_INPUT_DIR: '{% if user.RUN_ENVIR == "nco" %}$COMOUT/../..{% else %}{{ workflow.EXPTDIR }}{% endif %}' + VX_FCST_INPUT_BASEDIR: '{% if user.RUN_ENVIR == "nco" %}$COMOUT/../..{% else %}{{ workflow.EXPTDIR }}{% endif %}' VX_OUTPUT_BASEDIR: '{% if user.RUN_ENVIR == "nco" %}$COMOUT/metout{% else %}{{ workflow.EXPTDIR }}{% endif %}' # # File name and path templates used in the verification tasks. diff --git a/ush/machine/hera.yaml b/ush/machine/hera.yaml index d0c5fd5e29..1c730f79c0 100644 --- a/ush/machine/hera.yaml +++ b/ush/machine/hera.yaml @@ -28,7 +28,7 @@ platform: TEST_PREGEN_BASEDIR: /scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/FV3LAM_pregen TEST_ALT_EXTRN_MDL_SYSBASEDIR_ICS: /scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/dummy_FV3GFS_sys_dir TEST_ALT_EXTRN_MDL_SYSBASEDIR_LBCS: /scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/dummy_FV3GFS_sys_dir - TEST_VX_FCST_INPUT_DIR: '{{ "/scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/output_data/fcst_" }}{{ "ens" if (global.NUM_ENS_MEMBERS > 0) else "det" }}{{ "/{{workflow.PREDEF_GRID_NAME}}" }}{% raw %}{% endraw %}' + TEST_VX_FCST_INPUT_BASEDIR: '{{ "/scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/output_data/fcst_" }}{{ "ens" if (global.NUM_ENS_MEMBERS > 0) else "det" }}{{ "/{{workflow.PREDEF_GRID_NAME}}" }}{% raw %}{% endraw %}' FIXaer: /scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_aer FIXgsi: /scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_gsi FIXgsm: /scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am From 188ff28f6d89b376141056e8029b3e51c1ed908a Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Mon, 8 May 2023 14:53:00 -0600 Subject: [PATCH 110/119] Remove "mode=serial" attribute of metatasks since that causes a task to be launched only after the previous task has completed even when there is no dependency of the task on the previous one. --- parm/wflow/verify.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/parm/wflow/verify.yaml b/parm/wflow/verify.yaml index 86e0f0174d..c79e3c6b28 100644 --- a/parm/wflow/verify.yaml +++ b/parm/wflow/verify.yaml @@ -85,8 +85,6 @@ task_run_MET_Pb2nc_obs: task: get_obs_ndas metatask_vx_ens_member: - attrs: - mode: serial var: mem: '{% if global.DO_ENSEMBLE %}{% for m in range(1, global.NUM_ENS_MEMBERS+1) %}{{ "%03d "%m }}{%- endfor -%} {% else %}{{ "000"|string }}{% endif %}' metatask_GridStat_MRMS_mem#mem#: @@ -167,8 +165,6 @@ metatask_vx_ens_member: task: get_obs_ndas metatask_GridStat_APCP_acc: - attrs: - mode: serial var: ACCUM_HR: '{% for ah in [1, 3, 6, 24] %}{% if workflow.FCST_LEN_HRS >= ah %}{{ "%02d " % ah }}{% endif %}{% endfor %}' FCST_HR_LIST: '{% for ah in [1, 3, 6, 24] %}{% if workflow.FCST_LEN_HRS >= ah %}{% for h in range(ah, workflow.FCST_LEN_HRS+1, ah) %}{{ "%02d," % h }}{% endfor %}{% endif %} {% endfor %}' From 84f98cb300b96d414eec0bb3c8002f0a82ff68ce Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Mon, 8 May 2023 14:57:05 -0600 Subject: [PATCH 111/119] The PoinStat tasks need to depend on the Pb2nc task because METplus reads in the netcdf versions of the NDAS obs. --- parm/wflow/verify.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/parm/wflow/verify.yaml b/parm/wflow/verify.yaml index c79e3c6b28..15faf6ffa4 100644 --- a/parm/wflow/verify.yaml +++ b/parm/wflow/verify.yaml @@ -149,6 +149,9 @@ metatask_vx_ens_member: walltime: 01:00:00 dependency: and: + taskdep_pb2nc: + attrs: + task: run_MET_Pb2nc_obs or_do_post: <<: *post_files_exist or_get_obs: # Get obs complete if turned on From 67fd83a9817261233f499f3deeef1416391cd35c Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Mon, 8 May 2023 15:06:37 -0600 Subject: [PATCH 112/119] For the WE2E test MET_verification_only_vx, in the "and" clause of the dependency section of the PointStat tasks, empty out the dependencies on the post and get_obs tasks since those are not run for this test. --- .../verification/config.MET_verification_only_vx.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/WE2E/test_configs/verification/config.MET_verification_only_vx.yaml b/tests/WE2E/test_configs/verification/config.MET_verification_only_vx.yaml index e0c266c96b..57d1ca3d53 100644 --- a/tests/WE2E/test_configs/verification/config.MET_verification_only_vx.yaml +++ b/tests/WE2E/test_configs/verification/config.MET_verification_only_vx.yaml @@ -32,6 +32,9 @@ rocoto: metatask_PointStat_mem#mem#: task_run_MET_PointStat_vx_#VAR#_mem#mem#: dependency: + and: + or_do_post: + or_get_obs: metatask_GridStat_APCP_acc: metatask_vx_ens_member_acc: task_run_MET_PcpCombine_fcst_APCP#ACCUM_HR#h_mem#mem#: From 1ec8bd01677aeb7f15436ec0ededf0d315907d03 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Mon, 8 May 2023 16:29:56 -0600 Subject: [PATCH 113/119] Reintroduce the variable FCST_SUBDIR_TEMPLATE because it is needed when performing time-lagging vx. --- parm/wflow/default_workflow.yaml | 1 + parm/wflow/verify.yaml | 2 +- ...regional_run_met_genensprod_or_ensemblestat.sh | 6 ++++-- ...exregional_run_met_gridstat_or_pointstat_vx.sh | 5 +++-- scripts/exregional_run_met_pcpcombine.sh | 15 ++++++++++----- ush/config_defaults.yaml | 5 +++-- 6 files changed, 22 insertions(+), 12 deletions(-) diff --git a/parm/wflow/default_workflow.yaml b/parm/wflow/default_workflow.yaml index fa64250320..82377b3148 100644 --- a/parm/wflow/default_workflow.yaml +++ b/parm/wflow/default_workflow.yaml @@ -26,6 +26,7 @@ rocoto: RUN: '{{ nco.RUN }}' SCRIPTSdir: '{{ user.SCRIPTSdir }}' SLASH_ENSMEM_SUBDIR: '{% if global.DO_ENSEMBLE %}{{ "/mem#mem#" }}{% else %}{{ "/" }}{% endif %}' + SLASH_ENSMEM_SUBDIR_OR_NULL: '{% if global.DO_ENSEMBLE %}{{ "/mem#mem#" }}{% endif %}' USHdir: '{{ user.USHdir }}' WARMSTART_CYCLE_DIR: '{{ workflow.WARMSTART_CYCLE_DIR }}' WORKFLOW_ID: '{{ workflow.WORKFLOW_ID }}' diff --git a/parm/wflow/verify.yaml b/parm/wflow/verify.yaml index 15faf6ffa4..c656a934bd 100644 --- a/parm/wflow/verify.yaml +++ b/parm/wflow/verify.yaml @@ -12,7 +12,7 @@ default_task_verify: &default_task LOGDIR: !cycstr "&LOGDIR;" nprocs: '{{ parent.nnodes * parent.ppn }}' FHR: '{% for h in range(0, workflow.FCST_LEN_HRS+1) %}{{ " %02d" % h }}{% endfor %}' - SLASH_ENSMEM_SUBDIR: '&SLASH_ENSMEM_SUBDIR;' + SLASH_ENSMEM_SUBDIR_OR_NULL: '&SLASH_ENSMEM_SUBDIR_OR_NULL;' ENSMEM_INDX: "#mem#" join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' memory: '{% if user.MACHINE not in ["WCOSS2", "NOAACLOUD"] %}{{ "2G" }}{% endif %}' diff --git a/scripts/exregional_run_met_genensprod_or_ensemblestat.sh b/scripts/exregional_run_met_genensprod_or_ensemblestat.sh index 66cbfeba67..18a95a431a 100755 --- a/scripts/exregional_run_met_genensprod_or_ensemblestat.sh +++ b/scripts/exregional_run_met_genensprod_or_ensemblestat.sh @@ -215,14 +215,16 @@ for (( i=0; i<${NUM_ENS_MEMBERS}; i++ )); do if [ "${RUN_ENVIR}" = "nco" ]; then cdate_ensmem_subdir_or_null="" + DOT_ENSMEM_OR_NULL=".mem${mem_indx_fmt}" else cdate_ensmem_subdir_or_null="${CDATE}/mem${mem_indx_fmt}" + DOT_ENSMEM_OR_NULL="" fi if [ "${field_is_APCPgt01h}" = "TRUE" ]; then - template="${cdate_ensmem_subdir_or_null}/metprd/PcpCombine_fcst/${FCST_FN_METPROC_TEMPLATE}" + template="${cdate_ensmem_subdir_or_null:+${cdate_ensmem_subdir_or_null}/}metprd/PcpCombine_fcst/${FCST_FN_METPROC_TEMPLATE}" else - template="${CDATE}/mem${mem_indx_fmt}/postprd/${FCST_FN_TEMPLATE}" + template="${FCST_SUBDIR_TEMPLATE}/${FCST_FN_TEMPLATE}" fi if [ -z "${FCST_INPUT_FN_TEMPLATE}" ]; then diff --git a/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh b/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh index 362f59246e..62e5961f4e 100755 --- a/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh +++ b/scripts/exregional_run_met_gridstat_or_pointstat_vx.sh @@ -182,6 +182,7 @@ if [ "${RUN_ENVIR}" = "nco" ]; then else DOT_ENSMEM_OR_NULL="" fi + if [ "${grid_or_point}" = "grid" ]; then OBS_INPUT_FN_TEMPLATE="" @@ -205,7 +206,7 @@ if [ "${grid_or_point}" = "grid" ]; then esac OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_INPUT_FN_TEMPLATE} ) FCST_INPUT_DIR="${vx_fcst_input_basedir}" - FCST_INPUT_FN_TEMPLATE=$( eval echo ${CDATE}${SLASH_ENSMEM_SUBDIR}/postprd/${FCST_FN_TEMPLATE} ) + FCST_INPUT_FN_TEMPLATE=$( eval echo ${FCST_SUBDIR_TEMPLATE:+${FCST_SUBDIR_TEMPLATE}/}${FCST_FN_TEMPLATE} ) fi elif [ "${grid_or_point}" = "point" ]; then @@ -213,7 +214,7 @@ elif [ "${grid_or_point}" = "point" ]; then OBS_INPUT_DIR="${vx_output_basedir}/metprd/Pb2nc_obs" OBS_INPUT_FN_TEMPLATE=$( eval echo ${OBS_NDAS_SFCorUPA_FN_METPROC_TEMPLATE} ) FCST_INPUT_DIR="${vx_fcst_input_basedir}" - FCST_INPUT_FN_TEMPLATE=$( eval echo ${CDATE}${SLASH_ENSMEM_SUBDIR}/postprd/${FCST_FN_TEMPLATE} ) + FCST_INPUT_FN_TEMPLATE=$( eval echo ${FCST_SUBDIR_TEMPLATE:+${FCST_SUBDIR_TEMPLATE}/}${FCST_FN_TEMPLATE} ) fi diff --git a/scripts/exregional_run_met_pcpcombine.sh b/scripts/exregional_run_met_pcpcombine.sh index 217ef48292..832d63812e 100755 --- a/scripts/exregional_run_met_pcpcombine.sh +++ b/scripts/exregional_run_met_pcpcombine.sh @@ -164,10 +164,10 @@ if [ "${obs_or_fcst}" = "obs" ]; then elif [ "${obs_or_fcst}" = "fcst" ]; then - FCST_INPUT_DIR="$( eval echo ${vx_fcst_input_basedir})" - FCST_INPUT_FN_TEMPLATE=$( eval echo ${CDATE}${SLASH_ENSMEM_SUBDIR}/postprd/${FCST_FN_TEMPLATE} ) + FCST_INPUT_DIR="${vx_fcst_input_basedir}" + FCST_INPUT_FN_TEMPLATE=$( eval echo ${FCST_SUBDIR_TEMPLATE:+${FCST_SUBDIR_TEMPLATE}/}${FCST_FN_TEMPLATE} ) - OUTPUT_BASE="${VX_OUTPUT_BASEDIR}/${CDATE}/mem${ENSMEM_INDX}" + OUTPUT_BASE="${vx_output_basedir}/${CDATE}/mem${ENSMEM_INDX}" OUTPUT_DIR="${OUTPUT_BASE}/metprd/${metplus_tool_name}_fcst" OUTPUT_FN_TEMPLATE=$( eval echo ${FCST_FN_METPROC_TEMPLATE} ) STAGING_DIR="${OUTPUT_BASE}/stage/${FIELDNAME_IN_MET_FILEDIR_NAMES}" @@ -252,11 +252,16 @@ fi # #----------------------------------------------------------------------- # +uscore_ensmem_name_or_null="" +if [ "${obs_or_fcst}" = "fcst" ]; then + metplus_config_fn="_mem${ENSMEM_INDX}" +fi +# # First, set the base file names. # metplus_config_tmpl_fn="${metplus_tool_name}_${obs_or_fcst}" -metplus_config_fn="${metplus_config_tmpl_fn}_${FIELDNAME_IN_MET_FILEDIR_NAMES}" -metplus_log_fn="${metplus_config_fn}_mem${ENSMEM_INDX}_$CDATE" +metplus_config_fn="${metplus_config_tmpl_fn}_${FIELDNAME_IN_MET_FILEDIR_NAMES}${uscore_ensmem_name_or_null}" +metplus_log_fn="${metplus_config_fn}_$CDATE" # # If operating on observation files, append the cycle date to the name # of the configuration file because in this case, the output files from diff --git a/ush/config_defaults.yaml b/ush/config_defaults.yaml index 8d6bd0b9ac..90af1e7fc0 100644 --- a/ush/config_defaults.yaml +++ b/ush/config_defaults.yaml @@ -2127,8 +2127,9 @@ verification: # # File name and path templates used in the verification tasks. # - FCST_FN_TEMPLATE: '${NET}.t{init?fmt=%H?shift=-${time_lag}}z.prslev.f{lead?fmt=%HHH?shift=${time_lag}}.${POST_OUTPUT_DOMAIN_NAME}.grib2' - FCST_FN_METPROC_TEMPLATE: '${NET}.t{init?fmt=%H}z.prslev.f{lead?fmt=%HHH}.${POST_OUTPUT_DOMAIN_NAME}_a${ACCUM_HH}h.nc' + 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}}${SLASH_ENSMEM_SUBDIR_OR_NULL}/postprd{% endif %}' + FCST_FN_TEMPLATE: '${NET}.t{init?fmt=%H?shift=-${time_lag}}z{% if user.RUN_ENVIR == "nco" %}${DOT_ENSMEM_OR_NULL}{% 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" %}${DOT_ENSMEM_OR_NULL}{% endif %}.prslev.f{lead?fmt=%HHH}.${POST_OUTPUT_DOMAIN_NAME}_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 50a5b8b7807d62e969a7d76b212c74b1b1ddde12 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Tue, 9 May 2023 11:08:45 -0600 Subject: [PATCH 114/119] Remove variable SLASH_ENSMEM_SUBDIR_OR_NULL from default vx task and place it only ub tasks that need it; define SLASH_ENSMEM_SUBDIR_OR_NULL locally in a loop when we loop over members in EnsembleStat vx task. --- parm/wflow/default_workflow.yaml | 1 - parm/wflow/verify.yaml | 5 ++++- parm/wflow/verify_ensgrid.yaml | 1 - scripts/exregional_run_met_genensprod_or_ensemblestat.sh | 1 + 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/parm/wflow/default_workflow.yaml b/parm/wflow/default_workflow.yaml index 82377b3148..fa64250320 100644 --- a/parm/wflow/default_workflow.yaml +++ b/parm/wflow/default_workflow.yaml @@ -26,7 +26,6 @@ rocoto: RUN: '{{ nco.RUN }}' SCRIPTSdir: '{{ user.SCRIPTSdir }}' SLASH_ENSMEM_SUBDIR: '{% if global.DO_ENSEMBLE %}{{ "/mem#mem#" }}{% else %}{{ "/" }}{% endif %}' - SLASH_ENSMEM_SUBDIR_OR_NULL: '{% if global.DO_ENSEMBLE %}{{ "/mem#mem#" }}{% endif %}' USHdir: '{{ user.USHdir }}' WARMSTART_CYCLE_DIR: '{{ workflow.WARMSTART_CYCLE_DIR }}' WORKFLOW_ID: '{{ workflow.WORKFLOW_ID }}' diff --git a/parm/wflow/verify.yaml b/parm/wflow/verify.yaml index c656a934bd..5c716c5d0c 100644 --- a/parm/wflow/verify.yaml +++ b/parm/wflow/verify.yaml @@ -12,7 +12,6 @@ default_task_verify: &default_task LOGDIR: !cycstr "&LOGDIR;" nprocs: '{{ parent.nnodes * parent.ppn }}' FHR: '{% for h in range(0, workflow.FCST_LEN_HRS+1) %}{{ " %02d" % h }}{% endfor %}' - SLASH_ENSMEM_SUBDIR_OR_NULL: '&SLASH_ENSMEM_SUBDIR_OR_NULL;' ENSMEM_INDX: "#mem#" join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' memory: '{% if user.MACHINE not in ["WCOSS2", "NOAACLOUD"] %}{{ "2G" }}{% endif %}' @@ -100,6 +99,7 @@ metatask_vx_ens_member: ACCUM_HH: '01' MET_TOOL: 'GRIDSTAT' OBTYPE: 'MRMS' + SLASH_ENSMEM_SUBDIR_OR_NULL: '{% if global.DO_ENSEMBLE %}{{ "/mem#mem#" }}{% endif %}' walltime: 02:00:00 dependency: and: @@ -146,6 +146,7 @@ metatask_vx_ens_member: MET_TOOL: 'POINTSTAT' OBTYPE: 'NDAS' ACCUM_HH: '01' + SLASH_ENSMEM_SUBDIR_OR_NULL: '{% if global.DO_ENSEMBLE %}{{ "/mem#mem#" }}{% endif %}' walltime: 01:00:00 dependency: and: @@ -218,6 +219,7 @@ metatask_GridStat_APCP_acc: OBTYPE: CCPA OBS_DIR: '&CCPA_OBS_DIR;' MET_TOOL: 'PCPCOMBINE' + SLASH_ENSMEM_SUBDIR_OR_NULL: '{% if global.DO_ENSEMBLE %}{{ "/mem#mem#" }}{% endif %}' dependency: or_do_post: <<: *post_files_exist @@ -233,6 +235,7 @@ metatask_GridStat_APCP_acc: ACCUM_HH: '#ACCUM_HR#' MET_TOOL: 'GRIDSTAT' OBTYPE: 'CCPA' + SLASH_ENSMEM_SUBDIR_OR_NULL: '{% if global.DO_ENSEMBLE %}{{ "/mem#mem#" }}{% endif %}' walltime: 02:00:00 dependency: and: diff --git a/parm/wflow/verify_ensgrid.yaml b/parm/wflow/verify_ensgrid.yaml index f9006ca273..5f20d6039e 100644 --- a/parm/wflow/verify_ensgrid.yaml +++ b/parm/wflow/verify_ensgrid.yaml @@ -11,7 +11,6 @@ default_task_verify_ens: &default_task_verify_ens subcyc: !cycstr "@M" LOGDIR: !cycstr "&LOGDIR;" FHR: '{% for h in range(0, workflow.FCST_LEN_HRS+1) %}{{ " %02d" % h }}{% endfor %}' - SLASH_ENSMEM_SUBDIR: '&SLASH_ENSMEM_SUBDIR;' nprocs: '{{ parent.nnodes * parent.ppn }}' join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' memory: '{% if user.MACHINE not in ["WCOSS2", "NOAACLOUD"] %}{{ "2G" }}{% endif %}' diff --git a/scripts/exregional_run_met_genensprod_or_ensemblestat.sh b/scripts/exregional_run_met_genensprod_or_ensemblestat.sh index 18a95a431a..9f5ddef0b7 100755 --- a/scripts/exregional_run_met_genensprod_or_ensemblestat.sh +++ b/scripts/exregional_run_met_genensprod_or_ensemblestat.sh @@ -227,6 +227,7 @@ for (( i=0; i<${NUM_ENS_MEMBERS}; i++ )); do template="${FCST_SUBDIR_TEMPLATE}/${FCST_FN_TEMPLATE}" fi + SLASH_ENSMEM_SUBDIR_OR_NULL="/mem${mem_indx_fmt}" if [ -z "${FCST_INPUT_FN_TEMPLATE}" ]; then FCST_INPUT_FN_TEMPLATE=" $(eval echo ${template})" else From 5b46af8970721814a8c4e728be865d64175244dd Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Tue, 9 May 2023 11:11:27 -0600 Subject: [PATCH 115/119] For the MET_ensemble_verification_only_vx task, remove dependency of PointStat task on get_obs_... and do_post tasks. --- .../config.MET_ensemble_verification_only_vx.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/WE2E/test_configs/verification/config.MET_ensemble_verification_only_vx.yaml b/tests/WE2E/test_configs/verification/config.MET_ensemble_verification_only_vx.yaml index 18fa23cf35..0c545761ab 100644 --- a/tests/WE2E/test_configs/verification/config.MET_ensemble_verification_only_vx.yaml +++ b/tests/WE2E/test_configs/verification/config.MET_ensemble_verification_only_vx.yaml @@ -28,6 +28,10 @@ rocoto: metatask_PointStat_mem#mem#: task_run_MET_PointStat_vx_#VAR#_mem#mem#: dependency: + and: + or_do_post: + or_get_obs: + metatask_GridStat_APCP_acc: metatask_vx_ens_member_acc: task_run_MET_PcpCombine_fcst_APCP#ACCUM_HR#h_mem#mem#: @@ -53,7 +57,6 @@ rocoto: attrs: task: run_MET_Pb2nc_obs - global: DO_ENSEMBLE: true NUM_ENS_MEMBERS: 2 From 5114ab8b138d5015d27225106751a4b4478d2df6 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Tue, 9 May 2023 12:27:20 -0600 Subject: [PATCH 116/119] Bug fix. --- scripts/exregional_run_met_pcpcombine.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/exregional_run_met_pcpcombine.sh b/scripts/exregional_run_met_pcpcombine.sh index 832d63812e..0ff30d270a 100755 --- a/scripts/exregional_run_met_pcpcombine.sh +++ b/scripts/exregional_run_met_pcpcombine.sh @@ -254,7 +254,7 @@ fi # uscore_ensmem_name_or_null="" if [ "${obs_or_fcst}" = "fcst" ]; then - metplus_config_fn="_mem${ENSMEM_INDX}" + uscore_ensmem_name_or_null="_mem${ENSMEM_INDX}" fi # # First, set the base file names. From 46b6c1a890f07384bcd34a061d75b226ca3e553f Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Tue, 9 May 2023 12:29:41 -0600 Subject: [PATCH 117/119] Define ENSMEM_INDX only in those vx tasks that need it (i.e. those that are looped over ensemble members). --- parm/wflow/verify.yaml | 5 ++++- parm/wflow/verify_ensgrid.yaml | 1 - 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/parm/wflow/verify.yaml b/parm/wflow/verify.yaml index 5c716c5d0c..c617746c4a 100644 --- a/parm/wflow/verify.yaml +++ b/parm/wflow/verify.yaml @@ -12,7 +12,6 @@ default_task_verify: &default_task LOGDIR: !cycstr "&LOGDIR;" nprocs: '{{ parent.nnodes * parent.ppn }}' FHR: '{% for h in range(0, workflow.FCST_LEN_HRS+1) %}{{ " %02d" % h }}{% endfor %}' - ENSMEM_INDX: "#mem#" join: !cycstr '&LOGDIR;/{{ jobname }}_@Y@m@d@H&LOGEXT;' memory: '{% if user.MACHINE not in ["WCOSS2", "NOAACLOUD"] %}{{ "2G" }}{% endif %}' native: '{{ platform.SCHED_NATIVE_CMD }}' @@ -99,6 +98,7 @@ metatask_vx_ens_member: ACCUM_HH: '01' MET_TOOL: 'GRIDSTAT' OBTYPE: 'MRMS' + ENSMEM_INDX: "#mem#" SLASH_ENSMEM_SUBDIR_OR_NULL: '{% if global.DO_ENSEMBLE %}{{ "/mem#mem#" }}{% endif %}' walltime: 02:00:00 dependency: @@ -146,6 +146,7 @@ metatask_vx_ens_member: MET_TOOL: 'POINTSTAT' OBTYPE: 'NDAS' ACCUM_HH: '01' + ENSMEM_INDX: "#mem#" SLASH_ENSMEM_SUBDIR_OR_NULL: '{% if global.DO_ENSEMBLE %}{{ "/mem#mem#" }}{% endif %}' walltime: 01:00:00 dependency: @@ -219,6 +220,7 @@ metatask_GridStat_APCP_acc: OBTYPE: CCPA OBS_DIR: '&CCPA_OBS_DIR;' MET_TOOL: 'PCPCOMBINE' + ENSMEM_INDX: "#mem#" SLASH_ENSMEM_SUBDIR_OR_NULL: '{% if global.DO_ENSEMBLE %}{{ "/mem#mem#" }}{% endif %}' dependency: or_do_post: @@ -235,6 +237,7 @@ metatask_GridStat_APCP_acc: ACCUM_HH: '#ACCUM_HR#' MET_TOOL: 'GRIDSTAT' OBTYPE: 'CCPA' + ENSMEM_INDX: "#mem#" SLASH_ENSMEM_SUBDIR_OR_NULL: '{% if global.DO_ENSEMBLE %}{{ "/mem#mem#" }}{% endif %}' walltime: 02:00:00 dependency: diff --git a/parm/wflow/verify_ensgrid.yaml b/parm/wflow/verify_ensgrid.yaml index 5f20d6039e..97ca66568e 100644 --- a/parm/wflow/verify_ensgrid.yaml +++ b/parm/wflow/verify_ensgrid.yaml @@ -36,7 +36,6 @@ metatask_EnsembleStat: VAR: '#VAR#' MET_TOOL: 'ENSEMBLESTAT' OBTYPE: 'MRMS' - ENSMEM_INDX: '#mem#' dependency: metataskdep: attrs: From 0bb6aad9453a1c71f969368fa06ebe741d8bafce Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Tue, 9 May 2023 12:31:50 -0600 Subject: [PATCH 118/119] For the Pb2nc obs task, remove the (undefined) ensemble member name/number from name of METplus config and task log files. --- scripts/exregional_run_met_pb2nc_obs.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/exregional_run_met_pb2nc_obs.sh b/scripts/exregional_run_met_pb2nc_obs.sh index 123fc663a7..528e7743dc 100755 --- a/scripts/exregional_run_met_pb2nc_obs.sh +++ b/scripts/exregional_run_met_pb2nc_obs.sh @@ -217,7 +217,7 @@ metplus_config_tmpl_fn="${metplus_tool_name}_obs" # information, but we still include that info in the file name so that # the behavior in the two modes is as similar as possible. # -metplus_config_fn="${metplus_config_tmpl_fn}_mem${ENSMEM_INDX}_${CDATE}" +metplus_config_fn="${metplus_config_tmpl_fn}_${CDATE}" metplus_log_fn="${metplus_config_fn}" # # Add prefixes and suffixes (extensions) to the base file names. From cf33f00a8556e71a0a4e75c1b4b54003f71d22f9 Mon Sep 17 00:00:00 2001 From: gerard ketefian Date: Tue, 9 May 2023 16:37:42 -0600 Subject: [PATCH 119/119] Bug fixes due to inadvertently leaving out some aspects of vx in the METplus conf files (MLCAPE and P-type). --- parm/metplus/Pb2nc_obs.conf | 2 +- parm/metplus/PointStat_SFC.conf | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/parm/metplus/Pb2nc_obs.conf b/parm/metplus/Pb2nc_obs.conf index d6cdc6dbc2..263ad864ed 100644 --- a/parm/metplus/Pb2nc_obs.conf +++ b/parm/metplus/Pb2nc_obs.conf @@ -70,7 +70,7 @@ PB2NC_QUALITY_MARK_THRESH = 9 PB2NC_PB_REPORT_TYPE = 120, 220, 221, 122, 222, 223, 224, 131, 133, 233, 153, 156, 157, 188, 288, 180, 280, 181, 182, 281, 282, 183, 284, 187, 287 # Leave empty to process all -PB2NC_OBS_BUFR_VAR_LIST = PMO, ZOB, TOB, D_DPT, QOB, UOB, VOB, PWO, TOCC, D_RH, HOVI, CEILING, D_PBL, D_CAPE, MXGS, D_WIND, D_PRMSL, PRWE +PB2NC_OBS_BUFR_VAR_LIST = PMO, ZOB, TOB, D_DPT, QOB, UOB, VOB, PWO, TOCC, D_RH, HOVI, CEILING, D_PBL, D_CAPE, D_MLCAPE, MXGS, D_WIND, D_PRMSL, PRWE # Mapping of input BUFR variable names to output variables names. # The default PREPBUFR map, obs_prepbufr_map, is appended to this map. diff --git a/parm/metplus/PointStat_SFC.conf b/parm/metplus/PointStat_SFC.conf index 0dbcfde260..2d5fe0a2e4 100644 --- a/parm/metplus/PointStat_SFC.conf +++ b/parm/metplus/PointStat_SFC.conf @@ -271,6 +271,37 @@ OBS_VAR11_OPTIONS = GRIB_lvl_typ = 215; BOTH_VAR12_NAME = SPFH BOTH_VAR12_LEVELS = Z2 +FCST_VAR13_NAME = CRAIN +FCST_VAR13_LEVELS = L0 +FCST_VAR13_THRESH = >=1.0 + +OBS_VAR13_NAME = PRWE +OBS_VAR13_LEVELS = Z0 +OBS_VAR13_THRESH = >=161&&<=163 + +FCST_VAR14_NAME = CSNOW +FCST_VAR14_LEVELS = L0 +FCST_VAR14_THRESH = >=1.0 + +OBS_VAR14_NAME = PRWE +OBS_VAR14_LEVELS = Z0 +OBS_VAR14_THRESH = >=171&&<=173 + +FCST_VAR15_NAME = CFRZR +FCST_VAR15_LEVELS = L0 +FCST_VAR15_THRESH = >=1.0 + +OBS_VAR15_NAME = PRWE +OBS_VAR15_LEVELS = Z0 +OBS_VAR15_THRESH = >=164&&<=166 + +FCST_VAR16_NAME = CICEP +FCST_VAR16_LEVELS = L0 +FCST_VAR16_THRESH = >=1.0 + +OBS_VAR16_NAME = PRWE +OBS_VAR16_LEVELS = Z0 +OBS_VAR16_THRESH = >=174&&<=176 # End of [config] section and start of [dir] section. [dir]