def test_get_ensemble_forecast_collection(self): EPSG = 32633 upper_left_x = 436100.0 upper_left_y = 7417800.0 nx = 74 ny = 94 dx = 1000.0 dy = 1000.0 t0 = api.YMDhms(2015, 7, 26, 0) n_hours = 30 utc = api.Calendar() # No offset gives Utc period = api.UtcPeriod(utc.time(t0), utc.time(t0) + api.deltahours(n_hours)) t_c = utc.time(t0) + api.deltahours(1) base_dir = path.join(shyftdata_dir, "netcdf", "arome") pattern = "fc2015072600.nc" bbox = ([ upper_left_x, upper_left_x + nx * dx, upper_left_x + nx * dx, upper_left_x ], [ upper_left_y, upper_left_y, upper_left_y - ny * dy, upper_left_y - ny * dy ]) try: ar1 = AromeDataRepository(EPSG, base_dir, filename=pattern, bounding_box=bbox) ar2 = AromeDataRepository(EPSG, base_dir, filename=pattern, bounding_box=bbox) repos = GeoTsRepositoryCollection([ar1, ar2]) data_names = ("temperature", "wind_speed", "relative_humidity") ensemble = repos.get_forecast_ensemble(data_names, period, t_c, None) self.assertTrue(isinstance(ensemble, list)) self.assertEqual(len(ensemble), 10) with self.assertRaises(GeoTsRepositoryCollectionError) as context: repos = GeoTsRepositoryCollection([ar1, ar2], reduce_type="add") repos.get_forecast_ensemble(data_names, period, t_c, None) self.assertEqual("Only replace is supported yet", context.exception.args[0]) except AromeDataRepositoryError as adre: self.skipTest( "(test inconclusive- missing arome-data {0})".format(adre))
def run_simulator(self, model_t): # Simulation time axis dt0 = api.YMDhms(2015, 8, 24, 6) n_hours = 30 dt = api.deltahours(1) utc = api.Calendar() # No offset gives Utc t0 = utc.time(dt0) time_axis = api.Timeaxis(t0, dt, n_hours) # Some dummy ids not needed for the netcdf based repositories region_id = 0 interpolation_id = 0 # Simulation coordinate system epsg = "32633" # Configs and repositories region_config = RegionConfig(self.region_config_file) model_config = ModelConfig(self.model_config_file) region_model_repository = RegionModelRepository( region_config, model_config, model_t, epsg) interp_repos = InterpolationParameterRepository(model_config) date_str = "{}{:02}{:02}_{:02}".format(dt0.year, dt0.month, dt0.day, dt0.hour) base_dir = path.join(shyftdata_dir, "repository", "arome_data_repository") f1 = "arome_metcoop_red_default2_5km_{}.nc".format(date_str) f2 = "arome_metcoop_red_test2_5km_{}.nc".format(date_str) ar1 = AromeDataRepository(epsg, base_dir, filename=f1, allow_subset=True) ar2 = AromeDataRepository(epsg, base_dir, filename=f2, elevation_file=f1, allow_subset=True) geo_ts_repository = GeoTsRepositoryCollection([ar1, ar2]) simulator = DefaultSimulator(region_id, interpolation_id, region_model_repository, geo_ts_repository, interp_repos, None) n_cells = simulator.region_model.size() state_repos = DefaultStateRepository(model_t, n_cells) simulator.run(time_axis, state_repos.get_state(0))
def test_get_forecast_collection(self): n_hours = 30 dt = api.deltahours(1) utc = api.Calendar() # No offset gives Utc tc = api.YMDhms(2015, 8, 24, 6) t0 = utc.time(tc) period = api.UtcPeriod(t0, t0 + api.deltahours(n_hours)) date_str = "{}{:02}{:02}_{:02}".format(tc.year, tc.month, tc.day, tc.hour) epsg, bbox = self.arome_epsg_bbox base_dir = path.join(shyftdata_dir, "repository", "arome_data_repository") f1 = "arome_metcoop_red_default2_5km_{}.nc".format(date_str) f2 = "arome_metcoop_red_test2_5km_{}.nc".format(date_str) ar1 = AromeDataRepository(epsg, base_dir, filename=f1, allow_subset=True) ar2 = AromeDataRepository(epsg, base_dir, filename=f2, elevation_file=f1, allow_subset=True) geo_ts_repository = GeoTsRepositoryCollection([ar1, ar2]) source_names = ("temperature", "radiation") sources = geo_ts_repository.get_forecast(source_names, period, t0, geo_location_criteria=bbox) self.assertTrue(all([x in source_names for x in sources])) geo_ts_repository = GeoTsRepositoryCollection([ar1, ar2], reduce_type="add") with self.assertRaises(GeoTsRepositoryCollectionError) as context: sources = geo_ts_repository.get_forecast( ("temperature", "radiation"), period, t0, geo_location_criteria=bbox)
def test_run_arome_ensemble(self): # Simulation time axis year, month, day, hour = 2015, 7, 26, 0 n_hours = 30 dt = api.deltahours(1) utc = api.Calendar() # No offset gives Utc t0 = utc.time(api.YMDhms(year, month, day, hour)) time_axis = api.Timeaxis(t0, dt, n_hours) # Some dummy ids not needed for the netcdf based repositories region_id = 0 interpolation_id = 0 # Simulation coordinate system epsg = "32633" # Model model_t = pt_gs_k.PTGSKOptModel # Configs and repositories region_config = RegionConfig(self.region_config_file) model_config = ModelConfig(self.model_config_file) region_model_repository = RegionModelRepository( region_config, model_config, model_t, epsg) interp_repos = InterpolationParameterRepository(model_config) base_dir = path.join(shyftdata_dir, "netcdf", "arome") pattern = "fc*.nc" try: geo_ts_repository = AromeDataRepository(epsg, base_dir, filename=pattern, allow_subset=True) except Exception as e: print("**** test_run_arome_ensemble: Arome data missing or" " wrong, test inconclusive ****") print("****{}****".format(e)) self.skipTest( "**** test_run_arome_ensemble: Arome data missing or wrong, test " "inconclusive ****\n\t exception:{}".format(e)) simulator = DefaultSimulator(region_id, interpolation_id, region_model_repository, geo_ts_repository, interp_repos, None) n_cells = simulator.region_model.size() state_repos = DefaultStateRepository(model_t, n_cells) simulators = simulator.create_ensembles(time_axis, t0, state_repos.get_state(0)) for s in simulators: s.simulate()