#! /bin/ksh
#################################################################
# hwrf_nmm_fcst.sh 
####################
# This script runs the HWRF model forecast without ocean coupling.
# Jan 2007 Written by Vijay Tallapragada 
# Apr 2007 Modified for operations Vijay Tallapragada
# Apr 2008 HWRF Upgrades for 2008 Vijay Tallapragada
# June 2009 Modified for HWRF 2009 implementation by Vijay Tallapragada
#################################################################
set -aeux

date

###### GET THE INPUT VARIABLES #######################
if [ $# -eq 6 ] 
then 
   export DOMAIN=${1}
   export YEAR=${2}
   export MONTH=${3}
   export DATE=${4}
   export CYCLE=${5}
   export CASE=${6}
 
   echo 'DOMAIN = ' ${DOMAIN}
   echo 'YEAR   = ' ${YEAR}
   echo 'MONTH  = ' ${MONTH}
   echo 'DATE   = ' ${DATE}
   echo 'CYCLE  = ' ${CYCLE} 
   echo 'CASE   = ' ${CASE}
else
   echo 'Usage: sh hwrf_nmm_fcst.sh DOMAIN YEAR MONTH DATE CYCLE CASE'
   echo 'NEED SIX ARGUMENTS'
   echo 'SCRIPT WILL EXIT'
   sh ${utilscript}/setup.sh
   err=911
   err_exit "NEED SIX ARGUMENTS"
fi 

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

ndate=${utilexec}/ndate

export CSTREAM=${DATA}/$DOMAIN.$YEAR$MONTH$DATE$CYCLE
export YMDH=$YEAR$MONTH$DATE$CYCLE
echo 'CSTREAM = ' ${CSTREAM}

# environment setting for binding

export MP_SHARED_MEMORY=yes
export TARGET_CPU_LIST=-1
export MP_LABELIO=yes
################ RUN THE WRF MODEL ###############################
export atmos_d=$CSTREAM/ATMOS
export bdy_d=$CSTREAM/ATMOS_BDY
echo 'atmos_d = ' ${atmos_d} 
echo 'bdy_d = ' ${atmos_d} 

##### OTHER DIRECTORIES REQUIRED FOR THE FORECAST

if [[ $CASE == MOVE ]]; then
fcst_d=$CSTREAM/ATMOS       # may change that to COUPLED
else
fcst_d=$CSTREAM/ATMOS_FCST       # may change that to COUPLED_FCST
fi
echo "for CASE = ${CASE} fcst_d = ${fcst_d}" 

if [[ -d $fcst_d ]]; then
echo "$fcst_d exists"
rm -f $fcst_d/rsl*
rm -rf $fcst_d/core*  
rm -f $fcst_d/wrfout*
else
echo "creating $fcst_d"  
mkdir $fcst_d
fi

if [ ${RESTART} == YES ]; then
i_restart=T
RSTMIN=360
RESTART_STATUS=false
else
i_restart=F
RSTMIN=0
RESTART_STATUS=false
fi

if [[ $CASE = "MOVE" ]]
then
    cd $fcst_d
    pwd
    echo "for CASE = ${CASE} fcst_d = ${fcst_d}" 
    $USHhwrf/hwrf_namelist.sh -h 12 -o ${fcst_d}/namelist_move.input 
    ln -s -f namelist_move.input                   ${fcst_d}/fort.12
    
    # run executable hwrf_swcorner_dynamic 
    sh ${utilscript}/setup.sh 
    XLFRTEOPTS="unit_vars=yes" 
    export pgm=hwrf_swcorner_dynamic 
    . prep_step
    startmsg
    ${EXEChwrf}/hwrf_swcorner_dynamic 
    export err=$?; err_chk
    echo "executable hwrf_swcorner_dynamic for CASE = ${CASE} return err = ${err}"
    if [ $err -ne 0 ]; then
        err_exit "executable hwrf_swcorner_dynamic for CASE = ${CASE} return err = ${err}"
    fi
    
    . ./set_nest
    $USHhwrf/hwrf_namelist.sh -h 12 -i2 $istart -j2 $jstart -o $fcst_d/namelist.input
    
    cp $fcst_d/namelist.input $fcst_d/namelist_move12.input
    
else

############### CREATE THE NAMELIST FOR 120hr RUN ######################################
cd $fcst_d
pwd
echo "running CASE = ${CASE} in fcst_d = ${fcst_d}"  

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

#################################################################################
# Copy files related to GWD 
#################################################################################

if [ $GWD == YES ]; then
    echo "HWRF configuration includes Gravity Wave Drag Parameterization"
else
    echo "GWD not requested."
fi
#################################################################################

ncompute=$(( NPROCS_a - IOSRV_PERGRP*IOSRV_GROUPS ))
case "$ncompute" in
    240) export NPROC_X=12 NPROC_Y=20 ;;
    *) /bin/true ;;
esac

$USHhwrf/hwrf_namelist.sh -h 126 -o ${fcst_d}/namelist.input 
ln -s -f namelist.input                  ${fcst_d}/fort.12
cp $atmos_d/domain.center                 ${fcst_d}/.
cp $atmos_d/storm.center                  ${fcst_d}/.

# run executable hwrf_swcorner_dynamic 
sh ${utilscript}/setup.sh 
export pgm=hwrf_swcorner_dynamic 
XLFRTEOPTS="unit_vars=yes" 
. prep_step
startmsg
${EXEChwrf}/hwrf_swcorner_dynamic 
export err=$?; err_chk
echo "executable hwrf_swcorner_dynamic for CASE = ${CASE} return err = ${err}"
if [ $err -ne 0 ]; then
err_exit "executable hwrf_swcorner_dynamic for CASE = ${CASE} return err = ${err}"
fi

. ./set_nest

$USHhwrf/hwrf_namelist.sh -i2 "$istart" -j2 "$jstart" -h 126 -o $fcst_d/namelist.input

cp $fcst_d/namelist.input $fcst_d/namelist_move120.input

#######################################################################################
/bin/cp $atmos_d/wrfinput*                                 $fcst_d/.
/bin/cp $bdy_d/wrfbdy*                                     $fcst_d/.
/bin/cp $atmos_d/wrfanl*                                   $fcst_d/.
/bin/cp $atmos_d/fort.65                                   $fcst_d/.
/bin/cp $atmos_d/geo*                                      $fcst_d/.

#######################################################################################
fi

#----------------- BEGIN modify task geometry -----------------#
if [[ -x "$USHhwrf/hwrf_task_geometry.sh" ]] ; then
    ocean_procs=0
    "$USHhwrf/hwrf_task_geometry.sh"
fi
#----------------- END modify task geometry -------------------#

cd $fcst_d
sh ${utilscript}/setup.sh
set +e
export pgm=hwrf_wrf
cp  ${EXEChwrf}/hwrf_wrf      $fcst_d/. 

set +e
export MP_PROCS=$NPROCS_a

$USHhwrf/hwrf_run.sh ${EXEChwrf}/hwrf_wrf
err="$?"
if ( ! grep 'SUCCESS COMPLETE' rsl.out.0000 ) ; then
    echo "DID NOT FIND STRING \"SUCCESS COMPLETE\" IN rsl.out.0000.  WRF FAILED (exit status $err)."
    err_exit "DID NOT FIND STRING \"SUCCESS COMPLETE\" IN rsl.out.0000.  WRF FAILED (exit status $err)."
fi


echo "executable hwrf_wrf for poe, CASE = $CASE, return code err = $err"
if [ $err -ne 0 ]; then
err_exit "executable hwrf_wrf failed for CASE = ${CASE} return err = ${err}"
fi
# end of script
