#!/bin/sh
#######################################################################
#  Job Name: exgfsmos_pac_fcst.sh.sms
#  Purpose: To run all steps necessary to create short range GFS MOS 
#           fcsts for the Pacific sites.
#  Remarks: 
#  HISTORY: May 24, 2005      - new job for GFS gridded MOS
#                               This job currently runs at all
#                               4 cycles, but at 06 and 18Z it just 
#                               archives model data.
#           Mar 22, 2007      - added pieces for PoPO, PoP6, PoP12
#
#######################################################################
#
echo MDLLOG: `date` - Begin job exgfsmos_pac_fcst.sh.sms
set -x

cd $DATA

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

export DAT="$PDY$cyc"

################################################################################
#  FIRST GATHER MODEL DATA AND PUT IN TDLPACK
#  LOOP THROUGH PROJECTIONS
################################################################################
for tau in 00 03 06 09 12 15 18 21 24 27 30 33 36\
           39 42 45 48 51 54 57 60 63 66 69 72 75\
           78 81 84 87 90 93 96
do
################################################################################
# COPY MODEL FILES TO TEMP SPACE
################################################################################

  cp $COMINGFS/gfs.$cycle.pgrbf$tau gfs.$DAT.pgrbf$tau
  cp $COMINGFS/gfs.$cycle.pgrbif$tau gfs.$DAT.pgrbif$tau

################################################################################
# RUN WGRIB TO GET INPUT LIST FOR COPYGB
# RUN COPYGB FOR NON PRECIP
# CONVERTS TO TDL GRID
################################################################################

  grid=`cat $FIXmdl/mdl_merc.finegds`

  g1=gfs.$DAT.pgrbf$tau
  x1=gfs.$DAT.pgrbif$tau
 
  $EXECutil/wgrib $g1 > wgrib.out
  grep -f $FIXmdl/mdl_pacgfs_xpcp.wgrib wgrib.out |\
  $EXECutil/copygb -a -kw -g"$grid" -i0 $g1 $x1 mdl_pacxpcp.$cycle.pgrb 
 
################################################################################
# RUN WGRIB TO GET INPUT LIST FOR COPYGB
# RUN COPYGB FOR PRECIP
# CONVERTS TO TDL GRID
################################################################################

  grid=`cat $FIXmdl/mdl_merc.finegds`

  g1=gfs.$DAT.pgrbf$tau
  x1=gfs.$DAT.pgrbif$tau
 
  grep -f $FIXmdl/mdl_pacgfs_pcp.wgrib wgrib.out |\
  $EXECutil/copygb -a -kw -g"$grid" -i3 $g1 $x1 mdl_pacpcp.$cycle.pgrb
 
done

################################################################################
# GET INDICES AND INVENTORY
################################################################################
$EXECutil/grbindex mdl_pacxpcp.$cycle.pgrb mdl_pacxpcp.$cycle.pgrbi
$EXECutil/grbindex mdl_pacpcp.$cycle.pgrb mdl_pacpcp.$cycle.pgrbi
$EXECutil/invindex mdl_pacxpcp.$cycle.pgrbi > mdl_pacxpcp.pgrbinv.$DAT
$EXECutil/invindex mdl_pacpcp.$cycle.pgrbi > mdl_pacpcp.pgrbinv.$DAT

################################################################################
# GRB2MDLP
# CONVERT GRIB TO TDL_PACK
################################################################################

export pgm=mdl_grb2mdlp
. prep_step

export XLFUNIT_10="ncepdate"
export XLFUNIT_11="mdl_pacxpcp.$cycle.pgrb"
export XLFUNIT_21="mdl_pacxpcp.$cycle.pgrbi"
export XLFUNIT_12="mdl_pacpcp.$cycle.pgrb"
export XLFUNIT_22="mdl_pacpcp.$cycle.pgrbi"
export XLFUNIT_30="$FIXmdl/mdl_gridlst"
export XLFUNIT_51="pac_pkgfsraw.$DAT"
export XLFUNIT_52="grb2mdlp.lst"
echo MDLLOG: `date` - Program grb2mdlp has begun.
$EXECmdl/mdl_grb2mdlp < $PARMmdl/mdl_pacgfs_arch.cn.$cycle >> $pgmout 2>errfile
export err=$?

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

if test $SENDCOM = 'YES'
then
  cp pac_pkgfsraw.$DAT $COMOUT/mdl_pacgfspkd.$cycle
fi

#######################################################################
#    AT 06 AND 18Z WE ONLY ARCHIVE THE MODEL DATA, SO ONLY DO THE REST
#    OF THE SCRIPT AT 00 AND 12Z.
#######################################################################
if [ $cyc -eq '00' -o $cyc -eq '12' ]
then

#######################################################################
#    RUN OBSPREP 
#    EVEN IF OBS ARE MISSING, WE NEED TO PRODUCE PKOBS FILE
#######################################################################

if test $cyc -eq '00'
then
 obhr1=03
 cp $DCOM/sfctbl.$obhr1 sfctbl.$obhr1
elif test $cyc -eq '06'
then
 obhr1=09
 cp $DCOM/sfctbl.$obhr1 sfctbl.$obhr1
elif test $cyc -eq '12'
then
 obhr1=15
 cp $DCOM/sfctbl.$obhr1 sfctbl.$obhr1
elif test $cyc -eq '18'
then
 obhr1=21
 cp $DCOM/sfctbl.$obhr1 sfctbl.$obhr1
fi

if [ ! -f sfctbl.$obhr1 ]
  then touch sfctbl.$obhr1
fi

export pgm=mdl_obsprep
. prep_step
export XLFUNIT_10="ncepdate"
export XLFUNIT_20="sfctbl.$obhr1"
export XLFUNIT_26="$FIXmdl/mdl_pacsta.lst"
export XLFUNIT_27="$FIXmdl/mdl_station.tbl"
export XLFUNIT_70="pkobs.$DAT"
startmsg
$EXECmdl/mdl_obsprep < $PARMmdl/mdl_gfsobsprep.cn >> $pgmout 2>errfile
export err=$?

#!!!NOTE: AN ERROR HERE IS OK; OBS ARE NOT ESSENTIAL TO MOS FORECASTS!!!
#
#######################################################################
#
# PROGRAM RACREATE - MOS-2000 PROGRAM WHICH 
#                   CREATES RANDOM ACCESS FILES; IN THIS CASE, THE
#                   CODE IS USED TO CREATE THE OPERATIONAL MOS
#                   FORECAST FILE.
#######################################################################
#
echo MDLLOG: `date` - begin job RACREATE - CREATE MOS FORECAST FILE
#
export pgm=mdl_racreate
. prep_step
export XLFUNIT_50="mdl_pacgfsmos.$cycle"
startmsg
$EXECmdl/mdl_racreate < $PARMmdl/mdl_u350.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo MDLLOG: `date` -  RACREATE ended 
#
#######################################################################
#
#  PROGRAM RAINIT - INITIALIZES RANDOM ACCESS MOS FORECAST
#                   FILE WITH STATION CALL LETTERS,
#                   ELEVATION, LATITUDE, AND LONGITUDE
#
#######################################################################
#
export pgm=mdl_rainit
. prep_step
echo MDLLOG: `date` - begin job RAINIT - INITIALIZE MOS FORECAST FILE
export XLFUNIT_10="ncepdate"
export XLFUNIT_26="$FIXmdl/mdl_pacsta.lst"
export XLFUNIT_27="$FIXmdl/mdl_station.tbl"
export XLFUNIT_49="mdl_pacgfsmos.$cycle"
startmsg
$EXECmdl/mdl_rainit < $PARMmdl/mdl_u351.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo MDLLOG: `date` -  RAINIT ended 

#
#######################################################################
#
#    FIRST EXECUTION OF PROGRAM MOSPRED 
#    MOSPRED - USED TO INTERPOLATE TO STATIONS FROM MDL GRID-POINT
#              ARCHIVE FILES AND TO PROCESS/COMBINE VECTOR DATA.
#
#######################################################################

echo MDLLOG: `date` - begin job MOSPRED - INTERPOLATE MODEL DATA
export pgm=mdl_mospred
. prep_step
export XLFUNIT_10="ncepdate"
export XLFUNIT_24="pac_pkgfsraw.$DAT"
export XLFUNIT_26="$FIXmdl/mdl_pacsta.lst"
export XLFUNIT_27="$FIXmdl/mdl_station.tbl"
export XLFUNIT_28="$FIXmdl/mdl_pacgfsprd"
export XLFUNIT_29="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_44="$FIXmdl/mdl_griddedconstants"
export XLFUNIT_45="$FIXmdl/mdl_pacconststa"
export XLFUNIT_60="pacgfsmodel.$DAT"
startmsg
$EXECmdl/mdl_mospred < $PARMmdl/mdl_gfspredmdl.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo MDLLOG: `date` -  First use of MOSPRED ended 

#
#######################################################################
#
#    SECOND EXECUTION OF PROGRAM MOSPRED
#    MOSPRED - USED TO CREATE OBSERVED PREDICTORS FROM THE MDL  
#              OBSERVATIONAL TABLES.
#
#######################################################################
#
echo MDLLOG: `date` - begin job MOSPRED - CREATE OBSERVATIONAL PREDICTORS
export pgm=mdl_mospred
. prep_step
export XLFUNIT_10="ncepdate"
export XLFUNIT_80="pkobs.$DAT"
export XLFUNIT_26="$FIXmdl/mdl_pacsta.lst"
export XLFUNIT_27="$FIXmdl/mdl_station.tbl"
export XLFUNIT_28="$FIXmdl/mdl_pacgfsprd.obs"
export XLFUNIT_29="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_61="mdl_pacgfsobs.$cycle"
startmsg
$EXECmdl/mdl_mospred < $PARMmdl/mdl_gfspredobs.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo MDLLOG: `date` -  Second use of MOSPRED ended 

#
#######################################################################
#
#    PROGRAM EQNEVAL - CALCULATES MOS FORECASTS
#
#######################################################################

echo MDLLOG: `date` - begin job EQNEVAL - MAKE MOS FORECASTS
export pgm=mdl_eqneval
. prep_step
export XLFUNIT_10="ncepdate"
export XLFUNIT_23="mdl_pacgfsobs.$cycle"
export XLFUNIT_24="pacgfsmodel.$DAT"
export XLFUNIT_26="$FIXmdl/mdl_pacsta.lst"
export XLFUNIT_27="$FIXmdl/mdl_station.tbl"
export XLFUNIT_28="$FIXmdl/mdl_predtofcst"
export XLFUNIT_29="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_30="$FIXmdl/mdl_pacgfswind.06010930.$cycle"
export XLFUNIT_31="$FIXmdl/mdl_pacgfswind.10010531.$cycle"
export XLFUNIT_32="$FIXmdl/mdl_pacgfspop.05011031.$cycle"
export XLFUNIT_33="$FIXmdl/mdl_pacgfspop.11010430.$cycle"
export XLFUNIT_34="$FIXmdl/mdl_pacgfspopo.05011031.$cycle"
export XLFUNIT_35="$FIXmdl/mdl_pacgfspopo.11010430.$cycle"
export XLFUNIT_36="$FIXmdl/mdl_pacgfsttd.05011031.$cycle"
export XLFUNIT_37="$FIXmdl/mdl_pacgfsttd.11010430.$cycle"
export XLFUNIT_49="mdl_pacgfsmos.$cycle"
startmsg
$EXECmdl/mdl_eqneval < $PARMmdl/mdl_pacgfseval.cn.$cycle >> $pgmout 2>errfile
export err=$?; err_chk
echo MDLLOG: `date` -  EQNEVAL ended 

#######################################################################
#
#    PROGRAM FCSTPOST - POST-PROCESSES MOS FORECASTS
#
#######################################################################

echo MDLLOG: `date` - begin job FCSTPOST - POST PROCESS MOS FORECASTS
export pgm=mdl_fcstpost
. prep_step
export XLFUNIT_10="ncepdate"
export XLFUNIT_26="$FIXmdl/mdl_pacsta.lst"
export XLFUNIT_27="$FIXmdl/mdl_station.tbl"
export XLFUNIT_28="$FIXmdl/mdl_pacgfspost.$cycle"
export XLFUNIT_29="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_45="$FIXmdl/mdl_pacconststa"
export XLFUNIT_47="$FIXmdl/mdl_threshold"
export XLFUNIT_49="mdl_pacgfsmos.$cycle"
startmsg
$EXECmdl/mdl_fcstpost < $PARMmdl/mdl_gfspost.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo MDLLOG: `date` -  FCSTPOST ended 

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

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

fi

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