#!/bin/sh
##########################################################################
#  Job Name: exgfsmos_cogridded_extprdgen.sh.sms 
#  Purpose: To run all steps necessary to create extended-range GFS-based
#           gridded MOS fcsts for CONUS on the 2.5 km NDFD Grid
#  Remarks: This script is kicked off when the forecast jobs
#           METAR, GOE, COOPMESO, and TSTM have completed
#
#  HISTORY: Mar 03, 2008  RLC - new job for Alaska Gridded MOS.  Right
#                               now it just contains thunderstorm fcsts.
#           Mar 27, 2008  RLC - adding temperatures before we 
#                               implement for the first time.
#                               Note:  the sleep command is included to
#                               delay dissemination time.  As more fields
#                               are added the sleep time will decrease to
#                               minimize the impact on the future 
#                               dissemination times.
#           Sep 26, 2008  RLC - adding winds, POPs, and sky. POP and 
#                               sky have goe-based first guesses, 
#                               wind uses dmo. To be implemented 12/2008
#           Dec 18, 2009  GAW - adding QPF and snow.  To be
#                               implemented 1/2010, but snow and
#                               qpf grids will not be sent to the
#                               SBN yet.
#           Feb 18, 2010  EFE - adding QPF and snow to TOCGRIB2 file
#                               for transmission over SBN. To be
#                               implemented 3/30/2010.
#           Jan  7, 2011  EFE - New job for 2.5 km CONUS Gridded MOS. This
#                               script is adapted from Alaska extprdgen
#                               because Alaska is currently using U155
#                               version 9.
#           Feb 08, 2011  EFE - Updated section of the script that
#                               creates GRIB2 files. Because of
#                               current TOC limitations with file
#                               transmission sizes, we will be
#                               creating 3 sets of data that will be
#                               described below. More information
#                               is contained in that part of the script.
#           Mar 31, 2011  EFE - Added section after GRIDPOST to check
#                               for HRQPF GRIB2 files. If available,
#                               these files will be used as official
#                               products and alerted; if not, the
#                               regular GMOS POP/QPF files will be
#                               used.
#           Nov 08, 2012  EFE - Added dbn_alert commands for superheaded
#                               element GRIB2 files in $pcom/
#           Nov 15, 2012  EFE - Added dbn_alert command for superheaded
#                               PTSTM03 GRIB2 file for 00Z only.
#           Nov 19, 2012  EFE - Turn off dbn alerts for non-headed 2.5KM
#                               CONUS GMOS GRIB2 files, using subtype string
#                               "GMOSXCO*"; Added "hr" to copy destination name
#                               of HR POP/QPF superheaded GRIB2 files to /pcom;
#                               Added dbn_alert command for superheaded PTSTM03
#                               GRIB2 file for 00Z only.
#           Mar 12, 2013  SH - Turn on dbn alerts to send the 2.5KM GMOS GRIB2 
#                              files from the CCS to the local centers in NCWCP.
#
#           NOTE: On approx. 12/13/12, NCO will begin routing 2.5KM CONUS GMOS
#                 GRIB2 files to TOC with superheaders and inidividual headers.
#                 Superheaders will be sents to TGFTP and inidividual headers
#                 will be sent to SBN/NOAAPORT.
##########################################################################
#
echo MDLLOG: `date` - Begin job exgfsmos_cogridded_extprdgen.sh.sms

set -x

export PS4='$SECONDS + '
cd $DATA

echo $PDY $cyc: Date and Cycle - echo PDY and cyc

export DAT="$PDY$cyc"

#######################################################################
#  COPY THE MDL FORECAST FILES FROM COM
#######################################################################
cp $COMIN/mdl_gfsmos.$cycle mdl_gfsmos.$cycle
cp $COMIN/mdl_gfscpmos.$cycle mdl_gfscpmos.$cycle
cp $COMIN/mdl_goemosxmodel.$cycle mdl_goemosxmodel.$cycle
cp $COMIN/mdl_gfstsvr40.$cycle mdl_gfstsvr40.$cycle
cp $COMIN/mdl_gfsmergesta_co.$cycle mdl_gfsmergesta_co.$cycle
cp $COMIN/mdl_goemos.$cycle mdl_goemos.$cycle

###########################################################################
#
#    THIS JOB USES THE RANDOM ACCESS FILE FIRST CREATED IN THE
#    EXECUTION OF GFSMOS_COGRIDDED_PRDGEN.  CHECK IF THE FILE MDL_GFSGMOS.TXXZ
#    EXISTS IN COM/GFS.  IF IT DOES, COPY THE FILE TO THE WORK SPACE.
#    IF IT DOES NOT EXIST, THE SCRIPT WILL ABORT.  GFSMOS_COGRIDDED_EXTPRDGEN
#    WILL NOT WORK UNLESS GFSMOS_COGRIDDED_PRDGEN HAS ALREADY RUN SUCCESSFULLY.
#
############################################################################
#
if [ ! -f $COMIN/mdl_gfsgmosco.$cycle ]
     then echo 'need successful run of gfsmos_cogridded_prdgen to run properly' >> $pgmout
             export err=1;err_chk
fi

cp $COMIN/mdl_gfsgmosco.$cycle .

if test $cyc -eq '00'
then
   prevcyc=12
   cp $COMINm1/mdl_gfsmergesta_co.t${prevcyc}z mdl_gfsmergesta_co.last$prevcyc
   cp $COMINm1/mdl_gfsxmergesta_co.t${prevcyc}z mdl_gfsxmergesta_co.last$prevcyc
else
   prevcyc=00
   cp $COMIN/mdl_gfsmergesta_co.t${prevcyc}z mdl_gfsmergesta_co.last$prevcyc
   cp $COMIN/mdl_gfsxmergesta_co.t${prevcyc}z mdl_gfsxmergesta_co.last$prevcyc
fi

#######################################################################
#
# PROGRAM RAMERGE - MERGES TWO VECTOR TDLPACK FILES INTO ONE.  IN THIS
#                   CASE MERGE THE METAR AND COOPRFCMESO FILES.
#######################################################################
echo MDLLOG: `date` - begin job RAMERGE

export pgm=mdl_ramerge
. prep_step
startmsg
export XLFUNIT_10="ncepdate"
export XLFUNIT_26="$FIXmdl/mdl_granlsta_co.lst"
export XLFUNIT_27="$FIXmdl/mdl_granlsta_co.tbl"
export XLFUNIT_28="$FIXmdl/mdl_gfsxramerge_co.$cycle"
export XLFUNIT_29="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_46="mdl_gfsmos.$cycle"
export XLFUNIT_48="mdl_gfscpmos.$cycle"
export XLFUNIT_60="mdl_gfsxmergesta_co.$cycle"
$EXECmdl/mdl_ramerge < $PARMmdl/mdl_ramerge.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo MDLLOG: `date` -  RAMERGE ended

#######################################################################
#
# PROGRAM VECT2GRID - CONVERTS SEQUENTIAL "GRIDPOINT STATION" FILE TO
#                     TRUE GRIDDED RECORDS.  THIS RUN PUTS THE CONUS
#                     DMO FOR WIND FIRST GUESS ON THE 5KM CONUS GRID.
#######################################################################
echo MDLLOG: `date` - begin job vect2grid

export pgm=mdl_vect2grid
. prep_step
startmsg
export XLFUNIT_10="ncepdate"
export XLFUNIT_26="$FIXmdl/mdl_ndfdtrimsta.lst"
export XLFUNIT_27="$FIXmdl/mdl_ndfdsta.tbl"
export XLFUNIT_31="$FIXmdl/mdl_gfsxvect2grid_codmo.in.$cycle"
export XLFUNIT_32="$FIXmdl/mdl_gfsxvect2grid_codmo.out.$cycle"
export XLFUNIT_29="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_61="mdl_goemosxmodel.$cycle"
export XLFUNIT_60="mdl_cogoedmoxgrsq.$cycle"
$EXECmdl/mdl_vect2grid < $PARMmdl/mdl_vect2grid_codmo.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo MDLLOG: `date` -  VECT2GRID ended

#######################################################################
#
# PROGRAM VECT2GRID - CONVERTS SEQUENTIAL "GRIDPOINT STATION" FILE TO
#                     TRUE GRIDDED RECORDS.  THIS RUN PUTS THE CONUS
#                     GOES 5KM CONUS GRID.
#######################################################################
echo MDLLOG: `date` - begin job vect2grid

export pgm=mdl_vect2grid
. prep_step
startmsg
export XLFUNIT_10="ncepdate"
export XLFUNIT_26="$FIXmdl/mdl_ndfdtrimsta.lst"
export XLFUNIT_27="$FIXmdl/mdl_ndfdsta.tbl"
export XLFUNIT_31="$FIXmdl/mdl_gfsxvect2grid_cogoe.in.$cycle"
export XLFUNIT_32="$FIXmdl/mdl_gfsxvect2grid_cogoe.out.$cycle"
export XLFUNIT_29="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_48="mdl_goemos.$cycle"
export XLFUNIT_60="mdl_cogoemosxgrsq.$cycle"
$EXECmdl/mdl_vect2grid < $PARMmdl/mdl_vect2grid_cogoe.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo MDLLOG: `date` -  VECT2GRID ended

#######################################################################
#
# PROGRAM GRANALYSIS_CO - PERFORMS THE ANALYSIS OF THE MOS FORECASTS
#                         ONTO A GRID.
#
#  NOTE:  THE UPPER AIR DATA FOR LAPSE RATE COMPUTATION COMES FROM
#         THE 95KM MODEL ARCHIVE FILE EXCEPT FOR 183,186,189 WHICH
#         WERE INTERPOLATED TO THE 3KM IN U201.
#######################################################################
echo MDLLOG: `date` - begin job GRANALYSIS_CO

export pgm=mdl_granalysis_co
. prep_step
startmsg
export XLFUNIT_10="ncepdate"
export XLFUNIT_20="$FIXmdl/mdl_gmoscobogusfile.dewp"
export XLFUNIT_26="$FIXmdl/mdl_granlsta_co.lst"
export XLFUNIT_27="$FIXmdl/mdl_granlsta_co.tbl"
export XLFUNIT_29="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_30="mdl_cogoemosxgrsq.$cycle"
export XLFUNIT_31="mdl_cogoedmoxgrsq.$cycle"
export XLFUNIT_37="$FIXmdl/mdl_granlstation_copairs"
export XLFUNIT_38="$FIXmdl/mdl_gfsxgranlids_co.$cycle"
export XLFUNIT_44="$FIXmdl/mdl_analysisgrconst_co"
export XLFUNIT_51="$FIXmdl/mdl_u405adewcocn"
export XLFUNIT_52="$FIXmdl/mdl_u405atmpcocn"
export XLFUNIT_53="$FIXmdl/mdl_u405amaxcocn"
export XLFUNIT_54="$FIXmdl/mdl_u405amincocn"
export XLFUNIT_55="$FIXmdl/mdl_u405apop6cocn"
export XLFUNIT_56="$FIXmdl/mdl_u405apop12cocn"
export XLFUNIT_57="$FIXmdl/mdl_u405awspcocn"
export XLFUNIT_58="$FIXmdl/mdl_u405awucocn"
export XLFUNIT_59="$FIXmdl/mdl_u405awvcocn"
export XLFUNIT_60="$FIXmdl/mdl_u405awgstcocn"
export XLFUNIT_61="$FIXmdl/mdl_u405aqpf1cocn"
export XLFUNIT_62="$FIXmdl/mdl_u405aqpfcocn"
export XLFUNIT_63="$FIXmdl/mdl_u405asnwcocn"
export XLFUNIT_64="$FIXmdl/mdl_u405askycocn"
export XLFUNIT_80="mdl_gfsmergesta_co.$cycle"
export XLFUNIT_81="mdl_gfsxmergesta_co.$cycle"
export XLFUNIT_82="mdl_gfsmergesta_co.last$prevcyc"
export XLFUNIT_83="mdl_gfsxmergesta_co.last$prevcyc"
export XLFUNIT_42="mdl_gfsgmosco.$cycle"
$EXECmdl/mdl_granalysis_co < $PARMmdl/mdl_granalysis_co.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo MDLLOG: `date` -  GRANALYSIS ended

#######################################################################
#
# PROGRAM VECT2GRID - CONVERTS SEQUENTIAL "GRIDPOINT STATION" FILE 
#         (U140)      TO TRUE GRIDDED RECORDS.  THIS RUN PUTS THE 
#                     40KM TSTMS INTO GRIDDED FORMAT.
#######################################################################
echo MDLLOG: `date` - begin job vect2grid

export pgm=mdl_vect2grid
. prep_step
startmsg
export XLFUNIT_10="ncepdate"
export XLFUNIT_26="$FIXmdl/mdl_tsvr40sta.lst"
export XLFUNIT_27="$FIXmdl/mdl_tsvr40sta.tbl"
export XLFUNIT_31="$FIXmdl/mdl_gfsxvect2grid_tsvr40km.in.$cycle"
export XLFUNIT_32="$FIXmdl/mdl_gfsxvect2grid_tsvr40km.out.$cycle"
export XLFUNIT_29="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_48="mdl_gfstsvr40.$cycle"
export XLFUNIT_60="mdl_gfsxtsvr40grd.sq.$cycle"
$EXECmdl/mdl_vect2grid < $PARMmdl/mdl_vect2grid_tsvr40km.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo MDLLOG: `date` -  VECT2GRID ended 

#######################################################################
# PROGRAM GRD2GRD - INTERPOLATE DATA FROM 40KM GRID TO CONUS 2.5KM 
#         (U365)    GRID.
#######################################################################
echo MDLLOG: `date` - begin job GRD2GRD - INTERPOLATE TO NDFD GRID

export pgm=mdl_grd2grd
. prep_step
startmsg
export XLFUNIT_10="ncepdate"
export XLFUNIT_25="mdl_gfsxtsvr40grd.sq.$cycle"
export XLFUNIT_28="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_27="$FIXmdl/mdl_gfsxgrd2grd_tsvr40.ids.$cycle"
export XLFUNIT_42="mdl_gfsgmosco.$cycle"
$EXECmdl/mdl_grd2grd < $PARMmdl/mdl_grd2grd_co.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo MDLLOG: `date` - GRD2GRD ended

#######################################################################
#
# PROGRAM GRIDPOST - PERFORMS POST-PROCESSING OF THE GRIDDED MOS 
#                    FORECASTS. 
#######################################################################
echo MDLLOG: `date` - begin job GRIDPOST - POST PROCESS MOS FORECASTS
export pgm=mdl_gridpost
. prep_step
startmsg
export XLFUNIT_10="ncepdate"
export XLFUNIT_26="$FIXmdl/mdl_granlsta_co.lst"
export XLFUNIT_27="$FIXmdl/mdl_granlsta_co.tbl"
export XLFUNIT_28="$FIXmdl/mdl_gfsxgrpost_co.$cycle"
export XLFUNIT_29="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_42="mdl_gfsgmosco.$cycle"
$EXECmdl/mdl_gridpost < $PARMmdl/mdl_gridpost_co.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo MDLLOG: `date` -  GRIDPOST ended 

#######################################################################
# PROGRAM RA2GRIB2 - CODES TDLPACK MOS FORECASTS INTO GRIB2. 
#######################################################################
#   WE'LL LOOP THROUGH THE FOLLOWING ELEMENTS, CREATING SEPARATE
#   GRIB2 FILES FOR EACH ELEMENT (PACKAGING NEEDED FOR TGFTP) 
#
#    TEMP = 2M SURFACE TEMPERATURE    DEWP = 2M SURFACE DEWPOINT
#    MAX  = MAXIMUM TEMPERATURE       MIN  = MINIMUM TEMPERATURE
#    RH   = 2M RELATIVE HUMIDITY      POP6 = 6HR POP
#   POP12 = 12HR POP                  WSPD = 10M WIND SPEED
#    WDIR = 10M WIND DIRECTION     PTSTM03 = 3HR THUNDERSTORM PROB (00Z ONLY)
# PTSTM06 = 6HR THUNDERSTORM PROB  PTSTM12 = 12HR THUNDERSTORM PROB
#   QPF06 = 6HR QPF                  QPF12 = 12HR QPF
#     SKY = OPAQUE SKY COVER         SNW24 = 24HR SNOWFALL
#    WGST = WIND GUST 
#
#######################################################################
for element in temp dewp max min rh ptstm06 ptstm12 wspd wdir wgst pop6 pop12 sky qpf06 qpf12 snw24
do

echo MDLLOG: `date` - begin job RA2GRIB2 
export pgm=mdl_ra2grib2
. prep_step
startmsg
export XLFUNIT_10="ncepdate"
export XLFUNIT_31="$FIXmdl/mdl_gmosgb2sect0-1"
export XLFUNIT_32="$FIXmdl/mdl_gmoscogb2sect3"
export XLFUNIT_33="$FIXmdl/mdl_gmosxcogb2sect4${element}.$cycle"
export XLFUNIT_34="$FIXmdl/mdl_gmosxcogb2sect5${element}.$cycle"
export XLFUNIT_29="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_44="mdl_gfsgmosco.$cycle"
export XLFUNIT_60="mdl_gmosxcogb2${element}.$cycle.nohead"
$EXECmdl/mdl_ra2grib2 < $PARMmdl/mdl_ra2grib2_co.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo MDLLOG: `date` -  RA2GRIB2 ended 

done

#######################################################################
#  3H TSTMS ONLY AVAILABLE AT 00Z IN EXTENDED CYCLE
#######################################################################

if test $cyc -eq '00'
then

for element in ptstm03
do

echo MDLLOG: `date` - begin job RA2GRIB2
export pgm=mdl_ra2grib2
. prep_step
startmsg
export XLFUNIT_10="ncepdate"
export XLFUNIT_31="$FIXmdl/mdl_gmosgb2sect0-1"
export XLFUNIT_32="$FIXmdl/mdl_gmoscogb2sect3"
export XLFUNIT_33="$FIXmdl/mdl_gmosxcogb2sect4${element}.$cycle"
export XLFUNIT_34="$FIXmdl/mdl_gmosxcogb2sect5${element}.$cycle"
export XLFUNIT_29="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_44="mdl_gfsgmosco.$cycle"
export XLFUNIT_60="mdl_gmosxcogb2${element}.$cycle.nohead"
$EXECmdl/mdl_ra2grib2 < $PARMmdl/mdl_ra2grib2_co.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo MDLLOG: `date` -  RA2GRIB2 ended

done

fi

#######################################################################
# CHECK FOR HPQPF GRIB2 FILES. LOOK IN COM FOR HI-RES POP/QPF GRIB2
# FILES. SET A FLAG ACCORDING TO FILE AVAILABILITY (1=YES, 0=NO) IN
# THE VARIABLE ARRAY $USEHRGRB2 AND COPY THE FILE INTO THE WORKING
# DIRECTORY. THE INDICIES OF $USEHRGRB2 REPRESENT AN ELEMENT.
#
#   $USEHRGRB2[0] = POP6
#   $USEHRGRB2[1] = POP12
#   $USEHRGRB2[2] = QPF06
#   $USEHRGRB2[3] = QPF12
#
# FOR THE EXTENDED-RANGE ONLY:
#
#   $USEHRTDLP = TDLPACK GRIDDED SEQ FILE OF HI POP/QPF GRIDS.
#######################################################################
i=0
for hrelement in pop6 pop12 qpf06 qpf12
do

  if [ -s $COMIN/mdl_gmosxcogb2hr${hrelement}.$cycle ];then
    USEHRGRB2[$i]=1
    cp $COMIN/mdl_gmosxcogb2hr${hrelement}.$cycle mdl_gmosxcogb2hr${hrelement}.$cycle.nohead
  else
    USEHRGRB2[$i]=0
  fi

  i=$(( $i + 1 ))

done

# CHECK IF TDLPACK GRIDDED SEQ FILE OF HI POP/QPF IS PRESENT IN COM  
# IF THE FILE IS PRESENT, COPY INTO WORKING DIRECTORY.
if [ -s $COMIN/mdl_hrqpf_gfsgmoscosq.$cycle ]; then
  USEHRTDLP=1
  cp $COMIN/mdl_hrqpf_gfsgmoscosq.$cycle mdl_hrqpf_gfsgmoscosq.$cycle
else
  USEHRTDLP=0
fi

#######################################################################
# NOTE: AT THIS POINT IN THE SCRIPT, WE HAVE CREATED GRIB2 FILES
#       WITH NO WMO HEADERS INSERTED. THESE ARE
#
#       mdl_gmosxcogb2${element}.$cycle.nohead
#
#  NOW RUN TOCGRIB2 TO PUT HEADERS AND FFS ON THE FILES
#  CAT ALL OF THE GRIB FILES TOGETHER AND RUN TOCGRIB2 ONCE
#######################################################################
touch mdl_gmosxcogrib2.$cycle

# NON POP/QPF ELEMENTS
for element in temp dewp max min rh wspd wdir ptstm06 ptstm12 sky snw24 wgst
do
  cat mdl_gmosxcogb2${element}.$cycle.nohead >> mdl_gmosxcogrib2.$cycle
done

# POP/QPF ELEMENTS
i=0
for element in pop6 pop12 qpf06 qpf12
do

  if [ ${USEHRGRB2[$i]} -eq 1 ]; then
    cat mdl_gmosxcogb2hr${element}.$cycle.nohead >> mdl_gmosxcogrib2.$cycle
  elif [ ${USEHRGRB2[$i]} -eq 0 ]; then
    cat mdl_gmosxcogb2${element}.$cycle.nohead >> mdl_gmosxcogrib2.$cycle
  fi

  i=$(( $i + 1 ))

done

if test $cyc -eq '00'
then
  cat mdl_gmosxcogb2ptstm03.$cycle.nohead >> mdl_gmosxcogrib2.$cycle
fi

export pgm=grb2index
. prep_step
startmsg
$EXECutil/grb2index mdl_gmosxcogrib2.$cycle mdl_gmosxcogrib2i.$cycle
export err=$?; err_chk

export pgm=tocgrib2
. prep_step
startmsg
export XLFUNIT_11="mdl_gmosxcogrib2.$cycle"
export XLFUNIT_31="mdl_gmosxcogrib2i.$cycle"
export XLFUNIT_51="mdl_gmosxcogrib2.xtrn.$cycle"
$EXECutil/tocgrib2 <$FIXmdl/mdl_gmosxcogb2head.$cycle 1>> $pgmout 2>> errfile
export err=$?; err_chk

#######################################################################
# UTILITY AQM_SMOKE - INSERTS WMO SUPERHEADERS AND INDIVIDUAL HEADERS
#                     INTO ELEMENT-SPECIFIC GRIB2 FILES, THEN CAT ALL
#                     ELEMENT-SPECIFIC GRIB2 FILES INTO ONE FILE.
#
# NOTE:  THOUGH THE NAME DOES NOT SUGGEST IT, AQM_SMOKE IS AN UPDATED
#        VERSION OF TOCGRIB2. THIS UPDATED VERSION CAN NOW INSERT WMO
#        SUPERHEADERS INTO A GRIB2 FILE.
#######################################################################
for element in temp dewp max min rh pop6 pop12 wspd wdir ptstm06 ptstm12 qpf06 qpf12 sky snw24 wgst
do

echo 0 > filesize
export pgm=aqm_smoke
. prep_step
startmsg
export XLFUNIT_11="mdl_gmosxcogb2${element}.$cycle.nohead"
export XLFUNIT_12="filesize"
export XLFUNIT_31=
export XLFUNIT_51="mdl_gmosxcogb2${element}.$cycle.temp"
$EXECutil/aqm_smoke < $FIXmdl/mdl_gmosxcogb2head${element}.$cycle 1>> $pgmout 2>> errfile
export err=$?; err_chk

echo `ls -l mdl_gmosxcogb2${element}.$cycle.temp | awk '{print $5}'` > filesize
export pgm=aqm_smoke
. prep_step
startmsg
export XLFUNIT_11="mdl_gmosxcogb2${element}.$cycle.temp"
export XLFUNIT_12="filesize"
export XLFUNIT_31=
export XLFUNIT_51="mdl_gmosxcogb2${element}.xtrn.$cycle"
$EXECutil/aqm_smoke < $FIXmdl/mdl_gmosxcogb2head${element}.$cycle 1>> $pgmout 2>> errfile
export err=$?; err_chk

done

#######################################################################
#  3H TSTMS ONLY AVAILABLE AT 00Z IN EXTENDED CYCLE
#######################################################################
if test $cyc -eq '00'
then

for element in ptstm03
do

echo 0 > filesize
export pgm=aqm_smoke
. prep_step
startmsg
export XLFUNIT_11="mdl_gmosxcogb2${element}.$cycle.nohead"
export XLFUNIT_12="filesize"
export XLFUNIT_31=
export XLFUNIT_51="mdl_gmosxcogb2${element}.$cycle.temp"
$EXECutil/aqm_smoke < $FIXmdl/mdl_gmosxcogb2head${element}.$cycle 1>> $pgmout 2>> errfile
export err=$?; err_chk

echo `ls -l mdl_gmosxcogb2${element}.$cycle.temp | awk '{print $5}'` > filesize
export pgm=aqm_smoke
. prep_step
startmsg
export XLFUNIT_11="mdl_gmosxcogb2${element}.$cycle.temp"
export XLFUNIT_12="filesize"
export XLFUNIT_31=
export XLFUNIT_51="mdl_gmosxcogb2${element}.xtrn.$cycle"
$EXECutil/aqm_smoke < $FIXmdl/mdl_gmosxcogb2head${element}.$cycle 1>> $pgmout 2>> errfile
export err=$?; err_chk

done

fi

#######################################################################
# CHECK TO SEE IF WE NEED TO RUN AQM_SMOKE ON THE HI-RES POP/QPF
# GRIB2 FILES.
#######################################################################
i=0
for element in pop6 pop12 qpf06 qpf12
do

if [ ${USEHRGRB2[$i]} -eq 1 ]; then

echo 0 > filesize
export pgm=aqm_smoke
. prep_step
startmsg
export XLFUNIT_11="mdl_gmosxcogb2hr${element}.$cycle.nohead"
export XLFUNIT_12="filesize"
export XLFUNIT_31=
export XLFUNIT_51="mdl_gmosxcogb2hr${element}.$cycle.temp"
$EXECutil/aqm_smoke < $FIXmdl/mdl_gmosxcogb2head${element}.$cycle 1>> $pgmout 2>> errfile
export err=$?; err_chk

echo `ls -l mdl_gmosxcogb2hr${element}.$cycle.temp | awk '{print $5}'` > filesize
export pgm=aqm_smoke
. prep_step
startmsg
export XLFUNIT_11="mdl_gmosxcogb2hr${element}.$cycle.temp"
export XLFUNIT_12="filesize"
export XLFUNIT_31=
export XLFUNIT_51="mdl_gmosxcogb2hr${element}.xtrn.$cycle"
$EXECutil/aqm_smoke < $FIXmdl/mdl_gmosxcogb2head${element}.$cycle 1>> $pgmout 2>> errfile
export err=$?; err_chk

fi

i=$(( $i + 1 ))

done

#######################################################################
# COPY FILES TO COM
#######################################################################

if test $SENDCOM = 'YES'
then
  # TDLPACK FILES
  cp mdl_gfsxmergesta_co.$cycle $COMOUT
  cp mdl_cogoedmoxgrsq.$cycle $COMOUT
  cp mdl_cogoemosxgrsq.$cycle $COMOUT
  cp mdl_gfsgmosco.$cycle $COMOUT
  cp mdl_gfsxtsvr40grd.sq.$cycle $COMOUT
  # ELEMENT-SPECIFIC GRIB2 FILES WITHOUT HEADERS. SENDING TO
  # COM WITHOUT THE .nohead EXTENSION.
  cp mdl_gmosxcogb2temp.$cycle.nohead $COMOUT/mdl_gmosxcogb2temp.$cycle
  cp mdl_gmosxcogb2dewp.$cycle.nohead $COMOUT/mdl_gmosxcogb2dewp.$cycle
  cp mdl_gmosxcogb2max.$cycle.nohead $COMOUT/mdl_gmosxcogb2max.$cycle
  cp mdl_gmosxcogb2min.$cycle.nohead $COMOUT/mdl_gmosxcogb2min.$cycle
  cp mdl_gmosxcogb2rh.$cycle.nohead $COMOUT/mdl_gmosxcogb2rh.$cycle
  cp mdl_gmosxcogb2ptstm06.$cycle.nohead $COMOUT/mdl_gmosxcogb2ptstm06.$cycle
  cp mdl_gmosxcogb2ptstm12.$cycle.nohead $COMOUT/mdl_gmosxcogb2ptstm12.$cycle
  cp mdl_gmosxcogb2wspd.$cycle.nohead $COMOUT/mdl_gmosxcogb2wspd.$cycle
  cp mdl_gmosxcogb2wdir.$cycle.nohead $COMOUT/mdl_gmosxcogb2wdir.$cycle
  cp mdl_gmosxcogb2wgst.$cycle.nohead $COMOUT/mdl_gmosxcogb2wgst.$cycle
  cp mdl_gmosxcogb2pop6.$cycle.nohead $COMOUT/mdl_gmosxcogb2pop6.$cycle
  cp mdl_gmosxcogb2pop12.$cycle.nohead $COMOUT/mdl_gmosxcogb2pop12.$cycle
  cp mdl_gmosxcogb2sky.$cycle.nohead $COMOUT/mdl_gmosxcogb2sky.$cycle
  cp mdl_gmosxcogb2qpf06.$cycle.nohead $COMOUT/mdl_gmosxcogb2qpf06.$cycle
  cp mdl_gmosxcogb2qpf12.$cycle.nohead $COMOUT/mdl_gmosxcogb2qpf12.$cycle
  cp mdl_gmosxcogb2snw24.$cycle.nohead $COMOUT/mdl_gmosxcogb2snw24.$cycle
  # SEND PTSTM03 ONLY IF 00Z. WE ARE NOT SENDING THE 00Z PTSTM03 FILE
  # TO PCOM SINCE IT IS NOT BEING ALTERTED TO TGFTP.
  if test $cyc -eq '00'
  then
    cp mdl_gmosxcogb2ptstm03.$cycle.nohead $COMOUT/mdl_gmosxcogb2ptstm03.$cycle
  fi
  # SEND XTRN GRIB2 FILE AND ELEMENT-SPECIFIC FILES
  # WITH SUPER AND INDIVIDUAL HEADERS TO PCOM
  cp mdl_gmosxcogrib2.xtrn.$cycle $pcom/mdl_gmosxcogrib2.xtrn.$job
  cp mdl_gmosxcogb2temp.xtrn.$cycle $pcom/mdl_gmosxcogb2temp.xtrn.$job
  cp mdl_gmosxcogb2dewp.xtrn.$cycle $pcom/mdl_gmosxcogb2dewp.xtrn.$job
  cp mdl_gmosxcogb2max.xtrn.$cycle $pcom/mdl_gmosxcogb2max.xtrn.$job
  cp mdl_gmosxcogb2min.xtrn.$cycle $pcom/mdl_gmosxcogb2min.xtrn.$job
  cp mdl_gmosxcogb2rh.xtrn.$cycle $pcom/mdl_gmosxcogb2rh.xtrn.$job
  cp mdl_gmosxcogb2pop6.xtrn.$cycle $pcom/mdl_gmosxcogb2pop6.xtrn.$job
  cp mdl_gmosxcogb2pop12.xtrn.$cycle $pcom/mdl_gmosxcogb2pop12.xtrn.$job
  cp mdl_gmosxcogb2wspd.xtrn.$cycle $pcom/mdl_gmosxcogb2wspd.xtrn.$job
  cp mdl_gmosxcogb2wdir.xtrn.$cycle $pcom/mdl_gmosxcogb2wdir.xtrn.$job
  cp mdl_gmosxcogb2ptstm06.xtrn.$cycle $pcom/mdl_gmosxcogb2ptstm06.xtrn.$job
  cp mdl_gmosxcogb2ptstm12.xtrn.$cycle $pcom/mdl_gmosxcogb2ptstm12.xtrn.$job
  cp mdl_gmosxcogb2qpf06.xtrn.$cycle $pcom/mdl_gmosxcogb2qpf06.xtrn.$job
  cp mdl_gmosxcogb2qpf12.xtrn.$cycle $pcom/mdl_gmosxcogb2qpf12.xtrn.$job
  cp mdl_gmosxcogb2sky.xtrn.$cycle $pcom/mdl_gmosxcogb2sky.xtrn.$job
  cp mdl_gmosxcogb2snw24.xtrn.$cycle $pcom/mdl_gmosxcogb2snw24.xtrn.$job
  cp mdl_gmosxcogb2wgst.xtrn.$cycle $pcom/mdl_gmosxcogb2wgst.xtrn.$job
  # SEND PTSTM03 TO /pcom FOR 00Z ONLY.
  if test $cyc -eq '00'
  then
     cp mdl_gmosxcogb2ptstm03.xtrn.$cycle $pcom/mdl_gmosxcogb2ptstm03.xtrn.$job
  fi
  # CHECK TO SEE WHICH POP/QPF FILES TO SEND TO PCOM
  i=0
  for element in pop6 pop12 qpf06 qpf12
  do
    if [ ${USEHRGRB2[$i]} -eq 1 ]; then
      cp mdl_gmosxcogb2hr${element}.xtrn.$cycle $pcom/mdl_gmosxcogb2hr${element}.xtrn.$job
    elif [ ${USEHRGRB2[$i]} -eq 0 ]; then
      cp mdl_gmosxcogb2${element}.xtrn.$cycle $pcom/mdl_gmosxcogb2${element}.xtrn.$job
    fi
    i=$(( $i + 1 ))
  done

fi

#######################################################################
#  THEN ALERT PRODUCTS TO TGFTP AND THE SBN
#  FOR THE SBN ALL THE PRODUCTS ARE IN ONE FILE W/WMO HEADERS
#  FOR TGFTP GRIDS ARE GROUPED BY ELEMENT AND DO NOT HAVE WMO HEADERS
#
#  NOTE (2/9/2011):
#  DBNET ALERTS COMMANDS HAVE NOT BEEN CREATED IN THIS SECTION FOR THE
#  ELEMENT-SPECIFIC GRIB2 FILES WITH SUPER AND INDIVIDUAL HEADERS. AT
#  THIS TIME, THE TOC CANNOT HANDLE SUPERHEADED DATA GREATER THAN 20MB.
#  WE EXPECT THIS TO CHANGE IN THE NEAR? FUTURE (TO POSSIBLY 50MB).
#  THEREFORE, THIS OF THE SCRIPT WILL NEED TO BE UPDATED WHEN THE TOC
#  HAS FINISHED UPGRADING THEIR SYSTEMS.
#
#  A NEW ALERT SUBTYPE STRING WILL BE USED WHEN ALERTING NON-HEADED
#  ELEMENT-SPECIFIC FILES: GMOSXCOT, GMOSXCOTD, ETC.
#######################################################################
if test $SENDDBN = 'YES'
then
    # ALERT XTRN GRIB2 FILE (ALL ELEMENTS) TO TOC FOR ROUTING TO SBN.
    #$DBNROOT/bin/dbn_alert NTC_LOW gfs $job $pcom/mdl_gmosxcogrib2.xtrn.$job

    # ALERT ELEMENT-SPECIFIC GRIB2 FILES WITH WMO SUPERHEADERS AND
    # INDIVIDUAL HEADERS
    $DBNROOT/bin/dbn_alert NTC_LOW gfs $job $pcom/mdl_gmosxcogb2temp.xtrn.$job
    $DBNROOT/bin/dbn_alert NTC_LOW gfs $job $pcom/mdl_gmosxcogb2dewp.xtrn.$job
    $DBNROOT/bin/dbn_alert NTC_LOW gfs $job $pcom/mdl_gmosxcogb2max.xtrn.$job
    $DBNROOT/bin/dbn_alert NTC_LOW gfs $job $pcom/mdl_gmosxcogb2min.xtrn.$job
    $DBNROOT/bin/dbn_alert NTC_LOW gfs $job $pcom/mdl_gmosxcogb2rh.xtrn.$job
    $DBNROOT/bin/dbn_alert NTC_LOW gfs $job $pcom/mdl_gmosxcogb2wdir.xtrn.$job
    $DBNROOT/bin/dbn_alert NTC_LOW gfs $job $pcom/mdl_gmosxcogb2wspd.xtrn.$job
    $DBNROOT/bin/dbn_alert NTC_LOW gfs $job $pcom/mdl_gmosxcogb2ptstm06.xtrn.$job
    $DBNROOT/bin/dbn_alert NTC_LOW gfs $job $pcom/mdl_gmosxcogb2ptstm12.xtrn.$job
    $DBNROOT/bin/dbn_alert NTC_LOW gfs $job $pcom/mdl_gmosxcogb2sky.xtrn.$job
    $DBNROOT/bin/dbn_alert NTC_LOW gfs $job $pcom/mdl_gmosxcogb2wgst.xtrn.$job
    $DBNROOT/bin/dbn_alert NTC_LOW gfs $job $pcom/mdl_gmosxcogb2snw24.xtrn.$job
    # ALERT 3-HR TSTMS AT 00Z ONLY
    if test $cyc -eq '00'
    then
       $DBNROOT/bin/dbn_alert NTC_LOW gfs $job $pcom/mdl_gmosxcogb2ptstm03.xtrn.$job
    fi
    # ALERT POP6
    if [ ${USEHRGRB2[0]} -eq 1 ]; then
      $DBNROOT/bin/dbn_alert NTC_LOW gfs  $job $pcom/mdl_gmosxcogb2hrpop6.xtrn.$job
    elif [ ${USEHRGRB2[0]} -eq 0 ]; then
      $DBNROOT/bin/dbn_alert NTC_LOW gfs  $job $pcom/mdl_gmosxcogb2pop6.xtrn.$job
    fi
    # ALERT POP12
    if [ ${USEHRGRB2[1]} -eq 1 ]; then
      $DBNROOT/bin/dbn_alert NTC_LOW gfs  $job $pcom/mdl_gmosxcogb2hrpop12.xtrn.$job
    elif [ ${USEHRGRB2[1]} -eq 0 ]; then
      $DBNROOT/bin/dbn_alert NTC_LOW gfs  $job $pcom/mdl_gmosxcogb2pop12.xtrn.$job
    fi
    # ALERT QPF06
    if [ ${USEHRGRB2[2]} -eq 1 ]; then
      $DBNROOT/bin/dbn_alert NTC_LOW gfs  $job $pcom/mdl_gmosxcogb2hrqpf06.xtrn.$job
    elif [ ${USEHRGRB2[2]} -eq 0 ]; then
      $DBNROOT/bin/dbn_alert NTC_LOW gfs  $job $pcom/mdl_gmosxcogb2qpf06.xtrn.$job
    fi
    # ALERT QPF12
    if [ ${USEHRGRB2[3]} -eq 1 ]; then
      $DBNROOT/bin/dbn_alert NTC_LOW gfs  $job $pcom/mdl_gmosxcogb2hrqpf12.xtrn.$job
    elif [ ${USEHRGRB2[3]} -eq 0 ]; then
      $DBNROOT/bin/dbn_alert NTC_LOW gfs  $job $pcom/mdl_gmosxcogb2qpf12.xtrn.$job
    fi

    ## ALERT INDIVIDUAL ELEMENT GRIB2 FILES. THESE ARE DESTINED FOR TGFTP.
    $DBNROOT/bin/dbn_alert MDLFCST GMOSXCOT     $job $COMOUT/mdl_gmosxcogb2temp.$cycle
    $DBNROOT/bin/dbn_alert MDLFCST GMOSXCOTD    $job $COMOUT/mdl_gmosxcogb2dewp.$cycle
    $DBNROOT/bin/dbn_alert MDLFCST GMOSXCOMX    $job $COMOUT/mdl_gmosxcogb2max.$cycle
    $DBNROOT/bin/dbn_alert MDLFCST GMOSXCOMN    $job $COMOUT/mdl_gmosxcogb2min.$cycle
    $DBNROOT/bin/dbn_alert MDLFCST GMOSXCORH    $job $COMOUT/mdl_gmosxcogb2rh.$cycle
    $DBNROOT/bin/dbn_alert MDLFCST GMOSXCOWD    $job $COMOUT/mdl_gmosxcogb2wdir.$cycle
    $DBNROOT/bin/dbn_alert MDLFCST GMOSXCOWS    $job $COMOUT/mdl_gmosxcogb2wspd.$cycle
    $DBNROOT/bin/dbn_alert MDLFCST GMOSXCOTS6   $job $COMOUT/mdl_gmosxcogb2ptstm06.$cycle
    $DBNROOT/bin/dbn_alert MDLFCST GMOSXCOTS12  $job $COMOUT/mdl_gmosxcogb2ptstm12.$cycle
    $DBNROOT/bin/dbn_alert MDLFCST GMOSXCOSKY   $job $COMOUT/mdl_gmosxcogb2sky.$cycle
    $DBNROOT/bin/dbn_alert MDLFCST GMOSXCOGST   $job $COMOUT/mdl_gmosxcogb2wgst.$cycle
    $DBNROOT/bin/dbn_alert MDLFCST GMOSXCOSNW24 $job $COMOUT/mdl_gmosxcogb2snw24.$cycle
    ## ALERT POP6
    #if [ ${USEHRGRB2[0]} -eq 1 ]; then
    #  $DBNROOT/bin/dbn_alert MDLFCST GMOSXCOPOP6  $job $COMOUT/mdl_gmosxcogb2hrpop6.$cycle
    #elif [ ${USEHRGRB2[0]} -eq 0 ]; then
    #  $DBNROOT/bin/dbn_alert MDLFCST GMOSXCOPOP6  $job $COMOUT/mdl_gmosxcogb2pop6.$cycle
    #fi
    ## ALERT POP12
    #if [ ${USEHRGRB2[1]} -eq 1 ]; then
    #  $DBNROOT/bin/dbn_alert MDLFCST GMOSXCOPOP12  $job $COMOUT/mdl_gmosxcogb2hrpop12.$cycle
    #elif [ ${USEHRGRB2[1]} -eq 0 ]; then
    #  $DBNROOT/bin/dbn_alert MDLFCST GMOSXCOPOP12  $job $COMOUT/mdl_gmosxcogb2pop12.$cycle
    #fi
    ## ALERT QPF06
    #if [ ${USEHRGRB2[2]} -eq 1 ]; then
    #  $DBNROOT/bin/dbn_alert MDLFCST GMOSXCOQPF6  $job $COMOUT/mdl_gmosxcogb2hrqpf06.$cycle
    #elif [ ${USEHRGRB2[2]} -eq 0 ]; then
    #  $DBNROOT/bin/dbn_alert MDLFCST GMOSXCOQPF6  $job $COMOUT/mdl_gmosxcogb2qpf06.$cycle
    #fi
    ## ALERT QPF12
    #if [ ${USEHRGRB2[3]} -eq 1 ]; then
    #  $DBNROOT/bin/dbn_alert MDLFCST GMOSXCOQPF12  $job $COMOUT/mdl_gmosxcogb2hrqpf12.$cycle
    #elif [ ${USEHRGRB2[3]} -eq 0 ]; then
    #  $DBNROOT/bin/dbn_alert MDLFCST GMOSXCOQPF12  $job $COMOUT/mdl_gmosxcogb2qpf12.$cycle
    #fi
fi

#######################################################################
#
# PROGRAM GRIDARCH - ARCHIVES THE GRIDDED
#                    FORECASTS FOR ALL PROJECTIONS (6 - 198).
#######################################################################

echo MDLLOG: `date` - begin job GRIDARCH - ARCHIVES GRIDDED MOS FORECASTS
export pgm=mdl_gridarch
. prep_step
startmsg
export XLFUNIT_10="ncepdate"
export XLFUNIT_26="$FIXmdl/mdl_granlsta_co.lst"
export XLFUNIT_27="$FIXmdl/mdl_granlsta_co.tbl"
export XLFUNIT_28="$FIXmdl/mdl_gfsgrarch_co.$cycle"
export XLFUNIT_29="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_43="mdl_gfsgmosco.$cycle"
export XLFUNIT_60="mdl_gfsgmoscosq_nohr.$cycle"
$EXECmdl/mdl_gridarch < $PARMmdl/mdl_gridarch_co.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo MDLLOG: `date` -  GRIDARCH ended

#######################################################################
# COPY FILES TO COM
#  FOR ARCHIVING THE GOES, WE'LL SAVE THE U140 OUTPUTS
#######################################################################

# CAT HR POP/QPF GRIDDED SEQUENTIAL FILE INTO GMOS GRIDDED
# IF THE FILE IS PRESENT, COPY INTO WORKING DIRECTORY.
if [ $USEHRTDLP -eq 1 ]; then
  cat mdl_gfsgmoscosq_nohr.$cycle mdl_hrqpf_gfsgmoscosq.$cycle > mdl_gfsgmoscosq.$cycle
elif [ $USEHRTDLP -eq 0 ]; then
  cp mdl_gfsgmoscosq_nohr.$cycle mdl_gfsgmoscosq.$cycle
fi

if test $SENDCOM = 'YES'
then
  cp mdl_gfsgmoscosq.$cycle $COMOUT
fi

#######################################################################
echo MDLLOG: `date` - Job gfsmos_cogridded_extprdgen has ended.
#######################################################################
