***************************************************************
*                                                             *
* This script computes the Seasonal Means of the INPUT field  *
*      name(required):  The INPUT field                       *
*      file  (option):  The file or tag associated with name  *
*      offset(option):  The offset to begin calculations      *
*                                                             *
* Note: If the INPUT is a difference field, you can easily    *
*       compute the 95% confidence interval of the difference *
*       using:                                                *
*                                                             *
*         TVAL = SQRT(N) x NAME_DIFF_MEAN / NAME_DIFF_STD     *
*                                                             *
*       astudt (N-1) 0.20  [90% Confidence]                   *
*       astudt (N-1) 0.10  [95% Confidence]                   *
*       astudt (N-1) 0.08  [96% Confidence]                   *
*       astudt (N-1) 0.04  [98% Confidence]                   *
*       astudt (N-1) 0.02  [99% Confidence]                   *
*                                                             *
*       q defval astudtout 1 1                                *
*       critval=subwrd(result,3)                              *
*                                                             *
*       and then CONTOUR TVAL using CLEVS = critval           *
*                                                             *
***************************************************************
***************************************************************
 
function seasonal (args)
name   = subwrd(args,1)
file   = subwrd(args,2)
offset = subwrd(args,3)

if( offset="" ) ; offset = 0 ; endif
if( file="_"  ) ; file = ""  ; endif

* Initialize Time based on Existance of Environment Variables
* -----------------------------------------------------------
'run getenv "DO_STD"'
             do_std   = result
'run getenv "BEGDATE"'
             begdate  = result
'run getenv "ENDDATE"'
             enddate  = result
'run getinfo tdim'
             tdim = result

'run uppercase 'do_std
                do_std = result

tmin = 0
tmax = tdim + 1

if( begdate != "NULL" & enddate != "NULL" )
say ' '
say 'Inside seasonal, Asking for begdate: 'begdate
say '---------------  Asking for enddate: 'enddate
   'set time 'begdate' 'enddate
   'getinfo   tmin'
              tmin = result
   'getinfo   tmax'
              tmax = result
   'run setenv "CLIMATE" Actual'
endif

if( tmin<1 | tmax>tdim )
    tmin = 1
    'set t ' tmin
    'getinfo date'
          begdate = result
    'set t 'tdim
    'getinfo date'
          enddate = result
     tmax = tdim
    'run setenv "CLIMATE" Climatology'
endif

'set time  'begdate
     tbeg = gettbeg()

* Compute Seasons
* ---------------
tjan = 01-tbeg+tmin
tfeb = 02-tbeg+tmin
tmar = 03-tbeg+tmin
tapr = 04-tbeg+tmin
tmay = 05-tbeg+tmin
tjun = 06-tbeg+tmin
tjul = 07-tbeg+tmin
taug = 08-tbeg+tmin
tsep = 09-tbeg+tmin
toct = 10-tbeg+tmin
tnov = 11-tbeg+tmin
tdec = 12-tbeg+tmin

if( tjan<=0 ) ; tjan = tjan + 12 ; endif
if( tfeb<=0 ) ; tfeb = tfeb + 12 ; endif
if( tmar<=0 ) ; tmar = tmar + 12 ; endif
if( tapr<=0 ) ; tapr = tapr + 12 ; endif
if( tmay<=0 ) ; tmay = tmay + 12 ; endif
if( tjun<=0 ) ; tjun = tjun + 12 ; endif
if( tjul<=0 ) ; tjul = tjul + 12 ; endif
if( taug<=0 ) ; taug = taug + 12 ; endif
if( tsep<=0 ) ; tsep = tsep + 12 ; endif
if( toct<=0 ) ; toct = toct + 12 ; endif
if( tnov<=0 ) ; tnov = tnov + 12 ; endif
if( tdec<=0 ) ; tdec = tdec + 12 ; endif

tmam = tmar + 2
tjja = tjun + 2
tson = tsep + 2
tdjf = tdec + 2

'getinfo time'
         time = result

'run getenv "CLIMATE"'
             climate = result

* Intialize Time Range (12-months Starting from Begdate)
* ------------------------------------------------------
 t1 = time + offset
 t2 = t1   + 11


say ' '
say 'Processing Seasonal Means for: 'name' using 'climate' Dates'
say '------------------------------ '
say ' t_beg = 'time'  'begdate
say ' t_end = 'tmax'  'enddate
say 'offset = 'offset
say ' '
say 'JAN: 'tjan
say 'FEB: 'tfeb
say 'MAR: 'tmar
say 'APR: 'tapr
say 'MAY: 'tmay
say 'JUN: 'tjun
say 'JUL: 'tjul
say 'AUG: 'taug
say 'SEP: 'tsep
say 'OCT: 'toct
say 'NOV: 'tnov
say 'DEC: 'tdec
say 'MAM: 'tmar' 'tmam
say 'JJA: 'tjun' 'tjja
say 'SON: 'tsep' 'tson
say 'DJF: 'tdec' 'tdjf
say 'ANN: 't1' 't2



* Define Climatology Field
* ------------------------
if( tmax < t2 )
   'set t 't1' 'tmax
else
   'set t 't1' 't2
endif
'define 'name'clim'file' = ave('name',t+0,t='tmax',1yr)'
'modify 'name'clim'file' seasonal'
 say " "
 say "Defined "name"clim"file


* Define Monthly and Seasonal Mean Fields
* ---------------------------------------
'set t 'tjan ; 'define 'name'jan'file' = 'name'clim'file
'set t 'tfeb ; 'define 'name'feb'file' = 'name'clim'file
'set t 'tmar ; 'define 'name'mar'file' = 'name'clim'file
'set t 'tapr ; 'define 'name'apr'file' = 'name'clim'file
'set t 'tmay ; 'define 'name'may'file' = 'name'clim'file
'set t 'tjun ; 'define 'name'jun'file' = 'name'clim'file
'set t 'tjul ; 'define 'name'jul'file' = 'name'clim'file
'set t 'taug ; 'define 'name'aug'file' = 'name'clim'file
'set t 'tsep ; 'define 'name'sep'file' = 'name'clim'file
'set t 'toct ; 'define 'name'oct'file' = 'name'clim'file
'set t 'tnov ; 'define 'name'nov'file' = 'name'clim'file
'set t 'tdec ; 'define 'name'dec'file' = 'name'clim'file

'set t 'time

'define 'name'djf'file' = ave('name'clim'file',t='tdec',t='tdjf')'
say "Defined "name"djf"file

'define 'name'jja'file' = ave('name'clim'file',t='tjun',t='tjja')'
say "Defined "name"jja"file

'define 'name'son'file' = ave('name'clim'file',t='tsep',t='tson')'
say "Defined "name"son"file

'define 'name'mam'file' = ave('name'clim'file',t='tmar',t='tmam')'
say "Defined "name"mam"file

'define 'name'ann'file' = ave('name'clim'file',t='t1',t='t2')'
say "Defined "name"ann"file


* Do Standard Deviation Calculations
* ----------------------------------
if( do_std = "TRUE" )

* Define Anomoly Field
* --------------------
'set t 1 'tmax
 'define 'name'var'file' = pow('name' - 'name'clim'file',2)'
 say "Defined "name"anom"file

* Define Monthly STD.DEV. Fields
* ------------------------------
* JAN
* ---
'set t 'time
'define 'name'janstd'file' = sum('name'var'file',t='tjan',t='tmax',12)'
'set t 'tjan' 'tmax
'count "'JAN'"'
         num  = result
     if( num >= 2) ; num = num-1 ; endif
'set t 'time
'define 'name'janstd'file' = sqrt( 'name'janstd'file'/'num' )'

* FEB
* ---
'set t 'time
'define 'name'febstd'file' = sum('name'var'file',t='tfeb',t='tmax',12)'
'set t 'tfeb' 'tmax
'count "'FEB'"'
         num  = result
     if( num >= 2) ; num = num-1 ; endif
'set t 'time
'define 'name'febstd'file' = sqrt( 'name'febstd'file'/'num' )'

* MAR
* ---
'set t 'time
'define 'name'marstd'file' = sum('name'var'file',t='tmar',t='tmax',12)'
'set t 'tmar' 'tmax
'count "'MAR'"'
         num  = result
     if( num >= 2) ; num = num-1 ; endif
'set t 'time
'define 'name'marstd'file' = sqrt( 'name'marstd'file'/'num' )'

* APR
* ---
'set t 'time
'define 'name'aprstd'file' = sum('name'var'file',t='tapr',t='tmax',12)'
'set t 'tapr' 'tmax
'count "'APR'"'
         num  = result
     if( num >= 2) ; num = num-1 ; endif
'set t 'time
'define 'name'aprstd'file' = sqrt( 'name'aprstd'file'/'num' )'

* MAY
* ---
'set t 'time
'define 'name'maystd'file' = sum('name'var'file',t='tmay',t='tmax',12)'
'set t 'tmay' 'tmax
'count "'MAY'"'
         num  = result
     if( num >= 2) ; num = num-1 ; endif
'set t 'time
'define 'name'maystd'file' = sqrt( 'name'maystd'file'/'num' )'

* JUN
* ---
'set t 'time
'define 'name'junstd'file' = sum('name'var'file',t='tjun',t='tmax',12)'
'set t 'tjun' 'tmax
'count "'JUN'"'
         num  = result
     if( num >= 2) ; num = num-1 ; endif
'set t 'time
'define 'name'junstd'file' = sqrt( 'name'junstd'file'/'num' )'

* JUL
* ---
'set t 'time
'define 'name'julstd'file' = sum('name'var'file',t='tjul',t='tmax',12)'
'set t 'tjul' 'tmax
'count "'JUL'"'
         num  = result
     if( num >= 2) ; num = num-1 ; endif
'set t 'time
'define 'name'julstd'file' = sqrt( 'name'julstd'file'/'num' )'

* AUG
* ---
'set t 'time
'define 'name'augstd'file' = sum('name'var'file',t='taug',t='tmax',12)'
'set t 'taug' 'tmax
'count "'AUG'"'
         num  = result
     if( num >= 2) ; num = num-1 ; endif
'set t 'time
'define 'name'augstd'file' = sqrt( 'name'augstd'file'/'num' )'

* SEP
* ---
'set t 'time
'define 'name'sepstd'file' = sum('name'var'file',t='tsep',t='tmax',12)'
'set t 'tsep' 'tmax
'count "'SEP'"'
         num  = result
     if( num >= 2) ; num = num-1 ; endif
'set t 'time
'define 'name'sepstd'file' = sqrt( 'name'sepstd'file'/'num' )'

* OCT
* ---
'set t 'time
'define 'name'octstd'file' = sum('name'var'file',t='toct',t='tmax',12)'
'set t 'toct' 'tmax
'count "'OCT'"'
         num  = result
     if( num >= 2) ; num = num-1 ; endif
'set t 'time
'define 'name'octstd'file' = sqrt( 'name'octstd'file'/'num' )'

* NOV
* ---
'set t 'time
'define 'name'novstd'file' = sum('name'var'file',t='tnov',t='tmax',12)'
'set t 'tnov' 'tmax
'count "'NOV'"'
         num  = result
     if( num >= 2) ; num = num-1 ; endif
'set t 'time
'define 'name'novstd'file' = sqrt( 'name'novstd'file'/'num' )'

* DEC
* ---
'set t 'time
'define 'name'decstd'file' = sum('name'var'file',t='tdec',t='tmax',12)'
'set t 'tdec' 'tmax
'count "'DEC'"'
         num  = result
     if( num >= 2) ; num = num-1 ; endif
'set t 'time
'define 'name'decstd'file' = sqrt( 'name'decstd'file'/'num' )'


* SEASONS + ANN
* -------------
'set t 'time

'define 'name'djfvar'file' = lat-lat+lon-lon'
'define 'name'mamvar'file' = lat-lat+lon-lon'
'define 'name'jjavar'file' = lat-lat+lon-lon'
'define 'name'sonvar'file' = lat-lat+lon-lon'
'define 'name'annvar'file' = lat-lat+lon-lon'

       ny = 0
       t1 = tjan
       t2 = t1 + 11
while( t2 <= tmax )

         tdjfb = t1 + 11
         tdjfe = tdjfb + 2
'define  djfcur = ave( 'name',t='tdjfb',t='tdjfe' )'
'define 'name'djfvar'file' = 'name'djfvar'file' + pow( djfcur-'name'djf'file',2 )'

         tmamb = t1    + 2
         tmame = tmamb + 2
'define  mamcur = ave( 'name',t='tmamb',t='tmame' )'
'define 'name'mamvar'file' = 'name'mamvar'file' + pow( mamcur-'name'mam'file',2 )'

         tjjab = t1    + 5
         tjjae = tjjab + 2
'define  jjacur = ave( 'name',t='tjjab',t='tjjae' )'
'define 'name'jjavar'file' = 'name'jjavar'file' + pow( jjacur-'name'jja'file',2 )'

         tsonb = t1    + 8
         tsone = tsonb + 2
'define  soncur = ave( 'name',t='tsonb',t='tsone' )'
'define 'name'sonvar'file' = 'name'sonvar'file' + pow( soncur-'name'son'file',2 )'

         tannb = t1    + 0
         tanne = tannb + 11
'define  anncur = ave( 'name',t='tannb',t='tanne' )'
'define 'name'annvar'file' = 'name'annvar'file' + pow( anncur-'name'ann'file',2 )'

       t1 = t2 + 1
       t2 = t1 + 11
       ny = ny + 1
endwhile
say "The Total Number of ANN's = "ny

'define 'name'djfvar'file' = 'name'djfvar'file' / 'ny
'define 'name'mamvar'file' = 'name'mamvar'file' / 'ny
'define 'name'jjavar'file' = 'name'jjavar'file' / 'ny
'define 'name'sonvar'file' = 'name'sonvar'file' / 'ny
'define 'name'annvar'file' = 'name'annvar'file' / 'ny

'define 'name'djfstd'file' = sqrt( 'name'djfvar'file' ) '
'define 'name'mamstd'file' = sqrt( 'name'mamvar'file' ) '
'define 'name'jjastd'file' = sqrt( 'name'jjavar'file' ) '
'define 'name'sonstd'file' = sqrt( 'name'sonvar'file' ) '
'define 'name'annstd'file' = sqrt( 'name'annvar'file' ) '

'undefine 'name'var'file
endif

*'undefine 'name'clim'file

return

function gettbeg(args)
'getinfo month'
         month = result
      if(month="JAN") ; tbeg = 1  ; endif
      if(month="FEB") ; tbeg = 2  ; endif
      if(month="MAR") ; tbeg = 3  ; endif
      if(month="APR") ; tbeg = 4  ; endif
      if(month="MAY") ; tbeg = 5  ; endif
      if(month="JUN") ; tbeg = 6  ; endif
      if(month="JUL") ; tbeg = 7  ; endif
      if(month="AUG") ; tbeg = 8  ; endif
      if(month="SEP") ; tbeg = 9  ; endif
      if(month="OCT") ; tbeg = 10 ; endif
      if(month="NOV") ; tbeg = 11 ; endif
      if(month="DEC") ; tbeg = 12 ; endif
return tbeg
