From f53b871245f434cddb6a948249c2169a7be9e705 Mon Sep 17 00:00:00 2001 From: "kate.friedman" Date: Tue, 12 Dec 2023 18:32:33 +0000 Subject: [PATCH 01/10] Add MOS jobs to WCOSS env file Refs #2068 --- env/WCOSS2.env | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/env/WCOSS2.env b/env/WCOSS2.env index 068b69fd7b..a4fe81060d 100755 --- a/env/WCOSS2.env +++ b/env/WCOSS2.env @@ -283,4 +283,12 @@ elif [[ "${step}" = "waveawipsbulls" ]]; then unset PERL5LIB +elif [[ "${step:0:3}" = "mos" ]]; then + + export FORT_BUFFERED=TRUE + + if [[ "${step}" = "mos_stn_prep" ]]; then + export OMP_PROC_BIND=true + fi + fi From 5a5db09df6695a4dbc01a9828ececd1112335f84 Mon Sep 17 00:00:00 2001 From: "kate.friedman" Date: Tue, 12 Dec 2023 18:34:38 +0000 Subject: [PATCH 02/10] Create MOS configs and add DO_MOS switch - Add new configs for MOS jobs, as well as main config.mos - Add DO_MOS to config.base and set to "NO" by default Refs #2068 --- parm/config/gfs/config.base.emc.dyn | 1 + parm/config/gfs/config.mos | 9 +++++++++ parm/config/gfs/config.mos_ext_grd_fcst | 12 ++++++++++++ parm/config/gfs/config.mos_ext_grd_prdgen | 12 ++++++++++++ parm/config/gfs/config.mos_ext_grd_prep | 12 ++++++++++++ parm/config/gfs/config.mos_ext_stn_fcst | 12 ++++++++++++ parm/config/gfs/config.mos_ext_stn_prdgen | 12 ++++++++++++ parm/config/gfs/config.mos_ext_stn_prep | 12 ++++++++++++ parm/config/gfs/config.mos_grd_fcst | 12 ++++++++++++ parm/config/gfs/config.mos_grd_prdgen | 12 ++++++++++++ parm/config/gfs/config.mos_grd_prep | 12 ++++++++++++ parm/config/gfs/config.mos_stn_fcst | 12 ++++++++++++ parm/config/gfs/config.mos_stn_prdgen | 12 ++++++++++++ parm/config/gfs/config.mos_stn_prep | 12 ++++++++++++ parm/config/gfs/config.mos_wx_ext_prdgen | 12 ++++++++++++ parm/config/gfs/config.mos_wx_prdgen | 12 ++++++++++++ 16 files changed, 178 insertions(+) create mode 100644 parm/config/gfs/config.mos create mode 100644 parm/config/gfs/config.mos_ext_grd_fcst create mode 100644 parm/config/gfs/config.mos_ext_grd_prdgen create mode 100644 parm/config/gfs/config.mos_ext_grd_prep create mode 100644 parm/config/gfs/config.mos_ext_stn_fcst create mode 100644 parm/config/gfs/config.mos_ext_stn_prdgen create mode 100644 parm/config/gfs/config.mos_ext_stn_prep create mode 100644 parm/config/gfs/config.mos_grd_fcst create mode 100644 parm/config/gfs/config.mos_grd_prdgen create mode 100644 parm/config/gfs/config.mos_grd_prep create mode 100644 parm/config/gfs/config.mos_stn_fcst create mode 100644 parm/config/gfs/config.mos_stn_prdgen create mode 100644 parm/config/gfs/config.mos_stn_prep create mode 100644 parm/config/gfs/config.mos_wx_ext_prdgen create mode 100644 parm/config/gfs/config.mos_wx_prdgen diff --git a/parm/config/gfs/config.base.emc.dyn b/parm/config/gfs/config.base.emc.dyn index 4451c049b0..ca26a69ec0 100644 --- a/parm/config/gfs/config.base.emc.dyn +++ b/parm/config/gfs/config.base.emc.dyn @@ -64,6 +64,7 @@ export DO_GENESIS_FSU="NO" # Cyclone genesis verification (FSU) export DO_VERFOZN="YES" # Ozone data assimilation monitoring export DO_VERFRAD="YES" # Radiance data assimilation monitoring export DO_VMINMON="YES" # GSI minimization monitoring +export DO_MOS="NO" # GFS Model Output Statistics - Only supported on WCOSS2 # NO for retrospective parallel; YES for real-time parallel # arch.sh uses REALTIME for MOS. Need to set REALTIME=YES diff --git a/parm/config/gfs/config.mos b/parm/config/gfs/config.mos new file mode 100644 index 0000000000..a74c7e7d21 --- /dev/null +++ b/parm/config/gfs/config.mos @@ -0,0 +1,9 @@ +#! /usr/bin/env bash + +########## config.mos ########## +echo "BEGIN: config.mos" + +# MOS package location +export HOMEgfs_mos=/lfs/h1/ops/prod/packages/gfs_mos.v${mos_ver} + +echo "END: config.mos" diff --git a/parm/config/gfs/config.mos_ext_grd_fcst b/parm/config/gfs/config.mos_ext_grd_fcst new file mode 100644 index 0000000000..db94af945f --- /dev/null +++ b/parm/config/gfs/config.mos_ext_grd_fcst @@ -0,0 +1,12 @@ +#! /usr/bin/env bash + +########## config.mos_ext_grd_fcst ########## +echo "BEGIN: config.mos_ext_grd_fcst" + +# Get task specific resources +. "${EXPDIR}/config.resources" mos_ext_grd_fcst + +# Get MOS settings +. "${EXPDIR}/config.mos" + +echo "END: config.mos_ext_grd_fcst" diff --git a/parm/config/gfs/config.mos_ext_grd_prdgen b/parm/config/gfs/config.mos_ext_grd_prdgen new file mode 100644 index 0000000000..ade31b0c1a --- /dev/null +++ b/parm/config/gfs/config.mos_ext_grd_prdgen @@ -0,0 +1,12 @@ +#! /usr/bin/env bash + +########## config.mos_ext_grd_prdgen ########## +echo "BEGIN: config.mos_ext_grd_prdgen" + +# Get task specific resources +. "${EXPDIR}/config.resources" mos_ext_grd_prdgen + +# Get MOS settings +. "${EXPDIR}/config.mos" + +echo "END: config.mos_ext_grd_prdgen" diff --git a/parm/config/gfs/config.mos_ext_grd_prep b/parm/config/gfs/config.mos_ext_grd_prep new file mode 100644 index 0000000000..0ba14e2573 --- /dev/null +++ b/parm/config/gfs/config.mos_ext_grd_prep @@ -0,0 +1,12 @@ +#! /usr/bin/env bash + +########## config.mos_ext_grd_prep ########## +echo "BEGIN: config.mos_ext_grd_prep" + +# Get task specific resources +. "${EXPDIR}/config.resources" mos_ext_grd_prep + +# Get MOS settings +. "${EXPDIR}/config.mos" + +echo "END: config.mos_ext_grd_prep" diff --git a/parm/config/gfs/config.mos_ext_stn_fcst b/parm/config/gfs/config.mos_ext_stn_fcst new file mode 100644 index 0000000000..5b26d196f9 --- /dev/null +++ b/parm/config/gfs/config.mos_ext_stn_fcst @@ -0,0 +1,12 @@ +#! /usr/bin/env bash + +########## config.mos_ext_stn_fcst ########## +echo "BEGIN: config.mos_ext_stn_fcst" + +# Get task specific resources +. "${EXPDIR}/config.resources" mos_ext_stn_fcst + +# Get MOS settings +. "${EXPDIR}/config.mos" + +echo "END: config.mos_ext_stn_fcst" diff --git a/parm/config/gfs/config.mos_ext_stn_prdgen b/parm/config/gfs/config.mos_ext_stn_prdgen new file mode 100644 index 0000000000..9f63eb56fd --- /dev/null +++ b/parm/config/gfs/config.mos_ext_stn_prdgen @@ -0,0 +1,12 @@ +#! /usr/bin/env bash + +########## config.mos_ext_stn_prdgen ########## +echo "BEGIN: config.mos_ext_stn_prdgen" + +# Get task specific resources +. "${EXPDIR}/config.resources" mos_ext_stn_prdgen + +# Get MOS settings +. "${EXPDIR}/config.mos" + +echo "END: config.mos_ext_stn_prdgen" diff --git a/parm/config/gfs/config.mos_ext_stn_prep b/parm/config/gfs/config.mos_ext_stn_prep new file mode 100644 index 0000000000..c443503f11 --- /dev/null +++ b/parm/config/gfs/config.mos_ext_stn_prep @@ -0,0 +1,12 @@ +#! /usr/bin/env bash + +########## config.mos_ext_stn_prep ########## +echo "BEGIN: config.mos_ext_stn_prep" + +# Get task specific resources +. "${EXPDIR}/config.resources" mos_ext_stn_prep + +# Get MOS settings +. "${EXPDIR}/config.mos" + +echo "END: config.mos_ext_stn_prep" diff --git a/parm/config/gfs/config.mos_grd_fcst b/parm/config/gfs/config.mos_grd_fcst new file mode 100644 index 0000000000..bd0d50a04d --- /dev/null +++ b/parm/config/gfs/config.mos_grd_fcst @@ -0,0 +1,12 @@ +#! /usr/bin/env bash + +########## config.mos_grd_fcst ########## +echo "BEGIN: config.mos_grd_fcst" + +# Get task specific resources +. "${EXPDIR}/config.resources" mos_grd_fcst + +# Get MOS settings +. "${EXPDIR}/config.mos" + +echo "END: config.mos_grd_fcst" diff --git a/parm/config/gfs/config.mos_grd_prdgen b/parm/config/gfs/config.mos_grd_prdgen new file mode 100644 index 0000000000..dd9ce8bcd8 --- /dev/null +++ b/parm/config/gfs/config.mos_grd_prdgen @@ -0,0 +1,12 @@ +#! /usr/bin/env bash + +########## config.mos_grd_prdgen ########## +echo "BEGIN: config.mos_grd_prdgen" + +# Get task specific resources +. "${EXPDIR}/config.resources" mos_grd_prdgen + +# Get MOS settings +. "${EXPDIR}/config.mos" + +echo "END: config.mos_grd_prdgen" diff --git a/parm/config/gfs/config.mos_grd_prep b/parm/config/gfs/config.mos_grd_prep new file mode 100644 index 0000000000..8a3d334d0d --- /dev/null +++ b/parm/config/gfs/config.mos_grd_prep @@ -0,0 +1,12 @@ +#! /usr/bin/env bash + +########## config.mos_grd_prep ########## +echo "BEGIN: config.mos_grd_prep" + +# Get task specific resources +. "${EXPDIR}/config.resources" mos_grd_prep + +# Get MOS settings +. "${EXPDIR}/config.mos" + +echo "END: config.mos_grd_prep" diff --git a/parm/config/gfs/config.mos_stn_fcst b/parm/config/gfs/config.mos_stn_fcst new file mode 100644 index 0000000000..7cb266ea3a --- /dev/null +++ b/parm/config/gfs/config.mos_stn_fcst @@ -0,0 +1,12 @@ +#! /usr/bin/env bash + +########## config.mos_stn_fcst ########## +echo "BEGIN: config.mos_stn_fcst" + +# Get task specific resources +. "${EXPDIR}/config.resources" mos_stn_fcst + +# Get MOS settings +. "${EXPDIR}/config.mos" + +echo "END: config.mos_stn_fcst" diff --git a/parm/config/gfs/config.mos_stn_prdgen b/parm/config/gfs/config.mos_stn_prdgen new file mode 100644 index 0000000000..f92edbd0fd --- /dev/null +++ b/parm/config/gfs/config.mos_stn_prdgen @@ -0,0 +1,12 @@ +#! /usr/bin/env bash + +########## config.mos_stn_prdgen ########## +echo "BEGIN: config.mos_stn_prdgen" + +# Get task specific resources +. "${EXPDIR}/config.resources" mos_stn_prdgen + +# Get MOS settings +. "${EXPDIR}/config.mos" + +echo "END: config.mos_stn_prdgen" diff --git a/parm/config/gfs/config.mos_stn_prep b/parm/config/gfs/config.mos_stn_prep new file mode 100644 index 0000000000..b236f42879 --- /dev/null +++ b/parm/config/gfs/config.mos_stn_prep @@ -0,0 +1,12 @@ +#! /usr/bin/env bash + +########## config.mos_stn_prep ########## +echo "BEGIN: config.mos_stn_prep" + +# Get task specific resources +. "${EXPDIR}/config.resources" mos_stn_prep + +# Get MOS settings +. "${EXPDIR}/config.mos" + +echo "END: config.mos_stn_prep" diff --git a/parm/config/gfs/config.mos_wx_ext_prdgen b/parm/config/gfs/config.mos_wx_ext_prdgen new file mode 100644 index 0000000000..054cb950ad --- /dev/null +++ b/parm/config/gfs/config.mos_wx_ext_prdgen @@ -0,0 +1,12 @@ +#! /usr/bin/env bash + +########## config.mos_wx_ext_prdgen ########## +echo "BEGIN: config.mos_wx_ext_prdgen" + +# Get task specific resources +. "${EXPDIR}/config.resources" mos_wx_ext_prdgen + +# Get MOS settings +. "${EXPDIR}/config.mos" + +echo "END: config.mos_wx_ext_prdgen" diff --git a/parm/config/gfs/config.mos_wx_prdgen b/parm/config/gfs/config.mos_wx_prdgen new file mode 100644 index 0000000000..d4481b65fc --- /dev/null +++ b/parm/config/gfs/config.mos_wx_prdgen @@ -0,0 +1,12 @@ +#! /usr/bin/env bash + +########## config.mos_wx_prdgen ########## +echo "BEGIN: config.mos_wx_prdgen" + +# Get task specific resources +. "${EXPDIR}/config.resources" mos_wx_prdgen + +# Get MOS settings +. "${EXPDIR}/config.mos" + +echo "END: config.mos_wx_prdgen" From 25f43baac34c91fa6251fdb8f258a28af38fa5e1 Mon Sep 17 00:00:00 2001 From: "kate.friedman" Date: Tue, 12 Dec 2023 18:35:42 +0000 Subject: [PATCH 03/10] Create rocoto job scripts for MOS Refs #2068 --- jobs/rocoto/mos_ext_grd_fcst.sh | 25 +++++++++++++++++++++++++ jobs/rocoto/mos_ext_grd_prdgen.sh | 25 +++++++++++++++++++++++++ jobs/rocoto/mos_ext_grd_prep.sh | 25 +++++++++++++++++++++++++ jobs/rocoto/mos_ext_stn_fcst.sh | 25 +++++++++++++++++++++++++ jobs/rocoto/mos_ext_stn_prdgen.sh | 25 +++++++++++++++++++++++++ jobs/rocoto/mos_ext_stn_prep.sh | 25 +++++++++++++++++++++++++ jobs/rocoto/mos_grd_fcst.sh | 25 +++++++++++++++++++++++++ jobs/rocoto/mos_grd_prdgen.sh | 25 +++++++++++++++++++++++++ jobs/rocoto/mos_grd_prep.sh | 25 +++++++++++++++++++++++++ jobs/rocoto/mos_stn_fcst.sh | 25 +++++++++++++++++++++++++ jobs/rocoto/mos_stn_prdgen.sh | 25 +++++++++++++++++++++++++ jobs/rocoto/mos_stn_prep.sh | 25 +++++++++++++++++++++++++ jobs/rocoto/mos_wx_ext_prdgen.sh | 25 +++++++++++++++++++++++++ jobs/rocoto/mos_wx_prdgen.sh | 25 +++++++++++++++++++++++++ 14 files changed, 350 insertions(+) create mode 100755 jobs/rocoto/mos_ext_grd_fcst.sh create mode 100755 jobs/rocoto/mos_ext_grd_prdgen.sh create mode 100755 jobs/rocoto/mos_ext_grd_prep.sh create mode 100755 jobs/rocoto/mos_ext_stn_fcst.sh create mode 100755 jobs/rocoto/mos_ext_stn_prdgen.sh create mode 100755 jobs/rocoto/mos_ext_stn_prep.sh create mode 100755 jobs/rocoto/mos_grd_fcst.sh create mode 100755 jobs/rocoto/mos_grd_prdgen.sh create mode 100755 jobs/rocoto/mos_grd_prep.sh create mode 100755 jobs/rocoto/mos_stn_fcst.sh create mode 100755 jobs/rocoto/mos_stn_prdgen.sh create mode 100755 jobs/rocoto/mos_stn_prep.sh create mode 100755 jobs/rocoto/mos_wx_ext_prdgen.sh create mode 100755 jobs/rocoto/mos_wx_prdgen.sh diff --git a/jobs/rocoto/mos_ext_grd_fcst.sh b/jobs/rocoto/mos_ext_grd_fcst.sh new file mode 100755 index 0000000000..ce37711907 --- /dev/null +++ b/jobs/rocoto/mos_ext_grd_fcst.sh @@ -0,0 +1,25 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source FV3GFS workflow modules +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +(( status != 0 )) && exit "${status}" + +export job="mos_ext_grd_fcst" +export jobid="${job}.$$" + +############################################################### +# Source jjob_header before invoking external JJOB + +source "${HOMEgfs}/ush/jjob_header.sh" -e "mos_ext_grd_fcst" -c "base mos_ext_grd_fcst" + +############################################################### +# Execute the JJOB + +"${HOMEgfs_mos}/jobs/JGFSMOS_EXT_GRD_FORECAST" +status=$? + +exit "${status}" diff --git a/jobs/rocoto/mos_ext_grd_prdgen.sh b/jobs/rocoto/mos_ext_grd_prdgen.sh new file mode 100755 index 0000000000..fb641e04f0 --- /dev/null +++ b/jobs/rocoto/mos_ext_grd_prdgen.sh @@ -0,0 +1,25 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source FV3GFS workflow modules +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +(( status != 0 )) && exit "${status}" + +export job="mos_ext_grd_prdgen" +export jobid="${job}.$$" + +############################################################### +# Source jjob_header before invoking external JJOB + +source "${HOMEgfs}/ush/jjob_header.sh" -e "mos_ext_grd_prdgen" -c "base mos_ext_grd_prdgen" + +############################################################### +# Execute the JJOB + +"${HOMEgfs_mos}/jobs/JGFSMOS_EXT_GRD_PRDGEN" +status=$? + +exit "${status}" diff --git a/jobs/rocoto/mos_ext_grd_prep.sh b/jobs/rocoto/mos_ext_grd_prep.sh new file mode 100755 index 0000000000..defe9222b6 --- /dev/null +++ b/jobs/rocoto/mos_ext_grd_prep.sh @@ -0,0 +1,25 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source FV3GFS workflow modules +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +(( status != 0 )) && exit "${status}" + +export job="mos_ext_grd_prep" +export jobid="${job}.$$" + +############################################################### +# Source jjob_header before invoking external JJOB + +source "${HOMEgfs}/ush/jjob_header.sh" -e "mos_ext_grd_prep" -c "base mos_ext_grd_prep" + +############################################################### +# Execute the JJOB + +"${HOMEgfs_mos}/jobs/JGFSMOS_EXT_GRD_PREP" +status=$? + +exit "${status}" diff --git a/jobs/rocoto/mos_ext_stn_fcst.sh b/jobs/rocoto/mos_ext_stn_fcst.sh new file mode 100755 index 0000000000..85cde49192 --- /dev/null +++ b/jobs/rocoto/mos_ext_stn_fcst.sh @@ -0,0 +1,25 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source FV3GFS workflow modules +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +(( status != 0 )) && exit "${status}" + +export job="mos_ext_stn_fcst" +export jobid="${job}.$$" + +############################################################### +# Source jjob_header before invoking external JJOB + +source "${HOMEgfs}/ush/jjob_header.sh" -e "mos_ext_stn_fcst" -c "base mos_ext_stn_fcst" + +############################################################### +# Execute the JJOB + +"${HOMEgfs_mos}/jobs/JGFSMOS_EXT_STN_FORECAST" +status=$? + +exit "${status}" diff --git a/jobs/rocoto/mos_ext_stn_prdgen.sh b/jobs/rocoto/mos_ext_stn_prdgen.sh new file mode 100755 index 0000000000..17709d5ffb --- /dev/null +++ b/jobs/rocoto/mos_ext_stn_prdgen.sh @@ -0,0 +1,25 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source FV3GFS workflow modules +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +(( status != 0 )) && exit "${status}" + +export job="mos_ext_stn_prdgen" +export jobid="${job}.$$" + +############################################################### +# Source jjob_header before invoking external JJOB + +source "${HOMEgfs}/ush/jjob_header.sh" -e "mos_ext_stn_prdgen" -c "base mos_ext_stn_prdgen" + +############################################################### +# Execute the JJOB + +"${HOMEgfs_mos}/jobs/JGFSMOS_EXT_STN_PRDGEN" +status=$? + +exit "${status}" diff --git a/jobs/rocoto/mos_ext_stn_prep.sh b/jobs/rocoto/mos_ext_stn_prep.sh new file mode 100755 index 0000000000..9c65761a0d --- /dev/null +++ b/jobs/rocoto/mos_ext_stn_prep.sh @@ -0,0 +1,25 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source FV3GFS workflow modules +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +(( status != 0 )) && exit "${status}" + +export job="mos_ext_stn_prep" +export jobid="${job}.$$" + +############################################################### +# Source jjob_header before invoking external JJOB + +source "${HOMEgfs}/ush/jjob_header.sh" -e "mos_ext_stn_prep" -c "base mos_ext_stn_prep" + +############################################################### +# Execute the JJOB + +"${HOMEgfs_mos}/jobs/JGFSMOS_EXT_STN_PREP" +status=$? + +exit "${status}" diff --git a/jobs/rocoto/mos_grd_fcst.sh b/jobs/rocoto/mos_grd_fcst.sh new file mode 100755 index 0000000000..42832d5f14 --- /dev/null +++ b/jobs/rocoto/mos_grd_fcst.sh @@ -0,0 +1,25 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source FV3GFS workflow modules +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +(( status != 0 )) && exit "${status}" + +export job="mos_grd_fcst" +export jobid="${job}.$$" + +############################################################### +# Source jjob_header before invoking external JJOB + +source "${HOMEgfs}/ush/jjob_header.sh" -e "mos_grd_fcst" -c "base mos_grd_fcst" + +############################################################### +# Execute the JJOB + +"${HOMEgfs_mos}/jobs/JGFSMOS_GRD_FORECAST" +status=$? + +exit "${status}" diff --git a/jobs/rocoto/mos_grd_prdgen.sh b/jobs/rocoto/mos_grd_prdgen.sh new file mode 100755 index 0000000000..c60b2e8f39 --- /dev/null +++ b/jobs/rocoto/mos_grd_prdgen.sh @@ -0,0 +1,25 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source FV3GFS workflow modules +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +(( status != 0 )) && exit "${status}" + +export job="mos_grd_prdgen" +export jobid="${job}.$$" + +############################################################### +# Source jjob_header before invoking external JJOB + +source "${HOMEgfs}/ush/jjob_header.sh" -e "mos_grd_prdgen" -c "base mos_grd_prdgen" + +############################################################### +# Execute the JJOB + +"${HOMEgfs_mos}/jobs/JGFSMOS_GRD_PRDGEN" +status=$? + +exit "${status}" diff --git a/jobs/rocoto/mos_grd_prep.sh b/jobs/rocoto/mos_grd_prep.sh new file mode 100755 index 0000000000..3276ebf87d --- /dev/null +++ b/jobs/rocoto/mos_grd_prep.sh @@ -0,0 +1,25 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source FV3GFS workflow modules +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +(( status != 0 )) && exit "${status}" + +export job="mos_grd_prep" +export jobid="${job}.$$" + +############################################################### +# Source jjob_header before invoking external JJOB + +source "${HOMEgfs}/ush/jjob_header.sh" -e "mos_grd_prep" -c "base mos_grd_prep" + +############################################################### +# Execute the JJOB + +"${HOMEgfs_mos}/jobs/JGFSMOS_GRD_PREP" +status=$? + +exit "${status}" diff --git a/jobs/rocoto/mos_stn_fcst.sh b/jobs/rocoto/mos_stn_fcst.sh new file mode 100755 index 0000000000..0024ed24b7 --- /dev/null +++ b/jobs/rocoto/mos_stn_fcst.sh @@ -0,0 +1,25 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source FV3GFS workflow modules +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +(( status != 0 )) && exit "${status}" + +export job="mos_stn_fcst" +export jobid="${job}.$$" + +############################################################### +# Source jjob_header before invoking external JJOB + +source "${HOMEgfs}/ush/jjob_header.sh" -e "mos_stn_fcst" -c "base mos_stn_fcst" + +############################################################### +# Execute the JJOB + +"${HOMEgfs_mos}/jobs/JGFSMOS_STN_FORECAST" +status=$? + +exit "${status}" diff --git a/jobs/rocoto/mos_stn_prdgen.sh b/jobs/rocoto/mos_stn_prdgen.sh new file mode 100755 index 0000000000..01ada3f9d5 --- /dev/null +++ b/jobs/rocoto/mos_stn_prdgen.sh @@ -0,0 +1,25 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source FV3GFS workflow modules +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +(( status != 0 )) && exit "${status}" + +export job="mos_stn_prdgen" +export jobid="${job}.$$" + +############################################################### +# Source jjob_header before invoking external JJOB + +source "${HOMEgfs}/ush/jjob_header.sh" -e "mos_stn_prdgen" -c "base mos_stn_prdgen" + +############################################################### +# Execute the JJOB + +"${HOMEgfs_mos}/jobs/JGFSMOS_STN_PRDGEN" +status=$? + +exit "${status}" diff --git a/jobs/rocoto/mos_stn_prep.sh b/jobs/rocoto/mos_stn_prep.sh new file mode 100755 index 0000000000..21b19c6305 --- /dev/null +++ b/jobs/rocoto/mos_stn_prep.sh @@ -0,0 +1,25 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source FV3GFS workflow modules +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +(( status != 0 )) && exit "${status}" + +export job="mos_stn_prep" +export jobid="${job}.$$" + +############################################################### +# Source jjob_header before invoking external JJOB + +source "${HOMEgfs}/ush/jjob_header.sh" -e "mos_stn_prep" -c "base mos_stn_prep" + +############################################################### +# Execute the JJOB + +"${HOMEgfs_mos}/jobs/JGFSMOS_STN_PREP" +status=$? + +exit "${status}" diff --git a/jobs/rocoto/mos_wx_ext_prdgen.sh b/jobs/rocoto/mos_wx_ext_prdgen.sh new file mode 100755 index 0000000000..b1c81e8a3b --- /dev/null +++ b/jobs/rocoto/mos_wx_ext_prdgen.sh @@ -0,0 +1,25 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source FV3GFS workflow modules +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +(( status != 0 )) && exit "${status}" + +export job="mos_wx_ext_prdgen" +export jobid="${job}.$$" + +############################################################### +# Source jjob_header before invoking external JJOB + +source "${HOMEgfs}/ush/jjob_header.sh" -e "mos_wx_ext_prdgen" -c "base mos_wx_ext_prdgen" + +############################################################### +# Execute the JJOB + +"${HOMEgfs_mos}/jobs/JGFSMOS_WX_EXT_PRDGEN" +status=$? + +exit "${status}" diff --git a/jobs/rocoto/mos_wx_prdgen.sh b/jobs/rocoto/mos_wx_prdgen.sh new file mode 100755 index 0000000000..345682b03e --- /dev/null +++ b/jobs/rocoto/mos_wx_prdgen.sh @@ -0,0 +1,25 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source FV3GFS workflow modules +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +(( status != 0 )) && exit "${status}" + +export job="mos_wx_prdgen" +export jobid="${job}.$$" + +############################################################### +# Source jjob_header before invoking external JJOB + +source "${HOMEgfs}/ush/jjob_header.sh" -e "mos_wx_prdgen" -c "base mos_wx_prdgen" + +############################################################### +# Execute the JJOB + +"${HOMEgfs_mos}/jobs/JGFSMOS_WX_PRDGEN" +status=$? + +exit "${status}" From ba88b8117644d16b61a2c766dae3eac06c33c305 Mon Sep 17 00:00:00 2001 From: "kate.friedman" Date: Tue, 12 Dec 2023 18:36:26 +0000 Subject: [PATCH 04/10] Add MOS jobs to resource config - Use resources from gfs_mos.v5.4.3 operational package - Include new prepost=true/false flag Refs #2068 --- parm/config/gfs/config.resources | 147 +++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) diff --git a/parm/config/gfs/config.resources b/parm/config/gfs/config.resources index 695ad5fcc5..a440dc96c6 100644 --- a/parm/config/gfs/config.resources +++ b/parm/config/gfs/config.resources @@ -1030,6 +1030,153 @@ elif [[ ${step} = "gempak" ]]; then export memory_gempak="4GB" export memory_gempak_gfs="2GB" +elif [[ ${step} = "mos_stn_prep" ]]; then + + export wtime_mos_stn_prep="00:10:00" + export npe_mos_stn_prep=3 + export npe_node_mos_stn_prep=3 + export nth_mos_stn_prep=1 + export memory_mos_stn_prep="5GB" + export NTASK=$npe_mos_stn_prep + export PTILE=$npe_node_mos_stn_prep + +elif [[ ${step} = "mos_grd_prep" ]]; then + + export wtime_mos_grd_prep="00:10:00" + export npe_mos_grd_prep=4 + export npe_node_mos_grd_prep=4 + export nth_mos_grd_prep=1 + export memory_mos_grd_prep="16GB" + export NTASK=$npe_mos_grd_prep + export PTILE=$npe_node_mos_grd_prep + +elif [[ ${step} = "mos_ext_stn_prep" ]]; then + + export wtime_mos_ext_stn_prep="00:15:00" + export npe_mos_ext_stn_prep=2 + export npe_node_mos_ext_stn_prep=2 + export nth_mos_ext_stn_prep=1 + export memory_mos_ext_stn_prep="5GB" + export NTASK=$npe_mos_ext_stn_prep + export PTILE=$npe_node_mos_ext_stn_prep + +elif [[ ${step} = "mos_ext_grd_prep" ]]; then + + export wtime_mos_ext_grd_prep="00:10:00" + export npe_mos_ext_grd_prep=7 + export npe_node_mos_ext_grd_prep=7 + export nth_mos_ext_grd_prep=1 + export memory_mos_ext_grd_prep="3GB" + export NTASK=$npe_mos_ext_grd_prep + export PTILE=$npe_node_mos_ext_grd_prep + +elif [[ ${step} = "mos_stn_fcst" ]]; then + + export wtime_mos_stn_fcst="00:10:00" + export npe_mos_stn_fcst=5 + export npe_node_mos_stn_fcst=5 + export nth_mos_stn_fcst=1 + export memory_mos_stn_fcst="40GB" + export NTASK=$npe_mos_stn_fcst + export PTILE=$npe_node_mos_stn_fcst + +elif [[ ${step} = "mos_grd_fcst" ]]; then + + export wtime_mos_grd_fcst="00:10:00" + export npe_mos_grd_fcst=7 + export npe_node_mos_grd_fcst=7 + export nth_mos_grd_fcst=1 + export memory_mos_grd_fcst="50GB" + export NTASK=$npe_mos_grd_fcst + export PTILE=$npe_node_mos_grd_fcst + +elif [[ ${step} = "mos_ext_stn_fcst" ]]; then + + export wtime_mos_ext_stn_fcst="00:20:00" + export npe_mos_ext_stn_fcst=3 + export npe_node_mos_ext_stn_fcst=3 + export nth_mos_ext_stn_fcst=1 + export memory_mos_ext_stn_fcst="50GB" + export NTASK=$npe_mos_ext_stn_fcst + export PTILE=$npe_node_mos_ext_stn_fcst + export prepost=True + +elif [[ ${step} = "mos_ext_grd_fcst" ]]; then + + export wtime_mos_ext_grd_fcst="00:10:00" + export npe_mos_ext_grd_fcst=7 + export npe_node_mos_ext_grd_fcst=7 + export nth_mos_ext_grd_fcst=1 + export memory_mos_ext_grd_fcst="50GB" + export NTASK=$npe_mos_ext_grd_fcst + export PTILE=$npe_node_mos_ext_grd_fcst + +elif [[ ${step} = "mos_stn_prdgen" ]]; then + + export wtime_mos_stn_prdgen="00:10:00" + export npe_mos_stn_prdgen=1 + export npe_node_mos_stn_prdgen=1 + export nth_mos_stn_prdgen=1 + export memory_mos_stn_prdgen="15GB" + export NTASK=$npe_mos_stn_prdgen + export PTILE=$npe_node_mos_stn_prdgen + export prepost=True + +elif [[ ${step} = "mos_grd_prdgen" ]]; then + + export wtime_mos_grd_prdgen="00:40:00" + export npe_mos_grd_prdgen=72 + export npe_node_mos_grd_prdgen=18 + export nth_mos_grd_prdgen=4 + export memory_mos_grd_prdgen="20GB" + export NTASK=$npe_mos_grd_prdgen + export PTILE=$npe_node_mos_grd_prdgen + export OMP_NUM_THREADS=$nth_mos_grd_prdgen + +elif [[ ${step} = "mos_ext_stn_prdgen" ]]; then + + export wtime_mos_ext_stn_prdgen="00:10:00" + export npe_mos_ext_stn_prdgen=1 + export npe_node_mos_ext_stn_prdgen=1 + export nth_mos_ext_stn_prdgen=1 + export memory_mos_ext_stn_prdgen="15GB" + export NTASK=$npe_mos_ext_stn_prdgen + export PTILE=$npe_node_mos_ext_stn_prdgen + export prepost=True + +elif [[ ${step} = "mos_ext_grd_prdgen" ]]; then + + export wtime_mos_ext_grd_prdgen="00:30:00" + export npe_mos_ext_grd_prdgen=96 + export npe_node_mos_ext_grd_prdgen=6 + export nth_mos_ext_grd_prdgen=16 + export memory_mos_ext_grd_prdgen="30GB" + export NTASK=$npe_mos_ext_grd_prdgen + export PTILE=$npe_node_mos_ext_grd_prdgen + export OMP_NUM_THREADS=$nth_mos_ext_grd_prdgen + +elif [[ ${step} = "mos_wx_prdgen" ]]; then + + export wtime_mos_wx_prdgen="00:10:00" + export npe_mos_wx_prdgen=4 + export npe_node_mos_wx_prdgen=2 + export nth_mos_wx_prdgen=2 + export memory_mos_wx_prdgen="10GB" + export NTASK=$npe_mos_wx_prdgen + export PTILE=$npe_node_mos_wx_prdgen + export OMP_NUM_THREADS=$nth_mos_wx_prdgen + +elif [[ ${step} = "mos_wx_ext_prdgen" ]]; then + + export wtime_mos_wx_ext_prdgen="00:10:00" + export npe_mos_wx_ext_prdgen=4 + export npe_node_mos_wx_ext_prdgen=2 + export nth_mos_wx_ext_prdgen=2 + export memory_mos_wx_ext_prdgen="10GB" + export NTASK=$npe_mos_wx_ext_prdgen + export PTILE=$npe_node_mos_wx_ext_prdgen + export OMP_NUM_THREADS=$nth_mos_wx_ext_prdgen + else echo "Invalid step = ${step}, ABORT!" From 9b26bf054ea2f8367834283b1d35c4b093a0f452 Mon Sep 17 00:00:00 2001 From: "kate.friedman" Date: Tue, 12 Dec 2023 18:39:50 +0000 Subject: [PATCH 05/10] Add MOS modules for WCOSS2 - Add mos_* module versions to run.wcoss2.ver - Add mos_shared module load to module_base.wcoss2.lua Refs #2068 --- modulefiles/module_base.wcoss2.lua | 3 +++ versions/run.wcoss2.ver | 2 ++ 2 files changed, 5 insertions(+) diff --git a/modulefiles/module_base.wcoss2.lua b/modulefiles/module_base.wcoss2.lua index aedecf7040..57d3bf51dd 100644 --- a/modulefiles/module_base.wcoss2.lua +++ b/modulefiles/module_base.wcoss2.lua @@ -38,4 +38,7 @@ load(pathJoin("prepobs", os.getenv("prepobs_run_ver"))) prepend_path("MODULEPATH", pathJoin("/lfs/h2/emc/global/save/emc.global/git/Fit2Obs/v" .. os.getenv("fit2obs_ver"), "modulefiles")) load(pathJoin("fit2obs", os.getenv("fit2obs_ver"))) +append_path("MODULEPATH", pathJoin("/apps/ops/prod/nco/models/modulefiles")) +load(pathJoin("mos_shared", os.getenv("mos_shared_ver"))) + whatis("Description: GFS run environment") diff --git a/versions/run.wcoss2.ver b/versions/run.wcoss2.ver index f61122337e..a188cdea74 100644 --- a/versions/run.wcoss2.ver +++ b/versions/run.wcoss2.ver @@ -47,3 +47,5 @@ export prepobs_run_ver=1.0.1 export ens_tracker_ver=feature-GFSv17_com_reorg export fit2obs_ver=1.0.0 +export mos_ver=5.4.3 +export mos_shared_ver=2.7.2 From 52781c65210911096fb8e56d079fab0122e876c0 Mon Sep 17 00:00:00 2001 From: "kate.friedman" Date: Tue, 12 Dec 2023 18:42:15 +0000 Subject: [PATCH 06/10] Add MOS jobs and new prepost flag to rocoto setup - Add MOS jobs to rocoto workflow setup - Add MOS jobs to archive dependencies using for loop - Add new prepost flag to setup for use on WCOSS2; when "prepost=true" is set for a job in config.resources an additional flag is included at the end of the PBS select line via inclusion in the tag in the rocoto xml Refs #2068 --- workflow/applications/applications.py | 1 + workflow/applications/gfs_cycled.py | 12 ++ workflow/applications/gfs_forecast_only.py | 12 ++ workflow/rocoto/gfs_tasks.py | 190 +++++++++++++++++++++ workflow/rocoto/tasks.py | 7 +- 5 files changed, 221 insertions(+), 1 deletion(-) diff --git a/workflow/applications/applications.py b/workflow/applications/applications.py index 441dbe4c19..766d4aa508 100644 --- a/workflow/applications/applications.py +++ b/workflow/applications/applications.py @@ -62,6 +62,7 @@ def __init__(self, conf: Configuration) -> None: self.do_genesis_fsu = _base.get('DO_GENESIS_FSU', False) self.do_metp = _base.get('DO_METP', False) self.do_upp = not _base.get('WRITE_DOPOST', True) + self.do_mos = _base.get('DO_MOS', False) self.do_hpssarch = _base.get('HPSSARCH', False) diff --git a/workflow/applications/gfs_cycled.py b/workflow/applications/gfs_cycled.py index 63332c0cf6..6f70ca85b2 100644 --- a/workflow/applications/gfs_cycled.py +++ b/workflow/applications/gfs_cycled.py @@ -104,6 +104,12 @@ def _get_app_configs(self): if self.do_jedilandda: configs += ['preplandobs', 'landanl'] + if self.do_mos: + configs += ['mos_stn_prep', 'mos_grd_prep', 'mos_ext_stn_prep', 'mos_ext_grd_prep'] + configs += ['mos_stn_fcst', 'mos_grd_fcst', 'mos_ext_stn_fcst', 'mos_ext_grd_fcst'] + configs += ['mos_stn_prdgen', 'mos_grd_prdgen', 'mos_ext_stn_prdgen', 'mos_ext_grd_prdgen'] + configs += ['mos_wx_prdgen', 'mos_wx_ext_prdgen'] + return configs @staticmethod @@ -238,6 +244,12 @@ def get_task_names(self): if self.do_awips: gfs_tasks += ['awips_20km_1p0deg', 'awips_g2', 'fbwinds'] + if self.do_mos: + gfs_tasks += ['mos_stn_prep', 'mos_grd_prep', 'mos_ext_stn_prep', 'mos_ext_grd_prep'] + gfs_tasks += ['mos_stn_fcst', 'mos_grd_fcst', 'mos_ext_stn_fcst', 'mos_ext_grd_fcst'] + gfs_tasks += ['mos_stn_prdgen', 'mos_grd_prdgen', 'mos_ext_stn_prdgen', 'mos_ext_grd_prdgen'] + gfs_tasks += ['mos_wx_prdgen', 'mos_wx_ext_prdgen'] + gfs_tasks += gdas_gfs_common_cleanup_tasks tasks = dict() diff --git a/workflow/applications/gfs_forecast_only.py b/workflow/applications/gfs_forecast_only.py index 701ec12a04..7327a2d11b 100644 --- a/workflow/applications/gfs_forecast_only.py +++ b/workflow/applications/gfs_forecast_only.py @@ -60,6 +60,12 @@ def _get_app_configs(self): if self.do_awips: configs += ['waveawipsbulls', 'waveawipsgridded'] + if self.do_mos: + configs += ['mos_stn_prep', 'mos_grd_prep', 'mos_ext_stn_prep', 'mos_ext_grd_prep'] + configs += ['mos_stn_fcst', 'mos_grd_fcst', 'mos_ext_stn_fcst', 'mos_ext_grd_fcst'] + configs += ['mos_stn_prdgen', 'mos_grd_prdgen', 'mos_ext_stn_prdgen', 'mos_ext_grd_prdgen'] + configs += ['mos_wx_prdgen', 'mos_wx_ext_prdgen'] + return configs @staticmethod @@ -129,6 +135,12 @@ def get_task_names(self): if self.do_awips: tasks += ['waveawipsbulls', 'waveawipsgridded'] + if self.do_mos: + tasks += ['mos_stn_prep', 'mos_grd_prep', 'mos_ext_stn_prep', 'mos_ext_grd_prep'] + tasks += ['mos_stn_fcst', 'mos_grd_fcst', 'mos_ext_stn_fcst', 'mos_ext_grd_fcst'] + tasks += ['mos_stn_prdgen', 'mos_grd_prdgen', 'mos_ext_stn_prdgen', 'mos_ext_grd_prdgen'] + tasks += ['mos_wx_prdgen', 'mos_wx_ext_prdgen'] + tasks += ['arch', 'cleanup'] # arch and cleanup **must** be the last tasks return {f"{self._base['CDUMP']}": tasks} diff --git a/workflow/rocoto/gfs_tasks.py b/workflow/rocoto/gfs_tasks.py index 047c174cdb..d4ecf8e4d5 100644 --- a/workflow/rocoto/gfs_tasks.py +++ b/workflow/rocoto/gfs_tasks.py @@ -1091,6 +1091,187 @@ def metp(self): return task + def mos_stn_prep(self): + deps = [] + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}atmprod'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('mos_stn_prep') + task = create_wf_task('mos_stn_prep', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def mos_grd_prep(self): + deps = [] + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}atmprod'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('mos_grd_prep') + task = create_wf_task('mos_grd_prep', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def mos_ext_stn_prep(self): + deps = [] + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}atmprod'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('mos_ext_stn_prep') + task = create_wf_task('mos_ext_stn_prep', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def mos_ext_grd_prep(self): + deps = [] + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}atmprod'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('mos_ext_grd_prep') + task = create_wf_task('mos_ext_grd_prep', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def mos_stn_fcst(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}mos_stn_prep'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('mos_stn_fcst') + task = create_wf_task('mos_stn_fcst', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def mos_grd_fcst(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}mos_stn_prep'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + dep_dict = {'type': 'task', 'name': f'{self.cdump}mos_grd_prep'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('mos_grd_fcst') + task = create_wf_task('mos_grd_fcst', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def mos_ext_stn_fcst(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}mos_ext_stn_prep'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + dep_dict = {'type': 'task', 'name': f'{self.cdump}mos_stn_prdgen'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('mos_ext_stn_fcst') + task = create_wf_task('mos_ext_stn_fcst', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def mos_ext_grd_fcst(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}mos_ext_stn_prep'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + dep_dict = {'type': 'task', 'name': f'{self.cdump}mos_ext_grd_prep'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + dep_dict = {'type': 'task', 'name': f'{self.cdump}mos_grd_fcst'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('mos_ext_grd_fcst') + task = create_wf_task('mos_ext_grd_fcst', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def mos_stn_prdgen(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}mos_stn_fcst'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('mos_stn_prdgen') + task = create_wf_task('mos_stn_prdgen', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def mos_grd_prdgen(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}mos_grd_fcst'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + dep_dict = {'type': 'task', 'name': f'{self.cdump}mos_stn_prdgen'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('mos_grd_prdgen') + task = create_wf_task('mos_grd_prdgen', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def mos_ext_stn_prdgen(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}mos_ext_stn_fcst'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + dep_dict = {'type': 'task', 'name': f'{self.cdump}mos_stn_prdgen'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('mos_ext_stn_prdgen') + task = create_wf_task('mos_ext_stn_prdgen', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def mos_ext_grd_prdgen(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}mos_ext_grd_fcst'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + dep_dict = {'type': 'task', 'name': f'{self.cdump}mos_grd_prdgen'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + dep_dict = {'type': 'task', 'name': f'{self.cdump}mos_ext_stn_prdgen'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('mos_ext_grd_prdgen') + task = create_wf_task('mos_ext_grd_prdgen', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def mos_wx_prdgen(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}mos_grd_prdgen'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('mos_wx_prdgen') + task = create_wf_task('mos_wx_prdgen', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def mos_wx_ext_prdgen(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}mos_ext_grd_prdgen'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + dep_dict = {'type': 'task', 'name': f'{self.cdump}mos_wx_prdgen'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('mos_wx_ext_prdgen') + task = create_wf_task('mos_wx_ext_prdgen', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + def arch(self): deps = [] dependencies = [] @@ -1145,6 +1326,15 @@ def arch(self): if self.app_config.mode in ['forecast-only']: # TODO: fix ocnpost to run in cycled mode dep_dict = {'type': 'metatask', 'name': f'{self.cdump}ocnpost'} deps.append(rocoto.add_dependency(dep_dict)) + # MOS job dependencies + if self.cdump in ['gfs'] and self.app_config.do_mos: + mos_jobs = ["stn_prep", "grd_prep", "ext_stn_prep", "ext_grd_prep", + "stn_fcst", "grd_fcst", "ext_stn_fcst", "ext_grd_fcst", + "stn_prdgen", "grd_prdgen", "ext_stn_prdgen", "ext_grd_prdgen", + "wx_prdgen", "wx_ext_prdgen"] + for job in mos_jobs: + dep_dict = {'type': 'task', 'name': f'{self.cdump}mos_{job}'} + deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps + dependencies) diff --git a/workflow/rocoto/tasks.py b/workflow/rocoto/tasks.py index 06000338be..8381376777 100644 --- a/workflow/rocoto/tasks.py +++ b/workflow/rocoto/tasks.py @@ -29,7 +29,10 @@ class Tasks: 'gempak', 'gempakmeta', 'gempakmetancdc', 'gempakncdcupapgif', 'gempakpgrb2spec', 'npoess_pgrb2_0p5deg' 'waveawipsbulls', 'waveawipsgridded', 'wavegempak', 'waveinit', 'wavepostbndpnt', 'wavepostbndpntbll', 'wavepostpnt', 'wavepostsbs', 'waveprep', - 'npoess'] + 'npoess', + 'mos_stn_prep', 'mos_grd_prep', 'mos_ext_stn_prep', 'mos_ext_grd_prep', + 'mos_stn_fcst', 'mos_grd_fcst', 'mos_ext_stn_fcst', 'mos_ext_grd_fcst', + 'mos_stn_prdgen', 'mos_grd_prdgen', 'mos_ext_stn_prdgen', 'mos_ext_grd_prdgen', 'mos_wx_prdgen', 'mos_wx_ext_prdgen'] def __init__(self, app_config: AppConfig, cdump: str) -> None: @@ -149,6 +152,8 @@ def get_resource(self, task_name): threads = task_config[f'nth_{task_name}_gfs'] memory = task_config.get(f'memory_{task_name}', None) + if task_config.get('prepost', False): + memory += ':prepost=true' native = None if scheduler in ['pbspro']: From baf9451187239f798bfde4f2a616b24d02e90f10 Mon Sep 17 00:00:00 2001 From: "kate.friedman" Date: Tue, 12 Dec 2023 18:48:39 +0000 Subject: [PATCH 07/10] Wrap prepost in pbspro scheduler check Only add prepost setting when using pbspro scheduler Refs #2068 --- workflow/rocoto/tasks.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/workflow/rocoto/tasks.py b/workflow/rocoto/tasks.py index 8381376777..7f5725783e 100644 --- a/workflow/rocoto/tasks.py +++ b/workflow/rocoto/tasks.py @@ -152,8 +152,9 @@ def get_resource(self, task_name): threads = task_config[f'nth_{task_name}_gfs'] memory = task_config.get(f'memory_{task_name}', None) - if task_config.get('prepost', False): - memory += ':prepost=true' + if scheduler in ['pbspro']: + if task_config.get('prepost', False): + memory += ':prepost=true' native = None if scheduler in ['pbspro']: From b9c0a1b097d5cdedf7a65b9746889f075762a15e Mon Sep 17 00:00:00 2001 From: "kate.friedman" Date: Tue, 12 Dec 2023 14:24:21 -0600 Subject: [PATCH 08/10] Resolve shellcheck SC2250 warnings in config.resources Add curly braces in new resource variables for MOS jobs Refs #2068 --- parm/config/gfs/config.resources | 64 ++++++++++++++++---------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/parm/config/gfs/config.resources b/parm/config/gfs/config.resources index a440dc96c6..05883d41c7 100644 --- a/parm/config/gfs/config.resources +++ b/parm/config/gfs/config.resources @@ -1037,8 +1037,8 @@ elif [[ ${step} = "mos_stn_prep" ]]; then export npe_node_mos_stn_prep=3 export nth_mos_stn_prep=1 export memory_mos_stn_prep="5GB" - export NTASK=$npe_mos_stn_prep - export PTILE=$npe_node_mos_stn_prep + export NTASK=${npe_mos_stn_prep} + export PTILE=${npe_node_mos_stn_prep} elif [[ ${step} = "mos_grd_prep" ]]; then @@ -1047,8 +1047,8 @@ elif [[ ${step} = "mos_grd_prep" ]]; then export npe_node_mos_grd_prep=4 export nth_mos_grd_prep=1 export memory_mos_grd_prep="16GB" - export NTASK=$npe_mos_grd_prep - export PTILE=$npe_node_mos_grd_prep + export NTASK=${npe_mos_grd_prep} + export PTILE=${npe_node_mos_grd_prep} elif [[ ${step} = "mos_ext_stn_prep" ]]; then @@ -1057,8 +1057,8 @@ elif [[ ${step} = "mos_ext_stn_prep" ]]; then export npe_node_mos_ext_stn_prep=2 export nth_mos_ext_stn_prep=1 export memory_mos_ext_stn_prep="5GB" - export NTASK=$npe_mos_ext_stn_prep - export PTILE=$npe_node_mos_ext_stn_prep + export NTASK=${npe_mos_ext_stn_prep} + export PTILE=${npe_node_mos_ext_stn_prep} elif [[ ${step} = "mos_ext_grd_prep" ]]; then @@ -1067,8 +1067,8 @@ elif [[ ${step} = "mos_ext_grd_prep" ]]; then export npe_node_mos_ext_grd_prep=7 export nth_mos_ext_grd_prep=1 export memory_mos_ext_grd_prep="3GB" - export NTASK=$npe_mos_ext_grd_prep - export PTILE=$npe_node_mos_ext_grd_prep + export NTASK=${npe_mos_ext_grd_prep} + export PTILE=${npe_node_mos_ext_grd_prep} elif [[ ${step} = "mos_stn_fcst" ]]; then @@ -1077,8 +1077,8 @@ elif [[ ${step} = "mos_stn_fcst" ]]; then export npe_node_mos_stn_fcst=5 export nth_mos_stn_fcst=1 export memory_mos_stn_fcst="40GB" - export NTASK=$npe_mos_stn_fcst - export PTILE=$npe_node_mos_stn_fcst + export NTASK=${npe_mos_stn_fcst} + export PTILE=${npe_node_mos_stn_fcst} elif [[ ${step} = "mos_grd_fcst" ]]; then @@ -1087,8 +1087,8 @@ elif [[ ${step} = "mos_grd_fcst" ]]; then export npe_node_mos_grd_fcst=7 export nth_mos_grd_fcst=1 export memory_mos_grd_fcst="50GB" - export NTASK=$npe_mos_grd_fcst - export PTILE=$npe_node_mos_grd_fcst + export NTASK=${npe_mos_grd_fcst} + export PTILE=${npe_node_mos_grd_fcst} elif [[ ${step} = "mos_ext_stn_fcst" ]]; then @@ -1097,8 +1097,8 @@ elif [[ ${step} = "mos_ext_stn_fcst" ]]; then export npe_node_mos_ext_stn_fcst=3 export nth_mos_ext_stn_fcst=1 export memory_mos_ext_stn_fcst="50GB" - export NTASK=$npe_mos_ext_stn_fcst - export PTILE=$npe_node_mos_ext_stn_fcst + export NTASK=${npe_mos_ext_stn_fcst} + export PTILE=${npe_node_mos_ext_stn_fcst} export prepost=True elif [[ ${step} = "mos_ext_grd_fcst" ]]; then @@ -1108,8 +1108,8 @@ elif [[ ${step} = "mos_ext_grd_fcst" ]]; then export npe_node_mos_ext_grd_fcst=7 export nth_mos_ext_grd_fcst=1 export memory_mos_ext_grd_fcst="50GB" - export NTASK=$npe_mos_ext_grd_fcst - export PTILE=$npe_node_mos_ext_grd_fcst + export NTASK=${npe_mos_ext_grd_fcst} + export PTILE=${npe_node_mos_ext_grd_fcst} elif [[ ${step} = "mos_stn_prdgen" ]]; then @@ -1118,8 +1118,8 @@ elif [[ ${step} = "mos_stn_prdgen" ]]; then export npe_node_mos_stn_prdgen=1 export nth_mos_stn_prdgen=1 export memory_mos_stn_prdgen="15GB" - export NTASK=$npe_mos_stn_prdgen - export PTILE=$npe_node_mos_stn_prdgen + export NTASK=${npe_mos_stn_prdgen} + export PTILE=${npe_node_mos_stn_prdgen} export prepost=True elif [[ ${step} = "mos_grd_prdgen" ]]; then @@ -1129,9 +1129,9 @@ elif [[ ${step} = "mos_grd_prdgen" ]]; then export npe_node_mos_grd_prdgen=18 export nth_mos_grd_prdgen=4 export memory_mos_grd_prdgen="20GB" - export NTASK=$npe_mos_grd_prdgen - export PTILE=$npe_node_mos_grd_prdgen - export OMP_NUM_THREADS=$nth_mos_grd_prdgen + export NTASK=${npe_mos_grd_prdgen} + export PTILE=${npe_node_mos_grd_prdgen} + export OMP_NUM_THREADS=${nth_mos_grd_prdgen} elif [[ ${step} = "mos_ext_stn_prdgen" ]]; then @@ -1140,8 +1140,8 @@ elif [[ ${step} = "mos_ext_stn_prdgen" ]]; then export npe_node_mos_ext_stn_prdgen=1 export nth_mos_ext_stn_prdgen=1 export memory_mos_ext_stn_prdgen="15GB" - export NTASK=$npe_mos_ext_stn_prdgen - export PTILE=$npe_node_mos_ext_stn_prdgen + export NTASK=${npe_mos_ext_stn_prdgen} + export PTILE=${npe_node_mos_ext_stn_prdgen} export prepost=True elif [[ ${step} = "mos_ext_grd_prdgen" ]]; then @@ -1151,9 +1151,9 @@ elif [[ ${step} = "mos_ext_grd_prdgen" ]]; then export npe_node_mos_ext_grd_prdgen=6 export nth_mos_ext_grd_prdgen=16 export memory_mos_ext_grd_prdgen="30GB" - export NTASK=$npe_mos_ext_grd_prdgen - export PTILE=$npe_node_mos_ext_grd_prdgen - export OMP_NUM_THREADS=$nth_mos_ext_grd_prdgen + export NTASK=${npe_mos_ext_grd_prdgen} + export PTILE=${npe_node_mos_ext_grd_prdgen} + export OMP_NUM_THREADS=${nth_mos_ext_grd_prdgen} elif [[ ${step} = "mos_wx_prdgen" ]]; then @@ -1162,9 +1162,9 @@ elif [[ ${step} = "mos_wx_prdgen" ]]; then export npe_node_mos_wx_prdgen=2 export nth_mos_wx_prdgen=2 export memory_mos_wx_prdgen="10GB" - export NTASK=$npe_mos_wx_prdgen - export PTILE=$npe_node_mos_wx_prdgen - export OMP_NUM_THREADS=$nth_mos_wx_prdgen + export NTASK=${npe_mos_wx_prdgen} + export PTILE=${npe_node_mos_wx_prdgen} + export OMP_NUM_THREADS=${nth_mos_wx_prdgen} elif [[ ${step} = "mos_wx_ext_prdgen" ]]; then @@ -1173,9 +1173,9 @@ elif [[ ${step} = "mos_wx_ext_prdgen" ]]; then export npe_node_mos_wx_ext_prdgen=2 export nth_mos_wx_ext_prdgen=2 export memory_mos_wx_ext_prdgen="10GB" - export NTASK=$npe_mos_wx_ext_prdgen - export PTILE=$npe_node_mos_wx_ext_prdgen - export OMP_NUM_THREADS=$nth_mos_wx_ext_prdgen + export NTASK=${npe_mos_wx_ext_prdgen} + export PTILE=${npe_node_mos_wx_ext_prdgen} + export OMP_NUM_THREADS=${nth_mos_wx_ext_prdgen} else From 41f2c67948dac93106d541c29c033fe68360f42c Mon Sep 17 00:00:00 2001 From: "kate.friedman" Date: Tue, 12 Dec 2023 20:40:43 +0000 Subject: [PATCH 09/10] Clean up list of MOS configs and jobs in setup Refs #2068 --- workflow/applications/gfs_cycled.py | 16 ++++++++-------- workflow/applications/gfs_forecast_only.py | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/workflow/applications/gfs_cycled.py b/workflow/applications/gfs_cycled.py index 6f70ca85b2..a3caf8685d 100644 --- a/workflow/applications/gfs_cycled.py +++ b/workflow/applications/gfs_cycled.py @@ -105,10 +105,10 @@ def _get_app_configs(self): configs += ['preplandobs', 'landanl'] if self.do_mos: - configs += ['mos_stn_prep', 'mos_grd_prep', 'mos_ext_stn_prep', 'mos_ext_grd_prep'] - configs += ['mos_stn_fcst', 'mos_grd_fcst', 'mos_ext_stn_fcst', 'mos_ext_grd_fcst'] - configs += ['mos_stn_prdgen', 'mos_grd_prdgen', 'mos_ext_stn_prdgen', 'mos_ext_grd_prdgen'] - configs += ['mos_wx_prdgen', 'mos_wx_ext_prdgen'] + configs += ['mos_stn_prep', 'mos_grd_prep', 'mos_ext_stn_prep', 'mos_ext_grd_prep', + 'mos_stn_fcst', 'mos_grd_fcst', 'mos_ext_stn_fcst', 'mos_ext_grd_fcst', + 'mos_stn_prdgen', 'mos_grd_prdgen', 'mos_ext_stn_prdgen', 'mos_ext_grd_prdgen', + 'mos_wx_prdgen', 'mos_wx_ext_prdgen'] return configs @@ -245,10 +245,10 @@ def get_task_names(self): gfs_tasks += ['awips_20km_1p0deg', 'awips_g2', 'fbwinds'] if self.do_mos: - gfs_tasks += ['mos_stn_prep', 'mos_grd_prep', 'mos_ext_stn_prep', 'mos_ext_grd_prep'] - gfs_tasks += ['mos_stn_fcst', 'mos_grd_fcst', 'mos_ext_stn_fcst', 'mos_ext_grd_fcst'] - gfs_tasks += ['mos_stn_prdgen', 'mos_grd_prdgen', 'mos_ext_stn_prdgen', 'mos_ext_grd_prdgen'] - gfs_tasks += ['mos_wx_prdgen', 'mos_wx_ext_prdgen'] + gfs_tasks += ['mos_stn_prep', 'mos_grd_prep', 'mos_ext_stn_prep', 'mos_ext_grd_prep', + 'mos_stn_fcst', 'mos_grd_fcst', 'mos_ext_stn_fcst', 'mos_ext_grd_fcst', + 'mos_stn_prdgen', 'mos_grd_prdgen', 'mos_ext_stn_prdgen', 'mos_ext_grd_prdgen', + 'mos_wx_prdgen', 'mos_wx_ext_prdgen'] gfs_tasks += gdas_gfs_common_cleanup_tasks diff --git a/workflow/applications/gfs_forecast_only.py b/workflow/applications/gfs_forecast_only.py index 7327a2d11b..ba1d1af0e1 100644 --- a/workflow/applications/gfs_forecast_only.py +++ b/workflow/applications/gfs_forecast_only.py @@ -61,10 +61,10 @@ def _get_app_configs(self): configs += ['waveawipsbulls', 'waveawipsgridded'] if self.do_mos: - configs += ['mos_stn_prep', 'mos_grd_prep', 'mos_ext_stn_prep', 'mos_ext_grd_prep'] - configs += ['mos_stn_fcst', 'mos_grd_fcst', 'mos_ext_stn_fcst', 'mos_ext_grd_fcst'] - configs += ['mos_stn_prdgen', 'mos_grd_prdgen', 'mos_ext_stn_prdgen', 'mos_ext_grd_prdgen'] - configs += ['mos_wx_prdgen', 'mos_wx_ext_prdgen'] + configs += ['mos_stn_prep', 'mos_grd_prep', 'mos_ext_stn_prep', 'mos_ext_grd_prep', + 'mos_stn_fcst', 'mos_grd_fcst', 'mos_ext_stn_fcst', 'mos_ext_grd_fcst', + 'mos_stn_prdgen', 'mos_grd_prdgen', 'mos_ext_stn_prdgen', 'mos_ext_grd_prdgen', + 'mos_wx_prdgen', 'mos_wx_ext_prdgen'] return configs @@ -136,10 +136,10 @@ def get_task_names(self): tasks += ['waveawipsbulls', 'waveawipsgridded'] if self.do_mos: - tasks += ['mos_stn_prep', 'mos_grd_prep', 'mos_ext_stn_prep', 'mos_ext_grd_prep'] - tasks += ['mos_stn_fcst', 'mos_grd_fcst', 'mos_ext_stn_fcst', 'mos_ext_grd_fcst'] - tasks += ['mos_stn_prdgen', 'mos_grd_prdgen', 'mos_ext_stn_prdgen', 'mos_ext_grd_prdgen'] - tasks += ['mos_wx_prdgen', 'mos_wx_ext_prdgen'] + tasks += ['mos_stn_prep', 'mos_grd_prep', 'mos_ext_stn_prep', 'mos_ext_grd_prep', + 'mos_stn_fcst', 'mos_grd_fcst', 'mos_ext_stn_fcst', 'mos_ext_grd_fcst', + 'mos_stn_prdgen', 'mos_grd_prdgen', 'mos_ext_stn_prdgen', 'mos_ext_grd_prdgen', + 'mos_wx_prdgen', 'mos_wx_ext_prdgen'] tasks += ['arch', 'cleanup'] # arch and cleanup **must** be the last tasks From 5c36907180a44830d96e7f6b95406ba6254de1c7 Mon Sep 17 00:00:00 2001 From: "kate.friedman" Date: Wed, 13 Dec 2023 10:08:24 -0600 Subject: [PATCH 10/10] Address reviewer comments regarding SC2086 Add double quotes around new variable settings. Refs #2148 --- parm/config/gfs/config.resources | 64 ++++++++++++++++---------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/parm/config/gfs/config.resources b/parm/config/gfs/config.resources index 05883d41c7..c5c750bbe4 100644 --- a/parm/config/gfs/config.resources +++ b/parm/config/gfs/config.resources @@ -1037,8 +1037,8 @@ elif [[ ${step} = "mos_stn_prep" ]]; then export npe_node_mos_stn_prep=3 export nth_mos_stn_prep=1 export memory_mos_stn_prep="5GB" - export NTASK=${npe_mos_stn_prep} - export PTILE=${npe_node_mos_stn_prep} + export NTASK="${npe_mos_stn_prep}" + export PTILE="${npe_node_mos_stn_prep}" elif [[ ${step} = "mos_grd_prep" ]]; then @@ -1047,8 +1047,8 @@ elif [[ ${step} = "mos_grd_prep" ]]; then export npe_node_mos_grd_prep=4 export nth_mos_grd_prep=1 export memory_mos_grd_prep="16GB" - export NTASK=${npe_mos_grd_prep} - export PTILE=${npe_node_mos_grd_prep} + export NTASK="${npe_mos_grd_prep}" + export PTILE="${npe_node_mos_grd_prep}" elif [[ ${step} = "mos_ext_stn_prep" ]]; then @@ -1057,8 +1057,8 @@ elif [[ ${step} = "mos_ext_stn_prep" ]]; then export npe_node_mos_ext_stn_prep=2 export nth_mos_ext_stn_prep=1 export memory_mos_ext_stn_prep="5GB" - export NTASK=${npe_mos_ext_stn_prep} - export PTILE=${npe_node_mos_ext_stn_prep} + export NTASK="${npe_mos_ext_stn_prep}" + export PTILE="${npe_node_mos_ext_stn_prep}" elif [[ ${step} = "mos_ext_grd_prep" ]]; then @@ -1067,8 +1067,8 @@ elif [[ ${step} = "mos_ext_grd_prep" ]]; then export npe_node_mos_ext_grd_prep=7 export nth_mos_ext_grd_prep=1 export memory_mos_ext_grd_prep="3GB" - export NTASK=${npe_mos_ext_grd_prep} - export PTILE=${npe_node_mos_ext_grd_prep} + export NTASK="${npe_mos_ext_grd_prep}" + export PTILE="${npe_node_mos_ext_grd_prep}" elif [[ ${step} = "mos_stn_fcst" ]]; then @@ -1077,8 +1077,8 @@ elif [[ ${step} = "mos_stn_fcst" ]]; then export npe_node_mos_stn_fcst=5 export nth_mos_stn_fcst=1 export memory_mos_stn_fcst="40GB" - export NTASK=${npe_mos_stn_fcst} - export PTILE=${npe_node_mos_stn_fcst} + export NTASK="${npe_mos_stn_fcst}" + export PTILE="${npe_node_mos_stn_fcst}" elif [[ ${step} = "mos_grd_fcst" ]]; then @@ -1087,8 +1087,8 @@ elif [[ ${step} = "mos_grd_fcst" ]]; then export npe_node_mos_grd_fcst=7 export nth_mos_grd_fcst=1 export memory_mos_grd_fcst="50GB" - export NTASK=${npe_mos_grd_fcst} - export PTILE=${npe_node_mos_grd_fcst} + export NTASK="${npe_mos_grd_fcst}" + export PTILE="${npe_node_mos_grd_fcst}" elif [[ ${step} = "mos_ext_stn_fcst" ]]; then @@ -1097,8 +1097,8 @@ elif [[ ${step} = "mos_ext_stn_fcst" ]]; then export npe_node_mos_ext_stn_fcst=3 export nth_mos_ext_stn_fcst=1 export memory_mos_ext_stn_fcst="50GB" - export NTASK=${npe_mos_ext_stn_fcst} - export PTILE=${npe_node_mos_ext_stn_fcst} + export NTASK="${npe_mos_ext_stn_fcst}" + export PTILE="${npe_node_mos_ext_stn_fcst}" export prepost=True elif [[ ${step} = "mos_ext_grd_fcst" ]]; then @@ -1108,8 +1108,8 @@ elif [[ ${step} = "mos_ext_grd_fcst" ]]; then export npe_node_mos_ext_grd_fcst=7 export nth_mos_ext_grd_fcst=1 export memory_mos_ext_grd_fcst="50GB" - export NTASK=${npe_mos_ext_grd_fcst} - export PTILE=${npe_node_mos_ext_grd_fcst} + export NTASK="${npe_mos_ext_grd_fcst}" + export PTILE="${npe_node_mos_ext_grd_fcst}" elif [[ ${step} = "mos_stn_prdgen" ]]; then @@ -1118,8 +1118,8 @@ elif [[ ${step} = "mos_stn_prdgen" ]]; then export npe_node_mos_stn_prdgen=1 export nth_mos_stn_prdgen=1 export memory_mos_stn_prdgen="15GB" - export NTASK=${npe_mos_stn_prdgen} - export PTILE=${npe_node_mos_stn_prdgen} + export NTASK="${npe_mos_stn_prdgen}" + export PTILE="${npe_node_mos_stn_prdgen}" export prepost=True elif [[ ${step} = "mos_grd_prdgen" ]]; then @@ -1129,9 +1129,9 @@ elif [[ ${step} = "mos_grd_prdgen" ]]; then export npe_node_mos_grd_prdgen=18 export nth_mos_grd_prdgen=4 export memory_mos_grd_prdgen="20GB" - export NTASK=${npe_mos_grd_prdgen} - export PTILE=${npe_node_mos_grd_prdgen} - export OMP_NUM_THREADS=${nth_mos_grd_prdgen} + export NTASK="${npe_mos_grd_prdgen}" + export PTILE="${npe_node_mos_grd_prdgen}" + export OMP_NUM_THREADS="${nth_mos_grd_prdgen}" elif [[ ${step} = "mos_ext_stn_prdgen" ]]; then @@ -1140,8 +1140,8 @@ elif [[ ${step} = "mos_ext_stn_prdgen" ]]; then export npe_node_mos_ext_stn_prdgen=1 export nth_mos_ext_stn_prdgen=1 export memory_mos_ext_stn_prdgen="15GB" - export NTASK=${npe_mos_ext_stn_prdgen} - export PTILE=${npe_node_mos_ext_stn_prdgen} + export NTASK="${npe_mos_ext_stn_prdgen}" + export PTILE="${npe_node_mos_ext_stn_prdgen}" export prepost=True elif [[ ${step} = "mos_ext_grd_prdgen" ]]; then @@ -1151,9 +1151,9 @@ elif [[ ${step} = "mos_ext_grd_prdgen" ]]; then export npe_node_mos_ext_grd_prdgen=6 export nth_mos_ext_grd_prdgen=16 export memory_mos_ext_grd_prdgen="30GB" - export NTASK=${npe_mos_ext_grd_prdgen} - export PTILE=${npe_node_mos_ext_grd_prdgen} - export OMP_NUM_THREADS=${nth_mos_ext_grd_prdgen} + export NTASK="${npe_mos_ext_grd_prdgen}" + export PTILE="${npe_node_mos_ext_grd_prdgen}" + export OMP_NUM_THREADS="${nth_mos_ext_grd_prdgen}" elif [[ ${step} = "mos_wx_prdgen" ]]; then @@ -1162,9 +1162,9 @@ elif [[ ${step} = "mos_wx_prdgen" ]]; then export npe_node_mos_wx_prdgen=2 export nth_mos_wx_prdgen=2 export memory_mos_wx_prdgen="10GB" - export NTASK=${npe_mos_wx_prdgen} - export PTILE=${npe_node_mos_wx_prdgen} - export OMP_NUM_THREADS=${nth_mos_wx_prdgen} + export NTASK="${npe_mos_wx_prdgen}" + export PTILE="${npe_node_mos_wx_prdgen}" + export OMP_NUM_THREADS="${nth_mos_wx_prdgen}" elif [[ ${step} = "mos_wx_ext_prdgen" ]]; then @@ -1173,9 +1173,9 @@ elif [[ ${step} = "mos_wx_ext_prdgen" ]]; then export npe_node_mos_wx_ext_prdgen=2 export nth_mos_wx_ext_prdgen=2 export memory_mos_wx_ext_prdgen="10GB" - export NTASK=${npe_mos_wx_ext_prdgen} - export PTILE=${npe_node_mos_wx_ext_prdgen} - export OMP_NUM_THREADS=${nth_mos_wx_ext_prdgen} + export NTASK="${npe_mos_wx_ext_prdgen}" + export PTILE="${npe_node_mos_wx_ext_prdgen}" + export OMP_NUM_THREADS="${nth_mos_wx_ext_prdgen}" else