diff --git a/CHANGELOG.md b/CHANGELOG.md index c91e901..1692ce9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,7 +17,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Deprecated -## [2.1.1] - 2024-07-26 +## [2.1.2] - 2024-07-30 + +### Changed + +- Added MASKFILE for time-discontinuous data in TEM diagnostics + +## [2.1.1] - 2024-07-30 + +### Added + +- MOM6 C90 ogrid option to `remap_utils.py` ### Fixed diff --git a/plots/grads_util/fsource b/plots/grads_util/fsource new file mode 100755 index 0000000..f75cd04 --- /dev/null +++ b/plots/grads_util/fsource @@ -0,0 +1,18 @@ +#!/bin/csh -f + +set base = `/bin/basename $1` +@ n = 1 +set source = '' +set dummy = `echo $1 | cut -d / -f$n` +while( .$dummy != .$base ) +set source = ${source}/${dummy} +@ n = $n + 1 +set dummy = `echo $1 | cut -d / -f$n` +end +echo SOURCE: $source + +if( -e FSOURCE.txt ) then +/bin/rm FSOURCE.txt +endif +echo $source > FSOURCE.txt +exit diff --git a/plots/grads_util/makezdif4.gs b/plots/grads_util/makezdif4.gs new file mode 100644 index 0000000..80031ff --- /dev/null +++ b/plots/grads_util/makezdif4.gs @@ -0,0 +1,425 @@ +function makezdif4 (args) + +'numargs 'args + numargs = result + + abs = FALSE + name = 'q' + ptop = 0 + num = 0 +while( num < numargs ) + num = num + 1 +if( subwrd(args,num)='-q1' ) ; q1 = subwrd(args,num+1) ; endif +if( subwrd(args,num)='-q2' ) ; q2 = subwrd(args,num+1) ; endif +if( subwrd(args,num)='-file1' ) ; file1 = subwrd(args,num+1) ; endif +if( subwrd(args,num)='-file2' ) ; file2 = subwrd(args,num+1) ; endif +if( subwrd(args,num)='-name' ) ; name = subwrd(args,num+1) ; endif +if( subwrd(args,num)='-ptop' ) ; ptop = subwrd(args,num+1) ; endif +if( subwrd(args,num)='-abs' ) ; abs = TRUE ; endif +endwhile + +'run getenv "GEOSUTIL"' + geosutil = result + +* Get Current Environment Settings +* -------------------------------- +'getinfo file' + dfile = result + +'q gxout' + gxout = sublin(result,4) + gxout = subwrd(gxout ,6) + +'getinfo zfreq' + zfreq = result + if( zfreq = 'varying' ) + 'getinfo zmin' + zmin = result + 'getinfo zmax' + zmax = result + endif + if( zfreq = 'fixed' ) + 'getinfo zpos' + zmin = result + zmax = result + endif + +'getinfo tfreq' + tfreq = result + if( tfreq = 'varying' ) + 'getinfo tmin' + tmin = result + 'getinfo tmax' + tmax = result + endif + if( tfreq = 'fixed' ) + 'getinfo time' + tmin = result + tmax = result + endif + 'q ctlinfo' + ctlinfo = result + n = 1 + while( n > 0 ) + line = sublin(ctlinfo,n) + word = subwrd(line,1) + if( word = 'tdef' ) + tinc = subwrd(line,5) + n = 0 + else + n = n + 1 + endif + endwhile +say 'tmin: 'tmin' tmax: 'tmax' tinc: 'tinc +'set t 'tmin +'run getinfo date' + begdate = result +say 'BEGDATE = 'begdate + +'getinfo dlat' + dlat = result + dlon = dlat + xdim = 360 / dlon + ydim = ( 180 / dlat ) + 1 + lon1 = -180 + lon2 = 180 - dlon +say 'dlat = 'dlat' xdim = 'xdim' LONS: 'lon1','lon2 +say 'dlon = 'dlon' ydim = 'ydim +pause + +'getinfo lonmin' + lonbeg = result +'getinfo lonmax' + lonend = result +'getinfo latmin' + latbeg = result +'getinfo latmax' + latend = result + +* Find ZDIM for each File +* ----------------------- +'set dfile 'file1 +'getinfo zdim' + zdim1 = result + +'set dfile 'file2 +'getinfo zdim' + zdim2 = result +'set z 'zdim2 + 'getinfo level' + level = result +if( level > ptop ) ; ptop = level ; endif +say 'PTOP = 'ptop +*pause + +* Create Array of Target Pressure Levels based on File2 +* ----------------------------------------------------- +levs = '' +nlev = 0 + z = 1 +while( z<=zdim2 ) + 'set z 'z + 'getinfo level' + level = result + level.z = result + if( level >= ptop ) + levs = levs % level.z % " " + nlev = nlev + 1 + endif + z = z + 1 +endwhile + +say '' +say 'Number of Target Pressure Levels from File2: 'nlev +say ' Target Pressure Levels from File2: 'levs +say '' + + +* Create Temporary File at 0.25x0.25 degree resolution with consistent levels +* --------------------------------------------------------------------------- +if( lonbeg != lonend ) + 'setlons' + 'getinfo lon' + lon = result + if( lon < 0 ) + 'set lon -180 179.75' + lon = -180 + else + 'set lon 0 359.75' + lon = 0 + endif +else + 'set x 1' +endif +'set lat -90 90' + +* Loop over Time +* -------------- +'!remove 'name'.data' + tdim = tmax-tmin+1 + t = tmin +while( t<= tmax ) + + +* ------------------------------------------------------------ +* ------------------------------------------------------------ +* Interpolate Q1 Variable to Target Pressure Levels from File2 +* ------------------------------------------------------------ +* ------------------------------------------------------------ + +'set dfile 'file1 +'set t 't +'run getinfo date' + curdate = result +say 'CURRENT DATE = 'curdate + +* Populate Q1(x=1) for all longitudes +* ----------------------------------- +'set x 1' +'sety' +'setz' +'define q1x1 = 'q1 +'set lon -180 180' +'define q1tmp = q1x1 + lon-lon' + + z = 1 +while( z<=nlev ) + say 'Regrid Q2 to DLATxDLAT-Deg RSLV at File2 Target Pressure: 'level.z + say '--------------------------------------------------------- ' + 'set dfile 'file2 + 'set lev 'level.z + 'set x 1' + 'define q2x1 = 'q2 + 'set lon -180 180' + 'define qtmp = q2x1 + lon-lon' + 'define qobs = regrid2( qtmp,'dlon','dlat',bs_p1,-180,-90)' + 'undefine qtmp' + + if( z=1 & t=tmin ) + 'set gxout stat' + 'd q2x1' + undef = sublin(result,6) + undef = subwrd(undef,4) + 'set gxout fwrite' + 'set fwrite 'name'.data' + endif + + + say 'Find File1 Bounding Levels around File2 Target Pressure: 'level.z + say '--------------------------------------------------------- ' + 'set dfile 'file1 + k = 1 + 'set z 'k + 'getinfo level' + level = result + while( level > level.z & k < zdim1 ) + k = k + 1 + 'set z 'k + 'getinfo level' + level = result + endwhile +* say 'File1 Bounding Levels to File2 Target Pressure: 'level.z +* say '----------------------------------------------- ' +* say 'k above: 'k ' Pressure Above: 'level + if( k > 1 ) + 'set z 'k-1 + 'getinfo level' + levm1 = result + say 'k below: 'k-1' Pressure Below: 'levm1 + 'set z 'k + endif + + if( level = level.z ) + say 'Q1 Level: 'level' matches Q2 Level: 'level.z + say 'Simply Regrid Q1 to DLATxDLAT-Deg RSLV at File1 Pressure: 'level + say '-------------------------------------------------------- ' + 'set lon -180 180' + 'define qmod = regrid2( q1tmp,'dlon','dlat',bs_p1,-180,-90)' + 'set lon 'lon1' 'lon2 + if( abs = TRUE ) + ' d abs(qmod-qobs)' + else + ' d qmod-qobs' + endif + 'set lon -180 180' + + else + + if( k > 1 ) + kp1 = k+1 + kp0 = k +* p <= level.z + km1 = k-1 + km2 = k-2 + + 'set z 'km1 + 'getinfo level' + levm1 = result + PLM1 = math_log(''levm1'') + 'define qkm1 = q1tmp' + + if( km1 > 1 & kp0 < zdim1 ) + 'set z 'kp1 + 'getinfo level' + levp1 = result + PLP1 = math_log(''levp1'') + 'define qkp1 = q1tmp' + say 'k: 'k' kp1: 'kp1' levp1: 'levp1' LOG(levp1): 'PLP1 + + 'set z 'kp0 + 'getinfo level' + levp0 = result + PLP0 = math_log(''levp0'') + 'define qkp0 = q1tmp' + say 'k: 'k' kp0: 'kp0' levp0: 'levp0' LOG(levp0): 'PLP0 + + P = math_log(''level.z'') + say ' Target Pressure: 'level.z' LOG(Target) 'P + + say 'k: 'k' km1: 'km1' levm1: 'levm1' LOG(levm1): 'PLM1 + + 'set z 'km2 + 'getinfo level' + levm2 = result + PLM2 = math_log(''levm2'') + 'define qkm2 = q1tmp' + say 'k: 'k' km2: 'km2' levm2: 'levm2' LOG(levm2): 'PLM2 + + DLP0 = PLP1-PLP0 + DLM1 = PLP0-PLM1 + DLM2 = PLM1-PLM2 + + ap1 = (P-PLP0)*(P-PLM1)*(P-PLM2)/( DLP0*(DLP0+DLM1)*(DLP0+DLM1+DLM2) ) + ap0 = (PLP1-P)*(P-PLM1)*(P-PLM2)/( DLP0* DLM1 *( DLM1+DLM2) ) + am1 = (PLP1-P)*(PLP0-P)*(P-PLM2)/( DLM1* DLM2 *(DLP0+DLM1 ) ) + am2 = (PLP1-P)*(PLP0-P)*(PLM1-P)/( DLM2*(DLM1+DLM2)*(DLP0+DLM1+DLM2) ) + + say 'AP1: 'ap1' AP0: 'ap0' AM1: 'am1' AM2: 'am2' sum: 'ap1+ap0+am1+am2 + + 'set z 'k + 'define qint = 'ap1'*qkp1 + 'ap0'*qkp0 + 'am1'*qkm1 + 'am2'*qkm2' + + say 'Using Q2 Level Indices:'kp1' 'kp0' 'km1' 'km2 + say 'Using Q2 Pressure Levels:'levp1' 'levp0' 'levm1' 'levm2 + say '------------ ' + else + 'set z 'k + 'define qint = qkm1 + (qk-qkm1)*( log('level.z'/'levm1') / log('level'/'levm1') )' +* say 'Using Levels :'k' ('level') and 'km1' ('levm1')' +* say '------------ ' + endif + else + kp1 = k+1 + 'set z 'z + 'getinfo level' + levp1 = result + 'define qkp1 = q1tmp' + + 'define qint = qkp1 + (qk-qkp1)*( log('level.z'/'levp1') / log('level'/'levp1') )' + say 'Using Levels :'k' ('level') and 'kp1' ('levp1')' + say '------------ ' + endif + 'set lon -180 180' + 'define qmod = regrid2( qint,'dlon','dlat',bs_p1,-180,-90)' + 'set lon 'lon1' 'lon2 + if( abs = TRUE ) + ' d abs(qmod-qobs)' + else + ' d qmod-qobs' + endif + 'set lon -180 180' + endif + say ' ' +*pause +z = z + 1 +endwhile +t = t + 1 +endwhile +'disable fwrite' + +say 'Creating 'name'.ctl' +say 'TDIM: 'tdim + +'!remove sedfile' +'!remove 'name'.ctl' +'!echo "s@GRADSDATA@"'name'.data@g > sedfile' +'!echo "s@UNDEF@"'undef'@g >> sedfile' +'!echo "s@XDIM@"'xdim'@g >> sedfile' +'!echo "s@YDIM@"'ydim'@g >> sedfile' +'!echo "s@DLON@"'dlon'@g >> sedfile' +'!echo "s@DLAT@"'dlat'@g >> sedfile' +'!echo "s@ZDIM2@"'nlev'@g >> sedfile' +'!echo "s@TDIM@"'tdim'@g >> sedfile' +'!echo "s@LEVS@"'levs'@g >> sedfile' +'!echo "s@BEGDATE@"'begdate'@g >> sedfile' +'!echo "s@TINC@"'tinc'@g >> sedfile' +'!sed -f sedfile 'geosutil'/plots/grads_util/zdiff4.template > 'name'.ctl' + +'open 'name'.ctl' +'getinfo numfiles' + newfile = result +say 'NEWFILE = 'newfile + +'set dfile 'newfile +'setx' +'sety' +'setlons' +'setlats' +'setz' +'set t 1 'tdim +say 'DIMS before: makezf q 'name' z' +'q dims' +say result +say ' ' +say 'CAT 'name'.ctl' +'!cat 'name'.ctl' +say ' ' + +'makezf q 'name' z' + +maxval = -1e15 +minval = 1e15 +'set x 1' + z = 1 + while( z <= nlev ) +'set z 'z +'minmax.simple 'name'z' + + qmax = subwrd(result,1) + qmin = subwrd(result,2) + qave = subwrd(result,3) + qrms = subwrd(result,4) + qstd = subwrd(result,5) + qfac = 2 + +*facmax = (qmax-qave)/qstd +*facmin = (qave-qmin)/qstd +*say 'z: 'z' facmax: 'facmax' facmin: 'facmin + + if( qmax > qave + qfac*qstd ) + qmax = qave + qfac*qstd + endif + if( qmin < qave - qfac*qstd ) + qmin = qave - qfac*qstd + endif + + if( qmax > maxval ) ; maxval = qmax ; endif + if( qmin < minval ) ; minval = qmin ; endif + z = z + 1 + endwhile +*say ' ' + +'!remove ZDIFILE.txt' +say 'run setenv "ZDIFILE" 'newfile + 'run setenv "ZDIFILE" 'newfile + +* Reset Initial Environment Settings +* ---------------------------------- +'set gxout 'gxout +'set dfile 'dfile +'set lon 'lonbeg' 'lonend +'set lat 'latbeg' 'latend +'set z 'zmin' 'zmax +'set t 'tmin' 'tmax + +return maxval' 'minval diff --git a/plots/grads_util/pause.gs b/plots/grads_util/pause.gs index d89bce2..ef753f1 100644 --- a/plots/grads_util/pause.gs +++ b/plots/grads_util/pause.gs @@ -10,7 +10,7 @@ while ( num <= numargs ) endwhile say string endif -say 'Hit ENTER for next plot, or c to Clear ...' +say 'Paused, Hit ENTER to Continue (or c to Clear and Continue) ...' pull flag if( flag = 'c' ) 'c' diff --git a/plots/grads_util/zdiff4.template b/plots/grads_util/zdiff4.template new file mode 100644 index 0000000..30c646e --- /dev/null +++ b/plots/grads_util/zdiff4.template @@ -0,0 +1,10 @@ +dset ^GRADSDATA +undef UNDEF +title template for regrid data +xdef XDIM linear -180.0 DLON +ydef YDIM linear -90.0 DLAT +zdef ZDIM2 levels LEVS +tdef TDIM linear BEGDATE TINC +vars 1 +q ZDIM2 0 Arbitray data +endvars diff --git a/plots/res/epflx.gs b/plots/res/epflx.gs index b134646..17306d3 100644 --- a/plots/res/epflx.gs +++ b/plots/res/epflx.gs @@ -5,8 +5,8 @@ TEM_Collection = subwrd(args,2) index = subwrd(args,4) output = subwrd(args,5) -time = substr(index,1,1) -num = substr(index,2,2) +num = substr(index,1,1) +time = substr(index,2,1) say 'Inside epflx, expid = 'expid say 'Inside epflx, season = 'season @@ -16,6 +16,8 @@ say 'Inside epflx, time = 'time say 'Inside epflx, dfile = 'num pause +'run getenv "MASKFILE"' + maskfile = result 'set dfile 'num 'q file' say result @@ -79,9 +81,37 @@ endif say 'BEGDATE = 'begdate say 'ENDDATE = 'enddate -'define epfy'season' = epfy'season''index -'define epfz'season' = epfz'season''index -'define epfdiv'season' = epfdiv'season''index +'q file' +say 'FILE: 'result +'q dims' +say 'DIMS: 'result + +'set lon -180' +'setx' +'sety' +'setz' +'set t 1' +'q dims' +say 'DIMS: 'result +pause + + say 'run getenv DFILE.'num + 'run getenv DFILE.'num + DFILE = result + if( DFILE != num ) + 'set dfile 'DFILE + 'set t 1' + 'q dims' + say 'DFILE DIMS: 'result + endif + pause + +'define epfy'season' = epfy'num''season''time +'define epfz'season' = epfz'num''season''time +'define epfdiv'season' = epfdiv'num''season''time +'q define' +say 'DEFINED: 'result +pause ' set lev 1000 1' ' define epfdiv = epfdiv'season'/1e2' @@ -224,6 +254,7 @@ rc = arrow(xrit-0.25,ybot+0.2,arrlen,arrscl) ' set vpage off ' if( maskfile != 'NULL' ) + 'set dfile 'maskfile 'run count.gs "'season'" 'begdate' 'enddate' -field epfdiv.'maskfile nseasons = result else @@ -235,7 +266,7 @@ endif ' set strsiz 0.12 ' ' draw string 5.60501 8.4 Eliassen-Palm Flux Divergence from 'desc ' set strsiz 0.12 ' -' draw string 5.60501 8.1 'season' ('nseasons') Climatology ('begdate' - 'enddate')' +' draw string 5.60501 8.1 'season' ('nseasons') ('begdate' - 'enddate')' 'myprint -name 'output'/EP_Flux_'expid'.'season diff --git a/plots/res/epflx_diff.gs b/plots/res/epflx_diff.gs index 63e4b23..53d9354 100644 --- a/plots/res/epflx_diff.gs +++ b/plots/res/epflx_diff.gs @@ -11,9 +11,24 @@ output = subwrd(args,8) detail = subwrd(args,9) detail = d -time = substr(index ,1,1) -num = substr(index ,2,2) -num2 = substr(index2,2,2) +time = substr(index ,2,1) +num = substr(index ,1,1) +num2 = substr(index2,1,1) + +say 'inside epflx_diff:' +say '-----------------' +say 'expid: 'expid +say 'cmpid: 'cmpid +say 'TEM_expid: 'TEM_expid +say 'TEM_cmpid: 'TEM_cmpid +say 'season: 'season +say 'index : 'index +say 'index2: 'index2 +say 'output: 'output +say 'time: 'time +say 'num : 'num +say 'num2: 'num2 +pause *'run getenv "TEM_Collection"' * TEM_Collection = result @@ -31,7 +46,6 @@ num2 = substr(index2,2,2) 'run getenv "NODE"' node = result EXP = node - say 'EXP = 'EXP m = m + 1 '!remove NODE.txt' '!basename 'desc' | cut -d. -f'm' >> NODE.txt' @@ -39,14 +53,14 @@ num2 = substr(index2,2,2) node = result while( node != TEM_cmpid ) EXP = EXP'.'node - say 'EXP = 'EXP m = m + 1 '!remove NODE.txt' '!basename 'desc' | cut -d. -f'm' >> NODE.txt' 'run getenv "NODE"' node = result endwhile - desc2 = EXP + say 'EXP'num2' = 'EXP + desc2 = EXP 'set dfile 'num @@ -61,7 +75,6 @@ num2 = substr(index2,2,2) 'run getenv "NODE"' node = result EXP = node - say 'EXP = 'EXP m = m + 1 '!remove NODE.txt' '!basename 'desc' | cut -d. -f'm' >> NODE.txt' @@ -69,17 +82,20 @@ num2 = substr(index2,2,2) node = result while( node != TEM_expid ) EXP = EXP'.'node - say 'EXP = 'EXP m = m + 1 '!remove NODE.txt' '!basename 'desc' | cut -d. -f'm' >> NODE.txt' 'run getenv "NODE"' node = result endwhile - desc = EXP + desc = EXP + say 'EXP'num' = 'EXP 'run getenv MASKFILE' maskfile = result + say 'MASKFILE: 'maskfile + + if( time = 'A' ) 'setdates' @@ -101,10 +117,23 @@ endif say 'BEGDATE = 'begdate say 'ENDDATE = 'enddate - -'makezdif -q1 epfdiv'season''index' -file1 'num' -q2 epfdiv'season'a'num2' -file2 'num2' -name epdiff -ptop 1' ; 'run getenv ZDIFILE' ; epfile = result -'makezdif -q1 epfy'season''index' -file1 'num' -q2 epfy'season'a'num2' -file2 'num2' -name epydiff -ptop 1' ; 'run getenv ZDIFILE' ; epyfile = result -'makezdif -q1 epfz'season''index' -file1 'num' -q2 epfz'season'a'num2' -file2 'num2' -name epzdiff -ptop 1' ; 'run getenv ZDIFILE' ; epzfile = result +pause + +say 'makezdif -q1 epfdiv'num''season''time' -file1 'num' -q2 epfdiv'num2''season''time' -file2 'num2' -name epdiff -ptop 1' ; 'run getenv ZDIFILE' ; epfile = result +say 'Defined Variables:' +say '------------------' +'q define' +say result +pause + 'makezdif -q1 epfdiv'num''season''time' -file1 'num' -q2 epfdiv'num2''season''time' -file2 'num2' -name epdiff -ptop 1' ; 'run getenv ZDIFILE' ; epfile = result + +say 'makezdif -q1 epfy'num''season''time' -file1 'num' -q2 epfy'num2''season''time' -file2 'num2' -name epydiff -ptop 1' ; 'run getenv ZDIFILE' ; epyfile = result +pause + 'makezdif -q1 epfy'num''season''time' -file1 'num' -q2 epfy'num2''season''time' -file2 'num2' -name epydiff -ptop 1' ; 'run getenv ZDIFILE' ; epyfile = result + +say 'makezdif -q1 epfz'num''season''time' -file1 'num' -q2 epfz'num2''season''time' -file2 'num2' -name epzdiff -ptop 1' ; 'run getenv ZDIFILE' ; epzfile = result +pause + 'makezdif -q1 epfz'num''season''time' -file1 'num' -q2 epfz'num2''season''time' -file2 'num2' -name epzdiff -ptop 1' ; 'run getenv ZDIFILE' ; epzfile = result 'set dfile 'epfile 'set x 1' @@ -450,6 +479,8 @@ say 'ENDDATE = 'enddate ' set vpage off ' if( maskfile != 'NULL' ) + 'set dfile 'maskfile + 'set x 1' 'run count.gs "'season'" 'begdate' 'enddate' -field epfdiv.'maskfile nseasons = result else @@ -471,7 +502,7 @@ endif ' set string 1 c 6 ' ' set strsiz 0.10 ' -' draw string 5.60501 7.88 'season' ('nseasons') Climatology ('begdate' - 'enddate')' +' draw string 5.60501 7.88 'season' ('nseasons') ('begdate' - 'enddate')' 'myprint -name 'output'/EP_Flux_diff_'expid'-'cmpid'.'season diff --git a/plots/res/plot_season.gs b/plots/res/plot_season.gs index 5e12daa..cbf2373 100644 --- a/plots/res/plot_season.gs +++ b/plots/res/plot_season.gs @@ -299,8 +299,8 @@ while( n<=numfiles ) latmin = result/100 endif - say 'define dumdum'n' = ave(w'type''season''time''n',lat='latmin',lat='latmax')*1000' - 'define dumdum'n' = ave(w'type''season''time''n',lat='latmin',lat='latmax')*1000' + say 'define dumdum'n' = ave(w'type''n''season''time',lat='latmin',lat='latmax')*1000' + 'define dumdum'n' = ave(w'type''n''season''time',lat='latmin',lat='latmax')*1000' 'minmax dumdum'n dmax = subwrd(result,1) dmin = subwrd(result,2) @@ -749,7 +749,7 @@ while( n<=numfiles ) * Smooth possible noise * --------------------- if( nsmooth > 0 ) - 'define wstrsmth = smth9( w'type''season''time''n'*1000 )' + 'define wstrsmth = smth9( w'type''n''season''time'*1000 )' countr = 1 while( countr < nsmooth ) 'define wstrsmth = smth9( wstrsmth )' @@ -757,7 +757,7 @@ while( n<=numfiles ) endwhile 'd wstrsmth ' else - 'd w'type''season''time''n'*1000' + 'd w'type''n''season''time'*1000' endif 'set strsiz 0.10' diff --git a/plots/res/res b/plots/res/res index db77f51..58f055f 100644 --- a/plots/res/res +++ b/plots/res/res @@ -117,11 +117,11 @@ else 'set dfile 'obsfil1 -'count "'season'" 'begdateo' 'enddateo +'count "'season'" 'begdateo' 'enddateo' -field str' nobs = result 'set dfile 'modfil1 -'count "'season'" 'begdate' 'enddate +'count "'season'" 'begdate' 'enddate' -field str' nmod = result diff --git a/plots/res/res_2.gs b/plots/res/res_2.gs index 5da0676..ebfbb1a 100644 --- a/plots/res/res_2.gs +++ b/plots/res/res_2.gs @@ -29,7 +29,7 @@ function res_2 (args) 'run getenv "CLIMATE"' climate = result -if(begdate = begdateo & enddate = enddateo ) +if(begdate = begdateo & enddate = enddateo) climate = 'Actual' endif diff --git a/plots/res/res_3.gs b/plots/res/res_3.gs index 96d5df3..6213806 100644 --- a/plots/res/res_3.gs +++ b/plots/res/res_3.gs @@ -29,7 +29,7 @@ function res_3 (args) 'run getenv "CLIMATE"' climate = result -if(begdate = begdateo & enddate = enddateo ) +if(begdate = begdateo & enddate = enddateo) climate = 'Actual' endif diff --git a/plots/res/setup_epflx.gs b/plots/res/setup_epflx.gs index 3a4e140..6712a06 100644 --- a/plots/res/setup_epflx.gs +++ b/plots/res/setup_epflx.gs @@ -66,91 +66,41 @@ while( num <= numrc ) 'run getenv "TEM_NAME"' TEM_NAME.num = result say 'TEM_Collection = 'TEM_NAME.num - pause - 'xdfopen 'CTLFILE.num - if( CMPID.num = expid ) ; nexpid = num ; endif - num = num + 1 -endwhile + '!remove EXPID.txt.' + '!echo 'CMPID.num' | cut -d. -f2 > EXPID.txt' + say 'run getenv "EXPID"' + 'run getenv "EXPID"' + expid.num = result -'getinfo numfiles' - numfiles = result -endif -* Loop over Experiment Datasets -* ----------------------------- -'getpwd' - pwd = result - -'getnumrc 'pwd - rcinfo = result - numrc = subwrd( rcinfo,1 ) - num = 1 - cnt = 0 -while( num <= numrc ) - loc = num + 1 - rcfile = subwrd( rcinfo,loc ) - say 'num = 'num' rcfile = 'rcfile - '!grep filename 'rcfile' | cut -d'"\' -f2 > CTLFILE.txt" - 'run getenv CTLFILE ' - CTLFILE.num = result - say 'CTLFILE.'num' = 'CTLFILE.num + 'run setenv DFILE DFILE.'num + 'run getenv DFILE' + DFILE = result + 'run setenv 'DFILE' 'num - '!basename 'CTLFILE.num' > BASENAME.txt' - 'run getenv BASENAME' - basename = result - '!remove NODE.txt' - '!echo 'basename' | cut -d. -f1 >> NODE.txt' - 'run getenv "NODE"' - node = result - cmpid = node - - say 'cmpid = 'cmpid - TEM_Collection = TEM_NAME.num - m = 2 - '!remove NODE.txt' - '!echo 'basename' | cut -d. -f'm' >> NODE.txt' - 'run getenv "NODE"' - node = result - while( node != TEM_Collection ) - cmpid = cmpid'.'node - say 'cmpid = 'cmpid - m = m + 1 - '!remove NODE.txt' - '!echo 'basename' | cut -d. -f'm' >> NODE.txt' - 'run getenv "NODE"' - node = result - endwhile + say 'EXPID.'num' = 'expid.num + say 'DFILE.'num' = 'num + pause - CMPID.num = cmpid - say ' CMPID #'num' = 'CMPID.num - say 'CTLFILE #'num' = 'CTLFILE.num - say ' ' -* 'xdfopen 'CTLFILE.num - if( CMPID.num = expid ) ; nexpid = num ; endif + 'xdfopen 'CTLFILE.num + if( CMPID.num = 'VERIFICATION.'expid ) ; nexpid = num ; endif num = num + 1 endwhile 'getinfo numfiles' numfiles = result +endif '!/bin/rm -f LOCKFILE' -'q files' - check = subwrd(result,1) - -* Set MASKFILE to file which is not time-continuous (i.e., has UNDEF periods) -* --------------------------------------------------------------------------- - maskfile = 'NULL' -* maskfile = 2 - 'run setenv MASKFILE ' maskfile - 'run setenv NUMFILES ' numfiles - say '' say 'Files:' 'q files' -say result +say result +say 'nexpid: 'nexpid +pause say 'Initializing BEGDATE and ENDATE for each Experiment:' say '----------------------------------------------------' @@ -167,11 +117,31 @@ while( n<=numfiles ) 'getinfo date' enddate.n = result 'run setenv ENDDATE'n' 'enddate.n - say 'begdate.'n': 'begdate.n' enddate.'n': 'enddate.n +say 'begdate.'n': 'begdate.n' enddate.'n': 'enddate.n n = n + 1 endwhile +say '' + +* Find time subset which includes all files +* ----------------------------------------- 'set dfile 1' +say 'Calling SETDATES for File1' +say '--------------------------' +'setdates' +say 'Calling GETDATES for File1' +say '--------------------------' +'getdates' + +'run getenv BEGDATE' + BEGDATE = result +'run getenv ENDDATE' + ENDDATE = result +say ' ' + + +say 'Finding Common Times between Experiments' +say '----------------------------------------' begtimeA = 1 endtimeA = tdim.1 @@ -184,28 +154,44 @@ while( n<=numfiles ) time = result if( time > begtimeA ) say begdate.n' > 'begdateA - begdateA = begdate.n - begtimeA = time + begdateA = begdate.n + begtimeA = time endif 'set time 'enddate.n 'getinfo time' time = result if( time < endtimeA ) say enddate.n' < 'enddateA - enddateA = enddate.n - endtimeA = time + enddateA = enddate.n + endtimeA = time endif n = n + 1 endwhile +pause -* Hardwire begdate and enddate here -* --------------------------------- -*begdateA = 00z01jan2010 -*enddateA = 00z01dec2014 - +* Hardwire Beginning and Ending Dates +* ----------------------------------- +say ' ' +say 'Pre-Set Environment Variable BEGDATE: 'BEGDATE +say 'Pre-Set Environment Variable ENDDATE: 'ENDDATE +say ' Computed Common Dates begdateA: 'begdateA +say ' Computed Common Dates enddateA: 'enddateA say ' ' -say 'begdateA = 'begdateA -say 'enddateA = 'enddateA +pause + +* Compare with Pre-Set Environment Variables +* ------------------------------------------ + 'set time 'BEGDATE + 'getinfo time' + begtime = result + 'set time 'ENDDATE + 'getinfo time' + endtime = result + + if( begtime >= begtimeA & endtime <= endtimeA ) + begdateA = BEGDATE + enddateA = ENDDATE + endif * Compute Seasonal Means for Subset Times (A) * ------------------------------------------- @@ -221,11 +207,52 @@ say 'set time 'begdateA' 'enddateA 'set time 'begdateA' 'enddateA say ' ' -say 'setdates' - 'setdates' -say 'getdates' - 'getdates' + +* Check to see if expid files are time-continuous (i.e., no UNDEF periods) +* --------------------------------------------------------------------------------- +'set dfile 'nexpid + say 'getdates' + 'getdates' + say ' ' +'set z 1' + +maskfile = 'NULL' + k = 1 + season = subwrd(seasons,k) +while( k > 0 ) + 'run count.gs "'season'" 'begdateA' 'enddateA + countnomask = result + 'run count.gs "'season'" 'begdateA' 'enddateA' -field str' + countmask = result + say 'COUNT 'season' without MASK: 'countnomask + say ' with MASK: 'countmask + + if( countnomask != countmask ) + maskfile = nexpid + endif + + k = k+1 + season = subwrd(seasons,k) + if( season = '' ) + k = -1 + endif say ' ' +endwhile + + say 'MASKFILE: 'maskfile + 'run setenv MASKFILE ' maskfile + 'run setenv NUMFILES ' numfiles + + pause + +if( maskfile != 'NULL' ) + 'set dfile 'maskfile + 'getdates' + 'set x 1' + 'sety' + 'setz' + 'define zeromask = wstar-wstar + lon-lon' +endif n = 1 while( n<=numfiles ) @@ -235,15 +262,84 @@ while( n<=numfiles ) 'sety' 'setz' - if( maskfile != 0 & maskfile != NULL ) - 'define epfy = maskout( epfy.'n',abs( epfy.'maskfile') )' - 'define epfz = maskout( epfz.'n',abs( epfz.'maskfile') )' - 'define epfdiv = maskout( epfdiv.'n',abs( epfdiv.'maskfile') )' - endif + if( maskfile != 'NULL' & maskfile != n ) + + say 'Computing seasonal epfy, epfz, and epfdiv using file: 'n' and maskfile: 'maskfile + say '-----------------------------------------------------' + pause + 'makezdif4 -q1 epfy.'n' -q2 zeromask -file1 'n' -file2 'maskfile + 'run getenv "ZDIFILE" ' + zdifile = result + 'set dfile ' zdifile + + 'run setenv DFILE DFILE.'n + 'run getenv DFILE' + DFILE = result + 'run setenv 'DFILE' 'zdifile + + 'getdates' + 'set x 1' + 'sety' + 'setz' + 'define epfy'n' = qz' + 'seasonal epfy'n' A' + 'set dfile 'n + 'q files' + say 'FILES: 'result + pause + + 'getdates' + 'set x 1' + 'sety' + 'setz' + 'makezdif4 -q1 epfz.'n' -q2 zeromask -file1 'n' -file2 'maskfile + 'run getenv "ZDIFILE" ' + zdifile = result + 'set dfile ' zdifile + 'getdates' + 'set x 1' + 'sety' + 'setz' + 'define epfz'n' = qz' + 'seasonal epfz'n' A' + 'set dfile 'n + 'q files' + say 'FILES: 'result + pause + + 'getdates' + 'set x 1' + 'sety' + 'setz' + 'makezdif4 -q1 epfdiv.'n' -q2 zeromask -file1 'n' -file2 'maskfile + 'run getenv "ZDIFILE" ' + zdifile = result + 'set dfile ' zdifile + 'getdates' + 'set x 1' + 'sety' + 'setz' + 'define epfdiv'n' = qz' + 'seasonal epfdiv'n' A' + 'set dfile 'n + 'q files' + say 'FILES: 'result + pause + + else + + say 'Computing seasonal epfy, epfz, and epfdiv using file 'n' and NO maskfile' + say '------------------------------------------------------------------------' + pause + 'define epfy'n' = epfy.'n + 'define epfz'n' = epfz.'n + 'define epfdiv'n' = epfdiv.'n + 'seasonal epfy'n' A' + 'seasonal epfz'n' A' + 'seasonal epfdiv'n' A' + pause - 'seasonal epfy A'n - 'seasonal epfz A'n - 'seasonal epfdiv A'n + endif n = n + 1 endwhile @@ -261,19 +357,19 @@ endwhile n = 1 while( n<=numfiles ) - k = 1 - while( k > 0 ) - season = subwrd(seasons,k) - if( season != '' ) - k = k+1 - say 'Running: epflx.gs 'CMPID.n' 'season' A'n' 'output + k = 1 +while( k > 0 ) + season = subwrd(seasons,k) + if( season != '' ) + k = k+1 + say 'Running: epflx.gs 'expid.n' 'season' 'n'A 'output say '-------------------------------------------------' 'set x 1' 'sety' 'setz' flag = "" while ( flag = "" ) - 'run 'geosutil'/plots/res/epflx.gs 'CMPID.n' 'TEM_NAME.n' 'season' A'n' 'output + 'run 'geosutil'/plots/res/epflx.gs 'expid.n' 'TEM_NAME.n' 'season' 'n'A 'output if( debug = "debug" ) say "Hit ENTER to repeat plot" say "Type 'next' for next plot, 'done' for next field" @@ -281,32 +377,32 @@ while( n<=numfiles ) else flag = "next" endif - 'c' + 'c' endwhile else k = -1 - endif + endif endwhile -n = n + 1 -endwhile + n = n + 1 + endwhile -n = 1 -while( n<=numfiles ) -if( CMPID.n != expid ) + n = 1 + while( n<=numfiles ) +if( CMPID.n != 'VERIFICATION.'expid ) k = 1 while( k > 0 ) season = subwrd(seasons,k) if( season != '' ) k = k+1 - say 'Running: epflx_diff.gs 'expid' 'CMPID.n' 'season' A'nexpid' A'n' 'output + say 'Running: epflx_diff.gs 'expid' 'expid.n' 'season' 'nexpid'A 'output say '----------------------------------------------------' flag = "" while ( flag = "" ) - say 'run 'geosutil'/plots/res/epflx_diff.gs 'expid' 'CMPID.n' 'TEM_NAME.nexpid' 'TEM_NAME.n' 'season' A'nexpid' A'n' 'output - 'run 'geosutil'/plots/res/epflx_diff.gs 'expid' 'CMPID.n' 'TEM_NAME.nexpid' 'TEM_NAME.n' 'season' A'nexpid' A'n' 'output + say 'run 'geosutil'/plots/res/epflx_diff.gs 'expid' 'expid.n' 'TEM_NAME.nexpid' 'TEM_NAME.n' 'season' 'nexpid'A 'n'A 'output + 'run 'geosutil'/plots/res/epflx_diff.gs 'expid' 'expid.n' 'TEM_NAME.nexpid' 'TEM_NAME.n' 'season' 'nexpid'A 'n'A 'output if( debug = "debug" ) say "Hit ENTER to repeat plot" say "Type 'next' for next plot, 'done' for next field" @@ -314,27 +410,27 @@ if( CMPID.n != expid ) else flag = "next" endif - 'c' + 'c' endwhile flag = "" while ( flag = "" ) - say 'run 'geosutil'/plots/res/epflx_diff.gs 'CMPID.n' 'expid' 'TEM_NAME.n' 'TEM_NAME.nexpid' 'season' A'n' A'nexpid' 'output - 'run 'geosutil'/plots/res/epflx_diff.gs 'CMPID.n' 'expid' 'TEM_NAME.n' 'TEM_NAME.nexpid' 'season' A'n' A'nexpid' 'output + say 'run 'geosutil'/plots/res/epflx_diff.gs 'expid.n' 'expid' 'TEM_NAME.n' 'TEM_NAME.nexpid' 'season' 'n'A 'nexpid'A 'output + 'run 'geosutil'/plots/res/epflx_diff.gs 'expid.n' 'expid' 'TEM_NAME.n' 'TEM_NAME.nexpid' 'season' 'n'A 'nexpid'A 'output if( debug = "debug" ) say "Hit ENTER to repeat plot" say "Type 'next' for next plot, 'done' for next field" pull flag else flag = "next" - endif + endif 'c' - endwhile + endwhile - else - k = -1 - endif - endwhile + else + k = -1 + endif +endwhile endif n = n + 1 endwhile diff --git a/plots/res/setup_wstar.gs b/plots/res/setup_wstar.gs index 92c5951..9186457 100644 --- a/plots/res/setup_wstar.gs +++ b/plots/res/setup_wstar.gs @@ -3,7 +3,7 @@ function setup_wstar (args) say ' ' say 'Inside setup_wstar' say ' ' -*pause +pause * ------------------------------------------------- * Set TIME flag: A => Common Times, B => All Times @@ -16,6 +16,10 @@ source = subwrd(args,1) expid = subwrd(args,2) output = subwrd(args,3) +say 'source: 'source +say ' expid: 'expid +pause + * Define Seasons to Process * ------------------------- seasons = '' @@ -76,7 +80,7 @@ while( num <= numrc ) pause 'xdfopen 'CTLFILE.num - if( CMPID.num = expid ) ; nexpid = num ; endif + if( CMPID.num = 'VERIFICATION.'expid ) ; nexpid = num ; endif num = num + 1 endwhile @@ -87,17 +91,28 @@ endif '!/bin/rm -f LOCKFILE' 'q files' - check = subwrd(result,1) +say ' Files: 'result +say 'nexpid: 'nexpid +pause -* Set MASKFILE to file which is not time-continuous (i.e., has UNDEF periods) -* --------------------------------------------------------------------------- - maskfile = 'NULL' -* maskfile = 2 - 'run setenv MASKFILE ' maskfile - 'run setenv NUMFILES ' numfiles +'set dfile 'nexpid +'getinfo dset' + dset = result +'!fsource 'dset +'run getenv FSOURCE' + fsource = result + +'!remove NFILES.txt' +'!/bin/ls -1 'fsource'/'expid'.TEM_Diag.monthly.*.nc4 | wc -l > NFILES.txt' +'run getenv NFILES' + nfiles = result + +'getinfo tdim' + tdim = result say '' -say 'MASKFILE: 'maskfile +say ' TDIM: 'tdim +say ' NFILES: 'nfiles say '' * Initialize BEGDATE and ENDATE for each Experiment @@ -167,7 +182,6 @@ while( n<=numfiles ) time = result if( time < endtimeA ) say enddate.n' < 'enddateA - pause enddateA = enddate.n endtimeA = time endif @@ -213,11 +227,53 @@ say 'set time 'begdateA' 'enddateA 'set time 'begdateA' 'enddateA say ' ' -say 'getdates' - 'getdates' + +* Check to see if expid files are time-continuous (i.e., no UNDEF periods) +* --------------------------------------------------------------------------------- +'set dfile 'nexpid + say 'getdates' + 'getdates' + say ' ' +'set z 1' + +maskfile = 'NULL' + k = 1 + season = subwrd(seasons,k) +while( k > 0 ) + 'run count.gs "'season'" 'begdateA' 'enddateA + countnomask = result + 'run count.gs "'season'" 'begdateA' 'enddateA' -field str' + countmask = result + say 'COUNT 'season' without MASK: 'countnomask + say ' with MASK: 'countmask + + if( countnomask != countmask ) + maskfile = nexpid + endif + + k = k+1 + season = subwrd(seasons,k) + if( season = '' ) + k = -1 + endif say ' ' +endwhile + + say 'MASKFILE: 'maskfile + 'run setenv MASKFILE ' maskfile + 'run setenv NUMFILES ' numfiles + pause +if( maskfile != 'NULL' ) + 'set dfile 'maskfile + 'getdates' + 'set x 1' + 'sety' + 'setz' + 'define zeromask = wstar-wstar + lon-lon' +endif + n = 1 while( n<=numfiles ) 'set dfile 'n @@ -226,33 +282,64 @@ while( n<=numfiles ) 'sety' 'setz' - if( maskfile != 'NULL' ) - 'define wstar'n' = maskout( wstar.'n',abs(wstar.'maskfile') )' - 'define res'n' = maskout( res.'n' ,abs( res.'maskfile') )' - 'define wstar = maskout( wstar.'n',abs(wstar.'maskfile') )' - 'define res = maskout( res.'n' ,abs( res.'maskfile') )' -* 'define epfy = maskout( epfy.'n' ,abs( epfy.'maskfile') )' -* 'define epfz = maskout( epfz.'n' ,abs( epfz.'maskfile') )' -* 'define wmean = maskout( wmean.'n',abs(wmean.'maskfile') )' -* 'define weddy = maskout( weddy.'n',abs(weddy.'maskfile') )' -* 'define vstar = maskout( vstar.'n',abs(vstar.'maskfile') )' + if( maskfile != 'NULL' & maskfile != n ) + + say 'Computing zdiff and seasonal wstar and res using file: 'n' and maskfile: 'maskfile + say '-----------------------------------------------------' + pause + 'makezdif4 -q1 wstar.'n' -q2 zeromask -file1 'n' -file2 'maskfile + 'run getenv "ZDIFILE" ' + zdifile = result + 'set dfile ' zdifile + 'getdates' + 'set x 1' + 'sety' + 'setz' + 'define wstar'n' = qz' + 'seasonal wstar'n' A' + 'close 'zdifile + 'set dfile 'n + 'q files' + say 'FILES: 'result + pause + + 'getdates' + 'set x 1' + 'sety' + 'setz' + 'makezdif4 -q1 res.'n' -q2 zeromask -file1 'n' -file2 'maskfile + 'run getenv "ZDIFILE" ' + zdifile = result + 'set dfile ' zdifile + 'getdates' + 'set x 1' + 'sety' + 'setz' + 'define res'n' = qz' + 'seasonal res'n' A' + 'close 'zdifile + 'set dfile 'n + 'q files' + say 'FILES: 'result + pause + else + + say 'Computing seasonal wstar and res using file: 'n' and maskfile: 'maskfile + say '-------------------------------------------' + pause 'define wstar'n' = wstar.'n 'define res'n' = res.'n - endif + 'seasonal wstar'n' A' + 'seasonal res'n' A' + pause - 'seasonal wstar A'n - 'seasonal res A'n + endif -* 'seasonal epfy A'n -* 'seasonal epfz A'n -* 'seasonal epfdiv A'n -* 'seasonal wmean A'n -* 'seasonal weddy A'n -* 'seasonal vstar A'n n = n + 1 endwhile endif + * ------------------------------------------- * ------------------------------------------------------------- @@ -272,14 +359,9 @@ if( TFLAG = 'B' ) 'define wstar'n' = wstar.'n 'seasonal wstar B'n 'seasonal res B'n -* 'seasonal epfy B'n -* 'seasonal epfz B'n -* 'seasonal epfdiv B'n -* 'seasonal wmean B'n -* 'seasonal weddy B'n -* 'seasonal vstar B'n n = n + 1 endwhile + pause endif * ---------------------------------------- diff --git a/plots/res/turn_around_lats.gs b/plots/res/turn_around_lats.gs index d387f57..6842fa1 100644 --- a/plots/res/turn_around_lats.gs +++ b/plots/res/turn_around_lats.gs @@ -183,11 +183,11 @@ while( z<=zmax ) 'set z ' z 'run setenv TAABS 'taabs if( taabs = TRUE ) - 'define wstr'season''time''n' = wstr'season''time''n' + ( wstar'season''time''n' + abs( wstar'season''time''n' ) )/2 *'delp + 'define wstr'season''time''n' = wstr'season''time''n' + ( wstar'n''season''time' + abs( wstar'n''season''time' ) )/2 *'delp else - 'define wstr'season''time''n' = wstr'season''time''n' + wstar'season''time''n'*'delp + 'define wstr'season''time''n' = wstr'season''time''n' + wstar'n''season''time'*'delp endif - 'define psi'season''time''n' = psi'season''time''n' + res'season''time''n'*'delp + 'define psi'season''time''n' = psi'season''time''n' + res'n''season''time'*'delp ptot = ptot + delp say 'File: 'n' levm1: 'levm1' lev: 'level' levp1: 'levp1' delp = 'delp' ptot = 'ptot