Example #1
0
import cdms2, numpy.ma, regrid2 as regrid, os, sys
from regrid2 import Regridder
from markError import clearError, markError, reportError
from markError import get_sample_data_dir

clearError()

print 'Test 8: Regridding ...',

## lat = cdms2.createGaussianAxis(32)
## lon = cdms2.createUniformLongitudeAxis(0.0,64,360.0/64.)
## outgrid = cdms2.createRectGrid(lat,lon,'yx','gaussian')
outgrid = cdms2.createGaussianGrid(32)

f = cdms2.openDataset(os.path.join(get_sample_data_dir(), 'readonly.nc'))
u = f.variables['u']
ingrid = u.getGrid()
try:
    sh = ingrid.shape
except:
    markError('Grid shape')

regridf = Regridder(ingrid, outgrid)
newu = regridf(u)

if (abs(newu[0, 0, -1] - 488.4763488) > 1.e-3):
    markError('regrid', newu[0, 0, -1])
newu = u.regrid(outgrid)
if (abs(newu[0, 0, -1] - 488.4763488) > 1.e-3):
    markError('regrid', newu[0, 0, -1])
Example #2
0
    g = cdms2.open('cdtest10_t_%d.nc'%year,'w')
    if year==2004:
        tchunk = t.subSlice(imo+6)
    else:
        tchunk = t.subSlice((imo,imo+12))
    g.write(tchunk)
    g.close()
    imo += 12

os.unlink('cdtest10_t_2001.nc')
os.unlink('cdtest10_t_2003.nc')
os.unlink('cdtest10_uv_2003.nc')
os.unlink('cdtest10_uv_2005.nc')

# Copy cdtest10.xml to working directory
shutil.copyfile(os.path.join(get_sample_data_dir(), 'cdtest10.xml'),
                'cdtest10.xml')



# Test filemap access ...
try:
    f = cdms2.open('cdtest10.xml')
except Exception,err:
    print err
    markError('Opening cdtest10.xml using filemap: Version 3.0 or greater required')
    reportError()
    sys.exit(1)

# Read u from 2001-7 to 2002-7 and compare
u = f.getVariable('u')
Example #3
0
import cdms2, numpy, os, sys
from markError import NTIME,NLAT,NLON,x,clearError,markError,reportError
from markError import get_sample_data_dir
clearError()

print 'Test 4: CdmsFile [numpy.ma] read/write ...',

time = numpy.ma.array([0.0,366.0,731.0])
lat = numpy.ma.arange(NLAT)*(180./(NLAT-1))-90.
lon = numpy.ma.arange(NLON)*(360.0/NLON)
timestr = ['2000','2001','2002']
u = x[0]

f = cdms2.createDataset('readwrite.nc')
h = cdms2.open(os.path.join(get_sample_data_dir(),'readonly.nc'))
tobj = f.createAxis('time',numpy.ma.array([time[1]]))
tobj.units = 'days since 2000-1-1'
latobj = f.createAxis('latitude',lat)
latobj.units = 'degrees_north'
lonobj = f.createAxis('longitude',lon)
lonobj.units = 'degrees_east'
var = f.createVariable('u',numpy.float,(tobj,latobj,lonobj))
var.units = 'm/s'
try:
    var[:]=u[0]
except:
    markError("Setting a slice")
try:
    var.assignValue(u[0])
except:
Example #4
0
## Automatically adapted for numpy.oldnumeric Aug 01, 2007 by 

#!/usr/bin/env python

import cdms2,numpy,cdtime,os,sys
from cdms2 import MV2 as MV
from markError import NTIME,NLAT,NLON,x,clearError,markError,reportError
from markError import get_sample_data_dir
clearError()

print 'Test 5: get/sub, time functions ...',

f = cdms2.open(os.path.join(get_sample_data_dir(),'test.xml'))
v = f.variables['v']
vp = x[1,1:,4:12,8:24]
wp = x[1,2,4:12]
xp = numpy.ma.concatenate((x[1,1:,4:12,8:NLON],x[1,1:,4:12,0:8]),axis=2)

# getRegion - positional

s = v.getRegion((366.,731.,'ccn'),(-42.,42.,'ccn'),(90.,270.,'con'))
if not numpy.ma.allequal(vp,s): markError('getRegion/positional failed')

# getRegion - keyword
s = v.getRegion(latitude=(-42.,42.,'ccn'),longitude=(90.,270.,'con'),time=(366.,731.,'ccn'))
if not numpy.ma.allequal(vp,s): markError('getRegion/keyword failed')

# getRegion - wraparound
s4 = v.getRegion(time=(366.,731.,'ccn'),latitude=(-42.,42.,'ccn'),longitude=(90.,450.,'con'))
if not numpy.ma.allequal(xp,s4): markError('getRegion wraparound failed')
Example #5
0
    if len(coord)==2:
        indic = 'ccn'
    else:
        indic = coord[2]
    inter = lon.mapIntervalExt(ci,indic)
    if inter is not None:
        if inter[2]==-1:
            result = inter
        else:
            result = (inter[0],inter[1])
    else:
        result = inter
    if result!=index:
        markError("%s ==> %s, not %s"%(`coord`,`result`,`index`))

f = cdms2.open(os.path.join(get_sample_data_dir(),'test.xml'))
lon = f['longitude']
lat = f['latitude']
rlat = cdms2.createAxis(lat[::-1], id='latitude')
rlat.units = 'degrees_north'
time = f['time']
time0 = time.subAxis(0,1)
lev = cdms2.createAxis([0.05035, 0.10089999,], id='level')

testwrap(lon,(-90,90,'ccn'),(-8,9))
testwrap(lon,(-90,0,'ccn'),(-8,1))
testwrap(lon,(-6,5,'ccb'),(-1,1))
testwrap(lon,(-17,-5,'ccb'),(-2,1))
testwrap(lon,(353,365,'ccb'),(31,33))
testwrap(lon,(-6,1,'ccn'),(0,1))
testwrap(lon,(0,348.75),(0,32))
Example #6
0
## Automatically adapted for numpy.oldnumeric Aug 01, 2007 by

import numpy
import cdms2, os, sys
from cdms2.tvariable import TransientVariable as TV
import MV2

print 'Test 11: MV module (transient variable arithmetic) ... ',
from markError import NTIME, NLAT, NLON, x, clearError, markError, reportError
from markError import get_sample_data_dir
clearError()

d = cdms2.open(os.path.join(get_sample_data_dir(), 'test.xml'))
ud = d['u']
vd = d['v']
udat = ud[:]
vdat = vd[:]
ulat = ud.getLatitude()
if not isinstance(udat, TV): markError('Slice does not return TV')
f = cdms2.open(os.path.join(get_sample_data_dir(), 'u_2000.nc'))
uf = f['u']

vel = MV2.sqrt(ud * ud + vd * vd)
vel.id = 'velocity'
vel2 = MV2.sqrt(udat * udat + vdat * vdat)
vel2.id = 'velocity'
vel2.units = ud.units
if not MV2.allequal(vel, vel2): markError('Slice operators do not compare')

x1 = uf + 1.0
x2 = 1.0 - ud
Example #7
0
#!/usr/bin/env python

# Test curvilinear grids

print 'Test 14: Generic grids ...',

import cdms2, numpy, os, sys
from markError import clearError,markError,reportError
from markError import get_sample_data_dir
clearError()

datb = numpy.array([ 693., 694.,])
latb = numpy.array([-26.67690036,-30.99890917,])
lonb = numpy.array([92.41822415, 94.4512163 ,])

f = cdms2.open(os.path.join(get_sample_data_dir(),'sampleGenGrid3.nc'))

# Slice a file variable on a curvilinear grid: by coordinates ...
samp = f['sample']
x = samp(lat=(-32,-25), lon=(90,95))
if not numpy.ma.allequal(x.data, datb):
    markError('slicing a file variable by coordinates')

grid = x.getGrid()
if grid.shape!=(2,):
    markError('grid shape is wrong')
lat = grid.getLatitude()
if not numpy.ma.allclose(lat.data, latb, atol=1.e-5):
    markError('latitude array is wrong')
lon = grid.getLongitude()
if not numpy.ma.allclose(lon.data, lonb, atol=1.e-5):
Example #8
0
## Automatically adapted for numpy.oldnumeric Aug 01, 2007 by

#!/usr/bin/env python

import cdms2, numpy, cdtime, os, sys
from cdms2 import MV2 as MV
from markError import NTIME, NLAT, NLON, x, clearError, markError, reportError
from markError import get_sample_data_dir
clearError()

print 'Test 5: get/sub, time functions ...',

f = cdms2.open(os.path.join(get_sample_data_dir(), 'test.xml'))
v = f.variables['v']
vp = x[1, 1:, 4:12, 8:24]
wp = x[1, 2, 4:12]
xp = numpy.ma.concatenate((x[1, 1:, 4:12, 8:NLON], x[1, 1:, 4:12, 0:8]),
                          axis=2)

# getRegion - positional

s = v.getRegion((366., 731., 'ccn'), (-42., 42., 'ccn'), (90., 270., 'con'))
if not numpy.ma.allequal(vp, s): markError('getRegion/positional failed')

# getRegion - keyword
s = v.getRegion(latitude=(-42., 42., 'ccn'),
                longitude=(90., 270., 'con'),
                time=(366., 731., 'ccn'))
if not numpy.ma.allequal(vp, s): markError('getRegion/keyword failed')

# getRegion - wraparound
Example #9
0
        datasetnode.dump(xmlpath)
        if verbose:
            print xmlpath,'written'

#--------------------------------------------------------------------------------------------------------------------------
if __name__ == '__main__':

    from cdms2 import CDMSError
    print 'Test 7: Database import ...',
    from markError import clearError,markError,reportError
    from markError import get_sample_data_dir
    clearError()
    import os,sys

    argv = string.split('cdtest07.py -q -d test -x junk.xml u_2000.nc u_2001.nc u_2002.nc v_2000.nc v_2001.nc v_2002.nc')

    os.chdir(os.path.join(get_sample_data_dir()))
    
    try:
        main(argv)
    except CDMSError,e:
        markError(str(e))
    except Exception,err:
        markError("Importing dataset")


    err = os.system("diff junk.xml test.xml")

    if err!=0: markError("Comparison with benchmark test.xml")
    reportError()
Example #10
0
    g = cdms2.open('cdtest10_t_%d.nc' % year, 'w')
    if year == 2004:
        tchunk = t.subSlice(imo + 6)
    else:
        tchunk = t.subSlice((imo, imo + 12))
    g.write(tchunk)
    g.close()
    imo += 12

os.unlink('cdtest10_t_2001.nc')
os.unlink('cdtest10_t_2003.nc')
os.unlink('cdtest10_uv_2003.nc')
os.unlink('cdtest10_uv_2005.nc')

# Copy cdtest10.xml to working directory
shutil.copyfile(os.path.join(get_sample_data_dir(), 'cdtest10.xml'),
                'cdtest10.xml')

# Test filemap access ...
try:
    f = cdms2.open('cdtest10.xml')
except Exception, err:
    print err
    markError(
        'Opening cdtest10.xml using filemap: Version 3.0 or greater required')
    reportError()
    sys.exit(1)

# Read u from 2001-7 to 2002-7 and compare
u = f.getVariable('u')
t = u.getTime()
Example #11
0
#!/usr/bin/env python

import cdms2,numpy.ma, regrid2 as regrid, os, sys
from regrid2 import Regridder
from markError import clearError,markError,reportError
from markError import get_sample_data_dir
clearError()

print 'Test 8: Regridding ...',

## lat = cdms2.createGaussianAxis(32)
## lon = cdms2.createUniformLongitudeAxis(0.0,64,360.0/64.)
## outgrid = cdms2.createRectGrid(lat,lon,'yx','gaussian')
outgrid = cdms2.createGaussianGrid(32)

f = cdms2.openDataset(os.path.join(get_sample_data_dir(),'readonly.nc'))
u = f.variables['u']
ingrid = u.getGrid()
try:
    sh = ingrid.shape
except:
    markError('Grid shape')

regridf = Regridder(ingrid, outgrid)
newu = regridf(u)

if (abs(newu[0,0,-1]-488.4763488) > 1.e-3): markError('regrid',newu[0,0,-1])
newu = u.regrid(outgrid)
if (abs(newu[0,0,-1]-488.4763488) > 1.e-3): markError('regrid',newu[0,0,-1])

# Regrid TV
Example #12
0
        147.00098336,],
 [  99.68231972, 109.40769163, 119.04011194, 128.54493672, 137.88992043,
        147.04571884,],
 [  99.74090681, 109.50235408, 119.16667376, 128.69809779, 138.06369873,
        147.23389768,],
 [  99.89478673, 109.74975596, 119.49504331, 129.09174691, 138.50528817,
        147.70588394,]])

maskb = numpy.array(
    [[0,0,0,0,0,0,],
     [0,0,0,0,0,0,],
     [0,0,0,0,0,0,],
     [0,0,0,0,0,0,],
     [1,1,1,1,1,0,]], 'b')

f = cdms2.open(os.path.join(get_sample_data_dir(),'sampleCurveGrid4.nc'))

#-------------------------------------------------------------

# Slice a file variable on a curvilinear grid: by coordinates ...
samp = f['sample']
x=samp()
x = samp(lat=(-10,30), lon=(90,150))
if not numpy.ma.allequal(x.data, datb):
    markError('slicing a file variable by coordinates')
if not numpy.ma.allequal(x.mask, maskb):
    markError('slicing a file variable by coordinates: invalid mask')

grid = x.getGrid()
if not (grid.shape==(5,6)):
    markError('grid shape is wrong')