#!/bin/sh

#################################################################
# Script: excdas2_v1_anl.sh.sms
# Purpose: This is the main driver script for the CDAS-2 Analysis 
#          and Forecast.
# Auther: Wesley Ebisuzaki
# Log:   2004-06-09 Initial script from Wesley Ebisuzaki
#        2004-06-14 Modified for production--Julia Zhu
#        2004-06-28 Added restricted data type for the prepbufr
#                   oiqc and pvents files.
#        2004-06-30 The grib table was modified to accomodate the
#                   the R2 analysis data, consequently the new
#                   wgrib executable was used in this job.
################################################################

#########################################################
echo
echo "------------------------------------------------"
echo "excdas2_v1_fcst.sh.sms - CDAS-2 analysis and forcast"
echo "------------------------------------------------"
echo "History: June 20 2004 Original script."
#########################################################
set -xa
cd $DATA

msg="Job $job_name HAS BEGUN on `hostname`"
postmsg "$jlogfile" "$msg"

cat break > $pgmout

msg="CYCLE TIME FOR CDAS-2 ANALYSIS IS $PDY$cyc"
postmsg "$jlogfile" "$msg"

if [ -z "$XLFRTEOPTS" ]; then
   export XLFRTEOPTS="nlwidth=132:unit_vars=yes"
else
   export XLFRTEOPTS="unit_vars=yes:${XLFRTEOPTS}:nlwidth=132"
fi

export NDATE=${NDATE:-/nwprod/util/exec/ndate}

# (desired) analysis date
export adate=$PDY$cyc
export odate=`$NDATE -6 $adate`

# Definition of input file names for the prepbufr files
date=$adate
prep_000="$com/${RUN}.`echo $date|cut -c1-8`/${model}.t`echo $date|cut -c9-10`z.prepbufr_pre-qc"
date=`$NDATE 12 $adate`
prep_p12="$COMGFS/gfs.`echo $date|cut -c1-8`/gfs.t`echo $date|cut -c9-10`z.prepbufr_pre-qc"
date=`$NDATE 24 $adate`
prep_p24="$COMGFS/gfs.`echo $date|cut -c1-8`/gfs.t`echo $date|cut -c9-10`z.prepbufr_pre-qc"
date=`$NDATE -12 $adate`
prep_m12="$com/${RUN}.`echo $date|cut -c1-8`/${model}.t`echo $date|cut -c9-10`z.prepbufr_pre-qc"
date=`$NDATE -24 $adate`
prep_m24="$com/${RUN}.`echo $date|cut -c1-8`/${model}.t`echo $date|cut -c9-10`z.prepbufr_pre-qc"

# Definition of input file names for the sst snow and ice grib files
sst="$COMIN/${model}.t${cyc}z.sstgrb"
snow="$COMIN/${model}.t${cyc}z.snogrb"
ice="$COMIN/${model}.t${cyc}z.engicegrb"
obs_precip="$COMIN/${model}.t${cyc}z.obs_precip"
mdl_precip="$COMIN/${model}.t${cyc}z.mdl_precip"

# Input sigma and sfc analysis files: 
pdy_m06=`echo $odate|cut -c1-8`
cyc_m06=`echo $odate|cut -c9-10`
oldbges="$com/${RUN}.${pdy_m06}/${model}.t${cyc_m06}z.bf06"
oldsges="$com/${RUN}.${pdy_m06}/${model}.t${cyc_m06}z.sf06"
oldsanl="$com/${RUN}.${pdy_m06}/${model}.t${cyc_m06}z.sanl"

# Definition of output file names

sanl="$COMOUT/${model}.t${cyc}z.sanl"
sfcanl="$COMOUT/${model}.t${cyc}z.sfcanl"
sges="$COMOUT/${model}.t${cyc}z.sf06"
bges="$COMOUT/${model}.t${cyc}z.bf06"

# Definition of archive file names

prepoiqc="$COMARC/oiqc.anl.$adate.bufr"
prepqm="$COMARC/pvents.anl.$adate.bufr"
prep_pre="$COMARC/prepbufr$adate"

sstout="$COMARC/sstgrb$adate"
snowout="$COMARC/snogrb$adate"
iceout="$COMARC/icegrb$adate"

pgbf00="$COMARC/pgb.anl.$adate.grib"
pgbf06="$COMARC/pgb.ft06.$adate.grib"
flxf00="$COMARC/flx.ft00.$adate.grib"
flxf06="$COMARC/flx.ft06.$adate.grib"
dg3f00="$COMARC/dg3.ft00.$adate.grib"
dg3f06="$COMARC/dg3.ft06.$adate.grib"
sgbf00="$COMARC/sig.anl.$adate.grib"
sgbf06="$COMARC/sig.ft06.$adate.grib"
znlf00="$COMARC/znl.ft00.$adate.native"
znlf06="$COMARC/znl.ft06.$adate.native"

cqb="$COMARC/cqb.anl.$adate.ascii"
cqe="$COMARC/cqe.anl.$adate.ascii"
cqt="$COMARC/cqt.anl.$adate.ascii"

sfcanl_arc="$COMARC/sfc.anl.$adate.ieee"
bges_arc="$COMARC/sfc.ft06.$adate.ieee"
sanl_arc="$COMARC/sig.anl.$adate.ieee"
sges_arc="$COMARC/sig.ft06.$adate.ieee"

txtout="$COMARC/stdout1.anl.$adate.ascii"

# misc definitions

restart_step=${restart_step:-1}
PRECIP_SOIL_ADJ=${PRECIP_SOIL_ADJ:-yes}
wgrib=${wgrib:-/nwprod/util/exec/wgrib}

#
# in-line routines
#

# find date of prepbufr file

prepdate() {
    export XLFUNIT_11=$1
    $EXECcdas2/cdas2_v1_prepdate
}

# eliminate any XLFUNIT definitions

undef_XLFUNIT() {
   XLFUNIT_00=abc
   for f in `set | sed 's/=.*//' | grep XLFUNIT_`
   do
      echo "unset $f"
      unset $f
   done
}

#     check for prepbufr-pre_qc files .. copy to $DATA

hr=-24
for p in $prep_m24 $prep_m12 $prep_000 $prep_p12 $prep_p24
do
   date=`$NDATE $hr $adate`
   ndate=`prepdate $p`
   if [ $date -ne $ndate ] ; then
      echo "$p file wrong date wanted $date found $ndate"
      exit 8
   fi
   hr=$(( $hr + 12 ))
done

cp $prep_m24 $DATA/prepbufr.t-24
cp $prep_m12 $DATA/prepbufr.t-12
cp $prep_000 $DATA/prepbufr.t00
cp $prep_p12 $DATA/prepbufr.t+12
cp $prep_p24 $DATA/prepbufr.t+24

# convert oldsges, oldbges and oldsanl to native format (R8)

$EXECcdas2/cdas2_v1_sig2sig -toR8 $oldsges oldsges
$EXECcdas2/cdas2_v1_sig2sig -toR8 $oldbges oldbges
$EXECcdas2/cdas2_v1_sig2sig -toR8 $oldsanl oldsanl

echo "date  c2`echo $adate | cut -c3-10`    washington  " >nmcdate

echo "restart_step is $restart_step"

if [ $restart_step -le 1 ];then
   pgm=prevents
   msg=" `date`  -- $pgm for $adate started "
   postmsg "$jlogfile" "$msg"

   rm -f bufr_adpupa bufr_aircft bufr_sfcsat
   undef_XLFUNIT
   export XLFUNIT_11=prepbufr.t00
   export XLFUNIT_12=oldsges
   export XLFUNIT_13=$FIXcdas2/cdas2_v1_ssierr
   export XLFUNIT_14=nmcdate
   export XLFUNIT_50=bufr_adpupa
   export XLFUNIT_51=bufr_aircft
   export XLFUNIT_52=bufr_sfcsat

   startmsg
   $EXECcdas2/cdas2_v1_$pgm >$pgm.out 2 > errfile
   err=$?;export err; err_chk
   cat $pgm.out >>$pgmout
fi

#
# 2. cqc
#
if [ $restart_step -le 2 ] ; then

   pgm=cqc
   msg=" `date` -- $pgm started "
   postmsg "$jlogfile" "$msg"

   rm -f cqe.anl.ascii cqb.anl.ascii cqt.anl.ascii
   undef_XLFUNIT
   export XLFUNIT_4=fort.4.cqc
   export XLFUNIT_14=bufr_adpupa
   export XLFUNIT_17='prepbufr.t-24'
   export XLFUNIT_18='prepbufr.t-12'
   export XLFUNIT_19='prepbufr.t+12'
   export XLFUNIT_20='prepbufr.t+24'
   export XLFUNIT_51=bufr_adpupa_cqc_output

   export XLFUNIT_11=cqc11
   export XLFUNIT_12=cqe.anl.ascii
   export XLFUNIT_13=cqc13
   export XLFUNIT_15=cqb.anl.ascii
   export XLFUNIT_16=cqc16
   export XLFUNIT_60=cqt.anl.ascii
   export XLFUNIT_61=cqc61
   export XLFUNIT_62=cqc62
   export XLFUNIT_63=cqc64
   export XLFUNIT_64=cqc65
   export XLFUNIT_83=fort.83.cqc
   export XLFUNIT_84=fort.84.cqc
   export XLFUNIT_85=fort.85.cqc

   startmsg
   $EXECcdas2/cdas2_v1_$pgm  >$pgm.out 2>errfile
   err=$?;export err;err_chk
   cat $pgm.out >>$pgmout

   # not fatal error if cqe.anl.ascii is missing
   [ ! -s cqe.anl.ascii ] && echo >cqe.anl.ascii
   rm fort.4.cqc
fi
#
# 3. acqc
#
if [ $restart_step -le 3 ] ; then

   pgm=acqc
   msg=" `date` -- $pgm started "
   postmsg "$jlogfile" "$msg"

   rm -f bufr_aircft_acqc_output
   undef_XLFUNIT
   export XLFUNIT_14=bufr_aircft
   export XLFUNIT_15=$FIXcdas2/cdas2_v1_landsea
   export XLFUNIT_23=$FIXcdas2/cdas2_v1_waypts
   export XLFUNIT_52=sdmacqc
   export XLFUNIT_53=sdmstac
   export XLFUNIT_61=bufr_aircft_acqc_output
   export XLFUNIT_88=debugout
   export XLFUNIT_83=fort.83.acqc
   export XLFUNIT_84=fort.84.acqc
   export XLFUNIT_85=fort.85.acqc

# note: code from kana has IFLGUS=1
# nersc output has IFLGUS=0
# 1 -> geographical test

   startmsg
   $EXECcdas2/cdas2_v1_$pgm >$pgm.out 2>errfile <<EOF
&INPUT
      DOSPOB = .FALSE., DOACRS=.FALSE., WINDOW=3.00, TIMINC=1.00,
      STCLIM = 41.9,    WAYPIN=.TRUE.,  INIDST= 2,   IFLGUS=0,
      JAMASS = 6*0,     JAWIND= 6*0,
      FWRITE = .TRUE.,  SWRITE=.FALSE., IWRITE=.FALSE., EWRITE=.FALSE.,
      RCPTST=.FALSE.,
/
EOF
   err=$?;export err;err_chk
   cat $pgm.out >>$pgmout
fi

#
#  4.  combbufr
#
#  combines the sfc/sat, adpupa and aircft bufr files
#
if [ $restart_step -le 4 ] ; then

   pgm=combbufr
   msg=" `date` -- $pgm started "
   postmsg "$jlogfile" "$msg"

   rm -f combbufr_bufr_output
   undef_XLFUNIT
   export XLFUNIT_20=bufr_sfcsat
   export XLFUNIT_21=bufr_adpupa_cqc_output
   export XLFUNIT_22=bufr_aircft_acqc_output
   export XLFUNIT_50=combbufr_bufr_output

   startmsg
   echo 3|$EXECcdas2/cdas2_v1_$pgm >$pgm.out 2>errfile
   err=$?;export err;err_chk
   cat $pgm.out >>$pgmout
fi

#
#  5.  oiqc
#
if [ $restart_step -le 5 ] ; then

   pgm=oiqc
   msg=" `date` -- $pgm started "
   postmsg "$jlogfile" "$msg"

   rm -f oiqc.anl.bufr
   undef_XLFUNIT
   export XLFUNIT_11=nmcdate
   export XLFUNIT_14=combbufr_bufr_output
   export XLFUNIT_17=$FIXcdas2/cdas2_v1_oiqcerr
   export XLFUNIT_18=obprt.wrk
   export XLFUNIT_20=tolls.wrk
   export XLFUNIT_60=obcbt.out
   export XLFUNIT_61=toss.sfz
   export XLFUNIT_62=toss.upa
   export XLFUNIT_63=toss.sat
   export XLFUNIT_64=toss.smi
   export XLFUNIT_65=tosslist
   export XLFUNIT_70=oiqc.anl.bufr
   export XLFUNIT_81=obogram.out
   export XLFUNIT_82=obogram.bin
   export XLFUNIT_83=fort.83.oiqc
   export XLFUNIT_84=fort.84.oiqc
   export XLFUNIT_85=fort.85.oiqc

   startmsg
   $EXECcdas2/cdas2_v1_$pgm >$pgm.out 2>errfile
   err=$?;export err;err_chk
   cat $pgm.out >>$pgmout
fi

#
#  6.  ssi
#
if [ $restart_step -le 6 ] ; then

   pgm=ssi
   msg=" `date` -- $pgm started "
   postmsg "$jlogfile" "$msg"

   # T62 L28 values
   JCAP=62
   LATG=94
   LONF=192
   LEVS=28
   NITER=100

   NLATH=`expr $LATG \/ 2 + 1`
   cat <<EOF >$pgm.parm
&NAMANAL
      JCAP=$JCAP,NLATH=$NLATH,NLON=$LONF,NSIG=$LEVS,
      niter=$NITER,miter=1,
      a=.25,.33,.42,.45,ampdivt=.7,dampdivt=.8,grosst=10.,grossst=10.,
      grossw=10.,grossp=10.,grossq=5.,grosspw=10.,
/
EOF

   rm -f sanl
   undef_XLFUNIT

   export XLFUNIT_30=oiqc.anl.bufr
   export XLFUNIT_35=oldsges
   export XLFUNIT_36=oldsanl
   export XLFUNIT_37=oldbges
   export XLFUNIT_47=$FIXcdas2/cdas2_v1_divterrs2812645
   export XLFUNIT_48=$FIXcdas2/cdas2_v1_v28newx
   export XLFUNIT_49=$FIXcdas2/cdas2_v1_eofs28126
   export XLFUNIT_51=sanl
   export XLFUNIT_61=fort.61
   export XLFUNIT_98=scratch3
   export XLFUNIT_81=fort.81.ssi
   export XLFUNIT_82=fort.82.ssi
   export XLFUNIT_83=fort.83.ssi
   export XLFUNIT_84=fort.84.ssi
   export XLFUNIT_85=fort.85.ssi

   startmsg
   $EXECcdas2/cdas2_v1_$pgm <$pgm.parm >$pgm.out 2>errfile
   err=$?;export err; err_chk

   rm -f fort.61 scratch3

   cat $pgm.out >>$pgmout
fi

#
# 7.  sfc .. creates sfc.anl
#

if [ $restart_step -le 7 ] ; then

   pgm=sfc
   msg=" `date` -- $pgm started "
   postmsg "$jlogfile" "$msg"

   # DATE CHECK of sanl produced by ssi
   
   export XLFUNIT_11=sanl
   
   startmsg
   $EXECcdas2/cdas2_v1_sigdate >date.out
   read ndate fhour <date.out
   if [ "$fhour" -ne 0 ] ; then
      msg="date check failed: sanl fhour not zero" 
      postmsg "$jlogfile" "$msg"
      exit 8
   fi

   if [ "$ndate" != $adate ] ; then
      msg="date check failed: sanl-$ndate vs $adate" 
      postmsg "$jlogfile" "$msg"
      exit 8
   fi

   #
   #  The following surface file name specification is site dependent
   #

   FNTSFA=$sst
   FNSCVA=$snow
   FNACNA=$ice
   year=`echo $adate | cut -c1-4`
   month=`echo $adate | cut -c5-6`
   day=`echo $adate | cut -c7-8`
   hour=`echo $adate | cut -c9-10`
   undef_XLFUNIT

   echo "&NAMMAIN"						> $pgm.parm
   echo " IY=$year,IM=$month,ID=$day,IH=$hour,FH=0.,"		>>$pgm.parm
   echo "/"							>>$pgm.parm
   echo "&NAMSFC"						>>$pgm.parm
   echo " FNBGSI='oldbges'"					>>$pgm.parm
   echo " FNBGSO='sfc.anl'"					>>$pgm.parm
   echo " FNOROG='$FIXcdas2/cdas2_v1_orogrd.smth',"		>>$pgm.parm
   echo " FNMASK='$FIXcdas2/cdas2_v1_slmsk',"			>>$pgm.parm
   echo " FNGLAC='$FIXcdas2/cdas2_v1_clim.glacier',"		>>$pgm.parm
   echo " FNMXIC='$FIXcdas2/cdas2_v1_clim.maxice',"		>>$pgm.parm
   echo " FNTSFC='$FIXcdas2/cdas2_v1_clim.sst',"			>>$pgm.parm
   echo " FNWETC='                                  ',"		>>$pgm.parm
   echo " FNSNOC='$FIXcdas2/cdas2_v1_clim.snow',"			>>$pgm.parm
   echo " FNZORC='$FIXcdas2/cdas2_v1_clim.sibrough',"		>>$pgm.parm
   echo " FNALBC='$FIXcdas2/cdas2_v1_clim.matthewalb',"		>>$pgm.parm
   echo " FNAISC='$FIXcdas2/cdas2_v1_clim.ice',"			>>$pgm.parm
   echo " FNPLRC='$FIXcdas2/cdas2_v1_clim.sibresis',"		>>$pgm.parm
   echo " FNTG3C='$FIXcdas2/cdas2_v1_clim.tg3',"			>>$pgm.parm
   echo " FNSCVC='                                   ',"	>>$pgm.parm
   echo " FNSMCC='$FIXcdas2/cdas2_v1_clim.deepsoil',"		>>$pgm.parm
   echo " FNSTCC='                                   ',"	>>$pgm.parm
   echo " FNACNC='                                   ',"	>>$pgm.parm
   echo " FNTSFA='$FNTSFA',"					>>$pgm.parm
   echo " FNAISA='                                   ',"	>>$pgm.parm
   echo " FNSNOA='                                   ',"	>>$pgm.parm
   echo " FNSCVA='$FNSCVA',"					>>$pgm.parm
   echo " FNACNA='$FNACNA',"					>>$pgm.parm
   echo "/"      >>$pgm.parm

   [ -f sfc.anl ] && rm sfc.anl

   startmsg
   $EXECcdas2/cdas2_v1_$pgm <$pgm.parm >$pgm.out 2>errfile
   err=$?; export err; err_chk
   cat $pgm.out >>$pgmout

#  7.5 Soil wetness adjustment
#
# note: converted code to read precip_adj to read single precip wgrib output 5/2004
#

 # find number of the current pentad
   nnumm=`grep -n "$month$day" $FIXcdas2/cdas2_v1_pentads | cut -d':' -f1`

 # find previous pentad
   if [ $nnumm -eq 1 ] ; then
      nnumm=73
      pyyyy=$(( $year - 1 ))
   else
      nnumm=$(( $nnumm - 1 ))
      pyyyy=$year
   fi
 # now, pyyyy, nnumm = year and pentad number of previous pentad

 # find start and finish of the previous pentad
   nams=`sed -n "$nnumm p" $FIXcdas2/cdas2_v1_pentads | cut -d' ' -f1`
   namf=`sed -n "$nnumm p" $FIXcdas2/cdas2_v1_pentads | sed 's/.* //g'`
   pdate=$pyyyy$nams

 # extract obs precip

   $wgrib -s -4yr $obs_precip | grep ":PRATE:" | grep ":d=$pdate" | \
   $wgrib -i -s -4yr $obs_precip -o obs_precip

   if [ ! -s obs_precip ] ; then
 # Check to see for how many days since the pentad data has been missing
 # The job will be aborted after it reaches the max_nopentad day

       iday=0
       nday=$pyyyy$namf
       while [ $nday -le $PDY ]
       do
          iday=`expr $iday + 1`
          nday=`/nwprod/util/ush/finddate.sh $nday d+1`
       done

       if [ $iday -ge $max_nopentad ]
       then
          msg="The obs precip data has been missing for over the \
               maximum allowed days--$max_nopentad days! Please \
               check with CPC for the proper data"
          postmsg "$jlogfile" "$msg"
	  echo "No Observation Precipitation data"
	  exit 9
       else
          echo "No obs precip for $ppdate"
          echo "CDAS2 will continue without obs precip surface analysis"
	  export PRECIP_SOIL_ADJ=no
       fi
   fi

 # extract mdl precip

   $wgrib -4yr $mdl_precip | sort -t: -k3,3 -k5,5 | \
   $wgrib -i $mdl_precip -grib -o mdl_precip.grb

   $wgrib -4yr $mdl_precip | sort -t: -k3,3 -k5,5 | \
   $wgrib -i $mdl_precip -o mdl_precip

   if [ $PRECIP_SOIL_ADJ = yes ] ; then
      pgm=precipadj
      msg="`date` --$pgm started"
      postmsg "$jlogfile" "$msg"

      undef_XLFUNIT
      export XLFUNIT_10=sfc.anl
      export XLFUNIT_11=obs_precip
      export XLFUNIT_12=mdl_precip
      export XLFUNIT_51=sfc.anl.precip_adj
      export XLFUNIT_52=precipadj.grib

      startmsg
      $EXECcdas2/cdas2_v1_$pgm >$pgm.out 2>errfile
      err=$?; export err; err_chk

      if [ $err -eq 0 ]; then
          mv sfc.anl sfc.anl.noprecip_adj
          mv sfc.anl.precip_adj sfc.anl
      fi
  
      cat $pgm.out >>$pgmout
   fi
fi
#
#  8.  fcst
#
if [ $restart_step -le 8 ] ; then

   pgm=fcst
   msg="`date` --$pgm started"
   postmsg "$jlogfile" "$msg"


   cp sanl sigit
   cp sfc.anl sfci
   cp sigit sigitdt
   
   #  Forecast parameters

   swhr_gbl=${SHORT_WAVE_INTVL:-1}
   lwhr_gbl=${LONG_WAVE_INTVL:-1}
   
   INCHOUR=6
   PRTHOUR=6
   ENDHOUR=$INCHOUR
   DELTAT=${DELTAT:-1800}
   INTHOUR=${INTHOUR:-0}
   HDIFF_Q_T_RATIO=${HDIFF_Q_T_RATIO:-1.0}
   
   echo "&NAMSMF"                                >$pgm.parm
   echo " NUM(5)=0, "                            >>$pgm.parm
   echo " CON(1)=$DELTAT.,"                      >>$pgm.parm
   echo " CON(3)=0., "                           >>$pgm.parm
   echo " CON(4)=$swhr_gbl.,"                    >>$pgm.parm
   echo " CON(5)=$lwhr_gbl., "                   >>$pgm.parm
   echo " CON(7)=$INCHOUR., "                    >>$pgm.parm
   echo " CON(9)=$PRTHOUR., "                    >>$pgm.parm
   echo " CON(17)=$ENDHOUR.,"                    >>$pgm.parm
   echo " CON(6)=$INTHOUR., "                    >>$pgm.parm
   echo " CON(8)=$HDIFF_Q_T_RATIO,"              >>$pgm.parm
   echo " ICEN2=3, IGEN=195,"                    >>$pgm.parm
   echo "/"                                      >>$pgm.parm

   #
   #  INCHOUR Forecast
   #
   touch sig.ft0 sfc.ft0 flx.ft0 dg3.ft0 znl.ft0
   rm sig.ft* sfc.ft* flx.ft* dg3.ft* znl.ft*
   undef_XLFUNIT
   
   export XLFUNIT_11=sigit
   export XLFUNIT_12=sigitdt
   export XLFUNIT_14=sfci
   export XLFUNIT_15=$FIXcdas2/cdas2_v1_co2con
   [ -f heatrate ] && rm heatrate
   export XLFUNIT_21=heatrate
   export XLFUNIT_24=$FIXcdas2/cdas2_v1_mtnvar
   export XLFUNIT_43=$FIXcdas2/cdas2_v1_tune_nmax_1979.ewmrge.sngl.dbl
   export XLFUNIT_48=$FIXcdas2/cdas2_v1_gcmo3.asc
   export XLFUNIT_49=$FIXcdas2/cdas2_v1_albaer.snl
   export XLFUNIT_51=sig.ft06
   export XLFUNIT_52=sigdt
   export XLFUNIT_53=sfc.ft06
   export XLFUNIT_61=znl.ft00.native
   export XLFUNIT_62=flx.ft00.grib
   export XLFUNIT_63=flx.ft06.grib
   export XLFUNIT_64=znl.ft06.native
   export XLFUNIT_65=dg3.ft00.grib
   export XLFUNIT_66=dg3.ft06.grib
   export XLFUNIT_67=ken.ft06.native
   export XLFUNIT_81=diabanl
   export XLFUNIT_82=adiages
   export XLFUNIT_83=fullges
   export XLFUNIT_92=diagscr
   export XLFUNIT_98=radscr
   export XLFUNIT_99=w3out

   echo "`date` - Forecast" >>$STATUS

   startmsg
   $EXECcdas2/cdas2_v1_$pgm <$pgm.parm >$pgm.out 2>errfile
   err=$?;export err; err_chk

   cat $pgm.out >>$pgmout
   #
   # append precipadj grib file to the flx file
   #
   if [ $PRECIP_SOIL_ADJ = yes ] ; then
      cat precipadj.grib >>flx.ft06.grib
   fi
fi

#
#  9. Post processing of analysis (PGB)
#
if [ $restart_step -le 9 ] ; then

   pgm=pgb
   msg="`date` --$pgm started"
   postmsg "$jlogfile" "$msg"

   echo "&NAMPGB" >$pgm.parm
   echo "   ICEN2=3,">>$pgm.parm
   echo "   IGEN=195,">>$pgm.parm
   echo "/" >>$pgm.parm

   [ -f pgb.anl.grib ] && rm pgb.anl.grib 
   [ -f pgb.ft06.grib ] && rm pgb.ft06.grib

   undef_XLFUNIT
   export XLFUNIT_11=sanl
   export XLFUNIT_51=pgb.anl.grib

   startmsg
   $EXECcdas2/cdas2_v1_$pgm <$pgm.parm >$pgm.out 2>errfile
   err=$?;export err; err_chk 
   cat $pgm.out >>$pgmout

   undef_XLFUNIT
   export XLFUNIT_11=sig.ft06
   export XLFUNIT_51=pgb.ft06.grib

   startmsg
   $EXECcdas2/cdas2_v1_$pgm <$pgm.parm >$pgm.out 2>errfile
   err=$?;export err; err_chk 
   cat $pgm.out >>$pgmout

fi

#
# 10. Post processing of (SGB)
#

if [ $restart_step -le 10 ] ; then

   pgm=sgb
   msg="`date` --$pgm started"
   postmsg "$jlogfile" "$msg"

   echo "&NAMSGB" >$pgm.parm
   echo "   ICEN2=3,">>$pgm.parm
   echo "   IGEN=195,">>$pgm.parm
   echo "/" >>$pgm.parm

   [ -f sgb.anl.grib  ] && rm sgb.anl.grib 
   [ -f sgb.ft06.grib  ] && rm sgb.ft06.grib 

   undef_XLFUNIT
   export XLFUNIT_11=sanl
   export XLFUNIT_51=sig.anl.grib

   startmsg
   $EXECcdas2/cdas2_v1_$pgm <$pgm.parm >$pgm.out 2>errfile
   err=$?;export err; err_chk
   cat $pgm.out >>$pgmout

   undef_XLFUNIT
   export XLFUNIT_11=sig.ft06
   export XLFUNIT_51=sig.ft06.grib

   startmsg
   $EXECcdas2/cdas2_v1_$pgm <$pgm.parm >$pgm.out 2>errfile
   err=$?;export err; err_chk
   cat $pgm.out >>$pgmout
fi

#
# 11. Postvents
#
if [ $restart_step -le 11 ] ; then

   pgm=postvents
   msg="`date` --$pgm started"
   postmsg "$jlogfile" "$msg"

   [ -f pvents.anl.bufr ] && rm pvents.anl.bufr 

   undef_XLFUNIT
   export XLFUNIT_20=oiqc.anl.bufr
   export XLFUNIT_21=sanl
   export XLFUNIT_51=GFIT.anl.jwpk
   export XLFUNIT_52=AFIT.anl.jwpk
   export XLFUNIT_53=dummy
   export XLFUNIT_50=pvents.anl.bufr
   export XLFUNIT_54=dummy2
   
   startmsg
   $EXECcdas2/cdas2_v1_$pgm >$pgm.out 2>errfile
#   err=$?;export err; err_chk
   err=$?;export err; 
   cat $pgm.out >>$pgmout
fi

#
# 12. copy results to $COMOUT
#

if [ $restart_step -le 12 -a $SENDCOM = YES ] ; then

   # files to copy to $COMOUT

   $EXECcdas2/cdas2_v1_sig2sig -toR4 sfc.anl $sfcanl
   $EXECcdas2/cdas2_v1_sig2sig -toR4 sanl $sanl
   $EXECcdas2/cdas2_v1_sig2sig -toR4 sig.ft06 $sges
   $EXECcdas2/cdas2_v1_sig2sig -toR4 sfc.ft06 $bges

   # files to copy to $COMARC

   cp $prep_000 $prep_pre
   [ -f  $prep_pre.gz ] && rm $prep_pre.gz
   gzip $prep_pre

   cp oiqc.anl.bufr $prepoiqc
   [ -f $prepoiqc.gz ] && rm $prepoiqc.gz
   gzip $prepoiqc

   cp pvents.anl.bufr $prepqm
   [ -f $prepqm.gz ] && rm $prepqm.gz
   gzip $prepqm

   cp $sst $sstout
   cp $snow $snowout
   cp $ice $iceout

   cp pgb.anl.grib  $pgbf00
   cp pgb.ft06.grib $pgbf06
   cp flx.ft00.grib $flxf00
   cp flx.ft06.grib $flxf06
   cp dg3.ft00.grib $dg3f00
   cp dg3.ft06.grib $dg3f06
   cp sig.anl.grib $sgbf00
   cp sig.ft06.grib $sgbf06
   cp znl.ft00.native $znlf00
   cp znl.ft06.native $znlf06

   cp cqb.anl.ascii $cqb
   [ -f $cqb.gz ] && rm $cqb.gz
   gzip $cqb

   cp cqe.anl.ascii $cqe
   [ -f $cqe.gz ] && rm $cqe.gz
   gzip $cqe 

   cp cqt.anl.ascii $cqt
   [ -f $cqt.gz ] && rm $cqt.gz
   gzip $cqt

   cp $sfcanl $sfcanl_arc
   cp $sanl $sanl_arc
   cp $sges $sges_arc
   cp $bges $bges_arc
   cat $pgmout >stdout1.anl.ascii
   cp stdout1.anl.ascii $txtout
   [ -f $txtout.gz ] && rm $txtout.gz
   gzip $txtout

   if [ "$CHGRP_RSTPROD" = 'YES' ]; then
       chgrp rstprod $prepoiqc.gz $prepqm.gz $prep_pre.gz
       errch=$?
       if [ $errch -eq 0 ]; then
          chmod 640 $prepoiqc.gz $prepqm.gz $prep_pre.gz
       else
	  for file in $prepoiqc.gz $prepqm.gz $prep_pre.gz
	  do
             cp /dev/null $file
          done
          warning=yes
       fi
   fi

fi