########################### BIASUPDATE ############################################################
echo "--------------------------------------------------------------"
echo "Update Bias Estimation of FNMOC Global Ensemble Forecast Daily"
echo "--------------------------------------------------------------"
echo "History: Oct 2010 - First implementation of this new script."
echo "AUTHOR: Bo Cui  (wx20cb)"
########################### BIASUPDATE ############################################################

### To submit this job for T00Z, and T12Z , two cycles per day

### need pass the values of PDY, CYC, DATA, COMIN, and COMOUT

################################################################
# define exec variable, and entry grib utility 
################################################################

export NDATE=$EXECUTIL/ndate
export COPYGB=$EXECUTIL/copygb

export ENSAVGSPR=$USHfnmoc/fnmocens_avgspr.sh

export pgm=fnmocens_bias
. prep_step

########################################################
### define the days for searching bias estimation backup
########################################################
###
ymdh=${PDY}${cyc}
export PDYm8=`$NDATE -192 $ymdh | cut -c1-8`
export PDYm9=`$NDATE -216 $ymdh | cut -c1-8`
export PDYm10=`$NDATE -240 $ymdh | cut -c1-8`
export PDYm11=`$NDATE -264 $ymdh | cut -c1-8`
export PDYm12=`$NDATE -288 $ymdh | cut -c1-8`
export PDYm13=`$NDATE -312 $ymdh | cut -c1-8`
export PDYm14=`$NDATE -336 $ymdh | cut -c1-8`
export PDYm15=`$NDATE -360 $ymdh | cut -c1-8`
export PDYm16=`$NDATE -384 $ymdh | cut -c1-8`
                                                                                                             
###############################################
### calculate FNMOC ensemble average and spread
###############################################

#if [ $cyc -eq 00 -o $cyc -eq 12 ]; then
#  $ENSAVGSPR
#fi


################################################################
### calculate bias estimation for different forecast lead time
################################################################

if [ "$BIASMEM" = "YES" ]; then
  memberlist="p01 p02 p03 p04 p05 p06 p07 p08 p09 p10 p11 p12 p13 p14 p15 p16 p17 p18 p19 p20"
fi

if [ "$BIASAVG" = "YES" ]; then
  memberlist="avg"
fi

if [ "$BIASC00" = "YES" ]; then
  memberlist="c00"
fi

###
# input basic information, member and forecast lead time
###

if [ $cyc -eq 00 -o $cyc -eq 12 ]; then

if [ "$BIASC00" = "YES" -o "$BIASAVG" = "YES" -o "$BIASMEM" = "YES" ]; then

for nens in $memberlist; do

  hourlist=" 00  06  12  18  24  30  36  42  48  54  60  66  72  78  84  90  96 \
            102 108 114 120 126 132 138 144 150 156 162 168 174 180 186 192 198 \
            204 210 216 222 228 234 240 246 252 258 264 270 276 282 288 294 300 \
            306 312 318 324 330 336 342 348 354 360 366 372 378 384"

  for nfhrs in $hourlist; do

###
# analysis files entry
###

  fymdh=${PDYm1}18
  fymdh=`$NDATE -$nfhrs $fymdh `
  fymd=`echo $fymdh | cut -c1-8`

  aymdh=`$NDATE +$nfhrs $fymd$cyc `
  aymd=`echo $aymdh | cut -c1-8`
  acyc=`echo $aymdh | cut -c9-10`

  aymdh_m06=`$NDATE -6 $aymdh `
  aymd_m06=`echo $aymdh_m06 | cut -c1-8`
  acyc_m06=`echo $aymdh_m06 | cut -c9-10`

  afile=$COM_NOGAPS/nogaps.${aymd}/nogaps_${aymd}${acyc}f000 

###
# set the forecast file as analysis for ULWRF
# FNMOC ensemble has no 06z and 18z cycle forecasts
###

  if [ $acyc -eq 00 -o $acyc -eq 12 ]; then
    afile_m12=$COM/fens.${aymd}/${acyc}/pgrba/fnmoc_ge$nens.t${acyc}z.pgrbaf00
  elif [ $acyc -eq 06 -o $acyc -eq 18 ]; then
    afile_m12=$COM/fens.${aymd}/${acyc_m06}/pgrba/fnmoc_ge$nens.t${acyc_m06}z.pgrbaf06
  fi   

###

  if [ -s $afile ]; then
    echo " "
  else
    echo " There is no Analysis data, Stop! for " $acyc 
  fi

  if [ -s $afile_m12 ]; then
    echo " "
  else
    echo " There is no Analysis data for ULWRF for " $acyc_m12 
  fi

###
# forecast files entry
###

  cfile=$COM/fens.${fymd}/${cyc}/pgrba/fnmoc_ge$nens.t${cyc}z.pgrbaf$nfhrs  

###
# get initialized bias for $nens at $nfhrs, set the no cold start index as default, 0
###

  cstart=0

  ifile=fnmoc_ge${nens}.t${cyc}z.pgrba_mef${nfhrs}
  pgbme=bias.ge${nens}.t${cyc}z.f$nfhrs

  if [ -s $COM/fens.$PDYm1/${cyc}/pgrba/$ifile ]; then
    cp $COM/fens.$PDYm1/${cyc}/pgrba/$ifile $pgbme
  elif [ -s $COM/fens.$PDYm2/${cyc}/pgrba/$ifile ]; then
    cp $COM/fens.$PDYm2/${cyc}/pgrba/$ifile $pgbme
  elif [ -s $COM/fens.$PDYm3/${cyc}/pgrba/$ifile ]; then
    cp $COM/fens.$PDYm3/${cyc}/pgrba/$ifile $pgbme
  elif [ -s $COM/fens.$PDYm4/${cyc}/pgrba/$ifile ]; then
    cp $COM/fens.$PDYm4/${cyc}/pgrba/$ifile $pgbme
  elif [ -s $COM/fens.$PDYm5/${cyc}/pgrba/$ifile ]; then
    cp $COM/fens.$PDYm5/${cyc}/pgrba/$ifile $pgbme
  elif [ -s $COM/fens.$PDYm6/${cyc}/pgrba/$ifile ]; then
    cp $COM/fens.$PDYm6/${cyc}/pgrba/$ifile $pgbme
  elif [ -s $COM/fens.$PDYm7/${cyc}/pgrba/$ifile ]; then
    cp $COM/fens.$PDYm7/${cyc}/pgrba/$ifile $pgbme
  elif [ -s $COM/fens.$PDYm8/${cyc}/pgrba/$ifile ]; then
    cp $COM/fens.$PDYm8/${cyc}/pgrba/$ifile $pgbme
  elif [ -s $COM/fens.$PDYm9/${cyc}/pgrba/$ifile ]; then
    cp $COM/fens.$PDYm9/${cyc}/pgrba/$ifile $pgbme
  elif [ -s $COM/fens.$PDYm10/${cyc}/pgrba/$ifile ]; then
    cp $COM/fens.$PDYm10/${cyc}/pgrba/$ifile $pgbme
  elif [ -s $COM/fens.$PDYm11/${cyc}/pgrba/$ifile ]; then
    cp $COM/fens.$PDYm11/${cyc}/pgrba/$ifile $pgbme
  elif [ -s $COM/fens.$PDYm12/${cyc}/pgrba/$ifile ]; then
    cp $COM/fens.$PDYm12/${cyc}/pgrba/$ifile $pgbme
  elif [ -s $COM/fens.$PDYm13/${cyc}/pgrba/$ifile ]; then
    cp $COM/fens.$PDYm13/${cyc}/pgrba/$ifile $pgbme
  elif [ -s $COM/fens.$PDYm14/${cyc}/pgrba/$ifile ]; then
    cp $COM/fens.$PDYm14/${cyc}/pgrba/$ifile $pgbme
  elif [ -s $COM/fens.$PDYm15/${cyc}/pgrba/$ifile ]; then
    cp $COM/fens.$PDYm15/${cyc}/pgrba/$ifile $pgbme
  elif [ -s $COM/fens.$PDYm16/${cyc}/pgrba/$ifile ]; then
    cp $COM/fens.$PDYm16/${cyc}/pgrba/$ifile $pgbme
  else
    echo "Cold Start for Bias Estimation between Analysis and FNMOC Forecast At " $nfhrs " For " $nens
    cstart=1
  fi

#################################################################
#  input bias estimation 6h ago for tmax and tmin bias estimation
#################################################################

  if [ $nfhrs -ge 06 ]; then

    nfhrsm06=`expr $nfhrs - 06`
    if [ $nfhrsm06 -le 09 ]; then
      bias_m06=fnmoc_ge${nens}.t${cyc}z.pgrba_mef0$nfhrsm06
    else
      bias_m06=fnmoc_ge${nens}.t${cyc}z.pgrba_mef$nfhrsm06
    fi

  fi

###
#  output ensemble forecasting bias estimation
###

  ofile=fnmoc_ge${nens}.t${cyc}z.pgrba_mef${nfhrs}

  rm fort.*
 
  odate=`$NDATE -24 $PDY$cyc `

  echo "&message"  >input.$nfhrs.$nens
  echo " icstart=${cstart}," >> input.$nfhrs.$nens
  echo " nens='$nens'," >>input.$nfhrs.$nens
  echo " ifhr=$nfhrs," >>input.$nfhrs.$nens
  echo " dec_w=0.02," >> input.$nfhrs.$nens
  echo " odate=$odate," >>input.$nfhrs.$nens
  echo "/" >>input.$nfhrs.$nens
  
  ln -sf $pgbme     fort.11
  ln -sf $afile     fort.12
  ln -sf $afile_m12 fort.13
  ln -sf $cfile     fort.14
  if [ $nfhrs -ge 06 ]; then
    ln -sf $bias_m06  fort.15
  fi
  ln -sf $ofile     fort.51

  startmsg
  $EXECfnmoc/$pgm  <input.$nfhrs.$nens > $pgmout.$nfhrs.${nens} 2> errfile
  export err=$?;err_chk

 done
done

fi
fi

###
#  calculate bias estimation between CDAS and FNMOC analysis            
###

if [ "$BIASCDAS" = "YES" ]; then

rm fort.*

for nfhrs in 00; do
 for nens in mdf; do

###
#  set the no cold start index as default, 0
###
  cstart=0

###
# FNMOC operational analysis file entry
###

  aymdh=$PDYm2$cyc
  aymd=`echo $aymdh | cut -c1-8`
  acyc=`echo $aymdh | cut -c9-10`
  echo $aymdh $aymd $acyc

  aymdh_m06=`$NDATE -6 $aymdh `
  aymd_m06=`echo $aymdh_m06 | cut -c1-8`
  acyc_m06=`echo $aymdh_m06 | cut -c9-10`

  afile=$COM_NOGAPS/nogaps.${aymd}/nogaps_${aymd}${acyc}f000 

  if [ -s $afile ]; then
    echo " "
  else
    echo " There is no Analysis data, Stop! for " $acyc
#   exit
  fi

###
# cdas reanalysi file entry
###

  $COPYGB -g3 -i1,1 -x $COMINCDAS/cdas.${aymd}/cdas.t${acyc}z.pgrbf00              cdas.t${acyc}z.pgrbf00.$aymd 
  $COPYGB -g3 -i1,1 -x $COMINCDAS/cdas.${aymd_m06}/cdas.t${acyc_m06}z.sfluxgrbf06  cdas.t${acyc_m06}z.sfluxgrbf06.$aymd_m06

  rfile=cdas.t${acyc}z.pgrbf00.$aymd
  rfile_m06=cdas.t${acyc_m06}z.sfluxgrbf06.$aymd_m06

###
#  get initialized bias between analyais and reanalysis entry
###

  pgbmdf=fnmoc_glbanl.t${cyc}z.pgrba_mdf00
  pgbmean=glbanl.t${cyc}z.pgrba_meandif

  if [ -s $COM/fens.$PDYm3/${cyc}/pgrba/$pgbmdf ]; then
    cp $COM/fens.$PDYm3/${cyc}/pgrba/$pgbmdf $pgbmean
  elif [ -s $COM/fens.$PDYm4/${cyc}/pgrba/$pgbmdf ]; then
    cp $COM/fens.$PDYm4/${cyc}/pgrba/$pgbmdf $pgbmean
  elif [ -s $COM/fens.$PDYm5/${cyc}/pgrba/$pgbmdf ]; then
    cp $COM/fens.$PDYm5/${cyc}/pgrba/$pgbmdf $pgbmean
  elif [ -s $COM/fens.$PDYm6/${cyc}/pgrba/$pgbmdf ]; then
    cp $COM/fens.$PDYm6/${cyc}/pgrba/$pgbmdf $pgbmean
  elif [ -s $COM/fens.$PDYm7/${cyc}/pgrba/$pgbmdf ]; then
    cp $COM/fens.$PDYm7/${cyc}/pgrba/$pgbmdf $pgbmean
  else
    echo " Cold Start for Bias Estimation between CDAS and GDAS Fcst. Hour " $nfhrs 
    cstart=1
  fi

###
#  output bias estimation between CDAS and GDAS            
###

  ofile=fnmoc_glbanl.t${cyc}z.pgrba_mdf00                        

  echo "&message"  >input.$nfhrs.$nens
  echo " icstart=${cstart}," >> input.$nfhrs.$nens
  echo " nens='$nens'," >>input.$nfhrs.$nens
  echo " dec_w=0.02," >> input.$nfhrs.$nens
  echo " odate=$odate," >>input.$nfhrs.$nens
  echo "/" >>input.$nfhrs.$nens

  ln -sf $pgbmean   fort.11
  ln -sf $afile     fort.12
  ln -sf $rfile     fort.13
  ln -sf $rfile_m06 fort.14
  ln -sf $ofile     fort.51

  startmsg
  $EXECfnmoc/$pgm  <input.$nfhrs.$nens > $pgmout.$nfhrs.${nens} 2> errfile
  export err=$?;err_chk

 done
done
fi

###
#  calculate bias estimation between NCEP and FNMOC analysis: FNMOC anl - NCEP anl
###

if [ "$BIASANL" = "YES" ]; then

rm fort.*

for nfhrs in 00; do
 for nens in anl; do

###
#  set the no cold start index as default, 0
###
  cstart=0

###
# gdas NCEP operational analysis file entry
###

  aymdh=$PDYm1$cyc
  aymd=`echo $aymdh | cut -c1-8`
  acyc=`echo $aymdh | cut -c9-10`

  aymdh_m06=`$NDATE -6 $aymdh `
  aymd_m06=`echo $aymdh_m06 | cut -c1-8`
  acyc_m06=`echo $aymdh_m06 | cut -c9-10`

  nfile=/com/gens/prod/gefs.${aymd}/${acyc}/pgrba/gec00.t${acyc}z.pgrbaf00

  if [ -s $nfile ]; then
    echo " "
  else
    echo " There is no Analysis data, Stop! for " $acyc
#   exit
  fi

###
# FNMOC analysi file entry
###

  cfile=$COM_NOGAPS/nogaps.${aymd}/nogaps_${aymd}${acyc}f000 

###
#  get initialized bias between NCEP and FNMOC analysis 
###

  pgbmdf=ncepfnmoc_glbanl.t${cyc}z.pgrba_mdf00
  pgbmean=glbanl.t${cyc}z.pgrba_meandif

  if [ -s $COM_NCEP/gefs.$PDYm2/${cyc}/pgrba/$pgbmdf ]; then
    cp $COM_NCEP/gefs.$PDYm2/${cyc}/pgrba/$pgbmdf $pgbmean
  elif [ -s $COM_NCEP/gefs.$PDYm3/${cyc}/pgrba/$pgbmdf ]; then
    cp $COM_NCEP/gefs.$PDYm3/${cyc}/pgrba/$pgbmdf $pgbmean
  elif [ -s $COM_NCEP/gefs.$PDYm4/${cyc}/pgrba/$pgbmdf ]; then
    cp $COM_NCEP/gefs.$PDYm4/${cyc}/pgrba/$pgbmdf $pgbmean
  elif [ -s $COM_NCEP/gefs.$PDYm5/${cyc}/pgrba/$pgbmdf ]; then
    cp $COM_NCEP/gefs.$PDYm5/${cyc}/pgrba/$pgbmdf $pgbmean
  elif [ -s $COM_NCEP/gefs.$PDYm6/${cyc}/pgrba/$pgbmdf ]; then
    cp $COM_NCEP/gefs.$PDYm6/${cyc}/pgrba/$pgbmdf $pgbmean
  elif [ -s $COM_NCEP/gefs.$PDYm7/${cyc}/pgrba/$pgbmdf ]; then
    cp $COM_NCEP/gefs.$PDYm7/${cyc}/pgrba/$pgbmdf $pgbmean
  else
    echo " Cold Start for Bias Estimation between CDAS and GDAS Fcst. Hour " $nfhrs 
    cstart=1
  fi

###
#  output bias estimation between NCEP and FNMOC analysis   
###

  ofile=ncepfnmoc_glbanl.t${cyc}z.pgrba_mdf00                        

  echo "&message"  >input.$nfhrs.$nens
  echo " icstart=${cstart}," >> input.$nfhrs.$nens
  echo " nens='$nens'," >>input.$nfhrs.$nens
  echo " dec_w=0.10," >> input.$nfhrs.$nens
  echo " odate=$odate," >>input.$nfhrs.$nens
  echo "/" >>input.$nfhrs.$nens

  ln -sf $pgbmean   fort.11
  ln -sf $nfile     fort.12
  ln -sf $cfile     fort.13
  ln -sf $ofile     fort.51

  startmsg
  $EXECfnmoc/$pgm  <input.$nfhrs.$nens > $pgmout.$nfhrs.${nens} 2> ercfile
  export err=$?;err_chk

 done
done
fi

hourlist=" 00  06  12  18  24  30  36  42  48  54  60  66  72  78  84  90  96 \
          102 108 114 120 126 132 138 144 150 156 162 168 174 180 186 192 198 \
          204 210 216 222 228 234 240 246 252 258 264 270 276 282 288 294 300 \
          306 312 318 324 330 336 342 348 354 360 366 372 378 384"

if [ "$SENDCOM" = "YES" ]; then
  for nfhrs in $hourlist
  do
    for nens in $memberlist; do
      if [ -s fnmoc_ge${nens}.t${cyc}z.pgrba_mef${nfhrs} ]; then
        cp fnmoc_ge${nens}.t${cyc}z.pgrba_mef${nfhrs} $COMOUT/
      fi
    done
  done
  if [ -s fnmoc_glbanl.t${cyc}z.pgrba_mdf00 ]; then
    cp fnmoc_glbanl.t${cyc}z.pgrba_mdf00 $COMOUT_M2/
  fi
  if [ -s ncepfnmoc_glbanl.t${cyc}z.pgrba_mdf00 ]; then
    cp ncepfnmoc_glbanl.t${cyc}z.pgrba_mdf00 $COMOUTNCEP_M1/
  fi
fi

msg="HAS COMPLETED NORMALLY!"
postmsg "$jlogfile" "$msg"
