#! /bin/ksh
#################################################################
# hwrf_wps.sh
# Shaowu Bao 08-12-2009
# Vijay Tallapragada 08-24-2009 Revised for WPS
#################################################################
# This script initializes the HWRF model with the
# appropriate GFS forecast files.
#################################################################
set -aeux

date

##### SET DATE AND OTHER ENVIRONMENTAL VARIABLES #######

######### GET THE INPUT VARIABLES ####################
if [ $# -eq 5 ]
then
   export DOMAIN=${1}
   export YEAR=${2}
   export MONTH=${3}
   export DATE=${4}
   export CYCLE=${5}

   echo 'DOMAIN         = ' ${DOMAIN}
   echo 'YEAR           = ' ${YEAR}
   echo 'MONTH          = ' ${MONTH}
   echo 'DATE           = ' ${DATE}
   echo 'CYCLE          = ' ${CYCLE}
else
   echo 'USAGE: sh hwrf_wps.sh DOMAIN YEAR MONTH DATE CYCLE '
   echo 'NEED SIX ARGUMENTS'
   echo 'SCRIPT WILL EXIT'
   sh ${utilscript}/setup.sh
   err=911
   err_exit "NEED SIX ARGUMENTS"
fi

export GFS_SOURCE=${GFS_SOURCE:-GRIB_1x1_REDUCED}

export MINUTE=00
export SECOND=00
export FLENGTH=126    # Forecast Length
export FLENGTH0=00    # Forecast begins at hour 0
export FREQBC=06      # Frequency of Boundary Conditions (SI is run
                      # Only for the Zero'th hour. BCs are generated
                      # using subsequent script hwrf_prep.sh
export LCASE_NAME=`echo  $DOMAIN | tr '[A-Z]' '[a-z]' `

################### SET PATH FOR WPS #######################################
# breaks grib2 support: export GFS_SOURCE=${GFS_ROOT}/gfs.$YEAR$MONTH$DATE$CYCLE
export WPSSTREAM=${CSTREAM}/NMMWPS                               # Create NMMWPS directory
#===============================================================================
 rm -f -r ${WPSSTREAM}
 mkdir -p ${WPSSTREAM}
#===============================================================================
cp ${PARMhwrf}/hwrf_GEOGRID.TBL       $WPSSTREAM/GEOGRID.TBL
cp ${PARMhwrf}/hwrf_METGRID.TBL       $WPSSTREAM/METGRID.TBL
cp ${PARMhwrf}/hwrf_Vtable            $WPSSTREAM/Vtable 


if [[ "$PARAFLAG" == YES ]] ; then
    $USHhwrf/hwrf_port_cachesync.sh -p
fi

################# COMPUTE FORECAST TIMES ############################

export DATE_STRING=$YEAR$MONTH$DATE$CYCLE
export YMDHS="$DATE_STRING"
ndate=${utilexec}/ndate

if [[ "$RUN_PREP_HYBRID" == YES ]] ; then
    # When running prep_hybrid, the prep_hybrid handles the boundary fields,
    # so WPS only needs to be run for the analysis time:
    export YMDHE=$YMDHS
    grib_append=00
else
    # When not running prep_hybrid, WPS handles the boundary conditions as
    # well, so we have to run it for the full simulation:
    export YMDHE=$( ndate "$FLENGTH" "$YMDHS" )
    grib_append=''
fi

if [[ "$PARAFLAG" == YES ]] ; then
    $USHhwrf/hwrf_port_cachesync.sh -p
fi

################# GENERATE NAMELIST.WPS #############################

export WPS_GEOG_ROOT="${WPS_GEOG_ROOT:-$FIXhwrf/hwrf_wps_geo}"
cd $WPSSTREAM
"${USHhwrf}/hwrf_stream_parse.pl" ${PARMhwrf}/hwrf_namelist.wps namelist.wps

if [[ "$PARAFLAG" == YES ]] ; then
    $USHhwrf/hwrf_port_cachesync.sh -p
fi

################# RUN GEOGRID #######################################

$USHhwrf/hwrf_run.sh ${EXEChwrf}/hwrf_geogrid

################# WAIT FOR GRIB FILES ###############################

if ( echo "$GFS_SOURCE" | grep -i grib2  > /dev/null ) ; then
    ${USHhwrf}/hwrf_link_grib.sh $ATMOS_INPUT/gfs.t${CYCLE}z.pgrb2f$grib_append
else
    ${USHhwrf}/hwrf_link_grib.sh $ATMOS_INPUT/gfs.t${CYCLE}z.pgrbf$grib_append
fi

for file in GRIBFILE.* ; do
    if ( ! $USHhwrf/hwrf_file_complete.pl -w1800 -s1 -S10 -o30 "$file" ) ; then
        echo "THERE IS A PROBLEM WITH THE PRE_ATMOS OR GFS: INPUT GRIB FILES ARE NOT CREATED (FILE $file)."
        sh ${utilscript}/setup.sh
        err=911
        err_exit "THERE IS A PROBLEM WITH THE PRE_ATMOS OR GFS: INPUT GRIB FILES ARE NOT CREATED (FILE $file)."
    fi
done

################# RUN UNGRIB AND METGRID ############################

# Run ungrib.exe as a serial program:
${EXEChwrf}/hwrf_ungrib

# Metgrid is a parallel program, so run through poe:
if [[ "$PARAFLAG" == YES ]] ; then
    $USHhwrf/hwrf_port_cachesync.sh
fi
$USHhwrf/hwrf_run.sh ${EXEChwrf}/hwrf_metgrid


exit 0
