#! /bin/ksh
################################################################################
####  UNIX Script Documentation Block
#                      .                                             .
# Script name:         sref_wrfprdgen.sh
# Script description:  Runs WRF-NMM or WRF-EM product generator
#
# Author:        Eric Rogers       Org: NP22         Date: 2004-07-07
#
# Script history log:
# 2003-11-01  Matt Pyle - Original script for parallel
# 2004-07-07  Eric Rogers - Preliminary modifications for production.
# 2005-08-02  Jun Du - Modified to fit into SREF system
# 2006-01-25  Jun Du - changed to use a unified version of prdgen
# 2007-02-26  Jun Du - add 221 grid
####################################################################

set -aux

fhr=$1
DOMIN_SMALL=$2
CYC=$3
MODEL=$4
MEMBER=$5
PDY=$6
YYYY=`echo $PDY | cut -c1-4`
MM=`echo $PDY | cut -c5-6`
DD=`echo $PDY | cut -c7-8`
CYCLE=$YYYY$MM$DD$CYC


######
export XLFRTEOPTS="unit_vars=yes"
######

msg="JOB $job FOR WRF-${MODEL} NEST=$DOMIN_SMALL HAS BEGUN"
postmsg "$jlogfile" "$msg"

if [ $DOMIN = "eastnmm" ]
then
  postsize=full
  DOM=east08
  DOMORIG=east08
  filenam="wrf.EAST08"
elif [ $DOMIN = "centnmm" ]
then
  postsize=full
  DOM=cent08
  DOMORIG=central08
  filenam="wrf.CENT08"
elif [ $DOMIN = "westnmm" ]
then
  postsize=full
  DOM=west08
  DOMORIG=west08
  filenam="wrf.WEST08"
elif [ $DOMIN = "aknmm" ]
then
  postsize=full
  DOM=ak08
  DOMORIG=alaska10
  filenam="wrf.AK08"
elif [ $DOMIN = "prnmm" ]
then
  postsize=small
  DOM=pr08
  DOMORIG=pr08
  filenam="wrf.PR08"
elif [ $DOMIN = "hinmm" ]
then
  postsize=small
  DOM=hi08
  DOMORIG=hi08
  filenam="wrf.HI08"
elif [ $DOMIN = "na32nmm" ]
then
  postsize=na32
  DOM=na32
  DOMORIG=na32
  filenam="wrf.NA32"
fi

if [ $DOMIN = "eastem" ]
then
  postsize=full
  DOM=east10
  DOMORIG=east08
  filenam="wrf.EMEST"
elif [ $DOMIN = "centem" ]
then
  postsize=full
  DOM=cent10
  DOMORIG=central08
  filenam="wrf.EMCEN"
elif [ $DOMIN = "westem" ]
then
  postsize=full
  DOM=west10
  DOMORIG=west08
  filenam="wrf.EMWST"
elif [ $DOMIN = "akem" ]
then
  postsize=full
  DOM=ak10
  DOMORIG=alaska10
  filenam="wrf.EMAK"
elif [ $DOMIN = "prem" ]
then
  postsize=small
  DOM=pr08
  DOMORIG=pr08
  filenam="wrf.EMPR"
elif [ $DOMIN = "hiem" ]
then
  postsize=small
  DOM=hi08
  DOMORIG=hi08
  filenam="wrf.EMHI"
elif [ $DOMIN = "na32em" ]
then
  postsize=na32
  DOM=na32
  DOMORIG=na32
  filenam="wrf.NA32"
fi

filedir=$DATA
bindir=$utilexec

startd=$YYYY$MM$DD
startdate=$CYCLE

mkdir -p $COMOUT

date=`/nwprod/util/exec/ndate $fhr $CYCLE`

mkdir -p $DATA/wrf_prdgen
cd $DATA/wrf_prdgen

export fhr
export tmmark=tm00

#
# WRF-EM post output for Hawaii/Puerto Rico are on mercator grid, while WRF-NMM is on lat/lon grid.
# WRF-EM post uses the same grid ID number as the WRF-NMM output. To make lat/lon grids from 
# WRF-EM runs do the following:
#
# 1) Use overgridnum_grib to make a temporary GRIB file with a new grid ID number
# (252 for Hawaii, 253 for Puerto Rico)
#
# 2) Run wrf_prdgen to interpolate the Hawaii/Puerto Rico mercator grid to the
# WRF-NMM Hawaii (grid #250) and WRF-NMM (grid #248) lat/lon grids
#
# 3) These WRF-EM lat/lon grids will be used to compute the ensemble mean
#

if [ $MODEL = em -a $postsize = small ] ; then

  if [ $DOMIN = hiem ] ; then
     echo 252 > input
  fi
  if [ $DOMIN = prem ] ; then
     echo 253 > input
  fi

  rm -f fort.*
  ln -s -f $DATA/wrfpost/WRFPRS${fhr}.tm00      fort.11
  ln -s -f $DATA/wrfpost/WRFPRS${fhr}_temp.tm00 fort.51
  $utilexec/overgridnum_grib < input > output.overgridnum

cat >input${fhr}.prd <<EOF5
$DATA/wrfpost/WRFPRS${fhr}_temp.tm00
EOF5

# make GRIB file with pressure data on mandatory pressure levels
# which is sent to NCEP and TOC servers

cp $PARMwrf/sref_master.${DOMORIG}.ctl master${fhr}_orig.ctl

rm -f fort.*
ln -sf master${fhr}_orig.ctl                    fort.10
ln -sf $FIXwrf/sref_wgt_${DOMIN}_mertolola_reg  fort.21
$EXECwrf/sref_prdgen < input${fhr}.prd > prdgen.out${fhr}

# make GRIB file with pressure data every 25 mb for EMC's FVS
# verification
 
cp $PARMwrf/sref_master.${DOMORIG}_25mb.ctl master${fhr}_25mb.ctl
 
rm -f fort.*
ln -sf master${fhr}_25mb.ctl                    fort.10
ln -sf $FIXwrf/sref_wgt_${DOMIN}_mertolola_reg  fort.21
$EXECwrf/sref_prdgen < input${fhr}.prd > prdgen.out${fhr}
 
echo "done executing prdgen" > $DATA/prdgendone${fhr}
 
rm $DATA/wrfpost/WRFPRS${fhr}_temp.tm00

else

# make GRIB file with pressure data every 25 mb
cp $PARMwrf/sref_wrf_master.ctl master.ctl

cat >input${fhr}.prd <<EOF5
$DATA/wrfpost/WRFPRS${fhr}.tm00
EOF5

rm -f fort.*
ln -sf master.ctl                     fort.10
ln -sf $FIXwrf/sref_wgt_${DOMIN}_212  fort.21
ln -sf $FIXwrf/sref_wgt_${DOMIN}_216  fort.22
ln -sf $FIXwrf/sref_wgt_${DOMIN}_221  fort.23
ln -sf $FIXwrf/sref_wgt_${DOMIN}_243  fort.24
$EXECwrf/sref_prdgen < input${fhr}.prd > prdgen.out${fhr}

echo "done executing prdgen" > $DATA/prdgendone${fhr}

fi

# if need to save native grid in grib
#cp $DATA/wrfpost/WRFPRS${fhr}.tm00 $COMOUT/$DOMIN.t${CYC}z.wrfprs${fhr}.tm00

# compute 3-h precip buckets for ARW core (NMM calculates within the model)
###fhrprev=`expr $fhr - 3`
fhrprev=$(( $fhr - 3 ))

if [ $fhrprev -lt 10 ]
then
fhrprev=0$fhrprev
fi

if [ $fhr -eq 00 ] ; then
# save 221 grid
# cp ${filenam}${fhr}.tm00 $COMOUT/sref_$MODEL.t${CYC}z.pgrb221.$MEMBER.f${fhr}
  cp meso.AWIP3D${fhr}.tm00 $COMOUT/sref_$MODEL.t${CYC}z.pgrb212.$MEMBER.f${fhr}
  cp nam.AWIPAK${fhr}.tm00 $COMOUT/sref_$MODEL.t${CYC}z.pgrb216.$MEMBER.f${fhr}
  cp nam.AWIP32${fhr}.tm00 $COMOUT/sref_$MODEL.t${CYC}z.pgrb221.$MEMBER.f${fhr}
  cp nam.AWIPHI${fhr}.tm00 $COMOUT/sref_$MODEL.t${CYC}z.pgrb243.$MEMBER.f${fhr}

else

# do 25 mb pressure file
# if [ $MODEL = em ]; then
# rm -f input.card
# echo "$DATA/wrf_prdgen" > input.card
# echo $filenam >> input.card
# echo $fhrprev >> input.card
# echo $fhr >> input.card
# $EXECwrf/sref_pcpbucket_${DOMIN_SMALL}_g221 < input.card
# cat ${filenam}${fhr}.tm00 WRFPCP${fhr}.tm00 > sref_$MODEL.t${CYC}z.pgrb221.$MEMBER.f${fhr}
# rm WRFPCP${fhr}.tm00
# cp sref_$MODEL.t${CYC}z.pgrb221.$MEMBER.f${fhr} $COMOUT/.
# else
# cp ${filenam}${fhr}.tm00 $COMOUT/sref_$MODEL.t${CYC}z.pgrb221.$MEMBER.f${fhr}
# fi

# 212 grid
  if [ $MODEL = em ]; then
  rm -f input.card
  echo "$DATA/wrf_prdgen" > input.card
  echo meso.AWIP3D >> input.card
  echo $fhrprev >> input.card
  echo $fhr >> input.card
  $EXECwrf/sref_pcpbucket_${DOMIN_SMALL}_g212 < input.card
  cat meso.AWIP3D${fhr}.tm00 WRFPCP${fhr}.tm00 > sref_$MODEL.t${CYC}z.pgrb212.$MEMBER.f${fhr}
  rm WRFPCP${fhr}.tm00
  cp sref_$MODEL.t${CYC}z.pgrb212.$MEMBER.f${fhr} $COMOUT/.
  else
  cp meso.AWIP3D${fhr}.tm00 $COMOUT/sref_$MODEL.t${CYC}z.pgrb212.$MEMBER.f${fhr}
  fi
# 216 grid
  if [ $MODEL = em ]; then
  rm -f input.card
  echo "$DATA/wrf_prdgen" > input.card
  echo nam.AWIPAK >> input.card
  echo $fhrprev >> input.card
  echo $fhr >> input.card
  $EXECwrf/sref_pcpbucket_${DOMIN_SMALL}_g216 < input.card
  cat nam.AWIPAK${fhr}.tm00 WRFPCP${fhr}.tm00 > sref_$MODEL.t${CYC}z.pgrb216.$MEMBER.f${fhr}
  rm WRFPCP${fhr}.tm00
  cp sref_$MODEL.t${CYC}z.pgrb216.$MEMBER.f${fhr} $COMOUT/.
  else
  cp nam.AWIPAK${fhr}.tm00 $COMOUT/sref_$MODEL.t${CYC}z.pgrb216.$MEMBER.f${fhr}
  fi
# 221 grid
  if [ $MODEL = em ]; then
  rm -f input.card
  echo "$DATA/wrf_prdgen" > input.card
  echo nam.AWIP32 >> input.card
  echo $fhrprev >> input.card
  echo $fhr >> input.card
  $EXECwrf/sref_pcpbucket_${DOMIN_SMALL}_g221 < input.card
  cat nam.AWIP32${fhr}.tm00 WRFPCP${fhr}.tm00 > sref_$MODEL.t${CYC}z.pgrb221.$MEMBER.f${fhr}
  rm WRFPCP${fhr}.tm00
  cp sref_$MODEL.t${CYC}z.pgrb221.$MEMBER.f${fhr} $COMOUT/.
  else
  cp nam.AWIP32${fhr}.tm00 $COMOUT/sref_$MODEL.t${CYC}z.pgrb221.$MEMBER.f${fhr}
  fi
# 243 grid
  if [ $MODEL = em ]; then
  rm -f input.card
  echo "$DATA/wrf_prdgen" > input.card
  echo nam.AWIPHI >> input.card
  echo $fhrprev >> input.card
  echo $fhr >> input.card
  $EXECwrf/sref_pcpbucket_${DOMIN_SMALL}_g243 < input.card
  cat nam.AWIPHI${fhr}.tm00 WRFPCP${fhr}.tm00 > sref_$MODEL.t${CYC}z.pgrb243.$MEMBER.f${fhr}
  rm WRFPCP${fhr}.tm00
  cp sref_$MODEL.t${CYC}z.pgrb243.$MEMBER.f${fhr} $COMOUT/.
  else
  cp nam.AWIPHI${fhr}.tm00 $COMOUT/sref_$MODEL.t${CYC}z.pgrb243.$MEMBER.f${fhr}
  fi

fi

# convert to GRIB2

/nwprod/util/exec/cnvgrib -g12 -p40 $COMOUT/sref_$MODEL.t${CYC}z.pgrb243.$MEMBER.f${fhr} $COMOUT/sref_$MODEL.t${CYC}z.pgrb212.$MEMBER.f${fhr}.grib2

UC_MODEL=`echo $MODEl | tr "[a-z]"  "[A-Z]"`
if [ "$SENDDBN" = "YES" ]; then
   $DBNROOT/bin/dbn_alert MODEL SREF_${UC_MODEL}_212_PGB_GB2  $job $COMOUT/sref_$MODEL.t${CYC}z.pgrb212.$MEMBER.f${fhr}.grib2
fi

exit
