#!/bin/sh
################################################################################
# UNIX Script Documentation Block                                                         #
#                                                                                         #
# Script name:         exhiresw_wrfsi_ens.sh.sms                                          #
# Script description:  Runs WRF standard initialization (SI) for the WRF-NMM and          #
#                      WRF-EM model                                                       #
#                                                                                         #
# Author:        Eric Rogers       Org: NP22         Date: 2004-07-02                     #
#                                                                                         #
# Abstract: The scripts gets all the input files needed for the WRF-NMM ands WRF-EM       #
#           hiresw run and runs the WRF SI which interpolates the operational Eta ic's    #
#           to the nested WRF-NMM domain                                                  #
#                                                                                         #
# Script history log:                                                                     #
# 2003-11-01  Matt Pyle   - Original script for parallel                                  #
# 2004-07-02  Eric Rogers - Preliminary modifications for production.                     #
# 2005-08-02  Jun Du - Modified to fit SREF system
#
# 2005-10-06  Xiaoxue Wang - Modified to operational standard
# 2006-04-05  Jun Du - (1) glb ensemble's directory name and file names have been         #
#                      modified to match the new glb ensemble output format; (2) a new
#                      pair of glb ensemble members are assigned to AWR members for more
#                      diversity
# 2007-08-13  Jun Du - Due to the GFS output grid change to Gaussian, all pgrib files
#                      including GFS 0.5d master files and 1.0d GEFS pgriba and pgribb
#                      files are now generated by the SREF code itself as a solution
# 2008-07-18  Jun Du - upgrade to WRFv2.2
# 2010-04-15  Jun Du - generalized the script to run NEMS ensemble (MODEL=NMB)
################################################################################

set -aux

export XLFRTEOPTS="unit_vars=yes"

MEMBER=$1
GLBMEM=$2

model=`echo $MODEL | tr "[:upper:]" "[:lower:]"`

cd $WORK_DIR

START_DATE=$PDY$CYC
START_DATE_P03=`/nwprod/util/exec/ndate +03 $START_DATE`
START_DATE_M03=`/nwprod/util/exec/ndate -03 $START_DATE`
END_DATE=`/nwprod/util/exec/ndate $FLENGTH $START_DATE`

START_YYYY=`echo $START_DATE | cut -c 1-4`
START_MM=`echo $START_DATE | cut -c 5-6`
START_DD=`echo $START_DATE | cut -c 7-8`
START_HH=`echo $START_DATE | cut -c 9-10`

START_P03_YYYY=`echo $START_DATE_P03 | cut -c 1-4`
START_P03_MM=`echo $START_DATE_P03 | cut -c 5-6`
START_P03_DD=`echo $START_DATE_P03 | cut -c 7-8`
START_P03_HH=`echo $START_DATE_P03 | cut -c 9-10`

START_M03_YYYY=`echo $START_DATE_M03 | cut -c 1-4`
START_M03_MM=`echo $START_DATE_M03 | cut -c 5-6`
START_M03_DD=`echo $START_DATE_M03 | cut -c 7-8`
START_M03_HH=`echo $START_DATE_M03 | cut -c 9-10`

END_YYYY=`echo $END_DATE | cut -c 1-4`
END_MM=`echo $END_DATE | cut -c 5-6`
END_DD=`echo $END_DATE | cut -c 7-8`
END_HH=`echo $END_DATE | cut -c 9-10`

CYC=$START_HH

WPS_START_DATE=${START_YYYY}-${START_MM}-${START_DD}_${START_HH}:00:00
WPS_START_DATE_P03=${START_P03_YYYY}-${START_P03_MM}-${START_P03_DD}_${START_P03_HH}:00:00
WPS_END_DATE=${END_YYYY}-${END_MM}-${END_DD}_${END_HH}:00:00

if [ $CYC -eq 03 -o $CYC -eq 09 -o $CYC -eq 15 -o $CYC -eq 21 ];then
 GLB_DATE=`/nwprod/util/exec/ndate -3 $START_DATE`
else
 GLB_DATE=`/nwprod/util/exec/ndate -0 $START_DATE`
fi
GLB_CYC=`echo ${GLB_DATE} | cut -c 9-10`


# Run setup to initialize working directory and utility scripts
sh /nwprod/util/ush/setup.sh

#
# ungrib
#

case $MODEL in

ARW)

  cp $FIXsref/sref_geo_em.d01.int_$RES geo_em.d01.int

  ###################
  # Initial conditions (RUC + GFS): 00h
  ###################

  if [ $MEMBER == ctl ]; then
  # GFS 00 file
   cp $COMIN/global_pgrb/gfs.t${GLB_CYC}z.master.grbf[0123456789]? .
   $USHsref/sref_filter_grib.sh gfs.t${GLB_CYC}z.master.grbf[0123456789]?
   $USHsref/sref_link_grib.csh gfs.t${GLB_CYC}z.master.grbf[0123456789]?
  else
  # GEFS 00 file
   cp $COMIN/global_pgrb/gens_${GLBMEM}.t${GLB_CYC}z.pgrbf[0123456789]? .
   $USHsref/sref_filter_grib.sh gens_${GLBMEM}.t${GLB_CYC}z.pgrbf[0123456789]?
   $USHsref/sref_link_grib.csh gens_${GLBMEM}.t${GLB_CYC}z.pgrbf[0123456789]?
  fi

  cp $PARMsref/sref_Vtable.GFS Vtable
  cat $PARMsref/sref_namelist.wps.in.${MODEL}_$RES | sed s/WPS_START_DATE/$WPS_START_DATE/ | \
                                              sed s/WPS_END_DATE/$WPS_START_DATE/ | \
                                              sed s/FILEPREFIX/FILE_GFS/ > namelist.wps
  export pgm=sref_ungrib
  . prep_step
  startmsg
  $EXECsref/sref_ungrib >> $pgmout 2>errfile
  export err=$?;err_chk

  # Rapid Refresh (RUC grid 130) 00 file
  $USHsref/sref_getbestRAPanl.sh $START_DATE
  $USHsref/sref_link_grib.csh rap.t${CYC}z.awp130f00
  cp $PARMsref/sref_Vtable.RUC Vtable
  cat $PARMsref/sref_namelist.wps.in.${MODEL}_$RES | sed s/WPS_START_DATE/$WPS_START_DATE/ | \
                                              sed s/WPS_END_DATE/$WPS_START_DATE/ | \
                                              sed s/FILEPREFIX/FILE_RUC/ > namelist.wps
  export pgm=sref_ungrib
  . prep_step
  startmsg
  $EXECsref/sref_ungrib >> $pgmout 2>errfile
  export err=$?;err_chk

  cp $PARMsref/sref_METGRID.TBL.$MODEL METGRID.TBL
  cat $PARMsref/sref_namelist.wps.in.${MODEL}_$RES | sed s/WPS_START_DATE/$WPS_START_DATE/ | \
                                              sed s/WPS_END_DATE/$WPS_START_DATE/ | \
                                              sed s/FGNAME/"'.\/FILE_GFS'","'.\/FILE_RUC'"/ > namelist.wps

  export pgm=sref_metgrid
  . prep_step
  startmsg
  $EXECsref/sref_metgrid >> $pgmout 2>errfile
  export err=$?;err_chk

  ###################
  # Lateral Boundary conditions: 03h - WPS_END_DATE
  # (Note: If it starts from 00, it also serves IC)
  ###################

  if [ $MEMBER == ctl ]; then

      cp $COMIN/global_pgrb/gfs.t${GLB_CYC}z.master.grbf[0123456789]? .
      $USHsref/sref_filter_grib.sh gfs.t${GLB_CYC}z.master.grbf[0123456789]?
      $USHsref/sref_link_grib.csh gfs.t${GLB_CYC}z.master.grbf[0123456789]?
      cp $PARMsref/sref_Vtable.GFS Vtable
#     cat $PARMsref/sref_namelist.wps.in.${MODEL}_$RES | sed s/WPS_START_DATE/$WPS_START_DATE_P03/ | \
      cat $PARMsref/sref_namelist.wps.in.${MODEL}_$RES | sed s/WPS_START_DATE/$WPS_START_DATE/ | \
                                                  sed s/WPS_END_DATE/$WPS_END_DATE/ | \
                                                  sed s/FILEPREFIX/FILE_GFS/ | \
                                                  sed s/FGNAME/"'.\/FILE_GFS'"/ > namelist.wps
      export pgm=sref_ungrib
      . prep_step
      startmsg
      $EXECsref/sref_ungrib >> $pgmout 2>errfile
      export err=$?;err_chk

      cp $PARMsref/sref_METGRID.TBL.$MODEL METGRID.TBL
      export pgm=sref_metgrid
      . prep_step
      startmsg
      $EXECsref/sref_metgrid >> $pgmout 2>errfile
      export err=$?;err_chk


  else

      cp $COMIN/global_pgrb/gens_${GLBMEM}.t${GLB_CYC}z.pgrbf[0123456789]? .
      $USHsref/sref_filter_grib.sh gens_${GLBMEM}.t${GLB_CYC}z.pgrbf[0123456789]?
      $USHsref/sref_link_grib.csh gens_${GLBMEM}.t${GLB_CYC}z.pgrbf[0123456789]?
      cp $PARMsref/sref_Vtable.GFS Vtable
#     cat $PARMsref/sref_namelist.wps.in.${MODEL}_$RES | sed s/WPS_START_DATE/$WPS_START_DATE_P03/ | \
      cat $PARMsref/sref_namelist.wps.in.${MODEL}_$RES | sed s/WPS_START_DATE/$WPS_START_DATE/ | \
                                                  sed s/WPS_END_DATE/$WPS_END_DATE/ | \
                                                  sed s/FILEPREFIX/FILE_GFS/ | \
                                                  sed s/FGNAME/"'.\/FILE_GFS'"/ > namelist.wps
      export pgm=sref_ungrib
      . prep_step
      startmsg
      $EXECsref/sref_ungrib >> $pgmout 2>errfile
      export err=$?;err_chk

      cp $PARMsref/sref_METGRID.TBL.$MODEL METGRID.TBL
      export pgm=sref_metgrid
      . prep_step
      startmsg
      $EXECsref/sref_metgrid >> $pgmout 2>errfile
      export err=$?;err_chk

  fi

  ;;

NMM)

  ###################
  # Initial conditions (GFS and GEFS): 00h
  ###################

  cp $FIXsref/sref_geo_nmm.d01.int_$RES geo_nmm.d01.int

  if [ $MEMBER == ctl ]; then
      $USHsref/sref_link_grib.csh $COMIN/global_pgrb/gfs.t${GLB_CYC}z.master.grbf[0123456789]?
  else
      $USHsref/sref_link_grib.csh $COMIN/global_pgrb/gens_${GLBMEM}.t${GLB_CYC}z.pgrbf??
  fi

  cp $PARMsref/sref_Vtable.GFS Vtable
  cat $PARMsref/sref_namelist.wps.in.${MODEL}_$RES | sed s/WPS_START_DATE/$WPS_START_DATE/ | \
                                              sed s/WPS_END_DATE/$WPS_END_DATE/ | \
                                              sed s/FILEPREFIX/FILE_GFS/ | \
                                              sed s/FGNAME/"'.\/FILE_GFS'"/ > namelist.wps

  export pgm=sref_ungrib
  . prep_step
  startmsg
  $EXECsref/sref_ungrib >> $pgmout 2>errfile
  export err=$?;err_chk

  cp $PARMsref/sref_METGRID.TBL.$MODEL METGRID.TBL
  export pgm=sref_metgrid
  . prep_step
  startmsg
  $EXECsref/sref_metgrid >> $pgmout 2>errfile
  export err=$?;err_chk

  ;;

NMB)

  cp $FIXsref/sref_geo_nmb.d01.int_$RES geo_nmb.d01.dio

  ###################
  # Initial conditions (NDAS grid151): 00h
  ###################

  # GFS 00 file
  cp $COMIN/global_pgrb/gfs.t${GLB_CYC}z.master.grbf[0123456789]? .
  $USHsref/sref_filter_grib.sh gfs.t${GLB_CYC}z.master.grbf[0123456789]?
  $USHsref/sref_link_grib.csh gfs.t${GLB_CYC}z.master.grbf[0123456789]?
  cp $PARMsref/sref_Vtable.GFS Vtable
  cat $PARMsref/sref_namelist.wps.in.${MODEL}_$RES | sed s/WPS_START_DATE/$WPS_START_DATE/ | \
                                              sed s/WPS_END_DATE/$WPS_START_DATE/ | \
                                              sed s/FILEPREFIX/FILE_GFS/ > namelist.nps
  export pgm=sref_ungrib_nems
  . prep_step
  startmsg
  $EXECsref/sref_ungrib_nems >> $pgmout 2>errfile
  export err=$?;err_chk

# # NDAS (Grid 151) f00 file (later start) or NAM f03 file (earlier start)
  $USHsref/sref_getbestndasanl.sh $START_DATE

  $USHsref/sref_link_grib.csh awp15100.${START_DATE}


  cp $PARMsref/sref_Vtable.NAM Vtable
  cat $PARMsref/sref_namelist.wps.in.${MODEL}_$RES | sed s/WPS_START_DATE/$WPS_START_DATE/ | \
                                              sed s/WPS_END_DATE/$WPS_START_DATE/ | \
                                              sed s/FILEPREFIX/FILE_NDAS/ > namelist.nps
  export pgm=sref_ungrib_nems
  . prep_step
  startmsg
  $EXECsref/sref_ungrib_nems >> $pgmout 2>errfile
  export err=$?;err_chk

  cp $PARMsref/sref_METGRID.TBL.$MODEL METGRID.TBL
  cat $PARMsref/sref_namelist.wps.in.${MODEL}_$RES | sed s/WPS_START_DATE/$WPS_START_DATE/ | \
                                              sed s/WPS_END_DATE/$WPS_START_DATE/ | \
                                              sed s/FGNAME/"'.\/FILE_GFS'","'.\/FILE_NDAS'"/ > namelist.nps

  export pgm=sref_metgrid_nems
  . prep_step
  startmsg
  $EXECsref/sref_metgrid_nems >> $pgmout 2>errfile
  export err=$?;err_chk

  ###################
  # Lateral Boundary conditions: 03h - WPS_END_DATE
  # (Note: If it starts from 00, it also serves IC)
  ###################

  if [ $MEMBER == ctl ]; then

      cp $COMIN/global_pgrb/gfs.t${GLB_CYC}z.master.grbf[0123456789]? .
      $USHsref/sref_filter_grib.sh gfs.t${GLB_CYC}z.master.grbf[0123456789]?
      $USHsref/sref_link_grib.csh gfs.t${GLB_CYC}z.master.grbf[0123456789]?
      cp $PARMsref/sref_Vtable.GFS Vtable
#     cat $PARMsref/sref_namelist.wps.in.${MODEL}_$RES | sed s/WPS_START_DATE/$WPS_START_DATE/ | \
      cat $PARMsref/sref_namelist.wps.in.${MODEL}_$RES | sed s/WPS_START_DATE/$WPS_START_DATE_P03/ | \
                                                  sed s/WPS_END_DATE/$WPS_END_DATE/ | \
                                                  sed s/FILEPREFIX/FILE_GFS/ | \
                                                  sed s/FGNAME/"'.\/FILE_GFS'"/ > namelist.nps
      export pgm=sref_ungrib_nems
      . prep_step
      startmsg
      $EXECsref/sref_ungrib_nems >> $pgmout 2>errfile
      export err=$?;err_chk

      cp $PARMsref/sref_METGRID.TBL.$MODEL METGRID.TBL
      export pgm=sref_metgrid_nems
      . prep_step
      startmsg
      $EXECsref/sref_metgrid_nems >> $pgmout 2>errfile
      export err=$?;err_chk


  else

      cp $COMIN/global_pgrb/gens_${GLBMEM}.t${GLB_CYC}z.pgrbf[0123456789]? .
      $USHsref/sref_filter_grib.sh gens_${GLBMEM}.t${GLB_CYC}z.pgrbf[0123456789]?
      $USHsref/sref_link_grib.csh gens_${GLBMEM}.t${GLB_CYC}z.pgrbf[0123456789]?
      cp $PARMsref/sref_Vtable.GFS Vtable
#     cat $PARMsref/sref_namelist.wps.in.${MODEL}_$RES | sed s/WPS_START_DATE/$WPS_START_DATE/ | \
      cat $PARMsref/sref_namelist.wps.in.${MODEL}_$RES | sed s/WPS_START_DATE/$WPS_START_DATE_P03/ | \
                                                  sed s/WPS_END_DATE/$WPS_END_DATE/ | \
                                                  sed s/FILEPREFIX/FILE_GFS/ | \
                                                  sed s/FGNAME/"'.\/FILE_GFS'"/ > namelist.nps
      export pgm=sref_ungrib_nems
      . prep_step
      startmsg
      $EXECsref/sref_ungrib_nems >> $pgmout 2>errfile
      export err=$?;err_chk

      cp $PARMsref/sref_METGRID.TBL.$MODEL METGRID.TBL
      export pgm=sref_metgrid_nems
      . prep_step
      startmsg
      $EXECsref/sref_metgrid_nems >> $pgmout 2>errfile
      export err=$?;err_chk

  fi

  ;;

*)
   echo "Unknown model ${MODEL}"
   exit
   ;;

esac

grep "Successful completion of program metgrid.exe" metgrid.log.0000
err=$?
if [ $err -ne 0 ]; then
   echo "sref_metgrid failed" >> $WORK_DIR/wps.$MEMBER.failed
   err_chk
fi

echo "done" > $WORK_DIR/wps.$MEMBER.done
