#! /bin/ksh
#-----------------------
# hwrf_nmm_real.sh
#-----------------------
# This script creates the wrfinput and wrfbdy boundary  
# conditon files over the nested domain. 
# USAGE:   sh hwrf_nmm_real.sh DOMAIN  YEAR MONTH DATE CYCLE 
# EXAMPLE: sh hwrf_nmm_real.sh KATRINA 2005 08    26   12   
# Mar 2007 Revised for operations by Vijay Tallapragada
# Apr 2007 Revised for operations by Vijay Tallapragada
# Jun 2009 Revised for HWRF 2009 implementation, Vijay Tallapragada
#------------------------------------------------------------
set -aeux

date
#------------------------------------------------------------
# get the input variables
if [[ $# -eq 5 || $# -eq 6 ]]
then 
   export DOMAIN=${1}
   export YEAR=${2}
   export MONTH=${3}
   export DATE=${4}
   export CYCLE=${5}
   export FORECAST_LENGTH=${6:-126}

   echo 'DOMAIN = ' ${DOMAIN}
   echo 'YEAR   = ' ${YEAR}
   echo 'MONTH  = ' ${MONTH}
   echo 'DATE   = ' ${DATE}
   echo 'CYCLE  = ' ${CYCLE}      
   echo 'FORECAST_LENGTH  = ' $FORECAST_LENGTH
else
   echo 'USAGE:   sh hwrf_nmm_real.sh DOMAIN YEAR MONTH DATE CYCLE [ FORECAST_LENGTH ]' 
   echo 'EXAMPLE: sh hwrf_nmm_real.sh KATRINA 2005 08 26 12      (126-hour forecast)'  
   echo 'EXAMPLE: sh hwrf_nmm_real.sh KATRINA 2005 08 26 12 48   (48-hour forecast)'  
   echo 'NEED FIVE OR SIX ARGUMENTS'
   echo 'SCRIPT WILL EXIT'
   sh ${utilscript}/setup.sh
   err=911
   err_exit "NEED FIVE ARGUMENTS"
fi
#-----------------------------------------------------------

function file_wait {
    if ( ! $USHhwrf/hwrf_file_complete.pl -w 600 -S 20 -o 10 -s 1 -v $1 ) ; then
        sh ${utilscript}/setup.sh
        err=911
        err_exit "${2:-PREP_HYBRID} FAILURE DETECTED IN HWRF_NMM_REAL: FILE $1 DOES NOT EXIST.  ABORTING."
    fi
}

############# SET PATH FOR REAL ##############################

ndate=${NDATE_PATH:-${utilexec}/ndate}
export DATE_STRING=$YEAR$MONTH$DATE$CYCLE
export YMDH="$DATE_STRING"
export WPS_DATAROOT=${CSTREAM}/NMMWPS
if [[ "$FORECAST_LENGTH" == 126 ]] ; then
    work_dir=ATMOS_BDY
else
    work_dir=ATMOS
fi

mkdir -p ${CSTREAM}/${work_dir} 
mkdir -p ${CSTREAM}/${work_dir}/nest1/static

####### READ ISTART AND JSTART FROM neststart.out ##############

cd ${CSTREAM}/${work_dir}/           
cp ${CSTREAM}/MESSAGES/storm.center   ${CSTREAM}/${work_dir}/. 
cp ${CSTREAM}/MESSAGES/domain.center  ${CSTREAM}/${work_dir}/. 

####### LINK PREP_HYBRID FILES #################################
# Link the prep_hybrid files here.  We also wait for them to exist and
# be non-zero size.
if [[ "$RUN_PREP_HYBRID" == YES ]] ; then
    infile0=${CSTREAM}/PREP/DATA/${DOMAIN}"."${DATE_STRING}/hwrfinit_0
    ln -sf "$infile0" fort.900
    file_wait "$infile0"
    for x in $( seq 1 $(( FORECAST_LENGTH / 6 )) ) ; do
        infile="${CSTREAM}/PREP/DATA/${DOMAIN}.${DATE_STRING}/hwrfbcs00_$x"
        outfile=$( printf fort.9%02d $x )
        ln -sf "$infile" "$outfile"
        file_wait "$infile"
    done
    useprep_nl=T
else
    # Not using prep_hybrid
    useprep_nl=F
fi

# run the executable hwrf_swcorner_dynamic
# run utilities script to set up for fortran executables
sh ${utilscript}/setup.sh
export XLFRTEOPTS="unit_vars=yes"  
export pgm=hwrf_swcorner_dynamic
. prep_step 
rm -f fort.12
$USHhwrf/hwrf_namelist.sh -h "$FORECAST_LENGTH" -o ${CSTREAM}/${work_dir}/fort.12
startmsg
${EXEChwrf}/hwrf_swcorner_dynamic 
export err=$?; err_chk   

if [ ${err} -eq 0 ]
then
   echo 'successful completion of executable hwrf_swcorner_dynamic'
else
   echo "hwrf_swcorner_dynamic return code err = ${err}"
   echo 'SCRIPT WILL EXIT'
   err_exit "hwrf_swcorner_dynamic return code err = ${err}"
fi 
if [ ${RESTART} == YES ]; then
RSTMIN=360
else
RSTMIN=0
fi

. ${CSTREAM}/${work_dir}/set_nest

############### CREATE THE NAMELIST ####################################################

$USHhwrf/hwrf_namelist.sh -i2 "$istart" -j2 "$jstart" -h "$FORECAST_LENGTH" -o ${CSTREAM}/${work_dir}/namelist.input

############### COPY FILES TO THE DESTINATION DIRECTORY ###########################
#
# copy fixed files to working directory 
cp $FIXhwrf/hwrf_ETAMPNEW_DATA  ${CSTREAM}/${work_dir}/ETAMPNEW_DATA
cp $FIXhwrf/hwrf_ETAMPNEW_DATA_DBL ${CSTREAM}/${work_dir}/ETAMPNEW_DATA_DBL
cp $FIXhwrf/hwrf_GENPARM.TBL    ${CSTREAM}/${work_dir}/GENPARM.TBL
cp $FIXhwrf/hwrf_LANDUSE.TBL    ${CSTREAM}/${work_dir}/LANDUSE.TBL
cp $FIXhwrf/hwrf_RRTM_DATA      ${CSTREAM}/${work_dir}/RRTM_DATA
cp $FIXhwrf/hwrf_RRTM_DATA_DBL  ${CSTREAM}/${work_dir}/RRTM_DATA_DBL
cp $FIXhwrf/hwrf_SOILPARM.TBL   ${CSTREAM}/${work_dir}/SOILPARM.TBL
cp $FIXhwrf/hwrf_VEGPARM.TBL    ${CSTREAM}/${work_dir}/VEGPARM.TBL
cp $FIXhwrf/hwrf_co2_trans      ${CSTREAM}/${work_dir}/co2_trans
cp $FIXhwrf/hwrf_eta_micro_lookup.dat ${CSTREAM}/${work_dir}/eta_micro_lookup.dat 
cp $FIXhwrf/hwrf_tr49t67        ${CSTREAM}/${work_dir}/tr49t67
cp $FIXhwrf/hwrf_tr49t85        ${CSTREAM}/${work_dir}/tr49t85
cp $FIXhwrf/hwrf_tr67t85        ${CSTREAM}/${work_dir}/tr67t85
cp $FIXhwrf/hwrf_track          ${CSTREAM}/${work_dir}/track
#

if [ $IO_FORM = 1 ]; then
    ext=int
    typename=INTIO
else
    ext=nc
    typename=NETCDF
fi

if [[ "$RUN_PREP_HYBRID" == YES ]] ; then
    met_hours=0
else
    # Not running prep_hybrid so we need metgrid files for all hours:
    met_hours=$( seq 0 6 $FORECAST_LENGTH )
fi

for fhour in $met_hours ; do
    ftime=$( $ndate $fhour $yyyymmddhh )
    fyyyy=$( echo $ftime | cut -c1-4 )
    fmm=$( echo $ftime | cut -c5-6 )
    fdd=$( echo $ftime | cut -c7-8 )
    fhh=$( echo $ftime | cut -c9-10 )
    metfile=$WPS_DATAROOT/met_nmm.d01.$fyyyy-$fmm-${fdd}_${fhh}:00:00.$ext
    file_wait $metfile "$typename PARENT DOMAIN METGRID"
    ln -s -f "$metfile" ${CSTREAM}/${work_dir}/.
done

ln -s -f $WPS_DATAROOT/geo_nmm.d01.$ext ${CSTREAM}/${work_dir}/.
ln -s -f $WPS_DATAROOT/geo_nmm_nest.l01.$ext ${CSTREAM}/${work_dir}/.
if [[ "$ATMOS_DOMAINS" -ge 3 ]] ; then
    ln -s -f $WPS_DATAROOT/geo_nmm_nest.l02.$ext ${CSTREAM}/${work_dir}/.
fi

file_wait $WPS_DATAROOT/geo_nmm.d01.$ext "$typename PARENT DOMAIN GEOGRID"
file_wait $WPS_DATAROOT/geo_nmm_nest.l01.$ext "$typename INNER DOMAIN GEOGRID"
if [[ "$ATMOS_DOMAINS" -ge 3 ]] ; then
    # Must also wait for third nest geogrid file
    file_wait $WPS_DATAROOT/geo_nmm_nest.l02.$ext "$typename INNERMOST DOMAIN GEOGRID"
fi

############# EXECUTE REAL #######################################

rm -f -r ${CSTREAM}/${work_dir}/coredir*
rm -f -r ${CSTREAM}/${work_dir}/rsl*

# run the executable hwrf_real_nmm
sh ${utilscript}/setup.sh

export pgm=hwrf_real_nmm
export XLFRTEOPTS="unit_vars=yes"  
. prep_step
startmsg 
$USHhwrf/hwrf_run.sh ${EXEChwrf}/hwrf_real_nmm
export err=$?; err_chk 

if ( ! grep 'SUCCESS COMPLETE' rsl.out.0000 ) ; then
    echo "DID NOT FIND STRING \"SUCCESS COMPLETE\" IN rsl.out.0000.  REAL FAILED."
    sh ${utilscript}/setup.sh
    err=911
    err_exit "DID NOT FIND STRING \"SUCCESS COMPLETE\" IN rsl.out.0000.  REAL FAILED."
fi

if [ ${err} -eq 0 ]
then
   echo 'successful completion of hwrf_real_nmm'
else
   echo "hwrf_real_nmm return code err = ${err}"
   echo 'SCRIPT WILL EXIT'
    sh ${utilscript}/setup.sh
    err=911
   err_exit "hwrf_real_nmm return code err = ${err}"
fi 
# end of script 

exit 0  # DO NOT REMOVE THIS LINE
