#######################################################################
#  Job Name: exgfs_gmos.sh.sms 
#  Purpose: To run all steps necessary to create short range GFS-based
#           gridded MOS fcsts on the NDFD grid
#  Remarks: This script is kicked off when all 5 of the forecast jobs
#           have completed (METAR, GOE, COOPMESO, TSTM, PACIFIC). 
#           The goe and gridded forecasts are archived in the 
#           extended-range job.
#
#  HISTORY: Mar 14, 2005      - new job for Gridded MOS
#           Sep  7, 2005      - added RH and POP, and went to version
#                               2 of U155
#           Oct  3, 2005      - added tgftp alert for RH
#           Oct 17, 2005      - added tgftp alert for POP
#           Feb 27, 2006      - put in version 3 of U155.  We're now
#                               using a separate gridded constant file
#                               for U155 than we use for eqns.
#           Mar 29, 2006      - added winds
#           Apr 13, 2006      - added tocgrib2 to put headers on GRIB2
#           May 10, 2006      - added thunderstorms
#           Jun 19, 2006      - added u140 run to get wind goes on grid
#           Jun 29, 2006      - expanded to cover the full CONUS
#                             - added alert for GRIB products to Gateway
#           Jul 19, 2006      - commented out alerts for POP to tgftp
#           Aug 02, 2006      - Put back POP alerts. Added copy of 
#                               the U140 outputs for archiving.  Added
#                               v4 of U155 including the use of last
#                               cycle's forecasts.
#           Apr 30, 2007      - Added snow, qpf, sky, wind gusts,    
#                               v5 of U155.
#           Nov 26, 2007      - Modified to do 2-step QPF analysis
#           Dec 14, 2009      - Adjusted name of station table file to
#                               mdl_granlsta.tbl to better reflect the
#                               contents of the file.
#
#######################################################################
#
echo MDLLOG: `date` - Begin job exgfs_gmos.sh.sms

set -x

cd $DATA

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

export DAT="$PDY$cyc"


#######################################################################
#  COPY THE MDL FORECAST FILES FROM COM
#    3/2005 - Right now we need the METAR, COOPRFCMESO, and GOE files
#    5/2006 - Added cp of 40km thunderstorm file
#    6/2006 - Added cp of goe u201 predictors
#    8/2006 - Added cp of sr and ex merged forecast files from previous
#             day.
#######################################################################
cp $COMIN/mdl_gfsmos.$cycle mdl_gfsmos.$cycle
cp $COMIN/mdl_gfscpmos.$cycle mdl_gfscpmos.$cycle
cp $COMIN/mdl_goemos.$cycle mdl_goemos.$cycle
cp $COMIN/mdl_gfstsvr40.$cycle mdl_gfstsvr40.$cycle
cp $COMIN/mdl_goemosmodel.$cycle mdl_goemosmodel.$cycle

if test $cyc -eq '00'
then
   prevcyc=12
   cp $COMINm1/mdl_gfsmergesta.t${prevcyc}z gfsmergesta.last$prevcyc
   cp $COMINm1/mdl_gfsxmergesta.t${prevcyc}z gfsxmergesta.last$prevcyc

else
   prevcyc=00
   cp $COMIN/mdl_gfsmergesta.t${prevcyc}z gfsmergesta.last$prevcyc
   cp $COMIN/mdl_gfsxmergesta.t${prevcyc}z gfsxmergesta.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.lst"
export XLFUNIT_27="$FIXmdl/mdl_granlsta.tbl"
export XLFUNIT_28="$FIXmdl/mdl_gfsramerge.$cycle"
export XLFUNIT_29="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_46="mdl_gfsmos.$cycle"
export XLFUNIT_48="mdl_gfscpmos.$cycle"
export XLFUNIT_60="mdl_gfsmergesta.$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 GOES
#                     ON A 5 KM 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_gfsvect2grid.in.$cycle"
export XLFUNIT_32="$FIXmdl/mdl_gfsvect2grid.out.$cycle"
export XLFUNIT_29="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_48="mdl_goemos.$cycle"
export XLFUNIT_60="mdl_goemosgrsq.$cycle"
$EXECmdl/mdl_vect2grid < $PARMmdl/mdl_vect2grid.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 WIND
#                     DMO GOES ON A 5 KM 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_gfsvect2grid_wnd.in.$cycle"
export XLFUNIT_32="$FIXmdl/mdl_gfsvect2grid_wnd.out.$cycle"
export XLFUNIT_29="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_61="mdl_goemosmodel.$cycle"
export XLFUNIT_60="mdl_goewndgrsq.$cycle"
$EXECmdl/mdl_vect2grid < $PARMmdl/mdl_vect2grid_wnd.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo MDLLOG: `date` -  VECT2GRID ended 


#######################################################################
#
# PROGRAM GRANALYSIS - PERFORMS THE ANALYSIS OF THE MOS FORECASTS 
#                      ONTO A GRID.
#   FIRST:  COPY THE RANDOM ACCESS TEMPLATE FILE FROM FIX
#    WE DON'T HAVE GFSXMERGESTA YET SO TOUCH THE FILE TO CREATE IT
#######################################################################
cp $FIXmdl/mdl_rafile_template mdl_gfsgmos.$cycle

touch mdl_gfsxmergesta.$cycle

echo MDLLOG: `date` - begin job GRANALYSIS
export pgm=mdl_granalysis
. prep_step
startmsg
export XLFUNIT_10="ncepdate"
export XLFUNIT_26="$FIXmdl/mdl_granlsta.lst"
export XLFUNIT_27="$FIXmdl/mdl_granlsta.tbl"
export XLFUNIT_29="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_30="mdl_goemosgrsq.$cycle"
export XLFUNIT_31="mdl_goewndgrsq.$cycle"
export XLFUNIT_37="$FIXmdl/mdl_granlstation_pairs"
export XLFUNIT_38="$FIXmdl/mdl_gfsgranlids.$cycle"
export XLFUNIT_44="$FIXmdl/mdl_analysisgrconst"
export XLFUNIT_51="$FIXmdl/mdl_u405adewcn"
export XLFUNIT_53="$FIXmdl/mdl_u405atmpcn"
export XLFUNIT_54="$FIXmdl/mdl_u405amaxcn"
export XLFUNIT_55="$FIXmdl/mdl_u405amincn"
export XLFUNIT_56="$FIXmdl/mdl_u405apopcn"
export XLFUNIT_57="$FIXmdl/mdl_u405awspcn"
export XLFUNIT_58="$FIXmdl/mdl_u405awuvcn"
export XLFUNIT_59="$FIXmdl/mdl_u405awspxcn"
export XLFUNIT_60="$FIXmdl/mdl_u405awuvxcn"
export XLFUNIT_61="$FIXmdl/mdl_u405awgstcn"
export XLFUNIT_62="$FIXmdl/mdl_u405awgstxcn"
export XLFUNIT_63="$FIXmdl/mdl_u405aqpfcn"
export XLFUNIT_64="$FIXmdl/mdl_u405asnwcn"
export XLFUNIT_65="$FIXmdl/mdl_u405askycn"
export XLFUNIT_66="$FIXmdl/mdl_u405aqpf1cn"
export XLFUNIT_80="mdl_gfsmergesta.$cycle"
export XLFUNIT_81="mdl_gfsxmergesta.$cycle"
export XLFUNIT_82="gfsmergesta.last$prevcyc"
export XLFUNIT_83="gfsxmergesta.last$prevcyc"
export XLFUNIT_42="mdl_gfsgmos.$cycle"
$EXECmdl/mdl_granalysis < $PARMmdl/mdl_granalysis.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_gfsvect2grid_tsvr40km.in.$cycle"
export XLFUNIT_32="$FIXmdl/mdl_gfsvect2grid_tsvr40km.out.$cycle"
export XLFUNIT_29="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_48="mdl_gfstsvr40.$cycle"
export XLFUNIT_60="mdl_gfstsvr40grd.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 5KM NDFD GRID
#         (U365)
#######################################################################
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_gfstsvr40grd.sq.$cycle"
export XLFUNIT_28="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_27="$FIXmdl/mdl_gfsgrd2grd_tsvr40.ids.$cycle"
export XLFUNIT_42="mdl_gfsgmos.$cycle"
$EXECmdl/mdl_grd2grd < $PARMmdl/mdl_grd2grd.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
export XLFUNIT_10="ncepdate"
export XLFUNIT_26="$FIXmdl/mdl_granlsta.lst"
export XLFUNIT_27="$FIXmdl/mdl_granlsta.tbl"
export XLFUNIT_28="$FIXmdl/mdl_gfsgrpost.$cycle"
export XLFUNIT_29="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_42="mdl_gfsgmos.$cycle"
startmsg
$EXECmdl/mdl_gridpost < $PARMmdl/mdl_gridpost.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
# 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 pop6 pop12 wspd wdir ptstm03 ptstm06 ptstm12 qpf06 qpf12 sky snw24 wgst
do

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

done

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

if test $SENDCOM = 'YES'
then
  cp mdl_gfsgmos.$cycle $COMOUT
  cp mdl_gfsmergesta.$cycle $COMOUT
  cp mdl_goemosgrsq.$cycle $COMOUT
  cp mdl_goewndgrsq.$cycle $COMOUT
  cp mdl_gmosgb2temp.$cycle $COMOUT
  cp mdl_gmosgb2dewp.$cycle $COMOUT
  cp mdl_gmosgb2max.$cycle $COMOUT
  cp mdl_gmosgb2min.$cycle $COMOUT
  cp mdl_gmosgb2rh.$cycle $COMOUT
  cp mdl_gmosgb2pop6.$cycle $COMOUT
  cp mdl_gmosgb2pop12.$cycle $COMOUT
  cp mdl_gmosgb2wspd.$cycle $COMOUT
  cp mdl_gmosgb2wdir.$cycle $COMOUT
  cp mdl_gmosgb2ptstm03.$cycle $COMOUT
  cp mdl_gmosgb2ptstm06.$cycle $COMOUT
  cp mdl_gmosgb2ptstm12.$cycle $COMOUT
  cp mdl_gmosgb2qpf06.$cycle $COMOUT
  cp mdl_gmosgb2qpf12.$cycle $COMOUT
  cp mdl_gmosgb2sky.$cycle $COMOUT
  cp mdl_gmosgb2snw24.$cycle $COMOUT
  cp mdl_gmosgb2wgst.$cycle $COMOUT
  cp mdl_gmosgb2ptstm12.$cycle $COMOUT
  cp mdl_goemosgrsq.$cycle $COMOUT
  cp mdl_goewndgrsq.$cycle $COMOUT

fi

#######################################################################
#  NOW RUN TOCGRIB2 TO PUT HEADERS AND FFS ON THE FILES
#   CAT ALL OF THE GRIB FILES TOGETHER AND RUN TOCGRIB2 ONCE
#######################################################################
  touch mdl_gmosgrib2.$cycle

  for element in temp dewp max min rh pop6 pop12 wspd wdir ptstm03 ptstm06 ptstm12 qpf06 qpf12 sky snw24 wgst
   do
    cat mdl_gmosgb2${element}.$cycle >> mdl_gmosgrib2.$cycle
   done

  $EXECutil/grb2index mdl_gmosgrib2.$cycle mdl_gmosgrib2i.$cycle

export XLFUNIT_11="mdl_gmosgrib2.$cycle"
export XLFUNIT_31="mdl_gmosgrib2i.$cycle"
export XLFUNIT_51="mdl_gmosgrib2.xtrn.$cycle"

$EXECutil/tocgrib2 <$PARMmdl/mdl_gmosgb2head.$cycle 1>> $pgmout 2>> errfile

if test $SENDCOM = 'YES'
then
  cp mdl_gmosgrib2.xtrn.$cycle $COMOUT
  cp mdl_gmosgrib2.xtrn.$cycle $pcom/mdl_gmosgrib2.xtrn.$job
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
#######################################################################
if test $SENDDBN = 'YES'
then

   $DBNROOT/bin/dbn_alert NTC_LOW gfs $job $pcom/mdl_gmosgrib2.xtrn.$job

   $DBNROOT/bin/dbn_alert MDLFCST GMOST     $job $COMOUT/mdl_gmosgb2temp.$cycle
   $DBNROOT/bin/dbn_alert MDLFCST GMOSTD    $job $COMOUT/mdl_gmosgb2dewp.$cycle
   $DBNROOT/bin/dbn_alert MDLFCST GMOSMX    $job $COMOUT/mdl_gmosgb2max.$cycle
   $DBNROOT/bin/dbn_alert MDLFCST GMOSMN    $job $COMOUT/mdl_gmosgb2min.$cycle
   $DBNROOT/bin/dbn_alert MDLFCST GMOSRH    $job $COMOUT/mdl_gmosgb2rh.$cycle
   $DBNROOT/bin/dbn_alert MDLFCST GMOSPOP6  $job $COMOUT/mdl_gmosgb2pop6.$cycle
   $DBNROOT/bin/dbn_alert MDLFCST GMOSPOP12 $job $COMOUT/mdl_gmosgb2pop12.$cycle
   $DBNROOT/bin/dbn_alert MDLFCST GMOSWD    $job $COMOUT/mdl_gmosgb2wdir.$cycle
   $DBNROOT/bin/dbn_alert MDLFCST GMOSWS    $job $COMOUT/mdl_gmosgb2wspd.$cycle
   $DBNROOT/bin/dbn_alert MDLFCST GMOSTS3   $job $COMOUT/mdl_gmosgb2ptstm03.$cycle
   $DBNROOT/bin/dbn_alert MDLFCST GMOSTS6   $job $COMOUT/mdl_gmosgb2ptstm06.$cycle
   $DBNROOT/bin/dbn_alert MDLFCST GMOSTS12  $job $COMOUT/mdl_gmosgb2ptstm12.$cycle
   $DBNROOT/bin/dbn_alert MDLFCST GMOSQPF6  $job $COMOUT/mdl_gmosgb2qpf06.$cycle
   $DBNROOT/bin/dbn_alert MDLFCST GMOSQPF12 $job $COMOUT/mdl_gmosgb2qpf12.$cycle
   $DBNROOT/bin/dbn_alert MDLFCST GMOSSKY   $job $COMOUT/mdl_gmosgb2sky.$cycle
   $DBNROOT/bin/dbn_alert MDLFCST GMOSGST   $job $COMOUT/mdl_gmosgb2wgst.$cycle
   $DBNROOT/bin/dbn_alert MDLFCST GMOSSNW24 $job $COMOUT/mdl_gmosgb2snw24.$cycle

fi

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