#!/bin/sh
################################################################################
####  UNIX Script Documentation Block
#                      .                                             .
# Script name:         global_enkfomg.sh
# Script description:  Compute global_enkf innovations
#
# Author:        Russ Treadonl      Org: NP23         Date: 2011-12-16
#
# Abstract: This script computes global_enkf innovations
#
# Script history log:
# 2011-12-16  Russ Treadon   based on GCWMB parallel script eomg.sh
#
# Usage:  exglobal_enkfomg.sh.sms SFCGESMEAN SIGGESMEAN
#
#   Input script positional parameters:
#     1             Input surface guess
#                   defaults to $SFCGESMEAN; required
#     2             Input sigma guess
#                   defaults to $SIGGESMEAN; required
#
#   Imported Shell Variables:
#     SFCGESMEAN    Input ensemble mean surface guess
#                   overridden by $1; required
#     SIGGESMEAN    Input ensemble mean sigma guess
#                   overridden by $2; required
#     SELECT_OBS    Tarball containing selected data
#                   defaults to ${COMIN}/${PREINP}obsinput
#     SFCANL        Output surface analysis
#                   defaults to ${COMOUT}/sfcanl
#     SFCG03        Surface guess valid at -03 hour
#                   defaults to ${COMOUT}/sfcf03
#     SFCG04        Surface guess valid at -04 hour
#                   defaults to ${COMOUT}/sfcf04
#     SFCG05        Surface guess valid at -05 hour
#                   defaults to ${COMOUT}/sfcf05
#     SFCG07        Surface guess valid at -07 hour
#                   defaults to ${COMOUT}/sfcf07
#     SFCG08        Surface guess valid at -08 hour
#                   defaults to ${COMOUT}/sfcf08
#     SFCG09        Surface guess valid at -09 hour
#                   defaults to ${COMOUT}/sfcf09
#     SIGG03        Sigma guess valid at -03 hour
#                   defaults to ${COMOUT}/sigf03
#     SIGG04        Sigma guess valid at -04 hour
#                   defaults to ${COMOUT}/sigf04
#     SIGG05        Sigma guess valid at -05 hour
#                   defaults to ${COMOUT}/sigf05
#     SIGG07        Sigma guess valid at -07 hour
#                   defaults to ${COMOUT}/sigf07
#     SIGG08        Sigma guess valid at -08 hour
#                   defaults to ${COMOUT}/sigf08
#     SIGG09        Sigma guess valid at -09 hour
#                   defaults to ${COMOUT}/sigf09
#     DOHYBVAR      flag (YES or N) for hybrid ensemble variational option
#                   defaults to NO
#     USE_NEWRADBC  Flag to use new radiance bias correction scheme (YES or NO)
#                   defaults to NO
#     RADSTAT       Output radiance assimilation statistics
#                   defaults to ${COMIN}/${PREINP}radstat
#     GSISTAT       Output gsi (obs-ges), qc, and iteration statistics
#                   defaults to ${COMIN}/${PREINP}gsistat
#     PCPSTAT       Output precipitation assimilation statistics
#                   defaults to ${COMIN}/${PREINP}pcpstat
#     CNVSTAT       Output conventional observation assimilation statistics
#                   defaults to ${COMIN}/${PREINP}cnvstat
#     OZNSTAT       Output ozone observation assimilation statistics
#                   defaults to ${COMIN}/${PREINP}oznstat
#     RUN_SELECT    Flag to only select data (YES or NO)
#                   defaults to NO
#     USE_SELECT    Flag to use selected data (YES or NO)
#                   defaults to NO
#     DIAG_SUFFIX   optional suffix for diagnostics files
#                   defaults to empty string
#     DIAG_COMPRESS flag to compress (YES) diagnostics files
#                   defaults to YES
#     DIAG_TARBALL flag to collect (YES) diagnostic files in tarballs
#                   defaults to YES
#     FIXGLOBAL     Directory for global fixed files
#                   defaults to /nwprod/fix
#     SCRGLOBAL     Directory for global scripts
#                   defaults to /nwprod/scripts
#     EXECGLOBAL    Directory for global executables
#                   defaults to /nwprod/exec
#     USHGLOBAL     Directory for global scripts
#                   defaults to /nwprod/ush
#     DATA          working directory
#                   (if nonexistent will be made, used and deleted)
#                   defaults to current working directory
#     COMIN         input directory
#                   defaults to current working directory
#     COMOUT        output directory
#                   (if nonexistent will be made)
#                   defaults to current working directory
#     XC            Suffix to add to executables
#                   defaults to none
#     PREINP        Prefix to add to input observation files
#                   defaults to none
#     SUFINP        Suffix to add to input observation files
#                   defaults to none
#     NCP           Copy command
#                   defaults to cp
#     SIGHDR        Command to read sigma header
#                   defaults to ${EXECGLOBAL}/global_sighdr$XC
#     SFCHDR        Command to read surface header
#                   defaults to ${EXECGLOBAL}/global_sfchdr$XC
#     CYCLEXEC      Surface cycle executable
#                   defaults to ${EXECGLOBAL}/global_cycle$XC
#     GSIEXEC       Spectral analysis executable
#                   defaults to ${EXECGLOBAL}/global_gsi$XC
#     CYCLESH       Surface cycle script
#                   defaults to ${USHGLOBAL}/global_cycle.sh
#     BERROR        Input background error file
#                   defaults to ${FIXGLOBAL}/global_berror.l${LEVS}y${NLAT_A}.sig.f77
#     SATANGL       Input satellite angle bias file
#                   defaults to ${FIXGLOBAL}/global_satangbias.txt
#     SATINFO       Input satellite information file
#                   defaults to ${FIXGLOBAL}/global_satinfo.txt
#     RTMFIX        Input directory containing sensor specific coefficients
#                   defaults to ${FIXGLOBAL}/crtm_2.0.5
#     RTMEMIS       Input satellite emissivity coefficients
#                   defaults to ${RTMFIX}/EmisCoeff/Big_Endian/EmisCoeff.bin
#     RTMAERO       Input radiative transfer model aerosol coefficients
#                   defaults to ${RTMFIX}/AerosolCoeff/Big_Endian/AerosolCoeff.bin
#     RTMCLDS       Input radiative transfer model cloud coefficients
#                   defaults to ${RTMFIX}/CloudCoeff/Big_Endian/CloudCoeff.bin
#     ANAVINFO      Input analysis variable file
#                   defaults to ${FIXGLOBAL}/global_anavinfo.l${LEVS}.txt
#     CONVINFO      Input conventional observation information file
#                   defaults to ${FIXGLOBAL}/global_convinfo.txt
#     OZINFO        Input ozone information file
#                   defaults to ${FIXGLOBAL}/global_ozone.txt
#     PCPINFO       Input precipitation information file
#                   defaults to ${FIXGLOBAL}/global_pcpinfo.txt
#     AEROINFO      Input aerosol information file
#                   defaults to ${FIXGLOBAL}/global_aeroinfo.txt
#     SCANINFO      Input satellite scan information file
#                   defaults to ${FIXGLOBAL}/global_scaninfo.txt
#     HYBENSINFO    Input hybrid ensemble localization information file
#                   defaults to ${FIXGLOBAL}/global_hybens_locinfo.l${LEVS}.txt
#                   defaults to ${COMIN}/${PREINP}syndata.tcvitals.tm00
#     INISCRIPT     Preprocessing script
#                   defaults to none
#     LOGSCRIPT     Log posting script
#                   defaults to none
#     ERRSCRIPT     Error processing script
#                   defaults to 'eval [[ $err = 0 ]]'
#     ENDSCRIPT     Postprocessing script
#                   defaults to none
#     JCAP_A        Spectral truncation for analysis
#                   defaults to the value in the input sigma file header
#     JCAP          Spectral truncation for background
#                   defaults to the value in the input sigma file header
#     LEVS          Number of levels
#     DELTIM        Timestep in seconds
#                   defaults to 3600/($JCAP_A/20)
#     CDATE         Current analysis date in yyyymmddhh format
#                   defaults to the value in the input surface file header
#     LATB          Number of latitudes in surface cycling
#                   defaults to the value in the input surface file header
#     LONB          Number of longitudes in surface cycling
#                   defaults to the value in the input surface file header
#     LSOIL         Number of soil layers
#                   defaults to 2
#     FSMCL2        Scale in days to relax to soil moisture climatology
#                   defaults to 60
#     DELTSFC       Cycling frequency in hours
#                   defaults to forecast hour of $SFCGESMEAN
#     LATA          Number of latitudes in spectral analysis
#                   defaults to $LATB
#     LONA          Number of longitudes in spectral analysis
#                   defaults to $LONB
#     CYCLVARS      Other namelist inputs to the cycle executable
#                   defaults to none set
#     NTHREADS      Number of threads
#                   defaults to 1
#     NTHSTACK      Size of stack per thread
#                   defaults to 1024000000
#     NTHREADS_GSI  Number of threads for GSIEXEC
#                   defaults to 1
#     NTHSTACK_GSI  Size of stack per thread for GSIEXEC
#                   defaults to 1024000000
#     FILESTYLE     File management style flag
#                   ('C' to copy to/from $DATA, 'L' for symbolic links in $DATA,
#                    'X' to use XLFUNIT or symbolic links where appropriate)
#                   defaults to 'X'
#     PGMOUT        Executable standard output
#                   defaults to $pgmout, then to '&1'
#     PGMERR        Executable standard error
#                   defaults to $pgmerr, then to '&1'
#     pgmout        Executable standard output default
#     pgmerr        Executable standard error default
#     REDOUT        standard output redirect ('1>' or '1>>')
#                   defaults to '1>', or to '1>>' to append if $PGMOUT is a file
#     REDERR        standard error redirect ('2>' or '2>>')
#                   defaults to '2>', or to '2>>' to append if $PGMERR is a file
#     VERBOSE       Verbose flag (YES or NO)
#                   defaults to NO
#
#   Exported Shell Variables:
#     PGM           Current program name
#     pgm
#     ERR           Last return code
#     err
#
#   Modules and files referenced:
#     scripts    : $INISCRIPT
#                  $LOGSCRIPT
#                  $ERRSCRIPT
#                  $ENDSCRIPT
#
#     programs   : $CYCLEXEC
#                  $GSIEXEC
#
#     fixed data : $BERROR
#                  $SATANGL
#                  $SATINFO
#                  $RTMFIX
#                  $RTMEMIS
#                  $RTMAERO
#                  $RTMCLDS
#                  $ANAVINFO
#                  $CONVINFO
#                  $OZINFO
#                  $PCPINFO
#                  $AEROINFO
#                  $SCANINFO
#                  $HYBENSINFO
#
#     input data : $SFCGESMEAN
#                  $SIGGESMEAN
#                  $SELECT_OBS
#                  $SFCG03
#                  $SFCG04
#                  $SFCG05
#                  $SFCG07
#                  $SFCG08
#                  $SFCG09
#                  $SIGG03
#                  $SIGG04
#                  $SIGG05
#                  $SIGG07
#                  $SIGG08
#                  $SIGG09
#                  $FNTSFA
#                  $FNACNA
#                  $FNSNOA
#
#     output data: $SFCANL
#                  $RADSTAT
#                  $GSISTAT
#                  $PCPSTAT
#                  $CNVSTAT
#                  $OZNSTAT
#                  $PGMOUT
#                  $PGMERR
#
# Remarks:
#
#   Condition codes
#      0 - no problem encountered
#     >0 - some problem encountered
#
#  Control variable resolution priority
#    1 Command line argument.
#    2 Environment variable.
#    3 Inline default.
#
# Attributes:
#   Language: POSIX shell
#   Machine: IBM SP
#
################################################################################
#  Set environment.
export VERBOSE=${VERBOSE:-"NO"}
if [[ "$VERBOSE" = "YES" ]]
then
   echo $(date) EXECUTING $0 $* >&2
   set -x
fi
#  Command line arguments.
export SFCGESMEAN=${1:-${SFCGESMEAN:?}}
export SIGGESMEAN=${2:-${SIGGESMEAN:?}}
#  Directories.
export HOMEDIR=${HOMEDIR:-/nwprod}
export NWPROD=${NWPROD:-$HOMEDIR}
export FIXSUBDA=${FIXSUBDA:-fix/fix_am}
export FIXGLOBAL=${FIXGLOBAL:-$NWPROD/$FIXSUBDA}
export SCRGLOBAL=${SCRGLOBAL:-$NWPROD/scripts}
export EXECGLOBAL=${EXECGLOBAL:-$NWPROD/exec}
export USHGLOBAL=${USHGLOBAL:-$NWPROD/ush}
export utilscript=${utilscript:-$NWPROD/util/ush}
export DATA=${DATA:-$(pwd)}
export COMIN=${COMIN:-$(pwd)}
export COMOUT=${COMOUT:-$(pwd)}

# Scripts.
export ANALYSISSH=${ANALYSISSH:-$SCRGLOBAL/exglobal_analysis.sh.sms}

#  Variables.
export XC=${XC}
export PREINP=${PREINP}
export SUFINP=${SUFINP}
export SIGHDR=${SIGHDR:-${EXECGLOBAL}/global_sighdr$XC}
export SFCHDR=${SFCHDR:-${EXECGLOBAL}/global_sfchdr$XC}
export JCAP=${JCAP:-$($SIGHDR $SIGGESMEAN JCAP||echo 0)}
export JCAP_A=${JCAP_A:-$($SIGHDR $SIGGESMEAN JCAP||echo 0)}
export LATB=${LATB:-$($SFCHDR $SFCGESMEAN LATB||echo 0)}
export LONB=${LONB:-$($SFCHDR $SFCGESMEAN LONB||echo 0)}
export LATA=${LATA:-$LATB}
export LONA=${LONA:-$LONB}
export NLAT_A=${NLAT_A:-$(($LATA+2))}
export NLON_A=${NLON_A:-$LONA}
export LEVS=${LEVS:-$($SIGHDR $SIGGESMEAN LEVS||echo 0)}
export DELTIM=${DELTIM:-$((3600/($JCAP_A/20)))}
export USE_NEWRADBC=${USE_NEWRADBC:-"NO"}
export DOHYBVAR=${DOHYBVAR:-"NO"}

# Files.
export CYCLEXEC=${CYCLEXEC:-${EXECGLOBAL}/global_cycle$XC}
export GSIEXEC=${GSIEXEC:-${EXECGLOBAL}/global_gsi$XC}
export CYCLESH=${CYCLESH:-${USHGLOBAL}/global_cycle.sh}
export BERROR=${BERROR:-${FIXGLOBAL}/global_berror.l${LEVS}y${NLAT_A}.f77}
export SATANGL=${SATANGL:-${FIXGLOBAL}/global_satangbias.txt}
export SATINFO=${SATINFO:-${FIXGLOBAL}/global_satinfo.txt}
export RTMFIX=${RTMFIX:-${FIXGLOBAL}/crtm_2.0.5}
export RTMEMIS=${RTMEMIS:-${RTMFIX}/EmisCoeff/Big_Endian/EmisCoeff.bin}
export RTMAERO=${RTMAERO:-${RTMFIX}/AerosolCoeff/Big_Endian/AerosolCoeff.bin}
export RTMCLDS=${RTMCLDS:-${RTMFIX}/CloudCoeff/Big_Endian/CloudCoeff.bin}
export ANAVINFO=${ANAVINFO:-${FIXGLOBAL}/global_anavinfo.l${LEVS}.txt}
export CONVINFO=${CONVINFO:-${FIXGLOBAL}/global_convinfo.txt}
export OZINFO=${OZINFO:-${FIXGLOBAL}/global_ozinfo.txt}
export PCPINFO=${PCPINFO:-${FIXGLOBAL}/global_pcpinfo.txt}
export AEROINFO=${AEROINFO:-${FIXGLOBAL}/global_aeroinfo.txt}
export SCANINFO=${SCANINFO:-${FIXGLOBAL}/global_scaninfo.txt}
export HYBENSINFO=${HYBENSINFO:-${FIXGLOBAL}/global_hybens_locinfo.l${LEVS}.txt}
export OBERROR=${OBERROR:-${FIXGLOBAL}/prepobs_errtable.global}
export SELECT_OBS=${SELECT_OBS:-${COMIN}/obsinput_${CDATE}_ensmean}
export SFCG03=${SFCG03:-${COMOUT}/sfcf03}
export SFCG04=${SFCG04:-${COMOUT}/sfcf04}
export SFCG05=${SFCG05:-${COMOUT}/sfcf05}
export SFCG07=${SFCG07:-${COMOUT}/sfcf07}
export SFCG08=${SFCG08:-${COMOUT}/sfcf08}
export SFCG09=${SFCG09:-${COMOUT}/sfcf09}
export SIGG03=${SIGG03:-${COMOUT}/sigf03}
export SIGG04=${SIGG04:-${COMOUT}/sigf04}
export SIGG05=${SIGG05:-${COMOUT}/sigf05}
export SIGG07=${SIGG07:-${COMOUT}/sigf07}
export SIGG08=${SIGG08:-${COMOUT}/sigf08}
export SIGG09=${SIGG09:-${COMOUT}/sigf09}
export SFCANL=${SFCANL:-${COMOUT}/${PREINP}sfcanl}
export RADSTAT=${RADSTAT:-${COMOUT}/${PREINP}radstat}
export GSISTAT=${GSISTAT:-${COMOUT}/${PREINP}gsistat}
export PCPSTAT=${PCPSTAT:-${COMOUT}/${PREINP}pcpstat}
export CNVSTAT=${CNVSTAT:-${COMOUT}/${PREINP}cnvstat}
export OZNSTAT=${OZNSTAT:-${COMOUT}/${PREINP}oznstat}
export RUN_SELECT=${RUN_SELECT:-"NO"}
export USE_SELECT=${USE_SELECT:-"NO"}
export DIAG_SUFFIX=${DIAG_SUFFIX:-""}
export DIAG_COMPRESS=${DIAG_COMPRESS:-"YES"}
export DIAG_TARBALL=${DIAG_TARBALL:-"YES"}
export INISCRIPT=${INISCRIPT}
export ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'}
export LOGSCRIPT=${LOGSCRIPT}
export ENDSCRIPT=${ENDSCRIPT}
#  Other variables.
export CDATE=${CDATE:-$($SFCHDR $SFCGESMEAN VDATE||echo 0)}
export LSOIL=${LSOIL:-2}
export FSMCL2=${FSMCL2:-60}
export DELTSFC=${DELTSFC:-$($SFCHDR $SFCGESMEAN FHOUR||echo 0)}
export CYCLVARS=${CYCLVARS}
export SETUP=${SETUP:-""}
export GRIDOPTS=${GRIDOPTS:-""}
export BKGVERR=${BKGVERR:-""}
export ANBKGERR=${ANBKGERR:-""}
export JCOPTS=${JCOPTS:-""}
export STRONGOPTS=${STRONGOPTS:-""}
export OBSQC=${OBSQC:-""}
export OBSINPUT=${OBSINPUT:-""}
export SUPERRAD=${SUPERRAD:-""}
export SINGLEOB=${SINGLEOB:-""}
export LAGDATA=${LAGDATA:-""}
export HYBRID_ENSEMBLE=${HYBRID_ENSEMBLE:-""}
export RAPIDREFRESH_CLDSURF=${RAPIDREFRESH_CLDSURF:-""}
export CHEM=${CHEM:-""}
export NTHREADS=${NTHREADS:-1}
export NTHSTACK=${NTHSTACK:-1024000000}
export NTHREADS_GSI=${NTHREADS_GSI:-1}
export NTHSTACK_GSI=${NTHSTACK_GSI:-1024000000}
export FILESTYLE=${FILESTYLE:-'X'}
export PGMOUT=${PGMOUT:-${pgmout:-'&1'}}
export PGMERR=${PGMERR:-${pgmerr:-'&2'}}
export OBERRFLAG=${OBERRFLAG:-.false.}
export NCP=${NCP:-cp}
typeset -L1 l=$PGMOUT
[[ $l = '&' ]]&&a=''||a='>'
export REDOUT=${REDOUT:-'1>'$a}
typeset -L1 l=$PGMERR
[[ $l = '&' ]]&&a=''||a='>'
export REDERR=${REDERR:-'2>'$a}

################################################################################
#  Preprocessing
$INISCRIPT
pwd=$(pwd)
if [[ -d $DATA ]]
then
   mkdata=NO
else
   mkdir -p $DATA
   mkdata=YES
fi
cd $DATA||exit 99
export DATATOP=$DATA


################################################################################
# Copy input data
$NCP $SELECT_OBS ./


################################################################################
# Set output data

EOMGGRP=$COMOUT/omgstat_${CDATE}_grp${ENSGRP}
rm -f $EOMGGRP


################################################################################
# Generate ensemble innovations
imem=$ENSBEG
while [[ $imem -le $ENSEND ]]; do
   export FILESTYLE='L'
   export RUN_SELECT=NO
   export USE_SELECT=YES
   export SELECT_OBS=$DATATOP/obsinput_${CDATE}_ensmean
   export SETUP="miter=0,niter=1,lread_obs_save=.false.,lread_obs_skip=.true.,lwrite_predterms=.true.,lwrite_peakwt=.true.,reduce_diag=.true.,passive_bc=.false.,"
   export BKGVERR="bkgv_flowdep=.false.,"
   export STRONGOPTS="jcstrong=.false.,nstrong=0,nvmodes_keep=0,baldiag_full=.false.,baldiag_inc=.false.,"
   export OBSQC="tcp_width=60.0,tcp_ermin=2.0,tcp_ermax=12.0,"
   export OBSINPUT="dmesh(1)=225.0,dmesh(2)=225.0,"

   export member="mem"`printf %03i $imem`
   export DATA=$DATATOP/$member

   export SFCG03=$COMINGES/bfg_${GDATE}_fhr03_${member}
   export SFCG04=$COMINGES/bfg_${GDATE}_fhr04_${member}
   export SFCG05=$COMINGES/bfg_${GDATE}_fhr05_${member}
   export SFCG06=$COMINGES/bfg_${GDATE}_fhr06_${member}
   export SFCG07=$COMINGES/bfg_${GDATE}_fhr07_${member}
   export SFCG08=$COMINGES/bfg_${GDATE}_fhr08_${member}
   export SFCG09=$COMINGES/bfg_${GDATE}_fhr09_${member}
   export SFCGES=$COMINGES/bfg_${GDATE}_fhr06_${member}

   export SIGG03=$COMINGES/sfg_${GDATE}_fhr03s_${member}
   export SIGG04=$COMINGES/sfg_${GDATE}_fhr04s_${member}
   export SIGG05=$COMINGES/sfg_${GDATE}_fhr05s_${member}
   export SIGG06=$COMINGES/sfg_${GDATE}_fhr06s_${member}
   export SIGG07=$COMINGES/sfg_${GDATE}_fhr07s_${member}
   export SIGG08=$COMINGES/sfg_${GDATE}_fhr08s_${member}
   export SIGG09=$COMINGES/sfg_${GDATE}_fhr09s_${member}
   export SIGGES=$COMINGES/sfg_${GDATE}_fhr06s_${member}

   export SFCANL=$COMOUT/sfcanl_${CDATE}_${member}
   export GSISTAT=$COMOUT/gsistat_${CDATE}_${member}
   export RADSTAT=$COMOUT/radstat_${CDATE}_${member}
   export OZNSTAT=$COMOUT/oznstat_${CDATE}_${member}
   export PCPSTAT=$COMOUT/pcpstat_${CDATE}_${member}
   export CNVSTAT=$COMOUT/cnvstat_${CDATE}_${member}

   export DIAG_SUFFIX="_${member}"
   export DIAG_COMPRESS=NO
   export DAIG_TARBALL=YES
   export DOHYBVAR=NO
   export HYBRID_ENSEMBLE=" "

   if [ -s $SFCANL ] ; then
      rm -f $SFCANL
   fi
   if [ -s $GSISTAT ] ; then
      rm -f $GSISTAT
   fi
   if [ -s $RADSTAT ] ; then
      rm -f $RADSTAT
   fi
   if [ -s $OZNSTAT ] ; then
      rm -f $OZNSTAT
   fi
   if [ -s $PCPSTAT ] ; then
      rm -f $PCPSTAT
   fi
   if [ -s $CNVSTAT ] ; then
      rm -f $CNVSTAT
   fi


   $ANALYSISSH
   rc=$?

   export ERR=$rc
   export err=$ERR
   $ERRSCRIPT||exit 2

   rm log
   cp $DATATOP/log_all ./log_old
   echo "Process member $imem" > log
   cat log_old log > log_new
   cp log_new $DATATOP/log_all

   (( imem = $imem + 1 ))

done


################################################################################
# Save log

cd $DATATOP
cp log_all $EOMGGRP


################################################################################
#  Postprocessing
cd $pwd
[[ $mkdata = YES ]]&&rmdir $DATA
$ENDSCRIPT
set +x
if [[ "$VERBOSE" = "YES" ]]
then
   echo $(date) EXITING $0 with return code $err >&2
fi
exit $err
