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 endif endwhile ******************************************************* **** Read Stats Resource File **** ******************************************************* 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 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 * --------------------- 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 * ---------------------------------------------------------------------------- * For Zonal Mean Plots, we need to define a Master Default File which contains * the smallest number of vertical levels (from 1000 to 100 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 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 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_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 * ----------------------------------------------------------- 'set dfile 1' 'setlons' 'sety' 'getinfo zdim' zdim.k = result if( levs0 = 'zonal' ) '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 >= 100 ) 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 100' 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 >= 100 ) 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 >= 100) 'set lev 'level 'movie statpltdrv "'field' 'desc.k' 'desc.kp1' 'numfiles'" -tend 'mtdim' -print -rotate 90 -name 'SOURCE'/'desc.k'.'desc.kp1'/stats_'name'_syscmp_GLO_'level'_'month '!sleep 15 ; 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' 'set lev 1000 100' 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 'movie statpltdrvz "'field' 'desc.k' 'desc.kp1' 'numfiles'" -tend 'mtdim' -print -rotate 90 -name 'SOURCE'/'desc.k'.'desc.kp1'/stats_'name'_syscmp_GLO_z_'month '!sleep 15 ; 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 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