From 987ae5bbeba38416e64ab4e99c37db336b04a864 Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Fri, 6 Dec 2024 10:55:54 -0500 Subject: [PATCH 001/195] added ctest dir with cmake to create an experment --- ci/scripts/ctests/CMakeLists.txt | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 ci/scripts/ctests/CMakeLists.txt diff --git a/ci/scripts/ctests/CMakeLists.txt b/ci/scripts/ctests/CMakeLists.txt new file mode 100644 index 00000000000..9a09b5e275e --- /dev/null +++ b/ci/scripts/ctests/CMakeLists.txt @@ -0,0 +1,27 @@ +cmake_minimum_required(VERSION 3.10) + +project(FunctionalTests) + +enable_testing() + +# Add a custom build step to run a script +add_custom_target(BuildScript + COMMAND bash ${CMAKE_SOURCE_DIR}/sorc/build_all.sh + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMENT "Running custom build script" +) + +# Add a CTest to run the generate_workflows.sh script with additional arguments +set(YAMLS "C48_ATM.yaml" CACHE STRING "YAML files separated by spaces") +set(RUNTESTS "${CMAKE_BINARY_DIR}/RUNTESTS" ) + +# Get the Git hash +execute_process( + COMMAND git rev-parse --short HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +add_test(NAME CreateExperiment + COMMAND bash ${CMAKE_SOURCE_DIR}/workflow/generate_workflows.sh -y ${YAMLS} -t ${GIT_HASH} ${RUNTESTS}) From 61fcf83520a3ef1ccc86bb1d60cc9dff0004359f Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 6 Dec 2024 11:07:35 -0600 Subject: [PATCH 002/195] added CMakeLists for creating initial case EXPDIR usint ctest --- ci/scripts/ctests/CMakeLists.txt | 10 ++-------- workflow/generate_workflows.sh | 2 +- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/ci/scripts/ctests/CMakeLists.txt b/ci/scripts/ctests/CMakeLists.txt index 9a09b5e275e..f1c08726810 100644 --- a/ci/scripts/ctests/CMakeLists.txt +++ b/ci/scripts/ctests/CMakeLists.txt @@ -4,16 +4,10 @@ project(FunctionalTests) enable_testing() -# Add a custom build step to run a script -add_custom_target(BuildScript - COMMAND bash ${CMAKE_SOURCE_DIR}/sorc/build_all.sh - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - COMMENT "Running custom build script" -) - # Add a CTest to run the generate_workflows.sh script with additional arguments set(YAMLS "C48_ATM.yaml" CACHE STRING "YAML files separated by spaces") set(RUNTESTS "${CMAKE_BINARY_DIR}/RUNTESTS" ) +set(HOMEgfs ${CMAKE_CURRENT_SOURCE_DIR}/../../..) # Get the Git hash execute_process( @@ -24,4 +18,4 @@ execute_process( ) add_test(NAME CreateExperiment - COMMAND bash ${CMAKE_SOURCE_DIR}/workflow/generate_workflows.sh -y ${YAMLS} -t ${GIT_HASH} ${RUNTESTS}) + COMMAND bash ${HOMEgfs}/workflow/generate_workflows.sh -H ${HOMEgfs} -y ${YAMLS} -t ${GIT_HASH} ${RUNTESTS}) diff --git a/workflow/generate_workflows.sh b/workflow/generate_workflows.sh index 6a4cb9910a1..10334dce2d1 100755 --- a/workflow/generate_workflows.sh +++ b/workflow/generate_workflows.sh @@ -462,7 +462,7 @@ echo "Running create_experiment.py for ${#_yaml_list[@]} cases" for _case in "${_yaml_list[@]}"; do [[ "${_verbose}" == false ]] && echo "${_case}" _pslot="${_case}${_tag}" - _create_exp_cmd="./create_experiment.py -y ../ci/cases/pr/${_case}.yaml --overwrite" + _create_exp_cmd="${HOMEgfs}/workflow/create_experiment.py -y ${HOMEgfs}/ci/cases/pr/${_case}.yaml --overwrite" if [[ "${_verbose}" == true ]]; then pslot=${_pslot} RUNTESTS=${_runtests} ${_create_exp_cmd} else From f5f65959c210e766367a8fcc3a53c756c885ee27 Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Fri, 6 Dec 2024 13:34:33 -0500 Subject: [PATCH 003/195] ready to test getting the job names --- ci/scripts/ctests/CMakeLists.txt | 18 +++++++++ ci/scripts/utils/get_job_names.py | 63 +++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100755 ci/scripts/utils/get_job_names.py diff --git a/ci/scripts/ctests/CMakeLists.txt b/ci/scripts/ctests/CMakeLists.txt index f1c08726810..9974918004c 100644 --- a/ci/scripts/ctests/CMakeLists.txt +++ b/ci/scripts/ctests/CMakeLists.txt @@ -19,3 +19,21 @@ execute_process( add_test(NAME CreateExperiment COMMAND bash ${HOMEgfs}/workflow/generate_workflows.sh -H ${HOMEgfs} -y ${YAMLS} -t ${GIT_HASH} ${RUNTESTS}) + + +execute_process( + COMMAND ${HOMEgfs}/ci/scripts/utils/ci_utils_wrapper.py get_pslot_list ${RUNTESTS} + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE PSLOT_LIST + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +execute_process( + COMMAND ${HOMEgfs}/ci/scripts/utils/git_job_names.py -xml ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE JOB_NAMES + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +# Output the job names +message(STATUS "Job names: ${JOB_NAMES}") \ No newline at end of file diff --git a/ci/scripts/utils/get_job_names.py b/ci/scripts/utils/get_job_names.py new file mode 100755 index 00000000000..69954646814 --- /dev/null +++ b/ci/scripts/utils/get_job_names.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +import os +from lxml import etree +from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter + +def valid_file_path(path): + """ + Check if the provided path is a valid file. + + Args: + path (str): The file path. + + Returns: + str: The absolute path if valid. + + Raises: + argparse.ArgumentTypeError: If the path is not a valid file. + """ + if os.path.isfile(path): + return os.path.abspath(path) + else: + raise argparse.ArgumentTypeError(f"Invalid file path: {path}") + +def input_args(): + + description = "Extracts the string between tags within tags." + parser = ArgumentParser(description=description, + formatter_class=ArgumentDefaultsHelpFormatter) + + parser.add_argument('--xmlfile', type=valid_file_path, help='The path to the XML file.') + return parser.parse_args() + +def get_cyclestr_from_jobname(xml_file): + """ + Extracts the string between tags within tags. + + Args: + xml_file (str): The path to the XML file. + + Returns: + list: A list of strings found between tags within tags. + """ + tree = etree.parse(xml_file) + root = tree.getroot() + cyclestr_list = [] + + for jobname in root.findall('.//jobname'): + cyclestr = jobname.find('cyclestr') + if cyclestr is not None: + cyclestr_list.append(cyclestr.text) + + return cyclestr_list + +# Example usage +if __name__ == "__main__": + args = input_args() + xml_file = args.xmlfile + job_names = get_cyclestr_from_jobname(xml_file) + for job_name in job_names: + if "#" not in job_name: + if job_name.endswith("_@H"): + job_name = job_name[:-3] + print(job_name) From cbe3baba8b57775c64e7c23d6d5d5d41181ecc1f Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Fri, 6 Dec 2024 14:26:02 -0500 Subject: [PATCH 004/195] move all operations of creating EXPDIR cases into configure phase --- ci/scripts/ctests/CMakeLists.txt | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/ci/scripts/ctests/CMakeLists.txt b/ci/scripts/ctests/CMakeLists.txt index 9974918004c..c88ee54670d 100644 --- a/ci/scripts/ctests/CMakeLists.txt +++ b/ci/scripts/ctests/CMakeLists.txt @@ -17,22 +17,23 @@ execute_process( OUTPUT_STRIP_TRAILING_WHITESPACE ) -add_test(NAME CreateExperiment - COMMAND bash ${HOMEgfs}/workflow/generate_workflows.sh -H ${HOMEgfs} -y ${YAMLS} -t ${GIT_HASH} ${RUNTESTS}) - +execute_process(NAME CreateExperiment + COMMAND bash ${HOMEgfs}/workflow/generate_workflows.sh -H ${HOMEgfs} -y ${YAMLS} -t ${GIT_HASH} ${RUNTESTS} + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} +) -execute_process( - COMMAND ${HOMEgfs}/ci/scripts/utils/ci_utils_wrapper.py get_pslot_list ${RUNTESTS} - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} +execute_process(NAME GetPslotList + COMMAND ${HOMEgfs}/ci/scripts/utils/ci_utils_wrapper.py get_pslot_list ${RUNTESTS} + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} OUTPUT_VARIABLE PSLOT_LIST OUTPUT_STRIP_TRAILING_WHITESPACE ) -execute_process( - COMMAND ${HOMEgfs}/ci/scripts/utils/git_job_names.py -xml ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} +execute_process(NAME GetJobNames + OUTPUT ${CMAKE_BINARY_DIR}/job_names.txt + COMMAND ${HOMEgfs}/ci/scripts/utils/git_job_names.py --xmlfile ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml OUTPUT_VARIABLE JOB_NAMES - OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) # Output the job names From 6a50e14abd797d993fe241735de9d735f3e57241 Mon Sep 17 00:00:00 2001 From: "Terry.McGuinness" Date: Fri, 6 Dec 2024 22:32:03 +0000 Subject: [PATCH 005/195] got cmake configure to work for EXPDIR --- ci/scripts/ctests/CMakeLists.txt | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/ci/scripts/ctests/CMakeLists.txt b/ci/scripts/ctests/CMakeLists.txt index c88ee54670d..dae7575e35e 100644 --- a/ci/scripts/ctests/CMakeLists.txt +++ b/ci/scripts/ctests/CMakeLists.txt @@ -7,7 +7,7 @@ enable_testing() # Add a CTest to run the generate_workflows.sh script with additional arguments set(YAMLS "C48_ATM.yaml" CACHE STRING "YAML files separated by spaces") set(RUNTESTS "${CMAKE_BINARY_DIR}/RUNTESTS" ) -set(HOMEgfs ${CMAKE_CURRENT_SOURCE_DIR}/../../..) +set(HOMEGFS ${CMAKE_CURRENT_SOURCE_DIR}/../../..) # Get the Git hash execute_process( @@ -17,24 +17,29 @@ execute_process( OUTPUT_STRIP_TRAILING_WHITESPACE ) -execute_process(NAME CreateExperiment - COMMAND bash ${HOMEgfs}/workflow/generate_workflows.sh -H ${HOMEgfs} -y ${YAMLS} -t ${GIT_HASH} ${RUNTESTS} +execute_process( + COMMAND bash ${HOMEGFS}/workflow/generate_workflows.sh -u -H ${HOMEGFS} -y ${YAMLS} -t ${GIT_HASH} ${RUNTESTS} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) -execute_process(NAME GetPslotList - COMMAND ${HOMEgfs}/ci/scripts/utils/ci_utils_wrapper.py get_pslot_list ${RUNTESTS} +execute_process( + COMMAND ${HOMEGFS}/ci/scripts/utils/ci_utils_wrapper.sh get_pslot_list ${RUNTESTS} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} OUTPUT_VARIABLE PSLOT_LIST OUTPUT_STRIP_TRAILING_WHITESPACE ) -execute_process(NAME GetJobNames - OUTPUT ${CMAKE_BINARY_DIR}/job_names.txt - COMMAND ${HOMEgfs}/ci/scripts/utils/git_job_names.py --xmlfile ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml - OUTPUT_VARIABLE JOB_NAMES +message(STATUS "pslots: ${PSLOT_LIST}") +message(STATUS "xmlfile: ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml") + +execute_process( + COMMAND ${HOMEGFS}/ci/scripts/utils/get_job_names.py --xmlfile ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml + COMMAND_ECHO STDOUT WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + ENCODING UTF-8 + OUTPUT_VARIABLE JOB_NAMES + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_FILE job_names.txt ) -# Output the job names -message(STATUS "Job names: ${JOB_NAMES}") \ No newline at end of file +message(STATUS "Job Names: \"${JOB_NAMES}\"") From bcebecadbd43c7fb4deb12b54bab9cdfcf3a318f Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Fri, 6 Dec 2024 17:38:27 -0500 Subject: [PATCH 006/195] can not do both file and variable save for execute_process --- ci/scripts/ctests/CMakeLists.txt | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/ci/scripts/ctests/CMakeLists.txt b/ci/scripts/ctests/CMakeLists.txt index dae7575e35e..763f8678fa2 100644 --- a/ci/scripts/ctests/CMakeLists.txt +++ b/ci/scripts/ctests/CMakeLists.txt @@ -7,7 +7,7 @@ enable_testing() # Add a CTest to run the generate_workflows.sh script with additional arguments set(YAMLS "C48_ATM.yaml" CACHE STRING "YAML files separated by spaces") set(RUNTESTS "${CMAKE_BINARY_DIR}/RUNTESTS" ) -set(HOMEGFS ${CMAKE_CURRENT_SOURCE_DIR}/../../..) +set(HOMEgfs ${CMAKE_CURRENT_SOURCE_DIR}/../../..) # Get the Git hash execute_process( @@ -17,29 +17,23 @@ execute_process( OUTPUT_STRIP_TRAILING_WHITESPACE ) -execute_process( - COMMAND bash ${HOMEGFS}/workflow/generate_workflows.sh -u -H ${HOMEGFS} -y ${YAMLS} -t ${GIT_HASH} ${RUNTESTS} +execute_process(NAME CreateExperiment + COMMAND bash ${HOMEgfs}/workflow/generate_workflows.sh -H ${HOMEgfs} -y ${YAMLS} -t ${GIT_HASH} ${RUNTESTS} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) -execute_process( - COMMAND ${HOMEGFS}/ci/scripts/utils/ci_utils_wrapper.sh get_pslot_list ${RUNTESTS} +execute_process(NAME GetPslotList + COMMAND ${HOMEgfs}/ci/scripts/utils/ci_utils_wrapper.py get_pslot_list ${RUNTESTS} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} OUTPUT_VARIABLE PSLOT_LIST OUTPUT_STRIP_TRAILING_WHITESPACE ) -message(STATUS "pslots: ${PSLOT_LIST}") -message(STATUS "xmlfile: ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml") - execute_process( - COMMAND ${HOMEGFS}/ci/scripts/utils/get_job_names.py --xmlfile ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml - COMMAND_ECHO STDOUT + COMMAND ${HOMEgfs}/ci/scripts/utils/get_job_names.py --xmlfile ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - ENCODING UTF-8 - OUTPUT_VARIABLE JOB_NAMES - OUTPUT_STRIP_TRAILING_WHITESPACE - OUTPUT_FILE job_names.txt + OUTPUT_FILE ${CMAKE_BINARY_DIR}/job_names.txt ) -message(STATUS "Job Names: \"${JOB_NAMES}\"") +file(READ ${CMAKE_BINARY_DIR}/job_names.txt JOB_NAMES) +message(STATUS "Job names: ${JOB_NAMES}") \ No newline at end of file From be7a8905abc9d9c57fd4c0364ac90f2fa423de76 Mon Sep 17 00:00:00 2001 From: "Terry.McGuinness" Date: Fri, 6 Dec 2024 22:52:53 +0000 Subject: [PATCH 007/195] working cmake config up to output of job names --- ci/scripts/ctests/CMakeLists.txt | 14 +++++++------- ci/scripts/utils/get_job_names.py | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/ci/scripts/ctests/CMakeLists.txt b/ci/scripts/ctests/CMakeLists.txt index 763f8678fa2..a6913a7132b 100644 --- a/ci/scripts/ctests/CMakeLists.txt +++ b/ci/scripts/ctests/CMakeLists.txt @@ -7,7 +7,7 @@ enable_testing() # Add a CTest to run the generate_workflows.sh script with additional arguments set(YAMLS "C48_ATM.yaml" CACHE STRING "YAML files separated by spaces") set(RUNTESTS "${CMAKE_BINARY_DIR}/RUNTESTS" ) -set(HOMEgfs ${CMAKE_CURRENT_SOURCE_DIR}/../../..) +set(HOMEGFS ${CMAKE_CURRENT_SOURCE_DIR}/../../..) # Get the Git hash execute_process( @@ -17,23 +17,23 @@ execute_process( OUTPUT_STRIP_TRAILING_WHITESPACE ) -execute_process(NAME CreateExperiment - COMMAND bash ${HOMEgfs}/workflow/generate_workflows.sh -H ${HOMEgfs} -y ${YAMLS} -t ${GIT_HASH} ${RUNTESTS} +execute_process( + COMMAND bash ${HOMEGFS}/workflow/generate_workflows.sh -H ${HOMEGFS} -y ${YAMLS} -t ${GIT_HASH} ${RUNTESTS} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) -execute_process(NAME GetPslotList - COMMAND ${HOMEgfs}/ci/scripts/utils/ci_utils_wrapper.py get_pslot_list ${RUNTESTS} +execute_process( + COMMAND ${HOMEGFS}/ci/scripts/utils/ci_utils_wrapper.sh get_pslot_list ${RUNTESTS} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} OUTPUT_VARIABLE PSLOT_LIST OUTPUT_STRIP_TRAILING_WHITESPACE ) execute_process( - COMMAND ${HOMEgfs}/ci/scripts/utils/get_job_names.py --xmlfile ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml + COMMAND ${HOMEGFS}/ci/scripts/utils/get_job_names.py --xmlfile ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml WORKING_DIRECTORY ${CMAKE_BINARY_DIR} OUTPUT_FILE ${CMAKE_BINARY_DIR}/job_names.txt ) file(READ ${CMAKE_BINARY_DIR}/job_names.txt JOB_NAMES) -message(STATUS "Job names: ${JOB_NAMES}") \ No newline at end of file +message(STATUS "Job names: ${JOB_NAMES}") diff --git a/ci/scripts/utils/get_job_names.py b/ci/scripts/utils/get_job_names.py index 69954646814..286324135d7 100755 --- a/ci/scripts/utils/get_job_names.py +++ b/ci/scripts/utils/get_job_names.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 import os from lxml import etree -from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter +from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter, ArgumentTypeError def valid_file_path(path): """ @@ -19,7 +19,7 @@ def valid_file_path(path): if os.path.isfile(path): return os.path.abspath(path) else: - raise argparse.ArgumentTypeError(f"Invalid file path: {path}") + raise ArgumentTypeError(f"Invalid file path: {path}") def input_args(): From 70a8183f96513f3dec187888295e503436e594c6 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 9 Dec 2024 11:42:57 -0600 Subject: [PATCH 008/195] loop over jobnames and create an experment for each --- ci/scripts/ctests/CMakeLists.txt | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/ci/scripts/ctests/CMakeLists.txt b/ci/scripts/ctests/CMakeLists.txt index a6913a7132b..3cebbba05fd 100644 --- a/ci/scripts/ctests/CMakeLists.txt +++ b/ci/scripts/ctests/CMakeLists.txt @@ -4,12 +4,14 @@ project(FunctionalTests) enable_testing() + + # Add a CTest to run the generate_workflows.sh script with additional arguments -set(YAMLS "C48_ATM.yaml" CACHE STRING "YAML files separated by spaces") +set(CASE "C48_ATM") set(RUNTESTS "${CMAKE_BINARY_DIR}/RUNTESTS" ) set(HOMEGFS ${CMAKE_CURRENT_SOURCE_DIR}/../../..) -# Get the Git hash + execute_process( COMMAND git rev-parse --short HEAD WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} @@ -18,7 +20,7 @@ execute_process( ) execute_process( - COMMAND bash ${HOMEGFS}/workflow/generate_workflows.sh -H ${HOMEGFS} -y ${YAMLS} -t ${GIT_HASH} ${RUNTESTS} + COMMAND bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${GIT_HASH} ${RUNTESTS} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) @@ -36,4 +38,13 @@ execute_process( ) file(READ ${CMAKE_BINARY_DIR}/job_names.txt JOB_NAMES) -message(STATUS "Job names: ${JOB_NAMES}") +message(STATUS "Job names:\n${JOB_NAMES}") + +foreach(JOB IN LISTS JOB_NAMES) +execute_process( + COMMAND bash -c "JOB="${JOB#"CASE"}"" + COMMAND bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${JOB} ${RUNTESTS} + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} +) +endforeach() + From 72e5a9ccc61d9cc14636670476b4223f1fa134c2 Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Mon, 9 Dec 2024 12:50:11 -0500 Subject: [PATCH 009/195] update JOB name update in loop --- ci/scripts/ctests/CMakeLists.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ci/scripts/ctests/CMakeLists.txt b/ci/scripts/ctests/CMakeLists.txt index 3cebbba05fd..39e5085f25e 100644 --- a/ci/scripts/ctests/CMakeLists.txt +++ b/ci/scripts/ctests/CMakeLists.txt @@ -41,10 +41,10 @@ file(READ ${CMAKE_BINARY_DIR}/job_names.txt JOB_NAMES) message(STATUS "Job names:\n${JOB_NAMES}") foreach(JOB IN LISTS JOB_NAMES) -execute_process( - COMMAND bash -c "JOB="${JOB#"CASE"}"" - COMMAND bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${JOB} ${RUNTESTS} - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} -) + string(REGEX REPLACE "^CASE" "" JOB_MODIFIED ${JOB}) + execute_process( + COMMAND bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${JOB_MODIFIED} ${RUNTESTS} + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + ) endforeach() From 1f1fcd6549817a437a54a2d7ffa3ece49e2ddf28 Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Mon, 9 Dec 2024 13:12:10 -0500 Subject: [PATCH 010/195] addded debug outputs --- ci/scripts/ctests/CMakeLists.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ci/scripts/ctests/CMakeLists.txt b/ci/scripts/ctests/CMakeLists.txt index 39e5085f25e..0a8a7b34485 100644 --- a/ci/scripts/ctests/CMakeLists.txt +++ b/ci/scripts/ctests/CMakeLists.txt @@ -4,14 +4,14 @@ project(FunctionalTests) enable_testing() - +set(CMAKE_VERBOSE_MAKEFILE ON) # Add a CTest to run the generate_workflows.sh script with additional arguments set(CASE "C48_ATM") set(RUNTESTS "${CMAKE_BINARY_DIR}/RUNTESTS" ) set(HOMEGFS ${CMAKE_CURRENT_SOURCE_DIR}/../../..) - +message(STATUS "Executing: git rev-parse --short HEAD") execute_process( COMMAND git rev-parse --short HEAD WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} @@ -19,11 +19,13 @@ execute_process( OUTPUT_STRIP_TRAILING_WHITESPACE ) +message(STATUS "Executing: bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${GIT_HASH} ${RUNTESTS}") execute_process( COMMAND bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${GIT_HASH} ${RUNTESTS} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) +message(STATUS "Executing: ${HOMEGFS}/ci/scripts/utils/ci_utils_wrapper.sh get_pslot_list ${RUNTESTS}") execute_process( COMMAND ${HOMEGFS}/ci/scripts/utils/ci_utils_wrapper.sh get_pslot_list ${RUNTESTS} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} @@ -31,6 +33,7 @@ execute_process( OUTPUT_STRIP_TRAILING_WHITESPACE ) +message(STATUS "Executing: ${HOMEGFS}/ci/scripts/utils/get_job_names.py --xmlfile ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml") execute_process( COMMAND ${HOMEGFS}/ci/scripts/utils/get_job_names.py --xmlfile ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml WORKING_DIRECTORY ${CMAKE_BINARY_DIR} @@ -42,6 +45,7 @@ message(STATUS "Job names:\n${JOB_NAMES}") foreach(JOB IN LISTS JOB_NAMES) string(REGEX REPLACE "^CASE" "" JOB_MODIFIED ${JOB}) + message(STATUS "Executing: bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${JOB_MODIFIED} ${RUNTESTS}") execute_process( COMMAND bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${JOB_MODIFIED} ${RUNTESTS} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} From ee27b024bfbd9e5dd8082942dac0c5331d75de23 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 9 Dec 2024 13:45:36 -0600 Subject: [PATCH 011/195] modifying plslot list to be only on a per case --- ci/scripts/ctests/CMakeLists.txt | 65 +++++++++++++++++++------------- 1 file changed, 38 insertions(+), 27 deletions(-) diff --git a/ci/scripts/ctests/CMakeLists.txt b/ci/scripts/ctests/CMakeLists.txt index 0a8a7b34485..83a4584a77f 100644 --- a/ci/scripts/ctests/CMakeLists.txt +++ b/ci/scripts/ctests/CMakeLists.txt @@ -6,10 +6,10 @@ enable_testing() set(CMAKE_VERBOSE_MAKEFILE ON) -# Add a CTest to run the generate_workflows.sh script with additional arguments -set(CASE "C48_ATM") +set(CASE_LIST "C48_ATM" "C48_S2SW" "C96_S2SWA_gefs_replay_ics") set(RUNTESTS "${CMAKE_BINARY_DIR}/RUNTESTS" ) set(HOMEGFS ${CMAKE_CURRENT_SOURCE_DIR}/../../..) +file(REMOVE_RECURSE ${RUNTESTS}) message(STATUS "Executing: git rev-parse --short HEAD") execute_process( @@ -19,36 +19,47 @@ execute_process( OUTPUT_STRIP_TRAILING_WHITESPACE ) -message(STATUS "Executing: bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${GIT_HASH} ${RUNTESTS}") -execute_process( - COMMAND bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${GIT_HASH} ${RUNTESTS} - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} -) - -message(STATUS "Executing: ${HOMEGFS}/ci/scripts/utils/ci_utils_wrapper.sh get_pslot_list ${RUNTESTS}") -execute_process( - COMMAND ${HOMEGFS}/ci/scripts/utils/ci_utils_wrapper.sh get_pslot_list ${RUNTESTS} - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - OUTPUT_VARIABLE PSLOT_LIST - OUTPUT_STRIP_TRAILING_WHITESPACE -) -message(STATUS "Executing: ${HOMEGFS}/ci/scripts/utils/get_job_names.py --xmlfile ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml") -execute_process( - COMMAND ${HOMEGFS}/ci/scripts/utils/get_job_names.py --xmlfile ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - OUTPUT_FILE ${CMAKE_BINARY_DIR}/job_names.txt -) +function(GenerateJobWorkflows CASE) -file(READ ${CMAKE_BINARY_DIR}/job_names.txt JOB_NAMES) -message(STATUS "Job names:\n${JOB_NAMES}") + message(STATUS "Executing: bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${GIT_HASH} ${RUNTESTS}") + execute_process( + COMMAND bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${GIT_HASH} ${RUNTESTS} + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + ) + + message(STATUS "Executing: ${HOMEGFS}/ci/scripts/utils/ci_utils_wrapper.sh get_pslot_list ${RUNTESTS}") + execute_process( + COMMAND ${HOMEGFS}/ci/scripts/utils/ci_utils_wrapper.sh get_pslot_list ${RUNTESTS} + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + OUTPUT_VARIABLE PSLOT_LIST + OUTPUT_STRIP_TRAILING_WHITESPACE + ) -foreach(JOB IN LISTS JOB_NAMES) - string(REGEX REPLACE "^CASE" "" JOB_MODIFIED ${JOB}) - message(STATUS "Executing: bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${JOB_MODIFIED} ${RUNTESTS}") + message(STATUS "PSLOT list: ${PSLOT_LIST}\n\n") + + message(STATUS "Executing: ${HOMEGFS}/ci/scripts/utils/get_job_names.py --xmlfile ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml") execute_process( - COMMAND bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${JOB_MODIFIED} ${RUNTESTS} + COMMAND ${HOMEGFS}/ci/scripts/utils/get_job_names.py --xmlfile ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + OUTPUT_FILE ${CMAKE_BINARY_DIR}/${CASE}_jobs.txt ) + + file(STRINGS ${CMAKE_BINARY_DIR}/${CASE}_jobs.txt JOB_NAMES) + message(STATUS "Job names:\n${JOB_NAMES}") + + foreach(JOB IN LISTS JOB_NAMES) + string(REGEX REPLACE "^${CASE}_" "" JOB_MODIFIED ${JOB}) + message(STATUS "Executing: bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${JOB_MODIFIED} ${RUNTESTS}") + execute_process( + COMMAND bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${JOB_MODIFIED} ${RUNTESTS} + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + ) + endforeach() + +endfunction() + +foreach(CASE IN LISTS CASE_LIST) + GenerateJobWorkflows(${CASE}) endforeach() From bc76ddfc1a9278d44c16d24b6508aa58b3a23331 Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Mon, 9 Dec 2024 14:50:38 -0500 Subject: [PATCH 012/195] filter pslot list for only relevent cases --- ci/scripts/ctests/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ci/scripts/ctests/CMakeLists.txt b/ci/scripts/ctests/CMakeLists.txt index 83a4584a77f..1fb8b85b905 100644 --- a/ci/scripts/ctests/CMakeLists.txt +++ b/ci/scripts/ctests/CMakeLists.txt @@ -36,7 +36,8 @@ function(GenerateJobWorkflows CASE) OUTPUT_STRIP_TRAILING_WHITESPACE ) - message(STATUS "PSLOT list: ${PSLOT_LIST}\n\n") + string(REGEX MATCHALL "${CASE}_[^;]+" PSLOT_LIST "${PSLOT_LIST}") + message(STATUS "Filtered PSLOT list: ${PSLOT_LIST}\n\n") message(STATUS "Executing: ${HOMEGFS}/ci/scripts/utils/get_job_names.py --xmlfile ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml") execute_process( From 38838a67407acde3f8e9d4589868432bea5e9ebe Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Mon, 9 Dec 2024 15:13:09 -0500 Subject: [PATCH 013/195] refining get_job_names --- ci/scripts/utils/get_job_names.py | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/ci/scripts/utils/get_job_names.py b/ci/scripts/utils/get_job_names.py index 286324135d7..eb1c7a7fee0 100755 --- a/ci/scripts/utils/get_job_names.py +++ b/ci/scripts/utils/get_job_names.py @@ -22,40 +22,39 @@ def valid_file_path(path): raise ArgumentTypeError(f"Invalid file path: {path}") def input_args(): - - description = "Extracts the string between tags within tags." + description = "Extracts the string between and tags." parser = ArgumentParser(description=description, formatter_class=ArgumentDefaultsHelpFormatter) parser.add_argument('--xmlfile', type=valid_file_path, help='The path to the XML file.') return parser.parse_args() -def get_cyclestr_from_jobname(xml_file): +def get_names_from_tags(xml_file): """ - Extracts the string between tags within tags. + Extracts the string between and tags. Args: xml_file (str): The path to the XML file. Returns: - list: A list of strings found between tags within tags. + list: A list of strings found between and tags. """ tree = etree.parse(xml_file) root = tree.getroot() - cyclestr_list = [] + name_list = [] - for jobname in root.findall('.//jobname'): - cyclestr = jobname.find('cyclestr') - if cyclestr is not None: - cyclestr_list.append(cyclestr.text) + for tag in ['task name', 'metatask name']: + for element in root.findall(f'.//{tag.replace(" ", "")}'): + if element is not None: + name_list.append(element.text) - return cyclestr_list + return name_list # Example usage if __name__ == "__main__": args = input_args() xml_file = args.xmlfile - job_names = get_cyclestr_from_jobname(xml_file) + job_names = get_names_from_tags(xml_file) for job_name in job_names: if "#" not in job_name: if job_name.endswith("_@H"): From d18ad01a9d9b1d1f83ac60115c65fb46ed8dbb50 Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Mon, 9 Dec 2024 15:28:57 -0500 Subject: [PATCH 014/195] modigied get_jobs_names to task and metatask names --- ci/scripts/utils/get_job_names.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/ci/scripts/utils/get_job_names.py b/ci/scripts/utils/get_job_names.py index eb1c7a7fee0..cb2f2c18add 100755 --- a/ci/scripts/utils/get_job_names.py +++ b/ci/scripts/utils/get_job_names.py @@ -22,31 +22,32 @@ def valid_file_path(path): raise ArgumentTypeError(f"Invalid file path: {path}") def input_args(): - description = "Extracts the string between and tags." + description = "Extracts the values of and tags." parser = ArgumentParser(description=description, formatter_class=ArgumentDefaultsHelpFormatter) - parser.add_argument('--xmlfile', type=valid_file_path, help='The path to the XML file.') + parser.add_argument('--xml', type=valid_file_path, help='The path to the XML file.') return parser.parse_args() def get_names_from_tags(xml_file): """ - Extracts the string between and tags. + Extracts the values of and tags. Args: xml_file (str): The path to the XML file. Returns: - list: A list of strings found between and tags. + list: A list of values found in and tags. """ tree = etree.parse(xml_file) root = tree.getroot() name_list = [] - for tag in ['task name', 'metatask name']: - for element in root.findall(f'.//{tag.replace(" ", "")}'): - if element is not None: - name_list.append(element.text) + for tag in ['task', 'metatask']: + for element in root.findall(f'.//{tag}'): + name = element.get('name') + if name is not None: + name_list.append(name) return name_list From ef0e0667794d4d81a1ca306ea8721f599fd79810 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 9 Dec 2024 15:04:47 -0600 Subject: [PATCH 015/195] got better jobname parcer working --- ci/scripts/ctests/CMakeLists.txt | 8 ++++---- ci/scripts/utils/get_job_names.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ci/scripts/ctests/CMakeLists.txt b/ci/scripts/ctests/CMakeLists.txt index 1fb8b85b905..aa7abe45b10 100644 --- a/ci/scripts/ctests/CMakeLists.txt +++ b/ci/scripts/ctests/CMakeLists.txt @@ -39,9 +39,9 @@ function(GenerateJobWorkflows CASE) string(REGEX MATCHALL "${CASE}_[^;]+" PSLOT_LIST "${PSLOT_LIST}") message(STATUS "Filtered PSLOT list: ${PSLOT_LIST}\n\n") - message(STATUS "Executing: ${HOMEGFS}/ci/scripts/utils/get_job_names.py --xmlfile ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml") + message(STATUS "Executing: ${HOMEGFS}/ci/scripts/utils/get_job_names.py --xml ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml") execute_process( - COMMAND ${HOMEGFS}/ci/scripts/utils/get_job_names.py --xmlfile ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml + COMMAND ${HOMEGFS}/ci/scripts/utils/get_job_names.py --xml ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml WORKING_DIRECTORY ${CMAKE_BINARY_DIR} OUTPUT_FILE ${CMAKE_BINARY_DIR}/${CASE}_jobs.txt ) @@ -51,9 +51,9 @@ function(GenerateJobWorkflows CASE) foreach(JOB IN LISTS JOB_NAMES) string(REGEX REPLACE "^${CASE}_" "" JOB_MODIFIED ${JOB}) - message(STATUS "Executing: bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${JOB_MODIFIED} ${RUNTESTS}") + message(STATUS "Executing: bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${JOB_MODIFIED} ${RUNTESTS}") execute_process( - COMMAND bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${JOB_MODIFIED} ${RUNTESTS} + COMMAND bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${JOB_MODIFIED}_${GIT_HASH} ${RUNTESTS} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) endforeach() diff --git a/ci/scripts/utils/get_job_names.py b/ci/scripts/utils/get_job_names.py index cb2f2c18add..eb7ca532071 100755 --- a/ci/scripts/utils/get_job_names.py +++ b/ci/scripts/utils/get_job_names.py @@ -54,7 +54,7 @@ def get_names_from_tags(xml_file): # Example usage if __name__ == "__main__": args = input_args() - xml_file = args.xmlfile + xml_file = args.xml job_names = get_names_from_tags(xml_file) for job_name in job_names: if "#" not in job_name: From f813a1b5e78acaf996eeeb79c8ff21457d8349d7 Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Tue, 10 Dec 2024 16:01:42 -0500 Subject: [PATCH 016/195] replaced generate_workflows with create_experment --- ci/scripts/ctests/CMakeLists.txt | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/ci/scripts/ctests/CMakeLists.txt b/ci/scripts/ctests/CMakeLists.txt index aa7abe45b10..64cdae616d2 100644 --- a/ci/scripts/ctests/CMakeLists.txt +++ b/ci/scripts/ctests/CMakeLists.txt @@ -6,11 +6,14 @@ enable_testing() set(CMAKE_VERBOSE_MAKEFILE ON) -set(CASE_LIST "C48_ATM" "C48_S2SW" "C96_S2SWA_gefs_replay_ics") +set(CASE_LIST "C48_ATM" "C48_S2SW") set(RUNTESTS "${CMAKE_BINARY_DIR}/RUNTESTS" ) -set(HOMEGFS ${CMAKE_CURRENT_SOURCE_DIR}/../../..) +set(HOMEgfs ${CMAKE_CURRENT_SOURCE_DIR}/../../..) +set(CASE_PATH ${HOMEgfs}/ci/cases/pr) file(REMOVE_RECURSE ${RUNTESTS}) +set(CREATE_EXPERIMENT_CMD "${HOMEgfs}/workflow/create_experiment.py") + message(STATUS "Executing: git rev-parse --short HEAD") execute_process( COMMAND git rev-parse --short HEAD @@ -19,12 +22,11 @@ execute_process( OUTPUT_STRIP_TRAILING_WHITESPACE ) +function(GenerateExperiments CASE) -function(GenerateJobWorkflows CASE) - - message(STATUS "Executing: bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${GIT_HASH} ${RUNTESTS}") execute_process( - COMMAND bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${GIT_HASH} ${RUNTESTS} + COMMAND ${CREATE_EXPERIMENT_CMD} -yaml ${CASE_PATH}/${CASE}.yaml + ENVIRONMENT "pslot=${CASE}_${GIT_HASH}" "RUNTESTS=${RUNTESTS}" WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) @@ -41,7 +43,7 @@ function(GenerateJobWorkflows CASE) message(STATUS "Executing: ${HOMEGFS}/ci/scripts/utils/get_job_names.py --xml ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml") execute_process( - COMMAND ${HOMEGFS}/ci/scripts/utils/get_job_names.py --xml ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml + COMMAND ${HOMEgfs}/ci/scripts/utils/get_job_names.py --xml ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml WORKING_DIRECTORY ${CMAKE_BINARY_DIR} OUTPUT_FILE ${CMAKE_BINARY_DIR}/${CASE}_jobs.txt ) @@ -51,9 +53,10 @@ function(GenerateJobWorkflows CASE) foreach(JOB IN LISTS JOB_NAMES) string(REGEX REPLACE "^${CASE}_" "" JOB_MODIFIED ${JOB}) - message(STATUS "Executing: bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${JOB_MODIFIED} ${RUNTESTS}") + message(STATUS "Executing: ${CREATE_EXPERIMENT_CMD} -yaml ${CASE_PATH}/${CASE}.yaml") execute_process( - COMMAND bash ${HOMEGFS}/workflow/generate_workflows.sh -V -H ${HOMEGFS} -y ${CASE}.yaml -t ${JOB_MODIFIED}_${GIT_HASH} ${RUNTESTS} + COMMAND ${CREATE_EXPERIMENT_CMD} -yaml ${CASE_PATH}/${CASE}.yaml + ENVIRONMENT "pslot=${CASE}_${JOB_MODIFIED}_${GIT_HASH}" "RUNTESTS=${RUNTESTS}" WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) endforeach() @@ -61,6 +64,5 @@ function(GenerateJobWorkflows CASE) endfunction() foreach(CASE IN LISTS CASE_LIST) - GenerateJobWorkflows(${CASE}) + GenerateExperiments(${CASE}) endforeach() - From 8238228ef4c4e338c2d75a18e2454c827ca82451 Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Tue, 10 Dec 2024 16:24:04 -0500 Subject: [PATCH 017/195] removed non-existing ENVIRONMENT setting to consolated COMMAND line --- ci/scripts/ctests/CMakeLists.txt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ci/scripts/ctests/CMakeLists.txt b/ci/scripts/ctests/CMakeLists.txt index 64cdae616d2..b1289accbf5 100644 --- a/ci/scripts/ctests/CMakeLists.txt +++ b/ci/scripts/ctests/CMakeLists.txt @@ -25,8 +25,7 @@ execute_process( function(GenerateExperiments CASE) execute_process( - COMMAND ${CREATE_EXPERIMENT_CMD} -yaml ${CASE_PATH}/${CASE}.yaml - ENVIRONMENT "pslot=${CASE}_${GIT_HASH}" "RUNTESTS=${RUNTESTS}" + COMMAND bash -c "pslot=${CASE}_${GIT_HASH}; RUNTESTS=${RUNTESTS}; ${CREATE_EXPERIMENT_CMD} -yaml ${CASE_PATH}/${CASE}.yaml" WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) @@ -55,8 +54,7 @@ function(GenerateExperiments CASE) string(REGEX REPLACE "^${CASE}_" "" JOB_MODIFIED ${JOB}) message(STATUS "Executing: ${CREATE_EXPERIMENT_CMD} -yaml ${CASE_PATH}/${CASE}.yaml") execute_process( - COMMAND ${CREATE_EXPERIMENT_CMD} -yaml ${CASE_PATH}/${CASE}.yaml - ENVIRONMENT "pslot=${CASE}_${JOB_MODIFIED}_${GIT_HASH}" "RUNTESTS=${RUNTESTS}" + COMMAND bash -c "pslot=${CASE}_${JOB_MODIFIED}_${GIT_HASH}; RUNTESTS=${RUNTESTS}; ${CREATE_EXPERIMENT_CMD} -yaml ${CASE_PATH}/${CASE}.yaml" WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) endforeach() From bf579eea95f64c0e2a3062cd57059b95ef8bfb84 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 10 Dec 2024 15:39:30 -0600 Subject: [PATCH 018/195] got cmake script to use creat_experiment --- ci/scripts/ctests/CMakeLists.txt | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/ci/scripts/ctests/CMakeLists.txt b/ci/scripts/ctests/CMakeLists.txt index b1289accbf5..4e308d203be 100644 --- a/ci/scripts/ctests/CMakeLists.txt +++ b/ci/scripts/ctests/CMakeLists.txt @@ -7,7 +7,8 @@ enable_testing() set(CMAKE_VERBOSE_MAKEFILE ON) set(CASE_LIST "C48_ATM" "C48_S2SW") -set(RUNTESTS "${CMAKE_BINARY_DIR}/RUNTESTS" ) +set(ENV{RUNTESTS} "${CMAKE_BINARY_DIR}/RUNTESTS") +set(RUNTESTS "${CMAKE_BINARY_DIR}/RUNTESTS") set(HOMEgfs ${CMAKE_CURRENT_SOURCE_DIR}/../../..) set(CASE_PATH ${HOMEgfs}/ci/cases/pr) file(REMOVE_RECURSE ${RUNTESTS}) @@ -25,13 +26,13 @@ execute_process( function(GenerateExperiments CASE) execute_process( - COMMAND bash -c "pslot=${CASE}_${GIT_HASH}; RUNTESTS=${RUNTESTS}; ${CREATE_EXPERIMENT_CMD} -yaml ${CASE_PATH}/${CASE}.yaml" + COMMAND bash -c "export pslot=${CASE}_${GIT_HASH}; ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml" WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) - message(STATUS "Executing: ${HOMEGFS}/ci/scripts/utils/ci_utils_wrapper.sh get_pslot_list ${RUNTESTS}") + message(STATUS "Executing: ${HOMEgfs}/ci/scripts/utils/ci_utils_wrapper.sh get_pslot_list ${RUNTESTS}") execute_process( - COMMAND ${HOMEGFS}/ci/scripts/utils/ci_utils_wrapper.sh get_pslot_list ${RUNTESTS} + COMMAND ${HOMEgfs}/ci/scripts/utils/ci_utils_wrapper.sh get_pslot_list ${RUNTESTS} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} OUTPUT_VARIABLE PSLOT_LIST OUTPUT_STRIP_TRAILING_WHITESPACE @@ -40,7 +41,7 @@ function(GenerateExperiments CASE) string(REGEX MATCHALL "${CASE}_[^;]+" PSLOT_LIST "${PSLOT_LIST}") message(STATUS "Filtered PSLOT list: ${PSLOT_LIST}\n\n") - message(STATUS "Executing: ${HOMEGFS}/ci/scripts/utils/get_job_names.py --xml ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml") + message(STATUS "Executing: ${HOMEgfs}/ci/scripts/utils/get_job_names.py --xml ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml") execute_process( COMMAND ${HOMEgfs}/ci/scripts/utils/get_job_names.py --xml ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml WORKING_DIRECTORY ${CMAKE_BINARY_DIR} @@ -52,9 +53,9 @@ function(GenerateExperiments CASE) foreach(JOB IN LISTS JOB_NAMES) string(REGEX REPLACE "^${CASE}_" "" JOB_MODIFIED ${JOB}) - message(STATUS "Executing: ${CREATE_EXPERIMENT_CMD} -yaml ${CASE_PATH}/${CASE}.yaml") + message(STATUS "Executing: ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml") execute_process( - COMMAND bash -c "pslot=${CASE}_${JOB_MODIFIED}_${GIT_HASH}; RUNTESTS=${RUNTESTS}; ${CREATE_EXPERIMENT_CMD} -yaml ${CASE_PATH}/${CASE}.yaml" + COMMAND bash -c "export pslot=${CASE}_${JOB_MODIFIED}_${GIT_HASH}; ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml" WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) endforeach() From 374927f56a6fb9f3065a16caa4d8f2a2afc188e6 Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Thu, 12 Dec 2024 14:28:09 -0500 Subject: [PATCH 019/195] just getting started with addeding a ctest --- ci/scripts/ctests/CMakeLists.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ci/scripts/ctests/CMakeLists.txt b/ci/scripts/ctests/CMakeLists.txt index 4e308d203be..ce9dd4d69ea 100644 --- a/ci/scripts/ctests/CMakeLists.txt +++ b/ci/scripts/ctests/CMakeLists.txt @@ -62,6 +62,13 @@ function(GenerateExperiments CASE) endfunction() +function(AddRocotoBootTest CASE_NAME JOB_NAME) + add_test(NAME jjob_test_${CASE_NAME}_${JOB_NAME} + COMMAND bash -c "rocotoboot -w ${RUNTESTS}/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.xml -d ${RUNTESTS}/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.db -c ${JOB_NAME}") +endfunction() + foreach(CASE IN LISTS CASE_LIST) GenerateExperiments(${CASE}) + # Example usage of AddRocotoBootTest function + # AddRocotoBootTest(${CASE} "example_job_name") endforeach() From 8b4fc4f764130bc58a30ba1e8675c007fb01c99e Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Thu, 12 Dec 2024 14:43:22 -0500 Subject: [PATCH 020/195] add in test for configured project --- ci/scripts/ctests/CMakeLists.txt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ci/scripts/ctests/CMakeLists.txt b/ci/scripts/ctests/CMakeLists.txt index ce9dd4d69ea..26515b4cfd3 100644 --- a/ci/scripts/ctests/CMakeLists.txt +++ b/ci/scripts/ctests/CMakeLists.txt @@ -6,7 +6,8 @@ enable_testing() set(CMAKE_VERBOSE_MAKEFILE ON) -set(CASE_LIST "C48_ATM" "C48_S2SW") +#set(CASE_LIST "C48_ATM" "C48_S2SW") +set(CASE_LIST "C48_ATM") set(ENV{RUNTESTS} "${CMAKE_BINARY_DIR}/RUNTESTS") set(RUNTESTS "${CMAKE_BINARY_DIR}/RUNTESTS") set(HOMEgfs ${CMAKE_CURRENT_SOURCE_DIR}/../../..) @@ -67,8 +68,8 @@ function(AddRocotoBootTest CASE_NAME JOB_NAME) COMMAND bash -c "rocotoboot -w ${RUNTESTS}/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.xml -d ${RUNTESTS}/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.db -c ${JOB_NAME}") endfunction() + foreach(CASE IN LISTS CASE_LIST) - GenerateExperiments(${CASE}) - # Example usage of AddRocotoBootTest function - # AddRocotoBootTest(${CASE} "example_job_name") + #GenerateExperiments(${CASE}) + AddRocotoBootTest(${CASE} "gfs_fcst" ) endforeach() From ce37d86edc1a0bb70efa3d92f487b24592719917 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Thu, 12 Dec 2024 14:53:35 -0600 Subject: [PATCH 021/195] added ctest and testing --- ci/scripts/ctests/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/scripts/ctests/CMakeLists.txt b/ci/scripts/ctests/CMakeLists.txt index 26515b4cfd3..89ccc93e44f 100644 --- a/ci/scripts/ctests/CMakeLists.txt +++ b/ci/scripts/ctests/CMakeLists.txt @@ -12,7 +12,7 @@ set(ENV{RUNTESTS} "${CMAKE_BINARY_DIR}/RUNTESTS") set(RUNTESTS "${CMAKE_BINARY_DIR}/RUNTESTS") set(HOMEgfs ${CMAKE_CURRENT_SOURCE_DIR}/../../..) set(CASE_PATH ${HOMEgfs}/ci/cases/pr) -file(REMOVE_RECURSE ${RUNTESTS}) +#file(REMOVE_RECURSE ${RUNTESTS}) set(CREATE_EXPERIMENT_CMD "${HOMEgfs}/workflow/create_experiment.py") @@ -65,7 +65,7 @@ endfunction() function(AddRocotoBootTest CASE_NAME JOB_NAME) add_test(NAME jjob_test_${CASE_NAME}_${JOB_NAME} - COMMAND bash -c "rocotoboot -w ${RUNTESTS}/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.xml -d ${RUNTESTS}/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.db -c ${JOB_NAME}") + COMMAND bash -c "rocotoboot -w ${RUNTESTS}/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.xml -d ${RUNTESTS}/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.db -t ${JOB_NAME}") endfunction() From bb12cda8165177efda34116ca9bd309c6ffc8c61 Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Fri, 13 Dec 2024 16:53:18 -0500 Subject: [PATCH 022/195] moved ctests dir to top HOMEgfs/ci/ctests with its own scripts dir --- ci/{scripts => }/ctests/CMakeLists.txt | 23 ++++++++----------- .../utils => ctests/scripts}/get_job_names.py | 0 2 files changed, 9 insertions(+), 14 deletions(-) rename ci/{scripts => }/ctests/CMakeLists.txt (67%) rename ci/{scripts/utils => ctests/scripts}/get_job_names.py (100%) diff --git a/ci/scripts/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt similarity index 67% rename from ci/scripts/ctests/CMakeLists.txt rename to ci/ctests/CMakeLists.txt index 89ccc93e44f..41484222bef 100644 --- a/ci/scripts/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -9,10 +9,9 @@ set(CMAKE_VERBOSE_MAKEFILE ON) #set(CASE_LIST "C48_ATM" "C48_S2SW") set(CASE_LIST "C48_ATM") set(ENV{RUNTESTS} "${CMAKE_BINARY_DIR}/RUNTESTS") -set(RUNTESTS "${CMAKE_BINARY_DIR}/RUNTESTS") -set(HOMEgfs ${CMAKE_CURRENT_SOURCE_DIR}/../../..) +set(HOMEgfs ${CMAKE_CURRENT_SOURCE_DIR}/../..) set(CASE_PATH ${HOMEgfs}/ci/cases/pr) -#file(REMOVE_RECURSE ${RUNTESTS}) +file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/RUNTESTS) set(CREATE_EXPERIMENT_CMD "${HOMEgfs}/workflow/create_experiment.py") @@ -27,14 +26,12 @@ execute_process( function(GenerateExperiments CASE) execute_process( - COMMAND bash -c "export pslot=${CASE}_${GIT_HASH}; ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml" - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMAND bash -c "export pslot=${CASE}_${GIT_HASH}; ${CREATE_EXPERIMENT_CMD} --overwrite --yaml ${CASE_PATH}/${CASE}.yaml" ) - message(STATUS "Executing: ${HOMEgfs}/ci/scripts/utils/ci_utils_wrapper.sh get_pslot_list ${RUNTESTS}") + message(STATUS "Executing: ${HOMEgfs}/ci/scripts/utils/ci_utils_wrapper.sh get_pslot_list RUNTESTS") execute_process( - COMMAND ${HOMEgfs}/ci/scripts/utils/ci_utils_wrapper.sh get_pslot_list ${RUNTESTS} - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMAND ${HOMEgfs}/ci/scripts/utils/ci_utils_wrapper.sh get_pslot_list RUNTESTS OUTPUT_VARIABLE PSLOT_LIST OUTPUT_STRIP_TRAILING_WHITESPACE ) @@ -42,10 +39,9 @@ function(GenerateExperiments CASE) string(REGEX MATCHALL "${CASE}_[^;]+" PSLOT_LIST "${PSLOT_LIST}") message(STATUS "Filtered PSLOT list: ${PSLOT_LIST}\n\n") - message(STATUS "Executing: ${HOMEgfs}/ci/scripts/utils/get_job_names.py --xml ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml") + message(STATUS "Executing: ${HOMEgfs}/ci/ctests/scripts/get_job_names.py --xml RUNTESTS/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml") execute_process( - COMMAND ${HOMEgfs}/ci/scripts/utils/get_job_names.py --xml ${RUNTESTS}/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMAND ${HOMEgfs}/ci/ctests/scripts/get_job_names.py --xml RUNTESTS/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml OUTPUT_FILE ${CMAKE_BINARY_DIR}/${CASE}_jobs.txt ) @@ -57,7 +53,6 @@ function(GenerateExperiments CASE) message(STATUS "Executing: ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml") execute_process( COMMAND bash -c "export pslot=${CASE}_${JOB_MODIFIED}_${GIT_HASH}; ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml" - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) endforeach() @@ -65,11 +60,11 @@ endfunction() function(AddRocotoBootTest CASE_NAME JOB_NAME) add_test(NAME jjob_test_${CASE_NAME}_${JOB_NAME} - COMMAND bash -c "rocotoboot -w ${RUNTESTS}/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.xml -d ${RUNTESTS}/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.db -t ${JOB_NAME}") + COMMAND bash -c "rocotoboot -w RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.xml -d RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.db -t ${JOB_NAME}") endfunction() foreach(CASE IN LISTS CASE_LIST) - #GenerateExperiments(${CASE}) + GenerateExperiments(${CASE}) AddRocotoBootTest(${CASE} "gfs_fcst" ) endforeach() diff --git a/ci/scripts/utils/get_job_names.py b/ci/ctests/scripts/get_job_names.py similarity index 100% rename from ci/scripts/utils/get_job_names.py rename to ci/ctests/scripts/get_job_names.py From f78181c49bb7439b19d4ed78f239ab598e73379f Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Fri, 13 Dec 2024 18:38:11 -0500 Subject: [PATCH 023/195] added all jobs for tests for each case --- ci/ctests/CMakeLists.txt | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 41484222bef..7ef9e2ce826 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -6,8 +6,7 @@ enable_testing() set(CMAKE_VERBOSE_MAKEFILE ON) -#set(CASE_LIST "C48_ATM" "C48_S2SW") -set(CASE_LIST "C48_ATM") +set(CASE_LIST "C48_ATM" "C48_S2SW") set(ENV{RUNTESTS} "${CMAKE_BINARY_DIR}/RUNTESTS") set(HOMEgfs ${CMAKE_CURRENT_SOURCE_DIR}/../..) set(CASE_PATH ${HOMEgfs}/ci/cases/pr) @@ -23,6 +22,10 @@ execute_process( OUTPUT_STRIP_TRAILING_WHITESPACE ) +execute_process( + COMMAND ln -s ${HOMEgfs} global-workflow +) + function(GenerateExperiments CASE) execute_process( @@ -63,8 +66,14 @@ function(AddRocotoBootTest CASE_NAME JOB_NAME) COMMAND bash -c "rocotoboot -w RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.xml -d RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.db -t ${JOB_NAME}") endfunction() +add_test( NAME BuildAll + COMMAND bash -c "cd ${HOMEgfs}/sorc; ./build_all.sh" +) foreach(CASE IN LISTS CASE_LIST) GenerateExperiments(${CASE}) - AddRocotoBootTest(${CASE} "gfs_fcst" ) + file(STRINGS ${CMAKE_BINARY_DIR}/${CASE}_jobs.txt JOB_NAMES) + foreach(JOB IN LISTS JOB_NAMES) + AddRocotoBootTest(${CASE} ${JOB}) + endforeach() endforeach() From 46cddb7973abec6331ccea6d16de76ef2a612038 Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Fri, 13 Dec 2024 19:04:33 -0500 Subject: [PATCH 024/195] added data stagging dependances and started it as a stub script --- ci/ctests/CMakeLists.txt | 3 +++ ci/ctests/scripts/starge_data.sh | 7 +++++++ 2 files changed, 10 insertions(+) create mode 100644 ci/ctests/scripts/starge_data.sh diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 7ef9e2ce826..68875991720 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -62,8 +62,11 @@ function(GenerateExperiments CASE) endfunction() function(AddRocotoBootTest CASE_NAME JOB_NAME) + add_test(NAME jjob_test_${CASE_NAME}_${JOB_NAME}_StageData + COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/stage_data.sh ${CASE_NAME} ${JOB_NAME} ${GIT_HASH}") add_test(NAME jjob_test_${CASE_NAME}_${JOB_NAME} COMMAND bash -c "rocotoboot -w RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.xml -d RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.db -t ${JOB_NAME}") + set_tests_properties(jjob_test_${CASE_NAME}_${JOB_NAME} PROPERTIES DEPENDS jjob_test_${CASE_NAME}_${JOB_NAME}_StageData) endfunction() add_test( NAME BuildAll diff --git a/ci/ctests/scripts/starge_data.sh b/ci/ctests/scripts/starge_data.sh new file mode 100644 index 00000000000..4e943793d14 --- /dev/null +++ b/ci/ctests/scripts/starge_data.sh @@ -0,0 +1,7 @@ +#!/bin/bash +set -eux +######################################################################## +# This script is used to stage data for the tests. For now it is a stub. +######################################################################## + +exit 0 \ No newline at end of file From 434f869b830b30e4692a8e49ffb089219fdc3d14 Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Wed, 18 Dec 2024 00:22:40 -0500 Subject: [PATCH 025/195] added driver for creating ctests from yaml files --- ci/ctests/C48_ATM.yaml | 9 +++++ ci/ctests/create_functional_ctests.py | 52 +++++++++++++++++++++++++++ ci/platforms/config.hera | 2 ++ ci/platforms/config.orion | 1 + 4 files changed, 64 insertions(+) create mode 100644 ci/ctests/C48_ATM.yaml create mode 100755 ci/ctests/create_functional_ctests.py diff --git a/ci/ctests/C48_ATM.yaml b/ci/ctests/C48_ATM.yaml new file mode 100644 index 00000000000..4c3122a1f78 --- /dev/null +++ b/ci/ctests/C48_ATM.yaml @@ -0,0 +1,9 @@ +fcst_gfs: + staged_datapath: {{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ testcase }}/fcst_gfs + input_files: use_jinja_template_fcst + output_files: use_jinja_template_fcst + +gfs_atmos_pro: + staged_datapath: {{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ testcase }}/gfs_atmos_prod + input_files: use_jinja_template_gfs_atmos_pro + output_files: use_jinja_template_gfs_atmos_pro diff --git a/ci/ctests/create_functional_ctests.py b/ci/ctests/create_functional_ctests.py new file mode 100755 index 00000000000..d42d9631439 --- /dev/null +++ b/ci/ctests/create_functional_ctests.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 + +import os, sys +_here = os.path.dirname(__file__) +_top = os.path.abspath(os.path.join(os.path.abspath(_here), '../..')) +sys.path.insert(0, _top) + +from argparse import ArgumentParser +from pathlib import Path +from wxflow import Configuration, AttrDict, parse_j2yaml, Logger, logit +from workflow.hosts import Host + +def parse_args(): + """ + Parse command line arguments. + + Returns + ------- + argparse.Namespace + The parsed command line arguments. + """ + + description = """Arguments for creating and updating error log files + """ + parser = ArgumentParser(description=description) + + parser.add_argument('--yaml', help='path to file for creating functional tests per case', required=True, type=Path) + return parser.parse_args() + +if __name__ == '__main__': + + # Put HOMEgfs into the test configuration + args = parse_args() + data = AttrDict(HOMEgfs=_top) + data.update(os.environ) + + # Used for getting platform specific information + host = Host() + cfg = Configuration(f'{data.HOMEgfs}/ci/platforms') + platform_config = cfg.parse_config(f'config.{host.machine.lower()}') + + # Get the case name from the yaml file basename + # and get the configuration for the case + case_name = os.path.basename(args.yaml).split('.')[0] + platform_config['testcase'] = case_name + data.update(platform_config) + case_cfg = parse_j2yaml(path=args.yaml, data=data) + case_cfg.update(platform_config) + + print(f'\nCase name: {case_cfg.testcase}\n') + print(f"Input Data Path: {case_cfg.fcst_gfs.staged_datapath}") + print(f"Input Data Path: {case_cfg.gfs_atmos_pro.staged_datapath}") \ No newline at end of file diff --git a/ci/platforms/config.hera b/ci/platforms/config.hera index 6d3e43c820f..fa908f8eb14 100644 --- a/ci/platforms/config.hera +++ b/ci/platforms/config.hera @@ -2,6 +2,8 @@ export GFS_CI_ROOT=/scratch1/NCEPDEV/global/Terry.McGuinness/GFS_CI_ROOT export ICSDIR_ROOT=/scratch1/NCEPDEV/global/glopara/data/ICSDIR + +export STAGED_FUNCTIONAL_TEST_DIR=${GFS_CI_ROOT}/STAGED_FUNCTIONAL_TEST_DIR export HPC_ACCOUNT=nems export max_concurrent_cases=5 export max_concurrent_pr=4 diff --git a/ci/platforms/config.orion b/ci/platforms/config.orion index 5171373127e..6b4810419dc 100644 --- a/ci/platforms/config.orion +++ b/ci/platforms/config.orion @@ -3,6 +3,7 @@ export GFS_CI_ROOT=/work2/noaa/stmp/GFS_CI_ROOT/ORION export ICSDIR_ROOT=/work/noaa/global/glopara/data/ICSDIR export HPC_ACCOUNT=nems +export STAGED_FUNCTIONAL_TEST_DIR=/work/noaa/stmp/GFS_CI_ROOT/ORION/STAGED_FUNCTIONAL_TEST_DIR export max_concurrent_cases=5 export max_concurrent_pr=4 From 99df88d38ac6bdb50efb72052708bf8b9918f8d0 Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Wed, 18 Dec 2024 02:47:41 -0500 Subject: [PATCH 026/195] added a driver to create ctests from defintions in yaml files --- ci/ctests/CMakeLists.txt | 56 ++++++++---------------- ci/ctests/create_functional_ctests.py | 27 ++++++++++-- ci/ctests/scripts/get_job_names.py | 63 --------------------------- ci/ctests/scripts/starge_data.sh | 7 --- 4 files changed, 41 insertions(+), 112 deletions(-) delete mode 100755 ci/ctests/scripts/get_job_names.py delete mode 100644 ci/ctests/scripts/starge_data.sh diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 68875991720..e61056f4d6d 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -6,13 +6,12 @@ enable_testing() set(CMAKE_VERBOSE_MAKEFILE ON) -set(CASE_LIST "C48_ATM" "C48_S2SW") set(ENV{RUNTESTS} "${CMAKE_BINARY_DIR}/RUNTESTS") -set(HOMEgfs ${CMAKE_CURRENT_SOURCE_DIR}/../..) +get_filename_component(HOMEgfs ${CMAKE_SOURCE_DIR}/../.. ABSOLUTE) set(CASE_PATH ${HOMEgfs}/ci/cases/pr) file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/RUNTESTS) -set(CREATE_EXPERIMENT_CMD "${HOMEgfs}/workflow/create_experiment.py") +set(CREATE_EXPERIMENT_CMD "${HOMEgfs}/workflow/create_experiment.py --overwrite") message(STATUS "Executing: git rev-parse --short HEAD") execute_process( @@ -22,43 +21,24 @@ execute_process( OUTPUT_STRIP_TRAILING_WHITESPACE ) -execute_process( - COMMAND ln -s ${HOMEgfs} global-workflow -) - function(GenerateExperiments CASE) - - execute_process( - COMMAND bash -c "export pslot=${CASE}_${GIT_HASH}; ${CREATE_EXPERIMENT_CMD} --overwrite --yaml ${CASE_PATH}/${CASE}.yaml" - ) - - message(STATUS "Executing: ${HOMEgfs}/ci/scripts/utils/ci_utils_wrapper.sh get_pslot_list RUNTESTS") - execute_process( - COMMAND ${HOMEgfs}/ci/scripts/utils/ci_utils_wrapper.sh get_pslot_list RUNTESTS - OUTPUT_VARIABLE PSLOT_LIST - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - - string(REGEX MATCHALL "${CASE}_[^;]+" PSLOT_LIST "${PSLOT_LIST}") - message(STATUS "Filtered PSLOT list: ${PSLOT_LIST}\n\n") + # Read the job list file for this case + set(JOB_LIST_FILE "${CMAKE_BINARY_DIR}/${CASE}_jobs.txt") - message(STATUS "Executing: ${HOMEgfs}/ci/ctests/scripts/get_job_names.py --xml RUNTESTS/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml") - execute_process( - COMMAND ${HOMEgfs}/ci/ctests/scripts/get_job_names.py --xml RUNTESTS/EXPDIR/${PSLOT_LIST}/${PSLOT_LIST}.xml - OUTPUT_FILE ${CMAKE_BINARY_DIR}/${CASE}_jobs.txt - ) - - file(STRINGS ${CMAKE_BINARY_DIR}/${CASE}_jobs.txt JOB_NAMES) - message(STATUS "Job names:\n${JOB_NAMES}") - - foreach(JOB IN LISTS JOB_NAMES) - string(REGEX REPLACE "^${CASE}_" "" JOB_MODIFIED ${JOB}) - message(STATUS "Executing: ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml") - execute_process( - COMMAND bash -c "export pslot=${CASE}_${JOB_MODIFIED}_${GIT_HASH}; ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml" - ) - endforeach() - + if(EXISTS ${JOB_LIST_FILE}) + file(STRINGS ${JOB_LIST_FILE} JOB_NAMES) + message(STATUS "Processing jobs from ${JOB_LIST_FILE}:\n${JOB_NAMES}") + + foreach(JOB IN LISTS JOB_NAMES) + string(REGEX REPLACE "^${CASE}_" "" JOB_MODIFIED ${JOB}) + message(STATUS "Executing: ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml") + execute_process( + COMMAND bash -c "export pslot=${CASE}_${JOB_MODIFIED}_${GIT_HASH}; ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml" + ) + endforeach() + else() + message(WARNING "Job list file ${JOB_LIST_FILE} does not exist.") + endif() endfunction() function(AddRocotoBootTest CASE_NAME JOB_NAME) diff --git a/ci/ctests/create_functional_ctests.py b/ci/ctests/create_functional_ctests.py index d42d9631439..b1898f3bfea 100755 --- a/ci/ctests/create_functional_ctests.py +++ b/ci/ctests/create_functional_ctests.py @@ -1,14 +1,18 @@ #!/usr/bin/env python3 import os, sys +import shutil _here = os.path.dirname(__file__) _top = os.path.abspath(os.path.join(os.path.abspath(_here), '../..')) sys.path.insert(0, _top) from argparse import ArgumentParser from pathlib import Path -from wxflow import Configuration, AttrDict, parse_j2yaml, Logger, logit +from wxflow import Configuration, AttrDict, parse_j2yaml, Logger, logit, which, CommandNotFoundError, ProcessError from workflow.hosts import Host +from wxflow.fsutils import mkdir_p, chdir, cp + +logger = Logger(level=os.environ.get("LOGGING_LEVEL", "DEBUG"), colored_log=False) def parse_args(): """ @@ -29,6 +33,12 @@ def parse_args(): if __name__ == '__main__': + try: + cmake = which("cmake") + except CommandNotFoundError: + logger.exception("cmake not found in PATH") + raise CommandNotFoundError("cmake not found in PATH") + # Put HOMEgfs into the test configuration args = parse_args() data = AttrDict(HOMEgfs=_top) @@ -47,6 +57,15 @@ def parse_args(): case_cfg = parse_j2yaml(path=args.yaml, data=data) case_cfg.update(platform_config) - print(f'\nCase name: {case_cfg.testcase}\n') - print(f"Input Data Path: {case_cfg.fcst_gfs.staged_datapath}") - print(f"Input Data Path: {case_cfg.gfs_atmos_pro.staged_datapath}") \ No newline at end of file + # Get top-level entries and create a job list file for the case + top_level_entries = [key for key in case_cfg.keys() if isinstance(case_cfg[key], dict)] + + # Create cmake directory and move job list file + test_dir = os.path.join(_here, 'TESTS') + job_list_file = f"TESTS/{case_name}_jobs.txt" + with open(job_list_file, 'w') as f: + for entry in top_level_entries: + f.write(f"{case_name}_{entry}\n") + + cmake.add_default_arg([f'-S {_here}', f'-B {test_dir}', f'-DCASE_LIST={case_name}']) + cmake() diff --git a/ci/ctests/scripts/get_job_names.py b/ci/ctests/scripts/get_job_names.py deleted file mode 100755 index eb7ca532071..00000000000 --- a/ci/ctests/scripts/get_job_names.py +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env python3 -import os -from lxml import etree -from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter, ArgumentTypeError - -def valid_file_path(path): - """ - Check if the provided path is a valid file. - - Args: - path (str): The file path. - - Returns: - str: The absolute path if valid. - - Raises: - argparse.ArgumentTypeError: If the path is not a valid file. - """ - if os.path.isfile(path): - return os.path.abspath(path) - else: - raise ArgumentTypeError(f"Invalid file path: {path}") - -def input_args(): - description = "Extracts the values of and tags." - parser = ArgumentParser(description=description, - formatter_class=ArgumentDefaultsHelpFormatter) - - parser.add_argument('--xml', type=valid_file_path, help='The path to the XML file.') - return parser.parse_args() - -def get_names_from_tags(xml_file): - """ - Extracts the values of and tags. - - Args: - xml_file (str): The path to the XML file. - - Returns: - list: A list of values found in and tags. - """ - tree = etree.parse(xml_file) - root = tree.getroot() - name_list = [] - - for tag in ['task', 'metatask']: - for element in root.findall(f'.//{tag}'): - name = element.get('name') - if name is not None: - name_list.append(name) - - return name_list - -# Example usage -if __name__ == "__main__": - args = input_args() - xml_file = args.xml - job_names = get_names_from_tags(xml_file) - for job_name in job_names: - if "#" not in job_name: - if job_name.endswith("_@H"): - job_name = job_name[:-3] - print(job_name) diff --git a/ci/ctests/scripts/starge_data.sh b/ci/ctests/scripts/starge_data.sh deleted file mode 100644 index 4e943793d14..00000000000 --- a/ci/ctests/scripts/starge_data.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -set -eux -######################################################################## -# This script is used to stage data for the tests. For now it is a stub. -######################################################################## - -exit 0 \ No newline at end of file From e18617338721f2c5a181b0b431c898245831aedd Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Wed, 18 Dec 2024 04:11:06 -0500 Subject: [PATCH 027/195] added final step to loop over yaml files for creating functiona ctests from configs --- ci/ctests/CMakeLists.txt | 6 +++- ci/ctests/create_functional_ctests.py | 46 ++++++++++++++++----------- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index e61056f4d6d..05864c39c0d 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -53,7 +53,11 @@ add_test( NAME BuildAll COMMAND bash -c "cd ${HOMEgfs}/sorc; ./build_all.sh" ) -foreach(CASE IN LISTS CASE_LIST) +# Split CASE_LIST into individual cases +string(REPLACE " " ";" CASE_LIST_SPLIT ${CASE_LIST}) + +# Loop over each case in CASE_LIST_SPLIT +foreach(CASE IN LISTS CASE_LIST_SPLIT) GenerateExperiments(${CASE}) file(STRINGS ${CMAKE_BINARY_DIR}/${CASE}_jobs.txt JOB_NAMES) foreach(JOB IN LISTS JOB_NAMES) diff --git a/ci/ctests/create_functional_ctests.py b/ci/ctests/create_functional_ctests.py index b1898f3bfea..5123972cfd7 100755 --- a/ci/ctests/create_functional_ctests.py +++ b/ci/ctests/create_functional_ctests.py @@ -28,7 +28,7 @@ def parse_args(): """ parser = ArgumentParser(description=description) - parser.add_argument('--yaml', help='path to file for creating functional tests per case', required=True, type=Path) + parser.add_argument('--yaml', help='paths to YAML files for creating functional tests per case', required=True, type=Path, nargs='+') return parser.parse_args() if __name__ == '__main__': @@ -47,25 +47,35 @@ def parse_args(): # Used for getting platform specific information host = Host() cfg = Configuration(f'{data.HOMEgfs}/ci/platforms') - platform_config = cfg.parse_config(f'config.{host.machine.lower()}') - # Get the case name from the yaml file basename - # and get the configuration for the case - case_name = os.path.basename(args.yaml).split('.')[0] - platform_config['testcase'] = case_name - data.update(platform_config) - case_cfg = parse_j2yaml(path=args.yaml, data=data) - case_cfg.update(platform_config) - - # Get top-level entries and create a job list file for the case - top_level_entries = [key for key in case_cfg.keys() if isinstance(case_cfg[key], dict)] - # Create cmake directory and move job list file test_dir = os.path.join(_here, 'TESTS') - job_list_file = f"TESTS/{case_name}_jobs.txt" - with open(job_list_file, 'w') as f: - for entry in top_level_entries: - f.write(f"{case_name}_{entry}\n") + mkdir_p(test_dir) + + # Get the case name from the yaml file basename + # and get the configuration for the case + case_names = "" + for yaml in args.yaml: + platform_config = cfg.parse_config(f'config.{host.machine.lower()}') + case_name = os.path.basename(yaml).split('.')[0] + platform_config['testcase'] = case_name + data.update(platform_config) + case_cfg = parse_j2yaml(path=yaml, data=data) + case_cfg.update(platform_config) + + # Get top-level entries and create a job list file for the case + top_level_entries = [key for key in case_cfg.keys() if isinstance(case_cfg[key], dict)] + job_list_file = f"TESTS/{case_name}_jobs.txt" + with open(job_list_file, 'w') as f: + for entry in top_level_entries: + f.write(f"{case_name}_{entry}\n") + + case_names += f"{case_name} " + + platform_config.clear() + data.clear() + case_cfg.clear() - cmake.add_default_arg([f'-S {_here}', f'-B {test_dir}', f'-DCASE_LIST={case_name}']) + # Run cmake to create the functional tests + cmake.add_default_arg([f"-S {_here}", f"-B {test_dir}", f"-DCASE_LIST='{case_names[:-1]}'"]) cmake() From 0183667afafe9aac799bf1b2303bb57293b0329a Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Thu, 19 Dec 2024 09:45:06 -0500 Subject: [PATCH 028/195] added second yaml case file for testing python driver --- ci/ctests/C48_S2SW.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 ci/ctests/C48_S2SW.yaml diff --git a/ci/ctests/C48_S2SW.yaml b/ci/ctests/C48_S2SW.yaml new file mode 100644 index 00000000000..4c3122a1f78 --- /dev/null +++ b/ci/ctests/C48_S2SW.yaml @@ -0,0 +1,9 @@ +fcst_gfs: + staged_datapath: {{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ testcase }}/fcst_gfs + input_files: use_jinja_template_fcst + output_files: use_jinja_template_fcst + +gfs_atmos_pro: + staged_datapath: {{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ testcase }}/gfs_atmos_prod + input_files: use_jinja_template_gfs_atmos_pro + output_files: use_jinja_template_gfs_atmos_pro From 3088bffcb925c2e204af864ee14b0ef03ed03854 Mon Sep 17 00:00:00 2001 From: TerrenceMcGuinness-NOAA Date: Thu, 19 Dec 2024 10:40:01 -0500 Subject: [PATCH 029/195] added a few comments for each section --- ci/ctests/CMakeLists.txt | 5 +++++ ci/ctests/create_functional_ctests.py | 14 ++++++-------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 05864c39c0d..5e29a76dc92 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -6,6 +6,7 @@ enable_testing() set(CMAKE_VERBOSE_MAKEFILE ON) +# Set environment variables and paths set(ENV{RUNTESTS} "${CMAKE_BINARY_DIR}/RUNTESTS") get_filename_component(HOMEgfs ${CMAKE_SOURCE_DIR}/../.. ABSOLUTE) set(CASE_PATH ${HOMEgfs}/ci/cases/pr) @@ -13,6 +14,7 @@ file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/RUNTESTS) set(CREATE_EXPERIMENT_CMD "${HOMEgfs}/workflow/create_experiment.py --overwrite") +# Get the current git commit hash message(STATUS "Executing: git rev-parse --short HEAD") execute_process( COMMAND git rev-parse --short HEAD @@ -21,6 +23,7 @@ execute_process( OUTPUT_STRIP_TRAILING_WHITESPACE ) +# Function to generate experiments for a given case function(GenerateExperiments CASE) # Read the job list file for this case set(JOB_LIST_FILE "${CMAKE_BINARY_DIR}/${CASE}_jobs.txt") @@ -41,6 +44,7 @@ function(GenerateExperiments CASE) endif() endfunction() +# Function to add Rocoto boot test for a given case and job function(AddRocotoBootTest CASE_NAME JOB_NAME) add_test(NAME jjob_test_${CASE_NAME}_${JOB_NAME}_StageData COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/stage_data.sh ${CASE_NAME} ${JOB_NAME} ${GIT_HASH}") @@ -49,6 +53,7 @@ function(AddRocotoBootTest CASE_NAME JOB_NAME) set_tests_properties(jjob_test_${CASE_NAME}_${JOB_NAME} PROPERTIES DEPENDS jjob_test_${CASE_NAME}_${JOB_NAME}_StageData) endfunction() +# Add a test to build all components add_test( NAME BuildAll COMMAND bash -c "cd ${HOMEgfs}/sorc; ./build_all.sh" ) diff --git a/ci/ctests/create_functional_ctests.py b/ci/ctests/create_functional_ctests.py index 5123972cfd7..cc7036aa3ce 100755 --- a/ci/ctests/create_functional_ctests.py +++ b/ci/ctests/create_functional_ctests.py @@ -23,7 +23,6 @@ def parse_args(): argparse.Namespace The parsed command line arguments. """ - description = """Arguments for creating and updating error log files """ parser = ArgumentParser(description=description) @@ -32,28 +31,27 @@ def parse_args(): return parser.parse_args() if __name__ == '__main__': - + # Locate cmake executable try: cmake = which("cmake") except CommandNotFoundError: logger.exception("cmake not found in PATH") raise CommandNotFoundError("cmake not found in PATH") - # Put HOMEgfs into the test configuration + # Parse command line arguments args = parse_args() data = AttrDict(HOMEgfs=_top) data.update(os.environ) - # Used for getting platform specific information + # Initialize host and configuration host = Host() cfg = Configuration(f'{data.HOMEgfs}/ci/platforms') - # Create cmake directory and move job list file + # Create directory for tests test_dir = os.path.join(_here, 'TESTS') mkdir_p(test_dir) - # Get the case name from the yaml file basename - # and get the configuration for the case + # Process each YAML file case_names = "" for yaml in args.yaml: platform_config = cfg.parse_config(f'config.{host.machine.lower()}') @@ -63,7 +61,7 @@ def parse_args(): case_cfg = parse_j2yaml(path=yaml, data=data) case_cfg.update(platform_config) - # Get top-level entries and create a job list file for the case + # Create job list file for the case top_level_entries = [key for key in case_cfg.keys() if isinstance(case_cfg[key], dict)] job_list_file = f"TESTS/{case_name}_jobs.txt" with open(job_list_file, 'w') as f: From 674f8d6ea058a99707c6f35855ed7b7ce341d4b7 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 20 Dec 2024 09:54:12 -0600 Subject: [PATCH 030/195] made CMakeList.txt independent of python script --- ci/ctests/CMakeLists.txt | 54 +++++++++++++++------------ ci/ctests/create_functional_ctests.py | 36 ++++++++++++------ 2 files changed, 55 insertions(+), 35 deletions(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 5e29a76dc92..f9f9c954e48 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -25,46 +25,52 @@ execute_process( # Function to generate experiments for a given case function(GenerateExperiments CASE) - # Read the job list file for this case - set(JOB_LIST_FILE "${CMAKE_BINARY_DIR}/${CASE}_jobs.txt") - - if(EXISTS ${JOB_LIST_FILE}) - file(STRINGS ${JOB_LIST_FILE} JOB_NAMES) - message(STATUS "Processing jobs from ${JOB_LIST_FILE}:\n${JOB_NAMES}") - - foreach(JOB IN LISTS JOB_NAMES) - string(REGEX REPLACE "^${CASE}_" "" JOB_MODIFIED ${JOB}) - message(STATUS "Executing: ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml") - execute_process( - COMMAND bash -c "export pslot=${CASE}_${JOB_MODIFIED}_${GIT_HASH}; ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml" - ) - endforeach() + # Get JOB_NAMES for this CASE from input variable + string(TOUPPER ${CASE} CASE_UPPER) + set(JOB_NAMES_VAR "JOB_NAMES_${CASE_UPPER}") + if(DEFINED ${JOB_NAMES_VAR}) + string(REPLACE " " ";" JOB_NAMES ${${JOB_NAMES_VAR}}) else() - message(WARNING "Job list file ${JOB_LIST_FILE} does not exist.") + message(WARNING "No JOB_NAMES provided for ${CASE}") + return() endif() + message(STATUS "Processing jobs for ${CASE}: ${JOB_NAMES}") + foreach(JOB IN LISTS JOB_NAMES) + string(REGEX REPLACE "^${CASE}_" "" JOB_MODIFIED ${JOB}) + message(STATUS "Executing: ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml") + execute_process( + COMMAND bash -c "export pslot=${CASE}_${JOB_MODIFIED}_${GIT_HASH}; ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml" + ) + endforeach() endfunction() # Function to add Rocoto boot test for a given case and job function(AddRocotoBootTest CASE_NAME JOB_NAME) - add_test(NAME jjob_test_${CASE_NAME}_${JOB_NAME}_StageData + add_test(NAME stage_${CASE_NAME}_${JOB_NAME} COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/stage_data.sh ${CASE_NAME} ${JOB_NAME} ${GIT_HASH}") - add_test(NAME jjob_test_${CASE_NAME}_${JOB_NAME} + add_test(NAME run_${CASE_NAME}_${JOB_NAME} COMMAND bash -c "rocotoboot -w RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.xml -d RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.db -t ${JOB_NAME}") - set_tests_properties(jjob_test_${CASE_NAME}_${JOB_NAME} PROPERTIES DEPENDS jjob_test_${CASE_NAME}_${JOB_NAME}_StageData) + add_test(NAME validate_${CASE_NAME}_${JOB_NAME} + COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/validate.sh ${CASE_NAME} ${JOB_NAME} ${GIT_HASH}") + set_tests_properties(run_${CASE_NAME}_${JOB_NAME} PROPERTIES DEPENDS stage_${CASE_NAME}_${JOB_NAME}) + set_tests_properties(stage_${CASE_NAME}_${JOB_NAME} PROPERTIES DEPENDS validate_${CASE_NAME}_${JOB_NAME}) endfunction() -# Add a test to build all components -add_test( NAME BuildAll - COMMAND bash -c "cd ${HOMEgfs}/sorc; ./build_all.sh" -) - # Split CASE_LIST into individual cases string(REPLACE " " ";" CASE_LIST_SPLIT ${CASE_LIST}) # Loop over each case in CASE_LIST_SPLIT foreach(CASE IN LISTS CASE_LIST_SPLIT) GenerateExperiments(${CASE}) - file(STRINGS ${CMAKE_BINARY_DIR}/${CASE}_jobs.txt JOB_NAMES) + # Get JOB_NAMES for this CASE from input variable + string(TOUPPER ${CASE} CASE_UPPER) + set(JOB_NAMES_VAR "JOB_NAMES_${CASE_UPPER}") + if(DEFINED ${JOB_NAMES_VAR}) + string(REPLACE " " ";" JOB_NAMES ${${JOB_NAMES_VAR}}) + else() + message(WARNING "No JOB_NAMES provided for ${CASE}") + continue() + endif() foreach(JOB IN LISTS JOB_NAMES) AddRocotoBootTest(${CASE} ${JOB}) endforeach() diff --git a/ci/ctests/create_functional_ctests.py b/ci/ctests/create_functional_ctests.py index cc7036aa3ce..c805a9f0276 100755 --- a/ci/ctests/create_functional_ctests.py +++ b/ci/ctests/create_functional_ctests.py @@ -51,8 +51,10 @@ def parse_args(): test_dir = os.path.join(_here, 'TESTS') mkdir_p(test_dir) - # Process each YAML file - case_names = "" + # Initialize dictionaries to hold case names and their job names + case_names = [] + case_jobs = {} + for yaml in args.yaml: platform_config = cfg.parse_config(f'config.{host.machine.lower()}') case_name = os.path.basename(yaml).split('.')[0] @@ -61,19 +63,31 @@ def parse_args(): case_cfg = parse_j2yaml(path=yaml, data=data) case_cfg.update(platform_config) - # Create job list file for the case + # Collect job names from the YAML file top_level_entries = [key for key in case_cfg.keys() if isinstance(case_cfg[key], dict)] - job_list_file = f"TESTS/{case_name}_jobs.txt" - with open(job_list_file, 'w') as f: - for entry in top_level_entries: - f.write(f"{case_name}_{entry}\n") + job_names = [f"{case_name}_{entry}" for entry in top_level_entries] + case_jobs[case_name.upper()] = ' '.join(job_names) + case_names.append(case_name) - case_names += f"{case_name} " + # Create job list file for the case + job_list_file = f"{test_dir}/{case_name}_jobs.txt" + with open(job_list_file, 'w') as f: + for job in job_names: + f.write(f"{job}\n") platform_config.clear() data.clear() case_cfg.clear() - # Run cmake to create the functional tests - cmake.add_default_arg([f"-S {_here}", f"-B {test_dir}", f"-DCASE_LIST='{case_names[:-1]}'"]) - cmake() + # Prepare cmake command-line arguments + cmake_args = [ + f"-DCASE_LIST='{ ' '.join(case_names) }'" + ] + for case_upper, jobs in case_jobs.items(): + cmake_args.append(f"-DJOB_NAMES_{case_upper}='{jobs}'") + + for each_arg in cmake_args: + print(each_arg, end=' ') + print() + #cmake.add_default_arg(cmake_args) + #cmake() \ No newline at end of file From 68ca6eebe042dd6ddb556c59cae0329861c5f9ce Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 20 Dec 2024 11:53:18 -0500 Subject: [PATCH 031/195] simplified CMakeList to be compatible with manin build, consolated create exp into main test along with stage,run, and validate. --- ci/ctests/CMakeLists.txt | 52 +++++++++++----------------------------- 1 file changed, 14 insertions(+), 38 deletions(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index f9f9c954e48..cd19d001625 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -1,17 +1,12 @@ cmake_minimum_required(VERSION 3.10) project(FunctionalTests) - enable_testing() - set(CMAKE_VERBOSE_MAKEFILE ON) # Set environment variables and paths -set(ENV{RUNTESTS} "${CMAKE_BINARY_DIR}/RUNTESTS") get_filename_component(HOMEgfs ${CMAKE_SOURCE_DIR}/../.. ABSOLUTE) set(CASE_PATH ${HOMEgfs}/ci/cases/pr) -file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/RUNTESTS) - set(CREATE_EXPERIMENT_CMD "${HOMEgfs}/workflow/create_experiment.py --overwrite") # Get the current git commit hash @@ -23,37 +18,19 @@ execute_process( OUTPUT_STRIP_TRAILING_WHITESPACE ) -# Function to generate experiments for a given case -function(GenerateExperiments CASE) - # Get JOB_NAMES for this CASE from input variable - string(TOUPPER ${CASE} CASE_UPPER) - set(JOB_NAMES_VAR "JOB_NAMES_${CASE_UPPER}") - if(DEFINED ${JOB_NAMES_VAR}) - string(REPLACE " " ";" JOB_NAMES ${${JOB_NAMES_VAR}}) - else() - message(WARNING "No JOB_NAMES provided for ${CASE}") - return() - endif() - message(STATUS "Processing jobs for ${CASE}: ${JOB_NAMES}") - foreach(JOB IN LISTS JOB_NAMES) - string(REGEX REPLACE "^${CASE}_" "" JOB_MODIFIED ${JOB}) - message(STATUS "Executing: ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml") - execute_process( - COMMAND bash -c "export pslot=${CASE}_${JOB_MODIFIED}_${GIT_HASH}; ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml" - ) - endforeach() -endfunction() - # Function to add Rocoto boot test for a given case and job -function(AddRocotoBootTest CASE_NAME JOB_NAME) - add_test(NAME stage_${CASE_NAME}_${JOB_NAME} - COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/stage_data.sh ${CASE_NAME} ${JOB_NAME} ${GIT_HASH}") - add_test(NAME run_${CASE_NAME}_${JOB_NAME} - COMMAND bash -c "rocotoboot -w RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.xml -d RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.db -t ${JOB_NAME}") - add_test(NAME validate_${CASE_NAME}_${JOB_NAME} - COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/validate.sh ${CASE_NAME} ${JOB_NAME} ${GIT_HASH}") - set_tests_properties(run_${CASE_NAME}_${JOB_NAME} PROPERTIES DEPENDS stage_${CASE_NAME}_${JOB_NAME}) - set_tests_properties(stage_${CASE_NAME}_${JOB_NAME} PROPERTIES DEPENDS validate_${CASE_NAME}_${JOB_NAME}) +function(AddFunctionalTest JOB) + add_test(NAME test_${JOB} + COMMAND bash -c "export RUNTESTS=${CMAKE_BINARY_DIR}/RUNTESTS; export pslot=${CASE}_${JOB}_${GIT_HASH}; ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml") + add_test(NAME stage_${JOB} + COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/stage_data.sh ${CASE_NAME} ${JOB_NAME} ${GIT_HASH}") + add_test(NAME run_${JOB} + COMMAND bash -c "rocotoboot -w RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.xml -d RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.db -t ${JOB_NAME}") + add_test(NAME validate_${JOB} + COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/validate.sh ${CASE_NAME} ${JOB_NAME} ${GIT_HASH}") + set_tests_properties(stage_${JOB} PROPERTIES DEPENDS test_${JOB}) + set_tests_properties(run_${JOB} PROPERTIES DEPENDS stage_${JOB}) + set_tests_properties(validate_${JOB} PROPERTIES DEPENDS run_${JOB}) endfunction() # Split CASE_LIST into individual cases @@ -61,7 +38,6 @@ string(REPLACE " " ";" CASE_LIST_SPLIT ${CASE_LIST}) # Loop over each case in CASE_LIST_SPLIT foreach(CASE IN LISTS CASE_LIST_SPLIT) - GenerateExperiments(${CASE}) # Get JOB_NAMES for this CASE from input variable string(TOUPPER ${CASE} CASE_UPPER) set(JOB_NAMES_VAR "JOB_NAMES_${CASE_UPPER}") @@ -72,6 +48,6 @@ foreach(CASE IN LISTS CASE_LIST_SPLIT) continue() endif() foreach(JOB IN LISTS JOB_NAMES) - AddRocotoBootTest(${CASE} ${JOB}) + AddFunctionalTest(${JOB}) endforeach() -endforeach() +endforeach() \ No newline at end of file From f7bbd401418269d4fb025ce1a7b4adad7d2b8e39 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 20 Dec 2024 11:58:55 -0500 Subject: [PATCH 032/195] repurposed python script for generating args to man CMakeLists.txt --- ci/ctests/{create_functional_ctests.py => generate_ctest_args.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename ci/ctests/{create_functional_ctests.py => generate_ctest_args.py} (100%) diff --git a/ci/ctests/create_functional_ctests.py b/ci/ctests/generate_ctest_args.py similarity index 100% rename from ci/ctests/create_functional_ctests.py rename to ci/ctests/generate_ctest_args.py From 36d497ee5e247ea5628d4041f4bbe7eb5c47afab Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 20 Dec 2024 11:39:25 -0600 Subject: [PATCH 033/195] added lables to run tests in groups and added stubbed scripts --- ci/ctests/CMakeLists.txt | 14 +++++++---- .../{ => scripts}/generate_ctest_args.py | 24 +------------------ ci/ctests/scripts/stage_data.sh | 0 ci/ctests/scripts/validate.sh | 0 4 files changed, 10 insertions(+), 28 deletions(-) rename ci/ctests/{ => scripts}/generate_ctest_args.py (77%) create mode 100644 ci/ctests/scripts/stage_data.sh create mode 100644 ci/ctests/scripts/validate.sh diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index cd19d001625..9af5c7e946a 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -19,18 +19,22 @@ execute_process( ) # Function to add Rocoto boot test for a given case and job -function(AddFunctionalTest JOB) +function(AddFunctionalTest CASE JOB) add_test(NAME test_${JOB} COMMAND bash -c "export RUNTESTS=${CMAKE_BINARY_DIR}/RUNTESTS; export pslot=${CASE}_${JOB}_${GIT_HASH}; ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml") + set_tests_properties(test_${JOB} PROPERTIES LABELS ${CASE}) + add_test(NAME stage_${JOB} COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/stage_data.sh ${CASE_NAME} ${JOB_NAME} ${GIT_HASH}") + set_tests_properties(stage_${JOB} PROPERTIES DEPENDS test_${JOB} LABELS ${CASE}) + add_test(NAME run_${JOB} COMMAND bash -c "rocotoboot -w RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.xml -d RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.db -t ${JOB_NAME}") + set_tests_properties(run_${JOB} PROPERTIES DEPENDS stage_${JOB} LABELS ${CASE}) + add_test(NAME validate_${JOB} COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/validate.sh ${CASE_NAME} ${JOB_NAME} ${GIT_HASH}") - set_tests_properties(stage_${JOB} PROPERTIES DEPENDS test_${JOB}) - set_tests_properties(run_${JOB} PROPERTIES DEPENDS stage_${JOB}) - set_tests_properties(validate_${JOB} PROPERTIES DEPENDS run_${JOB}) + set_tests_properties(validate_${JOB} PROPERTIES DEPENDS run_${JOB} LABELS ${CASE}) endfunction() # Split CASE_LIST into individual cases @@ -48,6 +52,6 @@ foreach(CASE IN LISTS CASE_LIST_SPLIT) continue() endif() foreach(JOB IN LISTS JOB_NAMES) - AddFunctionalTest(${JOB}) + AddFunctionalTest(${CASE} ${JOB}) endforeach() endforeach() \ No newline at end of file diff --git a/ci/ctests/generate_ctest_args.py b/ci/ctests/scripts/generate_ctest_args.py similarity index 77% rename from ci/ctests/generate_ctest_args.py rename to ci/ctests/scripts/generate_ctest_args.py index c805a9f0276..72754cebc2f 100755 --- a/ci/ctests/generate_ctest_args.py +++ b/ci/ctests/scripts/generate_ctest_args.py @@ -31,12 +31,6 @@ def parse_args(): return parser.parse_args() if __name__ == '__main__': - # Locate cmake executable - try: - cmake = which("cmake") - except CommandNotFoundError: - logger.exception("cmake not found in PATH") - raise CommandNotFoundError("cmake not found in PATH") # Parse command line arguments args = parse_args() @@ -47,10 +41,6 @@ def parse_args(): host = Host() cfg = Configuration(f'{data.HOMEgfs}/ci/platforms') - # Create directory for tests - test_dir = os.path.join(_here, 'TESTS') - mkdir_p(test_dir) - # Initialize dictionaries to hold case names and their job names case_names = [] case_jobs = {} @@ -69,16 +59,6 @@ def parse_args(): case_jobs[case_name.upper()] = ' '.join(job_names) case_names.append(case_name) - # Create job list file for the case - job_list_file = f"{test_dir}/{case_name}_jobs.txt" - with open(job_list_file, 'w') as f: - for job in job_names: - f.write(f"{job}\n") - - platform_config.clear() - data.clear() - case_cfg.clear() - # Prepare cmake command-line arguments cmake_args = [ f"-DCASE_LIST='{ ' '.join(case_names) }'" @@ -88,6 +68,4 @@ def parse_args(): for each_arg in cmake_args: print(each_arg, end=' ') - print() - #cmake.add_default_arg(cmake_args) - #cmake() \ No newline at end of file + print() \ No newline at end of file diff --git a/ci/ctests/scripts/stage_data.sh b/ci/ctests/scripts/stage_data.sh new file mode 100644 index 00000000000..e69de29bb2d diff --git a/ci/ctests/scripts/validate.sh b/ci/ctests/scripts/validate.sh new file mode 100644 index 00000000000..e69de29bb2d From 808a4cfe02ac2eb45a5d453399a777210d6c5f90 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 20 Dec 2024 12:10:08 -0600 Subject: [PATCH 034/195] created script and cases dir to isolate CMakeLists.txt --- ci/ctests/CMakeLists.txt | 11 ++++++----- ci/ctests/{ => cases}/C48_ATM.yaml | 0 ci/ctests/{ => cases}/C48_S2SW.yaml | 0 ci/ctests/scripts/generate_ctest_args.py | 3 +-- ci/ctests/scripts/stage_data.sh | 0 ci/ctests/scripts/validate.sh | 0 ci/ctests/scripts/wxflow | 1 + 7 files changed, 8 insertions(+), 7 deletions(-) rename ci/ctests/{ => cases}/C48_ATM.yaml (100%) rename ci/ctests/{ => cases}/C48_S2SW.yaml (100%) mode change 100644 => 100755 ci/ctests/scripts/stage_data.sh mode change 100644 => 100755 ci/ctests/scripts/validate.sh create mode 120000 ci/ctests/scripts/wxflow diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 9af5c7e946a..9ea2753f8a1 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -22,19 +22,20 @@ execute_process( function(AddFunctionalTest CASE JOB) add_test(NAME test_${JOB} COMMAND bash -c "export RUNTESTS=${CMAKE_BINARY_DIR}/RUNTESTS; export pslot=${CASE}_${JOB}_${GIT_HASH}; ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml") - set_tests_properties(test_${JOB} PROPERTIES LABELS ${CASE}) + set_tests_properties(test_${JOB} PROPERTIES LABELS "${CASE};${JOB}") add_test(NAME stage_${JOB} COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/stage_data.sh ${CASE_NAME} ${JOB_NAME} ${GIT_HASH}") - set_tests_properties(stage_${JOB} PROPERTIES DEPENDS test_${JOB} LABELS ${CASE}) + set_tests_properties(stage_${JOB} PROPERTIES DEPENDS test_${JOB} LABELS "${CASE};${JOB}") add_test(NAME run_${JOB} - COMMAND bash -c "rocotoboot -w RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.xml -d RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.db -t ${JOB_NAME}") - set_tests_properties(run_${JOB} PROPERTIES DEPENDS stage_${JOB} LABELS ${CASE}) + #COMMAND bash -c "rocotoboot -w RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.xml -d RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.db -t ${JOB_NAME}") + COMMAND bash -c "echo 'submitting running of job ${JOB_NAME}'") + set_tests_properties(run_${JOB} PROPERTIES DEPENDS stage_${JOB} LABELS "${CASE};${JOB}") add_test(NAME validate_${JOB} COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/validate.sh ${CASE_NAME} ${JOB_NAME} ${GIT_HASH}") - set_tests_properties(validate_${JOB} PROPERTIES DEPENDS run_${JOB} LABELS ${CASE}) + set_tests_properties(validate_${JOB} PROPERTIES DEPENDS run_${JOB} LABELS "${CASE};${JOB}") endfunction() # Split CASE_LIST into individual cases diff --git a/ci/ctests/C48_ATM.yaml b/ci/ctests/cases/C48_ATM.yaml similarity index 100% rename from ci/ctests/C48_ATM.yaml rename to ci/ctests/cases/C48_ATM.yaml diff --git a/ci/ctests/C48_S2SW.yaml b/ci/ctests/cases/C48_S2SW.yaml similarity index 100% rename from ci/ctests/C48_S2SW.yaml rename to ci/ctests/cases/C48_S2SW.yaml diff --git a/ci/ctests/scripts/generate_ctest_args.py b/ci/ctests/scripts/generate_ctest_args.py index 72754cebc2f..6b81b8aa93a 100755 --- a/ci/ctests/scripts/generate_ctest_args.py +++ b/ci/ctests/scripts/generate_ctest_args.py @@ -3,14 +3,13 @@ import os, sys import shutil _here = os.path.dirname(__file__) -_top = os.path.abspath(os.path.join(os.path.abspath(_here), '../..')) +_top = os.path.abspath(os.path.join(os.path.abspath(_here), '../../..')) sys.path.insert(0, _top) from argparse import ArgumentParser from pathlib import Path from wxflow import Configuration, AttrDict, parse_j2yaml, Logger, logit, which, CommandNotFoundError, ProcessError from workflow.hosts import Host -from wxflow.fsutils import mkdir_p, chdir, cp logger = Logger(level=os.environ.get("LOGGING_LEVEL", "DEBUG"), colored_log=False) diff --git a/ci/ctests/scripts/stage_data.sh b/ci/ctests/scripts/stage_data.sh old mode 100644 new mode 100755 diff --git a/ci/ctests/scripts/validate.sh b/ci/ctests/scripts/validate.sh old mode 100644 new mode 100755 diff --git a/ci/ctests/scripts/wxflow b/ci/ctests/scripts/wxflow new file mode 120000 index 00000000000..54d0558aba2 --- /dev/null +++ b/ci/ctests/scripts/wxflow @@ -0,0 +1 @@ +../../../sorc/wxflow/src/wxflow \ No newline at end of file From 81e640fb5a3a84ceb2ed32e556ba4a752b499075 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 20 Dec 2024 13:06:18 -0600 Subject: [PATCH 035/195] renamed test to create_experiment --- ci/ctests/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 9ea2753f8a1..2e413380d9d 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -22,11 +22,11 @@ execute_process( function(AddFunctionalTest CASE JOB) add_test(NAME test_${JOB} COMMAND bash -c "export RUNTESTS=${CMAKE_BINARY_DIR}/RUNTESTS; export pslot=${CASE}_${JOB}_${GIT_HASH}; ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml") - set_tests_properties(test_${JOB} PROPERTIES LABELS "${CASE};${JOB}") + set_tests_properties(create_experiment_${JOB} PROPERTIES LABELS "${CASE};${JOB}") add_test(NAME stage_${JOB} COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/stage_data.sh ${CASE_NAME} ${JOB_NAME} ${GIT_HASH}") - set_tests_properties(stage_${JOB} PROPERTIES DEPENDS test_${JOB} LABELS "${CASE};${JOB}") + set_tests_properties(stage_${JOB} PROPERTIES DEPENDS create_experiment_${JOB} LABELS "${CASE};${JOB}") add_test(NAME run_${JOB} #COMMAND bash -c "rocotoboot -w RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.xml -d RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.db -t ${JOB_NAME}") From a1d0f20eeab11ea36fca04c902fd0e54af1012d5 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 20 Dec 2024 14:29:11 -0600 Subject: [PATCH 036/195] missed update to name of test from test_ to create_experiment_ --- ci/ctests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 2e413380d9d..b6b624a3f0d 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -20,7 +20,7 @@ execute_process( # Function to add Rocoto boot test for a given case and job function(AddFunctionalTest CASE JOB) - add_test(NAME test_${JOB} + add_test(NAME create_expirment_${JOB} COMMAND bash -c "export RUNTESTS=${CMAKE_BINARY_DIR}/RUNTESTS; export pslot=${CASE}_${JOB}_${GIT_HASH}; ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml") set_tests_properties(create_experiment_${JOB} PROPERTIES LABELS "${CASE};${JOB}") From 2cbf4eec2743a73d44ba26c5fe42584d84812865 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 20 Dec 2024 14:31:52 -0600 Subject: [PATCH 037/195] forgot to save contents of the stubbed scripts --- ci/ctests/scripts/stage_data.sh | 2 ++ ci/ctests/scripts/validate.sh | 2 ++ 2 files changed, 4 insertions(+) diff --git a/ci/ctests/scripts/stage_data.sh b/ci/ctests/scripts/stage_data.sh index e69de29bb2d..8e5e43fa35c 100755 --- a/ci/ctests/scripts/stage_data.sh +++ b/ci/ctests/scripts/stage_data.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +echo "This is a stub for the stage_data script." diff --git a/ci/ctests/scripts/validate.sh b/ci/ctests/scripts/validate.sh index e69de29bb2d..ea1d3c41d97 100755 --- a/ci/ctests/scripts/validate.sh +++ b/ci/ctests/scripts/validate.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +echo "This is a stub for the validate script." From 687217f848ff3086a349815b41d94f093d3f935c Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 20 Dec 2024 14:37:38 -0600 Subject: [PATCH 038/195] spelling error on create_experiment --- ci/ctests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index b6b624a3f0d..8af648eea24 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -20,7 +20,7 @@ execute_process( # Function to add Rocoto boot test for a given case and job function(AddFunctionalTest CASE JOB) - add_test(NAME create_expirment_${JOB} + add_test(NAME create_experiment_${JOB} COMMAND bash -c "export RUNTESTS=${CMAKE_BINARY_DIR}/RUNTESTS; export pslot=${CASE}_${JOB}_${GIT_HASH}; ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml") set_tests_properties(create_experiment_${JOB} PROPERTIES LABELS "${CASE};${JOB}") From 55766bd63117fdb746d124685ec2a60e0cfedce0 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 20 Dec 2024 15:57:11 -0600 Subject: [PATCH 039/195] got a few hints on using File Utils directly in case Yaml file --- ci/ctests/cases/C48_ATM.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ci/ctests/cases/C48_ATM.yaml b/ci/ctests/cases/C48_ATM.yaml index 4c3122a1f78..309366dcaa2 100644 --- a/ci/ctests/cases/C48_ATM.yaml +++ b/ci/ctests/cases/C48_ATM.yaml @@ -3,6 +3,13 @@ fcst_gfs: input_files: use_jinja_template_fcst output_files: use_jinja_template_fcst +gfs_fcst: + input_files: + copy: + - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/gdas.{{ PDY }}/{{ HH }}/atmos/INPUT/gfs_ctrl.nc, + {{RUNTESTS}}/{{test_name}}//gdas.{{PDY}}/{{HH}}/atmos/INPUT/gfs_ctrl.nc] + output_files: use_jinja_template_fcst + gfs_atmos_pro: staged_datapath: {{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ testcase }}/gfs_atmos_prod input_files: use_jinja_template_gfs_atmos_pro From f69fb6834f8cdb6a65c0983dc905dc3713accf2f Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 23 Dec 2024 14:55:11 -0600 Subject: [PATCH 040/195] updated adding functional test as line enteries in CMakeLists.txt directly that creats the three steps as tests --- ci/ctests/CMakeLists.txt | 58 +++++++++--------------- ci/ctests/cases/C48_ATM.yaml | 5 -- ci/ctests/scripts/loop_cases_jjobs.cmake | 19 ++++++++ 3 files changed, 41 insertions(+), 41 deletions(-) create mode 100644 ci/ctests/scripts/loop_cases_jjobs.cmake diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 8af648eea24..f444d9e8e3f 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -10,49 +10,35 @@ set(CASE_PATH ${HOMEgfs}/ci/cases/pr) set(CREATE_EXPERIMENT_CMD "${HOMEgfs}/workflow/create_experiment.py --overwrite") # Get the current git commit hash -message(STATUS "Executing: git rev-parse --short HEAD") -execute_process( - COMMAND git rev-parse --short HEAD - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE GIT_HASH - OUTPUT_STRIP_TRAILING_WHITESPACE -) +#message(STATUS "Executing: git rev-parse --short HEAD") +#execute_process( +# COMMAND git rev-parse --short HEAD +# WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} +# OUTPUT_VARIABLE GIT_HASH +# OUTPUT_STRIP_TRAILING_WHITESPACE +#) # Function to add Rocoto boot test for a given case and job function(AddFunctionalTest CASE JOB) - add_test(NAME create_experiment_${JOB} - COMMAND bash -c "export RUNTESTS=${CMAKE_BINARY_DIR}/RUNTESTS; export pslot=${CASE}_${JOB}_${GIT_HASH}; ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml") - set_tests_properties(create_experiment_${JOB} PROPERTIES LABELS "${CASE};${JOB}") + set(TEST_NAME ${CASE}_${JOB}) + add_test(NAME create_experiment_${TEST_NAME} + COMMAND bash -c "export RUNTESTS=${CMAKE_BINARY_DIR}/RUNTESTS; export pslot=${TEST_NAME}; ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml") + set_tests_properties(create_experiment_${TEST_NAME} PROPERTIES LABELS "${CASE};${JOB}") - add_test(NAME stage_${JOB} - COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/stage_data.sh ${CASE_NAME} ${JOB_NAME} ${GIT_HASH}") - set_tests_properties(stage_${JOB} PROPERTIES DEPENDS create_experiment_${JOB} LABELS "${CASE};${JOB}") + add_test(NAME stage_${TEST_NAME} + COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/stage_data.sh ${CASE} $${JOB}") + set_tests_properties(stage_${TEST_NAME} PROPERTIES DEPENDS create_experiment_${TEST_NAME} LABELS "${CASE};${JOB}") - add_test(NAME run_${JOB} + add_test(NAME run_${TEST_NAME} #COMMAND bash -c "rocotoboot -w RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.xml -d RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.db -t ${JOB_NAME}") COMMAND bash -c "echo 'submitting running of job ${JOB_NAME}'") - set_tests_properties(run_${JOB} PROPERTIES DEPENDS stage_${JOB} LABELS "${CASE};${JOB}") + set_tests_properties(run_${TEST_NAME} PROPERTIES DEPENDS stage_${TEST_NAME} LABELS "${CASE};${JOB}") - add_test(NAME validate_${JOB} - COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/validate.sh ${CASE_NAME} ${JOB_NAME} ${GIT_HASH}") - set_tests_properties(validate_${JOB} PROPERTIES DEPENDS run_${JOB} LABELS "${CASE};${JOB}") + add_test(NAME validate_${TEST_NAME} + COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/validate.sh ${CASE} ${JOB}") + set_tests_properties(validate_${TEST_NAME} PROPERTIES DEPENDS run_${TEST_NAME} LABELS "${CASE};${JOB}") endfunction() -# Split CASE_LIST into individual cases -string(REPLACE " " ";" CASE_LIST_SPLIT ${CASE_LIST}) - -# Loop over each case in CASE_LIST_SPLIT -foreach(CASE IN LISTS CASE_LIST_SPLIT) - # Get JOB_NAMES for this CASE from input variable - string(TOUPPER ${CASE} CASE_UPPER) - set(JOB_NAMES_VAR "JOB_NAMES_${CASE_UPPER}") - if(DEFINED ${JOB_NAMES_VAR}) - string(REPLACE " " ";" JOB_NAMES ${${JOB_NAMES_VAR}}) - else() - message(WARNING "No JOB_NAMES provided for ${CASE}") - continue() - endif() - foreach(JOB IN LISTS JOB_NAMES) - AddFunctionalTest(${CASE} ${JOB}) - endforeach() -endforeach() \ No newline at end of file +AddFunctionalTest("C48_ATM" "gfs_fcst_000") +AddFunctionalTest("C48_ATM" "gfs_atmos_pro") +AddFunctionalTest("C48_S2SW" "gfs_fcst_000") diff --git a/ci/ctests/cases/C48_ATM.yaml b/ci/ctests/cases/C48_ATM.yaml index 309366dcaa2..3bd555425b6 100644 --- a/ci/ctests/cases/C48_ATM.yaml +++ b/ci/ctests/cases/C48_ATM.yaml @@ -1,8 +1,3 @@ -fcst_gfs: - staged_datapath: {{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ testcase }}/fcst_gfs - input_files: use_jinja_template_fcst - output_files: use_jinja_template_fcst - gfs_fcst: input_files: copy: diff --git a/ci/ctests/scripts/loop_cases_jjobs.cmake b/ci/ctests/scripts/loop_cases_jjobs.cmake new file mode 100644 index 00000000000..e94b8dc6305 --- /dev/null +++ b/ci/ctests/scripts/loop_cases_jjobs.cmake @@ -0,0 +1,19 @@ + +# Split CASE_LIST into individual cases +string(REPLACE " " ";" CASE_LIST_SPLIT ${CASE_LIST}) + +# Loop over each case in CASE_LIST_SPLIT +foreach(CASE IN LISTS CASE_LIST_SPLIT) + # Get JOB_NAMES for this CASE from input variable + string(TOUPPER ${CASE} CASE_UPPER) + set(JOB_NAMES_VAR "JOB_NAMES_${CASE_UPPER}") + if(DEFINED ${JOB_NAMES_VAR}) + string(REPLACE " " ";" JOB_NAMES ${${JOB_NAMES_VAR}}) + else() + message(WARNING "No JOB_NAMES provided for ${CASE}") + continue() + endif() + foreach(JOB IN LISTS JOB_NAMES) + AddFunctionalTest(${CASE} ${JOB}) + endforeach() +endforeach() \ No newline at end of file From 3cc83c6a5ae40fa251690c06e7ca3e95eef957cc Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 23 Dec 2024 15:45:04 -0600 Subject: [PATCH 041/195] Cleaned up names to have Case and job name first --- ci/ctests/CMakeLists.txt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index f444d9e8e3f..7bde309ab10 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -21,22 +21,22 @@ set(CREATE_EXPERIMENT_CMD "${HOMEgfs}/workflow/create_experiment.py --overwrite" # Function to add Rocoto boot test for a given case and job function(AddFunctionalTest CASE JOB) set(TEST_NAME ${CASE}_${JOB}) - add_test(NAME create_experiment_${TEST_NAME} + add_test(NAME ${TEST_NAME}_create_experiment COMMAND bash -c "export RUNTESTS=${CMAKE_BINARY_DIR}/RUNTESTS; export pslot=${TEST_NAME}; ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml") - set_tests_properties(create_experiment_${TEST_NAME} PROPERTIES LABELS "${CASE};${JOB}") + set_tests_properties(${TEST_NAME}_create_experiment PROPERTIES LABELS "${CASE};${JOB}") - add_test(NAME stage_${TEST_NAME} + add_test(NAME ${TEST_NAME}_stage COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/stage_data.sh ${CASE} $${JOB}") - set_tests_properties(stage_${TEST_NAME} PROPERTIES DEPENDS create_experiment_${TEST_NAME} LABELS "${CASE};${JOB}") + set_tests_properties(${TEST_NAME}_stage PROPERTIES DEPENDS ${TEST_NAME}_create_experiment LABELS "${CASE};${JOB}") - add_test(NAME run_${TEST_NAME} + add_test(NAME ${TEST_NAME}_execute #COMMAND bash -c "rocotoboot -w RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.xml -d RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.db -t ${JOB_NAME}") COMMAND bash -c "echo 'submitting running of job ${JOB_NAME}'") - set_tests_properties(run_${TEST_NAME} PROPERTIES DEPENDS stage_${TEST_NAME} LABELS "${CASE};${JOB}") + set_tests_properties(${TEST_NAME}_execute PROPERTIES DEPENDS ${TEST_NAME}_stage LABELS "${CASE};${JOB}") - add_test(NAME validate_${TEST_NAME} + add_test(NAME ${TEST_NAME}_validate COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/validate.sh ${CASE} ${JOB}") - set_tests_properties(validate_${TEST_NAME} PROPERTIES DEPENDS run_${TEST_NAME} LABELS "${CASE};${JOB}") + set_tests_properties(${TEST_NAME}_validate PROPERTIES DEPENDS ${TEST_NAME}_execute LABELS "${CASE};${JOB}") endfunction() AddFunctionalTest("C48_ATM" "gfs_fcst_000") From e1e185890f69f70f8c6ff5f55df3b9870917d3a0 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 23 Dec 2024 16:25:55 -0600 Subject: [PATCH 042/195] added file utils copy commands in gfs_fcst for C48_ATM --- ci/ctests/cases/C48_ATM.yaml | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/ci/ctests/cases/C48_ATM.yaml b/ci/ctests/cases/C48_ATM.yaml index 3bd555425b6..c54261aeda7 100644 --- a/ci/ctests/cases/C48_ATM.yaml +++ b/ci/ctests/cases/C48_ATM.yaml @@ -1,8 +1,21 @@ gfs_fcst: input_files: copy: - - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/gdas.{{ PDY }}/{{ HH }}/atmos/INPUT/gfs_ctrl.nc, - {{RUNTESTS}}/{{test_name}}//gdas.{{PDY}}/{{HH}}/atmos/INPUT/gfs_ctrl.nc] + - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/gdas.{{ PDY }}/{{ HH }}/atmos/input/gfs_ctrl.nc, + {{RUNTESTS}}/{{test_name}}//gdas.{{PDY}}/{{HH}}/atmos/input/gfs_ctrl.nc] + - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/gdas.{{ PDY }}/{{ HH }}/atmos/input/gfs_data.tile1.nc + {{RUNTESTS}}/{{test_name}}//gdas.{{PDY}}/{{HH}}/atmos/input/gfs_data.tile1.nc] + - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/gdas.{{ PDY }}/{{ HH }}/atmos/input/gfs_data.tile2.nc + {{RUNTESTS}}/{{test_name}}//gdas.{{PDY}}/{{HH}}/atmos/input/gfs_data.tile2.nc] + - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/gdas.{{ PDY }}/{{ HH }}/atmos/input/gfs_data.tile3.nc + {{RUNTESTS}}/{{test_name}}//gdas.{{PDY}}/{{HH}}/atmos/input/gfs_data.tile3.nc] + - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/gdas.{{ PDY }}/{{ HH }}/atmos/input/gfs_data.tile4.nc + {{RUNTESTS}}/{{test_name}}//gdas.{{PDY}}/{{HH}}/atmos/input/gfs_data.tile4.nc] + - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/gdas.{{ PDY }}/{{ HH }}/atmos/input/gfs_data.tile5.nc + {{RUNTESTS}}/{{test_name}}//gdas.{{PDY}}/{{HH}}/atmos/input/gfs_data.tile5.nc] + - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/gdas.{{ PDY }}/{{ HH }}/atmos/input/gfs_data.tile6.nc + {{RUNTESTS}}/{{test_name}}//gdas.{{PDY}}/{{HH}}/atmos/input/gfs_data.tile6.nc] + output_files: use_jinja_template_fcst gfs_atmos_pro: From 5ce988f0d7b81a0ebe15e378ba77031a941ee5d5 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 23 Dec 2024 18:11:43 -0600 Subject: [PATCH 043/195] started on stage data python script --- ci/ctests/scripts/stage_data.py | 58 +++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100755 ci/ctests/scripts/stage_data.py diff --git a/ci/ctests/scripts/stage_data.py b/ci/ctests/scripts/stage_data.py new file mode 100755 index 00000000000..55330b9ee64 --- /dev/null +++ b/ci/ctests/scripts/stage_data.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python3 + +import os, sys +import shutil +_here = os.path.dirname(__file__) +_top = os.path.abspath(os.path.join(os.path.abspath(_here), '../../..')) +sys.path.insert(0, _top) + +from argparse import ArgumentParser +from pathlib import Path +from wxflow import Configuration, AttrDict, parse_j2yaml, Logger, logit, which, CommandNotFoundError, ProcessError +from workflow.hosts import Host + +logger = Logger(level=os.environ.get("LOGGING_LEVEL", "DEBUG"), colored_log=False) + +def parse_args(): + """ + Parse command line arguments. + + Returns + ------- + argparse.Namespace + The parsed command line arguments. + """ + description = """Arguments for creating and updating error log files + """ + parser = ArgumentParser(description=description) + + parser.add_argument('--case', help='Case name', required=True, type=str) + parser.add_argument('--job', help='Job name', required=True, type=str) + parser.add_argument('--build_dir', help='CMake build directory', required=False, type=Path, default=None) + return parser.parse_args() + +if __name__ == '__main__': + + # Parse command line arguments + args = parse_args() + data = AttrDict(HOMEgfs=_top) + data.update(os.environ) + + case_yaml_path = Path(f'{data.HOMEgfs}/ci/ctests/cases/{args.case}.yaml') + + # Initialize host and platform configuration + host = Host() + cfg = Configuration(f'{data.HOMEgfs}/ci/platforms') + platform_config = cfg.parse_config(f'config.{host.machine.lower()}') + data.update(platform_config) + + print(f'{args.build_dir}/RUNTESTS/EXPDIR/{args.case}_{args.job}') + cfg = Configuration(f'{args.build_dir}/RUNTESTS/EXPDIR/{args.case}_{args.job}') + base_cfg = cfg.parse_config('config.base') + + print (base_cfg['PDY']) + + base_cfg.update(data) + + case_cfg = parse_j2yaml(path=case_yaml_path, data=data) + print (case_cfg) From cefaccd964372b281a7a21fd78cc31665860aad6 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 23 Dec 2024 18:13:53 -0600 Subject: [PATCH 044/195] added exec line for python staging script --- ci/ctests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 7bde309ab10..d0ca0605c0a 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -26,7 +26,7 @@ function(AddFunctionalTest CASE JOB) set_tests_properties(${TEST_NAME}_create_experiment PROPERTIES LABELS "${CASE};${JOB}") add_test(NAME ${TEST_NAME}_stage - COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/stage_data.sh ${CASE} $${JOB}") + COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/stage_data.py --build_dir ${CMAKE_BINARY_DIR} --case ${CASE} --job $${JOB}") set_tests_properties(${TEST_NAME}_stage PROPERTIES DEPENDS ${TEST_NAME}_create_experiment LABELS "${CASE};${JOB}") add_test(NAME ${TEST_NAME}_execute From bec03d9abf23226d2e955c1ecfefd721273a54fb Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 23 Dec 2024 18:15:21 -0600 Subject: [PATCH 045/195] deleted space in yaml file for copy commands --- ci/ctests/cases/C48_ATM.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/ctests/cases/C48_ATM.yaml b/ci/ctests/cases/C48_ATM.yaml index c54261aeda7..31ec1c43f1d 100644 --- a/ci/ctests/cases/C48_ATM.yaml +++ b/ci/ctests/cases/C48_ATM.yaml @@ -1,7 +1,7 @@ gfs_fcst: input_files: copy: - - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/gdas.{{ PDY }}/{{ HH }}/atmos/input/gfs_ctrl.nc, + - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/gdas.{{ PDY }}/{{ HH }}/atmos/input/gfs_ctrl.nc, {{RUNTESTS}}/{{test_name}}//gdas.{{PDY}}/{{HH}}/atmos/input/gfs_ctrl.nc] - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/gdas.{{ PDY }}/{{ HH }}/atmos/input/gfs_data.tile1.nc {{RUNTESTS}}/{{test_name}}//gdas.{{PDY}}/{{HH}}/atmos/input/gfs_data.tile1.nc] From 74fbf45ad85a9b8f94f746be27b0c0d5f3fb8cb8 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Thu, 2 Jan 2025 10:43:39 -0600 Subject: [PATCH 046/195] removed extra $ on JOB var --- ci/ctests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index d0ca0605c0a..f839faba1de 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -26,7 +26,7 @@ function(AddFunctionalTest CASE JOB) set_tests_properties(${TEST_NAME}_create_experiment PROPERTIES LABELS "${CASE};${JOB}") add_test(NAME ${TEST_NAME}_stage - COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/stage_data.py --build_dir ${CMAKE_BINARY_DIR} --case ${CASE} --job $${JOB}") + COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/stage_data.py --build_dir ${CMAKE_BINARY_DIR} --case ${CASE} --job ${JOB}") set_tests_properties(${TEST_NAME}_stage PROPERTIES DEPENDS ${TEST_NAME}_create_experiment LABELS "${CASE};${JOB}") add_test(NAME ${TEST_NAME}_execute From 19600f10cb99c5bf4be4d36c62ee5c4890d3659d Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Thu, 2 Jan 2025 11:31:24 -0600 Subject: [PATCH 047/195] idate needed for PDY --- ci/ctests/scripts/stage_data.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ci/ctests/scripts/stage_data.py b/ci/ctests/scripts/stage_data.py index 55330b9ee64..0f3c9e6dae4 100755 --- a/ci/ctests/scripts/stage_data.py +++ b/ci/ctests/scripts/stage_data.py @@ -39,6 +39,7 @@ def parse_args(): data.update(os.environ) case_yaml_path = Path(f'{data.HOMEgfs}/ci/ctests/cases/{args.case}.yaml') + pr_case_yaml_path = Path(f'{data.HOMEgfs}/ci/cases/pr/{args.case}.yaml') # Initialize host and platform configuration host = Host() @@ -50,6 +51,9 @@ def parse_args(): cfg = Configuration(f'{args.build_dir}/RUNTESTS/EXPDIR/{args.case}_{args.job}') base_cfg = cfg.parse_config('config.base') + pr_case_cfg = parse_j2yaml(path=pr_case_yaml_path, data=data) + print (f'idate: {pr_case_cfg.idate}') + print (base_cfg['PDY']) base_cfg.update(data) From 2caa229ae3ff286debd9fa5d531a23ccc4881a4d Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Thu, 2 Jan 2025 12:50:11 -0600 Subject: [PATCH 048/195] updated stage data with idate for PDY and HH and made sure paths where correct --- ci/ctests/cases/C48_ATM.yaml | 39 +++++++++++++++++---------------- ci/ctests/scripts/stage_data.py | 12 +++++----- 2 files changed, 26 insertions(+), 25 deletions(-) diff --git a/ci/ctests/cases/C48_ATM.yaml b/ci/ctests/cases/C48_ATM.yaml index 31ec1c43f1d..7a57ed071b3 100644 --- a/ci/ctests/cases/C48_ATM.yaml +++ b/ci/ctests/cases/C48_ATM.yaml @@ -1,24 +1,25 @@ gfs_fcst: input_files: copy: - - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/gdas.{{ PDY }}/{{ HH }}/atmos/input/gfs_ctrl.nc, - {{RUNTESTS}}/{{test_name}}//gdas.{{PDY}}/{{HH}}/atmos/input/gfs_ctrl.nc] - - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/gdas.{{ PDY }}/{{ HH }}/atmos/input/gfs_data.tile1.nc - {{RUNTESTS}}/{{test_name}}//gdas.{{PDY}}/{{HH}}/atmos/input/gfs_data.tile1.nc] - - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/gdas.{{ PDY }}/{{ HH }}/atmos/input/gfs_data.tile2.nc - {{RUNTESTS}}/{{test_name}}//gdas.{{PDY}}/{{HH}}/atmos/input/gfs_data.tile2.nc] - - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/gdas.{{ PDY }}/{{ HH }}/atmos/input/gfs_data.tile3.nc - {{RUNTESTS}}/{{test_name}}//gdas.{{PDY}}/{{HH}}/atmos/input/gfs_data.tile3.nc] - - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/gdas.{{ PDY }}/{{ HH }}/atmos/input/gfs_data.tile4.nc - {{RUNTESTS}}/{{test_name}}//gdas.{{PDY}}/{{HH}}/atmos/input/gfs_data.tile4.nc] - - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/gdas.{{ PDY }}/{{ HH }}/atmos/input/gfs_data.tile5.nc - {{RUNTESTS}}/{{test_name}}//gdas.{{PDY}}/{{HH}}/atmos/input/gfs_data.tile5.nc] - - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/gdas.{{ PDY }}/{{ HH }}/atmos/input/gfs_data.tile6.nc - {{RUNTESTS}}/{{test_name}}//gdas.{{PDY}}/{{HH}}/atmos/input/gfs_data.tile6.nc] + - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_ctrl.nc, + {{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_ctrl.nc] - output_files: use_jinja_template_fcst + - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile1.nc + {{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile1.nc] + + - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile2.nc + {{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile2.nc] + + - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile3.nc + {{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile3.nc] + + - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile4.nc + {{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile4.nc] -gfs_atmos_pro: - staged_datapath: {{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ testcase }}/gfs_atmos_prod - input_files: use_jinja_template_gfs_atmos_pro - output_files: use_jinja_template_gfs_atmos_pro + - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile5.nc + {{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}///gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile5.nc] + + - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile6.nc + {{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile6.nc] + + output_files: use_jinja_template_fcst diff --git a/ci/ctests/scripts/stage_data.py b/ci/ctests/scripts/stage_data.py index 0f3c9e6dae4..20dd3384d67 100755 --- a/ci/ctests/scripts/stage_data.py +++ b/ci/ctests/scripts/stage_data.py @@ -52,11 +52,11 @@ def parse_args(): base_cfg = cfg.parse_config('config.base') pr_case_cfg = parse_j2yaml(path=pr_case_yaml_path, data=data) - print (f'idate: {pr_case_cfg.idate}') - - print (base_cfg['PDY']) - + data["PDY"]=str(pr_case_cfg.arguments.idate)[0:8] + data["HH"]=str(pr_case_cfg.arguments.idate)[8:10] + data["case"]=args.case + data["RUNTESTS"]=Path.joinpath(args.build_dir,"RUNTESTS") + data["JOB"]=args.job base_cfg.update(data) - case_cfg = parse_j2yaml(path=case_yaml_path, data=data) - print (case_cfg) + print (case_cfg.gfs_fcst.input_files.copy) From 749e54faa4276d201f1469714533b54547e2676b Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Thu, 2 Jan 2025 13:15:34 -0600 Subject: [PATCH 049/195] added copy using FIleHandler --- ci/ctests/scripts/stage_data.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/ci/ctests/scripts/stage_data.py b/ci/ctests/scripts/stage_data.py index 20dd3384d67..ea355d252db 100755 --- a/ci/ctests/scripts/stage_data.py +++ b/ci/ctests/scripts/stage_data.py @@ -47,16 +47,13 @@ def parse_args(): platform_config = cfg.parse_config(f'config.{host.machine.lower()}') data.update(platform_config) - print(f'{args.build_dir}/RUNTESTS/EXPDIR/{args.case}_{args.job}') - cfg = Configuration(f'{args.build_dir}/RUNTESTS/EXPDIR/{args.case}_{args.job}') - base_cfg = cfg.parse_config('config.base') - pr_case_cfg = parse_j2yaml(path=pr_case_yaml_path, data=data) data["PDY"]=str(pr_case_cfg.arguments.idate)[0:8] data["HH"]=str(pr_case_cfg.arguments.idate)[8:10] data["case"]=args.case data["RUNTESTS"]=Path.joinpath(args.build_dir,"RUNTESTS") data["JOB"]=args.job - base_cfg.update(data) case_cfg = parse_j2yaml(path=case_yaml_path, data=data) - print (case_cfg.gfs_fcst.input_files.copy) + + for file in case_cfg['copy']: + file.sync() From 75450e166d49fceff33b6e327c67f323ccaaa230 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Thu, 2 Jan 2025 13:45:20 -0600 Subject: [PATCH 050/195] copy command needs quotes --- ci/ctests/cases/C48_ATM.yaml | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/ci/ctests/cases/C48_ATM.yaml b/ci/ctests/cases/C48_ATM.yaml index 7a57ed071b3..785e17b63a9 100644 --- a/ci/ctests/cases/C48_ATM.yaml +++ b/ci/ctests/cases/C48_ATM.yaml @@ -1,25 +1,25 @@ gfs_fcst: input_files: copy: - - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_ctrl.nc, - {{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_ctrl.nc] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_ctrl.nc", + "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_ctrl.nc"] - - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile1.nc - {{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile1.nc] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile1.nc", + "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile1.nc"] - - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile2.nc - {{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile2.nc] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile2.nc", + "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile2.nc"] - - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile3.nc - {{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile3.nc] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile3.nc", + "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile3.nc"] - - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile4.nc - {{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile4.nc] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile4.nc", + "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile4.nc"] - - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile5.nc - {{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}///gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile5.nc] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile5.nc", + "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}///gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile5.nc"] - - [{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile6.nc - {{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile6.nc] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile6.nc", + "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile6.nc"] output_files: use_jinja_template_fcst From 0fc5d76d4909cfa4cfb9bd0cfca485a82e1c1130 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Thu, 2 Jan 2025 13:48:32 -0600 Subject: [PATCH 051/195] added sync() on file handler --- ci/ctests/scripts/stage_data.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/ctests/scripts/stage_data.py b/ci/ctests/scripts/stage_data.py index ea355d252db..914ab8226d3 100755 --- a/ci/ctests/scripts/stage_data.py +++ b/ci/ctests/scripts/stage_data.py @@ -9,7 +9,7 @@ from argparse import ArgumentParser from pathlib import Path from wxflow import Configuration, AttrDict, parse_j2yaml, Logger, logit, which, CommandNotFoundError, ProcessError -from workflow.hosts import Host +from workflow.hosts import Host, FileHandler logger = Logger(level=os.environ.get("LOGGING_LEVEL", "DEBUG"), colored_log=False) @@ -56,4 +56,4 @@ def parse_args(): case_cfg = parse_j2yaml(path=case_yaml_path, data=data) for file in case_cfg['copy']: - file.sync() + FileHandler(file).sync() From ea017378cc75808c3216fbeee2b07a35a2064eb5 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Thu, 2 Jan 2025 14:27:46 -0600 Subject: [PATCH 052/195] got FileUtil to work in stage data --- ci/ctests/cases/C48_ATM.yaml | 37 +++++++++++---------------------- ci/ctests/scripts/stage_data.py | 8 +++---- 2 files changed, 15 insertions(+), 30 deletions(-) diff --git a/ci/ctests/cases/C48_ATM.yaml b/ci/ctests/cases/C48_ATM.yaml index 785e17b63a9..3cc5422f240 100644 --- a/ci/ctests/cases/C48_ATM.yaml +++ b/ci/ctests/cases/C48_ATM.yaml @@ -1,25 +1,12 @@ -gfs_fcst: - input_files: - copy: - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_ctrl.nc", - "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_ctrl.nc"] - - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile1.nc", - "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile1.nc"] - - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile2.nc", - "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile2.nc"] - - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile3.nc", - "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile3.nc"] - - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile4.nc", - "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile4.nc"] - - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile5.nc", - "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}///gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile5.nc"] - - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile6.nc", - "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile6.nc"] - - output_files: use_jinja_template_fcst +gfs_fcst_000: + input_files: + mkdir: + - "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input" + copy: + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_ctrl.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_ctrl.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile1.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile1.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile2.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile2.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile3.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile3.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile4.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile4.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile5.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}///gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile5.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile6.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile6.nc"] diff --git a/ci/ctests/scripts/stage_data.py b/ci/ctests/scripts/stage_data.py index 914ab8226d3..8ccd41b6f99 100755 --- a/ci/ctests/scripts/stage_data.py +++ b/ci/ctests/scripts/stage_data.py @@ -8,8 +8,8 @@ from argparse import ArgumentParser from pathlib import Path -from wxflow import Configuration, AttrDict, parse_j2yaml, Logger, logit, which, CommandNotFoundError, ProcessError -from workflow.hosts import Host, FileHandler +from wxflow import Configuration, AttrDict, parse_j2yaml, Logger, logit, which, CommandNotFoundError, ProcessError, FileHandler +from workflow.hosts import Host logger = Logger(level=os.environ.get("LOGGING_LEVEL", "DEBUG"), colored_log=False) @@ -54,6 +54,4 @@ def parse_args(): data["RUNTESTS"]=Path.joinpath(args.build_dir,"RUNTESTS") data["JOB"]=args.job case_cfg = parse_j2yaml(path=case_yaml_path, data=data) - - for file in case_cfg['copy']: - FileHandler(file).sync() + FileHandler(case_cfg[args.job]['input_files']).sync() From e9c46f14f37325d524bea30f2e6f99de7b09f1c7 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Thu, 2 Jan 2025 15:22:25 -0600 Subject: [PATCH 053/195] got started on execute --- ci/ctests/CMakeLists.txt | 5 ++--- ci/ctests/cases/C48_ATM.yaml | 2 +- ci/ctests/scripts/execute.sh | 7 +++++++ 3 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 ci/ctests/scripts/execute.sh diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index f839faba1de..7f4671443de 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -39,6 +39,5 @@ function(AddFunctionalTest CASE JOB) set_tests_properties(${TEST_NAME}_validate PROPERTIES DEPENDS ${TEST_NAME}_execute LABELS "${CASE};${JOB}") endfunction() -AddFunctionalTest("C48_ATM" "gfs_fcst_000") -AddFunctionalTest("C48_ATM" "gfs_atmos_pro") -AddFunctionalTest("C48_S2SW" "gfs_fcst_000") +AddFunctionalTest("C48_ATM" "gfs_fcst_seg0") +#AddFunctionalTest("C48_S2SW" "gfs_fcst_000") diff --git a/ci/ctests/cases/C48_ATM.yaml b/ci/ctests/cases/C48_ATM.yaml index 3cc5422f240..d799bdd3b33 100644 --- a/ci/ctests/cases/C48_ATM.yaml +++ b/ci/ctests/cases/C48_ATM.yaml @@ -1,4 +1,4 @@ -gfs_fcst_000: +gfs_fcst_seg0: input_files: mkdir: - "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input" diff --git a/ci/ctests/scripts/execute.sh b/ci/ctests/scripts/execute.sh new file mode 100644 index 00000000000..9ff23203cd4 --- /dev/null +++ b/ci/ctests/scripts/execute.sh @@ -0,0 +1,7 @@ +#/usr/bin/env bash + +CASE=$1 +JOB=$1 + +rocotoboot_dryrun=/work2/noaa/global/mterry/rocoto_dryrun/bin/rocotoboot +job_card=$(${rocotoboot_dryrun} -d ${CASE}_${JOB}.db -w ${CASE}/${JOB}.xml -v 10 -c ${idate}00 -t ${JOB}) From 2602166a72777a5bb6739606ce0aa0c679f6a592 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Thu, 2 Jan 2025 15:25:10 -0600 Subject: [PATCH 054/195] execute needed shabang and exit 0 --- ci/ctests/scripts/execute.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ci/ctests/scripts/execute.sh b/ci/ctests/scripts/execute.sh index 9ff23203cd4..5fdb911e305 100644 --- a/ci/ctests/scripts/execute.sh +++ b/ci/ctests/scripts/execute.sh @@ -1,7 +1,10 @@ -#/usr/bin/env bash +#!/usr/bin/env bash CASE=$1 JOB=$1 rocotoboot_dryrun=/work2/noaa/global/mterry/rocoto_dryrun/bin/rocotoboot job_card=$(${rocotoboot_dryrun} -d ${CASE}_${JOB}.db -w ${CASE}/${JOB}.xml -v 10 -c ${idate}00 -t ${JOB}) + +echo -e "scheduler job-card:\n${job_card}" +exit 0 From 1950af4233b355019e6ca080605d0c3f7ad94ae8 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Thu, 2 Jan 2025 15:42:57 -0600 Subject: [PATCH 055/195] almost ready to launch execute.sh --- ci/ctests/CMakeLists.txt | 5 +++-- ci/ctests/scripts/execute.sh | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 7f4671443de..6867406779f 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -30,8 +30,9 @@ function(AddFunctionalTest CASE JOB) set_tests_properties(${TEST_NAME}_stage PROPERTIES DEPENDS ${TEST_NAME}_create_experiment LABELS "${CASE};${JOB}") add_test(NAME ${TEST_NAME}_execute - #COMMAND bash -c "rocotoboot -w RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.xml -d RUNTESTS/EXPDIR/${CASE_NAME}_${GIT_HASH}/workflow.db -t ${JOB_NAME}") - COMMAND bash -c "echo 'submitting running of job ${JOB_NAME}'") + #TODO Need to get the idate for rocotoboot get the right cycle for the test + #TODO Need to add a loop to check for when job has been completed + COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/execute.sh ${CASE} ${JOB}") set_tests_properties(${TEST_NAME}_execute PROPERTIES DEPENDS ${TEST_NAME}_stage LABELS "${CASE};${JOB}") add_test(NAME ${TEST_NAME}_validate diff --git a/ci/ctests/scripts/execute.sh b/ci/ctests/scripts/execute.sh index 5fdb911e305..21f55e14d51 100644 --- a/ci/ctests/scripts/execute.sh +++ b/ci/ctests/scripts/execute.sh @@ -1,7 +1,8 @@ #!/usr/bin/env bash CASE=$1 -JOB=$1 +JOB=$2 +idate=$3 rocotoboot_dryrun=/work2/noaa/global/mterry/rocoto_dryrun/bin/rocotoboot job_card=$(${rocotoboot_dryrun} -d ${CASE}_${JOB}.db -w ${CASE}/${JOB}.xml -v 10 -c ${idate}00 -t ${JOB}) From 276a9bd7cca8e428b7951c1e36999e0e714a6026 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 3 Jan 2025 12:05:04 -0600 Subject: [PATCH 056/195] added working skeleton bash script for execute using rocotoboot with dryrun --- ci/ctests/CMakeLists.txt | 4 ++-- ci/ctests/cases/C48_ATM.yaml | 2 ++ ci/ctests/scripts/execute.sh | 15 ++++++++++++--- 3 files changed, 16 insertions(+), 5 deletions(-) mode change 100644 => 100755 ci/ctests/scripts/execute.sh diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 6867406779f..8dba8e26b52 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -30,9 +30,9 @@ function(AddFunctionalTest CASE JOB) set_tests_properties(${TEST_NAME}_stage PROPERTIES DEPENDS ${TEST_NAME}_create_experiment LABELS "${CASE};${JOB}") add_test(NAME ${TEST_NAME}_execute - #TODO Need to get the idate for rocotoboot get the right cycle for the test + #TODO Need to get the idate for rocotoboot get the right cycle for the test (hard coded for now) #TODO Need to add a loop to check for when job has been completed - COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/execute.sh ${CASE} ${JOB}") + COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/execute.sh ${CASE} ${JOB} 2021032312") set_tests_properties(${TEST_NAME}_execute PROPERTIES DEPENDS ${TEST_NAME}_stage LABELS "${CASE};${JOB}") add_test(NAME ${TEST_NAME}_validate diff --git a/ci/ctests/cases/C48_ATM.yaml b/ci/ctests/cases/C48_ATM.yaml index d799bdd3b33..a4460511f43 100644 --- a/ci/ctests/cases/C48_ATM.yaml +++ b/ci/ctests/cases/C48_ATM.yaml @@ -10,3 +10,5 @@ gfs_fcst_seg0: - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile4.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile4.nc"] - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile5.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}///gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile5.nc"] - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile6.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile6.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile1.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile1.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile2.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile2.nc"] diff --git a/ci/ctests/scripts/execute.sh b/ci/ctests/scripts/execute.sh old mode 100644 new mode 100755 index 21f55e14d51..680c6d89c46 --- a/ci/ctests/scripts/execute.sh +++ b/ci/ctests/scripts/execute.sh @@ -1,11 +1,20 @@ #!/usr/bin/env bash +set -xe + CASE=$1 JOB=$2 idate=$3 rocotoboot_dryrun=/work2/noaa/global/mterry/rocoto_dryrun/bin/rocotoboot -job_card=$(${rocotoboot_dryrun} -d ${CASE}_${JOB}.db -w ${CASE}/${JOB}.xml -v 10 -c ${idate}00 -t ${JOB}) +CASEDIR="RUNTESTS/EXPDIR/${CASE}_${JOB}" +cd "${CASEDIR}" +rm -f *.db +rm -f jobcard + +job_card=$(yes | ${rocotoboot_dryrun} -d ${CASE}_${JOB}.db -w ${CASE}_${JOB}.xml -v 10 -c ${idate}00 -t ${JOB} 2> jobcard) +cat jobcard | sed '/^{{\|^}}/d' | sed '1d' > "${CASE}_${JOB}.sub" + +#TODO Generalize for batch system (hard coded to slurm) -echo -e "scheduler job-card:\n${job_card}" -exit 0 +sbatch < "${CASE}_${JOB}.sub" From 283000eff37ccc02aea0549a99d5789df84251c3 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 3 Jan 2025 12:17:24 -0600 Subject: [PATCH 057/195] added a few ICs that where missed --- ci/ctests/cases/C48_ATM.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ci/ctests/cases/C48_ATM.yaml b/ci/ctests/cases/C48_ATM.yaml index a4460511f43..38972826c32 100644 --- a/ci/ctests/cases/C48_ATM.yaml +++ b/ci/ctests/cases/C48_ATM.yaml @@ -12,3 +12,7 @@ gfs_fcst_seg0: - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile6.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile6.nc"] - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile1.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile1.nc"] - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile2.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile2.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile3.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile3.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile4.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile4.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile5.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile6.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile6.nc"] From b2a6fec9d6fe05469cedf130137e9d148a230153 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 3 Jan 2025 12:47:58 -0600 Subject: [PATCH 058/195] removed extra scripts no longer used --- ci/ctests/scripts/loop_cases_jjobs.cmake | 19 ------------------- ci/ctests/scripts/stage_data.sh | 2 -- 2 files changed, 21 deletions(-) delete mode 100644 ci/ctests/scripts/loop_cases_jjobs.cmake delete mode 100755 ci/ctests/scripts/stage_data.sh diff --git a/ci/ctests/scripts/loop_cases_jjobs.cmake b/ci/ctests/scripts/loop_cases_jjobs.cmake deleted file mode 100644 index e94b8dc6305..00000000000 --- a/ci/ctests/scripts/loop_cases_jjobs.cmake +++ /dev/null @@ -1,19 +0,0 @@ - -# Split CASE_LIST into individual cases -string(REPLACE " " ";" CASE_LIST_SPLIT ${CASE_LIST}) - -# Loop over each case in CASE_LIST_SPLIT -foreach(CASE IN LISTS CASE_LIST_SPLIT) - # Get JOB_NAMES for this CASE from input variable - string(TOUPPER ${CASE} CASE_UPPER) - set(JOB_NAMES_VAR "JOB_NAMES_${CASE_UPPER}") - if(DEFINED ${JOB_NAMES_VAR}) - string(REPLACE " " ";" JOB_NAMES ${${JOB_NAMES_VAR}}) - else() - message(WARNING "No JOB_NAMES provided for ${CASE}") - continue() - endif() - foreach(JOB IN LISTS JOB_NAMES) - AddFunctionalTest(${CASE} ${JOB}) - endforeach() -endforeach() \ No newline at end of file diff --git a/ci/ctests/scripts/stage_data.sh b/ci/ctests/scripts/stage_data.sh deleted file mode 100755 index 8e5e43fa35c..00000000000 --- a/ci/ctests/scripts/stage_data.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env bash -echo "This is a stub for the stage_data script." From 9525c7422aff0ee07d0680f421811edc16fc4f4f Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 3 Jan 2025 16:21:41 -0600 Subject: [PATCH 059/195] added defulted values and over rides from command line --- ci/ctests/CMakeLists.txt | 75 ++++++++++++++++++++++++++++++++-------- 1 file changed, 61 insertions(+), 14 deletions(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 8dba8e26b52..360e3b19b3b 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -4,39 +4,86 @@ project(FunctionalTests) enable_testing() set(CMAKE_VERBOSE_MAKEFILE ON) + +if (DEFINED ENV{GW_BASELINE_DIR} AND NOT DEFINED GW_BASELINE_DIR) + set(GW_BASELINE_DIR $ENV{GW_BASELINE_DIR} CACHE FILEPATH "Path to global-workflow baselines") +else() + get_filename_component(GW_BASELINE_DIR ${CMAKE_SOURCE_DIR}/../.. ABSOLUTE) +endif() + +# If GW_BASELINE_DIR is not defined, tests will not be run, return +if(NOT DEFINED GW_BASELINE_DIR) + message(WARNING "gw: GW_BASELINE_DIR is not defined. Tests will not be run.") + return() +endif() + +if (DEFINED ENV{MACHINE_ID} AND NOT DEFINED MACHINE_ID) + set(MACHINE_ID $ENV{MACHINE_ID} CACHE STRING "Machine ID") +elseif(NOT DEFINED MACHINE_ID) + execute_process( + COMMAND bash -c "source ${GW_BASELINE_DIR}/ush/detect_machine.sh && echo \$MACHINE_ID" + OUTPUT_VARIABLE MACHINE_ID + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +endif() + +if (DEFINED ENV{RUNTESTS} AND NOT DEFINED RUNTESTS) + set(RUNTESTS $ENV{RUNTESTS} CACHE FILEPATH "Path to run global-workflow tests") +elseif( NOT DEFINED RUNTESTS) + set(RUNTESTS ${CMAKE_BINARY_DIR}/RUNTESTS CACHE FILEPATH "Path to run global-workflow tests") +endif() + +if (DEFINED ENV{HPC_ACCOUNT} AND NOT DEFINED HPC_ACCOUNT) + set(HPC_ACCOUNT $ENV{HPC_ACCOUNT} CACHE STRING "Allocation to use for running global-workflow tests") +elseif(NOT DEFINED HPC_ACCOUNT) + execute_process( + COMMAND bash -c "source ${GW_BASELINE_DIR}/ci/platforms/config.${MACHINE_ID} && echo \$HPC_ACCOUNT" + OUTPUT_VARIABLE HPC_ACCOUNT + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +endif() + +if (DEFINED ENV{ICSDIR_ROOT} AND NOT DEFINED ICSDIR_ROOT) + set(ICSDIR_ROOT $ENV{ICSDIR_ROOT} CACHE FILEPATH "Path to ICS directory") +elseif(NOT DEFINED ICSDIR_ROOT) + execute_process( + COMMAND bash -c "source ${CMAKE_SOURCE_DIR}/../platforms/config.${MACHINE_ID} && echo \$ICSDIR_ROOT" + OUTPUT_VARIABLE ICSDIR_ROOT + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + set(ICSDIR_ROOT ${ICSDIR_ROOT} CACHE FILEPATH "Path to ICS directory") +endif() + # Set environment variables and paths -get_filename_component(HOMEgfs ${CMAKE_SOURCE_DIR}/../.. ABSOLUTE) set(CASE_PATH ${HOMEgfs}/ci/cases/pr) set(CREATE_EXPERIMENT_CMD "${HOMEgfs}/workflow/create_experiment.py --overwrite") -# Get the current git commit hash -#message(STATUS "Executing: git rev-parse --short HEAD") -#execute_process( -# COMMAND git rev-parse --short HEAD -# WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} -# OUTPUT_VARIABLE GIT_HASH -# OUTPUT_STRIP_TRAILING_WHITESPACE -#) +message(STATUS "MACHINE_ID: '${MACHINE_ID}'") +message(STATUS "gw: global-workflow baselines will be used from: '${GW_BASELINE_DIR}'") +message(STATUS "gw: global-workflow tests will be run at: '${RUNTESTS}'") +message(STATUS "gw: global-workflow tests will use the allocation: '${HPC_ACCOUNT}'") +message(STATUS "gw: global-workflow tests will use ICSDIR_ROOT: '${ICSDIR_ROOT}'") + +return() -# Function to add Rocoto boot test for a given case and job function(AddFunctionalTest CASE JOB) set(TEST_NAME ${CASE}_${JOB}) add_test(NAME ${TEST_NAME}_create_experiment - COMMAND bash -c "export RUNTESTS=${CMAKE_BINARY_DIR}/RUNTESTS; export pslot=${TEST_NAME}; ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml") + COMMAND bash -c "export pslot=${TEST_NAME}; ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml") set_tests_properties(${TEST_NAME}_create_experiment PROPERTIES LABELS "${CASE};${JOB}") add_test(NAME ${TEST_NAME}_stage - COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/stage_data.py --build_dir ${CMAKE_BINARY_DIR} --case ${CASE} --job ${JOB}") + COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/stage_data.py --build_dir ${CMAKE_BINARY_DIR} --case ${CASE} --job ${JOB}") set_tests_properties(${TEST_NAME}_stage PROPERTIES DEPENDS ${TEST_NAME}_create_experiment LABELS "${CASE};${JOB}") add_test(NAME ${TEST_NAME}_execute #TODO Need to get the idate for rocotoboot get the right cycle for the test (hard coded for now) #TODO Need to add a loop to check for when job has been completed - COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/execute.sh ${CASE} ${JOB} 2021032312") + COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/execute.sh ${CASE} ${JOB} 2021032312") set_tests_properties(${TEST_NAME}_execute PROPERTIES DEPENDS ${TEST_NAME}_stage LABELS "${CASE};${JOB}") add_test(NAME ${TEST_NAME}_validate - COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/validate.sh ${CASE} ${JOB}") + COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/validate.sh ${CASE} ${JOB}") set_tests_properties(${TEST_NAME}_validate PROPERTIES DEPENDS ${TEST_NAME}_execute LABELS "${CASE};${JOB}") endfunction() From 74f7268f207d4a9fe999152c3fa6d1cce159c5aa Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 3 Jan 2025 16:28:03 -0600 Subject: [PATCH 060/195] removed HOMEgfs for path to create expermient --- ci/ctests/CMakeLists.txt | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 360e3b19b3b..91806b7eb17 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -54,17 +54,14 @@ elseif(NOT DEFINED ICSDIR_ROOT) set(ICSDIR_ROOT ${ICSDIR_ROOT} CACHE FILEPATH "Path to ICS directory") endif() -# Set environment variables and paths -set(CASE_PATH ${HOMEgfs}/ci/cases/pr) -set(CREATE_EXPERIMENT_CMD "${HOMEgfs}/workflow/create_experiment.py --overwrite") - message(STATUS "MACHINE_ID: '${MACHINE_ID}'") message(STATUS "gw: global-workflow baselines will be used from: '${GW_BASELINE_DIR}'") message(STATUS "gw: global-workflow tests will be run at: '${RUNTESTS}'") message(STATUS "gw: global-workflow tests will use the allocation: '${HPC_ACCOUNT}'") message(STATUS "gw: global-workflow tests will use ICSDIR_ROOT: '${ICSDIR_ROOT}'") -return() +set(CASE_PATH ${HOMEgfs}/ci/cases/pr) +set(CREATE_EXPERIMENT_CMD "${GW_BASELINE_DIR}/workflow/create_experiment.py --overwrite") function(AddFunctionalTest CASE JOB) set(TEST_NAME ${CASE}_${JOB}) From 5cd1c5ff72a49c35a032d379a831492135f2ac37 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 3 Jan 2025 12:58:12 -0600 Subject: [PATCH 061/195] removed another unused script --- ci/ctests/scripts/generate_ctest_args.py | 70 ------------------------ 1 file changed, 70 deletions(-) delete mode 100755 ci/ctests/scripts/generate_ctest_args.py diff --git a/ci/ctests/scripts/generate_ctest_args.py b/ci/ctests/scripts/generate_ctest_args.py deleted file mode 100755 index 6b81b8aa93a..00000000000 --- a/ci/ctests/scripts/generate_ctest_args.py +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env python3 - -import os, sys -import shutil -_here = os.path.dirname(__file__) -_top = os.path.abspath(os.path.join(os.path.abspath(_here), '../../..')) -sys.path.insert(0, _top) - -from argparse import ArgumentParser -from pathlib import Path -from wxflow import Configuration, AttrDict, parse_j2yaml, Logger, logit, which, CommandNotFoundError, ProcessError -from workflow.hosts import Host - -logger = Logger(level=os.environ.get("LOGGING_LEVEL", "DEBUG"), colored_log=False) - -def parse_args(): - """ - Parse command line arguments. - - Returns - ------- - argparse.Namespace - The parsed command line arguments. - """ - description = """Arguments for creating and updating error log files - """ - parser = ArgumentParser(description=description) - - parser.add_argument('--yaml', help='paths to YAML files for creating functional tests per case', required=True, type=Path, nargs='+') - return parser.parse_args() - -if __name__ == '__main__': - - # Parse command line arguments - args = parse_args() - data = AttrDict(HOMEgfs=_top) - data.update(os.environ) - - # Initialize host and configuration - host = Host() - cfg = Configuration(f'{data.HOMEgfs}/ci/platforms') - - # Initialize dictionaries to hold case names and their job names - case_names = [] - case_jobs = {} - - for yaml in args.yaml: - platform_config = cfg.parse_config(f'config.{host.machine.lower()}') - case_name = os.path.basename(yaml).split('.')[0] - platform_config['testcase'] = case_name - data.update(platform_config) - case_cfg = parse_j2yaml(path=yaml, data=data) - case_cfg.update(platform_config) - - # Collect job names from the YAML file - top_level_entries = [key for key in case_cfg.keys() if isinstance(case_cfg[key], dict)] - job_names = [f"{case_name}_{entry}" for entry in top_level_entries] - case_jobs[case_name.upper()] = ' '.join(job_names) - case_names.append(case_name) - - # Prepare cmake command-line arguments - cmake_args = [ - f"-DCASE_LIST='{ ' '.join(case_names) }'" - ] - for case_upper, jobs in case_jobs.items(): - cmake_args.append(f"-DJOB_NAMES_{case_upper}='{jobs}'") - - for each_arg in cmake_args: - print(each_arg, end=' ') - print() \ No newline at end of file From c132786bc4ed66ccf7a0addc09941f0ee02c7453 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 3 Jan 2025 16:39:02 -0600 Subject: [PATCH 062/195] fixed a few path errors with HOMEgfs still hanging around --- ci/ctests/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 91806b7eb17..a9536db974c 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -60,13 +60,13 @@ message(STATUS "gw: global-workflow tests will be run at: '${RUNTESTS}'") message(STATUS "gw: global-workflow tests will use the allocation: '${HPC_ACCOUNT}'") message(STATUS "gw: global-workflow tests will use ICSDIR_ROOT: '${ICSDIR_ROOT}'") -set(CASE_PATH ${HOMEgfs}/ci/cases/pr) +set(CASE_PATH ${GW_BASELINE_DIR}/ci/cases/pr) set(CREATE_EXPERIMENT_CMD "${GW_BASELINE_DIR}/workflow/create_experiment.py --overwrite") function(AddFunctionalTest CASE JOB) set(TEST_NAME ${CASE}_${JOB}) add_test(NAME ${TEST_NAME}_create_experiment - COMMAND bash -c "export pslot=${TEST_NAME}; ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml") + COMMAND bash -c "export RUNTESTS=${RUNTESTS}; export pslot=${TEST_NAME}; ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml") set_tests_properties(${TEST_NAME}_create_experiment PROPERTIES LABELS "${CASE};${JOB}") add_test(NAME ${TEST_NAME}_stage From e873722f96a1e243f7eadb0d9884d2f2aa8e07e3 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 6 Jan 2025 16:33:40 -0600 Subject: [PATCH 063/195] added cmake_parse_arguments with extras and used inline template for setup.sh --- ci/ctests/CMakeLists.txt | 62 ++++++++++++++++++++++++++-------------- 1 file changed, 40 insertions(+), 22 deletions(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index a9536db974c..91af853edb2 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -47,7 +47,7 @@ if (DEFINED ENV{ICSDIR_ROOT} AND NOT DEFINED ICSDIR_ROOT) set(ICSDIR_ROOT $ENV{ICSDIR_ROOT} CACHE FILEPATH "Path to ICS directory") elseif(NOT DEFINED ICSDIR_ROOT) execute_process( - COMMAND bash -c "source ${CMAKE_SOURCE_DIR}/../platforms/config.${MACHINE_ID} && echo \$ICSDIR_ROOT" + COMMAND bash -c "source ${GW_BASELINE_DIR}/ci/platforms/config.${MACHINE_ID} && echo \$ICSDIR_ROOT" OUTPUT_VARIABLE ICSDIR_ROOT OUTPUT_STRIP_TRAILING_WHITESPACE ) @@ -60,29 +60,47 @@ message(STATUS "gw: global-workflow tests will be run at: '${RUNTESTS}'") message(STATUS "gw: global-workflow tests will use the allocation: '${HPC_ACCOUNT}'") message(STATUS "gw: global-workflow tests will use ICSDIR_ROOT: '${ICSDIR_ROOT}'") -set(CASE_PATH ${GW_BASELINE_DIR}/ci/cases/pr) -set(CREATE_EXPERIMENT_CMD "${GW_BASELINE_DIR}/workflow/create_experiment.py --overwrite") +# Prepare test scripts +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/setup.sh.in + ${CMAKE_CURRENT_BINARY_DIR}/scripts/setup.sh @ONLY) -function(AddFunctionalTest CASE JOB) - set(TEST_NAME ${CASE}_${JOB}) - add_test(NAME ${TEST_NAME}_create_experiment - COMMAND bash -c "export RUNTESTS=${RUNTESTS}; export pslot=${TEST_NAME}; ${CREATE_EXPERIMENT_CMD} --yaml ${CASE_PATH}/${CASE}.yaml") - set_tests_properties(${TEST_NAME}_create_experiment PROPERTIES LABELS "${CASE};${JOB}") - - add_test(NAME ${TEST_NAME}_stage - COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/stage_data.py --build_dir ${CMAKE_BINARY_DIR} --case ${CASE} --job ${JOB}") - set_tests_properties(${TEST_NAME}_stage PROPERTIES DEPENDS ${TEST_NAME}_create_experiment LABELS "${CASE};${JOB}") - - add_test(NAME ${TEST_NAME}_execute - #TODO Need to get the idate for rocotoboot get the right cycle for the test (hard coded for now) - #TODO Need to add a loop to check for when job has been completed - COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/execute.sh ${CASE} ${JOB} 2021032312") - set_tests_properties(${TEST_NAME}_execute PROPERTIES DEPENDS ${TEST_NAME}_stage LABELS "${CASE};${JOB}") +function(AddFunctionalTest) + + set(prefix ARG) + set(novals NOTRAPFPE NOVALGRIND) + set(singlevals CASE JOB) + set(multivals TEST_DEPENDS) + + cmake_parse_arguments(${prefix} + "${novals}" "${singlevals}" "${multivals}" + ${ARGN}) + + set(TEST_NAME test_${ARG_CASE}_${ARG_JOB}) + set(CASE_PATH ${GW_BASELINE_DIR}/ci/cases/pr) + set(CASE_YAML ${CASE_PATH}/${ARG_CASE}.yaml) + + add_test(NAME ${TEST_NAME}_setup + COMMAND ./setup.sh ${TEST_NAME} ${CASE_YAML} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts) + set_tests_properties(${TEST_NAME}_setup PROPERTIES LABELS "${CASE};${JOB}") - add_test(NAME ${TEST_NAME}_validate - COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/validate.sh ${CASE} ${JOB}") - set_tests_properties(${TEST_NAME}_validate PROPERTIES DEPENDS ${TEST_NAME}_execute LABELS "${CASE};${JOB}") + add_test(NAME ${TEST_NAME}_stage + COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/stage_data.py --build_dir ${CMAKE_BINARY_DIR} --case ${ARG_CASE} --job ${ARG_JOB}") + set_tests_properties(${TEST_NAME}_stage PROPERTIES DEPENDS ${TEST_NAME}_setup LABELS "${ARG_CASE};${ARG_JOB}") + + add_test(NAME ${TEST_NAME}_execute + #TODO Need to get the idate for rocotoboot get the right cycle for the test (hard coded for now) + #TODO Need to add a loop to check for when job has been completed + COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/execute.sh ${CASE_ARG} ${JOB_ARG} 2021032312") + set_tests_properties(${TEST_NAME}_execute PROPERTIES DEPENDS ${TEST_NAME}_stage LABELS "${CASE_ARG};${JOB_ARG}") + + add_test(NAME ${TEST_NAME}_validate + COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/validate.sh ${CASE_ARG} ${JOB}") + set_tests_properties(${TEST_NAME}_validate PROPERTIES DEPENDS ${TEST_NAME}_execute LABELS "${CASE_ARG};${JOB}") endfunction() -AddFunctionalTest("C48_ATM" "gfs_fcst_seg0") +AddFunctionalTest( + CASE "C48_ATM" + JOB "gfs_fcst_seg0" +) #AddFunctionalTest("C48_S2SW" "gfs_fcst_000") From 32c5f87f74a31455ee8f860e1f61d520f7ed4b19 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 6 Jan 2025 16:38:26 -0600 Subject: [PATCH 064/195] added template for cmake tests setup.sh --- ci/ctests/scripts/setup.sh.in | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100755 ci/ctests/scripts/setup.sh.in diff --git a/ci/ctests/scripts/setup.sh.in b/ci/ctests/scripts/setup.sh.in new file mode 100755 index 00000000000..3bbf6d4c77a --- /dev/null +++ b/ci/ctests/scripts/setup.sh.in @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +set -ux + +TEST_NAME=${1:?"Name of the test is required"} +YAML_FILE=${2:?"Name of the CI yaml file for the test"} + +# CMake to fill these variables +HOMEgfs="@GW_BASELINE_DIR@" +RUNTESTS="@RUNTESTS@" +ICSDIR_ROOT="@ICSDIR_ROOT@" +HPC_ACCOUNT="@HPC_ACCOUNT@" + +set +x +source "${HOMEgfs}/workflow/gw_setup.sh" +set -x + +pslot="${TEST_NAME}" \ +RUNTESTS="${RUNTESTS}" \ +ICSDIR_ROOT="${ICSDIR_ROOT}" \ +HPC_ACCOUNT="${HPC_ACCOUNT}" \ +"${HOMEgfs}/workflow/create_experiment.py" --yaml "${YAML_FILE}" +rc=$? +if [[ "${rc}" -ne 0 ]]; then + set +x + echo "Failed to create test experiment for '${TEST_NAME}' with yaml file '${YAML_FILE}'" + set -x + exit "${rc}" +fi + +exit 0 From 128d0e6638df4c33e4c0865d931e15e56088668e Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 6 Jan 2025 16:43:38 -0600 Subject: [PATCH 065/195] had to add ARG_ header to labels names for depenancies for setup worked --- ci/ctests/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 91af853edb2..04d2361e7e7 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -82,7 +82,7 @@ function(AddFunctionalTest) add_test(NAME ${TEST_NAME}_setup COMMAND ./setup.sh ${TEST_NAME} ${CASE_YAML} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts) - set_tests_properties(${TEST_NAME}_setup PROPERTIES LABELS "${CASE};${JOB}") + set_tests_properties(${TEST_NAME}_setup PROPERTIES LABELS "${ARG_CASE};${ARG_JOB}") add_test(NAME ${TEST_NAME}_stage COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/stage_data.py --build_dir ${CMAKE_BINARY_DIR} --case ${ARG_CASE} --job ${ARG_JOB}") @@ -101,6 +101,6 @@ endfunction() AddFunctionalTest( CASE "C48_ATM" - JOB "gfs_fcst_seg0" + JOB "gfs_fcst_seg0" ) #AddFunctionalTest("C48_S2SW" "gfs_fcst_000") From abb295257cc7fd93c18daf0bd4011a7a6b75df62 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 6 Jan 2025 17:00:20 -0600 Subject: [PATCH 066/195] added bash wrapper to stage_data.py and made single job per yaml configuation --- ci/ctests/cases/C48_ATM.yaml | 18 ------------------ ci/ctests/scripts/stage.sh.in | 30 ++++++++++++++++++++++++++++++ ci/ctests/scripts/stage_data.py | 4 ++-- 3 files changed, 32 insertions(+), 20 deletions(-) delete mode 100644 ci/ctests/cases/C48_ATM.yaml create mode 100755 ci/ctests/scripts/stage.sh.in diff --git a/ci/ctests/cases/C48_ATM.yaml b/ci/ctests/cases/C48_ATM.yaml deleted file mode 100644 index 38972826c32..00000000000 --- a/ci/ctests/cases/C48_ATM.yaml +++ /dev/null @@ -1,18 +0,0 @@ -gfs_fcst_seg0: - input_files: - mkdir: - - "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input" - copy: - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_ctrl.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_ctrl.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile1.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile1.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile2.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile2.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile3.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile3.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile4.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile4.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile5.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}///gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile5.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile6.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile6.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile1.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile1.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile2.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile2.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile3.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile3.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile4.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile4.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile5.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile5.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile6.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile6.nc"] diff --git a/ci/ctests/scripts/stage.sh.in b/ci/ctests/scripts/stage.sh.in new file mode 100755 index 00000000000..d7a1da35d0c --- /dev/null +++ b/ci/ctests/scripts/stage.sh.in @@ -0,0 +1,30 @@ +#!/usr/bin/env bash + +set -ux + +TEST_NAME=${1:?"Name of the test is required"} + +# CMake to fill these variables +HOMEgfs="@GW_BASELINE_DIR@" + +# Load the runtime environment for this script (needs wxflow and its dependencies) +set +x +source "${HOMEgfs}/workflow/gw_setup.sh" +rc=$? +[[ "${rc}" -ne 0 ]] && exit "${status}" +set -x +PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${HOMEgfs}/sorc/wxflow/src/wxflow" +export PYTHONPATH + +INPUTS_YAML="${HOMEgfs}/tests/inputs/${TEST_NAME}.yaml" + +"${HOMEgfs}/tests/scripts/stage.py" "${INPUTS_YAML}" +rc=$? +if [[ "${rc}" -ne 0 ]]; then + set +x + echo "Failed to stage inputs for '${TEST_NAME}' with '${INPUTS_YAML}'" + set -x + exit "${rc}" +fi + +exit 0 diff --git a/ci/ctests/scripts/stage_data.py b/ci/ctests/scripts/stage_data.py index 8ccd41b6f99..331bdf55279 100755 --- a/ci/ctests/scripts/stage_data.py +++ b/ci/ctests/scripts/stage_data.py @@ -38,7 +38,7 @@ def parse_args(): data = AttrDict(HOMEgfs=_top) data.update(os.environ) - case_yaml_path = Path(f'{data.HOMEgfs}/ci/ctests/cases/{args.case}.yaml') + case_yaml_path = Path(f'{data.HOMEgfs}/ci/ctests/cases/{args.case}_{args.job}.yaml') pr_case_yaml_path = Path(f'{data.HOMEgfs}/ci/cases/pr/{args.case}.yaml') # Initialize host and platform configuration @@ -54,4 +54,4 @@ def parse_args(): data["RUNTESTS"]=Path.joinpath(args.build_dir,"RUNTESTS") data["JOB"]=args.job case_cfg = parse_j2yaml(path=case_yaml_path, data=data) - FileHandler(case_cfg[args.job]['input_files']).sync() + FileHandler(case_cfg.input_files.sync()) From 1d54caf5a0f4f83c04fac8e937cec7d0575f7485 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 6 Jan 2025 17:04:07 -0600 Subject: [PATCH 067/195] added the part to drop in templated inline script for stage.sh --- ci/ctests/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 04d2361e7e7..1f066c4bf84 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -63,6 +63,8 @@ message(STATUS "gw: global-workflow tests will use ICSDIR_ROOT: '${ICSDIR_ROOT}' # Prepare test scripts configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/setup.sh.in ${CMAKE_CURRENT_BINARY_DIR}/scripts/setup.sh @ONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/stage.sh.in + ${CMAKE_CURRENT_BINARY_DIR}/scripts/stage.sh @ONLY) function(AddFunctionalTest) From 253257611d77c06203bf337fb998d7ed518e0ff0 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 6 Jan 2025 17:18:33 -0600 Subject: [PATCH 068/195] getting stage.sh.in args to work for now --- ci/ctests/CMakeLists.txt | 3 ++- ci/ctests/scripts/stage.sh.in | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 1f066c4bf84..043d56c8f16 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -87,7 +87,8 @@ function(AddFunctionalTest) set_tests_properties(${TEST_NAME}_setup PROPERTIES LABELS "${ARG_CASE};${ARG_JOB}") add_test(NAME ${TEST_NAME}_stage - COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/stage_data.py --build_dir ${CMAKE_BINARY_DIR} --case ${ARG_CASE} --job ${ARG_JOB}") + COMMAND ./stage.sh ${TEST_NAME} ${ARG_CASE} ${ARG_JOB} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts set_tests_properties(${TEST_NAME}_stage PROPERTIES DEPENDS ${TEST_NAME}_setup LABELS "${ARG_CASE};${ARG_JOB}") add_test(NAME ${TEST_NAME}_execute diff --git a/ci/ctests/scripts/stage.sh.in b/ci/ctests/scripts/stage.sh.in index d7a1da35d0c..69056f1b841 100755 --- a/ci/ctests/scripts/stage.sh.in +++ b/ci/ctests/scripts/stage.sh.in @@ -16,9 +16,10 @@ set -x PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${HOMEgfs}/sorc/wxflow/src/wxflow" export PYTHONPATH +#TODO - need to use this instead of CACE_JOB by updating the python script INPUTS_YAML="${HOMEgfs}/tests/inputs/${TEST_NAME}.yaml" -"${HOMEgfs}/tests/scripts/stage.py" "${INPUTS_YAML}" +"${HOMEgfs}/tests/scripts/stage.py" --build_dir "${MAKE_CURRENT_BINARY_DIR}" --case "${ARG_CASE}" --job "${ARG_JOB}" rc=$? if [[ "${rc}" -ne 0 ]]; then set +x From 0967f1072cf470423e9d7d903f5bc150dbdfa8bf Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 6 Jan 2025 17:27:55 -0600 Subject: [PATCH 069/195] still getting args straintened out with staging --- ci/ctests/CMakeLists.txt | 2 +- ci/ctests/scripts/{stage_data.py => stage.py} | 0 ci/ctests/scripts/stage.sh.in | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename ci/ctests/scripts/{stage_data.py => stage.py} (100%) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 043d56c8f16..8d9d9bf702a 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -88,7 +88,7 @@ function(AddFunctionalTest) add_test(NAME ${TEST_NAME}_stage COMMAND ./stage.sh ${TEST_NAME} ${ARG_CASE} ${ARG_JOB} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts) set_tests_properties(${TEST_NAME}_stage PROPERTIES DEPENDS ${TEST_NAME}_setup LABELS "${ARG_CASE};${ARG_JOB}") add_test(NAME ${TEST_NAME}_execute diff --git a/ci/ctests/scripts/stage_data.py b/ci/ctests/scripts/stage.py similarity index 100% rename from ci/ctests/scripts/stage_data.py rename to ci/ctests/scripts/stage.py diff --git a/ci/ctests/scripts/stage.sh.in b/ci/ctests/scripts/stage.sh.in index 69056f1b841..2272401ab80 100755 --- a/ci/ctests/scripts/stage.sh.in +++ b/ci/ctests/scripts/stage.sh.in @@ -19,7 +19,7 @@ export PYTHONPATH #TODO - need to use this instead of CACE_JOB by updating the python script INPUTS_YAML="${HOMEgfs}/tests/inputs/${TEST_NAME}.yaml" -"${HOMEgfs}/tests/scripts/stage.py" --build_dir "${MAKE_CURRENT_BINARY_DIR}" --case "${ARG_CASE}" --job "${ARG_JOB}" +"${HOMEgfs}/ci/ctests/scripts/stage.py" --build_dir "${MAKE_CURRENT_BINARY_DIR}" --case "${ARG_CASE}" --job "${ARG_JOB}" rc=$? if [[ "${rc}" -ne 0 ]]; then set +x From 8231519adfe5fd9ec92bb7c02f614e87f32f9df1 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 7 Jan 2025 12:08:14 -0600 Subject: [PATCH 070/195] added args in bash wrapper to stage.py to pick up ARG_CASE and ARG_JOB --- ci/ctests/scripts/stage.sh.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ci/ctests/scripts/stage.sh.in b/ci/ctests/scripts/stage.sh.in index 2272401ab80..67779618824 100755 --- a/ci/ctests/scripts/stage.sh.in +++ b/ci/ctests/scripts/stage.sh.in @@ -3,6 +3,8 @@ set -ux TEST_NAME=${1:?"Name of the test is required"} +CASE=${2:?"Case name for JJOB test"} +JOB=${3:?"Job name for JJOB test"} # CMake to fill these variables HOMEgfs="@GW_BASELINE_DIR@" From 30466b95faae08fc36b52c09786540e58f0df543 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 7 Jan 2025 12:30:54 -0600 Subject: [PATCH 071/195] updated args to stage.py to simply take yaml input --- ci/ctests/CMakeLists.txt | 20 ++++++++++---------- ci/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml | 17 +++++++++++++++++ ci/ctests/scripts/stage.sh.in | 6 ++---- 3 files changed, 29 insertions(+), 14 deletions(-) create mode 100644 ci/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 8d9d9bf702a..b4867a0f398 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -77,29 +77,29 @@ function(AddFunctionalTest) "${novals}" "${singlevals}" "${multivals}" ${ARGN}) - set(TEST_NAME test_${ARG_CASE}_${ARG_JOB}) + set(TEST_NAME ${ARG_CASE}_${ARG_JOB}) set(CASE_PATH ${GW_BASELINE_DIR}/ci/cases/pr) set(CASE_YAML ${CASE_PATH}/${ARG_CASE}.yaml) - add_test(NAME ${TEST_NAME}_setup + add_test(NAME test_${TEST_NAME}_setup COMMAND ./setup.sh ${TEST_NAME} ${CASE_YAML} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts) - set_tests_properties(${TEST_NAME}_setup PROPERTIES LABELS "${ARG_CASE};${ARG_JOB}") + set_tests_properties(test_${TEST_NAME}_setup PROPERTIES LABELS "${ARG_CASE};${ARG_JOB}") - add_test(NAME ${TEST_NAME}_stage - COMMAND ./stage.sh ${TEST_NAME} ${ARG_CASE} ${ARG_JOB} + add_test(NAME test_${TEST_NAME}_stage + COMMAND ./stage.sh ${TEST_NAME}) WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts) - set_tests_properties(${TEST_NAME}_stage PROPERTIES DEPENDS ${TEST_NAME}_setup LABELS "${ARG_CASE};${ARG_JOB}") + set_tests_properties(test_${TEST_NAME}_stage PROPERTIES DEPENDS test_${TEST_NAME}_setup LABELS "${ARG_CASE};${ARG_JOB}") - add_test(NAME ${TEST_NAME}_execute + add_test(NAME test_${TEST_NAME}_execute #TODO Need to get the idate for rocotoboot get the right cycle for the test (hard coded for now) #TODO Need to add a loop to check for when job has been completed COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/execute.sh ${CASE_ARG} ${JOB_ARG} 2021032312") - set_tests_properties(${TEST_NAME}_execute PROPERTIES DEPENDS ${TEST_NAME}_stage LABELS "${CASE_ARG};${JOB_ARG}") + set_tests_properties(test_${TEST_NAME}_execute PROPERTIES DEPENDS test_${TEST_NAME}_stage LABELS "${CASE_ARG};${JOB_ARG}") - add_test(NAME ${TEST_NAME}_validate + add_test(NAME test_${TEST_NAME}_validate COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/validate.sh ${CASE_ARG} ${JOB}") - set_tests_properties(${TEST_NAME}_validate PROPERTIES DEPENDS ${TEST_NAME}_execute LABELS "${CASE_ARG};${JOB}") + set_tests_properties(test_${TEST_NAME}_validate PROPERTIES DEPENDS test_${TEST_NAME}_execute LABELS "${CASE_ARG};${JOB}") endfunction() AddFunctionalTest( diff --git a/ci/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml b/ci/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml new file mode 100644 index 00000000000..b8a7e1cce97 --- /dev/null +++ b/ci/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml @@ -0,0 +1,17 @@ +input_files: + mkdir: + - "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input" + copy: + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_ctrl.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_ctrl.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile1.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile1.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile2.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile2.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile3.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile3.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile4.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile4.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile5.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}///gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile5.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile6.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile6.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile1.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile1.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile2.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile2.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile3.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile3.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile4.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile4.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile5.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile6.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile6.nc"] diff --git a/ci/ctests/scripts/stage.sh.in b/ci/ctests/scripts/stage.sh.in index 67779618824..0a1547c58e8 100755 --- a/ci/ctests/scripts/stage.sh.in +++ b/ci/ctests/scripts/stage.sh.in @@ -3,8 +3,6 @@ set -ux TEST_NAME=${1:?"Name of the test is required"} -CASE=${2:?"Case name for JJOB test"} -JOB=${3:?"Job name for JJOB test"} # CMake to fill these variables HOMEgfs="@GW_BASELINE_DIR@" @@ -19,9 +17,9 @@ PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${HOMEgfs}/sorc/wxflow/src/wxflow" export PYTHONPATH #TODO - need to use this instead of CACE_JOB by updating the python script -INPUTS_YAML="${HOMEgfs}/tests/inputs/${TEST_NAME}.yaml" +INPUTS_YAML="${HOMEgfs}/ci/ctest/cases/${TEST_NAME}.yaml" -"${HOMEgfs}/ci/ctests/scripts/stage.py" --build_dir "${MAKE_CURRENT_BINARY_DIR}" --case "${ARG_CASE}" --job "${ARG_JOB}" +"${HOMEgfs}/ci/ctests/scripts/stage.py" --build_dir "${MAKE_CURRENT_BINARY_DIR}" --yaml "${INPUTS_YAML}" rc=$? if [[ "${rc}" -ne 0 ]]; then set +x From 3deeb41bc3750e0f693dd5a4bd9fd66eb49b0f5a Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 7 Jan 2025 12:32:28 -0600 Subject: [PATCH 072/195] had extra ) for updated add_test --- ci/ctests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index b4867a0f398..a73efe42df1 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -87,7 +87,7 @@ function(AddFunctionalTest) set_tests_properties(test_${TEST_NAME}_setup PROPERTIES LABELS "${ARG_CASE};${ARG_JOB}") add_test(NAME test_${TEST_NAME}_stage - COMMAND ./stage.sh ${TEST_NAME}) + COMMAND ./stage.sh ${TEST_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts) set_tests_properties(test_${TEST_NAME}_stage PROPERTIES DEPENDS test_${TEST_NAME}_setup LABELS "${ARG_CASE};${ARG_JOB}") From 099a2cb60ed3a57c4c4cfa188a557fc8971a0303 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 7 Jan 2025 12:43:12 -0600 Subject: [PATCH 073/195] removed reading of pr case file for getting idate --- ci/ctests/scripts/stage.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/ci/ctests/scripts/stage.py b/ci/ctests/scripts/stage.py index 331bdf55279..4d89b1a7ac9 100755 --- a/ci/ctests/scripts/stage.py +++ b/ci/ctests/scripts/stage.py @@ -26,20 +26,22 @@ def parse_args(): """ parser = ArgumentParser(description=description) - parser.add_argument('--case', help='Case name', required=True, type=str) - parser.add_argument('--job', help='Job name', required=True, type=str) parser.add_argument('--build_dir', help='CMake build directory', required=False, type=Path, default=None) + parser.add_argument('-y', '--yaml', help='full path to yaml file describing the job test configuration', type=Path, required=True) return parser.parse_args() if __name__ == '__main__': + # TODO get idate + idate = "2021032312" + # Parse command line arguments args = parse_args() data = AttrDict(HOMEgfs=_top) data.update(os.environ) - case_yaml_path = Path(f'{data.HOMEgfs}/ci/ctests/cases/{args.case}_{args.job}.yaml') - pr_case_yaml_path = Path(f'{data.HOMEgfs}/ci/cases/pr/{args.case}.yaml') + case_yaml_path = Path(f'{data.HOMEgfs}/ci/ctests/cases/{args.yaml}') + #pr_case_yaml_path = Path(f'{data.HOMEgfs}/ci/cases/pr/{args.case}.yaml') # Initialize host and platform configuration host = Host() @@ -47,11 +49,11 @@ def parse_args(): platform_config = cfg.parse_config(f'config.{host.machine.lower()}') data.update(platform_config) - pr_case_cfg = parse_j2yaml(path=pr_case_yaml_path, data=data) - data["PDY"]=str(pr_case_cfg.arguments.idate)[0:8] - data["HH"]=str(pr_case_cfg.arguments.idate)[8:10] - data["case"]=args.case + #pr_case_cfg = parse_j2yaml(path=pr_case_yaml_path, data=data) + #data["PDY"]=str(pr_case_cfg.arguments.idate)[0:8] + #data["HH"]=str(pr_case_cfg.arguments.idate)[8:10] + data["PDY"]=str(idate)[0:8] + data["HH"]=str(idate)[8:10] data["RUNTESTS"]=Path.joinpath(args.build_dir,"RUNTESTS") - data["JOB"]=args.job case_cfg = parse_j2yaml(path=case_yaml_path, data=data) FileHandler(case_cfg.input_files.sync()) From 94dd64e1ab03fae6bbcb3fc0b5fd21260b9d59c4 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 7 Jan 2025 12:47:21 -0600 Subject: [PATCH 074/195] replaced JOB_CASE in path for inputs to TEST_NAME --- ci/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml | 28 +++++++++++----------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/ci/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml b/ci/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml index b8a7e1cce97..ec76ed794ea 100644 --- a/ci/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml +++ b/ci/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml @@ -1,17 +1,17 @@ input_files: mkdir: - - "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input" + - "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}//gfs.{{PDY}}/{{HH}}/model/atmos/input" copy: - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_ctrl.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_ctrl.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile1.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile1.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile2.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile2.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile3.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile3.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile4.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile4.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile5.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}///gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile5.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile6.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile6.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile1.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile1.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile2.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile2.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile3.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile3.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile4.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile4.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile5.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile5.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{case}}/{{JOB}}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile6.nc", "{{RUNTESTS}}/COMROOT/{{case}}_{{JOB}}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile6.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_ctrl.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_ctrl.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile1.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile1.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile2.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile2.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile3.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile3.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile4.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile4.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile5.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}///gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile5.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile6.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile6.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile1.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile1.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile2.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile2.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile3.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile3.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile4.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile4.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile5.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile6.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile6.nc"] From a98d55d6c02065d5f4c7171d567994b8a747d863 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 7 Jan 2025 12:57:09 -0600 Subject: [PATCH 075/195] updated path to yaml input to stage --- ci/ctests/scripts/stage.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ci/ctests/scripts/stage.py b/ci/ctests/scripts/stage.py index 4d89b1a7ac9..945e7ae9528 100755 --- a/ci/ctests/scripts/stage.py +++ b/ci/ctests/scripts/stage.py @@ -40,7 +40,6 @@ def parse_args(): data = AttrDict(HOMEgfs=_top) data.update(os.environ) - case_yaml_path = Path(f'{data.HOMEgfs}/ci/ctests/cases/{args.yaml}') #pr_case_yaml_path = Path(f'{data.HOMEgfs}/ci/cases/pr/{args.case}.yaml') # Initialize host and platform configuration @@ -55,5 +54,5 @@ def parse_args(): data["PDY"]=str(idate)[0:8] data["HH"]=str(idate)[8:10] data["RUNTESTS"]=Path.joinpath(args.build_dir,"RUNTESTS") - case_cfg = parse_j2yaml(path=case_yaml_path, data=data) + case_cfg = parse_j2yaml(path=args.yaml, data=data) FileHandler(case_cfg.input_files.sync()) From 29517e3346d7512bfb7f0a37f98ecb36a9c33383 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 7 Jan 2025 13:00:18 -0600 Subject: [PATCH 076/195] ctest dir is ctests in path to YAML file for stage.py --- ci/ctests/scripts/stage.sh.in | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ci/ctests/scripts/stage.sh.in b/ci/ctests/scripts/stage.sh.in index 0a1547c58e8..ab73d1fbd19 100755 --- a/ci/ctests/scripts/stage.sh.in +++ b/ci/ctests/scripts/stage.sh.in @@ -16,8 +16,7 @@ set -x PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${HOMEgfs}/sorc/wxflow/src/wxflow" export PYTHONPATH -#TODO - need to use this instead of CACE_JOB by updating the python script -INPUTS_YAML="${HOMEgfs}/ci/ctest/cases/${TEST_NAME}.yaml" +INPUTS_YAML="${HOMEgfs}/ci/ctests/cases/${TEST_NAME}.yaml" "${HOMEgfs}/ci/ctests/scripts/stage.py" --build_dir "${MAKE_CURRENT_BINARY_DIR}" --yaml "${INPUTS_YAML}" rc=$? From 60a61363df9aa354fe3da583ee64b5ea7265229f Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 7 Jan 2025 13:34:39 -0600 Subject: [PATCH 077/195] finilized inputs to make stage.py to work without using CASE+JOB --- ci/ctests/scripts/setup.sh.in | 2 +- ci/ctests/scripts/stage.py | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ci/ctests/scripts/setup.sh.in b/ci/ctests/scripts/setup.sh.in index 3bbf6d4c77a..93d85b93542 100755 --- a/ci/ctests/scripts/setup.sh.in +++ b/ci/ctests/scripts/setup.sh.in @@ -19,7 +19,7 @@ pslot="${TEST_NAME}" \ RUNTESTS="${RUNTESTS}" \ ICSDIR_ROOT="${ICSDIR_ROOT}" \ HPC_ACCOUNT="${HPC_ACCOUNT}" \ -"${HOMEgfs}/workflow/create_experiment.py" --yaml "${YAML_FILE}" +"${HOMEgfs}/workflow/create_experiment.py" --yaml "${YAML_FILE}" --overwrite rc=$? if [[ "${rc}" -ne 0 ]]; then set +x diff --git a/ci/ctests/scripts/stage.py b/ci/ctests/scripts/stage.py index 945e7ae9528..c10045ecd14 100755 --- a/ci/ctests/scripts/stage.py +++ b/ci/ctests/scripts/stage.py @@ -32,17 +32,12 @@ def parse_args(): if __name__ == '__main__': - # TODO get idate - idate = "2021032312" - # Parse command line arguments args = parse_args() data = AttrDict(HOMEgfs=_top) data.update(os.environ) - #pr_case_yaml_path = Path(f'{data.HOMEgfs}/ci/cases/pr/{args.case}.yaml') - - # Initialize host and platform configuration + # Initialize host and platform configuration for getting PATH to staged data per machine host = Host() cfg = Configuration(f'{data.HOMEgfs}/ci/platforms') platform_config = cfg.parse_config(f'config.{host.machine.lower()}') @@ -51,8 +46,13 @@ def parse_args(): #pr_case_cfg = parse_j2yaml(path=pr_case_yaml_path, data=data) #data["PDY"]=str(pr_case_cfg.arguments.idate)[0:8] #data["HH"]=str(pr_case_cfg.arguments.idate)[8:10] + + # TODO get idate in lue of above + idate = "2021032312" + data["PDY"]=str(idate)[0:8] data["HH"]=str(idate)[8:10] data["RUNTESTS"]=Path.joinpath(args.build_dir,"RUNTESTS") + data["TEST_NAME"]=args.yaml.stem case_cfg = parse_j2yaml(path=args.yaml, data=data) - FileHandler(case_cfg.input_files.sync()) + FileHandler(case_cfg.input_files).sync() From b977e52c8fad07cdebf80cccce3d4dfb65c14e47 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 7 Jan 2025 14:12:19 -0600 Subject: [PATCH 078/195] mnissed a couple or ARGS_ again this time in execute --- ci/ctests/CMakeLists.txt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index a73efe42df1..06d86e938e1 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -98,12 +98,11 @@ function(AddFunctionalTest) set_tests_properties(test_${TEST_NAME}_execute PROPERTIES DEPENDS test_${TEST_NAME}_stage LABELS "${CASE_ARG};${JOB_ARG}") add_test(NAME test_${TEST_NAME}_validate - COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/validate.sh ${CASE_ARG} ${JOB}") - set_tests_properties(test_${TEST_NAME}_validate PROPERTIES DEPENDS test_${TEST_NAME}_execute LABELS "${CASE_ARG};${JOB}") + COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/validate.sh ${CASE_ARG} ${JOB_ARG}") + set_tests_properties(test_${TEST_NAME}_validate PROPERTIES DEPENDS test_${TEST_NAME}_execute LABELS "${CASE_ARG};${JOB_ARG}") endfunction() AddFunctionalTest( CASE "C48_ATM" - JOB "gfs_fcst_seg0" + JOB "gfs_fcst_seg0" ) -#AddFunctionalTest("C48_S2SW" "gfs_fcst_000") From 95be9f2df8a431076cdd72353d0e712d0833733d Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 7 Jan 2025 14:22:34 -0600 Subject: [PATCH 079/195] ARG are prefixes in execute add test --- ci/ctests/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 06d86e938e1..637ca35b43d 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -95,11 +95,11 @@ function(AddFunctionalTest) #TODO Need to get the idate for rocotoboot get the right cycle for the test (hard coded for now) #TODO Need to add a loop to check for when job has been completed COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/execute.sh ${CASE_ARG} ${JOB_ARG} 2021032312") - set_tests_properties(test_${TEST_NAME}_execute PROPERTIES DEPENDS test_${TEST_NAME}_stage LABELS "${CASE_ARG};${JOB_ARG}") + set_tests_properties(test_${TEST_NAME}_execute PROPERTIES DEPENDS test_${TEST_NAME}_stage LABELS "${ARG_CASE};${ARG_JOB}") add_test(NAME test_${TEST_NAME}_validate COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/validate.sh ${CASE_ARG} ${JOB_ARG}") - set_tests_properties(test_${TEST_NAME}_validate PROPERTIES DEPENDS test_${TEST_NAME}_execute LABELS "${CASE_ARG};${JOB_ARG}") + set_tests_properties(test_${TEST_NAME}_validate PROPERTIES DEPENDS test_${TEST_NAME}_execute LABELS "${ARG_CASE};${ARG_JOB}") endfunction() AddFunctionalTest( From e9b0b6ac142f05d436e86e5e319140666acc8b18 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 7 Jan 2025 14:25:38 -0600 Subject: [PATCH 080/195] ARG are prefixes in execute add test 2 --- ci/ctests/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 637ca35b43d..b48852a689f 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -94,11 +94,11 @@ function(AddFunctionalTest) add_test(NAME test_${TEST_NAME}_execute #TODO Need to get the idate for rocotoboot get the right cycle for the test (hard coded for now) #TODO Need to add a loop to check for when job has been completed - COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/execute.sh ${CASE_ARG} ${JOB_ARG} 2021032312") + COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/execute.sh ${ARG_CASE} ${ARG_JOG} 2021032312") set_tests_properties(test_${TEST_NAME}_execute PROPERTIES DEPENDS test_${TEST_NAME}_stage LABELS "${ARG_CASE};${ARG_JOB}") add_test(NAME test_${TEST_NAME}_validate - COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/validate.sh ${CASE_ARG} ${JOB_ARG}") + COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/validate.sh ${ARG_CASE} ${ARG_JOB}") set_tests_properties(test_${TEST_NAME}_validate PROPERTIES DEPENDS test_${TEST_NAME}_execute LABELS "${ARG_CASE};${ARG_JOB}") endfunction() From a72827c2e2e32b15fcf3ed5339956acf4cf08002 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 7 Jan 2025 14:28:13 -0600 Subject: [PATCH 081/195] ARG are prefixes in execute add test 3 --- ci/ctests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index b48852a689f..197b0f09684 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -94,7 +94,7 @@ function(AddFunctionalTest) add_test(NAME test_${TEST_NAME}_execute #TODO Need to get the idate for rocotoboot get the right cycle for the test (hard coded for now) #TODO Need to add a loop to check for when job has been completed - COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/execute.sh ${ARG_CASE} ${ARG_JOG} 2021032312") + COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/execute.sh ${ARG_CASE} ${ARG_JOB} 2021032312") set_tests_properties(test_${TEST_NAME}_execute PROPERTIES DEPENDS test_${TEST_NAME}_stage LABELS "${ARG_CASE};${ARG_JOB}") add_test(NAME test_${TEST_NAME}_validate From 4f010a46dbacf38d1886dca0cc76805ef9bfc715 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 7 Jan 2025 14:57:02 -0600 Subject: [PATCH 082/195] added MAKE_CURRENT_BINARY_DIR as templated VAR in stage --- ci/ctests/scripts/stage.sh.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/ctests/scripts/stage.sh.in b/ci/ctests/scripts/stage.sh.in index ab73d1fbd19..61f78287b9f 100755 --- a/ci/ctests/scripts/stage.sh.in +++ b/ci/ctests/scripts/stage.sh.in @@ -18,7 +18,7 @@ export PYTHONPATH INPUTS_YAML="${HOMEgfs}/ci/ctests/cases/${TEST_NAME}.yaml" -"${HOMEgfs}/ci/ctests/scripts/stage.py" --build_dir "${MAKE_CURRENT_BINARY_DIR}" --yaml "${INPUTS_YAML}" +"${HOMEgfs}/ci/ctests/scripts/stage.py" --build_dir "@CMAKE_CURRENT_BINARY_DIR@" --yaml "${INPUTS_YAML}" rc=$? if [[ "${rc}" -ne 0 ]]; then set +x From b79d4452f57612cb82ddda8312e40b9aa1f5c5a8 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 7 Jan 2025 15:22:20 -0600 Subject: [PATCH 083/195] made execute bash sript a template too --- ci/ctests/CMakeLists.txt | 4 +++- ci/ctests/scripts/execute.sh | 20 -------------------- ci/ctests/scripts/execute.sh.in | 21 +++++++++++++++++++++ 3 files changed, 24 insertions(+), 21 deletions(-) delete mode 100755 ci/ctests/scripts/execute.sh create mode 100755 ci/ctests/scripts/execute.sh.in diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 197b0f09684..7c4b4a6061c 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -65,6 +65,8 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/setup.sh.in ${CMAKE_CURRENT_BINARY_DIR}/scripts/setup.sh @ONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/stage.sh.in ${CMAKE_CURRENT_BINARY_DIR}/scripts/stage.sh @ONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/execute.sh.in + ${CMAKE_CURRENT_BINARY_DIR}/scripts/execute.sh @ONLY) function(AddFunctionalTest) @@ -94,7 +96,7 @@ function(AddFunctionalTest) add_test(NAME test_${TEST_NAME}_execute #TODO Need to get the idate for rocotoboot get the right cycle for the test (hard coded for now) #TODO Need to add a loop to check for when job has been completed - COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/execute.sh ${ARG_CASE} ${ARG_JOB} 2021032312") + COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/execute.sh ${TEST_NAME} ${ARG_JOB} 2021032312") set_tests_properties(test_${TEST_NAME}_execute PROPERTIES DEPENDS test_${TEST_NAME}_stage LABELS "${ARG_CASE};${ARG_JOB}") add_test(NAME test_${TEST_NAME}_validate diff --git a/ci/ctests/scripts/execute.sh b/ci/ctests/scripts/execute.sh deleted file mode 100755 index 680c6d89c46..00000000000 --- a/ci/ctests/scripts/execute.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash - -set -xe - -CASE=$1 -JOB=$2 -idate=$3 - -rocotoboot_dryrun=/work2/noaa/global/mterry/rocoto_dryrun/bin/rocotoboot -CASEDIR="RUNTESTS/EXPDIR/${CASE}_${JOB}" -cd "${CASEDIR}" -rm -f *.db -rm -f jobcard - -job_card=$(yes | ${rocotoboot_dryrun} -d ${CASE}_${JOB}.db -w ${CASE}_${JOB}.xml -v 10 -c ${idate}00 -t ${JOB} 2> jobcard) -cat jobcard | sed '/^{{\|^}}/d' | sed '1d' > "${CASE}_${JOB}.sub" - -#TODO Generalize for batch system (hard coded to slurm) - -sbatch < "${CASE}_${JOB}.sub" diff --git a/ci/ctests/scripts/execute.sh.in b/ci/ctests/scripts/execute.sh.in new file mode 100755 index 00000000000..6ea4c80c869 --- /dev/null +++ b/ci/ctests/scripts/execute.sh.in @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +set -xe + +TEST_NAME=${1:?"Name of the test is required"} +JOB=${2:?"Job name is required"} +# TODO - adding idate by hand for now, need to get this from the test somehow +idate=$3 + +#TODO - add rocotoboot_dryrun to repo some how +rocotoboot_dryrun=/work2/noaa/global/mterry/rocoto_dryrun/bin/rocotoboot +CASEDIR="@CMAKE_CURRENT_BINARY_DIR@/RUNTESTS/EXPDIR/${TEST_NAME}" +cd "${CASEDIR}" +rm -f *.db +rm -f jobcard + +job_card=$(yes | ${rocotoboot_dryrun} -d ${TEST_NAME}.db -w ${TEST_NAME}.xml -v 10 -c ${idate}00 -t ${JOB} 2> jobcard) +cat jobcard | sed '/^{{\|^}}/d' | sed '1d' > "${TEST_NAME}.sub" + +#TODO Generalize for batch system (hard coded to slurm) +sbatch < "${CASE}_${JOB}.sub" From 16cd19f48e04252e385dde728aa0d814cd55a865 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 7 Jan 2025 15:29:11 -0600 Subject: [PATCH 084/195] forgot to save CMakeLists now has updated call to excute from script dir in build --- ci/ctests/CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 7c4b4a6061c..38623b09c3f 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -96,11 +96,12 @@ function(AddFunctionalTest) add_test(NAME test_${TEST_NAME}_execute #TODO Need to get the idate for rocotoboot get the right cycle for the test (hard coded for now) #TODO Need to add a loop to check for when job has been completed - COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/execute.sh ${TEST_NAME} ${ARG_JOB} 2021032312") + COMMAND ./execute.sh ${TEST_NAME} ${ARG_JOB} 2021032312 + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts) set_tests_properties(test_${TEST_NAME}_execute PROPERTIES DEPENDS test_${TEST_NAME}_stage LABELS "${ARG_CASE};${ARG_JOB}") add_test(NAME test_${TEST_NAME}_validate - COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/validate.sh ${ARG_CASE} ${ARG_JOB}") + COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/validate.sh ${TEST_NAME}") set_tests_properties(test_${TEST_NAME}_validate PROPERTIES DEPENDS test_${TEST_NAME}_execute LABELS "${ARG_CASE};${ARG_JOB}") endfunction() From fffb13dd6331852369d4077593767653f11404fc Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 7 Jan 2025 15:33:27 -0600 Subject: [PATCH 085/195] last bug for working execute phase --- ci/ctests/scripts/execute.sh.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/ctests/scripts/execute.sh.in b/ci/ctests/scripts/execute.sh.in index 6ea4c80c869..cd591736321 100755 --- a/ci/ctests/scripts/execute.sh.in +++ b/ci/ctests/scripts/execute.sh.in @@ -18,4 +18,4 @@ job_card=$(yes | ${rocotoboot_dryrun} -d ${TEST_NAME}.db -w ${TEST_NAME}.xml -v cat jobcard | sed '/^{{\|^}}/d' | sed '1d' > "${TEST_NAME}.sub" #TODO Generalize for batch system (hard coded to slurm) -sbatch < "${CASE}_${JOB}.sub" +sbatch < "${TEST_NAME}.sub" From 5c5ac0fe6f2b79bd2d9260113a8ed78389c2d3ad Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 7 Jan 2025 15:43:48 -0600 Subject: [PATCH 086/195] ready to test x coders add for waiting for slurm job to complete --- ci/ctests/scripts/execute.sh.in | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/ci/ctests/scripts/execute.sh.in b/ci/ctests/scripts/execute.sh.in index cd591736321..621ea0f4288 100755 --- a/ci/ctests/scripts/execute.sh.in +++ b/ci/ctests/scripts/execute.sh.in @@ -17,5 +17,23 @@ rm -f jobcard job_card=$(yes | ${rocotoboot_dryrun} -d ${TEST_NAME}.db -w ${TEST_NAME}.xml -v 10 -c ${idate}00 -t ${JOB} 2> jobcard) cat jobcard | sed '/^{{\|^}}/d' | sed '1d' > "${TEST_NAME}.sub" -#TODO Generalize for batch system (hard coded to slurm) -sbatch < "${TEST_NAME}.sub" +#TODO - Generalize for batch system (hard coded to slurm) + +output=$(sbatch "${TEST_NAME}.sub") +job_id=$(echo $output | awk '{print $4}') +echo "Job ${job_id} submitted for test ${TEST_NAME} with job name ${JOB}" + +# Check the status of the Slurm job +while true; do + job_status=$(squeue --job $job_id --noheader --format "%T") + if [[ "$job_status" == "COMPLETED" ]]; then + echo "Job ${job_id} completed successfully." + exit 0 + elif [[ "$job_status" == "FAILED" || "$job_status" == "CANCELLED" || "$job_status" == "TIMEOUT" ]]; then + echo "Job ${job_id} failed with status: $job_status." + exit -1 + else + echo "Job ${job_id} is still running with status: $job_status." + sleep 60 # Check every 60 seconds + fi +done \ No newline at end of file From 06c8e8f18250cd0a5049443a88737a3042ae8011 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 7 Jan 2025 15:50:25 -0600 Subject: [PATCH 087/195] do not need link to wxflow anymore, added it to PYTHONPATH in bash wrappers --- ci/ctests/scripts/wxflow | 1 - 1 file changed, 1 deletion(-) delete mode 120000 ci/ctests/scripts/wxflow diff --git a/ci/ctests/scripts/wxflow b/ci/ctests/scripts/wxflow deleted file mode 120000 index 54d0558aba2..00000000000 --- a/ci/ctests/scripts/wxflow +++ /dev/null @@ -1 +0,0 @@ -../../../sorc/wxflow/src/wxflow \ No newline at end of file From d68b02ee628a26eb1ef784e7681e0348ab0b1e47 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 8 Jan 2025 10:07:14 -0600 Subject: [PATCH 088/195] path to wxflow in PYTHONPATH was wrong in stage template --- ci/ctests/scripts/stage.sh.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/ctests/scripts/stage.sh.in b/ci/ctests/scripts/stage.sh.in index 61f78287b9f..6f84a37a297 100755 --- a/ci/ctests/scripts/stage.sh.in +++ b/ci/ctests/scripts/stage.sh.in @@ -13,7 +13,7 @@ source "${HOMEgfs}/workflow/gw_setup.sh" rc=$? [[ "${rc}" -ne 0 ]] && exit "${status}" set -x -PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${HOMEgfs}/sorc/wxflow/src/wxflow" +PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${HOMEgfs}/sorc/wxflow/src" export PYTHONPATH INPUTS_YAML="${HOMEgfs}/ci/ctests/cases/${TEST_NAME}.yaml" From b0602bc15ba74de130d6fcd11cf14130b3ea0329 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 8 Jan 2025 11:17:39 -0600 Subject: [PATCH 089/195] generlized ARG over-ride and added check for exectution success from log file output for when slurm job id is no longer available after job completes --- ci/ctests/CMakeLists.txt | 32 ++++++++++++++++---------------- ci/ctests/scripts/execute.sh.in | 28 +++++++++++++++++++++++++--- 2 files changed, 41 insertions(+), 19 deletions(-) diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt index 38623b09c3f..6c97fb30a93 100644 --- a/ci/ctests/CMakeLists.txt +++ b/ci/ctests/CMakeLists.txt @@ -4,11 +4,18 @@ project(FunctionalTests) enable_testing() set(CMAKE_VERBOSE_MAKEFILE ON) +function(set_from_env_or_default VAR_NAME ENV_VAR DEFAULT_VALUE) + if (DEFINED ENV{${ENV_VAR}} AND NOT DEFINED ${VAR_NAME}) + set(${VAR_NAME} $ENV{${ENV_VAR}} CACHE STRING "Set from environment variable ${ENV_VAR}") + elseif(NOT DEFINED ${VAR_NAME}) + set(${VAR_NAME} ${DEFAULT_VALUE} CACHE STRING "Default value for ${VAR_NAME}") + endif() +endfunction() if (DEFINED ENV{GW_BASELINE_DIR} AND NOT DEFINED GW_BASELINE_DIR) set(GW_BASELINE_DIR $ENV{GW_BASELINE_DIR} CACHE FILEPATH "Path to global-workflow baselines") else() - get_filename_component(GW_BASELINE_DIR ${CMAKE_SOURCE_DIR}/../.. ABSOLUTE) + get_filename_component(GW_BASELINE_DIR ${CMAKE_SOURCE_DIR}/../.. ABSOLUTE) endif() # If GW_BASELINE_DIR is not defined, tests will not be run, return @@ -17,9 +24,10 @@ if(NOT DEFINED GW_BASELINE_DIR) return() endif() -if (DEFINED ENV{MACHINE_ID} AND NOT DEFINED MACHINE_ID) - set(MACHINE_ID $ENV{MACHINE_ID} CACHE STRING "Machine ID") -elseif(NOT DEFINED MACHINE_ID) +set_from_env_or_default(RUNTESTS RUNTESTS "${CMAKE_BINARY_DIR}/RUNTESTS") + +set_from_env_or_default(MACHINE_ID MACHINE_ID "NOT_DEFINED") +if(${MACHINE_ID} STREQUAL "NOT_DEFINED") execute_process( COMMAND bash -c "source ${GW_BASELINE_DIR}/ush/detect_machine.sh && echo \$MACHINE_ID" OUTPUT_VARIABLE MACHINE_ID @@ -27,15 +35,8 @@ elseif(NOT DEFINED MACHINE_ID) ) endif() -if (DEFINED ENV{RUNTESTS} AND NOT DEFINED RUNTESTS) - set(RUNTESTS $ENV{RUNTESTS} CACHE FILEPATH "Path to run global-workflow tests") -elseif( NOT DEFINED RUNTESTS) - set(RUNTESTS ${CMAKE_BINARY_DIR}/RUNTESTS CACHE FILEPATH "Path to run global-workflow tests") -endif() - -if (DEFINED ENV{HPC_ACCOUNT} AND NOT DEFINED HPC_ACCOUNT) - set(HPC_ACCOUNT $ENV{HPC_ACCOUNT} CACHE STRING "Allocation to use for running global-workflow tests") -elseif(NOT DEFINED HPC_ACCOUNT) +set_from_env_or_default(HPC_ACCOUNT HPC_ACCOUNT "NOT_DEFINED") +if(${HPC_ACCOUNT} STREQUAL "NOT_DEFINED") execute_process( COMMAND bash -c "source ${GW_BASELINE_DIR}/ci/platforms/config.${MACHINE_ID} && echo \$HPC_ACCOUNT" OUTPUT_VARIABLE HPC_ACCOUNT @@ -43,9 +44,8 @@ elseif(NOT DEFINED HPC_ACCOUNT) ) endif() -if (DEFINED ENV{ICSDIR_ROOT} AND NOT DEFINED ICSDIR_ROOT) - set(ICSDIR_ROOT $ENV{ICSDIR_ROOT} CACHE FILEPATH "Path to ICS directory") -elseif(NOT DEFINED ICSDIR_ROOT) +set_from_env_or_default(ICSDIR_ROOT ICSDIR_ROOT "NOT_DEFINED") +if(${ICSDIR_ROOT} STREQUAL "NOT_DEFINED") execute_process( COMMAND bash -c "source ${GW_BASELINE_DIR}/ci/platforms/config.${MACHINE_ID} && echo \$ICSDIR_ROOT" OUTPUT_VARIABLE ICSDIR_ROOT diff --git a/ci/ctests/scripts/execute.sh.in b/ci/ctests/scripts/execute.sh.in index 621ea0f4288..1212108a1c1 100755 --- a/ci/ctests/scripts/execute.sh.in +++ b/ci/ctests/scripts/execute.sh.in @@ -22,18 +22,40 @@ cat jobcard | sed '/^{{\|^}}/d' | sed '1d' > "${TEST_NAME}.sub" output=$(sbatch "${TEST_NAME}.sub") job_id=$(echo $output | awk '{print $4}') echo "Job ${job_id} submitted for test ${TEST_NAME} with job name ${JOB}" +stdout_file=$(scontrol show job $job_id | grep StdOut | awk -F= '{print $2}') # Check the status of the Slurm job +check_stdout_file() { + last_line=$(tail -n 1 "$stdout_file") + if [[ "$last_line" == "END"* && "$last_line" == *"error code 0"* ]]; then + echo "Job ${job_id} completed successfully with END and error code 0." + exit 0 + else + echo "Job ${job_id} did not complete successfully. Last line: $last_line" + exit -1 + fi +} + +# Check the status of the Slurm job +timeout=0 +TIMEOUT=60 while true; do job_status=$(squeue --job $job_id --noheader --format "%T") if [[ "$job_status" == "COMPLETED" ]]; then echo "Job ${job_id} completed successfully." - exit 0 + check_stdout_file elif [[ "$job_status" == "FAILED" || "$job_status" == "CANCELLED" || "$job_status" == "TIMEOUT" ]]; then echo "Job ${job_id} failed with status: $job_status." exit -1 + elif [[ -z "$job_status" ]]; then + echo "Job ${job_id} is no longer in the queue. Checking stdout file." + check_stdout_file else echo "Job ${job_id} is still running with status: $job_status." sleep 60 # Check every 60 seconds - fi -done \ No newline at end of file + timeout=$((timeout+1)) + if [[ $timeout -gt $TIMEOUT ]]; then + echo "Job ${job_id} has been running for more than $TIMEOUT minutes. Exiting." + exit -1 + fi + fi \ No newline at end of file From 30b3f3abd0011ae49fe88ea9b3a5c030fb94cf88 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 8 Jan 2025 12:14:24 -0600 Subject: [PATCH 090/195] should have checked for End not END for success --- ci/ctests/scripts/execute.sh.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/ctests/scripts/execute.sh.in b/ci/ctests/scripts/execute.sh.in index 1212108a1c1..6ee98dd74a6 100755 --- a/ci/ctests/scripts/execute.sh.in +++ b/ci/ctests/scripts/execute.sh.in @@ -27,7 +27,7 @@ stdout_file=$(scontrol show job $job_id | grep StdOut | awk -F= '{print $2}') # Check the status of the Slurm job check_stdout_file() { last_line=$(tail -n 1 "$stdout_file") - if [[ "$last_line" == "END"* && "$last_line" == *"error code 0"* ]]; then + if [[ "$last_line" == "End"* && "$last_line" == *"error code 0"* ]]; then echo "Job ${job_id} completed successfully with END and error code 0." exit 0 else From 42084e71777607bbdb15e1e0c6e8b919806c4b67 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 8 Jan 2025 12:17:11 -0600 Subject: [PATCH 091/195] oops need done at then of loop in execute bash sript --- ci/ctests/scripts/execute.sh.in | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ci/ctests/scripts/execute.sh.in b/ci/ctests/scripts/execute.sh.in index 6ee98dd74a6..753ed54ed11 100755 --- a/ci/ctests/scripts/execute.sh.in +++ b/ci/ctests/scripts/execute.sh.in @@ -58,4 +58,5 @@ while true; do echo "Job ${job_id} has been running for more than $TIMEOUT minutes. Exiting." exit -1 fi - fi \ No newline at end of file + fi +done From 8d71151f295f80dbae13fcdcbed139e9af5ae42d Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 8 Jan 2025 12:42:33 -0600 Subject: [PATCH 092/195] removed C48_S2SW.yaml for functional test as it is not ready yet --- ci/ctests/cases/C48_S2SW.yaml | 9 --------- workflow/generate_workflows.sh | 2 +- 2 files changed, 1 insertion(+), 10 deletions(-) delete mode 100644 ci/ctests/cases/C48_S2SW.yaml diff --git a/ci/ctests/cases/C48_S2SW.yaml b/ci/ctests/cases/C48_S2SW.yaml deleted file mode 100644 index 4c3122a1f78..00000000000 --- a/ci/ctests/cases/C48_S2SW.yaml +++ /dev/null @@ -1,9 +0,0 @@ -fcst_gfs: - staged_datapath: {{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ testcase }}/fcst_gfs - input_files: use_jinja_template_fcst - output_files: use_jinja_template_fcst - -gfs_atmos_pro: - staged_datapath: {{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ testcase }}/gfs_atmos_prod - input_files: use_jinja_template_gfs_atmos_pro - output_files: use_jinja_template_gfs_atmos_pro diff --git a/workflow/generate_workflows.sh b/workflow/generate_workflows.sh index f28a93d520c..a5615a8b0dd 100755 --- a/workflow/generate_workflows.sh +++ b/workflow/generate_workflows.sh @@ -442,7 +442,7 @@ echo "Running create_experiment.py for ${#_yaml_list[@]} cases" for _case in "${_yaml_list[@]}"; do [[ "${_verbose}" == false ]] && echo "${_case}" _pslot="${_case}${_tag}" - _create_exp_cmd="${HOMEgfs}/workflow/create_experiment.py -y ${HOMEgfs}/ci/cases/pr/${_case}.yaml --overwrite" + _create_exp_cmd="./create_experiment.py -y ../ci/cases/pr/${_case}.yaml --overwrite" if [[ "${_verbose}" == true ]]; then pslot=${_pslot} RUNTESTS=${_runtests} ${_create_exp_cmd} else From cf7be283a6fa3a09154b6b5bbca45e7e9f5cfa73 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 8 Jan 2025 14:01:19 -0600 Subject: [PATCH 093/195] working on shellnorms --- ci/ctests/scripts/execute.sh.in | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/ci/ctests/scripts/execute.sh.in b/ci/ctests/scripts/execute.sh.in index 753ed54ed11..88640318ff5 100755 --- a/ci/ctests/scripts/execute.sh.in +++ b/ci/ctests/scripts/execute.sh.in @@ -11,23 +11,23 @@ idate=$3 rocotoboot_dryrun=/work2/noaa/global/mterry/rocoto_dryrun/bin/rocotoboot CASEDIR="@CMAKE_CURRENT_BINARY_DIR@/RUNTESTS/EXPDIR/${TEST_NAME}" cd "${CASEDIR}" -rm -f *.db -rm -f jobcard +rm -f ./*.db +rm -f ./jobcard -job_card=$(yes | ${rocotoboot_dryrun} -d ${TEST_NAME}.db -w ${TEST_NAME}.xml -v 10 -c ${idate}00 -t ${JOB} 2> jobcard) +job_card=$(yes | ${rocotoboot_dryrun} -d ${TEST_NAME}.db -w ${TEST_NAME}.xml -v 10 -c ${idate}00 -t ${JOB} 2> jobcard) || true cat jobcard | sed '/^{{\|^}}/d' | sed '1d' > "${TEST_NAME}.sub" #TODO - Generalize for batch system (hard coded to slurm) output=$(sbatch "${TEST_NAME}.sub") -job_id=$(echo $output | awk '{print $4}') +job_id=$(echo "${output}" | awk '{print $4}') echo "Job ${job_id} submitted for test ${TEST_NAME} with job name ${JOB}" -stdout_file=$(scontrol show job $job_id | grep StdOut | awk -F= '{print $2}') +stdout_file=$(scontrol show job "${job_id}" | grep StdOut | awk -F= '{print $2}') || true # Check the status of the Slurm job check_stdout_file() { last_line=$(tail -n 1 "$stdout_file") - if [[ "$last_line" == "End"* && "$last_line" == *"error code 0"* ]]; then + if [[ "${last_line}" == "End"* && "${last_line}" == *"error code 0"* ]]; then echo "Job ${job_id} completed successfully with END and error code 0." exit 0 else @@ -41,21 +41,21 @@ timeout=0 TIMEOUT=60 while true; do job_status=$(squeue --job $job_id --noheader --format "%T") - if [[ "$job_status" == "COMPLETED" ]]; then + if [[ "${job_status}" == "COMPLETED" ]]; then echo "Job ${job_id} completed successfully." check_stdout_file - elif [[ "$job_status" == "FAILED" || "$job_status" == "CANCELLED" || "$job_status" == "TIMEOUT" ]]; then - echo "Job ${job_id} failed with status: $job_status." + elif [[ "${job_status}" == "FAILED" || "${job_status}" == "CANCELLED" || "${job_status}" == "TIMEOUT" ]]; then + echo "Job ${job_id} failed with status: ${job_status}." exit -1 - elif [[ -z "$job_status" ]]; then + elif [[ -z "${job_status}" ]]; then echo "Job ${job_id} is no longer in the queue. Checking stdout file." check_stdout_file else - echo "Job ${job_id} is still running with status: $job_status." + echo "Job ${job_id} is still running with status: ${job_status}." sleep 60 # Check every 60 seconds timeout=$((timeout+1)) if [[ $timeout -gt $TIMEOUT ]]; then - echo "Job ${job_id} has been running for more than $TIMEOUT minutes. Exiting." + echo "Job ${job_id} has been running for more than ${TIMEOUT} minutes. Exiting." exit -1 fi fi From a49a642dbd475d7ab2fe812b3215a90339ba11f2 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 8 Jan 2025 14:05:49 -0600 Subject: [PATCH 094/195] working on more shellnorms --- ci/ctests/scripts/execute.sh.in | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ci/ctests/scripts/execute.sh.in b/ci/ctests/scripts/execute.sh.in index 88640318ff5..27450601193 100755 --- a/ci/ctests/scripts/execute.sh.in +++ b/ci/ctests/scripts/execute.sh.in @@ -14,8 +14,8 @@ cd "${CASEDIR}" rm -f ./*.db rm -f ./jobcard -job_card=$(yes | ${rocotoboot_dryrun} -d ${TEST_NAME}.db -w ${TEST_NAME}.xml -v 10 -c ${idate}00 -t ${JOB} 2> jobcard) || true -cat jobcard | sed '/^{{\|^}}/d' | sed '1d' > "${TEST_NAME}.sub" +job_card=$(yes | "${rocotoboot_dryrun}" -d "${TEST_NAME}.db" -w "${TEST_NAME}.xml" -v 10 -c "${idate}00" -t "${JOB}" 2> jobcard) || true +cat jobcard | sed '/^{{\|^}}/d' | sed '1d' > "${TEST_NAME}.sub" || true #TODO - Generalize for batch system (hard coded to slurm) @@ -54,7 +54,7 @@ while true; do echo "Job ${job_id} is still running with status: ${job_status}." sleep 60 # Check every 60 seconds timeout=$((timeout+1)) - if [[ $timeout -gt $TIMEOUT ]]; then + if [[ "${timeout}" -gt "${TIMEOUT}" ]]; then echo "Job ${job_id} has been running for more than ${TIMEOUT} minutes. Exiting." exit -1 fi From 466831d9014795cb30dcc6fb3d6c4c7a748943d0 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 8 Jan 2025 14:11:24 -0600 Subject: [PATCH 095/195] working on even more shellnorms --- ci/ctests/scripts/execute.sh.in | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ci/ctests/scripts/execute.sh.in b/ci/ctests/scripts/execute.sh.in index 27450601193..9de78716c96 100755 --- a/ci/ctests/scripts/execute.sh.in +++ b/ci/ctests/scripts/execute.sh.in @@ -26,12 +26,12 @@ stdout_file=$(scontrol show job "${job_id}" | grep StdOut | awk -F= '{print $2}' # Check the status of the Slurm job check_stdout_file() { - last_line=$(tail -n 1 "$stdout_file") + last_line=$(tail -n 1 "${stdout_file}") if [[ "${last_line}" == "End"* && "${last_line}" == *"error code 0"* ]]; then echo "Job ${job_id} completed successfully with END and error code 0." exit 0 else - echo "Job ${job_id} did not complete successfully. Last line: $last_line" + echo "Job ${job_id} did not complete successfully. Last line: ${last_line}" exit -1 fi } @@ -46,7 +46,7 @@ while true; do check_stdout_file elif [[ "${job_status}" == "FAILED" || "${job_status}" == "CANCELLED" || "${job_status}" == "TIMEOUT" ]]; then echo "Job ${job_id} failed with status: ${job_status}." - exit -1 + exit 1 elif [[ -z "${job_status}" ]]; then echo "Job ${job_id} is no longer in the queue. Checking stdout file." check_stdout_file @@ -56,7 +56,7 @@ while true; do timeout=$((timeout+1)) if [[ "${timeout}" -gt "${TIMEOUT}" ]]; then echo "Job ${job_id} has been running for more than ${TIMEOUT} minutes. Exiting." - exit -1 + exit 1 fi fi done From 2d1846114f55312eb5b56e5200a5c39839c8d764 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 8 Jan 2025 14:15:12 -0600 Subject: [PATCH 096/195] working couple more shellnorms --- ci/ctests/scripts/execute.sh.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/ctests/scripts/execute.sh.in b/ci/ctests/scripts/execute.sh.in index 9de78716c96..aef8348a5ca 100755 --- a/ci/ctests/scripts/execute.sh.in +++ b/ci/ctests/scripts/execute.sh.in @@ -32,7 +32,7 @@ check_stdout_file() { exit 0 else echo "Job ${job_id} did not complete successfully. Last line: ${last_line}" - exit -1 + exit 1 fi } @@ -40,7 +40,7 @@ check_stdout_file() { timeout=0 TIMEOUT=60 while true; do - job_status=$(squeue --job $job_id --noheader --format "%T") + job_status=$(squeue --job "${job_id}" --noheader --format "%T") if [[ "${job_status}" == "COMPLETED" ]]; then echo "Job ${job_id} completed successfully." check_stdout_file From 4ee8d8111c5099546b32f55a47140add4746b76e Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 10 Jan 2025 16:08:04 -0600 Subject: [PATCH 097/195] removed scripts used for getting system defaults and added top level CMakeLists.txt to use PROJECT_SOURCE_DIR for HOMEgfs in templiting bash wrapper sripts --- CMakeLists.txt | 27 +++++ ci/ctests/CMakeLists.txt | 111 ------------------ ctests/CMakeLists.txt | 80 +++++++++++++ .../cases/C48_ATM_gfs_fcst_seg0.yaml | 0 {ci/ctests => ctests}/scripts/execute.sh.in | 0 {ci/ctests => ctests}/scripts/setup.sh.in | 2 +- {ci/ctests => ctests}/scripts/stage.py | 22 ---- {ci/ctests => ctests}/scripts/stage.sh.in | 2 +- {ci/ctests => ctests}/scripts/validate.sh | 0 sorc/gsi_enkf.fd | 1 - sorc/gsi_utils.fd | 1 - 11 files changed, 109 insertions(+), 137 deletions(-) create mode 100644 CMakeLists.txt delete mode 100644 ci/ctests/CMakeLists.txt create mode 100644 ctests/CMakeLists.txt rename {ci/ctests => ctests}/cases/C48_ATM_gfs_fcst_seg0.yaml (100%) rename {ci/ctests => ctests}/scripts/execute.sh.in (100%) rename {ci/ctests => ctests}/scripts/setup.sh.in (95%) rename {ci/ctests => ctests}/scripts/stage.py (55%) rename {ci/ctests => ctests}/scripts/stage.sh.in (95%) rename {ci/ctests => ctests}/scripts/validate.sh (100%) delete mode 160000 sorc/gsi_enkf.fd delete mode 160000 sorc/gsi_utils.fd diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000000..2bdc6d749f2 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,27 @@ +# ------------------------------------------------------------------------- # +# Global Workflow +# ------------------------------------------------------------------------- # + +# Check for minimum cmake requirement +cmake_minimum_required( VERSION 3.20 FATAL_ERROR ) + +project(global_workflow VERSION 1.0.0) + +include(GNUInstallDirs) +enable_testing() + +# Build type. +if(NOT CMAKE_BUILD_TYPE MATCHES "^(Debug|Release|RelWithDebInfo|MinSizeRel)$") + message(STATUS "Setting build type to 'Release' as none was specified.") + set(CMAKE_BUILD_TYPE + "Release" + CACHE STRING "Choose the type of build." FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" + "MinSizeRel" "RelWithDebInfo") +endif() + +# Build global-workflow source codes +# add_subdirectory(sorc) + +# Setup tests +add_subdirectory(ctests) \ No newline at end of file diff --git a/ci/ctests/CMakeLists.txt b/ci/ctests/CMakeLists.txt deleted file mode 100644 index 6c97fb30a93..00000000000 --- a/ci/ctests/CMakeLists.txt +++ /dev/null @@ -1,111 +0,0 @@ -cmake_minimum_required(VERSION 3.10) - -project(FunctionalTests) -enable_testing() -set(CMAKE_VERBOSE_MAKEFILE ON) - -function(set_from_env_or_default VAR_NAME ENV_VAR DEFAULT_VALUE) - if (DEFINED ENV{${ENV_VAR}} AND NOT DEFINED ${VAR_NAME}) - set(${VAR_NAME} $ENV{${ENV_VAR}} CACHE STRING "Set from environment variable ${ENV_VAR}") - elseif(NOT DEFINED ${VAR_NAME}) - set(${VAR_NAME} ${DEFAULT_VALUE} CACHE STRING "Default value for ${VAR_NAME}") - endif() -endfunction() - -if (DEFINED ENV{GW_BASELINE_DIR} AND NOT DEFINED GW_BASELINE_DIR) - set(GW_BASELINE_DIR $ENV{GW_BASELINE_DIR} CACHE FILEPATH "Path to global-workflow baselines") -else() - get_filename_component(GW_BASELINE_DIR ${CMAKE_SOURCE_DIR}/../.. ABSOLUTE) -endif() - -# If GW_BASELINE_DIR is not defined, tests will not be run, return -if(NOT DEFINED GW_BASELINE_DIR) - message(WARNING "gw: GW_BASELINE_DIR is not defined. Tests will not be run.") - return() -endif() - -set_from_env_or_default(RUNTESTS RUNTESTS "${CMAKE_BINARY_DIR}/RUNTESTS") - -set_from_env_or_default(MACHINE_ID MACHINE_ID "NOT_DEFINED") -if(${MACHINE_ID} STREQUAL "NOT_DEFINED") - execute_process( - COMMAND bash -c "source ${GW_BASELINE_DIR}/ush/detect_machine.sh && echo \$MACHINE_ID" - OUTPUT_VARIABLE MACHINE_ID - OUTPUT_STRIP_TRAILING_WHITESPACE - ) -endif() - -set_from_env_or_default(HPC_ACCOUNT HPC_ACCOUNT "NOT_DEFINED") -if(${HPC_ACCOUNT} STREQUAL "NOT_DEFINED") - execute_process( - COMMAND bash -c "source ${GW_BASELINE_DIR}/ci/platforms/config.${MACHINE_ID} && echo \$HPC_ACCOUNT" - OUTPUT_VARIABLE HPC_ACCOUNT - OUTPUT_STRIP_TRAILING_WHITESPACE - ) -endif() - -set_from_env_or_default(ICSDIR_ROOT ICSDIR_ROOT "NOT_DEFINED") -if(${ICSDIR_ROOT} STREQUAL "NOT_DEFINED") - execute_process( - COMMAND bash -c "source ${GW_BASELINE_DIR}/ci/platforms/config.${MACHINE_ID} && echo \$ICSDIR_ROOT" - OUTPUT_VARIABLE ICSDIR_ROOT - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - set(ICSDIR_ROOT ${ICSDIR_ROOT} CACHE FILEPATH "Path to ICS directory") -endif() - -message(STATUS "MACHINE_ID: '${MACHINE_ID}'") -message(STATUS "gw: global-workflow baselines will be used from: '${GW_BASELINE_DIR}'") -message(STATUS "gw: global-workflow tests will be run at: '${RUNTESTS}'") -message(STATUS "gw: global-workflow tests will use the allocation: '${HPC_ACCOUNT}'") -message(STATUS "gw: global-workflow tests will use ICSDIR_ROOT: '${ICSDIR_ROOT}'") - -# Prepare test scripts -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/setup.sh.in - ${CMAKE_CURRENT_BINARY_DIR}/scripts/setup.sh @ONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/stage.sh.in - ${CMAKE_CURRENT_BINARY_DIR}/scripts/stage.sh @ONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/execute.sh.in - ${CMAKE_CURRENT_BINARY_DIR}/scripts/execute.sh @ONLY) - -function(AddFunctionalTest) - - set(prefix ARG) - set(novals NOTRAPFPE NOVALGRIND) - set(singlevals CASE JOB) - set(multivals TEST_DEPENDS) - - cmake_parse_arguments(${prefix} - "${novals}" "${singlevals}" "${multivals}" - ${ARGN}) - - set(TEST_NAME ${ARG_CASE}_${ARG_JOB}) - set(CASE_PATH ${GW_BASELINE_DIR}/ci/cases/pr) - set(CASE_YAML ${CASE_PATH}/${ARG_CASE}.yaml) - - add_test(NAME test_${TEST_NAME}_setup - COMMAND ./setup.sh ${TEST_NAME} ${CASE_YAML} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts) - set_tests_properties(test_${TEST_NAME}_setup PROPERTIES LABELS "${ARG_CASE};${ARG_JOB}") - - add_test(NAME test_${TEST_NAME}_stage - COMMAND ./stage.sh ${TEST_NAME} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts) - set_tests_properties(test_${TEST_NAME}_stage PROPERTIES DEPENDS test_${TEST_NAME}_setup LABELS "${ARG_CASE};${ARG_JOB}") - - add_test(NAME test_${TEST_NAME}_execute - #TODO Need to get the idate for rocotoboot get the right cycle for the test (hard coded for now) - #TODO Need to add a loop to check for when job has been completed - COMMAND ./execute.sh ${TEST_NAME} ${ARG_JOB} 2021032312 - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts) - set_tests_properties(test_${TEST_NAME}_execute PROPERTIES DEPENDS test_${TEST_NAME}_stage LABELS "${ARG_CASE};${ARG_JOB}") - - add_test(NAME test_${TEST_NAME}_validate - COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/validate.sh ${TEST_NAME}") - set_tests_properties(test_${TEST_NAME}_validate PROPERTIES DEPENDS test_${TEST_NAME}_execute LABELS "${ARG_CASE};${ARG_JOB}") -endfunction() - -AddFunctionalTest( - CASE "C48_ATM" - JOB "gfs_fcst_seg0" -) diff --git a/ctests/CMakeLists.txt b/ctests/CMakeLists.txt new file mode 100644 index 00000000000..c6f419c190f --- /dev/null +++ b/ctests/CMakeLists.txt @@ -0,0 +1,80 @@ +if (NOT DEFINED HOMEgfs) + set(HOMEgfs ${PROJECT_SOURCE_DIR}) +endif() + +if (DEFINED ENV{RUNTESTS} AND NOT DEFINED RUNTESTS) + set(RUNTESTS $ENV{RUNTESTS} CACHE FILEPATH "Path to global-workflow RUNTESTS directory") +else() + set(RUNTESTS ${CMAKE_CURRENT_BINARY_DIR}/RUNTESTS) +endif() + +if (DEFINED ENV{HPC_ACCOUNT} AND NOT DEFINED HPC_ACCOUNT) + set(HPC_ACCOUNT $ENV{HPC_ACCOUNT} CACHE STRING "Local location of glowbal-workflow initialconditions") +endif() + +if (NOT DEFINED HPC_ACCOUNT) + message(FATAL_ERROR "HPC_ACCOUNT must be set") + return() +endif() + +if (DEFINED ENV{ISCDIR_ROOT} AND NOT DEFINED ICSDIR_ROOT) + set(ICSDIR_ROOT $ENV{HPC_ACCOUNT} CACHE STRING "Local path to global-workflow initialconditions") +endif() +if(NOT DEFINED ICSDIR_ROOT) + message(FATAL_ERROR "ICSDIR_ROOT must be set") + return() +endif() + +message(STATUS "MACHINE_ID: '${MACHINE_ID}'") +message(STATUS "gw: global-workflow baselines will be used from: '${HOMEgfs}'") +message(STATUS "gw: global-workflow tests will be run at: '${RUNTESTS}'") +message(STATUS "gw: global-workflow tests will use the allocation: '${HPC_ACCOUNT}'") +message(STATUS "gw: global-workflow tests will use ICSDIR_ROOT: '${ICSDIR_ROOT}'") + +# Prepare test scripts +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/setup.sh.in + ${CMAKE_CURRENT_BINARY_DIR}/scripts/setup.sh @ONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/stage.sh.in + ${CMAKE_CURRENT_BINARY_DIR}/scripts/stage.sh @ONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/execute.sh.in + ${CMAKE_CURRENT_BINARY_DIR}/scripts/execute.sh @ONLY) + +function(AddJJOBTest) + + set(prefix ARG) + set(novals NOTRAPFPE NOVALGRIND) + set(singlevals CASE JOB) + set(multivals TEST_DEPENDS) + + cmake_parse_arguments(${prefix} + "${novals}" "${singlevals}" "${multivals}" + ${ARGN}) + + set(TEST_NAME ${ARG_CASE}_${ARG_JOB}) + set(CASE_PATH ${HOMEgfs}/ci/cases/pr) + set(CASE_YAML ${CASE_PATH}/${ARG_CASE}.yaml) + + add_test(NAME test_${TEST_NAME}_setup + COMMAND ./setup.sh ${TEST_NAME} ${CASE_YAML} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts) + set_tests_properties(test_${TEST_NAME}_setup PROPERTIES LABELS "${ARG_CASE};${ARG_JOB}") + + add_test(NAME test_${TEST_NAME}_stage + COMMAND ./stage.sh ${TEST_NAME} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts) + set_tests_properties(test_${TEST_NAME}_stage PROPERTIES DEPENDS test_${TEST_NAME}_setup LABELS "${ARG_CASE};${ARG_JOB}") + + add_test(NAME test_${TEST_NAME}_execute + COMMAND ./execute.sh ${TEST_NAME} ${ARG_JOB} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts) + set_tests_properties(test_${TEST_NAME}_execute PROPERTIES DEPENDS test_${TEST_NAME}_stage LABELS "${ARG_CASE};${ARG_JOB}") + + add_test(NAME test_${TEST_NAME}_validate + COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/validate.sh ${TEST_NAME}") + set_tests_properties(test_${TEST_NAME}_validate PROPERTIES DEPENDS test_${TEST_NAME}_execute LABELS "${ARG_CASE};${ARG_JOB}") +endfunction() + +AddJJOBTest( + CASE "C48_ATM" + JOB "gfs_fcst_seg0" +) diff --git a/ci/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml similarity index 100% rename from ci/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml rename to ctests/cases/C48_ATM_gfs_fcst_seg0.yaml diff --git a/ci/ctests/scripts/execute.sh.in b/ctests/scripts/execute.sh.in similarity index 100% rename from ci/ctests/scripts/execute.sh.in rename to ctests/scripts/execute.sh.in diff --git a/ci/ctests/scripts/setup.sh.in b/ctests/scripts/setup.sh.in similarity index 95% rename from ci/ctests/scripts/setup.sh.in rename to ctests/scripts/setup.sh.in index 93d85b93542..6c4a772b650 100755 --- a/ci/ctests/scripts/setup.sh.in +++ b/ctests/scripts/setup.sh.in @@ -6,7 +6,7 @@ TEST_NAME=${1:?"Name of the test is required"} YAML_FILE=${2:?"Name of the CI yaml file for the test"} # CMake to fill these variables -HOMEgfs="@GW_BASELINE_DIR@" +HOMEgfs="@PROJECT_SOURCE_DIR@" RUNTESTS="@RUNTESTS@" ICSDIR_ROOT="@ICSDIR_ROOT@" HPC_ACCOUNT="@HPC_ACCOUNT@" diff --git a/ci/ctests/scripts/stage.py b/ctests/scripts/stage.py similarity index 55% rename from ci/ctests/scripts/stage.py rename to ctests/scripts/stage.py index c10045ecd14..e6853033c22 100755 --- a/ci/ctests/scripts/stage.py +++ b/ctests/scripts/stage.py @@ -9,7 +9,6 @@ from argparse import ArgumentParser from pathlib import Path from wxflow import Configuration, AttrDict, parse_j2yaml, Logger, logit, which, CommandNotFoundError, ProcessError, FileHandler -from workflow.hosts import Host logger = Logger(level=os.environ.get("LOGGING_LEVEL", "DEBUG"), colored_log=False) @@ -26,7 +25,6 @@ def parse_args(): """ parser = ArgumentParser(description=description) - parser.add_argument('--build_dir', help='CMake build directory', required=False, type=Path, default=None) parser.add_argument('-y', '--yaml', help='full path to yaml file describing the job test configuration', type=Path, required=True) return parser.parse_args() @@ -34,25 +32,5 @@ def parse_args(): # Parse command line arguments args = parse_args() - data = AttrDict(HOMEgfs=_top) - data.update(os.environ) - - # Initialize host and platform configuration for getting PATH to staged data per machine - host = Host() - cfg = Configuration(f'{data.HOMEgfs}/ci/platforms') - platform_config = cfg.parse_config(f'config.{host.machine.lower()}') - data.update(platform_config) - - #pr_case_cfg = parse_j2yaml(path=pr_case_yaml_path, data=data) - #data["PDY"]=str(pr_case_cfg.arguments.idate)[0:8] - #data["HH"]=str(pr_case_cfg.arguments.idate)[8:10] - - # TODO get idate in lue of above - idate = "2021032312" - - data["PDY"]=str(idate)[0:8] - data["HH"]=str(idate)[8:10] - data["RUNTESTS"]=Path.joinpath(args.build_dir,"RUNTESTS") - data["TEST_NAME"]=args.yaml.stem case_cfg = parse_j2yaml(path=args.yaml, data=data) FileHandler(case_cfg.input_files).sync() diff --git a/ci/ctests/scripts/stage.sh.in b/ctests/scripts/stage.sh.in similarity index 95% rename from ci/ctests/scripts/stage.sh.in rename to ctests/scripts/stage.sh.in index 6f84a37a297..e7de1379fc2 100755 --- a/ci/ctests/scripts/stage.sh.in +++ b/ctests/scripts/stage.sh.in @@ -5,7 +5,7 @@ set -ux TEST_NAME=${1:?"Name of the test is required"} # CMake to fill these variables -HOMEgfs="@GW_BASELINE_DIR@" +HOMEgfs="@PROJECT_SOURCE_DIR@" # Load the runtime environment for this script (needs wxflow and its dependencies) set +x diff --git a/ci/ctests/scripts/validate.sh b/ctests/scripts/validate.sh similarity index 100% rename from ci/ctests/scripts/validate.sh rename to ctests/scripts/validate.sh diff --git a/sorc/gsi_enkf.fd b/sorc/gsi_enkf.fd deleted file mode 160000 index 27c03e83a66..00000000000 --- a/sorc/gsi_enkf.fd +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 27c03e83a66fa2ba3b32781dab7cd6a8c0fc497d diff --git a/sorc/gsi_utils.fd b/sorc/gsi_utils.fd deleted file mode 160000 index f716012812c..00000000000 --- a/sorc/gsi_utils.fd +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f716012812c2564e7eab24041f7a3ec14c7aa383 From b3518caeb083207fed1440fca8c0aa70be0ac9b8 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 10 Jan 2025 16:34:20 -0600 Subject: [PATCH 098/195] added to yaml fun conf file to us jinja string modification TEST_DATE --- ctests/CMakeLists.txt | 8 +++++++ ctests/cases/C48_ATM_gfs_fcst_seg0.yaml | 28 ++++++++++++------------- ctests/scripts/stage.sh.in | 4 +++- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/ctests/CMakeLists.txt b/ctests/CMakeLists.txt index c6f419c190f..d46f3705e46 100644 --- a/ctests/CMakeLists.txt +++ b/ctests/CMakeLists.txt @@ -25,6 +25,14 @@ if(NOT DEFINED ICSDIR_ROOT) return() endif() +if (DEFINED ENV{STAGED_FUNCTIONAL_TEST_DIR} AND NOT DEFINED STATED_FUNCTIONAL_TEST_DIR) + set(STATED_FUNCTIONAL_TEST_DIR $ENV{HPC_ACCOUNT} CACHE STRING "Local path to global-workflow staged data for functional test") +endif() +if(NOT DEFINED STATED_FUNCTIONAL_TEST_DIR) + message(FATAL_ERROR "STATED_FUNCTIONAL_TEST_DIR must be set") + return() +endif() + message(STATUS "MACHINE_ID: '${MACHINE_ID}'") message(STATUS "gw: global-workflow baselines will be used from: '${HOMEgfs}'") message(STATUS "gw: global-workflow tests will be run at: '${RUNTESTS}'") diff --git a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml index ec76ed794ea..17738e69d1d 100644 --- a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml @@ -1,17 +1,17 @@ input_files: mkdir: - - "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}//gfs.{{PDY}}/{{HH}}/model/atmos/input" + - "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input" copy: - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_ctrl.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_ctrl.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile1.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile1.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile2.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile2.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile3.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile3.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile4.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}//gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile4.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile5.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}///gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile5.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/gfs_data.tile6.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{PDY}}/{{HH}}/model/atmos/input/gfs_data.tile6.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile1.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile1.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile2.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile2.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile3.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile3.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile4.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile4.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile5.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile5.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ PDY }}/{{ HH }}/model/atmos/input/sfc_data.tile6.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{PDY}}/{{HH}}/model/atmos/input/sfc_data.tile6.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_ctrl.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_ctrl.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile1.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile1.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile2.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile2.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile3.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile3.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile4.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile4.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile5.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}///gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile5.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile6.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile6.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile1.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile1.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile2.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile2.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile3.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile3.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile4.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile4.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile6.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile6.nc"] diff --git a/ctests/scripts/stage.sh.in b/ctests/scripts/stage.sh.in index e7de1379fc2..76958528363 100755 --- a/ctests/scripts/stage.sh.in +++ b/ctests/scripts/stage.sh.in @@ -5,6 +5,8 @@ set -ux TEST_NAME=${1:?"Name of the test is required"} # CMake to fill these variables +STAGED_FUNCTIONAL_TEST_DIR="@STAGED_FUNCTIONAL_TEST_DIR@" +RUNTESTS="@RUNTESTS@" HOMEgfs="@PROJECT_SOURCE_DIR@" # Load the runtime environment for this script (needs wxflow and its dependencies) @@ -18,7 +20,7 @@ export PYTHONPATH INPUTS_YAML="${HOMEgfs}/ci/ctests/cases/${TEST_NAME}.yaml" -"${HOMEgfs}/ci/ctests/scripts/stage.py" --build_dir "@CMAKE_CURRENT_BINARY_DIR@" --yaml "${INPUTS_YAML}" +"${HOMEgfs}/ci/ctests/scripts/stage.py" --yaml "${INPUTS_YAML}" rc=$? if [[ "${rc}" -ne 0 ]]; then set +x From 54f633b6b05642d95b01ba3ddaae8331bf1a716f Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 10 Jan 2025 17:24:26 -0600 Subject: [PATCH 099/195] typos in CMakeLists and module file for adding CMake on Orion --- ctests/CMakeLists.txt | 6 +++--- modulefiles/module_gwsetup.orion.lua | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ctests/CMakeLists.txt b/ctests/CMakeLists.txt index d46f3705e46..eefa4c5d223 100644 --- a/ctests/CMakeLists.txt +++ b/ctests/CMakeLists.txt @@ -25,10 +25,10 @@ if(NOT DEFINED ICSDIR_ROOT) return() endif() -if (DEFINED ENV{STAGED_FUNCTIONAL_TEST_DIR} AND NOT DEFINED STATED_FUNCTIONAL_TEST_DIR) - set(STATED_FUNCTIONAL_TEST_DIR $ENV{HPC_ACCOUNT} CACHE STRING "Local path to global-workflow staged data for functional test") +if (DEFINED ENV{STAGED_FUNCTIONAL_TEST_DIR} AND NOT DEFINED STAGED_FUNCTIONAL_TEST_DIR) + set(STAGED_FUNCTIONAL_TEST_DIR $ENV{STAGED_FUNCTIONAL_TEST_DIR} CACHE STRING "Local path to global-workflow staged data for functional test") endif() -if(NOT DEFINED STATED_FUNCTIONAL_TEST_DIR) +if(NOT DEFINED STAGED_FUNCTIONAL_TEST_DIR) message(FATAL_ERROR "STATED_FUNCTIONAL_TEST_DIR must be set") return() endif() diff --git a/modulefiles/module_gwsetup.orion.lua b/modulefiles/module_gwsetup.orion.lua index b8e2fc8a9fe..5ffebc31a11 100644 --- a/modulefiles/module_gwsetup.orion.lua +++ b/modulefiles/module_gwsetup.orion.lua @@ -10,11 +10,13 @@ prepend_path("MODULEPATH", "/work/noaa/epic/role-epic/spack-stack/orion/spack-st local stack_intel_ver=os.getenv("stack_intel_ver") or "2021.9.0" local python_ver=os.getenv("python_ver") or "3.11.6" +local cmake_ver=os.getenv("cmake_ver") or "3.23.1" load(pathJoin("stack-intel", stack_intel_ver)) load(pathJoin("python", python_ver)) load("py-jinja2") load("py-pyyaml") load("py-numpy") +load(pathJoin("cmake", cmake_ver)) whatis("Description: GFS run setup environment") From a182c4439064e5cea5b807d2d7601544eddab443 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 10 Jan 2025 17:57:06 -0600 Subject: [PATCH 100/195] added TEST_DATE as an agrment to adding a test in CMake List file --- ctests/CMakeLists.txt | 5 +++-- ctests/scripts/setup.sh.in | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ctests/CMakeLists.txt b/ctests/CMakeLists.txt index eefa4c5d223..95f66cc9512 100644 --- a/ctests/CMakeLists.txt +++ b/ctests/CMakeLists.txt @@ -51,7 +51,7 @@ function(AddJJOBTest) set(prefix ARG) set(novals NOTRAPFPE NOVALGRIND) - set(singlevals CASE JOB) + set(singlevals CASE JOB TEST_DATE) set(multivals TEST_DEPENDS) cmake_parse_arguments(${prefix} @@ -63,7 +63,7 @@ function(AddJJOBTest) set(CASE_YAML ${CASE_PATH}/${ARG_CASE}.yaml) add_test(NAME test_${TEST_NAME}_setup - COMMAND ./setup.sh ${TEST_NAME} ${CASE_YAML} + COMMAND ./setup.sh ${TEST_NAME} ${CASE_YAML} ${ARG_TEST_DATE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts) set_tests_properties(test_${TEST_NAME}_setup PROPERTIES LABELS "${ARG_CASE};${ARG_JOB}") @@ -85,4 +85,5 @@ endfunction() AddJJOBTest( CASE "C48_ATM" JOB "gfs_fcst_seg0" + TEST_DATE "2021032312" ) diff --git a/ctests/scripts/setup.sh.in b/ctests/scripts/setup.sh.in index 6c4a772b650..742b14afe43 100755 --- a/ctests/scripts/setup.sh.in +++ b/ctests/scripts/setup.sh.in @@ -4,6 +4,7 @@ set -ux TEST_NAME=${1:?"Name of the test is required"} YAML_FILE=${2:?"Name of the CI yaml file for the test"} +TEST_DATE=${3:?"idate of the test is required"} # CMake to fill these variables HOMEgfs="@PROJECT_SOURCE_DIR@" From fd8a8bc494abec5681fb66192564cfd6a81fc8a2 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 10 Jan 2025 18:17:39 -0600 Subject: [PATCH 101/195] needed idate in arg to exexcute --- ctests/CMakeLists.txt | 2 +- ctests/scripts/stage.sh.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ctests/CMakeLists.txt b/ctests/CMakeLists.txt index 95f66cc9512..2f77805557f 100644 --- a/ctests/CMakeLists.txt +++ b/ctests/CMakeLists.txt @@ -73,7 +73,7 @@ function(AddJJOBTest) set_tests_properties(test_${TEST_NAME}_stage PROPERTIES DEPENDS test_${TEST_NAME}_setup LABELS "${ARG_CASE};${ARG_JOB}") add_test(NAME test_${TEST_NAME}_execute - COMMAND ./execute.sh ${TEST_NAME} ${ARG_JOB} + COMMAND ./execute.sh ${TEST_NAME} ${ARG_JOB} ${ARG_TEST_DATE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts) set_tests_properties(test_${TEST_NAME}_execute PROPERTIES DEPENDS test_${TEST_NAME}_stage LABELS "${ARG_CASE};${ARG_JOB}") diff --git a/ctests/scripts/stage.sh.in b/ctests/scripts/stage.sh.in index 76958528363..b276ec3e6c7 100755 --- a/ctests/scripts/stage.sh.in +++ b/ctests/scripts/stage.sh.in @@ -20,7 +20,7 @@ export PYTHONPATH INPUTS_YAML="${HOMEgfs}/ci/ctests/cases/${TEST_NAME}.yaml" -"${HOMEgfs}/ci/ctests/scripts/stage.py" --yaml "${INPUTS_YAML}" +"${HOMEgfs}/ctests/scripts/stage.py" --yaml "${INPUTS_YAML}" rc=$? if [[ "${rc}" -ne 0 ]]; then set +x From 472d89c07e67348532125551efebf0131172b765 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 10 Jan 2025 18:35:24 -0600 Subject: [PATCH 102/195] just use par_yaml --- ctests/scripts/stage.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ctests/scripts/stage.py b/ctests/scripts/stage.py index e6853033c22..898e3767ddb 100755 --- a/ctests/scripts/stage.py +++ b/ctests/scripts/stage.py @@ -8,7 +8,7 @@ from argparse import ArgumentParser from pathlib import Path -from wxflow import Configuration, AttrDict, parse_j2yaml, Logger, logit, which, CommandNotFoundError, ProcessError, FileHandler +from wxflow import parse_yaml, FileHandler logger = Logger(level=os.environ.get("LOGGING_LEVEL", "DEBUG"), colored_log=False) @@ -32,5 +32,5 @@ def parse_args(): # Parse command line arguments args = parse_args() - case_cfg = parse_j2yaml(path=args.yaml, data=data) + case_cfg = parse_yaml(path=args.yaml) FileHandler(case_cfg.input_files).sync() From 45d2901969f9c1d8fbe9a4a5bb04977a1a36ae09 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 10 Jan 2025 19:25:26 -0600 Subject: [PATCH 103/195] trying to get args into yaml --- ctests/cases/C48_ATM_gfs_fcst_seg0.yaml | 28 ++++++++++++------------- ctests/scripts/stage.py | 6 ++++-- ctests/scripts/stage.sh.in | 2 +- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml index 17738e69d1d..937815b47b9 100644 --- a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml @@ -1,17 +1,17 @@ input_files: mkdir: - - "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input" copy: - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_ctrl.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_ctrl.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile1.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile1.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile2.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile2.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile3.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile3.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile4.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile4.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile5.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}///gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile5.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile6.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile6.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile1.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile1.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile2.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile2.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile3.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile3.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile4.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile4.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile6.nc", "{{RUNTESTS}}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile6.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_ctrl.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile1.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile2.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile3.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile4.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}///gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile5.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile6.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile1.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile2.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile3.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile4.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile6.nc"] diff --git a/ctests/scripts/stage.py b/ctests/scripts/stage.py index 898e3767ddb..ed2f73e6e18 100755 --- a/ctests/scripts/stage.py +++ b/ctests/scripts/stage.py @@ -8,7 +8,7 @@ from argparse import ArgumentParser from pathlib import Path -from wxflow import parse_yaml, FileHandler +from wxflow import parse_j2yaml, FileHandler, AttrDict, Logger logger = Logger(level=os.environ.get("LOGGING_LEVEL", "DEBUG"), colored_log=False) @@ -32,5 +32,7 @@ def parse_args(): # Parse command line arguments args = parse_args() - case_cfg = parse_yaml(path=args.yaml) + data = AttrDict(TEST_DATE=os.environ.get("TEST_DATE")) + data.update(os.environ) + case_cfg = parse_j2yaml(path=args.yaml, data=data) FileHandler(case_cfg.input_files).sync() diff --git a/ctests/scripts/stage.sh.in b/ctests/scripts/stage.sh.in index b276ec3e6c7..f0b7e822cd6 100755 --- a/ctests/scripts/stage.sh.in +++ b/ctests/scripts/stage.sh.in @@ -18,7 +18,7 @@ set -x PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${HOMEgfs}/sorc/wxflow/src" export PYTHONPATH -INPUTS_YAML="${HOMEgfs}/ci/ctests/cases/${TEST_NAME}.yaml" +INPUTS_YAML="${HOMEgfs}/ctests/cases/${TEST_NAME}.yaml" "${HOMEgfs}/ctests/scripts/stage.py" --yaml "${INPUTS_YAML}" rc=$? From 8ca4d7a532635ae6c4bb6470528009bd9c6f82f4 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 10 Jan 2025 19:49:09 -0600 Subject: [PATCH 104/195] added TEST_DATA via data to template --- ctests/cases/C48_ATM_gfs_fcst_seg0.yaml | 28 ++++++++++++------------- ctests/scripts/stage.py | 3 +-- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml index 937815b47b9..f12fd2fa8a0 100644 --- a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml @@ -1,17 +1,17 @@ input_files: mkdir: - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input" copy: - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_ctrl.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile1.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile2.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile3.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile4.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}///gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile5.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile6.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile1.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile2.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile3.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile4.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] - - ["{{ STAGED_FUNCTIONAL_TEST_DIR }}/{{ TEST_NAME }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ TEST_NAME }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile6.nc"] + - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_ctrl.nc"] + - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile1.nc"] + - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile2.nc"] + - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile3.nc"] + - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile4.nc"] + - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}///gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile5.nc"] + - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile6.nc"] + - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile1.nc"] + - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile2.nc"] + - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile3.nc"] + - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile4.nc"] + - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile6.nc"] diff --git a/ctests/scripts/stage.py b/ctests/scripts/stage.py index ed2f73e6e18..90908316e4b 100755 --- a/ctests/scripts/stage.py +++ b/ctests/scripts/stage.py @@ -32,7 +32,6 @@ def parse_args(): # Parse command line arguments args = parse_args() - data = AttrDict(TEST_DATE=os.environ.get("TEST_DATE")) - data.update(os.environ) + data = {'TEST_DATE': os.environ.get('TEST_DATE')} case_cfg = parse_j2yaml(path=args.yaml, data=data) FileHandler(case_cfg.input_files).sync() From 91d76e3687d39de83f66a1bf718dd141d56caffc Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 10 Jan 2025 19:57:56 -0600 Subject: [PATCH 105/195] added TEST_DATE into arg to bash stage --- ctests/CMakeLists.txt | 2 +- ctests/scripts/stage.sh.in | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ctests/CMakeLists.txt b/ctests/CMakeLists.txt index 2f77805557f..34d7f52c65f 100644 --- a/ctests/CMakeLists.txt +++ b/ctests/CMakeLists.txt @@ -68,7 +68,7 @@ function(AddJJOBTest) set_tests_properties(test_${TEST_NAME}_setup PROPERTIES LABELS "${ARG_CASE};${ARG_JOB}") add_test(NAME test_${TEST_NAME}_stage - COMMAND ./stage.sh ${TEST_NAME} + COMMAND ./stage.sh ${TEST_NAME} ${ARG_TEST_DATE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts) set_tests_properties(test_${TEST_NAME}_stage PROPERTIES DEPENDS test_${TEST_NAME}_setup LABELS "${ARG_CASE};${ARG_JOB}") diff --git a/ctests/scripts/stage.sh.in b/ctests/scripts/stage.sh.in index f0b7e822cd6..167c04ef62c 100755 --- a/ctests/scripts/stage.sh.in +++ b/ctests/scripts/stage.sh.in @@ -3,6 +3,7 @@ set -ux TEST_NAME=${1:?"Name of the test is required"} +TEST_DATE=${2:?"idate of the test is required"} # CMake to fill these variables STAGED_FUNCTIONAL_TEST_DIR="@STAGED_FUNCTIONAL_TEST_DIR@" From 61e7ce316a13a7cd9759e1a5a363d3376493d00c Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 13 Jan 2025 10:12:05 -0600 Subject: [PATCH 106/195] changed test_date argument to datetime object so it can be used with Jinja functions with in the templating class --- ci/platforms/config.hera | 2 +- ci/platforms/config.orion | 2 +- ctests/CMakeLists.txt | 49 ++++++++++++++++++++++++-------------- ctests/scripts/stage.py | 5 +++- ctests/scripts/stage.sh.in | 2 +- 5 files changed, 38 insertions(+), 22 deletions(-) diff --git a/ci/platforms/config.hera b/ci/platforms/config.hera index fa908f8eb14..09e2e28ddb3 100644 --- a/ci/platforms/config.hera +++ b/ci/platforms/config.hera @@ -3,7 +3,7 @@ export GFS_CI_ROOT=/scratch1/NCEPDEV/global/Terry.McGuinness/GFS_CI_ROOT export ICSDIR_ROOT=/scratch1/NCEPDEV/global/glopara/data/ICSDIR -export STAGED_FUNCTIONAL_TEST_DIR=${GFS_CI_ROOT}/STAGED_FUNCTIONAL_TEST_DIR +export STAGED_TESTS_DIR=${GFS_CI_ROOT}/STAGED_TESTS_DIR export HPC_ACCOUNT=nems export max_concurrent_cases=5 export max_concurrent_pr=4 diff --git a/ci/platforms/config.orion b/ci/platforms/config.orion index 6b4810419dc..b0b8c0e3a5a 100644 --- a/ci/platforms/config.orion +++ b/ci/platforms/config.orion @@ -3,7 +3,7 @@ export GFS_CI_ROOT=/work2/noaa/stmp/GFS_CI_ROOT/ORION export ICSDIR_ROOT=/work/noaa/global/glopara/data/ICSDIR export HPC_ACCOUNT=nems -export STAGED_FUNCTIONAL_TEST_DIR=/work/noaa/stmp/GFS_CI_ROOT/ORION/STAGED_FUNCTIONAL_TEST_DIR +export STAGED_TESTS_DIR=/work/noaa/stmp/GFS_CI_ROOT/ORION/STAGED_TESTS_DIR export max_concurrent_cases=5 export max_concurrent_pr=4 diff --git a/ctests/CMakeLists.txt b/ctests/CMakeLists.txt index 34d7f52c65f..7305390b2c0 100644 --- a/ctests/CMakeLists.txt +++ b/ctests/CMakeLists.txt @@ -1,35 +1,48 @@ +# ------------------------------------------------------------------------- # +# CTests for Global Workflow +# ------------------------------------------------------------------------- # +# These ctests correspond to JJOBs (individual Rocoto jobs) that can be +# run independently, each requiring its own YAML definition of inputs +# and configurations. By integrating with Rocoto, these jobs can be +# validated, staged, and executed as self-contained tests using +# their own data and test parameters. +# ------------------------------------------------------------------------- # + +# Function to set a variable from an environment variable or default value +function(set_from_env_or_default VAR_NAME ENV_VAR DEFAULT_VALUE) + if (DEFINED ENV{${ENV_VAR}} AND NOT DEFINED ${VAR_NAME}) + set(${VAR_NAME} $ENV{${ENV_VAR}} CACHE STRING "Set from environment variable ${ENV_VAR}") + elseif(NOT DEFINED ${VAR_NAME}) + set(${VAR_NAME} ${DEFAULT_VALUE} CACHE STRING "Default value for ${VAR_NAME}") + endif() +endfunction() + +# Set HOMEgfs if (NOT DEFINED HOMEgfs) set(HOMEgfs ${PROJECT_SOURCE_DIR}) endif() -if (DEFINED ENV{RUNTESTS} AND NOT DEFINED RUNTESTS) - set(RUNTESTS $ENV{RUNTESTS} CACHE FILEPATH "Path to global-workflow RUNTESTS directory") -else() - set(RUNTESTS ${CMAKE_CURRENT_BINARY_DIR}/RUNTESTS) -endif() - -if (DEFINED ENV{HPC_ACCOUNT} AND NOT DEFINED HPC_ACCOUNT) - set(HPC_ACCOUNT $ENV{HPC_ACCOUNT} CACHE STRING "Local location of glowbal-workflow initialconditions") -endif() +# Set RUNTESTS +set_from_env_or_default(RUNTESTS RUNTESTS "${CMAKE_CURRENT_BINARY_DIR}/RUNTESTS") +# Set HPC_ACCOUNT +set_from_env_or_default(HPC_ACCOUNT HPC_ACCOUNT "") if (NOT DEFINED HPC_ACCOUNT) message(FATAL_ERROR "HPC_ACCOUNT must be set") return() endif() -if (DEFINED ENV{ISCDIR_ROOT} AND NOT DEFINED ICSDIR_ROOT) - set(ICSDIR_ROOT $ENV{HPC_ACCOUNT} CACHE STRING "Local path to global-workflow initialconditions") -endif() -if(NOT DEFINED ICSDIR_ROOT) +# Set ICSDIR_ROOT +set_from_env_or_default(ICSDIR_ROOT ICSDIR_ROOT "") +if (NOT DEFINED ICSDIR_ROOT) message(FATAL_ERROR "ICSDIR_ROOT must be set") return() endif() -if (DEFINED ENV{STAGED_FUNCTIONAL_TEST_DIR} AND NOT DEFINED STAGED_FUNCTIONAL_TEST_DIR) - set(STAGED_FUNCTIONAL_TEST_DIR $ENV{STAGED_FUNCTIONAL_TEST_DIR} CACHE STRING "Local path to global-workflow staged data for functional test") -endif() -if(NOT DEFINED STAGED_FUNCTIONAL_TEST_DIR) - message(FATAL_ERROR "STATED_FUNCTIONAL_TEST_DIR must be set") +# Set STAGED_TESTS_DIR +set_from_env_or_default(STAGED_TESTS_DIR STAGED_TESTS_DIR "") +if (NOT DEFINED STAGED_TESTS_DIR) + message(FATAL_ERROR "STAGED_TESTS_DIR must be set") return() endif() diff --git a/ctests/scripts/stage.py b/ctests/scripts/stage.py index 90908316e4b..64a45da8b6a 100755 --- a/ctests/scripts/stage.py +++ b/ctests/scripts/stage.py @@ -2,6 +2,8 @@ import os, sys import shutil +import datetime + _here = os.path.dirname(__file__) _top = os.path.abspath(os.path.join(os.path.abspath(_here), '../../..')) sys.path.insert(0, _top) @@ -26,12 +28,13 @@ def parse_args(): parser = ArgumentParser(description=description) parser.add_argument('-y', '--yaml', help='full path to yaml file describing the job test configuration', type=Path, required=True) + parser.add_argument('-d', '--test_date', help='full path to yaml file describing the job test configuration', type=datetime, required=False) return parser.parse_args() if __name__ == '__main__': # Parse command line arguments args = parse_args() - data = {'TEST_DATE': os.environ.get('TEST_DATE')} + data = {'TEST_DATE': args.test_date} case_cfg = parse_j2yaml(path=args.yaml, data=data) FileHandler(case_cfg.input_files).sync() diff --git a/ctests/scripts/stage.sh.in b/ctests/scripts/stage.sh.in index 167c04ef62c..b2ba5493886 100755 --- a/ctests/scripts/stage.sh.in +++ b/ctests/scripts/stage.sh.in @@ -6,7 +6,7 @@ TEST_NAME=${1:?"Name of the test is required"} TEST_DATE=${2:?"idate of the test is required"} # CMake to fill these variables -STAGED_FUNCTIONAL_TEST_DIR="@STAGED_FUNCTIONAL_TEST_DIR@" +STAGED_TESTS_DIR="@STAGED_TESTS_DIR@" RUNTESTS="@RUNTESTS@" HOMEgfs="@PROJECT_SOURCE_DIR@" From 1860e05a4fe2c0f8dfdb63731f5880901007c7b3 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 13 Jan 2025 10:14:18 -0600 Subject: [PATCH 107/195] MACHINE_ID is no longer used (removed from messae) --- ctests/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/ctests/CMakeLists.txt b/ctests/CMakeLists.txt index 7305390b2c0..42df1388744 100644 --- a/ctests/CMakeLists.txt +++ b/ctests/CMakeLists.txt @@ -46,7 +46,6 @@ if (NOT DEFINED STAGED_TESTS_DIR) return() endif() -message(STATUS "MACHINE_ID: '${MACHINE_ID}'") message(STATUS "gw: global-workflow baselines will be used from: '${HOMEgfs}'") message(STATUS "gw: global-workflow tests will be run at: '${RUNTESTS}'") message(STATUS "gw: global-workflow tests will use the allocation: '${HPC_ACCOUNT}'") From e979f75195168bfb02eead8f5ae3104ca47dc878 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 13 Jan 2025 10:30:01 -0600 Subject: [PATCH 108/195] updated arg to stagy.py for test_date to a str --- ctests/scripts/stage.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ctests/scripts/stage.py b/ctests/scripts/stage.py index 64a45da8b6a..6726853e5cb 100755 --- a/ctests/scripts/stage.py +++ b/ctests/scripts/stage.py @@ -10,7 +10,7 @@ from argparse import ArgumentParser from pathlib import Path -from wxflow import parse_j2yaml, FileHandler, AttrDict, Logger +from wxflow import parse_j2yaml, FileHandler, Logger logger = Logger(level=os.environ.get("LOGGING_LEVEL", "DEBUG"), colored_log=False) @@ -28,13 +28,16 @@ def parse_args(): parser = ArgumentParser(description=description) parser.add_argument('-y', '--yaml', help='full path to yaml file describing the job test configuration', type=Path, required=True) - parser.add_argument('-d', '--test_date', help='full path to yaml file describing the job test configuration', type=datetime, required=False) + parser.add_argument('-d', '--test_date', help='test date in YYYYMMDDHH format', type=str, required=False) return parser.parse_args() if __name__ == '__main__': # Parse command line arguments args = parse_args() + data = {'TEST_DATE': args.test_date} + if args.test_date: + data['TEST_DATE'] = datetime.datetime.strptime(args.test_date, '%Y%m%d%H') case_cfg = parse_j2yaml(path=args.yaml, data=data) FileHandler(case_cfg.input_files).sync() From 91f433124cf7abc393e1fc18aa2ad960e092903c Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 13 Jan 2025 10:42:15 -0600 Subject: [PATCH 109/195] missed commit (adding test_date arg to stage.py) --- ctests/scripts/stage.sh.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/scripts/stage.sh.in b/ctests/scripts/stage.sh.in index b2ba5493886..a0309b29228 100755 --- a/ctests/scripts/stage.sh.in +++ b/ctests/scripts/stage.sh.in @@ -21,7 +21,7 @@ export PYTHONPATH INPUTS_YAML="${HOMEgfs}/ctests/cases/${TEST_NAME}.yaml" -"${HOMEgfs}/ctests/scripts/stage.py" --yaml "${INPUTS_YAML}" +"${HOMEgfs}/ctests/scripts/stage.py" --yaml "${INPUTS_YAML} --test_date "${TEST_DATE}" rc=$? if [[ "${rc}" -ne 0 ]]; then set +x From 17fd1da0dda7905f4c83458814075800dd59497e Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 13 Jan 2025 11:04:22 -0600 Subject: [PATCH 110/195] added env vars to starge.py in wrapper via prefixed values to call --- ctests/scripts/stage.sh.in | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ctests/scripts/stage.sh.in b/ctests/scripts/stage.sh.in index a0309b29228..9ced3d8f4ed 100755 --- a/ctests/scripts/stage.sh.in +++ b/ctests/scripts/stage.sh.in @@ -21,7 +21,10 @@ export PYTHONPATH INPUTS_YAML="${HOMEgfs}/ctests/cases/${TEST_NAME}.yaml" -"${HOMEgfs}/ctests/scripts/stage.py" --yaml "${INPUTS_YAML} --test_date "${TEST_DATE}" +TEST_NAME="${TEST_NAME}" \ +RUNTESTS="${RUNTESTS}" \ +STAGED_TESTS_DIR="${STAGED_TESTS_DIR}" \ +"${HOMEgfs}/ctests/scripts/stage.py" --yaml "${INPUTS_YAML}" --test_date "${TEST_DATE}" rc=$? if [[ "${rc}" -ne 0 ]]; then set +x From 48ec7c6adccfb0cb346fec3765fc9d9566885ff0 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 13 Jan 2025 11:23:04 -0600 Subject: [PATCH 111/195] check if default is not used and needs to be set to valule for error message to occure --- ctests/CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ctests/CMakeLists.txt b/ctests/CMakeLists.txt index 42df1388744..e5a5f21131f 100644 --- a/ctests/CMakeLists.txt +++ b/ctests/CMakeLists.txt @@ -12,7 +12,7 @@ function(set_from_env_or_default VAR_NAME ENV_VAR DEFAULT_VALUE) if (DEFINED ENV{${ENV_VAR}} AND NOT DEFINED ${VAR_NAME}) set(${VAR_NAME} $ENV{${ENV_VAR}} CACHE STRING "Set from environment variable ${ENV_VAR}") - elseif(NOT DEFINED ${VAR_NAME}) + elseif(NOT DEFINED ${VAR_NAME} AND NOT ${DEFAULT_VALUE} STREQUAL "") set(${VAR_NAME} ${DEFAULT_VALUE} CACHE STRING "Default value for ${VAR_NAME}") endif() endfunction() @@ -26,7 +26,7 @@ endif() set_from_env_or_default(RUNTESTS RUNTESTS "${CMAKE_CURRENT_BINARY_DIR}/RUNTESTS") # Set HPC_ACCOUNT -set_from_env_or_default(HPC_ACCOUNT HPC_ACCOUNT "") +set_from_env_or_default(HPC_ACCOUNT HPC_ACCOUNT " ") if (NOT DEFINED HPC_ACCOUNT) message(FATAL_ERROR "HPC_ACCOUNT must be set") return() @@ -50,6 +50,7 @@ message(STATUS "gw: global-workflow baselines will be used from: '${HOMEgfs}'") message(STATUS "gw: global-workflow tests will be run at: '${RUNTESTS}'") message(STATUS "gw: global-workflow tests will use the allocation: '${HPC_ACCOUNT}'") message(STATUS "gw: global-workflow tests will use ICSDIR_ROOT: '${ICSDIR_ROOT}'") +message(STATUS "gw: global-workflow tests will use staged data from: '${STAGED_TESTS_DIR}'") # Prepare test scripts configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/setup.sh.in From 243d47b1b65231376102bf9c578269678c3364b6 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 13 Jan 2025 11:31:15 -0600 Subject: [PATCH 112/195] did not have updated var name for STAGED_TEST_DIR in yaml file --- ctests/cases/C48_ATM_gfs_fcst_seg0.yaml | 26 ++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml index f12fd2fa8a0..a30f91e85b5 100644 --- a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml @@ -2,16 +2,16 @@ input_files: mkdir: - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input" copy: - - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_ctrl.nc"] - - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile1.nc"] - - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile2.nc"] - - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile3.nc"] - - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile4.nc"] - - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}///gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile5.nc"] - - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile6.nc"] - - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile1.nc"] - - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile2.nc"] - - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile3.nc"] - - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile4.nc"] - - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] - - ["{{ 'STAGED_FUNCTIONAL_TEST' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile6.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_ctrl.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}///gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile6.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile6.nc"] From c092b109609583a46a6d4c2d27c145ecf106ffa5 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 13 Jan 2025 11:58:37 -0600 Subject: [PATCH 113/195] replaced scraping output file with status from sacct --- ctests/scripts/execute.sh.in | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/ctests/scripts/execute.sh.in b/ctests/scripts/execute.sh.in index aef8348a5ca..8d5e7128d2d 100755 --- a/ctests/scripts/execute.sh.in +++ b/ctests/scripts/execute.sh.in @@ -22,37 +22,23 @@ cat jobcard | sed '/^{{\|^}}/d' | sed '1d' > "${TEST_NAME}.sub" || true output=$(sbatch "${TEST_NAME}.sub") job_id=$(echo "${output}" | awk '{print $4}') echo "Job ${job_id} submitted for test ${TEST_NAME} with job name ${JOB}" -stdout_file=$(scontrol show job "${job_id}" | grep StdOut | awk -F= '{print $2}') || true - -# Check the status of the Slurm job -check_stdout_file() { - last_line=$(tail -n 1 "${stdout_file}") - if [[ "${last_line}" == "End"* && "${last_line}" == *"error code 0"* ]]; then - echo "Job ${job_id} completed successfully with END and error code 0." - exit 0 - else - echo "Job ${job_id} did not complete successfully. Last line: ${last_line}" - exit 1 - fi -} # Check the status of the Slurm job timeout=0 TIMEOUT=60 while true; do - job_status=$(squeue --job "${job_id}" --noheader --format "%T") + job_status=$(sacct -j "${job_id}" --format=State --noheader -n | head -1) if [[ "${job_status}" == "COMPLETED" ]]; then echo "Job ${job_id} completed successfully." - check_stdout_file - elif [[ "${job_status}" == "FAILED" || "${job_status}" == "CANCELLED" || "${job_status}" == "TIMEOUT" ]]; then + elif [[ "${job_status}" =~ ^(FAILED|CANCELLED|TIMEOUT)$ ]]; then echo "Job ${job_id} failed with status: ${job_status}." exit 1 elif [[ -z "${job_status}" ]]; then - echo "Job ${job_id} is no longer in the queue. Checking stdout file." - check_stdout_file + echo "Job ${job_id} is no longer in sacct." + exit 1 else echo "Job ${job_id} is still running with status: ${job_status}." - sleep 60 # Check every 60 seconds + sleep 60 timeout=$((timeout+1)) if [[ "${timeout}" -gt "${TIMEOUT}" ]]; then echo "Job ${job_id} has been running for more than ${TIMEOUT} minutes. Exiting." From 41b6aeee65fab95c1aaf66eedacf9e80e7d68894 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 13 Jan 2025 12:16:51 -0600 Subject: [PATCH 114/195] added extra step for making sure the submitted job_id is in the sacct system --- ctests/scripts/execute.sh.in | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/ctests/scripts/execute.sh.in b/ctests/scripts/execute.sh.in index 8d5e7128d2d..bc18c389a0c 100755 --- a/ctests/scripts/execute.sh.in +++ b/ctests/scripts/execute.sh.in @@ -23,23 +23,40 @@ output=$(sbatch "${TEST_NAME}.sub") job_id=$(echo "${output}" | awk '{print $4}') echo "Job ${job_id} submitted for test ${TEST_NAME} with job name ${JOB}" -# Check the status of the Slurm job +# First loop: wait until job appears +lack_of_job_count=0 +LACK_OF_JOB_LIMIT=5 + +while true; do + job_status=$(sacct -j "${job_id}" --format=State --noheader -n | head -1) + if [[ -n "${job_status}" ]]; then + echo "Job ${job_id} found in sacct." + break + fi + echo "Job ${job_id} not in sacct yet, attempt ${lack_of_job_count}/${LACK_OF_JOB_LIMIT}." + lack_of_job_count=$((lack_of_job_count + 1)) + if [[ "${lack_of_job_count}" -ge "${LACK_OF_JOB_LIMIT}" ]]; then + echo "Job ${job_id} not found after ${lack_of_job_count} attempts. Exiting." + exit 1 + fi + sleep 60 +done + +# Second loop: monitor job status until completion or failure timeout=0 TIMEOUT=60 while true; do job_status=$(sacct -j "${job_id}" --format=State --noheader -n | head -1) if [[ "${job_status}" == "COMPLETED" ]]; then echo "Job ${job_id} completed successfully." + break elif [[ "${job_status}" =~ ^(FAILED|CANCELLED|TIMEOUT)$ ]]; then echo "Job ${job_id} failed with status: ${job_status}." exit 1 - elif [[ -z "${job_status}" ]]; then - echo "Job ${job_id} is no longer in sacct." - exit 1 else echo "Job ${job_id} is still running with status: ${job_status}." sleep 60 - timeout=$((timeout+1)) + timeout=$((timeout + 1)) if [[ "${timeout}" -gt "${TIMEOUT}" ]]; then echo "Job ${job_id} has been running for more than ${TIMEOUT} minutes. Exiting." exit 1 From 42fbc2a7eaf419054f15b7d12b1f9541ce00e16d Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 13 Jan 2025 12:53:17 -0600 Subject: [PATCH 115/195] remove white spaces from job_status --- ctests/scripts/execute.sh.in | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ctests/scripts/execute.sh.in b/ctests/scripts/execute.sh.in index bc18c389a0c..4d5f8907be9 100755 --- a/ctests/scripts/execute.sh.in +++ b/ctests/scripts/execute.sh.in @@ -46,7 +46,8 @@ done timeout=0 TIMEOUT=60 while true; do - job_status=$(sacct -j "${job_id}" --format=State --noheader -n | head -1) + # Trim trailing spaces from job_status + job_status=$(sacct -j "${job_id}" --format=State --noheader -n | head -1 | xargs) if [[ "${job_status}" == "COMPLETED" ]]; then echo "Job ${job_id} completed successfully." break From b17ca77bcc81455bd75dbc197b0f4681484ccce7 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 13 Jan 2025 13:25:23 -0600 Subject: [PATCH 116/195] update path to validate stub and reduce first wait on sacct to 30 seconds --- ctests/CMakeLists.txt | 2 +- ctests/scripts/execute.sh.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ctests/CMakeLists.txt b/ctests/CMakeLists.txt index e5a5f21131f..36052d6ad87 100644 --- a/ctests/CMakeLists.txt +++ b/ctests/CMakeLists.txt @@ -91,7 +91,7 @@ function(AddJJOBTest) set_tests_properties(test_${TEST_NAME}_execute PROPERTIES DEPENDS test_${TEST_NAME}_stage LABELS "${ARG_CASE};${ARG_JOB}") add_test(NAME test_${TEST_NAME}_validate - COMMAND bash -c "${GW_BASELINE_DIR}/ci/ctests/scripts/validate.sh ${TEST_NAME}") + COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/validate.sh ${TEST_NAME}") set_tests_properties(test_${TEST_NAME}_validate PROPERTIES DEPENDS test_${TEST_NAME}_execute LABELS "${ARG_CASE};${ARG_JOB}") endfunction() diff --git a/ctests/scripts/execute.sh.in b/ctests/scripts/execute.sh.in index 4d5f8907be9..b15b893e06c 100755 --- a/ctests/scripts/execute.sh.in +++ b/ctests/scripts/execute.sh.in @@ -39,7 +39,7 @@ while true; do echo "Job ${job_id} not found after ${lack_of_job_count} attempts. Exiting." exit 1 fi - sleep 60 + sleep 30 done # Second loop: monitor job status until completion or failure From bee8efc09bbd87cc959da14850ea132ae0a89745 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 13 Jan 2025 15:30:09 -0600 Subject: [PATCH 117/195] update a few shellnorm suggestions --- ctests/scripts/execute.sh.in | 6 +++--- ctests/scripts/setup.sh.in | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/ctests/scripts/execute.sh.in b/ctests/scripts/execute.sh.in index b15b893e06c..69cf0474496 100755 --- a/ctests/scripts/execute.sh.in +++ b/ctests/scripts/execute.sh.in @@ -14,8 +14,8 @@ cd "${CASEDIR}" rm -f ./*.db rm -f ./jobcard -job_card=$(yes | "${rocotoboot_dryrun}" -d "${TEST_NAME}.db" -w "${TEST_NAME}.xml" -v 10 -c "${idate}00" -t "${JOB}" 2> jobcard) || true -cat jobcard | sed '/^{{\|^}}/d' | sed '1d' > "${TEST_NAME}.sub" || true +yes | "${rocotoboot_dryrun}" -d "${TEST_NAME}.db" -w "${TEST_NAME}.xml" -v 10 -c "${idate}00" -t "${JOB}" 2> jobcard +sed '/^{{\|^}}/d' < jobcard | sed '1d' > "${TEST_NAME}.sub" || true #TODO - Generalize for batch system (hard coded to slurm) @@ -47,7 +47,7 @@ timeout=0 TIMEOUT=60 while true; do # Trim trailing spaces from job_status - job_status=$(sacct -j "${job_id}" --format=State --noheader -n | head -1 | xargs) + job_status=$(sacct -j "${job_id}" --format=State --noheader -n | head -1 | xargs) || true if [[ "${job_status}" == "COMPLETED" ]]; then echo "Job ${job_id} completed successfully." break diff --git a/ctests/scripts/setup.sh.in b/ctests/scripts/setup.sh.in index 742b14afe43..6c4a772b650 100755 --- a/ctests/scripts/setup.sh.in +++ b/ctests/scripts/setup.sh.in @@ -4,7 +4,6 @@ set -ux TEST_NAME=${1:?"Name of the test is required"} YAML_FILE=${2:?"Name of the CI yaml file for the test"} -TEST_DATE=${3:?"idate of the test is required"} # CMake to fill these variables HOMEgfs="@PROJECT_SOURCE_DIR@" From 613d951237fa307691f56d787161d3e9fe3e28f4 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 13 Jan 2025 15:33:45 -0600 Subject: [PATCH 118/195] one more shellnorm for true on pipe --- ctests/scripts/execute.sh.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/scripts/execute.sh.in b/ctests/scripts/execute.sh.in index 69cf0474496..b254a532380 100755 --- a/ctests/scripts/execute.sh.in +++ b/ctests/scripts/execute.sh.in @@ -14,7 +14,7 @@ cd "${CASEDIR}" rm -f ./*.db rm -f ./jobcard -yes | "${rocotoboot_dryrun}" -d "${TEST_NAME}.db" -w "${TEST_NAME}.xml" -v 10 -c "${idate}00" -t "${JOB}" 2> jobcard +yes | "${rocotoboot_dryrun}" -d "${TEST_NAME}.db" -w "${TEST_NAME}.xml" -v 10 -c "${idate}00" -t "${JOB}" 2> jobcard || true sed '/^{{\|^}}/d' < jobcard | sed '1d' > "${TEST_NAME}.sub" || true #TODO - Generalize for batch system (hard coded to slurm) From 53bfb629d5fd058faaa1ff5973824ce7bf7b5df4 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 13 Jan 2025 15:35:53 -0600 Subject: [PATCH 119/195] innocuous extra line at end of toplevel CMake file --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2bdc6d749f2..5044689f7e2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,4 +24,4 @@ endif() # add_subdirectory(sorc) # Setup tests -add_subdirectory(ctests) \ No newline at end of file +add_subdirectory(ctests) From c6cfefb483b3166528569ba8594ecc14cebf029c Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 13 Jan 2025 15:39:22 -0600 Subject: [PATCH 120/195] consolated GFS ROOT path for staged data dir on orion --- ci/platforms/config.orion | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/platforms/config.orion b/ci/platforms/config.orion index b0b8c0e3a5a..507068d4e7a 100644 --- a/ci/platforms/config.orion +++ b/ci/platforms/config.orion @@ -2,8 +2,8 @@ export GFS_CI_ROOT=/work2/noaa/stmp/GFS_CI_ROOT/ORION export ICSDIR_ROOT=/work/noaa/global/glopara/data/ICSDIR +export STAGED_TESTS_DIR=${GFS_CI_ROOT}/STAGED_TESTS_DIR export HPC_ACCOUNT=nems -export STAGED_TESTS_DIR=/work/noaa/stmp/GFS_CI_ROOT/ORION/STAGED_TESTS_DIR export max_concurrent_cases=5 export max_concurrent_pr=4 From 02a03f193cfa74de58ddae2ddc6dc8a9830901bd Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 13 Jan 2025 15:45:42 -0600 Subject: [PATCH 121/195] added some more notes for validate subs --- ctests/CMakeLists.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ctests/CMakeLists.txt b/ctests/CMakeLists.txt index 36052d6ad87..7e348f791de 100644 --- a/ctests/CMakeLists.txt +++ b/ctests/CMakeLists.txt @@ -59,6 +59,9 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/stage.sh.in ${CMAKE_CURRENT_BINARY_DIR}/scripts/stage.sh @ONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/execute.sh.in ${CMAKE_CURRENT_BINARY_DIR}/scripts/execute.sh @ONLY) +# TODO - Validation step add its CMake Teplate for its bash wrapper script +# configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/validate.sh.in +# ${CMAKE_CURRENT_BINARY_DIR}/scripts/validate.sh @ONLY) function(AddJJOBTest) @@ -89,9 +92,10 @@ function(AddJJOBTest) COMMAND ./execute.sh ${TEST_NAME} ${ARG_JOB} ${ARG_TEST_DATE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts) set_tests_properties(test_${TEST_NAME}_execute PROPERTIES DEPENDS test_${TEST_NAME}_stage LABELS "${ARG_CASE};${ARG_JOB}") - + + # TODO - This is a stub for the validation step add_test(NAME test_${TEST_NAME}_validate - COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/validate.sh ${TEST_NAME}") + COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/validate.sh") set_tests_properties(test_${TEST_NAME}_validate PROPERTIES DEPENDS test_${TEST_NAME}_execute LABELS "${ARG_CASE};${ARG_JOB}") endfunction() From 02e1a9257bd22bd33d0d59c63f0413aa3ce11e54 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 13 Jan 2025 15:52:08 -0600 Subject: [PATCH 122/195] remove extras from stage.py --- ctests/scripts/stage.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/ctests/scripts/stage.py b/ctests/scripts/stage.py index 6726853e5cb..b0946c84c10 100755 --- a/ctests/scripts/stage.py +++ b/ctests/scripts/stage.py @@ -1,13 +1,8 @@ #!/usr/bin/env python3 -import os, sys -import shutil +import os import datetime -_here = os.path.dirname(__file__) -_top = os.path.abspath(os.path.join(os.path.abspath(_here), '../../..')) -sys.path.insert(0, _top) - from argparse import ArgumentParser from pathlib import Path from wxflow import parse_j2yaml, FileHandler, Logger @@ -36,7 +31,7 @@ def parse_args(): # Parse command line arguments args = parse_args() - data = {'TEST_DATE': args.test_date} + data = {} if args.test_date: data['TEST_DATE'] = datetime.datetime.strptime(args.test_date, '%Y%m%d%H') case_cfg = parse_j2yaml(path=args.yaml, data=data) From 3da4c54948472b937bc7b49631ea0bbb7aff9e21 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 13 Jan 2025 16:09:53 -0600 Subject: [PATCH 123/195] still had path woring to valication stub (has no *.in file) --- ctests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/CMakeLists.txt b/ctests/CMakeLists.txt index 7e348f791de..4aad8e5c9a9 100644 --- a/ctests/CMakeLists.txt +++ b/ctests/CMakeLists.txt @@ -95,7 +95,7 @@ function(AddJJOBTest) # TODO - This is a stub for the validation step add_test(NAME test_${TEST_NAME}_validate - COMMAND bash -c "${HOMEgfs}/ci/ctests/scripts/validate.sh") + COMMAND bash -c "${HOMEgfs}/ctests/scripts/validate.sh") set_tests_properties(test_${TEST_NAME}_validate PROPERTIES DEPENDS test_${TEST_NAME}_execute LABELS "${ARG_CASE};${ARG_JOB}") endfunction() From c4163701d36f73c4dbdaa672fb1c70d3ef228d52 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 13 Jan 2025 16:21:36 -0600 Subject: [PATCH 124/195] another shellnorm || true --- ctests/scripts/execute.sh.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/scripts/execute.sh.in b/ctests/scripts/execute.sh.in index b254a532380..9cf3ef59176 100755 --- a/ctests/scripts/execute.sh.in +++ b/ctests/scripts/execute.sh.in @@ -28,7 +28,7 @@ lack_of_job_count=0 LACK_OF_JOB_LIMIT=5 while true; do - job_status=$(sacct -j "${job_id}" --format=State --noheader -n | head -1) + job_status=$(sacct -j "${job_id}" --format=State --noheader -n | head -1) || true if [[ -n "${job_status}" ]]; then echo "Job ${job_id} found in sacct." break From 52c50811b5fcaf26f106ccbeaf5e7190576c097f Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 13 Jan 2025 16:23:46 -0600 Subject: [PATCH 125/195] pynomrs spaces --- ctests/scripts/stage.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ctests/scripts/stage.py b/ctests/scripts/stage.py index b0946c84c10..5ff2722b68c 100755 --- a/ctests/scripts/stage.py +++ b/ctests/scripts/stage.py @@ -9,12 +9,14 @@ logger = Logger(level=os.environ.get("LOGGING_LEVEL", "DEBUG"), colored_log=False) + def parse_args(): """ Parse command line arguments. Returns ------- + argparse.Namespace The parsed command line arguments. """ From 1b745595cc0d67496f1e359a586d809fe04be71d Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Mon, 13 Jan 2025 16:28:57 -0600 Subject: [PATCH 126/195] pynomrs line space two --- ctests/scripts/stage.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ctests/scripts/stage.py b/ctests/scripts/stage.py index 5ff2722b68c..51b6c8051e7 100755 --- a/ctests/scripts/stage.py +++ b/ctests/scripts/stage.py @@ -28,6 +28,7 @@ def parse_args(): parser.add_argument('-d', '--test_date', help='test date in YYYYMMDDHH format', type=str, required=False) return parser.parse_args() + if __name__ == '__main__': # Parse command line arguments From e965602cce40d7f1ec4d5efe742cd06ff4f2de2f Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 14 Jan 2025 10:20:35 -0600 Subject: [PATCH 127/195] added back missing submodels gsi_enkf and gsi_utils --- sorc/gsi_enkf.fd | 1 + sorc/gsi_utils.fd | 1 + 2 files changed, 2 insertions(+) create mode 160000 sorc/gsi_enkf.fd create mode 160000 sorc/gsi_utils.fd diff --git a/sorc/gsi_enkf.fd b/sorc/gsi_enkf.fd new file mode 160000 index 00000000000..7fc00579378 --- /dev/null +++ b/sorc/gsi_enkf.fd @@ -0,0 +1 @@ +Subproject commit 7fc00579378c67f20bf981ce5fbf1f5c2753abc7 diff --git a/sorc/gsi_utils.fd b/sorc/gsi_utils.fd new file mode 160000 index 00000000000..f716012812c --- /dev/null +++ b/sorc/gsi_utils.fd @@ -0,0 +1 @@ +Subproject commit f716012812c2564e7eab24041f7a3ec14c7aa383 From 241392da270e68212a9e2dd40f8456471020aa87 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 14 Jan 2025 11:34:23 -0600 Subject: [PATCH 128/195] updating to correct hash for submodule gsi_enkf --- sorc/gsi_enkf.fd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/gsi_enkf.fd b/sorc/gsi_enkf.fd index 7fc00579378..27c03e83a66 160000 --- a/sorc/gsi_enkf.fd +++ b/sorc/gsi_enkf.fd @@ -1 +1 @@ -Subproject commit 7fc00579378c67f20bf981ce5fbf1f5c2753abc7 +Subproject commit 27c03e83a66fa2ba3b32781dab7cd6a8c0fc497d From 4669e387ea5a9e796536d1e0c53e1e2b8e75b9ba Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 14 Jan 2025 12:00:42 -0600 Subject: [PATCH 129/195] added inline documentation to the stage file python script --- ctests/scripts/stage.py | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/ctests/scripts/stage.py b/ctests/scripts/stage.py index 51b6c8051e7..b8a77a120d3 100755 --- a/ctests/scripts/stage.py +++ b/ctests/scripts/stage.py @@ -1,5 +1,24 @@ #!/usr/bin/env python3 +""" +stage.py + +This script is part of the ctest framework for testing Rocoto JJOBS that stages the +input files needed to run a JJOB independently from other jobs in the workflow. +The YAML file specified at the command line contains the paths to the staged input files +and their corresponding directories under the COMROOT of the experiment for the JJOB. + +Usage: + stage.py -y [-d ] + +Arguments: + -y, --yaml Path to the YAML file describing the job test configuration (required) + -d, --test_date Test date in YYYYMMDDHH format (optional) + +Example: + ./stage.py -y /path/to/config.yaml -d 2021032312 +""" + import os import datetime @@ -7,6 +26,7 @@ from pathlib import Path from wxflow import parse_j2yaml, FileHandler, Logger +# Initialize logger with environment variable for logging level logger = Logger(level=os.environ.get("LOGGING_LEVEL", "DEBUG"), colored_log=False) @@ -16,15 +36,18 @@ def parse_args(): Returns ------- - argparse.Namespace - The parsed command line arguments. + The parsed command line arguments, including: + - yaml: Path to the YAML file describing the job test configuration. + - test_date: Optional test date in YYYYMMDDHH format. """ description = """Arguments for creating and updating error log files """ parser = ArgumentParser(description=description) + # Add argument for YAML file path parser.add_argument('-y', '--yaml', help='full path to yaml file describing the job test configuration', type=Path, required=True) + # Add optional argument for test date parser.add_argument('-d', '--test_date', help='test date in YYYYMMDDHH format', type=str, required=False) return parser.parse_args() @@ -36,6 +59,9 @@ def parse_args(): data = {} if args.test_date: + # Parse test date from string to datetime object data['TEST_DATE'] = datetime.datetime.strptime(args.test_date, '%Y%m%d%H') + # Parse YAML configuration file with optional data case_cfg = parse_j2yaml(path=args.yaml, data=data) + # Synchronize input files as per the parsed configuration FileHandler(case_cfg.input_files).sync() From 892a6bf0f2c3d74189ce818da3df1a7ed2e1df74 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 14 Jan 2025 12:52:41 -0600 Subject: [PATCH 130/195] added simple README.md file in the ctest directory --- ctests/README.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 ctests/README.md diff --git a/ctests/README.md b/ctests/README.md new file mode 100644 index 00000000000..87b7a136b4a --- /dev/null +++ b/ctests/README.md @@ -0,0 +1,48 @@ +# CTest Framework for NOAA Global Workflow + +This directory contains the CTest framework for testing Rocoto JJOBS. The framework allows you to stage, execute, and validate individual JJOBS independently from other jobs in the workflow. Each test requires its own YAML definition of inputs and configurations. + +## Overview + +The CTest framework consists of the following scripts: +- **setup.sh.in**: Prepares the environment and creates the experiment. +- **stage.sh.in**: Stages the input files needed to run a JJOB. +- **execute.sh.in**: Executes the JJOB and monitors its status. +- **validate.sh.in**: (TODO) Validates the results of the JJOB. + +## Usage + +### CMake Configuration + +To configure the CTest framework using CMake, you need to provide several environment variables or default values. Here is an example of how to configure and build the project: + +```bash +# Set environment variables (may also be include at command line with -D) +export HPC_ACCOUNT="your_hpc_account" +export ICSDIR_ROOT="/path/to/icsdir_root" +export STAGED_TESTS_DIR="/path/to/staged_tests_dir" + +# Run CMake to configure the ctest framework +cmake -S /path/to/source -B /path/to/build -DRUNTESTS=/path/to/runtests + +``` + +### Running Tests with CTest + +Once the project is configured, you can run the tests using CTest. Here are some examples: + +#### Run All Tests + +```bash +cd /path/to/build +ctest +``` + +#### Run Tests for a Specific Case + +You can use the `-L` option with CTest to run tests for a specific case. For example, to run tests for the `C48_ATM` case: + +```bash +cd /path/to/build +ctest -L C48_ATM +``` \ No newline at end of file From b7f80cba31f0cbba561ca302d255aaf70b6a7b57 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 14 Jan 2025 13:20:43 -0600 Subject: [PATCH 131/195] included instructions on how to add a new test in the README.md file --- ctests/README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/ctests/README.md b/ctests/README.md index 87b7a136b4a..adeccfa682a 100644 --- a/ctests/README.md +++ b/ctests/README.md @@ -45,4 +45,15 @@ You can use the `-L` option with CTest to run tests for a specific case. For exa ```bash cd /path/to/build ctest -L C48_ATM +``` + +To add a new test use the **AddJJOBTest()** function at the end of the `$HOMEgfs/ctest/CMakeLists.txt` file as follow. +Then auther a new YAML file with the required staged input files as is done with this example for `$HOMEgfs/ctests/cases/C48_ATM_gfs_fcts_seg0.yaml` + +```cmake +AddJJOBTest( + CASE "C48_ATM" + JOB "gfs_fcst_seg0" + TEST_DATE "2021032312" +) ``` \ No newline at end of file From 898fcfe60a6750d2ba12951246802de3de5b5f92 Mon Sep 17 00:00:00 2001 From: TerrenceMcGuinness-NOAA Date: Tue, 14 Jan 2025 14:24:07 -0500 Subject: [PATCH 132/195] Update README.md update last bit --- ctests/README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/ctests/README.md b/ctests/README.md index adeccfa682a..7c7c087ade4 100644 --- a/ctests/README.md +++ b/ctests/README.md @@ -47,13 +47,12 @@ cd /path/to/build ctest -L C48_ATM ``` -To add a new test use the **AddJJOBTest()** function at the end of the `$HOMEgfs/ctest/CMakeLists.txt` file as follow. -Then auther a new YAML file with the required staged input files as is done with this example for `$HOMEgfs/ctests/cases/C48_ATM_gfs_fcts_seg0.yaml` - +To add a new test use the **AddJJOBTest()** function at the end of the `$HOMEgfs/ctest/CMakeLists.txt` file as follows: ```cmake AddJJOBTest( CASE "C48_ATM" JOB "gfs_fcst_seg0" TEST_DATE "2021032312" ) -``` \ No newline at end of file +``` +Then auther a new YAML file with the required staged input files as is done with this example for `$HOMEgfs/ctests/cases/C48_ATM_gfs_fcts_seg0.yaml` From 12cf0cf125c8f4f950febb920a826a2645c52241 Mon Sep 17 00:00:00 2001 From: TerrenceMcGuinness-NOAA Date: Tue, 14 Jan 2025 14:24:58 -0500 Subject: [PATCH 133/195] Update README.md fix misspelled work with create --- ctests/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/README.md b/ctests/README.md index 7c7c087ade4..1d402981b5e 100644 --- a/ctests/README.md +++ b/ctests/README.md @@ -55,4 +55,4 @@ AddJJOBTest( TEST_DATE "2021032312" ) ``` -Then auther a new YAML file with the required staged input files as is done with this example for `$HOMEgfs/ctests/cases/C48_ATM_gfs_fcts_seg0.yaml` +Then create a new YAML file with the required staged input files as is done with this example for `$HOMEgfs/ctests/cases/C48_ATM_gfs_fcts_seg0.yaml` From eeb744f06c63878ed66b792075f7e247c5e9a4b7 Mon Sep 17 00:00:00 2001 From: TerrenceMcGuinness-NOAA Date: Tue, 14 Jan 2025 14:26:00 -0500 Subject: [PATCH 134/195] Update README.md fixed a grammar in README.md --- ctests/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/README.md b/ctests/README.md index 1d402981b5e..41346654201 100644 --- a/ctests/README.md +++ b/ctests/README.md @@ -55,4 +55,4 @@ AddJJOBTest( TEST_DATE "2021032312" ) ``` -Then create a new YAML file with the required staged input files as is done with this example for `$HOMEgfs/ctests/cases/C48_ATM_gfs_fcts_seg0.yaml` +Then create a new YAML file with the required staged input files as is done with this example found in `$HOMEgfs/ctests/cases/C48_ATM_gfs_fcts_seg0.yaml` From 73211bc67c32629ebe0b2b9ed1ac26839830a2db Mon Sep 17 00:00:00 2001 From: TerrenceMcGuinness-NOAA Date: Tue, 14 Jan 2025 14:27:44 -0500 Subject: [PATCH 135/195] Update README.md path to source as HOMEgfs --- ctests/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/README.md b/ctests/README.md index 41346654201..95a32cd952e 100644 --- a/ctests/README.md +++ b/ctests/README.md @@ -23,7 +23,7 @@ export ICSDIR_ROOT="/path/to/icsdir_root" export STAGED_TESTS_DIR="/path/to/staged_tests_dir" # Run CMake to configure the ctest framework -cmake -S /path/to/source -B /path/to/build -DRUNTESTS=/path/to/runtests +cmake -S /path/to/HOMEgfs -B /path/to/build -DRUNTESTS=/path/to/runtests ``` From f18f1ee9430e5e2bcea347b841cf238989467e7f Mon Sep 17 00:00:00 2001 From: TerrenceMcGuinness-NOAA Date: Tue, 14 Jan 2025 17:06:02 -0500 Subject: [PATCH 136/195] Update ctests/scripts/validate.sh Co-authored-by: Rahul Mahajan --- ctests/scripts/validate.sh | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ctests/scripts/validate.sh b/ctests/scripts/validate.sh index ea1d3c41d97..55e48dc4171 100755 --- a/ctests/scripts/validate.sh +++ b/ctests/scripts/validate.sh @@ -1,2 +1,9 @@ #!/usr/bin/env bash -echo "This is a stub for the validate script." +set -ux + +TEST_NAME=${1:?"Name of the test is required"} +YAML_FILE=${2:?"Name of the CI yaml file for validating the test"} + +echo "validating '${TEST_NAME}' with yaml file '${YAML_FILE}'" + +exit 0 From b1a9fd2152ccf4301f05922e1dfec829b4d7a6e2 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 14 Jan 2025 16:18:31 -0600 Subject: [PATCH 137/195] added validate.sh.in template bash wrapper script --- ctests/CMakeLists.txt | 7 +++---- ctests/scripts/{validate.sh => validate.sh.in} | 8 ++++---- 2 files changed, 7 insertions(+), 8 deletions(-) rename ctests/scripts/{validate.sh => validate.sh.in} (94%) diff --git a/ctests/CMakeLists.txt b/ctests/CMakeLists.txt index 4aad8e5c9a9..ef72dc122b6 100644 --- a/ctests/CMakeLists.txt +++ b/ctests/CMakeLists.txt @@ -59,9 +59,8 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/stage.sh.in ${CMAKE_CURRENT_BINARY_DIR}/scripts/stage.sh @ONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/execute.sh.in ${CMAKE_CURRENT_BINARY_DIR}/scripts/execute.sh @ONLY) -# TODO - Validation step add its CMake Teplate for its bash wrapper script -# configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/validate.sh.in -# ${CMAKE_CURRENT_BINARY_DIR}/scripts/validate.sh @ONLY) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/validate.sh.in + ${CMAKE_CURRENT_BINARY_DIR}/scripts/validate.sh @ONLY) function(AddJJOBTest) @@ -95,7 +94,7 @@ function(AddJJOBTest) # TODO - This is a stub for the validation step add_test(NAME test_${TEST_NAME}_validate - COMMAND bash -c "${HOMEgfs}/ctests/scripts/validate.sh") + COMMAND bash -c "${HOMEgfs}/ctests/scripts/validate.sh ${TEST_NAME} ${CASE_YAML}") set_tests_properties(test_${TEST_NAME}_validate PROPERTIES DEPENDS test_${TEST_NAME}_execute LABELS "${ARG_CASE};${ARG_JOB}") endfunction() diff --git a/ctests/scripts/validate.sh b/ctests/scripts/validate.sh.in similarity index 94% rename from ctests/scripts/validate.sh rename to ctests/scripts/validate.sh.in index 55e48dc4171..02776999561 100755 --- a/ctests/scripts/validate.sh +++ b/ctests/scripts/validate.sh.in @@ -1,9 +1,9 @@ #!/usr/bin/env bash set -ux - + TEST_NAME=${1:?"Name of the test is required"} YAML_FILE=${2:?"Name of the CI yaml file for validating the test"} - + echo "validating '${TEST_NAME}' with yaml file '${YAML_FILE}'" - -exit 0 + +exit 0 \ No newline at end of file From f0584503971e8b1e1c5a3874baf482cb815e4616 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 14 Jan 2025 16:25:25 -0600 Subject: [PATCH 138/195] added cmake to Hercules gwsetup modulefile --- modulefiles/module_gwsetup.hercules.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/modulefiles/module_gwsetup.hercules.lua b/modulefiles/module_gwsetup.hercules.lua index 9d845fb71d6..e7735e4aa17 100644 --- a/modulefiles/module_gwsetup.hercules.lua +++ b/modulefiles/module_gwsetup.hercules.lua @@ -9,6 +9,7 @@ prepend_path("MODULEPATH", "/work/noaa/epic/role-epic/spack-stack/hercules/spack local stack_intel_ver=os.getenv("stack_intel_ver") or "2021.9.0" local python_ver=os.getenv("python_ver") or "3.11.6" +local cmake_ver=os.getenv("cmake_ver") or "3.23.1" load(pathJoin("stack-intel", stack_intel_ver)) load(pathJoin("python", python_ver)) From eede5741b2927b91f51e3eefb0262ee9fbe04a86 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 14 Jan 2025 16:41:33 -0600 Subject: [PATCH 139/195] updated path to validate.sh --- ctests/CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ctests/CMakeLists.txt b/ctests/CMakeLists.txt index ef72dc122b6..5d4747810b5 100644 --- a/ctests/CMakeLists.txt +++ b/ctests/CMakeLists.txt @@ -59,7 +59,7 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/stage.sh.in ${CMAKE_CURRENT_BINARY_DIR}/scripts/stage.sh @ONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/execute.sh.in ${CMAKE_CURRENT_BINARY_DIR}/scripts/execute.sh @ONLY) - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/validate.sh.in +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/validate.sh.in ${CMAKE_CURRENT_BINARY_DIR}/scripts/validate.sh @ONLY) function(AddJJOBTest) @@ -94,7 +94,8 @@ function(AddJJOBTest) # TODO - This is a stub for the validation step add_test(NAME test_${TEST_NAME}_validate - COMMAND bash -c "${HOMEgfs}/ctests/scripts/validate.sh ${TEST_NAME} ${CASE_YAML}") + COMMAND bash -c ./validate.sh ${TEST_NAME} ${CASE_YAML} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts) set_tests_properties(test_${TEST_NAME}_validate PROPERTIES DEPENDS test_${TEST_NAME}_execute LABELS "${ARG_CASE};${ARG_JOB}") endfunction() From 7da3828c29b192d197ad59cc437fc286513d61e9 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 14 Jan 2025 19:39:12 -0600 Subject: [PATCH 140/195] needed to remove bash from the COMMAND line for validate.sh --- ctests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/CMakeLists.txt b/ctests/CMakeLists.txt index 5d4747810b5..14e6cd0150c 100644 --- a/ctests/CMakeLists.txt +++ b/ctests/CMakeLists.txt @@ -94,7 +94,7 @@ function(AddJJOBTest) # TODO - This is a stub for the validation step add_test(NAME test_${TEST_NAME}_validate - COMMAND bash -c ./validate.sh ${TEST_NAME} ${CASE_YAML} + COMMAND ./validate.sh ${TEST_NAME} ${CASE_YAML} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts) set_tests_properties(test_${TEST_NAME}_validate PROPERTIES DEPENDS test_${TEST_NAME}_execute LABELS "${ARG_CASE};${ARG_JOB}") endfunction() From e48ae52d7524d15649e0888bc2fd5a9202fe481e Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 15 Jan 2025 08:27:54 -0600 Subject: [PATCH 141/195] allow the build to continue whe ctests can not be created without the needed env vars set --- ctests/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ctests/CMakeLists.txt b/ctests/CMakeLists.txt index 14e6cd0150c..f8d928f456a 100644 --- a/ctests/CMakeLists.txt +++ b/ctests/CMakeLists.txt @@ -28,21 +28,21 @@ set_from_env_or_default(RUNTESTS RUNTESTS "${CMAKE_CURRENT_BINARY_DIR}/RUNTESTS" # Set HPC_ACCOUNT set_from_env_or_default(HPC_ACCOUNT HPC_ACCOUNT " ") if (NOT DEFINED HPC_ACCOUNT) - message(FATAL_ERROR "HPC_ACCOUNT must be set") + message(WARNING "HPC_ACCOUNT must be set. CTests will not be created.") return() endif() # Set ICSDIR_ROOT set_from_env_or_default(ICSDIR_ROOT ICSDIR_ROOT "") if (NOT DEFINED ICSDIR_ROOT) - message(FATAL_ERROR "ICSDIR_ROOT must be set") + message(WARNING "ICSDIR_ROOT must be set. CTests will not be created.") return() endif() # Set STAGED_TESTS_DIR set_from_env_or_default(STAGED_TESTS_DIR STAGED_TESTS_DIR "") if (NOT DEFINED STAGED_TESTS_DIR) - message(FATAL_ERROR "STAGED_TESTS_DIR must be set") + message(WARNING "STAGED_TESTS_DIR must be set. CTests will not be created.") return() endif() From 13188584081642ba9db4fada4c1ff6bfd70d2a13 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 15 Jan 2025 12:06:53 -0600 Subject: [PATCH 142/195] added folder compair code to capture output of job --- ctests/folder_compair.py | 77 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 ctests/folder_compair.py diff --git a/ctests/folder_compair.py b/ctests/folder_compair.py new file mode 100644 index 00000000000..e7cfdd84f79 --- /dev/null +++ b/ctests/folder_compair.py @@ -0,0 +1,77 @@ +""" +Compare two folders and produce a comprehensive report of which files +are unique to each folder and which are common. Creates a YAML file +listing the full paths of these files. +Usage: + python compare_folders.py +""" + +import sys +import os +from pathlib import Path + +try: + import yaml +except ImportError: + print("Please install pyyaml: pip install pyyaml") + sys.exit(1) + +def gather_files(folder): + """Return a set of file paths (relative to 'folder') for all files within it.""" + folder = Path(folder).resolve() + all_files = set() + for root, dirs, files in os.walk(folder): + for file_name in files: + full_path = Path(root) / file_name + # Store paths relative to 'folder' + rel_path = full_path.relative_to(folder) + all_files.add(rel_path) + return all_files + +def main(folder1, folder2, output_yaml): + folder1 = Path(folder1).resolve() + folder2 = Path(folder2).resolve() + + # Gather all files in each folder (relative paths) + files_in_1 = gather_files(folder1) + files_in_2 = gather_files(folder2) + + # Compute differences + unique_to_folder1 = sorted(list(files_in_1 - files_in_2)) + unique_to_folder2 = sorted(list(files_in_2 - files_in_1)) + in_both = sorted(list(files_in_1 & files_in_2)) + + # Build the output data + comparison_result = { + "folder1": str(folder1), + "folder2": str(folder2), + "unique_to_folder1": [str(folder1 / rel) for rel in unique_to_folder1], + "unique_to_folder2": [str(folder2 / rel) for rel in unique_to_folder2], + "common_files": { + "count": len(in_both), + "files": [ + { + "in_folder1": str(folder1 / rel), + "in_folder2": str(folder2 / rel) + } + for rel in in_both + ] + } + } + + # Write to YAML + with open(output_yaml, "w", encoding="utf-8") as f: + yaml.dump(comparison_result, f, sort_keys=False) + + print(f"Comparison complete. Results written to {output_yaml}") + +if __name__ == "__main__": + if len(sys.argv) != 4: + print("Usage: python compare_folders.py ") + sys.exit(1) + + folder1_arg = sys.argv[1] + folder2_arg = sys.argv[2] + output_yaml_arg = sys.argv[3] + + main(folder1_arg, folder2_arg, output_yaml_arg) \ No newline at end of file From 704887dd108ee7cb22f68567ca20076c27be4f98 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 15 Jan 2025 13:59:47 -0600 Subject: [PATCH 143/195] added to helper file util to copy files --- ctests/folder_compair.py | 42 +++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/ctests/folder_compair.py b/ctests/folder_compair.py index e7cfdd84f79..0c733a5f5c0 100644 --- a/ctests/folder_compair.py +++ b/ctests/folder_compair.py @@ -9,6 +9,8 @@ import sys import os from pathlib import Path +from argparse import ArgumentParser +import shutil try: import yaml @@ -16,6 +18,13 @@ print("Please install pyyaml: pip install pyyaml") sys.exit(1) +def parse_args(): + parser = ArgumentParser() + parser.add_argument("--cmp_folders", nargs=2, required=False, help="Paths to compare") + parser.add_argument("--yaml", required=False, help="Path to output YAML file") + parser.add_argument("--copy_files", help="Path to copy the common files to") + return parser.parse_args() + def gather_files(folder): """Return a set of file paths (relative to 'folder') for all files within it.""" folder = Path(folder).resolve() @@ -28,7 +37,8 @@ def gather_files(folder): all_files.add(rel_path) return all_files -def main(folder1, folder2, output_yaml): +def compair_folders(folder1, folder2, output_yaml): + folder1 = Path(folder1).resolve() folder2 = Path(folder2).resolve() @@ -65,13 +75,27 @@ def main(folder1, folder2, output_yaml): print(f"Comparison complete. Results written to {output_yaml}") -if __name__ == "__main__": - if len(sys.argv) != 4: - print("Usage: python compare_folders.py ") - sys.exit(1) +def copy_common_files(common_files, folder1, dest_folder): + dest_folder = Path(dest_folder) + dest_folder.mkdir(parents=True, exist_ok=True) + for rel_path in common_files: + source_file = folder1 / rel_path + target_file = dest_folder / rel_path + target_file.parent.mkdir(parents=True, exist_ok=True) + shutil.copy2(source_file, target_file) - folder1_arg = sys.argv[1] - folder2_arg = sys.argv[2] - output_yaml_arg = sys.argv[3] +def load_output_files(yaml_path): + with open(yaml_path, "r") as f: + data = yaml.safe_load(f) + return data.get("output_files", []) - main(folder1_arg, folder2_arg, output_yaml_arg) \ No newline at end of file +if __name__ == "__main__": + args = parse_args() + if args.cmp_folders: + folder1_arg, folder2_arg = args.cmp_folders + output_yaml = args.yaml + compair_folders(folder1_arg, folder2_arg, output_yaml) + if args.copy_files: + input_yaml = args.yaml + output_files = load_output_files(input_yaml) + copy_common_files(output_files, Path(folder1_arg).resolve(), args.copy_files) \ No newline at end of file From 69469ea6186adf2aca6f6bbfb907ca39fc5ecf10 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 15 Jan 2025 14:03:52 -0600 Subject: [PATCH 144/195] removed full path and only save relative path --- ctests/folder_compair.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ctests/folder_compair.py b/ctests/folder_compair.py index 0c733a5f5c0..ca9e979dd04 100644 --- a/ctests/folder_compair.py +++ b/ctests/folder_compair.py @@ -55,14 +55,14 @@ def compair_folders(folder1, folder2, output_yaml): comparison_result = { "folder1": str(folder1), "folder2": str(folder2), - "unique_to_folder1": [str(folder1 / rel) for rel in unique_to_folder1], - "unique_to_folder2": [str(folder2 / rel) for rel in unique_to_folder2], + "unique_to_folder1": [str(rel) for rel in unique_to_folder1], + "unique_to_folder2": [str(rel) for rel in unique_to_folder2], "common_files": { "count": len(in_both), "files": [ { - "in_folder1": str(folder1 / rel), - "in_folder2": str(folder2 / rel) + "in_folder1": str(rel), + "in_folder2": str(rel) } for rel in in_both ] From 30790289e99f4dafdc7cc57f309cb3340d59beaa Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 15 Jan 2025 14:21:04 -0600 Subject: [PATCH 145/195] added pwd to folder where the files are --- ctests/folder_compair.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/folder_compair.py b/ctests/folder_compair.py index ca9e979dd04..6d5103c6459 100644 --- a/ctests/folder_compair.py +++ b/ctests/folder_compair.py @@ -98,4 +98,4 @@ def load_output_files(yaml_path): if args.copy_files: input_yaml = args.yaml output_files = load_output_files(input_yaml) - copy_common_files(output_files, Path(folder1_arg).resolve(), args.copy_files) \ No newline at end of file + copy_common_files(output_files, Path.cwd(), args.copy_files) \ No newline at end of file From ab43e45c63b0ebfdb43bf10d618ba0ea71864b7d Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 15 Jan 2025 14:23:41 -0600 Subject: [PATCH 146/195] added shabang --- ctests/folder_compair.py | 2 ++ 1 file changed, 2 insertions(+) mode change 100644 => 100755 ctests/folder_compair.py diff --git a/ctests/folder_compair.py b/ctests/folder_compair.py old mode 100644 new mode 100755 index 6d5103c6459..de53a764474 --- a/ctests/folder_compair.py +++ b/ctests/folder_compair.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + """ Compare two folders and produce a comprehensive report of which files are unique to each folder and which are common. Creates a YAML file From 137f0b059a9e3394566f5803288d7aaf2f5aa3d1 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 15 Jan 2025 14:49:12 -0600 Subject: [PATCH 147/195] use two args for copy files as relative paths --- ctests/{folder_compair.py => file_utils.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename ctests/{folder_compair.py => file_utils.py} (100%) diff --git a/ctests/folder_compair.py b/ctests/file_utils.py similarity index 100% rename from ctests/folder_compair.py rename to ctests/file_utils.py From 3798c22e5b4bfec092fbb0f149d025785bdfd23e Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 15 Jan 2025 14:51:25 -0600 Subject: [PATCH 148/195] use two args for copy files as relative paths 2 --- ctests/file_utils.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ctests/file_utils.py b/ctests/file_utils.py index de53a764474..84fd29d1cb0 100755 --- a/ctests/file_utils.py +++ b/ctests/file_utils.py @@ -24,7 +24,7 @@ def parse_args(): parser = ArgumentParser() parser.add_argument("--cmp_folders", nargs=2, required=False, help="Paths to compare") parser.add_argument("--yaml", required=False, help="Path to output YAML file") - parser.add_argument("--copy_files", help="Path to copy the common files to") + parser.add_argument("--copy_files", nargs=2, help="Paths to copy the common files from and to") return parser.parse_args() def gather_files(folder): @@ -100,4 +100,5 @@ def load_output_files(yaml_path): if args.copy_files: input_yaml = args.yaml output_files = load_output_files(input_yaml) - copy_common_files(output_files, Path.cwd(), args.copy_files) \ No newline at end of file + from_folder_arg, to_folder_arg = args.copy_files + copy_common_files(output_files, Path(from_folder_arg), to_folder_arg) \ No newline at end of file From 2328b6f5f188bb29b7c121ff6d2ce6111372c725 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 15 Jan 2025 16:17:59 -0600 Subject: [PATCH 149/195] added basic validation script --- ctests/CMakeLists.txt | 2 +- ctests/cases/C48_ATM_gfs_fcst_seg0.yaml | 157 +++++++++++++++++++++--- ctests/scripts/validate.py | 41 +++++++ ctests/scripts/validate.sh.in | 23 +++- 4 files changed, 207 insertions(+), 16 deletions(-) create mode 100644 ctests/scripts/validate.py diff --git a/ctests/CMakeLists.txt b/ctests/CMakeLists.txt index f8d928f456a..434a12f48cf 100644 --- a/ctests/CMakeLists.txt +++ b/ctests/CMakeLists.txt @@ -94,7 +94,7 @@ function(AddJJOBTest) # TODO - This is a stub for the validation step add_test(NAME test_${TEST_NAME}_validate - COMMAND ./validate.sh ${TEST_NAME} ${CASE_YAML} + COMMAND ./validate.sh ${TEST_NAME} ${ARG_TEST_DATE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts) set_tests_properties(test_${TEST_NAME}_validate PROPERTIES DEPENDS test_${TEST_NAME}_execute LABELS "${ARG_CASE};${ARG_JOB}") endfunction() diff --git a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml index a30f91e85b5..e7ed3bc1f38 100644 --- a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml @@ -1,17 +1,146 @@ input_files: mkdir: - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//input_files/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input" copy: - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_ctrl.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile1.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile2.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile3.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile4.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}///gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile6.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile1.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile2.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile3.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile4.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile6.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_ctrl.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/gfs_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}///gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/gfs_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/gfs_data.tile6.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile6.nc"] + +output_files: + cmpfiles: + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/conf/ufs.diag_table", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/conf/ufs.diag_table"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/conf/ufs.input.nml", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/conf/ufs.input.nml"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/conf/ufs.model_configure", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/conf/ufs.model_configure"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf000.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf000.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf003.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf003.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf006.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf006.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf009.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf009.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf012.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf012.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf015.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf015.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf018.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf018.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf021.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf021.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf024.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf024.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf027.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf027.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf030.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf030.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf033.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf033.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf036.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf036.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf039.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf039.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf042.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf042.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf045.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf045.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf048.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf048.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf051.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf051.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf054.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf054.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf057.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf057.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf060.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf060.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf063.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf063.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf066.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf066.nc"] + - ["{{ 'STAGED_TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf069.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf069.nc"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf072.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf072.nc"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf075.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf075.nc"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf078.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf078.nc"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf081.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf081.nc"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf084.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf084.nc"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf087.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf087.nc"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf090.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf090.nc"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf093.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf093.nc"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf096.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf096.nc"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf099.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf099.nc"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf102.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf102.nc"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf105.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf105.nc"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf108.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf108.nc"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf111.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf111.nc"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf114.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf114.nc"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf117.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf117.nc"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf120.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf120.nc"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f000", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f000"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f003", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f003"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f006", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f006"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f009", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f009"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f012", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f012"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f015", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f015"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f018", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f018"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f021", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f021"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f024", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f024"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f027", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f027"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f030", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f030"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f033", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f033"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f036", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f036"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f039", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f039"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f042", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f042"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f045", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f045"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f048", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f048"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f051", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f051"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f054", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f054"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f057", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f057"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f060", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f060"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f063", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f063"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f066", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f066"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f069", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f069"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f072", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f072"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f075", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f075"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f078", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f078"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f081", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f081"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f084", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f084"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f087", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f087"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f090", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f090"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f093", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f093"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f096", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f096"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f099", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f099"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f102", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f102"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f105", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f105"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f108", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f108"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f111", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f111"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f114", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f114"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f117", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f117"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f120", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f120"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf000.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf000.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf003.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf003.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf006.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf006.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf009.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf009.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf012.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf012.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf015.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf015.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf018.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf018.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf021.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf021.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf024.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf024.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf027.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf027.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf030.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf030.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf033.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf033.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf036.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf036.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf039.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf039.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf042.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf042.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf045.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf045.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf048.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf048.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf051.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf051.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf054.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf054.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf057.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf057.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf060.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf060.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf063.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf063.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf066.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf066.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf069.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf069.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf072.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf072.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf075.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf075.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf078.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf078.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf081.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf081.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf084.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf084.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf087.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf087.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf090.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf090.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf093.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf093.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf096.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf096.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf099.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf099.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf102.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf102.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf105.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf105.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf108.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf108.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf111.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf111.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf114.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf114.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf117.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf117.grib2"] + - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf120.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf120.grib2"] diff --git a/ctests/scripts/validate.py b/ctests/scripts/validate.py new file mode 100644 index 00000000000..05cfb98a542 --- /dev/null +++ b/ctests/scripts/validate.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python3 + +import sys +import argparse +from pathlib import Path +import datetime +import hashlib +from wxflow import parse_j2yaml + +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument("--yaml", required=True) + parser.add_argument("--test_date", required=True) + return parser.parse_args() + +def file_checksum(path): + hasher = hashlib.md5() + with open(path, "rb") as f: + for chunk in iter(lambda: f.read(4096), b""): + hasher.update(chunk) + return hasher.hexdigest() + +def validate_cmpfiles(config): + cmpfiles = config.get("output_files", {}).get("cmpfiles", []) + for pair in cmpfiles: + file_a, file_b = pair + if file_checksum(file_a) != file_checksum(file_b): + raise ValueError(f"Checksum mismatch: {file_a} vs {file_b}") + +if __name__ == "__main__": + args = parse_args() + + data = {} + if args.test_date: + # Parse test date from string to datetime object + data['TEST_DATE'] = datetime.datetime.strptime(args.test_date, '%Y%m%d%H') + + files = parse_j2yaml(path=args.yaml, data=data) + validate_cmpfiles(files) + + print(f"All files exist for test: {args.test_name}") \ No newline at end of file diff --git a/ctests/scripts/validate.sh.in b/ctests/scripts/validate.sh.in index 02776999561..08b47c1128f 100755 --- a/ctests/scripts/validate.sh.in +++ b/ctests/scripts/validate.sh.in @@ -2,8 +2,29 @@ set -ux TEST_NAME=${1:?"Name of the test is required"} -YAML_FILE=${2:?"Name of the CI yaml file for validating the test"} +TEST_DATE=${2:?"idate of the test is required"} echo "validating '${TEST_NAME}' with yaml file '${YAML_FILE}'" + +# CMake to fill these variables +STAGED_TESTS_DIR="@STAGED_TESTS_DIR@" +RUNTESTS="@RUNTESTS@" +HOMEgfs="@PROJECT_SOURCE_DIR@" + +# Load the runtime environment for this script (needs wxflow and its dependencies) +set +x +source "${HOMEgfs}/workflow/gw_setup.sh" +rc=$? +[[ "${rc}" -ne 0 ]] && exit "${status}" +set -x +PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${HOMEgfs}/sorc/wxflow/src" +export PYTHONPATH + +INPUTS_YAML="${HOMEgfs}/ctests/cases/${TEST_NAME}.yaml" + +TEST_NAME="${TEST_NAME}" \ +RUNTESTS="${RUNTESTS}" \ +STAGED_TESTS_DIR="${STAGED_TESTS_DIR}" \ +validate.py --yaml ${YAML_FILE} --test_date "${TEST_DATE}" exit 0 \ No newline at end of file From d985542eafeb0382006ab6cb4bcb2b7af8e4845c Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 15 Jan 2025 16:28:11 -0600 Subject: [PATCH 150/195] fixed bugs in validate.sh.in --- ctests/scripts/validate.sh.in | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ctests/scripts/validate.sh.in b/ctests/scripts/validate.sh.in index 08b47c1128f..e35e7e3a5a7 100755 --- a/ctests/scripts/validate.sh.in +++ b/ctests/scripts/validate.sh.in @@ -4,8 +4,6 @@ set -ux TEST_NAME=${1:?"Name of the test is required"} TEST_DATE=${2:?"idate of the test is required"} -echo "validating '${TEST_NAME}' with yaml file '${YAML_FILE}'" - # CMake to fill these variables STAGED_TESTS_DIR="@STAGED_TESTS_DIR@" RUNTESTS="@RUNTESTS@" @@ -21,10 +19,11 @@ PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${HOMEgfs}/sorc/wxflow/src" export PYTHONPATH INPUTS_YAML="${HOMEgfs}/ctests/cases/${TEST_NAME}.yaml" +echo "validating '${TEST_NAME}' with yaml file '${INPUTS_YAML}'" TEST_NAME="${TEST_NAME}" \ RUNTESTS="${RUNTESTS}" \ STAGED_TESTS_DIR="${STAGED_TESTS_DIR}" \ -validate.py --yaml ${YAML_FILE} --test_date "${TEST_DATE}" +"${HOMEgfs}/ctests/scripts/validate.py --yaml ${YAML_FILE} --test_date "${TEST_DATE}" exit 0 \ No newline at end of file From 11180748e1ce64499b67c000723a943458824f81 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 15 Jan 2025 16:43:45 -0600 Subject: [PATCH 151/195] extra / got in yaml --- ctests/cases/C48_ATM_gfs_fcst_seg0.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml index e7ed3bc1f38..a6f840e8b4d 100644 --- a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml @@ -2,12 +2,12 @@ input_files: mkdir: - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//input_files/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input" copy: - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_ctrl.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile1.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_ctrl.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile2.nc"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile3.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/gfs_data.tile4.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}///gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/gfs_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/gfs_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/gfs_data.tile5.nc"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/gfs_data.tile6.nc"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile1.nc"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile2.nc"] From d7777dcd238f2179b83fa5861f9eea1f6ecc0ea4 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 15 Jan 2025 16:51:27 -0600 Subject: [PATCH 152/195] had to add underscores back in to yaml file --- ctests/cases/C48_ATM_gfs_fcst_seg0.yaml | 270 ++++++++++++------------ 1 file changed, 135 insertions(+), 135 deletions(-) diff --git a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml index a6f840e8b4d..6b7e45cb761 100644 --- a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml @@ -6,141 +6,141 @@ input_files: - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile1.nc"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile2.nc"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile3.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/gfs_data.tile4.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/gfs_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/gfs_data.tile6.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile1.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile2.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile3.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile4.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/input_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile6.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/gfs_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/gfs_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/gfs_data.tile6.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile6.nc"] output_files: cmpfiles: - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/conf/ufs.diag_table", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/conf/ufs.diag_table"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/conf/ufs.input.nml", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/conf/ufs.input.nml"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/conf/ufs.model_configure", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/conf/ufs.model_configure"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf000.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf000.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf003.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf003.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf006.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf006.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf009.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf009.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf012.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf012.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf015.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf015.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf018.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf018.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf021.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf021.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf024.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf024.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf027.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf027.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf030.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf030.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf033.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf033.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf036.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf036.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf039.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf039.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf042.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf042.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf045.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf045.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf048.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf048.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf051.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf051.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf054.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf054.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf057.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf057.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf060.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf060.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf063.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf063.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf066.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf066.nc"] - - ["{{ 'STAGED_TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf069.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf069.nc"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf072.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf072.nc"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf075.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf075.nc"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf078.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf078.nc"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf081.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf081.nc"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf084.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf084.nc"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf087.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf087.nc"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf090.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf090.nc"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf093.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf093.nc"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf096.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf096.nc"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf099.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf099.nc"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf102.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf102.nc"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf105.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf105.nc"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf108.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf108.nc"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf111.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf111.nc"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf114.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf114.nc"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf117.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf117.nc"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf120.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf120.nc"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f000", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f000"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f003", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f003"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f006", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f006"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f009", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f009"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f012", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f012"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f015", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f015"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f018", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f018"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f021", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f021"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f024", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f024"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f027", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f027"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f030", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f030"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f033", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f033"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f036", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f036"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f039", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f039"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f042", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f042"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f045", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f045"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f048", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f048"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f051", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f051"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f054", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f054"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f057", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f057"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f060", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f060"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f063", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f063"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f066", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f066"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f069", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f069"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f072", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f072"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f075", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f075"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f078", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f078"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f081", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f081"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f084", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f084"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f087", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f087"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f090", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f090"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f093", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f093"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f096", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f096"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f099", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f099"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f102", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f102"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f105", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f105"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f108", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f108"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f111", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f111"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f114", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f114"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f117", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f117"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f120", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f120"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf000.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf000.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf003.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf003.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf006.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf006.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf009.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf009.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf012.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf012.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf015.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf015.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf018.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf018.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf021.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf021.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf024.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf024.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf027.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf027.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf030.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf030.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf033.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf033.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf036.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf036.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf039.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf039.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf042.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf042.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf045.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf045.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf048.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf048.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf051.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf051.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf054.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf054.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf057.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf057.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf060.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf060.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf063.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf063.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf066.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf066.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf069.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf069.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf072.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf072.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf075.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf075.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf078.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf078.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf081.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf081.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf084.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf084.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf087.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf087.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf090.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf090.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf093.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf093.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf096.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf096.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf099.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf099.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf102.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf102.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf105.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf105.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf108.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf108.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf111.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf111.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf114.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf114.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf117.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf117.grib2"] - - ["{{ 'STAGED TEST DIR' | getenv }}/{{ 'TEST NAME' | getenv }}/output_files/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf120.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST NAME' | getenv }}/gfs.{{ TEST DATE | to_YMD }}/{{ TEST DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf120.grib2"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.diag_table", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.diag_table"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.input.nml", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.input.nml"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.model_configure", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.model_configure"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf000.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf000.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf003.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf003.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf006.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf006.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf009.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf009.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf012.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf012.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf015.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf015.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf018.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf018.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf021.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf021.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf024.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf024.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf027.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf027.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf030.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf030.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf033.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf033.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf036.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf036.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf039.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf039.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf042.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf042.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf045.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf045.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf048.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf048.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf051.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf051.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf054.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf054.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf057.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf057.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf060.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf060.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf063.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf063.nc"] + - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf066.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf066.nc"] + - ["{{ 'STAGED_TEST DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf069.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf069.nc"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf072.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf072.nc"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf075.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf075.nc"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf078.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf078.nc"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf081.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf081.nc"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf084.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf084.nc"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf087.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf087.nc"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf090.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf090.nc"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf093.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf093.nc"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf096.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf096.nc"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf099.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf099.nc"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf102.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf102.nc"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf105.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf105.nc"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf108.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf108.nc"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf111.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf111.nc"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf114.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf114.nc"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf117.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf117.nc"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf120.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf120.nc"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f000", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f000"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f003", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f003"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f006", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f006"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f009", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f009"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f012", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f012"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f015", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f015"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f018", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f018"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f021", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f021"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f024", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f024"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f027", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f027"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f030", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f030"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f033", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f033"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f036", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f036"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f039", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f039"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f042", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f042"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f045", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f045"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f048", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f048"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f051", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f051"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f054", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f054"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f057", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f057"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f060", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f060"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f063", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f063"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f066", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f066"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f069", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f069"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f072", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f072"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f075", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f075"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f078", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f078"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f081", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f081"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f084", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f084"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f087", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f087"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f090", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f090"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f093", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f093"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f096", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f096"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f099", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f099"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f102", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f102"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f105", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f105"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f108", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f108"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f111", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f111"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f114", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f114"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f117", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f117"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f120", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f120"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf000.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf000.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf003.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf003.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf006.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf006.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf009.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf009.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf012.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf012.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf015.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf015.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf018.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf018.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf021.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf021.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf024.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf024.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf027.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf027.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf030.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf030.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf033.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf033.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf036.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf036.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf039.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf039.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf042.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf042.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf045.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf045.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf048.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf048.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf051.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf051.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf054.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf054.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf057.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf057.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf060.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf060.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf063.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf063.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf066.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf066.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf069.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf069.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf072.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf072.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf075.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf075.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf078.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf078.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf081.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf081.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf084.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf084.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf087.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf087.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf090.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf090.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf093.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf093.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf096.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf096.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf099.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf099.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf102.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf102.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf105.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf105.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf108.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf108.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf111.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf111.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf114.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf114.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf117.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf117.grib2"] + - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf120.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf120.grib2"] From ea32a7c0d3ec665428f2e46747973cb3789860c6 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 15 Jan 2025 16:54:20 -0600 Subject: [PATCH 153/195] had to add more underscores back in to yaml file --- ctests/cases/C48_ATM_gfs_fcst_seg0.yaml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml index 6b7e45cb761..647d7c62785 100644 --- a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml @@ -6,15 +6,15 @@ input_files: - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile1.nc"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile2.nc"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile3.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/gfs_data.tile4.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/gfs_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/gfs_data.tile6.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile1.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile2.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile3.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile4.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TESTDATE | to_YMD}}/{{TESTDATE | strftime('%H')}}/model/atmos/input/sfc_data.tile6.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile6.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile6.nc"] output_files: cmpfiles: From e082fc33a715c928febd0ad4a8d008864dbe98d4 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 15 Jan 2025 17:07:24 -0600 Subject: [PATCH 154/195] mistakenly had input files in path for mkdir --- ctests/cases/C48_ATM_gfs_fcst_seg0.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml index 647d7c62785..568c62f8a7c 100644 --- a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml @@ -1,6 +1,6 @@ input_files: mkdir: - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}//input_files/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input" copy: - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_ctrl.nc"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile1.nc"] From 36303c1b5f2500b2e6327fbbbc6799790e2a5421 Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Thu, 16 Jan 2025 12:19:21 -0500 Subject: [PATCH 155/195] print ok for each file on verify --- ctests/scripts/validate.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ctests/scripts/validate.py b/ctests/scripts/validate.py index 05cfb98a542..80e7e920781 100644 --- a/ctests/scripts/validate.py +++ b/ctests/scripts/validate.py @@ -23,9 +23,11 @@ def file_checksum(path): def validate_cmpfiles(config): cmpfiles = config.get("output_files", {}).get("cmpfiles", []) for pair in cmpfiles: + print(f"Comparing files: {pair} ...",end="") file_a, file_b = pair if file_checksum(file_a) != file_checksum(file_b): raise ValueError(f"Checksum mismatch: {file_a} vs {file_b}") + print("OK") if __name__ == "__main__": args = parse_args() From 3fdedde0b020ef94c8f4d358bf7f4f88baeb6ef9 Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Thu, 16 Jan 2025 12:25:24 -0500 Subject: [PATCH 156/195] missed a quote on command line of validate.sh.in --- ctests/scripts/validate.sh.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/scripts/validate.sh.in b/ctests/scripts/validate.sh.in index e35e7e3a5a7..e70b72a72db 100755 --- a/ctests/scripts/validate.sh.in +++ b/ctests/scripts/validate.sh.in @@ -24,6 +24,6 @@ echo "validating '${TEST_NAME}' with yaml file '${INPUTS_YAML}'" TEST_NAME="${TEST_NAME}" \ RUNTESTS="${RUNTESTS}" \ STAGED_TESTS_DIR="${STAGED_TESTS_DIR}" \ -"${HOMEgfs}/ctests/scripts/validate.py --yaml ${YAML_FILE} --test_date "${TEST_DATE}" +"${HOMEgfs}/ctests/scripts/validate.py" --yaml "${YAML_FILE}" --test_date "${TEST_DATE}" exit 0 \ No newline at end of file From ccd50e798b3c5344183d3fa61f5ed4b26b54bfa3 Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Thu, 16 Jan 2025 12:38:45 -0500 Subject: [PATCH 157/195] fixed but name of YAML_FILE and permisions to run pytnon script for valicate.py --- ctests/scripts/stage.sh.in | 4 ++-- ctests/scripts/validate.py | 0 ctests/scripts/validate.sh.in | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) mode change 100644 => 100755 ctests/scripts/validate.py diff --git a/ctests/scripts/stage.sh.in b/ctests/scripts/stage.sh.in index 9ced3d8f4ed..ca1297b3024 100755 --- a/ctests/scripts/stage.sh.in +++ b/ctests/scripts/stage.sh.in @@ -19,12 +19,12 @@ set -x PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${HOMEgfs}/sorc/wxflow/src" export PYTHONPATH -INPUTS_YAML="${HOMEgfs}/ctests/cases/${TEST_NAME}.yaml" +YAML_FILE="${HOMEgfs}/ctests/cases/${TEST_NAME}.yaml" TEST_NAME="${TEST_NAME}" \ RUNTESTS="${RUNTESTS}" \ STAGED_TESTS_DIR="${STAGED_TESTS_DIR}" \ -"${HOMEgfs}/ctests/scripts/stage.py" --yaml "${INPUTS_YAML}" --test_date "${TEST_DATE}" +"${HOMEgfs}/ctests/scripts/stage.py" --yaml "${YAML_FILE}" --test_date "${TEST_DATE}" rc=$? if [[ "${rc}" -ne 0 ]]; then set +x diff --git a/ctests/scripts/validate.py b/ctests/scripts/validate.py old mode 100644 new mode 100755 diff --git a/ctests/scripts/validate.sh.in b/ctests/scripts/validate.sh.in index e70b72a72db..083677f8c34 100755 --- a/ctests/scripts/validate.sh.in +++ b/ctests/scripts/validate.sh.in @@ -18,7 +18,7 @@ set -x PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${HOMEgfs}/sorc/wxflow/src" export PYTHONPATH -INPUTS_YAML="${HOMEgfs}/ctests/cases/${TEST_NAME}.yaml" +YAML_FILE="${HOMEgfs}/ctests/cases/${TEST_NAME}.yaml" echo "validating '${TEST_NAME}' with yaml file '${INPUTS_YAML}'" TEST_NAME="${TEST_NAME}" \ From bc107c8fd29513e0548754036dfcf77a659dc73e Mon Sep 17 00:00:00 2001 From: Terry McGUinness Date: Thu, 16 Jan 2025 12:58:36 -0500 Subject: [PATCH 158/195] missed spelling of STAGED_TESTS_DIR in yaml and needed check for fail in valicate bash wrapper --- ctests/cases/C48_ATM_gfs_fcst_seg0.yaml | 252 ++++++++++++------------ ctests/scripts/validate.sh.in | 9 +- 2 files changed, 134 insertions(+), 127 deletions(-) diff --git a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml index 568c62f8a7c..c2094b78954 100644 --- a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml @@ -18,129 +18,129 @@ input_files: output_files: cmpfiles: - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.diag_table", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.diag_table"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.input.nml", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.input.nml"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.model_configure", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.model_configure"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf000.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf000.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf003.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf003.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf006.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf006.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf009.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf009.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf012.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf012.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf015.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf015.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf018.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf018.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf021.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf021.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf024.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf024.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf027.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf027.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf030.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf030.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf033.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf033.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf036.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf036.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf039.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf039.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf042.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf042.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf045.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf045.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf048.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf048.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf051.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf051.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf054.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf054.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf057.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf057.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf060.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf060.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf063.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf063.nc"] - - ["{{ 'STAGED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf066.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf066.nc"] - - ["{{ 'STAGED_TEST DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf069.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf069.nc"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf072.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf072.nc"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf075.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf075.nc"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf078.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf078.nc"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf081.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf081.nc"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf084.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf084.nc"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf087.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf087.nc"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf090.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf090.nc"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf093.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf093.nc"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf096.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf096.nc"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf099.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf099.nc"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf102.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf102.nc"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf105.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf105.nc"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf108.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf108.nc"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf111.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf111.nc"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf114.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf114.nc"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf117.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf117.nc"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf120.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf120.nc"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f000", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f000"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f003", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f003"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f006", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f006"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f009", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f009"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f012", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f012"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f015", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f015"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f018", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f018"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f021", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f021"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f024", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f024"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f027", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f027"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f030", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f030"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f033", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f033"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f036", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f036"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f039", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f039"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f042", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f042"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f045", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f045"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f048", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f048"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f051", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f051"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f054", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f054"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f057", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f057"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f060", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f060"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f063", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f063"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f066", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f066"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f069", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f069"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f072", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f072"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f075", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f075"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f078", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f078"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f081", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f081"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f084", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f084"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f087", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f087"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f090", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f090"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f093", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f093"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f096", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f096"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f099", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f099"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f102", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f102"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f105", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f105"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f108", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f108"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f111", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f111"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f114", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f114"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f117", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f117"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f120", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f120"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf000.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf000.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf003.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf003.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf006.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf006.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf009.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf009.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf012.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf012.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf015.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf015.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf018.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf018.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf021.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf021.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf024.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf024.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf027.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf027.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf030.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf030.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf033.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf033.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf036.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf036.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf039.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf039.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf042.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf042.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf045.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf045.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf048.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf048.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf051.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf051.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf054.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf054.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf057.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf057.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf060.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf060.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf063.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf063.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf066.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf066.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf069.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf069.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf072.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf072.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf075.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf075.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf078.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf078.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf081.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf081.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf084.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf084.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf087.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf087.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf090.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf090.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf093.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf093.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf096.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf096.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf099.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf099.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf102.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf102.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf105.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf105.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf108.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf108.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf111.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf111.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf114.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf114.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf117.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf117.grib2"] - - ["{{ 'STATED_TEST_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf120.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf120.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.diag_table", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.diag_table"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.input.nml", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.input.nml"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.model_configure", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.model_configure"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf000.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf000.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf003.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf003.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf006.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf006.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf009.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf009.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf012.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf012.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf015.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf015.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf018.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf018.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf021.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf021.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf024.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf024.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf027.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf027.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf030.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf030.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf033.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf033.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf036.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf036.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf039.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf039.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf042.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf042.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf045.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf045.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf048.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf048.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf051.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf051.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf054.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf054.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf057.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf057.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf060.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf060.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf063.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf063.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf066.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf066.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf069.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf069.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf072.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf072.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf075.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf075.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf078.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf078.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf081.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf081.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf084.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf084.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf087.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf087.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf090.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf090.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf093.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf093.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf096.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf096.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf099.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf099.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf102.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf102.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf105.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf105.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf108.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf108.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf111.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf111.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf114.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf114.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf117.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf117.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf120.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf120.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f000", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f000"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f003", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f003"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f006", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f006"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f009", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f009"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f012", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f012"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f015", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f015"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f018", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f018"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f021", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f021"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f024", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f024"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f027", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f027"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f030", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f030"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f033", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f033"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f036", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f036"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f039", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f039"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f042", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f042"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f045", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f045"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f048", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f048"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f051", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f051"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f054", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f054"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f057", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f057"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f060", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f060"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f063", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f063"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f066", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f066"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f069", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f069"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f072", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f072"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f075", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f075"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f078", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f078"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f081", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f081"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f084", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f084"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f087", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f087"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f090", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f090"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f093", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f093"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f096", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f096"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f099", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f099"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f102", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f102"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f105", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f105"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f108", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f108"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f111", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f111"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f114", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f114"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f117", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f117"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f120", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f120"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf000.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf000.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf003.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf003.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf006.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf006.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf009.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf009.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf012.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf012.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf015.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf015.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf018.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf018.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf021.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf021.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf024.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf024.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf027.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf027.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf030.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf030.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf033.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf033.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf036.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf036.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf039.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf039.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf042.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf042.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf045.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf045.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf048.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf048.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf051.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf051.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf054.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf054.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf057.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf057.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf060.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf060.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf063.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf063.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf066.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf066.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf069.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf069.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf072.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf072.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf075.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf075.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf078.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf078.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf081.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf081.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf084.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf084.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf087.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf087.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf090.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf090.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf093.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf093.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf096.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf096.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf099.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf099.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf102.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf102.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf105.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf105.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf108.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf108.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf111.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf111.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf114.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf114.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf117.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf117.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf120.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf120.grib2"] diff --git a/ctests/scripts/validate.sh.in b/ctests/scripts/validate.sh.in index 083677f8c34..50373e911b6 100755 --- a/ctests/scripts/validate.sh.in +++ b/ctests/scripts/validate.sh.in @@ -19,11 +19,18 @@ PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${HOMEgfs}/sorc/wxflow/src" export PYTHONPATH YAML_FILE="${HOMEgfs}/ctests/cases/${TEST_NAME}.yaml" -echo "validating '${TEST_NAME}' with yaml file '${INPUTS_YAML}'" +echo "validating '${TEST_NAME}' with yaml file '${YAML_FILE}'" TEST_NAME="${TEST_NAME}" \ RUNTESTS="${RUNTESTS}" \ STAGED_TESTS_DIR="${STAGED_TESTS_DIR}" \ "${HOMEgfs}/ctests/scripts/validate.py" --yaml "${YAML_FILE}" --test_date "${TEST_DATE}" +rc=$? +if [[ "${rc}" -ne 0 ]]; then + set +x + echo "Failed to validate for '${TEST_NAME}' with '${YAML_FILE}'" + set -x + exit "${rc}" +fi exit 0 \ No newline at end of file From ae626bae1dee0f4c91b244c5b854b6811f905010 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Thu, 16 Jan 2025 13:00:54 -0600 Subject: [PATCH 159/195] fixed var name on arg and listed only files from test when output check against chksm --- ctests/scripts/validate.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ctests/scripts/validate.py b/ctests/scripts/validate.py index 80e7e920781..2de3f90f17b 100755 --- a/ctests/scripts/validate.py +++ b/ctests/scripts/validate.py @@ -23,8 +23,8 @@ def file_checksum(path): def validate_cmpfiles(config): cmpfiles = config.get("output_files", {}).get("cmpfiles", []) for pair in cmpfiles: - print(f"Comparing files: {pair} ...",end="") file_a, file_b = pair + print(f"checking file: {file_b} ... ",end="") if file_checksum(file_a) != file_checksum(file_b): raise ValueError(f"Checksum mismatch: {file_a} vs {file_b}") print("OK") @@ -40,4 +40,4 @@ def validate_cmpfiles(config): files = parse_j2yaml(path=args.yaml, data=data) validate_cmpfiles(files) - print(f"All files exist for test: {args.test_name}") \ No newline at end of file + print(f"All files exist and pass checksum for test: {args.yaml}") From 21b8cadc88644d31954664ca7e48432f6d068d29 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 17 Jan 2025 16:01:39 -0600 Subject: [PATCH 160/195] used bash command to get rocotoboot_dryrun that is in the path --- ctests/scripts/execute.sh.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/scripts/execute.sh.in b/ctests/scripts/execute.sh.in index 9cf3ef59176..52ae03a43ae 100755 --- a/ctests/scripts/execute.sh.in +++ b/ctests/scripts/execute.sh.in @@ -8,7 +8,7 @@ JOB=${2:?"Job name is required"} idate=$3 #TODO - add rocotoboot_dryrun to repo some how -rocotoboot_dryrun=/work2/noaa/global/mterry/rocoto_dryrun/bin/rocotoboot +rocotoboot_dryrun=$(command -v rocotoboot_dryrun) || true CASEDIR="@CMAKE_CURRENT_BINARY_DIR@/RUNTESTS/EXPDIR/${TEST_NAME}" cd "${CASEDIR}" rm -f ./*.db From 087bd24790eb6eec976bdedc690f24477e23b86f Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 22 Jan 2025 13:27:53 -0600 Subject: [PATCH 161/195] adding case C48_S2SW for JJOB gfs_fcst_seg0 --- ctests/CMakeLists.txt | 6 + ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml | 151 +++++++++++++++++++++++ 2 files changed, 157 insertions(+) create mode 100644 ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml diff --git a/ctests/CMakeLists.txt b/ctests/CMakeLists.txt index 434a12f48cf..d1f796db39b 100644 --- a/ctests/CMakeLists.txt +++ b/ctests/CMakeLists.txt @@ -104,3 +104,9 @@ AddJJOBTest( JOB "gfs_fcst_seg0" TEST_DATE "2021032312" ) + +AddJJOBTest( + CASE "C48_S2SW" + JOB "gfs_fcst_seg0" + TEST_DATE "2021032312" +) diff --git a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml new file mode 100644 index 00000000000..44299b2cd09 --- /dev/null +++ b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml @@ -0,0 +1,151 @@ +input_files: + mkdir: + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/wave/prep" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/ocean/restart" + copy: + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_ctrl.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile6.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/wave/prep/gfswave.mod_def.glo_200", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/wave/prep/gfswave.mod_def.glo_200"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/wave/prep/gfswave.mod_def.uglo_100km", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/wave/prep/gfswave.mod_def.uglo_100km"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/ocean/restart/{{ TEST_DATE | to_YMD}}.{{ TEST_DATE | strftime('%H') }}0000.MOM.res.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/ocean/restart/{{ TEST_DATE | to_YMD}}.{{ TEST_DATE | strftime('%H') }}0000.MOM.res.nc"] + +output_files: + cmpfiles: + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.diag_table", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.diag_table"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.input.nml", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.input.nml"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.model_configure", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.model_configure"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf000.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf000.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf003.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf003.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf006.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf006.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf009.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf009.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf012.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf012.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf015.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf015.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf018.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf018.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf021.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf021.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf024.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf024.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf027.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf027.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf030.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf030.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf033.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf033.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf036.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf036.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf039.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf039.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf042.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf042.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf045.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf045.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf048.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf048.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf051.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf051.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf054.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf054.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf057.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf057.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf060.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf060.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf063.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf063.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf066.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf066.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf069.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf069.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf072.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf072.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf075.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf075.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf078.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf078.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf081.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf081.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf084.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf084.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf087.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf087.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf090.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf090.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf093.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf093.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf096.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf096.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf099.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf099.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf102.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf102.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf105.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf105.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf108.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf108.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf111.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf111.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf114.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf114.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf117.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf117.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf120.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf120.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f000", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f000"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f003", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f003"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f006", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f006"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f009", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f009"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f012", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f012"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f015", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f015"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f018", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f018"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f021", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f021"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f024", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f024"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f027", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f027"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f030", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f030"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f033", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f033"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f036", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f036"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f039", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f039"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f042", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f042"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f045", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f045"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f048", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f048"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f051", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f051"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f054", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f054"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f057", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f057"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f060", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f060"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f063", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f063"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f066", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f066"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f069", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f069"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f072", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f072"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f075", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f075"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f078", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f078"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f081", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f081"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f084", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f084"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f087", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f087"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f090", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f090"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f093", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f093"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f096", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f096"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f099", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f099"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f102", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f102"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f105", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f105"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f108", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f108"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f111", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f111"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f114", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f114"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f117", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f117"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f120", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f120"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf000.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf000.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf003.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf003.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf006.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf006.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf009.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf009.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf012.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf012.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf015.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf015.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf018.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf018.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf021.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf021.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf024.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf024.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf027.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf027.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf030.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf030.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf033.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf033.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf036.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf036.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf039.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf039.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf042.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf042.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf045.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf045.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf048.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf048.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf051.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf051.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf054.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf054.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf057.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf057.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf060.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf060.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf063.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf063.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf066.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf066.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf069.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf069.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf072.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf072.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf075.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf075.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf078.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf078.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf081.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf081.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf084.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf084.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf087.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf087.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf090.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf090.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf093.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf093.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf096.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf096.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf099.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf099.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf102.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf102.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf105.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf105.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf108.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf108.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf111.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf111.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf114.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf114.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf117.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf117.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf120.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf120.grib2"] From 54a8abf106a6ed393dc37a2f193d4de1b8cfed75 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 22 Jan 2025 13:41:41 -0600 Subject: [PATCH 162/195] trying to add 6 hours to TEST_DATE for ocean retart in C48_S3SW stagged file --- ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml index 44299b2cd09..1a67d6bd966 100644 --- a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml @@ -19,7 +19,7 @@ input_files: - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/wave/prep/gfswave.mod_def.glo_200", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/wave/prep/gfswave.mod_def.glo_200"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/wave/prep/gfswave.mod_def.uglo_100km", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/wave/prep/gfswave.mod_def.uglo_100km"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/ocean/restart/{{ TEST_DATE | to_YMD}}.{{ TEST_DATE | strftime('%H') }}0000.MOM.res.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/ocean/restart/{{ TEST_DATE | to_YMD}}.{{ TEST_DATE | strftime('%H') }}0000.MOM.res.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE + timedelta(hours=6) | strftime('%H') }}/model/ocean/restart/{{ TEST_DATE | to_YMD}}.{{ TEST_DATE | strftime('%H') }}0000.MOM.res.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/ocean/restart/{{ TEST_DATE | to_YMD}}.{{ TEST_DATE + timedelta(hours=6) | strftime('%H') }}0000.MOM.res.nc"] output_files: cmpfiles: From df109e1e0cf5d6a03b514e0639a281b3d42e4794 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 22 Jan 2025 13:56:05 -0600 Subject: [PATCH 163/195] used add_to_datetime with a time_delta function from the tmetools wxflow jinja class to get the 6+hours on the atmos restart --- ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml index 1a67d6bd966..1ffcb3b5b2c 100644 --- a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml @@ -19,7 +19,7 @@ input_files: - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/wave/prep/gfswave.mod_def.glo_200", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/wave/prep/gfswave.mod_def.glo_200"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/wave/prep/gfswave.mod_def.uglo_100km", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/wave/prep/gfswave.mod_def.uglo_100km"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE + timedelta(hours=6) | strftime('%H') }}/model/ocean/restart/{{ TEST_DATE | to_YMD}}.{{ TEST_DATE | strftime('%H') }}0000.MOM.res.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/ocean/restart/{{ TEST_DATE | to_YMD}}.{{ TEST_DATE + timedelta(hours=6) | strftime('%H') }}0000.MOM.res.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ add_to_datetime(TEST_DATE, to_timedelta('00060000')) | strftime('%H') }}/model/ocean/restart/{{ TEST_DATE | to_YMD}}.{{ TEST_DATE | strftime('%H') }}0000.MOM.res.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/ocean/restart/{{ TEST_DATE | to_YMD}}.{{ add_to_datetime(TEST_DATE, to_timedelta('00060000')) | strftime('%H') }}0000.MOM.res.nc"] output_files: cmpfiles: From 466b19fe585c6749ba39b09ae3421c79c3e1fc80 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 22 Jan 2025 16:40:29 -0600 Subject: [PATCH 164/195] finaly got 6 hour offest to work with TEST_DATE in jinja yaml --- ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml index 1ffcb3b5b2c..de6d11f3a7e 100644 --- a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml @@ -1,8 +1,10 @@ +{% set H_offset = "-6H" %} +{% set H_timedelta = H_offset | to_timedelta %} input_files: mkdir: - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input" - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/wave/prep" - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/ocean/restart" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{TEST_DATE | to_YMD}}/{{TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H')}}/model/ocean/restart" copy: - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_ctrl.nc"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile1.nc"] @@ -19,7 +21,8 @@ input_files: - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/wave/prep/gfswave.mod_def.glo_200", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/wave/prep/gfswave.mod_def.glo_200"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/wave/prep/gfswave.mod_def.uglo_100km", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/wave/prep/gfswave.mod_def.uglo_100km"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ add_to_datetime(TEST_DATE, to_timedelta('00060000')) | strftime('%H') }}/model/ocean/restart/{{ TEST_DATE | to_YMD}}.{{ TEST_DATE | strftime('%H') }}0000.MOM.res.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/ocean/restart/{{ TEST_DATE | to_YMD}}.{{ add_to_datetime(TEST_DATE, to_timedelta('00060000')) | strftime('%H') }}0000.MOM.res.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc", + "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc" ] output_files: cmpfiles: From 5011dc5282488f574bc46954e1aab32422052035 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 22 Jan 2025 17:11:16 -0600 Subject: [PATCH 165/195] added ice restart in staged data --- ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml index de6d11f3a7e..4cb9a91e507 100644 --- a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml @@ -5,6 +5,7 @@ input_files: - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input" - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/wave/prep" - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{TEST_DATE | to_YMD}}/{{TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H')}}/model/ocean/restart" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{TEST_DATE | to_YMD}}/{{TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H')}}/model/ice/restart" copy: - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_ctrl.nc"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile1.nc"] @@ -23,6 +24,8 @@ input_files: - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/wave/prep/gfswave.mod_def.uglo_100km", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/wave/prep/gfswave.mod_def.uglo_100km"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc" ] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc", + "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc" ] output_files: cmpfiles: From 76491f829db5a74b4d5e13d3e73cc0805e0cbe5f Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Wed, 22 Jan 2025 19:10:54 -0600 Subject: [PATCH 166/195] fixed wrong path to ice restart and added tile6 atmos IC to input_files for C48_S2SW for JJOB gfs_fcst_seg0 --- ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml index 4cb9a91e507..3600740e7cf 100644 --- a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml @@ -20,12 +20,13 @@ input_files: - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile4.nc"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile6.nc"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/wave/prep/gfswave.mod_def.glo_200", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/wave/prep/gfswave.mod_def.glo_200"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/wave/prep/gfswave.mod_def.uglo_100km", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/wave/prep/gfswave.mod_def.uglo_100km"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc" ] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc", - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc" ] + "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc" ] output_files: cmpfiles: From 105da3ae779fbb967934d600a4d49c54ebf08466 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Thu, 23 Jan 2025 13:50:17 -0600 Subject: [PATCH 167/195] first pass at adding ctest gfs_atmos_prod_f000 --- ctests/CMakeLists.txt | 6 + .../C48_S2SW_gfs_atmos_prod_f000-f003.yaml | 29 ++++ ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml | 129 ------------------ 3 files changed, 35 insertions(+), 129 deletions(-) create mode 100644 ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml diff --git a/ctests/CMakeLists.txt b/ctests/CMakeLists.txt index d1f796db39b..332faa57e9d 100644 --- a/ctests/CMakeLists.txt +++ b/ctests/CMakeLists.txt @@ -110,3 +110,9 @@ AddJJOBTest( JOB "gfs_fcst_seg0" TEST_DATE "2021032312" ) + +AddJJOBTest( + CASE "C48_S2SW" + JOB "gfs_atmos_prod_f000-f003" + TEST_DATE "2021032312" +) \ No newline at end of file diff --git a/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml b/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml new file mode 100644 index 00000000000..909e130d4be --- /dev/null +++ b/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml @@ -0,0 +1,29 @@ +{% set H_offset = "-6H" %} +{% set H_timedelta = H_offset | to_timedelta %} +input_files: + mkdir: + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/wave/prep" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{TEST_DATE | to_YMD}}/{{TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H')}}/model/ocean/restart" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{TEST_DATE | to_YMD}}/{{TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H')}}/model/ice/restart" + copy: + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_ctrl.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile6.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile6.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/wave/prep/gfswave.mod_def.glo_200", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/wave/prep/gfswave.mod_def.glo_200"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/wave/prep/gfswave.mod_def.uglo_100km", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/wave/prep/gfswave.mod_def.uglo_100km"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc", + "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc" ] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc", + "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc" ] diff --git a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml index 3600740e7cf..909e130d4be 100644 --- a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml @@ -27,132 +27,3 @@ input_files: "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc" ] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc" ] - -output_files: - cmpfiles: - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.diag_table", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.diag_table"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.input.nml", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.input.nml"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.model_configure", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.model_configure"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf000.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf000.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf003.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf003.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf006.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf006.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf009.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf009.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf012.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf012.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf015.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf015.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf018.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf018.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf021.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf021.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf024.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf024.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf027.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf027.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf030.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf030.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf033.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf033.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf036.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf036.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf039.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf039.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf042.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf042.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf045.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf045.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf048.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf048.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf051.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf051.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf054.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf054.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf057.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf057.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf060.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf060.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf063.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf063.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf066.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf066.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf069.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf069.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf072.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf072.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf075.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf075.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf078.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf078.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf081.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf081.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf084.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf084.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf087.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf087.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf090.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf090.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf093.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf093.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf096.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf096.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf099.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf099.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf102.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf102.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf105.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf105.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf108.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf108.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf111.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf111.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf114.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf114.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf117.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf117.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf120.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf120.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f000", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f000"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f003", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f003"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f006", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f006"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f009", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f009"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f012", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f012"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f015", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f015"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f018", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f018"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f021", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f021"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f024", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f024"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f027", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f027"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f030", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f030"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f033", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f033"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f036", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f036"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f039", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f039"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f042", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f042"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f045", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f045"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f048", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f048"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f051", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f051"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f054", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f054"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f057", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f057"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f060", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f060"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f063", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f063"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f066", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f066"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f069", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f069"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f072", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f072"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f075", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f075"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f078", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f078"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f081", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f081"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f084", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f084"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f087", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f087"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f090", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f090"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f093", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f093"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f096", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f096"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f099", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f099"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f102", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f102"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f105", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f105"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f108", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f108"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f111", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f111"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f114", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f114"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f117", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f117"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f120", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f120"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf000.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf000.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf003.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf003.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf006.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf006.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf009.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf009.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf012.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf012.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf015.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf015.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf018.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf018.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf021.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf021.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf024.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf024.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf027.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf027.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf030.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf030.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf033.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf033.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf036.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf036.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf039.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf039.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf042.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf042.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf045.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf045.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf048.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf048.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf051.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf051.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf054.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf054.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf057.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf057.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf060.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf060.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf063.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf063.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf066.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf066.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf069.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf069.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf072.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf072.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf075.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf075.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf078.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf078.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf081.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf081.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf084.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf084.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf087.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf087.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf090.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf090.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf093.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf093.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf096.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf096.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf099.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf099.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf102.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf102.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf105.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf105.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf108.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf108.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf111.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf111.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf114.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf114.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf117.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf117.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf120.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf120.grib2"] From 598f212ab3bab1805ba68ba115afca6d835596ac Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Thu, 23 Jan 2025 16:18:01 -0600 Subject: [PATCH 168/195] added C48_S2SW_gfs_atmos_prod_f000-f003 JJOB --- ci/platforms/config.orion | 2 +- .../C48_S2SW_gfs_atmos_prod_f000-f003.yaml | 145 +++++++++++++++--- 2 files changed, 122 insertions(+), 25 deletions(-) diff --git a/ci/platforms/config.orion b/ci/platforms/config.orion index 507068d4e7a..dbaad7f3d1d 100644 --- a/ci/platforms/config.orion +++ b/ci/platforms/config.orion @@ -2,7 +2,7 @@ export GFS_CI_ROOT=/work2/noaa/stmp/GFS_CI_ROOT/ORION export ICSDIR_ROOT=/work/noaa/global/glopara/data/ICSDIR -export STAGED_TESTS_DIR=${GFS_CI_ROOT}/STAGED_TESTS_DIR +export STAGED_TESTS_DIR=/work/noaa/stmp/GFS_CI_ROOT/ORION/STAGED_TESTS_DIR export HPC_ACCOUNT=nems export max_concurrent_cases=5 export max_concurrent_pr=4 diff --git a/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml b/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml index 909e130d4be..d1c26e1533a 100644 --- a/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml +++ b/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml @@ -1,29 +1,126 @@ {% set H_offset = "-6H" %} {% set H_timedelta = H_offset | to_timedelta %} +{% set TEST_DATE_offset = TEST_DATE | add_to_datetime(H_timedelta) %} + +{% set CYC_H = TEST_DATE | strftime('%H') %} +{% set CYC_H_offset = TEST_DATE_offset | strftime('%H') %} + +{% set PYD = TEST_DATE | to_YMD %} +{% set PYD_offset = TEST_DATE_offset | to_YMD %} + + input_files: mkdir: - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input" - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/wave/prep" - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{TEST_DATE | to_YMD}}/{{TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H')}}/model/ocean/restart" - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{TEST_DATE | to_YMD}}/{{TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H')}}/model/ice/restart" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/wave/prep" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PYD }}/{{ CYC_H_offset }}/model/ocean/restart" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PYD }}/{{ CYC_H_offset }}/model/ice/restart" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PYD }}/{{ CYC_H_offset }}/model/ice/restart" copy: - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_ctrl.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile1.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile2.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile3.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile4.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile6.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile1.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile2.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile3.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile4.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile6.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/wave/prep/gfswave.mod_def.glo_200", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/wave/prep/gfswave.mod_def.glo_200"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/wave/prep/gfswave.mod_def.uglo_100km", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/wave/prep/gfswave.mod_def.uglo_100km"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc", - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc" ] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc", - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc" ] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_ctrl.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile6.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile6.nc"] + + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf000.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf000.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf003.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf003.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf006.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf006.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf009.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf009.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf012.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf012.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf015.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf015.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf018.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf018.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf021.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf021.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf024.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf024.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf027.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf027.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf030.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf030.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf033.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf033.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf036.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf036.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf039.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf039.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf042.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf042.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf045.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf045.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf048.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf048.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf051.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf051.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf054.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf054.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf057.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf057.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf060.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf060.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf063.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf063.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf066.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf066.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf069.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf069.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf072.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf072.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf075.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf075.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf078.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf078.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf081.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf081.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf084.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf084.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf087.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf087.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf090.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf090.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf093.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf093.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf096.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf096.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf099.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf099.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf102.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf102.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf105.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf105.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf108.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf108.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf111.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf111.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf114.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf114.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf117.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf117.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf120.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf120.grib2"] + + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f000", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f000"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f003", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f003"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f006", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f006"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f009", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f009"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f012", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f012"] + + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f015", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f015"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f018", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f018"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f021", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f021"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f024", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f024"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f027", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f027"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f030", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f030"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f033", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f033"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f036", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f036"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f039", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f039"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f042", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f042"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f045", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f045"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f048", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f048"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f051", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f051"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f054", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f054"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f057", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f057"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f060", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f060"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f063", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f063"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f066", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f066"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f069", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f069"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f072", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f072"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f075", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f075"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f078", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f078"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f081", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f081"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f084", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f084"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f084", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f087"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f090", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f090"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f093", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f093"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f096", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f096"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f099", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f099"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f102", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f102"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f105", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f105"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f108", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f108"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f111", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f111"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f114", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f114"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f117", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f117"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f120", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f120"] + + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/wave/prep/gfswave.mod_def.glo_200", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/wave/prep/gfswave.mod_def.glo_200"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/wave/prep/gfswave.mod_def.uglo_100km", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/wave/prep/gfswave.mod_def.uglo_100km"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ PYD_offset }}/{{ CYC_H_offset }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc", + "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PYD_offset }}/{{ CYC_H_offset }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc" ] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ PYD_offset }}/{{ CYC_H_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc", + "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PYD_offset }}/{{ CYC_H_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc" ] From ad57686643eda869125e09953269cfab0e0afda7 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 24 Jan 2025 10:22:33 -0600 Subject: [PATCH 169/195] tried to simplfy readablity of input paths by using CYC and PDY and the relative offsets as alias of TEST_DATE --- .../C48_S2SW_gfs_atmos_prod_f000-f003.yaml | 226 +++++++++--------- ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml | 59 +++-- ctests/scripts/validate.py | 16 +- 3 files changed, 161 insertions(+), 140 deletions(-) diff --git a/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml b/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml index d1c26e1533a..faedd80f110 100644 --- a/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml +++ b/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml @@ -2,125 +2,125 @@ {% set H_timedelta = H_offset | to_timedelta %} {% set TEST_DATE_offset = TEST_DATE | add_to_datetime(H_timedelta) %} -{% set CYC_H = TEST_DATE | strftime('%H') %} -{% set CYC_H_offset = TEST_DATE_offset | strftime('%H') %} +{% set CYC = TEST_DATE | strftime('%H') %} +{% set CYC_offset = TEST_DATE_offset | strftime('%H') %} -{% set PYD = TEST_DATE | to_YMD %} -{% set PYD_offset = TEST_DATE_offset | to_YMD %} - +{% set PDY = TEST_DATE | to_YMD %} +{% set PDY_offset = TEST_DATE_offset | to_YMD %} input_files: mkdir: - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input" - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master" - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/wave/prep" - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PYD }}/{{ CYC_H_offset }}/model/ocean/restart" - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PYD }}/{{ CYC_H_offset }}/model/ice/restart" - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PYD }}/{{ CYC_H_offset }}/model/ice/restart" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY }}/{{ CYC_offset }}/model/ocean/restart" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY }}/{{ CYC_offset }}/model/ice/restart" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY }}/{{ CYC_offset }}/model/ice/restart" copy: - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_ctrl.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile1.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile2.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile3.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile4.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/gfs_data.tile6.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile1.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile2.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile3.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile4.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/input/sfc_data.tile6.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_ctrl.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile6.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile6.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf000.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf000.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf003.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf003.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf006.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf006.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf009.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf009.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf012.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf012.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf015.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf015.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf018.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf018.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf021.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf021.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf024.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf024.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf027.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf027.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf030.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf030.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf033.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf033.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf036.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf036.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf039.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf039.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf042.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf042.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf045.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf045.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf048.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf048.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf051.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf051.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf054.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf054.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf057.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf057.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf060.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf060.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf063.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf063.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf066.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf066.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf069.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf069.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf072.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf072.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf075.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf075.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf078.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf078.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf081.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf081.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf084.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf084.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf087.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf087.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf090.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf090.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf093.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf093.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf096.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf096.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf099.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf099.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf102.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf102.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf105.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf105.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf108.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf108.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf111.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf111.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf114.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf114.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf117.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf117.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf120.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.sfluxgrbf120.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf000.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf000.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf003.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf003.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf006.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf006.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf009.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf009.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf012.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf012.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf015.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf015.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf018.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf018.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf021.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf021.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf024.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf024.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf027.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf027.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf030.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf030.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf033.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf033.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf036.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf036.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf039.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf039.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf042.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf042.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf045.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf045.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf048.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf048.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf051.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf051.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf054.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf054.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf057.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf057.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf060.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf060.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf063.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf063.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf066.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf066.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf069.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf069.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf072.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf072.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf075.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf075.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf078.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf078.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf081.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf081.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf084.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf084.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf087.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf087.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf090.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf090.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf093.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf093.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf096.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf096.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf099.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf099.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf102.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf102.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf105.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf105.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf108.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf108.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf111.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf111.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf114.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf114.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf117.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf117.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf120.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf120.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f000", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f000"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f003", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f003"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f006", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f006"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f009", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f009"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f012", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f012"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f000", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f000"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f003", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f003"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f006", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f006"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f009", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f009"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f012", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f012"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f015", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f015"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f018", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f018"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f021", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f021"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f024", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f024"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f027", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f027"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f030", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f030"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f033", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f033"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f036", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f036"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f039", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f039"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f042", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f042"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f045", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f045"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f048", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f048"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f051", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f051"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f054", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f054"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f057", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f057"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f060", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f060"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f063", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f063"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f066", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f066"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f069", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f069"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f072", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f072"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f075", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f075"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f078", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f078"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f081", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f081"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f084", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f084"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f084", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f087"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f090", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f090"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f093", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f093"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f096", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f096"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f099", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f099"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f102", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f102"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f105", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f105"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f108", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f108"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f111", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f111"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f114", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f114"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f117", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f117"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f120", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f120"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f015", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f015"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f018", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f018"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f021", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f021"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f024", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f024"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f027", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f027"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f030", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f030"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f033", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f033"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f036", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f036"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f039", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f039"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f042", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f042"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f045", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f045"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f048", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f048"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f051", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f051"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f054", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f054"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f057", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f057"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f060", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f060"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f063", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f063"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f066", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f066"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f069", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f069"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f072", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f072"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f075", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f075"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f078", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f078"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f081", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f081"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f084", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f084"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f084", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f087"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f090", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f090"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f093", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f093"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f096", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f096"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f099", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f099"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f102", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f102"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f105", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f105"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f108", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f108"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f111", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f111"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f114", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f114"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f117", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f117"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f120", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/atmos/master/gfs.t{{ CYC_H }}z.master.grb2f120"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep/gfswave.mod_def.glo_200", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep/gfswave.mod_def.glo_200"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep/gfswave.mod_def.uglo_100km", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep/gfswave.mod_def.uglo_100km"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/wave/prep/gfswave.mod_def.glo_200", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/wave/prep/gfswave.mod_def.glo_200"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PYD }}/{{ CYC_H }}/model/wave/prep/gfswave.mod_def.uglo_100km", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PYD }}/{{ CYC_H }}/model/wave/prep/gfswave.mod_def.uglo_100km"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ PYD_offset }}/{{ CYC_H_offset }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc", - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PYD_offset }}/{{ CYC_H_offset }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc" ] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ PYD_offset }}/{{ CYC_H_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc", - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PYD_offset }}/{{ CYC_H_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc" ] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ PDY_offset }}/{{ CYC_offset }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc", + "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY_offset }}/{{ CYC_offset }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc" ] + + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ PDY_offset }}/{{ CYC_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc", + "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY_offset }}/{{ CYC_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc" ] diff --git a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml index 909e130d4be..5cc901dab12 100644 --- a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml @@ -1,29 +1,40 @@ {% set H_offset = "-6H" %} {% set H_timedelta = H_offset | to_timedelta %} +{% set TEST_DATE_offset = TEST_DATE | add_to_datetime(H_timedelta) %} + +{% set CYC = TEST_DATE | strftime('%H') %} +{% set CYC_offset = TEST_DATE_offset | strftime('%H') %} + +{% set PDY = TEST_DATE | to_YMD %} +{% set PDY_offset = TEST_DATE_offset | to_YMD %} + input_files: mkdir: - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input" - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/wave/prep" - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{TEST_DATE | to_YMD}}/{{TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H')}}/model/ocean/restart" - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{TEST_DATE | to_YMD}}/{{TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H')}}/model/ice/restart" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY }}/{{CYC_offset}}/model/ocean/restart" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY }}/{{CYC_offset}}/model/ice/restart" copy: - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_ctrl.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile1.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile2.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile3.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile4.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile6.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile1.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile2.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile3.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile4.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile6.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/wave/prep/gfswave.mod_def.glo_200", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/wave/prep/gfswave.mod_def.glo_200"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/wave/prep/gfswave.mod_def.uglo_100km", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/wave/prep/gfswave.mod_def.uglo_100km"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc", - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc" ] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc", - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ TEST_DATE | add_to_datetime(H_timedelta) | to_YMD }}/{{ TEST_DATE | add_to_datetime(H_timedelta) | strftime('%H') }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc" ] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_ctrl.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile6.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile6.nc"] + + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep/gfswave.mod_def.glo_200", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep/gfswave.mod_def.glo_200"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep/gfswave.mod_def.uglo_100km", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep/gfswave.mod_def.uglo_100km"] + + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ TEST_DATE_offset }}/{{ CYC_offset }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc", + "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ TEST_DATE_offset }}/{{ CYC_offset }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc" ] + + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ TEST_DATE_offset }}/{{ CYC_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc", + "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ TEST_DATE_offset }}/{{ CYC_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc" ] diff --git a/ctests/scripts/validate.py b/ctests/scripts/validate.py index 2de3f90f17b..946c080c7bd 100755 --- a/ctests/scripts/validate.py +++ b/ctests/scripts/validate.py @@ -5,7 +5,9 @@ from pathlib import Path import datetime import hashlib -from wxflow import parse_j2yaml +from wxflow import parse_j2yaml, Logger + +logger = Logger(level="DEBUG", colored_log=True) def parse_args(): parser = argparse.ArgumentParser() @@ -29,7 +31,8 @@ def validate_cmpfiles(config): raise ValueError(f"Checksum mismatch: {file_a} vs {file_b}") print("OK") -if __name__ == "__main__": +@logit(logger) +def main(): args = parse_args() data = {} @@ -38,6 +41,13 @@ def validate_cmpfiles(config): data['TEST_DATE'] = datetime.datetime.strptime(args.test_date, '%Y%m%d%H') files = parse_j2yaml(path=args.yaml, data=data) - validate_cmpfiles(files) + if not files.output_files: + print(f"No output files found for test: {args.yaml}") + print("Nothing to validate (TODO - Stubbed).") + sys.exit(0) + validate_cmpfiles(files) print(f"All files exist and pass checksum for test: {args.yaml}") + +if __name__ == "__main__": + main() From 2f6b42f38fa0276ce9b82cf94bc94434c4526c44 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 24 Jan 2025 10:31:22 -0600 Subject: [PATCH 170/195] added CYC and PDY alias to C48_ATM for readablity --- ctests/cases/C48_ATM_gfs_fcst_seg0.yaml | 291 ++++++++++++------------ 1 file changed, 151 insertions(+), 140 deletions(-) diff --git a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml index c2094b78954..79cb8fb227a 100644 --- a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml @@ -1,146 +1,157 @@ +{% set H_offset = "-6H" %} +{% set H_timedelta = H_offset | to_timedelta %} +{% set TEST_DATE_offset = TEST_DATE | add_to_datetime(H_timedelta) %} + +{% set CYC = TEST_DATE | strftime('%H') %} +{% set CYC_offset = TEST_DATE_offset | strftime('%H') %} + +{% set PDY = TEST_DATE | to_YMD %} +{% set PDY_offset = TEST_DATE_offset | to_YMD %} + input_files: mkdir: - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input" copy: - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_ctrl.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile1.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile2.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile3.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile4.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/gfs_data.tile6.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile1.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile2.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile3.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile4.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{TEST_DATE | to_YMD}}/{{TEST_DATE | strftime('%H')}}/model/atmos/input/sfc_data.tile6.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_ctrl.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile6.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile6.nc"] output_files: cmpfiles: - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.diag_table", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.diag_table"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.input.nml", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.input.nml"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.model_configure", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/conf/ufs.model_configure"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf000.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf000.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf003.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf003.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf006.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf006.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf009.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf009.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf012.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf012.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf015.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf015.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf018.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf018.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf021.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf021.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf024.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf024.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf027.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf027.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf030.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf030.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf033.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf033.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf036.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf036.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf039.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf039.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf042.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf042.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf045.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf045.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf048.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf048.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf051.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf051.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf054.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf054.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf057.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf057.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf060.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf060.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf063.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf063.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf066.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf066.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf069.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf069.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf072.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf072.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf075.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf075.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf078.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf078.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf081.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf081.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf084.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf084.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf087.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf087.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf090.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf090.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf093.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf093.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf096.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf096.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf099.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf099.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf102.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf102.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf105.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf105.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf108.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf108.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf111.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf111.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf114.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf114.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf117.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf117.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf120.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/history/gfs.t12z.atmf120.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f000", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f000"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f003", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f003"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f006", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f006"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f009", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f009"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f012", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f012"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f015", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f015"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f018", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f018"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f021", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f021"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f024", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f024"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f027", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f027"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f030", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f030"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f033", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f033"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f036", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f036"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f039", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f039"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f042", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f042"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f045", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f045"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f048", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f048"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f051", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f051"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f054", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f054"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f057", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f057"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f060", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f060"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f063", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f063"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f066", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f066"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f069", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f069"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f072", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f072"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f075", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f075"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f078", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f078"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f081", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f081"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f084", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f084"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f087", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f087"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f090", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f090"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f093", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f093"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f096", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f096"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f099", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f099"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f102", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f102"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f105", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f105"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f108", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f108"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f111", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f111"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f114", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f114"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f117", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f117"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f120", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.master.grb2f120"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf000.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf000.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf003.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf003.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf006.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf006.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf009.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf009.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf012.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf012.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf015.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf015.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf018.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf018.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf021.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf021.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf024.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf024.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf027.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf027.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf030.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf030.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf033.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf033.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf036.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf036.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf039.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf039.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf042.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf042.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf045.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf045.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf048.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf048.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf051.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf051.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf054.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf054.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf057.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf057.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf060.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf060.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf063.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf063.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf066.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf066.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf069.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf069.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf072.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf072.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf075.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf075.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf078.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf078.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf081.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf081.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf084.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf084.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf087.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf087.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf090.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf090.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf093.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf093.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf096.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf096.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf099.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf099.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf102.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf102.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf105.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf105.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf108.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf108.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf111.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf111.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf114.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf114.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf117.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf117.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf120.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ TEST_DATE | to_YMD }}/{{ TEST_DATE | strftime('%H') }}/model/atmos/master/gfs.t12z.sfluxgrbf120.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.diag_table", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.diag_table"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.input.nml", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.input.nml"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.model_configure", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.model_configure"] + + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf000.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf000.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf003.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf003.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf006.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf006.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf009.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf009.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf012.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf012.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf015.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf015.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf018.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf018.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf021.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf021.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf024.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf024.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf027.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf027.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf030.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf030.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf033.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf033.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf036.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf036.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf039.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf039.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf042.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf042.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf045.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf045.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf048.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf048.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf051.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf051.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf054.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf054.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf057.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf057.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf060.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf060.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf063.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf063.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf066.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf066.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf069.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf069.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf072.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf072.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf075.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf075.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf078.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf078.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf081.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf081.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf084.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf084.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf087.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf087.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf090.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf090.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf093.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf093.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf096.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf096.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf099.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf099.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf102.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf102.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf105.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf105.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf108.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf108.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf111.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf111.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf114.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf114.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf117.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf117.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf120.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf120.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f000", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f000"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f003", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f003"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f006", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f006"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f009", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f009"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f012", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f012"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f015", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f015"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f018", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f018"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f021", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f021"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f024", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f024"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f027", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f027"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f030", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f030"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f033", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f033"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f036", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f036"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f039", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f039"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f042", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f042"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f045", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f045"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f048", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f048"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f051", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f051"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f054", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f054"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f057", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f057"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f060", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f060"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f063", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f063"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f066", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f066"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f069", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f069"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f072", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f072"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f075", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f075"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f078", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f078"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f081", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f081"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f084", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f084"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f087", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f087"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f090", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f090"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f093", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f093"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f096", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f096"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f099", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f099"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f102", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f102"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f105", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f105"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f108", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f108"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f111", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f111"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f114", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f114"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f117", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f117"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f120", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f120"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf000.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf000.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf003.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf003.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf006.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf006.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf009.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf009.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf012.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf012.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf015.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf015.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf018.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf018.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf021.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf021.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf024.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf024.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf027.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf027.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf030.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf030.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf033.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf033.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf036.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf036.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf039.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf039.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf042.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf042.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf045.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf045.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf048.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf048.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf051.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf051.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf054.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf054.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf057.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf057.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf060.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf060.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf063.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf063.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf066.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf066.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf069.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf069.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf072.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf072.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf075.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf075.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf078.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf078.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf081.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf081.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf084.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf084.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf087.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf087.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf090.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf090.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf093.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf093.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf096.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf096.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf099.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf099.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf102.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf102.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf105.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf105.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf108.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf108.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf111.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf111.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf114.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf114.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf117.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf117.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf120.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf120.grib2"] From 86d783fde6ebafef0cda84678476f8078ffd663e Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 24 Jan 2025 11:11:42 -0600 Subject: [PATCH 171/195] missed alias for PYD on offset --- ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml index 5cc901dab12..6010d47a789 100644 --- a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml @@ -33,8 +33,8 @@ input_files: - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep/gfswave.mod_def.glo_200", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep/gfswave.mod_def.glo_200"] - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep/gfswave.mod_def.uglo_100km", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep/gfswave.mod_def.uglo_100km"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ TEST_DATE_offset }}/{{ CYC_offset }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc", - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ TEST_DATE_offset }}/{{ CYC_offset }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc" ] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ PDY_offset }}/{{ CYC_offset }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc", + "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY_offset }}/{{ CYC_offset }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc" ] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ TEST_DATE_offset }}/{{ CYC_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc", - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ TEST_DATE_offset }}/{{ CYC_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc" ] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ PDY_offset }}/{{ CYC_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc", + "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY_offset }}/{{ CYC_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc" ] From c3273e9806fe6edf8113f2cbc60e1534d1d34fe8 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 24 Jan 2025 11:33:57 -0600 Subject: [PATCH 172/195] fixed check for output files in validate to signlal non-fail subbed when not out_files is not present in functional ci case yaml file --- ctests/scripts/validate.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ctests/scripts/validate.py b/ctests/scripts/validate.py index 946c080c7bd..db3e2820f5f 100755 --- a/ctests/scripts/validate.py +++ b/ctests/scripts/validate.py @@ -5,7 +5,7 @@ from pathlib import Path import datetime import hashlib -from wxflow import parse_j2yaml, Logger +from wxflow import parse_j2yaml, Logger, logit logger = Logger(level="DEBUG", colored_log=True) @@ -41,7 +41,7 @@ def main(): data['TEST_DATE'] = datetime.datetime.strptime(args.test_date, '%Y%m%d%H') files = parse_j2yaml(path=args.yaml, data=data) - if not files.output_files: + if not 'output_files' in files: print(f"No output files found for test: {args.yaml}") print("Nothing to validate (TODO - Stubbed).") sys.exit(0) From 3132b8f7fe0b6cb81e5cfc3d8e1cd28ff43a6456 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 24 Jan 2025 12:12:27 -0600 Subject: [PATCH 173/195] update READMe with some finer explinations --- ctests/README.md | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/ctests/README.md b/ctests/README.md index 95a32cd952e..d19b7d0196d 100644 --- a/ctests/README.md +++ b/ctests/README.md @@ -8,25 +8,33 @@ The CTest framework consists of the following scripts: - **setup.sh.in**: Prepares the environment and creates the experiment. - **stage.sh.in**: Stages the input files needed to run a JJOB. - **execute.sh.in**: Executes the JJOB and monitors its status. -- **validate.sh.in**: (TODO) Validates the results of the JJOB. +- **validate.sh.in**: Validates the results of the JJOB. + +**NOTE:** So far only test C48_ATM *gfs_fcst_set0* has `output_files` for the validation step using a basic chksum for testing. Further development using grib and NETCDF comparison tools is pending. ## Usage ### CMake Configuration -To configure the CTest framework using CMake, you need to provide several environment variables or default values. Here is an example of how to configure and build the project: +To configure the **CTest** framework using **CMake**, you need to provide several environment variables. Here is an example of how to configure and build the project: ```bash # Set environment variables (may also be include at command line with -D) export HPC_ACCOUNT="your_hpc_account" export ICSDIR_ROOT="/path/to/icsdir_root" export STAGED_TESTS_DIR="/path/to/staged_tests_dir" +``` +**NOTE**: The the specific values for these three enviroment variables can be found in `$HOMEgfs/ci/platforms/config.$MACHINE_ID` and may also be added to the `cmake` command line with the `-D` option # Run CMake to configure the ctest framework -cmake -S /path/to/HOMEgfs -B /path/to/build -DRUNTESTS=/path/to/runtests - +```shell +cd $HOMEgfs/ctests +mkdir build +cd build +cmake ../.. ``` + ### Running Tests with CTest Once the project is configured, you can run the tests using CTest. Here are some examples: @@ -46,6 +54,10 @@ You can use the `-L` option with CTest to run tests for a specific case. For exa cd /path/to/build ctest -L C48_ATM ``` +Or simply use the '-R' switch to run any individual test: +``` +ctest -R test_C48_S2SW_gfs_fcst_seg0_execute -V +``` To add a new test use the **AddJJOBTest()** function at the end of the `$HOMEgfs/ctest/CMakeLists.txt` file as follows: ```cmake From 5cd73e550b13967f49015582a19e9de652ca94aa Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 24 Jan 2025 13:38:09 -0600 Subject: [PATCH 174/195] added some qulifying comments about validation in the yaml files --- .../C48_S2SW_gfs_atmos_prod_f000-f003.yaml | 10 ++ ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml | 10 ++ ctests/file_utils.py | 104 ------------------ 3 files changed, 20 insertions(+), 104 deletions(-) delete mode 100755 ctests/file_utils.py diff --git a/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml b/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml index faedd80f110..a95b4c57d97 100644 --- a/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml +++ b/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml @@ -124,3 +124,13 @@ input_files: - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ PDY_offset }}/{{ CYC_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY_offset }}/{{ CYC_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc" ] + +# TODO - To enable the validation step include specific files to compare against the results from running the test. +# Note: The below three files is only an example. The cmpfiles tag means it will use checksum to compare the files in the two locations. +# Other extentions can be added and/or folded into the FileUtils class in wxflow FileUtilities.py +# +#output_files: +# cmpfiles: +# - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.diag_table", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.diag_table"] +# - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.input.nml", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.input.nml"] +# - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.model_configure", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.model_configure"] diff --git a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml index 6010d47a789..7838242855a 100644 --- a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml @@ -38,3 +38,13 @@ input_files: - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ PDY_offset }}/{{ CYC_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY_offset }}/{{ CYC_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc" ] + +# TODO - To enable the validation step include specific files to compare against the results from running the test. +# Note: The below three files is only an example. The cmpfiles tag means it will use checksum to compare the files in the two locations. +# Other extensions can be added and/or folded into the FileUtils class in wxflow FileUtilities.py +# +#output_files: +# cmpfiles: +# - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.diag_table", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.diag_table"] +# - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.input.nml", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.input.nml"] +# - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.model_configure", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.model_configure"] \ No newline at end of file diff --git a/ctests/file_utils.py b/ctests/file_utils.py deleted file mode 100755 index 84fd29d1cb0..00000000000 --- a/ctests/file_utils.py +++ /dev/null @@ -1,104 +0,0 @@ -#!/usr/bin/env python3 - -""" -Compare two folders and produce a comprehensive report of which files -are unique to each folder and which are common. Creates a YAML file -listing the full paths of these files. -Usage: - python compare_folders.py -""" - -import sys -import os -from pathlib import Path -from argparse import ArgumentParser -import shutil - -try: - import yaml -except ImportError: - print("Please install pyyaml: pip install pyyaml") - sys.exit(1) - -def parse_args(): - parser = ArgumentParser() - parser.add_argument("--cmp_folders", nargs=2, required=False, help="Paths to compare") - parser.add_argument("--yaml", required=False, help="Path to output YAML file") - parser.add_argument("--copy_files", nargs=2, help="Paths to copy the common files from and to") - return parser.parse_args() - -def gather_files(folder): - """Return a set of file paths (relative to 'folder') for all files within it.""" - folder = Path(folder).resolve() - all_files = set() - for root, dirs, files in os.walk(folder): - for file_name in files: - full_path = Path(root) / file_name - # Store paths relative to 'folder' - rel_path = full_path.relative_to(folder) - all_files.add(rel_path) - return all_files - -def compair_folders(folder1, folder2, output_yaml): - - folder1 = Path(folder1).resolve() - folder2 = Path(folder2).resolve() - - # Gather all files in each folder (relative paths) - files_in_1 = gather_files(folder1) - files_in_2 = gather_files(folder2) - - # Compute differences - unique_to_folder1 = sorted(list(files_in_1 - files_in_2)) - unique_to_folder2 = sorted(list(files_in_2 - files_in_1)) - in_both = sorted(list(files_in_1 & files_in_2)) - - # Build the output data - comparison_result = { - "folder1": str(folder1), - "folder2": str(folder2), - "unique_to_folder1": [str(rel) for rel in unique_to_folder1], - "unique_to_folder2": [str(rel) for rel in unique_to_folder2], - "common_files": { - "count": len(in_both), - "files": [ - { - "in_folder1": str(rel), - "in_folder2": str(rel) - } - for rel in in_both - ] - } - } - - # Write to YAML - with open(output_yaml, "w", encoding="utf-8") as f: - yaml.dump(comparison_result, f, sort_keys=False) - - print(f"Comparison complete. Results written to {output_yaml}") - -def copy_common_files(common_files, folder1, dest_folder): - dest_folder = Path(dest_folder) - dest_folder.mkdir(parents=True, exist_ok=True) - for rel_path in common_files: - source_file = folder1 / rel_path - target_file = dest_folder / rel_path - target_file.parent.mkdir(parents=True, exist_ok=True) - shutil.copy2(source_file, target_file) - -def load_output_files(yaml_path): - with open(yaml_path, "r") as f: - data = yaml.safe_load(f) - return data.get("output_files", []) - -if __name__ == "__main__": - args = parse_args() - if args.cmp_folders: - folder1_arg, folder2_arg = args.cmp_folders - output_yaml = args.yaml - compair_folders(folder1_arg, folder2_arg, output_yaml) - if args.copy_files: - input_yaml = args.yaml - output_files = load_output_files(input_yaml) - from_folder_arg, to_folder_arg = args.copy_files - copy_common_files(output_files, Path(from_folder_arg), to_folder_arg) \ No newline at end of file From 4abf2863f5e16f83884772eafdb77d708ab0c1a7 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 24 Jan 2025 14:30:54 -0600 Subject: [PATCH 175/195] added Numpydoc doc strings --- ctests/scripts/validate.py | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/ctests/scripts/validate.py b/ctests/scripts/validate.py index db3e2820f5f..c8d10594718 100755 --- a/ctests/scripts/validate.py +++ b/ctests/scripts/validate.py @@ -1,4 +1,21 @@ #!/usr/bin/env python3 +""" +validate.py + +Validation script that checks file checksums and verifies test outputs. + +Usage +----- +validate.py --yaml --test_date + +Parameters +---------- +--yaml : str + Path to the YAML configuration file. +--test_date : str + Test date in the format YYYYMMDDHH. + +""" import sys import argparse @@ -9,12 +26,14 @@ logger = Logger(level="DEBUG", colored_log=True) + def parse_args(): parser = argparse.ArgumentParser() parser.add_argument("--yaml", required=True) parser.add_argument("--test_date", required=True) return parser.parse_args() + def file_checksum(path): hasher = hashlib.md5() with open(path, "rb") as f: @@ -22,15 +41,17 @@ def file_checksum(path): hasher.update(chunk) return hasher.hexdigest() + def validate_cmpfiles(config): cmpfiles = config.get("output_files", {}).get("cmpfiles", []) for pair in cmpfiles: file_a, file_b = pair - print(f"checking file: {file_b} ... ",end="") + print(f"checking file: {file_b} ... ", end="") if file_checksum(file_a) != file_checksum(file_b): raise ValueError(f"Checksum mismatch: {file_a} vs {file_b}") print("OK") + @logit(logger) def main(): args = parse_args() @@ -41,7 +62,7 @@ def main(): data['TEST_DATE'] = datetime.datetime.strptime(args.test_date, '%Y%m%d%H') files = parse_j2yaml(path=args.yaml, data=data) - if not 'output_files' in files: + if 'output_files' not in files: print(f"No output files found for test: {args.yaml}") print("Nothing to validate (TODO - Stubbed).") sys.exit(0) @@ -49,5 +70,6 @@ def main(): validate_cmpfiles(files) print(f"All files exist and pass checksum for test: {args.yaml}") + if __name__ == "__main__": main() From 9b5b0321ff4f01a323c331aa51e6827007b22daf Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 24 Jan 2025 14:36:33 -0600 Subject: [PATCH 176/195] needed trailing lines at the end of a couple of files --- ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml | 2 +- ctests/scripts/validate.sh.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml index 7838242855a..4649d45dad1 100644 --- a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml @@ -47,4 +47,4 @@ input_files: # cmpfiles: # - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.diag_table", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.diag_table"] # - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.input.nml", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.input.nml"] -# - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.model_configure", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.model_configure"] \ No newline at end of file +# - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.model_configure", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.model_configure"] diff --git a/ctests/scripts/validate.sh.in b/ctests/scripts/validate.sh.in index 50373e911b6..c387098ecd9 100755 --- a/ctests/scripts/validate.sh.in +++ b/ctests/scripts/validate.sh.in @@ -33,4 +33,4 @@ if [[ "${rc}" -ne 0 ]]; then exit "${rc}" fi -exit 0 \ No newline at end of file +exit 0 From 9570f8a05f147c744b36eb057b622b99430c0b3a Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Fri, 24 Jan 2025 14:37:51 -0600 Subject: [PATCH 177/195] still needed trailing line on the CMakefile --- ctests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/CMakeLists.txt b/ctests/CMakeLists.txt index 332faa57e9d..19fcfcda756 100644 --- a/ctests/CMakeLists.txt +++ b/ctests/CMakeLists.txt @@ -115,4 +115,4 @@ AddJJOBTest( CASE "C48_S2SW" JOB "gfs_atmos_prod_f000-f003" TEST_DATE "2021032312" -) \ No newline at end of file +) From 1dd04fe558cbfb314fdeff7aa9736c8966346702 Mon Sep 17 00:00:00 2001 From: TerrenceMcGuinness-NOAA Date: Mon, 27 Jan 2025 13:32:16 -0500 Subject: [PATCH 178/195] Update ctests/scripts/validate.py Co-authored-by: Rahul Mahajan --- ctests/scripts/validate.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ctests/scripts/validate.py b/ctests/scripts/validate.py index c8d10594718..cfb5f2a82ab 100755 --- a/ctests/scripts/validate.py +++ b/ctests/scripts/validate.py @@ -20,9 +20,8 @@ import sys import argparse from pathlib import Path -import datetime import hashlib -from wxflow import parse_j2yaml, Logger, logit +from wxflow import parse_j2yaml, Logger, logit, to_datetime logger = Logger(level="DEBUG", colored_log=True) From 27e083e39e379516fa88e708ff7443e5f16a147a Mon Sep 17 00:00:00 2001 From: TerrenceMcGuinness-NOAA Date: Mon, 27 Jan 2025 13:32:25 -0500 Subject: [PATCH 179/195] Update ctests/scripts/validate.py Co-authored-by: Rahul Mahajan --- ctests/scripts/validate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/scripts/validate.py b/ctests/scripts/validate.py index cfb5f2a82ab..d383a65d8ef 100755 --- a/ctests/scripts/validate.py +++ b/ctests/scripts/validate.py @@ -45,7 +45,7 @@ def validate_cmpfiles(config): cmpfiles = config.get("output_files", {}).get("cmpfiles", []) for pair in cmpfiles: file_a, file_b = pair - print(f"checking file: {file_b} ... ", end="") + logger.info(f"checking file: {file_b} ... ", end="") if file_checksum(file_a) != file_checksum(file_b): raise ValueError(f"Checksum mismatch: {file_a} vs {file_b}") print("OK") From f930224a07db9f96905b305104d634b7da6872d2 Mon Sep 17 00:00:00 2001 From: TerrenceMcGuinness-NOAA Date: Mon, 27 Jan 2025 13:32:54 -0500 Subject: [PATCH 180/195] Update ctests/scripts/validate.py Co-authored-by: Rahul Mahajan --- ctests/scripts/validate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/scripts/validate.py b/ctests/scripts/validate.py index d383a65d8ef..cba843a9869 100755 --- a/ctests/scripts/validate.py +++ b/ctests/scripts/validate.py @@ -58,7 +58,7 @@ def main(): data = {} if args.test_date: # Parse test date from string to datetime object - data['TEST_DATE'] = datetime.datetime.strptime(args.test_date, '%Y%m%d%H') + data['TEST_DATE'] = to_datetime(args.test_date) files = parse_j2yaml(path=args.yaml, data=data) if 'output_files' not in files: From 3b65b38d2cfb417abafaee4bf43a993d14a6e56d Mon Sep 17 00:00:00 2001 From: TerrenceMcGuinness-NOAA Date: Mon, 27 Jan 2025 13:33:11 -0500 Subject: [PATCH 181/195] Update ctests/scripts/validate.py Co-authored-by: Rahul Mahajan --- ctests/scripts/validate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/scripts/validate.py b/ctests/scripts/validate.py index cba843a9869..1536c36bee5 100755 --- a/ctests/scripts/validate.py +++ b/ctests/scripts/validate.py @@ -67,7 +67,7 @@ def main(): sys.exit(0) validate_cmpfiles(files) - print(f"All files exist and pass checksum for test: {args.yaml}") + logger.info(f"All files exist and pass checksum for test: {args.yaml}") if __name__ == "__main__": From b2bda5a00beeb20c79056fb3ec6c838ed66c89e6 Mon Sep 17 00:00:00 2001 From: TerrenceMcGuinness-NOAA Date: Mon, 27 Jan 2025 13:42:28 -0500 Subject: [PATCH 182/195] Update ctests/scripts/validate.py Co-authored-by: Rahul Mahajan --- ctests/scripts/validate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/scripts/validate.py b/ctests/scripts/validate.py index 1536c36bee5..f22efce9943 100755 --- a/ctests/scripts/validate.py +++ b/ctests/scripts/validate.py @@ -62,7 +62,7 @@ def main(): files = parse_j2yaml(path=args.yaml, data=data) if 'output_files' not in files: - print(f"No output files found for test: {args.yaml}") + logger.info(f"No output files found for test: {args.yaml}") print("Nothing to validate (TODO - Stubbed).") sys.exit(0) From 9bfe5e01789e69d5ac14a7cf9f26c7a016e4b909 Mon Sep 17 00:00:00 2001 From: TerrenceMcGuinness-NOAA Date: Mon, 27 Jan 2025 13:42:40 -0500 Subject: [PATCH 183/195] Update ctests/scripts/validate.py Co-authored-by: Rahul Mahajan --- ctests/scripts/validate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/scripts/validate.py b/ctests/scripts/validate.py index f22efce9943..28d488365f8 100755 --- a/ctests/scripts/validate.py +++ b/ctests/scripts/validate.py @@ -63,7 +63,7 @@ def main(): files = parse_j2yaml(path=args.yaml, data=data) if 'output_files' not in files: logger.info(f"No output files found for test: {args.yaml}") - print("Nothing to validate (TODO - Stubbed).") + logger.info("Nothing to validate (TODO - Stubbed).") sys.exit(0) validate_cmpfiles(files) From efd13186f31e5da1ee492563780cf03f7211618f Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 28 Jan 2025 09:03:58 -0600 Subject: [PATCH 184/195] updated staged python script to use to_datetime aswell --- ctests/scripts/stage.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/ctests/scripts/stage.py b/ctests/scripts/stage.py index b8a77a120d3..2b7bf0a4a31 100755 --- a/ctests/scripts/stage.py +++ b/ctests/scripts/stage.py @@ -24,7 +24,7 @@ from argparse import ArgumentParser from pathlib import Path -from wxflow import parse_j2yaml, FileHandler, Logger +from wxflow import parse_j2yaml, FileHandler, Logger, logit, to_datetime # Initialize logger with environment variable for logging level logger = Logger(level=os.environ.get("LOGGING_LEVEL", "DEBUG"), colored_log=False) @@ -52,16 +52,18 @@ def parse_args(): return parser.parse_args() -if __name__ == '__main__': - - # Parse command line arguments +@logit(logger) +def main(): args = parse_args() data = {} if args.test_date: # Parse test date from string to datetime object - data['TEST_DATE'] = datetime.datetime.strptime(args.test_date, '%Y%m%d%H') + data['TEST_DATE'] = to_datetime(args.test_date) # Parse YAML configuration file with optional data case_cfg = parse_j2yaml(path=args.yaml, data=data) # Synchronize input files as per the parsed configuration FileHandler(case_cfg.input_files).sync() + + if __name__ == '__main__': + main() From ffb5c7eab7351cfad5b622a3fe9e0af351ca09d6 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 28 Jan 2025 09:09:45 -0600 Subject: [PATCH 185/195] made CYC cyc in yaml case files --- ctests/cases/C48_ATM_gfs_fcst_seg0.yaml | 284 +++++++++--------- .../C48_S2SW_gfs_atmos_prod_f000-f003.yaml | 226 +++++++------- ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml | 58 ++-- 3 files changed, 284 insertions(+), 284 deletions(-) diff --git a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml index 79cb8fb227a..63008b40b8b 100644 --- a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml @@ -2,156 +2,156 @@ {% set H_timedelta = H_offset | to_timedelta %} {% set TEST_DATE_offset = TEST_DATE | add_to_datetime(H_timedelta) %} -{% set CYC = TEST_DATE | strftime('%H') %} -{% set CYC_offset = TEST_DATE_offset | strftime('%H') %} +{% set cyc = TEST_DATE | strftime('%H') %} +{% set cyc_offset = TEST_DATE_offset | strftime('%H') %} {% set PDY = TEST_DATE | to_YMD %} {% set PDY_offset = TEST_DATE_offset | to_YMD %} input_files: mkdir: - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input" copy: - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_ctrl.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile1.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile2.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile3.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile4.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile6.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile1.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile2.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile3.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile4.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile6.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_ctrl.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile6.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile6.nc"] output_files: cmpfiles: - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.diag_table", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.diag_table"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.input.nml", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.input.nml"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.model_configure", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.model_configure"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/conf/ufs.diag_table", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/conf/ufs.diag_table"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/conf/ufs.input.nml", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/conf/ufs.input.nml"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/conf/ufs.model_configure", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/conf/ufs.model_configure"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf000.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf000.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf003.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf003.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf006.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf006.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf009.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf009.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf012.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf012.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf015.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf015.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf018.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf018.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf021.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf021.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf024.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf024.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf027.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf027.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf030.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf030.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf033.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf033.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf036.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf036.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf039.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf039.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf042.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf042.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf045.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf045.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf048.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf048.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf051.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf051.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf054.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf054.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf057.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf057.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf060.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf060.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf063.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf063.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf066.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf066.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf069.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf069.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf072.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf072.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf075.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf075.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf078.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf078.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf081.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf081.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf084.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf084.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf087.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf087.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf090.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf090.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf093.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf093.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf096.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf096.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf099.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf099.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf102.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf102.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf105.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf105.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf108.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf108.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf111.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf111.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf114.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf114.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf117.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf117.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf120.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/history/gfs.t12z.atmf120.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f000", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f000"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f003", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f003"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f006", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f006"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f009", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f009"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f012", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f012"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f015", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f015"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f018", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f018"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f021", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f021"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f024", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f024"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f027", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f027"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f030", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f030"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f033", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f033"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f036", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f036"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f039", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f039"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f042", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f042"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f045", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f045"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f048", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f048"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f051", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f051"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f054", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f054"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f057", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f057"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f060", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f060"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f063", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f063"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f066", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f066"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f069", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f069"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f072", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f072"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f075", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f075"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f078", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f078"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f081", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f081"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f084", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f084"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f087", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f087"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f090", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f090"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f093", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f093"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f096", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f096"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f099", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f099"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f102", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f102"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f105", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f105"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f108", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f108"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f111", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f111"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f114", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f114"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f117", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f117"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f120", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.master.grb2f120"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf000.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf000.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf003.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf003.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf006.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf006.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf009.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf009.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf012.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf012.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf015.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf015.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf018.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf018.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf021.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf021.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf024.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf024.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf027.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf027.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf030.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf030.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf033.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf033.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf036.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf036.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf039.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf039.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf042.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf042.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf045.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf045.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf048.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf048.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf051.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf051.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf054.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf054.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf057.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf057.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf060.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf060.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf063.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf063.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf066.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf066.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf069.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf069.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf072.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf072.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf075.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf075.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf078.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf078.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf081.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf081.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf084.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf084.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf087.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf087.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf090.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf090.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf093.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf093.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf096.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf096.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf099.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf099.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf102.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf102.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf105.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf105.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf108.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf108.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf111.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf111.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf114.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf114.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf117.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf117.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf120.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t12z.sfluxgrbf120.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf000.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf000.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf003.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf003.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf006.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf006.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf009.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf009.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf012.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf012.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf015.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf015.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf018.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf018.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf021.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf021.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf024.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf024.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf027.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf027.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf030.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf030.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf033.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf033.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf036.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf036.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf039.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf039.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf042.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf042.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf045.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf045.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf048.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf048.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf051.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf051.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf054.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf054.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf057.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf057.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf060.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf060.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf063.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf063.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf066.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf066.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf069.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf069.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf072.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf072.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf075.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf075.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf078.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf078.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf081.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf081.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf084.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf084.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf087.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf087.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf090.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf090.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf093.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf093.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf096.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf096.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf099.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf099.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf102.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf102.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf105.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf105.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf108.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf108.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf111.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf111.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf114.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf114.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf117.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf117.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf120.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/history/gfs.t12z.atmf120.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f000", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f000"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f003", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f003"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f006", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f006"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f009", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f009"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f012", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f012"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f015", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f015"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f018", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f018"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f021", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f021"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f024", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f024"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f027", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f027"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f030", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f030"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f033", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f033"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f036", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f036"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f039", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f039"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f042", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f042"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f045", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f045"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f048", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f048"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f051", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f051"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f054", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f054"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f057", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f057"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f060", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f060"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f063", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f063"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f066", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f066"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f069", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f069"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f072", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f072"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f075", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f075"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f078", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f078"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f081", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f081"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f084", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f084"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f087", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f087"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f090", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f090"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f093", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f093"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f096", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f096"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f099", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f099"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f102", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f102"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f105", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f105"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f108", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f108"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f111", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f111"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f114", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f114"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f117", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f117"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f120", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.master.grb2f120"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf000.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf000.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf003.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf003.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf006.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf006.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf009.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf009.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf012.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf012.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf015.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf015.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf018.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf018.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf021.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf021.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf024.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf024.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf027.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf027.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf030.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf030.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf033.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf033.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf036.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf036.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf039.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf039.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf042.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf042.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf045.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf045.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf048.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf048.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf051.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf051.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf054.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf054.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf057.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf057.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf060.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf060.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf063.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf063.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf066.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf066.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf069.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf069.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf072.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf072.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf075.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf075.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf078.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf078.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf081.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf081.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf084.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf084.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf087.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf087.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf090.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf090.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf093.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf093.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf096.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf096.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf099.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf099.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf102.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf102.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf105.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf105.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf108.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf108.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf111.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf111.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf114.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf114.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf117.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf117.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf120.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t12z.sfluxgrbf120.grib2"] diff --git a/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml b/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml index a95b4c57d97..8bc63cf79e7 100644 --- a/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml +++ b/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml @@ -2,128 +2,128 @@ {% set H_timedelta = H_offset | to_timedelta %} {% set TEST_DATE_offset = TEST_DATE | add_to_datetime(H_timedelta) %} -{% set CYC = TEST_DATE | strftime('%H') %} -{% set CYC_offset = TEST_DATE_offset | strftime('%H') %} +{% set cyc = TEST_DATE | strftime('%H') %} +{% set cyc_offset = TEST_DATE_offset | strftime('%H') %} {% set PDY = TEST_DATE | to_YMD %} {% set PDY_offset = TEST_DATE_offset | to_YMD %} input_files: mkdir: - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input" - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master" - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep" - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY }}/{{ CYC_offset }}/model/ocean/restart" - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY }}/{{ CYC_offset }}/model/ice/restart" - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY }}/{{ CYC_offset }}/model/ice/restart" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/wave/prep" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY }}/{{ cyc_offset }}/model/ocean/restart" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY }}/{{ cyc_offset }}/model/ice/restart" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY }}/{{ cyc_offset }}/model/ice/restart" copy: - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_ctrl.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile1.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile2.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile3.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile4.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile6.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile1.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile2.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile3.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile4.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile6.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_ctrl.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile6.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile6.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf000.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf000.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf003.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf003.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf006.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf006.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf009.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf009.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf012.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf012.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf015.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf015.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf018.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf018.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf021.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf021.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf024.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf024.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf027.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf027.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf030.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf030.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf033.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf033.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf036.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf036.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf039.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf039.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf042.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf042.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf045.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf045.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf048.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf048.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf051.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf051.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf054.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf054.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf057.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf057.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf060.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf060.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf063.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf063.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf066.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf066.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf069.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf069.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf072.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf072.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf075.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf075.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf078.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf078.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf081.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf081.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf084.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf084.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf087.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf087.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf090.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf090.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf093.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf093.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf096.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf096.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf099.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf099.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf102.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf102.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf105.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf105.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf108.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf108.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf111.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf111.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf114.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf114.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf117.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf117.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf120.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.sfluxgrbf120.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf000.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf000.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf003.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf003.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf006.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf006.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf009.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf009.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf012.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf012.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf015.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf015.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf018.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf018.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf021.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf021.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf024.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf024.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf027.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf027.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf030.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf030.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf033.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf033.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf036.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf036.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf039.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf039.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf042.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf042.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf045.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf045.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf048.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf048.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf051.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf051.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf054.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf054.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf057.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf057.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf060.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf060.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf063.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf063.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf066.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf066.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf069.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf069.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf072.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf072.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf075.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf075.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf078.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf078.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf081.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf081.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf084.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf084.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf087.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf087.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf090.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf090.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf093.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf093.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf096.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf096.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf099.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf099.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf102.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf102.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf105.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf105.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf108.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf108.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf111.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf111.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf114.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf114.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf117.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf117.grib2"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf120.grib2", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.sfluxgrbf120.grib2"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f000", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f000"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f003", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f003"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f006", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f006"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f009", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f009"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f012", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f012"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f015", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f015"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f018", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f018"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f021", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f021"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f024", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f024"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f027", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f027"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f030", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f030"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f033", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f033"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f036", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f036"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f039", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f039"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f042", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f042"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f045", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f045"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f048", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f048"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f051", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f051"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f054", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f054"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f057", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f057"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f060", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f060"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f063", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f063"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f066", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f066"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f069", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f069"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f072", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f072"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f075", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f075"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f078", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f078"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f081", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f081"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f084", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f084"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f084", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f087"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f090", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f090"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f093", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f093"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f096", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f096"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f099", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f099"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f102", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f102"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f105", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f105"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f108", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f108"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f111", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f111"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f114", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f114"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f117", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f117"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f120", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/master/gfs.t{{ CYC }}z.master.grb2f120"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f000", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f000"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f003", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f003"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f006", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f006"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f009", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f009"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f012", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f012"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f015", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f015"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f018", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f018"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f021", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f021"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f024", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f024"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f027", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f027"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f030", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f030"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f033", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f033"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f036", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f036"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f039", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f039"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f042", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f042"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f045", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f045"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f048", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f048"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f051", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f051"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f054", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f054"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f057", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f057"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f060", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f060"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f063", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f063"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f066", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f066"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f069", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f069"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f072", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f072"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f075", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f075"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f078", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f078"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f081", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f081"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f084", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f084"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f084", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f087"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f090", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f090"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f093", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f093"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f096", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f096"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f099", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f099"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f102", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f102"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f105", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f105"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f108", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f108"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f111", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f111"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f114", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f114"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f117", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f117"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f120", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/master/gfs.t{{ cyc }}z.master.grb2f120"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep/gfswave.mod_def.glo_200", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep/gfswave.mod_def.glo_200"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep/gfswave.mod_def.uglo_100km", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep/gfswave.mod_def.uglo_100km"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/wave/prep/gfswave.mod_def.glo_200", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/wave/prep/gfswave.mod_def.glo_200"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/wave/prep/gfswave.mod_def.uglo_100km", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/wave/prep/gfswave.mod_def.uglo_100km"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ PDY_offset }}/{{ CYC_offset }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc", - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY_offset }}/{{ CYC_offset }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc" ] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ PDY_offset }}/{{ cyc_offset }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc", + "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY_offset }}/{{ cyc_offset }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc" ] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ PDY_offset }}/{{ CYC_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc", - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY_offset }}/{{ CYC_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc" ] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ PDY_offset }}/{{ cyc_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc", + "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY_offset }}/{{ cyc_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc" ] # TODO - To enable the validation step include specific files to compare against the results from running the test. # Note: The below three files is only an example. The cmpfiles tag means it will use checksum to compare the files in the two locations. @@ -131,6 +131,6 @@ input_files: # #output_files: # cmpfiles: -# - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.diag_table", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.diag_table"] -# - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.input.nml", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.input.nml"] -# - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.model_configure", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.model_configure"] +# - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/conf/ufs.diag_table", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/conf/ufs.diag_table"] +# - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/conf/ufs.input.nml", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/conf/ufs.input.nml"] +# - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/conf/ufs.model_configure", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/conf/ufs.model_configure"] diff --git a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml index 4649d45dad1..1f7acbe6097 100644 --- a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml @@ -2,42 +2,42 @@ {% set H_timedelta = H_offset | to_timedelta %} {% set TEST_DATE_offset = TEST_DATE | add_to_datetime(H_timedelta) %} -{% set CYC = TEST_DATE | strftime('%H') %} -{% set CYC_offset = TEST_DATE_offset | strftime('%H') %} +{% set cyc = TEST_DATE | strftime('%H') %} +{% set cyc_offset = TEST_DATE_offset | strftime('%H') %} {% set PDY = TEST_DATE | to_YMD %} {% set PDY_offset = TEST_DATE_offset | to_YMD %} input_files: mkdir: - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input" - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep" - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY }}/{{CYC_offset}}/model/ocean/restart" - - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY }}/{{CYC_offset}}/model/ice/restart" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/wave/prep" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY }}/{{cyc_offset}}/model/ocean/restart" + - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY }}/{{cyc_offset}}/model/ice/restart" copy: - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_ctrl.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile1.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile2.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile3.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile4.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/gfs_data.tile6.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile1.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile2.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile3.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile4.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile5.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/atmos/input/sfc_data.tile6.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_ctrl.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_ctrl.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/gfs_data.tile6.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile1.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile1.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile2.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile2.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile3.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile3.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile4.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile4.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile5.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile5.nc"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile6.nc", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/atmos/input/sfc_data.tile6.nc"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep/gfswave.mod_def.glo_200", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep/gfswave.mod_def.glo_200"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep/gfswave.mod_def.uglo_100km", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/model/wave/prep/gfswave.mod_def.uglo_100km"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/wave/prep/gfswave.mod_def.glo_200", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/wave/prep/gfswave.mod_def.glo_200"] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gfs.{{ PDY }}/{{ cyc }}/model/wave/prep/gfswave.mod_def.uglo_100km", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/model/wave/prep/gfswave.mod_def.uglo_100km"] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ PDY_offset }}/{{ CYC_offset }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc", - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY_offset }}/{{ CYC_offset }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc" ] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ PDY_offset }}/{{ cyc_offset }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc", + "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY_offset }}/{{ cyc_offset }}/model/ocean/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.MOM.res.nc" ] - - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ PDY_offset }}/{{ CYC_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc", - "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY_offset }}/{{ CYC_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc" ] + - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/input_files/gdas.{{ PDY_offset }}/{{ cyc_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc", + "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gdas.{{ PDY_offset }}/{{ cyc_offset }}/model/ice/restart/{{ TEST_DATE | strftime('%Y%m%d.%H0000') }}.cice_model.res.nc" ] # TODO - To enable the validation step include specific files to compare against the results from running the test. # Note: The below three files is only an example. The cmpfiles tag means it will use checksum to compare the files in the two locations. @@ -45,6 +45,6 @@ input_files: # #output_files: # cmpfiles: -# - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.diag_table", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.diag_table"] -# - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.input.nml", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.input.nml"] -# - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.model_configure", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ CYC }}/conf/ufs.model_configure"] +# - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/conf/ufs.diag_table", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/conf/ufs.diag_table"] +# - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/conf/ufs.input.nml", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/conf/ufs.input.nml"] +# - ["{{ 'STAGED_TESTS_DIR' | getenv }}/{{ 'TEST_NAME' | getenv }}/output_files/gfs.{{ PDY }}/{{ cyc }}/conf/ufs.model_configure", "{{ 'RUNTESTS' | getenv }}/COMROOT/{{ 'TEST_NAME' | getenv }}/gfs.{{ PDY }}/{{ cyc }}/conf/ufs.model_configure"] From 9fdd43389e5986073fa97b6d0efbd1956137fded Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 28 Jan 2025 10:16:55 -0600 Subject: [PATCH 186/195] fixed main() indentation in the stage python script --- ctests/scripts/stage.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ctests/scripts/stage.py b/ctests/scripts/stage.py index 2b7bf0a4a31..411b0ccf0a9 100755 --- a/ctests/scripts/stage.py +++ b/ctests/scripts/stage.py @@ -65,5 +65,5 @@ def main(): # Synchronize input files as per the parsed configuration FileHandler(case_cfg.input_files).sync() - if __name__ == '__main__': - main() +if __name__ == '__main__': + main() From c82b4b7917d437ed6c838377f00bffec3190f515 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 28 Jan 2025 10:48:15 -0600 Subject: [PATCH 187/195] pynomrs space needced in stage python script before main block --- ctests/scripts/stage.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ctests/scripts/stage.py b/ctests/scripts/stage.py index 411b0ccf0a9..ea4009a495c 100755 --- a/ctests/scripts/stage.py +++ b/ctests/scripts/stage.py @@ -65,5 +65,6 @@ def main(): # Synchronize input files as per the parsed configuration FileHandler(case_cfg.input_files).sync() + if __name__ == '__main__': main() From ecc2a70dc4966e6de734668f46e6a8bf80bf181d Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Tue, 28 Jan 2025 12:22:25 -0600 Subject: [PATCH 188/195] fixed bug introduced by suggested commit from reviewer regarding logger using end= --- ctests/scripts/validate.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ctests/scripts/validate.py b/ctests/scripts/validate.py index 28d488365f8..9e236206a91 100755 --- a/ctests/scripts/validate.py +++ b/ctests/scripts/validate.py @@ -45,10 +45,10 @@ def validate_cmpfiles(config): cmpfiles = config.get("output_files", {}).get("cmpfiles", []) for pair in cmpfiles: file_a, file_b = pair - logger.info(f"checking file: {file_b} ... ", end="") if file_checksum(file_a) != file_checksum(file_b): + logger.error(f"Checksum mismatch: {file_a} vs {file_b}") raise ValueError(f"Checksum mismatch: {file_a} vs {file_b}") - print("OK") + logger.info(f"checksums match: {file_a} vs {file_b}") @logit(logger) From 5a1775301e231353e8e6899635e537aba4d98cfa Mon Sep 17 00:00:00 2001 From: TerrenceMcGuinness-NOAA Date: Thu, 30 Jan 2025 15:59:18 -0500 Subject: [PATCH 189/195] Update ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml Co-authored-by: Walter Kolczynski - NOAA --- ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml index 1f7acbe6097..3011e0df126 100644 --- a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml @@ -3,7 +3,7 @@ {% set TEST_DATE_offset = TEST_DATE | add_to_datetime(H_timedelta) %} {% set cyc = TEST_DATE | strftime('%H') %} -{% set cyc_offset = TEST_DATE_offset | strftime('%H') %} +{% set cyc_offset = TEST_DATE_offset | strftime('%H') %} {% set PDY = TEST_DATE | to_YMD %} {% set PDY_offset = TEST_DATE_offset | to_YMD %} From b872311e10b9c1a19b5c5cd137eb71c8751ee3bc Mon Sep 17 00:00:00 2001 From: TerrenceMcGuinness-NOAA Date: Thu, 30 Jan 2025 15:59:26 -0500 Subject: [PATCH 190/195] Update ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml Co-authored-by: Walter Kolczynski - NOAA --- ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml index 3011e0df126..f7117363a41 100644 --- a/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_S2SW_gfs_fcst_seg0.yaml @@ -6,7 +6,7 @@ {% set cyc_offset = TEST_DATE_offset | strftime('%H') %} {% set PDY = TEST_DATE | to_YMD %} -{% set PDY_offset = TEST_DATE_offset | to_YMD %} +{% set PDY_offset = TEST_DATE_offset | to_YMD %} input_files: mkdir: From 7033b61b65f8eeb667b95289ea34d507c91a3f28 Mon Sep 17 00:00:00 2001 From: Terry McGuinness Date: Thu, 30 Jan 2025 16:10:38 -0600 Subject: [PATCH 191/195] added doc-blocks in validate python script --- ctests/scripts/validate.py | 46 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/ctests/scripts/validate.py b/ctests/scripts/validate.py index 9e236206a91..0ae82a144b6 100755 --- a/ctests/scripts/validate.py +++ b/ctests/scripts/validate.py @@ -27,6 +27,15 @@ def parse_args(): + """ + parse_args + Parses command line arguments. + + Returns + ------- + argparse.Namespace + Parsed command line arguments. + """ parser = argparse.ArgumentParser() parser.add_argument("--yaml", required=True) parser.add_argument("--test_date", required=True) @@ -34,6 +43,20 @@ def parse_args(): def file_checksum(path): + """ + file_checksum + Computes the MD5 checksum of a file. + + Parameters + ---------- + path : str + Path to the file. + + Returns + ------- + str + MD5 checksum of the file. + """ hasher = hashlib.md5() with open(path, "rb") as f: for chunk in iter(lambda: f.read(4096), b""): @@ -42,6 +65,20 @@ def file_checksum(path): def validate_cmpfiles(config): + """ + validate_cmpfiles + Validates that the checksums of paired files match. + + Parameters + ---------- + config : dict + Configuration dictionary containing file pairs to compare. + + Raises + ------ + ValueError + If the checksums of any paired files do not match. + """ cmpfiles = config.get("output_files", {}).get("cmpfiles", []) for pair in cmpfiles: file_a, file_b = pair @@ -53,6 +90,15 @@ def validate_cmpfiles(config): @logit(logger) def main(): + """ + main + Main function that parses arguments, reads configuration, and validates file checksums. + + Raises + ------ + SystemExit + If no output files are found in the configuration. + """ args = parse_args() data = {} From 6bf32c2eeb9cf6f40c4a7dedfc5e491a50ddac70 Mon Sep 17 00:00:00 2001 From: TerrenceMcGuinness-NOAA Date: Fri, 31 Jan 2025 11:29:41 -0500 Subject: [PATCH 192/195] Update ctests/cases/C48_ATM_gfs_fcst_seg0.yaml Co-authored-by: Walter Kolczynski - NOAA --- ctests/cases/C48_ATM_gfs_fcst_seg0.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml index 63008b40b8b..cbd03043793 100644 --- a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml @@ -6,7 +6,7 @@ {% set cyc_offset = TEST_DATE_offset | strftime('%H') %} {% set PDY = TEST_DATE | to_YMD %} -{% set PDY_offset = TEST_DATE_offset | to_YMD %} +{% set PDY_offset = TEST_DATE_offset | to_YMD %} input_files: mkdir: From d31f8f7ae7e2ed7f7666197b850d6e88891b93b0 Mon Sep 17 00:00:00 2001 From: TerrenceMcGuinness-NOAA Date: Fri, 31 Jan 2025 11:29:49 -0500 Subject: [PATCH 193/195] Update ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml Co-authored-by: Walter Kolczynski - NOAA --- ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml b/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml index 8bc63cf79e7..b222d99365e 100644 --- a/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml +++ b/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml @@ -3,7 +3,7 @@ {% set TEST_DATE_offset = TEST_DATE | add_to_datetime(H_timedelta) %} {% set cyc = TEST_DATE | strftime('%H') %} -{% set cyc_offset = TEST_DATE_offset | strftime('%H') %} +{% set cyc_offset = TEST_DATE_offset | strftime('%H') %} {% set PDY = TEST_DATE | to_YMD %} {% set PDY_offset = TEST_DATE_offset | to_YMD %} From 26eddb84c7094605ad3f1b6668730eb5d186aa21 Mon Sep 17 00:00:00 2001 From: TerrenceMcGuinness-NOAA Date: Fri, 31 Jan 2025 11:29:56 -0500 Subject: [PATCH 194/195] Update ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml Co-authored-by: Walter Kolczynski - NOAA --- ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml b/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml index b222d99365e..80555e4e167 100644 --- a/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml +++ b/ctests/cases/C48_S2SW_gfs_atmos_prod_f000-f003.yaml @@ -6,7 +6,7 @@ {% set cyc_offset = TEST_DATE_offset | strftime('%H') %} {% set PDY = TEST_DATE | to_YMD %} -{% set PDY_offset = TEST_DATE_offset | to_YMD %} +{% set PDY_offset = TEST_DATE_offset | to_YMD %} input_files: mkdir: From 810b253a9aec3473a4d837dc2f8ed42938778104 Mon Sep 17 00:00:00 2001 From: TerrenceMcGuinness-NOAA Date: Fri, 31 Jan 2025 11:30:05 -0500 Subject: [PATCH 195/195] Update ctests/cases/C48_ATM_gfs_fcst_seg0.yaml Co-authored-by: Walter Kolczynski - NOAA --- ctests/cases/C48_ATM_gfs_fcst_seg0.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml index cbd03043793..6d7f746bcbc 100644 --- a/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml +++ b/ctests/cases/C48_ATM_gfs_fcst_seg0.yaml @@ -3,7 +3,7 @@ {% set TEST_DATE_offset = TEST_DATE | add_to_datetime(H_timedelta) %} {% set cyc = TEST_DATE | strftime('%H') %} -{% set cyc_offset = TEST_DATE_offset | strftime('%H') %} +{% set cyc_offset = TEST_DATE_offset | strftime('%H') %} {% set PDY = TEST_DATE | to_YMD %} {% set PDY_offset = TEST_DATE_offset | to_YMD %}