* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* meteogram.gs
*
* This script draws a meteogram based on NCEP forecast data.
* The data is available through the GrADS-DODS Server at COLA.
* You MUST be using a DODS-enabled version of GrADS.
*
* Usage: meteogram
* Example: meteogram Boston avn 111512 -71 42 e n
*
* The 'model' argument may be: avn, avni, avnb, eta, mrf, mrfb
* The AVN and MRF forecasts are global, ETA forecasts cover
* North America and its environs. Check the GDS URL
* http://cola8.iges.org:9090/dods/ for a complete listing
* of all available forecasts.
*
* The 'e' argument is for British units. Default is metric.
*
* The 's' argument (y/n) is for the stability indices.
* Default is 'y', in which case the indices are drawn.
*
* Note: This script must be run in a directory in which
* you have write permission because intermediate files
* are written out to disk in order to speed up the display
* and minimize the number of hits to the data server.
*
* Originally written by Paul Dirmeyer
* Modification History:
* J.M. Adams Oct 2001
* Jim Kinter Oct 2001
* J.M. Adams Dec 2001
* Joe Wielgosz Jan 2002
* J.M. Adams May 2002
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
function main(args)
* Make sure GrADS is in portrait mode
'q gxinfo'
pagesize = sublin(result,2)
xsize = subwrd(pagesize,4)
ysize = subwrd(pagesize,6)
if (xsize != 8.5 & ysize != 11)
say 'You must be in PORTRAIT MODE to draw a meteogram'
return
endif
* Parse the arguments: date, longitude, latitude, units
if (args = '')
say ' '
say 'Check the URL http://cola8.iges.org:9090/dods/'
say 'for a list of all available forecasts.'
say ' '
prompt 'Enter forecast model (avn, avni, avnb, eta) --> '
pull model
prompt 'Enter forecast date (mmddhh) --> '
pull date
prompt 'Enter longitude --> '
pull hilon
prompt 'Enter latitude --> '
pull hilat
prompt 'Enter location name --> '
pull name
prompt 'Metric units? [y/n] --> '
pull metric
if (metric='n' | metric='N') ; units='e' ; endif
prompt 'Include stability indices? [y/n] --> '
pull stab
if (stab='Y' | stab='y') ; toto='y' ; endif
else
name = subwrd(args,1)
model = subwrd(args,2)
date = subwrd(args,3)
hilon = subwrd(args,4)
hilat = subwrd(args,5)
units = subwrd(args,6)
toto = subwrd(args,7)
endif
if (toto = '') ; toto = 'y' ; endif
if (model = mrf)
model = avn
say 'Using avn instead of mrf'
endif
if (model = mrfb)
model = avnb
say 'Using avnb instead of mrfb'
endif
* Open the data file
'reinit'
_baseurl = 'http://cola8.iges.org:9090/dods/'
_dataset = model%date
'sdfopen '_baseurl%_dataset
check1 = sublin(result,2)
check2 = subwrd(check1,1)
if (check2 != 'Found') ; return ; endif
* Get info from the descriptor file
'q ctlinfo'
_ctl = result
_undef = getctl(undef)
_tdef = getctl(tdef)
_zdef = getctl(zdef)
* Get the Time axis info
tsize = subwrd(_tdef,2)
if (model = avn | model = avni | model = eta )
_t1 = 1
_t2 = tsize
else
if (model = avnb)
_t1 = (tsize+1)/2
_t2 = tsize
tsize = _t2 - _t1 + 1
else
say 'having trouble calculating _t1 and _t2'
endif
endif
'set t '_t1' '_t2
'q dims'
times = sublin(result,5)
_time1 = subwrd(times,6)
_time2 = subwrd(times,8)
_tdim = _time1' '_time2
tincr = subwrd(_tdef,5)
_tdef = 'tdef 'tsize' linear '_time1' 'tincr
* Get Vertical grid info
zsize = subwrd(_zdef,2)
z = 1
zlevs = ''
rhzlevs = ''
while (z <= zsize)
'set z 'z
lev = subwrd(result,4)
if lev = 500 ; z500 = z ; endif
zlevs = zlevs%lev%' '
* ETA relative humidity grid values are every 50 mb
if (model = 'eta')
rem = math_fmod(lev,50)
if (rem = 0)
rhzlevs = rhzlevs%lev%' '
endif
endif
z = z + 1
endwhile
* Find the grid point closest to requsted location
'set lon 'hilon
hilon = subwrd(result,4)
'set lat 'hilat
hilat = subwrd(result,4)
_xdim = hilon' 'hilon
_ydim = hilat' 'hilat
* Determine pressure range for hovmoellers
getseries(ps,pshov,1000)
'set lon 'hilon
'set lat 'hilat
'd ave(pshov,t='_t1',t='_t2')*0.01-15.0'
data = sublin(result,2)
mmm = subwrd(data,4)
meanps = math_nint(mmm)
cnt = 1
while (cnt el2)
elb = el1
elt = subwrd(zlevs,z500+cnt-1)
break
endif
cnt=cnt+1
endwhile
if (elt < 500) ; elt = 500 ; endif
_zbot = elb
_ztop = elt
_zgrd = _zbot' '_ztop
* Get pressure range for ETA relative humidity grid
if (model = 'eta')
rem = math_fmod(_zbot,50)
if (rem != 0)
_rhzbot = _zbot - 25
else
_rhzbot = _zbot
endif
rem = math_fmod(_ztop,50)
if (rem != 0)
_rhztop = _ztop + 25
else
_rhztop = _ztop
endif
_rhzgrd = _rhzbot' '_rhztop
endif
* Get number of pressure levels between _zbot and _ztop
n = 1
p = subwrd(zlevs,n)
while (p != _zbot)
n = n + 1
p = subwrd(zlevs,n)
endwhile
levs = p
nlevs = 1
while (p > _ztop)
n = n + 1
p = subwrd(zlevs,n)
levs = levs%' 'p
nlevs = nlevs + 1
endwhile
_newzsize = nlevs
_zdef = 'zdef '_newzsize' levels 'levs
* Get TOTAL number of ETA pressure levels between _rhzbot and _rhztop
* including those with no rh value
if (model = 'eta')
n = 1
p = subwrd(zlevs,n)
while (p != _rhzbot)
n = n + 1
p = subwrd(zlevs,n)
endwhile
tlevs = p
nlevs = 1
while (p > _rhztop)
n = n + 1
p = subwrd(zlevs,n)
tlevs = tlevs%' 'p
nlevs = nlevs + 1
endwhile
_trhzsize = nlevs
_trhzdef = 'zdef '_trhzsize' levels 'tlevs
endif
* Get number of pressure levels for ETA relative humidity grid
* that contain rh data
if (model = 'eta')
n = 1
p = subwrd(rhzlevs,n)
while (p != _rhzbot)
n = n + 1
p = subwrd(rhzlevs,n)
endwhile
_rhlevs = p
nlevs = 1
while (p > _rhztop)
n = n + 1
p = subwrd(rhzlevs,n)
_rhlevs = _rhlevs%' 'p
nlevs = nlevs + 1
endwhile
_newrhzsize = nlevs
_rhzdef = 'zdef '_newrhzsize' levels '_rhlevs
endif
* Get the Z,T grids for the upper air variables
if (model = 'eta')
getetarh(rh,rhum)
else
getgrid(rh,rhum)
endif
getgrid(t,t)
getgrid(u,u)
getgrid(v,v)
getgrid('z',hgt)
* Set up a few preliminary characteristics
setcols(1)
'set display color white'
'c'
* Determine the plot areas for each panel
if (toto = 'y')
npanels = 8
else
npanels = 7
endif
x1 = 1.20
x2 = 8.15
y1 = 7.20
y2 = 10.00
panel.npanels = x1' 'x2' 'y1' 'y2
ytop = 7.2
ybot = 2.2
int = (ytop-ybot)/(npanels-2)
int = 0.01 * (math_nint(100*int))
n=npanels-1
y2 = ytop
while (n >= 2)
y2 = ytop - (npanels-n-1)*int
y1 = ytop - (npanels-n)*int
panel.n = x1' 'x2' 'y1' 'y2
n = n - 1
endwhile
xincr = (8.15 - 1.2)/tsize
xincr = 0.01 * math_nint(100*xincr)
panel.1 = x1+xincr' 'x2' 0.8 'y1
* Set the Plot Area for the Upper Air Panel
p = npanels
'set parea 'panel.p
'set vpage off'
'set grads off'
'set grid on'
* Draw the Relative Humidity Shading
'set gxout shaded'
'set csmooth on'
'set clevs 30 50 70 90 100'
'set ccols 0 20 21 23 25 26'
'set xlopts 1 4 0.16'
'set xlpos 0 t'
'set ylab `1%g'
'set ylint 100'
if (units = 'e')
'define temp = (t-273.16)*1.8+32'
'define uwnd = u*2.2374'
'define vwnd = v*2.2374'
else
'define temp = (t-273.16)'
'define uwnd = u'
'define vwnd = v'
endif
'set t '_t1-0.5' '_t2+0.5
'set lev '_zbot+50' '_ztop-50
'd rhum'
'set gxout contour'
'set grid off'
'set ccolor 15'
'set clab off'
'set clevs 10 30 50 70 90'
'd rhum'
'set ccolor 0'
'set clab on'
'set cstyle 5'
'set clopts 15'
'set clevs 10 30 50 70 90'
'd rhum'
* Draw the Temperature Contours
'set clopts -1'
'set cstyle 1'
'set ccolor rainbow'
'set rbcols 9 14 4 11 5 13 12 8 2 6'
if (units = 'e')
'set cint 10'
'd temp'
'set clevs 32'
'set cthick 12'
'set ccolor 1'
'set clab off'
'd temp'
'set background 1'
'set ccolor 20'
'set clevs 32'
'set cthick 4'
'set clab on'
'set clab `4FR'
else
'set cint 5'
'd temp'
'set clevs 0'
'set cthick 12'
'set ccolor 1'
'set clab off'
'd temp'
'set background 1'
'set ccolor 20'
'set clevs 0'
'set cthick 4'
'set clab on'
endif
'd temp'
* Draw the Wind Barbs
'set background 0'
'set gxout barb'
'set ccolor 1'
'set xlab off'
'set ylab off'
'd uwnd;vwnd'
* Draw a rectangle over the year to clear the area for a title
'set line 0'
'draw recf 0.5 10.52 1.95 11.0'
* Define Thickness
'set lev 1000'
'set t '_t1' '_t2
*getseries('z',hgt,1000)
getseries('z',z5,500)
getseries('z',z10,1000)
'define thk1 = (z5-z10)/10'
* Next Panel: 1000-500 thickness
p = p - 1
'set parea 'panel.p
'set gxout line'
'set vpage off'
'set grads off'
'set grid on'
'set xlab on'
'set ylab on'
vrng(thk1, thk1)
'set ccolor 5'
'set cmark 4'
'set t '_t1-0.5' '_t2+0.5
'd thk1'
* Draw a rectangle over the x-axis labels
xlo = subwrd(panel.p,1)
xhi = subwrd(panel.p,2)
ylo = subwrd(panel.p,3)
yhi = subwrd(panel.p,4)
'set line 0'
'draw recf 'xlo-0.4' 'ylo-0.8' 'xhi+0.4' 'ylo-0.02
* Next Panel: Stability Indices
if (toto = 'y')
p = p - 1
'set parea 'panel.p
ylo = subwrd(panel.p,3)
yhi = subwrd(panel.p,4)
ymid = ylo + (yhi-ylo)/2
'set t '_t1' '_t2
'set lev 1000'
'define rh8 = rhum(lev=850)'
'define t8 = t(lev=850)'
'define t5 = t(lev=500)'
'set vpage off'
'set grads off'
'set grid on'
'set xlab on'
'set gxout bar'
'set barbase 40'
'set bargap 50'
'define toto = 1/(1/t8-log(rh8*0.01)*461/2.5e6)-t5*2+t8'
'set axlim 11 69'
'set yaxis 11 69 10'
'set ccolor 8'
'set t '_t1-0.5' '_t2+0.5
'set grid on'
'd (toto-40+abs(toto-40))*0.5+40'
'set grid off'
'set ccolor 7'
'd (toto-40-abs(toto-40))*0.5+40'
* draw a rectangle over 'toto' yaxis labels
'set line 0'
'draw recf 0.2 'ylo' 1.175 'yhi-0.07
* Lifted Index
getseries(li,li,1000)
'set gxout line'
'set grid off'
'set vrange 5.9 -5.9'
'set yaxis 5.9 -5.9 2'
'set ccolor 2'
'set cstyle 3'
'set cmark 7'
'set cmax 0'
'set datawarn off'
'd li'
* draw a zero line
'set ccolor 15'
'set cmark 0'
'set cstyle 3'
'd const(li,0)'
* Draw a rectangle over the x-axis labels
xlo = subwrd(panel.p,1)
xhi = subwrd(panel.p,2)
ylo = subwrd(panel.p,3)
yhi = subwrd(panel.p,4)
'set line 0'
'draw recf 'xlo-0.4' 'ylo-0.8' 'xhi+0.4' 'ylo-0.02
endif
* Next Panel: SLP
if (model = 'eta')
getseries(slpe,slp,1000)
else
getseries(slp,slp,1000)
endif
'define slp = slp*0.01'
p = p - 1
'set parea 'panel.p
'set vpage off'
'set lon 'hilon
'set lat 'hilat
'set grid on'
'set gxout contour'
vrng(slp,slp)
'set ccolor 11'
'set cmark 0'
'set t '_t1-0.5' '_t2+0.5
'd slp'
* Draw a rectangle over the x-axis labels
xlo = subwrd(panel.p,1)
xhi = subwrd(panel.p,2)
ylo = subwrd(panel.p,3)
yhi = subwrd(panel.p,4)
'set line 0'
'draw recf 'xlo-0.4' 'ylo-0.8' 'xhi+0.4' 'ylo-0.02
* Next Panel: Surface Wind Speed
p = p - 1
getseries(u10m,ubot,1000)
getseries(v10m,vbot,1000)
'set parea 'panel.p
'set vpage off'
'set grads off'
if (units = 'e')
'define ubot = 2.2374*ubot'
'define vbot = 2.2374*vbot'
endif
'define wind = mag(ubot,vbot)'
vrng(wind,wind)
'set ccolor 26'
'set cmark 7'
'set grid on'
'set t '_t1-0.5' '_t2+0.5
'set gxout contour'
'd wind'
* Draw a rectangle over the x-axis labels
xlo = subwrd(panel.p,1)
xhi = subwrd(panel.p,2)
ylo = subwrd(panel.p,3)
yhi = subwrd(panel.p,4)
'set line 0'
'draw recf 'xlo-0.4' 'ylo-0.8' 'xhi+0.4' 'ylo-0.02
* Next Panel: Min & Max Temperatures and Indices
getseries(t2m,t2m,1000)
getseries(rh2m,rh2m,1000)
if (model = 'eta')
'define t2max = t2m'
'define t2min = t2m'
else
getseries(t2max,t2max,1000)
getseries(t2min,t2min,1000)
endif
p = p - 1
'set parea 'panel.p
'set vpage off'
'set frame on'
'set grads off'
'set ylab on'
'set gxout line'
'set grid off'
if (units = 'e')
'define tmax = (t2max-273.16)*9/5+32'
'define tmin = (t2min-273.16)*9/5+32'
'define t2m = const((t2m-273.16)*9/5+32,0,-u)'
'define chill = 35.74+0.6215*t2m-35.75*pow(wind,0.16)+0.4275*t2m*pow(wind,0.16)'
'define hindx = 0.01*rh2m*pow(0.01918*t2m-1.124,2)+0.7628*t2m+11.26'
else
'define tmax = t2max-273.16'
'define tmin = t2min-273.16'
'define t2m = const((t2m-273.16),0,-u)'
'define chill = 35.74+0.6215*(t2m*1.8+32)-35.75*pow(wind,0.16)+0.4275*(t2m*1.8+32)*pow(wind,0.16)'
'define chill = (chill-32)*5/9'
'define hindx = 0.01*rh2m*pow(0.01918*(t2m*1.8+32)-1.124,2)+0.7628*(t2m*1.8+32)+11.26'
'define hindx = (hindx-32)*5/9'
endif
vrng(tmax,chill)
*vrng(tmax,tmin)
if (units = 'e')
'define chill = const(maskout(chill,32-chill),-100,-u)'
'define hindx = const(maskout(hindx,hindx-75),200,-u)'
else
'define chill = const(maskout(chill,-chill),-100,-u)'
'define hindx = const(maskout(hindx,hindx-25),200,-u)'
endif
'set t '_t1-0.5' '_t2+0.5
if (units = 'e')
'set ylint 10'
'set gxout linefill'
if (model = 'eta')
expr = 't2m;const(t2m'
else
expr = 'maskout(tmax,1/(tmax-tmin));const(tmax'
endif
'set lfcols 9 0' ; 'd 'expr',-60,-a)'
'set lfcols 9 0' ; 'd 'expr',-60,-a)'
'set lfcols 14 0' ; 'd 'expr',-10,-a)'
'set lfcols 4 0' ; 'd 'expr',0,-a)'
'set lfcols 11 0' ; 'd 'expr',10,-a)'
'set lfcols 5 0' ; 'd 'expr',20,-a)'
'set lfcols 13 0' ; 'd 'expr',30,-a)'
'set lfcols 3 0' ; 'd 'expr',40,-a)'
'set lfcols 10 0' ; 'd 'expr',50,-a)'
'set lfcols 7 0' ; 'd 'expr',60,-a)'
'set lfcols 12 0' ; 'd 'expr',70,-a)'
'set lfcols 8 0' ; 'd 'expr',80,-a)'
'set lfcols 2 0' ; 'd 'expr',90,-a)'
'set lfcols 6 0' ; 'd 'expr',100,-a)'
if (model != 'eta')
'set lfcols 0 0' ; 'd maskout(tmin,1/(tmax-tmin));const(tmax,-60,-a)'
endif
'set gxout line'
'set ccolor 15'
'set cstyle 3'
'set cmark 0'
if (model = 'eta')
'd t2m'
else
'd maskout(tmax,1/(tmax-tmin))'
endif
else
'set ylint 5'
'set gxout linefill'
if (model = 'eta')
expr = 't2m;const(t2m'
else
expr = 'maskout(tmax,1/(tmax-tmin));const(tmax'
endif
'set lfcols 9 0' ; 'd 'expr',-60,-a)'
'set lfcols 14 0' ; 'd 'expr',-25,-a)'
'set lfcols 4 0' ; 'd 'expr',-20,-a)'
'set lfcols 11 0' ; 'd 'expr',-15,-a)'
'set lfcols 5 0' ; 'd 'expr',-10,-a)'
'set lfcols 13 0' ; 'd 'expr',-5,-a)'
'set lfcols 3 0' ; 'd 'expr',0,-a)'
'set lfcols 10 0' ; 'd 'expr',5,-a)'
'set lfcols 7 0' ; 'd 'expr',10,-a)'
'set lfcols 12 0' ; 'd 'expr',15,-a)'
'set lfcols 8 0' ; 'd 'expr',20,-a)'
'set lfcols 2 0' ; 'd 'expr',25,-a)'
'set lfcols 6 0' ; 'd 'expr',30,-a)'
if (model != 'eta')
'set lfcols 0 0' ; 'd maskout(tmin,1/(tmax-tmin));const(tmax,-60,-a)'
endif
'set gxout line'
'set ccolor 15'
'set cstyle 3'
'set cmark 0'
if (model = 'eta')
'd t2m'
else
'd maskout(tmax,1/(tmax-tmin))'
endif
endif
'set grid on'
'set cmark 8'
'set ccolor 2'
if (model = 'eta')
'd t2m'
else
'd maskout(tmax,1/(tmax-tmin))'
'set grid off'
'set cmark 2'
'set ccolor 4'
'd maskout(tmin,1/(tmax-tmin))'
endif
'set cstyle 0'
'set ccolor 30'
'set cmark 1'
'd hindx'
'set cstyle 0'
'set ccolor 31'
'set cmark 1'
'd chill'
* Draw a rectangle over the x-axis labels
xlo = subwrd(panel.p,1)
xhi = subwrd(panel.p,2)
ylo = subwrd(panel.p,3)
yhi = subwrd(panel.p,4)
'set line 0'
'draw recf 'xlo-0.4' 'ylo-0.8' 'xhi+0.4' 'ylo-0.02
* Back up to Previous Panel: 10m Wind Barbs
p = p + 1
'set parea 'panel.p
'set ccolor 1'
lap1 = hilat + 0.1
lam1 = hilat - 0.1
'set lon 'hilon ;* ??
'set lat 'lam1' 'lap1
'set frame off'
'set grid off'
'set gxout barb'
'set xyrev on'
'set xlab off'
'set ylab off'
if (units = 'e')
'd 2.2374*u10m.1;2.2374*v10m.1'
else
'd u10m.1;v10m.1'
endif
* Reset dimension and graphics parameters
'set lat 'hilat
'set lon 'hilon
'set vpage off'
'set frame on'
'set grads off'
'set ylab on'
'set xlab on'
'set gxout line'
'set grid off'
* Skip to Next Panel: 2m Relative Humidity
p = p - 2
'set parea 'panel.p
'set vpage off'
'set grads off'
rh2vrng(rh2m)
'set gxout linefill'
'set lfcols 20 0' ; 'd rh2m;const(rh2m,00.01,-a)'
'set lfcols 21 0' ; 'd rh2m;const(rh2m,20.01,-a)'
'set lfcols 22 0' ; 'd rh2m;const(rh2m,30.01,-a)'
'set lfcols 23 0' ; 'd rh2m;const(rh2m,40.01,-a)'
'set lfcols 24 0' ; 'd rh2m;const(rh2m,50.01,-a)'
'set lfcols 25 0' ; 'd rh2m;const(rh2m,60.01,-a)'
'set lfcols 26 0' ; 'd rh2m;const(rh2m,70.01,-a)'
'set lfcols 27 0' ; 'd rh2m;const(rh2m,80.01,-a)'
'set lfcols 28 0' ; 'd rh2m;const(rh2m,90.01,-a)'
'set ccolor 28'
'set gxout line'
'set grid on'
'set cmark 2'
'd rh2m'
* Draw a rectangle over the x-axis labels
xlo = subwrd(panel.p,1)
xhi = subwrd(panel.p,2)
ylo = subwrd(panel.p,3)
yhi = subwrd(panel.p,4)
'set line 0'
'draw recf 'xlo-0.4' 'ylo-0.8' 'xhi+0.4' 'ylo-0.02
* Final Panel: Precipitation
getseries('p',pt,1000)
getseries(pc,pc,1000)
getseries(csnow,csnow,1000)
getseries(cfrzr,cfrzr,1000)
getseries(cicep,cicep,1000)
p = p - 1
'set parea 'panel.p
'set vpage off'
'set grid on'
'set grads off'
'define ptot = 0.5*(pt+abs(pt))'
'define pconv = 0.5*(pc+abs(pc))'
if (units = 'e')
'define ptot = const(ptot,0,-u)/25.4'
'define pconv = const(pconv,0,-u)/25.4'
else
'define ptot = const(ptot,0,-u)'
'define pconv = const(pconv,0,-u)'
endif
* Get Total Precipitation Range
'set gxout stat'
'd ptot'
data = sublin(result,8)
pmx = subwrd(data,5)
if (units = 'e')
if (pmx < 0.05)
pmx = 0.0499
else
pmx = pmx + (0.05*pmx)
endif
else
if (pmx < 1.0)
pmx = 0.99
else
pmx = pmx + (0.05*pmx)
endif
endif
'set vrange 0 'pmx
incr = 0.01 * (math_nint(100*pmx/5))
'set ylint 'incr
'set t '_t1+0.5' '_t2+0.5
* Rain (Total Precipitation)
'set gxout bar'
'set barbase 0'
'set bargap 50'
'set ccolor 42'
'd ptot'
* Snow
'set ccolor 44'
'd ptot*csnow'
* Sleet (Freezing Rain)
'set ccolor 45'
'd ptot*cfrzr'
* Ice Pellets
'set ccolor 46'
'd ptot*cicep'
* Convective Precipitation
'set gxout bar'
'set bargap 80'
'set ccolor 2'
'd pconv'
* Draw all the Y-axis labels
* First panel
'set line 21' ; 'draw recf 0.4 7.65 0.62 8.18'
'set line 22' ; 'draw recf 0.4 7.65 0.58 8.18'
'set line 23' ; 'draw recf 0.4 7.65 0.535 8.18'
'set line 25' ; 'draw recf 0.4 7.65 0.49 8.18'
'set line 26' ; 'draw recf 0.4 7.65 0.445 8.18'
'set string 0 c 4 90' ; 'draw string 0.5 7.93 RH (%)'
'set string 2 l 4 90' ; 'draw string 0.5 8.36 T'
'set string 8 l 4 90' ; 'draw string 0.5 8.43 e'
'set string 5 l 4 90' ; 'draw string 0.5 8.50 m'
'set string 4 l 4 90' ; 'draw string 0.5 8.62 p'
'set string 9 l 4 90' ; 'draw string 0.5 8.69 .'
if (units = 'e')
'set string 2 l 4 90' ; 'draw string 0.5 8.79 (F)'
'set string 1 c 4 90' ; 'draw string 0.5 9.53 Wind (mph)'
else
'set string 2 l 4 90' ; 'draw string 0.5 8.79 (C)'
'set string 1 c 4 90' ; 'draw string 0.5 9.53 Wind (m/s)'
endif
'draw string 0.75 8.63 `1m i l l i b a r s'
* Next Panel
'set strsiz 0.08 0.12'
p = npanels - 1
ylo = subwrd(panel.p,3)
yhi = subwrd(panel.p,4)
ymid = ylo + (yhi-ylo)/2
'set string 5 c 4 90'
'draw string 0.5 'ymid' Thickness'
'draw string 0.3 'ymid' 1000-500mb'
'set string 1 c 4 90'
'draw string 0.74 'ymid' (dm)'
* Next Panel
if (toto = 'y')
p = p - 1
ylo = subwrd(panel.p,3)
yhi = subwrd(panel.p,4)
ymid = ylo + (yhi-ylo)/2
'set string 8 c 4 90' ; 'draw string 0.15 'ymid' Total-totals'
* Total-Totals Y-axis Legend
'set strsiz 0.08 0.11'
'set string 15 r 4 0' ; 'draw string 0.45 'ymid' 40'
'set string 7 r 4 0' ; 'draw string 0.45 'ymid-0.133' 30'
'set string 7 r 4 0' ; 'draw string 0.45 'ymid-0.266' 20'
'set string 8 r 4 0' ; 'draw string 0.45 'ymid+0.133' 50'
'set string 8 r 4 0' ; 'draw string 0.45 'ymid+0.266' 60'
'set strsiz 0.08 0.12'
'set string 2 c 4 90' ; 'draw string 0.69 'ymid' Lifted Index'
endif
* Next Panel
p = p - 1
ylo = subwrd(panel.p,3)
yhi = subwrd(panel.p,4)
ymid = ylo + (yhi-ylo)/2
'set string 11 c 4 90' ; 'draw string 0.3 'ymid' SLP'
'set string 1 c 4 90' ; 'draw string 0.6 'ymid' (mb)'
* Next Panel
p = p - 1
ylo = subwrd(panel.p,3)
yhi = subwrd(panel.p,4)
ymid = ylo + (yhi-ylo)/2
'set string 26 c 4 90' ; 'draw string 0.15 'ymid' 10m Wind'
'set string 26 c 4 90' ; 'draw string 0.35 'ymid' Speed'
'set string 1 c 4 90' ; 'draw string 0.55 'ymid' & Barbs'
if (units = 'e')
'draw string 0.75 'ymid' (mph)'
else
'draw string 0.75 'ymid' (m/s)'
endif
* Next Panel
p = p - 1
ylo = subwrd(panel.p,3)
yhi = subwrd(panel.p,4)
ymid = ylo + (yhi-ylo)/2
if (model != 'eta')
'set string 4 c 4 90' ; 'draw string 0.15 'ymid+0.2' Tmin, '
'set string 2 c 4 90' ; 'draw string 0.15 'ymid-0.2' Tmax, '
else
'set string 2 c 4 90' ; 'draw string 0.15 'ymid' 2m Temp, '
endif
'set string 31 c 4 90' ; 'draw string 0.35 'ymid' Wind Chill'
'set string 30 c 4 90' ; 'draw string 0.55 'ymid' Heat Index'
if (units = 'e')
'set string 1 c 4 90'
'draw string 0.75 'ymid' (F)'
else
'set string 1 c 4 90'
'draw string 0.75 'ymid' (C)'
endif
* Next Panel
p = p - 1
ylo = subwrd(panel.p,3)
yhi = subwrd(panel.p,4)
ymid = ylo + (yhi-ylo)/2
'set string 26 c 4 90' ; 'draw string 0.35 'ymid' 2m RH'
'set string 1 c 4 90' ; 'draw string 0.75 'ymid' (%)'
* Bottom Panel
if (model = avn | model = avni | model = eta) ; dt = 6 ; endif
if (model = avnb) ; dt = 12 ; endif
'set string 1 c 4 90'; 'draw string .85 1.50 'dt'-hr Precipitation'
'set string 2 r 4 0' ; 'draw string 0.7 1.9 Convective'
'set string 42 r 4 0' ; 'draw string 0.7 1.7 Rain'
'set string 45 r 4 0' ; 'draw string 0.7 1.5 Sleet'
'set string 44 r 4 0' ; 'draw string 0.7 1.3 Snow'
'set string 46 r 4 0' ; 'draw string 0.7 1.1 Ice Pellets'
if (units = 'e')
'set string 1 c 4 90'
'draw string 1.05 1.50 (inches liquid)'
else
'set string 1 c 4 90'
'draw string 1.05 1.50 (mm liquid)'
endif
* Draw Labels at the top of the page
'set string 1 r 1 0'
'set strsiz 0.14 .17'
if (model = avn | model = avni | model = avnb) ; label = AVN ; endif
if (model = eta) ; label = ETA ; endif
label = label%' Forecast Meteogram for '
label = label%'('hilat
if (hilat < 0) ; label = label%S ; endif
if (hilat > 0) ; label = label%N ; endif
if (hilon < 0) ; label = label%', 'hilon*(-1.0)'W)' ; endif
if (hilon >= 0) ; label = label%', 'hilon'E)' ; endif
'draw string 8.15 10.75 'label
'set line 0'
'draw recf 0.5 0 3.95 0.28'
* Draw the station label
'set strsiz 0.18 0.22'
'set string 21 l 12 0'
'draw string 0.12 10.75 `1'name
'set string 1 l 8 0'
'draw string 0.1 10.77 `1'name
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* END OF MAIN SCRIPT
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
function setcols(args)
'set rgb 20 234 245 234'
'set rgb 21 200 215 200'
'set rgb 22 160 205 160'
'set rgb 23 120 215 120'
'set rgb 24 80 235 80'
'set rgb 25 0 255 0'
'set rgb 26 0 195 0'
'set rgb 27 0 160 0'
'set rgb 28 0 125 0'
'set rgb 30 255 160 120'
'set rgb 31 160 120 255'
'set rgb 32 160 180 205'
'set rgb 42 32 208 32'
'set rgb 43 208 32 208'
'set rgb 44 64 64 255'
'set rgb 45 255 120 32'
'set rgb 46 32 208 208'
'set rgb 47 240 240 0'
'set rgb 98 64 64 96'
'set rgb 99 254 254 254'
return
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
function vrng(f1,f2)
'set gxout stat'
'd 'f1
data = sublin(result,8)
ymx = subwrd(data,5)
ymn = subwrd(data,4)
'd 'f2
data = sublin(result,8)
zmx = subwrd(data,5)
zmn = subwrd(data,4)
if (zmx > ymx) ; ymx = zmx ; endif
if (zmn < ymn) ; ymn = zmn ; endif
dy = ymx-ymn
ymx = ymx + 0.08 * dy
ymn = ymn - 0.08 * dy
'set vrange 'ymn' 'ymx
incr = math_nint((ymx-ymn)/4)
'set ylint 'incr
'set gxout line'
return
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
function rh2vrng(f1)
'set gxout stat'
'd 'f1
data = sublin(result,8)
ymn = subwrd(data,4)
ymx = subwrd(data,5)
if (ymn < 20)
miny = 0
'set ylevs 20 40 60 80'
endif
if (ymn >= 20 & ymn < 30)
miny = 20
'set ylevs 30 50 70 90'
endif
if (ymn >= 30 & ymn < 40)
miny = 30
'set ylevs 40 50 60 70 80 90'
endif
if (ymn >= 40 & ymn < 50)
miny = 40
'set ylevs 50 60 70 80 90'
endif
if (ymn >= 50 & ymn < 60)
miny = 50
'set ylevs 60 70 80 90'
endif
if (ymn >= 60)
miny = 60
'set ylevs 70 80 90'
endif
'set vrange 'miny' 'ymx+3
return
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
function getctl(handle)
line = 1
found = 0
while (!found)
info = sublin(_ctl,line)
if (subwrd(info,1)=handle)
_handle = info
found = 1
endif
line = line + 1
endwhile
return _handle
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
function getgrid(dodsvar,myvar)
'set lon '_xdim
'set lat '_ydim
'set lev '_zgrd
'set time '_tdim
* Write the variable to a file
'set gxout fwrite'
'set fwrite dummy.dat'
'd 'dodsvar
'disable fwrite'
* Write a descriptor file
rc = write(dummy.ctl,'dset ^dummy.dat')
rc = write(dummy.ctl,_undef,append)
rc = write(dummy.ctl,'xdef 1 linear 1 1',append)
rc = write(dummy.ctl,'ydef 1 linear 1 1',append)
rc = write(dummy.ctl,_zdef,append)
rc = write(dummy.ctl,_tdef,append)
rc = write(dummy.ctl,'vars 1',append)
rc = write(dummy.ctl,'dummy '_newzsize' -999 dummy',append)
rc = write(dummy.ctl,'endvars',append)
rc = close (dummy.ctl)
* Open the dummy file, define variable, close dummy file
'open dummy.ctl'
line = sublin(result,2)
dummyfile = subwrd(line,8)
'set dfile 'dummyfile
'set lon 1'
'set lat 1'
'set lev '_zbot' '_ztop
'set time '_time1' '_time2
'define 'myvar' = dummy.'dummyfile
'close 'dummyfile
'set dfile 1'
return
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
function getetarh(dodsvar,myvar)
* swap out original pressure vars
tmpzgrd = _zgrd
tmpzdef = _zdef
tmpzbot = _zbot
tmpztop = _ztop
tmpzsize = _newzsize
* retrieve rh data over the rh pressure range
_zgrd = _rhzgrd
_zdef = _trhzdef
_ztop = _rhztop
_zbot = _rhzbot
_newzsize = _trhzsize
getgrid(dodsvar,tmprh)
* swap in original pressure vars
_zgrd = tmpzgrd
_zdef = tmpzdef
_zbot = tmpzbot
_ztop = tmpztop
_newzsize = tmpzsize
'set lon '_xdim
'set lat '_ydim
'set lev '_rhzgrd
'set time '_tdim
* Write the variable to a file
'set gxout fwrite'
'set fwrite dummy.dat'
t = _t1
while (t <= _t2)
'set t 't
z = 1
while (z <= _newrhzsize)
level = subwrd(_rhlevs,z)
'set lev 'level
'd tmprh'
z = z + 1
endwhile
t = t + 1
endwhile
'disable fwrite'
* Write a descriptor file
rc = write(dummy.ctl,'dset ^dummy.dat')
rc = write(dummy.ctl,_undef,append)
rc = write(dummy.ctl,'xdef 1 linear 1 1',append)
rc = write(dummy.ctl,'ydef 1 linear 1 1',append)
rc = write(dummy.ctl,_rhzdef,append)
rc = write(dummy.ctl,_tdef,append)
rc = write(dummy.ctl,'vars 1',append)
rc = write(dummy.ctl,'dummy '_newrhzsize' -999 dummy',append)
rc = write(dummy.ctl,'endvars',append)
rc = close (dummy.ctl)
* Open the dummy file, define variable, close dummy file
'open dummy.ctl'
line = sublin(result,2)
dummyfile = subwrd(line,8)
'set dfile 'dummyfile
'set lon 1'
'set lat 1'
'set lev '_rhzbot' '_rhztop
'set time '_time1' '_time2
'q dims'
'define 'myvar' = dummy.'dummyfile
'close 'dummyfile
'set dfile 1'
return
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
function getseries(dodsvar,myvar,level)
'set lon '_xdim
'set lat '_ydim
'set lev 'level' 'level
'set time '_tdim
* Write the variable to a file
'set fwrite dummy.dat'
'set gxout fwrite'
'd 'dodsvar
'disable fwrite'
* Write a descriptor file
rc = write(dummy.ctl,'dset ^dummy.dat')
rc = write(dummy.ctl,_undef,append)
rc = write(dummy.ctl,'xdef 1 linear 1 1',append)
rc = write(dummy.ctl,'ydef 1 linear 1 1',append)
rc = write(dummy.ctl,'zdef 1 linear 1 1',append)
rc = write(dummy.ctl,_tdef,append)
rc = write(dummy.ctl,'vars 1',append)
rc = write(dummy.ctl,'dummy 0 -999 dummy',append)
rc = write(dummy.ctl,'endvars',append)
rc = close(dummy.ctl)
* Open the dummy file, define variable, close dummy file
'open dummy.ctl'
line = sublin(result,2)
dummyfile = subwrd(line,8)
'set dfile 'dummyfile
'set lon 1'
'set lat 1'
'set lev 'level
'set time '_time1' '_time2
'define 'myvar' = dummy.'dummyfile
'close 'dummyfile
'set dfile 1'
'set gxout contour'
return