* +-======-+ * Copyright (c) 2003-2007 United States Government as represented by * the Admistrator of the National Aeronautics and Space Administration. * All Rights Reserved. * * THIS OPEN SOURCE AGREEMENT ("AGREEMENT") DEFINES THE RIGHTS OF USE, * REPRODUCTION, DISTRIBUTION, MODIFICATION AND REDISTRIBUTION OF CERTAIN * COMPUTER SOFTWARE ORIGINALLY RELEASED BY THE UNITED STATES GOVERNMENT AS * REPRESENTED BY THE GOVERNMENT AGENCY LISTED BELOW ("GOVERNMENT AGENCY"). * THE UNITED STATES GOVERNMENT, AS REPRESENTED BY GOVERNMENT AGENCY, IS AN * INTENDED THIRD-PARTY BENEFICIARY OF ALL SUBSEQUENT DISTRIBUTIONS OR * REDISTRIBUTIONS OF THE SUBJECT SOFTWARE. ANYONE WHO USES, REPRODUCES, * DISTRIBUTES, MODIFIES OR REDISTRIBUTES THE SUBJECT SOFTWARE, AS DEFINED * HEREIN, OR ANY PART THEREOF, IS, BY THAT ACTION, ACCEPTING IN FULL THE * RESPONSIBILITIES AND OBLIGATIONS CONTAINED IN THIS AGREEMENT. * * Government Agency: National Aeronautics and Space Administration * Government Agency Original Software Designation: GSC-15354-1 * Government Agency Original Software Title: GEOS-5 GCM Modeling Software * User Registration Requested. Please Visit http://opensource.gsfc.nasa.gov * Government Agency Point of Contact for Original Software: * Dale Hithon, SRA Assistant, (301) 286-2691 * * +-======-+ *************************************************************** * * * 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