#!/bin/ksh
################################################################################
####  UNIX Script Documentation Block
#                      .                                             .
# Script name:         nam_prdgen2.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 GRB5FM (#5) and GRBGRD (#104)
# 2002-07-15  Eric Rogers/Geoff Manikin - added AWP242
# 2003-03-18  Eric Rogers   Changed script to process special hourly
#                           output if variable hswitch is not set to zero
#
# 2005-01-10  Geoff Manikin  Added AWP150
 
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/prdgen2_${fhr}
sh $utilscript/setup.sh

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

if [ $hswitch -ne 0 ] ; then

export pgm=nam_prdgen;. prep_step
export XLFUNIT_10="master2.${fhr}.ctl"
export XLFUNIT_21="$FIXnam/nam_wgt_104"
export XLFUNIT_22="$FIXnam/nam_wgt_242"
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 < input2${fhr}.prd > ${DATA}/prdgen2.out${fhr}
export err=$?;err_chk

if test $SENDCOM = 'YES'
then

    $utilexec/grbindex nam.AWP242${fhr} AWP242i${fhr}
    mv AWP242i${fhr} $COMOUT/${RUN}.${cycle}.awp242i${fhr}
    mv nam.AWP242${fhr} $COMOUT/${RUN}.${cycle}.awp242${fhr}.tm00
    
    $utilexec/cnvgrib -g12 -p40 $COMOUT/${RUN}.${cycle}.awp242${fhr}.tm00 \
      $COMOUT/${RUN}.${cycle}.awp242${fhr}.tm00.grib2
    $utilexec/wgrib2 $COMOUT/${RUN}.${cycle}.awp242${fhr}.tm00.grib2 -s >\
      $COMOUT/${RUN}.${cycle}.awp242${fhr}.tm00.grib2.idx

    $utilexec/grbindex nam.GRBGRD${fhr} GRBGRDi${fhr}
    mv GRBGRDi${fhr} $COMOUT/${RUN}.${cycle}.grbgrdi${fhr}
    mv nam.GRBGRD${fhr} $COMOUT/${RUN}.${cycle}.grbgrd${fhr}.tm00
    
    $utilexec/cnvgrib -g12 -p40 $COMOUT/${RUN}.${cycle}.grbgrd${fhr}.tm00 \
      $COMOUT/${RUN}.${cycle}.grbgrd${fhr}.tm00.grib2
    $utilexec/wgrib2 -s $COMOUT/${RUN}.${cycle}.grbgrd${fhr}.tm00.grib2 >\
      $COMOUT/${RUN}.${cycle}.grbgrd${fhr}.tm00.grib2.idx

    if test $SENDDBN = 'YES'
    then
       $DBNROOT/bin/dbn_alert MODEL NAM_GBGD $job $COMOUT/${RUN}.${cycle}.grbgrd${fhr}.tm00
       $DBNROOT/bin/dbn_alert MODEL NAM_GBGDI $job $COMOUT/${RUN}.${cycle}.grbgrdi${fhr}
       $DBNROOT/bin/dbn_alert MODEL NAM_A242 $job $COMOUT/${RUN}.${cycle}.awp242${fhr}.tm00
       $DBNROOT/bin/dbn_alert MODEL NAM_A242I $job $COMOUT/${RUN}.${cycle}.awp242i${fhr}
       $DBNROOT/bin/dbn_alert MODEL NAM_A242_GB2 $job $COMOUT/${RUN}.${cycle}.awp242${fhr}.tm00.grib2
       $DBNROOT/bin/dbn_alert MODEL NAM_A242_GB2_WIDX $job $COMOUT/${RUN}.${cycle}.awp242${fhr}.tm00.grib2.idx
       $DBNROOT/bin/dbn_alert MODEL NAM_GBGD_GB2 $job $COMOUT/${RUN}.${cycle}.grbgrd${fhr}.tm00.grib2
       $DBNROOT/bin/dbn_alert MODEL NAM_GBGD_GB2_WIDX $job $COMOUT/${RUN}.${cycle}.grbgrd${fhr}.tm00.grib2.idx
    fi
fi

else

export pgm=nam_prdgen;. prep_step
export XLFUNIT_10="master2.${fhr}.ctl"
export XLFUNIT_21="$FIXnam/nam_wgt_005"
export XLFUNIT_22="$FIXnam/nam_wgt_104"
export XLFUNIT_23="$FIXnam/nam_wgt_150"
export XLFUNIT_24="$FIXnam/nam_wgt_242"
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 < input2${fhr}.prd > $DATA/prdgen2.out${fhr}
export err=$?;err_chk

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.AWP150${fhr} AWP150i${fhr}
    let fhr3=fhr-3
    typeset -Z2 fhr3
    #
    # Make sure fhr3 prdgen files are available before
    # proceeding.
    #
    ic=0
    while [ ! -r $COMOUT/${RUN}.${cycle}.awp150${fhr3}.tm00 -o \
            ! -r $COMOUT/${RUN}.${cycle}.awp150i${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 150 processing
                                                                                    
    cp $COMOUT/${RUN}.${cycle}.awp150${fhr3}.tm00 ${fhr}.nam.AWP150${fhr3}
    cp $COMOUT/${RUN}.${cycle}.awp150i${fhr3} ${fhr}.AWP150i${fhr3}
    cp nam.AWP150${fhr} ${fhr}.nam.AWP150${fhr}
    cp AWP150i${fhr} ${fhr}.AWP150i${fhr}
                                                                                    
    export XLFUNIT_13="${fhr}.nam.AWP150${fhr3}"
    export XLFUNIT_14="${fhr}.AWP150i${fhr3}"
    export XLFUNIT_15="${fhr}.nam.AWP150${fhr}"
    export XLFUNIT_16="${fhr}.AWP150i${fhr}"
    export XLFUNIT_50="3precip150.${fhr}"
    export XLFUNIT_51="3cprecip150.${fhr}"
    export XLFUNIT_52="3evap150.${fhr}"
    export XLFUNIT_53="3sfcrun150.${fhr}"
    export XLFUNIT_54="3grdrun150.${fhr}"
    $EXECnam/nam_makeprecip_150 <<EOF>pgmout${fhr}
$fhr $fhr3
EOF
    cat 3precip150.${fhr} >> nam.AWP150${fhr}
    cat 3cprecip150.${fhr} >> nam.AWP150${fhr}
    cat 3evap150.${fhr} >> nam.AWP150${fhr}
    cat 3sfcrun150.${fhr} >> nam.AWP150${fhr}
    cat 3grdrun150.${fhr} >> nam.AWP150${fhr}

$utilexec/grbindex nam.AWP150${fhr} AWP150i${fhr}
mv AWP150i${fhr} $COMOUT/${RUN}.${cycle}.awp150i${fhr}
mv nam.AWP150${fhr} $COMOUT/${RUN}.${cycle}.awp150${fhr}.tm00
                                                                                    
    fi #fhr test
fi # end on-time cycle processing
                                                                                    

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.GRBGRD${fhr} GRBGRDi${fhr}

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

    cp $COMOUT/${RUN}.${cycle}.grbgrd${fhr3}.tm00 ${fhr}.nam.GRBGRD${fhr3}
    cp $COMOUT/${RUN}.${cycle}.grbgrdi${fhr3} ${fhr}.GRBGRDi${fhr3}
    cp nam.GRBGRD${fhr} ${fhr}.nam.GRBGRD${fhr}
    cp GRBGRDi${fhr} ${fhr}.GRBGRDi${fhr}

    export pgm=nam_addprecip;. prep_step
    export XLFUNIT_12="$PARMnam/nam_parmg104"
    export XLFUNIT_13="${fhr}.nam.GRBGRD${fhr3}"
    export XLFUNIT_14="${fhr}.GRBGRDi${fhr3}"
    export XLFUNIT_15="${fhr}.nam.GRBGRD${fhr}"
    export XLFUNIT_16="${fhr}.GRBGRDi${fhr}"
    export XLFUNIT_50="3precip104.${fhr}"
    export XLFUNIT_51="3cprecip104.${fhr}"
    $EXECnam/nam_addprecip <<EOF >> $pgmout 2>errfil 
$fhr $fhr3
EOF
    export err=$?;err_chk

    cat 3precip104.${fhr} >> nam.GRBGRD${fhr}
    cat 3cprecip104.${fhr} >> nam.GRBGRD${fhr}
  fi
fi
# end grid 104 processing

# start grid 242 processing

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.AWP242${fhr} AWP242i${fhr}
    let fhr3=fhr-3
    typeset -Z2 fhr3

    #
    # Make sure fhr3 prdgen files are available before
    # proceeding.
    #
    ic=0
    while [ ! -r $COMOUT/${RUN}.${cycle}.awp242${fhr3}.tm00 -o \
            ! -r $COMOUT/${RUN}.${cycle}.awp242i${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


    cp $COMOUT/${RUN}.${cycle}.awp242${fhr3}.tm00 ${fhr}.nam.AWP242${fhr3}
    cp $COMOUT/${RUN}.${cycle}.awp242i${fhr3} ${fhr}.AWP242i${fhr3}
    cp nam.AWP242${fhr} ${fhr}.nam.AWP242${fhr}
    cp AWP242i${fhr} ${fhr}.AWP242i${fhr}

    export pgm=nam_makeprecip_242;. prep_step
    export XLFUNIT_13="${fhr}.nam.AWP242${fhr3}"
    export XLFUNIT_14="${fhr}.AWP242i${fhr3}"
    export XLFUNIT_15="${fhr}.nam.AWP242${fhr}"
    export XLFUNIT_16="${fhr}.AWP242i${fhr}"
    export XLFUNIT_50="3precip242.${fhr}"
    export XLFUNIT_51="3cprecip242.${fhr}"
    $EXECnam/nam_makeprecip_242 <<EOF >> $pgmout 2>errfil
$fhr $fhr3
EOF
    export err=$?;err_chk

    cat 3precip242.${fhr} >> nam.AWP242${fhr}
    cat 3cprecip242.${fhr} >> nam.AWP242${fhr}

# end grid 242 processing

  fi
fi

# end off-time cycle processing

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

if test $SENDCOM = 'YES'
then

    $utilexec/grbindex nam.GRB5FM${fhr} GRB5FMi${fhr}
    $utilexec/grbindex nam.GRBGRD${fhr} GRBGRDi${fhr}
    $utilexec/grbindex nam.AWP242${fhr} AWP242i${fhr}
    $utilexec/grbindex nam.AWP150${fhr} AWP150i${fhr}

    mv GRB5FMi${fhr} $COMOUT/${RUN}.${cycle}.grb5fmi${fhr}
    mv GRBGRDi${fhr} $COMOUT/${RUN}.${cycle}.grbgrdi${fhr}
    mv AWP242i${fhr} $COMOUT/${RUN}.${cycle}.awp242i${fhr}
    mv AWP150i${fhr} $COMOUT/${RUN}.${cycle}.awp150i${fhr}

    mv nam.GRB5FM${fhr} $COMOUT/${RUN}.${cycle}.grb5fm${fhr}.tm00
    mv nam.GRBGRD${fhr} $COMOUT/${RUN}.${cycle}.grbgrd${fhr}.tm00
    mv nam.AWP242${fhr} $COMOUT/${RUN}.${cycle}.awp242${fhr}.tm00
    mv nam.AWP150${fhr} $COMOUT/${RUN}.${cycle}.awp150${fhr}.tm00

    mv nam.GRBGRD${fhr}.grib2 $COMOUT/${RUN}.${cycle}.grbgrd${fhr}.tm00.grib2
    mv nam.GRB5FM${fhr}.grib2 $COMOUT/${RUN}.${cycle}.grb5fm${fhr}.tm00.grib2
    mv nam.AWP242${fhr}.grib2 $COMOUT/${RUN}.${cycle}.awp242${fhr}.tm00.grib2
    mv nam.GRBGRD${fhr}.grib2.idx $COMOUT/${RUN}.${cycle}.grbgrd${fhr}.tm00.grib2.idx
    mv nam.GRB5FM${fhr}.grib2.idx $COMOUT/${RUN}.${cycle}.grb5fm${fhr}.tm00.grib2.idx
    mv nam.AWP242${fhr}.grib2.idx $COMOUT/${RUN}.${cycle}.awp242${fhr}.tm00.grib2.idx

    if test $SENDDBN = 'YES'
    then

        $DBNROOT/bin/dbn_alert MODEL NAM_GBGD $job $COMOUT/${RUN}.${cycle}.grbgrd${fhr}.tm00
        $DBNROOT/bin/dbn_alert MODEL NAM_GBGDI $job $COMOUT/${RUN}.${cycle}.grbgrdi${fhr}
        $DBNROOT/bin/dbn_alert MODEL NAM_A242 $job $COMOUT/${RUN}.${cycle}.awp242${fhr}.tm00
        $DBNROOT/bin/dbn_alert MODEL NAM_A242I $job $COMOUT/${RUN}.${cycle}.awp242i${fhr}
        $DBNROOT/bin/dbn_alert MODEL NAM_AWP150 $job $COMOUT/${RUN}.${cycle}.awp150${fhr}.tm00
        $DBNROOT/bin/dbn_alert MODEL NAM_AWP150I $job $COMOUT/${RUN}.${cycle}.awp150i${fhr} 
        $DBNROOT/bin/dbn_alert MODEL NAM_GBGD_GB2 $job $COMOUT/${RUN}.${cycle}.grbgrd${fhr}.tm00.grib2
        $DBNROOT/bin/dbn_alert MODEL NAM_GBGD_GB2_WIDX $job $COMOUT/${RUN}.${cycle}.grbgrd${fhr}.tm00.grib2.idx
        $DBNROOT/bin/dbn_alert MODEL NAM_A242_GB2 $job $COMOUT/${RUN}.${cycle}.awp242${fhr}.tm00.grib2
        $DBNROOT/bin/dbn_alert MODEL NAM_A242_GB2_WIDX $job $COMOUT/${RUN}.${cycle}.awp242${fhr}.tm00.grib2.idx

     let sendhr=fhr%6
     if [ $sendhr -eq 0 ]
     then
        $DBNROOT/bin/dbn_alert MODEL NAM_GBG5FM $job $COMOUT/${RUN}.${cycle}.grb5fm${fhr}.tm00
        $DBNROOT/bin/dbn_alert MODEL NAM_GBG5FMI $job $COMOUT/${RUN}.${cycle}.grb5fmi${fhr}
        $DBNROOT/bin/dbn_alert MODEL NAM_GBG5FM_GB2 $job $COMOUT/${RUN}.${cycle}.grb5fm${fhr}.tm00.grib2
        $DBNROOT/bin/dbn_alert MODEL NAM_GBG5FM_GB2_WIDX $job $COMOUT/${RUN}.${cycle}.grb5fm${fhr}.tm00.grib2.idx
     fi
    fi
fi

# end hswitch test
fi

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

echo EXITING $0
exit
