#!/bin/sh
set +xa
echo "---------------------------------------------------------------"
echo "Script - SSTOIQD DUMP processing (NCDC quarter-degree SST analysis)"
echo "---------------------------------------------------------------"
echo "History: October 2010 - Implement SSTOIQD Analysis"
echo "---------------------------------------------------------------"
set -xa

###########################################################
# Processing/Flow of script
# 1) Copy select guess and data files from earlier dates to working dir
# 2) Run steps required to dump new data 
# 3) Save output files to $COMOUT
###########################################################

#############################################################
# Ensure that this job is pointed to the production temporary
# working directory, which is where all of this job's input 
# and output files will be saved during execution
#############################################################
cd $DATA

> $pgmout  # create empty output file

msg="HAS BEGUN on `hostname`"
postmsg "$jlogfile" "$msg"

AVHRR_name=${AVHRR_name:-sstnvh}
AMSR_name=${AMSR_name:-amsre}

GET_GES=${GET_GES:-YES}
GET_ICE=${GET_ICE:-YES}
GET_OLD_FILES=${GET_OLD_FILES:-YES}
DUMP_SFCMAR=${DUMP_SFCMAR:-YES}
DUMP_AVHRR=${DUMP_AVHRR:-YES}
DUMP_AMSR=${DUMP_AMSR:-NO}
FTP_AMSRGRID=${FTP_AMSRGRID:-YES}

QC_GUESS_DIR_tmp=${QC_GUESS_DIR_tmp:-'${COMBASE}/$RUN.$CDATE'}
QC_GUESS_FILE_tmp=${QC_GUESS_FILE_tmp:-sstoiqd.sst.grb}


if [ "$GET_GES" = 'YES' ]; then
# pick up first guess field
  eval FIRST_GUESS=${FIRST_GUESS:-${COMINm1}/sstoiqd.sst.grb}
  if [ -s $FIRST_GUESS ]
  then
    cp $FIRST_GUESS sstoiqd.guess.grb
    msg="Using $FIRST_GUESS as first guess"
    postmsg "$jlogfile" "$msg"
    if [ "$SENDCOM" = 'YES' ]; then
      cp sstoiqd.guess.grb $COMOUT/sstoiqd.guess.grb
    fi
  else
    msg="$FIRST_GUESS not available for first guess.  Critical error."
    postmsg "$jlogfile" "$msg"
    export err=20
    err_chk
  fi
  for CDATE in $PDYm7 $PDYm6 $PDYm5 $PDYm4 $PDYm3 $PDYm2 $PDYm1
  do
    for SDIR in $COMINm1 $COMINm2 $COMINm3 $COMINm4 $COMINm5
    do
      if [ -s $SDIR/sstoiqd.sst.$CDATE.grb ];then
        cp $SDIR/sstoiqd.sst.$CDATE.grb .
        break
      fi
    done
    if [ ! -s sstoiqd.sst.$CDATE.grb ];then
    eval QC_GUESS_DIR=$QC_GUESS_DIR_tmp
    eval QC_GUESS_FILE=$QC_GUESS_FILE_tmp
      [ -s $QC_GUESS_DIR/$QC_GUESS_FILE ] && cp $QC_GUESS_DIR/$QC_GUESS_FILE sstoiqd.sst.$CDATE.grb
    fi
    if [ "$SENDCOM" = 'YES' ]; then
      cp sstoiqd.sst.$CDATE.grb $COMOUT/sstoiqd.sst.$CDATE.grb
    fi
  done
fi


#############################################################
# cp some input files from prior days to working directory 
# to save dumping time.
#############################################################
set -x

if [ "$GET_OLD_FILES" = 'YES' ]; then
  for CDATE in $PDYm7 $PDYm6 $PDYm5 $PDYm4 $PDYm3 $PDYm2
  do
    for CTYPE in ships dbuoy mbuoy ${AVHRR_name} ${AMSR_name}
    do
      for SDIR in $COMINm1 $COMINm2 $COMINm3 $COMINm4 $COMINm5
      do
        if [ -s $SDIR/sstoiqd.$CTYPE.$CDATE.bufr_d ];then
          cp $SDIR/sstoiqd.$CTYPE.$CDATE.bufr_d .
          break
        fi
      done
    done
    for CTYPE in ice
    do
      for SDIR in $COMINm1 $COMINm2 $COMINm3 $COMINm4 $COMINm5
      do
        if [ -s $SDIR/sstoiqd.$CTYPE.$CDATE.grb ];then
          cp $SDIR/sstoiqd.$CTYPE.$CDATE.grb .
          break
        fi
      done
    done
  done
fi

if [ "$GET_ICE" = 'YES' ]; then
  for CDATE in $PDYm7 $PDYm6 $PDYm5 $PDYm4 $PDYm3 $PDYm2 $PDYm1
  do
    icefile=sstoiqd.ice.$CDATE.grb
    if  [ ! -s $icefile ];then
      if [ -r ${COM_ENGICE}.${CDATE}/engice.t00z.grb ]; then
        cp ${COM_ENGICE}.${CDATE}/engice.t00z.grb $icefile
      fi
    fi
    if [ "$SENDCOM" = 'YES' ]; then
      [ -s $icefile ] && cp $icefile $COMOUT
    fi
  done
fi


#
# Dump insitu files that were not available in previous runs
#

export DUMP=${DUMP:-$USHbufr/dumpjb}
export LIST=${LIST:-$FIXbufr/bufr_dumplist}
export FORM=ibm

if [ "$DUMP_SFCMAR" = 'YES' ]; then

#  For each day, check for file for each type (ships, dbuoy, mbuoy)
# dump and process if missing or too small
#  always get bufr'd data for yesterday to pick up late obs.
# CTYPED is variable for dumplist name.  CTYPE is the name used for files copied to $COMOUT.

  for CTYPE in ships dbuoy mbuoy
  do
#  if shpall exists as available mnemonic, use that when dumping ship data
    if [ $CTYPE = ships -a `grep -c ^_shpall $LIST` -gt 0 ]; then
      CTYPED=shpall
    else 
      CTYPED=$CTYPE
    fi
    echo $CTYPE $CTYPED
    for CDATE in $PDYm7 $PDYm6 $PDYm5 $PDYm4 $PDYm3 $PDYm2 $PDYm1
    do
      bufrfile=sstoiqd.$CTYPE.$CDATE.bufr_d
      if [ -s $bufrfile ];then
        filesize=`ls -l $bufrfile | awk '{print $5}' `
      else
        filesize=0
      fi
      if  [ $CDATE = $PDYm1 -o $filesize -lt 1000000 ]  # using typical size of ship dump
      then
        $DUMP $CDATE\12.0 11.99999 $CTYPED
        dumpstat=$?
        cat ${CTYPED}.out
        mv ${CTYPED}.out ${CTYPED}.${CDATE}.out

        if [ \( ${CTYPED} = shpall -a \( $dumpstat -ne 0 -a $dumpstat -ne 11 \) \) -o \( ${CTYPED} != shpall -a $dumpstat -ne 0 \) ]
        then
          msg="data dump failed for $CTYPED $CDATE: $dumpstat"
          postmsg "$jlogfile" "$msg"
        else
          [ $CTYPE = ships ] && chmod 640 $CTYPED.$FORM
          mv $CTYPED.$FORM $bufrfile
        fi
      fi
      if [ "$SENDCOM" = 'YES' ]; then
        [ -s $bufrfile ] && cp $bufrfile $COMOUT
      fi
    done
  done
fi   # end dump_sfcmar chk

if [ "$DUMP_AVHRR" = 'YES' ]; then

##  For each day, check for file for satellite data
# dump and process if missing
#-----------------------------------------------------------------

#  For each day, check for file
#  if file does not exist or is too small, get bufr'd data.
#  always get bufr'd data for yesterday to pick up late obs.

  CTYPE=$AVHRR_name
  for CDATE in $PDYm7 $PDYm6 $PDYm5 $PDYm4 $PDYm3 $PDYm2 $PDYm1
  do
    bufrfile=sstoiqd.$CTYPE.$CDATE.bufr_d
    if [ -s $bufrfile ];then
      filesize=`ls -l $bufrfile | awk '{print $5}' `
    else
      filesize=0
    fi
    if  [ $CDATE = $PDYm1 -o $filesize -lt 30000000 ]
    then
      $DUMP $CDATE\12.0 11.99999 $CTYPE
      dumpstat=$?
      cat ${CTYPE}.out
      mv ${CTYPE}.out ${CTYPE}.${CDATE}.out
      if [ $dumpstat -ne 0 ];then
        msg="data dump failed for $CTYPE $CDATE: $dumpstat"
        postmsg "$jlogfile" "$msg"
      else
        mv $CTYPE.$FORM $bufrfile
      fi
    fi
    if [ "$SENDCOM" = 'YES' ]; then
      [ -s $bufrfile ] && cp $bufrfile $COMOUT
    fi
  done
fi   # end dump_avhrr chk


if [ "$DUMP_AMSR" = 'YES' ]; then

#  For each day, check for file.  AMSR day is sometimes incomplete.
#  So checking existing file size against expected size for one day.
#  If file does not exist or is too small, dump bufr'd data.
#  Always get bufr'd data for PDYm2 and PDYm1.

  CTYPE=${AMSR_name}
  for CDATE in $PDYm7 $PDYm6 $PDYm5 $PDYm4 $PDYm3 $PDYm2 $PDYm1
  do
    bufrfile=sstoiqd.$CTYPE.$CDATE.bufr_d
    if [ -s $bufrfile ];then
      filesize=`ls -l $bufrfile | awk '{print $5}' `
    else
      filesize=0
    fi
    if  [ $CDATE -gt $PDYm3 -o $filesize -lt 10000000 ]
    then
      $DUMP $CDATE\12.0 11.99999 012 033
      dumpstat=$?
      cat 012.out
      mv 012.out ${AMSR_name}.$CDATE.out
      if [ $dumpstat -ne 0 ];then
        msg="data dump failed for $CTYPE $CDATE: $dumpstat"
        postmsg "$jlogfile" "$msg"
      else
        mv 012.$FORM $bufrfile
      fi
    fi
    if [ "$SENDCOM" = 'YES' ]; then
      [ -s $bufrfile ] && cp $bufrfile $COMOUT
    fi
  done
fi   # end dump_amsr chk

if [ "$FTP_AMSRGRID" = 'YES' ]; then
  if [ "$GET_OLD_FILES" = 'YES' ]; then
    for CDATE in $PDYm7 $PDYm6 $PDYm5 $PDYm4 $PDYm3 $PDYm2
    do 
      amsrgrid=sstoiqd.${AMSR_name}grid.$CDATE.nc
      for SDIR in $COMINm1 $COMINm2 $COMINm3 $COMINm4 $COMINm5
      do
        if [ -s $SDIR/$amsrgrid ];then
          cp $SDIR/$amsrgrid .
          break
        fi
      done
    done
  fi
# get gridded amsr sst field from MISST server
  echo "open ftp.misst.org" >> ftp_amsr
  echo "user anonymous diane.stokes@noaa.gov" >> ftp_amsr
  echo "binary" >> ftp_amsr
# getting all needed dates in case amsr fields have been updated
  for CDATE in $PDYm7 $PDYm6 $PDYm5 $PDYm4 $PDYm3 $PDYm2 $PDYm1;do
    CYEAR=`echo $CDATE | cut -c 1-4`
    echo "cd /amsre/gridded/nc/$CYEAR" >> ftp_amsr
    echo "ls $CDATE*" >> ftp_amsr
    echo "binary" >> ftp_amsr
    echo "mget ${CDATE}*L2P_GRIDDED_25* " >> ftp_amsr
  done
  echo "quit" >> ftp_amsr
  ftp -n -v -i < ftp_amsr
  echo $?

  for CDATE in $PDYm7 $PDYm6 $PDYm5 $PDYm4 $PDYm3 $PDYm2 $PDYm1;do
    for file in `ls -d ${CDATE}*.gz 2> /dev/null`; do
      gunzip $file
    done
    ls $CDATE*
    for file in `ls -d ${CDATE}* 2> /dev/null`; do
      amsrgrid=sstoiqd.${AMSR_name}grid.$CDATE.nc
      mv $file $amsrgrid
    done   # "v5" final file if present should overwrite "rt" realtime file.
    if [ "$SENDCOM" = 'YES' ]; then
      if [ -s $amsrgrid ]; then
        cp $amsrgrid $COMOUT
      else
        msg="No AMSR grid file for $CDATE. Non-fatal."
        postmsg "$jlogfile" "$msg"
      fi
    fi
  done
fi   # end ftp_amsrgrid chk

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

################## END OF SCRIPT #######################
