Example #1
0
 def test5_ESMF_Conservative(self):
     title = "Test Conservative regridding"
     mask = self.hso.mask
     hBnds = [_buildBounds(self.hGrid[0].getBounds()),
              _buildBounds(self.hGrid[1].getBounds())]
     fBnds = [_buildBounds(self.fGrid2D[0].getBounds()),
              _buildBounds(self.fGrid2D[1].getBounds())]
     roESMF = GenericRegrid([numpy.array(g) for g in self.hGrid2D],
                            [numpy.array(g) for g in self.fGrid2D],
                            dtype='float64',
                            regridMethod='conserv',
                            regridTool='ESMF',
                            srcBounds=hBnds,
                            dstBounds=fBnds,
                            srcGridMask=mask,
                            coordSys='degrees')
     roESMF.computeWeights()
     diag = {
         'srcAreas': 0,
         'dstAreas': 0,
         'srcAreaFractions': 0,
         'dstAreaFractions': 0}
     cso = numpy.ones(
         self.fGrid2D[0].shape,
         'float64') * self.hso.missing_value
     roESMF.apply(self.hso.data, cso)
     roESMF.fillInDiagnosticData(diag)
     # * numpy.nansum(diag['srcAreaFractions'])
     srcResult = (self.hso * diag['srcAreas']).sum()
     aa = cso < self.hso.max() + 1
     bb = cso > 0
     cc = (numpy.array(aa, numpy.int32) + numpy.array(bb, numpy.int32)) == 2
     dstResult = (cso[aa] * diag['dstAreas'][aa]).sum()
     self.assertLess(abs(srcResult - dstResult), self.eps)
Example #2
0
 def test2_ESMP_Basic_1dAxes_to_2DGrid(self):
     title = "test converting from 2 - 1d axes to a 2D grid"
     roESMP = GenericRegrid([numpy.array(g) for g in self.fGrid2D],
                            [numpy.array(g) for g in self.hGrid2D], 
                            self.fclt.dtype, 'linear', 'ESMP')
     roESMP.computeWeights()
     hclt = numpy.ones(self.hGrid2D[0].shape, self.fclt.dtype) * self.fclt.missing_value
     roESMP.apply(self.fclt[0,...].data, hclt)
     roBack = GenericRegrid([numpy.array(g) for g in self.hGrid2D], 
                            [numpy.array(g) for g in self.fGrid2D], 
                            self.hso.dtype, 'linear', 'ESMP')
     roBack.computeWeights()
     bclt = numpy.ones(self.fGrid2D[0].shape, self.fclt.dtype) * self.fclt.missing_value
     roBack.apply(hclt[:], bclt)
     diff = abs(self.fclt[0,...] - bclt)
     self.assertTrue(numpy.all(diff) < self.eps)
Example #3
0
 def test3_ESMP_Basic_2DGrid_to_1dAxes(self):
     title = "test converting from a 2D grid to 2 - 1d axes"
     roESMP = GenericRegrid([numpy.array(g) for g in self.hGrid2D], 
                            [numpy.array(g) for g in self.fGrid2D], 
                            self.hso.dtype,  
                            'linear', 'ESMP')
     roESMP.computeWeights()
     fso = numpy.ones(self.fGrid2D[0].shape, self.hso.dtype) * self.hso.missing_value
     roESMP.apply(self.hso.data, fso)
     roBack = GenericRegrid([numpy.array(g) for g in self.fGrid2D], 
                            [numpy.array(g) for g in self.hGrid2D], 
                            self.hso.dtype, 'linear', 'ESMP')
     roBack.computeWeights()
     bso = numpy.ones(self.hGrid[0].shape, self.hso.dtype) * self.hso.missing_value
     roBack.apply(fso[:], bso)
     diff = abs(self.hso - bso)
     self.assertTrue(diff.all() < self.eps)
Example #4
0
 def test5_ESMP_Conservative(self):
     title = "Test Conservative regridding"
     mask = self.hso.mask
     hBnds = [_buildBounds(self.hGrid[0].getBounds()), 
              _buildBounds(self.hGrid[1].getBounds())]
     fBnds = [_buildBounds(self.fGrid2D[0].getBounds()), 
              _buildBounds(self.fGrid2D[1].getBounds())]
     roESMP = GenericRegrid([numpy.array(g) for g in self.hGrid2D], 
                            [numpy.array(g) for g in self.fGrid2D],
                            dtype = self.hso.dtype, 
                            regridMethod = 'conserv', 
                            regridTool = 'ESMP', 
                            srcBounds = hBnds,
                            dstBounds = fBnds,
                            srcGridMask = mask,
                            coordSys = 'degrees')
     roESMP.computeWeights()
     diag = {'srcAreas':0, 'dstAreas':0, 'srcAreaFractions':0, 'dstAreaFractions':0}
     cso = numpy.ones(self.fGrid2D[0].shape, self.hso.dtype) * self.hso.missing_value
     roESMP.apply(self.hso.data, cso)
     roESMP.fillInDiagnosticData(diag)
     srcResult = (self.hso * diag['srcAreas']).sum()# * numpy.nansum(diag['srcAreaFractions'])
     aa = cso < self.hso.max()+1
     bb = cso > 0
     cc = (numpy.array(aa,numpy.int32) + numpy.array(bb, numpy.int32)) == 2
     dstResult = (cso[aa] * diag['dstAreas'][aa]).sum()
     self.assertLess(abs(srcResult - dstResult), self.eps)
Example #5
0
    def test1_ESMP_Basic(self):
        # Test ESMP
        title = "test ESMP - should be missing part."
        roESMP = GenericRegrid([numpy.array(g) for g in self.fGrid2D], 
                               [numpy.array(g) for g in self.gGrid2D],
                               self.fclt.dtype, 'linear', 'ESMP', 
                               coordSys = 'degr')

        roESMP.computeWeights()
        gclt = numpy.ones(self.gGrid2D[0].shape, self.fclt.dtype) * self.fclt.missing_value
        roESMP.apply(self.fclt[0,...].data, gclt)
        roBack = GenericRegrid([numpy.array(g) for g in self.gGrid2D],
                               [numpy.array(g) for g in self.fGrid2D], 
                               self.fclt.dtype, 
                               'linear', 'ESMP', coordSys = 'cart')
        roBack.computeWeights()
        bclt = numpy.ones(self.fGrid2D[0].shape, self.fclt.dtype) * self.fclt.missing_value
        roBack.apply(gclt, bclt)
        diff = abs(bclt -self.fclt[0,...])
        self.assertTrue(diff.all() < self.eps)
Example #6
0
 def test4_ESMP_Rgd_w_Masking(self):
     title = "test ESMP - should be missing part."
     mask = self.hso.mask
     roESMP = GenericRegrid([numpy.array(g) for g in self.hGrid2D], 
                            [numpy.array(g) for g in self.fGrid2D], 
                            self.hso.dtype, 
                            'linear', 'ESMP', srcMask = mask)
     roESMP.computeWeights()
     fso = numpy.ones(self.fGrid2D[0].shape, self.hso.dtype) * self.hso.missing_value
     roESMP.apply(self.hso.data, fso)
     roBack = GenericRegrid([numpy.array(g) for g in self.fGrid2D], 
                            [numpy.array(g) for g in self.hGrid2D], 
                            self.hso.dtype, 'linear', 'ESMP')
     roBack.computeWeights()
     bso = numpy.ones(self.hGrid[0].shape, self.hso.dtype) * self.hso.missing_value
     roBack.apply(fso, bso)
     aa = fso < self.hso.max()+1
     bb = fso > 0
     cc = (numpy.array(aa,numpy.int32) + numpy.array(bb, numpy.int32)) == 2
     self.assertLess(abs(fso[cc].mean() - self.hso.mean()), 1)
Example #7
0
 def test5_5x7_to_3x4(self):
     # Test double grid resolution original grid resolution
     # Just the corner is one valued
     roESMP = GenericRegrid(self.fromGrid5x7, self.toGrid3x4, self.data5x7.dtype,
                            'linear', 'ESMP', coordSys = 'Cart')
     roESMP.computeWeights()
     ESMP3x4 = numpy.ones(self.data3x4.shape)*(-999)
     roESMP.apply(self.data5x7, ESMP3x4 )
     self.assertEqual(ESMP3x4[0,0], self.data5x7[0,0])
     self.assertEqual(ESMP3x4[1,1], 0.0)
Example #8
0
 def test2_Increase_Res(self):
     """
     Simple change in resolution
     """
     
     roESMP = GenericRegrid(self.gridSml, self.gridLrg, self.dataSml.dtype,
                            'linear', 'ESMP', coordSys = 'Cart')
     roESMP.computeWeights()
     dstESMP = self.gridLrg[0]*0-1
     roESMP.apply(self.dataSml, dstESMP)
     self.assertLess(self.dataSml[-1,-1]- dstESMP[-1,-1], self.eps)
Example #9
0
    def test3_3x4_to_3x4(self):
        for d in dir(unittest):
            if re.search('assert', d): print d
        # Test NonPeriodic grid Returning same grid

        roESMP = GenericRegrid(self.fromGrid3x4, self.toGrid3x4, self.data3x4.dtype,
                               'linear', 'ESMP', coordSys = 'Cart')
        roESMP.computeWeights()
        ESMP3x4 = numpy.ones(self.data3x4.shape)*(-999)
        roESMP.apply(self.data3x4, ESMP3x4)
        self.assertEqual(self.data3x4[0,0], ESMP3x4[0,0])
        self.assertEqual(1.0, ESMP3x4[0,0])
Example #10
0
 def test3_ESMF_Basic_2DGrid_to_1dAxes(self):
     title = "test converting from a 2D grid to 2 - 1d axes"
     roESMF = GenericRegrid([numpy.array(g) for g in self.hGrid2D],
                            [numpy.array(g) for g in self.fGrid2D],
                            'float64', 'linear', 'ESMF')
     roESMF.computeWeights()
     fso = numpy.ones(self.fGrid2D[0].shape,
                      'float64') * self.hso.missing_value
     roESMF.apply(self.hso.data, fso, zero_region=None)
     roBack = GenericRegrid([numpy.array(g) for g in self.fGrid2D],
                            [numpy.array(g) for g in self.hGrid2D],
                            self.hso.dtype, 'linear', 'ESMF')
     roBack.computeWeights()
     bso = numpy.ones(self.hGrid[0].shape,
                      'float64') * self.hso.missing_value
     roBack.apply(fso[:], bso, zero_region=None)
     diff = abs(self.hso - bso)
     self.assertTrue(diff.all() < self.eps)
Example #11
0
 def test2_ESMF_Basic_1dAxes_to_2DGrid(self):
     title = "test converting from 2 - 1d axes to a 2D grid"
     roESMF = GenericRegrid([numpy.array(g) for g in self.fGrid2D],
                            [numpy.array(g) for g in self.hGrid2D],
                            'float64', 'linear', 'ESMF')
     roESMF.computeWeights()
     hclt = numpy.ones(self.hGrid2D[0].shape,
                       'float64') * self.fclt.missing_value
     roESMF.apply(self.fclt[0, ...].data, hclt, zero_region=None)
     roBack = GenericRegrid([numpy.array(g) for g in self.hGrid2D],
                            [numpy.array(g) for g in self.fGrid2D],
                            'float64', 'linear', 'ESMF')
     roBack.computeWeights()
     bclt = numpy.ones(self.fGrid2D[0].shape,
                       'float64') * self.fclt.missing_value
     roBack.apply(hclt[:], bclt, zero_region=None)
     diff = abs(self.fclt[0, ...] - bclt)
     self.assertTrue(numpy.all(diff) < self.eps)
Example #12
0
    def test1_ESMF_Basic(self):
        # Test ESMF
        title = "test ESMF - should be missing part."
        roESMF = GenericRegrid([numpy.array(g) for g in self.fGrid2D],
                               [numpy.array(g) for g in self.gGrid2D],
                               'float64',
                               'linear',
                               'ESMF',
                               coordSys='degr')

        roESMF.computeWeights()
        gclt = numpy.ones(self.gGrid2D[0].shape,
                          'float64') * self.fclt.missing_value
        roESMF.apply(self.fclt[0, ...].data, gclt, zero_region=None)
        roBack = GenericRegrid([numpy.array(g) for g in self.gGrid2D],
                               [numpy.array(g) for g in self.fGrid2D],
                               'float64',
                               'linear',
                               'ESMF',
                               coordSys='cart')
        roBack.computeWeights()
        bclt = numpy.ones(self.fGrid2D[0].shape,
                          'float64') * self.fclt.missing_value
        roBack.apply(gclt, bclt, zero_region=None)
        diff = abs(bclt - self.fclt[0, ...])
        self.assertTrue(diff.all() < self.eps)
Example #13
0
 def test4_ESMF_Rgd_w_Masking(self):
     title = "test ESMF - should be missing part."
     mask = self.hso.mask
     roESMF = GenericRegrid([numpy.array(g) for g in self.hGrid2D],
                            [numpy.array(g) for g in self.fGrid2D],
                            'float64',
                            'linear',
                            'ESMF',
                            srcMask=mask)
     roESMF.computeWeights()
     fso = numpy.ones(self.fGrid2D[0].shape,
                      'float64') * self.hso.missing_value
     roESMF.apply(self.hso.data, fso, zero_region=None)
     roBack = GenericRegrid([numpy.array(g) for g in self.fGrid2D],
                            [numpy.array(g) for g in self.hGrid2D],
                            'float64', 'linear', 'ESMF')
     roBack.computeWeights()
     bso = numpy.ones(self.hGrid[0].shape,
                      'float64') * self.hso.missing_value
     roBack.apply(fso, bso, zero_region=None)
     aa = fso < self.hso.max() + 1
     bb = fso > 0
     cc = (numpy.array(aa, numpy.int32) + numpy.array(bb, numpy.int32)) == 2
     self.assertLess(abs(fso[cc].mean() - self.hso.mean()), 1)
Example #14
0
 def test4_3x4_to_5x7(self):
     # Test NonPeriodic grid Returning double grid resolution
     roLibCF = GenericRegrid(self.fromGrid3x4, self.toGrid5x7,
                             self.data3x4.dtype, 'linear', 'LibCF')
     roLibCF.computeWeights()
     LibCF5x7 = numpy.ones(self.data5x7.shape, dtype=numpy.float32) * (-999)
     roLibCF.apply(self.data3x4, LibCF5x7)
     roESMF = GenericRegrid(self.fromGrid3x4,
                            self.toGrid5x7,
                            self.data3x4.dtype,
                            'linear',
                            'ESMF',
                            coordSys='cart')
     roESMF.computeWeights()
     ESMF5x7 = numpy.ones(self.data5x7.shape) * (-999)
     roESMF.apply(self.data3x4, ESMF5x7)
     ro2 = GenericRegrid(self.fromGrid5x7,
                         self.toGrid3x4,
                         self.data5x7.dtype,
                         'linear',
                         'ESMF',
                         coordSys='Cart')
     ro2.computeWeights()
     ESMF3x4 = numpy.ones(self.data3x4.shape) * (-999)
     ro2.apply(ESMF5x7, ESMF3x4)
     self.assertEqual(self.data3x4[0, 0], ESMF5x7[0, 0])
     self.assertEqual(0.75, ESMF5x7[1, 1])
Example #15
0
    def test1_ESMP_Basic(self):
        # Test ESMP
        title = "test ESMP - should be missing part."
        roESMP = GenericRegrid([numpy.array(g) for g in self.fGrid2D], 
                               [numpy.array(g) for g in self.gGrid2D],
                               self.fclt.dtype, 'linear', 'ESMP', 
                               coordSys = 'degr')

        roESMP.computeWeights()
        gclt = numpy.ones(self.gGrid2D[0].shape, self.fclt.dtype) * self.fclt.missing_value
        roESMP.apply(self.fclt[0,...].data, gclt)
        roBack = GenericRegrid([numpy.array(g) for g in self.gGrid2D],
                               [numpy.array(g) for g in self.fGrid2D], 
                               self.fclt.dtype, 
                               'linear', 'ESMP', coordSys = 'cart')
        roBack.computeWeights()
        bclt = numpy.ones(self.fGrid2D[0].shape, self.fclt.dtype) * self.fclt.missing_value
        roBack.apply(gclt, bclt)
        diff = abs(bclt -self.fclt[0,...])
        self.assertTrue(diff.all() < self.eps)
 def test4_3x4_to_5x7(self):
     # Test NonPeriodic grid Returning double grid resolution
     roLibCF = GenericRegrid(self.fromGrid3x4, self.toGrid5x7, self.data3x4.dtype,
                             'linear', 'LibCF')
     roLibCF.computeWeights()
     LibCF5x7 = numpy.ones(self.data5x7.shape, dtype = numpy.float32)*(-999)
     roLibCF.apply(self.data3x4, LibCF5x7 )
     roESMP = GenericRegrid(self.fromGrid3x4, self.toGrid5x7, self.data3x4.dtype,
                            'linear', 'ESMP', coordSys = 'cart')
     roESMP.computeWeights()
     ESMP5x7 = numpy.ones(self.data5x7.shape)*(-999)
     roESMP.apply(self.data3x4, ESMP5x7 )
     ro2 = GenericRegrid(self.fromGrid5x7, self.toGrid3x4, self.data5x7.dtype,
                         'linear', 'ESMP', coordSys = 'Cart')
     ro2.computeWeights()
     ESMP3x4 = numpy.ones(self.data3x4.shape)*(-999)
     ro2.apply(ESMP5x7, ESMP3x4)
     self.assertEqual(self.data3x4[0,0], ESMP5x7[0,0])
     self.assertEqual(0.75, ESMP5x7[1,1])