#!/bin/sh

#######################################################################
#  Purpose: To compute MOS statistical forecasts from the output of
#           a member of the 00 UTC gefs suite.  The member is
#           indicated by the RUN variable.   Note that this script
#           is essentially a slightly modified version of
#           exmrfmos_prep.sh.sms and exmrfmos.sh.sms combined.
#######################################################################
#
echo "------------------------------------------------"
echo "JGEFS MOS processing                        "
echo "------------------------------------------------"
echo "History: February, 2001 - First implementation of this new scripts."
echo "         Jun 12, 2001  RLC - added dbnet alerts to get files to TGFTP"
#              Aug 01, 2002  JCM - updated for new grb2mdlp and mdl_gridlst.
#                                  Added constant file to message code to 
#                                  include climo in the message.
#              Nov 20, 2003  RLC - This couldn't be included in the GFS 
#                                  transition because the available model data 
#                                  wasn't sufficient.
#              May     2006  RLC - Made changes for the ensemble system upgrade.
#                                  Three more members were added, naming
#                                  convention and model data set-up were
#                                  changed, and all 12-hr max/min/precips
#                                  were changed to 6-hr accumulations.
#
#######################################################################

########################################
set -x
msg="Begin job for $job"
postmsg "$jlogfile" "$msg"
########################################

export RUN=$1
export DAT="$PDY$cyc"

########################################
# Establish Subdirectories to make thread safe
########################################
export DATAsub=$DATA/$RUN
mkdir $DATAsub
cd $DATAsub

cp $DATA/ncepdate ncepdate
sh $utilscript/setup.sh
########################################

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

#######################################################################
# LOOP THROUGH PROJECTIONS
#######################################################################
for tau in 00 06 12 18 24 30 36 42 48 54 60 66 72 78 84 90 96 102 108 114 120 126 132 138 144 150 156 162 168 174 180 186 192 198 204 210 216 222 228 234 240 246 252 258 264 270 276 282 288
do
#######################################################################
# COPY MODEL FILES TO TEMP SPACE
#######################################################################

  cp $COMINA/$RUN.$cycle.pgrbaf$tau $RUN.$PDY$cyc.pgrbf$tau
  cat $COMINB/$RUN.$cycle.pgrbbf$tau >>$RUN.$PDY$cyc.pgrbf$tau
  $EXECutil/grbindex $RUN.$PDY$cyc.pgrbf$tau $RUN.$PDY$cyc.pgrbif$tau

#######################################################################
# RUN WGRIB TO GET INPUT LIST FOR COPYGB
# RUN COPYGB FOR NON PRECIP
# CONVERTS TO MDL GRID
#######################################################################
  if [ $tau -le 192 ] ; then
     grid=`cat $FIXmdl/mdl_finegds`
  else
     grid=`cat $FIXmdl/mdl_coarsegds`
  fi
  g1=$RUN.$PDY$cyc.pgrbf$tau
  x1=$RUN.$PDY$cyc.pgrbif$tau
#
  $EXECutil/wgrib $g1 > wgrib.out
  grep -f $FIXmdl/mdl_mrfxpcp.wgrib wgrib.out |\
  $EXECutil/copygb -a -kw -g"$grid" -i0 $g1 $x1 mdl_xpcp.$RUN.$cycle.pgrb
#

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

  if [ $tau -le 192 ] ; then
     grid=`cat $FIXmdl/mdl_finegds`
  else
     grid=`cat $FIXmdl/mdl_coarsegds`
  fi
  g1=$RUN.$PDY$cyc.pgrbf$tau
  x1=$RUN.$PDY$cyc.pgrbif$tau
#
  grep -f $FIXmdl/mdl_mrfpcp.wgrib wgrib.out |\
  $EXECutil/copygb -a -kw -g"$grid" -i3 $g1 $x1 mdl_pcp.$RUN.$cycle.pgrb
#
done
#######################################################################
# GET INDICES AND INVENTORY
#######################################################################
$EXECutil/grbindex mdl_xpcp.$RUN.$cycle.pgrb mdl_xpcp.$RUN.$cycle.pgrbi
$EXECutil/grbindex mdl_pcp.$RUN.$cycle.pgrb mdl_pcp.$RUN.$cycle.pgrbi
$EXECutil/invindex mdl_xpcp.$RUN.$cycle.pgrbi > mdl_xpcp.$RUN.pgrbinv.$PDY$cyc
$EXECutil/invindex mdl_pcp.$RUN.$cycle.pgrbi > mdl_pcp.$RUN.pgrbinv.$PDY$cyc

#######################################################################
# GRB2MDLP
# CONVERT GRIB TO MDL_PACK  
#######################################################################

cat mdl_xpcp.$RUN.$cycle.pgrb mdl_pcp.$RUN.$cycle.pgrb > $PDY$RUN.pgrb
$EXECutil/grbindex $PDY$RUN.pgrb $PDY$RUN.pgrbi

export pgm=mdl_grb2mdlp
. prep_step
export XLFUNIT_10="ncepdate"
export XLFUNIT_11="$PDY$RUN.pgrb"
export XLFUNIT_21="$PDY$RUN.pgrbi"
export XLFUNIT_30="$FIXmdl/mdl_gridlst"
export XLFUNIT_51="pk${RUN}raw.$DAT"
export XLFUNIT_52="grb2mdlp.lst"
echo MDLLOG: `date` - Program grb2mdlp has begun.
startmsg
$EXECmdl/mdl_grb2mdlp < $PARMmdl/mdl_ensgrbcnv.cn >> $pgmout 2>errfile
export err=$?; err_chk

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

obhr1=06; export obhr1
cp $DCOM/sfctbl.$obhr1 sfctbl.$obhr1  

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_station.lst"
export XLFUNIT_27="$FIXmdl/mdl_station.tbl"
export XLFUNIT_70="pk${RUN}obs.$DAT"
startmsg
$EXECmdl/mdl_obsprep < $PARMmdl/mdl_mrfobsprep.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 U350 - CREATE MOS FORECAST FILE
#
export pgm=mdl_racreate
. prep_step
export XLFUNIT_50="mdl_${RUN}mos.$cycle"
startmsg
$EXECmdl/mdl_racreate < $PARMmdl/mdl_u350.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo MDLLOG: `date` -  U350 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 U351 - INITIALIZE MOS FORECAST FILE
export XLFUNIT_10="ncepdate"
export XLFUNIT_26="$FIXmdl/mdl_station.lst"
export XLFUNIT_27="$FIXmdl/mdl_station.tbl"
export XLFUNIT_49="mdl_${RUN}mos.$cycle"
startmsg
$EXECmdl/mdl_rainit < $PARMmdl/mdl_u351.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo MDLLOG: `date` -  U351 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 U201 - INTERPOLATE MODEL DATA
export pgm=mdl_mospred
. prep_step
export XLFUNIT_10="ncepdate"
export XLFUNIT_24="pk${RUN}raw.$DAT"
export XLFUNIT_26="$FIXmdl/mdl_station.lst"
export XLFUNIT_27="$FIXmdl/mdl_station.tbl"
export XLFUNIT_28="$FIXmdl/mdl_mrfprd"
export XLFUNIT_29="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_45="$FIXmdl/mdl_conststa"
export XLFUNIT_60="${RUN}model.$DAT"
startmsg
#     EXECUTE U201 
$EXECmdl/mdl_mospred < $PARMmdl/mdl_mrfpredmdl.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo MDLLOG: `date` -  First use of U201 ended 
#
#######################################################################
#
#    SECOND EXECUTION OF PROGRAM MOSPRED
#    MOSPRED - USED TO CREATE OBSERVED PREDICTORS FROM THE MDL  
#           OBSERVATIONAL TABLES.
#
#######################################################################
#
echo MDLLOG: `date` - begin job U201 - CREATE OBSERVATIONAL PREDICTORS
export pgm=mdl_mospred
. prep_step
export XLFUNIT_10="ncepdate"
export XLFUNIT_80="pk${RUN}obs.$DAT"
export XLFUNIT_26="$FIXmdl/mdl_station.lst"
export XLFUNIT_27="$FIXmdl/mdl_station.tbl"
export XLFUNIT_28="$FIXmdl/mdl_mrfprd.obs"
export XLFUNIT_29="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_61="mdl_${RUN}obs.$cycle"
startmsg
$EXECmdl/mdl_mospred < $PARMmdl/mdl_mrfpredobs.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo MDLLOG: `date` -  Second use of U201 ended 
#
#######################################################################
#
#    PROGRAM EQNEVAL - CALCULATES MOS FORECASTS
#
#######################################################################

echo MDLLOG: `date` - begin job U900 - MAKE MOS FORECASTS
export pgm=mdl_eqneval
. prep_step
export XLFUNIT_10="ncepdate"
export XLFUNIT_23="mdl_${RUN}obs.$cycle"
export XLFUNIT_24="${RUN}model.$DAT"
export XLFUNIT_26="$FIXmdl/mdl_station.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_mrfmxmntd.04010930"
export XLFUNIT_31="$FIXmdl/mdl_mrfmxmntd.10010331"
export XLFUNIT_32="$FIXmdl/mdl_mrfpopqpf.04010930"
export XLFUNIT_33="$FIXmdl/mdl_mrfpopqpf.10010331"
export XLFUNIT_34="$FIXmdl/mdl_mrfcld.04010930"
export XLFUNIT_35="$FIXmdl/mdl_mrfcld.10010331"
export XLFUNIT_38="$FIXmdl/mdl_mrfptype.09010831"
export XLFUNIT_49="mdl_${RUN}mos.$cycle"
startmsg
$EXECmdl/mdl_eqneval < $PARMmdl/mdl_mrfeval.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo MDLLOG: `date` -  U900 ended 

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

echo MDLLOG: `date` - begin job U910 - POST PROCESS MOS FORECASTS
export pgm=mdl_fcstpost
. prep_step
export XLFUNIT_10="ncepdate"
export XLFUNIT_26="$FIXmdl/mdl_station.lst"
export XLFUNIT_27="$FIXmdl/mdl_station.tbl"
export XLFUNIT_28="$FIXmdl/mdl_mrfpost"
export XLFUNIT_29="$FIXmdl/mdl_mos2000id.tbl"
export XLFUNIT_47="$FIXmdl/mdl_ensthreshold"
export XLFUNIT_49="mdl_${RUN}mos.$cycle"
startmsg
$EXECmdl/mdl_fcstpost < $PARMmdl/mdl_mrfpost.cn >> $pgmout 2>errfile
export err=$?; err_chk
echo MDLLOG: `date` -  U910 ended 

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

if test $SENDCOM = 'YES'
then
  cp mdl_${RUN}mos.$cycle $COMOUT
fi

#######################################################################
# MRFMEXTX
# NEW MRF MOS MESSAGE CODE
#######################################################################

export pgm=mdl_mrfmextx
. prep_step
export XLFUNIT_10="ncepdate"
export XLFUNIT_27="$FIXmdl/mdl_station.tbl"
export XLFUNIT_45="$FIXmdl/mdl_conststa"
export XLFUNIT_48="mdl_${RUN}mos.$cycle"
export XLFUNIT_60="mdl_${RUN}mex.txt"
export XLFUNIT_65="mdl_${RUN}mex.tran"
startmsg
$EXECmdl/mdl_mrfmextx < $PARMmdl/mdl_mrfmextx.dat >> $pgmout 2>errfile
export err=$?

#######################################################################
# COPY FILES TO COM & SEND OUT MESSAGE
#######################################################################

if test $SENDCOM = 'YES'
then
  cp mdl_${RUN}mex.txt $COMOUT
fi

if test $SENDDBN = 'YES'
then
   $DBNROOT/bin/dbn_alert MDLFCST ENSMOSTXT $job $COMOUT/mdl_${RUN}mex.txt
fi

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