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
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
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')
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')
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)
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)
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)
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')
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