#!/bin/csh -f
# terrain.csh
#
set echo
#
unalias *
#
#   Set this if you would like to ftp terrain data
#
#set ftpdata = true
set ftpdata = false
#
#   Set the following for ftp'ing 30 sec elevation data from USGS ftp site
#
#set Where30sTer = ftp
# set Where30sTer = /home/disk/sage3/mm5rt/terrain/global30s
set Where30sTer = /home/disk/rainier_mm5rt/data/terrain/global30s
## UW mods
# set otherdata   = /home/disk/sage3/mm5rt/terrain
set otherdata   = /home/disk/rainier_mm5rt/data/terrain
setenv NCARG_ROOT /usr/local/ncarg430
#setenv NCARG_ROOT /usr/local/ncarg_pgi
set curdir = `pwd`
cd $otherdata
foreach i ([A-Z]*)
  if (-e "$curdir/Data/$i" && ! -z "$curdir/Data/$i") then
    echo "Data/$i already exists"
  else
    if (-e "$curdir/Data/$i") rm -f $curdir/Data/$i
    ln -s $otherdata/$i $curdir/Data/$i
  endif
end
cd $curdir
## end UW mods    
if ( $Where30sTer == ftp) then
#
#    Use this if you are ftping from other places
#
#    set users = Others
#
#    Use this if you are ftping from MMM/NCAR
#
     set users = Others
else
     set users = 
endif
#
#   Uncomment the following line if using the 30 - 100 cm layer soil file
#
# set BotSoil
#
# --------------------------------------------------------------
#          1. Set up parameter statements
# --------------------------------------------------------------
#
cat > src/parame.incl.tmp << EOF
C      IIMX,JJMX are the maximum size of the domains, NSIZE = IIMX*JJMX
       PARAMETER (IIMX = 226, JJMX = 307, NSIZE = IIMX*JJMX)
EOF
cat > src/paramed.incl.tmp << EOF
C      ITRH,JTRH are the maximum size of the terrain data.
C      NOBT = ITRH*JTRH, here assuming 
C      ITRH= 270 ( 45 deg. in north-south direction, 10 min. resolution)
C      JTRH= 450 ( 75 deg. in north-south direction, 10 min. resolution)
C  NOTE:
C      IF USING GLOBAL 30SEC ELEVATION DATASET FROM USGS, NEED TO SET
C      BOTH ITRH AND JTRH BIG. TRY THE COMMENTED PARAMETER LINE FIRST.
C      THIS WILL REQUIRE APPROXI 0.9 GB MEMORY ON A 32-BIT IEEE MACHINE.
C      AN ESTIMATE OF THE DIMENSION SIZE CAN BE MADE FROM Data30s/rdem.out
C      AFTER THE FIRST JOB FAILS. USE (XMAXLAT-XMINLAT)*120 TO ESTIMATE
C      ITRH, AND (XMAXLON-XMINLON)*120 TO ESTIMATE JTRH.
C
C      PARAMETER (ITRH =  500, JTRH =  500, NOBT = ITRH*JTRH)
       PARAMETER (ITRH = 2050, JTRH = 4100, NOBT = ITRH*JTRH)
EOF
#
# --------------------------------------------------------------
#          2. Set up NAMELIST
# --------------------------------------------------------------
#
if ( -e terrain.namelist ) rm terrain.namelist
cat > terrain.namelist << EOF
 &MAPBG
 PHIC  =   49.0,      ; CENTRAL LATITUDE (minus for southern hemesphere)
 XLONC = -121.0,      ; CENTRAL LONGITUDE (minus for western hemesphere)
 IEXP  =    .F.,      ; .T. EXPANDED COARSE DOMAIN, .F. NOT EXPANDED.
                      ; USEFUL IF RUNNING RAWINS/little_r
 AEXP  =   360.,      ; APPROX EXPANSION (KM)
 IPROJ = 'LAMCON',    ; LAMBERT-CONFORMAL MAP PROJECTION
 ;IPROJ = 'POLSTR',   ; POLAR STEREOGRAPHIC MAP PROJECTION
 ;IPROJ = 'MERCAT',   ; MERCATOR MAP PROJECTION
 &END
 &DOMAINS
 ;
 MAXNES =    4,       ; NUMBER OF DOMAINS TO PROCESS  
 NESTIX =  226,  127,  124,  220,  211, 221,  ; GRID DIMENSIONS IN Y DIRECTION
 NESTJX =  250,  151,  163,  307,  211, 221,  ; GRID DIMENSIONS IN X DIRECTION
 DIS    =   36.,  36.,  12.,   4.,  1.0, 1.0,  ; GRID DISTANCE 
 NUMNC  =    1,    1,    2,    3,    4,   5,  ; MOTHER DOMAIN ID
 NESTI  =    1,   43,   41,   28,   45,  50,  ; LOWER LEFT I OF NEST IN MOTHER DOMAIN
 NESTJ  =    1,   22,   80,   40,   55,  50,  ; LOWER LEFT J OF NEST IN MOTHER DOMAIN
 RID    =  1.5,  1.5,  1.5,  1.5,  2.3,  2.3, ; RADIUS OF INFLUENCE IN GRID UNITS (IFANAL=T)
 NTYPE  =    3,    4,    6,    6,    6,   6,  ; INPUT DATA RESOLUTION
 ;
 ;      1:  1 deg (~111 km) global terrain and landuse
 ;      2: 30 min ( ~56 km) global terrain and landuse
 ;      3: 10 min ( ~19 km) global terrain and landuse
 ;      4;  5 min (  ~9 km) global terrain and landuse
 ;      5;  2 min (  ~4 km) global terrain and landuse
 ;      6; 30 sec ( ~.9 km) global terrain and landuse
 ;
 NSTTYP=     1,    1,    1,    1,    2,   2,  ;  1 -- ONE WAY NEST, 2 -- TWO WAY NEST
 &END
 &OPTN
 IFTER   = .TRUE.,    ; .T.-- TERRAIN,  .F.-- PLOT DOMAIN MAPS ONLY
 IFANAL  = .T.,       ; .T.-- OBJECTIVE ANALYSIS, .F.-- INTERPOLATION
 ISMTHTR =  2 ,       ;  1: 1-2-1 smoother, 2: two pass smoother/desmoother
 IFEZFUG = .F.,       ; .T. USE NCAR GRAPHICS EZMAP WATER BODY INFO TO FUDGE THE LAND USE
                      ; .F. USE LANDWATER MASK DATA
 IFTFUG  = .F.,       ; .T. DON'T DO EZFUDGE WITHIN THE USER-SPECIFIED
 ;                      LAT/LON BOXES, need to define namelist fudget
 IFFUDG  = .F.,       ; .T. POINT-BY-POINT FUDGING OF LANDUSE,
                      ;  need to define namelist fudge
 IPRNTD  = .F.,       ; PRINT OUT LAT. AND LON. ON THE MESH
 IPRTHT  = .F.,       ; PRINT OUT ALL PROCESSING FIELDS ON THE MESH
 IPRINT  =  1,        ; = 1: A LOT MORE PRINT OUTPUT IN terrain.print.out
 FIN     = 150., 150., 150., 150., 100., 100., ; CONTOUR INTERVAL (meter) FOR TERRAIN HEIGHT PLOT
 TRUELAT1=30.,       ; TRUE LATITUDE 1
 TRUELAT2=60.,       ; TRUE LATITUDE 2, use this if IPROJ='LAMCON'
 IFILL   = .TRUE.,    ; .TRUE. --- color filled plots
 LSMDATA = .TRUE.,    ; .TRUE. --- Create the data for LSM
 VEGTYPE = 1,         ; LANDUSE DATA TYPE: =0: old 13 cat; =1: 24 cat USGS; =2: 16 cat SiB
 VSPLOT  = .TRUE.,    ; .TRUE. --- plot Vege., Soil, Vege. Frc. percentages.
 IEXTRA  = .FALSE.,   ; .TRUE. --- Create extra data for Pleim-Xiu LSM
 &END
 &FUDGE
 ; USE ONLY IF IFFUDG = .T., POINT-BY-POINT FUDGING OF LANDUSE,
 ; IFFUG FOR EACH OF THE NESTS: .F. NO FUDGING, .T. FUDGING
 IFFUG   = .F.,.F.,    ; FUDGE FLAGS
 ; NDFUG : THE NUMBER OF FUDGING POINTS FOR EACH OF NESTS
 NDFUG   = 0,0,
 ; LOCATION (I,J) AND LANDUSE VALUES FOR EACH OF THE NESTS
 ; NOTE: REGARDLESS OF IFFUG AND NDFUG, 200 VALUES MUST BE GIVEN FOR
 ;       EACH NEST, OR ELSE THE INDEXING WILL GET MESSED UP
 ; The example below is for two domains. Add more for domain 3 and up
 ;       if needed. Do not remove 0 values for domain 1 and/or 2 even
 ;       they are not used.
 ;
 IFUG(1,1)=  200*0,    ; I location for fudge points in domain 1
 IFUG(1,2)=  200*0,    ; I location for fudge points in domain 2
 JFUG(1,1)=  200*0,    ; J location for fudge points in domain 1
 JFUG(1,2)=  200*0,    ; J location for fudge points in domain 2
 LNDFUG(1,1)= 200*0,   ; land-use value at fudge points for domain 1
 LNDFUG(1,2)= 200*0,   ; land-use value at fudge points for domain 2
 &END
 &FUDGET
 ; USE ONLY IF IFTFUG=.T., WHICH MEANS TERRAIN WON'T DO EZFUDGE WITHIN
 ;    THE USER-SPECIFIED LAT/LON BOXES.  THIS OPTION IS USED WHEN THERE
 ;    ARE INLAND BODIES OF WATER THAT ARE DEFINED IN THE LAND USE
 ;    DATA SET BUT NOT IN THE EZMAP DATA SET.  THIS OPTION PREVENTS
 ;    THOSE BODIES OF WATER FROM BEING WIPED OUT BY EZFUDGE
 NFUGBOX = 2             ;  NUMBER OF SUBDOMAINS IN WHICH TO
 ;                          TURN OFF EZMAP LAND USE FUDGING
 STARTLAT=45.0,44.0,     ;  LATITUDES OF LOWER-LEFT CORNERS OF SUBDOMAINS
 ENDLAT  =46.5,45.0,     ;  LATITUDES OF UPPER-RIGHT CORNERS OF SUBDOMAINS
 STARTLON=-95.0,-79.8,   ;  LONGITUDES OF LOWER-LEFT CORNERS OF SUBDOMAINS
 ENDLON  =-92.6,-78.5,   ;  LONGITUDES OF UPPER-RIGHT CORNERS OF SUBDOMAINS
 &END
 &EZFUDGE
 ; USE ONLY IF IFEZFUG=.T., WHICH TURNS ON EZMAP WATER BODY FUDGING OF LANDUSE.
 ; USERS: FEEL FREE TO ADD ANY MORE LAKE SURFACE HEIGHTS THAT YOU'LL NEED.
 ; HTPS IS THE HEIGHT IN METERS AND THE INDEX OF HTPS CORRESPONDS TO THE ID
 ; OF THE 'PS' AREA IN THE FILE ezmap_area_ids.
 ;
 HTPS(441) =  -.001   ; Oceans  --  Do NOT change this one
 HTPS(550) =  183.    ; Lake Superior
 HTPS(587) =  177.    ; Lakes Michigan and Huron
 HTPS(618) =  176.    ; Lake St. Clair
 HTPS(613) =  174.    ; Lake Erie
 HTPS(645) =   75.    ; Lake Ontario
 HTPS(480) = 1897.    ; Lake Tahoe
 HTPS(500) = 1281.    ; Great Salt Lake
 &END
EOF
#
# ------------------------------------------------------------------------------
#
#                 END OF USER MODIFICATION
#
# ------------------------------------------------------------------------------
#
#     Check to see if recompilation is needed
#       Need to make here so that rdnml may be used
#
cd src
../Templates/incldiff.sh parame.incl.tmp parame.incl
../Templates/incldiff.sh paramed.incl.tmp paramed.incl
cd ..
make >& make.terrain.out
#
#     Create a namelist without comments
#
sed -f Templates/no_comment.sed terrain.namelist | grep "[A-Z,a-z]" > terlif.tmp
mv terlif.tmp terrain.namelist
#
#     Set default script variables
#
set LandUse = OLD
#
set DataType = `src/rdnml < terrain.namelist`
echo $DataType
#
if ( $DataType[4] == 1 ) set IfProcData
if ( $DataType[4] == 0 ) set ftpdata = false
if ( $DataType[5] == 1 ) set LandUse = USGS
if ( $DataType[5] == 2 ) set LandUse = SiB
if ( $DataType[3] == 1 ) set IfUsgsTopo
#
#      reset LandUse if $BotSoil is set
#            -- use bottom soil files
#
if ( $?BotSoil ) set LandUse = USGS2
#
#      link to Fortran units
#
set ForUnit = fort.
rm ${ForUnit}1* ${ForUnit}2* ${ForUnit}4*
#
if ( $LandUse == OLD )   cat Data/namelist.usgsdata >> terrain.namelist
if ( $LandUse == USGS )  cat Data/namelist.usgsdata >> terrain.namelist
if ( $LandUse == USGS2 ) cat Data/namelist.usgsdata2 >> terrain.namelist
if ( $LandUse == SiB )   cat Data/namelist.sibdata  >> terrain.namelist
cat > endnml << EOF
 &END
EOF
cat endnml >> terrain.namelist
rm endnml
#
   ln -s  terrain.namelist      ${ForUnit}15
   ln -s  ezids                 ${ForUnit}18
   ln -s  raobsta.ieee          ${ForUnit}16
# ----------------------------------------------------------------------
#
#     Update parameter statements for vegetation dataset
#       (may require partial recompilation)
#
if ( $LandUse == SiB ) then

   cp src/paramesv0.incl src/paramesv.incl.tmp
   ./Templates/incldiff.sh src/paramesv.incl.tmp src/paramesv.incl
   cp src/vs_data0.incl  src/vs_data.incl.tmp
   ./Templates/incldiff.sh src/vs_data.incl.tmp src/vs_data.incl
   make >& make2.print.out

else if ( $LandUse == USGS ) then

   cp src/paramesv1.incl src/paramesv.incl.tmp
   ./Templates/incldiff.sh src/paramesv.incl.tmp src/paramesv.incl
   cp src/vs_data2.incl  src/vs_data.incl.tmp
   ./Templates/incldiff.sh src/vs_data.incl.tmp src/vs_data.incl
   make >& make2.print.out

endif
# ----------------------------------------------------------------------
#
#     should I ftp the data?
#
if ( $ftpdata == true && $?BotSoil ) then
#  ftp other data plus top soil data
   echo 'about to start ftping'
   cp Data/ftp2.csh ftp.csh
   chmod +x ftp.csh
   ./ftp.csh >& ftp.out
#   rm ftp.csh ftp.out
else
#  ftp other data plus bottom soil data
   echo 'about to start ftping'
   cp Data/ftp.csh ftp.csh
   chmod +x ftp.csh
   ./ftp.csh >& ftp.out
#   rm ftp.csh ftp.out
endif
#
#orig 3.6 line follows
#if ( $?IfUsgsTopo && $?IfProcData ) then
if ( $?IfUsgsTopo && $ftpdata == true ) then
   echo 'about to start ftping 30 sec tiled elevation data from USGS'
   echo -n "please press 3 RETURN to continue or q to quit: "
   set ans = ($<)
   if ($ans == "q") exit
   cp Data/ftp30s.csh .
   chmod +x ftp30s.csh
   ./ftp30s.csh $Where30sTer $users >& ftp30s.out
#   rm ftp30s.csh ftp30s.out
endif
# ----------------------------------------------------------------------
#
#      Execute terrain
#
## UW mods
if (! -d Data30s) then
  echo "running Data/ftp30s.csh to transfer local data ..."
  Data/ftp30s.csh $Where30sTer nobobdy
endif
## end UW mods
unlimit
date
./terrain.exe >&! terrain.print.out
#
#rm ${ForUnit}* 
echo "NOT DOING THIS, YOU MIGHT WANT TO:"
echo "  rm ${ForUnit}* "
