#!/usr/bin/ksh

set +x
#####################################################################
echo "----------------------------------------------------------"
echo "gfdl_post_mkgrib.sh - "
echo "----------------------------------------------------------"
echo "History: JUN 1997 - First implementation of this new script."
echo "         JAN 1998 - Rewritten by David Michaud to standardize"
echo "         MAR 2001 - Tim Marchok added code for 1/3-degree data"
#####################################################################
set -x

PS4=' + gfdl_post_mkgrib.sh line $LINENO: '

FHOUR=$1
FHOURIN=`expr $FHOUR`

#####################################################################
# MAKE UNIQUE DIRECTORY FOR PROCESSING TO RUN IN
#####################################################################
mkdir ${DATA}/mkgb$FHOUR
cd ${DATA}/mkgb$FHOUR

$utilities/setup.sh

echo $FHOUR > itime.$FHOUR
echo ${Y4PREFIX}$YEARA > yeara
paste ${DATA}/day ${DATA}/nmo ${DATA}/hrin itime.$FHOUR  > date.$FHOUR

if [ -s $COMIN/$ATCFNAME.hour${FHOURIN} -o -s $COMIN/$ATCFNAME.hour${FHOURIN}_ts1 ]
then
   if [ ${FHOUR} -eq 0 ]
   then
     cp $COMIN/$ATCFNAME.hour0_ts1 hour0_ts1
     history_file=hour0_ts1
   else
     cp $COMIN/$ATCFNAME.hour${FHOURIN} hour${FHOURIN}
     history_file=hour${FHOURIN}
   fi
else
   msg="WARNING: hour${FHOURIN} file not produced by gfdl_fcst"
   postmsg "$jlogfile" "$msg"
   #export err=911;err_chk
   exit
fi


#####################################################################
# If this script is running for forecast hour 0, then we need to 
# run a program to modify the LGI of the hour0 file.  With the 
# coupled model running, the LGI of the hour0 file had to be 
# expanded from 20 to 27.  The problem is that all of the post-
# processing executables are expecting the input files to have an 
# LGI of 20.  For files hour6 through hour126, this is no problem, 
# since Morris included code in the forecast executable to reduce 
# the LGI of those forecast files from 27 to 20.  But the hour0 
# file remains untouched with an LGI of 27, so we change it here.
# 
# *** UPDATE May 2009 :  This stuff for hour 0 was taken out when
# we added in the 10m winds to the grib stuff.  Basically, we had
# to change the way that we are getting the hour0 file.  Instead of
# hour0 coming from the preprocessing, where it had an LGI of 27,
# it now is written out in the forecast model at timestep 1, and
# since it's written out in the model, it is written out already
# with an LGI of 20, so there is no need to run redef2720 on it.
#####################################################################

if [ ${FHOUR} -eq 0 ]
then

  #####################################################################
  # Send Disclaimer to web servers                                     
  #####################################################################
  if [ $SENDCOM = 'YES' ] ; then
    cp  $PARMhur/gfdl_disclaimer.txt $COMOUT/README
    if [ $SENDDBN = 'YES' ] ; then
      $DBNROOT/bin/dbn_alert TEXT GFDL_DISCLAIM $job $COMOUT/README
    fi   
  fi
fi

namelist=mkgriblist
echo "&fcstinfo grid_config='${GRID_CONFIG}',"  >${namelist}
echo "            storm_hem='${STORM_HEM}'/"   >>${namelist}

#####################################################################
# MAKE 1 DEG GRIB FILES
#####################################################################

if [ $FHOUR -lt 10 ]; 
then 
  GRIBHOUR="0${FHOUR}"
else
  GRIBHOUR=${FHOUR}
fi

gribfile=$stormenv.${Y4PREFIX}${DTEE}.grib.f${GRIBHOUR}


export pgm=gfdl_mk1deg
. prep_step
startmsg

export XLFUNIT_10=${history_file}
export XLFUNIT_11=unigrid.$FHOUR

if [ ${BULK} -eq 0 ]
then
  $EXEChur/gfdl_mk1deg >> mk1deg.out${FHOUR}
  export err=$?;err_chk
else
  $EXEChur/gfdl_mk1deg >> mk1deg.out${FHOUR}
  export err=$?;err_chk
fi

export pgm=gfdl_mkgrib
. prep_step
startmsg

export XLFUNIT_8=unigrid.$FHOUR
export XLFUNIT_10=date.$FHOUR                         
export XLFUNIT_19=${DATA}/mess-$stormenv-$datein-$HRIN       
export XLFUNIT_22=${gribfile}
export XLFUNIT_35=yeara                            

if [ ${BULK} -eq 0 ]
then
  $EXEChur/gfdl_mkgrib <${namelist} >> $pgmout 2>errfile
  export err=$?; err_chk
else
  $EXEChur/gfdl_mkgrib <${namelist} >> mk1deggrib.out${FHOUR} 
  export err=$?; err_chk
fi

#########################
# Conver to grib2 format
#########################
$EXECutil/cnvgrib -g12 -p40 ${gribfile} ${gribfile}.grib2
$EXECutil/wgrib2  ${gribfile}.grib2 -s >${gribfile}.grib2.idx

if test $SENDCOM = 'YES'
then
   mv ${gribfile} $COMOUT/${gribfile}
   mv ${gribfile}.grib2 $COMOUT/${gribfile}.grib2
   mv ${gribfile}.grib2.idx $COMOUT/${gribfile}.grib2.idx
fi

if test $SENDDBN = 'YES'
then
    $DBNROOT/bin/dbn_alert MODEL GFDL_GRIB $job $COMOUT/${gribfile}
    if [ $SENDDBN_GB2 = YES ]
    then
    $DBNROOT/bin/dbn_alert MODEL GFDL_GRIB_GB2 $job $COMOUT/${gribfile}.grib2
    $DBNROOT/bin/dbn_alert MODEL GFDL_GRIB_GB2_WIDX $job $COMOUT/${gribfile}.grib2.idx
    fi
fi

#####################################################################
# MAKE 1/12 DEG GRIB FILES
#####################################################################
export pgm=gfdl_getnest3
. prep_step
startmsg

export XLFUNIT_10=${history_file}
export XLFUNIT_77=unigrid.$FHOUR

if [ ${BULK} -eq 0 ]
then
  $EXEChur/gfdl_getnest3 >> $pgmout 2>errfile
  export err=$?;err_chk
else
  $EXEChur/gfdl_getnest3 >> $pgmout 2>errfile
  export err=$?;err_chk
fi

gribn3file=$stormenv.${Y4PREFIX}${DTEE}.gribn3.f${GRIBHOUR}


export pgm=gfdl_mkgrib23
. prep_step
startmsg

export XLFUNIT_8=unigrid.$FHOUR
export XLFUNIT_10=date.$FHOUR
export XLFUNIT_22=${gribn3file}
export XLFUNIT_35=yeara

if [ ${BULK} -eq 0 ]
then
  $EXEChur/gfdl_mkgrib3n <${namelist} >> $pgmout 2>errfile
  export err=$?; err_chk
else
  $EXEChur/gfdl_mkgrib3n <${namelist}  >> mkfinegrib.out${FHOUR}
  export err=$?; err_chk
fi

#########################
# Conver to grib2 format
#########################
$EXECutil/cnvgrib -g12 -p40 ${gribn3file} ${gribn3file}.grib2
$EXECutil/wgrib2  ${gribn3file}.grib2 -s >${gribn3file}.grib2.idx

if test $SENDCOM = 'YES'
then
   mv ${gribn3file} $COMOUT/${gribn3file}
   mv ${gribn3file}.grib2 $COMOUT/${gribn3file}.grib2
   mv ${gribn3file}.grib2.idx $COMOUT/${gribn3file}.grib2.idx
fi

if test $SENDDBN = 'YES'
then
   $DBNROOT/bin/dbn_alert MODEL GFDL_GRIBN3 $job $COMOUT/${gribn3file}

   if [ $SENDDBN_GB2 = YES ]
   then
     $DBNROOT/bin/dbn_alert MODEL GFDL_GRIBN3_GB2 $job $COMOUT/${gribn3file}.grib2
     $DBNROOT/bin/dbn_alert MODEL GFDL_GRIBN3_GB2_WIDX $job $COMOUT/${gribn3file}.grib2.idx
   fi
fi


#####################################################################
# MAKE 1/6 DEG GRIB FILES
#####################################################################

if [ $FHOUR -lt 10 ];
then
  GRIBHOUR="0${FHOUR}"
else
  GRIBHOUR=${FHOUR}
fi

gribfile=$stormenv.${Y4PREFIX}${DTEE}.grib6th.f${GRIBHOUR}

export pgm=gfdl_mk6thdeg
. prep_step
startmsg

export XLFUNIT_10=${history_file}
export XLFUNIT_11=sfctemp_6th.dat
export XLFUNIT_12=precip_6th.dat
export XLFUNIT_13=sfcpress_6th.dat
export XLFUNIT_14=mslp_6th.dat
export XLFUNIT_51=u_6th.dat
export XLFUNIT_52=v_6th.dat
export XLFUNIT_53=t_6th.dat
export XLFUNIT_54=r_6th.dat
export XLFUNIT_55=z_6th.dat

if [ ${BULK} -eq 0 ]
then
  $EXEChur/gfdl_mk6thdeg >> mk6thdeg.out${FHOUR} 2>errfile.mk6thdeg
  export err=$?;err_chk
else
  $EXEChur/gfdl_mk6thdeg >> mk6thdeg.out${FHOUR} 2>errfile.mk6thdeg
  export err=$?;err_chk
fi

export pgm=gfdl_mkgrib6thdeg
. prep_step
startmsg

export XLFUNIT_10=date.$FHOUR
export XLFUNIT_11=sfctemp_6th.dat
export XLFUNIT_12=precip_6th.dat
export XLFUNIT_13=sfcpress_6th.dat
export XLFUNIT_14=mslp_6th.dat
export XLFUNIT_19=${DATA}/mess-$stormenv-$datein-$HRIN
export XLFUNIT_22=${gribfile}
export XLFUNIT_35=yeara
export XLFUNIT_51=u_6th.dat
export XLFUNIT_52=v_6th.dat
export XLFUNIT_53=t_6th.dat
export XLFUNIT_54=r_6th.dat
export XLFUNIT_55=z_6th.dat


if [ ${BULK} -eq 0 ]
then
  $EXEChur/gfdl_mkgrib6thdeg <${namelist} >> mkgrib6thdeg.out${FHOUR} 2>errfile.mkgrib6thdeg
  export err=$?; err_chk
else
  $EXEChur/gfdl_mkgrib6thdeg <${namelist} >> mkgrib6thdeg.out${FHOUR} 2>errfile.mkgrib6thdeg
  export err=$?; err_chk
fi

#########################
# Conver to grib2 format
#########################
$EXECutil/cnvgrib -g12 -p40 ${gribfile} ${gribfile}.grib2
$EXECutil/wgrib2  ${gribfile}.grib2 -s >${gribfile}.grib2.idx

if test $SENDCOM = 'YES'
then
   mv ${gribfile} $COMOUT/${gribfile}
   mv ${gribfile}.grib2 $COMOUT/${gribfile}.grib2
   mv ${gribfile}.grib2.idx $COMOUT/${gribfile}.grib2.idx
fi

if test $SENDDBN = 'YES'
then
   $DBNROOT/bin/dbn_alert MODEL GFDL_GRIB $job $COMOUT/${gribfile}
   if [ $SENDDBN_GB2 = YES ]
   then
   $DBNROOT/bin/dbn_alert MODEL GFDL_GRIB_GB2 $job $COMOUT/${gribfile}.grib2
   $DBNROOT/bin/dbn_alert MODEL GFDL_GRIB_GB2_WIDX $job $COMOUT/${gribfile}.grib2.idx
   fi
fi  
    
cd ${DATA}
