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)
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)
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)
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 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)
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)
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])
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)
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)
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_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)
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])
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])