예제 #1
0
    def test_cubelist_input(self):
        """Test when supplying a cubelist as input containing cubes
        representing UK deterministic and UK ensemble model configuration
        and unifying the forecast_reference_time, so that both model
        configurations have a common forecast_reference_time."""
        cube_uk_ens = set_up_variable_cube(
            np.full((3, 4, 4), 273.15, dtype=np.float32),
            time=self.cycletime, frt=datetime(2017, 1, 10, 4))

        # set up forecast periods of 5, 7 and 9 hours
        time_points = [1484031600, 1484038800, 1484046000]
        cube_uk_ens = add_coordinate(
            cube_uk_ens, time_points, "time", dtype=np.int64,
            coord_units="seconds since 1970-01-01 00:00:00")

        expected_uk_det = self.cube_uk_det.copy()
        frt_units = expected_uk_det.coord('forecast_reference_time').units
        frt_points = [
            np.round(frt_units.date2num(self.cycletime)).astype(np.int64)]
        expected_uk_det.coord("forecast_reference_time").points = frt_points
        expected_uk_det.coord("forecast_period").points = (
            np.array([3, 5, 7]) * 3600)
        expected_uk_ens = cube_uk_ens.copy()
        expected_uk_ens.coord("forecast_reference_time").points = frt_points
        expected_uk_ens.coord("forecast_period").points = (
            np.array([1, 3, 5]) * 3600)
        expected = iris.cube.CubeList([expected_uk_det, expected_uk_ens])

        cubes = iris.cube.CubeList([self.cube_uk_det, cube_uk_ens])
        result = unify_cycletime(cubes, self.cycletime)

        self.assertIsInstance(result, iris.cube.CubeList)
        self.assertEqual(result, expected)
예제 #2
0
 def test_single_item_cubelist_input(self):
     """Test when supplying a cube representing a UK deterministic model
     configuration only. This effectively updates the
     forecast_reference_time on the cube to the specified cycletime."""
     expected_uk_det = self.cube_uk_det.copy()
     frt_units = expected_uk_det.coord('forecast_reference_time').units
     frt_points = [
         np.round(frt_units.date2num(self.cycletime)).astype(np.int64)]
     expected_uk_det.coord("forecast_reference_time").points = frt_points
     expected_uk_det.coord("forecast_period").points = (
         np.array([3, 5, 7]) * 3600)
     result = unify_cycletime([self.cube_uk_det], self.cycletime)
     self.assertIsInstance(result, iris.cube.CubeList)
     self.assertEqual(result[0], expected_uk_det)
예제 #3
0
 def test_input_no_forecast_period_coordinate(self):
     """Test when supplying a cube representing a UK deterministic model
     configuration only. This forces a forecast_period coordinate to be
     created from a forecast_reference_time coordinate and a time
     coordinate."""
     expected_uk_det = self.cube_uk_det.copy()
     frt_units = expected_uk_det.coord('forecast_reference_time').units
     frt_points = [
         np.round(frt_units.date2num(self.cycletime)).astype(np.int64)]
     expected_uk_det.coord("forecast_reference_time").points = frt_points
     expected_uk_det.coord("forecast_period").points = (
         np.array([3, 5, 7]) * 3600)
     cube_uk_det = self.cube_uk_det.copy()
     cube_uk_det.remove_coord("forecast_period")
     result = unify_cycletime([cube_uk_det], self.cycletime)
     self.assertIsInstance(result, iris.cube.CubeList)
     self.assertEqual(result[0], expected_uk_det)