#!/bin/ksh
#######################################################
# Script name: cfs_time.sh
# Purpose: To create daily time-series of selected oceanic
#          and atmospheric variables from the operational
#          CFS model run. This script also computes monthly
#          means for some of these variables and appends it 
#          to the CFS monthly mean products.
#######################################################
                                                                                      
set -x

if [ $# -ne 5 ] ; then
         echo "Usage: $0 sdate edate inc indir member"
 exit 8
fi
#
#    Authors: S. Moorthi and S. Saha EMC/NCEP
#
export sdate=$1
export edate=$2
export inc=$3
export indir=$4
export member=$5

if [ $member -lt 10 ]; then member=0$member; fi

wkdir=$DATA/time_mean
if [[ ! -d $wkdir ]] ; then
 mkdir -p $wkdir
fi
cd $wkdir
                                                                                      
sh /nwprod/util/ush/setup.sh
#
export yyyymmdd=`echo $sdate | cut -c1-8`
export datadir=${PARMcfs:-/nwprod/parm}
#
export cfs_wind_mon=${cfs_wind_mon:-/nwprod/exec/cfs_wind_mon}
export cfs_wind_time=${cfs_wind_time:-/nwprod/exec/cfs_wind_time}
export cfs_ocean_mon=${cfs_ocean_mon:-/nwprod/exec/cfs_ocean_mon}
export cfs_ocean_time=${cfs_ocean_time:-/nwprod/exec/cfs_ocean_time}
export cfs_regrib_mult=${cfs_regrib_mult:-/nwprod/exec/cfs_regrib_mult}
#
export NDATE=${NDATE:-/nwprod/util/exec/ndate}
export NHOUR=${NHOUR:-/nwprod/util/exec/nhour}

export getdata=1
export regrib=1
export windt=1
export windm=1
export ocnt=1
export ocnm=1
export ocnv=1
export ocnd=44

export wgrib=/nwprod/util/exec/wgrib

export syear=`echo $sdate | cut -c1-4`
export smonth=`echo $sdate | cut -c5-6`
export sday=`echo $sdate | cut -c7-8`
export shour=`echo $sdate| cut -c9-10`

export eyear=`echo $edate | cut -c1-4`
export emonth=`echo $edate | cut -c5-6`
export eday=`echo $edate | cut -c7-8`
export ehour=`echo $edate | cut -c9-10`

z1000=z1000.$member.$sdate.daily
z850=z850.$member.$sdate.daily
z700=z700.$member.$sdate.daily
z500=z500.$member.$sdate.daily
z200=z200.$member.$sdate.daily
ps=ps.$member.$sdate.daily
mslp=mslp.$member.$sdate.daily
wnd200=wnd200.$member.$sdate.daily
wnd850=wnd850.$member.$sdate.daily

tmp2m=tmp2m.$member.$sdate.daily
lhtfl=lhtfl.$member.$sdate.daily
shtfl=shtfl.$member.$sdate.daily
prate=prate.$member.$sdate.daily
pwat=pwat.$member.$sdate.daily
wndstr=wndstr.$member.$sdate.daily
wnd10m=wnd10m.$member.$sdate.daily
dlwsfc=dlwsfc.$member.$sdate.daily
dswsfc=dswsfc.$member.$sdate.daily
ulwsfc=ulwsfc.$member.$sdate.daily
ulwtop=ulwtop.$member.$sdate.daily
uswsfc=uswsfc.$member.$sdate.daily
uswtop=uswtop.$member.$sdate.daily

if [ $getdata -eq 1 ] ; then
 > $wkdir/$z1000
 > $wkdir/$z850
 > $wkdir/$z700
 > $wkdir/$z500
 > $wkdir/$z200
 > $wkdir/$tmp2m
 > $wkdir/$lhtfl
 > $wkdir/$shtfl
 > $wkdir/$prate
 > $wkdir/$ps
 > $wkdir/$mslp
 > $wkdir/$pwat
 > $wkdir/$wndstr
 > $wkdir/$wnd200
 > $wkdir/$wnd850
 > $wkdir/$wnd10m
 > $wkdir/$dlwsfc
 > $wkdir/$dswsfc
 > $wkdir/$ulwsfc
 > $wkdir/$ulwtop
 > $wkdir/$uswsfc
 > $wkdir/$uswtop

 date=$sdate
 until [ $date -gt $edate ] ; do

  ifile=$indir/daily_grib_$member/extvarsf$date
  ls -l $ifile

  invout=$wkdir/extvarsf$date.inv
  > $invout
  $wgrib $ifile > $invout
############## height at given levels ########################
  grep ":kpds5=7:kpds6=100:kpds7=1000:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$z1000
  [ $? -ne 0 ] && exit 8
  grep ":kpds5=7:kpds6=100:kpds7=850:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$z850
  [ $? -ne 0 ] && exit 8
  grep ":kpds5=7:kpds6=100:kpds7=700:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$z700
  [ $? -ne 0 ] && exit 8
  grep ":kpds5=7:kpds6=100:kpds7=500:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$z500
  [ $? -ne 0 ] && exit 8
  grep ":kpds5=7:kpds6=100:kpds7=200:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$z200
  [ $? -ne 0 ] && exit 8
############### latent heat flux ########################
  grep ":kpds5=121:kpds6=1:kpds7=0:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$lhtfl
  [ $? -ne 0 ] && exit 8
############### sensible heat flux ########################
  grep ":kpds5=122:kpds6=1:kpds7=0:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$shtfl
  [ $? -ne 0 ] && exit 8
############### 10m u-wind ########################
  grep ":kpds5=124:kpds6=1:kpds7=0:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$wndstr
  [ $? -ne 0 ] && exit 8
  grep ":kpds5=125:kpds6=1:kpds7=0:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$wndstr
  [ $? -ne 0 ] && exit 8
############### PRATEsfc ########################
  grep ":kpds5=59:kpds6=1:kpds7=0:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$prate
  [ $? -ne 0 ] && exit 8
################ PRESsfc  ########################
  grep ":kpds5=1:kpds6=1:kpds7=0:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$ps
  [ $? -ne 0 ] && exit 8
############### mslp  ########################
  grep ":kpds5=2:kpds6=102:kpds7=0:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$mslp
  [ $? -ne 0 ] && exit 8
############### PWATclm   ########################
  grep ":kpds5=54:kpds6=200:kpds7=0:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$pwat
  [ $? -ne 0 ] && exit 8
############### TMP2m     ########################
  grep ":kpds5=11:kpds6=105:kpds7=2:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$tmp2m
  [ $? -ne 0 ] && exit 8
############### wind at given levels ########################
  grep ":kpds5=33:kpds6=100:kpds7=200:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$wnd200
  [ $? -ne 0 ] && exit 8
  grep ":kpds5=34:kpds6=100:kpds7=200:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$wnd200
  [ $? -ne 0 ] && exit 8
  grep ":kpds5=33:kpds6=100:kpds7=850:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$wnd850
  [ $? -ne 0 ] && exit 8
  grep ":kpds5=34:kpds6=100:kpds7=850:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$wnd850
  [ $? -ne 0 ] && exit 8
################ UGRD10m   ########################
  grep ":kpds5=33:kpds6=105:kpds7=10:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$wnd10m
  [ $? -ne 0 ] && exit 8
  grep ":kpds5=34:kpds6=105:kpds7=10:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$wnd10m
  [ $? -ne 0 ] && exit 8
############### DLWRFsfc   ########################
  grep ":kpds5=205:kpds6=1:kpds7=0:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$dlwsfc
  [ $? -ne 0 ] && exit 8
############### DSWRFsfc   ########################
  grep ":kpds5=204:kpds6=1:kpds7=0:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$dswsfc
  [ $? -ne 0 ] && exit 8
############### ULWRFsfc   ########################
  grep ":kpds5=212:kpds6=1:kpds7=0:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$ulwsfc
  [ $? -ne 0 ] && exit 8
################ olr : ULWRFtoa   ########################
  grep ":kpds5=212:kpds6=8:kpds7=0:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$ulwtop
  [ $? -ne 0 ] && exit 8
############### USWRFsfc   ########################
  grep ":kpds5=211:kpds6=1:kpds7=0:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$uswsfc
  [ $? -ne 0 ] && exit 8
############### USWRFtoa   ########################
  grep ":kpds5=211:kpds6=8:kpds7=0:" $invout | $wgrib $ifile -i -grib -append -o $wkdir/$uswtop
  [ $? -ne 0 ] && exit 8
##################################################
  /bin/rm $invout

  date=`$NDATE $inc $date`
 done
fi

###  now regrib all datasets...
echo 'regrib='$regrib
if [ $regrib -eq 1 ] ; then

 export outdir=$indir/daily_grib_$member
 for name in wnd850 wnd200 wnd10m wndstr ; do
  export kpdsu=33
  export kpdsv=34
  export shourx=$shour
  if [ $name = "wndstr" ] ; then
   export kpdsu=124
   export kpdsv=125
  export shourx=$((shour+inc))
  fi
  export infile=$wkdir/$name.$member.$sdate.daily          
  ls -l $infile
  export outfile=$outdir/$name.$member.$sdate.daily
#
  eval $cfs_regrib_mult << EOF
 &regrib_mult
  idbug=1, idim=144,  jdim=73,  infile="$infile", outfile="$outfile",
  ibyr=$syear, ibmth=$smonth, ibday=$sday, ibcy=$shour,
  isyr=$syear, ismth=$smonth, isday=$sday, iscy=$shourx,
  ieyr=$eyear, iemth=$emonth, ieday=$eday, iecy=$ehour,
  ncyi=$inc, nvar=2, kpds5(1)=$kpdsu, kpds5(2)=$kpdsv,/
EOF
  export err=$?; err_chk
 done

 for name in lhtfl shtfl prate dlwsfc dswsfc ulwsfc ulwtop uswsfc uswtop ; do
  export infile=$wkdir/$name.$member.$sdate.daily          
  ls -l $infile
  export outfile=$outdir/$name.$member.$sdate.daily
  eval $cfs_regrib_mult << EOF
 &regrib_mult
  idbug=1, idim=144,  jdim=73,  infile="$infile", outfile="$outfile",
  ibyr=$syear, ibmth=$smonth, ibday=$sday, ibcy=$shour,
  isyr=$syear, ismth=$smonth, isday=$sday, iscy=$((shour+inc)),
  ieyr=$eyear, iemth=$emonth, ieday=$eday, iecy=$ehour,
  ncyi=$inc, nvar=1, kpds5(1)=-1, /
EOF
  export err=$?; err_chk
 done

 export ofile=$wkdir/csstf.$member.$sdate.daily
> $ofile
 date=`$NDATE 24 $sdate`
 until [ $date -gt $edate ] ; do

  infile=$indir/daily_grib_$member/csstf$date
  cat $infile >> $ofile
  [ $? -ne 0 ] && exit 1
  date=`$NDATE 24 $date`
 done

 date=`$NDATE 24 $sdate`
 export syearx=`echo $date | cut -c1-4`
 export smonthx=`echo $date | cut -c5-6`
 export sdayx=`echo $date | cut -c7-8`
 export shourx=`echo $date| cut -c9-10`

 export infile=$wkdir/csstf.$member.$sdate.daily
 ls -l $infile
 export outfile=$outdir/csstf.$member.$sdate.daily
 eval $cfs_regrib_mult << EOF
&regrib_mult
  idbug=1, idim=360,  jdim=181,  infile="$infile", outfile="$outfile",
  ibyr=$syear, ibmth=$smonth, ibday=$sday, ibcy=$shour,
  isyr=$syearx, ismth=$smonthx, isday=$sdayx, iscy=$shourx,
  ieyr=$eyear, iemth=$emonth, ieday=$eday, iecy=$ehour,
  ncyi=24, nvar=1, kpds5(1)=-1, /
EOF
  export err=$?; err_chk

 for name in z1000 z850 z700 z500 z200 ps tmp2m pwat mslp ; do
  export infile=$wkdir/$name.$member.$sdate.daily          
  ls -l $infile
  export outfile=$outdir/$name.$member.$sdate.daily
  eval $cfs_regrib_mult << EOF
 &regrib_mult
  idbug=1, idim=144,  jdim=73,  infile="$infile", outfile="$outfile",
  ibyr=$syear, ibmth=$smonth, ibday=$sday, ibcy=$shour,
  isyr=$syear, ismth=$smonth, isday=$sday, iscy=$shour,
  ieyr=$eyear, iemth=$emonth, ieday=$eday, iecy=$ehour,
  ncyi=$inc, nvar=1, kpds5(1)=-1, /
EOF
  export err=$?; err_chk
 done

fi

###  now do time-series of stream function and velocity potential...

if [ $windt -eq 1 ] ; then
 export outdir=$indir/daily_grib_$member
 for lev in 850 200
 do
  export lev
  export infile=$wkdir/wnd$lev.$member.$sdate.daily
  ls -l $infile
  export outfile=$outdir/sfvp$lev.$member.$sdate.daily
  > $outfile
  $cfs_wind_time
  export err=$?; err_chk
 done
fi

if [ $windm -eq 1 ] ; then
 export syearo=`echo $sdate | cut -c1-4`
 export smontho=`echo $sdate | cut -c5-6`
 edateo=`$NDATE -24 $edate`
 export eyearo=`echo $edateo | cut -c1-4`
 export emontho=`echo $edateo | cut -c5-6`
 echo $syearo $smontho $eyearo $emontho
 export inputdir=$indir/monthly_grib
 export outputdir=$wkdir
 $cfs_wind_mon
 export err=$?; err_chk
##  add records to original pgb monthly mean file..
 yyyy=$syearo
 until [ $yyyy -gt $eyearo ] ; do
  mms=1
  mme=12
  if [ $yyyy -eq $syearo ] ; then  mms=$((10#$smontho+0)) ; fi
  if [ $yyyy -eq $eyearo ] ; then  mme=$((10#$emontho+0)) ; fi
  mm=$mms
  until [ $mm -gt $mme ] ; do
   if [ $mm -le 9 ] ; then  mm=0$mm ; fi
   iofile=$inputdir/pgb$sdate.$member.${yyyy}${mm}.avrg.grib
   ls -l $iofile
   addfile=$wkdir/pgbadd$sdate.$member.${yyyy}${mm}.avrg.grib
   ls -l $addfile
   cat $addfile >> $iofile
   ls -l $iofile
   mm=`expr $mm + 1`
  done
  yyyy=`expr $yyyy + 1`
 done
fi

if [ $ocnt -eq 1 ] ; then
 export inputdir=$indir/daily_grib_$member
 export outdir=$indir/daily_grib_$member
 $cfs_ocean_time
 export err=$?; err_chk
fi

if [ $ocnm -eq 1 ] ; then
 export inputdir=$indir/monthly_grib
 export outputdir=$wkdir
 export syearo=`echo $sdate | cut -c1-4`
 export smontho=`echo $sdate | cut -c5-6`
 mmp1=$((smonth+1))
 if [ $mmp1 -le 9 ] ; then  mmp1=0$mmp1 ; fi
 yyyyp1=$syearo
 if [ $mmp1 -gt 12 ] ; then
  mmp1=01
  yyyyp1=$((yyyyp1+1))
 fi
 nds=$((`$NHOUR ${yyyyp1}${mmp1}0100 ${syearo}${smontho}0100`/24))
#echo $nds
#nds=`$SCRIPTS/days_y2k_month.sh $syear $smonth`
 export syearo=`echo $sdate | cut -c1-4`
 export smontho=`echo $sdate | cut -c5-6`
 export endmonth=0
 if [ $sday -eq $nds ] ; then
  export endmonth=1
  export smontho=`expr $smontho + 1`
  if [ $smontho -gt 12 ] ; then
    export smontho=1
    export syearo=`expr $syearo + 1`
  fi
  if [ $smontho -le 9 ] ; then
   export smontho=0$smontho
  fi
 fi
 edateo=`$NDATE -24 $edate`
 export eyearo=`echo $edateo | cut -c1-4`
 export emontho=`echo $edateo | cut -c5-6`
 echo $syearo $smontho $eyearo $emontho
 $cfs_ocean_mon
 export err=$?; err_chk
##  add records to original ocn monthly mean file..
 yyyy=$syearo
 until [ $yyyy -gt $eyearo ] ; do
  mms=1
  mme=12
  if [ $yyyy -eq $syearo ] ; then  mms=$((10#$smontho+0)) ; fi
  if [ $yyyy -eq $eyearo ] ; then  mme=$((10#$emontho+0)) ; fi
  mm=$mms
  until [ $mm -gt $mme ] ; do
   if [ $mm -le 9 ] ; then  mm=0$mm ; fi
   iofile=$inputdir/ocn$sdate.$member.${yyyy}${mm}.avrg.grib
   ls -l $iofile
   addfile=$wkdir/ocnadd$sdate.$member.${yyyy}${mm}.avrg.grib
   ls -l $addfile
   cat $addfile >> $iofile
   ls -l $iofile
   mm=`expr $mm + 1`
  done
  yyyy=`expr $yyyy + 1`
 done
fi

if [ $SENDDBN = YES -a $CUE2RUN = prod ]
then
   for dfil in `ls $outdir/*.$member.$sdate.daily`
   do
      $DBNROOT/bin/dbn_alert MODEL CFS_FCST_DAILY $job $dfil
   done
fi 

