From 30a115f9f498597bc1068825bd976250a9bf1c81 Mon Sep 17 00:00:00 2001 From: Guillaume Vernieres Date: Wed, 23 Nov 2022 13:34:32 -0500 Subject: [PATCH 1/8] added marine da --- .gitignore | 3 + env/HERA.env | 10 +++ env/ORION.env | 10 +++ jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_POST | 23 ++++++ jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP | 107 ++++++++++++++++++++++++++ jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_RUN | 94 ++++++++++++++++++++++ jobs/rocoto/ocnanalpost.sh | 15 ++++ jobs/rocoto/ocnanalprep.sh | 15 ++++ jobs/rocoto/ocnanalrun.sh | 15 ++++ parm/config/config.base.emc.dyn | 1 + parm/config/config.ocnanal | 23 ++++++ parm/config/config.ocnanalpost | 10 +++ parm/config/config.ocnanalprep | 10 +++ parm/config/config.ocnanalrun | 11 +++ parm/config/config.resources | 89 ++++++++++++++++----- sorc/link_workflow.sh | 44 +++++++++-- workflow/applications.py | 1 + workflow/rocoto/workflow_tasks.py | 60 +++++++++++++++ 18 files changed, 516 insertions(+), 25 deletions(-) create mode 100755 jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_POST create mode 100755 jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP create mode 100755 jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_RUN create mode 100755 jobs/rocoto/ocnanalpost.sh create mode 100755 jobs/rocoto/ocnanalprep.sh create mode 100755 jobs/rocoto/ocnanalrun.sh create mode 100644 parm/config/config.ocnanal create mode 100644 parm/config/config.ocnanalpost create mode 100644 parm/config/config.ocnanalprep create mode 100644 parm/config/config.ocnanalrun diff --git a/.gitignore b/.gitignore index 926e68c807..9ae382b28b 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,9 @@ __pycache__ .DS_Store .idea/ +# Ignore editor generated backup files +#------------------------------------- +*~ # Ignore folders #------------------- exec/ diff --git a/env/HERA.env b/env/HERA.env index 45dd1d5265..ebc0b17a76 100755 --- a/env/HERA.env +++ b/env/HERA.env @@ -87,6 +87,16 @@ elif [ $step = "aeroanlrun" ]; then [[ $NTHREADS_AEROANL -gt $nth_max ]] && export NTHREADS_AEROANL=$nth_max export APRUN_AEROANL="$launcher -n $npe_aeroanlrun" +elif [ $step = "ocnanalrun" ]; then + + export APRUNCFP="${launcher} -n \$ncmd --multi-prog" + + nth_max=$((${npe_node_max} / ${npe_node_ocnanalrun})) + + export NTHREADS_OCNANAL=${nth_ocnanalrun:-${nth_max}} + [[ ${NTHREADS_OCNANAL} -gt ${nth_max} ]] && export NTHREADS_OCNANAL=${nth_max} + export APRUN_OCNANAL="${launcher} -n ${npe_ocnanalrun}" + elif [ $step = "anal" -o $step = "analcalc" ]; then export MKL_NUM_THREADS=4 diff --git a/env/ORION.env b/env/ORION.env index d8bc5fc664..9b2809e65d 100755 --- a/env/ORION.env +++ b/env/ORION.env @@ -86,6 +86,16 @@ elif [ $step = "aeroanlrun" ]; then [[ $NTHREADS_AEROANL -gt $nth_max ]] && export NTHREADS_AEROANL=$nth_max export APRUN_AEROANL="$launcher -n $npe_aeroanlrun" +elif [ $step = "ocnanalrun" ]; then + + export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}" + + nth_max=$((${npe_node_max} / ${npe_node_ocnanalrun})) + + export NTHREADS_OCNANAL=${nth_ocnanalrun:-${nth_max}} + [[ $NTHREADS_OCNANAL -gt ${nth_max} ]] && export NTHREADS_OCNANAL=${nth_max} + export APRUN_OCNANAL="${launcher} -n ${npe_aeroanlrun}" + elif [ $step = "anal" -o $step = "analcalc" ]; then export MKL_NUM_THREADS=4 diff --git a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_POST b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_POST new file mode 100755 index 0000000000..6b64e5ab8a --- /dev/null +++ b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_POST @@ -0,0 +1,23 @@ +#!/bin/bash +export STRICT="NO" +source "${HOMEgfs}/ush/preamble.sh" + +############################# +# Source relevant config files +############################# +export EXPDIR=${EXPDIR:-${HOMEgfs}/parm/config} +configs="base ocnanalpost" +config_path=${EXPDIR:-${PACKAGEROOT}/gfs.${gfs_ver}/parm/config} +for config in ${configs}; do + . "${config_path}"/config."${config}" + status=$? + [[ "${status}" -ne 0 ]] && exit "${status}" +done + +########################################## +# Remove the Temporary working directory +########################################## +cd "${DATAROOT}" || exit 1 +[[ ${KEEPDATA} = "NO" ]] && rm -rf "${DATA}" + +exit 0 diff --git a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP new file mode 100755 index 0000000000..bef08ee94f --- /dev/null +++ b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP @@ -0,0 +1,107 @@ +#!/bin/bash +export STRICT="NO" +source "${HOMEgfs}/ush/preamble.sh" + +############################# +# Source relevant config files +############################# +export EXPDIR=${EXPDIR:-${HOMEgfs}/parm/config} +configs="base ocnanal ocnanalprep" +config_path=${EXPDIR:-${PACKAGEROOT}/gfs.${gfs_ver}/parm/config} +for config in ${configs}; do + . "${config_path}"/config."${config}" + status=$? + [[ ${status} -ne 0 ]] && exit "${status}" +done + + +########################################## +# Source machine runtime environment +########################################## +. "${HOMEgfs}"/env/"${machine}".env ocnanalprep +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + + +############################################## +# Obtain unique process id (pid) and make temp directory +############################################## +export pid=${pid:-$$} +export outid=${outid:-"LL${job}"} + +export DATA=${DATA:-${DATAROOT}/${jobid:?}} +mkdir -p "${DATA}" +cd "${DATA}" || (echo "${DATA} does not exist. ABORT!"; exit 1) + + +############################################## +# Run setpdy and initialize PDY variables +############################################## +export cycle="t${cyc}z" +setpdy.sh +. ./PDY + + +############################################## +# Determine Job Output Name on System +############################################## +export pgmout="OUTPUT.${pid}" +export pgmerr=errfile + + +############################################## +# Set variables used in the script +############################################## +export CDATE=${CDATE:-${PDY}${cyc}} +export CDUMP=${CDUMP:-${RUN:-"gfs"}} +export COMPONENT=${COMPONENT:-ocean} + +############################################## +# Begin JOB SPECIFIC work +############################################## + +GDATE=$(date +%Y%m%d%H -d "${CDATE:0:8} ${CDATE:8:2} - ${assim_freq} hours") +export GDATE +gPDY=${GDATE:0:8} +export gcyc=${GDATE:8:2} +export GDUMP=${GDUMP:-"gdas"} + +export OPREFIX="${CDUMP}.t${cyc}z." +export GPREFIX="${GDUMP}.t${gcyc}z." +export APREFIX="${CDUMP}.t${cyc}z." +export GSUFFIX=${GSUFFIX:-${SUFFIX}} +export ASUFFIX=${ASUFFIX:-${SUFFIX}} + +export COMOUT=${COMOUT:-${ROTDIR}/${CDUMP}.${PDY}/${cyc}/${COMPONENT}} + +mkdir -p "${COMOUT}" + +# COMIN_GES and COMIN_GES_ENS are used in script +export COMIN_GES="${ROTDIR}/${GDUMP}.${gPDY}/${gcyc}/${COMPONENT}" + +############################################################### +# Run relevant script + +EXSCRIPT=${GDASPREPPY:-${HOMEgfs}/sorc/gdas.cd/scripts/exgdas_global_marine_analysis_prep.py} +${EXSCRIPT} +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd "${DATAROOT}" || exit 1 +[[ ${KEEPDATA} = "NO" ]] && rm -rf "${DATA}" + +exit 0 diff --git a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_RUN b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_RUN new file mode 100755 index 0000000000..7dba7cb003 --- /dev/null +++ b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_RUN @@ -0,0 +1,94 @@ +#!/bin/bash +export STRICT="NO" +source "${HOMEgfs}/ush/preamble.sh" + +############################# +# Source relevant config files +############################# +export EXPDIR=${EXPDIR:-${HOMEgfs}/parm/config} +configs="base ocnanal ocnanalrun" +config_path=${EXPDIR:-${PACKAGEROOT}/gfs.${gfs_ver}/parm/config} +for config in ${configs}; do + . "${config_path}"/config."${config}" + status=$? + [[ ${status} -ne 0 ]] && exit "${status}" +done + + +########################################## +# Source machine runtime environment +########################################## +. "${HOMEgfs}"/env/"${machine}".env ocnanalrun +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + + +############################################## +# Obtain unique process id (pid) and make temp directory +############################################## +export pid=${pid:-$$} +export outid=${outid:-"LL${job}"} + +export DATA=${DATA:-${DATAROOT}/${jobid:?}} +mkdir -p "${DATA}" +cd "${DATA}" || (echo "${DATA} does not exist. ABORT!"; exit 1) + + +############################################## +# Run setpdy and initialize PDY variables +############################################## +export cycle="t${cyc}z" +setpdy.sh +. ./PDY + + +############################################## +# Determine Job Output Name on System +############################################## +export pgmout="OUTPUT.${pid}" +export pgmerr=errfile + + +############################################## +# Set variables used in the script +############################################## + +export CDUMP=${CDUMP:-${RUN:-"gfs"}} +export COMPONENT=${COMPONENT:-ocean} + +############################################## +# Begin JOB SPECIFIC work +############################################## + +export COMOUT=${COMOUT:-${ROTDIR}/${CDUMP}.${PDY}/${cyc}/${COMPONENT}} + +# Prepare soca static dir + +ln -s "${COMOUT}"/analysis/* . + +############################################################### +# Run relevant script + +EXSCRIPT=${GDASPREPPY:-${HOMEgfs}/sorc/gdas.cd/scripts/exgdas_global_marine_analysis_run.sh} +${EXSCRIPT} +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd "${DATAROOT}" || exit 1 +[[ ${KEEPDATA} = "NO" ]] && rm -rf "${DATA}" + +exit 0 diff --git a/jobs/rocoto/ocnanalpost.sh b/jobs/rocoto/ocnanalpost.sh new file mode 100755 index 0000000000..a62a595e52 --- /dev/null +++ b/jobs/rocoto/ocnanalpost.sh @@ -0,0 +1,15 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}"/ush/preamble.sh + +############################################################### +# Source GDASApp modules +module purge +module use "${HOMEgfs}"/sorc/gdas.cd/modulefiles +module load GDAS/hera + +############################################################### +# Execute the JJOB +"${HOMEgfs}"/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_POST +status=$? +exit "${status}" diff --git a/jobs/rocoto/ocnanalprep.sh b/jobs/rocoto/ocnanalprep.sh new file mode 100755 index 0000000000..7621a9f950 --- /dev/null +++ b/jobs/rocoto/ocnanalprep.sh @@ -0,0 +1,15 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}"/ush/preamble.sh + +############################################################### +# Source GDASApp modules +module purge +module use "${HOMEgfs}"/sorc/gdas.cd/modulefiles +module load GDAS/hera + +############################################################### +# Execute the JJOB +"${HOMEgfs}"/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP +status=$? +exit "${status}" diff --git a/jobs/rocoto/ocnanalrun.sh b/jobs/rocoto/ocnanalrun.sh new file mode 100755 index 0000000000..f6f4b714e1 --- /dev/null +++ b/jobs/rocoto/ocnanalrun.sh @@ -0,0 +1,15 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}"/ush/preamble.sh + +############################################################### +# Source GDASApp modules +module purge +module use "${HOMEgfs}"/sorc/gdas.cd/modulefiles +module load GDAS/hera + +############################################################### +# Execute the JJOB +"${HOMEgfs}"/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_RUN +status=$? +exit "${status}" diff --git a/parm/config/config.base.emc.dyn b/parm/config/config.base.emc.dyn index b0a1408117..6082b8e34e 100755 --- a/parm/config/config.base.emc.dyn +++ b/parm/config/config.base.emc.dyn @@ -328,6 +328,7 @@ export imp_physics=@IMP_PHYSICS@ # DA engine export DO_JEDIVAR="NO" export DO_JEDIENS="NO" +export DO_JEDIOCNVAR="NO" # Hybrid related export DOHYBVAR="YES" diff --git a/parm/config/config.ocnanal b/parm/config/config.ocnanal new file mode 100644 index 0000000000..ed032ee30c --- /dev/null +++ b/parm/config/config.ocnanal @@ -0,0 +1,23 @@ +#!/bin/bash -x + +########## config.ocnanal ########## +# configuration common to all atm analysis tasks + +echo "BEGIN: config.ocnanal" + +export OBS_YAML_DIR=${HOMEgfs}/sorc/gdas.cd/parm/soca/obs/config +export OBS_YAML=${HOMEgfs}/sorc/gdas.cd/parm/soca/obs/obs_list.yaml +export OBS_LIST=${OBS_YAML_DIR}/obs_list.yaml +export FV3JEDI_STAGE_YAML=${HOMEgfs}/sorc/gdas.cd/test/soca/testinput/dumy.yaml +export SOCA_INPUT_FIX_DIR=/scratch2/NCEPDEV/ocean/Guillaume.Vernieres/data/static/72x35x25/soca # TODO: Should be moved somewhere else +export SOCA_VARS=tocn,socn,ssh +export SOCA_NINNER=50 +export CASE_ANL="C48" +export DOMAIN_STACK_SIZE=2000000 +export JEDI_BIN=${HOMEgfs}/sorc/gdas.cd/build/bin +export R2D2_OBS_DB=shared +export R2D2_OBS_DUMP=s2s_v1 +export R2D2_OBS_SRC=gdas_marine +export R2D2_OBS_WINDOW=24 # TODO: Check if the R2D2 sampling DB window is still needed +export COMIN_OBS=/scratch2/NCEPDEV/marineda/r2d2 +echo "END: config.ocnanal" diff --git a/parm/config/config.ocnanalpost b/parm/config/config.ocnanalpost new file mode 100644 index 0000000000..0d4a1a519a --- /dev/null +++ b/parm/config/config.ocnanalpost @@ -0,0 +1,10 @@ +#!/bin/bash -x + +########## config.ocnanalpost ########## +# Post Ocn Analysis specific + +echo "BEGIN: config.ocnanalpost" + +# Get task specific resources +. "${EXPDIR}"/config.resources ocnanalpost +echo "END: config.ocnanalpost" diff --git a/parm/config/config.ocnanalprep b/parm/config/config.ocnanalprep new file mode 100644 index 0000000000..b6831fad8b --- /dev/null +++ b/parm/config/config.ocnanalprep @@ -0,0 +1,10 @@ +#!/bin/bash -x + +########## config.ocnanalprep ########## +# Pre Ocn Analysis specific + +echo "BEGIN: config.ocnanalprep" + +# Get task specific resources +. "${EXPDIR}"/config.resources ocnanalprep +echo "END: config.ocnanalprep" diff --git a/parm/config/config.ocnanalrun b/parm/config/config.ocnanalrun new file mode 100644 index 0000000000..9b482a5c67 --- /dev/null +++ b/parm/config/config.ocnanalrun @@ -0,0 +1,11 @@ +#!/bin/bash -x + +########## config.ocnanalrun ########## +# Ocn Analysis specific + +echo "BEGIN: config.ocnanalrun" + +# Get task specific resources +. "${EXPDIR}"/config.resources ocnanalrun + +echo "END: config.ocnanalrun" diff --git a/parm/config/config.resources b/parm/config/config.resources index bee8a83d46..cdec42bc86 100755 --- a/parm/config/config.resources +++ b/parm/config/config.resources @@ -156,77 +156,128 @@ elif [ ${step} = "waveawipsgridded" ]; then export NTASKS=${npe_waveawipsgridded} export memory_waveawipsgridded_gfs="1GB" -elif [ ${step} = "atmanalprep" ]; then +elif [[ "${step}" = "atmanalprep" ]]; then export wtime_atmanalprep="00:10:00" export npe_atmanalprep=1 export nth_atmanalprep=1 - export npe_node_atmanalprep=$(echo "${npe_node_max} / ${nth_atmanalprep}" | bc) + npe_node_atmanalprep=$(echo "${npe_node_max} / ${nth_atmanalprep}" | bc) + export npe_node_atmanalprep export memory_atmanalprep="3072M" -elif [ ${step} = "atmanalrun" ]; then +elif [[ "${step}" = "atmanalrun" ]]; then # make below case dependent later export layout_x=1 export layout_y=1 export wtime_atmanalrun="00:30:00" - export npe_atmanalrun=$(echo "${layout_x} * ${layout_y} * 6" | bc) - export npe_atmanalrun_gfs=$(echo "${layout_x} * ${layout_y} * 6" | bc) + npe_atmanalrun=$(echo "${layout_x} * ${layout_y} * 6" | bc) + export npe_atmanalrun + npe_atmanalrun_gfs=$(echo "${layout_x} * ${layout_y} * 6" | bc) + export npe_atmanalrun_gfs export nth_atmanalrun=1 export nth_atmanalrun_gfs=${nth_atmanalrun} - export npe_node_atmanalrun=$(echo "${npe_node_max} / ${nth_atmanalrun}" | bc) + npe_node_atmanalrun=$(echo "${npe_node_max} / ${nth_atmanalrun}" | bc) + export npe_node_atmanalrun export is_exclusive=True -elif [ ${step} = "atmanalpost" ]; then +elif [[ "${step}" = "atmanalpost" ]]; then export wtime_atmanalpost="00:30:00" export npe_atmanalpost=${npe_node_max} export nth_atmanalpost=1 - export npe_node_atmanalpost=$(echo "${npe_node_max} / ${nth_atmanalpost}" | bc) + npe_node_atmanalpost=$(echo "${npe_node_max} / ${nth_atmanalpost}" | bc) + export npe_node_atmanalpost export is_exclusive=True -elif [ ${step} = "aeroanlinit" ]; then +elif [[ "${step}" = "aeroanlinit" ]]; then export wtime_aeroanlinit="00:10:00" export npe_aeroanlinit=1 export nth_aeroanlinit=1 - export npe_node_aeroanlinit=$(echo "${npe_node_max} / ${nth_aeroanlinit}" | bc) + npe_node_aeroanlinit=$(echo "${npe_node_max} / ${nth_aeroanlinit}" | bc) + export npe_node_aeroanlinit export memory_aeroanlinit="3072M" -elif [ ${step} = "aeroanlrun" ]; then +elif [[ "${step}" = "aeroanlrun" ]]; then case ${CASE} in - C768) + C768) layout_x=6 layout_y=6 ;; - C384) + C384) layout_x=5 layout_y=5 ;; - C192 | C96 | C48) + C192 | C96 | C48) layout_x=3 layout_y=3 ;; + *) + echo "FATAL: Resolution not supported'" + exit 1 esac export wtime_aeroanlrun="00:30:00" - export npe_aeroanlrun=$(echo "${layout_x} * ${layout_y} * 6" | bc) - export npe_aeroanlrun_gfs=$(echo "${layout_x} * ${layout_y} * 6" | bc) + npe_aeroanlrun=$(echo "${layout_x} * ${layout_y} * 6" | bc) + export npe_aeroanlrun + npe_aeroanlrun_gfs=$(echo "${layout_x} * ${layout_y} * 6" | bc) + export npe_aeroanlrun_gfs export nth_aeroanlrun=1 export nth_aeroanlrun_gfs=1 - export npe_node_aeroanlrun=$(echo "${npe_node_max} / ${nth_aeroanlrun}" | bc) + npe_node_aeroanlrun=$(echo "${npe_node_max} / ${nth_aeroanlrun}" | bc) + export npe_node_aeroanlrun export is_exclusive=True -elif [ ${step} = "aeroanlfinal" ]; then +elif [[ "${step}" = "aeroanlfinal" ]]; then export wtime_aeroanlfinal="00:10:00" export npe_aeroanlfinal=1 export nth_aeroanlfinal=1 - export npe_node_aeroanlfinal=$(echo "${npe_node_max} / ${nth_aeroanlfinal}" | bc) + npe_node_aeroanlfinal=$(echo "${npe_node_max} / ${nth_aeroanlfinal}" | bc) + export npe_node_aeroanlfinal export memory_aeroanlfinal="3072M" +elif [[ "${step}" = "ocnanalprep" ]]; then + + export wtime_ocnanalprep="00:10:00" + export npe_ocnanalprep=1 + export nth_ocnanalprep=1 + npe_node_ocnanalprep=$(echo "${npe_node_max} / ${nth_ocnanalprep}" | bc) + export npe_node_ocnanalprep + export memory_ocnanalprep="3072M" + +elif [[ "${step}" = "ocnanalrun" ]]; then + npes=16 + case ${CASE} in + C384) + npes=480 + ;; + C48) + npes=16 + ;; + *) + echo "FATAL: Resolution not supported'" + exit 1 + esac + + export wtime_ocnanalrun="00:30:00" + export npe_ocnanalrun=${npes} + export nth_ocnanalrun=1 + export native_ocnanalrun="--exclusive" + npe_node_ocnanalrun=$(echo "${npe_node_max} / ${nth_ocnanalrun}" | bc) + export npe_node_ocnanalrun + +elif [[ "${step}" = "ocnanalpost" ]]; then + + export wtime_ocnanalpost="00:30:00" + export npe_ocnanalpost=${npe_node_max} + export nth_ocnanalpost=1 + npe_node_ocnanalpost=$(echo "${npe_node_max} / ${nth_ocnanalpost}" | bc) + export npe_node_ocnanalpost + elif [ ${step} = "anal" ]; then export wtime_anal="00:50:00" diff --git a/sorc/link_workflow.sh b/sorc/link_workflow.sh index 36dd448cb9..c43fc4e609 100755 --- a/sorc/link_workflow.sh +++ b/sorc/link_workflow.sh @@ -27,7 +27,7 @@ OPTIND=1 while getopts ":ho" option; do case "${option}" in h) usage ;; - o) + o) echo "-o option received, configuring for NCO" RUN_ENVIR="nco";; :) @@ -295,10 +295,43 @@ fi # GDASApp if [[ -d "${script_dir}/gdas.cd" ]]; then - for gdasexe in fv3jedi_addincrement.x fv3jedi_diffstates.x fv3jedi_ensvariance.x fv3jedi_hofx.x \ - fv3jedi_var.x fv3jedi_convertincrement.x fv3jedi_dirac.x fv3jedi_error_covariance_training.x \ - fv3jedi_letkf.x fv3jedi_convertstate.x fv3jedi_eda.x fv3jedi_forecast.x fv3jedi_plot_field.x \ - fv3jedi_data_checker.py fv3jedi_enshofx.x fv3jedi_hofx_nomodel.x fv3jedi_testdata_downloader.py; do + declare -a JEDI_EXE=("fv3jedi_addincrement.x" \ + "fv3jedi_diffstates.x" \ + "fv3jedi_ensvariance.x" \ + "fv3jedi_hofx.x" \ + "fv3jedi_var.x" \ + "fv3jedi_convertincrement.x" \ + "fv3jedi_dirac.x" \ + "fv3jedi_error_covariance_training.x" \ + "fv3jedi_letkf.x" \ + "fv3jedi_convertstate.x" \ + "fv3jedi_eda.x" \ + "fv3jedi_forecast.x" \ + "fv3jedi_plot_field.x" \ + "fv3jedi_data_checker.py" \ + "fv3jedi_enshofx.x" \ + "fv3jedi_hofx_nomodel.x" \ + "fv3jedi_testdata_downloader.py" ) + JEDI_EXE+=("soca_addincrement.x" \ + "soca_enspert.x" \ + "soca_hofx.x" \ + "soca_ensrecenter.x" \ + "soca_convertincrement.x" \ + "soca_ensvariance.x" \ + "soca_letkf.x" \ + "soca_convertstate.x" \ + "soca_error_covariance_training.x" \ + "soca_setcorscales.x" \ + "soca_diffstates.x" \ + "soca_forecast.x" \ + "soca_sqrtvertloc.x" \ + "soca_dirac.x" \ + "soca_gridgen.x" \ + "soca_staticbinit.x" \ + "soca_enshofx.x" \ + "soca_hofx3d.x" \ + "soca_var.x") + for gdasexe in "${JEDI_EXE[@]}"; do [[ -s "${gdasexe}" ]] && rm -f "${gdasexe}" ${LINK} "${script_dir}/gdas.cd/build/bin/${gdasexe}" . done @@ -434,4 +467,3 @@ fi echo "${BASH_SOURCE[0]} completed successfully" exit 0 - diff --git a/workflow/applications.py b/workflow/applications.py index 5622b6ff70..82d8722bc7 100644 --- a/workflow/applications.py +++ b/workflow/applications.py @@ -108,6 +108,7 @@ def __init__(self, configuration: Configuration) -> None: self.do_metp = _base.get('DO_METP', False) self.do_jedivar = _base.get('DO_JEDIVAR', False) self.do_jediens = _base.get('DO_JEDIENS', False) + self.do_jediocnvar = _base.get('DO_JEDIOCNVAR', False) self.do_hpssarch = _base.get('HPSSARCH', False) diff --git a/workflow/rocoto/workflow_tasks.py b/workflow/rocoto/workflow_tasks.py index 95791c9ff7..9d9780d626 100644 --- a/workflow/rocoto/workflow_tasks.py +++ b/workflow/rocoto/workflow_tasks.py @@ -13,6 +13,7 @@ class Tasks: VALID_TASKS = ['aerosol_init', 'coupled_ic', 'getic', 'init', 'prep', 'anal', 'sfcanl', 'analcalc', 'analdiag', 'gldas', 'arch', 'atmanalprep', 'atmanalrun', 'atmanalpost', + 'ocnanalprep', 'ocnanalrun', 'ocnanalpost', 'earc', 'ecen', 'echgres', 'ediag', 'efcs', 'eobs', 'eomg', 'epos', 'esfc', 'eupd', 'atmensanalprep', 'atmensanalrun', 'atmensanalpost', @@ -494,6 +495,60 @@ def aeroanlfinal(self): return task + def ocnanalprep(self): + + suffix = self._base["SUFFIX"] + dump_suffix = self._base["DUMP_SUFFIX"] + dmpdir = self._base["DMPDIR"] + + deps = [] + data = f'&ROTDIR;/gdas.@Y@m@d/@H/ocean/gdas.t@Hz.ocnf009{suffix}' + dep_dict = {'type': 'data', 'data': data, 'offset': '-06:00:00'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + cycledef = self.cdump + resources = self.get_resource('ocnanalprep') + task = create_wf_task('ocnanalprep', + resources, + cdump=self.cdump, + envar=self.envars, + dependency=dependencies, + cycledef=cycledef) + + return task + + def ocnanalrun(self): + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}ocnanalprep'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('ocnanalrun') + task = create_wf_task('ocnanalrun', + resources, + cdump=self.cdump, + envar=self.envars, + dependency=dependencies) + + return task + + def ocnanalpost(self): + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}ocnanalrun'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('ocnanalpost') + task = create_wf_task('ocnanalpost', + resources, + cdump=self.cdump, + envar=self.envars, + dependency=dependencies) + + return task def gldas(self): deps = [] @@ -578,6 +633,11 @@ def _fcst_cycled(self): dep = rocoto.add_dependency(dep_dict) dependencies = rocoto.create_dependency(dep=dep) + if self.app_config.do_jediocnvar: + dep_dict = {'type': 'task', 'name': f'{self.cdump}ocnanalrun'} + dep = rocoto.add_dependency(dep_dict) + dependencies = rocoto.create_dependency(dep=dep) + if self.app_config.do_gldas and self.cdump in ['gdas']: dep_dict = {'type': 'task', 'name': f'{self.cdump}gldas'} dependencies.append(rocoto.add_dependency(dep_dict)) From 79abe638887cc6959de585375cbd3bef9d227806 Mon Sep 17 00:00:00 2001 From: Guillaume Vernieres Date: Mon, 28 Nov 2022 13:23:30 -0500 Subject: [PATCH 2/8] Update workflow/rocoto/workflow_tasks.py Co-authored-by: Rahul Mahajan --- workflow/rocoto/workflow_tasks.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/workflow/rocoto/workflow_tasks.py b/workflow/rocoto/workflow_tasks.py index 9d9780d626..e995f87860 100644 --- a/workflow/rocoto/workflow_tasks.py +++ b/workflow/rocoto/workflow_tasks.py @@ -513,8 +513,7 @@ def ocnanalprep(self): resources, cdump=self.cdump, envar=self.envars, - dependency=dependencies, - cycledef=cycledef) + dependency=dependencies) return task From 6e0a88fb186135644249cda027ce6892498734ac Mon Sep 17 00:00:00 2001 From: Guillaume Vernieres Date: Mon, 28 Nov 2022 13:23:44 -0500 Subject: [PATCH 3/8] Update workflow/rocoto/workflow_tasks.py Co-authored-by: Rahul Mahajan --- workflow/rocoto/workflow_tasks.py | 1 - 1 file changed, 1 deletion(-) diff --git a/workflow/rocoto/workflow_tasks.py b/workflow/rocoto/workflow_tasks.py index e995f87860..eda2859a41 100644 --- a/workflow/rocoto/workflow_tasks.py +++ b/workflow/rocoto/workflow_tasks.py @@ -507,7 +507,6 @@ def ocnanalprep(self): deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) - cycledef = self.cdump resources = self.get_resource('ocnanalprep') task = create_wf_task('ocnanalprep', resources, From 56a6a70b105568205300458319e81592fddc8513 Mon Sep 17 00:00:00 2001 From: Guillaume Vernieres Date: Mon, 28 Nov 2022 13:30:50 -0500 Subject: [PATCH 4/8] addressed reviewer's comments --- jobs/rocoto/ocnanalpost.sh | 3 ++- jobs/rocoto/ocnanalprep.sh | 3 ++- jobs/rocoto/ocnanalrun.sh | 3 ++- parm/config/config.ocnanal | 4 +++- sorc/link_workflow.sh | 15 +-------------- 5 files changed, 10 insertions(+), 18 deletions(-) diff --git a/jobs/rocoto/ocnanalpost.sh b/jobs/rocoto/ocnanalpost.sh index a62a595e52..969480445d 100755 --- a/jobs/rocoto/ocnanalpost.sh +++ b/jobs/rocoto/ocnanalpost.sh @@ -4,9 +4,10 @@ source "${HOMEgfs}"/ush/preamble.sh ############################################################### # Source GDASApp modules +declare -l hpc=${machine} module purge module use "${HOMEgfs}"/sorc/gdas.cd/modulefiles -module load GDAS/hera +module load GDAS/${hpc} ############################################################### # Execute the JJOB diff --git a/jobs/rocoto/ocnanalprep.sh b/jobs/rocoto/ocnanalprep.sh index 7621a9f950..1eabc9220e 100755 --- a/jobs/rocoto/ocnanalprep.sh +++ b/jobs/rocoto/ocnanalprep.sh @@ -4,9 +4,10 @@ source "${HOMEgfs}"/ush/preamble.sh ############################################################### # Source GDASApp modules +declare -l hpc=${machine} module purge module use "${HOMEgfs}"/sorc/gdas.cd/modulefiles -module load GDAS/hera +module load GDAS/${hpc} ############################################################### # Execute the JJOB diff --git a/jobs/rocoto/ocnanalrun.sh b/jobs/rocoto/ocnanalrun.sh index f6f4b714e1..0e83d487be 100755 --- a/jobs/rocoto/ocnanalrun.sh +++ b/jobs/rocoto/ocnanalrun.sh @@ -4,9 +4,10 @@ source "${HOMEgfs}"/ush/preamble.sh ############################################################### # Source GDASApp modules +declare -l hpc=${machine} module purge module use "${HOMEgfs}"/sorc/gdas.cd/modulefiles -module load GDAS/hera +module load GDAS/${hpc} ############################################################### # Execute the JJOB diff --git a/parm/config/config.ocnanal b/parm/config/config.ocnanal index ed032ee30c..385db2dc86 100644 --- a/parm/config/config.ocnanal +++ b/parm/config/config.ocnanal @@ -1,4 +1,4 @@ -#!/bin/bash -x +#!/bin/bash ########## config.ocnanal ########## # configuration common to all atm analysis tasks @@ -15,6 +15,8 @@ export SOCA_NINNER=50 export CASE_ANL="C48" export DOMAIN_STACK_SIZE=2000000 export JEDI_BIN=${HOMEgfs}/sorc/gdas.cd/build/bin + +# TODO: Move the R2D2 configuration to a common space export R2D2_OBS_DB=shared export R2D2_OBS_DUMP=s2s_v1 export R2D2_OBS_SRC=gdas_marine diff --git a/sorc/link_workflow.sh b/sorc/link_workflow.sh index c43fc4e609..a169cf09ef 100755 --- a/sorc/link_workflow.sh +++ b/sorc/link_workflow.sh @@ -312,24 +312,11 @@ if [[ -d "${script_dir}/gdas.cd" ]]; then "fv3jedi_enshofx.x" \ "fv3jedi_hofx_nomodel.x" \ "fv3jedi_testdata_downloader.py" ) - JEDI_EXE+=("soca_addincrement.x" \ - "soca_enspert.x" \ - "soca_hofx.x" \ - "soca_ensrecenter.x" \ + JEDI_EXE+=( "soca_convertincrement.x" \ - "soca_ensvariance.x" \ - "soca_letkf.x" \ - "soca_convertstate.x" \ "soca_error_covariance_training.x" \ "soca_setcorscales.x" \ - "soca_diffstates.x" \ - "soca_forecast.x" \ - "soca_sqrtvertloc.x" \ - "soca_dirac.x" \ "soca_gridgen.x" \ - "soca_staticbinit.x" \ - "soca_enshofx.x" \ - "soca_hofx3d.x" \ "soca_var.x") for gdasexe in "${JEDI_EXE[@]}"; do [[ -s "${gdasexe}" ]] && rm -f "${gdasexe}" From 6094916cf64651d2a16edf95a522ad30128cb2f0 Mon Sep 17 00:00:00 2001 From: Guillaume Vernieres Date: Mon, 28 Nov 2022 13:34:45 -0500 Subject: [PATCH 5/8] cn --- jobs/rocoto/ocnanalpost.sh | 2 +- jobs/rocoto/ocnanalprep.sh | 2 +- jobs/rocoto/ocnanalrun.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/jobs/rocoto/ocnanalpost.sh b/jobs/rocoto/ocnanalpost.sh index 969480445d..92c3de0f8b 100755 --- a/jobs/rocoto/ocnanalpost.sh +++ b/jobs/rocoto/ocnanalpost.sh @@ -7,7 +7,7 @@ source "${HOMEgfs}"/ush/preamble.sh declare -l hpc=${machine} module purge module use "${HOMEgfs}"/sorc/gdas.cd/modulefiles -module load GDAS/${hpc} +module load GDAS/"${hpc}" ############################################################### # Execute the JJOB diff --git a/jobs/rocoto/ocnanalprep.sh b/jobs/rocoto/ocnanalprep.sh index 1eabc9220e..b8ac7c6d6b 100755 --- a/jobs/rocoto/ocnanalprep.sh +++ b/jobs/rocoto/ocnanalprep.sh @@ -7,7 +7,7 @@ source "${HOMEgfs}"/ush/preamble.sh declare -l hpc=${machine} module purge module use "${HOMEgfs}"/sorc/gdas.cd/modulefiles -module load GDAS/${hpc} +module load GDAS/"${hpc}" ############################################################### # Execute the JJOB diff --git a/jobs/rocoto/ocnanalrun.sh b/jobs/rocoto/ocnanalrun.sh index 0e83d487be..93d4266668 100755 --- a/jobs/rocoto/ocnanalrun.sh +++ b/jobs/rocoto/ocnanalrun.sh @@ -7,7 +7,7 @@ source "${HOMEgfs}"/ush/preamble.sh declare -l hpc=${machine} module purge module use "${HOMEgfs}"/sorc/gdas.cd/modulefiles -module load GDAS/${hpc} +module load GDAS/"${hpc}" ############################################################### # Execute the JJOB From dc01e4fef0c5bfd8a29c11dc51511b4909bfe41d Mon Sep 17 00:00:00 2001 From: Guillaume Vernieres Date: Tue, 29 Nov 2022 11:20:48 -0500 Subject: [PATCH 6/8] prep/run in same scratch --- jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP | 2 +- jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_RUN | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP index bef08ee94f..1cd9cf0315 100755 --- a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP +++ b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP @@ -29,7 +29,7 @@ status=$? export pid=${pid:-$$} export outid=${outid:-"LL${job}"} -export DATA=${DATA:-${DATAROOT}/${jobid:?}} +export DATA=${DATA:-${DATAROOT}/ocnanal_${CDATE}} mkdir -p "${DATA}" cd "${DATA}" || (echo "${DATA} does not exist. ABORT!"; exit 1) diff --git a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_RUN b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_RUN index 7dba7cb003..374d889ee6 100755 --- a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_RUN +++ b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_RUN @@ -29,7 +29,7 @@ status=$? export pid=${pid:-$$} export outid=${outid:-"LL${job}"} -export DATA=${DATA:-${DATAROOT}/${jobid:?}} +export DATA=${DATA:-${DATAROOT}/ocnanal_${CDATE}} mkdir -p "${DATA}" cd "${DATA}" || (echo "${DATA} does not exist. ABORT!"; exit 1) @@ -62,10 +62,6 @@ export COMPONENT=${COMPONENT:-ocean} export COMOUT=${COMOUT:-${ROTDIR}/${CDUMP}.${PDY}/${cyc}/${COMPONENT}} -# Prepare soca static dir - -ln -s "${COMOUT}"/analysis/* . - ############################################################### # Run relevant script From 8458a39e1cb5e4df4b7753f9a9157e4a85812fa7 Mon Sep 17 00:00:00 2001 From: Guillaume Vernieres Date: Tue, 29 Nov 2022 11:58:02 -0500 Subject: [PATCH 7/8] keep DATA for run step --- jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP | 6 ------ 1 file changed, 6 deletions(-) diff --git a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP index 1cd9cf0315..9ba0a96ae5 100755 --- a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP +++ b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP @@ -98,10 +98,4 @@ if [[ -e "${pgmout}" ]] ; then cat "${pgmout}" fi -########################################## -# Remove the Temporary working directory -########################################## -cd "${DATAROOT}" || exit 1 -[[ ${KEEPDATA} = "NO" ]] && rm -rf "${DATA}" - exit 0 From 95adc6e201d4ee796d4803394617f55d2a99830c Mon Sep 17 00:00:00 2001 From: Guillaume Vernieres Date: Mon, 5 Dec 2022 19:23:23 -0500 Subject: [PATCH 8/8] tidy code according to rev comments --- env/HERA.env | 4 ++-- env/ORION.env | 4 ++-- jobs/rocoto/ocnanalpost.sh | 7 +++---- jobs/rocoto/ocnanalprep.sh | 7 +++---- jobs/rocoto/ocnanalrun.sh | 7 +++---- parm/config/config.ocnanalpost | 4 ++-- parm/config/config.ocnanalprep | 4 ++-- parm/config/config.ocnanalrun | 4 ++-- sorc/link_workflow.sh | 13 ++++++------- 9 files changed, 25 insertions(+), 29 deletions(-) diff --git a/env/HERA.env b/env/HERA.env index 59312d506f..4b3f6b8a77 100755 --- a/env/HERA.env +++ b/env/HERA.env @@ -87,11 +87,11 @@ elif [[ "${step}" = "aeroanlrun" ]]; then [[ ${NTHREADS_AEROANL} -gt ${nth_max} ]] && export NTHREADS_AEROANL=${nth_max} export APRUN_AEROANL="${launcher} -n ${npe_aeroanlrun}" -elif [ $step = "ocnanalrun" ]; then +elif [ ${step} = "ocnanalrun" ]; then export APRUNCFP="${launcher} -n \$ncmd --multi-prog" - nth_max=$((${npe_node_max} / ${npe_node_ocnanalrun})) + nth_max=$((npe_node_max / npe_node_ocnanalrun)) export NTHREADS_OCNANAL=${nth_ocnanalrun:-${nth_max}} [[ ${NTHREADS_OCNANAL} -gt ${nth_max} ]] && export NTHREADS_OCNANAL=${nth_max} diff --git a/env/ORION.env b/env/ORION.env index 77906e0e1f..11338dd4d5 100755 --- a/env/ORION.env +++ b/env/ORION.env @@ -86,11 +86,11 @@ elif [[ "${step}" = "aeroanlrun" ]]; then [[ ${NTHREADS_AEROANL} -gt ${nth_max} ]] && export NTHREADS_AEROANL=${nth_max} export APRUN_AEROANL="${launcher} -n ${npe_aeroanlrun}" -elif [ $step = "ocnanalrun" ]; then +elif [ ${step} = "ocnanalrun" ]; then export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}" - nth_max=$((${npe_node_max} / ${npe_node_ocnanalrun})) + nth_max=$((npe_node_max / npe_node_ocnanalrun)) export NTHREADS_OCNANAL=${nth_ocnanalrun:-${nth_max}} [[ $NTHREADS_OCNANAL -gt ${nth_max} ]] && export NTHREADS_OCNANAL=${nth_max} diff --git a/jobs/rocoto/ocnanalpost.sh b/jobs/rocoto/ocnanalpost.sh index 92c3de0f8b..bad01c93f2 100755 --- a/jobs/rocoto/ocnanalpost.sh +++ b/jobs/rocoto/ocnanalpost.sh @@ -1,13 +1,12 @@ #! /usr/bin/env bash -source "${HOMEgfs}"/ush/preamble.sh +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source GDASApp modules -declare -l hpc=${machine} module purge -module use "${HOMEgfs}"/sorc/gdas.cd/modulefiles -module load GDAS/"${hpc}" +module use "${HOMEgfs}/sorc/gdas.cd/modulefiles" +module load GDAS/"${machine,,}" ############################################################### # Execute the JJOB diff --git a/jobs/rocoto/ocnanalprep.sh b/jobs/rocoto/ocnanalprep.sh index b8ac7c6d6b..7cf14a66ce 100755 --- a/jobs/rocoto/ocnanalprep.sh +++ b/jobs/rocoto/ocnanalprep.sh @@ -1,13 +1,12 @@ #! /usr/bin/env bash -source "${HOMEgfs}"/ush/preamble.sh +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source GDASApp modules -declare -l hpc=${machine} module purge -module use "${HOMEgfs}"/sorc/gdas.cd/modulefiles -module load GDAS/"${hpc}" +module use "${HOMEgfs}/sorc/gdas.cd/modulefiles" +module load "GDAS/${machine,,}" ############################################################### # Execute the JJOB diff --git a/jobs/rocoto/ocnanalrun.sh b/jobs/rocoto/ocnanalrun.sh index 93d4266668..460169a55f 100755 --- a/jobs/rocoto/ocnanalrun.sh +++ b/jobs/rocoto/ocnanalrun.sh @@ -1,13 +1,12 @@ #! /usr/bin/env bash -source "${HOMEgfs}"/ush/preamble.sh +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source GDASApp modules -declare -l hpc=${machine} module purge -module use "${HOMEgfs}"/sorc/gdas.cd/modulefiles -module load GDAS/"${hpc}" +module use "${HOMEgfs}/sorc/gdas.cd/modulefiles" +module load GDAS/"${machine,,}" ############################################################### # Execute the JJOB diff --git a/parm/config/config.ocnanalpost b/parm/config/config.ocnanalpost index 0d4a1a519a..a67f07de22 100644 --- a/parm/config/config.ocnanalpost +++ b/parm/config/config.ocnanalpost @@ -1,4 +1,4 @@ -#!/bin/bash -x +#!/bin/bash ########## config.ocnanalpost ########## # Post Ocn Analysis specific @@ -6,5 +6,5 @@ echo "BEGIN: config.ocnanalpost" # Get task specific resources -. "${EXPDIR}"/config.resources ocnanalpost +. "${EXPDIR}/config.resources ocnanalpost" echo "END: config.ocnanalpost" diff --git a/parm/config/config.ocnanalprep b/parm/config/config.ocnanalprep index b6831fad8b..66b41463a8 100644 --- a/parm/config/config.ocnanalprep +++ b/parm/config/config.ocnanalprep @@ -1,4 +1,4 @@ -#!/bin/bash -x +#!/bin/bash ########## config.ocnanalprep ########## # Pre Ocn Analysis specific @@ -6,5 +6,5 @@ echo "BEGIN: config.ocnanalprep" # Get task specific resources -. "${EXPDIR}"/config.resources ocnanalprep +. "${EXPDIR}/config.resources ocnanalprep" echo "END: config.ocnanalprep" diff --git a/parm/config/config.ocnanalrun b/parm/config/config.ocnanalrun index 9b482a5c67..a71c3066f6 100644 --- a/parm/config/config.ocnanalrun +++ b/parm/config/config.ocnanalrun @@ -1,4 +1,4 @@ -#!/bin/bash -x +#!/bin/bash ########## config.ocnanalrun ########## # Ocn Analysis specific @@ -6,6 +6,6 @@ echo "BEGIN: config.ocnanalrun" # Get task specific resources -. "${EXPDIR}"/config.resources ocnanalrun +. "${EXPDIR}/config.resources ocnanalrun" echo "END: config.ocnanalrun" diff --git a/sorc/link_workflow.sh b/sorc/link_workflow.sh index a169cf09ef..c885723c57 100755 --- a/sorc/link_workflow.sh +++ b/sorc/link_workflow.sh @@ -311,13 +311,12 @@ if [[ -d "${script_dir}/gdas.cd" ]]; then "fv3jedi_data_checker.py" \ "fv3jedi_enshofx.x" \ "fv3jedi_hofx_nomodel.x" \ - "fv3jedi_testdata_downloader.py" ) - JEDI_EXE+=( - "soca_convertincrement.x" \ - "soca_error_covariance_training.x" \ - "soca_setcorscales.x" \ - "soca_gridgen.x" \ - "soca_var.x") + "fv3jedi_testdata_downloader.py" \ + "soca_convertincrement.x" \ + "soca_error_covariance_training.x" \ + "soca_setcorscales.x" \ + "soca_gridgen.x" \ + "soca_var.x") for gdasexe in "${JEDI_EXE[@]}"; do [[ -s "${gdasexe}" ]] && rm -f "${gdasexe}" ${LINK} "${script_dir}/gdas.cd/build/bin/${gdasexe}" .