def test_simulation_matches_forw_backward(): """ Check if simulation extent matches for both forward and backward modeling. """ # forward leef = Leeway() objectType = 50 # FISHING-VESSEL-1 leef.seed_elements(lon=4.5, lat=60, number=100, objectType=objectType, time=datetime(2015, 1, 1)) leef.set_config('environment:fallback:x_wind', -1.5) leef.set_config('environment:fallback:y_wind', -10) leef.set_config('environment:fallback:x_sea_water_velocity', -1.5) # maximum speed in automatic landmask leef.set_config('environment:fallback:y_sea_water_velocity', 0) leef.run(steps=2, time_step=10*3600, time_step_output=10*3600) # backward leeb = Leeway() objectType = 50 # FISHING-VESSEL-1 leeb.seed_elements(lon=4.5, lat=60, number=100, objectType=objectType, time=datetime(2015, 1, 1)) leeb.set_config('environment:fallback:x_wind', 1.5) leeb.set_config('environment:fallback:y_wind', 10) leeb.set_config('environment:fallback:x_sea_water_velocity', 1.5) # maximum speed in automatic landmask leeb.set_config('environment:fallback:y_sea_water_velocity', 0) leeb.run(steps=2, time_step=-10*3600, time_step_output=-10*3600) maskf = leef.readers['global_landmask'] maskb = leeb.readers['global_landmask'] assert maskf.xmin == maskb.xmin assert maskf.ymin == maskb.ymin assert maskf.xmax == maskb.xmax assert maskf.ymax == maskb.ymax assert leef.num_elements_scheduled() == leeb.num_elements_scheduled() assert leef.num_elements_active() == leeb.num_elements_active() assert leef.num_elements_deactivated() == leeb.num_elements_deactivated() flon, flat = leef.get_lonlats() flon = flon[:,-1] flat = flat[:,-1] blon, blat = leeb.get_lonlats() blon = blon[:,-1] blat = blat[:,-1] np.testing.assert_array_almost_equal(np.sort(flon), np.sort(blon)) np.testing.assert_array_almost_equal(np.sort(flat), np.sort(blat), decimal = 5)
class TestLeeway(unittest.TestCase): """Tests for Leeway module.""" def test_leewayprop(self): """Check that Leeway properties are properly read.""" self.objectType = 85 # MED-WASTE-7 self.lee = Leeway(loglevel=20) objectType = self.objectType self.assertEqual(self.lee.leewayprop[objectType] ['Description'], '>>Medical waste, syringes, small') self.assertEqual(self.lee.leewayprop[objectType]['DWSLOPE'], 1.79) def test_leewayrun(self): """Test the expected Leeway left/right split.""" self.lee = Leeway(loglevel=30) self.objectType = 50 # FISHING-VESSEL-1 self.reader_basemap = reader_basemap_landmask.Reader( llcrnrlon=3, llcrnrlat=59.8, projection='merc', urcrnrlon=6, urcrnrlat=60.5, resolution='i') self.lee.add_reader([self.reader_basemap]) self.lee.seed_elements(lon=4.5, lat=60, number=100, objectType=self.objectType, time=datetime(2015, 1, 1)) self.lee.fallback_values['x_wind'] = 0 self.lee.fallback_values['y_wind'] = 10 self.lee.fallback_values['x_sea_water_velocity'] = 0 self.lee.fallback_values['y_sea_water_velocity'] = 0 # Check that 7 out of 100 elements strand towards coast self.lee.run(steps=24, time_step=3600) self.assertEqual(self.lee.num_elements_scheduled(), 0) self.assertEqual(self.lee.num_elements_active(), 97) self.assertEqual(self.lee.num_elements_deactivated(), 3) # stranded self.lee.export_ascii('leeway_ascii.txt') os.remove('leeway_ascii.txt')
class TestLeeway(unittest.TestCase): """Tests for Leeway module.""" def test_leewayprop(self): """Check that Leeway properties are properly read.""" self.objectType = 85 # MED-WASTE-7 self.lee = Leeway(loglevel=20) objectType = self.objectType self.assertEqual(self.lee.leewayprop[objectType]['Description'], '>>Medical waste, syringes, small') self.assertEqual(self.lee.leewayprop[objectType]['DWSLOPE'], 1.79) def test_leeway_config_object(self): """Check that correct object type is fetched from config""" l = Leeway(loglevel=20) l.set_config('seed:object_type', 'Surf board with person') l.seed_elements(lon=4.5, lat=60, number=100, time=datetime(2015, 1, 1)) objType = l.elements_scheduled.objectType self.assertEqual(l.leewayprop[objType]['Description'], 'Surf board with person') self.assertEqual(l.leewayprop[objType]['OBJKEY'], 'PERSON-POWERED-VESSEL-2') def test_leewayrun(self): """Test the expected Leeway left/right split.""" self.lee = Leeway(loglevel=30) self.objectType = 50 # FISHING-VESSEL-1 self.reader_landmask = reader_global_landmask.Reader(llcrnrlon=3, llcrnrlat=59.8, urcrnrlon=6, urcrnrlat=60.5) self.lee.add_reader([self.reader_landmask]) self.lee.seed_elements(lon=4.5, lat=60, number=100, objectType=self.objectType, time=datetime(2015, 1, 1)) self.lee.fallback_values['x_wind'] = 0 self.lee.fallback_values['y_wind'] = 10 self.lee.fallback_values['x_sea_water_velocity'] = 0 self.lee.fallback_values['y_sea_water_velocity'] = 0 # Check that 7 out of 100 elements strand towards coast self.lee.run(steps=24, time_step=3600) self.assertEqual(self.lee.num_elements_scheduled(), 0) self.assertEqual(self.lee.num_elements_active(), 96) self.assertEqual(self.lee.num_elements_deactivated(), 4) # stranded self.lee.export_ascii('leeway_ascii.txt') os.remove('leeway_ascii.txt')
def test_leewayrun(tmpdir): """Test the expected Leeway left/right split.""" lee = Leeway(loglevel=30) objectType = 50 # FISHING-VESSEL-1 reader_landmask = reader_global_landmask.Reader(extent=[ 3, 59.8, 6, 60.5 ]) lee.add_reader([reader_landmask]) lee.seed_elements(lon=4.5, lat=60, number=100, objectType=objectType, time=datetime(2015, 1, 1)) lee.fallback_values['x_wind'] = 0 lee.fallback_values['y_wind'] = 10 lee.fallback_values['x_sea_water_velocity'] = 0 lee.fallback_values['y_sea_water_velocity'] = 0 # Check that 7 out of 100 elements strand towards coast lee.run(steps=24, time_step=3600) assert lee.num_elements_scheduled() == 0 assert lee.num_elements_active() == 96 assert lee.num_elements_deactivated() == 4 # stranded lee.export_ascii(tmpdir + '/leeway_ascii.txt')
class TestArray(unittest.TestCase): """Tests for Leeway module.""" def setUp(self): self.objectType = 50 # FISHING-VESSEL-1 self.lee = Leeway(loglevel=20) #print self.lee.leewayprop.values()[0] #self.lee = WindBlow(loglevel=0) self.reader_basemap = reader_basemap_landmask.Reader(llcrnrlon=3, llcrnrlat=59, projection='merc', urcrnrlon=6, urcrnrlat=61, resolution='i') self.lee.add_reader([self.reader_basemap]) self.lee.fallback_values['x_wind'] = 0 self.lee.fallback_values['y_wind'] = 10 self.lee.fallback_values['x_sea_water_velocity'] = 0 self.lee.fallback_values['y_sea_water_velocity'] = 0 def test_leewayprop(self): """Check that Leeway properties are properly read.""" objectType = self.objectType self.assertEqual(self.lee.leewayprop[objectType]['Description'], ' Fishing vessel, general (mean values)\n') self.assertEqual(self.lee.leewayprop[objectType]['DWSLOPE'], 2.47) def test_leewayrun(self): """Test the expected Leeway left/right split.""" self.lee.seed_elements(lon=4.5, lat=60, number=100, objectType=self.objectType, time=datetime(2015, 1, 1)) # Check that 7 out of 100 elements strand towards coast self.lee.run(steps=24, time_step=3600) self.assertEqual(self.lee.num_elements_scheduled(), 0) self.assertEqual(self.lee.num_elements_active(), 97) self.assertEqual(self.lee.num_elements_deactivated(), 3) # stranded
class TestArray(unittest.TestCase): """Tests for Leeway module.""" def setUp(self): self.objectType = 50 # FISHING-VESSEL-1 self.lee = Leeway(loglevel=20) #print self.lee.leewayprop.values()[0] #self.lee = WindBlow(loglevel=0) self.reader_basemap = reader_basemap_landmask.Reader( llcrnrlon=3, llcrnrlat=59, projection='merc', urcrnrlon=6, urcrnrlat=61, resolution='i') self.lee.add_reader([self.reader_basemap]) self.lee.fallback_values['x_wind'] = 0 self.lee.fallback_values['y_wind'] = 10 self.lee.fallback_values['x_sea_water_velocity'] = 0 self.lee.fallback_values['y_sea_water_velocity'] = 0 def test_leewayprop(self): """Check that Leeway properties are properly read.""" objectType = self.objectType self.assertEqual(self.lee.leewayprop[objectType] ['Description'], ' Fishing vessel, general (mean values)\n') self.assertEqual(self.lee.leewayprop[objectType]['DWSLOPE'], 2.47) def test_leewayrun(self): """Test the expected Leeway left/right split.""" self.lee.seed_elements(lon=4.5, lat=60, number=100, objectType=self.objectType, time=datetime(2015, 1, 1)) # Check that 7 out of 100 elements strand towards coast self.lee.run(steps=24, time_step=3600) self.assertEqual(self.lee.num_elements_scheduled(), 0) self.assertEqual(self.lee.num_elements_active(), 97) self.assertEqual(self.lee.num_elements_deactivated(), 3) # stranded
def test_leewayrun(tmpdir, test_data): """Test the expected Leeway left/right split.""" lee = Leeway(loglevel=20) object_type = 50 # FISHING-VESSEL-1 reader_landmask = reader_global_landmask.Reader(extent=[ 3, 59.8, 6, 60.5 ]) lee.add_reader([reader_landmask]) lee.seed_cone(lon=[4.5, 4.7], lat=[60.1, 60], number=100, object_type=object_type, time=[datetime(2015, 1, 1, 0), datetime(2015, 1, 1, 6)]) lee.set_config('environment:fallback:x_wind', 0) lee.set_config('environment:fallback:y_wind', 10) lee.set_config('environment:fallback:x_sea_water_velocity', 0) lee.set_config('environment:fallback:y_sea_water_velocity', 0) # Check that 10 out of 100 elements strand towards coast lee.run(steps=24, time_step=3600) assert lee.num_elements_scheduled() == 0 assert lee.num_elements_active() == 88 assert lee.num_elements_deactivated() == 12 # stranded asciif = tmpdir + '/leeway_ascii.txt' lee.export_ascii(asciif) asciitarget = test_data + "/generated/test_leewayrun_export_ascii.txt" import filecmp assert filecmp.cmp(asciif, asciitarget)