#!/bin/ksh
################################################################################
####  UNIX Script Documentation Block
#                      .                                             .
# Script name:         nam_prdgen3.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 AWIP3D (#212), AWIP20 (#215), AWIPAK (#216),
#                             AWP237 (#237), and AWIPHI (#243)
# 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/prdgen3_${fhr}
sh $utilscript/setup.sh

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

if [ $hswitch -ne 0 ] ; then

export pgm=nam_prdgen;. prep_step
export XLFUNIT_10="master3.${fhr}.ctl"
export XLFUNIT_21="$FIXnam/nam_wgt_212"
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 < input3${fhr}.prd > $DATA/prdgen3.out${fhr}
export err=$?;err_chk

if test $SENDCOM = 'YES'
then
    $utilexec/grbindex meso.AWIP3D${fhr} AWIP3Di${fhr}
    mv AWIP3Di${fhr} $COMOUT/${RUN}.${cycle}.awip3di${fhr}.tm00
    mv meso.AWIP3D${fhr} $COMOUT/${RUN}.${cycle}.awip3d${fhr}.tm00

    if test $SENDDBN = 'YES'
    then
     $DBNROOT/bin/dbn_alert MODEL NAM_AW3D $job $COMOUT/${RUN}.${cycle}.awip3d${fhr}.tm00
     $DBNROOT/bin/dbn_alert MODEL NAM_AW3DI $job $COMOUT/${RUN}.${cycle}.awip3di${fhr}.tm00
    fi
fi

else

export pgm=nam_prdgen;. prep_step
export XLFUNIT_10="master3.${fhr}.ctl"
export XLFUNIT_21="$FIXnam/nam_wgt_212"
export XLFUNIT_22="$FIXnam/nam_wgt_215"
export XLFUNIT_23="$FIXnam/nam_wgt_216"
export XLFUNIT_24="$FIXnam/nam_wgt_237"
export XLFUNIT_25="$FIXnam/nam_wgt_243"
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 < input3${fhr}.prd > $DATA/prdgen3.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 meso.AWIP3D${fhr} AWIP3Di${fhr}.tm00
    $utilexec/grbindex meso.AWIP20${fhr} AWIP20i${fhr}.tm00
    let fhr3=fhr-3
    typeset -Z2 fhr3
    #
    # Make sure fhr3 prdgen files are available before
    # proceeding.
    #
    ic=0
    while [ ! -r $COMOUT/${RUN}.${cycle}.awip3di${fhr3}.tm00 -o \
            ! -r $COMOUT/${RUN}.${cycle}.awip20i${fhr3}.tm00 -o \
            ! -r $COMOUT/${RUN}.${cycle}.awip20${fhr3}.tm00 -o \
            ! -r $COMOUT/${RUN}.${cycle}.awip3d${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 212 processing

    cp $COMOUT/${RUN}.${cycle}.awip3d${fhr3}.tm00 ${fhr}.meso.AWIP3D${fhr3}
    cp $COMOUT/${RUN}.${cycle}.awip3di${fhr3}.tm00 ${fhr}.AWIP3Di${fhr3}.tm00
    cp meso.AWIP3D${fhr} ${fhr}.meso.AWIP3D${fhr}
    cp AWIP3Di${fhr}.tm00 ${fhr}.AWIP3Di${fhr}.tm00

    export pgm=nam_makeprecip_212;. prep_step
    export XLFUNIT_13="${fhr}.meso.AWIP3D${fhr3}"
    export XLFUNIT_14="${fhr}.AWIP3Di${fhr3}.tm00"
    export XLFUNIT_15="${fhr}.meso.AWIP3D${fhr}"
    export XLFUNIT_16="${fhr}.AWIP3Di${fhr}.tm00"
    export XLFUNIT_50="3precip212.${fhr}"
    export XLFUNIT_51="3cprecip212.${fhr}"
    $EXECnam/nam_makeprecip_212 <<EOF >>$pgmout 2>errfil
$fhr $fhr3
EOF
    export err=$?;err_chk

    cat 3precip212.${fhr} >> meso.AWIP3D${fhr}
    cat 3cprecip212.${fhr} >> meso.AWIP3D${fhr}

# end grid 212 processing
# start grid 215 processing

    cp $COMOUT/${RUN}.${cycle}.awip20${fhr3}.tm00 ${fhr}.meso.AWIP20${fhr3}
    cp $COMOUT/${RUN}.${cycle}.awip20i${fhr3}.tm00 ${fhr}.AWIP20i${fhr3}.tm00
    cp meso.AWIP20${fhr} ${fhr}.meso.AWIP20${fhr}
    cp AWIP20i${fhr}.tm00 ${fhr}.AWIP20i${fhr}.tm00

    export pgm=nam_makeprecip_215;. prep_step
    export XLFUNIT_13="${fhr}.meso.AWIP20${fhr3}"
    export XLFUNIT_14="${fhr}.AWIP20i${fhr3}.tm00"
    export XLFUNIT_15="${fhr}.meso.AWIP20${fhr}"
    export XLFUNIT_16="${fhr}.AWIP20i${fhr}.tm00"
    export XLFUNIT_50="3precip215.${fhr}"
    export XLFUNIT_51="3cprecip215.${fhr}"
    $EXECnam/nam_makeprecip_215 <<EOF >>$pgmout 2>errfil
$fhr $fhr3
EOF
    export err=$?;err_chk

    cat 3precip215.${fhr} >> meso.AWIP20${fhr}
    cat 3cprecip215.${fhr} >> meso.AWIP20${fhr}

# end grid 215 processing

  fi
fi
# end on-time cycle processing

############################
# Convert to grib2 format
# for 3-hourly products only
#############################
$CNVGRIB -g12 -p40 -nv meso.AWIP3D${fhr} meso.AWIP3D${fhr}.grib2
$CNVGRIB -g12 -p40 meso.AWIP20${fhr} meso.AWIP20${fhr}.grib2
$CNVGRIB -g12 -p40 nam.AWIPAK${fhr} nam.AWIPAK${fhr}.grib2
$CNVGRIB -g12 -p40 nam.AWIPHI${fhr} nam.AWIPHI${fhr}.grib2
$WGRIB2 meso.AWIP3D${fhr}.grib2 -s >meso.AWIP3D${fhr}.grib2.idx
$WGRIB2 meso.AWIP20${fhr}.grib2 -s >meso.AWIP20${fhr}.grib2.idx
$WGRIB2 nam.AWIPAK${fhr}.grib2 -s >nam.AWIPAK${fhr}.grib2.idx
$WGRIB2 nam.AWIPHI${fhr}.grib2 -s >nam.AWIPHI${fhr}.grib2.idx

if test $SENDCOM = 'YES'
then
    $utilexec/grbindex meso.AWIP3D${fhr} AWIP3Di${fhr}
    $utilexec/grbindex meso.AWIP20${fhr} AWIP20i${fhr}
    $utilexec/grbindex nam.AWP237${fhr} AWP237i${fhr}
    $utilexec/grbindex nam.AWIPAK${fhr} AWIPAKi${fhr}

    mv AWIP3Di${fhr} $COMOUT/${RUN}.${cycle}.awip3di${fhr}.tm00
    mv AWIP20i${fhr} $COMOUT/${RUN}.${cycle}.awip20i${fhr}.tm00
    mv AWIPAKi${fhr} $COMOUT/${RUN}.${cycle}.awipaki${fhr}
    mv AWP237i${fhr} $COMOUT/${RUN}.${cycle}.awp237i${fhr}

    mv nam.AWIPAK${fhr} $COMOUT/${RUN}.${cycle}.awipak${fhr}.tm00
    mv nam.AWIPHI${fhr} $COMOUT/${RUN}.${cycle}.awiphi${fhr}.tm00
    mv meso.AWIP20${fhr} $COMOUT/${RUN}.${cycle}.awip20${fhr}.tm00
    mv meso.AWIP3D${fhr} $COMOUT/${RUN}.${cycle}.awip3d${fhr}.tm00
    mv nam.AWP237${fhr} $COMOUT/${RUN}.${cycle}.awp237${fhr}.tm00

    mv nam.AWIPAK${fhr}.grib2 $COMOUT/${RUN}.${cycle}.awipak${fhr}.tm00.grib2
    mv nam.AWIPHI${fhr}.grib2 $COMOUT/${RUN}.${cycle}.awiphi${fhr}.tm00.grib2
    mv meso.AWIP20${fhr}.grib2 $COMOUT/${RUN}.${cycle}.awip20${fhr}.tm00.grib2
    mv meso.AWIP3D${fhr}.grib2 $COMOUT/${RUN}.${cycle}.awip3d${fhr}.tm00.grib2

    mv nam.AWIPAK${fhr}.grib2.idx $COMOUT/${RUN}.${cycle}.awipak${fhr}.tm00.grib2.idx
    mv nam.AWIPHI${fhr}.grib2.idx $COMOUT/${RUN}.${cycle}.awiphi${fhr}.tm00.grib2.idx
    mv meso.AWIP20${fhr}.grib2.idx $COMOUT/${RUN}.${cycle}.awip20${fhr}.tm00.grib2.idx
    mv meso.AWIP3D${fhr}.grib2.idx $COMOUT/${RUN}.${cycle}.awip3d${fhr}.tm00.grib2.idx

    if test $SENDDBN = 'YES'
    then
     $DBNROOT/bin/dbn_alert MODEL NAM_AW3D $job $COMOUT/${RUN}.${cycle}.awip3d${fhr}.tm00
     $DBNROOT/bin/dbn_alert MODEL NAM_AW3DI $job $COMOUT/${RUN}.${cycle}.awip3di${fhr}.tm00
     $DBNROOT/bin/dbn_alert MODEL NAM_AWAK $job $COMOUT/${RUN}.${cycle}.awipak${fhr}.tm00
     $DBNROOT/bin/dbn_alert MODEL NAM_AWAKI $job $COMOUT/${RUN}.${cycle}.awipaki${fhr}
     $DBNROOT/bin/dbn_alert MODEL NAM_AWHI $job $COMOUT/${RUN}.${cycle}.awiphi${fhr}.tm00
     $DBNROOT/bin/dbn_alert MODEL NAM_AW20 $job $COMOUT/${RUN}.${cycle}.awip20${fhr}.tm00
     $DBNROOT/bin/dbn_alert MODEL NAM_AW20I $job $COMOUT/${RUN}.${cycle}.awip20i${fhr}.tm00

     # Send grib2 format:

     $DBNROOT/bin/dbn_alert MODEL NAM_AW3D_GB2 $job $COMOUT/${RUN}.${cycle}.awip3d${fhr}.tm00.grib2
     $DBNROOT/bin/dbn_alert MODEL NAM_AWAK_GB2 $job $COMOUT/${RUN}.${cycle}.awipak${fhr}.tm00.grib2
     $DBNROOT/bin/dbn_alert MODEL NAM_AWHI_GB2 $job $COMOUT/${RUN}.${cycle}.awiphi${fhr}.tm00.grib2
     $DBNROOT/bin/dbn_alert MODEL NAM_AW20_GB2 $job $COMOUT/${RUN}.${cycle}.awip20${fhr}.tm00.grib2
     $DBNROOT/bin/dbn_alert MODEL NAM_AW3D_GB2_WIDX $job $COMOUT/${RUN}.${cycle}.awip3d${fhr}.tm00.grib2.idx
     $DBNROOT/bin/dbn_alert MODEL NAM_AWAK_GB2_WIDX $job $COMOUT/${RUN}.${cycle}.awipak${fhr}.tm00.grib2.idx
     $DBNROOT/bin/dbn_alert MODEL NAM_AWHI_GB2_WIDX $job $COMOUT/${RUN}.${cycle}.awiphi${fhr}.tm00.grib2.idx
     $DBNROOT/bin/dbn_alert MODEL NAM_AW20_GB2_WIDX $job $COMOUT/${RUN}.${cycle}.awip20${fhr}.tm00.grib2.idx

    fi
fi

# end hswitch test
fi

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

echo EXITING $0
exit
