Example #1
0
    def test_get_sdim_from_esmf_grid(self):
        rd = ocgis.RequestDataset(**self.get_dataset())

        keywords = dict(
            has_corners=[True, False], has_mask=[True, False], crs=[None, CoordinateReferenceSystem(epsg=4326)]
        )

        for k in itr_products_keywords(keywords, as_namedtuple=True):
            field = rd.get()
            sdim = field.spatial

            if not k.has_corners:
                sdim.grid.row.remove_bounds()
                sdim.grid.col.remove_bounds()
                self.assertIsNone(sdim.grid.corners)

            egrid = get_esmf_grid_from_sdim(sdim)

            if not k.has_mask:
                egrid.mask[0][2, 2] = 0
                sdim.grid.value.mask[:, 2, 2] = True
                if k.has_corners:
                    sdim.grid.corners.mask[:, 2, 2] = True

            nsdim = get_sdim_from_esmf_grid(egrid, crs=k.crs)
            self.assertEqual(nsdim.crs, k.crs)

            self.assertNumpyAll(sdim.grid.value, nsdim.grid.value)
            if k.has_corners:
                self.assertNumpyAll(sdim.grid.corners, nsdim.grid.corners)
            else:
                self.assertIsNone(nsdim.grid.corners)
Example #2
0
    def test_get_esmf_grid_from_sdim_with_mask(self):
        """Test with masked data."""

        rd = self.test_data.get_rd("cancm4_tas")
        ops = ocgis.OcgOperations(
            dataset=rd, geom="state_boundaries", select_ugid=[23], snippet=True, vector_wrap=False
        )
        ret = ops.execute()
        field = ret[23]["tas"]
        egrid = get_esmf_grid_from_sdim(field.spatial)
        actual = np.array([[0, 0, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]], dtype=np.int32)
        self.assertNumpyAll(egrid.mask[0], actual)

        sdim = get_sdim_from_esmf_grid(egrid)
        self.assertNumpyAll(sdim.get_mask(), field.spatial.get_mask())
        actual = np.array(
            [
                [
                    [[True, True, True, True], [True, True, True, True], [False, False, False, False]],
                    [[False, False, False, False], [False, False, False, False], [False, False, False, False]],
                    [[False, False, False, False], [False, False, False, False], [False, False, False, False]],
                    [[False, False, False, False], [False, False, False, False], [False, False, False, False]],
                ],
                [
                    [[True, True, True, True], [True, True, True, True], [False, False, False, False]],
                    [[False, False, False, False], [False, False, False, False], [False, False, False, False]],
                    [[False, False, False, False], [False, False, False, False], [False, False, False, False]],
                    [[False, False, False, False], [False, False, False, False], [False, False, False, False]],
                ],
            ]
        )
        self.assertNumpyAll(actual, sdim.grid.corners.mask)
Example #3
0
    def test_get_sdim_from_esmf_grid(self):
        rd = ocgis.RequestDataset(**self.get_dataset())

        keywords = dict(
            has_corners=[True, False], has_mask=[True, False], crs=[None, CoordinateReferenceSystem(epsg=4326)]
        )

        for k in itr_products_keywords(keywords, as_namedtuple=True):
            field = rd.get()
            sdim = field.spatial
            egrid = get_esmf_grid_from_sdim(sdim)

            if not k.has_mask:
                # set the grid flag to indicate no mask is present
                egrid.item_done[ESMF.StaggerLoc.CENTER][0] = False
                # remove the mask from the grid
                egrid.mask[0] = [1]
            else:
                egrid.mask[0][2, 2] = 0
                sdim.grid.value.mask[:, 2, 2] = True
                sdim.grid.corners.mask[:, 2, 2] = True

            if not k.has_corners:
                egrid.coords[ESMF.StaggerLoc.CORNER] = [np.array(0.0), np.array(0.0)]
                egrid.coords_done[ESMF.StaggerLoc.CORNER] = [False, False]

            nsdim = get_sdim_from_esmf_grid(egrid, crs=k.crs)
            self.assertEqual(nsdim.crs, k.crs)

            self.assertNumpyAll(sdim.grid.value, nsdim.grid.value)
            if k.has_corners:
                self.assertNumpyAll(sdim.grid.corners, nsdim.grid.corners)
            else:
                self.assertIsNone(nsdim.grid.corners)