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)