#!/bin/sh
###############################################################################
#                                                                             #
# This script prepares wave_multi_1 derived regional products for             #
#    dissmination.                                                            #
#                                                                             #
# Remarks :                                                                   #
# - Supplemental error output is witten to the wave.log file.                 #
#                                                                             #
#                                                                 Sep 2011    #
# Modified from /nwprod/scripts/exwavewna_pgen.sh.sms                         #
#                                                                             #
###############################################################################
# --------------------------------------------------------------------------- #
# 0.  Preparations
# 0.a Basic modes of operation

  set -xa
  LOUD=`echo ${LOUD:-'YES'} | tr [a-z] [A-Z]`    #  default to echo most command statements.
  [[ "$LOUD" != YES ]] && set +x

  cd $DATA

  [[ "$LOUD" = YES ]] && set -x
  postmsg "$jlogfile" "HAS BEGUN on `hostname`"

  msg="Starting REGIONAL PRODUCTS SCRIPT for $modID"
  postmsg "$jlogfile" "$msg"

  awipsgrib=`echo ${awipsgrib:-'yes'} | tr [A-Z] [a-z]`    #  default to yes
  awipsbull=`echo ${awipsbull:-'yes'} | tr [A-Z] [a-z]`    #  default to yes
  difax=`echo ${difax:-'no'} | tr [A-Z] [a-z]`             #  default to no

# difax is only an option for WNA 00z & 12z 
#  [ "$difax" = 'yes' -a "$modID" != 'wna' ] && difax='no'
#  [ "$difax" = 'yes' -a  \( "$cycle" != t00z -a  "$cycle" != t12z \) ] && difax='no'

# 0.b Date and time stuff

  export date=$PDY
  export YMDH=${PDY}${cyc}

  set +x
  echo ' '
  echo '                         ***************************'
  echo "                         *** $modID PRODUCTS SCRIPT ***"
  echo '                         ***************************'
  echo "                                       $date $cycle"
  echo ' '
  echo "Starting at : `date`"
  echo ' '
  echo "   AWIPS grib fields : $awipsgrib"
  echo "   AWIPS bulletins   : $awipsbull"
  echo "   DIFAX             : $difax"
  echo ' '
  [[ "$LOUD" = YES ]] && set -x

# --------------------------------------------------------------------------- #
# 1.  Get necessary files

  set +x
  echo ' '
  echo 'Preparing input files :'
  echo '-----------------------'
  [[ "$LOUD" = YES ]] && set -x

# 1.a Grib file (AWIPS and FAX charts)

  if [ ! -f gribfile ]
  then
    echo "   Copying gribfile from $COMIN"
    cp $COMIN/multi_1.$modID.$cycle.grib2 gribfile
  fi

  if [ -f gribfile ]
  then
    echo "   gribfile exists."
  else
    msg="ABNORMAL EXIT: NO GRIB FILE"
    postmsg "$jlogfile" "$msg"
    set +x
    echo ' '
    echo '**************************** '
    echo '*** ERROR : NO GRIB FILE *** '
    echo '**************************** '
    echo ' '
    echo "$modID prdgen $date $cycle : GRIB file missing." >> $wavelog
    echo $msg
    [[ "$LOUD" = YES ]] && set -x
    err=1;export err;err_chk
  fi

# 1.b Bulletin files ( AWIPS )

  echo "   Copying bulletins from $COMIN"
  cp $COMIN/$modID.$cycle.cbull_tar cbull.tar

  if [ ! -f cbull.tar ]
  then
    msg="ABNORMAL EXIT: NO BULLETIN TAR FILE"
    postmsg "$jlogfile" "$msg"
    set +x
    echo ' '
    echo '************************************ '
    echo '*** ERROR : NO BULLETIN TAR FILE *** '
    echo '************************************ '
    echo ' '
    echo "$modID prdgen $date $cycle : bulletin tar missing." >> $wavelog
    echo $msg
    [[ "$LOUD" = YES ]] && set -x
    err=2;export err;err_chk
  fi

  echo "   Untarring bulletins ..."
  tar -xf cbull.tar
  OK=$?

  if [ "$OK" = '0' ]
  then
    echo "      Unpacking successfull ..."
    rm -f cbull.tar
  else
    msg="ABNORMAL EXIT: ERROR IN BULLETIN UNTAR"
    postmsg "$jlogfile" "$msg"
    set +x
    echo ' '
    echo '****************************************** '
    echo '*** ERROR : ERROR IN BULLETIN TAR FILE *** '
    echo '****************************************** '
    echo ' '
    echo "$modID prdgen $date $cycle : bulletin untar error." >> $wavelog
    echo $msg
    [[ "$LOUD" = YES ]] && set -x
    err=3;export err;err_chk
  fi

# 1.c Output locations file

  rm -f buoy.loc

  if [ -f $FIXwave/wave_$modID.buoys ]
  then
    cp $FIXwave/wave_$modID.buoys buoy.loc.temp
    sed -n '/^\$.*/!p' buoy.loc.temp > buoy.loc
    rm -f buoy.loc.temp
  fi

  if [ -f buoy.loc ]
  then
    echo "   buoy.loc copied and processed ($FIXwave/wave_$modID.buoys)."
  else
    msg="ABNORMAL EXIT: NO BUOY LOCATION FILE"
    postmsg "$jlogfile" "$msg"
    set +x
    echo ' '
    echo '************************************* '
    echo '*** ERROR : NO BUOY LOCATION FILE *** '
    echo '************************************* '
    echo ' '
    echo "$modID prdgen $date $cycle : buoy location file missing." >> $wavelog
    echo $msg
    [[ "$LOUD" = YES ]] && set -x
    err=4;export err;err_chk
  fi

# 1.d Input template files

  if [ -f $PARMwave/grib2_awips_multi_1.$modID ]
  then
    cp $PARMwave/grib2_awips_multi_1.$modID awipsgrb.data
  fi

  if [ -f awipsgrb.data ]
  then
    echo "   awipsgrb.data copied."
  else
    msg="ABNORMAL EXIT: NO AWIPS GRIB HEADER DATA FILE"
    postmsg "$jlogfile" "$msg"
    set +x
    echo ' '
    echo '*************************************** '
    echo '*** ERROR : NO AWIPS GRIB DATA FILE *** '
    echo '*************************************** '
    echo ' '
    echo "$modID prdgen $date $cycle : GRIB template file missing." >> $wavelog
    echo $msg
    [[ "$LOUD" = YES ]] && set -x
    err=5;export err;err_chk
  fi
    
  if [ -f $PARMwave/bull_awp$modID ]
  then
    cp $PARMwave/bull_awp$modID awipsbull.data
  fi
    
  if [ -f awipsbull.data ]
  then
    echo "   awipsbull.data copied."
  else
    msg="ABNORMAL EXIT: NO AWIPS BULLETIN HEADER DATA FILE"
    postmsg "$jlogfile" "$msg"
    set +x
    echo ' '
    echo '******************************************* '
    echo '*** ERROR : NO AWIPS BULLETIN DATA FILE *** '
    echo '******************************************* '
    echo ' '
    echo "$modID prdgen $date $cycle : Bulletin header data file  missing." >> $wavelog
    echo $msg
    [[ "$LOUD" = YES ]] && set -x
    err=7;export err;err_chk
  fi

# 1.e Fixed and PARM files for graphics products

if [ "$difax" = 'yes' ] 
then

  if [ -f $FIXwave/graph_gmbathy.dat ]
  then
    cp $FIXwave/graph_gmbathy.dat gmbathy.dat
  fi

  for file in gmbathy.dat 
  do
    if [ -f $file ]
    then
      echo "   $file copied."
    else
      msg="ABNORMAL EXIT: FILE $file NOT FOUND"
      postmsg "$jlogfile" "$msg"
      set +x
      echo ' '
      echo '**************************************** '
      echo "*** ERROR : FILE $file NOT FOUND *** "
      echo '**************************************** '
      echo ' '
      echo "$modID prdgen $date $cycle : file $file missing." >> $wavelog
      echo $msg
      [[ "$LOUD" = YES ]] && set -x
      err=6;export err;err_chk
    fi
  done

fi

# 1.f Data summary

  set +x
  echo ' '
  echo '   All data files accounted for.'
  echo ' '
  [[ "$LOUD" = YES ]] && set -x

# --------------------------------------------------------------------------- #
# 2.  AWIPS product generation
# 2.a AWIPS GRIB file with headers

  if [ "$awipsgrib" = 'yes' ]
  then

    set +x
    echo ' '
    echo 'AWIPS headers to GRIB file ...'
    echo '------------------------------'
    [[ "$LOUD" = YES ]] && set -x

# 2.a.1 Set up for tocgrib2

    set +x
    echo "   Do set up for tocgrib2."
    [[ "$LOUD" = YES ]] && set -x

    AWIPSGRB=awipsgrib

# 2.a.2 Make GRIB index

    set +x
    echo "   Make GRIB index for tocgrib2."
    [[ "$LOUD" = YES ]] && set -x

    ${GRBINDEX:-${utilexec}/grb2index} gribfile gribindex
    OK=$?

    if [ "$OK" != '0' ]
    then
      msg="ABNORMAL EXIT: ERROR IN grb2index $modID"
      postmsg "$jlogfile" "$msg"
      set +x
      echo ' '
      echo '******************************************** '
      echo "*** FATAL ERROR : ERROR IN grb2index $modID *** "
      echo '******************************************** '
      echo ' '
      echo "$modID prdgen $date $cycle : error in grbindex." >> $wavelog
      echo $msg
      [[ "$LOUD" = YES ]] && set -x
      err=20;export err;err_chk
    fi

# 2.a.3 Run AWIPS GRIB packing program tocgrib

    set +x
    echo "   Run tocgrib2"
    [[ "$LOUD" = YES ]] && set -x

    export pgm=tocgrib2
    export pgmout=tocgrib2.out
    . prep_step

    export XLFUNIT_11="gribfile"
    export XLFUNIT_31="gribindex"
    export XLFUNIT_51="$AWIPSGRB"

    ${TOCGRIB:-${utilexec}/tocgrib2} < awipsgrb.data parm='KWBJ' > tocgrib2.out 2>&1
    OK=$?

    if [ "$OK" != '0' ]
    then
      cat tocgrib2.out
      msg="ABNORMAL EXIT: ERROR IN tocgrib2"
      postmsg "$jlogfile" "$msg"
      set +x
      echo ' '
      echo '************************************** '
      echo '*** FATAL ERROR : ERROR IN tocgrib2 *** '
      echo '************************************** '
      echo ' '
      echo "$modID prdgen $date $cycle : error in tocgrib2." >> $wavelog
      echo $msg
      [[ "$LOUD" = YES ]] && set -x
      err=21;export err;err_chk
    fi

# 2.a.4 Get the AWIPS grib bulletin out ...
 
    set +x
    echo "   Get awips GRIB bulletins out ..."
    [[ "$LOUD" = YES ]] && set -x

    if [ "$SENDCOM" = 'YES' ]
    then
      echo "      Saving $AWIPSGRB as $AWIPSGRB.$job"
      echo "          in $PCOM"
      cp $AWIPSGRB $PCOM/$AWIPSGRB.$job
    fi

    if [ "$SENDDBN_NTC" = 'YES' ]
    then
      echo "      Sending $AWIPSGRB to DBNET."
      $DBNROOT/bin/dbn_alert GRIB_LOW $NET $job $PCOM/$AWIPSGRB.$job
    fi

    rm -f $AWIPSGRB tocgrib2.out

  fi

# 2.b AWIPS bulletins for output points

  if [ "$awipsbull" = 'yes' ]
  then
      
    set +x
    echo ' '
    echo 'AWIPS bulletins ...'
    echo '-------------------'
    echo '   Sourcing data file with header info ...'
    [[ "$LOUD" = YES ]] && set -x

# 2.b.1 Set up environment variables

    . awipsbull.data

# 2.b.2 Generate list of bulletins to process

    set +x
    echo '   Generating buoy list ...'
    [[ "$LOUD" = YES ]] && set -x

    bulls=`sed -e 's/export b//g' -e 's/=/ /' awipsbull.data | awk '{ print $1}'`

# 2.b.3 Looping over buoys running formbul

    set +x
    echo '   Looping over buoys ...'
    [[ "$LOUD" = YES ]] && set -x

    for bull in $bulls
    do
      bname="b$bull"
      fname="$modID.$bull.cbull"
      oname="awipsbull.$bull.$job"
      headr=`grep "b${bull}=" awipsbull.data | sed 's/=/ /g' |  awk '{ print $3}'`
    
      set +x
      echo "      Processing $bull ($headr $oname) ..."
      [[ "$LOUD" = YES ]] && set -x
    
      if [ -z "$headr" ] || [ ! -s $fname ]
      then
        msg="ABNORMAL EXIT: MISSING BULLETING INFO"
        postmsg "$jlogfile" "$msg"
        set +x
        echo ' '
        echo '******************************************** '
        echo '*** FATAL ERROR : MISSING BULLETING INFO *** '
        echo '******************************************** '
        echo ' '
        echo "$modID prdgen $date $cycle : Missing bulletin data." >> $wavelog
        echo $msg
        [[ "$LOUD" = YES ]] && set -x
        err=22;export err;err_chk
      fi
    
      ${FORMBUL:-${utilscript}/formbul.pl} -d $headr -f $fname -j $job -m $modID \
           -p $PCOM -s NO -o $oname > formbul.out 2>&1

      OK=$?
    
      if [ "$OK" != '0' ]
      then
        cat formbul.out
        msg="ABNORMAL EXIT: ERROR IN formbul"
        postmsg "$jlogfile" "$msg"
        set +x
        echo ' '
        echo '************************************** '
        echo '*** FATAL ERROR : ERROR IN formbul *** '
        echo '************************************** '
        echo ' '
        echo "$modID prdgen $date $cycle : error in formbul." >> $wavelog
        echo $msg
        [[ "$LOUD" = YES ]] && set -x
        err=23;export err;err_chk
      fi
    
      cat $oname >> awipsbull.$job
      rm -f formbul.out $oname
    
    done

    if [ $SENDCOM = "YES" ]
    then
      cp  awipsbull.$job $PCOM/awipsbull.$job
      if [ "$SENDDBN_NTC" = "YES" ]
      then
         ${MAKE_NTC_BULL:-${utilscript}/make_ntc_bull.pl} WMOBH NONE KWBC NONE $DATA/awipsbull.$job $PCOM/awipsbull.$job
      else
#dcs#        if [ ${envir} = "para" ]
        if [ ${envir} = "para" ] || [ ${envir} = "test" ] || [ ${envir} = "dev" ]
        then
           echo "Making NTC bulletin for parallel environment"
           (export SENDDBN=NO; ${MAKE_NTC_BULL:-${utilscript}/make_ntc_bull.pl} WMOBH NONE KWBC NONE $DATA/awipsbull.$job $PCOM/awipsbull.$job)
        fi
      fi
    fi
    
  fi

# --------------------------------------------------------------------------- #
# 3.  Old graphics products

  if [ $difax = "yes" ]
  then

    set +x
    echo ' '
    echo 'Old graphics products ...'
    echo '-------------------------'

# 3.a Convert NWW3 data to AFOS data file.
# 3.a.1 Set-up

    echo "   Make AFOS data file from NWW3 data file ..."
    [[ "$LOUD" = YES ]] && set -x

# 3.a.2 Make GRIB index if necessary

    if [ ! -f gribindex ]
    then
      set +x
      echo "   Make $modID GRIB index for FAX charts."
      [[ "$LOUD" = YES ]] && set -x

      ${GRBINDEX:-${utilexec}/grbindex} gribfile gribindex
      OK=$?

      if [ "$OK" != '0' ]
      then
        msg="ABNORMAL EXIT: ERROR IN grbindex $modID"
        postmsg "$jlogfile" "$msg"
        set +x
        echo ' '
        echo '******************************************** '
        echo "*** FATAL ERROR : ERROR IN grbindex $modID *** "
        echo '******************************************** '
        echo ' '
        echo "$modID prdgen $date $cycle : error in grbindex." >> $wavelog
        echo $msg
        [[ "$LOUD" = YES ]] && set -x
        err=30;export err;err_chk
      fi
    fi

# 3.a.3 Running code to generate AFOS files

    set +x
    echo "      Generate AFOS data files ..."
    [[ "$LOUD" = YES ]] && set -x

    export pgm=wave_gmwvfax
    export pgmout=gmwvfax.out
    . prep_step ; set +x

    export XLFUNIT_10="gmbathy.dat"
    export XLFUNIT_11="gribfile"
    export XLFUNIT_12="gribindex"
    export XLFUNIT_51="afosfax1"
    export XLFUNIT_52="afosfax2"

    echo "$date $cyc" | $EXECwave/graph_gmwvfax > gmwvfax.out 2>&1
    OK=$?

    if [ "$OK" != '0' ] || [ ! -f afosfax1 ] || [ ! -f afosfax2 ]
    then
      cat gmwvfax.out
      msg="ABNORMAL EXIT: ERROR IN gmwvfax"
      postmsg "$jlogfile" "$msg"
      set +x
      echo ' '
      echo '************************************** '
      echo '*** FATAL ERROR : ERROR IN gmwvfax *** '
      echo '************************************** '
      echo ' '
      echo "$modID prdgen $date $cycle : error in gmwvfax." >> $wavelog
      echo $msg
      [[ "$LOUD" = YES ]] && set -x
      err=31;export err;err_chk
    fi

    rm -f gmwvfax.out

# 3.b Convert AFOS data into GMEX GRIB
# 3.b.1 AOFS to GRIB

    set +x
    echo "      Convert GMEX data into GRIB ..."
    [[ "$LOUD" = YES ]] && set -x

    echo "$cyc" > clk
    echo '10'   > inp
    echo '11'   > inp1
    echo "      $YMDH" > ncepdate

    export pgm=wave_gmexgrib
    export pgmout=gmexgrib.out
    . prep_step ; set +x

    export XLFUNIT_14="afosfax1"
    export XLFUNIT_8="inp"
    export XLFUNIT_9="clk"
    export XLFUNIT_10="ncepdate"
    export XLFUNIT_58="gmex.grib"

    $EXECwave/graph_gmexgrib > gmexgrib.out 2>&1
    OK=$?

    if [ "$OK" != '0' ] || [ ! -f gmex.grib ]
    then
      cat gmexgrib.out
      msg="ABNORMAL EXIT: ERROR IN gmexgrib (1)"
      postmsg "$jlogfile" "$msg"
      set +x
      echo ' '
      echo '******************************************* '
      echo '*** FATAL ERROR : ERROR IN gmexgrib (1) *** '
      echo '******************************************* '
      echo ' '
      echo "$modID prdgen $date $cycle : error in gmexgrib (1)." >> $wavelog
      echo $msg
      [[ "$LOUD" = YES ]] && set -x
      err=32;export err;err_chk
    fi

    rm -f gmexgrib.out

    . prep_step ; set +x

    export XLFUNIT_14="afosfax2"
    export XLFUNIT_8="inp1"
    export XLFUNIT_9="clk"
    export XLFUNIT_10="ncepdate"
    export XLFUNIT_58="gmex.moregrib"

    $EXECwave/graph_gmexgrib > gmexgrib.out 2>&1
    OK=$?

    if [ "$OK" != '0' ] || [ ! -f gmex.moregrib ]
    then
      cat gmexgrib.out
      msg="ABNORMAL EXIT: ERROR IN gmexgrib (2)"
      postmsg "$jlogfile" "$msg"
      set +x
      echo ' '
      echo '******************************************* '
      echo '*** FATAL ERROR : ERROR IN gmexgrib (2) *** '
      echo '******************************************* '
      echo ' '
      echo "$modID prdgen $date $cycle : error in gmexgrib (2)." >> $wavelog
      echo $msg
      [[ "$LOUD" = YES ]] && set -x
      err=33;export err;err_chk
    fi

    cat gmex.moregrib >> gmex.grib
    rm -f gmex.moregrib
    rm -f gmexgrib.out


# 3.b.2 Index file

    set +x
    echo '   Make GMEX GRIB index file.'
    [[ "$LOUD" = YES ]] && set -x


    ${GRBINDEX:-${utilexec}/grbindex} gmex.grib gmex.gribindex
    OK=$?
    if [ "$OK" != '0' ]
    then
      msg="ABNORMAL EXIT: ERROR IN grbindex (WAM)"
      postmsg "$jlogfile" "$msg"
      set +x
      echo ' '
      echo '********************************************** '
      echo '*** FATAL ERROR : ERROR IN grbindex (GMEX) *** '
      echo '********************************************** '
      echo ' '
      echo "$modID prdgen $date $cycle : error in grbindex (sec 3.b.2)." >> $wavelog
      echo $msg
      [[ "$LOUD" = YES ]] && set -x
      err=34;export err;err_chk
    fi

# 3.b.3 Save files

    if [ "$SENDCOM" = 'YES' ]
    then
      echo "   Saving grib file as gmex.$cycle.grib"
      echo "                    in $COMOUT."
      cp gmex.grib $COMOUT/gmex.$cycle.grib
    fi

# 3.b.4 Cleanup

    rm -f inp inp1 clk ncepdate
    rm -f afosfax1 afosfax2

  fi

# --------------------------------------------------------------------------- #
# 4.  Clean up

  rm -f gribfile gribindex awipsgrb.data awipsbull.data
  rm -f gmex.grib
  rm -f gmbathy.dat
  rm -f $modID.*.cbull
  rm -f buoy.loc
  rm -f fort.*

# --------------------------------------------------------------------------- #
# 5.  Ending output

  set +x
  echo ' '
  echo ' '
  echo "Ending at : `date`"
  echo ' '
  echo "                 *** End of $modID product generation ***"
  echo ' '
[[ "$LOUD" = YES ]] && set -x
pwd
ls -l

  msg="$job completed normally"
  postmsg "$jlogfile" "$msg"

# End of wave_multi_1 regional product generation script -------------------------------------- #
