#!/bin/ksh
################################################################################
####  UNIX Script Documentation Block
#                      .                                             .
# Script name:         nam_prdgen1.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 4 separate jobs for
#                             timely nam-12 output. This job creates
#                             files AWP207 (#207), AWP211 (#211), 
#                             AWP217 (#217), AWIP32 (#221), and 221 tiles 
# 2003-03-18  Eric Rogers   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/prdgen1_${fhr}
sh $utilscript/setup.sh

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

if [ $hswitch -ne 0 ] ; then

export pgm=nam_prdgen;. prep_step
export XLFUNIT_10="master1.${fhr}.ctl"
export XLFUNIT_21="$FIXnam/nam_wgt_221"
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 < input1${fhr}.prd > $DATA/prdgen1.out${fhr}
export err=$?;err_chk

if test $SENDCOM = 'YES'
then

  $utilexec/grbindex nam.AWIP32${fhr} AWIP32i${fhr}
  mv AWIP32i${fhr} $COMOUT/${RUN}.${cycle}.awip32i${fhr}
  mv nam.AWIP32${fhr} $COMOUT/${RUN}.${cycle}.awip32${fhr}.tm00

  if test $SENDDBN = 'YES'
  then
   $DBNROOT/bin/dbn_alert MODEL NAM_AW32 $job $COMOUT/${RUN}.${cycle}.awip32${fhr}.tm00
   $DBNROOT/bin/dbn_alert MODEL NAM_AW32I $job $COMOUT/${RUN}.${cycle}.awip32i${fhr}
  fi

fi

else

export pgm=nam_prdgen;. prep_step
export XLFUNIT_10="master1.${fhr}.ctl"
export XLFUNIT_21="$FIXnam/nam_wgt_207"
export XLFUNIT_22="$FIXnam/nam_wgt_211"
export XLFUNIT_23="$FIXnam/nam_wgt_217"
export XLFUNIT_24="$FIXnam/nam_wgt_221"
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 < input1${fhr}.prd > $DATA/prdgen1.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.AWP217${fhr} AWP217i${fhr}
    let fhr3=fhr-3
    typeset -Z2 fhr3
    #
    # Make sure fhr3 prdgen files are available before
    # proceeding.
    #
    ic=0
    while [ ! -r $COMOUT/${RUN}.${cycle}.awp217i${fhr3} -o \
            ! -r $COMOUT/${RUN}.${cycle}.awp217${fhr3}.tm00 ] ; 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

    cp $COMOUT/${RUN}.${cycle}.awp217${fhr3}.tm00 ${fhr}.nam.AWP217${fhr3}
    cp $COMOUT/${RUN}.${cycle}.awp217i${fhr3} ${fhr}.AWP217i${fhr3}.tm00
    cp nam.AWP217${fhr} ${fhr}.nam.AWP217${fhr}
    cp AWP217i${fhr} ${fhr}.AWP217i${fhr}.tm00

    export pgm=nam_makeprecip_217;. prep_step
    export XLFUNIT_13="${fhr}.nam.AWP217${fhr3}"
    export XLFUNIT_14="${fhr}.AWP217i${fhr3}.tm00"
    export XLFUNIT_15="${fhr}.nam.AWP217${fhr}"
    export XLFUNIT_16="${fhr}.AWP217i${fhr}.tm00"
    export XLFUNIT_50="3precip217.${fhr}"
    export XLFUNIT_51="3cprecip217.${fhr}"
    export XLFUNIT_52="3sprecip217.${fhr}"
    $EXECnam/nam_makeprecip_217 <<EOF >>$pgmout 2>errfil
$fhr $fhr3
EOF
    export err=$?;err_chk

    cat 3precip217.${fhr} >> nam.AWP217${fhr}
    cat 3cprecip217.${fhr} >> nam.AWP217${fhr}
    cat 3sprecip217.${fhr} >> nam.AWP217${fhr}
  fi
fi

if [ $cyc -eq 06 -o $cyc -eq 18 ] ; then
  let preciphr=fhr%6
  if [ $fhr -ne 00 -a $preciphr -eq 0 ] ; then
    $utilexec/grbindex nam.AWIP32${fhr} AWIP32i${fhr}

    let fhr3=fhr-3
    typeset -Z2 fhr3
    #
    # Make sure fhr3 prdgen files are available before
    # proceeding.
    #
    ic=0
    while [ ! -r $COMOUT/${RUN}.${cycle}.awip32i${fhr3} -o ! -r $COMOUT/${RUN}.${cycle}.awip32${fhr3}.tm00 ] ; 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 221 processing

    cp $COMOUT/${RUN}.${cycle}.awip32${fhr3}.tm00 ${fhr}.nam.AWIP32${fhr3}
    cp $COMOUT/${RUN}.${cycle}.awip32i${fhr3} ${fhr}.AWIP32i${fhr3}
    cp nam.AWIP32${fhr} ${fhr}.nam.AWIP32${fhr}
    cp AWIP32i${fhr} ${fhr}.AWIP32i${fhr}

    export pgm=nam_addprecip;. prep_step
    export XLFUNIT_12="$PARMnam/nam_parmg221"
    export XLFUNIT_13="${fhr}.nam.AWIP32${fhr3}"
    export XLFUNIT_14="${fhr}.AWIP32i${fhr3}"
    export XLFUNIT_15="${fhr}.nam.AWIP32${fhr}"
    export XLFUNIT_16="${fhr}.AWIP32i${fhr}"
    export XLFUNIT_50="3precip221.${fhr}"
    export XLFUNIT_51="3cprecip221.${fhr}"
    $EXECnam/nam_addprecip <<EOF >> $pgmout 2>errfil 
$fhr $fhr3
EOF
    export err=$?;err_chk

    cat 3precip221.${fhr} >> nam.AWIP32${fhr}
    cat 3cprecip221.${fhr} >> nam.AWIP32${fhr}

# end grid 221 processing

  fi
fi
# end off-time cycle processing

############################
# Convert to grib2 format
# for 3-hourly products only
#############################
$CNVGRIB -g12 -p40 nam.AWIP32${fhr} nam.AWIP32${fhr}.grib2
$WGRIB2 nam.AWIP32${fhr}.grib2 -s >nam.AWIP32${fhr}.grib2.idx
$CNVGRIB -g12 -p40 nam.AWP211${fhr} nam.AWP211${fhr}.grib2
$WGRIB2 nam.AWP211${fhr}.grib2 -s >nam.AWP211${fhr}.grib2.idx
$CNVGRIB -g12 -p40 nam.AWP217${fhr} nam.AWP217${fhr}.grib2
$WGRIB2 nam.AWP217${fhr}.grib2 -s >nam.AWP217${fhr}.grib2.idx

if test $SENDCOM = 'YES'
then
    $utilexec/grbindex nam.AWIP32${fhr} AWIP32i${fhr}
    $utilexec/grbindex nam.AWP217${fhr} AWP217i${fhr}
    $utilexec/grbindex nam.AWP207${fhr} AWP207i${fhr}
    $utilexec/grbindex nam.AWP211${fhr} AWP211i${fhr}

    mv AWIP32i${fhr} $COMOUT/${RUN}.${cycle}.awip32i${fhr}
    mv AWP217i${fhr} $COMOUT/${RUN}.${cycle}.awp217i${fhr}
    mv AWP207i${fhr} $COMOUT/${RUN}.${cycle}.awp207i${fhr}
    mv AWP211i${fhr} $COMOUT/${RUN}.${cycle}.awp211i${fhr}

    mv nam.AWP207${fhr} $COMOUT/${RUN}.${cycle}.awp207${fhr}.tm00
    mv nam.AWP211${fhr} $COMOUT/${RUN}.${cycle}.awp211${fhr}.tm00
    mv nam.AWP217${fhr} $COMOUT/${RUN}.${cycle}.awp217${fhr}.tm00
    mv nam.AWIP32${fhr} $COMOUT/${RUN}.${cycle}.awip32${fhr}.tm00

    mv nam.AWIP32${fhr}.grib2 $COMOUT/${RUN}.${cycle}.awip32${fhr}.tm00.grib2
    mv nam.AWP211${fhr}.grib2 $COMOUT/${RUN}.${cycle}.awp211${fhr}.tm00.grib2
    mv nam.AWP217${fhr}.grib2 $COMOUT/${RUN}.${cycle}.awp217${fhr}.tm00.grib2
    mv nam.AWIP32${fhr}.grib2.idx $COMOUT/${RUN}.${cycle}.awip32${fhr}.tm00.grib2.idx
    mv nam.AWP211${fhr}.grib2.idx $COMOUT/${RUN}.${cycle}.awp211${fhr}.tm00.grib2.idx
    mv nam.AWP217${fhr}.grib2.idx $COMOUT/${RUN}.${cycle}.awp217${fhr}.tm00.grib2.idx

    if test $SENDDBN = 'YES'
    then
     $DBNROOT/bin/dbn_alert MODEL NAM_AW32 $job $COMOUT/${RUN}.${cycle}.awip32${fhr}.tm00
     $DBNROOT/bin/dbn_alert MODEL NAM_AW32I $job $COMOUT/${RUN}.${cycle}.awip32i${fhr}
     $DBNROOT/bin/dbn_alert MODEL NAM_AW217 $job $COMOUT/${RUN}.${cycle}.awp217${fhr}.tm00
     $DBNROOT/bin/dbn_alert MODEL NAM_AW217I $job $COMOUT/${RUN}.${cycle}.awp217i${fhr}

     $DBNROOT/bin/dbn_alert MODEL NAM_AW32_GB2 $job $COMOUT/${RUN}.${cycle}.awip32${fhr}.tm00.grib2
     $DBNROOT/bin/dbn_alert MODEL NAM_AW32_GB2_WIDX $job $COMOUT/${RUN}.${cycle}.awip32${fhr}.tm00.grib2.idx
     $DBNROOT/bin/dbn_alert MODEL NAM_AW217_GB2 $job $COMOUT/${RUN}.${cycle}.awp217${fhr}.tm00.grib2
     $DBNROOT/bin/dbn_alert MODEL NAM_AW217_GB2_WIDX $job $COMOUT/${RUN}.${cycle}.awp217${fhr}.tm00.grib2.idx

     let sendhr=fhr%6
     if [ $sendhr -eq 0 ]
     then
        $DBNROOT/bin/dbn_alert MODEL NAM_AW211 $job $COMOUT/${RUN}.${cycle}.awp211${fhr}.tm00
        $DBNROOT/bin/dbn_alert MODEL NAM_AW211I $job $COMOUT/${RUN}.${cycle}.awp211i${fhr}
        $DBNROOT/bin/dbn_alert MODEL NAM_AW207 $job $COMOUT/${RUN}.${cycle}.awp207${fhr}.tm00
        $DBNROOT/bin/dbn_alert MODEL NAM_AW207I $job $COMOUT/${RUN}.${cycle}.awp207i${fhr}

        $DBNROOT/bin/dbn_alert MODEL NAM_AW211_GB2 $job $COMOUT/${RUN}.${cycle}.awp211${fhr}.tm00.grib2
        $DBNROOT/bin/dbn_alert MODEL NAM_AW211_GB2_WIDX $job $COMOUT/${RUN}.${cycle}.awp211${fhr}.tm00.grib2.idx
     fi
    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 36 ] ; do
    mv nam.AWIP32${fhr}.${tile} $COMOUT/tiles.${cycle}/${RUN}.${cycle}.awip32${fhr}.${tile}
    let tile=tile+1
  done
  echo ${COMOUT}/tiles.${cycle} > ${COMOUT}/tiles.${cycle}/tileloc

# 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 - *awip32${fhr}.?? | /usr/bin/gzip > ../nam.${cycle}.awip32tiles_f${fhr}.tar.gz

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

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

      cd $DATA/prdgen1_${fhr}
      tar -cf - *awip32${fhr}.??.grib2 | /usr/bin/gzip > $COMOUT/nam.${cycle}.awip32tiles_f${fhr}.grib2.tar.gz;
      tar -cf - *awip32${fhr}.??.grib2.idx | /usr/bin/gzip > $COMOUT/nam.${cycle}.awip32tiles_f${fhr}.grib2.idx.tar.gz
       
      if [ $SENDDBN = YES ]
      then
        $DBNROOT/bin/dbn_alert MODEL NAM_TILE_TAR32_GB2 $job $COMOUT/nam.${cycle}.awip32tiles_f${fhr}.grib2.tar.gz
        $DBNROOT/bin/dbn_alert MODEL NAM_TILE_TAR32_GB2_WIDX $job $COMOUT/nam.${cycle}.awip32tiles_f${fhr}.grib2.idx.tar.gz
      fi 
    fi
  fi
fi

# end hswitch test
fi

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

echo EXITING $0
exit
