#! /bin/ksh 
###############################################################
# hwrf_output.sh 
#################
# This script copies the HWRF model output to the 
# COMOUT directory.
# Usage: sh hwrf_output.sh STORM YYYYMMDDHH stormid MODEL 
# May 2007  Vijay Tallapragada 
# Apr 2008  Vijay Tallapragada 
# Jun 2009 Revised for HWRF 2009 implementation, Vijay Tallapragada
# Jun 2011 Added script to e-mail output to SDM, Kelly Kempisty:275
###############################################################

set -x 

######## GET THE INPUT VARIABLES #############
if [ $# -eq 4 ]
then 
   STORM=$1
   YYYYMMDDHH=$2
   stormid=$3
   MODEL=$4
 
   echo 'STORM      = ' ${STORM}
   echo 'YYYYMMDDHH = ' ${YYYYMMDDHH}
   echo 'stormid    = ' ${stormid}
   echo 'MODEL      = ' ${MODEL}  
else
   echo 'Usage: sh hwrf_output.sh STORM YYYYMMDDHH stormid MODEL'
   echo 'NEED FOUR ARGUMENTS'
   echo 'SCRIPT WILL EXIT'
   sh ${utilscript}/setup.sh
   err=911
   err_exit "SCRIPT WILL EXIT"
fi  

# Decide the directory that contains the 12-hour forecast.  This is
# same as the 126-hour forecast directory if we're running in
# "combined" 12/126 mode (no 12-hour run):
if [[ "$FORECAST_MODE" == COMBINED ]] ; then
    model12="${MODEL}_FCST"
else
    model12="$MODEL"
fi

utilexec=${utilexec:-${NWPROD}/util/exec}
ndate=${NDATE_PATH:-${utilexec}/ndate}

# variables exported into script
echo 'CSTREAM = ' ${CSTREAM}  
echo 'COMOUT  = ' ${COMOUT}  
echo 'STORMID = ' ${STORMID}

YY=`  echo ${YYYYMMDDHH} | cut -c3-4`
YYYY=`echo ${YYYYMMDDHH} | cut -c1-4`
MM=`  echo ${YYYYMMDDHH} | cut -c5-6`
DD=`  echo ${YYYYMMDDHH} | cut -c7-8`
CYC=` echo ${YYYYMMDDHH} | cut -c9-10`
cyc=${CYC} 

echo 'YYYY = ' ${YYYY}
echo 'YY   = ' ${YY}
echo 'MM   = ' ${MM}
echo 'DD   = ' ${DD}
echo 'CYC  = ' ${CYC}
echo 'cyc  = ' ${cyc} 

##############################################

# Determine the name tags to attach to each file because
# the output of up to four storms will be stored in the
# same production COMOUT directory.
# nid (name id)  example: nid=katrina12l
# nidymdh (name id yyyymmddhh) example: nidymdh=katrina12l.2005082612  

storm=`echo ${STORM} | tr '[A-Z]' '[a-z]'`  
nid=${storm}${stormid}
nidymdh=${nid}.${YYYYMMDDHH}

echo 'storm   = ' ${storm}  
echo 'nid     = ' ${nid}  
echo 'nidymdh = ' ${nidymdh} 

##############################################

function copyit {
    # This function copies files to comout with a different name
    # and optionally calls dbn_alert.

    # copyit /path/to/file  -- creates $COMOUT/$nidymdh.file
    # copyit /path/to/file outname -- creates $COMOUT/$outname
    # copyit /path/to/file outname more args
    #            -- creates $COMOUT/$outname and calls 
    #               $DBNROOT/bin/dbn_alert more args

    file_name="$1"
    file_out="${2:-$nidymdh.$( basename $1 )}"
    if [ -s ${file_name} ]
        then 
        /bin/cp -f ${file_name} "${COMOUT}/$file_out"
        if [[ $# -gt 2 && "$SENDDBN" == YES ]] ; then
            shift 2
            $DBNROOT/bin/dbn_alert $*
        fi
    else
        echo "FILE ${file_name} NOT PRESENT"  
    fi 
}

###### WAIT FOR DIAGNOSTIC PRODUCTS AND TPCPOST TO COMPLETE IN NON-NCO MODE

if [[ "$PARAFLAG" == YES ]] ; then
    "$USHhwrf/hwrf_output_wait.sh" "$nidymdh"
fi

###### COPY DATA TO COMOUT AND GIVE ERRORS IF IT IS MISSING

if [[ "$PARAFLAG" == YES ]] ; then
    # If the submit.out exists (log of llsubmit/qsub output), copy to COMOUT.
    # This file only exists if PARAFLAG=YES, so do not copy in operations.
    copyit "$DATA/submit.out"
fi

# Job log file:

copyit "$DATA/jlogfile" \
    ${nidymdh}.jlogfile

# Tracker data

#copyit "${CSTREAM}/${MODEL}_FCST/COMBINE/hwrf.t${cyc}z.grbf-cycle.combined"

#copyit "${CSTREAM}/${MODEL}_FCST/NEST/hwrf.t${cyc}z.grbf-cycle.nest"

if [[ "$OLD_TRACKER" == YES ]] ; then
    
    copyit "${CSTREAM}/${MODEL}_FCST/COMBINE/trak.hwrf.all.${YYYYMMDDHH}" \
        ${nidymdh}.trak.hwrf.all  
    
    copyit "${CSTREAM}/${MODEL}_FCST/COMBINE/trak.hwrf.atcf.${YYYYMMDDHH}" \
        ${nidymdh}.trak.hwrf.atcf
    
    copyit "${CSTREAM}/${MODEL}_FCST/COMBINE/trak.hwrf.atcfunix.${YYYYMMDDHH}" \
        ${nidymdh}.trak.hwrf.atcfunix
    
    copyit "${CSTREAM}/${MODEL}_FCST/DOM12/trak.hwrf.atcfunix.${YYYYMMDDHH}" \
        ${nidymdh}.trak.hwrf.dom12
    
    copyit "$COMOUT/$stormid.diagtrak.diag3hr.$YYYYMMDDHH.combine" \
        ${nidymdh}.diagtrak.hwrf.3hourly
    
    copyit "$COMOUT/$stormid.diagtrak.diag3hr.$YYYYMMDDHH.parent" \
        ${nidymdh}.diagtrak.hwrf.3hourly.parent
    
    copyit "$COMOUT/$stormid.diagtrak.diag3hr.$YYYYMMDDHH.dom12" \
        ${nidymdh}.diagtrak.hwrf.3hourly.dom12
    
    copyit "${CSTREAM}/${MODEL}_FCST/COMBINE/trak.hwrf.radii.${YYYYMMDDHH}" \
        ${nidymdh}.trak.hwrf.radii
    
    copyit "${CSTREAM}/$model12/COMBINE/trak.hwrf.atcfunix.${YYYYMMDDHH}" \
        ${nidymdh}.trak.hwrf.atcfunix.combine
    copyit "${CSTREAM}/$model12/PARENT/trak.hwrf.atcfunix.${YYYYMMDDHH}" \
        ${nidymdh}.trak.hwrf.atcfunix.parent
fi

# Atmosphere input data

copyit "${CSTREAM}/${MODEL}_FCST/namelist.input"
copyit "${CSTREAM}/${MODEL}_FCST/MDstatus"
copyit "${CSTREAM}/ATMOS/fort.65"
copyit "${CSTREAM}/MESSAGES/storm.center"
copyit "${CSTREAM}/MESSAGES/domain.center"
copyit "${CSTREAM}/MESSAGES/storm_vit"

# GSI data

copyit "${DATA}/3DVAR/outreg/nmm_netcdf/gsi_cvs1.${STORM}.${YYYYMMDDHH}/biascr.${YYYYMMDDHH}"  \
    ${nidymdh}.gsi_cvs1.biascr 
copyit "${DATA}/3DVAR/outreg/nmm_netcdf/gsi_cvs2.${STORM}.${YYYYMMDDHH}/biascr.${YYYYMMDDHH}"  \
    ${nidymdh}.gsi_cvs2.biascr 

# Later stage atmospheric input data

copyit "${CSTREAM}/ATMOS/wrfinput_d01"
copyit "${CSTREAM}/ATMOS/wrfinput_d01_org"
copyit "${CSTREAM}/ATMOS/wrfanl_d02_org"
copyit "${CSTREAM}/ATMOS/wrfanl_d02_${YYYY}-${MM}-${DD}_${CYC}:00:00" \
    ${nidymdh}.wrfanl_d02 
copyit "${CSTREAM}/ATMOS/wrfbdy_d01"

# POM data

copyit "${CSTREAM}/OCEAN/ocn2D_spin/track"  \
    ${nidymdh}.ocn2D_track 
copyit "${CSTREAM}/OCEAN/ocn2D_spin/lonlat.gfs"  \
    ${nidymdh}.ocn2D_lonlat.gfs 
copyit "${CSTREAM}/OCEAN/ocn2D_spin/phase4-mcs/RST.final"
copyit "${CSTREAM}/OCEAN/ocn2D_spin/sst.gfs.dat"
copyit "${CSTREAM}/OCEAN/ocn2D_spin/mask.gfs.dat"
copyit "${CSTREAM}/OCEAN/ocn2D_spin/ocean_region_info.txt"

# Swath data and other auxhist and tpcpost data

copyit "${CSTREAM}/${MODEL}_FCST/COMBINE/${STORM}${STORMID}.${YYYYMMDDHH}.wind10m.ascii"  \
    ${nidymdh}.wind10m.ascii \
    MODEL HWRF_ASCII $job ${COMOUT}/${nidymdh}.wind10m.ascii

copyit "${CSTREAM}/${MODEL}_FCST/COMBINE/${STORM}${STORMID}.${YYYYMMDDHH}.rainfall.ascii" \
    ${nidymdh}.rainfall.ascii \
    MODEL HWRF_ASCII $job ${COMOUT}/${nidymdh}.rainfall.ascii

copyit "${CSTREAM}/${MODEL}_FCST/COMBINE/${STORM}${STORMID}.${YYYYMMDDHH}.wind10hrly.ascii"  \
    ${nidymdh}.wind10hrly.ascii \
    MODEL HWRF_ASCII $job ${COMOUT}/${nidymdh}.wind10hrly.ascii

copyit "${CSTREAM}/${MODEL}_FCST/COMBINE/${STORM}${STORMID}.${YYYYMMDDHH}.swath.dat"  \
    ${nidymdh}.swath.dat 

copyit "${CSTREAM}/${MODEL}_FCST/COMBINE/${STORM}${STORMID}.${YYYYMMDDHH}.swath.ctl"  \
    ${nidymdh}.swath.ctl 

copyit "${CSTREAM}/${MODEL}_FCST/COMBINE/${STORM}${STORMID}.${YYYYMMDDHH}.afos"  \
    ${nidymdh}.afos

copyit "${CSTREAM}/${MODEL}_FCST/COMBINE/${STORM}${STORMID}.${YYYYMMDDHH}.stats.tpc"  \
    ${nidymdh}.stats.tpc
copyit "${CSTREAM}/${MODEL}_FCST/COMBINE/${STORM}${STORMID}.${YYYYMMDDHH}.stats.short"  \
    ${nidymdh}.stats.short

# Wave data

copyit "${CSTREAM}/${MODEL}_FCST/out4wave_d01"
copyit "${CSTREAM}/${MODEL}_FCST/out4wave_d02"
copyit "${CSTREAM}/${MODEL}_FCST/out4wave_d03"

# tcvitals or message file entry

copyit "${DATA}/tmpvit"

####################################################################
# Copy Ocean forecast files
####################################################################
if [ $OCEAN == POM ]; then
cd ${CSTREAM}/${MODEL}_FCST
for file in *.${YY}*
do
/bin/cp -f ${file} ${COMOUT}/${nidymdh}.$file
done
fi

####################################################################
# E-mail AFOS output file to the SDM
####################################################################

if [[ "$PARAFLAG" != YES ]] ; then
    if [ -s ${COMOUT}/${nidymdh}.afos ]
        then
        if [ "$SENDSDM" = 'YES' ]; then
            /bin/sh ${USHhwrf}/hur_output_email.sh $RUN $nidymdh.afos
        fi
    else
        echo "FILE ${file_name} NOT PRESENT"
    fi
fi

####################################################################
# Generate cycle status file, which describes model configuration
####################################################################

if [[ "$PARAFLAG" == YES ]] ; then
"$USHhwrf/hwrf_check_cycle.sh" "$COMOUT" > ${COMOUT}/${nidymdh}.cycle.status
fi

####################################################################
# Archive output
####################################################################

if [[ "$PARAFLAG" == YES ]] ; then
    "$USHhwrf/hwrf_output_archive.sh" "$nidymdh"
fi

####################################################################
