PRO VELOVECT,U,V,X,Y, Missing = Missing, Length = length, Dots = dots, $ Color=color, _EXTRA = extra ; ;+ ; NAME: ; VELOVECT ; ; PURPOSE: ; Produce a two-dimensional velocity field plot. ; ; A directed arrow is drawn at each point showing the direction and ; magnitude of the field. ; ; CATEGORY: ; Plotting, two-dimensional. ; ; CALLING SEQUENCE: ; VELOVECT, U, V [, X, Y] ; ; INPUTS: ; U: The X component of the two-dimensional field. ; U must be a two-dimensional array. ; ; V: The Y component of the two dimensional field. Y must have ; the same dimensions as X. The vector at point (i,j) has a ; magnitude of: ; ; (U(i,j)^2 + V(i,j)^2)^0.5 ; ; and a direction of: ; ; ATAN2(V(i,j),U(i,j)). ; ; OPTIONAL INPUT PARAMETERS: ; X: Optional abcissae values. X must be a vector with a length ; equal to the first dimension of U and V. ; ; Y: Optional ordinate values. Y must be a vector with a length ; equal to the first dimension of U and V. ; ; KEYWORD INPUT PARAMETERS: ; MISSING: Missing data value. Vectors with a LENGTH greater ; than MISSING are ignored. ; ; LENGTH: Length factor. The default of 1.0 makes the longest (U,V) ; vector the length of a cell. ; ; DOTS: Set this keyword to 1 to place a dot at each missing point. ; Set this keyword to 0 or omit it to draw nothing for missing ; points. Has effect only if MISSING is specified. ; ; COLOR: The color index used for the plot. ; ; Note: All other keywords are passed directly to the PLOT procedure ; and may be used to set option such as TITLE, POSITION, ; NOERASE, etc. ; OUTPUTS: ; None. ; ; COMMON BLOCKS: ; None. ; ; SIDE EFFECTS: ; Plotting on the selected device is performed. System ; variables concerning plotting are changed. ; ; RESTRICTIONS: ; None. ; ; PROCEDURE: ; Straightforward. Unrecognized keywords are passed to the PLOT ; procedure. ; ; MODIFICATION HISTORY: ; DMS, RSI, Oct., 1983. ; For Sun, DMS, RSI, April, 1989. ; Added TITLE, Oct, 1990. ; Added POSITION, NOERASE, COLOR, Feb 91, RES. ; August, 1993. Vince Patrick, Adv. Visualization Lab, U. of Maryland, ; fixed errors in math. ; August, 1993. DMS, Added _EXTRA keyword inheritance. ;- ; on_error,2 ;Return to caller if an error occurs s = size(u) t = size(v) if s(0) ne 2 then begin baduv: message, 'U and V parameters must be 2D and same size.' endif if total(abs(s(0:2)-t(0:2))) ne 0 then goto,baduv ; if n_params(0) lt 3 then x = findgen(s(1)) else $ if n_elements(x) ne s(1) then begin badxy: message, 'X and Y arrays have incorrect size.' endif if n_params(1) lt 4 then y = findgen(s(2)) else $ if n_elements(y) ne s(2) then goto,badxy ; if n_elements(missing) le 0 then missing = 1.0e30 if n_elements(length) le 0 then length = 1.0 mag = sqrt(u^2+v^2) ;magnitude. ;Subscripts of good elements nbad = 0 ;# of missing points if n_elements(missing) gt 0 then begin good = where(mag lt missing) if keyword_set(dots) then bad = where(mag ge missing, nbad) endif else begin good = lindgen(n_elements(mag)) endelse ugood = u(good) vgood = v(good) x0 = min(x) ;get scaling x1 = max(x) y0 = min(y) y1 = max(y) x_step=(x1-x0)/s(1) y_step=(y1-y0)/s(2) maxmag=max([max(ugood/x_step),max(vgood/y_step)]) sina = length * (ugood/maxmag) cosa = length * (vgood/maxmag) ; if n_elements(title) le 0 then title = '' ;-------------- plot to get axes --------------- if n_elements(color) eq 0 then color = !p.color x_b0=x0-x_step x_b1=x1+x_step y_b0=y0-y_step y_b1=y1+y_step if n_elements(position) eq 0 then begin plot,[x_b0,x_b1],[y_b1,y_b0],/nodata,/xst,/yst, $ color=color, _EXTRA = extra endif else begin plot,[x_b0,x_b1],[y_b1,y_b0],/nodata,/xst,/yst, $ color=color, _EXTRA = extra endelse ; r = .3 ;len of arrow head angle = 22.5 * !dtor ;Angle of arrowhead st = r * sin(angle) ;sin 22.5 degs * length of head ct = r * cos(angle) ; for i=0,n_elements(good)-1 do begin ;Each point x0 = x(good(i) mod s(1)) ;get coords of start & end dx = sina(i) x1 = x0 + dx y0 = y(good(i) / s(1)) dy = cosa(i) y1 = y0 + dy xd=x_step yd=y_step plots,[x0,x1,x1-(ct*dx/xd-st*dy/yd)*xd, $ x1,x1-(ct*dx/xd+st*dy/yd)*xd], $ [y0,y1,y1-(ct*dy/yd+st*dx/xd)*yd, $ y1,y1-(ct*dy/yd-st*dx/xd)*yd], $ color=color endfor if nbad gt 0 then $ ;Dots for missing? oplot, x(bad mod s(1)), y(bad / s(1)), psym=3, color=color end