
#################################### FORECAST DEBIAS ###############################################
echo "------------------------------------------"
echo "Bias Correct CMC Global Ensemble Forecast "
echo "------------------------------------------"
echo "History: March 2006 - First implementation of this new script"
echo "         March 2010 - Add new variables"
echo "AUTHOR: Bo Cui  (wx20cb)"
####################################################################################################

### To submit this job for T00Z, T06Z T12Z and T18Z, four cycles per day
### need pass the values of PDY, CYC, DATA, COMIN, COM, COMOUTBC, COMOUTAN and COMOUTWT

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

export memberlist=$1
export workdir=$2

if [ ! -f $workdir ]; then
  mkdir -p $workdir
fi

cd $workdir
$utilscript/setup.sh

export NDATE=$EXECUTIL/ndate
export ENSANOMALY=$USHCMCE/cmce_climate_anomaly.sh
export ENSWEIGHTS=$USHCMCE/cmce_weights.sh
export ENSAVGSPR=$USHCMCE/cmce_bc_avgspr.sh

export pgm=fnmocens_debias
. 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`

##########################################################################
# bias correct NCEP global ensemble for each forecast time and each member
##########################################################################

hourlist="     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"

#export memberlist="c00 p01 p02 p03 p04 p05 p06 p07 p08 p09 p10 p11 p12 p13 p14 p15 p16 p17 p18 p19 p20"

for nens in $memberlist
do

  for nfhrs in $hourlist
  do

###
#  set the index ( exist of bias estimation ) as default, 0
###

    cstart_ens=0

###
#  CMCE bias estimation entry
###

    ibias_ens=cmc_ge${nens}.t${cyc}z.pgrba_mef${nfhrs}

    if [ -s $COM/cmce.$PDY/${cyc}/pgrba/$ibias_ens ]; then
      cp $COM/cmce.$PDY/${cyc}/pgrba/$ibias_ens $ibias_ens
    elif [ -s $COM/cmce.$PDYm1/${cyc}/pgrba/$ibias_ens ]; then
      cp $COM/cmce.$PDYm1/${cyc}/pgrba/$ibias_ens $ibias_ens
    elif [ -s $COM/cmce.$PDYm2/${cyc}/pgrba/$ibias_ens ]; then
      cp $COM/cmce.$PDYm2/${cyc}/pgrba/$ibias_ens $ibias_ens
    elif [ -s $COM/cmce.$PDYm3/${cyc}/pgrba/$ibias_ens ]; then
      cp $COM/cmce.$PDYm3/${cyc}/pgrba/$ibias_ens $ibias_ens
    elif [ -s $COM/cmce.$PDYm4/${cyc}/pgrba/$ibias_ens ]; then
      cp $COM/cmce.$PDYm4/${cyc}/pgrba/$ibias_ens $ibias_ens
    elif [ -s $COM/cmce.$PDYm5/${cyc}/pgrba/$ibias_ens ]; then
      cp $COM/cmce.$PDYm5/${cyc}/pgrba/$ibias_ens $ibias_ens
    elif [ -s $COM/cmce.$PDYm6/${cyc}/pgrba/$ibias_ens ]; then
      cp $COM/cmce.$PDYm6/${cyc}/pgrba/$ibias_ens $ibias_ens
    elif [ -s $COM/cmce.$PDYm7/${cyc}/pgrba/$ibias_ens ]; then
      cp $COM/cmce.$PDYm7/${cyc}/pgrba/$ibias_ens $ibias_ens
    elif [ -s $COM/cmce.$PDYm8/${cyc}/pgrba/$ibias_ens ]; then
      cp $COM/cmce.$PDYm8/${cyc}/pgrba/$ibias_ens $ibias_ens
    elif [ -s $COM/cmce.$PDYm9/${cyc}/pgrba/$ibias_ens ]; then
      cp $COM/cmce.$PDYm9/${cyc}/pgrba/$ibias_ens $ibias_ens
    elif [ -s $COM/cmce.$PDYm10/${cyc}/pgrba/$ibias_ens ]; then
      cp $COM/cmce.$PDYm10/${cyc}/pgrba/$ibias_ens $ibias_ens
    elif [ -s $COM/cmce.$PDYm11/${cyc}/pgrba/$ibias_ens ]; then
      cp $COM/cmce.$PDYm11/${cyc}/pgrba/$ibias_ens $ibias_ens
    elif [ -s $COM/cmce.$PDYm12/${cyc}/pgrba/$ibias_ens ]; then
      cp $COM/cmce.$PDYm12/${cyc}/pgrba/$ibias_ens $ibias_ens
    elif [ -s $COM/cmce.$PDYm13/${cyc}/pgrba/$ibias_ens ]; then
      cp $COM/cmce.$PDYm13/${cyc}/pgrba/$ibias_ens $ibias_ens
    elif [ -s $COM/cmce.$PDYm14/${cyc}/pgrba/$ibias_ens ]; then
      cp $COM/cmce.$PDYm14/${cyc}/pgrba/$ibias_ens $ibias_ens
    elif [ -s $COM/cmce.$PDYm15/${cyc}/pgrba/$ibias_ens ]; then
      cp $COM/cmce.$PDYm15/${cyc}/pgrba/$ibias_ens $ibias_ens
    elif [ -s $COM/cmce.$PDYm16/${cyc}/pgrba/$ibias_ens ]; then
      cp $COM/cmce.$PDYm16/${cyc}/pgrba/$ibias_ens $ibias_ens
    else
      echo " There is no Bias Estimation at " ${nfhrs}H " For Member " $nens
      cstart_ens=1
    fi

    echo "&message"  >input.$nfhrs.$nens
    echo " icstart_ens=${cstart_ens}," >> input.$nfhrs.$nens
    echo " nfhr=${nfhrs}," >> input.$nfhrs.$nens
    echo "/" >>input.$nfhrs.$nens

###
#  CMC  bias corrected ensemble forecasting output
###

    ofile=cmc_ge${nens}.t${cyc}z.pgrba_bcf${nfhrs}

###
#  check CMC  forecast file
###
   
    ifile_ens=$COMIN/cmc_ge${nens}.t${cyc}z.pgrbaf${nfhrs} 

    icnt=0
    while [ icnt -le 30 ]; do
      if [ -s $ifile_ens ]; then

        ln -sf $ibias_ens fort.11
        ln -sf $ifile_ens fort.12
        ln -sf $ofile     fort.51

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

 	rm fort.*
        export MEMLIST=$nens
        $ENSANOMALY $PDY$cyc $nfhrs

        $ENSWEIGHTS $PDY$cyc $nfhrs

        icnt=31

#### sendcom  bias corrected forecast

        if [ "$SENDCOM" = "YES" ]; then
          if [ -s cmc_ge${nens}.t${cyc}z.pgrba_bcf${nfhrs} ]; then  
            mv cmc_ge${nens}.t${cyc}z.pgrba_bcf${nfhrs} $COMOUTBC/
	  fi
          if [ -s cmc_ge${nens}.t${cyc}z.pgrba_anf$nfhrs ]; then
            mv cmc_ge${nens}.t${cyc}z.pgrba_anf$nfhrs $COMOUTAN/
          fi
          if [ -s cmc_ge${nens}.t${cyc}z.pgrba_wtf$nfhrs ]; then
            mv cmc_ge${nens}.t${cyc}z.pgrba_wtf$nfhrs $COMOUTWT/
          fi
        fi

      else

        sleep 10
        icnt=`expr $icnt + 1`
	echo $icnt

      fi
    done

  done
done

###
#  final check up and make up
###

for nens in $memberlist
do

  for nfhrs in $hourlist
  do

    if [ ! -s $COMOUTBC/cmc_ge${nens}.t${cyc}z.pgrba_bcf${nfhrs} ]; then  

      rm fort.*
      ibias_ens=cmc_ge${nens}.t${cyc}z.pgrba_mef${nfhrs}
      ifile_ens=$COMIN/cmc_ge${nens}.t${cyc}z.pgrbaf${nfhrs} 
      ofile=cmc_ge${nens}.t${cyc}z.pgrba_bcf${nfhrs}

      ln -sf $ibias_ens fort.11
      ln -sf $ifile_ens fort.12
      ln -sf $ofile     fort.51

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

      if [ "$SENDCOM" = "YES" ]; then
        if [ -s $ofile ]; then  
          cp $ofile $COMOUTBC/
        fi
      fi
    fi

    if [ ! -s $COMOUTAN/cmc_ge${nens}.t${cyc}z.pgrba_anf$nfhrs ]; then
      rm fort.*
      export MEMLIST=$nens
      $ENSANOMALY $PDY$cyc $nfhrs
      if [ "$SENDCOM" = "YES" ]; then
        if [ -s cmc_ge${nens}.t${cyc}z.pgrba_anf$nfhrs ]; then
          mv cmc_ge${nens}.t${cyc}z.pgrba_anf$nfhrs $COMOUTAN/
        fi
      fi
    fi

    if [ ! -s $COMOUTWT/cmc_ge${nens}.t${cyc}z.pgrba_wtf$nfhrs ]; then
      rm fort.*
      export MEMLIST=$nens
      $ENSWEIGHTS $PDY$cyc $nfhrs
      if [ "$SENDCOM" = "YES" ]; then
        if [ -s cmc_ge${nens}.t${cyc}z.pgrba_wtf$nfhrs ]; then
          mv cmc_ge${nens}.t${cyc}z.pgrba_wtf$nfhrs $COMOUTWT/
        fi
      fi
    fi
  done
###
done

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