Using Iris to access data from US-IOOS models


In [1]:
from IPython.core.display import HTML
HTML('<iframe src=http://scitools.org.uk/iris/ width=800 height=350></iframe>')


Out[1]:

In [2]:
import datetime as dt
import time

import iris

In [3]:
def time_near(cube,start):
    #    coord_names = [coord.name() for coord in cube.coords()]
    #    timevar = cube.coord(coord_names[0]))
    timevar=cube.coord('time')
    try:
        itime = timevar.nearest_neighbour_index(timevar.units.date2num(start))
    except:
        itime = -1
    return timevar.points[itime]

In [4]:
def var_lev_date(url=None,var=None,mytime=None,lev=0,subsample=1):
    time0=time.time()
    cubes = iris.load(url)
    cube = cubes.extract(iris.Constraint(name=var.strip()))[0]
    try:
        cube.coord(axis='T').rename('time')
    except:
        pass
    slice = cube.extract(iris.Constraint(time=time_near(cube,mytime)))
    slice = slice[lev,::subsample,::subsample]  
    print 'slice retrieved in %f seconds' % (time.time()-time0)
    return slice

In [5]:
def myplot(slice,model=None):
    # make the plot
    figure(figsize=(12,8))
    lat=slice.coord(axis='Y').points
    lon=slice.coord(axis='X').points
    time=slice.coord('time')[0]
    subplot(111,aspect=(1.0/cos(mean(lat)*pi/180.0)))
    pcolormesh(lon,lat,ma.masked_invalid(slice.data));
    colorbar()
    grid()
    date=time.units.num2date(time.points)
    date_str=date[0].strftime('%Y-%m-%d %H:%M:%S %Z')
    plt.title('%s: %s: %s' % (model,slice.long_name,date_str));

In [6]:
# use contraints to select nearest time
#mytime=dt.datetime(2008,7,28,12)  #specified time...
mytime=dt.datetime.utcnow()      # .... or now

In [8]:
model='USGS/COAWST'
url='http://geoport.whoi.edu/thredds/dodsC/coawst_4/use/fmrc/coawst_4_use_best.ncd'
var='potential temperature'
lev=-1
slice=var_lev_date(url=url,var=var, mytime=mytime, lev=lev, subsample=1)
myplot(slice,model=model)


slice retrieved in 389.897032 seconds

In [9]:
model='MARACOOS/ESPRESSO'
url='http://tds.marine.rutgers.edu/thredds/dodsC/roms/espresso/2009_da/his'
var='potential temperature'
lev=-1
slice=var_lev_date(url=url,var=var, mytime=mytime, lev=lev)
myplot(slice,model=model)


slice retrieved in 46.224127 seconds

In [21]:
model='SECOORA/NCSU'
url='http://omgsrv1.meas.ncsu.edu:8080/thredds/dodsC/fmrc/sabgom/SABGOM_Forecast_Model_Run_Collection_best.ncd'
var='potential temperature'
lev=-1
slice=var_lev_date(url=url,var=var, mytime=mytime, lev=lev)
myplot(slice,model=model)


slice retrieved in 89.828974 seconds

In [11]:
model='CENCOOS/UCSC'
url='http://oceanmodeling.pmc.ucsc.edu:8080/thredds/dodsC/ccsnrt/fmrc/CCSNRT_Aggregation_best.ncd'
var='potential temperature'
lev=-1
slice=var_lev_date(url=url,var=var, mytime=mytime, lev=lev)
myplot(slice,model=model)


slice retrieved in 86.230602 seconds

In [12]:
model='HIOOS'
url='http://oos.soest.hawaii.edu/thredds/dodsC/hioos/roms_assim/hiig/ROMS_Hawaii_Regional_Ocean_Model_Assimilation_best.ncd'
var='sea_water_potential_temperature'
lev=-1
slice=var_lev_date(url=url,var=var, mytime=mytime, lev=lev)
myplot(slice,model=model)


slice retrieved in 85.131955 seconds

In [20]:
model='Global RTOFS/NCEP'
url='http://ecowatch.ncddc.noaa.gov/thredds/dodsC/hycom/hycom_reg1_agg/HYCOM_Region_1_Aggregation_best.ncd'
var='sea_water_temperature'  
lev=1
subsample=1
slice=var_lev_date(url=url,var=var, mytime=mytime, lev=lev, subsample=subsample)
myplot(slice,model=model)


slice retrieved in 3.165606 seconds

In [22]:
# this is not a forecast model, but test it anyway
model='TAMU/TXLA'
url='http://barataria.tamu.edu:8080/thredds/dodsC/NcML/txla_nesting6.nc'
var=u'salinity' 
lev=-1
subsample=1
slice=var_lev_date(url=url,var=var, mytime=mytime, lev=lev, subsample=subsample)
myplot(slice,model=model)


slice retrieved in 91.991295 seconds

In [15]:
cubes = iris.load(url)

In [16]:
print cubes


0: bottom v-momentum stress / (newton meter-2) (*ANONYMOUS*: 21538; *ANONYMOUS*: 190; *ANONYMOUS*: 671)
1: surface u-momentum stress / (newton meter-2) (*ANONYMOUS*: 21538; *ANONYMOUS*: 191; *ANONYMOUS*: 670)
2: nonlinear model Laplacian mixing coefficient for tracers / (meter2 second-1) (*ANONYMOUS*: 6)
3: mask on U-points / (unknown)        (*ANONYMOUS*: 191; *ANONYMOUS*: 670)
4: tracers outflow, nudging inverse time scale / (second-1) (*ANONYMOUS*: 4; *ANONYMOUS*: 6)
5: bottom u-momentum stress / (newton meter-2) (*ANONYMOUS*: 21538; *ANONYMOUS*: 191; *ANONYMOUS*: 670)
6: x-locations of V-points / (meter)   (*ANONYMOUS*: 190; *ANONYMOUS*: 671)
7: x-locations of U-points / (meter)   (*ANONYMOUS*: 191; *ANONYMOUS*: 670)
8: vertically integrated v-momentum component / (meter second-1) (*ANONYMOUS*: 21538; *ANONYMOUS*: 190; *ANONYMOUS*: 671)
9: mask on V-points / (unknown)        (*ANONYMOUS*: 190; *ANONYMOUS*: 671)
10: free-surface inflow, nudging inverse time scale / (second-1) (*ANONYMOUS*: 4)
11: background vertical mixing coefficient for tracers / (meter2 second-1) (*ANONYMOUS*: 6)
12: y-locations of V-points / (meter)   (*ANONYMOUS*: 190; *ANONYMOUS*: 671)
13: y-locations of U-points / (meter)   (*ANONYMOUS*: 191; *ANONYMOUS*: 670)
14: 3D momentum inflow, nudging inverse time scale / (second-1) (*ANONYMOUS*: 4)
15: 2D momentum outflow, nudging inverse time scale / (second-1) (*ANONYMOUS*: 4)
16: tracer point sources and sink activation switch / (unknown) (*ANONYMOUS*: 6)
17: salinity / (unknown)                (*ANONYMOUS*: 21538; S-coordinate at RHO-points: 30; *ANONYMOUS*: 191; *ANONYMOUS*: 671)
18: u-momentum component / (meter second-1) (*ANONYMOUS*: 21538; S-coordinate at RHO-points: 30; *ANONYMOUS*: 191; *ANONYMOUS*: 670)
19: curvilinear coordinate metric in ETA / (meter-1) (*ANONYMOUS*: 191; *ANONYMOUS*: 671)
20: 2D momentum inflow, nudging inverse time scale / (second-1) (*ANONYMOUS*: 4)
21: curvilinear coordinate metric in XI / (meter-1) (*ANONYMOUS*: 191; *ANONYMOUS*: 671)
22: 3D momentum outflow, nudging inverse time scale / (second-1) (*ANONYMOUS*: 4)
23: free-surface outflow, nudging inverse time scale / (second-1) (*ANONYMOUS*: 4)
24: x-locations of PSI-points / (meter) (*ANONYMOUS*: 190; *ANONYMOUS*: 670)
25: y-locations of PSI-points / (meter) (*ANONYMOUS*: 190; *ANONYMOUS*: 670)
26: y-locations of RHO-points / (meter) (*ANONYMOUS*: 191; *ANONYMOUS*: 671)
27: mask on psi-points / (unknown)      (*ANONYMOUS*: 190; *ANONYMOUS*: 670)
28: angle between XI-axis and EAST / (radians) (*ANONYMOUS*: 191; *ANONYMOUS*: 671)
29: surface v-momentum stress / (newton meter-2) (*ANONYMOUS*: 21538; *ANONYMOUS*: 190; *ANONYMOUS*: 671)
30: mask on RHO-points / (unknown)      (*ANONYMOUS*: 191; *ANONYMOUS*: 671)
31: Tracers nudging/relaxation inverse time scale / (day-1) (*ANONYMOUS*: 6)
32: potential temperature / (Celsius)   (*ANONYMOUS*: 21538; S-coordinate at RHO-points: 30; *ANONYMOUS*: 191; *ANONYMOUS*: 671)
33: Coriolis parameter at RHO-points / (second-1) (*ANONYMOUS*: 191; *ANONYMOUS*: 671)
34: x-locations of RHO-points / (meter) (*ANONYMOUS*: 191; *ANONYMOUS*: 671)
35: vertically integrated u-momentum component / (meter second-1) (*ANONYMOUS*: 21538; *ANONYMOUS*: 191; *ANONYMOUS*: 670)
36: v-momentum component / (meter second-1) (*ANONYMOUS*: 21538; S-coordinate at RHO-points: 30; *ANONYMOUS*: 190; *ANONYMOUS*: 671)
37: dye concentration, type 04 / (kilogram meter-3) (*ANONYMOUS*: 21538; S-coordinate at RHO-points: 30; *ANONYMOUS*: 191; *ANONYMOUS*: 671)
38: dye concentration, type 03 / (kilogram meter-3) (*ANONYMOUS*: 21538; S-coordinate at RHO-points: 30; *ANONYMOUS*: 191; *ANONYMOUS*: 671)
39: dye concentration, type 02 / (kilogram meter-3) (*ANONYMOUS*: 21538; S-coordinate at RHO-points: 30; *ANONYMOUS*: 191; *ANONYMOUS*: 671)
40: dye concentration, type 01 / (kilogram meter-3) (*ANONYMOUS*: 21538; S-coordinate at RHO-points: 30; *ANONYMOUS*: 191; *ANONYMOUS*: 671)
41: tracers inflow, nudging inverse time scale / (second-1) (*ANONYMOUS*: 4; *ANONYMOUS*: 6)

In [19]: