#
#  UTILITY SCRIPT NAME :  formeans.sh
#               AUTHOR :  Hua-Lu Pan
#         DATE WRITTEN :  02/25/97
#
#  Abstract:  This utility script produces 5-day mean GRIB files
#               from Global model analysis and forecast pressure
#               GRIB files. The files are assumed to be in /scom
#               for previous analysis and in /com for forecasts
#             The current script uses gdas2 analysis files and
#             cat them into one giant file while it uses forecast
#             files by extracting only the 500 mb height fields.
#             There are plenty of rooms for improvement
#       
#             The job was originally set up by Randy Schechter of
#             CPC. I modified his source codes to use standard getgb
#             and putgb of w3lib and standardized his scripts. All
#             credit and questions should go to him
#
#     Input:  none
#
echo "History: February 1997 - First implementation of this utility script"
echo "History: August 24, 1998 - C. Caruso.  Added ncepdate to get 4 digit"
echo "year (to be passed into job steps formsg and formeanr)."
echo "History: September 28, 1999 - B. Facey changed script lines for code"
echo "formeanr, so output will be appended into one file on ibm".
set -xau


echo " "
echo "####################################"
echo "  GET NCEPDATE "
echo "####################################"
echo " "

cp /com/date/t00z ncepdate

echo "ncepdate"
cat ncepdate
##########################################

EXECgrib=/nwprod/util/exec

#Cut NMC date to form date with 4 digit year
yyyy=` cut -c7-10 ncepdate `
mm=` cut -c11-12 ncepdate `
dd=` cut -c13-14 ncepdate `
hh=00
env
echo $PDY
export XLFRTEOPTS="unit_vars=yes"
echo PDY=$PDY
ymd=$PDY
echo PDY=$PDY
echo ymd=$ymd
#
# finddate routine is invoked below to get old analysis files so they can
#   be "cat"'ed together to form one combined grib file of old analyses
#
rm gdas2.all
ymdi=`/nwprod/util/ush/finddate.sh $ymd d-5`
cat /com/gfs/prod/gdas.$ymdi/gdas2.t12z.pgrbf00 >> gdas2.all
for iday in -4 -3 -2 -1
do
   ymdi=`/nwprod/util/ush/finddate.sh $ymd d$iday`
   cat /com/gfs/prod/gdas.$ymdi/gdas2.t00z.pgrbf00 >> gdas2.all
   cat /com/gfs/prod/gdas.$ymdi/gdas2.t12z.pgrbf00 >> gdas2.all
done
cat /com/gfs/prod/gdas.$ymd/gdas2.t00z.pgrbf00 >> gdas2.all

#
#   make the grib index file given the grib file name
#
$EXECgrib/grbindex gdas2.all gdas2.all.indx >> $pgmout 2> errfile
err=$?; export err; err_chk
if [ $err -ne 0 ]
then
    msg=" *** ERROR making grib index file gdas2.all.indx."
    postmsg "$jlogfile" "$msg"
    msg1="Need this file for job step formeans, so abort!"
    postmsg "$jlogfile" "$msg1"
  err_exit
fi

rm mrfcsts.zhghts
filegb1=/com/mrf/prod/mrf.${ymd}/drfmr.t00z.pgrbf
missfilen=0
for fhr in 12 24 36 48 60 72 84 96 108 120 132 144 156 168 180 192 204 \
           216 228 240 252
do

filegbp=$filegb1$fhr
cp $filegbp filegb
filegb=filegb

if [ -s $filegbp ]; then

  echo "file found:" $filegbp

else

  echo 'WARNING--File missing for the run: '  mrf $fhr
  missfilen=`expr $missfilen + 1 ` 

cat << MFparmEOF > MFparms
mrf 1      
$yyyy $mm $dd $hh $fhr
MFparmEOF

  filegb=gbmsg.$missfilen.$fhr
#
# clear previous file assignemnts
#
  export XLFUNIT_81="$filegb"
  $EXECgrib/formsg < MFparms >> $pgmout 2>errfile
  err=$?; export err; err_chk
#
#  Check exit value of last executed command
#
  if [ $err -ne 0 ];then
    msg="Non-fatal error - formsg failed to create missing file!!"
    postmsg "$jlogfile" "$msg"
  else
   echo "WRN missing created " 
  fi
fi

filegi=index.f$fhr

$EXECgrib/grbindex $filegb $filegi >> $pgmout 2> errfile
err=$?; export err; err_chk

if [ $err -ne 0 ]; then
    msg="ERROR after job step formsg, failed to make $filegi."
    postmsg "$jlogfile" "$msg"
    msg1="Need this file for job step formeanr, so abort!"
    postmsg "$jlogfile" "$msg1"
    err_exit
fi

export XLFUNIT_11="$filegb"
export XLFUNIT_21="$filegi"
export XLFUNIT_81="zhghts"
fld=007                    # 007--->height field
lev=500                    # 500--->500 mb
kfile=1

cat<<GparmEOF>Gparms
$yyyy $mm $dd $hh $fld $lev $kfile
GparmEOF

$EXECgrib/formeanr < Gparms >> $pgmout 2> errfile
err=$?; export err; err_chk

cat zhghts >> mrfcsts.zhghts
rm zhghts
done                       # end of forecast hour loop (fhr)

$EXECgrib/grbindex mrfcsts.zhghts mrfcsts.zhghts.indx >> $pgmout 2> errfile
err=$?; export err; err_chk

if [ $err -ne 0 ]; then
    msg="*** failed to create mrfcsts.zhghts.indx."
    postmsg "$jlogfile" "$msg"
    msg1="Need this file for job step formeans, so abort!"
    postmsg "$jlogfile" "$msg1"
    err_exit
fi

export XLFUNIT_20="gdas2.all"
export XLFUNIT_25="gdas2.all.indx"
export XLFUNIT_30="mrfcsts.zhghts"
export XLFUNIT_35="mrfcsts.zhghts.indx"
export XLFUNIT_51="D-3.z500.grib"
export XLFUNIT_52="D+0.z500.grib"
export XLFUNIT_53="D+3.z500.grib"
export XLFUNIT_54="D+6.z500.grib"
export XLFUNIT_55="D+8.z500.grib"
$EXECgrib/formeans >> $pgmout 2> errfile
err=$?; export err; err_chk

if [ $err -ne 0 ]; then
    msg="*** ERROR FORMEANS FAILED TO CREATE GRIB FILES !!"
    postmsg "$jlogfile" "$msg"
    err_exit
fi

# Make climate anomalies
gc=/nwprod/util/fix/grib_zclmgrb
xc=/nwprod/util/fix/grib_zclmgrb.index
for t in D-3 D+0 D+3 D+6 D+8;do
 $EXECgrib/anomgb -X -C $gc -c $xc -x $t.z500.grib $t.z500DN.grib &&\
 cat $t.z500DN.grib >>$t.z500.grib
 $EXECgrib/grbindex $t.z500.grib $t.z500.gribi
done

if test "$SENDCOM" = 'YES'
then
  cp D-3.z500.grib $COMOUT/drfmr.${cycle}.D-3.z500.grib
  cp D+0.z500.grib $COMOUT/drfmr.${cycle}.D+0.z500.grib
  cp D+3.z500.grib $COMOUT/drfmr.${cycle}.D+3.z500.grib
  cp D+6.z500.grib $COMOUT/drfmr.${cycle}.D+6.z500.grib
  cp D+8.z500.grib $COMOUT/drfmr.${cycle}.D+8.z500.grib
  cp D-3.z500.gribi $COMOUT/drfmr.${cycle}.D-3.z500.gribi
  cp D+0.z500.gribi $COMOUT/drfmr.${cycle}.D+0.z500.gribi
  cp D+3.z500.gribi $COMOUT/drfmr.${cycle}.D+3.z500.gribi
  cp D+6.z500.gribi $COMOUT/drfmr.${cycle}.D+6.z500.gribi
  cp D+8.z500.gribi $COMOUT/drfmr.${cycle}.D+8.z500.gribi
fi
