#!/bin/sh

###############################
# change log:
# 06/08/05, Jun Du: add multi-grids capability for SREF outputs as well as
#                   the precipitable water (PWAT) field; grib product definition
#                   is changed for the lifted index in RSM forecasts due to the use
#                   WRF post. Forecast length is extended from 63hr to 87hr.
# 12/08/05, Jun Du: add WRF_nmm and WRF_em members

echo "------------------------------------------------"
echo "Ensemble Postprocessing"
echo "------------------------------------------------"

set -x

msg="Starting exsemble.sh for memeber $memberlist"
postmsg "$jlogfile" "$msg"

#####################################
# Define Script/Exec Variables
#####################################

WGRIB=/nwprod/util/exec/wgrib

#####################################
# Set up hours to dump                        
#####################################

case $RUN in
   sref) FSTART_HIGH=00
         FEND_HIGH=87
         FINC_HIGH=3
         FILE_HIGH1="\$COMIN/\${RUN}_\$model.\${cycle}.pgrb212.\${member}.f\${HOUR}"
         FILE_HIGH2="\$COMIN/\${RUN}_\$model.\${cycle}.pgrb216.\${member}.f\${HOUR}"
         FILE_HIGH3="\$COMIN/\${RUN}_\$model.\${cycle}.pgrb243.\${member}.f\${HOUR}"

         if [ "$model" = "eta" -o "$model" = "kfeta" ]
         then
            WGRIB_LIST=":PWAT:atmos.col|:HGT:1000.mb|:HGT:850.mb|:HGT:700.mb|:HGT:500.mb|:HGT:250.mb|UGRD:10.m.a|:UGRD:850.mb|:UGRD:500.mb|:UGRD:250.mb|:VGRD:10.m.a|:VGRD:850.mb|:VGRD:500.mb|:VGRD:250.mb|:TMP:2.m.a|:TMP:850.mb|:TMP:700.mb|:RH:850.mb|:RH:700.mb|:APCP|:PRMSL:MSL|:ABSV:500.mb|:ABSV:250.mb|:CAPE:sfc|:CIN:sfc|:PLI.30.mb.a|:TMAX:2.m.a|:TMIN:2.m.a|:CSNOW:sfc|:CICEP:sfc|:CFRZR:sfc|:CRAIN:sfc"
         fi

         if [ "$model" = "rsm" -o "$model" = "nmm" -o "$model" = "em" ]
         then
            WGRIB_LIST=":PWAT:atmos.col|:HGT:1000.mb|:HGT:850.mb|:HGT:700.mb|:HGT:500.mb|:HGT:250.mb|UGRD:10.m.a|:UGRD:850.mb|:UGRD:500.mb|:UGRD:250.mb|:VGRD:10.m.a|:VGRD:850.mb|:VGRD:500.mb|:VGRD:250.mb|:TMP:2.m.a|:TMP:850.mb|:TMP:700.mb|:RH:850.mb|:RH:700.mb|:APCP|:PRMSL:MSL|:ABSV:500.mb|:ABSV:250.mb|:CAPE:sfc|:CIN:sfc|:LFTX:500.1000.mb|:TMAX:2.m.a|:TMIN:2.m.a|:CSNOW:sfc|:CICEP:sfc|:CFRZR:sfc|:CRAIN:sfc"
         fi

         OUTPUT_FILE1="\$COMOUT/\${RUN}_\${model}.\${cycle}.pgrb212.\${member}"
         OUTPUT_FILE2="\$COMOUT/\${RUN}_\${model}.\${cycle}.pgrb216.\${member}"
         OUTPUT_FILE3="\$COMOUT/\${RUN}_\${model}.\${cycle}.pgrb243.\${member}"
         alert_type="${RUN}_${model}_PGB"
         ALERT_TYPE=`echo $alert_type | tr [a-z] [A-Z]`
         ;;

   ens*) FSTART_HIGH=00
         FEND_HIGH=84
         FINC_HIGH=12
         FILE_HIGH="\$COMIN/ens\${member}.\${cycle}.pgrbf\${HOUR}.2"
         FSTART_LOW=96
         FEND_LOW=384
         FINC_LOW=12
         FILE_LOW="\$COMIN/ens\${member}.\${cycle}.pgrbf\${HOUR}"

         WGRIB_LIST=":HGT:1000.mb|:HGT:500.mb|UGRD:10.m.a|:UGRD:850.mb|:UGRD:500.mb|:UGRD:250.mb|:VGRD:10.m.a|:VGRD:850.mb|:VGRD:500.mb|:VGRD:250.mb|:TMP:2.m.a|:TMP:850.mb|:RH:700.mb|:APCP|:PRMSL:MSL|:TMAX:2.m.a|:TMIN:2.m.a"

         OUTPUT_FILE="\$COMOUT/ensemble.\${member}.\${PDY}.\${cyc}"
         ;;

   gfs)  FSTART_HIGH=00
         FEND_HIGH=120
         FINC_HIGH=12
         FILE_HIGH="\$COMIN/gfs.\${cycle}.pgrbf\${HOUR}.2"

         FSTART_LOW=132
         FEND_LOW=384
         FINC_LOW=12
         FILE_LOW="\$COMIN/ense2.\${cycle}.pgrbf\${HOUR}"

         WGRIB_LIST=":HGT:1000.mb|:HGT:500.mb|UGRD:10.m.a|:UGRD:850.mb|:UGRD:500.mb|:UGRD:250.mb|:VGRD:10.m.a|:VGRD:850.mb|:VGRD:500.mb|:VGRD:250.mb|:TMP:2.m.a|:TMP:850.mb|:RH:700.mb|:APCP|:PRMSL:MSL|:TMAX:2.m.a|:TMIN:2.m.a"

         OUTPUT_FILE="\$COMOUT/ensemble.\${member}.\${PDY}.\${cyc}"
         ;;

   mrf)  FSTART_HIGH=00
         FEND_HIGH=168
         FINC_HIGH=12
         FILE_HIGH="\$COMIN/drfmr.\${cycle}.pgrbf\${HOUR}.2"

         FSTART_LOW=180
         FEND_LOW=384
         FINC_LOW=12
         FILE_LOW="\$COMIN/drfmr.\${cycle}.pgrbf\${HOUR}"

         WGRIB_LIST=":HGT:1000.mb|:HGT:500.mb|UGRD:10.m.a|:UGRD:850.mb|:UGRD:500.mb|:UGRD:250.mb|:VGRD:10.m.a|:VGRD:850.mb|:VGRD:500.mb|:VGRD:250.mb|:TMP:2.m.a|:TMP:850.mb|:RH:700.mb|:APCP|:PRMSL:MSL|:TMAX:2.m.a|:TMIN:2.m.a"

         OUTPUT_FILE="\$COMOUT/ensemble.\${member}.\${PDY}.\${cyc}"
         ;;
esac

#####################################
# Concatenate the grib files for all     
#  hours into a single file.  Begin 
#  by deleting old files, if present.
#####################################
for member in $memberlist
do 
   if [ -s pgrbf${member} ]
   then
       rm  pgrbf${member}
   fi
   if [ -s pgrb1f${member} ]
   then
       rm  pgrb1f${member}
   fi
   if [ -s pgrb2f${member} ]
   then
       rm  pgrb2f${member}
   fi
   if [ -s pgrb3f${member} ]
   then
       rm  pgrb3f${member}
   fi
   if [ -s ensemble.${member} ]
   then
       rm  ensemble.${member}
   fi
   if [ -s ensemble1.${member} ]
   then
       rm  ensemble1.${member}
   fi
   if [ -s ensemble2.${member} ]
   then
       rm  ensemble2.${member}
   fi
   if [ -s ensemble3.${member} ]
   then
       rm  ensemble3.${member}
   fi

   typeset -Z2 HOUR

   HOUR=$FSTART_HIGH

   while [ $HOUR -le $FEND_HIGH ]
   do
     if [ "$RUN" = "sref" ]
     then
      filename1=`eval echo $FILE_HIGH1`
      cat $filename1  >>  pgrb1f${file}    

      filename2=`eval echo $FILE_HIGH2`
      cat $filename2  >>  pgrb2f${file}    

      filename3=`eval echo $FILE_HIGH3`
      cat $filename3  >>  pgrb3f${file}    
     else
      filename=`eval echo $FILE_HIGH`
      cat $filename  >>  pgrbf${file}    
     fi

      let HOUR=$HOUR+$FINC_HIGH
   done 

   HOUR=$FSTART_LOW
   #
   # IF FSTART_LOW IS SET THEN...
   #
   if [ "$FSTART_LOW" != ""  ]
   then
      while [ $HOUR -le $FEND_LOW ]
      do
         filename=`eval echo $FILE_LOW`
         cat $filename  >>  pgrbf${file}    

         let HOUR=$HOUR+$FINC_LOW
      done
   fi

#####################################
# Run wgrib to get the inventory of     
#  this new concatenated file.       
#####################################
    
   if [ "$RUN" = "sref" ]
   then
    $WGRIB -s pgrb1f${file} > pgrb1f${file}.inv
    $WGRIB -s pgrb2f${file} > pgrb2f${file}.inv
    $WGRIB -s pgrb3f${file} > pgrb3f${file}.inv
   else
    $WGRIB -s pgrbf${file} > pgrbf${file}.inv
   fi
#####################################
# Use egrep to filter the fields         
#####################################

   if [ "$RUN" = "sref" ]
   then
    egrep $WGRIB_LIST pgrb1f${file}.inv | $WGRIB pgrb1f${file} -s -grib -i -o ensemble1.${member}
    egrep $WGRIB_LIST pgrb2f${file}.inv | $WGRIB pgrb2f${file} -s -grib -i -o ensemble2.${member}
    egrep $WGRIB_LIST pgrb3f${file}.inv | $WGRIB pgrb3f${file} -s -grib -i -o ensemble3.${member}
   else
    egrep $WGRIB_LIST pgrbf${file}.inv | $WGRIB pgrbf${file} -s -grib -i -o ensemble.${member}
   fi

   #####################################
   # Write the files out to permanent         
   #  diskspace
   #####################################
    if  [ ${member} = "c0" ]
    then
       member="cnt"
    fi

   if [ "$RUN" = "sref" ]
   then
    filename1=`eval echo $OUTPUT_FILE1`
    cp ensemble1.${member} $filename1

    filename2=`eval echo $OUTPUT_FILE2`
    cp ensemble2.${member} $filename2

    filename3=`eval echo $OUTPUT_FILE3`
    cp ensemble3.${member} $filename3
   else
    filename=`eval echo $OUTPUT_FILE`
    cp ensemble.${member} $filename
   fi

   #################################
   # Convert to grib2 format
   #################################
   CNVGRIB=/nwprod/util/exec/cnvgrib
   WGRIB2=/nwprod/util/exec/wgrib2
   $CNVGRIB -g12 -p40 $filename1 ${filename1}.grib2
   $CNVGRIB -g12 -p40 $filename2 ${filename2}.grib2
   $CNVGRIB -g12 -p40 $filename3 ${filename3}.grib2
   $WGRIB2 ${filename1}.grib2 -s >${filename1}.grib2.idx
   $WGRIB2 ${filename2}.grib2 -s >${filename2}.grib2.idx
   $WGRIB2 ${filename3}.grib2 -s >${filename3}.grib2.idx
   
   cp ${filename1}.grib2 $COMOUT

    if [ "$SENDDBN" = "YES" ]
    then
       if [ "$RUN" = "sref" ]
       then
          $DBNROOT/bin/dbn_alert MODEL $ALERT_TYPE $job $filename1
          $DBNROOT/bin/dbn_alert MODEL $ALERT_TYPE $job $filename2
          $DBNROOT/bin/dbn_alert MODEL $ALERT_TYPE $job $filename3

          if [ $SENDDBN_GB2 = YES ]
          then

          $DBNROOT/bin/dbn_alert MODEL ${ALERT_TYPE}_GB2 $job ${filename1}.grib2
          $DBNROOT/bin/dbn_alert MODEL ${ALERT_TYPE}_GB2 $job ${filename2}.grib2
          $DBNROOT/bin/dbn_alert MODEL ${ALERT_TYPE}_GB2 $job ${filename3}.grib2

          $DBNROOT/bin/dbn_alert MODEL ${ALERT_TYPE}_GB2_WIDX $job ${filename1}.grib2.idx
          $DBNROOT/bin/dbn_alert MODEL ${ALERT_TYPE}_GB2_WIDX $job ${filename2}.grib2.idx
          $DBNROOT/bin/dbn_alert MODEL ${ALERT_TYPE}_GB2_WIDX $job ${filename3}.grib2.idx
          
          fi
       fi
    fi
done        

if [ "$model" = "eta" ]
then
  echo done > $FCSTDIR/${model}ens.done
fi

msg="ENDING exsemble.sh for memeber $memberlist"
postmsg "$jlogfile" "$msg"
