#!/bin/sh
#######################################################################
#  Job Name:  exlmp_station_fcst.sh.sms
#  Purpose:   To run all steps neccessary to create LAMP fcsts to update
#             the GFS MOS
#  Remarks:
#  HISTORY:   July 01, 2005  JRW - new job for LAMP MOS2000
#             Sept 08, 2005  JRW - added COMIN_G to fix problem with
#                                  retreiving gfs grids and gfs mos
#                                  from 00-04z.  Removed uneccessary
#                                  variables PDYmh1 and DATmh1.
#             Nov. 02, 2005  JRW - reconciled /nwpara/scripts version
#                                  handoff versions
#             Feb. 08, 2006  JRW - Added CCIG, PTYPE, PCHAR
#             Feb. 27, 2006  JRW - Added WARM SEASON PTYPE.
#             Apr. 26, 2006  JRW - Added 21z cycle.
#             May  31, 2006  JRW - Added 03z cycle.
#             June 30, 2006  JRW - Added 15z cycle.
#             July 10, 2006  JRW - Fixed comments.
#             Mar. 28, 2007  JRW - Added 00z, 06z, 12z, and 18z.
#             Aug. 10  2007  SDS - Modified so that 04, 10, 16, and 22
#                                  UTC cycles use the correct GFS data.
#                                  Added 04z, 05z, 10z, and 11z
#             Mar. 10, 2008  SDS - Added 01z, 07z, 13z, and 19z.
#             May  16, 2008  SDS - Added 16z, 17z, 22z, and 23z.
#                                  Modified script to distinguish
#                                  between 18Z MOS forecasts from the
#                                  current and previous days.
#             Sept 22, 2008  SDS - Added 02z, 08z, 14z, and 20z.
#             Apr. 03, 2012  CH/JEG/MW - Modified for station implementation
#                                        which would be in June 2012.
#            
#######################################################################
echo LMPLOG: `date` - begin job exlmp_station_fcst.sh.sms 

export PS4='$SECONDS + '

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

cd $DATA

#######################################################################
#                SETTING DATE AND CYCLE TIMES
#######################################################################
export HOUR=$cyc
echo $PDY $HOUR : Date and Cycle - echo PDY and cyc

export COMIN COMOUT PDY PDYm1
#######################################################################
#
#      MOS FORECAST FILES WILL BE NAMED TO DISTINGUISH BETWEEN
#      RUNS FROM THE CURRENT AND PREVIOUS DAYS.  THIS WILL ONLY
#      BE A FACTOR FOR CYCLES THAT USE 18Z MOS.  THOSE THAT 
#      REQUIRE THE PREVIOUS DAY'S MOS WILL BE LABELED WITH 'm1'.
#
#######################################################################
case $HOUR in
   04 | 05 | 06 | 07 | 08 | 09 )
      gfscyc="00"
      MOSFIL=lmp_gfsmospkd.t${gfscyc}z
      COMGFS=/com/gfs/prod/gfs.$PDY;;
   10 | 11 | 12 | 13 | 14 | 15 )
      gfscyc="06"
      MOSFIL=lmp_gfsmospkd.t${gfscyc}z
      COMGFS=/com/gfs/prod/gfs.$PDY;;
   16 | 17 | 18 | 19 | 20 | 21 )
      gfscyc="12"
      MOSFIL=lmp_gfsmospkd.t${gfscyc}z
      COMGFS=/com/gfs/prod/gfs.$PDY;;
   22 | 23 )
      gfscyc="18"
      MOSFIL=lmp_gfsmospkd.t${gfscyc}z
      COMGFS=/com/gfs/prod/gfs.$PDY;;
   00 | 01 | 02 | 03 )
      gfscyc="18"
      MOSFIL=lmp_gfsmospkd.t${gfscyc}zm1
      COMGFS=/com/gfs/prod/gfs.$PDYm1;;
esac

######################################################################
# COPING FILES TO WORKING DIRECTORY
######################################################################

echo LMPLOG: `date` - start copying files to $DATA 

cp $COMIN/lmp_obspkd.$HOUR lmp_obspkd.$HOUR
cp $COMIN/lmp_grdmodl.t${HOUR}z lmp_grdmodl.t${HOUR}z
cp $COMIN/lmp_grdmodl_qcdobs.t${HOUR}z lmp_grdmodl_qcdobs.t${HOUR}z
cp $COMIN/lmp_compobs.t${HOUR}z lmp_compobs.t${HOUR}z
cp $COMGFS/mdl_gfspkd.t${gfscyc}z mdl_gfspkd.t${gfscyc}z

echo LMPLOG: `date` - end copying files to $DATA  

######################################################################
#   
#   FIRST EXECUTION OF PROGRAM MOSPRED
#   MOSPRED - USED TO GET LMP MODEL VECTOR BASED FORECASTS 
#             FOR INPUT INTO LMP FORECAST EQUATIONS.
#
######################################################################
echo LMPLOG: `date` - begin job MOSPRED - INTERPOLATE LMP MODEL DATA
export pgm=lmp_mospred
. prep_step
export XLFUNIT_10="ncepdate"
export XLFUNIT_20="lmp_grdmodl.t${HOUR}z"
export XLFUNIT_44="$FIXlmp/lmp_elv_rcmmask.ra"
export XLFUNIT_60="lmp_grdmodlstnpreds.t${HOUR}z"
export XLFUNIT_33="$PARMlmp/lmp_stnsprod.lst"
export XLFUNIT_34="$PARMlmp/lmp_station.tbl"
export XLFUNIT_39="$FIXlmp/lmp_mos2000id.tbl"
export XLFUNIT_35="$PARMlmp/lmp_grdmodlpredsids.tbl"
startmsg
$EXEClmp/lmp_mospred < $PARMlmp/lmp_grdmodlpreds.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo LMPLOG: `date` - First use of MOSPRED ended

#######################################################################
#   LMP IS CURRENTLY 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

#######################################################################
#
# PROGRAM RACREATE - MOS-2000 PROGRAM WHICH
#                   CREATES RANDOM ACCESS FILES; IN THIS CASE, THE
#                   CODE IS USED TO CREATE THE OPERATIONAL LMP
#                   FORECAST FILE.
#######################################################################

echo LMPLOG: `date` - begin job RACREATE - CREATE LMP FORECAST FILE
export pgm=mdl_racreate
. prep_step
export XLFUNIT_50="lmp_stnmosfcsts.t${HOUR}z"
startmsg
$EXEClmp/mdl_racreate < $PARMlmp/lmp_u350.cn >>  $pgmout 2>errfile
export err=$?; err_chk
echo LMPLOG: `date` -  RACREATE ended

#######################################################################
#
#  PROGRAM RAINIT - INITIALIZES RANDOM ACCESS LMP FORECAST
#                   FILE WITH STATION CALL LETTERS,
#                   ELEVATION, LATITUDE, AND LONGITUDE
#
#######################################################################
 
echo LMPLOG: `date` - begin job RAINIT - INITIALIZE LMP FORECAST FILE
export pgm=lmp_rainit
. prep_step
export XLFUNIT_10="ncepdate"
export XLFUNIT_26="$PARMlmp/lmp_stnsprod.lst"
export XLFUNIT_27="$PARMlmp/lmp_station.tbl"
export XLFUNIT_49="lmp_stnmosfcsts.t${HOUR}z"
startmsg
$EXEClmp/mdl_rainit < $PARMlmp/lmp_u351.cn >>  $pgmout 2>errfile
export err=$?; err_chk
echo LMPLOG: `date` -  RAINIT ended

#######################################################################
#
# RA2MDLP - CONVERT MOS FORECAST RANDOM ACCESS FILE TO SEQUENTIAL
#           MDLPACK ONLY DURING THE APPROPRIATE GFS CYCLE TIME.
#           IF FILE EXISTS IN COM AREA COPY IT OVER.
#
#######################################################################

if [[ -a $COMIN/$MOSFIL ]];then
   cp $COMIN/$MOSFIL $MOSFIL
else
   cp /com/date/t"$gfscyc"z ncepdate.gfscyc
   cp $COMGFS/mdl_gfsmos.t${gfscyc}z mdl_gfsmos.t${gfscyc}z
   echo LMPLOG: `date` - begin job RA2MDLP - CONVERTS RANDOM ACCESS FILE TO TDLPACK
   export pgm=mdl_ra2mdlp
   . prep_step
   export XLFUNIT_10="ncepdate.gfscyc"
   export XLFUNIT_26="$PARMlmp/lmp_stnsprod.lst"
   export XLFUNIT_27="$PARMlmp/lmp_station.tbl"
   export XLFUNIT_28="$PARMlmp/lmp_mosra2mdlpids.tbl"
   export XLFUNIT_29="$FIXlmp/lmp_mos2000id.tbl"
   export XLFUNIT_38="mdl_gfsmos.t${gfscyc}z"
   export XLFUNIT_66="$MOSFIL"
   startmsg
   $EXEClmp/mdl_ra2mdlp < $PARMlmp/lmp_mosra2mdlp.cn >> $pgmout 2>errfile
   export err=$?; err_chk

   if test "$SENDCOM" = 'YES'
   then
      cp $MOSFIL $COMOUT/.
   fi

   echo LMPLOG: `date` - end job RA2MDLP
fi

######################################################################
#
#   SECOND EXECUTION OF PROGRAM MOSPRED
#   MOSPRED - USED TO CREATE MOS AND GFS VECTOR BASED FORECASTS 
#             FOR INPUT INTO LMP FORECAST EQUATIONS.
#
######################################################################
echo LMPLOG: `date` - begin job MOSPRED - CREATE MOS AND GFS PREDICTORS
export pgm=lmp_mospred
. prep_step
export XLFUNIT_10="ncepdate"
export XLFUNIT_81="lmp_obspkd.${HOUR}"
export XLFUNIT_82="$MOSFIL"
export XLFUNIT_20="mdl_gfspkd.t${gfscyc}z"
export XLFUNIT_60="lmp_gfspreds.t${HOUR}z"
export XLFUNIT_33="$PARMlmp/lmp_stnsprod.lst"
export XLFUNIT_34="$PARMlmp/lmp_station.tbl"
export XLFUNIT_39="$FIXlmp/lmp_mos2000id.tbl"
export XLFUNIT_35="$PARMlmp/lmp_gfspredsids.tbl.t${HOUR}z"
startmsg
$EXEClmp/lmp_mospred < $PARMlmp/lmp_gfspreds.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo LMPLOG: `date` - Second use of MOSPRED ended
#######################################################################
#
#    PROGRAM EQNEVAL - CALCULATES LMP FORECASTS
#
#######################################################################

echo LMPLOG: `date` - begin job EQNEVAL - MAKE GFS LMP MOS FORECASTS 
export pgm=lmp_eqneval
. prep_step
export XLFUNIT_10="ncepdate"
export XLFUNIT_22="lmp_obspkd.${HOUR}"
export XLFUNIT_23="lmp_compobs.t${HOUR}z"
export XLFUNIT_24="lmp_grdmodlstnpreds.t${HOUR}z"
export XLFUNIT_25="lmp_gfspreds.t${HOUR}z"
export XLFUNIT_26="$PARMlmp/lmp_stnsprod.lst"
export XLFUNIT_27="$PARMlmp/lmp_station.tbl"
export XLFUNIT_28="$PARMlmp/lmp_predtofcst"
export XLFUNIT_29="$FIXlmp/lmp_mos2000id.tbl"
export XLFUNIT_31="$FIXlmp/lmp_wind.EQ.10010331.t${HOUR}z"
export XLFUNIT_32="$FIXlmp/lmp_wind.EQ.04010930.t${HOUR}z"
export XLFUNIT_33="$FIXlmp/lmp_tdp.EQ.10010331.t${HOUR}z"
export XLFUNIT_34="$FIXlmp/lmp_tdp.EQ.04010930.t${HOUR}z"
export XLFUNIT_35="$FIXlmp/lmp_visobv.EQ.10010331.t${HOUR}z"
export XLFUNIT_36="$FIXlmp/lmp_visobv.EQ.04010930.t${HOUR}z"
export XLFUNIT_37="$FIXlmp/lmp_cvis.EQ.10010331.t${HOUR}z"
export XLFUNIT_38="$FIXlmp/lmp_cvis.EQ.04010930.t${HOUR}z"
export XLFUNIT_39="$FIXlmp/lmp_popo.EQ.10010331.t${HOUR}z"
export XLFUNIT_40="$FIXlmp/lmp_popo.EQ.04010930.t${HOUR}z"
export XLFUNIT_51="$FIXlmp/lmp_pop6.EQ.10010331.t${HOUR}z"
export XLFUNIT_52="$FIXlmp/lmp_pop6.EQ.04010930.t${HOUR}z"
export XLFUNIT_53="$FIXlmp/lmp_pop12.EQ.10010331.t${HOUR}z"
export XLFUNIT_54="$FIXlmp/lmp_pop12.EQ.04010930.t${HOUR}z"
export XLFUNIT_55="$FIXlmp/lmp_gust.EQ.10010331.t${HOUR}z"
export XLFUNIT_56="$FIXlmp/lmp_gust.EQ.04010930.t${HOUR}z"
export XLFUNIT_57="$FIXlmp/lmp_gstc.EQ.10010331.t${HOUR}z"
export XLFUNIT_58="$FIXlmp/lmp_gstc.EQ.04010930.t${HOUR}z"
export XLFUNIT_59="$FIXlmp/lmp_cig.EQ.10010331.t${HOUR}z"
export XLFUNIT_60="$FIXlmp/lmp_cig.EQ.04010930.t${HOUR}z"
export XLFUNIT_61="$FIXlmp/lmp_ccig.EQ.10010331.t${HOUR}z"
export XLFUNIT_62="$FIXlmp/lmp_ccig.EQ.04010930.t${HOUR}z"
export XLFUNIT_63="$FIXlmp/lmp_pchar.EQ.10010331.t${HOUR}z"
export XLFUNIT_64="$FIXlmp/lmp_pchar.EQ.04010930.t${HOUR}z"
export XLFUNIT_65="$FIXlmp/lmp_ptype.EQ.09010531.t${HOUR}z"
export XLFUNIT_66="$FIXlmp/lmp_ptype.EQ.06010831.t${HOUR}z"
export XLFUNIT_67="$FIXlmp/lmp_osc.EQ.10010331.t${HOUR}z"
export XLFUNIT_68="$FIXlmp/lmp_osc.EQ.04010930.t${HOUR}z"
export XLFUNIT_49="lmp_stnmosfcsts.t${HOUR}z"
startmsg
$EXEClmp/lmp_eqneval < $PARMlmp/lmp_eqneval.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo LMPLOG: `date` - EQNEVAL ended 

#######################################################################
#
#    PROGRAM FCSTPOST - POST-PROCESSES LMP FORECASTS
#
#######################################################################

echo LMPLOG: `date` - begin job FCSTPOST - POST PROCESS LMP FORECASTS 
export pgm=lmp_fcstpost
. 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_stnpostid.tbl.t${HOUR}z"
export XLFUNIT_29="$FIXlmp/lmp_mos2000id.tbl"
export XLFUNIT_45="$FIXlmp/lmp_elv_rcmmask.ra"
export XLFUNIT_47="$FIXlmp/lmp_threshold"
export XLFUNIT_49="lmp_stnmosfcsts.t${HOUR}z"
startmsg
$EXEClmp/lmp_fcstpost < $PARMlmp/lmp_stnpost.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo LMPLOG: `date` -  FCSTPOST ended

#########################################################################        
# COPY LMP GFS AND MOS PREDICTORS AND FORECASTS TO COM 
######################################################################### 

if test $SENDCOM = 'YES'                                              
then                                                                 
  cp lmp_gfspreds.t${HOUR}z $COMOUT/.                                      
  cp lmp_stnmosfcsts.t${HOUR}z $COMOUT/.                                     
fi                                                               

#########################################################################
#  IF STATEMENT ENDING THE FCST CYCLES
#########################################################################
fi  

#########################################################################
#  COPY LMP MODEL OUTPUT TO COM FOR CYCLES ALL CYCLES
#########################################################################
if test $SENDCOM = 'YES'                                              
then                                                                 
   cp lmp_grdmodlstnpreds.t${HOUR}z $COMOUT/.
fi

#########################################################################
echo LMPLOG: `date -u` - job exlmp_station_fcst.sh.sms ended 
#########################################################################

exit 0
