#!/bin/sh
#######################################################################
#  Job Name: exlmp_prep.sh.sms
#
#  PURPOSE:   TO RUN ALL STEPS NECCESSARY TO CREATE THE INPUT FOR THE
#             GFS LAMP SYSTEM
#
#  HISTORY:   July       2005      JRW - new job for LMP MOS2000
#             August 23, 2005      JEG - modified for parallel run
#             Sept   08, 2005      JRW - added variables COMIN_mh1
#                                        COMIN_mh2, COMIN_mh3, COMIN_G
#                                        to correct problem when retrieving
#                                        previous hours data, gfs grids
#                                        gfs MOS.
#             Nov.   03, 2005      JRW - Reconciled /nwprod version and
#                                        version
#             Feb.   24, 2006      JRW/JEG  Added syntax for copying
#                                        lsd files for lightning decoder.
#                                        If files do not exist decltg will
#                                        will file a file full of missing
#                                        values, so these files need to exist.
#             Aug    10, 2007      SDS - Modified so that 04, 10, 16, and 22 UTC
#                                        cycles use the correct GFS data.
#             Apr.   03, 2012      JEG/MW/CH - Modified for station implementation
#                                              which would be in June 2012.
#             Jun.   26, 2012      JEG - Modified for additional RFC to make SCP
#                                         handling more robust - modified dianostic
#                                         statement and removed redirect of call to
#                                         lmp_scpprep.sh script to $pgmout.
#
#######################################################################
echo LMPLOG: `date` - begin job exlmp_prep.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 DAT="$PDY$HOUR"
export DATmh1=`/nwprod/util/exec/ndate -1 $DAT`
export DATmh2=`/nwprod/util/exec/ndate -2 $DAT`
export DATmh3=`/nwprod/util/exec/ndate -3 $DAT`

export PDYmh1=`echo $DATmh1 |cut -c1-8`
export PDYmh2=`echo $DATmh2 |cut -c1-8`
export PDYmh3=`echo $DATmh3 |cut -c1-8`

export HOURm1=`echo $DATmh1 |cut -c9-10`
export HOURm2=`echo $DATmh2 |cut -c9-10`
export HOURm3=`echo $DATmh3 |cut -c9-10`

cp /com/date/t"$HOURm1"z ncepdate.mh1
cp /com/date/t"$HOURm2"z ncepdate.mh2
cp /com/date/t"$HOURm3"z ncepdate.mh3

case $HOUR in
   04 | 05 | 06 | 07 | 08 | 09 ) 
      gfscyc="00"
      COMGFS=/com/gfs/prod/gfs.$PDY;;
   10 | 11 | 12 | 13 | 14 | 15 )
      gfscyc="06"
      COMGFS=/com/gfs/prod/gfs.$PDY;;
   16 | 17 | 18 | 19 | 20 | 21 ) 
      gfscyc="12"
      COMGFS=/com/gfs/prod/gfs.$PDY;;
   22 | 23 )
      gfscyc="18"
      COMGFS=/com/gfs/prod/gfs.$PDY;;
   00 | 01 | 02 | 03 ) 
      gfscyc="18"
      COMGFS=/com/gfs/prod/gfs.$PDYm1;;
esac

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

cp $DCOM/"$PDYmh1"/wtxtbul/lsd${HOURm1} lsd.${HOURm1}
if [[ $? -ne 0 ]]; then
   touch lsd.${HOURm1}
fi

cp $DCOM/"$PDYmh2"/wtxtbul/lsd${HOURm2} lsd.${HOURm2}
if [[ $? -ne 0 ]]; then
   touch lsd.${HOURm2}
fi

cp $DCOM/"$PDYmh1"/wgrbbul/radar/rad_${HOURm1}* .

cp $COM/lmp.$PDYmh3/lmp_obspkd.${HOURm3} lmp_obspkd.${HOURm3}
cp $COM/lmp.$PDYmh2/lmp_obspkd.${HOURm2} lmp_obspkd.${HOURm2}
cp $COM/lmp.$PDYmh1/lmp_obspkd.${HOURm1} lmp_obspkd.${HOURm1}
cp $COM/lmp.$PDYmh1/lmp_compobs.t${HOURm1}z lmp_compobs.t${HOURm1}z

cp $COMGFS/mdl_gfspkd.t${gfscyc}z mdl_gfspkd.t${gfscyc}z

echo LMPLOG: `date` - end copying files to $DATA  
#################################################
#
#   BEGIN PROCESSING HOURLY FILES
#   DUMP SURFACE METAR DATA, TYPE 000 SUBTYPE 007
#
#################################################
echo LMPLOG: `date` - begin running mdl_hrlytbl

export bufrsh=/nwprod/ush
msg="Processing hour ${HOUR}Z."  
postmsg "$jlogfile" "$msg"      

DUMP=${DUMP:-$bufrsh/dumpjb}

msg="The Dump for $DAT has started."    
postmsg "$jlogfile" "$msg"

time $DUMP $DAT 0.25 metar

cat metar.out >> $pgmout

msg="The Dump has ended." 
postmsg "$jlogfile" "$msg"
                          
msg="Creating the MDL Hourly Table."   
postmsg "$jlogfile" "$msg"            

export pgm=mdl_hrlytbl
. prep_step

#     ASSIGN INPUT DATASETS SURFACE METAR REPORTS
export XLFUNIT_42="metar.ibm"
export XLFUNIT_30="ncepdate"

#     ASSIGN OUTPUT DATASETS
export XLFUNIT_60="lmp_sfctbl.$DAT"
export XLFUNIT_70="lmp_rawmetar.$DAT"
export XLFUNIT_80="lmp_bufrmetar.$DAT"

startmsg
#     EXECUTE HRLYTBL
$EXEClmp/mdl_hrlytbl >> $pgmout 2>errfile
export err=$?; err_chk

sort lmp_bufrmetar.$DAT >> lmp_sfctbl.$DAT
sort -o lmp_rawmetar.$DAT lmp_rawmetar.$DAT

echo "\nThe following files were created: \n"  
ls -al *.$DAT
                                             
lines=`wc -l lmp_sfctbl.$DAT | cut -c1-8`       
stations=`expr $lines - 3`                 

echo LMPLOG: `date` - $stations STATIONS WERE PROCESSED
msg="$stations STATIONS WERE PROCESSED"     
postmsg "$jlogfile" "$msg"

echo LMPLOG: `date` - end running mdl_hrlytbl
#######################################################################
#    RUN OBSPREP CODE TO QC THE OBS AND PACK THEM IN TDLPACK
#    EVEN IF OBS ARE MISSING, WE NEED TO PRODUCE lmp_obspkd FILE
#######################################################################
echo LMPLOG: `date` - start running lmp_obsprep   

msg="The quality control and packing of obs for $DAT has started."        
postmsg "$jlogfile" "$msg"                  

export pgm=lmp_obsprep
. prep_step

export XLFUNIT_10="ncepdate"
export XLFUNIT_20="lmp_sfctbl.$DAT"
export XLFUNIT_26="$PARMlmp/lmp_stnsgrdmodl.lst"
export XLFUNIT_27="$PARMlmp/lmp_station.tbl"
export XLFUNIT_70="lmp_obspkd.${HOUR}"

startmsg

$EXEClmp/lmp_obsprep < $PARMlmp/lmp_obsprep.cn >> $pgmout 2>errfile
export err=$?; err_chk

msg="The quality control and packing of obs for $DAT has ended."        
postmsg "$jlogfile" "$msg"                  

echo LMPLOG: `date` - end running lmp_obsprep     

#######################################################################
#     RUN SCRIPT TO RETRIEVE AND PACK SCP DATA FOR OPAQUE SKY COVER
#######################################################################
echo LMPLOG: `date` - start running lmp_scpprep.sh

#     SET THE ARGUMENTS

SCPLST="east west"

for GOESreg in $SCPLST 
do
   export GOESreg
   echo LMPLOG: `date` - Processing $GOESreg region SCP data
   msg="The SCP preparation code for $GOESreg has started."        
   postmsg "$jlogfile" "$msg"                  
   $USHlmp/lmp_scpprep.sh
   export err=$?
   echo LMPLOG: `date` - The SCP prep code for $GOESreg has ended with end code $err
   msg="The SCP preparation code for $GOESreg has ended with end code $err."        
   postmsg "$jlogfile" "$msg"                  
done

echo LMPLOG: `date` - end running lmp_scpprep.sh

######################################################################
#     RUN MOSPRED TO GET THE OBSERVATIONS FOR PRESENT WEATHER.
######################################################################
echo LMPLOG: `date` - start running lmp_mospred     

export pgm=lmp_mospred
. prep_step
export XLFUNIT_10="ncepdate"
export XLFUNIT_85="lmp_sce_mdlp.${HOURm1}"
export XLFUNIT_84="lmp_scw_mdlp.${HOURm1}"
export XLFUNIT_83="lmp_obspkd.${HOURm3}"
export XLFUNIT_82="lmp_obspkd.${HOURm2}"
export XLFUNIT_81="lmp_obspkd.${HOURm1}"
export XLFUNIT_80="lmp_obspkd.${HOUR}"
export XLFUNIT_60="lmp_compobs.t${HOUR}z"
export XLFUNIT_33="$PARMlmp/lmp_stnsgrdmodl.lst"
export XLFUNIT_34="$PARMlmp/lmp_station.tbl"
export XLFUNIT_39="$FIXlmp/lmp_mos2000id.tbl"
export XLFUNIT_35="$PARMlmp/lmp_obsids.tbl"
startmsg
$EXEClmp/lmp_mospred < $PARMlmp/lmp_obspreds.cn >> $pgmout 2>errfile
export err=$?; err_chk

echo LMPLOG: `date` - end running lmp_mospred
######################################################################
#     RUN LMP_DECLTG TO PUT THE LIGHTNING STRIKES ON THE LMP GRID.
######################################################################
echo LMPLOG: `date` - start running lmp_decltg

export pgm=lmp_decltg
. prep_step
export XLFUNIT_10="ncepdate.mh1"
export XLFUNIT_80="lsd.${HOURm2}"
export XLFUNIT_81="lsd.${HOURm1}"
export XLFUNIT_60="lmp_ltggrd.${HOURm1}"
startmsg
$EXEClmp/lmp_decltg < $PARMlmp/lmp_decltg.cn >> $pgmout 2>errfile
export err=$?; err_chk

echo LMPLOG: `date` - end running lmp_decltg
#######################################################################
# GRB2MDLP
# CONVERT RADAR GRIB MESSAGE TO MDL_PACK FOR :15 AND :45 MIN FILES
#######################################################################
echo LMPLOG: `date` - start running mdl_grb2mdlp.

#  DETERMINE HOW MANY RADAR FILES YOU HAVE FOR ONE HOUR, AND LABEL THEM
#  fil1 AND fil2 WHERE fil1 IS THE ONE VALID ENDING DURING :00 - :29 AND 
#  fil2 IS THE ONE VALID DURING :30 - :59.

numfil=`test -f rad_${HOURm1}* && ls rad_${HOURm1}* | wc | awk '{print $1 }'`

if [[ $numfil = 2 ]];then
   fil1=`ls rad_${HOURm1}* | head -1`
   fil2=`ls rad_${HOURm1}* | tail -1`
   $EXECutil/grbindex $fil1 $fil1.indx
   $EXECutil/grbindex $fil2 $fil2.indx
elif [[ $numfil = 1 ]];then
      if [[ -a rad_${HOURm1}[0-2]* ]];then
         fil1=`ls rad_${HOURm1}* | head -1`
         fil2=' '
         $EXECutil/grbindex $fil1 $fil1.indx
      else
         fil1=' '
         fil2=`ls rad_${HOURm1}* | head -1`
         $EXECutil/grbindex $fil2 $fil2.indx
      fi
else
  fil1=' '
  fil2=' '
fi

export pgm=mdl_grb2mdlp
. prep_step
export XLFUNIT_10="ncepdate.mh1"
export XLFUNIT_11="$fil1"
export XLFUNIT_21="$fil1.indx"
export XLFUNIT_12="$fil2"
export XLFUNIT_22="$fil2.indx"
export XLFUNIT_30="$FIXlmp/lmp_gridlst"
export XLFUNIT_51="lmp_radgrd.raw.${HOURm1}"
export XLFUNIT_52="lmp_grb2mdlp.lst"
startmsg
$EXEClmp/mdl_grb2mdlp < $PARMlmp/lmp_radgrb2mdlp.cn.t${HOURm1}z >> $pgmout 2>errfile
export err=$?; err_chk

echo LMPLOG: `date` - end running mdl_grb2mdlp.
#######################################################################
# RADPREP
# RUN A QC PROCESS ON THE PREVIOUSLY PACKED RADAR FILES.
#######################################################################
echo LMPLOG: `date` - start running lmp_radprep

export pgm=lmp_radprep 
. prep_step
export XLFUNIT_10="ncepdate.mh1"
export XLFUNIT_30="lmp_radgrd.raw.${HOURm1}"
export XLFUNIT_48="$FIXlmp/lmp_elv_rcmmask.ra"
export XLFUNIT_50="lmp_ltggrd.${HOURm1}"
export XLFUNIT_52="lmp_radgrd.qc.${HOURm1}"
export XLFUNIT_39="$FIXlmp/lmp_mos2000id.tbl"
export XLFUNIT_35="$PARMlmp/lmp_radarid.tbl"
startmsg
$EXEClmp/lmp_radprep < $PARMlmp/lmp_radprep.cn >> $pgmout 2>errfile
# export err=$?; err_chk
# above export must be commented out in operations.  We do not want a 
# bad run of lmp_radprep to kill the job since the radar is not 
# necessary; it is supplementary. - JG 

echo LMPLOG: `date` - end running lmp_radprep
######################################################################
#         RUN LMP ANALYSIS AND MODELS SUITE TO CREATE
#         GRIDDED INPUT.  lmp_grdmodl.x NEEDS CERTAIN CONTROL FILES 
#         TO BE IN THE RUN DIRECTORY.  MUST FIRST COPY THESE FILES
#         INTO THE RUN DIRECTORY.
######################################################################
echo LMPLOG: `date` - start running lmp_grdmodl

cp $PARMlmp/lmp_*anly.cn .
cp $PARMlmp/lmp_*fcst.cn .

export pgm=lmp_grdmodl
. prep_step
export XLFUNIT_10="ncepdate"
export XLFUNIT_80="lmp_obspkd.${HOURm1}"
export XLFUNIT_81="lmp_obspkd.${HOUR}"
export XLFUNIT_82="lmp_compobs.t${HOURm1}z"
export XLFUNIT_83="lmp_compobs.t${HOUR}z"
export XLFUNIT_20="mdl_gfspkd.t${gfscyc}z"
export XLFUNIT_21="lmp_ltggrd.${HOURm1}"
export XLFUNIT_22="lmp_radgrd.qc.${HOURm1}"
export XLFUNIT_44="$FIXlmp/lmp_elv_rcmmask.ra"
export XLFUNIT_60="lmp_grdmodl.t${HOUR}z"
export XLFUNIT_61="lmp_grdmodl_qcdobs.t${HOUR}z"
export XLFUNIT_33="$PARMlmp/lmp_stnsgrdmodl.lst"
export XLFUNIT_34="$PARMlmp/lmp_station.tbl"
export XLFUNIT_39="$FIXlmp/lmp_mos2000id.tbl"
export XLFUNIT_35="$PARMlmp/lmp_grdmodlids.tbl"
startmsg
$EXEClmp/lmp_grdmodl < $PARMlmp/lmp_grdmodl.cn >> $pgmout 2>errfile
export err=$?; err_chk

echo LMPLOG: `date` - end running lmp_grdmodl
######################################################################
#    COPING FILES TO COMOUT DIRECTORY FOR DEBUGGING AND LATER USE
######################################################################

if test "$SENDCOM" = 'YES'                 
then                                        
   cp lmp_obspkd.${HOUR} $COMOUT/.
   cp lmp_grdmodl.t${HOUR}z $COMOUT/.
   cp lmp_grdmodl_qcdobs.t${HOUR}z $COMOUT/.
   cp lmp_compobs.t${HOUR}z $COMOUT/.
   cp lmp_ltggrd.${HOURm1} $COMOUT/.
   cp lmp_radgrd.raw.${HOURm1} $COMOUT/.
   cp lmp_radgrd.qc.${HOURm1} $COMOUT/.
   cp lmp_sce_mdlp.${HOURm1} $COMOUT/.                                       
   cp lmp_scw_mdlp.${HOURm1} $COMOUT/.                                     
   cp lmp_tcus_east.${HOURm1} $COMOUT/.                                     
   cp lmp_tcus_west.${HOURm1} $COMOUT/.                                     

  # Copy to the hourly output directory
   cp lmp_sfctbl.$DAT $COMOUT/lmp_sfctbl_early.$HOUR        
   cp lmp_rawmetar.$DAT $COMOUT/lmp_rawmetar_early.$HOUR    
fi  

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