#!/bin/sh
set -xa
###############################################################################
#                                                                             #
# This script is the preprocessor for the global ens wave model.              #
# It sets some shell script variables for export to child scripts and         #
# copies the following files to the work directory,                           #
#                                                                             #
#  multiwaveice.sh     : preprocess ice fields.                               #
#  multiwavesst.sh     : preprocess sst fields.                               #
#  multiwavesig.sh     : find and copy sigma files.                           #
#                                                                             #
#  Also used is the utililty script                                           #
#                                                                             #
#  multiwavestart.sh   : get initial time of most recent restart file(s)      #
#
# Remarks :                                                                   #
# - The sst script generates files that are needed in the wind script.        #
# - For non-fatal errors output is witten to the ${ENS}${ELEM}.log (wave.log) #
#   file.                                                                     #
#                                                                             #
#                                                            Feb, 2003        #
#                                                                             #
###############################################################################
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
#  Preparations
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
#
#  Basic modes of operation
#
#  copy all needed files for prep step
  echo ' '
  echo '                      ********************************'
  echo '                      *** NWW3ens PREPROCESSOR SCRIPT ***'
  echo '                      ********************************'
  echo ' '
  echo "Starting at : `date`"
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
#

# definition of the multi-scale wave model inputs

  export iceID=icean_5m
  export wndID=gfs_60m ; export IDIML=360 ; export JDIML=181
                         export JCLIP=0

  export MP_PGMMODEL=mpmd
  lsth=240     
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
# Date and time stuff:
#   The starting time is given as in $PDY$cycle. 
#   The ending time of the run is always the $lsth hour forecast. 
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
#
  ymd=$PDY
  ymdh=$PDY$cyc
  hh=$cyc
#
  echo "  ymdh=$ymdh"
  echo "  ymd=$ymd"
  echo "  hh=$hh"
  echo "  cycle=$cycle"
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
#
  ymdh_beg=`echo $ymdh`
  time_beg="`echo $ymdh_beg | cut -c1-8` `echo $ymdh_beg | cut -c9-10`0000"
#
  ymdh_end=`$utilexec/ndate $lsth $ymdh`
  time_end="`echo $ymdh_end | cut -c1-8` `echo $ymdh_end | cut -c9-10`0000"
#
  echo ' '
  echo 'Times in wave model format :'
  echo '----------------------------'
  echo "   date / cycle  : $PDY $cyc"
  echo "   starting time : $time_beg"
  echo "   ending time   : $time_end"
  echo ' '
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
#
  echo 'Preparing input files :'
  echo '-----------------------'
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
# Get files that are used by most child scripts
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
# Model definition files 
#

  for grdID in $iceID $wndID
  do

    if [ -f $FIXwave/multiwave_$grdID.moddef ]
    then
       cp $FIXwave/multiwave_$grdID.moddef mod_def.$grdID
       echo "mod_def.$grdID copied  ($FIXwave/multiwave_$grdID.moddef). "
     else
     msg="ABNORMAL EXIT: ERR in coping mod_def.$grdID file"
     postmsg "$jlogfile" "$msg"
     echo ' '
     echo '*********************************** '
     echo '*** ERR : No mod_def.ww3 copied *** '
     echo '*********************************** '
     echo ' '
     echo "$FIXwave/wave_$modID.moddef missing." >> $wavelog
     err=1;export err;err_chk
    fi

  done
#
# Wind preprocessor template file
#
  
  for grdID in $iceID $wndID
  do
  
    if [ -f $FIXwave/multiwaveprep.$grdID.tmpl ]
    then
       cp $FIXwave/multiwaveprep.$grdID.tmpl .
    fi  

    if [ -f multiwaveprep.$grdID.tmpl ]
    then
      echo "   multiwaveprep.$grdID.tmpl copied ($FIXwave)."
    else
      msg="ABNORMAL EXIT: NO FILE $file"
    fi

  done
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
# generate sst file.
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
#
  $USHwave/multiwavesstens.sh

  if [ ! -f sst.ww3 ] 
  then
    msg="ABNORMAL EXIT: ERR in generating sst.ww3 file"
    postmsg "$jlogfile" "$msg"
    echo ' '
    echo '***************************************** '
    echo "*** ERR : No sst.ww3 file *** "
    echo '***************************************** '
    echo ' '
    echo "No sst.ww3 " >> $wavelog
    err=4;export err;err_chk
  fi
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
# copy bias corrected wind files.
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
#
  fymdh0=${ymdh_beg}
  fhour=0
  fymdh=${fymdh0}
  while [ "$fhour" -le "$lsth" ]
  do 
    if [ "$fhour" -eq "0" ] 
    then
      sfHH="pgrba_bcf00"
    elif [ "$fhour" -lt "10" ] 
    then
      sfHH="pgrba_bcf0$fhour"
    else
      sfHH="pgrba_bcf$fhour"
    fi
#
    if [ $modIE != "mens" ]; then
     if [ -f $COMINens/$modIE.$cycle.$sfHH ] 
     then
       cp  $COMINens/$modIE.$cycle.$sfHH  bias_wind.grib
       echo "   bias_wind.grib copied ($COMINens/$modIE.$cycle.$sfHH)."
     else
       msg="ABNORMAL EXIT: ERR in coping $modIE file"
       postmsg "$jlogfile" "$msg"
       echo ' '
       echo '***************************************** '
       echo "*** ERR : No $COMINens/$modIE.$cycle.$sfHH file *** "
       echo '***************************************** '
       echo ' '
       echo "No $COMINens/$modIE.$cycle.$sfHH " >> $wavelog
       err=6;export err;err_chk
     fi
    fi

    if [ $modIE = "mens" ]; then
     if [ -f $COMINens/gec00.$cycle.$sfHH ]
     then
       cp  $COMINens/gec00.$cycle.$sfHH  bias_wind.grib
       echo "   bias_wind.grib copied ($COMINens/gec00.$cycle.$sfHH)."
     else
       msg="ABNORMAL EXIT: ERR in coping $modIE file"
       postmsg "$jlogfile" "$msg"
       echo ' '
       echo '***************************************** '
       echo "*** ERR : No $COMINens/gec00.$cycle.$sfHH file *** "
       echo '***************************************** '
       echo ' '
       echo "No $COMINens/gec00.$cycle.$sfHH " >> $wavelog
       err=6;export err;err_chk
     fi

    fi

    $USHwave/read_bias_corr_wind.sh bias_wind.grib
    mv dumtmp T1.$fymdh
    mv dumugrd UU.$fymdh
    mv dumvgrd VV.$fymdh

    fhour=`expr $fhour + 6`

    fymdh=`$utilexec/ndate $fhour $fymdh0`
  done
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
# Convert sigma files to final wind input file
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
#
  echo ' '
  echo '   Extract wind fields from spectral files ...'
#
# Get into single file (${modID}gfs)
#
     rm -f gfsinput

     echo "$IDIML, $JDIML,$JCLIP"                              > gfsinput
     echo "$time_beg $time_end"                               >> gfsinput

     cat gfsinput | $EXECwave/multiwavegfsens

     err=$?
 
     if [ "$err" != '0' ] 
     then
       msg="ABNORMAL EXIT: ERROR IN ${modID}gfs"
       postmsg "$jlogfile" "$msg"
       echo ' '
       echo '****************************************** '
       echo "*** FATAL ERROR : ERROR IN ${modID}gfs *** "
       echo '****************************************** '
       echo ' '
       echo "$modIE prep $ymd $cycle : error in ${modID}gfs." >> $wavelog
       err=7;export err;err_chk
     fi 
#
     if [ ! -f gfs.wind ] 
     then
       msg="ABNORMAL EXIT: FILE gfs.wind MISSING"
       postmsg "$jlogfile" "$msg"
       echo ' '
       cat ${modID}gfs.out
       echo ' '
       echo '****************************************'
       echo '*** FATAL ERROR : gfs.wind NOT FOUND ***'
       echo '****************************************'
       echo ' '
       echo "$modIE prep $ymd $cycle : gfs.wind missing." >> $wavelog
       err=8;export err;err_chk
     fi
#
  rm -f sst.ww3
  rm -f swnd.*
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
# Run waveprep
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
#
  echo ' '
  echo '   Running wind fields through preprocessor.'
  
  sed -e "s/HDRFL/T/g" multiwaveprep.$wndID.tmpl > multiwaveprep.inp
  mv mod_def.$wndID            mod_def.ww3

  echo "Executing $EXECwave/multiwaveprep"

  $EXECwave/multiwaveprep
  err=$?
 
  if [ "$err" != '0' ] 
  then
    msg="ABNORMAL EXIT: ERROR IN waveprep"
    postmsg "$jlogfile" "$msg"
    echo ' '
    echo '*************************************** '
    echo '*** FATAL ERROR : ERROR IN waveprepens *** '
    echo '*************************************** '
    echo ' '
    echo "$modIE prep $ymd $cycle : error in waveprepens." >> $wavelog
    err=9;export err;err_chk
  fi
#
  if [ ! -f wind.ww3 ]
  then
    msg="ABNORMAL EXIT: FILE wind.ww3 MISSING"
    postmsg "$jlogfile" "$msg"
    echo ' '
    cat waveprep.out
    echo ' '
    echo '****************************************'
    echo '*** FATAL ERROR : wind.ww3 NOT FOUND ***'
    echo '****************************************'
    echo ' '
    echo "$modIE prep $ymd $cycle : wind.ww3 missing." >> $wavelog
    err=10;export err;err_chk
  fi
#
  rm -f gfs.wind
  rm -f multiwaveprep.inp 
  rm -f mod_def.ww3
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
# Output to /com
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
#
  if [ "$SENDCOM" = 'YES' ] 
  then
    echo ' '
    echo "   Saving wind.ww3 as $COMOUT/$modIE.$cycle.wind"
    echo "   Saving times file as $COMOUT/times.$cycle.$modIE"
    cp wind.ww3 $COMOUT/$modIE.$cycle.wind
    cp times.WNS $COMOUT/times.$cycle.$modIE
  fi 
#
  chmod 664 $COMOUT/$modIE.$cycle.*
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
# Alert the wind file
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
#
 if [ $SENDDBN = YES ] ; then
    $DBNROOT/bin/dbn_alert MODEL WAVE_BINARY $job $COMOUT/$modIE.$cycle.wind
 fi
# 
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
# Ending output
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
#
  echo ' '
  echo "Ending at : `date`"
  echo ' '
  echo "                     *** End of $modIE preprocessor ***"
  echo ' '
#
  msg="$job completed normally"
  postmsg "$jlogfile" "$msg"
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
# End of $modIE preprocessor script.
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --+ + + ++
#

