#!/bin/csh -f
#
#       type of rawins job
#
   set Submit  = 0           # 0 = no autobogus; 1 = autobogus 1; 2 = autobogus 2
#
   set INOBS   = ARCHIVE
#  set INOBS   = UNIOBS
#
#  set SFCsw   = NoSFC
   set SFCsw   = SFC
#
   set BOGUSsw = NoBOG
#  set BOGUSsw = Konly
#  set BOGUSsw = Nonly
#  set BOGUSsw = KandN
#
#       locations for datasets
#
   set InDatg  =  ../REGRID/regridder/REGRID_DOMAIN1
#
#
#       Find MSS names for observations from the following catalogs:
#            upper air: /fs/othrorgs/home0/mesouser/catalog/catalog.raob
#              surface: /fs/othrorgs/home0/mesouser/catalog/catalog.sfc
#
if ( $INOBS == ARCHIVE ) then
   set IfUni = F
   set InRaobs   =  ( RAOBS_A )                          
   if ( $SFCsw  == SFC ) then
      set InSfc6h   =  ( SFC6HR_A )   # see catalog.sfc, list A
      set InSfc3h   =  ( SFC3HR_A )   # see catalog.sfc, list B
   endif
else
   set IfUni = T
   set upa_unidate = ( xxxxxxxx )        # YYMMDDHH
   set sfc_unidate = ( xxxxxxxx )        # YYMMDDHH
endif
#
#    ------ RAWINS PARAMETER STATEMENT ---------------------------
#
if ( -e src/paramdim.incl ) rm src/paramdim.incl
cat > src/paramdim.incl << EOF
C
C  IMX,JMX, MUST CORRESPOND TO THE DIMENSIONS IN THE INPUT FILE.  THESE
C  WILL BE THE EXPANDED DIMENSIONS IF THIS IS THE COARSE GRID, AND THE
C  EXPANDED OPTION WAS SELECTED.
C
C  LMX MUST BE GREATER THAN OR EQUAL TO THE MAXIMUM NUMBER OF LEVELS
C  (PRESSURE LEVELS + SURFACE).
C
      PARAMETER(IMX=35,JMX=41,LMX=22)
C------------------------------------------------------------------
EOF
#
#       parameters for rawins, user adjustable for core constraints
#
if (-e src/paramirb.incl ) rm src/paramirb.incl
cat > src/paramirb.incl << EOF
C-----------------------------------------------------------------------
C   IRB MUST BE AT LEAST THE MAXIMUM NUMBER OF RAOB STATIONS
C
      PARAMETER(IRB=500)
EOF
if (-e src/paramirs.incl ) rm src/paramirs.incl
cat > src/paramirs.incl << EOF
C-----------------------------------------------------------------------
C   IRS MUST BE AT LEAST THE MAXIMUM NUMBER OF SFC. + RAOB STATIONS
C
      PARAMETER(IRS=3000)
EOF
#
#    ------ RAWINS LOCAL NAMELIST ----------------------------------
#         (you need not change anything of the form: ${____})
#         (Comments in the namelist are removed during execution)
#
if ( -e rawins.namelist ) rm rawins.namelist
cat << End_Of_Namelist | sed -e 's/#.*//; s/  *$//' > ./rawins.namelist
 &LOCMIF #---------LOCAL NAMELIST FOR PROGRAM RAWINS--------------------
 NNEWPL = 0,    #  NUMBER OF NEW PRESSURE LEVELS
 GNLVL = 975.,950.,925.,900.,800.,750.,650.,600.,550.,450.,350.,
 #                    PRESSURES AT THE NEW PRESSURE LEVELS (BOTTOM TO TOP)
 #
 #----------OBJECTIVE ANALYSES OPTIONS FOLLOW---------------------------
 IWTSCM = 3,    # 1:  CIRCULAR WEIGHTING FUNCTION (CRESSMAN)
 #              # 2:  ELLIPTICAL WEIGHTING FUNCTION
 #              # 3:  BANANA-SHAPED WEIGHTING FUNCTION
 #              # 4:  MULTIQUADRIC INTERPOLATION
 IFAC = 1,      # 1:  FIRST-GUESS FIELD EXISTS, RAWINS ALTERS IT.
 #              # 2:  FIRST-GUESS FIELD DOES NOT EXIST, RAWINS CREATES IT.
 IWIND= 2,      # 1:  USE SURFACE GEOSTROPHIC WIND FOR SFC WIND 1ST GUESS
 #                    IF USING NMC/OLD ECMWF 1ST GUESS;
 #                    USE ACTUAL SURFACE WIND IF USING ECTOGA 1ST GUESS
 #              # 2:  USE 1000 MB WIND FOR SURFACE WIND FIRST GUESS
 # 
 #----------DATA INPUT OPTIONS -------------------------------------------
 INDATG= '${InDatg}',     # P-level data file for input (Do not touch).
 UNIOBS=.${IfUni}.,       # TRUE FOR UNIDATA OBS, FALSE FOR ARCHIVED OBS
 #         RWSUBM=0...ONLY ONE SUBMITTAL INTENDED FOR RAWINS
 #         RWSUBM=1...FIRST RAWINS SUBMITTAL--TWO ARE INTENDED
 #         RWSUBM=2...SECOND RAWINS SUBMITTAL
 RWSUBM=${Submit}, #..SET TO 0,1, OR 2
 IUINTVL=12,       # TIME INTERVAL (HOURS) FOR RAOB DATA (USUALLY 12).
 ISFCS3 = T,       # ACQUIRE AND ANALYZE SHIPS AND BUOYS
 ISFCS6 = T,       # ACQUIRE AND ANALYZE SFC LAND DATA
 F4D = F,          # CREATE FDDA VOLUME AT NON-STANDARD TIMES.
 INTF4D = 3,       # TIME INTERVAL FOR FDDA FILE.  IF INTF4D > 3, LAGTEM IS SET
 #                 # TO FALSE AUTOMATICALLY IN THE PROGRAM (i.e. USE TEMPORAL 
 #                 # INTERPOLATION FOR NON-STANDARD TIME FIRST GUESS.)
 LAGTEM = T,       # TRUE--3 HOUR LAG TIME FOR NON-STD TIME 1ST GUESS
 #                   FALSE--TEMPORAL INTERPOLATION FOR NON-STD TIME 1ST GUESS
 NSELIM=F,F,F,F,F,F,F,F,F,F,F,         # DELETE RAOBS-T,F
 NBOGUS=F,F,F,F,F,F,F,F,F,F,F,         # BOGUS STAT-T,F
 KBOGUS=F,F,F,F,F,F,F,F,F,F,F,         # BOGUS PTS-T,F
 # 
 #---------------- DATA QUALITY CONTROL OPTIONS -----------------------
 #       BUDWGT IS A PARAMETER THAT VARIES THE TOLERANCE OF TH BUDDY
 #       CHECK. A VALUE OF 1.0 GIVES AN ESTIMATE OF NORMAL TOLERANCE.
 #       A VALUE > 1.0 INCREASES THE TOLERANCE WHILE A VALUE < 1.0
 #       DECREASES THE TOLERANCE. A 2.0 WOULD REMOVE ONLY HIGHLY
 #       SUSPECT DATA WHILE 0.5 WOULD REMOVE SOME GOOD DATA ALONG
 #       WITH ALL SUSPECT DATA. A VALUE OF 0. OMITS THE BUDDY CHECK.
 #       IF USING AUTOBOGUS (SUBMIT = 1 OR 2), SET BUDWGT TO ZERO.
 BUDWGT=1.25,      #    1.25,
 # 
 #       ERRMX PARAMETERS MAX DIFF ALLOWED BETWEEN FIRST GUESS AND STATION DATA
 #       IF USING BUDDY CHECK (BUDWGT>0.1), ONLY ONE SUBMITTAL IS EXPECTED.  SET
 #       LARGER DEFAULT VALUES FOR ERRMX (SUGGESTED VALUES ARE ERRMXT=15,
 #       ERRMXW=14, AND ERRMXP=8. 
 ERRMXT=12.,       # MAX TEMP DIFF ALLOWED (1ST GUESS MINUS OB)
 #                 # 0Z DATA OVER LOW TERRAIN (<500m) FACTORED BY 1.25
 #                 # 0Z DATA OVER HIHG TERRAIN (>=500m) FACTORED BY 1.75
 #                 # 12Z DATA FACTORED BY 1.5
 #                 # ALL DATA OVER WATER FACTORED BY 0.75
 ERRMXW=14.,       # MAX WIND DIFF ALLOWED (1ST GUESS MINUS OB)
 #                 # DATA LEVEL .LE. 1000.1 IS FACTORED BY 1.25
 #                 # DATA LEVEL ABOVE 500 MB IS FACTORED BY 1.5
 ERRMXP=8.,        # MAX PRES DIFF ALLOWED (1ST GUESS MINUS OB)
 #                 # NO LEVEL OR TERRAIN FACTORING
 # 
 #---------- SET PLOT OPTIONS ------------------------------------------
 #
 IPLOT=F,F,F,F,F,F,F,F,F,F,F,    # PLOT VERTICAL RAOBS (As directed
 #                               # by ISKEWT).
 # 
 ISKEWT=1,                       # Active only if IPLOT = T
 #                               # 1: Skew-T plots.  2: Stuve Diagrams.
 # 
 ABFLAG=T,T,T,T,T,T,T,T,T,T,T,   # CONTOUR GRID FIELDS
 ABOVER=T,T,T,T,T,T,T,T,T,T,T,   # OVERLAY OBSERVATIONS
 # 
 #---------- PRINT OPTIONS ---------------------------------------------
 ISPRNT=F,       # PRINT SFC INPUT OBS
 IFPRNT=T,       # PRINT HORIZONTAL FIELDS (FIRST-GUESS AND ANALYSIS)
 & #--------------------------------------------------------------------
End_Of_Namelist
#
########################################################################
####################                             #######################
####################    END USER MODIFICATION    #######################
####################                             #######################
########################################################################
#
if ( $INOBS == UNIOBS ) then
if ( -e unidata.namelist ) rm unidata.namelist
cat << End_Of_Unamelist | sed -e 's/#.*//; s/  *$//' > ./unidata.namelistcat
 &UNILIF #--------NAMELIST INPUT SPECIFICALLY FOR UNIDATA---------------
 UNIUANM = ${#upa_unidate}   # NUMBER OF UPPER-AIR UNIDATA FILES
 UNISFNM = ${#sfc_unidate}   # NUMBER OF SURFACE UNIDATA FILES
 & #--------------------------------------------------------------------
End_Of_Unamelist
cat unidata.namelist >> rawins.namelist
endif

#
# Check on existence of a single $InDatg before running rawins.
#

   if ( $#InDatg > 1 ) then
      printf "\n\n*****  ERROR EXIT  *****\n\n"
      printf "       There should be only one file listed in InDatg.  Check\n"
      printf "       setting of script variable 'InDatg' in rawins.deck\n\n\a"
      exit (1)
   endif

   if ( ! -e $InDatg ) then
      printf "\n\n*****  ERROR EXIT  *****\n\n"
      printf "       File $InDatg does not exist.  Check setting\n"
      printf "       of script variable 'InDatg' in rawins.deck\n\n\a"
      exit (1)
   endif

#
#    The make rules are contained in the file Makefile
#
# --------- create rawins executable -------------------
#
set echo
if ( ! -e src/paramdim.tmp) then
   cp src/paramdim.incl src/paramdim.tmp
else
   /usr/bin/diff src/paramdim.incl src/paramdim.tmp
   if ($status == 0) then
      rm src/paramdim.incl
      cp src/paramdim.tmp src/paramdim.incl
      touch -r src/paramdim.tmp src/paramdim.incl
   else
      cp src/paramdim.incl src/paramdim.tmp
   endif
endif
if ( ! -e src/paramirb.tmp) then
   cp src/paramirb.incl src/paramirb.tmp
else
   /usr/bin/diff src/paramirb.incl src/paramirb.tmp
   if ($status == 0) then
      rm src/paramirb.incl
      cp src/paramirb.tmp src/paramirb.incl
      touch -r src/paramirb.tmp src/paramirb.incl
   endif
endif
if ( ! -e src/paramirs.tmp) then
   cp src/paramirs.incl src/paramirs.tmp
else
   /usr/bin/diff src/paramirs.incl src/paramirs.tmp
   if ($status == 0) then
      rm src/paramirs.incl
      cp src/paramirs.tmp src/paramirs.incl
      touch -r src/paramirs.tmp src/paramirs.incl
   endif
endif
unset echo
#
#
#
set LETTERS = (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)
#
   make
   set toast = $status
   if ( $toast != 0 ) then
   echo "error in the compile, stopping"
   exit(1)
   endif
#
if ( ! -e rawins.exe ) ln -s src/rawins.exe rawins.exe
   if ( ! -e rawins.exe ) then
      printf "\n\n*****  ERROR EXIT  *****\n\n"
      printf "       rawins.exe does not exist.\n"
      printf "       Check the compilation.\n\n\a"
      exit (1)
   endif
#
# --------- get input files -----------------------------
#
#
#       get RAOB data sets from MS
#
   if ( ! $?InRaobs ) then
      echo "acquiring no RAOB sounding files"
      exit (1)
   else if ( ${#InRaobs} >= 1 ) then
      echo "attempting to acquire ${#InRaobs} RAOB sounding file(s)"
   endif
set NUMFIL = 1
while ( $NUMFIL <= ${#InRaobs} )
   set Local  = raobs$LETTERS[${NUMFIL}]
   set Remote = $InRaobs[${NUMFIL}]
        ln -s $Remote $Local
        if ( $status != 0 ) then
            find . -name $Local -type l -exec rm {} \; 
            ln -s $Remote $Local
        endif
   @ NUMFIL ++
end
#
#       get 6-hourly data sets from MS
#
if ( ! $?InSfc6h ) then
   echo "acquiring no 6-hourly surface analysis input files"
   set InSfc6h
else if (( $SFCsw == SFC ) && ( ${#InSfc6h} >= 1 )) then
   echo "attempting to acquire ${#InSfc6h} 6-hourly surface analysis input file(s)"
endif
set NUMFIL = 1
while ( $NUMFIL <= ${#InSfc6h} )
   set Local  = sfc6hr$LETTERS[${NUMFIL}]
   set Remote = $InSfc6h[${NUMFIL}]
        ln -s $Remote $Local
        if ( $status != 0 ) then
            find . -name $Local -type l -exec rm {} \; 
            ln -s $Remote $Local
        endif
   @ NUMFIL ++
end
#
#       get 3-hourly data sets from MS
#
if ( ! $?InSfc3h ) then
   echo "acquiring no 3-hourly surface analysis input files"
   set InSfc3h
else if (( $SFCsw == SFC ) && ( ${#InSfc3h} >= 1 )) then
   echo "attempting to acquire ${#InSfc3h} 3-hourly surface analysis input file(s)"
endif
set NUMFIL = 1
while ( $NUMFIL <= ${#InSfc3h} )
   set Local  = sfc3hr$LETTERS[${NUMFIL}]
   set Remote = $InSfc3h[${NUMFIL}]
        ln -s $Remote $Local
        if ( $status != 0 ) then
            find . -name $Local -type l -exec rm {} \; 
            ln -s $Remote $Local
        endif
   @ NUMFIL ++
end
#
#       set up fortran input files for RAWINS
#
if ( -e assign.rawins ) rm assign.rawins
setenv FILENV assign.rawins
   ln -s autobog               fort.10
   ln -s kbogus                fort.12
   ln -s nbogus                fort.13
set NUMFIL = 1
if ( $INOBS != UNIOBS ) then
   while ( $NUMFIL <= 5 )
      @ UNIT = 14 + $NUMFIL
#      ln -s raobs$LETTERS[${NUMFIL}] fort.$UNIT
      @ UNIT = 19 + $NUMFIL
#      ln -s sfc3hr$LETTERS[${NUMFIL}] fort.$UNIT
      @ UNIT = 24 + $NUMFIL
#      ln -s sfc6hr$LETTERS[${NUMFIL}] fort.$UNIT
      if ( -e sfc3hr$LETTERS[${NUMFIL}] ) then
         cp sfc3hr$LETTERS[${NUMFIL}] shpvol$LETTERS[${NUMFIL}]
      endif
      @ UNIT = 29 + $NUMFIL
#      ln -s shpvol$LETTERS[${NUMFIL}] fort.$UNIT
      @ NUMFIL ++
   end
endif
#
#       set up fortran output files for RAWINS
#
ln -s rawab.out             fort.40
#
# -------- run RAWINS
#
date
#
   rawins.exe >&! rawins.print.out
   if ( $status != 0 ) then
      printf "\n*****  ERROR EXIT  *****\n"
      printf "        See the printout in file 'rawins.print.out'\n\n"
   endif
   date
   rm fort.*
#