#!/bin/ksh
################################################################################
####  UNIX Script Documentation Block
#                      .                                             .
# Script name:         nam_prdgen5.sh
# Script description:  Run nam product generator jobs
#
# Author:        Eric Rogers       Org: NP22         Date: 1999-06-23
#
# Abstract: This script runs the Nam PRDGEN jobs
#
# Script history log:
# 1999-06-23  Eric Rogers
# 1999-08-25  Brent Gordon  Pulled the PRDGEN here file out of the post
#                           jobs into this script.
# 2001-10-23  Eric Rogers   Changes for nam-12
#                           - Use one master control file only
#                           - Split up prdgen into 5 separate jobs for
#                             timely nam-12 output. This job processes
#                             grids AWPHYS (#218)
# 2002-01-04  Eric Rogers   Added special 12 km grid (#251) for Salt
#                           Lake City Olympic Support
# 2002-03-19  Eric Rogers   Removed special 12 km grid (#251) for Salt
#                           Lake City Olympic Support
# 2003-03-18  Eric Rogers   Added 1/8 lat/lon CONUS grid #110 (LDAS grid);
#                           changed script to process special hourly
#                           output if variable hswitch is not set to zero
#

set -x

export CNVGRIB=/nwprod/util/exec/cnvgrib
export WGRIB2=/nwprod/util/exec/wgrib2

export fhr=$1
export hswitch=$2
export PS4='PRDGEN${fhr}_T$SECONDS + '

cd $DATA/prdgen5_${fhr}
sh $utilscript/setup.sh

cat >input5${fhr}.prd <<EOF5
$DATA/BGDAWP${fhr}.tm00
EOF5

if [ $hswitch -ne 0 ] ; then

export pgm=nam_prdgen;. prep_step
export XLFUNIT_10="master5.${fhr}.ctl"
export XLFUNIT_21="$FIXnam/nam_wgt_110"
export XLFUNIT_22="$FIXnam/nam_wgt_218"
export XLFUNIT_41="$PARMnam/nam_kwbx.tbl"
export XLFUNIT_42="$PARMnam/nam_time.tbl"
export XLFUNIT_43="$PARMnam/nam_parm.tbl"
export XLFUNIT_44="$PARMnam/nam_grid.tbl"
export XLFUNIT_45="$PARMnam/nam_levl.tbl"
$EXECnam/nam_prdgen < input5${fhr}.prd > $DATA/prdgen5.out${fhr}
export err=$?;err_chk

#  Make GRIB2 version of 218
$utilexec/cnvgrib -g12 -p40000 nam.AWPHYS${fhr} nam.AWPHYS${fhr}.grb2

if test $SENDCOM = 'YES'
then

    $utilexec/grbindex nam.AWPHYS${fhr} AWPHYSi${fhr}
    $utilexec/grbindex nam.AWLDAS${fhr} AWLDASi${fhr}
    $utilexec/wgrib2 nam.AWPHYS${fhr}.grb2 -s > nam.AWPHYS${fhr}.grb2.idx

    mv AWPHYSi${fhr} $COMOUT/${RUN}.${cycle}.awphysi${fhr}
    mv AWLDASi${fhr} $COMOUT/${RUN}.${cycle}.awldasi${fhr}
    mv nam.AWPHYS${fhr} $COMOUT/${RUN}.${cycle}.awphys${fhr}.tm00
    mv nam.AWLDAS${fhr} $COMOUT/${RUN}.${cycle}.awldas${fhr}.tm00

    mv nam.AWPHYS${fhr}.grb2 $COMOUT/${RUN}.${cycle}.awphys${fhr}.grb2.tm00
    mv nam.AWPHYS${fhr}.grb2.idx $COMOUT/${RUN}.${cycle}.awphys${fhr}.grb2.tm00.idx

    if test $SENDDBN = 'YES'
    then
#      $DBNROOT/bin/dbn_alert MODEL NAM_AWHY $job $COMOUT/${RUN}.${cycle}.awphys${fhr}.tm00
#      $DBNROOT/bin/dbn_alert MODEL NAM_AWHYI $job $COMOUT/${RUN}.${cycle}.awphysi${fhr}.tm00
      $DBNROOT/bin/dbn_alert MODEL NAM_AWLD $job $COMOUT/${RUN}.${cycle}.awldas${fhr}.tm00
      $DBNROOT/bin/dbn_alert MODEL NAM_AWLDI $job $COMOUT/${RUN}.${cycle}.awldasi${fhr}
      $DBNROOT/bin/dbn_alert MODEL NAM_218_GB2 $job $COMOUT/${RUN}.${cycle}.awphys${fhr}.grb2.tm00
      $DBNROOT/bin/dbn_alert MODEL NAM_218_GB2_WIDX $job $COMOUT/${RUN}.${cycle}.awphys${fhr}.grb2.tm00.idx
    fi
fi

if [ $SENDCOM = "YES" ] ; then
  tile=1
  typeset -Z2 tile
  if [ ! -d $COMOUT/tiles.${cycle} ] ; then
    mkdir -p $COMOUT/tiles.${cycle}
  fi
  while [ $tile -le 54 ] ; do
    mv nam.AWPHYS${fhr}.${tile} $COMOUT/tiles.${cycle}/${RUN}.${cycle}.awip218${fhr}.${tile}
    let tile=tile+1
  done
  echo ${COMOUT}/tiles.${cycle} > ${COMOUT}/tiles.${cycle}/tileloc218

# Tar and gzip the individual tiles
  cd ${COMOUT}/tiles.${cycle}
  if [ fhr%3 -eq 0 ] ; then
    if [ cyc%12 -eq 0 -o $fhr -le 84 ] ; then
      
      tar -cf - *awip218${fhr}.?? | /usr/bin/gzip > ../nam.${cycle}.awip218tiles_f${fhr}.tar.gz

      if test "$SENDDBN" = 'YES'
      then
        $DBNROOT/bin/dbn_alert MODEL NAM_TILE_TAR12 $job $COMOUT/nam.${cycle}.awip218tiles_f${fhr}.tar.gz
      fi

      # Conver to grib2 format:
      for fil in `ls *awip218${fhr}*`
      do
         $CNVGRIB -g12 -p40 ${fil} $DATA/prdgen5_${fhr}/${fil}.grib2
         $WGRIB2 $DATA/prdgen5_${fhr}/${fil}.grib2 -s >$DATA/prdgen5_${fhr}/${fil}.grib2.idx
      done

      cd $DATA/prdgen5_${fhr}
      tar -cf - *awip218${fhr}.??.grib2 | /usr/bin/gzip > $COMOUT/nam.${cycle}.awip218tiles_f${fhr}.grib2.tar.gz
      tar -cf - *awip218${fhr}.??.grib2.idx | /usr/bin/gzip > $COMOUT/nam.${cycle}.awip218tiles_f${fhr}.grib2.idx.tar.gz 

      if [ $SENDDBN = YES ]
      then
        $DBNROOT/bin/dbn_alert MODEL NAM_TILE_TAR12_GB2 $job $COMOUT/nam.${cycle}.awip218tiles_f${fhr}.grib2.tar.gz
        $DBNROOT/bin/dbn_alert MODEL NAM_TILE_TAR12_GB2_WIDX $job $COMOUT/nam.${cycle}.awip218tiles_f${fhr}.grib2.idx.tar.gz

      fi 
    fi 
  fi
fi

else # hswitch

export pgm=nam_prdgen;. prep_step
export XLFUNIT_10="master5.${fhr}.ctl"
export XLFUNIT_21="$FIXnam/nam_wgt_110"
export XLFUNIT_22="$FIXnam/nam_wgt_218"
export XLFUNIT_41="$PARMnam/nam_kwbx.tbl"
export XLFUNIT_42="$PARMnam/nam_time.tbl"
export XLFUNIT_43="$PARMnam/nam_parm.tbl"
export XLFUNIT_44="$PARMnam/nam_grid.tbl"
export XLFUNIT_45="$PARMnam/nam_levl.tbl"
$EXECnam/nam_prdgen < input5${fhr}.prd > $DATA/prdgen5.out${fhr}
export err=$?;err_chk


#######################################################
# Generate 3-hour precip for on-time runs.
#######################################################
if [ $cyc -eq 00 -o $cyc -eq 12 ] ; then
  if [ $fhr -ne 00 -a $fhr -ne 03 -a $fhr -ne 15 -a $fhr -ne 27 -a \
       $fhr -ne 39 -a $fhr -ne 51 -a $fhr -ne 63 -a $fhr -ne 75 ] ; then
    $utilexec/grbindex nam.AWPHYS${fhr} AWPHYSi${fhr}
    let fhr3=fhr-3
    typeset -Z2 fhr3
    #
    # Make sure fhr3 prdgen files are available before
    # proceeding.
    #
    ic=0
    while [ ! -r $COMOUT/${RUN}.${cycle}.awphys${fhr3}.tm00 -o \
            ! -r $COMOUT/${RUN}.${cycle}.awphysi${fhr3} ] ; do
      let ic=ic+1
      if [ $ic -gt 60 ] ; then
        err_exit "F$fhr PRDGEN GIVING UP AFTER 15 MINUTES WAITING FOR F$fhr3 files"
      fi
      sleep 15
    done

# start grid 218 processing

    cp $COMOUT/${RUN}.${cycle}.awphys${fhr3}.tm00 ${fhr}.nam.AWPHYS${fhr3}
    cp $COMOUT/${RUN}.${cycle}.awphysi${fhr3} ${fhr}.AWPHYSi${fhr3}
    cp nam.AWPHYS${fhr} ${fhr}.nam.AWPHYS${fhr}
    cp AWPHYSi${fhr} ${fhr}.AWPHYSi${fhr}

    export pgm=nam_makeprecip_218;. prep_step
    export XLFUNIT_13="${fhr}.nam.AWPHYS${fhr3}"
    export XLFUNIT_14="${fhr}.AWPHYSi${fhr3}"
    export XLFUNIT_15="${fhr}.nam.AWPHYS${fhr}"
    export XLFUNIT_16="${fhr}.AWPHYSi${fhr}"
    export XLFUNIT_50="3precip218.${fhr}"
    export XLFUNIT_51="3cprecip218.${fhr}"
    $EXECnam/nam_makeprecip_218 <<EOF>>$pgmout 2>errfil
$fhr $fhr3
EOF
    export err=$?;err_chk

    cat 3precip218.${fhr} >> nam.AWPHYS${fhr}
    cat 3cprecip218.${fhr} >> nam.AWPHYS${fhr}

  fi # fhr test

fi # end on-time cycle processing

#  Make GRIB2 version of 218 
$utilexec/cnvgrib -g12 -p40000 nam.AWPHYS${fhr} nam.AWPHYS${fhr}.grb2

if test $SENDCOM = 'YES'
then

    $utilexec/grbindex nam.AWPHYS${fhr} AWPHYSi${fhr}
    $utilexec/grbindex nam.AWLDAS${fhr} AWLDASi${fhr}
    $utilexec/wgrib2 nam.AWPHYS${fhr}.grb2 -s > nam.AWPHYS${fhr}.grb2.idx

    mv AWPHYSi${fhr} $COMOUT/${RUN}.${cycle}.awphysi${fhr}
    mv AWLDASi${fhr} $COMOUT/${RUN}.${cycle}.awldasi${fhr}
    mv nam.AWPHYS${fhr} $COMOUT/${RUN}.${cycle}.awphys${fhr}.tm00
    mv nam.AWLDAS${fhr} $COMOUT/${RUN}.${cycle}.awldas${fhr}.tm00

    mv nam.AWPHYS${fhr}.grb2 $COMOUT/${RUN}.${cycle}.awphys${fhr}.grb2.tm00
    mv nam.AWPHYS${fhr}.grb2.idx $COMOUT/${RUN}.${cycle}.awphys${fhr}.grb2.tm00.idx

    if test $SENDDBN = 'YES'
    then
#      $DBNROOT/bin/dbn_alert MODEL NAM_AWHY $job $COMOUT/${RUN}.${cycle}.awphys${fhr}.tm00
#      $DBNROOT/bin/dbn_alert MODEL NAM_AWHYI $job $COMOUT/${RUN}.${cycle}.awphysi${fhr}.tm00
      $DBNROOT/bin/dbn_alert MODEL NAM_AWLD $job $COMOUT/${RUN}.${cycle}.awldas${fhr}.tm00
      $DBNROOT/bin/dbn_alert MODEL NAM_AWLDI $job $COMOUT/${RUN}.${cycle}.awldasi${fhr}.tm00
      $DBNROOT/bin/dbn_alert MODEL NAM_218_GB2 $job $COMOUT/${RUN}.${cycle}.awphys${fhr}.grb2.tm00
      $DBNROOT/bin/dbn_alert MODEL NAM_218_GB2_WIDX $job $COMOUT/${RUN}.${cycle}.awphys${fhr}.grb2.tm00.idx
    fi
fi

if [ $SENDCOM = "YES" ] ; then
  tile=1
  typeset -Z2 tile
  if [ ! -d $COMOUT/tiles.${cycle} ] ; then
    mkdir -p $COMOUT/tiles.${cycle}
  fi
  while [ $tile -le 54 ] ; do
    mv nam.AWPHYS${fhr}.${tile} $COMOUT/tiles.${cycle}/${RUN}.${cycle}.awip218${fhr}.${tile}
    let tile=tile+1
  done
  echo ${COMOUT}/tiles.${cycle} > ${COMOUT}/tiles.${cycle}/tileloc218

# Tar and gzip the individual tiles
  cd ${COMOUT}/tiles.${cycle}
  if [ fhr%3 -eq 0 ] ; then
    if [ cyc%12 -eq 0 -o $fhr -le 84 ] ; then
      
      tar -cf - *awip218${fhr}* | /usr/bin/gzip > ../nam.${cycle}.awip218tiles_f${fhr}.tar.gz

      if test "$SENDDBN" = 'YES'
      then
        $DBNROOT/bin/dbn_alert MODEL NAM_TILE_TAR12 $job $COMOUT/nam.${cycle}.awip218tiles_f${fhr}.tar.gz
      fi

     # Conver to grib2 format:
      for fil in `ls *awip218${fhr}*`
      do
         $CNVGRIB -g12 -p40 ${fil} $DATA/prdgen5_${fhr}/${fil}.grib2
         $WGRIB2 $DATA/prdgen5_${fhr}/${fil}.grib2 -s >$DATA/prdgen5_${fhr}/${fil}.grib2.idx
      done

      cd $DATA/prdgen5_${fhr}
      tar -cf - *awip218${fhr}.??.grib2 | /usr/bin/gzip > $COMOUT/nam.${cycle}.awip218tiles_f${fhr}.grib2.tar.gz
      tar -cf - *awip218${fhr}.??.grib2.idx | /usr/bin/gzip > $COMOUT/nam.${cycle}.awip218tiles_f${fhr}.grib2.idx.tar.gz 

      if [ $SENDDBN = YES ]
      then
        $DBNROOT/bin/dbn_alert MODEL NAM_TILE_TAR12_GB2 $job $COMOUT/nam.${cycle}.awip218tiles_f${fhr}.grib2.tar.gz
        $DBNROOT/bin/dbn_alert MODEL NAM_TILE_TAR12_GB2_WIDX $job $COMOUT/nam.${cycle}.awip218tiles_f${fhr}.grib2.idx.tar.gz
      fi 

    fi
  fi
fi


# end hswitch test
fi

if test "$SENDSMS" = 'YES'
then
  $SMSBIN/setev post_5_complete
fi

echo EXITING $0
 exit
