#! /bin/ksh
################################################################################
# UNIX Script Documentation Block                                              #
#                                                                              #
# Script name:         exsref_wrfbufr.sh.sms                                   #
# Script description:  Runs WRF-NMM or WRF-EM bufr sounding and Gempak output  #
#                                                                              #
# Author:        Jun Du       Org: NP22         Date: 2007-07-30               #
#                                                                              #
# Script history log:                                                          #
# 2007-07-30  Jun Du  - initial operational script and implementation          #
# 2008-07-18  Jun Du -  (1) upgrade to new mpiio version; (2) breakout         #
#                       class1 bufr file into individual stations;             #
#                       (3) separate bufr and Gempak directories               #
# 2011-08-03  Jun Du -  (1) updated codes for NMMv3.3 and ARWv3.3;             #
#                       (2) generalized codes to apply to NMMB model too       #
#                                                                              #
################################################################################
set -x

msg="JOB $job FOR SREF-${MODEL}"
postmsg "$jlogfile" "$msg"

# ------------------------------------------------------------------------------
# DIRECTORY WHERE THE BUFR-JOB IS DONE
# ------------------------------------------------------------------------------
cd $DATA

sh $utilscript/setup.sh

# -----------------------------------------------------------------------------
# WRFBUFR RELATED STUFF
# -----------------------------------------------------------------------------
if [ $MODEL = NMM ];then CORE=nmm;fi
if [ $MODEL = ARW ];then CORE=em;fi
if [ $MODEL = NMB ];then CORE=nmb;fi
if [ $MEMBER = ctl ];then PAIR=ctl;fi
if [ $MEMBER = p01 ];then PAIR=p1;fi
if [ $MEMBER = n01 ];then PAIR=n1;fi
if [ $MEMBER = p02 ];then PAIR=p2;fi
if [ $MEMBER = n02 ];then PAIR=n2;fi
if [ $MEMBER = p03 ];then PAIR=p3;fi
if [ $MEMBER = n03 ];then PAIR=n3;fi
export tmmark=tm00

YYYY=`echo $PDY | cut -c1-4`
MM=`echo $PDY | cut -c5-6`
DD=`echo $PDY | cut -c7-8`
STARTDATE=${YYYY}-${MM}-${DD}_${CYC}:00:00

INCRmin=`expr ${INCR} \* 60 `

fhr=00
while [ $fhr -le $LENGTH ]
do

min=`expr ${fhr} \* 60 `

date=`/nwprod/util/exec/ndate $fhr $PDY$CYC`
wyr=`echo $date | cut -c1-4`
wmn=`echo $date | cut -c5-6`
wdy=`echo $date | cut -c7-8`
whr=`echo $date | cut -c9-10`
timeform=${wyr}"-"${wmn}"-"${wdy}"_"${whr}":00:00"

aftdate=`/nwprod/util/exec/ndate +$INCR $date`
aftyr=`echo $aftdate | cut -c1-4`
aftmn=`echo $aftdate | cut -c5-6`
aftdy=`echo $aftdate | cut -c7-8`
afthr=`echo $aftdate | cut -c9-10`
afttimeform=${aftyr}"-"${aftmn}"-"${aftdy}"_"${afthr}":00:00"

predate=`/nwprod/util/exec/ndate -$INCR $date`
preyr=`echo $predate | cut -c1-4`
premn=`echo $predate | cut -c5-6`
predy=`echo $predate | cut -c7-8`
prehr=`echo $predate | cut -c9-10`
pretimeform=${preyr}"-"${premn}"-"${predy}"_"${prehr}":00:00"
if [ $fhr -eq 00 ] ; then
 pretimeform=$timeform
fi

# check if a specific fcst is done
if [ $CORE = nmm -o $CORE = em ];then
if [ $fhr -eq $LENGTH ];then
 until test -f $FCSTDIR/fcst.$MEMBER.done
 do
      sleep 600
 done
else
 until test -f $FCSTDIR/wrfout_d01_${afttimeform}
 do
      sleep 600
 done
fi
fi

if [ $CORE = nmb ];then
 until test -f $FCSTDIR/fcstdone.0${fhr}h_00m_00.00s
 do
      sleep 600
 done
fi

if [ $CORE = nmm -o $CORE = em ];then
 ln -sf $FCSTDIR/wrfout_d01_${timeform}    wrfout_d01_${timeform}
 ln -sf $FCSTDIR/wrfout_d01_${pretimeform} wrfout_d01_${pretimeform}
 OUTFIL=wrfout_d01_${timeform}
 prefilename=wrfout_d01_${pretimeform}
fi
if [ $CORE = nmb ];then
 ln -sf $FCSTDIR/nmm_b_history_nemsio.0${fhr}h_00m_00.00s nmm_b_history_nemsio.0${fhr}h_00m_00.00s
 OUTFIL=nmm_b_history_nemsio.0${fhr}h_00m_00.00s
fi

if [ $CORE = nmm ] ; then 
 POSTMOD=NCEP
fi
if [ $CORE = em ] ; then 
 POSTMOD=NCAR
fi
if [ $CORE = nmb ] ; then 
 POSTMOD=NMMB
fi

if [ $CORE = nmm -o $CORE = em ];then
cat > itag <<EOF
$OUTFIL
$POSTMOD
binary
$STARTDATE
1
$INCR
$fhr
$prefilename
EOF
fi

if [ $CORE = nmb ];then
cat > itag <<EOF
$OUTFIL
$POSTMOD
nemsio
$STARTDATE
1
$INCRmin
$min
EOF
fi

# ----------------------------------------------------------------------------
# RUN BUFR
# ----------------------------------------------------------------------------
rm -f fort.*
export pgm=sref_${MODEL}_bufr
. prep_step

cp $PARMsref/sref_${CORE}_profdat_1444_$RES      profdat
ln -sf profdat       fort.19
ln -sf intermed.bufr fort.79

startmsg
#$EXECsref/sref_bufr < itag > outpost.$wdate
$EXECsref/sref_bufr < itag > outpost.$fhr

mv intermed.bufr intermed.bufr.$fhr
cat intermed.bufr.$fhr >> total.bufr
#rm -f intermed.bufr.$fhr

export err=$?; err_chk
echo "done executing the bufr" > $DATA/bufrdone${fhr}

fhr=`expr $fhr + $INCR`
if [ $fhr -lt 10 ];then fhr=0$fhr;fi

done

# Save the total bufr files to /com area for Geoff Manikin:
mkdir -p $COMOUT/bufr
cp total.bufr $COMOUT/bufr/${CORE}_${PAIR}.t${CYC}z.profilm.${tmmark}

#------------------
# run bufr sounding
#------------------
export XLFRTEOPTS="unit_vars=yes"
cp $PARMnam/nam_sndp.parm.mono              sndp.parm
cp $PARMnam/nam_bufr.tbl                    eta_bufr.tbl
cp $PARMsref/sref_${MODEL}_modtop.parm          modtop.parm
export XLFUNIT_11=sndp.parm
export XLFUNIT_32=eta_bufr.tbl
export XLFUNIT_66=total.bufr
export XLFUNIT_78=class1.bufr
 
$EXECsref/sref_${CORE}_sndp < modtop.parm > sndp.out

#----------------------------
# breakout bufr per station
#----------------------------
cp class1.bufr $COMOUT/bufr/${CORE}_${PAIR}.t${CYC}z.class1.bufr.${tmmark}

mkdir -p $COMOUT/bufr/${CORE}_${PAIR}
cat <<EOF > stnmlist_input
1
class1.bufr
$COMOUT/bufr/${CORE}_${PAIR}/${CORE}_${PAIR}
EOF

export XLFUNIT_20=class1.bufr
date
$EXECnam/nam_stnmlist < stnmlist_input > nam_stnmlist.out

export UCASE_MODEL=`echo $MODEL | tr 'a-z' 'A-Z'`

if [ "$SENDDBN" = 'YES' ]; then
  $DBNROOT/bin/dbn_alert MODEL SREF_BUFR${UCASE_MODEL} $job \
    $COMOUT/bufr/${CORE}_${PAIR}.t${CYC}z.class1.bufr.${tmmark}
fi

############## WANG ###################################
# Tar and gzip the individual bufr files and send them to /com
cd ${COMOUT}/bufr/${CORE}_${PAIR}
tar -cf - . | /usr/bin/gzip > ../${CORE}_${PAIR}.${cycle}.bufrsnd.tar.gz
cd $DATA

#Send the alerts
if test "$SENDDBN" = 'YES'
  then
   $DBNROOT/bin/dbn_alert MODEL SREF_BUFRSND_TAR $job $COMOUT/bufr/${CORE}_${PAIR}.${cycle}.bufrsnd.tar.gz
fi
############## WANG ############################################

echo "sndp done!"

#------------------
# run GEMPAK
#------------------
mkdir -p $COMOUT/gempak
PARMgempak1=/nwprod/gempak/nawips1/gempak/tables/pack
# PARMgempak is the same as PARMgempak1
. /nwprod/gempak/.gempak
/bin/rm -f *.nts
        
namsnd << EOF > /dev/null
 SNBUFR   = class1.bufr
 SNOUTF   = bufr.snd
 SFOUTF   = bufr.sfc+
 SNPRMF   = $PARMgempak/sneta.prm
 SFPRMF   = $PARMgempak/sfeta.prm
 TIMSTN   = 88/1444
        
l
ru
exit
EOF

mv bufr.snd      $COMOUT/gempak/${CORE}_${PAIR}.${PDY}${CYC}.snd
mv bufr.sfc      $COMOUT/gempak/${CORE}_${PAIR}.${PDY}${CYC}.sfc
mv bufr.sfc_aux  $COMOUT/gempak/${CORE}_${PAIR}.${PDY}${CYC}.sfc_aux

if [ "$SENDDBN" = 'YES' ]; then
  $DBNROOT/bin/dbn_alert MODEL SREF_SND${UCASE_MODEL} $job \
    $COMOUT/gempak/${CORE}_${PAIR}.${PDY}${CYC}.snd
  $DBNROOT/bin/dbn_alert MODEL SREF_SFC${UCASE_MODEL} $job \
    $COMOUT/gempak/${CORE}_${PAIR}.${PDY}${CYC}.sfc
  $DBNROOT/bin/dbn_alert MODEL SREF_SFC${UCASE_MODEL} $job \
    $COMOUT/gempak/${CORE}_${PAIR}.${PDY}${CYC}.sfc_aux
fi

    
exit
# ------------------------------------------------------------------------------
#                                             END
# -----------------------------------------------------------------------------
