date
hostname
set -xe  # print commands as they are executed and enable signal trapping

export PS4='+ $SECONDS + '

# Variables needed for communication with ecFlow
export ECF_NAME=%ECF_NAME%
export ECF_HOST=%ECF_LOGHOST%
export ECF_PORT=%ECF_PORT%
export ECF_PASS=%ECF_PASS%
export ECF_TRYNO=%ECF_TRYNO%
export ECF_RID=${ECF_RID:-${PBS_JOBID:-$(hostname -s).$$}}
export ECF_JOB=%ECF_JOB%
export ECF_JOBOUT=%ECF_JOBOUT%
export ecflow_ver=%ecflow_ver%

if [ -d /apps/ops/prod ]; then # On WCOSS2
  set +x
  echo "Running 'module reset'"
  module reset
  set -x
fi

modelhome=%PACKAGEHOME:%
eval "export HOME${model:?'model undefined'}=$modelhome"
eval "versionfile=\$HOME${model}/versions/run.ver"
if [ -f "$versionfile" ]; then . $versionfile ; fi
modelver=$(echo ${modelhome} | perl -pe "s:.*?/${model}\.(v[\d\.a-z]+).*:\1:")
eval "export ${model}_ver=$modelver"

export envir=%ENVIR%
export MACHINE_SITE=%MACHINE_SITE%
export RUN_ENVIR=${RUN_ENVIR:-nco}
export SENDECF=${SENDECF:-YES}
export SENDCOM=${SENDCOM:-YES}
if [ -n "%PDY:%" ]; then export PDY=${PDY:-%PDY:%}; fi
if [ -n "%PARATEST:%" ]; then export PARATEST=${PARATEST:-%PARATEST:%}; fi
if [ -n "%COMPATH:%" ]; then export COMPATH=${COMPATH:-%COMPATH:%}; fi
if [ -n "%MAILTO:%" ]; then export MAILTO=${MAILTO:-%MAILTO:%}; fi
if [ -n "%DBNLOG:%" ]; then export DBNLOG=${DBNLOG:-%DBNLOG:%}; fi
export KEEPDATA=${KEEPDATA:-%KEEPDATA:NO%}
export SENDDBN=${SENDDBN:-%SENDDBN:YES%}
export SENDDBN_NTC=${SENDDBN_NTC:-%SENDDBN_NTC:YES%}

if [ -d /apps/ops/prod ]; then # On WCOSS2
  set +x
  if [ $(whoami) == ops.para ]; then
    module use -a /apps/ops/para/nco/modulefiles/core
  fi
  echo "Running module load ecflow/$ecflow_ver"
  module load ecflow/$ecflow_ver
  echo "ecflow module location: $(module display ecflow |& head -2 | tail -1 | sed 's/:$//')"
  set -x
  . ${ECF_ROOT}/versions/run.ver
  set +x
  module load prod_util/${prod_util_ver}
  module load prod_envir/${prod_envir_ver}
  echo "Listing modules from head.h:"
  module list
  set -x
fi

timeout 300 ecflow_client --init=${ECF_RID}

if [[ " ops.prod ops.para " =~ " $(whoami) " ]]; then
  POST_OUT=${POST_OUT:-/lfs/h1/ops/%ENVIR%/tmp/posts/ecflow_post_in.${ECF_RID}}
  echo 'export ECF_NAME=${ECF_NAME}' > $POST_OUT
  echo 'export ECF_HOST=${ECF_HOST}' >> $POST_OUT
  echo 'export ECF_PORT=${ECF_PORT}' >> $POST_OUT
  echo 'export ECF_PASS=${ECF_PASS}' >> $POST_OUT
  echo 'export ECF_TRYNO=${ECF_TRYNO}' >> $POST_OUT
  echo 'export ECF_RID=${ECF_RID}' >> $POST_OUT
fi

# Define error handler
ERROR() {
  set +ex
  if [ "$1" -eq 0 ]; then
     msg="Killed by signal (likely via qdel)"
  else
     msg="Killed by signal $1"
  fi
  ecflow_client --abort="$msg"
  echo $msg
  if [[ " ops.prod ops.para " =~ " $(whoami) " ]]; then
    echo "# Trap Caught" >>$POST_OUT
  fi
  trap $1; exit $1
}
# Trap all error and exit signals
trap 'ERROR $?' ERR EXIT