#!/bin/ksh
#############################################################################
# Name of script:    verf_gridtobs_getmodinput.sh
# Purpose of script: This script obtains a list of model forecast output
#                     files to be fitted 
# Arguments:
#  1. domain: the domain for a  specific model, e.g. nam,nam40,namak,nam40ak
# 
# Notes: The following variables should be exported from the parent script
# 
# vdate -- Verification Date, format yyyymmddhh
# vcyc  -- Verification Cycle, format hh
# frange -- Forecast Length
#
#############################################################################
set -x

if [ $# -lt 1 ]
then
   echo "Invalid argument"
   echo "usage: verf_gridtobs_getmodinput.sh $region"
   err_exit
fi

wgrib=${wgrib:-/nwprod/util/exec/wgrib}
copygb=${copygb:-/nwprod/util/exec/copygb}

domain=$1

if [ $domain = "pm" ]
then
  DIRIN=/com/aqm/para/aqm
fi

rm -rf input_$domain hour_$domain GRD* AWIP3D* nonzero_$domain

#####################################
# Determine the first available file
#####################################
grep "$vcyc" ${domain}.cycles
err_grep=$?

## If the vcyc is not one of the model run cycles, go back to the most recent cycle to 
## get the first input file
if [ $err_grep -ne 0 ]
then
   ifhr=192
   for pcyc in `cat ${domain}.cycles`
   do
     pfhr=`expr $vcyc - $pcyc`
     if [ $pfhr -lt 0 ]; then pfhr=`expr $pfhr + 24`; fi
     if [ $pfhr -le $ifhr ]; then ifhr=$pfhr; fi
   done
else
   ifhr=00
   if [ $model = "srefx" -o $model = "srefmeanx" ]
   then
     ifhr=06
   fi
fi

## For some model, the forecast starting point is not zero, such as for the DGEX model, sfhr=84
fhr=`expr $ifhr + $sfhr`
if [ $fhr -lt 10 ]; then fhr=0$fhr; fi
export fhr

itr=1
ifire=0
while [ $fhr -le $frange ]
do
  if [ $model = ndas ]
  then
    adate=`/nwprod/util/exec/ndate +$ifhr $vdate`
  else
    adate=`/nwprod/util/exec/ndate -$fhr $vdate`
  fi
  aday=`echo $adate |cut -c1-8`
  acyc=`echo $adate |cut -c9-10`

  grep "$acyc" ${domain}.cycles
  err_grep=$?
  
  if [ $err_grep -eq 0 ]
  then
    echo $model $domain
    if [ $model = "nam" -o $model = "rap" ]
    then
    if [ $fhr -le 36 ] 
    then
      if [ -e /com/nam/prod/nam.${aday}/nam.t${acyc}z.firewxnest.hiresf${fhr}.tm00 ] 
      then
       cp /com/nam/prod/nam.${aday}/nam.t${acyc}z.firewxnest.hiresf${fhr}.tm00 firewx${fhr}.grb
       if [ -e firewx${fhr}.grb ] 
       then
         let "ifire=ifire+1"
         $utilexec/grbindex firewx${fhr}.grb firewx${fhr}i.grb
      fi
      fi
      fi
      fi
    case $model in
      fwis) cp ${DIRIN}.${aday}/${runnam}.t${acyc}z.${filnam1}${fhr}${tmkk} GRD${fhr}
      ;;
      nam) cp ${DIRIN}.${aday}/${runnam}.t${acyc}z.${filnam1}${fhr}${tmkk} GRD${fhr}.1
           cp ${DIRIN}.${aday}/${runnam}.t${acyc}z.${filnam2}${fhr}${tmkk}_icwf GRD${fhr}.2
           if [ $domain = nam ]
           then
             gribin=${DIRIN}.${aday}/${runnam}.t${acyc}z.${filnam3}${fhr}${tmkk}
             $wgrib $gribin | grep "kpds5=7:kpds6=2:kpds7=0" | $wgrib -i $gribin -grib -o grbcld${fhr}.grb
             $wgrib $gribin | grep "kpds5=20:kpds6=1:kpds7=0" | $wgrib -i $gribin -grib -append -o grbcld${fhr}.grb
             $copygb -g218 -x grbcld${fhr}.grb GRD${fhr}.3
             cat GRD${fhr}.1 GRD${fhr}.2 GRD${fhr}.3 > GRD${fhr}
           else
             cat GRD${fhr}.1 GRD${fhr}.2 > GRD${fhr}
           fi
           ;;
     namx) cp ${DIRIN}.${aday}/${runnam}.t${acyc}z.${filnam1}${fhr}${tmkk} GRD${fhr}.1
##           cp ${DIRIN}.${aday}/${runnam}.t${acyc}z.${filnam2}${fhr}${tmkk}_icwf GRD${fhr}.2
           if [ $domain = nam ]
           then
             gribin=${DIRIN}.${aday}/${runnam}.t${acyc}z.${filnam3}${fhr}${tmkk}
             $wgrib $gribin | grep "kpds5=7:kpds6=2:kpds7=0" | $wgrib -i $gribin -grib -o grbcld${fhr}.grb
             $wgrib $gribin | grep "kpds5=20:kpds6=1:kpds7=0" | $wgrib -i $gribin -grib -append -o grbcld${fhr}.grb
             $copygb -g218 -x grbcld${fhr}.grb GRD${fhr}.2
             cat GRD${fhr}.1 GRD${fhr}.2 > GRD${fhr}
           else
             cat GRD${fhr}.1 > GRD${fhr}
           fi
           ;;
      satimg) cp ${DIRIN}.${aday}/${runnam}.t${acyc}z.goes221${fhr}${tmkk} GRD${fhr};;
      conusnest)cp ${DIRIN}.${aday}/${runnam}.t${acyc}z.conusnest.${filnam1}${fhr}${tmkk} GRD${fhr}
           ;;
      aknest)cp ${DIRIN}.${aday}/${runnam}.t${acyc}z.alaskanest.${filnam1}${fhr}${tmkk} GRD${fhr}
           ;;
      hawaiinest)cp ${DIRIN}.${aday}/${runnam}.t${acyc}z.hawaiinest.${filnam1}${fhr}${tmkk} GRD${fhr}
                   gr="255 0 322 202 18000 198000 128 23025 206025 25 25 64"
                   $copygb -g"$gr" -i0 -x GRD${fhr} GRD${fhr}.1
                   cp GRD${fhr}.1 GRD${fhr}
           ;;
      priconest)cp ${DIRIN}.${aday}/${runnam}.t${acyc}z.priconest.${filnam1}${fhr}${tmkk} GRD${fhr}
                   gr="255 0 171 121 16750 291750 128 19750 296000 25 25 64"
                   $copygb -g"$gr" -i0 -x GRD${fhr} GRD${fhr}.1
                   cp GRD${fhr}.1 GRD${fhr}
           ;;
      ndas)fhour=`expr 12 - $ifhr`
           if [ $fhour -lt 10 ]; then fhour=0$fhour; fi
           aday=`/nwprod/util/exec/ndate +$ifhr $vdate |cut -c1-8`
           acyc=`/nwprod/util/exec/ndate +$ifhr $vdate |cut -c9-10`
           aday_p=`/nwprod/util/exec/ndate +$fhour $vdate |cut -c1-8`
           acyc_p=`/nwprod/util/exec/ndate +$fhour $vdate |cut -c9-10`

           if [ $itr -eq 1 ]
           then
             # Set fhr to 0 for the first iteration
             fhr=00
             cp $DIRIN.${aday_p}/${runnam}.t${acyc_p}z.${filnam1}${fhr}.tm${fhour} GRD${fhr}
           else
             if [ $ifhr -eq 00 ]
             then
               cp $DIRIN.${aday}/${runnam}.t${acyc}z.${filnam1}${fhr}.tm03 GRD${fhr}
             else
               cp $DIRIN.${aday_p}/${runnam}.t${acyc_p}z.${filnam1}${fhr}.tm12 GRD${fhr}
             fi
           fi
           ;;
      ruc) if [ $fhr -eq 00 ]
           then
             cp ${DIRIN}.${aday}/${runnam}.t${acyc}z.${filnam1}anl GRD${fhr}
             fhr_next=0
           else
##             fhr_next=0
             cp ${DIRIN}.${aday}/${runnam}.t${acyc}z.${filnam1}f${fhr} GRD${fhr}
##             if [ $fhr -eq 1 ]; then fhr_next=3; fi
             fhr_next=0
           fi
           ;;
      rap) cp ${DIRIN}.${aday}/${runnam}.t${acyc}z.${filnam1}f${fhr} GRD${fhr} 
           ;;
      rtma)cp ${DIRIN}.${aday}/${runnam}.t${acyc}z.${filnam1} GRD${fhr}
           ;;
      smartinit) cp ${DIRIN}.${aday}/${runnam}.t${acyc}z.${filnam1}${fhr}${tmkk} GRD${fhr} 
                   if [ $domain = "smarthi" ]
                   then
                     gr="255 0 322 202 18000 198000 128 23025 206025 25 25 64"
                     $copygb -g"$gr" -i0 -x GRD${fhr} GRD${fhr}.1 
                     cp GRD${fhr}.1 GRD${fhr}
                 elif [ $domain = "smartpr" ]
                 then
                   gr="181"
                   $copygb -g"$gr" -i0 -x GRD${fhr} GRD${fhr}.1
                   cp GRD${fhr}.1 GRD${fhr}
                 fi 
            ;;       
      href) cp ${DIRIN}.${aday}/${acyc}/ensprod/${runnam}.t${acyc}z.${filnam1}.f${fhr} GRD${fhr}
            ;;
      srefp) if [ $domain = "srmean" -o $domain = "srmeanak" ]
            then
              cp ${DIRIN}.${aday}/${acyc}/ensprod/${runnam}.t${acyc}z.${filnam1}.f${fhr} GRD${fhr}
             else
              cp ${DIRIN}.${aday}/${acyc}/pgrb/${runnam}.t${acyc}z.${filnam1}.f${fhr} GRD${fhr}
            fi
           ;;
      srefxp) if [ $domain = "srmeanx" ]

            then
              cp ${DIRIN}.${aday}/${acyc}/ensprod_biasc/mean.sref.f${fhr} GRD${fhr}
             else
              cp ${DIRIN}.${aday}/${acyc}/pgrb_biasc/${runnam}.t${acyc}z.${filnam1}.f${fhr}
GRD${fhr}
            fi
           ;;
      sref) if [ $domain = "srmean" -o $domain = "srmeanak" ]
            then
              cp ${DIRIN}.${aday}/${acyc}/ensprod/${runnam}.t${acyc}z.${filnam1}.f${fhr} GRD${fhr}
             else
              cp ${DIRIN}.${aday}/${acyc}/pgrb/${runnam}.t${acyc}z.${filnam1}.f${fhr} GRD${fhr}
             fi
            ;;
      srefx) if [ $domain = "srmeanx" ]
            then
              cp ${DIRIN}.${aday}/${acyc}/ensprod_biasc/${filnam1}.f${fhr} GRD${fhr}
            else
              cp ${DIRIN}.${aday}/${acyc}/pgrb_biasc/${runnam}.t${acyc}z.${filnam1}.f${fhr} GRD${fhr}
            fi
           ;;
      ngac) cp ${DIRIN}.${aday}/${runnam}.t${acyc}z.${filnam1}f${fhr} GRD${fhr}
           ;;
        *) cp ${DIRIN}.${aday}/${runnam}.t${acyc}z.${filnam1}${fhr}${tmkk} GRD${fhr}
           ;;
    esac

    if [ "$DOCYGB" = "YES" ]
    then
      $utilexec/grbindex GRD${fhr} GRD${fhr}i
      $utilexec/grbindex GRD${fhr} GRD${fhr}i
      $utilexec/copygb -g$cgrid GRD${fhr} GRD${fhr}i AWIP3D${fhr}.tm00
    else
      cp GRD${fhr} AWIP3D${fhr}.tm00
    fi

    $utilexec/grbindex AWIP3D${fhr}.tm00 AWIP3D${fhr}i.tm00
    
###  For fire weather  ###
 
    if [ -e firewx${fhr}.grb ]
    then

    if [ $fhr -le 36 ]
    then
    echo "firewx${fhr}.grb" > firewx
    echo "firewx${fhr}i.grb" >> firewx
    echo "maskout.grb" >> firewx

    export XLFUNIT_30=firewx${fhr}.grb
    export XLFUNIT_31=firewx${fhr}i.grb
    export XLFUNIT_32=maskout.grb

    startmsg
    $EXECverf_gridtobs/verf_gridtobs_writemask < firewx >>writemask${fhr}.out
    export err=$?; err_chk

    $utilexec/grbindex maskout.grb maskouti.grb
    cp maskout.grb firemask${ifire}.grb
    cp maskouti.grb firemask${ifire}i.grb

    echo $fhr >>hour_${domain}_fwis

    fi
    fi

    fhri=$fhr
    if [ $fhr -lt 100 ]; then fhri=0$fhr; fi

    # generate order list:
    if [ -s AWIP3D${fhr}.tm00 ]
    then
     if [ $model = "ngac" ]
      then
       echo "AWIP3D${fhr}.tm00" >>nonzero_${domain}
       echo "$fhri $pll3 AWIP3D${fhr}.tm00" >>input_${domain}
       echo "$fhri $pll3 AWIP3D${fhr}i.tm00" >>input_${domain}
       echo $fhr >>hour_${domain}
      else
       echo "AWIP3D${fhr}.tm00" >>nonzero_${domain}
       echo "$pll3 AWIP3D${fhr}.tm00" >>input_${domain}
       echo "$pll3 AWIP3D${fhr}i.tm00" >>input_${domain}
       echo $fhr >>hour_${domain}
     fi
    fi
  fi

  if [ "$fhr_next" -gt 0 ]
  then 
     fhr=$fhr_next
  else
     let "fhr=fhr+$inc"
  fi
  let "itr=itr+1"
  if [ $fhr -lt 10 ]; then fhr=0$fhr; fi

done
