#----------------------------------------------------------------------
# Read and plots GRIB1 data using PyNIO/matplotlib.
#
# Vectors could use some improvement - how to get curly vectors?
#
# Curvilinear grid, 113 x 151
#----------------------------------------------------------------------
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import Nio

# Read data
dir      = "../Data/"
filename = "ruc.grb"
a   = Nio.open_file("%s/%s" %(dir,filename))
u   = a.variables["U_GRD_236_MWSL"][::4,::4]    # Stride the vectors so
v   = a.variables["V_GRD_236_MWSL"][::4,::4]    # they are less dense.
lat = a.variables["gridlat_236"][::4,::4]
lon = a.variables["gridlon_236"][::4,::4]

m = Basemap(projection='cyl',llcrnrlat=lat.min()-3,urcrnrlat=lat.max()+3,\
            resolution='l',  llcrnrlon=lon.min()-3,urcrnrlon=lon.max()+3)

# create figure, add axes
fig = plt.figure(figsize=(8,10))
ax  = fig.add_axes([0.1,0.1,0.8,0.8])

# rotate vectors to projection grid.

uproj,vproj,xx,yy = m.rotate_vector(u,v,lon,lat,returnxy=True)

Q = m.quiver(xx,yy,uproj,vproj,scale=700)
# make quiver key.
#qk = plt.quiverkey(Q, 0.1, 0.1, 20, '20 m/s', labelpos='W')

#-- draw coastlines, state and country boundaries, edge of map
m.drawcoastlines()

#-- create and draw meridians and parallels grid lines
m.drawparallels(np.arange( -90., 90.,30.),labels=[1,0,0,0],fontsize=10)
m.drawmeridians(np.arange(-180.,180.,30.),labels=[0,0,0,1],fontsize=10)

#plt.show()
plt.savefig("grib1_plot_uv_mpl.png")
plt.close(fig)
