
################################################################################
#
# Name : dgex_getgfsbc.sh           Author : Eric Rogers
#
# Abstract: This script copies sigma coefficient files from the specified GFS
#           run to the local directory for use as boundary conditions in the
#           NDAS/NAM. This script also returns the where_gfs_ran.  
#
# Log:
#
# 2004-03-30 : E. Rogers created new version for DGEX
# 2010-02-17 : E. Rogers generalized script to work for any GFS resolution
#              and to use threaded version of chgres
#
#             
# Usage:
#
# getgfsbc_nam.sh $DATE $IHFIN
#
# DATE  = 10 digit starting date date (e.g., 1998061900)
# IHFIN = Last forecast hour to be copied
#
set -x

if [ $# -lt 2 ] ; then
   echo "Usage: $0 DATE IHFIN"
   exit 8
fi

gfsstart=$1
ifin=$2
ifhr=078
##ifhr_6hold=06
##ifhr_12hold=12
##ifhr_18hold=18
let "ifhr_3hold=03+ifhr"
let "ifhr_6hold=06+ifhr"
let "ifhr_12hold=12+ifhr"
let "ifhr_18hold=18+ifhr"

GFS3HOLD=`/nwprod/util/exec/ndate -3 $gfsstart`
GFS6HOLD=`/nwprod/util/exec/ndate -6 $gfsstart`
GFS12HOLD=`/nwprod/util/exec/ndate -12 $gfsstart`
GFS18HOLD=`/nwprod/util/exec/ndate -18 $gfsstart`

echo $GFS6HOLD > gfs6hold.date
PDYgfsold=`cut -c 1-8 gfs6hold.date`
HHgfsold=`cut -c 9-10 gfs6hold.date`

echo $GFS12HOLD > gfs12hold.date
PDY12gfsold=`cut -c 1-8 gfs12hold.date`
HH12gfsold=`cut -c 9-10 gfs12hold.date`

echo $GFS18HOLD > gfs18hold.date
PDY18gfsold=`cut -c 1-8 gfs18hold.date`
HH18gfsold=`cut -c 9-10 gfs18hold.date`

let "ineed=ifin/3+1"
echo $ineed
let "ineed=ineed-27"

rm fcsthour.bclist

# use 00-h GFS coefficient file to get GFS file specs for chgres parameters

gfs_06hold=/com/gfs/${gfsenvir}/gfs.${PDYgfsold}/gfs.t${HHgfsold}z.sf00
gfs_12hold=/com/gfs/${gfsenvir}/gfs.${PDY12gfsold}/gfs.t${HH12gfsold}z.sf00

if [ -s $gfs_06hold ]
then
   gfs00h=$gfs_06hold
else
   if [ -s $gfs_12hold ]
   then
     gfs00h=$gfs_12hold
   else
     err_exit
   fi
fi
     
jcap=`/nwprod/exec/global_sighdr ${gfs00h} JCAP`
latb=`/nwprod/exec/global_sighdr ${gfs00h} LATB`
lonb=`/nwprod/exec/global_sighdr ${gfs00h} LONB`
ntrac=`/nwprod/exec/global_sighdr ${gfs00h} NTRAC`
idvc=`/nwprod/exec/global_sighdr ${gfs00h} IDVC`
idsl=`/nwprod/exec/global_sighdr ${gfs00h} IDSL`
levs=`/nwprod/exec/global_sighdr ${gfs00h} LEVS`

while [ $ifhr -le $ifin ] ; do

  /nwprod/util/exec/ndate $ifhr $gfsstart > valdate
  VDATE=`cut -c 1-10 valdate`

  cp /com/gfs/${gfsenvir}/gfs.${PDYgfsold}/gfs.t${HHgfsold}z.sf${ifhr_6hold} gfsbc${ifhr}_ops
  err1=$?

  if [ $err1 -ne 0 ] ; then
    cp /com/gfs/${gfsenvir}/gfs.${PDY12gfsold}/gfs.t${HH12gfsold}z.sf${ifhr_12hold} gfsbc${ifhr}_ops
    err2=$?
    if [ $err2 -ne 0 ] ; then
      cp /com/gfs/${gfsenvir}/gfs.${PDY18gfsold}/gfs.t${HH18gfsold}z.sf${ifhr_18hold} gfsbc${ifhr}_ops
      err3=$?
##      if [ $err3 -ne 0 ] ; then
##        $utilscript/getges.sh -t sigcur -v $VDATE -e $gfsenvir gfsbc${icnt}_ops
##      fi
    fi
  fi

  globres=`/nwprod/exec/global_sighdr gfsbc${ifhr}_ops JCAP`
  err1=$?

  if [ $err1 -eq 0 ] ; then
   if [ $globres -ne $jcap ] ; then
     rm itag
     export CHGRESEXEC=$EXECGLOBAL/global_chgres

export XLSMPOPTS=parthds=32:stack=4000000000

cat > itag << EOF
 &NAMCHG JCAP=${jcap}, LEVS=${levs}, LONB=${lonb}, LATB=${latb},
         NTRAC=${ntrac}, IDVC=${idvc}, IDSL=${idsl},
          /
EOF

     ln -sf gfsbc${ifhr}_ops chgres.inp.sig
     ln -sf /nw${envir}/fix/global_orography.t${jcap}.grb chgres.inp.orogb
     ln -sf /nw${envir}/fix/global_hyblevel.l${levs}.txt chgres.inp.siglevel
     ln -sf /nw${envir}/fix/global_o3clim.txt chgres.inp.o3clim
     ln -sf NULL chgres.inp.sfc
     ln -sf /nw${envir}/fix/global_slmask.t${jcap}.grb chgres.inp.slmgb
     ln -sf /nw${envir}/fix/global_lonsperlat.t${jcap}.txt chgres.inp.lonsperlat
     ln -sf gfsbc${ifhr}_ops_${jcap} chgres.out.sig
     ln -sf sfcf03a chgres.out.sfc
     $EXECGLOBAL/global_chgres < itag > out
     mv gfsbc${ifhr}_ops_${jcap} gfsbc${ifhr}_ops
     rm chgres.inp.sig chgres.inp.orogb chgres.inp.siglevel chgres.inp.o3clim chgres.inp.sfc 
     rm chgres.inp.slmgb chgres.inp.lonsperlat chgres.out.sfc
    fi
    echo ${ifhr} >> fcsthour.bclist
  fi
  
  let "ifhr=ifhr+3"
  let "ifhr_6hold=ifhr_6hold+3"
  let "ifhr_12hold=ifhr_12hold+3"
  let "ifhr_18hold=ifhr_18hold+3"

  if [ $ifhr -lt 10 ] ; then
    ifhr=00${ifhr}
  fi

  if [ $ifhr -gt 10 -a $ifhr -le 100 ] ; then
    ifhr=0${ifhr}
  fi

  if [ $ifhr_6hold -eq 9 ] ; then
   ifhr_6hold=09
  fi

done

wc -l < fcsthour.bclist > listnum

cat listnum fcsthour.bclist > input.bctend.fcstlist


