########################### EXRTGSST.SH.SMS ###############################
set +xa
echo "---------------------------------------------------------------"
echo "JRTGSST - SST2DVAR and NAM processing"
echo "---------------------------------------------------------------"
echo "History: Tuesday, May 04, 1993 - Implement SSTOI Analysis"
echo "Revised: Tuesday, August 29, 1995 - convert from CSS to FTA"
echo "Revised: Tue October 3, 1995 - added operational NAM SST script"
echo "Revised: Mon, 22 September, 1996 - Add OI SST processing."
echo "Revised: Wed, 26 October, 1996 - Add Satellite SST to OI processing."
echo "Revised: Tue, 18 March, 1997 - Add rmcomdir step"
echo "Revised: Tue, 17 June, 1997 - Add step to submit mkfossst.sh."
echo "         01/17/2001 - placed into parallel production."
echo "Revised: 02/08/2001 - Initial implementation on the IBM SP "
echo "                      NAM SST script now in separate job"
echo "Revised: 05/18/2001 - Made changes for NOAA-16 and relocated"
echo "                      the buoy averaging. Data used in the"
echo "                      analysis is now written to output files."
echo "Revised: 06/12/2001 - Modified to become SST2DVAR analysis "
echo "Revised: 10/01/2001 - Moved data window to close at 2233 just"
echo "                      before run at 2240 UTC. Dumps extend back"
echo "                      36 hours, but data used in previous day's"
echo "                      RTG_SST analysis will not be used in"
echo "                      current day's RTG_SST analysis"
echo "Revised: 05/06/2004 - Made changes for NOAA-17."
echo "Revised: Mar 2012 - Dump new shpall subtype to pick up ship data"
echo "                    from restricted and unrestricted tanks."
echo "                    Restrict access to output ship files."
echo "                    Remove chmod 775 $COMOUT/* to protect restricted files."
echo "---------------------------------------------------------------"
set -xa

###########################################################
# Processing/Flow of script
# 1) Copy this job's input files to the working directory
# 2) Run steps required for data preprocessing and  OI sst analysis
# 3) Save output files to $COMOUT
# 4) Interpolate 0.5-degree grid to 2.5 nh and sh degree grids
# 5) Remove files located in this job's working directory
###########################################################

#############################################################
# 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

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

set -x
#############################################################
# cp RTG_SST non-satellite input files from prior 6 days to 
# working directory checking yesterdays directory first, 
# check others if necessary
#############################################################

for CDATE in $PDYm6 $PDYm5 $PDYm4 $PDYm3 $PDYm2 $PDYm1
do
 for CTYPE in ships dbuoy fbuoy dsatn19 nsatn19 engice.grb
   do
      for SDIR in $COMINm1 $COMINm2 $COMINm3 $COMINm4 $COMINm5 $COMINm6
      do
         if [ -s $SDIR/sst2dvar_$CTYPE.$CDATE ]
         then
            cp $SDIR/sst2dvar_$CTYPE.$CDATE .
            break
         fi
      done
   done
done

#
# Dump insitu files that were not available in previous runs
#
export CHKPRT=true
export DUMP=/nwprod/ush/dumpjb
export FORM=system
export LOUD=off
export DUEX=/nwprod/exec
export DFIX=/nwprod/fix
export MPMD=/nwprod/util/ush/mpmd.sh

export XLFRTEOPTS="unit_vars=yes"

#  For each day, check for file for each type (ships, dbuoy, fbuoy)
# dump and process if missing

####DUMPTIME=2233

for CDATE in $PDYm6 $PDYm5 $PDYm4 $PDYm3 $PDYm2 $PDYm1 $PDY
do
  for CTYPE in ships dbuoy fbuoy
  do
    #  if file does not exist or has size of zero, get bufr'd data.
    #  always get bufr'd data for yesterday to pick up late obs.
    if  [ ! -s sst2dvar_$CTYPE.$CDATE -o $CDATE = $PDY ]
    then

      if [ $CTYPE = fbuoy ] 
      then
        $DUMP $CDATE\04.35 17.99999 mbuoy
        dumpstat1=$?
        cat mbuoy.out
        $DUMP $CDATE\04.35 17.99999 lcman
        dumpstat2=$?
        cat lcman.out
        if [ $dumpstat1 -eq 0 -a $dumpstat2 -eq 0 ] ; then
#  merge moored buoys and CMANs into a "fixed buoy" file
          export pgm=bufr_combfr
          . prep_step
          export XLFUNIT_50="fbuoy.system"
          echo "mbuoy.system \nlcman.system"|/nwprod/exec/bufr_combfr
          errcomb=$?
          if [ $errcomb -ne 0 ] ; then
            cp mbuoy.system fbuoy.system
          fi
        elif [ $dumpstat1 -eq 0 ] ; then
          cp mbuoy.system fbuoy.system
        elif [ $dumpstat2 -eq 0 ] ; then
          cp lcman.system fbuoy.system
        fi
        dumpstat=$(($dumpstat1*$dumpstat2))
      elif [ $CTYPE = ships ]
      then
        $DUMP $CDATE\04.35 17.99999 shpall
        dumpstat=$?
        cat shpall.out
        if [ $dumpstat -eq 0 -o $dumpstat -eq 11 ] ; then
          mv shpall.system ships.system
          dumpstat=0
        fi
      else
        $DUMP $CDATE\04.35 17.99999 $CTYPE
        dumpstat=$?
        cat ${CTYPE}.out
      fi

      if [ $dumpstat -ne 0 ]
      then
         msg="data dump failed: $dumpstat"
         postmsg "$jlogfile" "$msg"
      else
        export pgm=sst2dvar_shp
        . prep_step
      
#  run sst2dvshp on dumped bufr data
        echo $CDATE $CTYPE > sst2dvshp.input
        echo $CHKPRT     >> sst2dvshp.input
      
        export XLFUNIT_10="$CTYPE.system"
        export XLFUNIT_31="$FIXsst2dv/sst2dvar_lstags.halfdeg"
        CDATEm1=$($USHutil/finddate.sh $CDATE d-1)
        export XLFUNIT_41="sst2dvar_$CTYPE.$CDATEm1"
        export XLFUNIT_51="sst2dvar_$CTYPE.$CDATE"
      
        startmsg
        $EXECsst2dv/sst2dvar_shp < sst2dvshp.input >> $pgmout 2>errfile
        export err=$?;$USHsst2dv/sst2dvar_errwarn.sh;export err=$?
        err_chk
      fi
    fi
  done
done

#  save insitu files for tomorrows run
if test "$SENDCOM" = 'YES'
then
   for CDATE in $PDYm6 $PDYm5 $PDYm4 $PDYm3 $PDYm2 $PDYm1 $PDY
   do
      for CTYPE in ships dbuoy fbuoy
      do
         cp sst2dvar_$CTYPE.$CDATE $COMOUT/sst2dvar_$CTYPE.$CDATE
         if [ $CTYPE = ships ] ; then
            chgrp rstprod $COMOUT/sst2dvar_$CTYPE.$CDATE
            chmod 640 $COMOUT/sst2dvar_$CTYPE.$CDATE
         fi
      done
   done
fi


##  For each day, check for file for satellite data
# dump and process if missing
#-----------------------------------------------------------------
export DUMP=/nwprod/ush/dumpjb
export FORM=system
export LOUD=off
export CHKPRT=true

#  Hardwired switch between NESDIS and NAVY retrievals follows.
#  Currently set to NAVY retrievals.
CTYPE=sstnvh
#  For each day, check for file
for CDATE in $PDYm6 $PDYm5 $PDYm4 $PDYm3 $PDYm2 $PDYm1 $PDY
do
  #  if file does not exist or has size of zero, get bufr'd data.
  #  always get bufr'd data for yesterday to pick up late obs.
  if  [ ! -s sst2dvar_dsatn19.$CDATE -o ! -s sst2dvar_nsatn19.$CDATE -o $CDATE = $PDY ]
  then

     $DUMP $CDATE\04.35 17.99999 $CTYPE
     dumpstat=$?
     cat ${CTYPE}.out

     if [ $dumpstat -ne 0 ]
     then
        msg="data dump failed: $dumpstat"
        postmsg "$jlogfile" "$msg"
     else
        [ $CTYPE = sstns ] && echo "*** NESDIS SATELLITE RETRIEVALS USED ***"

        export pgm=sst2dvar_sat
        . prep_step

        echo $CDATE $sat_typ > sst2dvsat.input
        echo $CHKPRT     >> sst2dvsat.input

        export XLFUNIT_21="$CTYPE.system"
        export XLFUNIT_23="$FIXsst2dv/sst2dvar_aoi.61.90.clim.halfdeg"
        export XLFUNIT_24="$FIXsst2dv/sst2dvar_stdev2d"
        export XLFUNIT_31="$FIXsst2dv/sst2dvar_lstags.halfdeg"
        CDATEm1=$($USHutil/finddate.sh $CDATE d-1)
        export XLFUNIT_41="sst2dvar_dsatn19.$CDATEm1"
        export XLFUNIT_42="sst2dvar_nsatn19.$CDATEm1"
        export XLFUNIT_51="sst2dvar_dsatn19.$CDATE"
        export XLFUNIT_52="sst2dvar_nsatn19.$CDATE"

        startmsg
        $EXECsst2dv/sst2dvar_sat < sst2dvsat.input >>$pgmout 2>errfile
        export err=$?;$USHsst2dv/sst2dvar_errwarn.sh;export err=$?
        err_chk
     fi
  fi
done

#  save satellite archives for tomorrows run
if test "$SENDCOM" = 'YES'
then
   for CDATE in $PDYm6 $PDYm5 $PDYm4 $PDYm3 $PDYm2 $PDYm1 $PDY
   do
      cp sst2dvar_dsatn19.$CDATE $COMOUT/sst2dvar_dsatn19.$CDATE
      cp sst2dvar_nsatn19.$CDATE $COMOUT/sst2dvar_nsatn19.$CDATE
   done
fi

##  quality control ship and buoy data
export pgm=sst2dvar_insdt
. prep_step

export XLFUNIT_11="$FIXsst2dv/sst2dvar_aoi.61.90.clim.halfdeg"
export XLFUNIT_12="$FIXsst2dv/sst2dvar_stdev2d"
export XLFUNIT_21="sst2dvar_ships.$PDYm6"
export XLFUNIT_22="sst2dvar_ships.$PDYm5"
export XLFUNIT_23="sst2dvar_ships.$PDYm4"
export XLFUNIT_24="sst2dvar_ships.$PDYm3"
export XLFUNIT_25="sst2dvar_ships.$PDYm2"
export XLFUNIT_26="sst2dvar_ships.$PDYm1"
export XLFUNIT_27="sst2dvar_ships.$PDY"
export XLFUNIT_31="sst2dvar_dbuoy.$PDYm6"
export XLFUNIT_32="sst2dvar_dbuoy.$PDYm5"
export XLFUNIT_33="sst2dvar_dbuoy.$PDYm4"
export XLFUNIT_34="sst2dvar_dbuoy.$PDYm3"
export XLFUNIT_35="sst2dvar_dbuoy.$PDYm2"
export XLFUNIT_36="sst2dvar_dbuoy.$PDYm1"
export XLFUNIT_37="sst2dvar_dbuoy.$PDY"
export XLFUNIT_41="sst2dvar_fbuoy.$PDYm6"
export XLFUNIT_42="sst2dvar_fbuoy.$PDYm5"
export XLFUNIT_43="sst2dvar_fbuoy.$PDYm4"
export XLFUNIT_44="sst2dvar_fbuoy.$PDYm3"
export XLFUNIT_45="sst2dvar_fbuoy.$PDYm2"
export XLFUNIT_46="sst2dvar_fbuoy.$PDYm1"
export XLFUNIT_47="sst2dvar_fbuoy.$PDY"
export XLFUNIT_51="buoydat"
export XLFUNIT_52="shipdat"

iyrst=`echo "$PDYm6"|cut -c1-4`
imst=`echo "$PDYm6"|cut -c5-6`
idst=`echo "$PDYm6"|cut -c7-8`
cat <<end_ft05 > sstinsdt.input
$iyrst  $imst  $idst  7   iyrst,imst,idst,ndays  (format free)
$CHKPRT
end_ft05

startmsg
$EXECsst2dv/sst2dvar_insdt < sstinsdt.input >> $pgmout 2>errfile
export err=$?;$USHsst2dv/sst2dvar_errwarn.sh;export err=$?;err_chk

#  form 1-deg buoy, ship and ice super obs for oi analysis
# get ice files that were not available in previous runs from /dcom
#  copy all to /com for tomorrows run if SENDCOM
for CDATE in $PDYm6 $PDYm5 $PDYm4 $PDYm3 $PDYm2 $PDYm1 $PDY
do
  if  [ ! -s sst2dvar_engice.grb.$CDATE ]
  then
    if [ -r ${COM_ENGICE}.${CDATE}/engice.t00z.grb ]
    then
      cp ${COM_ENGICE}.${CDATE}/engice.t00z.grb sst2dvar_engice.grb.$CDATE
      [ $SENDCOM = 'YES' ] && cp sst2dvar_engice.grb.$CDATE $COMOUT/sst2dvar_engice.grb.$CDATE
    fi
  else
    [ $SENDCOM = 'YES' ] && cp sst2dvar_engice.grb.$CDATE $COMOUT/sst2dvar_engice.grb.$CDATE
  fi
done

export pgm=sst2dvar_superins
. prep_step

export XLFUNIT_11="buoydat"
export XLFUNIT_12="shipdat"
export XLFUNIT_27="$FIXsst2dv/seaice_newland"
export XLFUNIT_31="sst2dvar_engice.grb.$PDYm6"
export XLFUNIT_32="sst2dvar_engice.grb.$PDYm5"
export XLFUNIT_33="sst2dvar_engice.grb.$PDYm4"
export XLFUNIT_34="sst2dvar_engice.grb.$PDYm3"
export XLFUNIT_35="sst2dvar_engice.grb.$PDYm2"
export XLFUNIT_36="sst2dvar_engice.grb.$PDYm1"
export XLFUNIT_37="sst2dvar_engice.grb.$PDY"
# SALT.LEVITUS.TOPLAYER must be FORTRAN 77 blocked, IEEE floating-point
export XLFUNIT_41="$FIXsst2dv/sst2dvar_SALT.LEVITUS.TOPLAYER"
export XLFUNIT_51="buoy.grid"
export XLFUNIT_52="ship.grid"
export XLFUNIT_53="ice.grid"
export XLFUNIT_61="buoy.realtime"
export XLFUNIT_62="ship.realtime"
export XLFUNIT_63="ice.realtime"

startmsg
$EXECsst2dv/sst2dvar_superins >> $pgmout 2>errfile
export err=$?;$USHsst2dv/sst2dvar_errwarn.sh;export err=$?;err_chk

##  form 1-deg day and night satellite super obs for oi analysis
export pgm=sst2dvar_supersat
. prep_step

export XLFUNIT_21="buoy.grid"
export XLFUNIT_31="sst2dvar_dsatn19.$PDYm6"
export XLFUNIT_32="sst2dvar_dsatn19.$PDYm5"
export XLFUNIT_33="sst2dvar_dsatn19.$PDYm4"
export XLFUNIT_34="sst2dvar_dsatn19.$PDYm3"
export XLFUNIT_35="sst2dvar_dsatn19.$PDYm2"
export XLFUNIT_36="sst2dvar_dsatn19.$PDYm1"
export XLFUNIT_37="sst2dvar_dsatn19.$PDY"
export XLFUNIT_41="sst2dvar_nsatn19.$PDYm6"
export XLFUNIT_42="sst2dvar_nsatn19.$PDYm5"
export XLFUNIT_43="sst2dvar_nsatn19.$PDYm4"
export XLFUNIT_44="sst2dvar_nsatn19.$PDYm3"
export XLFUNIT_45="sst2dvar_nsatn19.$PDYm2"
export XLFUNIT_46="sst2dvar_nsatn19.$PDYm1"
export XLFUNIT_47="sst2dvar_nsatn19.$PDY"
export XLFUNIT_51="dsatn19.grid"
export XLFUNIT_52="nsatn19.grid"

startmsg
$EXECsst2dv/sst2dvar_supersat >> $pgmout 2>errfile
export err=$?;$USHsst2dv/sst2dvar_errwarn.sh;export err=$?;err_chk

##  create guess from previous analysis and climatology
PREVSST=$COMINm1/sst2dvar_grb_0.5
if [ -s $PREVSST ]
then
  cp $PREVSST prevanal.grb
  err=$?
else
  echo "Yesterday's analysis not available for first guess.  Check past days."
  err=1
  for SDIR in $COMINm2 $COMINm3 $COMINm4 $COMINm5 $COMINm6 $COMINm7
  do
    PREVSST=$SDIR/sst2dvar_grb_0.5
    if [ -s $PREVSST ]
    then
      cp $PREVSST prevanal.grb
      err=$?
      warnSUBJ=JRTGSST
      warnBODY="Today is ${PDY}.  Guess field in oper from ${PREVSST}."
      export warnSUBJ warnBODY
      break
    fi
  done
fi

if [ $err -ne 0 ]
then
  echo #####################################################
  echo #####################################################
  echo   !!!!     NO PREVSST FILE   !!!!
  echo #####################################################
  echo #####################################################
  warnSUBJ=JRTGSST
  warnBODY="Todays date: ${PDY}.  No GUESS.  OPER RTG_SST FAILED"
  export warnSUBJ warnBODY
  err_exit
  exit
fi

export pgm=sst2dvar_adjguess
. prep_step

export XLFUNIT_11="$FIXsst2dv/sst2dvar_aoi.61.90.clim.halfdeg"
export XLFUNIT_12="prevanal.grb"
export XLFUNIT_13="buoy.realtime"
export XLFUNIT_51="guess"
export XLFUNIT_52="climatology"

startmsg
$EXECsst2dv/sst2dvar_adjguess >> $pgmout 2>errfile
export err=$?;$USHsst2dv/sst2dvar_errwarn.sh;export err=$?;err_chk

##  calculate day and night satellite biases
##  remove day and night satellite biases

export pgm=sst2dvar_biascor
. prep_step

export XLFUNIT_11="ship.grid"
export XLFUNIT_12="buoy.grid"
export XLFUNIT_13="ice.grid"
export XLFUNIT_14="dsatn19.grid"
export XLFUNIT_15="nsatn19.grid"
export XLFUNIT_21="sst2dvar_dsatn19.$PDY"
export XLFUNIT_22="sst2dvar_nsatn19.$PDY"
export XLFUNIT_31="$FIXsst2dv/sst2dvar_ls_nas.dat"
export XLFUNIT_41="guess"
export XLFUNIT_51="dsatn19c.realtime"
export XLFUNIT_52="nsatn19c.realtime"
export XLFUNIT_71="one.degree.diag"
export XLFUNIT_74="four.degree.diag"
export XLFUNIT_77="biascor.4deg"
export XLFUNIT_87="weaver"

startmsg
$EXECsst2dv/sst2dvar_biascor >> $pgmout 2>errfile
export err=$?;$USHsst2dv/sst2dvar_errwarn.sh;export err=$?;err_chk

## OI SST analysis
# read super observations and previous analysis (first guess)
# compute a new analysis using optimum interpolation (OI)
# and output the new SST OI analysis on a 1 degree grid

export pgm=sst2dvar_rthranl3
. prep_step

export XLFUNIT_11="nsatn19c.realtime"
export XLFUNIT_12="dsatn19c.realtime"
export XLFUNIT_13="buoy.realtime"
export XLFUNIT_14="ship.realtime"
export XLFUNIT_15="ice.realtime"
export XLFUNIT_16="guess"
export XLFUNIT_21="climatology"
export XLFUNIT_31="$FIXsst2dv/sst2dvar_ls_nas.halfdeg.dat"
export XLFUNIT_41="$FIXsst2dv/sst2dvar_stat0.5"
export XLFUNIT_42="$FIXsst2dv/sst2dvar_IncrAmpGLB0.5"
export XLFUNIT_43="$FIXsst2dv/sst2dvar_SSTgrdntScl.gr"
export XLFUNIT_62="sst2dvgrb1.0"
export XLFUNIT_63="sst2dvgrb0.5"
export XLFUNIT_64="anomlygrb0.5"
export XLFUNIT_65="sst2dvgrb0.5_awips"
export XLFUNIT_71="nsatn19c.realtime.used"
export XLFUNIT_72="dsatn19c.realtime.used"
export XLFUNIT_73="buoy.realtime.used"
export XLFUNIT_74="ship.realtime.used"
export XLFUNIT_75="ice.realtime.used"
export XLFUNIT_87="weaver"

cat <<end_ft05 > rthranl.input
 &CONTR2 LBUOY=T,LSHIP=T,LSTD14=T,LSTN14=T,LICE=T,
         LBUOYCHK=T,LSHIPCHK=T,LSTD14CHK=T,LSTN14CHK=T,LICECHK=T /
end_ft05

startmsg
$EXECsst2dv/sst2dvar_rthranl3 < rthranl.input >> $pgmout 2>errfile
export err=$?;$USHsst2dv/sst2dvar_errwarn.sh;export err=$?;err_chk

$EXECutil/grbindex sst2dvgrb0.5 sst2dvgrb0.5.index 
$EXECutil/grbindex sst2dvgrb0.5_awips sst2dvgrb0.5_awips.index 
$EXECutil/grbindex sst2dvgrb1.0 sst2dvgrb1.0.index 
$EXECutil/grbindex anomlygrb0.5 anomlygrb0.5.index 

################################
# Convert to grib2 format
################################
$EXECutil/cnvgrib -g12 -p40 sst2dvgrb0.5 sst2dvgrb0.5.grib2
$EXECutil/wgrib2 sst2dvgrb0.5.grib2 -s >sst2dvgrb0.5.grib2.idx

if test "$SENDCOM" = 'YES'
then
  cp sst2dvgrb0.5              $COMOUT/sst2dvar_grb_0.5
  cp sst2dvgrb0.5.index        $COMOUT/sst2dvar_grb_0.5.index
  cp sst2dvgrb0.5_awips        $COMOUT/sst2dvar_grb_0.5_awips
  cp sst2dvgrb0.5_awips.index  $COMOUT/sst2dvar_grb_0.5_awips.index
  cp anomlygrb0.5              $COMOUT/anomaly_grb_0.5
  cp anomlygrb0.5.index        $COMOUT/anomaly_grb_0.5.index
  cp sst2dvgrb1.0              $COMOUT/sst2dvar_grb
  cp sst2dvgrb1.0.index        $COMOUT/sst2dvar_grb.index
  cp nsatn19c.realtime.used    $COMOUT/sst2dvar_nsatn19_used.$PDY
  cp dsatn19c.realtime.used    $COMOUT/sst2dvar_dsatn19_used.$PDY
  cp biascor.4deg              $COMOUT/sst2dvar_biascor_4deg.$PDY
  cp buoy.realtime.used        $COMOUT/sst2dvar_buoys_used.$PDY
  cp ship.realtime.used        $COMOUT/sst2dvar_ships_used.$PDY
  chgrp rstprod $COMOUT/sst2dvar_ships_used.$PDY
  chmod 640 $COMOUT/sst2dvar_ships_used.$PDY
  cp ice.realtime.used         $COMOUT/sst2dvar_engice_used.$PDY
  cp sst2dvgrb0.5.grib2        $COMOUT/sst2dvar_grb_0.5.grib2
  cp sst2dvgrb0.5.grib2.idx    $COMOUT/sst2dvar_grb_0.5.grib2.idx

if test "$SENDDBN" = 'YES'
then
  $DBNROOT/bin/dbn_alert MODEL RTG_SST_grib $job $COMOUT/sst2dvar_grb_0.5
  $DBNROOT/bin/dbn_alert MODEL RTG_SST_gribi $job $COMOUT/sst2dvar_grb_0.5.index

  if [ $SENDDBN_GB2 = YES ]
  then

  $DBNROOT/bin/dbn_alert MODEL RTG_SST_grib_GB2 $job $COMOUT/sst2dvar_grb_0.5.grib2
  $DBNROOT/bin/dbn_alert MODEL RTG_SST_grib_GB2_WIDX $job $COMOUT/sst2dvar_grb_0.5.grib2.idx
  fi

else
  echo "SENDDBN=$SENDDBN, files not posted to db_net."
fi

fi

set +x
echo " "
echo "######################################################"
echo " Utility Script to Process WAFS and FOS SST PRODUCTS "
echo "######################################################"
echo " "
set -x

hour=00
sh $USHutil/mkfosrtgsst.sh $NET $hour

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

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