* +-======-+ * 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 * * +-======-+ function makefile (args) 'numargs 'args numargs = result num = 0 while( num < numargs ) num = num + 1 if( subwrd(args,num)='-FUNCTION') ; function = subwrd(args,num+1) ; endif if( subwrd(args,num)='-NAME' ) ; name = subwrd(args,num+1) ; endif endwhile * Variable is in File * ------------------- say '' say 'Creating File for Data:' say '-----------------------' 'getinfo file' infile = result 'q gxout' gxout = sublin(result,4) gxout = subwrd(gxout ,6) 'run getenv "GEOSUTIL"' geosutil = result 'getinfo lonmin' lonmin = result 'getinfo lonmax' lonmax = result 'getinfo latmin' latmin = result 'getinfo latmax' latmax = result 'getinfo tmin' tmin = result 'getinfo tmax' tmax = result 'set t 'tmin 'getinfo date' begdate = result 'getinfo zmin' zmin = result 'getinfo zmax' zmax = result 'set z 'zmin' 'zmax zdim = zmax-zmin+1 'sety' 'set t 'tmin' 'tmax tdim = tmax-tmin+1 'getinfo xdim' xdim = result 'getinfo ydim' ydim = result 'getinfo undef' undef = result 'getinfo dlat' dlat = result 'getinfo dlon' dlon = result lontot = lonmax - lonmin + dlon/2 * Get INFO from CTL * ----------------- 'q ctlinfo' n = 1 while( n >0 ) line = sublin(result,n) word = subwrd(line,1) if( word = 'tdef' ) dt = subwrd(line,5) n = 0 else n = n + 1 endif endwhile n = 1 while( n >0 ) line = sublin(result,n) word = subwrd(line,1) if( word = 'ydef' ) lat0 = subwrd(line,4) n = 0 else n = n + 1 endif endwhile n = 1 while( n >0 ) line = sublin(result,n) word = subwrd(line,1) if( word = 'xdef' ) lon0 = subwrd(line,4) n = 0 else n = n + 1 endif endwhile * ----------------- levs = '' z = zmin while( z <= zmax ) 'set z 'z 'getinfo level' levs = levs' 'result z = z + 1 endwhile say '' say 'DFILE: 'infile say 'UNDEF: 'undef say ' LON0: 'lon0 say ' DLON: 'dlon say ' YDEF: 'ydim say ' LAT0: 'lat0 say ' DLAT: 'dlat say ' XDEF: 'xdim say ' ZDEF: 'zdim say ' TDEF: 'tdim say 'BDATE: 'begdate say ' DT: 'dt say ' LEVS: 'levs say '' say ' LONMIN:LONMAX = 'lonmin':'lonmax say '' '!remove sedfile' '!touch sedfile' '!remove 'name'.ctl' '!remove 'name'.data' 'set gxout fwrite' 'set fwrite 'name'.data' * ---------------------------------------------------------------------------- * Initialize Month Counters * ------------------------- 'set t 1 ' 'set x 1 'xdim 'set y 1 'ydim 'set z 'zmin' 'zmax k =1 while( k<=12 ) month.k = 0 'define loc'k' = lat-lat + lon-lon + lev-lev' k =k+1 endwhile * Compute Climatological Function * ------------------------------- k =1 t =tmin while( t<=tmax ) 'set t 't 'set y 1 'ydim 'set z 'zmin' 'zmax 'set x 1 'xdim 'getinfo date' date = result say ' Computing Function: 'function' with NAME: 'name' for t = 't' 'date 'define loc'k' = loc'k' + 'function month.k = month.k + 1 k = k + 1 if( k>12 ) ; k = 1 ; endif t = t+1 endwhile say '' k =1 while( k<=12 ) if( month.k != 0 ) say 'define loc'k' = loc'k' / 'month.k 'define loc'k' = loc'k' / 'month.k endif k =k+1 endwhile * Write Climatological Function * ----------------------------- k =1 t =tmin while( t<=tmin+11 ) if( month.k != 0 ) z = zmin while(z<=zmax) 'set z 'z 'd loc'k z = z+1 endwhile k =k+1 endif t = t+1 endwhile kmax =k-1 * ---------------------------------------------------------------------------- say '' 'disable fwrite' k =1 while( k<=12 ) 'undefine loc'k k =k+1 endwhile 'set gxout 'gxout '!echo "s?UNDEF?"'undef'?g >> sedfile' '!echo "s?DX?"'dlon'?g >> sedfile' '!echo "s?DY?"'dlat'?g >> sedfile' '!echo "s?DT?"'dt'?g >> sedfile' '!echo "s?LON0?"'lon0'?g >> sedfile' '!echo "s?LAT0?"'lat0'?g >> sedfile' '!echo "s?XDIM?"'xdim'?g >> sedfile' '!echo "s?YDIM?"'ydim'?g >> sedfile' '!echo "s?ZDIM?"'zdim'?g >> sedfile' '!echo "s?TDIM?"'kmax'?g >> sedfile' '!echo "s?BDATE?"'begdate'?g >> sedfile' '!echo "s?LEVS?"'levs'?g >> sedfile' '!echo "s?q.data?"'name'.data?g >> sedfile' '!echo "s?qdata?"'name'?g >> sedfile' '!/bin/cp 'geosutil'/plots/grads_util/makefile.tmpl .' '!sed -f sedfile makefile.tmpl > 'name'.ctl' 'open 'name'.ctl' 'getinfo numfiles' newfile = result 'set dfile 'newfile 'set lat 'latmin' 'latmax 'set lon 'lonmin' 'lonmax 'set t 1 'kmax 'setz' return newfile' 'kmax