def XXtest5_regrid(self): srcF = cdms2.open(cdat_info.get_sampledata_path() + \ '/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc') so = srcF('so')[0, 0, ...] clt = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc')('clt') dstData = so.regrid(clt.getGrid(), regridTool = 'esmf', regridMethod='conserve') if self.pe == 0: dstDataMask = (dstData == so.missing_value) dstDataFltd = dstData * (1 - dstDataMask) zeroValCnt = (dstData == 0).sum() if so.missing_value > 0: dstDataMin = dstData.min() dstDataMax = dstDataFltd.max() else: dstDataMin = dstDataFltd.min() dstDataMax = dstData.max() zeroValCnt = (dstData == 0).sum() print 'Number of zero valued cells', zeroValCnt print 'min/max value of dstData: %f %f' % (dstDataMin, dstDataMax) self.assertLess(dstDataMax, so.max()) if PLOT: pylab.figure(1) pylab.pcolor(so, vmin=20, vmax=40) pylab.colorbar() pylab.title('so') pylab.figure(2) pylab.pcolor(dstData, vmin=20, vmax=40) pylab.colorbar() pylab.title('dstData')
def test_2d_esmf_conserv(self): print 'running test_2d_esmf_conserv...' f = cdms2.open(cdat_info.get_sampledata_path() + \ '/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc') so = f('so')[0, 0, :, :] clt = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc')('clt')[0, :, :] tic = time.time() soInterp = so.regrid(clt.getGrid(), regridTool='ESMF', regridMethod='Conservative') soInterpInterp = soInterp.regrid(so.getGrid(), regridTool='ESMF', regridMethod='Conservative') toc = time.time() print 'time to interpolate (ESMF conservative) forward/backward: ', toc - tic ntot = reduce(operator.mul, so.shape) avgdiff = numpy.sum(so - soInterpInterp) / float(ntot) print 'avgdiff = ', avgdiff if PLOT: pylab.figure(2) pylab.subplot(2, 2, 1) pylab.pcolor(so, vmin=20.0, vmax=40.0) pylab.colorbar() pylab.title('ESMF conserve regrid: so') pylab.subplot(2, 2, 2) pylab.pcolor(soInterp, vmin=20.0, vmax=40.0) pylab.colorbar() pylab.title('ESMF conserve regrid: soInterp') pylab.subplot(2, 2, 3) pylab.pcolor(soInterpInterp, vmin=20.0, vmax=40.0) pylab.colorbar() pylab.title('ESMF conserve regrid: soInterpInterp') pylab.subplot(2, 2, 4) pylab.pcolor(so - soInterpInterp, vmin=-0.5, vmax=0.5) pylab.colorbar() pylab.title('ESMF conserve regrid: error')
def setUp(self): self.clt = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc')('clt')[0, ...] self.tas = cdms2.open(cdat_info.get_sampledata_path() + \ '/tas_ecm_1979.nc')('tas')[0, ...] if PLOT: lllat = self.clt.getLatitude()[:].min() urlat = self.clt.getLatitude()[:].max() lllon = self.clt.getLongitude()[:].min() urlon = self.clt.getLongitude()[:].max() self.cmap = bm(llcrnrlat=lllat, llcrnrlon=lllon, urcrnrlat=urlat, urcrnrlon=urlon, resolution='i', projection='cyl') lllat = self.tas.getLatitude()[:].min() urlat = self.tas.getLatitude()[:].max() lllon = self.tas.getLongitude()[:].min() urlon = self.tas.getLongitude()[:].max() self.tmap = bm(llcrnrlat=lllat, llcrnrlon=lllon, urcrnrlat=urlat, urcrnrlon=urlon, resolution='i', projection='cyl')
def test4_cdmsRegrid(self): srcF = cdms2.open(cdat_info.get_sampledata_path() + \ '/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc') so = srcF('so')[0, 0, ...] clt = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc')('clt') # create regrid object r = cdms2.CdmsRegrid(so.getGrid(), clt.getGrid(), so.dtype, regridMethod='linear', regridTool='libcf', srcGridMask=(so == so.missing_value), srcGridAreas=None, dstGridMask=None, dstGridAreas=None, mkCyclic=False, handleCut=False) dstData = r(so) # checks dstDataMask = (dstData == so.missing_value) dstDataFltd = dstData * (1 - dstDataMask) if so.missing_value > 0: dstDataMin = dstData.min() dstDataMax = dstDataFltd.max() else: dstDataMin = dstDataFltd.min() dstDataMax = dstData.max() print 'min/max value of dstData: %f %f' % (dstDataMin, dstDataMax) self.assertGreater(dstDataMin, so.min()) self.assertLess(dstDataMax, so.max())
def Xtest2_libCFRegrid(self): srcF = cdms2.open(cdat_info.get_sampledata_path() + \ '/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc') so = srcF('so')[0, 0, ...] clt = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc')('clt') srcGrd = [so.getGrid().getLatitude(), so.getGrid().getLongitude()] dstGrd = [clt.getGrid().getLatitude(), clt.getGrid().getLongitude()] # create regrid object r = regrid2.mvLibCFRegrid.LibCFRegrid( srcGrd, dstGrd, srcGridMask=(so == so.missing_value), srcBounds=None, mkCyclic=False, handleCut=False) # compute weights r.computeWeights(nitermax=20, tolpos=0.01) # create dst data container dstShp = r.getDstGrid()[0].shape dstData = numpy.ones(dstShp, so.dtype) * so.missing_value # interpolate r.apply(so, dstData) # checks dstDataMask = (dstData == so.missing_value) dstDataFltd = dstData * (1 - dstDataMask) if so.missing_value > 0: dstDataMin = dstData.min() dstDataMax = dstDataFltd.max() else: dstDataMin = dstDataFltd.min() dstDataMax = dstData.max() print 'min/max value of dstData: %f %f' % (dstDataMin, dstDataMax) self.assertGreater(dstDataMin, so.min()) self.assertLess(dstDataMax, so.max())
def teestTimes(self): fsc = cdms2.open(os.path.join(cdat_info.get_sampledata_path(),'tas_mo_clim.nc')) print("Step #0 : Reading data") s=self.f('tas',longitude=(0,360,'co')) acok=fsc('climseas',longitude=(0,360,'co')) print('Test #1 : Test result') ac=cdutil.times.JAN.climatology(s) self.assertTrue(MV2.allclose(ac[0],acok[0])) fsc.close() a=cdtime.comptime(1980) b=cdtime.comptime(1980,5) f = cdms2.open(os.path.join(cdat_info.get_sampledata_path(),'tas_6h.nc')) s=f('tas',time=(a,b,'co'),squeeze=1) print("Test #2 : 6hourly AND get") jans=cdutil.times.JAN(s) print("Test #3 : climatology 6h") JFMA=cdutil.times.Seasons('JFMA') jfma=JFMA.climatology(s) #Test reorder print("Test #4 : time not first axis") jfma=JFMA.climatology(s(order='x...')) print("Test 4b: Result ok ?") self.assertEqual(jfma.getOrder()[0], 'x')
def XXtest5_regrid(self): srcF = cdms2.open(cdat_info.get_sampledata_path() + \ '/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc') so = srcF('so')[0, 0, ...] clt = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc')('clt') dstData = so.regrid(clt.getGrid(), regridTool='esmf', regridMethod='conserve') if self.pe == 0: dstDataMask = (dstData == so.missing_value) dstDataFltd = dstData * (1 - dstDataMask) zeroValCnt = (dstData == 0).sum() if so.missing_value > 0: dstDataMin = dstData.min() dstDataMax = dstDataFltd.max() else: dstDataMin = dstDataFltd.min() dstDataMax = dstData.max() zeroValCnt = (dstData == 0).sum() print 'Number of zero valued cells', zeroValCnt print 'min/max value of dstData: %f %f' % (dstDataMin, dstDataMax) self.assertLess(dstDataMax, so.max()) if PLOT: pylab.figure(1) pylab.pcolor(so, vmin=20, vmax=40) pylab.colorbar() pylab.title('so') pylab.figure(2) pylab.pcolor(dstData, vmin=20, vmax=40) pylab.colorbar() pylab.title('dstData')
def setUp(self): """ Set up the grids to pass to mvGenericRegrid """ self.doPlots = False self.clt = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc')('clt')[0, ...] # Convert to curvilinear cds, cds_forBounds = [], [] cds.append(self.clt.getLatitude()) cds.append(self.clt.getLongitude()) cds_forBounds.append(self.clt.getLatitude()) cds_forBounds.append(self.clt.getLongitude()) self.cltGrid, nDims = regrid2.gsRegrid.makeCurvilinear(cds) self.cltInterp = numpy.array(self.clt) * 0.0 + self.clt.missing_value self.cltInterpInterp = numpy.array(self.clt) * 0.0 + self.clt.missing_value # Salinity check f = cdms2.open(cdat_info.get_sampledata_path() + \ '/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc') self.so = f('so') soGrid = [] soGrid.append(self.so.getLatitude()) soGrid.append(self.so.getLongitude()) self.soGrid = soGrid self.soInterp = numpy.array(self.clt) * 0.0 + self.so.missing_value self.tol = 1e2 self.rank = 0 self.size = 1 if HAS_MPI: self.comm = MPI.COMM_WORLD self.rank = self.comm.Get_rank() self.size = self.comm.Get_size()
def setUp(self): """ Set up the grids to pass to mvGenericRegrid """ self.doPlots = False self.clt = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc')('clt')[0, ...] # Convert to curvilinear cds, cds_forBounds = [], [] cds.append(self.clt.getLatitude()) cds.append(self.clt.getLongitude()) cds_forBounds.append(self.clt.getLatitude()) cds_forBounds.append(self.clt.getLongitude()) self.cltGrid, nDims = regrid2.gsRegrid.makeCurvilinear(cds) self.cltInterp = numpy.array(self.clt) * 0.0 + self.clt.missing_value self.cltInterpInterp = numpy.array( self.clt) * 0.0 + self.clt.missing_value # Salinity check f = cdms2.open(cdat_info.get_sampledata_path() + \ '/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc') self.so = f('so') soGrid = [] soGrid.append(self.so.getLatitude()) soGrid.append(self.so.getLongitude()) self.soGrid = soGrid self.soInterp = numpy.array(self.clt) * 0.0 + self.so.missing_value self.tol = 1e2 self.rank = 0 self.size = 1 if HAS_MPI: self.comm = MPI.COMM_WORLD self.rank = self.comm.Get_rank() self.size = self.comm.Get_size()
def Xtest1_gsRegrid(self): srcF = cdms2.open(cdat_info.get_sampledata_path() + \ '/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc') so = srcF('so')[0, 0, ...] clt = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc')('clt') srcGrd = [so.getGrid().getLatitude(), so.getGrid().getLongitude()] dstGrd = [clt.getGrid().getLatitude(), clt.getGrid().getLongitude()] # create regrid object r = regrid2.gsRegrid.Regrid(srcGrd, dstGrd, src_bounds=None, mkCyclic=False, handleCut=False) # set mask r.setMask( (so == so.missing_value) ) # compute interpolation weights r.computeWeights(nitermax=20, tolpos=0.01) # make sure most of the weights have ben found print 'ratio of valid over number of nodes: %f' % (r.getNumValid()/float(r.getNumDstPoints())) self.assertGreater(r.getNumValid(), 0) # create dst data container dstShp = r.getDstGrid()[0].shape print 'dst data shape: ', dstShp dstData = numpy.ones(dstShp, so.dtype) * so.missing_value # interpolate r.apply(so, dstData) # checks dstDataMask = (dstData == so.missing_value) dstDataFltd = dstData * (1 - dstDataMask) if so.missing_value > 0: dstDataMin = dstData.min() dstDataMax = dstDataFltd.max() else: dstDataMin = dstDataFltd.min() dstDataMax = dstData.max() print 'min/max value of dstData: %f %f' % (dstDataMin, dstDataMax) self.assertGreater(dstDataMin, so.min()) self.assertLess(dstDataMax, so.max())
def test4_cdmsRegrid(self): srcF = cdms2.open(cdat_info.get_sampledata_path() + \ '/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc') so = srcF('so')[0, 0, ...] srcGridMask = numpy.array((so == so.missing_value), numpy.int32) clt = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc')('clt') # create regrid object r = cdms2.CdmsRegrid(so.getGrid(), clt.getGrid(), dtype=so.dtype, regridMethod='conserve', regridTool='esmf', srcGridMask=srcGridMask, srcGridAreas=None, dstGridMask=None, dstGridAreas=None) dstData = r(so) # checks if self.pe == 0: dstDataMask = (dstData == so.missing_value) print 'number of masked values = ', dstDataMask.sum() self.assertTrue(str(type(dstData)), str(type(clt))) dstData.mask = (dstData == so.missing_value) dstDataMin = dstData.min() dstDataMax = dstData.max() zeroValCnt = (dstData == 0).sum() print 'Number of zero valued cells', zeroValCnt print 'min/max value of dstData: %f %f' % (dstDataMin, dstDataMax) self.assertLess(dstDataMax, so.max())
def Xtest3_genericRegrid(self): srcF = cdms2.open(cdat_info.get_sampledata_path() + \ '/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc') so = srcF('so')[0, 0, ...] clt = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc')('clt') srcGrd = [so.getGrid().getLatitude(), so.getGrid().getLongitude()] dstGrd = [clt.getGrid().getLatitude(), clt.getGrid().getLongitude()] # create regrid object r = regrid2.mvGenericRegrid.GenericRegrid(srcGrd, dstGrd, so.dtype, regridMethod='linear', regridTool='libcf', srcGridMask=(so == so.missing_value), srcBounds=None, srcGridAreas=None, dstGridMask=None, dstBounds=None, dstGridAreas=None, mkCyclic=False, handleCut=False) # compute weights r.computeWeights(nitermax=20, tolpos=0.01) # create dst data container dstShp = r.getDstGrid()[0].shape dstData = numpy.ones(dstShp, so.dtype) * so.missing_value # interpolate r.apply(so, dstData) # checks dstDataMask = (dstData == so.missing_value) dstDataFltd = dstData * (1 - dstDataMask) if so.missing_value > 0: dstDataMin = dstData.min() dstDataMax = dstDataFltd.max() else: dstDataMin = dstDataFltd.min() dstDataMax = dstData.max() print 'min/max value of dstData: %f %f' % (dstDataMin, dstDataMax) self.assertGreater(dstDataMin, so.min()) self.assertLess(dstDataMax, so.max())
def test2_varRegrid(self): print print 'test2_varRegrid' srcF = cdms2.open(cdat_info.get_sampledata_path() + \ '/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc') so = srcF('so')[0, 0, ...] clt = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc')('clt') diag = {'srcAreas': None, 'dstAreas': None, 'srcAreaFractions': None, 'dstAreaFractions': None} soInterp = so.regrid(clt.getGrid(), regridTool = 'esmf', regridMethod='conserve', diag = diag) if self.pe == 0: totSrcArea = diag['srcAreas'].sum() totDstArea = diag['dstAreas'].sum() totSrcFrac = diag['srcAreaFractions'].sum() self.assertEqual(numpy.isnan(totSrcFrac).sum(), 0) self.assertLess(abs(totSrcArea - 4*pi)/(4*pi), 0.02) self.assertLess(abs(totDstArea - 4*pi)/(4*pi), 0.01) soMass = (so*diag['srcAreas']).sum() inMass = (soInterp*diag['dstAreas']).sum() print soMass, inMass diff = abs(soMass - inMass)/soMass self.assertLess(diff, 7.e-7) if PLOT: pylab.subplot(1, 2, 1) pylab.pcolor(so, vmin = 20, vmax = 40) pylab.colorbar() pylab.title('so') pylab.subplot(1, 2, 2) pylab.pcolor(soInterp, vmin = 20, vmax = 40) pylab.colorbar() pylab.title('soInterp')
def setUp(self): filename = cdat_info.get_sampledata_path() + \ "/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc" h = cdms2.open(filename) self.hso = h('so')[0, 0, ...] self.hGrid = [self.hso.getLatitude(), self.hso.getLongitude()] h2D = self.hso.getGrid() self.hGrid2D = [h2D.getLatitude(), h2D.getLongitude()] filename = cdat_info.get_sampledata_path() + "/clt.nc" f = cdms2.open(filename) self.fclt = f('clt') self.fGrid = [self.fclt.getLatitude(), self.fclt.getLongitude()] g2D = self.fclt.getGrid().toCurveGrid() self.fGrid2D = [g2D.getLatitude()[:], g2D.getLongitude()[:]] filename = cdat_info.get_sampledata_path() + "/era40_tas_sample.nc" g = cdms2.open(filename) self.gtas = g('tas') self.gGrid = [self.gtas.getLatitude(), self.gtas.getLongitude()] g2D = self.gtas.getGrid().toCurveGrid() self.gGrid2D = [g2D.getLatitude()[:], g2D.getLongitude()[:]] self.eps = 1e-5
def test4_cdmsRegrid(self): srcF = cdms2.open(cdat_info.get_sampledata_path() + \ '/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc') so = srcF('so')[0, 0, ...] srcGridMask = numpy.array((so == so.missing_value) , numpy.int32) clt = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc')('clt') # create regrid object r = cdms2.CdmsRegrid(so.getGrid(), clt.getGrid(), dtype=so.dtype, regridMethod='conserve', regridTool='esmf', srcGridMask=srcGridMask, srcGridAreas=None, dstGridMask=None, dstGridAreas=None) dstData = r(so) # checks if self.pe == 0: dstDataMask = (dstData == so.missing_value) print 'number of masked values = ', dstDataMask.sum() self.assertTrue(str(type(dstData)), str(type(clt))) dstData.mask = (dstData == so.missing_value) dstDataMin = dstData.min() dstDataMax = dstData.max() zeroValCnt = (dstData == 0).sum() print 'Number of zero valued cells', zeroValCnt print 'min/max value of dstData: %f %f' % (dstDataMin, dstDataMax) self.assertLess(dstDataMax, so.max())
def testDailyBounds(self): ## Test 6h data f = cdms2.open( os.path.join(cdat_info.get_sampledata_path(), 'psl_6h.nc')) s = f('psl') t = s.getTime() print('6 hourly data, before:') self.assertIsNone(t.getBounds()) cdutil.times.setTimeBoundsDaily(t, 4) print('6 hourly data, after:') self.assertTrue( numpy.allclose( t.getBounds()[:8], numpy.array([[0., 6.], [6., 12.], [12., 18.], [18., 24.], [24., 30.], [30., 36.], [36., 42.], [42., 48.]]))) ## test daily f = cdms2.open( os.path.join(cdat_info.get_sampledata_path(), 'ts_da.nc')) s = f('ts') t = s.getTime() print('daily data, before:') self.assertIsNone(t.getBounds()) cdutil.times.setTimeBoundsDaily(s, 1) print('daily data, after:') self.assertTrue( numpy.allclose( t.getBounds()[:8], numpy.array([[7665., 7666.], [7666., 7667.], [7667., 7668.], [7668., 7669.], [7669., 7670.], [7670., 7671.], [7671., 7672.], [7672., 7673.]])))
def test_2d_esmf(self): # print 'running test_2d_esmf...' f = cdms2.open( cdat_info.get_sampledata_path() + '/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc') so = f('so')[0, 0, :, :] clt = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc')('clt')[0, :, :] tic = time.time() soInterp = so.regrid(clt.getGrid(), regridTool='ESMF', regridMethod='CONSERVE') # , periodicity=1) soInterpInterp = soInterp.regrid(so.getGrid(), regridTool='ESMF', regridMethod='CONSERVE') toc = time.time() # print 'time to interpolate (ESMF linear) forward/backward: ', toc - # tic if has_mpi: mype = MPI.COMM_WORLD.Get_rank() else: mype = 0 if mype == 0: ntot = reduce(operator.mul, so.shape) avgdiff = numpy.sum(so - soInterpInterp) / float(ntot) # print 'avgdiff = ', avgdiff self.assertLess(abs(avgdiff), 5.2e18) if PLOT: pylab.figure(2) pylab.pcolor(abs(so - soInterpInterp), vmin=0.0, vmax=1.0) pylab.colorbar() pylab.title('ESMF linear')
def setUp(self): self.so = cdms2.open(cdat_info.get_sampledata_path() + \ '/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc')('so') self.tasGood = cdms2.open(cdat_info.get_sampledata_path() + \ '/tas_Amon_HadGEM2-A_amip_r1i2p1_197809-200811_2timesteps.nc')('tas') self.tasBad = cdms2.open(cdat_info.get_sampledata_path() + \ '/tas_Amon_ACCESS1-0_historical_r1i1p1_185001-189912_2timesteps.nc')('tas')
def setUp(self): fso = cdms2.open(cdat_info.get_sampledata_path() + \ '/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc') self.soLevel = fso('so')[0,0:5,...] self.soTime = fso('so')[:,0,...] self.so = fso('so')[:,0:5,...] fclt = cdms2.open(cdat_info.get_sampledata_path() + "/clt.nc") self.clt = fclt('clt')
def setUp(self): fso = cdms2.open(cdat_info.get_sampledata_path() + '/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc') self.soLevel = fso('so')[0, 0:5, ...] self.soTime = fso('so')[:, 0, ...] self.so = fso('so')[:, 0:5, ...] fclt = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc') self.clt = fclt('clt')
def setUp(self): access = cdms2.open(cdat_info.get_sampledata_path() + \ '/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc') self.access = access('so')[0, 0, ...] self.tasGood = cdms2.open(cdat_info.get_sampledata_path() + \ '/tas_Amon_HadGEM2-A_amip_r1i2p1_197809-200811_2timesteps.nc')('tas') giss = cdms2.open(cdat_info.get_sampledata_path() + \ '/so_Omon_GISS-E2-R_historicalNat_r5i1p1_185001-187512_2timesteps.nc') self.giss = giss('so')[0, 0, ...]
def test_test2(self): """ 2D ESMP """ u = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc')('u')[0, 0,...] clt = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc')('clt')[0, ...] ctlOnUGrid = clt.regrid( u.getGrid(), regridTool = "ESMP" ) #print 'ctlOnUGrid.getGrid() = ', type(ctlOnUGrid.getGrid()) self.assertRegexpMatches(str(type(ctlOnUGrid.getGrid())), "cdms2.grid.TransientRectGrid")
def setUp(self): access = cdms2.open(cdat_info.get_sampledata_path() + \ '/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc') self.access = access('so')[0, 0, ...] self.tasGood = cdms2.open(cdat_info.get_sampledata_path() + \ '/tas_Amon_HadGEM2-A_amip_r1i2p1_197809-200811_2timesteps.nc')('tas') giss = cdms2.open(cdat_info.get_sampledata_path() + \ '/so_Omon_GISS-E2-R_historicalNat_r5i1p1_185001-187512_2timesteps.nc') self.giss = giss('so')[0,0,...]
def setUp(self): """ Set up the grids to pass to mvGenericRegrid """ f = cdms2.open(cdat_info.get_sampledata_path() + \ '/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc') self.so = f('so') g = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc') self.clt = g('clt')
def test_test2(self): """ 2D ESMP """ u = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc')('u')[0, 0, ...] clt = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc')('clt')[0, ...] ctlOnUGrid = clt.regrid(u.getGrid(), regridTool="ESMP") #print 'ctlOnUGrid.getGrid() = ', type(ctlOnUGrid.getGrid()) self.assertRegexpMatches(str(type(ctlOnUGrid.getGrid())), "cdms2.grid.TransientRectGrid")
def testInFileUnlimitedDimAlter(self): fnm = os.path.join(cdat_info.get_sampledata_path(), "clt.nc") f = cdms2.open(fnm) s = f("clt") f.close() cdms2.setNetcdfDeflateFlag(0) cdms2.setNetcdfDeflateLevelFlag(0) cdms2.setNetcdfShuffleFlag(0) cdms2.setNetcdf4Flag(1) cdms2.setNetcdfClassicFlag(1) f = cdms2.open("nc4.nc", "w") f.write(s) f.close() timesValues = s.getTime()[:] f = cdms2.open("nc4.nc", "r+") t = f["time"] t[:] = t[:] * 100. f.close() f = cdms2.open("nc4.nc") s = f("clt") t = s.getTime() self.assertEqual(len(t), len(timesValues)) self.assertTrue(numpy.allclose(t[:], timesValues * 100.)) os.remove("nc4.nc")
def Xtest_test0(self): """ Test size, rank etc. """ da = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc', 'r')('clt') rk = da.getMPIRank() sz = da.getMPISize() # make the data rank dependent da[:] = rk # create the halo regions da.exposeHalo(ghostWidth=2) # ellipsis for one side slce = da.getHaloEllipsis(side=(1, 0, 0)) # access remote data chunk = da.fetchHaloData((rk - 1) % sz, side=(1, 0, 0)) # check diff = float('inf') if rk != 0: diff = abs(numpy.sum(da[slce] - 1 - chunk)) else: diff = abs(numpy.sum(da[slce] + sz - 1 - chunk)) success = False if diff < 1.e-10: success = True self.assertEqual(success, True) # clean up da.freeHalo()
def teestDiurnaliComputeStdDailyMean(self): data_pth = cdat_info.get_sampledata_path() cmd = '{}computeStdDailyMeansWrapped.py --num_workers=1 --mp {} --rd test_data/results/nc -t "sample_data_pr_%(model).nc" -m7'.format(self.runner, data_pth) p = subprocess.Popen(shlex.split(cmd)) p.communicate() self.compare_nc("results/nc/pr_CMCC_Jul_1999-2005_std_of_dailymeans.nc")
def Xtest2(self): """ Test from Kate Marvel As the following code snippet demonstrates, regridding a cdms2.tvariable.TransientVariable instance using regridTool='regrid2' results in a new array that is masked everywhere. regridTool='esmf' and regridTool='libcf' both work as expected. This passes. """ import cdms2 as cdms import numpy as np filename = cdat_info.get_sampledata_path() + '/clt.nc' a=cdms.open(filename) data=a('clt')[0,...] print data.mask #verify this data is not masked GRID= data.getGrid() # input = output grid, passes test_data=data.regrid(GRID,regridTool='regrid2') # check that the mask does not extend everywhere... self.assertNotEqual(test_data.mask.sum(), test_data.size) if PLOT: pylab.subplot(2, 1, 1) pylab.pcolor(data[...]) pylab.title('data') pylab.subplot(2, 1, 2) pylab.pcolor(test_data[...]) pylab.title('test_data (interpolated data)') pylab.show()
def Xtest2(self): """ Test from Kate Marvel As the following code snippet demonstrates, regridding a cdms2.tvariable.TransientVariable instance using regridTool='regrid2' results in a new array that is masked everywhere. regridTool='esmf' and regridTool='libcf' both work as expected. This passes. """ import cdms2 as cdms import numpy as np filename = cdat_info.get_sampledata_path() + '/clt.nc' a = cdms.open(filename) data = a('clt')[0, ...] print data.mask #verify this data is not masked GRID = data.getGrid() # input = output grid, passes test_data = data.regrid(GRID, regridTool='regrid2') # check that the mask does not extend everywhere... self.assertNotEqual(test_data.mask.sum(), test_data.size) if PLOT: pylab.subplot(2, 1, 1) pylab.pcolor(data[...]) pylab.title('data') pylab.subplot(2, 1, 2) pylab.pcolor(test_data[...]) pylab.title('test_data (interpolated data)') pylab.show()
def testRegridZonal(self): f = self.getFile( os.path.join(cdat_info.get_sampledata_path(), "clt.nc")) s = f("clt", slice(0, 1)) g = cdms2.createGaussianGrid(64) gl = cdms2.createZonalGrid(g) regridded = s.regrid(gl)
def Xtest3(self): """ Test from Kate Marvel As the following code snippet demonstrates, regridding a cdms2.tvariable.TransientVariable instance using regridTool='regrid2' results in a new array that is masked everywhere. regridTool='esmf' and regridTool='libcf' both work as expected. This is similar to the original test but we construct our own uniform grid. This should passes. """ import cdms2 as cdms import numpy as np filename = cdat_info.get_sampledata_path() + '/clt.nc' a=cdms.open(filename) data=a('clt')[0,...] print data.mask #verify this data is not masked GRID = cdms.grid.createUniformGrid(-90.0, 23, 8.0, -180.0, 36, 10.0, order="yx", mask=None) test_data=data.regrid(GRID,regridTool='regrid2') # check that the mask does not extend everywhere... self.assertNotEqual(test_data.mask.sum(), test_data.size) if PLOT: pylab.subplot(2, 1, 1) pylab.pcolor(data[...]) pylab.title('data') pylab.subplot(2, 1, 2) pylab.pcolor(test_data[...]) pylab.title('test_data (interpolated data)') pylab.show()
def Xtest_test0(self): """ Test size, rank etc. """ da = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc', 'r')('clt') rk = da.getMPIRank() sz = da.getMPISize() # make the data rank dependent da[:] = rk # create the halo regions da.exposeHalo(ghostWidth = 2) # ellipsis for one side slce = da.getHaloEllipsis(side=(1, 0, 0)) # access remote data chunk = da.fetchHaloData((rk-1)%sz, side=(1, 0, 0)) # check diff = float('inf') if rk != 0: diff = abs(numpy.sum(da[slce] - 1 - chunk)) else: diff = abs(numpy.sum(da[slce] + sz - 1 - chunk)) success = False if diff < 1.e-10: success = True self.assertEqual(success, True) # clean up da.freeHalo()
def test1_regrid(self): clt = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc')('clt')[0,...] ta = cdms2.open(cdat_info.get_sampledata_path() + '/ta_ncep_87-6-88-4.nc')('ta')[0, 0,...] diag = {} cltInterp = clt.regrid( ta.getGrid(), regridTool = 'libcf', mkCyclic = True, verbose = True, diag = diag ) print cltInterp.sum() n = reduce(lambda x,y: x*y, cltInterp.shape) self.assertLess(abs(cltInterp.sum() - 696921.0)/n, 0.3) if PLOT: pylab.pcolor(ta.getLongitude()[:], ta.getLatitude()[:], cltInterp) pylab.colorbar() pylab.title('cltInterp') self.assertEqual(True, True)
def setUp(self): self.results = cdms2.open( os.path.join( cdat_info.get_sampledata_path(), "wk_results.nc")) here = os.path.dirname(__file__) self.W = WK.WK()
def testVariableMatcher2(self): # First let's creates the mask (it is the same for NCEP and ECMWF since they are on the same grid). refmsk = os.path.join(cdat_info.get_sampledata_path(), 'sftlf_dnm.nc') M = cdutil.WeightsMaker(refmsk, var='sftlf_dnm', values=[1.]) # Reference ref = os.path.join(cdat_info.get_sampledata_path(), 'tas_dnm-95a.xml') Ref = cdutil.VariableConditioner(ref, weightsMaker=M) Ref.variable = 'tas' Ref.id = 'D1' Ref.cdmsKeywords = {'time': ('1979', '1980', 'co')} # Test tstmsk = os.path.join(cdat_info.get_sampledata_path(), 'sftlf_ccsr.nc') M = cdutil.WeightsMaker(tstmsk, var='sftlf_ccsr', values=[1.]) tst = os.path.join(cdat_info.get_sampledata_path(), 'tas_ccsr-95a.xml') Tst = cdutil.VariableConditioner(tst, weightsMaker=M) Tst.variable = 'tas' Tst.id = 'D2' # External Variable (for the mask) ext = ref EV = cdutil.VariableConditioner(ext) EV.variable = 'tas' EV.id = 'OUT' # Final Grid # We need a mask for the final grid fgmask = ext M2 = cdutil.WeightsMaker(source=refmsk, var='sftlf_dnm', values=[["input", 100.]]) FG = cdutil.WeightedGridMaker(weightsMaker=M2) FG.longitude.n = 36 FG.longitude.first = 0. FG.longitude.delta = 10. FG.latitude.n = 18 FG.latitude.first = -85. FG.latitude.delta = 10. # Now creates the compare object print("REF:", Ref()) c = cdutil.VariablesMatcher(Ref, Tst, weightedGridMaker=FG, externalVariableConditioner=EV) # And gets it (ref, reffrc), (test, tfrc) = c() print('Shapes:', test.shape, ref.shape) self.assertEqual(test.shape, ref.shape) self.assertEqual(test.shape, (12, 1, 18, 36))
def testDaskArrayFV(c, s, a, b): f = cdms2.open(cdat_info.get_sampledata_path() + "/clt.nc") dataFV = f["clt"] myDaskArray = da.from_array(dataFV, chunks=(1, 46, 72)) x = c.compute(myDaskArray) myResult = yield x assert MV2.allclose(myResult, dataFV) == True f.close()
def test_3(self): f = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc') clt = f('clt')[:, :, :] u = f('u')[:, :, :] cltInterp = clt.regrid(u.getGrid(), regridTool='regrid2') avgClt = clt.sum()/float(reduce(operator.mul, clt.shape)) avgCltInterp = cltInterp.sum()/float(reduce(operator.mul, cltInterp.shape)) self.assertLess(abs(avgClt - avgCltInterp), 0.3)
def testRegrid2Unicode(self): f = cdms2.open(cdat_info.get_sampledata_path() + "/clt.nc") s = f("clt", slice(0, 1), squeeze=True) g = f["u"].getGrid() # works s2 = s.regrid(g, regridTool="esmf", regridMethod="linear") # fails s2 = s.regrid(g, regridTool=u"esmf", regridMethod=u"linear")
def test5_regrid(self): srcF = cdms2.open(cdat_info.get_sampledata_path() + \ '/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc') so = srcF('so')[0, 0, ...] clt = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc')('clt') dstData = so.regrid(clt.getGrid()) dstDataMask = (dstData == so.missing_value) dstDataFltd = dstData * (1 - dstDataMask) if so.missing_value > 0: dstDataMin = dstData.min() dstDataMax = dstDataFltd.max() else: dstDataMin = dstDataFltd.min() dstDataMax = dstData.max() print 'min/max value of dstData: %f %f' % (dstDataMin, dstDataMax) self.assertGreater(dstDataMin, so.min()) self.assertLess(dstDataMax, so.max())
def testDaskArrayTV(c, s, a, b): f = cdms2.open(cdat_info.get_sampledata_path() + "/clt.nc") dataTV = f("clt") myDaskArray = da.from_array(dataTV, chunks=(1, 46, 72)) y = c.compute(myDaskArray) myTVResult = yield y assert MV2.allclose(myTVResult, dataTV) == True f.close()
def XXtest3_genericRegrid(self): srcF = cdms2.open(cdat_info.get_sampledata_path() + \ '/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc') so = srcF('so')[0, 0, ...] srcGridMask = numpy.array((so == so.missing_value), numpy.int32) clt = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc')('clt') srcGrd = [so.getGrid().getLatitude(), so.getGrid().getLongitude()] srcBounds = cdms2.mvCdmsRegrid.getBoundList(srcGrd) dG = clt.getGrid().toCurveGrid() dstGrd = [dG.getLatitude(), dG.getLongitude()] dstBounds = cdms2.mvCdmsRegrid.getBoundList(dstGrd) # create regrid object r = regrid2.mvGenericRegrid.GenericRegrid( [numpy.array(coord) for coord in srcGrd], [numpy.array(coord) for coord in dstGrd], dtype=so.dtype, regridMethod='conserve', regridTool='esmf', srcGridMask=srcGridMask, srcBounds=srcBounds, srcGridAreas=None, dstGridMask=None, dstBounds=dstBounds, dstGridAreas=None) # compute weights r.computeWeights() # create dst data container dstShp = dG.getLatitude().shape dstData = numpy.ones(dstShp, so.dtype) * so.missing_value # interpolate r.apply(numpy.array(so), dstData, rootPe=0) if self.pe == 0: # checks dstDataMask = (dstData == so.missing_value) print 'number of masked values = ', dstDataMask.sum() dstDataFltd = dstData * (1 - dstDataMask) if so.missing_value > 0: dstDataMin = dstData.min() dstDataMax = dstDataFltd.max() else: dstDataMin = dstDataFltd.min() dstDataMax = dstData.max() print 'min/max value of dstData: %f %f' % (dstDataMin, dstDataMax) self.assertLess(dstDataMax, so.max())
def testBoxfillPickFrame(self): f = cdms2.open(os.path.join(cdat_info.get_sampledata_path(), "ta_ncep_87-6-88-4.nc")) ta = f("ta") u = self.clt("u") v = self.clt("v") f = cdms2.open(os.path.join(cdat_info.get_sampledata_path(), "sampleCurveGrid4.nc")) mesh = f("sample") grd = mesh.getGrid() sh = list(mesh.shape) print("NESFG SHAPE:",sh) sh.insert(0,12) axes = mesh.getAxisList() mesh = cdms2.MV2.resize(mesh, sh) mesh.setGrid(grd) ax = mesh.getAxis(0) ax.units = "months since 2019" ax.id = "time" ax.designateTime() for i, ax in enumerate(axes): mesh.setAxis(1+i, ax) mesh[3] = mesh[3]*3. gm_types = ["vector", "streamline", "meshfill", "1d", "boxfill", "isofill"] for gm_type in gm_types: # skip first time and second level on second time gm = vcs.getgraphicsmethod(gm_type) if gm_type in ["vector", "streamline"]: data1 = u data2 = v frame = 1 elif gm_type == "meshfill": data1 = mesh data2 = None frame = 3 else: data1 = ta data2 = None frame = 43 if gm_type == "1d": frame = 193 elif gm_type == "isofill": frame = -1 self.x.clear() self.x.plot(data1, data2, gm, frame=frame, bg=self.bg) self.checkImage("test_vcs_pick_frame_{}.png".format(gm_type))
def testMask2(self): data = cdms2.open( os.path.join(cdat_info.get_sampledata_path(), "ta.nc"))("ta") tmp = cdms2.open( os.path.join(cdat_info.get_sampledata_path(), "sftlf.nc")) sft = tmp("sftlf") tmp.close() data2 = cdms2.MV2.masked_where(cdms2.MV2.less(sft, 50.), data) tGrid = cdms2.createUniformGrid(-88.875, 72, 2.5, 0, 144, 2.5) for mthd in ["conservative", "linear"]: print("USING REGRID METHOD:", mthd) data3 = data2.regrid(tGrid, regridTool="esmf", regridMethod=mthd, mask=data2.mask)
def teestCompositeDiurnalStatisticsWrapped(self): data_pth = cdat_info.get_sampledata_path() cmd = '{}compositeDiurnalStatisticsWrapped.py --num_workers=1 --mp {} --rd test_data/results/nc -t "sample_data_pr_%(model).nc" -m7'.format(self.runner, data_pth) print("CCOOOMOMMOMONFDFDDFFDSASFGFDSAFGFFGSDFFGFSG", cmd) p = subprocess.Popen(shlex.split(cmd)) p.communicate() self.compare_nc("results/nc/pr_CMCC_Jul_1999-2005_diurnal_avg.nc") self.compare_nc("results/nc/pr_CMCC_Jul_1999-2005_diurnal_std.nc") self.compare_nc("results/nc/pr_CMCC_LocalSolarTimes.nc")
def XXtest3_genericRegrid(self): srcF = cdms2.open(cdat_info.get_sampledata_path() + \ '/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc') so = srcF('so')[0, 0, ...] srcGridMask = numpy.array((so == so.missing_value) , numpy.int32) clt = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc')('clt') srcGrd = [so.getGrid().getLatitude(), so.getGrid().getLongitude()] srcBounds = cdms2.mvCdmsRegrid.getBoundList(srcGrd) dG = clt.getGrid().toCurveGrid() dstGrd = [dG.getLatitude(), dG.getLongitude()] dstBounds = cdms2.mvCdmsRegrid.getBoundList(dstGrd) # create regrid object r = regrid2.mvGenericRegrid.GenericRegrid([numpy.array(coord) for coord in srcGrd], [numpy.array(coord) for coord in dstGrd], dtype=so.dtype, regridMethod='conserve', regridTool='esmf', srcGridMask=srcGridMask, srcBounds=srcBounds, srcGridAreas=None, dstGridMask=None, dstBounds=dstBounds, dstGridAreas=None) # compute weights r.computeWeights() # create dst data container dstShp = dG.getLatitude().shape dstData = numpy.ones(dstShp, so.dtype) * so.missing_value # interpolate r.apply(numpy.array(so), dstData, rootPe = 0) if self.pe == 0: # checks dstDataMask = (dstData == so.missing_value) print 'number of masked values = ', dstDataMask.sum() dstDataFltd = dstData * (1 - dstDataMask) if so.missing_value > 0: dstDataMin = dstData.min() dstDataMax = dstDataFltd.max() else: dstDataMin = dstDataFltd.min() dstDataMax = dstData.max() print 'min/max value of dstData: %f %f' % (dstDataMin, dstDataMax) self.assertLess(dstDataMax, so.max())
def test1(self): """ Test cdutil.generateLandSeaMask, using a smaller dataset """ f = cdms2.open(cdat_info.get_sampledata_path() + "/clt.nc") s = f("clt") print s.shape print dir(cdutil.create_landsea_mask) # this will call the regrid method m = cdutil.generateLandSeaMask(s)
def Xtest4(self): """ 2D + level + time """ u = cdms2.open(cdat_info.get_sampledata_path() + "/clt.nc")("u")[:, :, ...] uInterp = u.regrid(u.getGrid(), regridTool="esmf", regridMethod="linear", coordSys="cart", periodicity=1) n = reduce(lambda x, y: x * y, uInterp.shape) mask = u == u.missing_value diff = abs(numpy.sum(u * (1 - mask) - uInterp) / float(n)) self.assertLess(diff, 1.0e-3)
def setUp(self): dir = cdat_info.get_sampledata_path() + "/" filename = dir + "so_Omon_MPI-ESM-LR_1pctCO2_r1i1p1_185001-185912_2timesteps.nc" g = cdms2.open(filename) self.so = g('so')[0,0,:,:254] gLat = cdms2.createGaussianAxis(64) deltaLon = (360/128.) gLon = cdms2.createUniformLongitudeAxis(0, 128, deltaLon) self.gaussGrid = cdms2.grid.createGenericGrid(gLat[:], gLon[:], gLat.getBounds(), gLon.getBounds())
def Xtest0(self): """ Test cdutil.generateLandSeaMask """ f = cdms2.open(cdat_info.get_sampledata_path() + \ "/so_Omon_GISS-E2-R_historicalNat_r5i1p1_185001-187512_2timesteps.nc") s = f("so") print s.shape print dir(cdutil.create_landsea_mask) # this will call the regrid method m = cdutil.generateLandSeaMask(s)
def Xtest1(self): """ Test from Kate Marvel As the following code snippet demonstrates, regridding a cdms2.tvariable.TransientVariable instance using regridTool='regrid2' results in a new array that is masked everywhere. regridTool='esmf' and regridTool='libcf' both work as expected. This is similar to test0 but we only onterpolate over a single elevation, also fails. Likely GRID is not constructed correctly. """ import cdms2 as cdms import numpy as np filename = cdat_info.get_sampledata_path() + '/clt.nc' a=cdms.open(filename) data=a('clt')[0,...] print data.mask #verify this data is not masked ## Now create a new grid using every other latitude and every # other longitude LATS=data.getLatitude()[::2] ub = data.getLatitude().getBounds()[1::2][:,0] lb = data.getLatitude().getBounds()[::2][:,1] latbounds = np.array(zip(ub,lb)) self.assertEqual((ub != lb).all(), True) LONS=data.getLongitude()[::2] ub=data.getLongitude().getBounds()[1::2][:,0] lb=data.getLongitude().getBounds()[::2][:,1] lonbounds=np.array(zip(ub,lb)) self.assertEqual((ub != lb).all(), True) GRID=cdms.createGenericGrid(LATS,LONS, latBounds=latbounds, lonBounds=lonbounds) test_data=data.regrid(GRID,regridTool='regrid2') # check that the mask does not extend everywhere... self.assertNotEqual(test_data.mask.sum(), test_data.size) if PLOT: pylab.subplot(2, 1, 1) pylab.pcolor(data[...]) pylab.title('data') pylab.subplot(2, 1, 2) pylab.pcolor(test_data[...]) pylab.title('test_data (interpolated data)') pylab.show()
def test_test3(self): """ 2D + level """ tas = cdms2.open(cdat_info.get_sampledata_path() + \ '/tas_ccsr-95a_1979.01-1979.12.nc')('tas')[0, :,...] tasInterp = tas.regrid( tas.getGrid() ) if not numpy.all(tasInterp.mask): n = reduce(lambda x,y: x*y, tasInterp.shape) diff = abs(numpy.sum(tas - tasInterp))/float(n) self.assertLess(diff, 3.e-5)
def test_2d_esmf(self): #print 'running test_2d_esmf...' f = cdms2.open(cdat_info.get_sampledata_path() + \ '/so_Omon_ACCESS1-0_historical_r1i1p1_185001-185412_2timesteps.nc') so = f('so')[0, 0, :, :] clt = cdms2.open(cdat_info.get_sampledata_path() + '/clt.nc')('clt')[0, :, :] tic = time.time() soInterp = so.regrid(clt.getGrid(), regridTool='ESMF') #, periodicity=1) soInterpInterp = soInterp.regrid(so.getGrid(), regridTool='ESMF') toc = time.time() #print 'time to interpolate (ESMF linear) forward/backward: ', toc - tic ntot = reduce(operator.mul, so.shape) avgdiff = numpy.sum(so - soInterpInterp) / float(ntot) #print 'avgdiff = ', avgdiff self.assertLess(abs(avgdiff), 5.2e18) if PLOT: pylab.figure(2) pylab.pcolor(abs(so - soInterpInterp), vmin=0.0, vmax=1.0) pylab.colorbar() pylab.title('ESMF linear')
def Xtest2(self): """ 2D + time """ u = cdms2.open(cdat_info.get_sampledata_path() + "/clt.nc")("u")[:, 0, ...] uInterp = u.regrid(u.getGrid()) self.assertEqual(numpy.isnan(u).sum(), 0) self.assertEqual(numpy.isnan(uInterp).sum(), 0) n = reduce(lambda x, y: x * y, uInterp.shape) diff = abs(numpy.sum(u - uInterp)) / float(n) success = False self.assertLess(diff, self.tolerance)
def setUp(self): filename = cdat_info.get_sampledata_path() + \ "/so_Omon_CNRM-CM5_decadal2004_r9i1p1_200501-201412_2timesteps.nc" g = cdms2.open(filename) self.so = g('so')[0,0,...] self.so.toVisit('soCNRM.vsh5', 'Vs') gLat = cdms2.createGaussianAxis(64) deltaLon = (360/128.) gLon = cdms2.createUniformLongitudeAxis(0, 128, deltaLon) self.gaussGrid = cdms2.grid.createGenericGrid(gLat[:], gLon[:], gLat.getBounds(), gLon.getBounds())