Exemplo n.º 1
0
    def test_dwdt24(self):
        config = deepcopy(self.config)
        config['inputFile'] = self.input_path.joinpath('dwd/G.grb')
        config['start'] = 8640
        config['end'] = 10080
        config['ext'] = 4
        config['fmap'] = 21
        config['perturbationNumber'] = None
        config['Aggregation']['type'] = 'average'
        config['Aggregation']['step'] = 1440
        config['Parameter']['shortName'] = '2t'
        config['Parameter']['applyConversion'] = 'k2c'
        config['Parameter']['demMap'] = self.dem_map
        config['Parameter']['gem'] = '(z/9.81)*0.0065'
        config['Parameter']['correctionFormula'] = 'p+gem-dem*0.0065'
        ctx = ApiContext(config)
        api = Pyg2pApi(ctx)
        out_values = api.execute()
        assert len(out_values) == 2

        i = 21
        for step, val in out_values.items():
            i = str(i).zfill(3)
            reference = PCRasterReader(
                self.options['reference'].joinpath(f'dwd/T24a0000.{i}')).values
            diff = np.abs(reference - val)
            assert np.allclose(diff,
                               np.zeros(diff.shape),
                               rtol=1.e-2,
                               atol=1.e-3,
                               equal_nan=True)
            i = int(i)
            i += 4
Exemplo n.º 2
0
    def test_interpolation_use_scipy_nearest(self):

        file = config_dict['input.file']
        reader = GRIBReader(file)
        messages = reader.select_messages(shortName='2t')
        grid_id = messages.grid_id
        missing = messages.missing_value
        ctx = MockedExecutionContext(config_dict, False)
        interpolator = Interpolator(ctx, missing)
        values_in = messages.values_first_or_single_res[messages.first_step_range]
        lats, lons = messages.latlons
        values_resampled = interpolator.interpolate_scipy(lats, lons, values_in, grid_id, messages.grid_details)
        shape_target = PCRasterReader(config_dict['interpolation.latMap']).values.shape
        assert shape_target == values_resampled.shape
Exemplo n.º 3
0
 def test_interpolation_create_eccodes_nearest(self):
     d = deepcopy(config_dict)
     d['interpolation.create'] = True
     d['interpolation.parallel'] = True
     d['interpolation.mode'] = 'grib_nearest'
     file = d['input.file']
     reader = GRIBReader(file)
     messages = reader.select_messages(shortName='2t')
     grid_id = messages.grid_id
     missing = messages.missing_value
     ctx = MockedExecutionContext(d, True)
     interpolator = Interpolator(ctx, missing)
     values_in = messages.values_first_or_single_res[messages.first_step_range]
     values_resampled = interpolator.interpolate_grib(values_in, reader._selected_grbs[0], grid_id)
     shape_target = PCRasterReader(d['interpolation.latMap']).values.shape
     assert shape_target == values_resampled.shape
     os.unlink('tests/data/tbl_cos2t_550800_grib_nearest.npy.gz')
Exemplo n.º 4
0
 def test_interpolation_create_scipy_invdist(self):
     d = deepcopy(config_dict)
     d['interpolation.create'] = True
     d['interpolation.parallel'] = True
     d['interpolation.mode'] = 'invdist'
     file = d['input.file']
     reader = GRIBReader(file)
     messages = reader.select_messages(shortName='2t')
     grid_id = messages.grid_id
     missing = messages.missing_value
     ctx = MockedExecutionContext(d, False)
     interpolator = Interpolator(ctx, missing)
     values_in = messages.values_first_or_single_res[messages.first_step_range]
     lats, lons = messages.latlons
     values_resampled = interpolator.interpolate_scipy(lats, lons, values_in, grid_id, messages.grid_details)
     shape_target = PCRasterReader(d['interpolation.latMap']).values.shape
     assert shape_target == values_resampled.shape
     os.unlink('tests/data/tbl_pf10tp_550800_scipy_invdist.npy.gz')
Exemplo n.º 5
0
    def test_correction(self):
        file = 'tests/data/input.grib'
        reader = GRIBReader(file)
        messages = reader.select_messages(shortName='2t')
        grid_id = messages.grid_id
        missing = messages.missing_value
        demmap = PCRasterReader('tests/data/dem.map')
        dem = demmap.values
        dem_mv = demmap.mv

        d = {
            'interpolation.dirs': {'user': os.path.abspath('tests/data/'), 'global': os.path.abspath('tests/data/')},
            'geopotential.dirs': {'user': os.path.abspath('tests/data/'), 'global': os.path.abspath('tests/data/')},
            'interpolation.lonMap': 'tests/data/lon.map',
            'interpolation.latMap': 'tests/data/lat.map',
            'interpolation.mode': 'nearest',
            'input.file': 'tests/data/input.grib',
            'correction.demMap': 'tests/data/dem.map',
            'correction.formula': 'p+gem-dem*0.0065',
            'correction.gemFormula': '(z/9.81)*0.0065',
        }
        ctx = MockedExecutionContext(d, False)
        corrector = Corrector(ctx, grid_id, geo_file='tests/data/geopotential.grib')
        values_in = messages.values_first_or_single_res[messages.first_step_range]
        lats, lons = messages.latlons

        interpolator = Interpolator(ctx, missing)
        values_resampled = interpolator.interpolate_scipy(lats, lons, values_in, grid_id, messages.grid_details)
        values_out = corrector.correct(values_resampled)

        reader_geopotential = GRIBReader('tests/data/geopotential.grib')
        geopotential = reader_geopotential.select_messages(shortName=GeopotentialsConfiguration.short_names)
        z = geopotential.values_first_or_single_res[geopotential.first_step_range]
        grid_id_geopotential = geopotential.grid_id
        mv_geopotential = geopotential.missing_value
        gem = np.where(z != mv_geopotential, (z / 9.81) * 0.0065, mv_geopotential)
        gem_resampled = interpolator.interpolate_scipy(lats, lons, gem, grid_id_geopotential, geopotential.grid_details)
        reference = np.where((dem != dem_mv) & (values_resampled != dem_mv) & (gem_resampled != dem_mv),
                             values_resampled + gem_resampled - dem * 0.0065,
                             dem_mv)

        assert np.allclose(values_out, reference)
Exemplo n.º 6
0
    def test_cosmo_e06(self):
        config = deepcopy(self.config)
        config['inputFile'] = self.input_path.joinpath('cosmo/cos.grb')

        ctx = ApiContext(config)
        api = Pyg2pApi(ctx)
        assert not api.values
        assert not api.messages
        out_values = api.execute()
        assert api.values
        assert api.messages  # original GRIB messages and information class pyg2p.Messages
        assert len(out_values) == 22

        for i, (step, val) in enumerate(out_values.items(), start=1):
            i = str(i).zfill(3)
            reference = PCRasterReader(self.options['reference'].joinpath(
                f'cosmo/E06a0000.{i}')).values
            diff = np.abs(reference - val)
            assert np.allclose(diff,
                               np.zeros(diff.shape),
                               rtol=1.e-2,
                               atol=1.e-3,
                               equal_nan=True)
Exemplo n.º 7
0
    def test_cosmo_r06(self):
        config = deepcopy(self.config)
        config['inputFile'] = self.input_path.joinpath('cosmo/cos.grb')
        config['Aggregation']['type'] = 'accumulation'
        config['Aggregation']['forceZeroArray'] = 'y'
        config['Parameter']['shortName'] = 'tp'
        config['Parameter']['applyConversion'] = 'cut'

        ctx = ApiContext(config)
        api = Pyg2pApi(ctx)
        out_values = api.execute()
        assert len(out_values) == 22

        for i, (step, val) in enumerate(out_values.items(), start=1):
            i = str(i).zfill(3)
            reference = PCRasterReader(self.options['reference'].joinpath(
                f'cosmo/R06a0000.{i}')).values
            diff = np.abs(reference - val)
            assert np.allclose(diff,
                               np.zeros(diff.shape),
                               rtol=1.e-2,
                               atol=1.e-3,
                               equal_nan=True)
Exemplo n.º 8
0
 def test_createintertable(self):
     config = deepcopy(self.config)
     config['inputFile'] = 'tests/data/input.grib'
     config['intertableDir'] = 'tests/data'
     config['createIntertable'] = True
     config['interpolationParallel'] = True
     config['OutMaps']['Interpolation']['mode'] = 'invdist'
     config['OutMaps']['Interpolation']['latMap'] = 'tests/data/lat.map'
     config['OutMaps']['Interpolation']['lonMap'] = 'tests/data/lon.map'
     config['OutMaps']['cloneMap'] = 'tests/data/dem.map'
     config['perturbationNumber'] = None
     config['Aggregation'] = None
     config['Parameter']['shortName'] = '2t'
     config['Parameter']['applyConversion'] = 'k2c'
     config['Parameter']['demMap'] = 'tests/data/dem.map'
     config['Parameter']['gem'] = '(z/9.81)*0.0065'
     config['Parameter']['correctionFormula'] = 'p+gem-dem*0.0065'
     ctx = ApiContext(config)
     api = Pyg2pApi(ctx)
     out_values = api.execute()
     shape_target = PCRasterReader(
         config['OutMaps']['Interpolation']['latMap']).values.shape
     assert shape_target == list(out_values.values())[0].shape
     os.unlink('tests/data/tbl_pf10tp_550800_scipy_invdist.npy.gz')
Exemplo n.º 9
0
 def test_read(self):
     file = 'tests/data/dem.map'
     pcr = PCRasterReader(file)
     assert pcr.min == -9.25
     assert pcr.max == 3539.3720703125
     assert pcr.mv == -3.4028234663852886e+38