#!/bin/sh
#######################################################################
#  Job Name:  exlmp_prdgen.sh.sms
#  Purpose:   To run all steps necessary to create LMP products.  It
#             creates the text, BUFR, and GRIB2 products.
#  Remarks:
#  HISTORY:   August 22, 2005  JRW - new job for LAMP MOS2000
#             Sept   08, 2005  JRW - Removed case statement, PDYm1, and
#                                    DATmh1
#             Nov.   02, 2005  JRW - Reconciled /nwpara/scripts version
#                                    and handoff version
#             March  01, 2006  JRW - Added lmp tstorms
#             March  17, 2006  JRW - Added copy of lmp_stnmosfcsts back
#                                    COMOUT.
#             April  26, 2006  JRW - Added 21z, ADDED lmp_bufrmsg code.
#             May    31, 2006  JRW - Added 03z
#             June   20, 2006  JRW - Added LAVCOMTXT, attach_ffs.pl, AND
#                                    TOC2GRIB.  Modified name of gfslmplavtx
#                                    to lavtxt.
#             June   29, 2006  JRW - Added dbnAlert to job stream.
#             June   30, 2006  JRW - Added 15z cycle.
#             July   13, 2006  JEG - FIXED arguments to dbn_alert.
#                                    The second and third instances had
#                                    NTC LOW instead of NTC_LOW (i.e.,
#                                    the underscore was missing)
#             July   27, 2006  JRW - Added dbnAlert to send the following files
#                                    to the tgftp server.
#                                    lmp_lavtxt.t${HOUR}z,
#                                    lmp_bufrmsg.xtrn.t${HOUR}z
#                                    lmp_tstm_prbgrib2.t${HOUR}z
#                                    lmp_tstm_catgrib2.t${HOUR}z
#             Sept.  27, 2006  JRW - Modified to use /nwprod/util/ush/make_NTC_file.pl
#                                    instead of /nwprod/util/ush/attach_ffs.pl
#                                    due TOC requirement.
#             March  22, 2007  JRW - Modified "even" to be "evn"
#             March  28, 2007  JRW - Added 00z, 06z, 12z, and 18z.
#             August 10, 2007  SDS - Added 04z, 05z, 10z, and 11z.
#             March  10, 2008  SDS - Added 01z, 07z, 13z, and 19z.
#             May    16, 2008  SDS - Added 16z, 17z, 22z, and 23z.
#             Sept   22, 2008  SDS - Added 02z, 08z, 14z, and 20z.
#             April  03, 2012  CH/JEG/MW - Modified for station implementation 
#                                          which added 718 stations and 
#                                          redeveloped CIG and OSC equations
#                                          and thresholds. 
#           
#######################################################################
echo LMPLOG: `date` - begin job exlmp_prdgen.sh.sms

set -x

export PS4='$SECONDS + '

msg="$job has begun on `hostname` at `date`"
postmsg "$jlogfile" "$msg"

cd $DATA

###################################
# SETTING DATE AND CYCLE TIMES
###################################

export HOUR=$cyc

export COMIN COMOUT PDY 

case $HOUR in
   00 | 02 | 04 | 06 | 08 | 10 | 12 | 14 | 16 | 18 | 20 | 22 ) tstmcyc="evn";;
   01 | 03 | 05 | 07 | 09 | 11 | 13 | 15 | 17 | 19 | 21 | 23 ) tstmcyc="odd";;
esac

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

#######################################################################
#   LMP IS CURRENTLY ONLY SETUP TO PRODUCE FORECASTS FOR THE
#   00Z, 01Z, 02Z, 03Z, 04Z, 05Z, 06Z, 07Z, 08Z, 09Z, 10Z, 11Z, 12Z, 
#   13Z, 14Z, 15Z, 16Z, 17Z, 18Z, 19Z, 20Z, 21Z, 22Z, AND 23Z CYCLES.
#######################################################################

if [[ $HOUR = 00 || $HOUR = 01 || $HOUR = 02 || $HOUR = 03 || \
      $HOUR = 04 || $HOUR = 05 || $HOUR = 06 || $HOUR = 07 || \
      $HOUR = 08 || $HOUR = 09 || $HOUR = 10 || $HOUR = 11 || \
      $HOUR = 12 || $HOUR = 13 || $HOUR = 14 || $HOUR = 15 || \
      $HOUR = 16 || $HOUR = 17 || $HOUR = 18 || $HOUR = 19 || \
      $HOUR = 20 || $HOUR = 21 || $HOUR = 22 || $HOUR = 23 ]]; then

######################################################################
#          COPING FILES TO WORKING DIRECTORY
######################################################################
echo LMPLOG: `date` - start copying files to $DATA

cp $COMIN/lmp_stnmosfcsts.t${HOUR}z lmp_stnmosfcsts.t${HOUR}z
cp $COMIN/lmp_tstmfcsts.t${HOUR}z lmp_tstmfcsts.t${HOUR}z
cp $COMIN/lmp_tstmgrib2.t${HOUR}z lmp_tstmgrib2.t${HOUR}z

echo LMPLOG: `date` - end copying files to $DATA 
#######################################################################
#
#    PROGRAM FCSTPOST - CONVERT TSTM EQUALY SPACED STATIONS TO 
#                       LMP STATIONS
#
#######################################################################
echo LMPLOG: `date` - begin job FCSTPOST - USED TO COMBINE TSTM STNLMP FORECASTS

export pgm=lmp_fcstpost
. prep_step

export XLFUNIT_10="ncepdate"
export XLFUNIT_26="$PARMlmp/lmp_stnsprod.lst"
export XLFUNIT_27="$PARMlmp/lmp_tstm_to_stn.tbl"
export XLFUNIT_28="$PARMlmp/lmp_tstmstn_postid_${tstmcyc}.tbl"
export XLFUNIT_29="$FIXlmp/lmp_mos2000id.tbl"
export XLFUNIT_48="lmp_tstmfcsts.t${HOUR}z"
export XLFUNIT_49="lmp_stnmosfcsts.t${HOUR}z"
startmsg
$EXEClmp/lmp_fcstpost < $PARMlmp/lmp_tstmstnpost.cn >> $pgmout 2>errfile
export err=$?; err_chk

echo LMPLOG: `date` - end job FCSTPOST
#######################################################################
#
# PROGRAM LAVTXT - CREATE LMP BULLETIN             
#
#######################################################################
echo LMPLOG: `date` - begin job LMP_LAVTXT - PUT LMP FCSTS IN TO BULLETIN

export pgm=lmp_lavtxt
. prep_step
export XLFUNIT_10="ncepdate"
export XLFUNIT_27="$PARMlmp/lmp_station.tbl"
export XLFUNIT_48="lmp_stnmosfcsts.t${HOUR}z"
export XLFUNIT_60="lmp_lavtxt.t${HOUR}z"
startmsg
$EXEClmp/lmp_lavtxt < $PARMlmp/lmp_lavstnprd.lst.t${HOUR}z >> $pgmout 2>errfile
export err=$?; err_chk

echo LMPLOG: `date` -  LMP_LAVTXT ended
#######################################################################
#
# PROGRAM LAVCOMTXT - CREATE LAMP BULLETIN WITH COMMUNICATIONS
#
#######################################################################
echo LMPLOG: `date` - begin job LAVCOMTXT - PUT LAMP FCSTS IN TO BULLETIN WITH COMMUNTICATIONS

export pgm=lmp_lavcomtxt
. prep_step
export XLFUNIT_10="ncepdate"
export XLFUNIT_27="$PARMlmp/lmp_station.tbl"
export XLFUNIT_48="lmp_stnmosfcsts.t${HOUR}z"
export XLFUNIT_60="lmp_lavtxttran.t${HOUR}z"
startmsg
$EXEClmp/lmp_lavcomtxt < $PARMlmp/lmp_lavstnprd.lst.t${HOUR}z >> $pgmout 2>errfile
export err=$?; err_chk

echo LMPLOG: `date` -  LAVCOMTXT ended
#######################################################################
# make_NTC_file.pl
# RUN THIS TO ATTACH THE COMMUNTICATIONS INFORMATION TO THE TEXT MESSAGE
#######################################################################

echo LMPLOG: `date` - begin make_NTC_file

/nwprod/util/ush/make_NTC_file.pl FOUS11 KWNO ${PDY}${HOUR} LAVUSA lmp_lavtxttran.t${HOUR}z lmp_lavtxttran.t${HOUR}z.with_ffs

echo LMPLOG: `date` - end make_NTC_file
#######################################################################
#
# PROGRAM RA2MDLP - CONVERT RANDOM ACCESS TO SEQUENTIAL MDL_PACK
#
#######################################################################

echo LMPLOG: `date` - begin job RA2MDLP - CONVERTS RANDOM ACCESS FILE TO TDLPACK

export pgm=mdl_ra2mdlp
. prep_step
export XLFUNIT_10="ncepdate"
export XLFUNIT_26="$PARMlmp/lmp_stnsprod.lst"
export XLFUNIT_27="$PARMlmp/lmp_station.tbl"
export XLFUNIT_28="$PARMlmp/lmp_ra2mdlpids.tbl.t${HOUR}z"
export XLFUNIT_29="$FIXlmp/lmp_mos2000id.tbl"
export XLFUNIT_38="lmp_stnmosfcsts.t${HOUR}z"
export XLFUNIT_66="lmp_stn_lavfcsts.t${HOUR}z"
startmsg
$EXEClmp/mdl_ra2mdlp < $PARMlmp/lmp_ra2mdlp.cn >> $pgmout 2>errfile
export err=$?; err_chk

echo LMPLOG: `date` -  RA2MDLPX ended
#######################################################################
#
# PROGRAM BUFRMSG - GENERATE GFS LMP BUFR MESSAGES
#
#######################################################################
echo LMPLOG: `date` - begin job BUFRLMP - CREATE LMP BUFR MESSAGE

export pgm=lmp_bufrmsg
. prep_step
export XLFUNIT_10="ncepdate"
export XLFUNIT_25="$PARMlmp/lmp_lavstnprd.lst.t${HOUR}z"
export XLFUNIT_27="$PARMlmp/lmp_station.tbl"
export XLFUNIT_40="lmp_stnmosfcsts.t${HOUR}z"
export XLFUNIT_60="lmp_bufrmsg.xtrn.t${HOUR}z"
startmsg
$EXEClmp/lmp_bufrmsg < $PARMlmp/lmp_bufrmsg.cn.t${HOUR}z >> $pgmout 2>errfile
export err=$?; err_chk

echo LMPLOG: `date` - end job BUFRLMP
#######################################################################
#   NOW RUN TOCGRIB2 TO PUT HEADERS AND FFS ON THE FILES
#   CAT ALL OF THE GRIB FILES TOGETHER AND RUN TOCGRIB2 ONCE
#######################################################################

echo LMPLOG: `date` - begin job TOCGRIB2 - ADD COMMUNICATION INFORMATION TO GRIB2 FILE

$EXECutil/grb2index lmp_tstmgrib2.t${HOUR}z lmp_tstmgrib2.t${HOUR}z.index

export pgm=tocgrib2
. prep_step
export XLFUNIT_11="lmp_tstmgrib2.t${HOUR}z"
export XLFUNIT_31="lmp_tstmgrib2.t${HOUR}z.index"
export XLFUNIT_51="lmp_tstmgrib2.xtrn.t${HOUR}z"
startmsg
$EXECutil/tocgrib2 < $PARMlmp/lmp_grib2head.t${HOUR}z >> $pgmout 2>errfile
export err=$?; err_chk

echo LMPLOG: `date` - end job TOCGRIB2
#########################################################################
#  COPY DATA TO COMOUT DIRECTORY FOR USE IN OTHER RUN TIMES
#  SEND DATA VIA DBN_ALERT TO SBN.
#########################################################################

if test "$SENDCOM" = 'YES'
then

   cp lmp_lavtxt.t${HOUR}z $COMOUT/lmp_lavtxt.t${HOUR}z       
   cp lmp_lavtxttran.t${HOUR}z.with_ffs $COMOUT/lmp_lavtxttran.t${HOUR}z
   cp lmp_lavtxttran.t${HOUR}z.with_ffs $pcom/lmp_lavtxttran.t${HOUR}z       
   cp lmp_stn_lavfcsts.t${HOUR}z $COMOUT/lmp_stn_lavfcsts.t${HOUR}z     
   cp lmp_stnmosfcsts.t${HOUR}z $COMOUT/lmp_stnmosfcsts.t${HOUR}z
   cp lmp_bufrmsg.xtrn.t${HOUR}z $COMOUT/lmp_bufrmsg.xtrn.t${HOUR}z
   cp lmp_bufrmsg.xtrn.t${HOUR}z $pcom/lmp_bufrmsg.xtrn.t${HOUR}z
   cp lmp_tstmgrib2.xtrn.t${HOUR}z $COMOUT/lmp_tstmgrib2.xtrn.t${HOUR}z
   cp lmp_tstmgrib2.xtrn.t${HOUR}z $pcom/lmp_tstmgrib2.xtrn.t${HOUR}z

   if test $SENDDBN = 'YES'
   then
      $DBNROOT/bin/dbn_alert NTC_LOW LAMP $job $pcom/lmp_bufrmsg.xtrn.t${HOUR}z
      $DBNROOT/bin/dbn_alert NTC_LOW LAMP $job $pcom/lmp_tstmgrib2.xtrn.t${HOUR}z
      $DBNROOT/bin/dbn_alert NTC_LOW LAMP $job $pcom/lmp_lavtxttran.t${HOUR}z
      $DBNROOT/bin/dbn_alert MODEL LAMP_TEXT $job $COMOUT/lmp_lavtxt.t${HOUR}z
      $DBNROOT/bin/dbn_alert MODEL LAMP_BUFR $job $COMOUT/lmp_bufrmsg.xtrn.t${HOUR}z
      $DBNROOT/bin/dbn_alert MODEL LAMP_GRIB2 $job $COMOUT/lmp_tstm_prbgrib2.t${HOUR}z
      $DBNROOT/bin/dbn_alert MODEL LAMP_GRIB2 $job $COMOUT/lmp_tstm_catgrib2.t${HOUR}z
   fi

fi

else

echo LMPLOG: `date` - THIS IS NOT A CURRENT LMP FORECAST CYCLE TIME NO NEED TO MAKE LMP PRODUCTS

fi

echo LMPLOG: `date -u` - exlmp_prdgen.sh.sms ended 
exit 0

