diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index 89b5fb617a..59691b1bd4 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -42,14 +42,14 @@ jobs: ./.github/scripts/build_docs.sh - name: Upload documentation (on success) - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: always() with: name: documentation path: artifact/documentation - name: Upload warnings (on failure) - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: failure() with: name: documentation_warnings.log diff --git a/.github/workflows/linters.yaml b/.github/workflows/linters.yaml index 7816788b81..4987c8caf0 100644 --- a/.github/workflows/linters.yaml +++ b/.github/workflows/linters.yaml @@ -31,7 +31,7 @@ jobs: - if: ${{ always() }} name: Upload artifact with ShellCheck defects in SARIF format - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: Differential ShellCheck SARIF path: ${{ steps.ShellCheck.outputs.sarif }} diff --git a/parm/config/gfs/config.resources b/parm/config/gfs/config.resources index 97e6da005c..8fdfee8150 100644 --- a/parm/config/gfs/config.resources +++ b/parm/config/gfs/config.resources @@ -325,7 +325,7 @@ case ${step} in "snowanl") # below lines are for creating JEDI YAML case ${CASE} in - "C768") + "C1152" | "C768") layout_x=6 layout_y=6 ;; @@ -354,7 +354,7 @@ case ${step} in "esnowanl") # below lines are for creating JEDI YAML case ${CASE} in - "C768") + "C1152" | "C768") layout_x=6 layout_y=6 ;; @@ -391,7 +391,7 @@ case ${step} in "aeroanlinit") # below lines are for creating JEDI YAML case ${CASE} in - "C768") + "C1152" | "C768") layout_x=8 layout_y=8 ;; @@ -424,7 +424,7 @@ case ${step} in "aeroanlvar") case ${CASE} in - "C768") + "C1152" | "C768") layout_x=8 layout_y=8 ;; @@ -458,7 +458,7 @@ case ${step} in "aeroanlgenb") case ${CASE} in - "C768") + "C1152" | "C768") layout_x=8 layout_y=8 ;; @@ -669,7 +669,7 @@ case ${step} in walltime_gdas="01:20:00" walltime_gfs="01:00:00" case ${CASE} in - "C768") + "C1152" | "C768") ntasks_gdas=780 ntasks_gfs=825 threads_per_task=5 @@ -705,7 +705,7 @@ case ${step} in export threads_per_task_echgres_gfs=12 export is_exclusive=True memory="48GB" - if [[ "${CASE}" == "C384" || "${CASE}" == "C768" ]]; then + if [[ "${CASE}" == "C384" || "${CASE}" == "C768" || "${CASE}" == "C1152" ]]; then memory="${mem_node_max}" fi ;; @@ -898,7 +898,7 @@ case ${step} in ;; "C768" | "C1152") # Not valid resolutions for ensembles - declare -x "walltime_gdas"="00:40:00" + declare -x "walltime_gdas"="00:50:00" declare -x "walltime_gfs"="06:00:00" ;; *) @@ -925,16 +925,21 @@ case ${step} in "C48" | "C96") ntasks=${CASE:1} ;; - "C192" | "C384" | "C768" ) + "C192" | "C384" | "C768") ntasks=120 memory="${mem_node_max}" ;; + "C1152") + ntasks=200 + memory="${mem_node_max}" + ;; *) echo "FATAL ERROR: Resources not defined for job ${step} at resolution ${CASE}" exit 4 ;; esac tasks_per_node=${ntasks} + [[ ${CASE} == "C1152" ]] && tasks_per_node=40 threads_per_task=1 @@ -1008,7 +1013,7 @@ case ${step} in threads_per_task=1 tasks_per_node=1 memory="20G" - [[ ${CASE} == "C768" ]] && memory="80GB" + [[ ${CASE} == "C768" || ${CASE} == "C1152" ]] && memory="80GB" ;; "metp") @@ -1148,7 +1153,7 @@ case ${step} in fi case ${CASE} in - "C768") ntasks=200;; + "C1152" | "C768") ntasks=200;; "C384") ntasks=100;; "C192" | "C96" | "C48") ntasks=40;; *) @@ -1181,7 +1186,7 @@ case ${step} in "eupd") walltime="00:30:00" case ${CASE} in - "C768") + "C1152" | "C768") ntasks=480 threads_per_task=6 ;; @@ -1226,7 +1231,7 @@ case ${step} in "epos") walltime="00:15:00" - [[ ${CASE} == "C768" ]] && walltime="00:25:00" + [[ ${CASE} == "C768" || ${CASE} == "C1152" ]] && walltime="00:25:00" ntasks=80 threads_per_task=1 tasks_per_node=$(( max_tasks_per_node / threads_per_task )) diff --git a/parm/config/gfs/config.resources.GAEA b/parm/config/gfs/config.resources.GAEA index c50601da00..aa353b9302 100644 --- a/parm/config/gfs/config.resources.GAEA +++ b/parm/config/gfs/config.resources.GAEA @@ -12,7 +12,7 @@ case ${step} in # The number of tasks and cores used must be the same for eobs # See https://github.com/NOAA-EMC/global-workflow/issues/2092 for details case ${CASE} in - "C768" | "C384") + "C1152" | "C768" | "C384") export tasks_per_node=50 ;; *) diff --git a/parm/config/gfs/config.resources.HERA b/parm/config/gfs/config.resources.HERA index ac3067d9f9..0a190251b0 100644 --- a/parm/config/gfs/config.resources.HERA +++ b/parm/config/gfs/config.resources.HERA @@ -32,7 +32,7 @@ case ${step} in "eupd") case ${CASE} in - "C768") + "C1152" | "C768") export ntasks=80 export threads_per_task=20 ;; @@ -49,7 +49,7 @@ case ${step} in ;; "ecen") - if [[ "${CASE}" == "C768" ]]; then export threads_per_task=6; fi + if [[ "${CASE}" == "C768" || "${CASE}" == "C1152" ]]; then export threads_per_task=6; fi export tasks_per_node=$(( max_tasks_per_node / threads_per_task )) ;; diff --git a/parm/config/gfs/config.resources.JET b/parm/config/gfs/config.resources.JET index bbd308f439..93f64c2c5b 100644 --- a/parm/config/gfs/config.resources.JET +++ b/parm/config/gfs/config.resources.JET @@ -40,7 +40,7 @@ case ${step} in ;; "ecen") - if [[ "${CASE}" == "C768" ]]; then export threads_per_task=6; fi + if [[ "${CASE}" == "C768" || "${CASE}" == "C1152" ]]; then export threads_per_task=6; fi export tasks_per_node=$(( max_tasks_per_node / threads_per_task )) ;; diff --git a/parm/config/gfs/config.resources.WCOSS2 b/parm/config/gfs/config.resources.WCOSS2 index 3ff019068c..342286d008 100644 --- a/parm/config/gfs/config.resources.WCOSS2 +++ b/parm/config/gfs/config.resources.WCOSS2 @@ -9,7 +9,7 @@ case ${step} in ;; "anal") - if [[ "${CASE}" == "C768" ]]; then + if [[ "${CASE}" == "C768" || "${CASE}" == "C1152" ]]; then export threads_per_task=8 # Make ntasks a multiple of 16 export ntasks_gdas=784 @@ -43,7 +43,7 @@ case ${step} in "eupd") case ${CASE} in - "C768" | "C384") + "C1152" | "C768" | "C384") export ntasks=315 export threads_per_task=14 ;; @@ -55,7 +55,7 @@ case ${step} in "eobs") case ${CASE} in - "C768" | "C384") + "C1152" | "C768" | "C384") export tasks_per_node=50 ;; *) diff --git a/parm/config/gfs/config.ufs b/parm/config/gfs/config.ufs index 9737404dd1..0a16a75cb2 100644 --- a/parm/config/gfs/config.ufs +++ b/parm/config/gfs/config.ufs @@ -315,7 +315,7 @@ case "${fv3_res}" in export rf_cutoff=100.0 export fv_sg_adj=450 export WRITE_GROUP_GDAS=4 - export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE_GDAS=10 # TODO: refine these numbers when a case is available + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE_GDAS=20 # TODO: refine these numbers when a case is available export WRITE_GROUP_GFS=4 export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE_GFS=20 # TODO: refine these numbers when a case is available ;; diff --git a/sorc/gsi_utils.fd b/sorc/gsi_utils.fd index a6ea311e5c..f716012812 160000 --- a/sorc/gsi_utils.fd +++ b/sorc/gsi_utils.fd @@ -1 +1 @@ -Subproject commit a6ea311e5c82369d255e3afdc99c1bce0c9a3014 +Subproject commit f716012812c2564e7eab24041f7a3ec14c7aa383 diff --git a/workflow/generate_workflows.sh b/workflow/generate_workflows.sh index a5615a8b0d..dbd360fda2 100755 --- a/workflow/generate_workflows.sh +++ b/workflow/generate_workflows.sh @@ -17,13 +17,13 @@ function _usage() { directory up from this script's residing directory. -b Run build_all.sh with default flags - (build the UFS, UPP, UFS_Utils, and GFS-utils only + (build the UFS, UPP, UFS_Utils, and GFS-utils only) -u Update submodules before building and/or generating experiments. -y "list of YAMLs to run" If this option is not specified, the default case (C48_ATM) will be - run. This option is overidden by -G or -E (see below). + run. This option is incompatible with -G, -E, or -S. Example: -y "C48_ATM C48_S2SW C96C48_hybatmDA" -Y /path/to/directory/with/YAMLs @@ -43,7 +43,6 @@ function _usage() { Run all valid SFS cases in the specified YAML directory. NOTES: - - Only one of -G -E or -S may be specified - Valid cases are determined by the experiment:system key as well as the skip_ci_on_hosts list in each YAML. @@ -223,6 +222,22 @@ else done fi +# Empty the _yaml_list array if -G, -E, and/or -S were selected +if [[ "${_run_all_gfs}" == "true" || \ + "${_run_all_gefs}" == "true" || \ + "${_run_all_sfs}" == "true" ]]; then + + # Raise an error if the user specified a yaml list and any of -G -E -S + if [[ "${_specified_yaml_list}" == "true" ]]; then + echo "Ambiguous case selection." + echo "Please select which tests to run explicitly with -y \"list of tests\" or" + echo "by specifying -G (all GFS), -E (all GEFS), and/or -S (all SFS), but not both." + exit 3 + fi + + _yaml_list=() +fi + # If -S is specified, exit (for now). # TODO when SFS tests come online, enable this option. if [[ "${_run_all_sfs}" == "true" ]]; then