#!/bin/csh -f
# JOB best run interactively
#
# Copy script to your working area
set echo

###   Default directory where this script will write the
###   RAWINS code to, and work under is: /ptmp/$USER/RAWINS
if ( ! -e /ptmp/$USER ) then
   mkdir  /ptmp/$USER
endif
set TMPDIR=/ptmp/$USER      [Change this is you want to work a directory different from the default]
cd $TMPDIR

############################################################################
#####                                                                  #####
#####                    IBM interactive jobs ONLY                     #####
#####                                                                  #####
############################################################################

#
#     This version of RAWINS job deck can only process one analysis domain 
#     per RAWINS submittal.  The nested domain center latitude and longitude
#     can be different from the coarse domain.
#     For example, if one wants to obtain analysis on domain 1 and 2, then
#     RAWINS needs to be run twice for domian 1 and domain 2 respectively.
#
#
#       this should be the user's case or experiment
#
   set ExpName = MM5V3/V36_3/RAWINS     # RAWINS output MSS pathname
   set InName  = MM5V3/V36_3/REGRID     # RAWINS input  MSS pathname
   set RetPd   = 30                     # Retention period for MSWRITEs

#       Are we getting the source code, or is it available already?
#       Set to "no" if you wish to download the code.
#       IF set to "yes" script will expect to find the source code
#       in $TMPDIR/RAWINS
 set UseMySource = no
#set UseMySource = yes

#       Are we compling the code
  set compile = yes
# set compile = no

#
#       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
#
#   Domain id for RAWINS to process (RAWINS does only one domain per submittal)
#   InRegrid is the output file from REGRID
#
   set DomId     =  1
   set InRegrid  =  ${InName}/REGRID_DOMAIN${DomId}

#
# Set the starting date of the time period you want to process:
#
 set START_YEAR  = 1993   # Year (Four digits)
 set START_MONTH = 03     # Month ( 01 - 12 )
 set START_DAY   = 13     # Day ( 01 - 31 )
 set START_HOUR  = 00     # Hour ( 00 - 23 )

 set END_YEAR  = 1993   # Year (Four digits)
 set END_MONTH = 03     # Month ( 01 - 12 )
 set END_DAY   = 14     # Day ( 01 - 31 )
 set END_HOUR  = 00     # Hour ( 00 - 23 )


#   RAWINS MSS OUTPUT FILE NAMES
#
set OutRaw    =   ${ExpName}
#
#
# --------------------------------------------------------------
#       Get source code. - Do not change
# --------------------------------------------------------------

   if ( $UseMySource == no ) then
      echo " RAWINS Source code is downloaded "
      cp /mmm/users/mesouser/MM5V3/FETCH.TAR.gz FETCH.TAR.gz
      cp /mmm/users/mesouser/MM5V3/RAWINS.TAR.gz RAWINS.TAR.gz
      if ( ! -e FETCH.TAR.gz ) then
         msread FETCH.TAR.gz /MESOUSER/MM5V3/FETCH.TAR.gz
      endif
      gunzip FETCH.TAR
      if ( ! -e FETCH.TAR ) then
         echo "The FETCH.TAR file does not exist.  Stopping."
         exit ( 1 )
      endif
      tar -xf FETCH.TAR
      rm FETCH.TAR
      if ( ! -e RAWINS.TAR.gz ) then
         msread RAWINS.TAR.gz /MESOUSER/MM5V3/RAWINS.TAR.gz
      endif
      gunzip RAWINS.TAR
      if ( ! -e RAWINS.TAR ) then
         echo "The RAWINS.TAR file does not exist.  Stopping."
         exit ( 1 )
      endif
      tar -xf RAWINS.TAR
      rm RAWINS.TAR
   endif

cd RAWINS

## Temp fix for RAWINS
   rm Makefile
   cp ~mesouser/MM5V3/IBM/Makefile.rawins .
   mv Makefile.rawins Makefile
## End of temp fix
#
#    ------ RAWINS PARAMETER STATEMENT ---------------------------
#
if ( -e src/paramdim.tmp ) rm src/paramdim.tmp
cat > src/paramdim.tmp << 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.tmp ) rm src/paramirb.tmp
cat > src/paramirb.tmp << EOF
C-----------------------------------------------------------------------
C   IRB MUST BE AT LEAST THE MAXIMUM NUMBER OF RAOB STATIONS
C
      PARAMETER(IRB=500)
EOF
if (-e src/paramirs.tmp ) rm src/paramirs.tmp
cat > src/paramirs.tmp << 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 > rawins.namelist << EOF
 &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=1,       ; 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 -------------------------------------------
 UNIOBS=.FALSE.,       ; 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=10.,       ; 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=13.,       ; 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=6.,        ; MAX PRES DIFF ALLOWED (1ST GUESS MINUS OB)
 ;                 ; NO LEVEL OR TERRAIN FACTORING
 ; 
 ;---------- SET PLOT OPTIONS ------------------------------------------
 ;
 IPLOT=T,F,F,F,T,F,F,F,T,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)
 & ;--------------------------------------------------------------------
EOF
#
########################################################################
####################                             #######################
####################    END USER MODIFICATION    #######################
####################                             #######################
########################################################################
#
if ( $INOBS == UNIOBS ) then
if ( -e unidata.namelist ) rm unidata.namelist
cat > unidata.namelist << EOF
 &UNILIF ;--------NAMELIST INPUT SPECIFICALLY FOR UNIDATA---------------
 UNIUANM = ${#upa_unidate}   ; NUMBER OF UPPER-AIR UNIDATA FILES
 UNISFNM = ${#sfc_unidate}   ; NUMBER OF SURFACE UNIDATA FILES
 & ;--------------------------------------------------------------------
EOF
cat unidata.namelist >> rawins.namelist
endif
#
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)
#
#    The make rules are contained in the file Makefile
#
# --------- create rawins executable -------------------
#           First, check to see if any include files need update
#
if ( ! -e src/netcdf.incl ) cp /usr/local/include/netcdf.inc src/netcdf.incl
#
if ( ! -e src/paramdim.incl) then
   cp src/paramdim.tmp src/paramdim.incl
else
   /bin/diff src/paramdim.incl src/paramdim.tmp
   if ($status == 0) then
      rm src/paramdim.tmp
   else
      cp src/paramdim.tmp src/paramdim.incl
   endif
endif
#
if ( ! -e src/paramirb.incl) then
   cp src/paramirb.tmp src/paramirb.incl
else
   /bin/diff src/paramirb.incl src/paramirb.tmp
   if ($status == 0) then
      rm src/paramirb.tmp
   else
      cp src/paramirb.tmp src/paramirb.incl
   endif
endif
#
if ( ! -e src/paramirs.incl) then
   cp src/paramirs.tmp src/paramirs.incl
else
   /bin/diff src/paramirs.incl src/paramirs.tmp
   if ($status == 0) then
      rm src/paramirs.tmp
   else
      cp src/paramirs.tmp src/paramirs.incl
   endif
endif
#
#  Compile 
if ( $compile == 'yes' ) then
   make clean
   make
endif
#
if ( ! -e rawins.exe ) ln -s src/rawins.exe rawins.exe
#
#  edit namelist to remove comments
#
sed -f ./Templates/no_comment.sed rawins.namelist > mif.tmp
mv mif.tmp rawins.namelist
#
# --------- get input files -----------------------------
#
if ( ! -e regrid ) then
   echo "  msread regrid $InRegrid"
   msread regrid $InRegrid
endif
if ( ! -e regrid ) then
   echo "  Regrid file missing.  Could not find MSS file $InRegrid"
endif



cd ../FETCH

set starting_date = ` echo $START_YEAR""$START_MONTH""$START_DAY""$START_HOUR `
set ending_date   = ` echo $END_YEAR""$END_MONTH""$END_DAY""$END_HOUR `

#       Pull ADP surface data from the MSS.

cd adp_sfc
./fetch_adp_sfc.csh $starting_date $ending_date >&! fetch_sfc_print &

wait

#       Send surface data to MSS.

if ( -e A.1 ) then
   foreach file ( A.[1-9] )
        set num = $file:e
        echo "Save surface data to A.$num and B.$num "
        mswrite -t $RetPd A.$num $ExpName/sfc6hr$LETTERS[${num}]
        mswrite -t $RetPd B.$num $ExpName/sfc3hr$LETTERS[${num}]
        mv A.$num        ../../RAWINS/sfc6hr$LETTERS[${num}]
        mv B.$num        ../../RAWINS/sfc3hr$LETTERS[${num}]
   end
endif
if ( -e E.1 ) then
   foreach file ( E.[1-9] )
        set num = $file:e
        echo "Save surface data to E.$num and F.$num "
        mswrite -t $RetPd E.$num $ExpName/sfc6hr$LETTERS[${num}]
        mswrite -t $RetPd F.$num $ExpName/sfc3hr$LETTERS[${num}]
        mv E.$num        ../../RAWINS/sfc6hr$LETTERS[${num}]
        mv F.$num        ../../RAWINS/sfc3hr$LETTERS[${num}]
   end
endif

#       Pull ADP upper-air data from the MSS

cd ../adp_upa
./fetch_adp_upa.csh $starting_date $ending_date >&! fetch_upa_print &

wait

#       Send upper-air data to MSS.

if ( -e UPA.1 ) then
   foreach file ( UPA.[1-9] )
        set num = $file:e
        echo "Save upper-air data to UPA.$num "
        mswrite -t $RetPd UPA.$num $ExpName/raobs$LETTERS[${num}]
        mv UPA.$num        ../../RAWINS/raobs$LETTERS[${num}]
   end
endif
cd ..

cd ../RAWINS

#
#       get autobogus file from remote host
#
if (( $Submit == 2 ) && ( ! -e autobog )) then
   msread autobog  ${ExpName}/AUBG_OUT
   if ( -e autobog ) then
      echo "acquired autobogus file ${ExpName}/AUBG_OUT from MSS"
   else 
      echo "could not find remote file ${ExpName}/AUBG_OUT.   Not acquired.  msread FAILED"
      exit (1)
   endif
endif
#
#       get K bogus file from remote host
#
if ((( $BOGUSsw == Konly ) || ( $BOGUSsw == KandN )) && ( ! -e kbogus )) then
   msread kbogus ${ExpName}/KBOG_REMOTE
   if ( -e kbogus ) then
      echo "acquired k bogus file ${ExpName}/KBOG_REMOTE from MSS"
   else if ( ! -e kbogus ) then
      echo "could not find remote file ${ExpName}/KBOG_REMOTE.  Not acquired.  msread FAILED"
      exit (1)
   endif
endif
#
#       get N bogus file from remote host
#
if ((( $BOGUSsw == Nonly ) || ( $BOGUSsw == KandN )) && ( ! -e nbogus )) then
   msread nbigus ${ExpName}/NBOG_REMOTE
   if ( -e nbogus ) then
      echo "acquired n bogus file ${ExpName}/NBOG_REMOTE from MSS"
   else if ( ! -e nbogus ) then
      echo "could not find remote file ${ExpName}/NBOG_REMOTE.  Not acquired.  msread FAILED"
      exit (1)
   endif
endif
#
#       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
if ( -e acct ) rm acct
./rawins.exe >&! rawins.print.out

#
tar -cf rawins.out.tar src/rawins.exe rawins.namelist rawins.print.out
mswrite -t $RetPd rawins.out.tar ${OutRaw}/rawins_domain${DomId}.out.tar
#
#       rawins output files
#
ls -ls
       mswrite -t $RetPd RAWINS_DOMAIN${DomId} ${OutRaw}/RAWINS_DOMAIN${DomId}
       echo mswrite -t $RetPd RAWINS_DOMAIN${DomId} ${OutRaw}/RAWINS_DOMAIN${DomId}

if ( $Submit != 2 ) then
   mswrite -t $RetPd SND.PLT ${OutRaw}/SND.PLT_DOMAIN${DomId}
endif
#
if ( -e SFCFDDA_DOMAIN${DomId} ) then
   mswrite -t $RetPd SFCFDDA_DOMAIN${DomId} ${OutRaw}/SFCFDDA_DOMAIN${DomId}
endif
#
mswrite -t $RetPd RAWOBS_DOMAIN${DomId} ${OutRaw}/RAWOBS_DOMAIN${DomId}
mswrite -t $RetPd SFC4DOBS_DOMAIN${DomId} ${OutRaw}/SFC4DOBS_DOMAIN${DomId}
mswrite -t $RetPd UPR4DOBS_DOMAIN${DomId} ${OutRaw}/UPR4DOBS_DOMAIN${DomId}
#
if ( $Submit == 1 ) then
   mswrite -t $RetPd rawab.out ${OutRaw}/AUBG_SUB1_DOMAIN${DomId}
   mswrite -t $RetPd AB.PLT ${OutRaw}/AUB_SUB1_PLT_DOMAIN${DomId}
else if ( $Submit == 2 ) then
   mswrite -t $RetPd autobog ${OutRaw}/AUBG_SUB2_DOMAIN${DomId}
endif
#
exit