function setupd (args)

****************************************************************
*****                                                      *****
*****  This script is the driver for creating difference   *****
*****  plots of RMS and STD from 2 experiments             *****
*****  (eg. EXP0 and EXP2 from the stats.rc)               *****
*****                                                      *****
****************************************************************

'reinit'
'set display color white'
'rgbset'
'c'

'run getenv GEOSUTIL'
        geosutil = result
'run getenv SOURCE'
        SOURCE   = result

if( SOURCE = "NULL" )
   'run getenv "PWD"'
    SOURCE = result
   'run setenv "SOURCE" 'SOURCE
endif

'run setenv "ANTIALIAS" TRUE'

****************************************************************
****************************************************************

'numargs  'args
 numargs = result
say 'ARGS: 'args

rcfile = "stats.rc"
fields = 'p h u v t q'
  exps = ''
 levs0 = NULL

       num = 0
while( num < numargs )
       num = num + 1
if( subwrd(args,num) = '-rc' ) ; rcfile = subwrd(args,num+1) ; endif

* Read EXPS
* -----------
if( subwrd(args,num) = '-exps' )
           k = 1
    while( k > 0 )
           L = num + k
        exp  = subwrd(args,L)
    if( exp = '' )
        k = -1
    else
        bit = checkbit(exp)
*       bit = substr(exp,1,1)
        if( bit = '-' )
              k = -1
        else
              exps = exps % ' ' % exp
              k = k+1
        endif
    endif
    endwhile
endif

* Read FIELDS
* -----------
if( subwrd(args,num) = '-fields' )
     fields = ''
           k = 1
    while( k > 0 )
           L = num + k
        field  = subwrd(args,L)
    if( field = '' )
        k = -1
    else
        bit = substr(field,1,1)
        if( bit = "-" )
              k = -1
        else
              fields = fields % ' ' % field
              k = k+1
        endif
    endif
    endwhile
endif

* Read LEVELS
* -----------
if( subwrd(args,num) = '-levels' )
    levs0 = ''
           k = 1
    while( k > 0 )
           L = num + k
        level  = subwrd(args,L)
    if( level = '' )
        k = -1
    else
        bit = substr(level,1,1)
        if( bit = "-" )
              k = -1
        else
              levs0 = levs0 % '' % level
              k = k+1
        endif
    endif
    endwhile
say 'levs0 = 'levs0
endif

endwhile

*******************************************************
****             Read Stats Resource File          ****
*******************************************************

n = 0

'getresource 'rcfile' DESC' ;  title = result

'getresource 'rcfile' EXP'n ;  exp.n = result
'getresource 'rcfile' DSC'n ; desc.n = result
 if( exp.n != NULL | desc.n  != NULL )
     length = strlen(desc.n)
     desc.n = substr(desc.n,2,length)
          n = n+1
 else
     say 'You must supply a CONTROL and COMPARISON experiment list'
     say 'in a stats rc file using the -rc option.'
     say 'Current RC file: 'rcfile
     return
 endif

while( n >= 0 )
'getresource 'rcfile' EXP'n ;  exp.n = result
'getresource 'rcfile' DSC'n ; desc.n = result
 if( exp.n != NULL | desc.n  != NULL )
     length = strlen(desc.n)
     desc.n = substr(desc.n,2,length)
          n = n+1
 else
     ntot = n-1
        n = -999
 endif
endwhile

* Modify EXPS based on input
* --------------------------
if( exps != '' )
   'numargs 'exps
    ktot = result
    k = 1
    while( k<=ktot )
      i = k - 1
    idx = subwrd(exps,k)
    exptmp.i =  exp.idx
    dsctmp.i = desc.idx
      k = k + 1
    endwhile
    k = 1
    while( k<=ktot )
      i = k - 1
     exp.i = exptmp.i
    desc.i = dsctmp.i
      k = k + 1
    endwhile
    ntot = ktot-1
endif

say ' '
say '  EXPS: 'exps
say 'FIELDS: 'fields
say ' '

****************************************************************
****            Open Common Experiment Datasets             ****
****            and set Compatable TDIM and TINC            ****
****************************************************************

'!remove 'desc0'.setup'
'!remove 'desc1'.setup'

'!'geosutil'/plots/grads_util/make_globl_ctl1 'exp.0' 'desc.0
'!'geosutil'/plots/grads_util/make_globl_ctl1 'exp.1' 'desc.1

'run getenv MONTHLAB'
            month = result
say 'MONTH_LABEL: 'month

'run setenv STATSFILE globl'
'!'geosutil'/plots/grads_util/create_subset_files 'desc.0' 'desc.1
'!/bin/mv -f subset_files 'desc.0'.setup'
'!'geosutil'/plots/grads_util/create_subset_files 'desc.1' 'desc.0
'!/bin/mv -f subset_files 'desc.1'.setup'
'!remove STATSFILE.txt'

* Loop over Experiments
* ---------------------
   mxdim = 1e15
   mzdim = 1e15
   mtdim = 1e15
   mtinc = 0
       k = 0
    ktot = ntot

while( k <= ktot )

* Open Files
* ----------
say 'Opening Files for EXP: 'k
'syscmp_open 'desc.k' 'DESC.k
        numfiles = result

* Set Default File to 1st Ensemble Member for this Experiment
* -----------------------------------------------------------
'set dfile 1'
'setlons'
'sety'

'getinfo desc'
        cfile = result
'getinfo tdim'
        ctdim = result
'getinfo tinc'
        ctinc = result
'getinfo zdim'
        czdim = result
'getinfo xdim'
        cxdim = result

* ----------------------------------------------------------------------------
* For Zonal Mean Plots, we need to define a Master Default File which contains 
* the smallest number of vertical levels (from 1000 to 1 mb) as well as
* the largest time increment.  If these are not consistent, the  code will 
* simply return with diagnostic error message.
* ----------------------------------------------------------------------------

* Find Master Vertical Dimension (smallest) among Experiment Files
* ----------------------------------------------------------------
     if( czdim < mzdim )
         mzdim = czdim
        'q file '
         zminfile = sublin(result,2)
         zminfile = subwrd(zminfile,2)
     endif

* Find Smallest Horizontal Dimension among Experiment Files
* ---------------------------------------------------------
     if( cxdim < mxdim )
         mxdim = cxdim
     endif

* Find Master Time Dimension (smallest) among Experiment Files
* ------------------------------------------------------------
     if( ctdim < mtdim )
         mtdim = ctdim
     endif

* Find Master Time Frequency (largest) among Experiment Files
* -----------------------------------------------------------
     if( ctinc  > mtinc )
         mtinc  = ctinc
      tincfile  = cfile
     endif

say DESC.k
say '  Current XDIM: 'cxdim'  Master XDIM: 'mxdim
say '  Current ZDIM: 'czdim'  Master ZDIM: 'mzdim
say '  Current TDIM: 'ctdim'  Master TDIM: 'mtdim
say '  Current TINC: 'ctinc'  Master TINC: 'mtinc
say '  Current FILE: 'cfile'  Master TINCFILE: 'tincfile
say '  Current FILE: 'cfile'  Master ZMINFILE: 'zminfile

say ' '
say 'Closing files for Exp: 'k
'closefiles'

* End Experiment Loop
* -------------------
k = k + 1
endwhile

* Check that Master TINC File is consistent with Master ZDIM File
* ---------------------------------------------------------------
'open   'zminfile
'getinfo numfiles'
         newfile = result
'getinfo tinc'
         tinc = result
'close ' newfile

if( tinc < mtinc & levs0 = 'ZONAL' )
say ' '
say 'Master ZDIM File: 'zminfile
say 'Contains a time increment ('tinc') that is not consistent with Master TINC: 'mtinc
say 'Zonal Mean Plots will not be performed.'
say ' '
return
endif

say ' '

'run setenv "SYSCMP_XDIM" 'mxdim
'run setenv "SYSCMP_TDIM" 'mtdim
'run setenv "SYSCMP_TINC" 'mtinc
'run setenv "TINCFILE"    'tincfile
'run setenv "ZMINFILE"    'zminfile

*******************************************************
****        Compute Stats for Each Experiment      ****
*******************************************************

* Loop over Experiments
* ---------------------
    tdim = 1e15
    zdim = 1e15
       k = 0
    ktot = ntot

while( k <= ktot )

'fixname 'desc.k
          DESC.k = result

* Open Files
* ----------
'syscmp_open 'desc.k' 'DESC.k
 numfiles = result

* Loop over Fields
* ----------------
'numargs  'fields
 numflds = result

n = 1
while ( n<=numflds )
        field = subwrd(fields,n)

* Set Default File to 1st Ensemble Member for this Experiment
* -----------------------------------------------------------
 levmin = 1000
'set dfile 1'
'setlons'
'sety'
'getinfo zdim'
         zdim.k = result

if( levs0 = 'ZONAL' | levs0 = 'NULL' )
       'getinfo zdim'
                zdim = result
       'set z 1'
       'getinfo level'
        levs = result
        z = 2
        while( z<=zdim )
           'set z 'z
           'getinfo level'
                    lev  = result
                 if(lev >= 1 )
                    if( lev < levmin ) ; levmin = lev ; endif
                    levs = levs' 'lev
                 endif
        z = z + 1
        endwhile
else
        levs = levs0
endif

  if( field = p   ) ; name = slp  ; levels = '1000' ; endif
  if( field = h   ) ; name = hght ; levels =  levs  ; endif
  if( field = u   ) ; name = uwnd ; levels =  levs  ; endif
  if( field = v   ) ; name = vwnd ; levels =  levs  ; endif
  if( field = t   ) ; name = tmpu ; levels =  levs  ; endif
  if( field = q   ) ; name = sphu ; levels =  levs  ; endif
  if( field = chi ) ; name = chi  ; levels =  levs  ; endif
  if( field = psi ) ; name = psi  ; levels =  levs  ; endif

'numargs  'levels
 numlevs = result

if( numlevs > 1 )
   'set lev 1000 'levmin
else
    say 'FIELD: 'field'  NAME: 'name'  LEVELS: 'levels
'q file'
say 'FILE: 'result
'q dims'
say 'DIMS: 'result
   'set lev 'levels
   'getinfo  level'
             levelcheck = result
    if( levels != levelcheck )
        say 'Level: 'levels' not found in dataset'
        return
    endif
endif
say 'Set LEVS: 'levels

* Compute Statistic Variables
* ---------------------------
'set t 1 'mtdim
'setlons'
'sety'

if( k = 0 )
   'statmak 'field' CTL CTL'
else
   'statmak 'field' EXP CTL'
endif

* End Field Loop
* --------------
n = n + 1
endwhile

**********************************************************

say 'EXP   k: 'k
say '   ktot: 'ktot
say 'Closing files for EXP: 'k
    'closefiles'
    '!remove TINC.txt'

* End Experiment Loop
* -------------------
k = k + 1
endwhile

****************************************************************
****     Open Experiment Set with Fewest Vertical Levels    ****
****************************************************************

     zmin = 1e15
     kmin = 0
       k  = 0
while( k <= ktot )
     if( zdim.k < zmin )
         zmin   = zdim.k
         kmin   =      k
     endif
     k = k + 1
endwhile

'syscmp_open 'desc.kmin' 'DESC.kmin

****************************************************************
****                  Make Horizontal Plots                 ****
****************************************************************

if( levs0 != 'ZONAL' )

'open 'tincfile
'getinfo    numfiles'
            newfile = result
'set dfile 'newfile
'setlons'
'sety'

k    = 0
ktot = ntot-1
while( k <= ktot )
 kp1 = k + 1
'!/bin/mkdir -p 'SOURCE'/'desc.k'.'desc.kp1

       n = 1
       while ( n<=numflds )
                     field = subwrd(fields,n)

         if( levs0 = 'NULL' )
                'getinfo zdim'
                         zdim = result
                'set z 1'
                'getinfo level'
                 levs = result
                 z = 2
                 while( z<=zdim )
                    'set z 'z
                    'getinfo level'
                             lev  = result
                          if(lev >= 1 )
                             levs = levs' 'lev
                          endif
                 z = z + 1
                 endwhile
         else
                 levs = levs0
         endif

         if( field = p   ) ; name = slp  ; levels = '1000' ; endif
         if( field = h   ) ; name = hght ; levels =  levs  ; endif
         if( field = u   ) ; name = uwnd ; levels =  levs  ; endif
         if( field = v   ) ; name = vwnd ; levels =  levs  ; endif
         if( field = t   ) ; name = tmpu ; levels =  levs  ; endif
         if( field = q   ) ; name = sphu ; levels =  levs  ; endif
         if( field = chi ) ; name = chi  ; levels =  levs  ; endif
         if( field = psi ) ; name = psi  ; levels =  levs  ; endif

        'numargs  'levels
         numlevs = result

                     z = 1
                     while( z <= numlevs )
                     level = subwrd(levels,z)
                  if(level >= 1)
                     'set lev 'level
                     'movie statpltdrv "'field' 'desc.k' 'desc.kp1' 'numfiles' 'title'" -tend 'mtdim' -print -rotate 90 -name 'SOURCE'/'desc.k'.'desc.kp1'/stats_'name'_syscmp_GLO_'level'_'month
                     '!sleep 60 ; convert -loop 0 -delay 30 'SOURCE'/'desc.k'.'desc.kp1'/stats_'name'_syscmp_GLO_'level'_'month'.*.gif 'SOURCE'/'desc.k'.'desc.kp1'/stats_'name'_syscmp_GLO_'level'_'month'.gif &'
                  endif
                     z = z + 1
                     endwhile

         n = n + 1
         endwhile

k = k + 1
endwhile

'close 'newfile
'set dfile 1'

****************************************************************

else

****************************************************************
****                  Make Zonal Mean Plots                 ****
****************************************************************

'open 'zminfile
'getinfo    numfiles'
            newfile = result
'set dfile 'newfile
'set x 1'
'sety'

k    = 0
ktot = ntot-1
while( k <= ktot )
 kp1 = k + 1
'!/bin/mkdir -p 'SOURCE'/'desc.k'.'desc.kp1

       n = 1
       while ( n<=numflds )
                  field = subwrd(fields,n)

         if( field != p )
             if( field  = h   ) ; name = hght ; endif
             if( field  = u   ) ; name = uwnd ; endif
             if( field  = v   ) ; name = vwnd ; endif
             if( field  = t   ) ; name = tmpu ; endif
             if( field  = q   ) ; name = sphu ; endif
             if( field  = chi ) ; name = chi  ; endif
             if( field  = psi ) ; name = psi  ; endif

             if( levmin <= 100 )
                 'set lev 1000 100'
                 'set zlog off'
                 'movie statpltdrvz "'field' 'desc.k' 'desc.kp1' 'numfiles' 'title'" -tend 'mtdim' -print -rotate 90 -name 'SOURCE'/'desc.k'.'desc.kp1'/stats_'name'_syscmp_GLO_z_'month
                 '!sleep 60 ; convert -loop 0 -delay 30 'SOURCE'/'desc.k'.'desc.kp1'/stats_'name'_syscmp_GLO_z_'month'.*.gif 'SOURCE'/'desc.k'.'desc.kp1'/stats_'name'_syscmp_GLO_z_'month'.gif &'
             endif

             if( levmin <= 10 & field != q )
                 'set lev 1000 10'
                 'set zlog on'
                 'setlevs'
                 'movie statpltdrvz "'field' 'desc.k' 'desc.kp1' 'numfiles' 'title'" -tend 'mtdim' -print -rotate 90 -name 'SOURCE'/'desc.k'.'desc.kp1'/stats_'name'_syscmp_GLO_zlog10_'month
                 '!sleep 60 ; convert -loop 0 -delay 30 'SOURCE'/'desc.k'.'desc.kp1'/stats_'name'_syscmp_GLO_zlog10_'month'.*.gif 'SOURCE'/'desc.k'.'desc.kp1'/stats_'name'_syscmp_GLO_zlog10_'month'.gif &'
             endif

             if( levmin <= 1 & field != q )
                 'set lev 1000 1'
                 'set zlog on'
                 'setlevs'
                 'movie statpltdrvz "'field' 'desc.k' 'desc.kp1' 'numfiles' 'title'" -tend 'mtdim' -print -rotate 90 -name 'SOURCE'/'desc.k'.'desc.kp1'/stats_'name'_syscmp_GLO_zlog1_'month
                 '!sleep 60 ; convert -loop 0 -delay 30 'SOURCE'/'desc.k'.'desc.kp1'/stats_'name'_syscmp_GLO_zlog1_'month'.*.gif 'SOURCE'/'desc.k'.'desc.kp1'/stats_'name'_syscmp_GLO_zlog1_'month'.gif &'
             endif
         endif

       n = n + 1
       endwhile

k = k + 1
endwhile

'close 'newfile
'set dfile 1'

endif

return

****************************************************************
****************************************************************

* To Prevent Problem with BIT: 0
* ------------------------------
function checkbit (word)
      bit = substr(word,1,1)
      dum = bit'TEST'
      if( dum = "0TEST" ) ; bit = A ; endif
return bit

