def test_container(self): subgrid = python_subgrid.wrapper.SubgridWrapper(mdu=self.mdu) python_subgrid.wrapper.logger.setLevel(logging.DEBUG) subgrid.start() url_template = ('http://opendap.nationaleregenradar.nl/' 'thredds/dodsC/radar/TF0005_A/{year}/{month}/01/' 'RAD_TF0005_A_{year}{month}01000000.h5') container = RainGridContainer(subgrid) RainGrid(subgrid, url_template, memcdf_name='1.nc', initial_value=1.) RainGrid(subgrid, url_template, memcdf_name='2.nc', initial_value=2.) container.update() self.assertEquals(memcdf_value(container.memcdf_name), 0) container.register('1.nc') container.register('2.nc') container.update() self.assertEquals(memcdf_value(container.memcdf_name), 3) container.unregister('1.nc') container.update() self.assertEquals(memcdf_value(container.memcdf_name), 2) container.unregister('2.nc') container.update() self.assertEquals(memcdf_value(container.memcdf_name), 0) self.assertRaises(KeyError, container.unregister, ('2.nc', ))
def test_opendap_grid(self): url_template = ('http://opendap.nationaleregenradar.nl/' 'thredds/dodsC/radar/TF0005_A/{year}/{month}/01/' 'RAD_TF0005_A_{year}{month}01000000.h5') memcdf_name = 'precipitation.nc' subgrid = python_subgrid.wrapper.SubgridWrapper(mdu=self.mdu) python_subgrid.wrapper.logger.setLevel(logging.DEBUG) subgrid.start() rain_grid = RainGrid(subgrid, url_template, memcdf_name=memcdf_name, initial_value=9.) subgrid.subscribe_dataset(memcdf_name) rain_grid.fill(1.0) s0 = subgrid.get_nd('s1').copy() v0 = subgrid.get_nd('vol1').copy() for i in range(12): subgrid.update(-1) s1 = subgrid.get_nd('s1').copy() v1 = subgrid.get_nd('vol1').copy() print('shape of dps') print(subgrid.get_nd('dps').shape) print('s0 sum') print(np.sum(s0)) print('s1 sum') print(np.sum(s1)) print('s1-s0 sum') print(np.sum(s1 - s0)) print('v0, v1, v1-v0 sum') print(np.sum(v0)) print(np.sum(v1)) print(np.sum(v1 - v0))
def test_constant_grid(self): """Add grid to 1 model and then to another one""" with SubgridWrapper(mdu=self.mdu) as subgrid: rain_grid = RainGrid(subgrid, initial_value=9.) subgrid.subscribe_dataset(rain_grid.memcdf_name) with SubgridWrapper(mdu=self._mdu('duifp')) as subgrid: rain_grid2 = RainGrid(subgrid, initial_value=1.) subgrid.subscribe_dataset(rain_grid2.memcdf_name) subgrid.update(-1)
def test_back_orifice_rain(self): """Orifice with rain""" with SubgridWrapper(mdu=self._mdu('brouwersdam')) as subgrid: rain_grid = RainGrid(subgrid, initial_value=9.) subgrid.subscribe_dataset(rain_grid.memcdf_name) for _ in range(5): subgrid.update(-1)
def test_001_load_duifpolder_default_raingrid(self): """test load""" with SubgridWrapper(mdu=self._mdu_path('duifp')) as subgrid: logger.info("loaded duifpolder default") rain_grid = RainGrid(subgrid, '', initial_value=0.) subgrid.subscribe_dataset(rain_grid.memcdf_name) logger.info('apply raingrid') subgrid.update(-1)
def init(self, subgrid, radar_url_template): self.subgrid = subgrid self.radar_url_template = radar_url_template self.rain_grid = RainGrid( subgrid, url_template=radar_url_template, memcdf_name=self.memcdf_name, size_x=500, size_y=500, initial_value=0.0, ) self.rain_grid_dt = self.radar_dt
class RadarGrid(Event): expected_fields = set( [ "sim_time_start", # time start in seconds "sim_time_end", # can be None "radar_dt", # radar datetime at sim_time_start "sync", # not used "multiplier", # not used "type", # not used ] ) def __init__(self, *args, **kwargs): super(RadarGrid, self).__init__(*args, **kwargs) self.radar_dt = iso8601.parse_date(kwargs["radar_dt"]) self.memcdf_name = "precipitation_%s.nc" % random_string(8) self.rain_grid_dt = None # current radar datetime def init(self, subgrid, radar_url_template): self.subgrid = subgrid self.radar_url_template = radar_url_template self.rain_grid = RainGrid( subgrid, url_template=radar_url_template, memcdf_name=self.memcdf_name, size_x=500, size_y=500, initial_value=0.0, ) self.rain_grid_dt = self.radar_dt def update(self, sim_time): """Update grid and apply. Return whether the grid has changed""" self.rain_grid_dt = self.radar_dt + datetime.timedelta( seconds=int(float(sim_time)) - int(float(self.sim_time_start)) ) changed = self.rain_grid.update(dt=self.rain_grid_dt, multiplier=1000) return changed def delete_memcdf(self): if os.path.exists(self.memcdf_name): os.remove(self.memcdf_name) def __str__(self): return "rain grid %s (%r-%r)" % (self.radar_dt.strftime("%Y-%m-%d"), self.sim_time_start, self.sim_time_end)