#!/bin/ksh
################################################################################
####  UNIX Script Documentation Block
#                      .                                             .
# Script name:         nam_prdgen4.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 processes
#                             grids GRB_FM (#6,101), AWIP44 (#209),
#                             AWIP12 (#218), AWIP88 (#222)
# 2002-07-10  Geoff Manikin - added 3-hour precip buckets to grid 218
# 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/prdgen4_${fhr}
sh $utilscript/setup.sh

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

if [ $hswitch -ne 0 ] ; then

export pgm=nam_prdgen;. prep_step
export XLFUNIT_10="master4.${fhr}.ctl"
export XLFUNIT_21="$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 < input4${fhr}.prd > $DATA/prdgen4.out${fhr}
export err=$?;err_chk

if test $SENDCOM = 'YES'
then

    $utilexec/grbindex meso.AWIP12${fhr} AWIP12i${fhr}
    mv AWIP12i${fhr} $COMOUT/${RUN}.${cycle}.awip12i${fhr}
    mv meso.AWIP12${fhr} $COMOUT/${RUN}.${cycle}.awip12${fhr}.tm00

    WGRIB=/nwprod/util/exec/wgrib
    FILE=$COMOUT/${RUN}.${cycle}.awip12${fhr}.tm00
    GRIB_LIST="UGRD:10.m.a|VGRD:10.m.a"
    $WGRIB -s $FILE | egrep "$GRIB_LIST" | $WGRIB $FILE -s -i -grib -o ${FILE}.10m.uv

    $CNVGRIB -g12 -p40 ${FILE}.10m.uv ${FILE}.10m.uv.grib2
    $WGRIB2 -s ${FILE}.10m.uv.grib2 > ${FILE}.10m.uv.grib2.idx
    
    if test $SENDDBN = 'YES'
    then
     $DBNROOT/bin/dbn_alert MODEL NAM_AW12 $job $COMOUT/${RUN}.${cycle}.awip12${fhr}.tm00
     $DBNROOT/bin/dbn_alert MODEL NAM_AW12I $job $COMOUT/${RUN}.${cycle}.awip12i${fhr}
     $DBNROOT/bin/dbn_alert MODEL NAM_AW12_USCG $job $COMOUT/${RUN}.${cycle}.awip12${fhr}.tm00.10m.uv
     $DBNROOT/bin/dbn_alert MODEL NAM_AW12_USCG_GB2 $job $COMOUT/${RUN}.${cycle}.awip12${fhr}.tm00.10m.uv.grib2
     $DBNROOT/bin/dbn_alert MODEL NAM_AW12_USCG_GB2_WIDX $job $COMOUT/${RUN}.${cycle}.awip12${fhr}.tm00.10m.uv.grib2.idx
    fi
fi

else

export pgm=nam_prdgen;. prep_step
export XLFUNIT_10="master4.${fhr}.ctl"
export XLFUNIT_21="$FIXnam/nam_wgt_006"
export XLFUNIT_22="$FIXnam/nam_wgt_101"
export XLFUNIT_23="$FIXnam/nam_wgt_209"
export XLFUNIT_24="$FIXnam/nam_wgt_218"
export XLFUNIT_25="$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 < input4${fhr}.prd > $DATA/prdgen4.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.AWIP12${fhr} AWIP12i${fhr}.tm00
    $utilexec/grbindex nam.AWAK3D${fhr} AWAK3Di${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}.awip12${fhr3}.tm00 -o \
            ! -r $COMOUT/${RUN}.${cycle}.awak3d${fhr3}.tm00 -o \
            ! -r $COMOUT/${RUN}.${cycle}.awip12i${fhr3} -o \
            ! -r $COMOUT/${RUN}.${cycle}.awak3di${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}.awip12${fhr3}.tm00 ${fhr}.meso.AWIP12${fhr3}
    cp $COMOUT/${RUN}.${cycle}.awip12i${fhr3} ${fhr}.AWIP12i${fhr3}.tm00
    cp meso.AWIP12${fhr} ${fhr}.meso.AWIP12${fhr}
    cp AWIP12i${fhr}.tm00 ${fhr}.AWIP12i${fhr}.tm00

    export pgm=nam_makeprecip_218;. prep_step
    export XLFUNIT_13="${fhr}.meso.AWIP12${fhr3}"
    export XLFUNIT_14="${fhr}.AWIP12i${fhr3}.tm00"
    export XLFUNIT_15="${fhr}.meso.AWIP12${fhr}"
    export XLFUNIT_16="${fhr}.AWIP12i${fhr}.tm00"
    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} >> meso.AWIP12${fhr}
    cat 3cprecip218.${fhr} >> meso.AWIP12${fhr}
# end grid 218 processing

# start grid 242 processing
                  
    cp $COMOUT/${RUN}.${cycle}.awak3d${fhr3}.tm00 ${fhr}.nam.AWAK3D${fhr3}
    cp $COMOUT/${RUN}.${cycle}.awak3di${fhr3} ${fhr}.AWAK3Di${fhr3}.tm00
    cp nam.AWAK3D${fhr} ${fhr}.nam.AWAK3D${fhr}
    cp AWAK3Di${fhr}.tm00 ${fhr}.AWAK3Di${fhr}.tm00
                  
    export pgm=nam_makeprecip_242;. prep_step
    export XLFUNIT_13="${fhr}.nam.AWAK3D${fhr3}"
    export XLFUNIT_14="${fhr}.AWAK3Di${fhr3}.tm00"
    export XLFUNIT_15="${fhr}.nam.AWAK3D${fhr}"
    export XLFUNIT_16="${fhr}.AWAK3Di${fhr}.tm00"
    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.AWAK3D${fhr}
    cat 3cprecip242.${fhr} >> nam.AWAK3D${fhr}
# end grid 242 processing
  fi
fi

# end on-time cycle processing

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

if test $SENDCOM = 'YES'
then

    $utilexec/grbindex meso.AWIP12${fhr} AWIP12i${fhr}
    $utilexec/grbindex nam.GRB_FM${fhr} GRB_FMi${fhr}
    $utilexec/grbindex nam.AWAK3D${fhr} AWAK3Di${fhr}

    mv AWIP12i${fhr} $COMOUT/${RUN}.${cycle}.awip12i${fhr}
    mv GRB_FMi${fhr} $COMOUT/${RUN}.${cycle}.grb_fmi${fhr}
    mv AWAK3Di${fhr} $COMOUT/${RUN}.${cycle}.awak3di${fhr}

    mv nam.GRB_FM${fhr} $COMOUT/${RUN}.${cycle}.grb_fm${fhr}.tm00
    mv meso.AWIP12${fhr} $COMOUT/${RUN}.${cycle}.awip12${fhr}.tm00
    mv nam.AWIP44${fhr} $COMOUT/${RUN}.${cycle}.awip44${fhr}.tm00
    mv nam.AWAK3D${fhr} $COMOUT/${RUN}.${cycle}.awak3d${fhr}.tm00

    mv meso.AWIP12${fhr}.grib2 $COMOUT/${RUN}.${cycle}.awip12${fhr}.tm00.grib2
    mv meso.AWIP12${fhr}.grib2.idx $COMOUT/${RUN}.${cycle}.awip12${fhr}.tm00.grib2.idx
    mv nam.GRB_FM${fhr}.grib2 $COMOUT/${RUN}.${cycle}.grb_fm${fhr}.tm00.grib2
    mv nam.GRB_FM${fhr}.grib2.idx $COMOUT/${RUN}.${cycle}.grb_fm${fhr}.tm00.grib2.idx
 
    WGRIB=/nwprod/util/exec/wgrib
    FILE=$COMOUT/${RUN}.${cycle}.awip12${fhr}.tm00
    GRIB_LIST="UGRD:10.m.a|VGRD:10.m.a"
    $WGRIB -s $FILE | egrep "$GRIB_LIST" | $WGRIB $FILE -s -i -grib -o ${FILE}.10m.uv

    $CNVGRIB -g12 -p40 ${FILE}.10m.uv ${FILE}.10m.uv.grib2
    $WGRIB2 -s ${FILE}.10m.uv.grib2 > ${FILE}.10m.uv.grib2.idx

    if test $SENDDBN = 'YES'
    then
     $DBNROOT/bin/dbn_alert MODEL NAM_AW12_USCG $job $COMOUT/${RUN}.${cycle}.awip12${fhr}.tm00.10m.uv
     $DBNROOT/bin/dbn_alert MODEL NAM_AW12 $job $COMOUT/${RUN}.${cycle}.awip12${fhr}.tm00
     $DBNROOT/bin/dbn_alert MODEL NAM_AW12I $job $COMOUT/${RUN}.${cycle}.awip12i${fhr}
     $DBNROOT/bin/dbn_alert MODEL NAM_GBGFM $job $COMOUT/${RUN}.${cycle}.grb_fm${fhr}.tm00
     $DBNROOT/bin/dbn_alert MODEL NAM_GBGFMI $job $COMOUT/${RUN}.${cycle}.grb_fmi${fhr}
     $DBNROOT/bin/dbn_alert MODEL NAM_AW44 $job $COMOUT/${RUN}.${cycle}.awip44${fhr}.tm00

     $DBNROOT/bin/dbn_alert MODEL NAM_AW12_USCG_GB2 $job $COMOUT/${RUN}.${cycle}.awip12${fhr}.tm00.10m.uv.grib2
     $DBNROOT/bin/dbn_alert MODEL NAM_AW12_USCG_GB2_WIDX $job $COMOUT/${RUN}.${cycle}.awip12${fhr}.tm00.10m.uv.grib2.idx
     $DBNROOT/bin/dbn_alert MODEL NAM_AW12_GB2 $job $COMOUT/${RUN}.${cycle}.awip12${fhr}.tm00.grib2
     $DBNROOT/bin/dbn_alert MODEL NAM_AW12_GB2_WIDX $job $COMOUT/${RUN}.${cycle}.awip12${fhr}.tm00.grib2.idx
     $DBNROOT/bin/dbn_alert MODEL NAM_GBGFM_GB2 $job $COMOUT/${RUN}.${cycle}.grb_fm${fhr}.tm00.grib2
     $DBNROOT/bin/dbn_alert MODEL NAM_GBGFM_GB2_WIDX $job $COMOUT/${RUN}.${cycle}.grb_fm${fhr}.tm00.grib2.idx
    fi
fi

# process Alaska tiles

if [ $SENDCOM = "YES" ] ; then
  tile=1
  typeset -Z2 tile
  if [ ! -d $COMOUT/tiles.${cycle} ] ; then
    mkdir -p $COMOUT/tiles.${cycle}
  fi
  while [ $tile -le 25 ] ; do
    mv nam.AWAK3D${fhr}.${tile} $COMOUT/tiles.${cycle}/${RUN}.${cycle}.awak3d${fhr}.${tile}
    let tile=tile+1
  done
  echo ${COMOUT}/tiles.${cycle} > ${COMOUT}/tiles.${cycle}/tileloc242
                                                                                                                                          
# 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 - *awak3d${fhr}.?? | /usr/bin/gzip > ../nam.${cycle}.awak3dtiles_f${fhr}.tar.gz
                                                                                                                                          
      if test "$SENDDBN" = 'YES'
      then
        $DBNROOT/bin/dbn_alert MODEL NAM_TILE_AK3D $job $COMOUT/nam.${cycle}.awak3dtiles_f${fhr}.tar.gz
      fi

      # Conver to grib2 format:
      for fil in `ls *awak3d${fhr}*`
      do
         $CNVGRIB -g12 -p40 ${fil} $DATA/prdgen4_${fhr}/${fil}.grib2
         $WGRIB2 $DATA/prdgen4_${fhr}/${fil}.grib2 -s >$DATA/prdgen4_${fhr}/${fil}.grib2.idx
      done
      
      cd $DATA/prdgen4_${fhr}
      tar -cf - *awak3d${fhr}.??.grib2 | /usr/bin/gzip > $COMOUT/nam.${cycle}.awak3dtiles_f${fhr}.grib2.tar.gz;
      tar -cf - *awak3d${fhr}.??.grib2.idx | /usr/bin/gzip > $COMOUT/nam.${cycle}.awak3dtiles_f${fhr}.grib2.idx.tar.gz
      
      if [ $SENDDBN = YES ]
      then
        $DBNROOT/bin/dbn_alert MODEL NAM_TILE_AK3D_GB2 $job $COMOUT/nam.${cycle}.awak3dtiles_f${fhr}.grib2.tar.gz
        $DBNROOT/bin/dbn_alert MODEL NAM_TILE_AK3D_GB2_WIDX $job $COMOUT/nam.${cycle}.awak3dtiles_f${fhr}.grib2.idx.tar.gz
      fi
    fi
  fi
fi

# end hswitch test
fi

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

echo EXITING $0
 exit
