#!/bin/ksh
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 exglobal script
##############################################
export CDATE=${CDATE:-${PDY}${cyc}}
export CDUMP=${CDUMP:-${RUN:-"gdas"}}
if [ $RUN_ENVIR = "nco" ]; then
    export ROTDIR=${COMROOT:?}/$NET/$envir
fi


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

GDATE=$($NDATE -$assim_freq $CDATE)
gPDY=$(echo $GDATE | cut -c1-8)
gcyc=$(echo $GDATE | cut -c9-10)


export CASE=$CASE_ENKF


export OPREFIX="${CDUMP}.t${cyc}z."
export APREFIX="${CDUMP}.t${cyc}z."
export ASUFFIX=".nemsio"
export GPREFIX="gdas.t${gcyc}z."
export GSUFFIX=".nemsio"


# COMIN_GES, COMIN_GES_ENS and COMOUT are used in exglobal script
# TO DO: Map NCO's directory into these variables
COMIN_GES_CTL="$ROTDIR/gdas.$gPDY/$gcyc"
export COMIN_GES_ENS="$ROTDIR/enkfgdas.$gPDY/$gcyc"
export COMIN_GES=$COMIN_GES_ENS
export COMOUT="$ROTDIR/enkf$CDUMP.$PDY/$cyc"


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


export LEVS=$($NEMSIOGET $ATMGES_ENSMEAN dimz | awk '{print $2}')
status=$?
[[ $status -ne 0 ]] && exit $status


# 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


# Use the selected observations from ensemble mean
export RUN_SELECT="NO"
export USE_SELECT="YES"
export SELECT_OBS="$COMOUT/${APREFIX}obsinput.ensmean"


# Get ENSBEG/ENSEND from ENSGRP and NMEM_EOMGGRP
export ENSEND=$((NMEM_EOMGGRP * ENSGRP))
export ENSBEG=$((ENSEND - NMEM_EOMGGRP + 1))


###############################################################
# Run relevant exglobal script
env
msg="HAS BEGUN on `hostname`"
postmsg "$jlogfile" "$msg"
$LOGSCRIPT


${ENKFINVOBSSH:-$SCRgsi/exglobal_enkf_innovate_obs_fv3gfs.sh.ecf}
status=$?
[[ $status -ne 0 ]] && exit $status


# Double check the status of members in ENSGRP
EOMGGRP=$ROTDIR/enkf${CDUMP}.$PDY/$cyc/eomg.grp${ENSGRP}
npass=0
if [ -f $EOMGGRP ]; then
    npass=$(grep "PASS" $EOMGGRP | wc -l)
fi
echo "$npass/$NMEM_EOMGGRP members successfull in eomg.grp$ENSGRP"
if [ $npass -ne $NMEM_EOMGGRP ]; then
    echo "FATAL ERROR: Failed members in $ENSGRP, ABORT!"
    cat $EOMGGRP
    exit 99
fi


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

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


msg="ENDED NORMALLY."
postmsg "$jlogfile" "$msg"


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

date
exit 0