Example #1
0
    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')
Example #2
0
    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')
Example #3
0
    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')
Example #4
0
 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())
Example #5
0
 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())
Example #6
0
    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')
Example #7
0
    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')
Example #8
0
    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()
Example #9
0
    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()
Example #10
0
 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())
Example #11
0
    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())
Example #12
0
 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())
Example #13
0
 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')
Example #14
0
    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
Example #15
0
    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.]])))
Example #17
0
    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')
Example #18
0
 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())
Example #19
0
    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')
Example #20
0
    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')
Example #21
0
    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')
Example #22
0
    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, ...]
Example #23
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")
Example #24
0
    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,...]
Example #25
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')
Example #26
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 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")
Example #28
0
 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()
Example #29
0
    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")
Example #30
0
    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()
Example #31
0
    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)
Example #33
0
    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()
Example #34
0
 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()
Example #35
0
 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)
Example #36
0
 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()
Example #37
0
    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))
Example #38
0
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()
Example #39
0
 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)
Example #40
0
 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")
Example #41
0
 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())
Example #42
0
 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())
Example #43
0
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()
Example #44
0
    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())
Example #45
0
    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))
Example #46
0
    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)
Example #47
0
 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")
Example #48
0
    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())
Example #49
0
 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)
Example #50
0
 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)
Example #51
0
 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())
Example #52
0
 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)
Example #53
0
    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()
Example #54
0
 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)
Example #55
0
    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')
Example #56
0
 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)
Example #57
0
 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())