function fwrite(arg) * * this GrADS script writes out a "map" and also generates a control file * v1.1 7/2004 * if (arg = '') say ' run fwrite.gs file expression [title]' exit else cmdline=arg endif file=subwrd(cmdline,1) data=file '.dat' ctl=file '.ctl' exp=subwrd(cmdline,2) title=subwrd(cmdline,3) if (exp = '') say ' run fwrite.gs file expression [title]' exit endif if (title = '') title=exp endif * change dimensions to be on grid 'query dim' qdim = result xline=sublin(qdim,2) yline=sublin(qdim,3) zline=sublin(qdim,4) tline=sublin(qdim,5) xvary=subwrd(xline,3) yvary=subwrd(yline,3) zvary=subwrd(zline,3) tvary=subwrd(tline,3) * get filename i=1 j=1 while(i<200) a=substr(data, i, 1) if ( a = ''); break; endif if ( a = '/') j=i+1 endif i=i+1 endwhile data1=substr(data,j,i-j) err=write(ctl,'dset ^' data1) if (xvary != 'fixed') 'query dim' qdim = result line=sublin(qdim,2) lon0=subwrd(line,6) lon1=subwrd(line,8) i0=subwrd(line,11) i1=subwrd(line,13) n=math_nint(i1-i0+1) i0=subwrd(xline,11) i1=subwrd(xline,13) i0=math_nint(i0) i1=math_nint(i1) 'set x ' i0 ' ' i1 'query dim' qdim = result line=sublin(qdim,2) lon0=subwrd(line,6) lon1=subwrd(line,8) i0=subwrd(line,11) i1=subwrd(line,13) n=math_nint(i1-i0+1) dx=(lon1-lon0)/(n-1) say 'xdef ' n ' linear ' lon0 ' ' dx err=write(ctl, 'xdef ' n ' linear ' lon0 ' ' dx, append) else 'query dim' qdim = result line=sublin(qdim,2) lon0=subwrd(line,6) say 'xdef ' 1 ' linear ' lon0 ' ' 1 err=write(ctl, 'xdef ' 1 ' linear ' lon0 ' ' 1, append) endif if (yvary != 'fixed') 'query dim' qdim = result line=sublin(qdim,3) lat0=subwrd(line,6) lat1=subwrd(line,8) i0=subwrd(yline,11) i1=subwrd(yline,13) i0=math_nint(i0) i1=math_nint(i1) 'set y ' i0 ' ' i1 'query dim' qdim = result line=sublin(qdim,3) lat0=subwrd(line,6) lat1=subwrd(line,8) i0=subwrd(yline,11) i1=subwrd(yline,13) i0=math_nint(i0) i1=subwrd(line,13) n=math_nint(i1-i0+1) dx=(lat1-lat0)/(n-1) say 'ydef ' n ' linear ' lat0 ' ' dx err=write(ctl, 'ydef ' n ' linear ' lat0 ' ' dx, append) else 'query dim' qdim = result line=sublin(qdim,3) lat0=subwrd(line,6) err=write(ctl, 'ydef ' 1 ' linear ' lat0 ' ' 1, append) endif if (zvary != 'fixed') say 'Z can not be varying' exit else 'query dim' qdim = result line=sublin(qdim,4) z=subwrd(line,6) say 'zdef ' z ' linear ' z ' 1' err=write(ctl, 'zdef ' 1 ' linear ' z ' 1', append) endif if (tvary != 'fixed') 'query dim' qdim = result line=sublin(qdim,5) i0=subwrd(line,11) i1=subwrd(line,13) i0=math_nint(i0) i1=math_nint(i1) 'set t ' i0 ' ' i1 'query dim' qdim = result line=sublin(qdim,5) t0=subwrd(line,6) i0=subwrd(line,11) i1=subwrd(line,13) n=i1-i0+1 'query ctlinfo' qctlinfo = result m=7 while (m<120) line=sublin(qctlinfo, m) tdf=subwrd(line,1) if (tdf = 'tdef'); break; endif if (tdf = 'TDEF'); break; endif m=m+1 endwhile tintv=subwrd(line,5) say tintv err=write(ctl, 'tdef ' n ' linear ' t0 ' ' tintv, append) else 'query dim' qdim = result line=sublin(qdim,5) t=subwrd(line,6) say 'tdef ' 1 ' linear ' t ' 1mo' err=write(ctl, 'tdef ' 1 ' linear ' t ' 1mo', append) endif err=write(ctl, 'undef 9.999e20',append) err=write(ctl, 'options little_endian',append) err=write(ctl, 'title ' title, append) err=write(ctl, 'vars 1', append) err=write(ctl, 'x 0 0 ** ' title, append) err=write(ctl, 'endvars', append) * save 'q gxinfo' line=sublin(result,1) gxout=subwrd(line,4) if (gxout = 'Clear') gxout='shaded' endif if (gxout = 'Line') gxout='contour' endif * write data file 'set fwrite -le ' data 'set gxout fwrite' 'display ' exp 'disable fwrite' 'set gxout ' gxout say 'set gxout ' gxout