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)
Beispiel #6
0
 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
Beispiel #7
0
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)