You are here: Home / Services / Data Analysis and Visualization / Visualization / Software / NCL / examples / source_code / DKRZ NCL ICON (unstructured grid): draw vectors

DKRZ NCL ICON (unstructured grid): draw vectors

NCL's vector functions can't be used for data with an underlying unstructured grid. This example shows a workaround which uses the WMAP package to plot arrows at the center longitudes/latitudes.

Example script:

;--------------------------------------------------------------------
; DKRZ NCL Example:           draw_vectors_ICON.ncl
;
; Description:                draw vectors (unstructured grid) using
;                            the weather symbols package WMAP
;
; 09.07.18  kmf
;--------------------------------------------------------------------
begin

  r2d  = get_r2d("float")                   ;-- radians to degrees

  fu = addfile("U_10M_nwp_R2B09_lkm1006_atm3_2d_ml_20160801T000000Z.nc","r")
  fv = addfile("V_10M_nwp_R2B09_lkm1006_atm3_2d_ml_20160801T000000Z.nc","r")

  u  = fu->U_10M(0,0,:)                     ;-- U-Component of wind
  v  = fv->V_10M(0,0,:)                     ;-- V-Component of wind
 
  clon   = tofloat(fu->clon * r2d)          ;-- must be of type float
  clat   = tofloat(fu->clat * r2d)          ;-- must be of type float

;-- define sub-region
  lonmin   =   0.0
  lonmax   = 120.0
  latmin   =   0.0
  latmax   =  60.0

;-- retrieve the indices of the cells within the sub-region; subset clat, clon, u and v
  tmp_ind  = ind((clon .ge. lonmin .and. clon .le. lonmax) .and. (clat .ge. latmin .and. clat .le. latmax))
  clon_new = clon(tmp_ind)
  clat_new = clat(tmp_ind)
  u_new    = u(tmp_ind)
  v_new    = v(tmp_ind)
 
;-- open workstation
  wks_type          = "png"
  wks_type@wkWidth  = 1200
  wks_type@wkHeight = 1200
  wks = gsn_open_wks(wks_type,"plot_draw_vectors_ICON")

;-- map resource settings
  mpres                =  True
  mpres@gsnFrame       =  False             ;-- don't advance the frame
  mpres@gsnMaximize    =  True              ;-- maximize plot output
  mpres@gsnLeftString  = "Zonal Wind"       ;-- left string
  mpres@gsnRightString = "m/s"              ;-- right string
 
  mpres@mpOutlineOn    =  True              ;-- outline map
  mpres@mpMinLatF      =  latmin            ;-- min lat
  mpres@mpMaxLatF      =  latmax            ;-- max lat
  mpres@mpMinLonF      =  lonmin            ;-- min lon
  mpres@mpMaxLonF      =  lonmax            ;-- max lon
 
  mpres@tiMainString   = "Unstructured grid (ICON):   draw vectors~C~~Z80~workaround using WMAP package"
  mpres@tiMainOffsetXF = -0.13              ;-- move title string to the left
  mpres@tiMainOffsetYF =  0.04              ;-- move title string upward
 
  map = gsn_csm_map(wks,mpres)              ;-- create the map

;-- weather symbols settings for vectors
  wmsetp("vrs - reference vector size",10.)
  wmsetp("vrn - NDC size corresponding to vrs",0.03)
  wmsetp("vcw - vector line width scale",2.0)
  wmsetp("vch - vector head",0.005)         ;-- black
  wmsetp("vcc - vector color",1)            ;-- black

  inc = 1000                                ;-- draw every inc'th vector (total number of vectors: ~21 million)
 
  wmvectmap(wks, clat_new(::inc),clon_new(::inc),u_new(::inc),v_new(::inc)) ;-- draw the weather symbols: arrow

;--  draw label box
  getvalues map                             ;-- retrieve the width, height, x- and y-position of the map
     "vpWidthF"  :  vpw
     "vpHeightF" :  vph
     "vpXF"      :  vpx
     "vpYF"      :  vpy
  end getvalues
 
  wmvlbl(wks,(vpx+vpw),(vpy-vph))           ;-- draw label box (reference vector); x,y values: right lower corner

;-- advance the frame
  frame(wks)
 
end

Document Actions