Esempio n. 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)
Esempio n. 2
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)