class AreaWideGrid(Event): expected_fields = set( [ "sim_time_start", # time start in seconds "sim_time_end", # can be None "rain_definition", # which "ontwerpbui"? "type", # not used ] ) def __init__(self, *args, **kwargs): super(AreaWideGrid, self).__init__(*args, **kwargs) self.rain_definition = kwargs["rain_definition"] self.memcdf_name = "area_wide_%s.nc" % random_string(8) def init(self, subgrid): self.subgrid = subgrid self.rain_grid = AreaWideRainGrid(subgrid, memcdf_name=self.memcdf_name) def update(self, sim_time): """Update grid and apply. Return whether the grid has changed""" lookup_time = int(sim_time - self.sim_time_start) changed = self.rain_grid.update(rain_definition=self.rain_definition, time_seconds=lookup_time) return changed def delete_memcdf(self): if os.path.exists(self.memcdf_name): os.remove(self.memcdf_name) def __str__(self): return "area wide rain grid %s (%r-%r)" % (self.rain_definition, self.sim_time_start, self.sim_time_end)
def test_area_wide_rain_grid(self): subgrid = python_subgrid.wrapper.SubgridWrapper(mdu=self.mdu) python_subgrid.wrapper.logger.setLevel(logging.DEBUG) subgrid.start() rain_grid = AreaWideRainGrid(subgrid, memcdf_name='area_rain.nc') rain_grid.update('10', 600) self.assertEquals(memcdf_value(rain_grid.memcdf_name), 6.3 / 300 * 60) self.assertEquals(rain_grid.cumulative, 1.8 + 3.6) self.assertEquals(rain_grid.current_value, 6.3) changed = rain_grid.update('5', 900) self.assertEquals(memcdf_value(rain_grid.memcdf_name), 2.70 / 300 * 60) self.assertEquals(rain_grid.cumulative, 0.30 + 0.60 + 1.50) self.assertEquals(rain_grid.current_value, 2.7) self.assertEquals(changed, True) changed = rain_grid.update('5', 900) self.assertEquals(changed, False)
def init(self, subgrid): self.subgrid = subgrid self.rain_grid = AreaWideRainGrid(subgrid, memcdf_name=self.memcdf_name)