#!/bin/bash
set -x

export RUN_ENVIR=${RUN_ENVIR:-"nco"}
export PS4='$SECONDS + '
date


#############################
# Source relevant config files
#############################
export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config}
configs="base anal eobs"
config_path=${EXPDIR:-$NWROOT/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 eobs
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


##############################################
# 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:-"gdas"}}
export COMPONENT=${COMPONENT:-atmos}


##############################################
# Begin JOB SPECIFIC work
##############################################

GDATE=$($NDATE -$assim_freq $CDATE)
gPDY=$(echo $GDATE | cut -c1-8)
gcyc=$(echo $GDATE | cut -c9-10)
GDUMP=${GDUMP:-"gdas"}

export CASE=$CASE_ENKF
export CDUMP_OBS=${CDUMP_OBS:-$CDUMP}

export OPREFIX="${CDUMP_OBS}.t${cyc}z."
export APREFIX="${CDUMP}.t${cyc}z."
export GPREFIX="${GDUMP}.t${gcyc}z."
export GSUFFIX="${GSUFFIX:-".ensmean${SUFFIX}"}"
export ASUFFIX="${ASUFFIX:-"${SUFFIX}"}"

if [ $RUN_ENVIR = "nco" -o ${ROTDIR_DUMP:-NO} = "YES" ]; then
    export COMIN_OBS=${COMIN_OBS:-$(compath.py ${envir}/obsproc/${obsproc_ver})/$RUN.$PDY/$cyc/$COMPONENT}
    export COMIN_GES_OBS=${COMIN_GES_OBS:-$(compath.py ${envir}/obsproc/${obsproc_ver})/$GDUMP.$gPDY/$gcyc/$COMPONENT}
else
    export COMIN_OBS="$DMPDIR/$CDUMP.$PDY/$cyc/$COMPONENT"
    export COMIN_GES_OBS="$DMPDIR/$GDUMP.$gPDY/$gcyc/$COMPONENT"
fi

# COMIN_GES, COMIN_ANL COMIN_GES_ENS, and COMOUT  are used in script
COMIN_GES_CTL="$ROTDIR/gdas.$gPDY/$gcyc/$COMPONENT"
export COMIN_ANL="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT"
export COMIN_GES_ENS="$ROTDIR/enkfgdas.$gPDY/$gcyc/$COMPONENT"
export COMIN_GES=$COMIN_GES_ENS
export COMOUT="$ROTDIR/enkf$CDUMP.$PDY/$cyc/$COMPONENT"


export ATMGES_ENSMEAN="$COMIN_GES_ENS/${GPREFIX}atmf006$GSUFFIX"
if [ ! -f $ATMGES_ENSMEAN ]; then
    echo "FATAL ERROR: FILE MISSING: ATMGES_ENSMEAN = $ATMGES_ENSMEAN"
    exit 1
fi

export LEVS=$($NCDUMP -h $ATMGES_ENSMEAN | grep -i "pfull" | head -1 | awk -F" = " '{print $2}' | awk -F" " '{print $1}') # get LEVS
status=$?
[[ $status -ne 0 ]] && exit $status

# Link observational data
export PREPQC="$COMIN_OBS/${OPREFIX}prepbufr"
if [ ! -f $PREPQC ]; then
    echo "WARNING: Global PREPBUFR FILE $PREPQC MISSING"
fi
export PREPQCPF="$COMIN_OBS/${OPREFIX}prepbufr.acft_profiles"
export TCVITL="$COMIN_ANL/${OPREFIX}syndata.tcvitals.tm00"
[[ $DONST = "YES" ]] && export NSSTBF="$COMIN_OBS/${OPREFIX}nsstbufr"

# Guess Bias correction coefficients related to control
export GBIAS=${COMIN_GES_CTL}/${GPREFIX}abias
export GBIASPC=${COMIN_GES_CTL}/${GPREFIX}abias_pc
export GBIASAIR=${COMIN_GES_CTL}/${GPREFIX}abias_air
export GRADSTAT=${COMIN_GES_CTL}/${GPREFIX}radstat

# Bias correction coefficients related to ensemble mean
export ABIAS="$COMOUT/${APREFIX}abias.ensmean"
export ABIASPC="$COMOUT/${APREFIX}abias_pc.ensmean"
export ABIASAIR="$COMOUT/${APREFIX}abias_air.ensmean"
export ABIASe="$COMOUT/${APREFIX}abias_int.ensmean"

# Diagnostics related to ensemble mean
export GSISTAT="$COMOUT/${APREFIX}gsistat.ensmean"
export CNVSTAT="$COMOUT/${APREFIX}cnvstat.ensmean"
export OZNSTAT="$COMOUT/${APREFIX}oznstat.ensmean"
export RADSTAT="$COMOUT/${APREFIX}radstat.ensmean"

# Select observations based on ensemble mean
export RUN_SELECT="YES"
export USE_SELECT="NO"
export SELECT_OBS="$COMOUT/${APREFIX}obsinput.ensmean"

export DIAG_SUFFIX="_ensmean"

# GSI namelist options specific to eobs
export SETUP_INVOBS="passive_bc=.false.,$SETUP_INVOBS"

# Ensure clean stat tarballs for ensemble mean
for fstat in $CNVSTAT $OZNSTAT $RADSTAT; do
    [[ -f $fstat ]] && rm -f $fstat
done


###############################################################
# Run relevant script
env
echo "HAS BEGUN on $(hostname)"
$LOGSCRIPT


${INVOBSSH:-$SCRgfs/exgdas_enkf_select_obs.sh}
status=$?
[[ $status -ne 0 ]] && exit $status


##############################################
# Send Alerts
##############################################
if [ $SENDDBN = YES ] ; then
   $DBNROOT/bin/dbn_alert MODEL ENKF1_MSC_gsistat $job $GSISTAT
fi


##############################################
# End JOB SPECIFIC work
##############################################

##############################################
# Final processing
##############################################
if [ -e "$pgmout" ] ; then
  cat $pgmout
fi


echo "ENDED NORMALLY."


##########################################
# Remove the Temporary working directory
##########################################
cd $DATAROOT
[[ $KEEPDATA = "NO" ]] && rm -rf $DATA

date
exit 0